From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?VG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+?= To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: - new upstream patch release, fixes CVE-2010-0742 (#598738) and Date: Tue, 09 Jun 2026 12:42:13 GMT Message-ID: <178100893303.1.2832707930526864898.rpms-openssl-9847ab298b6e@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 9847ab298b6e24e33209de611e309e3aaadc2bd9 ICAgICAgICBBIG5ldyBjb21taXQgaGFzIGJlZW4gcHVzaGVkLgoKICAgICAgICBSZXBvICAgOiBy cG1zL29wZW5zc2wKICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAgICAgICAgQ29tbWl0 IDogOTg0N2FiMjk4YjZlMjRlMzMyMDlkZTYxMWUzMDllM2FhYWRjMmJkOQogICAgICAgIEF1dGhv ciA6IFRvbcOhxaEgTXLDoXogPHRtcmF6QGZlZG9yYXByb2plY3Qub3JnPgogICAgICAgIERhdGUg ICA6IDIwMTAtMDYtMDRUMTI6NTI6MjkrMDA6MDAKICAgICAgICBTdGF0cyAgOiArMTI0NjMvLTEy NTY0IGluIDExIGZpbGUocykKICAgICAgICBVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9q ZWN0Lm9yZy9ycG1zL29wZW5zc2wvYy85ODQ3YWIyOThiNmUyNGUzMzIwOWRlNjExZTMwOWUzYWFh ZGMyYmQ5P2JyYW5jaD1yZWJhc2VfNDBiZXRhCgogICAgICAgIExvZzoKICAgICAgICAtIG5ldyB1 cHN0cmVhbSBwYXRjaCByZWxlYXNlLCBmaXhlcyBDVkUtMjAxMC0wNzQyICgjNTk4NzM4KSBhbmQK Q1ZFLTIwMTAtMTYzMyAoIzU5ODczMikKCi0tLQpkaWZmIC0tZ2l0IGEvLmN2c2lnbm9yZSBiLy5j dnNpZ25vcmUKaW5kZXggMzkzMGE5ZC4uZjQ2MjNkNyAxMDA2NDQKLS0tIGEvLmN2c2lnbm9yZQor KysgYi8uY3ZzaWdub3JlCkBAIC0xICsxIEBACi1vcGVuc3NsLTEuMC4wLXVzYS50YXIuYnoyCitv cGVuc3NsLTEuMC4wYS11c2EudGFyLmJ6MgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0 YTMtZmlwc21vZGUucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNtb2RlLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmJmMGE2Li4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjAtYmV0YTMtZmlwc21vZGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAs MCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZW5naW5lL2VuZ19hbGwu Yy5maXBzbW9kZSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzbW9kZQky MDA5LTA3LTAxIDE2OjU1OjU4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMJMjAwOS0wOC0xMSAxNzozNzoxNi4wMDAwMDAwMDAg KzAyMDAKLUBAIC01OCw5ICs1OCwyMyBAQAotIAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNp bmNsdWRlICJlbmdfaW50LmgiCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5l cyh2b2lkKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFy eSgpOwotKwlpZiAoRklQU19tb2RlKCkpIHsKLSsJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1p YyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQotKwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFs aWRhdGVkLgotKwkJICAgVXNlciBpcyBkaXNhbGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBl bmdpbmVzCi0rCQkgICBieSBzZWN1cml0eSBwb2xpY3kuICovCi0rCQlFTkdJTkVfbG9hZF9keW5h bWljKCk7Ci0rCQlyZXR1cm47Ci0rCX0KLSsjZW5kaWYKLSAjaWYgMAotIAkvKiBUaGVyZSdzIG5v IGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXks Ci0gCSAqIGl0IGlzIHRoZSAqb25seSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVu dGF0aW9ucyB0byBiZSBiZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZw L2NfYWxsYy5jLmZpcHNtb2RlIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9jX2FsbGMu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzbW9kZQky MDA3LTA0LTI0IDAxOjQ4OjI4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDA5LTA4LTExIDE3OjQyOjM0LjAwMDAwMDAwMCArMDIw MAotQEAgLTY1LDYgKzY1LDExIEBACi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lk KQotIAl7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgp OwotKwlpZighRklQU19tb2RlKCkpIAotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9O T19ERVMKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7Ci0gCUVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfY2ZiMSgpKTsKLUBAIC0yMTksNCArMjI0LDYxIEBAIHZvaWQgT3BlblNTTF9hZGRf YWxsX2NpcGhlcnModm9pZCkKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2 X2NiYywiQ0FNRUxMSUEyNTYiKTsKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFf MjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CQl9Ci0rCWVsc2UKLSsJCXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2Nm YigpKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOwotKwlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZV9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rCUVW UF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOwotKwlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRlczMiKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGUoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsjZW5k aWYKLSsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2VjYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7Ci0rCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKLSsjaWYgMAotKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF9jdHIoKSk7Ci0rI2VuZGlmCi0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNO X2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEy OF9jYmMsImFlczEyOCIpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xOTJfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkpOwot KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOwotKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9vZmIoKSk7Ci0rI2lmIDAKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y3RyKCkpOwotKyNlbmRpZgotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywi QUVTMTkyIik7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJhZXMxOTIi KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzI1Nl9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2Zi KCkpOwotKyNpZiAwCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsjZW5k aWYKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIpOwotKwlF VlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiYWVzMjU2Iik7Ci0rI2VuZGlmCi0r CQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2 cC9jX2FsbGQuYy5maXBzbW9kZSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvY19hbGxk LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwc21vZGUJ MjAwOS0wNy0wOCAxMDo1MDo1My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9ldnAvY19hbGxkLmMJMjAwOS0wOC0xMSAxNzo1NDowOC4wMDAwMDAwMDAgKzAy MDAKLUBAIC02NCw2ICs2NCwxMSBAQAotIAotIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHMo dm9pZCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnko KTsKLSsJaWYgKCFGSVBTX21vZGUoKSkKLSsJCXsKLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fTUQ0Ci0gCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7Ci0gI2VuZGlmCi1AQCAtMTEwLDUg KzExNSwzMyBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCi0gI2VuZGlmCi0g I2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9PTAotIAlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxw b29sKCkpOwotKyNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJ ewotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19T SEExKQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fc2hhMSwic3NsMy1zaGExIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFX aXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0RT QQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMo U05fZHNhV2l0aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX2RzYVdpdGhTSEExLCJEU1MxIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdp dGhTSEExLCJkc3MxIik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0rCUVW UF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKLSsjZW5kaWYKLSsjZW5kaWYKLSsjaWZuZGVmIE9Q RU5TU0xfTk9fU0hBMjU2Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rCUVWUF9h ZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NI QTUxMgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChF VlBfc2hhNTEyKCkpOwotKyNlbmRpZgotKwkJfQotICNlbmRpZgotIAl9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9vX2luaXQuYy5maXBzbW9kZSBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL29faW5p dC5jLmZpcHNtb2RlCTIwMDktMDgtMTEgMTc6Mjg6MjUuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vb19pbml0LmMJMjAwOS0wOC0xMSAxNzozOTowNi4wMDAw MDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSw0MyBAQAotICNpbmNsdWRlIDxlX29zLmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjaW5jbHVkZSA8ZmNudGwu aD4KLSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUg PHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSsjZGVmaW5lIEZJUFNf TU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiCi0rCi0rc3Rh dGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKLSsJewotKwljaGFyIGJ1ZlsyXSA9ICIwIjsK LSsJaW50IGZkOwotKwkKLSsJaWYgKGdldGVudigiT1BFTlNTTF9GT1JDRV9GSVBTX01PREUiKSAh PSBOVUxMKQotKwkJewotKwkJYnVmWzBdID0gJzEnOwotKwkJfQotKwllbHNlIGlmICgoZmQgPSBv cGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+PSAwKQotKwkJewotKwkJd2hp bGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0r CQljbG9zZShmZCk7Ci0rCQl9Ci0rCS8qIEZhaWx1cmUgcmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3 aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90Ci0rCSAqIHN3aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4g V2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCi0rCSAqIG90aGVyd2lzZS4gCi0rCSAqLwot KwkKLSsJaWYgKGJ1ZlswXSA9PSAnMScpCi0rCQl7Ci0rCQlGSVBTX21vZGVfc2V0KDEpOwotKwkJ fQotKwl9Ci0rI2VuZGlmCi0rCi0gLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9wZW5TU0wgaW5p dGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSAgKiBDdXJyZW50bHkgb25seSBzZXRzIEZJUFMgY2Fs bGJhY2tzCi0gICovCi1AQCAtNzIsNiArMTA5LDcgQEAgdm9pZCBPUEVOU1NMX2luaXRfbGlicmFy eSh2b2lkKQotICNpZmRlZiBDUllQVE9fTURFQlVHCi0gCQlDUllQVE9fbWFsbG9jX2RlYnVnX2lu aXQoKTsKLSAjZW5kaWYKLSsJCWluaXRfZmlwc19tb2RlKCk7Ci0gCQlkb25lID0gMTsKLSAJCX0K LSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbF9hbGdzLmMuZmlw c21vZGUgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsX2FsZ3MuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTMvc3NsL3NzbF9hbGdzLmMuZmlwc21vZGUJMjAwOS0wNy0wOCAxMDo1MDo1My4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfYWxncy5jCTIwMDkt MDgtMTEgMTg6MDE6MTMuMDAwMDAwMDAwICswMjAwCi1AQCAtNjQsNiArNjQsMTIgQEAKLSBpbnQg U1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotIAl7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlP UEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoIUZJUFNfbW9kZSgpKQotKwkJewotKyNlbmRp ZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19j YmMoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci1AQCAtMTE1LDYg KzEyMSw0MCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotIAlFVlBfYWRkX2RpZ2VzdChF VlBfc2hhKCkpOwotIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwotICNlbmRpZgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNpZm5kZWYgT1BFTlNTTF9OT19E RVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLSsjZW5kaWYKLSsjaWZu ZGVmIE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsK LSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzI1Nl9jYmMoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX01ENQotKwkv KiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFDICovCi0rCUVWUF9hZGRf ZGlnZXN0KEVWUF9tZDUoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwic3NsMi1t ZDUiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wzLW1kNSIpOwotKyNlbmRp ZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7 IC8qIFJTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3Ns My1zaGExIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlv bixTTl9zaGExV2l0aFJTQSk7Ci0rI2VuZGlmCi0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB KSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEo KSk7IC8qIERTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdp dGhTSEExLCJEU1MxIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJk c3MxIik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0rCUVWUF9hZGRfZGln ZXN0KEVWUF9lY2RzYSgpKTsKLSsjZW5kaWYKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fQ09NUAotIAkvKiBUaGlzIHdpbGwgaW5pdGlhbGlzZSB0aGUgYnVpbHQtaW4gY29tcHJl c3Npb24gYWxnb3JpdGhtcy4KLSAJICAgVGhlIHZhbHVlIHJldHVybmVkIGlzIGEgU1RBQ0tfT0Yo U1NMX0NPTVApLCBidXQgdGhhdCBjYW4KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWZpcHMu cGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWZpcHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGU1YjZkZTcuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1maXBzLnBhdGNoCisr KyAvZGV2L251bGwKQEAgLTEsMTIxNjQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9D b25maWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4wL0NvbmZpZ3VyZQotLS0tIG9wZW5zc2wtMS4wLjAv Q29uZmlndXJlLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wL0NvbmZpZ3VyZQkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAotQEAgLTY2MCw2ICs2NjAsNyBAQCBteSAkY21sbF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNj Lm8gY21sCi0gbXkgJHByb2Nlc3Nvcj0iIjsKLSBteSAkZGVmYXVsdF9yYW5saWI7Ci0gbXkgJHBl cmw7Ci0rbXkgJGZpcHM9MDsKLSAKLSAKLSAjIEFsbCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2Fi bGVkIGJ5IGRlZmF1bHQgKFJDNSB3YXMgZW5hYmxlZCBiZWZvcmUgMC45LjgpOgotQEAgLTgwNiw2 ICs4MDcsMTAgQEAgUFJPQ0VTU19BUkdTOgotIAkJCX0KLSAJCWVsc2lmICgvXjM4NiQvKQotIAkJ CXsgJHByb2Nlc3Nvcj0zODY7IH0KLSsJCWVsc2lmICgvXmZpcHMkLykKLSsJCQl7Ci0rCQkJJGZp cHM9MTsKLSsJCSAgICAgICAgfQotIAkJZWxzaWYgKC9ecnNhcmVmJC8pCi0gCQkJewotIAkJCSMg Tm8gUlNBcmVmIHN1cHBvcnQgYW55IG1vcmUgc2luY2UgaXQncyBub3QgbmVlZGVkLgotQEAgLTEz NjgsNiArMTM3MywxMSBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiIGlmICghJG5v Ci0gCi0gJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8t bW9udC8pOwotIAotK2lmICgkZmlwcykKLSsJewotKwkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0i I2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7Ci0rCX0KLSsKLSAkY3B1aWRfb2JqPSJtZW1fY2xyLm8i CXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOwotICRkZXNfb2JqPSRkZXNfZW5jCXVubGVz cyAoJGRlc19vYmogPX4gL1wubyQvKTsKLSAkYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29i aiA9fiAvXC5vJC8pOwotQEAgLTE1MzUsNiArMTU0NSwxMCBAQCB3aGlsZSAoPElOPikKLSAJcy9e TElCS1JCNT0uKi9MSUJLUkI1PSR3aXRoYXJnc3sia3JiNS1saWIifS87Ci0gCXMvXkxJQlpMSUI9 LiovTElCWkxJQj0kd2l0aGFyZ3N7InpsaWItbGliIn0vOwotIAlzL15aTElCX0lOQ0xVREU9Liov WkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOwotKwlpZiAoJGZpcHMpCi0r CQl7Ci0rCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKLSsJCX0KLSAJcy9eU0hMSUJfVEFSR0VUPS4q L1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87Ci0gCXMvXlNITElCX01BUks9LiovU0hMSUJf TUFSSz0kc2hhcmVkX21hcmsvOwotIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChT SEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JmL2JmX3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2JmL2JmX3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JmL2JmX3NrZXkuYy5m aXBzCTIwMDgtMTEtMTIgMDQ6NTc6NTIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vYmYvYmZfc2tleS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw Ci1AQCAtNTksMTAgKzU5LDE1IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0 cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Jsb3dmaXNoLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5jbHVkZSAiYmZfbG9jbC5oIgotICNpbmNsdWRlICJiZl9w aS5oIgotIAotLXZvaWQgQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSkKLStGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChCRikKLSAJewot IAlpbnQgaTsKLSAJQkZfTE9ORyAqcCxyaSxpblsyXTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9iZi9ibG93Zmlz aC5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYvYmxvd2Zpc2guaC5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYv Ymxvd2Zpc2guaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNCw3 ICsxMDQsOSBAQCB0eXBlZGVmIHN0cnVjdCBiZl9rZXlfc3QKLSAJQkZfTE9ORyBTWzQqMjU2XTsK LSAJfSBCRl9LRVk7Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBwcml2YXRl X0JGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRh dGEpOwotKyNlbmRpZgotIHZvaWQgQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gCi0gdm9pZCBCRl9lbmNyeXB0KEJGX0xPTkcgKmRh dGEsY29uc3QgQkZfS0VZICprZXkpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4v Ym4uaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL2JuLmgKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9ibi9ibi5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9ibi5oCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCi1AQCAtNTQwLDYgKzU0MCwxNyBAQCBpbnQJQk5faXNfcHJpbWVfZXgoY29u c3QgQklHTlVNICpwLGludCBuCi0gaW50CUJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KGNvbnN0IEJJ R05VTSAqcCxpbnQgbmNoZWNrcywgQk5fQ1RYICpjdHgsCi0gCQlpbnQgZG9fdHJpYWxfZGl2aXNp b24sIEJOX0dFTkNCICpjYik7Ci0gCi0raW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAq WHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpOwotKwotK2ludCBCTl9YOTMx X2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0rCQkJ Y29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAot KwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYik7Ci0raW50IEJO X1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAy LAotKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwLAot KwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCi0rCQkJQk5fR0VOQ0IgKmNiKTsKLSsK LSBCTl9NT05UX0NUWCAqQk5fTU9OVF9DVFhfbmV3KHZvaWQgKTsKLSB2b2lkIEJOX01PTlRfQ1RY X2luaXQoQk5fTU9OVF9DVFggKmN0eCk7Ci0gaW50IEJOX21vZF9tdWxfbW9udGdvbWVyeShCSUdO VU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYiwKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2JuL2JuX3g5MzFwLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9i bl94OTMxcC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vYm5feDkzMXAuYy5maXBzCTIw MTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlw dG8vYm4vYm5feDkzMXAuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAg LTAsMCArMSwyNzIgQEAKLSsvKiBibl94OTMxcC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJv amVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1 IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICog VGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBF cmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20p LgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSsKLSsvKiBYOS4zMSByb3V0aW5lcyBmb3IgcHJpbWUgZGVyaXZhdGlvbiAqLwotKwot Ky8qIFg5LjMxIHByaW1lIGRlcml2YXRpb24uIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUg cHJpbWVzIHBpCi0rICogKHAxLCBwMiwgcTEsIHEyKSBmcm9tIGEgcGFyYW1ldGVyIFhwaSBieSBj aGVja2luZyBzdWNjZXNzaXZlIG9kZAotKyAqIGludGVnZXJzLgotKyAqLwotKwotK3N0YXRpYyBp bnQgYm5feDkzMV9kZXJpdmVfcGkoQklHTlVNICpwaSwgY29uc3QgQklHTlVNICpYcGksIEJOX0NU WCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgaSA9IDA7Ci0rCWlmICghQk5f Y29weShwaSwgWHBpKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUJOX2lzX29kZChwaSkgJiYgIUJO X2FkZF93b3JkKHBpLCAxKSkKLSsJCXJldHVybiAwOwotKwlmb3IoOzspCi0rCQl7Ci0rCQlpKys7 Ci0rCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKTsKLSsJCS8qIE5CIDI3IE1SIGlzIHNwZWNpZmlj ZWQgaW4gWDkuMzEgKi8KLSsJCWlmIChCTl9pc19wcmltZV9mYXN0dGVzdF9leChwaSwgMjcsIGN0 eCwgMSwgY2IpKQotKwkJCWJyZWFrOwotKwkJaWYgKCFCTl9hZGRfd29yZChwaSwgMikpCi0rCQkJ cmV0dXJuIDA7Ci0rCQl9Ci0rCUJOX0dFTkNCX2NhbGwoY2IsIDIsIGkpOwotKwlyZXR1cm4gMTsK LSsJfQotKwotKy8qIFRoaXMgaXMgdGhlIG1haW4gWDkuMzEgcHJpbWUgZGVyaXZhdGlvbiBmdW5j dGlvbi4gRnJvbSBwYXJhbWV0ZXJzCi0rICogWHAxLCBYcDIgYW5kIFhwIGRlcml2ZSB0aGUgcHJp bWUgcC4gSWYgdGhlIHBhcmFtZXRlcnMgcDEgb3IgcDIgYXJlCi0rICogbm90IE5VTEwgdGhleSB3 aWxsIGJlIHJldHVybmVkIHRvbzogdGhpcyBpcyBuZWVkZWQgZm9yIHRlc3RpbmcuCi0rICovCi0r Ci0raW50IEJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklH TlVNICpwMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwLCBjb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwgQk5fR0VOQ0Ig KmNiKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlCSUdOVU0gKnQsICpwMXAyLCAqcG0xOwot KwotKwkvKiBPbmx5IGV2ZW4gZSBzdXBwb3J0ZWQgKi8KLSsJaWYgKCFCTl9pc19vZGQoZSkpCi0r CQlyZXR1cm4gMDsKLSsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCWlmICghcDEpCi0rCQlwMSA9 IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKCFwMikKLSsJCXAyID0gQk5fQ1RYX2dldChjdHgp OwotKwotKwl0ID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlwMXAyID0gQk5fQ1RYX2dldChjdHgp OwotKwotKwlwbTEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCWlmICghYm5feDkzMV9kZXJpdmVf cGkocDEsIFhwMSwgY3R4LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFibl94OTMxX2Rl cml2ZV9waShwMiwgWHAyLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX211 bChwMXAyLCBwMSwgcDIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogRmlyc3Qgc2V0IHAg dG8gdmFsdWUgb2YgUnAgKi8KLSsKLSsJaWYgKCFCTl9tb2RfaW52ZXJzZShwLCBwMiwgcDEsIGN0 eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9tdWwocCwgcCwgcDIsIGN0eCkpCi0rCQln b3RvIGVycjsKLSsKLSsJaWYgKCFCTl9tb2RfaW52ZXJzZSh0LCBwMSwgcDIsIGN0eCkpCi0rCQln b3RvIGVycjsKLSsKLSsJaWYgKCFCTl9tdWwodCwgdCwgcDEsIGN0eCkpCi0rCQlnb3RvIGVycjsK LSsKLSsJaWYgKCFCTl9zdWIocCwgcCwgdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKHAtPm5l ZyAmJiAhQk5fYWRkKHAsIHAsIHAxcDIpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIHAgbm93IGVx dWFscyBScCAqLwotKwotKwlpZiAoIUJOX21vZF9zdWIocCwgcCwgWHAsIHAxcDIsIGN0eCkpCi0r CQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9hZGQocCwgcCwgWHApKQotKwkJZ290byBlcnI7Ci0r Ci0rCS8qIHAgbm93IGVxdWFscyBZcDAgKi8KLSsKLSsJZm9yICg7OykKLSsJCXsKLSsJCWludCBp ID0gMTsKLSsJCUJOX0dFTkNCX2NhbGwoY2IsIDAsIGkrKyk7Ci0rCQlpZiAoIUJOX2NvcHkocG0x LCBwKSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmICghQk5fc3ViX3dvcmQocG0xLCAxKSkKLSsJCQln b3RvIGVycjsKLSsJCWlmICghQk5fZ2NkKHQsIHBtMSwgZSwgY3R4KSkKLSsJCQlnb3RvIGVycjsK LSsJCWlmIChCTl9pc19vbmUodCkKLSsJCS8qIFg5LjMxIHNwZWNpZmllcyA4IE1SIGFuZCAxIEx1 Y2FzIHRlc3Qgb3IgYW55IHByaW1lIHRlc3QKLSsJCSAqIG9mZmVyaW5nIHNpbWlsYXIgb3IgYmV0 dGVyIGd1YXJhbnRlZXMgNTAgTVIgaXMgY29uc2lkZXJhYmx5IAotKwkJICogYmV0dGVyLgotKwkJ ICovCi0rCQkJJiYgQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocCwgNTAsIGN0eCwgMSwgY2IpKQot KwkJCWJyZWFrOwotKwkJaWYgKCFCTl9hZGQocCwgcCwgcDFwMikpCi0rCQkJZ290byBlcnI7Ci0r CQl9Ci0rCi0rCUJOX0dFTkNCX2NhbGwoY2IsIDMsIDApOwotKwotKwlyZXQgPSAxOwotKwotKwll cnI6Ci0rCi0rCUJOX0NUWF9lbmQoY3R4KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKy8q IEdlbmVyYXRlIHBhaXIgb2YgcGFyYW10ZXJzIFhwLCBYcSBmb3IgWDkuMzEgcHJpbWUgZ2VuZXJh dGlvbi4KLSsgKiBOb3RlOiBuYml0cyBwYXJhbXRlciBpcyBzdW0gb2YgbnVtYmVyIG9mIGJpdHMg aW4gYm90aC4KLSsgKi8KLSsKLStpbnQgQk5fWDkzMV9nZW5lcmF0ZV9YcHEoQklHTlVNICpYcCwg QklHTlVNICpYcSwgaW50IG5iaXRzLCBCTl9DVFggKmN0eCkKLSsJewotKwlCSUdOVU0gKnQ7Ci0r CWludCBpOwotKwkvKiBOdW1iZXIgb2YgYml0cyBmb3IgZWFjaCBwcmltZSBpcyBvZiB0aGUgZm9y bQotKwkgKiA1MTIrMTI4cyBmb3IgcyA9IDAsIDEsIC4uLgotKwkgKi8KLSsJaWYgKChuYml0cyA8 IDEwMjQpIHx8IChuYml0cyAmIDB4ZmYpKQotKwkJcmV0dXJuIDA7Ci0rCW5iaXRzID4+PSAxOwot KwkvKiBUaGUgcmFuZG9tIHZhbHVlIFhwIG11c3QgYmUgYmV0d2VlbiBzcXJ0KDIpICogMl4obmJp dHMtMSkgYW5kCi0rCSAqIDJebmJpdHMgLSAxLiBCeSBzZXR0aW5nIHRoZSB0b3AgdHdvIGJpdHMg d2UgZW5zdXJlIHRoYXQgdGhlIGxvd2VyCi0rCSAqIGJvdW5kIGlzIGV4Y2VlZGVkLgotKwkgKi8K LSsJaWYgKCFCTl9yYW5kKFhwLCBuYml0cywgMSwgMCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJQk5f Q1RYX3N0YXJ0KGN0eCk7Ci0rCXQgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCWZvciAoaSA9IDA7 IGkgPCAxMDAwOyBpKyspCi0rCQl7Ci0rCQlpZiAoIUJOX3JhbmQoWHEsIG5iaXRzLCAxLCAwKSkK LSsJCQlyZXR1cm4gMDsKLSsJCS8qIENoZWNrIHRoYXQgfFhwIC0gWHF8ID4gMl4obmJpdHMgLSAx MDApICovCi0rCQlCTl9zdWIodCwgWHAsIFhxKTsKLSsJCWlmIChCTl9udW1fYml0cyh0KSA+IChu Yml0cyAtIDEwMCkpCi0rCQkJYnJlYWs7Ci0rCQl9Ci0rCi0rCUJOX0NUWF9lbmQoY3R4KTsKLSsK LSsJaWYgKGkgPCAxMDAwKQotKwkJcmV0dXJuIDE7Ci0rCi0rCXJldHVybiAwOwotKwotKwl9Ci0r Ci0rLyogR2VuZXJhdGUgcHJpbWVzIHVzaW5nIFg5LjMxIGFsZ29yaXRobS4gT2YgdGhlIHZhbHVl cyBwLCBwMSwgcDIsIFhwMQotKyAqIGFuZCBYcDIgb25seSAncCcgbmVlZHMgdG8gYmUgbm9uLU5V TEwuIElmIGFueSBvZiB0aGUgb3RoZXJzIGFyZSBub3QgTlVMTAotKyAqIHRoZSByZWxldmFudCBw YXJhbWV0ZXIgd2lsbCBiZSBzdG9yZWQgaW4gaXQuCi0rICoKLSsgKiBEdWUgdG8gdGhlIGZhY3Qg dGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAtIDEwMCkgbXVzdCBiZSBzYXRpc2ZpZWQgWHAgYW5k IFhxCi0rICogYXJlIGdlbmVyYXRlZCB1c2luZyB0aGUgcHJldmlvdXMgZnVuY3Rpb24gYW5kIHN1 cHBsaWVkIGFzIGlucHV0LgotKyAqLwotKwotK2ludCBCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4 KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKLSsJCQlCSUdOVU0gKlhwMSwgQklH TlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJO X0NUWCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJ Qk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCWlmICghWHAxKQotKwkJWHAxID0gQk5fQ1RYX2dldChjdHgp OwotKwlpZiAoIVhwMikKLSsJCVhwMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKCFCTl9y YW5kKFhwMSwgMTAxLCAwLCAwKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghQk5fcmFuZChYcDIs IDEwMSwgMCwgMCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1l X2V4KHAsIHAxLCBwMiwgWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlCTl9DVFhfZW5kKGN0eCk7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCi0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL01h a2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vTWFrZWZpbGUKLS0tLSBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ibi9NYWtlZmlsZS5maXBzCTIwMDgtMTEtMTIgMDk6MTk6MDIuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vTWFrZWZpbGUJMjAxMC0wMy0z MCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0yNiwxMyArMjYsMTMgQEAgTElCU1JDPQli bl9hZGQuYyBibl9kaXYuYyBibl9leHAuYyBibl9saQotIAlibl9wcmludC5jIGJuX3JhbmQuYyBi bl9zaGlmdC5jIGJuX3dvcmQuYyBibl9ibGluZC5jIFwKLSAJYm5fa3Jvbi5jIGJuX3NxcnQuYyBi bl9nY2QuYyBibl9wcmltZS5jIGJuX2Vyci5jIGJuX3Nxci5jIGJuX2FzbS5jIFwKLSAJYm5fcmVj cC5jIGJuX21vbnQuYyBibl9tcGkuYyBibl9leHAyLmMgYm5fZ2YybS5jIGJuX25pc3QuYyBcCi0t CWJuX2RlcHIuYyBibl9jb25zdC5jCi0rCWJuX2RlcHIuYyBibl9jb25zdC5jIGJuX3g5MzFwLmMK LSAKLSBMSUJPQko9CWJuX2FkZC5vIGJuX2Rpdi5vIGJuX2V4cC5vIGJuX2xpYi5vIGJuX2N0eC5v IGJuX211bC5vIGJuX21vZC5vIFwKLSAJYm5fcHJpbnQubyBibl9yYW5kLm8gYm5fc2hpZnQubyBi bl93b3JkLm8gYm5fYmxpbmQubyBcCi0gCWJuX2tyb24ubyBibl9zcXJ0Lm8gYm5fZ2NkLm8gYm5f cHJpbWUubyBibl9lcnIubyBibl9zcXIubyAkKEJOX0FTTSkgXAotIAlibl9yZWNwLm8gYm5fbW9u dC5vIGJuX21waS5vIGJuX2V4cDIubyBibl9nZjJtLm8gYm5fbmlzdC5vIFwKLS0JYm5fZGVwci5v IGJuX2NvbnN0Lm8KLSsJYm5fZGVwci5vIGJuX2NvbnN0Lm8gYm5feDkzMXAubwotIAotIFNSQz0g JChMSUJTUkMpCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9hc20v Y21sbC14ODYucGwuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14 ODYucGwKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYucGwu ZmlwcwkyMDA5LTA0LTA2IDE2OjI1OjAyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAw MDAwMDAwMCArMDIwMAotQEAgLTcyMiwxMiArNzIyLDE1IEBAIG15ICRiaWFzPWludChAVFswXSk/ c2hpZnQoQFQpOjA7Ci0gfQotICZmdW5jdGlvbl9lbmQoIkNhbWVsbGlhX0VrZXlnZW4iKTsKLSAK LSskc2V0a2V5ZnVuYyA9ICJDYW1lbGxpYV9zZXRfa2V5IjsKLSskc2V0a2V5ZnVuYyA9ICJwcml2 YXRlX0NhbWVsbGlhX3NldF9rZXkiIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKLSsKLSBpZiAoJE9Q RU5TU0wpIHsKLSAjIGludCBDYW1lbGxpYV9zZXRfa2V5ICgKLSAjCQljb25zdCB1bnNpZ25lZCBj aGFyICp1c2VyS2V5LAotICMJCWludCBiaXRzLAotICMJCUNBTUVMTElBX0tFWSAqa2V5KQotLSZm dW5jdGlvbl9iZWdpbl9CKCJDYW1lbGxpYV9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2JlZ2luX0Io JHNldGtleWZ1bmMpOwotIAkmcHVzaAkoImVieCIpOwotIAkmbW92CSgiZWN4Iiwmd3BhcmFtKDAp KTsJIyBwdWxsIGFyZ3VtZW50cwotIAkmbW92CSgiZWJ4Iiwmd3BhcmFtKDEpKTsKLUBAIC03NjAs NyArNzYzLDcgQEAgaWYgKCRPUEVOU1NMKSB7Ci0gJnNldF9sYWJlbCgiZG9uZSIsNCk7Ci0gCSZw b3AJKCJlYngiKTsKLSAJJnJldAkoKTsKLS0mZnVuY3Rpb25fZW5kX0IoIkNhbWVsbGlhX3NldF9r ZXkiKTsKLSsmZnVuY3Rpb25fZW5kX0IoJHNldGtleWZ1bmMpOwotIH0KLSAKLSBAU0JPWD0oCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oLmZpcHMgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAotLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmgJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC04OCw2ICs4OCwxMSBAQCBz dHJ1Y3QgY2FtZWxsaWFfa2V5X3N0IAotIAl9OwotIHR5cGVkZWYgc3RydWN0IGNhbWVsbGlhX2tl eV9zdCBDQU1FTExJQV9LRVk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRl X0NhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50 IGJpdHMsCi0rCUNBTUVMTElBX0tFWSAqa2V5KTsKLSsjZW5kaWYKLSsKLSBpbnQgQ2FtZWxsaWFf c2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAJ Q0FNRUxMSUFfS0VZICprZXkpOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2Ft ZWxsaWEvY21sbF9mYmxrLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jbWxs X2ZibGsuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5jLmZp cHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAotQEAgLTAsMCArMSw2OCBAQAotKy8qIGNyeXB0by9jYW1lbGxpYS9jYW1lbGxpYV9t aXNjLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqLwotKyAKLSsjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+Ci0rI2luY2x1ZGUgImNt bGxfbG9jbC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotK2ludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVz ZXJLZXksIGNvbnN0IGludCBiaXRzLAotKwlDQU1FTExJQV9LRVkgKmtleSkKLSsJewotKwlpZiAo RklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9SVChDQU1FTExJQSkKLSsJcmV0dXJuIHByaXZh dGVfQ2FtZWxsaWFfc2V0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwotKwl9Ci0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jCi0tLS0gb3BlbnNzbC0xLjAu MC9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMuZmlwcwkyMDA4LTEwLTI4IDEzOjEzOjUyLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlz Yy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtNTIsMTEgKzUyLDIw IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9j YW1lbGxpYS5oPgotICNpbmNsdWRlICJjbWxsX2xvY2wuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9j cnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNlbmRpZgotIAotIGNvbnN0IGNoYXIgQ0FNRUxMSUFfdmVyc2lvbltdPSJDQU1FTExJQSIg T1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJp dmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0 IGludCBiaXRzLAotKwlDQU1FTExJQV9LRVkgKmtleSkKLSsjZWxzZQotIGludCBDYW1lbGxpYV9z ZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAlD QU1FTExJQV9LRVkgKmtleSkKLSsjZW5kaWYKLSAJewotIAlpZighdXNlcktleSB8fCAha2V5KQot IAkJcmV0dXJuIC0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvTWFr ZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZQotLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMJMjAwOC0xMi0yMyAxMjoz MzowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9N YWtlZmlsZQkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTIzLDkgKzIz LDkgQEAgQVBQUz0KLSAKLSBMSUI9JChUT1ApL2xpYmNyeXB0by5hCi0gTElCU1JDPWNhbWVsbGlh LmMgY21sbF9taXNjLmMgY21sbF9lY2IuYyBjbWxsX2NiYy5jIGNtbGxfb2ZiLmMgXAotLQkgICBj bWxsX2NmYi5jIGNtbGxfY3RyLmMgCi0rCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIuYyBjbWxsX2Zi bGsuYwotIAotLUxJQk9CSj0gY21sbF9lY2IubyBjbWxsX29mYi5vIGNtbGxfY2ZiLm8gY21sbF9j dHIubyAkKENNTExfRU5DKQotK0xJQk9CSj0gY21sbF9lY2IubyBjbWxsX29mYi5vIGNtbGxfY2Zi Lm8gY21sbF9jdHIubyAkKENNTExfRU5DKSBjbWxsX2ZibGsubwotIAotIFNSQz0gJChMSUJTUkMp Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nhc3QuaC5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2Nhc3QvY2FzdC5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2Fz dC9jYXN0LmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2Nhc3QvY2FzdC5oCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAw MDAwICswMjAwCi1AQCAtODMsNyArODMsOSBAQCB0eXBlZGVmIHN0cnVjdCBjYXN0X2tleV9zdAot IAlpbnQgc2hvcnRfa2V5OwkvKiBVc2UgcmVkdWNlZCByb3VuZHMgZm9yIHNob3J0IGtleSAqLwot IAl9IENBU1RfS0VZOwotIAotLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0 ZV9DQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSk7Ci0rI2VuZGlmCi0gdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50 IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gdm9pZCBDQVNUX2VjYl9lbmNyeXB0 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IENBU1Rf S0VZICprZXksCi0gCQkgICAgICBpbnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2Nhc3QvY19za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nfc2tleS5j Ci0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9jX3NrZXkuYy5maXBzCTIwMDAtMDYtMDMg MTY6MTM6MzUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9j X3NrZXkuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTU3LDYgKzU3 LDExIEBACi0gICovCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvY2FzdC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgImNhc3RfbGNsLmgiCi0gI2luY2x1ZGUg ImNhc3Rfcy5oIgotIAotQEAgLTcyLDcgKzc3LDcgQEAKLSAjZGVmaW5lIFM2IENBU1RfU190YWJs ZTYKLSAjZGVmaW5lIFM3IENBU1RfU190YWJsZTcKLSAKLS12b2lkIENBU1Rfc2V0X2tleShDQVNU X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotK0ZJUFNfTk9O X0ZJUFNfVkNJUEhFUl9Jbml0KENBU1QpCi0gCXsKLSAJQ0FTVF9MT05HIHhbMTZdOwotIAlDQVNU X0xPTkcgelsxNl07Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jcnlwdG8uaC5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NyeXB0by5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8v Y3J5cHRvLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2NyeXB0by5oCTIwMTAtMDMtMzAgMTA6MzY6MDYuMDAwMDAwMDAw ICswMjAwCi1AQCAtNTQ3LDEyICs1NDcsNzAgQEAgdW5zaWduZWQgbG9uZyAqT1BFTlNTTF9pYTMy Y2FwX2xvYyh2b2lkKQotICNkZWZpbmUgT1BFTlNTTF9pYTMyY2FwICgqKE9QRU5TU0xfaWEzMmNh cF9sb2MoKSkpCi0gaW50IE9QRU5TU0xfaXNzZXJ2aWNlKHZvaWQpOwotIAotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjZGVmaW5lIEZJUFNfRVJST1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUo X19GSUxFX18sIF9fTElORV9fLCBcCi0rCQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBh bGdvcml0aG0gZXJyb3IgaWdub3JlZCIpOwotKwotKyNkZWZpbmUgRklQU19CQURfQUJPUlQoYWxn KSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotKwkJI2FsZyAiIEFsZ29yaXRobSBm b3JiaWRkZW4gaW4gRklQUyBtb2RlIik7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQU19TVFJJQ1QK LSsjZGVmaW5lIEZJUFNfQkFEX0FMR09SSVRITShhbGcpIEZJUFNfQkFEX0FCT1JUKGFsZykKLSsj ZWxzZQotKyNkZWZpbmUgRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAotKwl7IFwKLSsJRklQU2Vy cihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsgXAotKwlFUlJfYWRk X2Vycm9yX2RhdGEoMiwgIkFsZ29yaXRobT0iLCAjYWxnKTsgXAotKwlyZXR1cm4gMDsgXAotKwl9 Ci0rI2VuZGlmCi0rCi0rLyogTG93IGxldmVsIGRpZ2VzdCBBUEkgYmxvY2tpbmcgbWFjcm8gKi8K LSsKLSsjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKLSsJaW50IGFsZyMjX0lu aXQoYWxnIyNfQ1RYICpjKSBcCi0rCQl7IFwKLSsJCWlmIChGSVBTX21vZGUoKSkgXAotKwkJCUZJ UFNfQkFEX0FMR09SSVRITShhbGcpIFwKLSsJCXJldHVybiBwcml2YXRlXyMjYWxnIyNfSW5pdChj KTsgXAotKwkJfSBcCi0rCWludCBwcml2YXRlXyMjYWxnIyNfSW5pdChhbGcjI19DVFggKmMpCi0r Ci0rLyogRm9yIGNpcGhlcnMgdGhlIEFQSSBvZnRlbiB2YXJpZXMgZnJvbSBjaXBoZXIgdG8gY2lw aGVyIGFuZCBlYWNoIG5lZWRzIHRvCi0rICogYmUgdHJlYXRlZCBhcyBhIHNwZWNpYWwgY2FzZS4g VmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXJzIChCbG93ZmlzaCwgUkM0LAotKyAqIENBU1QpIGhv d2V2ZXIgYXJlIHZlcnkgc2ltaWxhciBhbmQgY2FuIHVzZSBhIGJsb2NraW5nIG1hY3JvLgotKyAq LwotKwotKyNkZWZpbmUgRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoYWxnKSBcCi0rCXZvaWQg YWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSkgXAotKwkJeyBcCi0rCQlpZiAoRklQU19tb2RlKCkpIFwKLSsJCQlGSVBTX0JBRF9B Qk9SVChhbGcpIFwKLSsJCXByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGtleSwgbGVuLCBkYXRhKTsg XAotKwkJfSBcCi0rCXZvaWQgcHJpdmF0ZV8jI2FsZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXks IGludCBsZW4sIFwKLSsJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rCi0rI2Vsc2UK LSsKLSsjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAotKwl2b2lkIGFs ZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEpCi0rCi0rI2RlZmluZSBGSVBTX05PTl9GSVBTX01EX0luaXQoYWxnKSBcCi0rCWludCBh bGcjI19Jbml0KGFsZyMjX0NUWCAqYykgCi0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMg Ki8KLSsKLSAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMg YXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0g ICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3Jp cHQgaXMgbmV4dCBydW4uCi0gICovCi0gdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lk KTsKLSAKLSsjZGVmaW5lIE9QRU5TU0xfSEFWRV9JTklUCTEKLSt2b2lkIE9QRU5TU0xfaW5pdF9s aWJyYXJ5KHZvaWQpOwotKwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9u cy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZXJyLmMK LS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaF9lcnIuYy5maXBzCTIwMDYtMTEtMjEgMjI6 Mjk6MzcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZXJy LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC03Myw2ICs3Myw4IEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhESF9G X0NPTVBVVEVfS0VZKSwJIkNPTVBVVEVfS0VZIn0sCi0ge0VSUl9GVU5DKERIX0ZfREhQQVJBTVNf UFJJTlRfRlApLAkiREhwYXJhbXNfcHJpbnRfZnAifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9CVUlM VElOX0dFTlBBUkFNUyksCSJESF9CVUlMVElOX0dFTlBBUkFNUyJ9LAotK3tFUlJfRlVOQyhESF9G X0RIX0NPTVBVVEVfS0VZKSwJIkRIX2NvbXB1dGVfa2V5In0sCi0re0VSUl9GVU5DKERIX0ZfREhf R0VORVJBVEVfS0VZKSwJIkRIX2dlbmVyYXRlX2tleSJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX05F V19NRVRIT0QpLAkiREhfbmV3X21ldGhvZCJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX1BBUkFNX0RF Q09ERSksCSJESF9QQVJBTV9ERUNPREUifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9QUklWX0RFQ09E RSksCSJESF9QUklWX0RFQ09ERSJ9LAotQEAgLTk0LDYgKzk2LDcgQEAgc3RhdGljIEVSUl9TVFJJ TkdfREFUQSBESF9zdHJfcmVhc29uc1tdPQotIHtFUlJfUkVBU09OKERIX1JfQk5fRVJST1IpICAg ICAgICAgICAgICAgLCJibiBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERIX1JfREVDT0RFX0VSUk9S KSAgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihESF9SX0lOVkFMSURf UFVCS0VZKSAgICAgICAgICwiaW52YWxpZCBwdWJsaWMga2V5In0sCi0re0VSUl9SRUFTT04oREhf Ul9LRVlfU0laRV9UT09fU01BTEwpICAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAotIHtFUlJf UkVBU09OKERIX1JfS0VZU19OT1RfU0VUKSAgICAgICAgICAgLCJrZXlzIG5vdCBzZXQifSwKLSB7 RVJSX1JFQVNPTihESF9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgICwibW9kdWx1cyB0b28gbGFy Z2UifSwKLSB7RVJSX1JFQVNPTihESF9SX05PX1BBUkFNRVRFUlNfU0VUKSAgICAgICwibm8gcGFy YW1ldGVycyBzZXQifSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2dlbi5j LmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIwMDUtMDQtMjYgMjA6NTM6MTUuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02NSw2ICs2NSwxMCBAQAotICNpbmNsdWRlICJjcnlw dGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZGgu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBpbnQgZGhfYnVpbHRp bl9nZW5wYXJhbXMoREggKnJldCwgaW50IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwgQk5fR0VO Q0IgKmNiKTsKLSAKLUBAIC0xMDYsNiArMTEwLDIwIEBAIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9n ZW5wYXJhbXMoREggKnJldCwKLSAJaW50IGcsb2s9IC0xOwotIAlCTl9DVFggKmN0eD1OVUxMOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJaWYgKEZJUFNfbW9kZSgp ICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7 Ci0rCQlESGVycihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBESF9SX0tFWV9TSVpFX1RPT19T TUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4PUJOX0NUWF9uZXco KTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZGgvZGguaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoLmguZmlwcwkyMDEw LTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2RoL2RoLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC03Nyw2ICs3 Nyw4IEBACi0gIyBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCi0gI2Vu ZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0r Ci0gI2RlZmluZSBESF9GTEFHX0NBQ0hFX01PTlRfUCAgICAgMHgwMQotICNkZWZpbmUgREhfRkxB R19OT19FWFBfQ09OU1RUSU1FIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4g REgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0 aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKLUBAIC0yNDEsNiArMjQzLDggQEAgdm9pZCBFUlJf bG9hZF9ESF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgREhfRl9HRU5FUkFURV9QQVJBTUVURVJT CQkJIDEwNAotICNkZWZpbmUgREhfRl9QS0VZX0RIX0RFUklWRQkJCQkgMTEyCi0gI2RlZmluZSBE SF9GX1BLRVlfREhfS0VZR0VOCQkJCSAxMTMKLSsjZGVmaW5lIERIX0ZfREhfQ09NUFVURV9LRVkJ CQkJIDExNAotKyNkZWZpbmUgREhfRl9ESF9HRU5FUkFURV9LRVkJCQkgMTE1Ci0gCi0gLyogUmVh c29uIGNvZGVzLiAqLwotICNkZWZpbmUgREhfUl9CQURfR0VORVJBVE9SCQkJCSAxMDEKLUBAIC0y NTMsNiArMjU3LDcgQEAgdm9pZCBFUlJfbG9hZF9ESF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUg REhfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3Ci0gI2RlZmluZSBESF9SX05PX1BSSVZBVEVf VkFMVUUJCQkJIDEwMAotICNkZWZpbmUgREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkg MTA1Ci0rI2RlZmluZSBESF9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCQkgMTEwCi0gCi0gI2lmZGVm ICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2tl eS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfa2V5LmMKLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMDctMDMtMjggMDI6MTU6MjMuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MSw2ICs2MSw5IEBACi0gI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5z c2wvZGguaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNlbmRpZgotIAotIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Ci0gc3RhdGlj IGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tl eSwgREggKmRoKTsKLUBAIC0xMDcsNiArMTEwLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5 KERIICpkaCkKLSAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLSAJQklHTlVNICpwdWJfa2V5PU5V TEwsKnByaXZfa2V5PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19t b2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpF X1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4ID0gQk5f Q1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAotQEAgLTE4NCw2ICsx OTUsMTMgQEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQotIAkJREhl cnIoREhfRl9DT01QVVRFX0tFWSxESF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLSAJCWdvdG8gZXJy OwotIAkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9u dW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7 Ci0rCQlESGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0r CQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJY3R4ID0gQk5fQ1RYX25ldygpOwotIAlp ZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotQEAgLTI1MSw2ICsyNjksOSBAQCBzdGF0aWMgaW50 IGRoX2JuX21vZF9leHAoY29uc3QgREggKmRoLCBCCi0gCi0gc3RhdGljIGludCBkaF9pbml0KERI ICpkaCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygp OwotKyNlbmRpZgotIAlkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVy bigxKTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2FfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMJMjAwOC0xMi0yNiAxODoxNzoyMS4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtNzcsOCArNzcsMTIgQEAKLSAjaW5jbHVkZSAi Y3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotICNpbmNsdWRlICJkc2FfbG9jbC5o IgotIAotIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMs Ci1AQCAtMTI2LDYgKzEzMCwyMSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQs IHNpemVfCi0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCXVuc2lnbmVkIGludCBoPTI7Ci0gCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewot KwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sCi0rCQkgICAgRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIGdvdG8gZXJyOwotKwkgICAgfQotKwotKwlp ZiAoRklQU19tb2RlKCkgJiYgKGJpdHMgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOLCBEU0FfUl9L RVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlm IChxc2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xF TkdUSCAmJgotIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCi0gCQkvKiBpbnZh bGlkIHEgc2l6ZSAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYS5oLmZp cHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlw dG8vZHNhL2RzYS5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAw MDAwMDAgKzAyMDAKLUBAIC04OCw2ICs4OCw4IEBACi0gIyBkZWZpbmUgT1BFTlNTTF9EU0FfTUFY X01PRFVMVVNfQklUUwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9EU0FfRklQ U19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERTQV9GTEFHX0NBQ0hFX01PTlRf UAkweDAxCi0gI2RlZmluZSBEU0FfRkxBR19OT19FWFBfQ09OU1RUSU1FICAgICAgIDB4MDIgLyog bmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3Rh bnQgdGltZQotQEAgLTk3LDYgKzk5LDIxIEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogYmUgdXNlZCBmb3IgYWxsIGV4cG9uZW50cy4KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAKLSsvKiBJZiB0aGlz IGZsYWcgaXMgc2V0IHRoZSBEU0EgbWV0aG9kIGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUg dXNlZAotKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1 bGUgbWV0aG9kLiBJZiBhbgotKyAqIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBv d24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5Ci0rICogdG8gZW5zdXJlIHRoZSByZXN1 bHQgaXMgY29tcGxpYW50LgotKyAqLwotKwotKyNkZWZpbmUgRFNBX0ZMQUdfRklQU19NRVRIT0QJ CQkweDA0MDAKLSsKLSsvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBvcGVyYXRpb25zIG5vcm1h bGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKLSsgKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0 aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQotKyAqIHVz YWdlIGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5lIERTQV9GTEFHX05PTl9GSVBTX0FM TE9XCQkJMHgwNDAwCi0rCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgewotICNl bmRpZgotQEAgLTI3MCw4ICsyODcsMTEgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lk KTsKLSAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0Ci0gI2RlZmluZSBEU0FfRl9E U0FQQVJBTVNfUFJJTlQJCQkJIDEwMAotICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQ CQkJIDEwMQotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOCQkJIDEyNAotKyNkZWZp bmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCi0gI2RlZmluZSBEU0FfRl9EU0Ff RE9fU0lHTgkJCQkgMTEyCi0gI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMKLSsj ZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTCQkJIDEyNQotICNkZWZpbmUgRFNB X0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMwotICNkZWZpbmUgRFNBX0ZfRFNBX1BBUkFNX0RFQ09E RQkJCQkgMTE5Ci0gI2RlZmluZSBEU0FfRl9EU0FfUFJJTlRfRlAJCQkJIDEwNQotQEAgLTI5Niw5 ICszMTYsMTIgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERT QV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRQkJIDEwMAotICNkZWZpbmUgRFNBX1JfREVD T0RFX0VSUk9SCQkJCSAxMDQKLSAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkg MTA2Ci0rI2RlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTEwCi0gI2RlZmluZSBE U0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAxCi0gI2RlZmluZSBEU0FfUl9NT0RVTFVTX1RP T19MQVJHRQkJCQkgMTAzCi0rI2RlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDExMQot ICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwotKyNkZWZpbmUgRFNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTEyCi0gI2RlZmluZSBEU0FfUl9Q QVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2Ev ZHNhX2tleS5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCi1AQCAtNjMsOSArNjMsNTUgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot KyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdl bihEU0EgKmRzYSk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBpbnQgZmlw c19kc2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdl bih2b2lkKQotKwl7Ci0rCWZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0raW50 IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVWUF9QS0VZICpwazsKLSsJdW5zaWdu ZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rCWludCByZXQgPSAw OwotKwotKyAgICAJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJy OwotKwotKwlFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCAw LCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotK2VycjoKLSsJaWYgKHJl dCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJRklQU2VycihG SVBTX0ZfRklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJCX0K LSsKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0r CX0KLSsjZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAJewotIAlp Zihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCi1AQCAtNzksNiArMTI1LDE0IEBAIHN0YXRpYyBpbnQg ZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9DVFggKmN0eD1OVUxMOwotIAlCSUdO VU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0JVSUxU SU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9 Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7 Ci0gCi0gCWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCi1AQCAtMTE3LDYgKzE3MSwxNSBAQCBz dGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKLSAKLSAJZHNhLT5wcml2X2tl eT1wcml2X2tleTsKLSAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoZmlwc19kc2FfcGFpcndpc2VfZmFp bCkKLSsJCQlCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwkJaWYoIWZpcHNfY2hlY2tf ZHNhKGRzYSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7Ci0gCi0g ZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNi4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhX29zc2wuYwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY1LDYgKzY1LDkgQEAKLSAjaW5jbHVkZSA8b3Bl bnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5z c2wvYXNuMS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Ci0gc3RhdGljIGludCBkc2Ffc2ln bl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0g KipycCk7Ci1AQCAtODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2FfbW9kX2V4cCwgKi8KLSBOVUxM LCAvKiBkc2FfYm5fbW9kX2V4cCwgKi8KLSBkc2FfaW5pdCwKLSBkc2FfZmluaXNoLAotLTAsCi0r RFNBX0ZMQUdfRklQU19NRVRIT0QsCi0gTlVMTCwKLSBOVUxMLAotIE5VTEwKLUBAIC0xMzcsNiAr MTQwLDIwIEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24KLSAJaW50 IHJlYXNvbj1FUlJfUl9CTl9MSUI7Ci0gCURTQV9TSUcgKnJldD1OVUxMOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAg IEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7 Ci0rCSAgICByZXR1cm4gTlVMTDsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChC Tl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK LSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMKTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotKwotIAlCTl9pbml0KCZtKTsK LSAJQk5faW5pdCgmeHIpOwotIAotQEAgLTMxMiw2ICszMjksMjAgQEAgc3RhdGljIGludCBkc2Ff ZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAotIAkJcmV0dXJuIC0xOwotIAkJfQotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVEKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYm IChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRT KSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9U T09fU01BTEwpOwotKwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpID0gQk5fbnVt X2JpdHMoZHNhLT5xKTsKLSAJLyogZmlwcyAxODYtMyBhbGxvd3Mgb25seSBkaWZmZXJlbnQgc2l6 ZXMgZm9yIHEgKi8KLSAJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0ICYmIGkgIT0gMjU2KQotQEAg LTQwMyw2ICs0MzQsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQg Ci0gCi0gc3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWRzYS0+ZmxhZ3N8PURT QV9GTEFHX0NBQ0hFX01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9lcnIv ZXJyX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIw MDktMDgtMDkgMTY6NTg6MDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZXJyL2Vycl9hbGwuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAg LTk2LDYgKzk2LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vY3NwLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNT TF9OT19DTVMKLSAjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KLSAjZW5kaWYKLUBAIC0xNDksNiAr MTUyLDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKQotICNlbmRpZgotIAlF UlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKLSAJRVJSX2xvYWRfVUlfc3RyaW5ncygpOwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7Ci0rI2VuZGlmCi0gI2lm bmRlZiBPUEVOU1NMX05PX0NNUwotIAlFUlJfbG9hZF9DTVNfc3RyaW5ncygpOwotICNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2Rp Z2VzdC5jLmZpcHMJMjAxMC0wMy0wNSAxNDozMzo0My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvZGlnZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAw MDAgKzAyMDAKLUBAIC0xMTYsNiArMTE2LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5F Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9s b2NsLmgiCi0gCi0gdm9pZCBFVlBfTURfQ1RYX2luaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7Ci1A QCAtMTM4LDkgKzEzOSw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBj b25zCi0gCXJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOwotIAl9Ci0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRv IHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29yaXRo bXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0aWMg aW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRp Z2VzdCBpbml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01E X0NUWCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQotKwl7IEZJUFNfRVJST1Jf SUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRf ZmluYWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQotKwl7IEZJUFNfRVJST1Jf SUdOT1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQ X01EIGJhZF9tZCA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0r CWJhZF91cGRhdGUsCi0rCWJhZF9maW5hbCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJ MCwKLSsJezAsMCwwLDB9LAotKwl9OwotKwotKyNlbmRpZgotKwotIGludCBFVlBfRGlnZXN0SW5p dF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQot IAl7Ci0gCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVE KTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0r CQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOwotKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBXaGV0aGVyIGl0 J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRz Ci0gCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRv IGF2b2lkIHJlbGVhc2luZwotQEAgLTE5Nyw2ICsyMzksMTggQEAgaW50IEVWUF9EaWdlc3RJbml0 X2V4KEVWUF9NRF9DVFggKmN0eCwgYwotICNlbmRpZgotIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlw ZSkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJ ewotKwkJCWlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykgCi0rCQkJICYmICEo Y3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpCi0rCQkJCXsKLSsJ CQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQ Uyk7Ci0rCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0K LSsJCQl9Ci0rI2VuZGlmCi0gCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9z aXplKQotIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJY3R4LT5kaWdlc3Q9dHlw ZTsKLUBAIC0yMzAsNiArMjg0LDkgQEAgc2tpcF90b19pbml0OgotIAotIGludCBFVlBfRGlnZXN0 VXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQot IAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2Vu ZGlmCi0gCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7Ci0gCX0KLSAKLUBAIC0y NDYsNiArMzAzLDkgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVucwot IGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpt ZCwgdW5zaWduZWQgaW50ICpzaXplKQotIAl7Ci0gCWludCByZXQ7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCi0gCU9QRU5TU0xfYXNz ZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhfTURfU0laRSk7Ci0gCXJldD1jdHgt PmRpZ2VzdC0+ZmluYWwoY3R4LG1kKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2 cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMDQtMDEtMjggMjA6MDU6MzMuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OSwzMiArNjksMjkgQEAgdHlwZWRl ZiBzdHJ1Y3QKLSAKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xMjgsIGtzLCBBRVMsIEVW UF9BRVNfS0VZLAotIAkJICAgICAgIE5JRF9hZXNfMTI4LCAxNiwgMTYsIDE2LCAxMjgsCi0tCQkg ICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9h c24xX2l2LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0tCQkgICAgICAgTlVM TCkKLSsJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FT TjEsCi0rCQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpCi0gSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTkyLCBrcywgQUVTLCBFVlBfQUVT X0tFWSwKLSAJCSAgICAgICBOSURfYWVzXzE5MiwgMTYsIDI0LCAxNiwgMTI4LAotLQkJICAgICAg IDAsIGFlc19pbml0X2tleSwgTlVMTCwgCi0tCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9p diwKLS0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotLQkJICAgICAgIE5VTEwpCi0r CQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAot KwkJICAgICAgIGFlc19pbml0X2tleSwKLSsJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KQotIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzI1Niwga3MsIEFFUywgRVZQX0FFU19LRVks Ci0gCQkgICAgICAgTklEX2Flc18yNTYsIDE2LCAzMiwgMTYsIDEyOCwKLS0JCSAgICAgICAwLCBh ZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0t CQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLS0JCSAgICAgICBOVUxMKQotLQotLSNk ZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihhZXMs QUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQotLQotLUlNUExFTUVOVF9BRVNfQ0ZC UigxMjgsMSkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEpCi0tSU1QTEVNRU5UX0FFU19DRkJS KDI1NiwxKQotLQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsOCkKLS1JTVBMRU1FTlRfQUVTX0NG QlIoMTkyLDgpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4KQotKwkJICAgICAgIEVWUF9DSVBI X0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCSAgICAgICBhZXNfaW5p dF9rZXksCi0rCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSsKLSsjZGVmaW5lIElN UExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cyxmbGFncykJSU1QTEVNRU5UX0NGQlIoYWVzLEFF UyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywxNixmbGFncykKLSsKLStJTVBMRU1FTlRfQUVT X0NGQlIoMTI4LDEsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIs MSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxLEVWUF9DSVBI X0ZMQUdfRklQUykKLSsKLStJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgsRVZQX0NJUEhfRkxBR19G SVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1Q TEVNRU5UX0FFU19DRkJSKDI1Niw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLSAKLSBzdGF0aWMgaW50 IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpr ZXksCi0gCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvZV9jYW1lbGxpYS5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfY2Ft ZWxsaWEuYy5maXBzCTIwMDYtMDgtMzEgMjI6NTY6MjAuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAw MDAwMDAwMCArMDIwMAotQEAgLTkzLDcgKzkzLDcgQEAgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihj YW1lbGxpYV8yNTYsIGtzLAotIAlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotIAlOVUxMKQotIAot LSNkZWZpbmUgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9D RkJSKGNhbWVsbGlhLENhbWVsbGlhLEVWUF9DQU1FTExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYp Ci0rI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5U X0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywx NiwwKQotIAotIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKDEyOCwxKQotIElNUExFTUVOVF9DQU1F TExJQV9DRkJSKDE5MiwxKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfZGVz My5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMJMjAwOC0xMi0yOSAxMzozNTo0Ny4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAxMC0wMy0z MCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0yMDYsOSArMjA2LDkgQEAgc3RhdGljIGlu dCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVS X2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0t CQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9D SVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9D SVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNO MSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVz M19jdHJsKQotIAotICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRf Y2lwaGVyCi1AQCAtMjE3LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwg REVTX0VERV9LRVksIAotICNkZWZpbmUgZGVzX2VkZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9j aXBoZXIKLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9k ZXNfZWRlMywgOCwgMjQsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19p bml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCQlFVlBfQ0lQ SEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBT fEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRlc19lZGUzX2luaXRfa2V5LAotKwkJ CU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZf Y2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDEsCi0tCQkgICAgIEVW UF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQ SEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQ X0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVM TCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUz LERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDgsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRf S0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24x X2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9L RVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAg ICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAg ZGVzM19jdHJsKQotIAotIHN0YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NU WCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9udWxs LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcwkyMDA4LTEwLTMx IDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9l X251bGwuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY5LDcgKzY5 LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9Ci0gCXsKLSAJTklEX3VuZGVm LAotIAkxLDAsMCwKLS0JMCwKLSsJRVZQX0NJUEhfRkxBR19GSVBTLAotIAludWxsX2luaXRfa2V5 LAotIAludWxsX2NpcGhlciwKLSAJTlVMTCwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2V2cC9lX3JjNC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfcmM0LmMKLS0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9yYzQuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfcmM0LmMJMjAx MC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02NCw2ICs2NCw3IEBACi0gI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNp bmNsdWRlIDxvcGVuc3NsL3JjNC5oPgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotIC8qIEZJ WE1FOiBzdXJlbHkgdGhpcyBpcyBhdmFpbGFibGUgZWxzZXdoZXJlPyAqLwotICNkZWZpbmUgRVZQ X1JDNF9LRVlfU0laRQkJMTYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBf ZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNz bC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMTAtMDMtMDEgMDI6NTI6NDcuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lbmMuYwkyMDEw LTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDggKzY4LDUzIEBACi0gCi0g Y29uc3QgY2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8g dHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGht cyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBp bnQgYmFkX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LAotKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotKwl7IEZJUFNfRVJS T1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFk X2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJ IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotKwl7IEZJUFNfRVJS T1JfSUdOT1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rLyogTkI6IG5vIGNs ZWFudXAgYmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCi0rCi0rc3Rh dGljIGludCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXAp Ci0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0dXJuIDA7fQot K3N0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAq dHlwKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7IHJldHVybiAw O30KLStzdGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBp bnQgYXJnLCB2b2lkICpwdHIpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIp OyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhlciA9Ci0r CXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF9kb19j aXBoZXIsCi0rCU5VTEwsCi0rCTAsCi0rCWJhZF9zZXRfYXNuMSwKLSsJYmFkX2dldF9hc24xLAot KwliYWRfY3RybCwKLSsJTlVMTAotKwl9OwotKwotKyNlbmRpZgotKwotIHZvaWQgRVZQX0NJUEhF Ul9DVFhfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldChjdHgsMCxzaXpl b2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KLSAJfQotQEAg LTEwMSw2ICsxNDYsMTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpj dAotIAkJCWVuYyA9IDE7Ci0gCQljdHgtPmVuY3J5cHQgPSBlbmM7Ci0gCQl9Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2Vy cihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsK LSsJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5k aWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9y IG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28g dGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVs ZWFzaW5nCi1AQCAtMjE5LDYgKzI3MiwyMiBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0gCX0KLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVy IHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNvIG9ubHkgY2hlY2sg Zm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwotKwlpZiAoa2V5ICYm IEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJ UEhfRkxBR19GSVBTKQotKwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQ U19BTExPVykpCi0rCQkJewotKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQ X1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0r CQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZihrZXkgfHwgKGN0eC0+ Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0gCQlpZighY3R4 LT5jaXBoZXItPmluaXQoY3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJfQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9ldnBfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2Vyci5j LmZpcHMJMjAxMC0wMi0wNyAxNDo0MToyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZXZwX2Vyci5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCi1AQCAtMTU1LDYgKzE1NSw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9y ZWFzb25zW10KLSB7RVJSX1JFQVNPTihFVlBfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVj b2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUykgICAs ImRpZmZlcmVudCBrZXkgdHlwZXMifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRfUEFS QU1FVEVSUykgICwiZGlmZmVyZW50IHBhcmFtZXRlcnMifSwKLSt7RVJSX1JFQVNPTihFVlBfUl9E SVNBQkxFRF9GT1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZpcHMifSwKLSB7RVJSX1JFQVNP TihFVlBfUl9FTkNPREVfRVJST1IpICAgICAgICAgICwiZW5jb2RlIGVycm9yIn0sCi0ge0VSUl9S RUFTT04oRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SKSwiZXZwIHBiZSBjaXBoZXJpbml0 IGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkpICAsImV4 cGVjdGluZyBhbiByc2Ega2V5In0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv ZXZwLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnAuaAkyMDEwLTAzLTMwIDEwOjQw OjEyLjAwMDAwMDAwMCArMDIwMAotQEAgLTc1LDYgKzc1LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAvKgotICNkZWZpbmUgRVZQX1JDMl9LRVlfU0la RQkJMTYKLSAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2Ci1AQCAtMTk3LDYgKzIwMSw4IEBA IHR5cGVkZWYgaW50IGV2cF92ZXJpZnlfbWV0aG9kKGludCB0eXBlLGMKLSAKLSAjZGVmaW5lIEVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRQkweDAwMDQKLSAKLSsjZGVmaW5lIEVWUF9N RF9GTEFHX0ZJUFMJMHgwNDAwIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1v ZGUgKi8KLSsKLSAvKiBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyIGZsYWdzLi4uICovCi0gCi0g I2RlZmluZSBFVlBfTURfRkxBR19ESUdBTEdJRF9NQVNLCQkweDAwMTgKLUBAIC0yNjksMTAgKzI3 NSw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVhbmVkICovCi0gI2RlZmlu ZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRf ZGF0YQotIAkJCQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyogRklQUyBhbmQgcGFk IG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCi0tICog c28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBv c2VzLgotLSAqLwotLQotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4 MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJCQkJICogaW4gRklQUyBt b2RlICovCi0gCi1AQCAtMjg0LDYgKzI4NiwxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAotICNk ZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUg Ki8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUg Ki8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICov Ci0rI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsJCSgoY3R4LT5m bGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2RlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUFNTX01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwotKyNk ZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRv IHJlY292ZXJlZCAqLwotIAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEw MCAvKiBEb24ndCBpbml0aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0zMzAsMTIgKzMzNiwxNiBA QCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAotICNkZWZpbmUgCUVWUF9DSVBIX05PX1BBRERJTkcJCTB4 MTAwCi0gLyogY2lwaGVyIGhhbmRsZXMgcmFuZG9tIGtleSBnZW5lcmF0aW9uICovCi0gI2RlZmlu ZSAJRVZQX0NJUEhfUkFORF9LRVkJCTB4MjAwCi0tLyogY2lwaGVyIGhhcyBpdHMgb3duIGFkZGl0 aW9uYWwgY29weWluZyBsb2dpYyAqLwotLSNkZWZpbmUgCUVWUF9DSVBIX0NVU1RPTV9DT1BZCQkw eDQwMAotKy8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KLSsjZGVm aW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCi0rLyogQWxsb3cgbm9uIEZJUFMgY2lwaGVy IGluIEZJUFMgbW9kZSAqLwotKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJ MHg4MDAKLSAvKiBBbGxvdyB1c2UgZGVmYXVsdCBBU04xIGdldC9zZXQgaXYgKi8KLSAjZGVmaW5l CQlFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMQkweDEwMDAKLSAvKiBCdWZmZXIgbGVuZ3RoIGlu IGJpdHMgbm90IGJ5dGVzOiBDRkIxIG1vZGUgb25seSAqLwotICNkZWZpbmUJCUVWUF9DSVBIX0ZM QUdfTEVOR1RIX0JJVFMJMHgyMDAwCi0rLyogY2lwaGVyIGhhcyBpdHMgb3duIGFkZGl0aW9uYWwg Y29weWluZyBsb2dpYyAqLwotKyNkZWZpbmUgCUVWUF9DSVBIX0NVU1RPTV9DT1BZCQkweDQwMDAK LSAKLSAvKiBjdHJsKCkgdmFsdWVzICovCi0gCi1AQCAtMTIzOSw2ICsxMjQ5LDcgQEAgdm9pZCBF UlJfbG9hZF9FVlBfc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIEVWUF9SX0RFQ09ERV9FUlJPUgkJ CQkgMTE0Ci0gI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTCQkJIDEwMQotICNkZWZp bmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMJCQkgMTUzCi0rI2RlZmluZSBFVlBfUl9ESVNB QkxFRF9GT1JfRklQUwkJCQkgMTYwCi0gI2RlZmluZSBFVlBfUl9FTkNPREVfRVJST1IJCQkJIDEx NQotICNkZWZpbmUgRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SCQkJIDExOQotICNkZWZp bmUgRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkJCQkgMTI3Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2 cF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcwkyMDEw LTAxLTI2IDE1OjMzOjUxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2V2cC9ldnBfbGliLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02 Nyw2ICs2Nyw4IEBAIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8KLSAK LSAJaWYgKGMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMt PmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBo ZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhF Ul9zZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0 KTsKLUBAIC03OCw2ICs4MCw4IEBAIGludCBFVlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQX0NJ UEhFUl8KLSAKLSAJaWYgKGMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQot IAkJcmV0PWMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlm IChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9 RVZQX0NJUEhFUl9nZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAly ZXR1cm4ocmV0KTsKLUBAIC0xODYsNiArMTkwLDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2Nr X3NpemUoY29uc3QgRVZQXwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGlu dCBpbmwpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixp bmwpOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2xvY2wu aC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIwMTAt MDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMjU0LDE0ICsyNTQsMzIgQEAgY29u c3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAotIAotICNkZWZpbmUgRVZQX0Nf REFUQShrc3RydWN0LCBjdHgpCSgoa3N0cnVjdCAqKShjdHgpLT5jaXBoZXJfZGF0YSkKLSAKLS0j ZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNp emUsY2JpdHMsaXZfbGVuKSBcCi0rI2RlZmluZSBJTVBMRU1FTlRfQ0ZCUihjaXBoZXIsY3ByZWZp eCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRzLGl2X2xlbixmbCkgXAotIAlCTE9DS19DSVBI RVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2No ZWQpIFwKLSAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3Qs IFwKLSAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4s IGNiaXRzLCBcCi0tCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAotLQkJCSAg ICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAotLQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNu MV9pdiwgXAotLQkJCSAgICAgTlVMTCkKLSsJCQkgICAgIChmbCl8RVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEsIFwKLSsJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMKQotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjZGVmaW5lIFJDMl9zZXRfa2V5CXBy aXZhdGVfUkMyX3NldF9rZXkKLSsjZGVmaW5lIFJDNF9zZXRfa2V5CXByaXZhdGVfUkM0X3NldF9r ZXkKLSsjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQotKyNkZWZpbmUg UkM1XzMyX3NldF9rZXkJcHJpdmF0ZV9SQzVfMzJfc2V0X2tleQotKyNkZWZpbmUgQkZfc2V0X2tl eQlwcml2YXRlX0JGX3NldF9rZXkKLSsjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURf c2V0X2tleQotKyNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBwcml2YXRlX0NhbWVsbGlhX3NldF9r ZXkKLSsjZGVmaW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZhdGVfaWRlYV9zZXRfZW5jcnlw dF9rZXkKLSsKLSsjZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVfTUQ1X0luaXQKLSsjZGVmaW5lIE1E NF9Jbml0CXByaXZhdGVfTUQ0X0luaXQKLSsjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0lu aXQKLSsjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAotKyNkZWZpbmUgU0hBX0lu aXQJcHJpdmF0ZV9TSEFfSW5pdAotKyNkZWZpbmUgUklQRU1EMTYwX0luaXQJcHJpdmF0ZV9SSVBF TUQxNjBfSW5pdAotKyNkZWZpbmUgV0hJUkxQT09MX0luaXQJcHJpdmF0ZV9XSElSTFBPT0xfSW5p dAotKwotKyNlbmRpZgotIAotIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKLSAJewotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9ldnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJ MjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvbV9kc3MuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAg LTgxLDcgKzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQ9Ci0gCU5JRF9kc2FXaXRo U0hBLAotIAlOSURfZHNhV2l0aFNIQSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9G TEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19G SVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fZHNz MS5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMJMjAwNi0wNC0x OSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv bV9kc3MxLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC04Miw3ICs4 Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KLSAJTklEX2RzYSwKLSAJTklEX2Rz YVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdF U1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQs Ci0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv bV9tZGMyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZGMyLmMKLS0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZGMyLmMuZmlwcwkyMDEwLTAyLTAyIDE0OjM2OjA1LjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kYzIuYwkyMDEw LTAzLTMwIDEwOjU3OjAyLjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZu ZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0r I2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0 eCkKLSAJeyByZXR1cm4gTURDMl9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZw L21fbWQyLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMDUt MDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8v ZXZwL21fbWQyLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OCw2 ICs2OCw3IEBACi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotICNlbmRpZgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5p dChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIE1EMl9Jbml0KGN0eC0+bWRfZGF0YSk7IH0K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kNC5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL21fbWQ0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9t ZDQuYy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vZXZwL21fbWQ0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKLUBAIC02OCw2ICs2OCw3IEBACi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotICNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotICNlbmRpZgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAot IHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIE1ENF9Jbml0KGN0 eC0+bWRfZGF0YSk7IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kNS5j LmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQ1LmMKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9ldnAvbV9tZDUuYy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQ1LmMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OCw2ICs2OCw3IEBACi0gI2lmbmRlZiBPUEVOU1NM X05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNlbmRpZgotKyNpbmNsdWRlICJl dnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0 dXJuIE1ENV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9tX3JpcGVtZC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fcmlwZW1k LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9yaXBlbWQuYy5maXBzCTIwMDUtMDct MTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZw L21fcmlwZW1kLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OCw2 ICs2OCw3IEBACi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotICNlbmRpZgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5p dChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIFJJUEVNRDE2MF9Jbml0KGN0eC0+bWRfZGF0 YSk7IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX3NoYTEuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2V2cC9tX3NoYTEuYy5maXBzCTIwMDgtMDMtMTIgMjI6MTQ6MjQuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi1AQCAtODIsNyArODIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNo YTFfbWQ9Ci0gCU5JRF9zaGExLAotIAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEFf RElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9N RF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0g CWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1AQCAtMTE5LDcgKzEyMCw4IEBAIHN0YXRpYyBj b25zdCBFVlBfTUQgc2hhMjI0X21kPQotIAlOSURfc2hhMjI0LAotIAlOSURfc2hhMjI0V2l0aFJT QUVuY3J5cHRpb24sCi0gCVNIQTIyNF9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZ X01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAot KwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDIyNCwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1 NiwKLUBAIC0xMzgsNyArMTQwLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyNTZfbWQ9Ci0g CU5JRF9zaGEyNTYsCi0gCU5JRF9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjU2X0RJ R0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURf RkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlp bml0MjU2LAotIAl1cGRhdGUyNTYsCi0gCWZpbmFsMjU2LAotQEAgLTE2OSw3ICsxNzIsOCBAQCBz dGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9tZD0KLSAJTklEX3NoYTM4NCwKLSAJTklEX3NoYTM4 NFdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEzODRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQzODQsCi0gCXVwZGF0ZTUxMiwKLSAJ ZmluYWw1MTIsCi1AQCAtMTg4LDcgKzE5Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEy X21kPQotIAlOSURfc2hhNTEyLAotIAlOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNI QTUxMl9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQ UywKLSAJaW5pdDUxMiwKLSAJdXBkYXRlNTEyLAotIAlmaW5hbDUxMiwKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9tX3dwLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv bV93cC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fd3AuYy5maXBzCTIwMDUtMTEt MzAgMjE6NTc6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZw L21fd3AuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTksNiArOSw3 IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1 MDkuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC93aHJscG9vbC5oPgotKyNpbmNsdWRlICJldnBfbG9j bC5oIgotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIFdI SVJMUE9PTF9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9uYW1lcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL25hbWVzLmMKLS0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbmFtZXMuYy5maXBzCTIwMTAtMDMtMDYgMjE6NDc6 NDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL25hbWVzLmMJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Niw2ICs2NiwxMCBAQCBp bnQgRVZQX2FkZF9jaXBoZXIoY29uc3QgRVZQX0NJUEhFUiAqYykKLSAJewotIAlpbnQgcjsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rI2VuZGlm Ci0rCi0gCXI9T0JKX05BTUVfYWRkKE9CSl9uaWQyc24oYy0+bmlkKSxPQkpfTkFNRV9UWVBFX0NJ UEhFUl9NRVRILChjb25zdCBjaGFyICopYyk7Ci0gCWlmIChyID09IDApIHJldHVybigwKTsKLSAJ Y2hlY2tfZGVmZXIoYy0+bmlkKTsKLUBAIC03OSw2ICs4MywxMCBAQCBpbnQgRVZQX2FkZF9kaWdl c3QoY29uc3QgRVZQX01EICptZCkKLSAJaW50IHI7Ci0gCWNvbnN0IGNoYXIgKm5hbWU7Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKyNlbmRpZgot KwotIAluYW1lPU9CSl9uaWQyc24obWQtPnR5cGUpOwotIAlyPU9CSl9OQU1FX2FkZChuYW1lLE9C Sl9OQU1FX1RZUEVfTURfTUVUSCwoY29uc3QgY2hhciAqKW1kKTsKLSAJaWYgKHIgPT0gMCkgcmV0 dXJuKDApOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL3Bfc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlw dG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAwNi0wNS0yNCAxNToyOTozMC4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvcF9zaWduLmMJMjAxMC0wMy0zMCAxMDozMzo0 Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wv ZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L3g1MDkuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2 b2lkIEVWUF9TaWduSW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAqdHlwZSkKLUBAIC0xMDEs NiArMTAyLDIyIEBAIGludCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKLSAJ CQlnb3RvIGVycjsKLSAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwg Y3R4LT5kaWdlc3QpIDw9IDApCi0gCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMSkKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFk ZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlp ZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQg c2FsdGxlbjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNB X1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0g TV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBf TURfQ1RYX0ZMQUdfUFNTX01ETEVOKQotKwkJCQlzYWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAo c2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsK LSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4p IDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCX0KLSAJCWlmIChFVlBfUEtFWV9zaWduKHBrY3R4 LCBzaWdyZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9IDApCi0gCQkJZ290byBlcnI7Ci0gCQkqc2ln bGVuID0gc2x0bXA7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvcF92ZXJpZnku Yy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjAxLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTAt MDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5j bHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0gaW50 IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNp Z2J1ZiwKLSAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKLUBAIC04 Niw2ICs4NywyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCi0g CQkJZ290byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgs IGN0eC0+ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBF VlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bh ZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJ aWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKLSsJCQl7Ci0rCQkJaW50 IHNhbHRsZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJT QV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJc2FsdGxlbiA9 IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYgKHNhbHRsZW4gPT0gRVZQ X01EX0NUWF9GTEFHX1BTU19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0xOwotKwkJCWVsc2UgaWYg KHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJCQlzYWx0bGVuID0gLTI7 Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVu KSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBr Y3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOwotIAkJZXJyOgotIAkJRVZQX1BLRVlfQ1RY X2ZyZWUocGtjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfYWVzYXZzLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNh dnMuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZp cHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSw5MzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8K LSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklT VCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24gU3VpdGUKLSsgIFRlc3QgUHJvZ3JhbQotKwotKyAg RG9uYXRlZCB0byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENl bnR1cnkgQmx2ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEu Ci0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsK LSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5j bHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJO byBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQot KwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsK LSsjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2Ci0rCi0rI2RlZmluZSBWRVJCT1NFIDAKLSsKLSsv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStp bnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1vZGUsIGludCBh a2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywg Ci0rCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCSAgICB1 bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBs ZW4pCi0rICAgIHsKLSsgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsg ICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtl eXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsK LSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMo KTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9j YmMoKTsKLSsJCWJyZWFrOwotKwkJfQotKwotKwl9Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAo YW1vZGUsICJFQ0IiKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2Fz ZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9lY2IoKTsKLSsJCWJyZWFrOwotKwotKwkJ Y2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9lY2IoKTsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9lY2IoKTsKLSsJCWJyZWFrOwot KwkJfQotKwl9Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgiKSA9PSAw KQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIg PSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQlj aXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6 Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKLSsJCWJyZWFrOwotKwkJfQotKwot Kwl9Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKLSsJ ewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQ X2Flc18xMjhfb2ZiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0g RVZQX2Flc18xOTJfb2ZiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVy ID0gRVZQX2Flc18yNTZfb2ZiKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlm KCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7 Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEoKTsKLSsJCWJyZWFr OwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7Ci0rCQli cmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMSgpOwot KwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZC OCIpKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBo ZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJ Y2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjgoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0r ICAgIGVsc2UKLSsJewotKwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJ cmV0dXJuIDA7Ci0rCX0KLSsgICAgaWYgKCFjaXBoZXIpCi0rCXsKLSsJcHJpbnRmKCJJbnZhbGlk IGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJcmV0dXJuIDA7IAotKwl9Ci0rICAgIGlmIChF VlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAw KQotKwlyZXR1cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9F VlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsK LSsgICAgaWYgKGRpcikKLSsJCUVWUF9DaXBoZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQs IGxlbik7Ci0rCWVsc2UKLSsJCUVWUF9DaXBoZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhlcnRleHQs IGxlbik7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7IlBMQUlO VEVYVCIsICJDSVBIRVJURVhUIn07Ci0rY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJP RkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9OwotK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwg Q0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKLStlbnVtIFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNSWVBUfTsK LSsKLSsvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKiAgTW9udGUgQ2FybG8g VGVzdHMgICAgICAgICAgKi8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsK LSsvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKChiKSU4KSkmMSkqLwotKy8qI2Rl ZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICgoYiklOCkpKXwo ISEodikgPDwgKChiKSU4KSkpKi8KLSsKLSsjZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ ICg3LShiKSU4KSkmMSkKLSsjZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84 XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYpIDw8ICg3LShiKSU4KSkpCi0rCi0raW50IGRvX21j dChjaGFyICphbW9kZSwgCi0rCSAgIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksdW5z aWduZWQgY2hhciAqaVZlYywKLSsJICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50 IGxlbiwKLSsJICAgRklMRSAqcmZwKQotKyAgICB7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICB1 bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBpdlsxMDFdW0FF U19CTE9DS19TSVpFXTsKLSsgICAgdW5zaWduZWQgY2hhciBwdGV4dFsxMDAxXVszMl07Ci0rICAg IHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhl cnRleHRbNjQrNF07Ci0rICAgIGludCBpLCBqLCBuLCBuMSwgbjI7Ci0rICAgIGludCBpbW9kZSA9 IDAsIG5rZXlzeiA9IGFrZXlzei84OwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVW UF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlmIChsZW4gPiAzMikKLSsJewotKwlw cmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVkcyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4iLCAKLSsJ ICAgICAgIGFtb2RlLCBha2V5c3opOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgZm9yIChpbW9k ZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkKLSsJaWYgKHN0cmNtcChhbW9kZSwgdF9tb2RlW2lt b2RlXSkgPT0gMCkKLSsJICAgIGJyZWFrOwotKyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAKLSsJ cHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJcmV0dXJuIC0xOwot Kwl9Ci0rCi0rICAgIG1lbWNweShrZXlbMF0sIGFLZXksIG5rZXlzeik7Ci0rICAgIGlmIChpVmVj KQotKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFFU19CTE9DS19TSVpFKTsKLSsgICAgaWYgKGRpciA9 PSBYRU5DUllQVCkKLSsJbWVtY3B5KHB0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBlbHNlCi0r CW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVuKTsKLSsgICAgZm9yIChpID0gMDsgaSA8IDEwMDsg KytpKQotKwl7Ci0rCS8qIHByaW50ZigiSXRlcmF0aW9uICVkXG4iLCBpKTsgKi8KLSsJaWYgKGkg PiAwKQotKwkgICAgewotKwkgICAgZnByaW50ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7Ci0rCSAg ICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0sbmtleXN6LHJmcCwwKTsKLSsJICAgIGlmIChpbW9k ZSAhPSBFQ0IpICAvKiBFQ0IgKi8KLSsJCU91dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVTX0JMT0NL X1NJWkUscmZwLDApOwotKwkgICAgLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8K LSsJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0ZXh0WzBd LGxlbixyZnAsCi0rCQkJaW1vZGUgPT0gQ0ZCMSk7Ci0rCSAgICB9Ci0rCWZvciAoaiA9IDA7IGog PCAxMDAwOyArK2opCi0rCSAgICB7Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQotKwkJewotKwkgICAg Y2FzZSBFQ0I6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsgLyogc2V0IHVwIGVuY3J5cHRpb24g Ki8KLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgTlVM TCwgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAg cHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0r CQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlt ZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVy KCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkocHRleHRbaisxXSwg Y3RleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhl cigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0s IHB0ZXh0W2pdLCBsZW4pOwotKwkJCX0KLSsJCSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNh c2UgQ0JDOgotKwkgICAgY2FzZSBPRkI6ICAKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJaWYgKGog PT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6 LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5 cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9 PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRleHRbaisxXSwgaXZbaV0sIGxlbik7Ci0rCQkgICAg ZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQll bHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVW UF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4 dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOwotKwkJCX0KLSsJCSAgICBlbHNlCi0rCQkJewotKwkJ CUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShj dGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4pOwotKwkJCX0KLSsJCSAgICB9Ci0rCQlicmVhazsK LSsKLSsJICAgIGNhc2UgQ0ZCODoKLSsJCWlmIChqID09IDApCi0rCQkgICAgewotKwkJICAgIHJl dCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCi0rCQkJCSAg ZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0 ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRp ciA9PSBYRU5DUllQVCkKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwg bGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRb al0sIGxlbik7Ci0rCQkgICAgfQotKwkJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCSAgICB7Ci0r CQkgICAgaWYgKGogPCAxNikKLSsJCQltZW1jcHkocHRleHRbaisxXSwgJml2W2ldW2pdLCBsZW4p OwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xNl0sIGxlbik7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQotKwkJCW1l bWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNw eShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsK LSsJICAgIGNhc2UgQ0ZCMToKLSsJCWlmKGogPT0gMCkKLSsJCSAgICB7Ci0rI2lmIDAKLSsJCSAg ICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBlbmRpYW5uZXNzIG9mIGlucHV0IGZpbGUgKi8KLSsJ CSAgICBpZihpID09IDApCi0rCQkJcHRleHRbMF1bMF08PD03OwotKyNlbmRpZgotKwkJICAgIHJl dCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osa2V5W2ldLGl2W2ldLGRpciwKLSsJCQkJcHRl eHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkg ICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBw dGV4dFtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtq XSwgY3RleHRbal0sIGxlbik7Ci0rCi0rCQkgICAgfQotKwkJaWYoZGlyID09IFhFTkNSWVBUKQot KwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihpdltp XSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihjdGV4dFtqLTEyOF0s MCkpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYoaiA8IDEyOCkKLSsJ CQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOwotKwkJICAgIGVsc2UKLSsJCQlzYihjdGV4 dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDApKTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0K LSsJICAgIH0KLSsJLS1qOyAvKiByZXNldCB0byBsYXN0IG9mIHJhbmdlICovCi0rCS8qIE91dHB1 dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCi0rCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sZGly ID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4scmZwLAotKwkJICAgIGltb2RlID09IENGQjEpOwot KwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBhZGQgc2VwYXJhdG9yICovCi0rCi0rCS8qIENvbXB1 dGUgbmV4dCBLRVkgKi8KLSsJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJICAgIHsKLSsJICAgIGlm IChpbW9kZSA9PSBDRkI4KQotKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4u LiB8fCBDVFtqXSAqLwotKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6 OyArK24xLCAtLW4yKQotKwkJICAgIGNpcGhlcnRleHRbbjFdID0gY3RleHRbai1uMl1bMF07Ci0r CQl9Ci0rCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCi0rCQl7Ci0rCQlmb3IobjE9MCxuMj1h a2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGNpcGhlcnRleHQs bjEsZ2IoY3RleHRbai1uMl0sMCkpOwotKwkJfQotKwkgICAgZWxzZQotKwkJc3dpdGNoIChha2V5 c3opCi0rCQkgICAgewotKwkJY2FzZSAxMjg6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0 ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDE5MjoKLSsJCSAgICBtZW1jcHko Y2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4 LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAyNTY6Ci0rCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0sIDE2KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4 dCsxNiwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCSAgICB9Ci0r CWVsc2UKLSsJICAgIHsKLSsJICAgIGlmIChpbW9kZSA9PSBDRkI4KQotKwkJeyAvKiBjdCA9IENU W2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLwotKwkJZm9yIChuMSA9IDAsIG4y ID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQotKwkJICAgIGNpcGhlcnRleHRb bjFdID0gcHRleHRbai1uMl1bMF07Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEp Ci0rCQl7Ci0rCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4y KQotKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJfQotKwkg ICAgZWxzZQotKwkJc3dpdGNoIChha2V5c3opCi0rCQkgICAgewotKwkJY2FzZSAxMjg6Ci0rCQkg ICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQlj YXNlIDE5MjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSs4LCA4KTsKLSsJ CSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwot KwkJY2FzZSAyNTY6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0sIDE2KTsK LSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVh azsKLSsJCSAgICB9Ci0rCSAgICB9Ci0rCS8qIENvbXB1dGUgbmV4dCBrZXk6IEtleVtpKzFdID0g S2V5W2ldIHhvciBjdCAqLwotKwlmb3IgKG4gPSAwOyBuIDwgbmtleXN6OyArK24pCi0rCSAgICBr ZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNpcGhlcnRleHRbbl07Ci0rCQotKwkvKiBDb21wdXRl IG5leHQgSVYgYW5kIHRleHQgKi8KLSsJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJICAgIHsKLSsJ ICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShwdGV4 dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBD QkM6Ci0rCSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2kr MV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0 W2otMV0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJ LyogSVZbaSsxXSA9IGN0ICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytu MSwgLS1uMikKLSsJCSAgICBpdltpKzFdW24xXSA9IGN0ZXh0W2otbjJdWzBdOwotKwkJcHRleHRb MF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkIxOgotKwkJ Zm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCi0rCQkgICAgc2IoaXZbaSsx XSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQlwdGV4dFswXVswXT1jdGV4dFtqLTEyOF1bMF0m MHg4MDsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBz d2l0Y2ggKGltb2RlKQotKwkJewotKwkgICAgY2FzZSBFQ0I6Ci0rCQltZW1jcHkoY3RleHRbMF0s IHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0JDOgot KwkgICAgY2FzZSBPRkI6Ci0rCSAgICBjYXNlIENGQjEyODoKLSsJCW1lbWNweShpdltpKzFdLCBw dGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqLTFd LCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCODoKLSsJCWZvciAo bjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFd ID0gcHRleHRbai1uMl1bMF07Ci0rCQljdGV4dFswXVswXSA9IHB0ZXh0W2otMTZdWzBdOwotKwkJ YnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7 ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKLSsJ CWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAg ICB9Ci0rCX0KLSsgICAgCi0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSsvKj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0rLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rICAjIENvbmZpZyBpbmZvIGZvciB2LW9uZQotKyAgIyBBRVNW UyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKLSsgICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBEZWNyeXB0 Ci0rICAjIEtleSBMZW5ndGggOiAyNTYKLSsgICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQTQotKyAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0raW50IHByb2NfZmlsZShjaGFyICpy cWZpbGUsIGNoYXIgKnJzcGZpbGUpCi0rICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1 Nl07Ci0rICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFyIGlidWZb MjA0OF07Ci0rICAgIGNoYXIgdGJ1ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0g MDsKLSsgICAgY2hhciBhbGdvWzhdID0gIiI7Ci0rICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsg ICAgY2hhciBhdGVzdFs4XSA9ICIiOwotKyAgICBpbnQgYWtleXN6ID0gMDsKLSsgICAgdW5zaWdu ZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07Ci0rICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwg c3RlcCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNp Z25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07Ci0rICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQ SEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlm ICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7 Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwotKwotKyAgICBp ZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5v dCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7 Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBpZiAoIXJzcGZpbGUpCi0rCXsKLSsJc3RyY3B5KHJm bixhZm4pOwotKwlycD1zdHJzdHIocmZuLCJyZXEvIik7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJ TjMyCi0rCWlmICghcnApCi0rCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwotKyNlbmRpZgot Kwlhc3NlcnQocnApOwotKwltZW1jcHkocnAsInJzcCIsMyk7Ci0rCXJwID0gc3Ryc3RyKHJmbiwg Ii5yZXEiKTsKLSsJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOwotKwlyc3BmaWxlID0gcmZuOwotKwl9 Ci0rICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKLSsJewotKwlw cmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICByZm4sIHN0cmVy cm9yKGVycm5vKSk7Ci0rCWZjbG9zZShhZnApOwotKwlhZnAgPSBOVUxMOwotKwlyZXR1cm4gLTE7 Ci0rCX0KLSsgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZw KSkgIT0gTlVMTCkKLSsJewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7Ci0rCWlsZW4gPSBzdHJs ZW4oaWJ1Zik7Ci0rCS8qICAgICAgcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7 ICovCi0rCXN3aXRjaCAoc3RlcCkKLSsJICAgIHsKLSsJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJs ZSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKLSsJCXsgLyogZW5kIG9mIHByZWFtYmxl ICovCi0rCQlpZiAoKCphbGdvID09ICdcMCcpIHx8Ci0rCQkgICAgKCphbW9kZSA9PSAnXDAnKSB8 fAotKwkJICAgIChha2V5c3ogPT0gMCkpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiTWlzc2lu ZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6ZSAoJXMvJXMvJWQpXG4iLAotKwkJCSAgIGFsZ28s YW1vZGUsYWtleXN6KTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAg ICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICArKyBzdGVwOwotKwkJICAgIH0K LSsJCX0KLSsJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQotKwkJewotKwkJcHJpbnRmKCJJ bnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0r CSAgICBlbHNlCi0rCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KLSsJCWNoYXIgKnhwLCAqcHAg PSBpYnVmKzI7Ci0rCQlpbnQgbjsKLSsJCWlmIChha2V5c3opCi0rCQkgICAgeyAvKiBpbnNlcnQg Y3VycmVudCB0aW1lICYgZGF0ZSAqLwotKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKLSsJ CSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICBpZiAoc3RybmNt cChwcCwgIkFFU1ZTICIsIDYpID09IDApCi0rCQkJewotKwkJCXN0cmNweShhbGdvLCAiQUVTIik7 Ci0rCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwotKwkJCXBwICs9IDY7Ci0rCQkJeHAgPSBzdHJjaHIo cHAsICcgJyk7Ci0rCQkJbiA9IHhwLXBwOwotKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKLSsJ CQlhdGVzdFtuXSA9ICdcMCc7Ci0rCQkJLyogZ2V0IG1vZGUgKi8KLSsJCQl4cCA9IHN0cnJjaHIo cHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLwotKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKLSsJCQlz dHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKLSsJCQlhbW9kZVtuXSA9ICdcMCc7Ci0rCQkJLyogYW1v ZGVbM10gPSAnXDAnOyAqLwotKwkJCWlmIChWRVJCT1NFKQotKwkJCQlwcmludGYoIlRlc3QgPSAl cywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1vZGUpOwotKwkJCX0KLSsJCSAgICBlbHNlIGlmIChz dHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGggOiAiLCAxMykgPT0gMCkKLSsJCQl7Ci0rCQkJYWtl eXN6ID0gYXRvaShwcCsxMyk7Ci0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiS2V5IHNp emUgPSAlZFxuIiwgYWtleXN6KTsKLSsJCQl9Ci0rCQkgICAgfQotKwkJfQotKwkgICAgYnJlYWs7 Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLwotKwkgICAgaWYgKGli dWZbMF0gPT0gJ1snKQotKwkJewotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJ CWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIg PSAxOwotKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDAp Ci0rCQkgICAgZGlyID0gMDsKLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZh bGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJ CWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQotKwkJewotKwkJZXJyID0g MTsKLSsJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7Ci0rCQli cmVhazsKLSsJCX0KLSsJICAgIGVsc2UgCi0rCQlzdGVwID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBL RVkgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYoKmlidWYgPT0g J1xuJykKLSsJCWJyZWFrOwotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4 KSkKLSsJCWJyZWFrOwotKwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJLRVkgPSAiLCA2 KSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwot KwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBh S2V5KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQg S0VZXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJp bnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYW1vZGUsICJFQ0IiKSA9 PSAwKQotKwkJICAgIHsKLSsJCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKLSsJ CSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJCSAgICB9 Ci0rCQllbHNlCi0rCQkgICAgKytzdGVwOwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2Ug MzogLyogSVYgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0 cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3Np bmcgSVZcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9 IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7 Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAg YnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3Rl cCA9IChkaXIpPyA0OiA1OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExB SU5URVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJu Y2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYo Ik1pc3NpbmcgUExBSU5URVhUXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0r CQl7Ci0rCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJD RkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJ ZWxzZQotKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVu IDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBp YnVmKzEyKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYg KGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZm ZXIgb3ZlcmZsb3dcbiIpOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1 bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNU IikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgaWYoZG9f bWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCSAgICAgIGRpciwgKHVuc2lnbmVk IGNoYXIqKXBsYWludGV4dCwgbGVuLCAKLSsJCQkgICAgICByZnApIDwgMCkKLSsJCQlFWElUKDEp OwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4 LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlw dCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0r CQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJ IXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJ ICAgIGJyZWFrOwotKwotKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBm cHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhU ID0gIiwgMTMpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVy ciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIx IikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVy dGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQp OwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBI RVJURVhUXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwot KwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQlpZiAoc3Ry Y21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAgICB7 Ci0rCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCSAgIGRpciwg Y2lwaGVydGV4dCwgbGVuLCByZnApOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkg ICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJ ICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQs IGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2ln bmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIp KTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNl IDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXBy aW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKHN0cmNt cChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0 aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJfQotKwkgICAgc3RlcCA9IDE7Ci0r CSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAocmZwKQotKwlmY2xvc2UocmZwKTsK LSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJldHVybiBlcnI7Ci0rICAgIH0K LSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCi0rICBhIHNldCBvZiBmaWxl cyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KLSsgIEEgc2luZ2xlIGZpbGUgaXMg c3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCi0rICBBIHNldCBvZiBmaWxl cyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAotKyAgVGhlIGRl ZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyAg ICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOwotKyAg ICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIi OwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsK LSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAoYXJnYyA+IDEpCi0rCXsKLSsJaWYg KHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGRfb3B0ID0g MTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQot KwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9vcHQgPSAwOwotKwkgICAgfQotKwll bHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJn dlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGFyZ2MgPCAzKQotKwkgICAg ewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Ci0rCSAgICByZXR1cm4gMDsK LSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKLSsJZWxzZQot KwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJICAgIHJzcGZpbGUgPSBhcmd2 WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkKLSsJeyAvKiBsaXN0IG9mIGZpbGVz IChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKLSsJICAg IHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7Ci0rCSAgICBy ZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQot KwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwotKwkgICAgc3RyY3B5KHJmbiwgZm4p OwotKwkgICAgaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4p OwotKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQotKwkJewotKwkJcHJpbnRmKCI+ Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7Ci0rCQlFWElUKDEpOwot KwkJfQotKwkgICAgfQotKwlmY2xvc2UoZnApOwotKwl9Ci0rICAgIGVsc2UgLyogc2luZ2xlIGZp bGUgKi8KLSsJewotKwlpZiAoVkVSQk9TRSkKLSsJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNc biIsIGZuKTsKLSsJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCi0rCSAgICB7Ci0rCSAgICBw cmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOwotKwkgICAg fQotKwl9Ci0rICAgIEVYSVQoMCk7Ci0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKLS0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcwkyMDEwLTAz LTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Rlc21vdnMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAotQEAgLTAsMCArMSw3MDIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBERVMgTW9k ZXMgb2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCi0rICBUZXN0IFByb2dyYW0KLSsKLSsg IEJhc2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgotKyAgRG9uYXRl ZCB0byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1cnkg Qmx2ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0rICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5j bHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8 Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBT IERFUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjZGVm aW5lIERFU19CTE9DS19TSVpFIDgKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotK2ludCBERVNU ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwg dW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAg IGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVk IGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCi0rICAgIHsKLSsgICAgY29u c3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKGFrZXlzeiAhPSAxOTIp Ci0rCXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJRVhJ VCgxKTsKLSsJfQotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0r CWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChh bW9kZSwgIkVDQiIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKLSsgICAg ZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX2NmYjY0KCk7Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZC IiwgMykgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwotKyAgICBlbHNlIGlm KCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4 KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJY2lwaGVyID0g RVZQX2Rlc19lZGUzX2NmYjEoKTsKLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBt b2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChFVlBfQ2lw aGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQotKwly ZXR1cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQ SEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsgICAg RVZQX0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9 Ci0rCi0rdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQg bGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rICAg IG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNc biIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4odW5zaWduZWQg Y2hhciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCi0rICAgIHsKLSsgICAgaW50 IG47Ci0rCi0rICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCi0rICAgIG1lbW1vdmUoZHN0LGRz dCtuYml0cy84LDMqOC1uYml0cy84KTsKLSsgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCi0rICAg IG1lbWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKLSsgICAgLyogbGVmdCBz aGlmdCB0aGUgYml0cyAqLwotKyAgICBpZihuYml0cyU4KQotKwlmb3Iobj0wIDsgbiA8IDMqOCA7 ICsrbikKLSsJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4 LW5iaXRzJTgpKTsKLSsgICAgfQkKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJ UEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEi LCJDRkI4IiwiQ0ZCNjQifTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgs IENGQjY0fTsKLStpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0rdm9pZCBkb19t Y3QoY2hhciAqYW1vZGUsIAotKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVk IGNoYXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKLSsJICAgIGludCBkaXIsIHVuc2lnbmVk IGNoYXIgKnRleHQsIGludCBsZW4sCi0rCSAgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50 IGksaW1vZGU7Ci0rICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAq LwotKyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOwotKwotKyAgICBmb3IgKGltb2RlPTAgOyBp bW9kZSA8IDYgOyArK2ltb2RlKQotKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQot KwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVj b2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGZv cihpPTAgOyBpIDwgNDAwIDsgKytpKQotKwl7Ci0rCWludCBqOwotKwlpbnQgbjsKLSsJaW50IGtw PWFrZXlzei82NDsKLSsJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07Ci0rCUVWUF9DSVBIRVJfQ1RY IGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJZnByaW50ZihyZnAsIlxu Q09VTlQgPSAlZFxuIixpKTsKLSsJaWYoa3AgPT0gMSkKLSsJICAgIE91dHB1dFZhbHVlKCJLRVki LGFrZXksOCxyZnAsMCk7Ci0rCWVsc2UKLSsJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCi0r CQl7Ci0rCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1ZSgiIixha2V5 K24qOCw4LHJmcCwwKTsKLSsJCX0KLSsKLSsJaWYoaW1vZGUgIT0gRUNCKQotKwkgICAgT3V0cHV0 VmFsdWUoIklWIixpdmVjLDgscmZwLDApOwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4 dCxsZW4scmZwLGltb2RlID09IENGQjEpOwotKyNpZiAwCi0rCS8qIGNvbXBlbnNhdGUgZm9yIGVu ZGlhbm5lc3MgKi8KLSsJaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08PD03OwotKyNl bmRpZgotKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGogPCAxMDAwMCA7 ICsraikKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07Ci0rCi0rCSAg ICBtZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJCXsKLSsJCW1l bWNweShvbGRfaXYsaXZlYyw4KTsKLSsJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxp dmVjLGRpcix0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCW1lbWNw eShvbGRfaXYsY3R4Lml2LDgpOwotKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOwot KwkJfQotKwkgICAgaWYoaiA9PSA5OTk5KQotKwkJewotKwkJT3V0cHV0VmFsdWUodF90YWdbZGly XSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4 KTsgKi8KLSsJCX0KLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLwot KwkgICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCi0rCSAgICBz aGlmdGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJu ayIsbmssMjQpOyovCi0rCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09 IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQKLSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9 PSBPRkIpCi0rCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7Ci0rCi0rCSAgICBpZighZGlyICYmIChp bW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQotKwkJewot KwkJLyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMg b3BlcmF0aW9uCi0rCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4u LiAqLwotKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0 W25dOwotKwkJfQotKwkgICAgfQotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5 W25dXj1ua1sxNituXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVs4K25d Xj1ua1s4K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5WzE2K25dXj1u a1tuXTsKLSsJaWYobnVta2V5cyA8IDMpCi0rCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgp OwotKwlpZihudW1rZXlzIDwgMikKLSsJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOwotKwlE RVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKLSsJREVTX3NldF9vZGRfcGFy aXR5KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19j YmxvY2sgKikoYWtleSsxNikpOwotKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0rCi0rCS8qIHBv aW50bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQot KwkgICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAo V2hvCi0rCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KLSsJaWYoaW1vZGUgPT0gT0ZCKQot KwkgICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZb bl07Ci0rCX0KLSsgICAgfQotKyAgICAKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hh ciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAg RklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1 ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbW9kZVs4 XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKLSsgICAgaW50IGFrZXlzej0wOwot KyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0x LCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07 Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0r ICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgaW50IG51bWtleXM9MTsKLSsgICAgRVZQX0NJ UEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkK LSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAg IHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIp KSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAK LSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAg IGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4s InJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJw PXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShy cCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIu cnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihy c3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTog JXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFm cCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAm JiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlf bGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyoJcHJpbnRmKCJz dGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAo YW1vZGUsIkVDQiIpKQotKwkgICAgewotKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVj KSk7Ci0rCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJ ICAgIH0KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFt YmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1i bGUgKi8KLSsJCWlmICgqYW1vZGUgPT0gJ1wwJykKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJN aXNzaW5nIE1vZGVcbiIpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAg fQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYo IkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0K LSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpw cCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYoKmFtb2RlKQotKwkJICAgIHsgLyogaW5zZXJ0 IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7Ci0r CQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAgICB9Ci0rCQll bHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgaWYoIXN0cm5j bXAocHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKLSsJCSAgICAgICB8 fCAhc3RybmNtcChwcCwiVERFUyAiLDUpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1V VEFUSU9OICIsMTIpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEz KQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJCXsKLSsJCQkv KiBnZXQgdGVzdCB0eXBlICovCi0rCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQotKwkJCSAg ICBwcCs9NDsKLSsJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCi0rCQkJICAgIHBw Kz01OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlzdHJu Y3B5KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBtb2Rl ICovCi0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQluID0g c3RybGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1vZGVb bl0gPSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9TRSkK LSsJCQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKLSsJCQl9Ci0r CQkgICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8 IFtERUNSWVBUXSAqLwotKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAg ICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytz dGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJ ICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwg OSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkg ICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0r CQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4i KTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNl IDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0rCQl7Ci0rCSAg ICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0r CSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJewotKwkgICAgICAg IGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAg aWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3Ry bmNhc2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQotKwkJewotKwkJbnVta2V5cz1hdG9pKGli dWYrMTApOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwot KwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCi0rCQl7Ci0rCQlha2V5c3o9 NjQ7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8 IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVy cj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFLZXks IGxlbik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVm LCJLRVlzID0gIiw3KSkKLSsJCXsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhleDJiaW4oaWJ1 Zis3LGFLZXkpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52 YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJ CW1lbWNweShhS2V5KzgsYUtleSw4KTsKLSsJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7Ci0rCQlp YnVmWzRdPSdcMCc7Ci0rCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7Ci0rCQkrK3N0ZXA7 Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQotKwkJewot KwkJaW50IG49aWJ1ZlszXS0nMSc7Ci0rCi0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmlu KGlidWYrNyxhS2V5K24qOCk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0rCQkgICAgcHJp bnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkg ICAgfQotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKLSsJ CWlmKG4gPT0gMikKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlw cmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBicmVhazsK LSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0r CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXBy aW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJ ewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAw KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9 MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxl bik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2Fz ZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkg ICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsK LSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJj bXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWlu dGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsK LSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5U RVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAg ICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBw cmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExB SU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAo YXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewot KwkJICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4 dCxsZW4scmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChk aXIgPT0gMSk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJ CQkJICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIkNJ UEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIp KTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNl IDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkg ICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0rCQl7 Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBl bHNlCi0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQy YmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0rCQkg ICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0r CQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAgICBl cnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJCi0rCQlQcmludFZhbHVlKCJDSVBI RVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIp ID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChh bW9kZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhlcnRl eHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2Vy dChkaXIgPT0gMCk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBh S2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8K LSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUo IlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0 cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAg IGJyZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJewot KwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJ ICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBhbHJl YWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJfQot KwkgICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAocmZw KQotKwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJl dHVybiBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3Ig Ci0rICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KLSsg IEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgucmVx Ci0rICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4 eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJz cGZpbGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9 ICIiLCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlk b19wcmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAoYXJn YyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJICAg IHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2 WzFdLCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9vcHQg PSAwOwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQgcGFy YW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYg KGFyZ2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7 Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0ID0g YXJndlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJ ICAgIHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkKLSsJ eyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4ocnFs aXN0LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3Qg ZmlsZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwg c2l6ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwotKwkg ICAgc3RyY3B5KHJmbiwgZm4pOwotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZu KTsKLSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJCXByaW50Zigi Pj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJRVhJVCgxKTsK LSsJCX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8qIHNpbmdsZSBm aWxlICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4i LCBmbik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewotKwkgICAgcHJp bnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKLSsJICAgIH0K LSsJfQotKyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMKLS0tLSBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kc3N2cy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCww ICsxLDUzNyBAQAotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgRFNBIHN1cHBvcnRcbiIp OwotKyAgICByZXR1cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r I2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJm aXBzX3V0bC5oIgotKwotK3N0YXRpYyB2b2lkIHBibihjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0g KmJuKQotKwl7Ci0rCWludCBsZW4sIGk7Ci0rCXVuc2lnbmVkIGNoYXIgKnRtcDsKLSsJbGVuID0g Qk5fbnVtX2J5dGVzKGJuKTsKLSsJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKLSsJaWYgKCF0 bXApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4i KTsKLSsJCXJldHVybjsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlwcmludGYoIiVz ID0gIiwgbmFtZSk7Ci0rCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSsJCXByaW50ZigiJTAy WCIsIHRtcFtpXSk7Ci0rCWZwdXRzKCJcbiIsIHN0ZG91dCk7Ci0rCU9QRU5TU0xfZnJlZSh0bXAp OwotKwlyZXR1cm47Ci0rCX0KLSsKLSt2b2lkIHByaW1lcygpCi0rICAgIHsKLSsgICAgY2hhciBi dWZbMTAyNDBdOwotKyAgICBjaGFyIGxidWZbMTAyNDBdOwotKyAgICBjaGFyICprZXl3b3JkLCAq dmFsdWU7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxM KQotKwl7Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQs ICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21wKGtleXdvcmQs IlByaW1lIikpCi0rCSAgICB7Ci0rCSAgICBCSUdOVU0gKnBwOwotKwotKwkgICAgcHA9Qk5fbmV3 KCk7Ci0rCSAgICBkb19oZXgyYm4oJnBwLHZhbHVlKTsKLSsJICAgIHByaW50ZigicmVzdWx0PSAl Y1xuIiwKLSsJCSAgIEJOX2lzX3ByaW1lX2V4KHBwLDIwLE5VTEwsTlVMTCkgPyAnUCcgOiAnRicp OwotKwkgICAgfQkgICAgCi0rCX0KLSsgICAgfQotKwotK3ZvaWQgcHFnKCkKLSsgICAgewotKyAg ICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3 b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1Zixz aXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29y ZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQlj b250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9k PWF0b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQotKwkgICAgewot KwkgICAgaW50IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxu IixubW9kKTsKLSsKLSsJICAgIHdoaWxlKG4tLSkKLSsJCXsKLSsJCXVuc2lnbmVkIGNoYXIgc2Vl ZFsyMF07Ci0rCQlEU0EgKmRzYTsKLSsJCWludCBjb3VudGVyOwotKwkJdW5zaWduZWQgbG9uZyBo OwotKwkJZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCi0rCQlpZiAoIURTQV9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCQkJewotKwkJ CWRvX3ByaW50X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJcGJuKCJQIixkc2Et PnApOwotKwkJcGJuKCJRIixkc2EtPnEpOwotKwkJcGJuKCJHIixkc2EtPmcpOwotKwkJcHYoIlNl ZWQiLHNlZWQsMjApOwotKwkJcHJpbnRmKCJjID0gJWRcbiIsY291bnRlcik7Ci0rCQlwcmludGYo IkggPSAlbHhcbiIsaCk7Ci0rCQlwdXRjKCdcbicsc3Rkb3V0KTsKLSsJCX0KLSsJICAgIH0KLSsJ ZWxzZQotKwkgICAgZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgcHFn dmVyKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRd OwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIEJJR05VTSAqcCA9IE5VTEwsICpx ID0gTlVMTCwgKmcgPSBOVUxMOwotKyAgICBpbnQgY291bnRlciwgY291bnRlcjI7Ci0rICAgIHVu c2lnbmVkIGxvbmcgaCwgaDI7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rICAgIGludCBubW9kPTA7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgc2VlZFsxMDI0XTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVm LHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3 b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJ CWNvbnRpbnVlOwotKwkJfQotKwlmcHV0cyhidWYsIHN0ZG91dCk7Ci0rCWlmKCFzdHJjbXAoa2V5 d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIlAiKSkKLSsJICAgIHA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIlEiKSkKLSsJICAgIHE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIkciKSkKLSsJICAgIGc9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIlNlZWQiKSkKLSsJICAgIHsKLSsJICAgIGludCBzbGVuID0gaGV4MmJpbih2YWx1 ZSwgc2VlZCk7Ci0rCSAgICBpZiAoc2xlbiAhPSAyMCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiU2VlZCBwYXJzZSBsZW5ndGggZXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAg ICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJjIikpCi0rCSAgICBjb3VudGVyID1hdG9p KGJ1Zis0KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkgiKSkKLSsJICAgIHsKLSsJICAg IGggPSBhdG9pKHZhbHVlKTsKLSsJICAgIGlmICghcCB8fCAhcSB8fCAhZykKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAg ICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRl cnNfZXgoZHNhLCBubW9kLHNlZWQsMjAgLCZjb3VudGVyMiwmaDIsTlVMTCkpCi0rCQkJewotKwkJ CWRvX3ByaW50X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKyAgICAgICAgICAgIGlm IChCTl9jbXAoZHNhLT5wLCBwKSB8fCBCTl9jbXAoZHNhLT5xLCBxKSB8fCBCTl9jbXAoZHNhLT5n LCBnKQotKwkJfHwgKGNvdW50ZXIgIT0gY291bnRlcjIpIHx8IChoICE9IGgyKSkKLSsJICAgIAlw cmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgZWxzZQotKwkgICAgCXByaW50ZigiUmVzdWx0 ID0gUFxuIik7Ci0rCSAgICBCTl9mcmVlKHApOwotKwkgICAgQk5fZnJlZShxKTsKLSsJICAgIEJO X2ZyZWUoZyk7Ci0rCSAgICBwID0gTlVMTDsKLSsJICAgIHEgPSBOVUxMOwotKwkgICAgZyA9IE5V TEw7Ci0rCSAgICBGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAgICBkc2EgPSBOVUxMOwotKwkgICAg fQotKwl9Ci0rICAgIH0KLSsKLSsvKiBLZXlwYWlyIHZlcmlmaWNhdGlvbiByb3V0aW5lLiBOQjog dGhpcyBpc24ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBGSVBTMTQwLTIKLSsgKiBhbGdvcml0aG0g dGVzdHMuIEl0IGlzIGFuIGFkZGl0aW9uYWwgdGVzdCB0byBwZXJmb3JtIHNhbml0eSBjaGVja3Mg b24gdGhlCi0rICogb3V0cHV0IG9mIHRoZSBLZXlQYWlyIHRlc3QuCi0rICovCi0rCi0rc3RhdGlj IGludCBkc3NfcGFyYW1jaGVjayhpbnQgbm1vZCwgQklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05V TSAqZywKLSsJCQkJCQkJQk5fQ1RYICpjdHgpCi0rICAgIHsKLSsgICAgQklHTlVNICpyZW0gPSBO VUxMOwotKyAgICBpZiAoQk5fbnVtX2JpdHMocCkgIT0gbm1vZCkKLSsJcmV0dXJuIDA7Ci0rICAg IGlmIChCTl9udW1fYml0cyhxKSAhPSAxNjApCi0rCXJldHVybiAwOwotKyAgICBpZiAoQk5faXNf cHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCi0rCXJldHVybiAw OwotKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocSwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwp ICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZW0gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFCTl9t b2QocmVtLCBwLCBxLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKQotKyAgICAJfHwgKEJOX2NtcChn LCBCTl92YWx1ZV9vbmUoKSkgPD0gMCkKLSsJfHwgIUJOX21vZF9leHAocmVtLCBnLCBxLCBwLCBj dHgpIHx8ICFCTl9pc19vbmUocmVtKSkKLSsJewotKwlCTl9mcmVlKHJlbSk7Ci0rCXJldHVybiAw OwotKwl9Ci0rICAgIC8qIFRvZG86IGNoZWNrIGcgKi8KLSsgICAgQk5fZnJlZShyZW0pOwotKyAg ICByZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQga2V5dmVyKCkKLSsgICAgewotKyAgICBjaGFy IGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAq dmFsdWU7Ci0rICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMLCAqWCA9 IE5VTEwsICpZID0gTlVMTDsKLSsgICAgQklHTlVNICpZMjsKLSsgICAgQk5fQ1RYICpjdHggPSBO VUxMOwotKyAgICBpbnQgbm1vZD0wLCBwYXJhbWNoZWNrID0gMDsKLSsKLSsgICAgY3R4ID0gQk5f Q1RYX25ldygpOwotKyAgICBZMiA9IEJOX25ldygpOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYs c2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJ Y29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewot KwkgICAgaWYgKHApCi0rCQlCTl9mcmVlKHApOwotKwkgICAgcCA9IE5VTEw7Ci0rCSAgICBpZiAo cSkKLSsJCUJOX2ZyZWUocSk7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAgIGlmIChnKQotKwkJQk5f ZnJlZShnKTsKLSsJICAgIGcgPSBOVUxMOwotKwkgICAgcGFyYW1jaGVjayA9IDA7Ci0rCSAgICBu bW9kPWF0b2kodmFsdWUpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIp KQotKwkgICAgcD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIp KQotKwkgICAgcT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIp KQotKwkgICAgZz1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWCIp KQotKwkgICAgWD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIp KQotKwkgICAgewotKwkgICAgWT1oZXgyYm4odmFsdWUpOwotKwkgICAgaWYgKCFwIHx8ICFxIHx8 ICFnIHx8ICFYIHx8ICFZKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxu Iik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIHBibigiUCIscCk7Ci0rCSAgICBwYm4oIlEi LHEpOwotKwkgICAgcGJuKCJHIixnKTsKLSsJICAgIHBibigiWCIsWCk7Ci0rCSAgICBwYm4oIlki LFkpOwotKwkgICAgaWYgKCFwYXJhbWNoZWNrKQotKwkJewotKwkJaWYgKGRzc19wYXJhbWNoZWNr KG5tb2QsIHAsIHEsIGcsIGN0eCkpCi0rCQkJcGFyYW1jaGVjayA9IDE7Ci0rCQllbHNlCi0rCQkJ cGFyYW1jaGVjayA9IC0xOwotKwkJfQotKwkgICAgaWYgKHBhcmFtY2hlY2sgIT0gMSkKLSsJICAg CXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZiAoIUJOX21v ZF9leHAoWTIsIGcsIFgsIHAsIGN0eCkgfHwgQk5fY21wKFkyLCBZKSkKLSsJICAgIAkJcHJpbnRm KCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgICAgICBlbHNlCi0rCSAgICAJCXByaW50ZigiUmVzdWx0 ID0gUFxuIik7Ci0rCQl9Ci0rCSAgICBCTl9mcmVlKFgpOwotKwkgICAgQk5fZnJlZShZKTsKLSsJ ICAgIFggPSBOVUxMOwotKwkgICAgWSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsJaWYgKHApCi0r CSAgICBCTl9mcmVlKHApOwotKwlpZiAocSkKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCWlmIChnKQot KwkgICAgQk5fZnJlZShnKTsKLSsJaWYgKFkyKQotKwkgICAgQk5fZnJlZShZMik7Ci0rICAgIH0K LSsKLSt2b2lkIGtleXBhaXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBj aGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5t b2Q9MDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp Ci0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0r CQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJOIikpCi0rCSAgICB7Ci0rCSAgICBEU0EgKmRzYTsKLSsJICAgIGlu dCBuPWF0b2kodmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7 Ci0rCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3Bh cmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCQl7Ci0rCQlk b19wcmludF9lcnJvcnMoKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLGRzYS0+ cCk7Ci0rCSAgICBwYm4oIlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAg ICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsKLSsJICAgIHdoaWxlKG4tLSkKLSsJCXsKLSsJCWlmICgh RFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJ CQlleGl0KDEpOwotKwkJCX0KLSsKLSsJCXBibigiWCIsZHNhLT5wcml2X2tleSk7Ci0rCQlwYm4o IlkiLGRzYS0+cHViX2tleSk7Ci0rCQlwdXRjKCdcbicsc3Rkb3V0KTsKLSsJCX0KLSsJICAgIH0K LSsJfQotKyAgICB9Ci0rCi0rdm9pZCBzaWdnZW4oKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEw MjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsK LSsgICAgaW50IG5tb2Q9MDsKLSsgICAgRFNBICpkc2E9TlVMTDsKLSsKLSsgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJ ICAgIHsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICBwcmludGYoIlttb2QgPSAlZF1c blxuIixubW9kKTsKLSsJICAgIGlmIChkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAg ICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRl cnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCQl7Ci0rCQlkb19wcmlu dF9lcnJvcnMoKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0r CSAgICBwYm4oIlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRj KCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIp KQotKwkgICAgewotKwkgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Ci0rCSAgICB1bnNpZ25l ZCBjaGFyIHNidWZbNjBdOwotKwkgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgbjsK LSsJICAgIEVWUF9QS0VZIHBrOwotKwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRFNBX1NJ RyAqc2lnOwotKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsKLSsJICAgIG49aGV4MmJp bih2YWx1ZSxtc2cpOwotKwkgICAgcHYoIk1zZyIsbXNnLG4pOwotKwotKwkgICAgaWYgKCFEU0Ff Z2VuZXJhdGVfa2V5KGRzYSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWV4aXQo MSk7Ci0rCQl9Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOwotKwkgICAgcGsucGtleS5k c2EgPSBkc2E7Ci0rCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0rCi0rCSAgICBFVlBfU2ln bkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOwotKwkgICAgRVZQX1NpZ25VcGRhdGUo Jm1jdHgsIG1zZywgbik7Ci0rCSAgICBFVlBfU2lnbkZpbmFsKCZtY3R4LCBzYnVmLCAmc2xlbiwg JnBrKTsKLSsKLSsJICAgIHNpZyA9IERTQV9TSUdfbmV3KCk7Ci0rCSAgICBGSVBTX2RzYV9zaWdf ZGVjb2RlKHNpZywgc2J1Ziwgc2xlbik7Ci0rCi0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0rCSAg ICBwYm4oIlMiLHNpZy0+cyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIERTQV9T SUdfZnJlZShzaWcpOwotKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJICAgIH0K LSsJfQotKwlpZiAoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKyAgICB9Ci0rCi0rdm9p ZCBzaWd2ZXIoKQotKyAgICB7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rICAgIGNoYXIgYnVmWzEw MjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRd OwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTAsIG49MDsKLSsg ICAgRFNBX1NJRyBzZywgKnNpZyA9ICZzZzsKLSsKLSsgICAgc2lnLT5yID0gTlVMTDsKLSsgICAg c2lnLT5zID0gTlVMTDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4p ICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYs IGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQot KwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJICAgIG5tb2Q9YXRvaSh2 YWx1ZSk7Ci0rCSAgICBpZihkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAgICBkc2E9 RklQU19kc2FfbmV3KCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikp Ci0rCSAgICBkc2EtPnA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlEiKSkKLSsJICAgIGRzYS0+cT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiRyIpKQotKwkgICAgewotKwkgICAgZHNhLT5nPWhleDJibih2YWx1ZSk7Ci0rCi0rCSAg ICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJICAgIHBibigiUCIsZHNhLT5wKTsK LSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1 dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNn IikpCi0rCSAgICB7Ci0rCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKLSsJICAgIHB2KCJNc2ci LG1zZyxuKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKLSsJICAg IGRzYS0+cHViX2tleT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi UiIpKQotKwkgICAgc2lnLT5yPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJTIikpCi0rCSAgICB7Ci0rCSAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBFVlBfUEtF WSBwazsKLSsJICAgIHVuc2lnbmVkIGNoYXIgc2lnYnVmWzYwXTsKLSsJICAgIHVuc2lnbmVkIGlu dCBzbGVuOwotKwkgICAgaW50IHI7Ci0rCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwkg ICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwkg ICAgc2lnLT5zPWhleDJibih2YWx1ZSk7Ci0rCQotKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkp OwotKwkgICAgcGJuKCJSIixzaWctPnIpOwotKwkgICAgcGJuKCJTIixzaWctPnMpOwotKwotKwkg ICAgc2xlbiA9IEZJUFNfZHNhX3NpZ19lbmNvZGUoc2lnYnVmLCBzaWcpOwotKwkgICAgRVZQX1Zl cmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOwotKwkgICAgRVZQX1ZlcmlmeVVw ZGF0ZSgmbWN0eCwgbXNnLCBuKTsKLSsJICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNp Z2J1Ziwgc2xlbiwgJnBrKTsKLSsJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCQot KwkgICAgcHJpbnRmKCJSZXN1bHQgPSAlY1xuIiwgciA9PSAxID8gJ1AnIDogJ0YnKTsKLSsJICAg IHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLStpbnQgbWFpbihp bnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyAgICBpZihhcmdjICE9IDIpCi0rCXsKLSsJ ZnByaW50ZihzdGRlcnIsIiVzIFtwcmltZXxwcWd8cHFndmVyfGtleXBhaXJ8c2lnZ2VufHNpZ3Zl cl1cbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQo MSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYo IXN0cmNtcChhcmd2WzFdLCJwcmltZSIpKQotKwlwcmltZXMoKTsKLSsgICAgZWxzZSBpZighc3Ry Y21wKGFyZ3ZbMV0sInBxZyIpKQotKwlwcWcoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sInBxZ3ZlciIpKQotKwlwcWd2ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0s ImtleXBhaXIiKSkKLSsJa2V5cGFpcigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwi a2V5dmVyIikpCi0rCWtleXZlcigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2ln Z2VuIikpCi0rCXNpZ2dlbigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lndmVy IikpCi0rCXNpZ3ZlcigpOwotKyAgICBlbHNlCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIkRvbid0 IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKLSsJZXhpdCgxKTsKLSsJfQotKwotKyAgICBy ZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JuZ3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlw c19ybmd2cy5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCTIwMTAtMDMtMzAgMTA6 MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDIzMCBAQAotKy8qCi0rICogQ3J1ZGUg dGVzdCBkcml2ZXIgZm9yIHByb2Nlc3NpbmcgdGhlIFZTVCBhbmQgTUNUIHRlc3R2ZWN0b3IgZmls ZXMKLSsgKiBnZW5lcmF0ZWQgYnkgdGhlIENNVlAgUk5HVlMgcHJvZHVjdC4KLSsgKgotKyAqIE5v dGUgdGhlIGlucHV0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBfdmVyeV8gc3BlY2lmaWMg Zm9ybWF0Ci0rICogYXMgZGVzY3JpYmVkIGluIHRoZSBOSVNUIGRvY3VtZW50ICJUaGUgUmFuZG9t IE51bWJlciBHZW5lcmF0b3IKLSsgKiBWYWxpZGF0aW9uIFN5c3RlbSAoUk5HVlMpIiwgTWF5IDI1 LCAyMDA0LgotKyAqCi0rICovCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsK LSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSTkcgc3Vw cG9ydFxuIik7Ci0rICAgIHJldHVybiAwOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC94NTA5djMuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0r Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rdm9pZCB2c3QoKQotKyAgICB7Ci0rICAgIHVu c2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOwot KyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2 XTsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hh ciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBsb25nIGksIGtleWxlbjsKLSsKLSsgICAga2V5bGVu ID0gMDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp Ci0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgt S2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDE2OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FF UyAxOTItS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDI0OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1 ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDMyOwotKwlpZiAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3Ry Y21wKGtleXdvcmQsIktleSIpKQotKwkgICAgewotKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwm aSk7Ci0rCSAgICBpZiAoaSAhPSBrZXlsZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIklu dmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJCXJldHVybjsK LSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCi0rCSAgICB7 Ci0rCSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsK LSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKLSsJICAgIHsK LSsJICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJ CX0KLSsKLSsJICAgIGlmICgha2V5IHx8ICFkdCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi TWlzc2luZyBrZXkgb3IgRFRcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgRklQU19y YW5kX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKwkgICAgRklQU19yYW5kX3NlZWQodiwxNik7Ci0r CSAgICBGSVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJICAgIGlmIChGSVBTX3JhbmRfYnl0ZXMocmV0 LDE2KSA8PSAwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcg dmFsdWVcbiIpOwotKwkgICAgICAgIHJldHVybjsKLSsJICAgICAgICB9Ci0rCi0rCSAgICBwdigi UiIscmV0LDE2KTsKLSsJICAgIE9QRU5TU0xfZnJlZShrZXkpOwotKwkgICAga2V5ID0gTlVMTDsK LSsJICAgIE9QRU5TU0xfZnJlZShkdCk7Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAgICBPUEVOU1NM X2ZyZWUodik7Ci0rCSAgICB2ID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rdm9p ZCBtY3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7Ci0rICAgIHVu c2lnbmVkIGNoYXIgKnYgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNo YXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBsb25nIGks IGtleWxlbjsKLSsgICAgaW50IGo7Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAgIHdoaWxl KGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1Zixz dGRvdXQpOwotKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0rCQlrZXls ZW4gPSAxNjsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCi0r CQlrZXlsZW4gPSAyNDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAx MykpCi0rCQlrZXlsZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUs IGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkK LSsJICAgIHsKLSsJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0g a2V5bGVuKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4 cGVjdGluZyAlbGRcbiIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4MmJpbl9t KHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIs ICJJbnZhbGlkIERUIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJiaW5fbSh2 YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi SW52YWxpZCBWIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBpZiAoIWtl eSB8fCAhZHQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4i KTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5 bGVuKTsKLSsJICAgIEZJUFNfcmFuZF9zZWVkKHYsMTYpOwotKwkgICAgZm9yIChpID0gMDsgaSA8 IDEwMDAwOyBpKyspCi0rCQl7Ci0rCQkgICAgRklQU19yYW5kX3NldF9kdChkdCk7Ci0rCQkgICAg aWYgKEZJUFNfcmFuZF9ieXRlcyhyZXQsMTYpIDw9IDApCi0rCQkJewotKwkJCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJCSAgICAgICAgcmV0dXJuOwot KwkJICAgICAgICB9Ci0rCQkgICAgLyogSW5jcmVtZW50IERUICovCi0rCQkgICAgZm9yIChqID0g MTU7IGogPj0gMDsgai0tKQotKwkJCXsKLSsJCQlkdFtqXSsrOwotKwkJCWlmIChkdFtqXSkKLSsJ CQkJYnJlYWs7Ci0rCQkJfQotKwkJfQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0rCSAgICBP UEVOU1NMX2ZyZWUoa2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUo ZHQpOwotKwkgICAgZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkgICAgdiA9 IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIg Kiphcmd2KQotKyAgICB7Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVy ciwiJXMgW21jdHx2c3RdXG4iLGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFG SVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwot Kwl9Ci0rICAgIEZJUFNfcmFuZF9yZXNldCgpOwotKyAgICBpZiAoIUZJUFNfcmFuZF90ZXN0X21v ZGUoKSkKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcgUFJORyB0ZXN0IG1v ZGVcbiIpOwotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZigh c3RyY21wKGFyZ3ZbMV0sIm1jdCIpKQotKwltY3QoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFy Z3ZbMV0sInZzdCIpKQotKwl2c3QoKTsKLSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJy LCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsK LSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3Qu YwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwzOTAgQEAK LSsvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z b24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUu Ci0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUsMjAwNyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi Ci0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K LSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZ b3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsg KgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5T U0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBw cmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwot KyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUg Km91dCwgRklMRSAqaW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQsIFJT QSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAotKwkJQklH TlVNICplKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwK LSsJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSk7Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5V TEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwotKwlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsK LSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChhcmdj ID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJy Iik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0 ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBl bmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRB TCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0r Ci0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJ CX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAocmV0KQotKwkJZG9f cHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJZmNsb3Nl KGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsK LSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkx MDI0MAotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKQotKwl7Ci0rCWNoYXIg KmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0r CVJTQSAqcnNhID0gTlVMTDsKLSsJQklHTlVNICpYcDEgPSBOVUxMLCAqWHAyID0gTlVMTCwgKlhw ID0gTlVMTDsKLSsJQklHTlVNICpYcTEgPSBOVUxMLCAqWHEyID0gTlVMTCwgKlhxID0gTlVMTDsK LSsJQklHTlVNICplID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsK LSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGlu ZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxp bmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9s aW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlz dHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBT a2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpr ZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJ CXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdp dGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwIHx8ICpr ZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0r CQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwot KwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9 IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwot KwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSAr IHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3 b3JkLCAieHAxIikpCi0rCQkJewotKwkJCWlmIChYcDEgfHwgIWRvX2hleDJibigmWHAxLHZhbHVl KSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJ4cDIiKSkKLSsJCQl7Ci0rCQkJaWYgKFhwMiB8fCAhZG9faGV4MmJuKCZYcDIsdmFs dWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIlhwIikpCi0rCQkJewotKwkJCWlmIChYcCB8fCAhZG9faGV4MmJuKCZYcCx2YWx1 ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAieHExIikpCi0rCQkJewotKwkJCWlmIChYcTEgfHwgIWRvX2hleDJibigmWHExLHZh bHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJ4cTIiKSkKLSsJCQl7Ci0rCQkJaWYgKFhxMiB8fCAhZG9faGV4MmJuKCZYcTIs dmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlhxIikpCi0rCQkJewotKwkJCWlmIChYcSB8fCAhZG9faGV4MmJuKCZYcSx2 YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAoZSB8fCAhZG9faGV4MmJuKCZlLHZhbHVl KSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJwMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAicDIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAi KSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInExIikpCi0r CQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMiIpKQotKwkJCWNv bnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicSIpKQotKwkJCWNvbnRpbnVl OwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJCWNvbnRpbnVlOwotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZQot KwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJ CWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCi0rCQkJewotKwkJCXJzYSA9IEZJUFNfcnNhX25l dygpOwotKwkJCWlmICghcnNhKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICghcnNhX3ByaW50 a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlC Tl9mcmVlKFhwMSk7Ci0rCQkJWHAxID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhwMik7Ci0rCQkJWHAy ID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhwKTsKLSsJCQlYcCA9IE5VTEw7Ci0rCQkJQk5fZnJlZShl KTsKLSsJCQllID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQlpZiAocnNhICYmIFhxMSAmJiBYcTIgJiYg WHEpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50a2V5MihvdXQsIHJzYSwgWHExLCBYcTIsIFhx KSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKFhxMSk7Ci0rCQkJWHExID0gTlVMTDsK LSsJCQlCTl9mcmVlKFhxMik7Ci0rCQkJWHEyID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhxKTsKLSsJ CQlYcSA9IE5VTEw7Ci0rCQkJRklQU19yc2FfZnJlZShyc2EpOwotKwkJCXJzYSA9IE5VTEw7Ci0r CQkJfQotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVm KQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NM X2ZyZWUobGluZWJ1Zik7Ci0rCi0rCWlmIChYcDEpCi0rCQlCTl9mcmVlKFhwMSk7Ci0rCWlmIChY cDIpCi0rCQlCTl9mcmVlKFhwMik7Ci0rCWlmIChYcCkKLSsJCUJOX2ZyZWUoWHApOwotKwlpZiAo WHExKQotKwkJQk5fZnJlZShYcTEpOwotKwlpZiAoWHExKQotKwkJQk5fZnJlZShYcTEpOwotKwlp ZiAoWHEyKQotKwkJQk5fZnJlZShYcTIpOwotKwlpZiAoWHEpCi0rCQlCTl9mcmVlKFhxKTsKLSsJ aWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJlZShyc2Ep OwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRl cnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwot Kwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRrZXkxKEZJTEUg Km91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05VTSAqWHAs Ci0rCQlCSUdOVU0gKmUpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCUJJR05VTSAqcDEgPSBOVUxM LCAqcDIgPSBOVUxMOwotKwlwMSA9IEJOX25ldygpOwotKwlwMiA9IEJOX25ldygpOwotKwlpZiAo IXAxIHx8ICFwMikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4 KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhwMiwgWHAsCi0rCQkJCQkJTlVMTCwgTlVM TCwgTlVMTCwgZSwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlkb19ibl9wcmludF9uYW1l KG91dCwgInAxIiwgcDEpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAyIiwgcDIpOwotKwlk b19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnApOwotKwotKwlyZXQgPSAxOwotKwotKwll cnJvcjoKLSsJaWYgKHAxKQotKwkJQk5fZnJlZShwMSk7Ci0rCWlmIChwMikKLSsJCUJOX2ZyZWUo cDIpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRrZXky KEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05V TSAqWHEpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCUJJR05VTSAqcTEgPSBOVUxMLCAqcTIgPSBO VUxMOwotKwlxMSA9IEJOX25ldygpOwotKwlxMiA9IEJOX25ldygpOwotKwlpZiAoIXExIHx8ICFx MikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVM TCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxMLAotKwkJCQkJCVhxMSwgWHEyLCBYcSwg TlVMTCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlkb19ibl9wcmludF9uYW1lKG91dCwg InExIiwgcTEpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEyIiwgcTIpOwotKwlkb19ibl9w cmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgIm4i LCByc2EtPm4pOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgImQiLCByc2EtPmQpOwotKwotKwly ZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHExKQotKwkJQk5fZnJlZShxMSk7Ci0rCWlmIChx MikKLSsJCUJOX2ZyZWUocTIpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlwcwkyMDEwLTAz LTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAy MDAKLUBAIC0wLDAgKzEsMzcwIEBACi0rLyogZmlwc19yc2FzdGVzdC5jICovCi0rLyogV3JpdHRl biBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVu U1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUg d3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1 ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jp by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgot KwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJl dHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStz dGF0aWMgaW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbik7Ci0r c3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01E ICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4p OwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9 IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMSwgU2FsdGxlbiA9IC0xOwotKwot KwlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJ Z290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVu IiwgYXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKLSsJCWlmIChT YWx0bGVuIDwgMCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBz YWx0IGxlbmd0aFxuIik7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYXJnYyAtPSAyOwotKwkJ YXJndiArPSAyOwotKwkJfQotKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMx IiwgYXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gLTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2 Kys7Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0r CQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9 IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYg KCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRp b24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIp OwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3N0ZXN0KG91dCwgaW4sIFNhbHRs ZW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FTVEVTVCBmaWxlIHByb2Nl c3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7 Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlp ZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91 dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0K LSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3N0ZXN0 KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYs ICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCVJTQSAqcnNh ID0gTlVMTDsKLSsJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAq TXNnID0gTlVMTDsKLSsJbG9uZyBNc2dsZW4gPSAtMTsKLSsJaW50IGtleWxlbiA9IC0xLCBjdXJy ZW50X2tleWxlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlv bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVm ID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1 ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVi dWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNw eShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAg bGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdv cmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9 IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBqdXN0IGNvcHkgKi8KLSsJ CWlmICghcCkKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJ Z290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0r CQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCAr IDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3Ry bGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCS8qIExvb2sgZm9yIFttb2QgPSBY WFhdIGZvciBrZXkgbGVuZ3RoICovCi0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW21vZCIp KQotKwkJCXsKLSsJCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsJCQlpZiAoKnAg IT0gJ10nKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCSpwID0gMDsKLSsJCQlrZXlsZW4g PSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoa2V5bGVuIDwgMCkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTSEFBbGciKSkKLSsJCQl7 Ci0rCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMSgp OwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkKLSsJCQkJZGdzdCA9IEVW UF9zaGEyMjQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2IikpCi0rCQkJ CWRnc3QgPSBFVlBfc2hhMjU2KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4 NCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFs dWUsICJTSEE1MTIiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsKLSsJCQllbHNlCi0rCQkJ CXsKLSsJCQkJZnByaW50ZihzdGRlcnIsCi0rCQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29y aXRobSBcIiVzXCJcbiIsCi0rCQkJCQkJCQl2YWx1ZSk7Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJ CQl7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVu KHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJTXNnID0gaGV4MmJpbl9t KHZhbHVlLCAmTXNnbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQl9Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCS8qIElmIGtleSBsZW5n dGggaGFzIGNoYW5nZWQsIGdlbmVyYXRlIGFuZCBvdXRwdXQgcHVibGljCi0rCQkgKiBrZXkgY29t cG9uZW50cyBvZiBuZXcgUlNBIHByaXZhdGUga2V5LgotKwkJICovCi0rCi0rCQlpZiAoa2V5bGVu ICE9IGN1cnJlbnRfa2V5bGVuKQotKwkJCXsKLSsJCQlCSUdOVU0gKmJuX2U7Ci0rCQkJaWYgKHJz YSkKLSsJCQkJRklQU19yc2FfZnJlZShyc2EpOwotKwkJCXJzYSA9IEZJUFNfcnNhX25ldygpOwot KwkJCWlmICghcnNhKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWJuX2UgPSBCTl9uZXcoKTsKLSsJ CQlpZiAoIWJuX2UgfHwgIUJOX3NldF93b3JkKGJuX2UsIDB4MTAwMSkpCi0rCQkJCWdvdG8gZXJy b3I7Ci0rCQkJaWYgKCFSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBrZXlsZW4sIGJuX2Us IE5VTEwpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCUJOX2ZyZWUoYm5fZSk7Ci0rCQkJZnB1dHMo Im4gPSAiLCBvdXQpOwotKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5uKTsKLSsJCQlmcHV0cygi XG5lID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChvdXQsIHJzYS0+ZSk7Ci0rCQkJZnB1dHMo IlxuIiwgb3V0KTsKLSsJCQljdXJyZW50X2tleWxlbiA9IGtleWxlbjsKLSsJCQl9Ci0rCi0rCQlp ZiAoTXNnICYmIGRnc3QpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50c2lnKG91dCwgcnNhLCBk Z3N0LCBNc2csIE1zZ2xlbiwKLSsJCQkJCQkJCVNhbHRsZW4pKQotKwkJCQlnb3RvIGVycm9yOwot KwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJfQotKwotKwkJfQot KwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1 Zik7Ci0rCWlmIChyc2EpCi0rCQlGSVBTX3JzYV9mcmVlKHJzYSk7Ci0rCi0rCXJldHVybiByZXQ7 Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVy cm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0r CX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25z dCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQg U2FsdGxlbikKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciAqc2lnYnVmID0g TlVMTDsKLSsJaW50IGksIHNpZ2xlbjsKLSsJLyogRVZQX1BLRVkgc3RydWN0dXJlICovCi0rCUVW UF9QS0VZIHBrOwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsK LSsJcGsucGtleS5yc2EgPSByc2E7Ci0rCi0rCXNpZ2xlbiA9IFJTQV9zaXplKHJzYSk7Ci0rCXNp Z2J1ZiA9IE9QRU5TU0xfbWFsbG9jKHNpZ2xlbik7Ci0rCWlmICghc2lnYnVmKQotKwkJZ290byBl cnJvcjsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2FsdGxlbiA+PSAw KQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAotKwkJCUVWUF9NRF9DVFhf RkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxzZSBpZiAoU2FsdGxl biA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFH X1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfU2lnbkluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCi0r CQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduVXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkK LSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25GaW5hbCgmY3R4LCBzaWdidWYsICh1bnNp Z25lZCBpbnQgKikmc2lnbGVuLCAmcGspKQotKwkJZ290byBlcnJvcjsKLSsKLSsJRVZQX01EX0NU WF9jbGVhbnVwKCZjdHgpOwotKwotKwlmcHV0cygiUyA9ICIsIG91dCk7Ci0rCi0rCWZvciAoaSA9 IDA7IGkgPCBzaWdsZW47IGkrKykKLSsJCWZwcmludGYob3V0LCAiJTAyWCIsIHNpZ2J1ZltpXSk7 Ci0rCi0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwot KwlyZXR1cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMJMjAx MC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMzc3IEBACi0rLyog Zmlwc19yc2F2dGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAq LwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICog KGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0r Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0r Ci0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8g RklQUyBSU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsK LSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxF ICppbiwgaW50IHNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJTEUgKm91dCwK LSsJCUJJR05VTSAqbiwgQklHTlVNICplLAotKwkJY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5z aWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKlMsIGxvbmcg U2xlbiwgaW50IFNhbHRsZW4pOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK LSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsK LSsJaW50IFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0r CQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2Mg PiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9 IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmludGYo c3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwot KwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFy Z2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9 IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQot KwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwot KwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVu KGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0 IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAo IXJzYV90ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBSU0FWVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRv X3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9z ZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0r Ci0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4J MTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4p Ci0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdv cmQsICp2YWx1ZTsKLSsJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKLSsJQklHTlVNICpuID0g TlVMTCwgKmUgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAqUyA9IE5VTEw7 Ci0rCWxvbmcgTXNnbGVuLCBTbGVuOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwot KwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwls aW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICgh bGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwl3aGlsZSAoZmdldHMo b2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJ CXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8q IFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwot KwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMg d2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXAgfHwg KmtleXdvcmQ9PSdbJykKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7 Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVl ID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0r Ci0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVl ICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtl eXdvcmQsICJuIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZuLHZhbHVlKSkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJl IikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZlLHZhbHVlKSkKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTSEFBbGciKSkK LSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCi0rCQkJCWRnc3QgPSBFVlBf c2hhMSgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkKLSsJCQkJZGdz dCA9IEVWUF9zaGEyMjQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2Iikp Ci0rCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwg IlNIQTM4NCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOwotKwkJCWVsc2UgaWYgKCFzdHJj bXAodmFsdWUsICJTSEE1MTIiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsKLSsJCQllbHNl Ci0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsCi0rCQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVk IGFsZ29yaXRobSBcIiVzXCJcbiIsCi0rCQkJCQkJCQl2YWx1ZSk7Ci0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ci KSkKLSsJCQl7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAo c3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJTXNnID0gaGV4 MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTIikpCi0rCQkJewot KwkJCWlmIChTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUp ICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlTID0gaGV4MmJpbl9tKHZhbHVlLCAm U2xlbik7Ci0rCQkJaWYgKCFTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxz ZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsK LSsJCWlmIChuICYmIGUgJiYgTXNnICYmIFMgJiYgZGdzdCkKLSsJCQl7Ci0rCQkJaWYgKCFyc2Ff cHJpbnR2ZXIob3V0LCBuLCBlLCBkZ3N0LAotKwkJCQkJTXNnLCBNc2dsZW4sIFMsIFNsZW4sIFNh bHRsZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1z ZyA9IE5VTEw7Ci0rCQkJT1BFTlNTTF9mcmVlKFMpOwotKwkJCVMgPSBOVUxMOwotKwkJCX0KLSsK LSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1 ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKGxpbmVidWYpOwotKwlpZiAobikKLSsJCUJOX2ZyZWUobik7Ci0rCWlmIChlKQotKwkJ Qk5fZnJlZShlKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBs bnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50 dmVyKEZJTEUgKm91dCwKLSsJCUJJR05VTSAqbiwgQklHTlVNICplLAotKwkJY29uc3QgRVZQX01E ICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKLSsJCXVuc2lnbmVk IGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDAsIHI7 Ci0rCS8qIFNldHVwIFJTQSBhbmQgRVZQX1BLRVkgc3RydWN0dXJlcyAqLwotKwlSU0EgKnJzYV9w dWJrZXkgPSBOVUxMOwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXVuc2ln bmVkIGNoYXIgKmJ1ZiA9IE5VTEw7Ci0rCXJzYV9wdWJrZXkgPSBGSVBTX3JzYV9uZXcoKTsKLSsJ aWYgKCFyc2FfcHVia2V5KQotKwkJZ290byBlcnJvcjsKLSsJcnNhX3B1YmtleS0+biA9IEJOX2R1 cChuKTsKLSsJcnNhX3B1YmtleS0+ZSA9IEJOX2R1cChlKTsKLSsJaWYgKCFyc2FfcHVia2V5LT5u IHx8ICFyc2FfcHVia2V5LT5lKQotKwkJZ290byBlcnJvcjsKLSsJcGsudHlwZSA9IEVWUF9QS0VZ X1JTQTsKLSsJcGsucGtleS5yc2EgPSByc2FfcHVia2V5OwotKwotKwlFVlBfTURfQ1RYX2luaXQo JmN0eCk7Ci0rCi0rCWlmIChTYWx0bGVuID49IDApCi0rCQl7Ci0rCQlNX0VWUF9NRF9DVFhfc2V0 X2ZsYWdzKCZjdHgsCi0rCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAx NikpOwotKwkJfQotKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQotKwkJTV9FVlBfTURfQ1RYX3Nl dF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwotKwlpZiAoIUVWUF9WZXJp ZnlJbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBf VmVyaWZ5VXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXIg PSBFVlBfVmVyaWZ5RmluYWwoJmN0eCwgUywgU2xlbiwgJnBrKTsKLSsKLSsKLSsJRVZQX01EX0NU WF9jbGVhbnVwKCZjdHgpOwotKwotKwlpZiAociA8IDApCi0rCQlnb3RvIGVycm9yOwotKwlFUlJf Y2xlYXJfZXJyb3IoKTsKLSsKLSsJaWYgKHIgPT0gMCkKLSsJCWZwdXRzKCJSZXN1bHQgPSBGXG4i LCBvdXQpOwotKwllbHNlCi0rCQlmcHV0cygiUmVzdWx0ID0gUFxuIiwgb3V0KTsKLSsKLSsJcmV0 ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChyc2FfcHVia2V5KQotKwkJRklQU19yc2FfZnJlZShy c2FfcHVia2V5KTsKLSsJaWYgKGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShidWYpOwotKwotKwlyZXR1 cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMv Zmlwc19zaGF0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19z aGF0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwzODggQEAKLSsvKiBmaXBzX3NoYXRl c3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5z aW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlw dG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRz b2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0K LSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRl IDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBTSEFY WFggc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5j bHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJ TEUgKmluKTsKLStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICptZCwgRklMRSAq b3V0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKTsKLStzdGF0aWMgaW50IHBy aW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIg KlNlZWQsIGludCBTZWVkTGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Ci0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7 Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47 Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAy KQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIp OwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBp bml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFv dXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlv biBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFkZ3N0X3Rlc3Qob3V0 LCBpbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nl c3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7 Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlp ZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91 dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0K LSsKLSsjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRTCTEwMjQwMAotKyNkZWZpbmUgU0hBX1RFU1Rf TUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklUUyA+PiAzKSAqIDIpICsgMTAwKQotKwotK2lu dCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJewotKwljb25zdCBFVlBfTUQgKm1k ID0gTlVMTDsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlNlZWQgPSBOVUxM OwotKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAtMSwgU2VlZExlbiA9IC0xOwotKwlpbnQgcmV0 ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNI QV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1Rf TUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVy cm9yOwotKwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFNIQV9URVNUX01BWExJTkVMRU4s IGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0r CQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsK LSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwot KwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3Qg Y29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsJ CQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJh aWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJ CQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBS ZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxp bmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7 Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJ CQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsIltMIikgJiYgKnA9PSddJykK LSsJCQl7Ci0rCQkJc3dpdGNoIChhdG9pKHZhbHVlKSkKLSsJCQkJewotKwkJCQljYXNlIDIwOiBt ZD1FVlBfc2hhMSgpOyAgIGJyZWFrOwotKwkJCQljYXNlIDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJy ZWFrOwotKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hhMjU2KCk7IGJyZWFrOwotKwkJCQljYXNlIDQ4 OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOwotKwkJCQljYXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7 IGJyZWFrOwotKwkJCQlkZWZhdWx0OiBnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTGVuIikpCi0rCQkJewotKwkJCWlmIChMZW4g IT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTGVuID0gYXRvaSh2YWx1ZSk7Ci0r CQkJaWYgKExlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJLyogT25seSBoYW5k bGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLwotKwkJCWlmIChMZW4gJiAweDcpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJaWYgKExlbiA+IFNIQV9URVNUX01BWF9CSVRTKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCU1zZ0xlbiA9IExlbiA+PiAzOwotKwkJCX0KLSsKLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlsb25nIHRtcGxlbjsKLSsJ CQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYg KE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUs ICZ0bXBsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNlZWQiKSkKLSsJCQl7Ci0rCQkJaWYgKHN0 cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCWlmIChTZWVkKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVNlZWQgPSBoZXgyYmluX20odmFsdWUsICZTZWVk TGVuKTsKLSsJCQlpZiAoIVNlZWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UK LSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0r CQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRf ZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNT TF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlNc2dMZW4gPSAtMTsKLSsJCQlMZW4g PSAtMTsKLSsJCQl9Ci0rCQllbHNlIGlmIChtZCAmJiBTZWVkICYmIChTZWVkTGVuID4gMCkpCi0r CQkJewotKwkJCWlmICghcHJpbnRfbW9udGUobWQsIG91dCwgU2VlZCwgU2VlZExlbikpCi0rCQkJ CWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKFNlZWQpOwotKwkJCVNlZWQgPSBOVUxMOwot KwkJCVNlZWRMZW4gPSAtMTsKLSsJCQl9Ci0rCQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwot KwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5l YnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChN c2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYgKFNlZWQpCi0rCQlPUEVOU1NMX2ZyZWUo U2VlZCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7 Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29u c3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1z Z2xlbikKLSsJewotKwlpbnQgaSwgbWRsZW47Ci0rCXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9N RF9TSVpFXTsKLSsJaWYgKCFFVlBfRGlnZXN0KE1zZywgTXNnbGVuLCBtZCwgKHVuc2lnbmVkIGlu dCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKLSsJCXsKLSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGlu ZyBIQVNIXG4iLCBzdGRlcnIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWZwdXRzKCJNRCA9ICIs IG91dCk7Ci0rCWZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIl MDJ4IiwgbWRbaV0pOwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwlyZXR1cm4gMTsKLSsJfQotKwot K3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJ dW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGks IGosIGs7Ci0rCWludCByZXQgPSAwOwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hh ciAqbTEsICptMiwgKm0zLCAqcDsKLSsJdW5zaWduZWQgaW50IG1sZW4sIG0xbGVuLCBtMmxlbiwg bTNsZW47Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNlZWRMZW4gPiBF VlBfTUFYX01EX1NJWkUpCi0rCQltbGVuID0gU2VlZExlbjsKLSsJZWxzZQotKwkJbWxlbiA9IEVW UF9NQVhfTURfU0laRTsKLSsKLSsJbTEgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTIgPSBP UEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTMgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsKLSsJ aWYgKCFtMSB8fCAhbTIgfHwgIW0zKQotKwkJZ290byBtY19lcnJvcjsKLSsKLSsJbTFsZW4gPSBt MmxlbiA9IG0zbGVuID0gU2VlZExlbjsKLSsJbWVtY3B5KG0xLCBTZWVkLCBTZWVkTGVuKTsKLSsJ bWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsK LSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQot KwkJewotKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKLSsJCQl7Ci0rCQkJRVZQX0RpZ2Vz dEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEs IG0xbGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0yLCBtMmxlbik7Ci0rCQkJRVZQ X0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4pOwotKwkJCXAgPSBtMTsKLSsJCQltMSA9IG0y OwotKwkJCW0xbGVuID0gbTJsZW47Ci0rCQkJbTIgPSBtMzsKLSsJCQltMmxlbiA9IG0zbGVuOwot KwkJCW0zID0gcDsKLSsJCQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgbTMsICZtM2xlbik7Ci0r CQkJfQotKwkJZnByaW50ZihvdXQsICJDT1VOVCA9ICVkXG4iLCBqKTsKLSsJCWZwdXRzKCJNRCA9 ICIsIG91dCk7Ci0rCQlmb3IgKGsgPSAwOyBrIDwgbTNsZW47IGsrKykKLSsJCQlmcHJpbnRmKG91 dCwgIiUwMngiLCBtM1trXSk7Ci0rCQlmcHV0cygiXG5cbiIsIG91dCk7Ci0rCQltZW1jcHkobTEs IG0zLCBtM2xlbik7Ci0rCQltZW1jcHkobTIsIG0zLCBtM2xlbik7Ci0rCQltMWxlbiA9IG0ybGVu ID0gbTNsZW47Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCW1jX2Vycm9yOgotKwlpZiAobTEp Ci0rCQlPUEVOU1NMX2ZyZWUobTEpOwotKwlpZiAobTIpCi0rCQlPUEVOU1NMX2ZyZWUobTIpOwot KwlpZiAobTMpCi0rCQlPUEVOU1NMX2ZyZWUobTMpOwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAo JmN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2NhdnMvZmlwc191dGwuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgJMjAxMC0wMy0z MCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMzQzIEBACi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqCi0rICovCi0rCi0rdm9pZCBkb19wcmludF9lcnJvcnModm9pZCkKLSsJewotKwlj b25zdCBjaGFyICpmaWxlLCAqZGF0YTsKLSsJaW50IGxpbmUsIGZsYWdzOwotKwl1bnNpZ25lZCBs b25nIGw7Ci0rCXdoaWxlICgobCA9IEVSUl9nZXRfZXJyb3JfbGluZV9kYXRhKCZmaWxlLCAmbGlu ZSwgJmRhdGEsICZmbGFncykpKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJFUlJPUjolbHg6 bGliPSVkLGZ1bmM9JWQscmVhc29uPSVkIgotKwkJCQkiOmZpbGU9JXM6bGluZT0lZDolc1xuIiwK LSsJCQlsLCBFUlJfR0VUX0xJQihsKSwgRVJSX0dFVF9GVU5DKGwpLCBFUlJfR0VUX1JFQVNPTihs KSwKLSsJCQlmaWxlLCBsaW5lLCBmbGFncyAmIEVSUl9UWFRfU1RSSU5HID8gZGF0YSA6ICIiKTsK LSsJCX0KLSsJfQotKwotK2ludCBoZXgyYmluKGNvbnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFy ICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG4xLCBuMjsKLSsgICAgdW5zaWduZWQgY2hhciBjaDsK LSsKLSsgICAgZm9yIChuMT0wLG4yPTAgOyBpbltuMV0gJiYgaW5bbjFdICE9ICdcbicgOyApCi0r CXsgLyogZmlyc3QgYnl0ZSAqLwotKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0g JzknKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnMCc7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0g J0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7 Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCi0rCSAgICBj aCA9IGluW24xKytdIC0gJ2EnICsgMTA7Ci0rCWVsc2UKLSsJICAgIHJldHVybiAtMTsKLSsJaWYo IWluW24xXSkKLSsJICAgIHsKLSsJICAgIG91dFtuMisrXT1jaDsKLSsJICAgIGJyZWFrOwotKwkg ICAgfQotKwlvdXRbbjJdID0gY2ggPDwgNDsKLSsJLyogc2Vjb25kIGJ5dGUgKi8KLSsJaWYgKChp bltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0g JzAnOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQotKwkg ICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykg JiYgKGluW24xXSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwotKwll bHNlCi0rCSAgICByZXR1cm4gLTE7Ci0rCW91dFtuMisrXSB8PSBjaDsKLSsJfQotKyAgICByZXR1 cm4gbjI7Ci0rICAgIH0KLSsKLSt1bnNpZ25lZCBjaGFyICpoZXgyYmluX20oY29uc3QgY2hhciAq aW4sIGxvbmcgKnBsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqcDsKLSsJcCA9IE9QRU5TU0xf bWFsbG9jKChzdHJsZW4oaW4pICsgMSkvMik7Ci0rCSpwbGVuID0gaGV4MmJpbihpbiwgcCk7Ci0r CXJldHVybiBwOwotKwl9Ci0rCi0raW50IGRvX2hleDJibihCSUdOVU0gKipwciwgY29uc3QgY2hh ciAqaW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqcDsKLSsJbG9uZyBwbGVuOwotKwlpbnQgciA9 IDA7Ci0rCXAgPSBoZXgyYmluX20oaW4sICZwbGVuKTsKLSsJaWYgKCFwKQotKwkJcmV0dXJuIDA7 Ci0rCWlmICghKnByKQotKwkJKnByID0gQk5fbmV3KCk7Ci0rCWlmICghKnByKQotKwkJcmV0dXJu IDA7Ci0rCWlmIChCTl9iaW4yYm4ocCwgcGxlbiwgKnByKSkKLSsJCXIgPSAxOwotKwlPUEVOU1NM X2ZyZWUocCk7Ci0rCXJldHVybiByOwotKwl9Ci0rCi0raW50IGRvX2JuX3ByaW50KEZJTEUgKm91 dCwgQklHTlVNICpibikKLSsJewotKwlpbnQgbGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7 Ci0rCWxlbiA9IEJOX251bV9ieXRlcyhibik7Ci0rCWlmIChsZW4gPT0gMCkKLSsJCXsKLSsJCWZw dXRzKCIwMCIsIG91dCk7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJdG1wID0gT1BFTlNTTF9t YWxsb2MobGVuKTsKLSsJaWYgKCF0bXApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9y eSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlCTl9ibjJiaW4o Ym4sIHRtcCk7Ci0rCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSsJCWZwcmludGYob3V0LCAi JTAyeCIsIHRtcFtpXSk7Ci0rCU9QRU5TU0xfZnJlZSh0bXApOwotKwlyZXR1cm4gMTsKLSsJfQot KwotK2ludCBkb19ibl9wcmludF9uYW1lKEZJTEUgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgQklH TlVNICpibikKLSsJewotKwlpbnQgcjsKLSsJZnByaW50ZihvdXQsICIlcyA9ICIsIG5hbWUpOwot KwlyID0gZG9fYm5fcHJpbnQob3V0LCBibik7Ci0rCWlmICghcikKLSsJCXJldHVybiAwOwotKwlm cHV0cygiXG4iLCBvdXQpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBwYXJzZV9saW5lKGNo YXIgKipwa3csIGNoYXIgKipwdmFsLCBjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKLSsJ ewotKwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKLSsJc3RyY3B5KGxpbmVidWYsIG9s aW5lYnVmKTsKLSsJa2V5d29yZCA9IGxpbmVidWY7Ci0rCS8qIFNraXAgbGVhZGluZyBzcGFjZSAq LwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQlrZXl3b3Jk Kys7Ci0rCi0rCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwlwID0gc3RyY2hyKGxpbmVidWYsICc9 Jyk7Ci0rCi0rCS8qIElmIG5vICc9JyBleGl0ICovCi0rCWlmICghcCkKLSsJCXJldHVybiAwOwot KwotKwlxID0gcCAtIDE7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkqcS0tID0gMDsKLSsKLSsJKnAgPSAw OwotKwl2YWx1ZSA9IHAgKyAxOwotKwotKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZh bHVlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQl2YWx1 ZSsrOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwlwID0g dmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJd2hpbGUgKCpwID09ICdcbicgfHwgaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkqcC0tID0gMDsKLSsKLSsJKnBrdyA9IGtleXdv cmQ7Ci0rCSpwdmFsID0gdmFsdWU7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rQklHTlVNICpoZXgy Ym4oY29uc3QgY2hhciAqaW4pCi0rICAgIHsKLSsgICAgQklHTlVNICpwPU5VTEw7Ci0rCi0rICAg IGlmICghZG9faGV4MmJuKCZwLCBpbikpCi0rCXJldHVybiBOVUxMOwotKwotKyAgICByZXR1cm4g cDsKLSsgICAgfQotKwotK2ludCBiaW4yaGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBs ZW4sY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNo YXIgY2g7Ci0rCi0rICAgIGZvciAobjE9MCxuMj0wIDsgbjEgPCBsZW4gOyArK24xKQotKwl7Ci0r CWNoPWluW24xXSA+PiA0OwotKwlpZiAoY2ggPD0gMHgwOSkKLSsJICAgIG91dFtuMisrXT1jaCsn MCc7Ci0rCWVsc2UKLSsJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7Ci0rCWNoPWluW24xXSAmIDB4 MGY7Ci0rCWlmKGNoIDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0r CSAgICBvdXRbbjIrK109Y2gtMTArJ2EnOwotKwl9Ci0rICAgIG91dFtuMl09J1wwJzsKLSsgICAg cmV0dXJuIG4yOwotKyAgICB9Ci0rCi0rdm9pZCBwdihjb25zdCBjaGFyICp0YWcsY29uc3QgdW5z aWduZWQgY2hhciAqdmFsLGludCBsZW4pCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhdOwot KwotKyAgICBiaW4yaGV4KHZhbCxsZW4sb2J1Zik7Ci0rICAgIHByaW50ZigiJXMgPSAlc1xuIix0 YWcsb2J1Zik7Ci0rICAgIH0KLSsKLSsvKiBUbyBhdm9pZCBleHRlbnNpdmUgY2hhbmdlcyB0byB0 ZXN0IHByb2dyYW0gYXQgdGhpcyBzdGFnZSBqdXN0IGNvbnZlcnQKLSsgKiB0aGUgaW5wdXQgbGlu ZSBpbnRvIGFuIGFjY2VwdGFibGUgZm9ybS4gS2V5d29yZCBsaW5lcyBjb252ZXJ0ZWQgdG8gZm9y bQotKyAqICJrZXl3b3JkID0gdmFsdWVcbiIgbm8gbWF0dGVyIHdoYXQgd2hpdGUgc3BhY2UgcHJl c2VudCwgYWxsIG90aGVyIGxpbmVzCi0rICoganVzdCBoYXZlIGxlYWRpbmcgYW5kIHRyYWlsaW5n IHNwYWNlIHJlbW92ZWQuCi0rICovCi0rCi0raW50IHRpZHlfbGluZShjaGFyICpsaW5lYnVmLCBj aGFyICpvbGluZWJ1ZikKLSsJewotKwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKLSsJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJa2V5d29yZCA9IGxpbmVidWY7Ci0rCS8qIFNr aXAgbGVhZGluZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5 d29yZCkpCi0rCQlrZXl3b3JkKys7Ci0rCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwlwID0gc3Ry Y2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCS8qIElmIG5vICc9JyBqdXN0IGNob3AgbGVhZGluZywg dHJhaWxpbmcgd3MgKi8KLSsJaWYgKCFwKQotKwkJewotKwkJcCA9IGtleXdvcmQgKyBzdHJsZW4o a2V5d29yZCkgLSAxOwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCQlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOwot KwkJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKLSsJCXJldHVybiAxOwotKwkJfQotKwotKwlxID0g cCAtIDE7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkqcS0tID0gMDsKLSsKLSsJKnAgPSAwOwotKwl2YWx1 ZSA9IHAgKyAxOwotKwotKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQl2YWx1ZSsrOwotKwot KwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwlwID0gdmFsdWUgKyBz dHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5z aWduZWQgY2hhcikqcCkpCi0rCQkqcC0tID0gMDsKLSsKLSsJc3RyY3B5KG9saW5lYnVmLCBrZXl3 b3JkKTsKLSsJc3RyY2F0KG9saW5lYnVmLCAiID0gIik7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgdmFs dWUpOwotKwlzdHJjYXQob2xpbmVidWYsICJcbiIpOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwot Ky8qIE5COiB0aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIF9iaXRzXyByZWFkICovCi0raW50IGJp bnQyYmluKGNvbnN0IGNoYXIgKmluLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCi0rICAg IHsKLSsgICAgaW50IG47Ci0rCi0rICAgIG1lbXNldChvdXQsMCxsZW4pOwotKyAgICBmb3Iobj0w IDsgbiA8IGxlbiA7ICsrbikKLSsJaWYoaW5bbl0gPT0gJzEnKQotKwkgICAgb3V0W24vOF18PSgw eDgwID4+IChuJTgpKTsKLSsgICAgcmV0dXJuIGxlbjsKLSsgICAgfQotKwotK2ludCBiaW4yYmlu dChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAg ICBpbnQgbjsKLSsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0rCW91dFtuXT0oaW5b bi84XSYoMHg4MCA+PiAobiU4KSkpID8gJzEnIDogJzAnOwotKyAgICByZXR1cm4gbjsKLSsgICAg fQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LwotKwotK3ZvaWQgUHJpbnRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50 IGxlbikKLSt7Ci0rI2lmIFZFUkJPU0UKLSsgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgIGludCBvbGVu OwotKyAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOwotKyAgcHJpbnRmKCIlcyA9ICUu KnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rI2VuZGlmCi0rfQotKwotK3ZvaWQgT3V0cHV0VmFs dWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4sIEZJTEUgKnJmcCxpbnQg Yml0bW9kZSkKLSsgICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rICAgIGludCBvbGVuOwot KwotKyAgICBpZihiaXRtb2RlKQotKwlvbGVuPWJpbjJiaW50KHZhbCxsZW4sb2J1Zik7Ci0rICAg IGVsc2UKLSsJb2xlbj1iaW4yaGV4KHZhbCxsZW4sb2J1Zik7Ci0rCi0rICAgIGZwcmludGYocmZw LCAiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNpZiBWRVJCT1NFCi0rICAgIHBy aW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNlbmRpZgotKyAgICB9Ci0r Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZmlwc19lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfZXJy LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHNfZXJyLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAy MDAKLUBAIC0wLDAgKzEsNyBAQAotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSAiZmlwc19lcnIuaCIKLSsjZWxzZQot K3N0YXRpYyB2b2lkICpkdW1teT0mZHVtbXk7Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9maXBzX2Vyci5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIu aAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfZXJyLmguZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfZXJy LmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTM3IEBA Ci0rLyogY3J5cHRvL2ZpcHNfZXJyLmggKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAT3BlblNTTC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29m dHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAo dGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rLyogTk9URTogdGhpcyBmaWxlIHdh cyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgbWtlcnIucGwgc2NyaXB0OiBhbnkgY2hhbmdlcwotKyAq IG1hZGUgdG8gaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgbmV4dCB1cGRh dGVzIHRoaXMgZmlsZSwKLSsgKiBvbmx5IHJlYXNvbiBzdHJpbmdzIHdpbGwgYmUgcHJlc2VydmVk LgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAq LwotKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKLSsKLSsjZGVmaW5lIEVSUl9GVU5DKGZ1bmMpIEVS Ul9QQUNLKEVSUl9MSUJfRklQUyxmdW5jLDApCi0rI2RlZmluZSBFUlJfUkVBU09OKHJlYXNvbikg RVJSX1BBQ0soRVJSX0xJQl9GSVBTLDAscmVhc29uKQotKwotK3N0YXRpYyBFUlJfU1RSSU5HX0RB VEEgRklQU19zdHJfZnVuY3RzW109Ci0rCXsKLSt7RVJSX0ZVTkMoRklQU19GX0RIX0JVSUxUSU5f R0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9E U0FfQlVJTFRJTl9QQVJBTUdFTiksCSJEU0FfQlVJTFRJTl9QQVJBTUdFTiJ9LAotK3tFUlJfRlVO QyhGSVBTX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKLSt7RVJSX0ZVTkMoRklQU19G X0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRVZQ X0NJUEhFUklOSVRfRVgpLAkiRVZQX0NpcGhlckluaXRfZXgifSwKLSt7RVJSX0ZVTkMoRklQU19G X0VWUF9ESUdFU1RJTklUX0VYKSwJIkVWUF9EaWdlc3RJbml0X2V4In0sCi0re0VSUl9GVU5DKEZJ UFNfRl9GSVBTX0NIRUNLX0RTQSksCSJGSVBTX0NIRUNLX0RTQSJ9LAotK3tFUlJfRlVOQyhGSVBT X0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQpLAkiRklQU19DSEVDS19JTkNPUkVfRklO R0VSUFJJTlQifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBKSwJIkZJUFNfQ0hF Q0tfUlNBIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX0RTQV9DSEVDSyksCSJGSVBTX0RTQV9D SEVDSyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19NT0RFX1NFVCksCSJGSVBTX21vZGVfc2V0 In0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QpLAkiZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0In0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF UyksCSJGSVBTX3NlbGZ0ZXN0X2FlcyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVT VF9ERVMpLAkiRklQU19zZWxmdGVzdF9kZXMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VM RlRFU1RfRFNBKSwJIkZJUFNfc2VsZnRlc3RfZHNhIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBT X1NFTEZURVNUX0hNQUMpLAkiRklQU19zZWxmdGVzdF9obWFjIn0sCi0re0VSUl9GVU5DKEZJUFNf Rl9GSVBTX1NFTEZURVNUX1JORyksCSJGSVBTX3NlbGZ0ZXN0X3JuZyJ9LAotK3tFUlJfRlVOQyhG SVBTX0ZfRklQU19TRUxGVEVTVF9TSEExKSwJIkZJUFNfc2VsZnRlc3Rfc2hhMSJ9LAotK3tFUlJf RlVOQyhGSVBTX0ZfSEFTSF9GSU5BTCksCSJIQVNIX0ZJTkFMIn0sCi0re0VSUl9GVU5DKEZJUFNf Rl9SU0FfQlVJTFRJTl9LRVlHRU4pLAkiUlNBX0JVSUxUSU5fS0VZR0VOIn0sCi0re0VSUl9GVU5D KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfREVDUllQ VCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX0VB WV9QUklWQVRFX0VOQ1JZUFQifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVCTElDX0RF Q1JZUFQpLAkiUlNBX0VBWV9QVUJMSUNfREVDUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNB X0VBWV9QVUJMSUNfRU5DUllQVCksCSJSU0FfRUFZX1BVQkxJQ19FTkNSWVBUIn0sCi0re0VSUl9G VU5DKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgpLAkiUlNBX1g5MzFfZ2VuZXJhdGVf a2V5X2V4In0sCi0re0VSUl9GVU5DKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyksCSJTU0xFQVlf UkFORF9CWVRFUyJ9LAotK3swLE5VTEx9Ci0rCX07Ci0rCi0rc3RhdGljIEVSUl9TVFJJTkdfREFU QSBGSVBTX3N0cl9yZWFzb25zW109Ci0rCXsKLSt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JF QURfRVhFKSAgICAgICwiY2Fubm90IHJlYWQgZXhlIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0NB Tk5PVF9SRUFEX0VYRV9ESUdFU1QpLCJjYW5ub3QgcmVhZCBleGUgZGlnZXN0In0sCi0re0VSUl9S RUFTT04oRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UpLCJjb250cmFkaWN0aW5nIGV2aWRl bmNlIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gpLCJl eGUgZGlnZXN0IGRvZXMgbm90IG1hdGNoIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBS SU5UX0RPRVNfTk9UX01BVENIKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2gifSwKLSt7RVJS X1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRF RCksImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIG5vbnBpYyByZWxvY2F0ZWQifSwKLSt7RVJS X1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lO RyksImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIHNlZ21lbnQgYWxpYXNpbmcifSwKLSt7RVJS X1JFQVNPTihGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKSwiZmlwcyBtb2RlIGFscmVhZHkg c2V0In0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKSAsImZpcHMg c2VsZnRlc3QgZmFpbGVkIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0lOVkFMSURfS0VZX0xFTkdU SCkgICAsImludmFsaWQga2V5IGxlbmd0aCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9LRVlfVE9P X1NIT1JUKSAgICAgICAgLCJrZXkgdG9vIHNob3J0In0sCi0re0VSUl9SRUFTT04oRklQU19SX05P Tl9GSVBTX01FVEhPRCkgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAotK3tFUlJfUkVBU09OKEZJ UFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCkgLCJwYWlyd2lzZSB0ZXN0IGZhaWxlZCJ9LAotK3tF UlJfUkVBU09OKEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUikgICAgLCJyc2EgZGVjcnlwdCBlcnJv ciJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUikgICAgLCJyc2EgZW5j cnlwdCBlcnJvciJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpICAgICAg LCJzZWxmdGVzdCBmYWlsZWQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfVEVTVF9GQUlMVVJFKSAg ICAgICAgICwidGVzdCBmYWlsdXJlIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1VOU1VQUE9SVEVE X1BMQVRGT1JNKSAsInVuc3VwcG9ydGVkIHBsYXRmb3JtIn0sCi0rezAsTlVMTH0KLSsJfTsKLSsK LSsjZW5kaWYKLSsKLSt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKQotKwl7Ci0rI2lm bmRlZiBPUEVOU1NMX05PX0VSUgotKwotKwlpZiAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKEZJUFNf c3RyX2Z1bmN0c1swXS5lcnJvcikgPT0gTlVMTCkKLSsJCXsKLSsJCUVSUl9sb2FkX3N0cmluZ3Mo MCxGSVBTX3N0cl9mdW5jdHMpOwotKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX3JlYXNv bnMpOwotKwkJfQotKyNlbmRpZgotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9m aXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfYWVz X3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxMDMgQEAKLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rc3RhdGljIHN0cnVjdAotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2 XTsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFy IGNpcGhlcnRleHRbMTZdOwotKyAgICB9IHRlc3RzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgw MSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSsJICAweDA4LDB4MDksMHgwQSwweDBC LDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKLSsJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1 NSwweDY2LDB4NzcsCi0rCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZG IH0sCi0rCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAotKwkgIDB4 RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAotKwl9LAotKwl9OwotKwot K3ZvaWQgRklQU19jb3JydXB0X2FlcygpCi0rICAgIHsKLSsgICAgdGVzdHNbMF0ua2V5WzBdKys7 Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXMoKQotKyAgICB7Ci0rICAgIGludCBu OwotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBf Q0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCi0r CXsKLSsJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCi0rCQkJ CXRlc3RzW25dLmtleSwgTlVMTCwKLSsJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAotKwkJCQl0ZXN0 c1tuXS5jaXBoZXJ0ZXh0LAotKwkJCQkxNikgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rICAg IHJldCA9IDE7Ci0rICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsK LSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9B RVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9m aXBzL2ZpcHMuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAw MDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNDE5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKwotKyNpZm5kZWYgUEFUSF9NQVgKLSsjZGVmaW5lIFBBVEhfTUFY IDEwMjQKLSsjZW5kaWYKLSsKLStzdGF0aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbDsKLStzdGF0 aWMgaW50IGZpcHNfbW9kZTsKLStzdGF0aWMgY29uc3Qgdm9pZCAqZmlwc19yYW5kX2NoZWNrOwot KwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUoaW50IG9ub2ZmKQotKwl7Ci0rCWludCBvd25p bmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0 YXJ0ZWQoKSkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKLSsJ CWZpcHNfbW9kZSA9IG9ub2ZmOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2Nr KCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3NldF9yYW5kX2NoZWNrKGNvbnN0 IHZvaWQgKnJhbmRfY2hlY2spCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293 bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJaWYg KCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19yYW5kX2NoZWNrID0gcmFu ZF9jaGVjazsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X3VubG9jaygpOwotKwkJfQot Kwl9Ci0rCi0raW50IEZJUFNfbW9kZSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlpbnQg b3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoZmlwc19p c19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7 Ci0rCQlyZXQgPSBmaXBzX21vZGU7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxv Y2soKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2NvbnN0IHZvaWQgKkZJUFNfcmFu ZF9jaGVjayh2b2lkKQotKwl7Ci0rCWNvbnN0IHZvaWQgKnJldCA9IDA7Ci0rCWludCBvd25pbmdf dGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0 ZWQoKSkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJCXJl dCA9IGZpcHNfcmFuZF9jaGVjazsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9j aygpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZmFp bGVkKHZvaWQpCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIGlmIChmaXBzX2lzX3N0 YXJ0ZWQoKSkKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVh ZCgpOwotKwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCXJldCA9IGZp cHNfc2VsZnRlc3RfZmFpbDsKLSsJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7 Ci0rCX0KLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qIFNlbGZ0ZXN0IGZhaWx1cmUg ZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCi0rICogZHVyaW5nICphbnkq IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0KLSsgKiBvdmVyaGVh ZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0LgotKyAqLwotKwot K3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQotKyAgICB7Ci0rICAgIGlmIChmaXBzX3Nl bGZ0ZXN0X2ZhaWwpCi0rCXsKLSsJT3BlblNTTERpZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFM IEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNfc2V0 X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKLSsgICAgewotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAx OwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3QoKQotKyAgICB7Ci0rCi0rICAgIHJldHVy biBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2htYWMoKQotKwkmJiBG SVBTX3NlbGZ0ZXN0X2FlcygpCi0rCSYmIEZJUFNfc2VsZnRlc3RfZGVzKCkKLSsJJiYgRklQU19z ZWxmdGVzdF9yc2EoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2RzYSgpOwotKyAgICB9Ci0rCi0raW50 IEZJUFNfbW9kZV9zZXQoaW50IG9ub2ZmKQotKyAgICB7Ci0rICAgIGludCBmaXBzX3NldF9vd25p bmdfdGhyZWFkKCk7Ci0rICAgIGludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKLSsgICAg aW50IHJldCA9IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0rICAgIGZpcHNfc2V0X3N0YXJ0 ZWQoKTsKLSsgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwotKwotKyAgICBpZihvbm9mZikK LSsJewotKwl1bnNpZ25lZCBjaGFyIGJ1Zls0OF07Ci0rCi0rCWZpcHNfc2VsZnRlc3RfZmFpbCA9 IDA7Ci0rCi0rCS8qIERvbid0IGdvIGludG8gRklQUyBtb2RlIHR3aWNlLCBqdXN0IHNvIHdlIGNh biBkbyBhdXRvbWFnaWMKLSsJICAgc2VlZGluZyAqLwotKwlpZihGSVBTX21vZGUoKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsRklQU19SX0ZJUFNfTU9ERV9B TFJFQURZX1NFVCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0g MDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwotKyNpZmRlZiBPUEVOU1NMX0lBMzJfU1NF MgotKwlpZiAoKE9QRU5TU0xfaWEzMmNhcCAmICgxPDwyNXwxPDwyNikpICE9ICgxPDwyNXwxPDwy NikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9V TlNVUFBPUlRFRF9QTEFURk9STSk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkg ICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKyNlbmRpZgotKwotKwkvKiBQ ZXJmb3JtIFJORyBLQVQgYmVmb3JlIHNlZWRpbmcgKi8KLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X3Ju ZygpKQotKwkgICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9 IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsJLyogYXV0b21hZ2ljYWxseSBzZWVk IFBSTkcgaWYgbm90IGFscmVhZHkgc2VlZGVkICovCi0rCWlmKCFGSVBTX3JhbmRfc3RhdHVzKCkp Ci0rCSAgICB7Ci0rCSAgICBpZihSQU5EX2J5dGVzKGJ1ZixzaXplb2YgYnVmKSA8PSAwKQotKwkJ ewotKwkJZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJCXJldCA9IDA7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGJ1ZiwzMik7Ci0rCSAgICBGSVBTX3JhbmRf c2VlZChidWYrMzIsMTYpOwotKwkgICAgfQotKwotKwkvKiBub3cgc3dpdGNoIGludG8gRklQUyBt b2RlICovCi0rCWZpcHNfc2V0X3JhbmRfY2hlY2soRklQU19yYW5kX21ldGhvZCgpKTsKLSsJUkFO RF9zZXRfcmFuZF9tZXRob2QoRklQU19yYW5kX21ldGhvZCgpKTsKLSsJaWYoRklQU19zZWxmdGVz dCgpKQotKwkgICAgZmlwc19zZXRfbW9kZSgxKTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJ ICAgIH0KLSsJcmV0ID0gMTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsgICAgZmlwc19zZXRfbW9kZSgw KTsKLSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAgcmV0ID0gMTsKLStlbmQ6Ci0r ICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBmaXBzX3dfdW5sb2NrKCk7Ci0r ICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNfd19sb2NrKHZvaWQpCQl7IENS WVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lkIGZpcHNfd191bmxvY2sodm9p ZCkJeyBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lkIGZpcHNfcl9s b2NrKHZvaWQpCQl7IENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lkIGZp cHNfcl91bmxvY2sodm9pZCkJeyBDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0K LSsKLStzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7Ci0rc3RhdGljIHVuc2lnbmVkIGxvbmcg Zmlwc190aHJlYWQgPSAwOwotKwotK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lkKQotKwl7Ci0r CWZpcHNfc3RhcnRlZCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19pc19zdGFydGVkKHZvaWQpCi0r CXsKLSsJcmV0dXJuIGZpcHNfc3RhcnRlZDsKLSsJfQotKwotK2ludCBmaXBzX2lzX293bmluZ190 aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRl ZCgpKQotKwkJewotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAo Zmlwc190aHJlYWQgIT0gMCAmJiBmaXBzX3RocmVhZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCi0r CQkJcmV0ID0gMTsKLSsJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9 Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lk KQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7 Ci0rCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVh ZCA9PSAwKQotKwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IENSWVBUT190aHJlYWRfaWQoKTsKLSsJ CQlyZXQgPSAxOwotKwkJCX0KLSsJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7 Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhy ZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQo KSkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZp cHNfdGhyZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQl7Ci0rCQkJZmlwc190aHJlYWQg PSAwOwotKwkJCXJldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKy8qIEdlbmVyYWxpemVkIHB1 YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKLSsgKiBz dXBwbGllZCBpbiB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24g ZGlnZXN0Ci0rICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90 IE5VTEwgaXQgd2lsbAotKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNo ZXMgaXQ6IGEga25vd24gYW5zd2VyIHRlc3QKLSsgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMg dXNlZCBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQotKyAqIG9mIGZhaWx1cmUu Ci0rICovCi0rCi0raW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwK LSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCi0rCQkJY29uc3QgdW5z aWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAotKwkJCWNvbnN0IEVWUF9NRCAq ZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0rCQkJY29uc3QgY2hhciAqZmFpbF9zdHIp Ci0rCXsJCi0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHNpZ3RtcFsyNTZdLCAqc2ln ID0gc2lndG1wOwotKwl1bnNpZ25lZCBpbnQgc2lnbGVuOwotKwlFVlBfTURfQ1RYIG1jdHg7Ci0r CUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCWlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtF WV9SU0EpCi0rCQkmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkp KQotKwkJewotKwkJc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2Ep KTsKLSsJCWlmICghc2lnKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lH TkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0K LSsJCX0KLSsKLSsJaWYgKHRic2xlbiA9PSAtMSkKLSsJCXRic2xlbiA9IHN0cmxlbigoY2hhciAq KXRicyk7Ci0rCi0rCWlmIChtZF9mbGFncykKLSsJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4 LCBtZF9mbGFncyk7Ci0rCi0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5V TEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0 YnNsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcs ICZzaWdsZW4sIHBrZXkpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKGthdCAmJiAoKHNpZ2xl biAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVuKSkpCi0rCQlnb3RvIGVycm9y OwotKwotKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJ Z290byBlcnJvcjsKLSsJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikp Ci0rCQlnb3RvIGVycm9yOwotKwlyZXQgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2ln bGVuLCBwa2V5KTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChzaWcgIT0gc2lndG1wKQotKwkJT1BFTlNT TF9mcmVlKHNpZyk7Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCWlmIChyZXQgIT0g MSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBT X1JfVEVTVF9GQUlMVVJFKTsKLSsJCWlmIChmYWlsX3N0cikKLSsJCQlFUlJfYWRkX2Vycm9yX2Rh dGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUu IEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAotKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBk ZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50ZXh0LgotKyAqLwotKwotK2lu dCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIg KmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50IGxlbikKLSsJewotKwl1bnNp Z25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwl1bnNpZ25lZCBj aGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwlPUEVOU1NMX2Fzc2VydChs ZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9l eChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlF VlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKTsKLSsJaWYgKG1lbWNtcChjaXRt cCwgY2lwaGVydGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlckluaXRf ZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJ RVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKTsKLSsJaWYgKG1lbWNtcChwbHRtcCwg cGxhaW50ZXh0LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rI2lm IDAKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBl eGlzdHMgYW5kIHRoZSBmdW5jdGlvbgotKyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hl Y2tpbmcgc2NyaXB0IHF1aWV0Ci0rICovCi0rdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCi0rCXsKLSsJ RklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJfQot KyNlbmRpZgotKwotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBz X2Rlc19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2Rlc19z ZWxmdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTM5IEBACi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHN0cnVj dAotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbOF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKLSsgICAg fSB0ZXN0czJbXT0KLSsJewotKwl7Ci0rCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4MDQs MHgxNiwweGVjLAotKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9 LAotKwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAotKwl7IDB4 NGMsMHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9Ci0rCX0sCi0rCXsKLSsJeyAw eDVkLDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCi0rCSAgMHgwMSwweDE2LDB4 N2MsMHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCi0rCXsgMHg5YywweDUwLDB4MDksMHgwZiww eDVlLDB4N2QsMHg2OSwweDdlIH0sCi0rCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQs MHg5ZSwweGZmIH0sCi0rCX0KLSsJfTsKLSsKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAg dW5zaWduZWQgY2hhciBrZXlbMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsK LSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3RzM1tdPQotKwl7 Ci0rCXsKLSsJeyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCSAg MHhGRSwweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAotKwkgIDB4MTIsMHgzNCww eDU2LDB4NzgsMHg5YSwweGJjLDB4ZGUsMHhmMCB9LAotKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIs MHg1ZCwweDQ4LDB4YjQsMHgxYyB9LAotKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEy LDB4ZWEsMHgxYiB9LAotKwl9LAotKwl7Ci0rCXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4 MzIsMHgxMCwweEZFLAotKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhF RiwKLSsJICAweEVELDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKLSsJeyAw eDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKLSsJeyAweDExLDB4MjUs MHhiMCwweDM1LDB4YmUsMHhhMCwweDgyLDB4ODYgfSwKLSsJfSwKLSsJfTsKLSsKLSt2b2lkIEZJ UFNfY29ycnVwdF9kZXMoKQotKyAgICB7Ci0rICAgIHRlc3RzMlswXS5wbGFpbnRleHRbMF0rKzsK LSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0rICAgIHsKLSsgICAgaW50IG4s IHJldCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKLSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQg Y29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikK LSsJewotKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCi0r CQkJCXRlc3RzMltuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzMltuXS5wbGFpbnRleHQsIHRlc3Rz MltuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rCi0rICAgIC8qIEVuY3J5 cHQvZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAg ICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZj dHgsIEVWUF9kZXNfZWRlM19lY2IoKSwKLSsJCQkJdGVzdHMzW25dLmtleSwgTlVMTCwKLSsJCQkJ dGVzdHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290byBl cnI7Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsgICAgcmV0dXJu IHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBz X2RzYV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2RzYV9z ZWxmdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTg2IEBACi0rLyogY3J5cHRvL2Rz YS9kc2F0ZXN0LmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogVGhp cyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3Jp dHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFz IGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBU aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0 aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMsIGV0 Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgot KyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2Ft ZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmlj IFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRoZSBj b2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBp biBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0rICog YXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlz IGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0 dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQg d2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0rICog ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0r ICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29yZCAn Y3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxp YnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDot KS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBh IGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFw cGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK LSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNIIERB TUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBh bnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2YgdGhp cyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBi ZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UK LSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwotKyNpbmNs dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9kc2EuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwotKy8qIHNlZWQsIG91dF9wLCBvdXRfcSwgb3V0X2cgYXJlIHRha2VuIHRoZSBO SVNUIHRlc3QgdmVjdG9ycyAqLwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0g ewotKwkweDc3LCAweDhmLCAweDQwLCAweDc0LCAweDZmLCAweDY2LCAweGJlLCAweDMzLCAweGNl LCAweGJlLCAweDk5LCAweDM0LAotKwkweDRjLCAweGZjLCAweGYzLCAweDI4LCAweGFhLCAweDcw LCAweDJkLCAweDNhCi0rICAJfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0g ewotKwkweGY3LCAweDdjLCAweDFiLCAweDgzLCAweGQ4LCAweGU4LCAweDVjLCAweDdmLCAweDg1 LCAweDMwLCAweDE3LCAweDU3LAotKwkweDIxLCAweDk1LCAweGZlLCAweDI2LCAweDA0LCAweGVi LCAweDQ3LCAweDRjLCAweDNhLCAweDRhLCAweDgxLCAweDRiLAotKwkweDcxLCAweDJlLCAweGVk LCAweDZlLCAweDRmLCAweDNkLCAweDExLCAweDBmLCAweDdjLCAweGZlLCAweDM2LCAweDQzLAot KwkweDUxLCAweGQ5LCAweDgxLCAweDM5LCAweDE3LCAweGRmLCAweDYyLCAweGY2LCAweDljLCAw eDAxLCAweGE4LCAweDY5LAotKwkweDcxLCAweGRkLCAweDI5LCAweDdmLCAweDQ3LCAweGU2LCAw eDY1LCAweGE2LCAweDIyLCAweGU4LCAweDZhLCAweDEyLAotKwkweDJiLCAweGMyLCAweDgxLCAw eGZmLCAweDMyLCAweDcwLCAweDJmLCAweDllLCAweGNhLCAweDUzLCAweDI2LCAweDQ3LAotKwkw eDBmLCAweDU5LCAweGQ3LCAweDllLCAweDJjLCAweGE1LCAweDA3LCAweGM0LCAweDQ5LCAweDUy LCAweGEzLCAweGU0LAotKwkweDZiLCAweDA0LCAweDAwLCAweDI1LCAweDQ5LCAweGUyLCAweGU2 LCAweDdmLCAweDI4LCAweDc4LCAweDk3LCAweGI4LAotKwkweDNhLCAweDMyLCAweDE0LCAweDM4 LCAweGEyLCAweDUxLCAweDMzLCAweDIyLCAweDQ0LCAweDdlLCAweGQ3LCAweGVmLAotKwkweDQ1 LCAweGRiLCAweDA2LCAweDRhLCAweGQyLCAweDgyLCAweDRhLCAweDgyLCAweDJjLCAweGIxLCAw eGQ3LCAweGQ4LAotKwkweGI2LCAweDczLCAweDAwLCAweDRkLCAweDk0LCAweDc3LCAweDk0LCAw eGVmCi0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKLSsJMHhkNCwg MHgwYSwgMHhhYywgMHg5ZiwgMHhiZCwgMHg4YywgMHg4MCwgMHhjMiwgMHgzOCwgMHg3ZSwgMHgy ZSwgMHgwYywKLSsJMHg1MiwgMHg1YywgMHhlYSwgMHgzNCwgMHhhMSwgMHg4MywgMHgzMiwgMHhm MwotKwl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7Ci0rCTB4MzQsIDB4 NzMsIDB4OGIsIDB4NTcsIDB4ODQsIDB4OGUsIDB4NTUsIDB4YmYsIDB4NTcsIDB4Y2MsIDB4NDEs IDB4YmIsCi0rCTB4NWUsIDB4MmIsIDB4ZDUsIDB4NDIsIDB4ZGQsIDB4MjQsIDB4MjIsIDB4MmEs IDB4MDksIDB4ZWEsIDB4MjYsIDB4MWUsCi0rCTB4MTcsIDB4NjUsIDB4Y2IsIDB4MWEsIDB4YjMs IDB4MTIsIDB4NDQsIDB4YTMsIDB4OWUsIDB4OTksIDB4ZTksIDB4NjMsCi0rCTB4ZWIsIDB4MzAs IDB4YjEsIDB4NzgsIDB4N2IsIDB4MDksIDB4NDAsIDB4MzAsIDB4ZmEsIDB4ODMsIDB4YzIsIDB4 MzUsCi0rCTB4ZTEsIDB4YzQsIDB4MmQsIDB4NzQsIDB4MWEsIDB4YjEsIDB4ODMsIDB4NTQsIDB4 ZDgsIDB4MjksIDB4ZjQsIDB4Y2YsCi0rCTB4N2YsIDB4NmYsIDB4NjcsIDB4MWMsIDB4MzYsIDB4 NDksIDB4ZWUsIDB4NmMsIDB4YTIsIDB4M2MsIDB4MmQsIDB4NmEsCi0rCTB4ZTksIDB4ZDMsIDB4 OWEsIDB4ZjYsIDB4NTcsIDB4NzgsIDB4NmYsIDB4ZmQsIDB4MzMsIDB4Y2QsIDB4M2MsIDB4ZWQs Ci0rCTB4ZmQsIDB4ZDQsIDB4NDEsIDB4ZTYsIDB4NWMsIDB4OGIsIDB4ZTAsIDB4NjgsIDB4MzEs IDB4NDcsIDB4NDcsIDB4YWYsCi0rCTB4MTIsIDB4YTcsIDB4ZjksIDB4MzIsIDB4MGQsIDB4OTQs IDB4MTUsIDB4NDgsIDB4ZDAsIDB4NTQsIDB4ODUsIDB4YjIsCi0rCTB4MDQsIDB4YjUsIDB4NGQs IDB4ZDQsIDB4OWQsIDB4MDUsIDB4MjIsIDB4MjUsIDB4ZDksIDB4ZmQsIDB4NmMsIDB4MzYsCi0r CTB4ZWYsIDB4YmUsIDB4NjksIDB4NmMsIDB4NTUsIDB4ZjQsIDB4ZWUsIDB4ZWMKLSsJfTsKLSsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkw IjsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQotKyAgICB7Ci0rICAgICsrc2VlZFswXTsK LSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCi0rICAgIHsKLSsgICAgRFNBICpk c2E7Ci0rICAgIGludCBjb3VudGVyLGksaiwgcmV0ID0gMDsKLSsgICAgdW5zaWduZWQgaW50IHNs ZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0rICAgIHVuc2lnbmVkIGxvbmcgaDsK LSsgICAgRVZQX01EX0NUWCBtY3R4OwotKyAgICBFVlBfUEtFWSAqcGsgPSBOVUxMOwotKwotKyAg ICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwotKyAgICBkc2EgPSBEU0FfbmV3KCk7Ci0rCi0r ICAgIGlmKGRzYSA9PSBOVUxMKQotKwlnb3RvIGVycjsKLSsgICAgaWYoIURTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxzZWVkLDIwLCZjb3VudGVyLCZoLE5VTEwpKQotKwlnb3Rv IGVycjsKLSsgICAgaWYgKGNvdW50ZXIgIT0gMzc4KSAKLSsJZ290byBlcnI7Ci0rICAgIGlmICho ICE9IDIpCi0rCWdvdG8gZXJyOwotKyAgICBpPUJOX2JuMmJpbihkc2EtPnEsYnVmKTsKLSsgICAg aj1zaXplb2Yob3V0X3EpOwotKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X3EsaSkg IT0gMCkKLSsJZ290byBlcnI7Ci0rCi0rICAgIGk9Qk5fYm4yYmluKGRzYS0+cCxidWYpOwotKyAg ICBqPXNpemVvZihvdXRfcCk7Ci0rICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcCxp KSAhPSAwKQotKwlnb3RvIGVycjsKLSsKLSsgICAgaT1CTl9ibjJiaW4oZHNhLT5nLGJ1Zik7Ci0r ICAgIGo9c2l6ZW9mKG91dF9nKTsKLSsgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9n LGkpICE9IDApCi0rCWdvdG8gZXJyOwotKyAgICBEU0FfZ2VuZXJhdGVfa2V5KGRzYSk7Ci0rCi0r ICAgIGlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCWdvdG8gZXJyOwotKyAgICBF VlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9l eCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9T aWduVXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9T aWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sIHBrKSkKLSsJZ290byBlcnI7Ci0rCi0rICAgIGlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVy cjsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCi0rCWdvdG8g ZXJyOwotKyAgICBpZiAoRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sIHBrKSAhPSAx KQotKwlnb3RvIGVycjsKLSsKLSsgICAgcmV0ID0gMTsKLSsKLSsgICAgZXJyOgotKyAgICBFVlBf TURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBpZiAocGspCi0rCUVWUF9QS0VZX2ZyZWUocGsp OwotKyAgICBlbHNlIGlmIChkc2EpCi0rCURTQV9mcmVlKGRzYSk7Ci0rICAgIGlmIChyZXQgPT0g MCkKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBLEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHMvZmlwcy5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHMvZmlwcy5oCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAt MCwwICsxLDE2MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3Ig RklQUyBpcyBkaXNhYmxlZC4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r I2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBk c2Ffc3Q7Ci0rc3RydWN0IGV2cF9wa2V5X3N0OwotK3N0cnVjdCBlbnZfbWRfc3Q7Ci0rc3RydWN0 IGV2cF9jaXBoZXJfc3Q7Ci0rc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OwotKwotK2ludCBGSVBT X21vZGVfc2V0KGludCBvbm9mZik7Ci0raW50IEZJUFNfbW9kZSh2b2lkKTsKLStjb25zdCB2b2lk ICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQp OwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9z aGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0rdm9pZCBGSVBTX2Nv cnJ1cHRfYWVzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLSt2b2lkIEZJ UFNfY29ycnVwdF9kZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOwotK3Zv aWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2Vu KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVw dF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKLStpbnQg RklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwot K3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQp OwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0rCi0raW50IGZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5z aWduZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVu c2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cik7Ci0rCi0raW50 IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCi0rCQkJY29u c3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0r CQkJaW50IGxlbik7Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsvKiBUaGUgZm9sbG93 aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkg Y2hhbmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hl biB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotKyAqLwotK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJp bmdzKHZvaWQpOwotKwotKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICov Ci0rCi0rLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9H RU5QQVJBTVMJCQkgMTAwCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkg MTAxCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgotKyNkZWZpbmUgRklQU19G X0RTQV9ET19WRVJJRlkJCQkJIDEwMwotKyNkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VY CQkJIDEyNAotKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEyNQotKyNkZWZp bmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEwNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tf UlNBCQkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJCQkgMTA3Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJCQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19Q S0VZX1NJR05BVFVSRV9URVNUCQkJIDEwOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTCQkJIDExMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQotKyNk ZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgotKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JO RwkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0rI2Rl ZmluZSBGSVBTX0ZfSEFTSF9GSU5BTAkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxU SU5fS0VZR0VOCQkJIDExNgotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBU CQkJIDExNwotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAot KyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5Ci0rI2RlZmluZSBG SVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSsjZGVmaW5lIEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgJCQkgMTIxCi0rI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRf QllURVMJCQkgMTIyCi0rCi0rLyogUmVhc29uIGNvZGVzLiAqLwotKyNkZWZpbmUgRklQU19SX0NB Tk5PVF9SRUFEX0VYRQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJ R0VTVAkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDEx NAotKyNkZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gJCSAxMDUKLSsjZGVm aW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUgRklQ U19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0rI2Rl ZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAx MTIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2RlZmlu ZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1JfSU5W QUxJRF9LRVlfTEVOR1RICQkJIDEwOQotKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJ IDEwOAotKyNkZWZpbmUgRklQU19SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBG SVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0RF Q1JZUFRfRVJST1IJCQkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJCQkg MTE2Ci0rI2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5lIEZJ UFNfUl9URVNUX0ZBSUxVUkUJCQkJIDExNwotKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BM QVRGT1JNCQkJIDExMwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwot LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAw MDAgKzAyMDAKLUBAIC0wLDAgKzEsMTM3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0eXBlZGVm IHN0cnVjdCB7Ci0rCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOwotKwljb25zdCBjaGFyICpr ZXksICppdjsKLSsJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwotK30gSE1B Q19LQVQ7Ci0rCi0rc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7CUVW UF9zaGExLAotKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBz L2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwki U2FtcGxlICMyIiwKLSsJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4MTks Ci0rCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAotKwkgIDB4YzYs MHhjNywweDVkLDB4MjQgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyMjQsCi0rCS8qIGp1c3Qg a2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIs Ci0rCSJTYW1wbGUgIzIiLAotKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4NTAs MHhmYiwKLSsJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCi0rCSAg MHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAotKwkgIDB4OGMsMHg4ZCww eDEyLDB4YzcgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyNTYsCi0rCSIwMTIzNDU2Nzg5Ojs8 PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0MSww eGVhLDB4NDMsMHgwOSwKLSsJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4LDB4 MzQsCi0rCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAotKwkgIDB4 MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9Ci0rICAgIH0sCi0rICAgIHsJ RVZQX3NoYTM4NCwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0r CXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAotKwkgIDB4OWEsMHgx ZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKLSsJICAweGI3LDB4MTgsMHgwNiwweGE1 LDB4NzcsMHhjZCwweDQ5LDB4MDQsCi0rCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4NTEs MHg1MSwweDlmLAotKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1MCwK LSsJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQotKyAgICB9LAot KyAgICB7CUVWUF9zaGE1MTIsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUg IzIiLAotKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKLSsJICAw eDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCi0rCSAgMHg0NCwweGQ1LDB4 YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAotKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIsMHhj MCwweDkwLDB4NzcsMHg2OCwKLSsJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSwweDJj LDB4MmYsCi0rCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAotKwkg IDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKLSsJICAweGJkLDB4NGYs MHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQotKyAgICB9LAotK307Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfaG1hYygpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIHVuc2lnbmVkIGlu dCAgICBvdXRsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpFXTsK LSsgICAgY29uc3QgRVZQX01EICAgKm1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsKLSsg ICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBdKTsg bisrLHQrKykKLSsJewotKwltZCA9ICgqdC0+YWxnKSgpOwotKwlITUFDKG1kLHQtPmtleSxzdHJs ZW4odC0+a2V5KSwKLSsJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQtPml2 KSwKLSsJCW91dCwmb3V0bGVuKTsKLSsKLSsJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRsZW4p KQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAg cmV0dXJuIDE7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFu ZC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTAt MDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8v Zmlwcy9maXBzX3JhbmQuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAg LTAsMCArMSw0MTIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKgotKyAqIFRo aXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQu Ci0rICovCi0rCi0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsvKiBJZiB3ZSBkb24ndCBkZWZpbmUg X1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKLSsgICBiZSBkZWZp bmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21w aWxlcnMKLSsgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KLSsjaWZuZGVmIF9YT1BF Tl9TT1VSQ0VfRVhURU5ERUQKLSsjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQotKyNl bmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9h ZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz X3JhbmQuaD4KLSsjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rI2luY2x1ZGUgPHN5cy90aW1l Lmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpZm5kZWYgT1BFTlNTTF9TWVNf V0lOMzIKLSsjIGlmZGVmIE9QRU5TU0xfVU5JU1RECi0rIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNU RAotKyMgZWxzZQotKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgotKyMgZW5kaWYKLSsjZW5kaWYKLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwotK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOwotKwotKyNkZWZp bmUgQUVTX0JMT0NLX0xFTkdUSAkxNgotKwotKwotKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50 YXRpb24gKi8KLSsKLSt0eXBlZGVmIHN0cnVjdCAKLSsJewotKwlpbnQgc2VlZGVkOwotKwlpbnQg a2V5ZWQ7Ci0rCWludCB0ZXN0X21vZGU7Ci0rCWludCBzZWNvbmQ7Ci0rCWludCBlcnJvcjsKLSsJ dW5zaWduZWQgbG9uZyBjb3VudGVyOwotKwlBRVNfS0VZIGtzOwotKwlpbnQgdnBvczsKLSsJLyog VGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KLSsJ dW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFy IFZbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdU SF07Ci0rCXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJfSBGSVBTX1BS TkdfQ1RYOwotKwotK3N0YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7Ci0rCi0rc3RhdGljIGludCBm aXBzX3BybmdfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQotKwl7Ci0r CWZpcHNfcHJuZ19mYWlsID0gMTsKLSsJfQotKwotK3ZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQo RklQU19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJY3R4LT5rZXll ZCA9IDA7Ci0rCWN0eC0+dGVzdF9tb2RlID0gMDsKLSsJY3R4LT5jb3VudGVyID0gMDsKLSsJY3R4 LT5zZWNvbmQgPSAwOwotKwljdHgtPmVycm9yID0gMDsKLSsJY3R4LT52cG9zID0gMDsKLSsJT1BF TlNTTF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCU9QRU5TU0xfY2xlYW5z ZSgmY3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKLSsJfQotKwkKLSsKLStzdGF0aWMgaW50IGZp cHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCUZJUFNfc2VsZnRlc3Rf Y2hlY2soKTsKLSsJaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9 IDMyKQotKwkJewotKwkJLyogZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8KLSsJCXJldHVybiAw OwotKwkJfQotKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtz KTsKLSsJaWYgKGtleWxlbiA9PSAxNikKLSsJCXsKLSsJCW1lbWNweShjdHgtPnRtcF9rZXksIGtl eSwgMTYpOwotKwkJY3R4LT5rZXllZCA9IDI7Ci0rCQl9Ci0rCWVsc2UKLSsJCWN0eC0+a2V5ZWQg PSAxOwotKwljdHgtPnNlZWRlZCA9IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJcmV0dXJuIDE7 Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpj dHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVk bGVuKQotKwl7Ci0rCWludCBpOwotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQlyZXR1cm4gMDsKLSsJ LyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCi0rCWlmIChjdHgt PnRlc3RfbW9kZSkKLSsJCXsKLSsJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCi0r CQkJcmV0dXJuIDA7Ci0rCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsK LSsJCWN0eC0+c2VlZGVkID0gMTsKLSsJCXJldHVybiAxOwotKwkJfQotKwkvKiBPdXRzaWRlIHRl c3QgbW9kZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KLSsJZm9yIChp ID0gMDsgaSA8IHNlZWRsZW47IGkrKykKLSsJCXsKLSsJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0g c2VlZFtpXTsKLSsJCWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQl7Ci0r CQkJY3R4LT52cG9zID0gMDsKLSsJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQg a2V5IGxlbmd0aCBlcXVhbHMKLSsgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQg ZG8gbm90IG1hdGNoLgotKyAJCQkgKi8gCi0rCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKLSsJCQkJ ewotKwkJCQlpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQotKwkJCQkJewot KwkJCQkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAotKwkJCQkJCVJBTkRfUl9Q Uk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKLSsJCQkJCXJldHVybiAwOwotKwkJCQkJfQot KwkJCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7Ci0rCQkJCWN0eC0+a2V5ZWQg PSAxOwotKwkJCQl9Ci0rCQkJY3R4LT5zZWVkZWQgPSAxOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJu IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkK LSsJewotKwlpZiAoY3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VU X1RFU1RfTU9ERSxSQU5EX1JfUFJOR19LRVlFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJY3R4 LT50ZXN0X21vZGUgPSAxOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfdGVz dF9tb2RlKHZvaWQpCi0rCXsKLSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7Ci0r CX0KLSsKLStpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKLSsJewotKwlp ZiAoIXNjdHgudGVzdF9tb2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5EX1NF VF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJbWVt Y3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LStzdGF0aWMgdm9pZCBmaXBzX2dldF9kdChGSVBTX1BSTkdfQ1RYICpjdHgpCi0rICAgIHsKLSsj aWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJRklMRVRJTUUgZnQ7Ci0rI2Vsc2UKLSsJc3RydWN0 IHRpbWV2YWwgdHY7Ci0rI2VuZGlmCi0rCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGN0eC0+RFQ7Ci0r Ci0rI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJdW5zaWduZWQgbG9uZyBwaWQ7Ci0r I2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUdldFN5c3RlbVRpbWVBc0Zp bGVUaW1lKCZmdCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRp bWUgJiAweGZmKTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRp bWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdo RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0 LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKwlidWZbNF0gPSAodW5zaWduZWQgY2hh cikgKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKLSsJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIp ICgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAodW5zaWduZWQg Y2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAodW5z aWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyNlbHNlCi0r CWdldHRpbWVvZmRheSgmdHYsTlVMTCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYu dHZfc2VjICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+ PiA4KSAmIDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4g MTYpICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAy NCkgJiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhm Zik7Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZm KTsKLSsJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZm KTsKLSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZm KTsKLSsjZW5kaWYKLSsJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpIChjdHgtPmNvdW50ZXIgJiAw eGZmKTsKLSsJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDgpICYg MHhmZik7Ci0rCWJ1ZlsxMF0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMTYp ICYgMHhmZik7Ci0rCWJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4g MjQpICYgMHhmZik7Ci0rCi0rCWN0eC0+Y291bnRlcisrOwotKwotKwotKyNpZm5kZWYgR0VUUElE X0lTX01FQU5JTkdMRVNTCi0rCXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQoKTsKLSsJYnVmWzEy XSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7Ci0rCWJ1ZlsxM10gPSAodW5zaWduZWQg Y2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAo KHBpZCA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+ PiAyNCkgJiAweGZmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotK3N0YXRpYyBpbnQgZmlwc19yYW5k KEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQl1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9T SVpFX1Qgb3V0bGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwg SVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdU SF07Ci0rCWludCBpOwotKwlpZiAoY3R4LT5lcnJvcikKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9G X0ZJUFNfUkFORCxSQU5EX1JfUFJOR19FUlJPUik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYg KCFjdHgtPmtleWVkKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9O T19LRVlfU0VUKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWN0eC0+c2VlZGVkKQotKwkJ ewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWZvciAoOzspCi0rCQl7Ci0rCQlpZiAoIWN0eC0+dGVzdF9t b2RlKQotKwkJCWZpcHNfZ2V0X2R0KGN0eCk7Ci0rCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAm Y3R4LT5rcyk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJ CXRtcFtpXSA9IElbaV0gXiBjdHgtPlZbaV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgt PmtzKTsKLSsJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1w W2ldID0gUltpXSBeIElbaV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3Mp OwotKwkJLyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KLSsJCWlmIChjdHgtPnNlY29uZCkKLSsJ CQl7Ci0rCQkJaWYgKGZpcHNfcHJuZ19mYWlsKQotKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBB RVNfQkxPQ0tfTEVOR1RIKTsKLSsJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9D S19MRU5HVEgpKQotKwkJCQl7Ci0rCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFO RF9SX1BSTkdfU1RVQ0spOwotKwkJCQljdHgtPmVycm9yID0gMTsKLSsJCQkJZmlwc19zZXRfc2Vs ZnRlc3RfZmFpbCgpOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCW1lbWNweShj dHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJaWYgKCFjdHgtPnNlY29uZCkKLSsJ CQl7Ci0rCQkJY3R4LT5zZWNvbmQgPSAxOwotKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJ CWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkK LSsJCQl7Ci0rCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0r Ci0rCQltZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCW91dCArPSBBRVNfQkxP Q0tfTEVOR1RIOwotKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7Ci0rCQl9Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0rCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZ UFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19zZXRfcHJuZ19rZXko JnNjdHgsIGtleSwga2V5bGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQg KnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQo JnNjdHgsIHNlZWQsIHNlZWRsZW4pOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2ln bmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBjb3VudCkKLSsJewotKwlpbnQgcmV0Owot KwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBmaXBzX3JhbmQoJnNj dHgsIG91dCwgY291bnQpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0r CXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQotKwl7Ci0r CWludCByZXQ7Ci0rCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IHNj dHguc2VlZGVkOwotKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVy biByZXQ7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQotKwl7Ci0rCUNSWVBU T193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4 KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwl9Ci0rCi0rc3RhdGlj IHZvaWQgZmlwc19kb19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVf VCBzZWVkbGVuKQotKwl7Ci0rCUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwl9Ci0r Ci0rc3RhdGljIHZvaWQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JB TkRfU0laRV9UIHNlZWRsZW4sCi0rCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCi0rCXsKLSsJRklQ U19yYW5kX3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rCX0KLSsKLStzdGF0aWMgY29uc3QgUkFORF9N RVRIT0QgcmFuZF9maXBzX21ldGg9Ci0rICAgIHsKLSsgICAgZmlwc19kb19yYW5kX3NlZWQsCi0r ICAgIEZJUFNfcmFuZF9ieXRlcywKLSsgICAgRklQU19yYW5kX3Jlc2V0LAotKyAgICBmaXBzX2Rv X3JhbmRfYWRkLAotKyAgICBGSVBTX3JhbmRfYnl0ZXMsCi0rICAgIEZJUFNfcmFuZF9zdGF0dXMK LSsgICAgfTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKQot K3sKLSsgIHJldHVybiAmcmFuZF9maXBzX21ldGg7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2Zp cHNfcmFuZC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDc3IEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gKLSsjZGVmaW5lIEhFQURFUl9GSVBT X1JBTkRfSAotKwotKyNpbmNsdWRlICJkZXMuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r Ci0rI2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK2ludCBG SVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpF X1Qga2V5bGVuKTsKLStpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JB TkRfU0laRV9UIG51bSk7Ci0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQs IEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKLSsKLStpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2 b2lkKTsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKLStpbnQgRklQU19yYW5kX3NldF9k dCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCk7Ci0r Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCk7Ci0rCi0rI2lmZGVm ICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3Jh bmRfc2VsZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAs MCArMSwzNzMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBE VFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0r CX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRh a2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsKLStzdGF0aWMgdW5zaWduZWQg Y2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYw LDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9 OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2W10gPSB7Ci0rCXsKLSsJCQkJLyog RFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkg MHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKLSsJCQkJLyogViAqLwot KwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg1 OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAotKwkJIDB4ODQsMHg3OSwweDY2 LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJ ezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQs MHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmF9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDdjLDB4MjIsMHgy YywweGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMsCi0rCQkgMHgxYywweDljLDB4YjYsMHg0MSwweGE5 LDB4ZjMsMHgyMiwweDBkfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIz LDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIs MHhiMCwweGU5LDB4MjIsMHhmYn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4OGEsMHhhYSwweDAwLDB4MzksMHg2 NiwweDY3LDB4NWIsMHhlNSwKLSsJCSAweDI5LDB4MTQsMHgyOCwweDgxLDB4YTksMHg0ZCwweDRl LDB4Yzd9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4 LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTks MHgyMiwweGZjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg4OCwweGRkLDB4YTQsMHg1NiwweDMwLDB4MjQsMHgy MywweGU1LAotKwkJIDB4ZjYsMHg5ZCwweGE1LDB4N2UsMHg3YiwweDk1LDB4YzcsMHgzYX0KLSsJ fSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIz LDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmR9 LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJ CS8qIFIgKi8KLSsJCXsweDA1LDB4MjUsMHg5MiwweDQ2LDB4NjEsMHg3OSwweGQyLDB4Y2IsCi0r CQkgMHg3OCwweGM0LDB4MGIsMHgxNCwweDBhLDB4NWEsMHg5YSwweGM4fQotKwl9LAotKwl7Ci0r CQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYy LAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjMsMHg3N30sCi0rCQkJCS8q IFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkg MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwot KwkJezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3YSwweDU5LDB4MjYsMHhiYywKLSsJCSAweDQ4LDB4 ZDksMHgzOCwweGJmLDB4ZjAsMHg4NSwweDhmLDB4ZWF9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQg Ki8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhk NywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMywweDc4fSwKLSsJCQkJLyogViAqLwotKwkJ ezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHhhZSww eDUzLDB4ODcsMHhlZSwweDhjLDB4ZDksMHgxMiwweGY1LAotKwkJIDB4NzMsMHg1MywweGFlLDB4 MDMsMHhmOSwweGQ1LDB4MTMsMHgzM30KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBj aGFyIGFlc18xOTJfa2V5WzI0XSA9Ci0rCQl7MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMs MHgyNSwweDZlLAotKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywK LSsJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9OwotKwotK3N0YXRp YyBBRVNfUFJOR19UViBhZXNfMTkyX3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsw eDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4 N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNywweDA3LDB4ZDUs MHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAotKwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSww eDU2LDB4YjQsMHg5M30KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCww eGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4 MjQsMHg3OCwweGYzLDB4NGN9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDkyLDB4OGQsMHhiZSwweDA3LDB4ZGQs MHhjNywweDU4LDB4YzAsCi0rCQkgMHg2ZiwweDM1LDB4NDEsMHg5YiwweDE3LDB4YzksMHhiZCww eDlifQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCww eDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4 ZjMsMHg0ZH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw fSwKLSsJCQkJLyogUiAqLwotKwkJezB4ZDUsMHhkZSwweGY0LDB4NTAsMHhmMywweGI3LDB4MTAs MHg0ZSwKLSsJCSAweGI4LDB4YzYsMHhmOCwweGNmLDB4ZTIsMHhiMSwweGNhLDB4YTJ9Ci0rCX0s Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSww eDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRlfSwK LSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkv KiBSICovCi0rCQl7MHhjZSwweDI5LDB4MDgsMHg0MywweGZjLDB4MzQsMHg0MSwweGU3LAotKwkJ IDB4NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiwweDQ2LDB4YjEsMHhiYn0KLSsJfSwKLSsJewotKwkJ CQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwK LSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGZ9LAotKwkJCQkvKiBW ICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJ CXsweGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYsMHhjYSwweGE4LDB4YmYsCi0rCQkgMHg4OSwweGI4 LDB4NWUsMHgyZiwweDIyLDB4NTYsMHg5MiwweDJmfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICov Ci0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYs MHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHhjOX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsw eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MDUsMHhl YiwweDE4LDB4NTIsMHgzNCwweDQzLDB4MDAsMHg0MywKLSsJCSAweDZlLDB4NWEsMHhhNSwweGZl LDB4N2IsMHgzMiwweGM0LDB4MmR9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNm LDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2Qs MHhhNCwweDI0LDB4NzgsMHhmMywweGNhfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNSwweDNjLDB4ZTgsMHhk MSwweDA0LDB4YzcsMHhhZCwweDUwLAotKwkJIDB4MGIsMHhmMCwweDA3LDB4MTYsMHhlNywweDU2 LDB4N2EsMHhlYX0KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZf a2V5WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAot KwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSwweDAzLDB4YjcsMHg5ZiwKLSsJCSAweDBjLDB4 YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4YjUsCi0rCQkgMHgyMSwweDA1LDB4OGMsMHg0 ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90 dltdID0gewotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFk LDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUs MHg4OH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK LSsJCQkJLyogUiAqLwotKwkJezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhi YywKLSsJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9Ci0rCX0sCi0r CXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIw LDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg5fSwKLSsJ CQkJLyogViAqLwotKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK LSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBS ICovCi0rCQl7MHg2YywweGY0LDB4NDIsMHg1ZCwweGM3LDB4MDQsMHgxYSwweDQxLAotKwkJIDB4 MjgsMHgyYSwweDc4LDB4YTksMHhiMCwweDEyLDB4YzQsMHg5NX0KLSsJfSwKLSsJewotKwkJCQkv KiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJ CSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGF9LAotKwkJCQkvKiBWICov Ci0rCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsw eDE2LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3ZSwweGI5LDB4MzAsCi0rCQkgMHhkYiwweDY3LDB4 NGIsMHhhYywweDJkLDB4ZTEsMHhkMSwweDc1fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0r CQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhh OSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4Yn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGYw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTQsMHg2Ziww eGY1LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgzMCwKLSsJCSAweGJjLDB4NTcsMHhlMiwweDRhLDB4 ZjcsMHg0NSwweDYyLDB4MDV9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4 M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgz NCwweDc0LDB4OGUsMHg5ZSwweDhjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjgsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg5NiwweGUyLDB4YjQsMHgxZSww eDY2LDB4NWUsMHgwZiwweGE0LAotKwkJIDB4YzUsMHhjZCwweGEyLDB4MDcsMHhjYywweGI3LDB4 OTQsMHg0MH0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4 ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4 ZSwweDlmLDB4MDZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZX0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDYxLDB4Y2UsMHgxZCwweDZhLDB4NDgsMHg3NSww eDk3LDB4MjgsCi0rCQkgMHg0YiwweDQxLDB4ZGUsMHgxOCwweDQ0LDB4NGYsMHg1NiwweGVjfQot Kwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4 YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgw N30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKLSsJ CQkJLyogUiAqLwotKwkJezB4NTIsMHg4OSwweDU5LDB4NzksMHgyZCwweGFhLDB4MjgsMHhiMywK LSsJCSAweGIwLDB4OGEsMHgzZSwweDcwLDB4ZmEsMHg3MSwweDU5LDB4ODR9Ci0rCX0sCi0rfTsK LSsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQotKyAgICB7Ci0rICAgIGFlc18xOTJfdHZb MF0uVlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmluZSBmaXBzX3JhbmRfdGVzdChrZXksIHR2KSBc Ci0rCWRvX3JhbmRfdGVzdChrZXksIHNpemVvZiBrZXksIHR2LCBzaXplb2YodHYpL3NpemVvZihB RVNfUFJOR19UVikpCi0rCi0rc3RhdGljIGludCBkb19yYW5kX3Rlc3QodW5zaWduZWQgY2hhciAq a2V5LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5HX1RWICp0diwgaW50IG50dikKLSsJewotKwl1 bnNpZ25lZCBjaGFyIFJbMTZdOwotKwlpbnQgaTsKLSsJaWYgKCFGSVBTX3JhbmRfc2V0X2tleShr ZXksIGtleWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJZm9yIChpID0gMDsgaSA8IG50djsgaSsrKQot KwkJewotKwkJRklQU19yYW5kX3NlZWQodHZbaV0uViwgMTYpOwotKwkJRklQU19yYW5kX3NldF9k dCh0dltpXS5EVCk7Ci0rCQlGSVBTX3JhbmRfYnl0ZXMoUiwgMTYpOwotKwkJaWYgKG1lbWNtcChS LCB0dltpXS5SLCAxNikpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0r CQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZygpCi0rCXsKLSsJRklQU19yYW5kX3Jlc2V0KCk7 Ci0rCWlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0Zf RklQU19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsJaWYgKCFmaXBzX3JhbmRfdGVzdChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KQotKwkJ fHwgIWZpcHNfcmFuZF90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KQotKwkJfHwgIWZpcHNf cmFuZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rCUZJUFNfcmFuZF9yZXNldCgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwotLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNf cmFuZHRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCAr MSwyNDggQEAKLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5 cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNr YWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAo ZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBz byBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJh cnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcg YXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRp c3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNv ZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGlu Y2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5 cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRq aEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5n J3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFy ZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHBy b2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhl IGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBi ZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IK LSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0 aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu IHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAg IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRv Z3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkK LSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsg KiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2 YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0 aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBF UklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0r ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4K LSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVi bGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2Rl IGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAq IGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBb aW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUg ImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUkFORCBzdXBwb3J0XG4iKTsK LSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5o IgotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBEVFsxNl07Ci0rCXVu c2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdf TUNUOwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQotKwl7 MHg5ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgzNCwweGI1LAotKwkgMHhkOCwweDJiLDB4 ZTgsMHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfTUNUIGFl c18xMjhfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4 MjksMHgwMiwweGJhLDB4M2IsCi0rCSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDEx LDB4YWN9LAotKwkJCS8qIFYgKi8KLSsJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4 NDcsMHg5NywKLSsJIDB4N2UsMHg3NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCi0r CQkJLyogUiAqLwotKwl7MHg0OCwweGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAot KwkgMHhlNCwweDU3LDB4OTAsMHhkNSwweGMzLDB4ZmMsMHg5YiwweDczfQotK307Ci0rCi0rc3Rh dGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9Ci0rCXsweGI3LDB4NmMsMHgz NCwweGQxLDB4MDksMHg2NywweGFiLDB4NzMsCi0rCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgs MHgxNiwweDBiLDB4OTEsCi0rCSAweGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4 OGF9OwotKwotK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7Ci0rCQkJLyog RFQgKi8KLSsJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwKLSsJIDB4 ODQsMHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCi0rCQkJLyogViAqLwotKwl7 MHhiNiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAotKwkgMHhkZCwweGM3LDB4 N2EsMHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKLSsJCQkvKiBSICovCi0rCXsweGZjLDB4ODUs MHg2MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCi0rCSAweGRkLDB4ODYsMHgyMCwweDMyLDB4 OGEsMHgyOSwweDZmLDB4NDd9Ci0rfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2 X21jdF9rZXlbMzJdID0KLSsJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgz YSwKLSsJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKLSsJIDB4Yjgs MHg3ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKLSsJIDB4ODYsMHgzMiwweGZjLDB4 MWYsMHg1ZSwweDFkLDB4MWUsMHg1MH07Ci0rCi0rc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMjU2 X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHgzMSwweDZlLDB4MzUsMHg5YSwweGIxLDB4 NDQsMHhmMCwweGVlLAotKwkgMHg2MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5MiwweDRj fSwKLSsJCQkvKiBWICovCi0rCXsweDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiwweDRkLDB4 YTEsCi0rCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAotKwkJCS8q IFIgKi8KLSsJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwKLSsJIDB4 ZTcsMHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0KLSt9OwotKwotK3N0YXRpYyB2 b2lkIGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikKLSsgICAgewotKyAgICB3aGls ZShuLS0gPiAwKQotKwl7Ci0rCXByaW50ZigiICUwMngiLCpiKyspOwotKwl9Ci0rICAgIH0KLSsK LStzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1 bnNpZ25lZCBjaGFyICpleHBlY3RlZCwKLSsJCSAgICBpbnQgbikKLSsgICAgewotKyAgICBpbnQg aTsKLSsKLSsgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQotKwlpZihyZXN1bHRbaV0gIT0gZXhw ZWN0ZWRbaV0pCi0rCSAgICB7Ci0rCSAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoi KTsKLSsJICAgIGR1bXAocmVzdWx0LG4pOwotKwkgICAgcHV0cygiXG4gICAgICAgICAgICAgICBl eHBlY3RlZDoiKTsKLSsJICAgIGR1bXAoZXhwZWN0ZWQsbik7Ci0rCSAgICBwdXRjaGFyKCdcbicp OwotKwkgICAgRVhJVCgxKTsKLSsJICAgIH0KLSsgICAgfQotKwotKwotK3N0YXRpYyB2b2lkIHJ1 bl90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgQUVTX1BSTkdfTUNUICp0dikK LSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKLSsgICAgaW50IGks IGo7Ci0rICAgIEZJUFNfcmFuZF9yZXNldCgpOwotKyAgICBGSVBTX3JhbmRfdGVzdF9tb2RlKCk7 Ci0rICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsgICAgRklQU19yYW5kX3Nl ZWQodHYtPlYsIDE2KTsKLSsgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKLSsgICAgZm9yIChp ID0gMDsgaSA8IDEwMDAwOyBpKyspCi0rCXsKLSsgICAgCUZJUFNfcmFuZF9zZXRfZHQoZHQpOwot KwlGSVBTX3JhbmRfYnl0ZXMoYnVmLCAxNik7Ci0rCS8qIEluY3JlbWVudCBEVCAqLwotKwlmb3Ig KGogPSAxNTsgaiA+PSAwOyBqLS0pCi0rCQl7Ci0rCQlkdFtqXSsrOwotKwkJaWYgKGR0W2pdKQot KwkJCWJyZWFrOwotKwkJfQotKwl9Ci0rCi0rICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAxNik7Ci0r ICAgIH0KLSsKLStpbnQgbWFpbigpCi0rCXsKLSsJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAx NiwgJmFlc18xMjhfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIp OwotKwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYpOwotKwlw cmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7Ci0rCXJ1bl90ZXN0KGFlc18yNTZfbWN0 X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBk b25lXG4iKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVz dC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDQ0MSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBuW10gPQotKyJceDAwXHhCQlx4RjhceDJGXHgwOVx4 MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThceDcxIgotKyJceEY3XHgzNlx4 OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1Igot KyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4NDhceENFXHhF Qlx4NkZceENEIgotKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4NDZceDE5XHg3 MVx4OURceDhBXHg1Qlx4OEJceDgwIgotKyJceDdGXHhBRlx4QjhceEUwXHhBM1x4REZceEM3XHgz N1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgotKyJceDg0XHhFRVx4NkFceDY0XHg5 RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5IgotKyJceDRFXHhF MFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4OUFceDQxXHhGNlx4QzFceDY4 IgotKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhGOFx4RTVceEZE XHgwOVx4MURceEJEIgotKyJceENCIjsKLSsKLSsKLStzdGF0aWMgaW50IHNldHJzYWtleShSU0Eg KmtleSkKLSsgICAgewotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgx MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9Ci0rIlx4MDBceEE1 XHhEQVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0Qi Ci0rIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFc eDU3XHg5Nlx4NDEiCi0rIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVc eDc0XHg1RVx4NUNceDM5XHgyNlx4NjkiCi0rIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlc eDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCi0rIlx4QzlceDdGXHhGM1x4QURc eDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCi0rIlx4NDRc eEU1XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1XHhEMlx4 MEEiCi0rIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4 Q0VceENDXHg0OFx4OTQiCi0rIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4 NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCi0rIlx4QzEiOwotKwotKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBwW10gPQotKyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhC M1x4QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgotKyJceDAxXHg5OVx4RUJceDlGXHg0 NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgotKyJceDMyXHgx Mlx4NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4MDRceDBB IgotKyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJB XHg1OFx4RkJceDY1IgotKyJceDk5IjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgcVtdID0KLSsiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJc eDMzXHhFQVx4QUFceEQxXHhEOSIKLSsiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFc eEQwXHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKLSsiXHg4Nlx4OThceDQwXHhCNFx4MTZc eDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKLSsiXHhDRlx4Q0Vc eDMzXHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgxNSIK LSsiXHgwMyI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9Ci0r Ilx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2 XHg5QVx4NUEiCi0rIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0 XHhCMFx4NTFceEYyXHhCMVx4M0UiCi0rIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0 XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCi0rIlx4MjBceDJCXHgzOFx4RkNceDkx XHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOwotKwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQotKyJceDQ3XHgxRVx4MDJceDkwXHhG Rlx4MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgotKyJceDYxXHhB RFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3 IgotKyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0 XHg3QVx4MjJceDBEIgotKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5 XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKLSsgICAgCi0rICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGlxbXBbXSA9Ci0rIlx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgx OVx4OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCi0rIlx4QjNceDgwXHhGMlx4NzFceEY3XHgz NFx4NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCi0rIlx4OUZceEM5XHg4 Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCi0r Ilx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5 XHg4MFx4MzkiCi0rIlx4RjciOwotKwotKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9m KG4pLTEsIGtleS0+bik7Ci0rICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwg a2V5LT5lKTsKLSsgICAga2V5LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQp OwotKyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7Ci0rICAg IGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSktMSwga2V5LT5xKTsKLSsgICAga2V5LT5k bXAxID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOwotKyAgICBr ZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7Ci0r ICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1w KTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQot KyAgICB7Ci0rICAgIG5bMF0rKzsKLSsgICAgfQotKwotKy8qIEtub3duIEFuc3dlciBUZXN0IChL QVQpIGRhdGEgZm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZwotKyAqIGthdF90 YnMuCi0rICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9w ZW5TU0wgRklQUyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKLSsgIDB4MkQsIDB4QUYsIDB4NkUs IDB4QzIsIDB4OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCi0r ICAweDAxLCAweDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAw eEQyLCAweDkwLCAweEJCLAotKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwg MHhCQiwgMHhFOCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywKLSsgIDB4RDEsIDB4REYsIDB4RTcs IDB4QkUsIDB4ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCi0r ICAweDdGLCAweDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAw eDYwLCAweEQwLCAweEE3LAotKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwg MHgwNywgMHhFMywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKLSsgIDB4QjYsIDB4RjMsIDB4RjIs IDB4NUUsIDB4NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCi0r ICAweDBBLCAweEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAw eEY4LCAweEI3LCAweDMxLAotKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwg MHhENCwgMHhFNiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKLSsgIDB4MjMsIDB4QjUsIDB4N0Ys IDB4REMsIDB4MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCi0r ICAweDI2LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5Ci0rfTsKLSsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKLSsg IDB4MzksIDB4NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4 QzUsIDB4NTgsIDB4QTcsCi0rICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAw eDJDLCAweDgyLCAweDk4LCAweDA4LCAweDk1LCAweEZBLAotKyAgMHhCMSwgMHg5RSwgMHhEMiwg MHg1NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKLSsg IDB4MzAsIDB4OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4 NTQsIDB4MUMsIDB4ODksCi0rICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAw eDJFLCAweDE2LCAweENDLCAweDg2LCAweDA1LCAweEVFLAotKyAgMHhCMSwgMHhFNiwgMHg3Qiwg MHhCQSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKLSsg IDB4MTUsIDB4NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4 NjIsIDB4RDEsIDB4QjUsCi0rICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAw eEQyLCAweEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAotKyAgMHg1OCwgMHhEMiwgMHg3NCwg MHg4NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKLSsg IDB4QzgsIDB4NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4 OTUsIDB4QzAsIDB4MDAsCi0rICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAw eEVFLCAweEMwCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BT U19TSEEyNTZbXSA9IHsKLSsgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4 MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCi0rICAweDAwLCAweDk3LCAweEZBLCAw eDk5LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAotKyAg MHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3 RCwgMHg3MywgMHgyOCwKLSsgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4 OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCi0rICAweDdELCAweDJFLCAweDJDLCAw eDM0LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAotKyAg MHhBQiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2 RCwgMHgyNiwgMHhCQSwKLSsgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4 NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCi0rICAweDBCLCAweDQ3LCAweDM0LCAw eEFGLCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAotKyAg MHgyMSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgx MiwgMHhFNCwgMHg2RCwKLSsgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4 NkMsIDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCi0rICAweDcyLCAweEY0LCAweEY2LCAw eEVGLCAweDg4LCAweDFFLCAweDJELCAweDFDCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1BTU19TSEEzODRbXSA9IHsKLSsgIDB4NDAsIDB4RkIsIDB4QTEsIDB4 MjEsIDB4RjQsIDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCi0rICAw eEVDLCAweDFDLCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1 LCAweENELCAweDVFLAotKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhE QywgMHg3QSwgMHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKLSsgIDB4QUEsIDB4MjUsIDB4RjQsIDB4 QjIsIDB4RkMsIDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCi0rICAw eDZGLCAweDAyLCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERD LCAweDQyLCAweDZDLAotKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhF NiwgMHg3MSwgMHhGMywgMHhBQywgMHg0RiwgMHhGQiwKLSsgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4 NzAsIDB4RUYsIDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCi0rICAw eDNBLCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFE LCAweDQyLCAweDg5LAotKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgz OCwgMHhBQywgMHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKLSsgIDB4NDgsIDB4RjYsIDB4QUUsIDB4 RDcsIDB4NDUsIDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCi0rICAw eDQ4LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCi0rfTsKLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKLSsgIDB4 MDcsIDB4MUUsIDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUs IDB4NjMsIDB4OEMsCi0rICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYy LCAweEM2LCAweDhGLCAweDEyLCAweDUzLCAweDlBLAotKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhC MywgMHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKLSsgIDB4 NEIsIDB4RjMsIDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4Nzks IDB4MjMsIDB4MzksCi0rICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlB LCAweDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAotKyAgMHg3QywgMHhFMywgMHg3RiwgMHhF RCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKLSsgIDB4 NTcsIDB4RTMsIDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAs IDB4ODUsIDB4MTMsCi0rICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4 LCAweEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYzLAotKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0 QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKLSsgIDB4 NzYsIDB4RjIsIDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAs IDB4QzIsIDB4ODgsCi0rICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0 LCAweDhCCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFb XSA9IHsKLSsgIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQs IDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCi0rICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhG LCAweDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAotKyAgMHhFNywgMHhG RCwgMHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwg MHhDRiwKLSsgIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDks IDB4RTMsIDB4M0QsIDB4MUUsIDB4RjgsCi0rICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVD LCAweDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAotKyAgMHgyMCwgMHgy MiwgMHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwg MHhCQSwKLSsgIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYs IDB4NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCi0rICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEz LCAweEI3LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAotKyAgMHgzNSwgMHgw NywgMHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwg MHgxRiwKLSsgIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEs IDB4NzYsIDB4NEIsIDB4MkYsIDB4OTUsCi0rICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgw LCAweEQ5LCAweDQ2LCAweEI0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1NIQTIyNFtdID0gewotKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgw RSwgMHg1RiwgMHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKLSsgIDB4MjUsIDB4QkIsIDB4 RkEsIDB4RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQs Ci0rICAweDVCLCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1 LCAweDFBLCAweEM1LCAweDg5LAotKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1 MCwgMHgxNywgMHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKLSsgIDB4QTQsIDB4MDIsIDB4 QUQsIDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUs Ci0rICAweEVFLCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVF LCAweDBCLCAweEE5LCAweENDLAotKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgy NSwgMHg3MCwgMHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKLSsgIDB4MEIsIDB4NDQsIDB4 NEMsIDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIs Ci0rICAweDU4LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMw LCAweDY2LCAweEU2LCAweDM1LAotKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgw MiwgMHg3MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKLSsgIDB4NDAsIDB4MjEsIDB4 ODksIDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7Ci0rICAweDBELCAweDU1LCAweEUyLCAw eEFBLCAweDgxLCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAotKyAg MHhFNywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3 QiwgMHhBQSwgMHgyMywKLSsgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4 MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCi0rICAweDk4LCAweDJELCAweDY5LCAw eDg0LCAweEJGLCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAotKyAg MHgyQywgMHg0NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5 MCwgMHgyRCwgMHgxOCwKLSsgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4 MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCi0rICAweEJFLCAweDIyLCAweEM3LCAw eEQzLCAweEVDLCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAotKyAg MHg3QywgMHg4NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4 MSwgMHhBNiwgMHgzOCwKLSsgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4 Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCi0rICAweDI3LCAweDQ4LCAweDJCLCAw eEY1LCAweEFCLCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAotKyAg MHhCRCwgMHg0NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKLSsgIDB4MUQs IDB4RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4 RTYsIDB4MUYsCi0rICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAw eDk5LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAotKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwg MHhEMCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKLSsgIDB4QTcs IDB4NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4 QTYsIDB4NTUsCi0rICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAw eDc5LCAweDI4LCAweDdGLCAweEI2LCAweENGLAotKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwg MHhFMSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKLSsgIDB4MUIs IDB4MkIsIDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4 RUIsIDB4OEMsCi0rICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAw eEJGLCAweDhGLCAweDhCLCAweDlDLCAweENELAotKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwg MHhEQywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKLSsgIDB4MTYs IDB4MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4 REMsIDB4MDQsCi0rICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAw eEJGCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltd ID0gewotKyAgMHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5Qiwg MHgxNiwgMHg1MSwgMHg1RCwgMHhDRiwKLSsgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEs IDB4NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCi0rICAweDE1LCAweEVB LCAweDVDLCAweEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAw eEYxLAotKyAgMHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwg MHg0QywgMHg1NCwgMHg5RiwgMHhEOCwKLSsgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIs IDB4OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCi0rICAweDgwLCAweEUy LCAweEJDLCAweERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAw eDZCLAotKyAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwg MHgxQiwgMHgxRCwgMHg0NywgMHhFNiwKLSsgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMs IDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCi0rICAweDZGLCAweDBF LCAweDJCLCAweDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAw eDJELAotKyAgMHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwg MHhBQiwgMHg5OCwgMHg2NSwgMHg5MSwKLSsgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0Ys IDB4MzYsIDB4QUIsIDB4ODQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfWDkzMV9TSEExW10gPSB7Ci0rICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAw eDgwLCAweEI2LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAotKyAgMHhFOSwgMHgyRCwg MHhFMSwgMHg4MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3 NSwKLSsgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4 MUUsIDB4MTQsIDB4QjgsIDB4QUMsCi0rICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAw eEY4LCAweDM4LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAotKyAgMHg3MCwgMHhGQiwg MHg1RSwgMHhFNywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhE NiwKLSsgIDB4NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4 QjEsIDB4MUEsIDB4MTEsIDB4MTksCi0rICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAw eEJDLCAweDYzLCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAotKyAgMHg2RiwgMHg0Qywg MHgzQywgMHgzNywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5 OSwKLSsgIDB4NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4 REIsIDB4RUEsIDB4RUQsIDB4NzYsCi0rICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAw eDE0LCAweEJBLCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAotKyAgMHhBMywgMHgyOSwg MHg4MCwgMHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQotK307Ci0rCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0gewotKyAgMHg3RSwgMHhBMiwg MHg3NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4 OSwKLSsgIDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4 NTgsIDB4OTIsIDB4MUMsIDB4REQsCi0rICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAw eDYyLCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAotKyAgMHgxNiwgMHg3Niwg MHg2OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5 QiwKLSsgIDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4 MTMsIDB4QjgsIDB4RjAsIDB4NEIsCi0rICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAw eDUwLCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAotKyAgMHhBRCwgMHg0RSwg MHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhF QywKLSsgIDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4 NDYsIDB4OEQsIDB4QTAsIDB4OEMsCi0rICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAw eEVBLCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAotKyAgMHgyMSwgMHhFRCwg MHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhE QywKLSsgIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9 IHsKLSsgIDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4 QkIsIDB4N0IsIDB4RUMsIDB4N0IsCi0rICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAw eEVGLCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAotKyAgMHhFNiwgMHg0Riwg MHg1RSwgMHgwQSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhF MywKLSsgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4 RDcsIDB4NEEsIDB4NjMsIDB4RjYsCi0rICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAw eDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAotKyAgMHhEOCwgMHg2OSwg MHhFOSwgMHhBQiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhG MSwKLSsgIDB4M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4 QTAsIDB4NjAsIDB4NDEsIDB4NzksCi0rICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAw eDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAotKyAgMHgwRSwgMHgwOSwg MHhFRSwgMHgyRSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgz NSwKLSsgIDB4RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4 QTUsIDB4REMsIDB4QzYsIDB4NkQsCi0rICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAw eDgyLCAweDY1LCAweDI4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1g5MzFfU0hBNTEyW10gPSB7Ci0rICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAw eEIzLCAweDg2LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAotKyAgMHhGQywgMHhBMSwg MHhBQSwgMHhDQiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhB QywKLSsgIDB4RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4 MDUsIDB4OUUsIDB4NzcsIDB4RDcsCi0rICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAw eDRBLCAweEU2LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAotKyAgMHhBMCwgMHg5OSwg MHg3NCwgMHg2NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhD NSwKLSsgIDB4NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4 MzQsIDB4NTMsIDB4RDIsIDB4QUYsCi0rICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAw eEY2LCAweDA0LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAotKyAgMHhDRSwgMHg4QSwg MHg2RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgw OSwKLSsgIDB4OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4 MDQsIDB4MkQsIDB4RkIsIDB4N0MsCi0rICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAw eEZELCAweDkyLCAweDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAotKyAgMHg2MCwgMHg4Mywg MHgxOCwgMHg4OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMwotK307Ci0rCi0rCi0raW50IEZJUFNf c2VsZnRlc3RfcnNhKCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJUlNBICprZXk7Ci0rCUVWUF9Q S0VZICpwayA9IE5VTEw7Ci0rCi0rCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdv dG8gZXJyOwotKwlzZXRyc2FrZXkoa2V5KTsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0g TlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOwot KwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKLSsJ CQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEx IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTIyNCwg c2l6ZW9mKGthdF9SU0FfU0hBMjI0KSwKLSsJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwot KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90 YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCi0r CQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBT SEEyNTYgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hB Mzg0LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAotKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQotKwkJZ290byBl cnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEy KSwKLSsJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQki UlNBIFNIQTUxMiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0 X1JTQV9QU1NfU0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEExIFBTUyIpKQotKwkJZ290 byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNB X1BTU19TSEEyMjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNT LAotKwkJCQkiUlNBIFNIQTIyNCBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJ a2F0X1JTQV9QU1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKLSsJCQkJRVZQ X3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEyNTYgUFNT IikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6 ZW9mKGthdF9SU0FfUFNTX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIp LAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNB IFNIQTUxMiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNB X1g5MzFfU0hBMSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKLSsJCQlFVlBfc2hhMSgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEExIFg5MzEiKSkKLSsJCWdvdG8g ZXJyOwotKwkvKiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KLSsJaWYgKCFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEs Ci0rCQkJa2F0X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAot KwkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hB MjU2IFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hB Mzg0LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCi0rCQkJRVZQX3NoYTM4NCgpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEzODQgWDkzMSIpKQotKwkJZ290byBl cnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5 MzFfU0hBNTEyKSwKLSsJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwK LSsJCQkiUlNBIFNIQTUxMiBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsKLSsKLSsJcmV0ID0gMTsK LSsKLSsJZXJyOgotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsJZWxzZSBpZiAo a2V5KQotKwkJUlNBX2ZyZWUoa2V5KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZiAv KiBkZWYgT1BFTlNTTF9GSVBTICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2ZpcHNfcnNhX3g5MzFnLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcnNh X3g5MzFnLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMu ZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSwyODEgQEAKLSsvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAq LwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMg YW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5 cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRv IGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBm cmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAq IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0 aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90 IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQg d2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0 ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0 c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5k IGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0 byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwg RXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9y IG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRo ZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGlu IGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNr YWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0r ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGlj JyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAg IGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElm IHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0 aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29k ZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9V TkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF Ci0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMg KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAot KyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5 IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90 IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVk IGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRp bmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDx0aW1lLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKwotK2V4dGVybiBpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpOwotKyNlbmRpZgotKwot Ky8qIFg5LjMxIFJTQSBrZXkgZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLwotKwotK2ludCBS U0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05V TSAqcTEsIEJJR05VTSAqcTIsCi0rCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAq WHAyLCBjb25zdCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdO VU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNC ICpjYikKLSsJewotKwlCSUdOVU0gKnIwPU5VTEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEw7 Ci0rCUJOX0NUWCAqY3R4PU5VTEwsKmN0eDI9TlVMTDsKLSsKLSsJaWYgKCFyc2EpIAotKwkJZ290 byBlcnI7Ci0rCi0rCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgpIAotKwkJZ290byBl cnI7Ci0rCUJOX0NUWF9zdGFydChjdHgpOwotKwotKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJ cjEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIyID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMyA9IEJO X0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKHIzID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYg KCFyc2EtPmUpCi0rCQl7Ci0rCQlyc2EtPmUgPSBCTl9kdXAoZSk7Ci0rCQlpZiAoIXJzYS0+ZSkK LSsJCQlnb3RvIGVycjsKLSsJCX0KLSsJZWxzZQotKwkJZSA9IHJzYS0+ZTsKLSsKLSsJLyogSWYg bm90IGFsbCBwYXJhbWV0ZXJzIHByZXNlbnQgb25seSBjYWxjdWxhdGUgd2hhdCB3ZSBjYW4uCi0r CSAqIFRoaXMgYWxsb3dzIHRlc3QgcHJvZ3JhbXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0 ZXJzLgotKwkgKi8KLSsKLSsJaWYgKFhwICYmICFyc2EtPnApCi0rCQl7Ci0rCQlyc2EtPnAgPSBC Tl9uZXcoKTsKLSsJCWlmICghcnNhLT5wKQotKwkJCWdvdG8gZXJyOwotKwotKwkJaWYgKCFCTl9Y OTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnAsIHAxLCBwMiwKLSsJCQkJCVhwLCBYcDEsIFhwMiwg ZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmIChYcSAmJiAhcnNhLT5x KQotKwkJewotKwkJcnNhLT5xID0gQk5fbmV3KCk7Ci0rCQlpZiAoIXJzYS0+cSkKLSsJCQlnb3Rv IGVycjsKLSsJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIsCi0r CQkJCQlYcSwgWHExLCBYcTIsIGUsIGN0eCwgY2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwot KwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJ Qk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCXJldHVybiAyOwotKwkJfQotKwotKwkvKiBTaW5jZSBib3Ro IHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cgY2FsY3VsYXRlIGFsbCByZW1haW5pbmcgCi0rCSAq IGNvbXBvbmVudHMuCi0rCSAqLwotKwotKwkvKiBjYWxjdWxhdGUgbiAqLwotKwlyc2EtPm49Qk5f bmV3KCk7Ci0rCWlmIChyc2EtPm4gPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX211 bChyc2EtPm4scnNhLT5wLHJzYS0+cSxjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1 bGF0ZSBkICovCi0rCWlmICghQk5fc3ViKHIxLHJzYS0+cCxCTl92YWx1ZV9vbmUoKSkpCi0rCQln b3RvIGVycjsJLyogcC0xICovCi0rCWlmICghQk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUo KSkpCi0rCQlnb3RvIGVycjsJLyogcS0xICovCi0rCWlmICghQk5fbXVsKHIwLHIxLHIyLGN0eCkp Ci0rCQlnb3RvIGVycjsJLyogKHAtMSkocS0xKSAqLwotKwotKwlpZiAoIUJOX2djZChyMywgcjEs IHIyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwg cjMsIGN0eCkpCi0rCQlnb3RvIGVycjsJLyogTENNKChwLTEpKHEtMSkpICovCi0rCi0rCWN0eDIg PSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4MikKLSsJCWdvdG8gZXJyOwotKwotKwlyc2EtPmQ9 Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPmUscjAsY3R4Mik7CS8qIGQgKi8KLSsJaWYgKHJzYS0+ ZCA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAq LwotKwlyc2EtPmRtcDE9Qk5fbmV3KCk7Ci0rCWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKLSsJCWdv dG8gZXJyOwotKwlpZiAoIUJOX21vZChyc2EtPmRtcDEscnNhLT5kLHIxLGN0eCkpCi0rCQlnb3Rv IGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCi0rCXJzYS0+ZG1xMT1CTl9u ZXcoKTsKLSsJaWYgKHJzYS0+ZG1xMSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5f bW9kKHJzYS0+ZG1xMSxyc2EtPmQscjIsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxj dWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCi0rCXJzYS0+aXFtcD1CTl9tb2RfaW52ZXJzZShO VUxMLHJzYS0+cSxyc2EtPnAsY3R4Mik7Ci0rCi0rCWVycjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJ CUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCWlmIChjdHgy KQotKwkJQk5fQ1RYX2ZyZWUoY3R4Mik7Ci0rCS8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxscyBz dWNjZXNzZnVsICovCi0rCWlmIChyc2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCi0rCQlyZXR1cm4g MTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLSsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5 X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCi0r CXsKLSsJaW50IG9rID0gMDsKLSsJQklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJO X0NUWCAqY3R4ID0gTlVMTDsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChiaXRzIDwg T1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkgICAgewotKwkgICAgRklQU2Vy cihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsK LSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlpZiAoYml0cyAmIDB4ZmYpCi0rCSAgICB7 Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0lO VkFMSURfS0VZX0xFTkdUSCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAg cmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0rCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSsJ aWYgKCFjdHgpCi0rCQlnb3RvIGVycm9yOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJWHAg PSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCVhxID0gQk5fQ1RYX2dldChjdHgpOwotKwlpZiAoIUJOX1g5 MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0cywgY3R4KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0r CXJzYS0+cCA9IEJOX25ldygpOwotKwlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJaWYgKCFyc2EtPnAg fHwgIXJzYS0+cSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCS8qIEdlbmVyYXRlIHR3byBwcmltZXMg ZnJvbSBYcCwgWHEgKi8KLSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+ cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJCWdv dG8gZXJyb3I7Ci0rCi0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhxLAotKwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVy cm9yOwotKwotKwkvKiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxs IHdpbGwganVzdCBkZXJpdmUKLSsJICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgotKwkgKi8K LSsKLSsJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LAotKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCi0rCQln b3RvIGVycm9yOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoIWZpcHNfY2hlY2tfcnNh KHJzYSkpCi0rCSAgICBnb3RvIGVycm9yOwotKyNlbmRpZgotKwotKwlvayA9IDE7Ci0rCi0rCWVy cm9yOgotKwlpZiAoY3R4KQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2Zy ZWUoY3R4KTsKLSsJCX0KLSsKLSsJaWYgKG9rKQotKwkJcmV0dXJuIDE7Ci0rCi0rCXJldHVybiAw OwotKwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfc2hhMV9z ZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRl c3QuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMu ZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4w MDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsOTkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsg Ki8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYK LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGNoYXIgdGVzdFtdWzYwXT0KLSsgICAgewot KyAgICAiIiwKLSsgICAgImFiYyIsCi0rICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlq aGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKLSsgICAgfTsKLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09Ci0rICAgIHsKLSsgICAgeyAw eGRhLDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1LAotKyAgICAg IDB4YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4MDkgfSwKLSsg ICAgeyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhiYSwweDNlLAot KyAgICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCwweGQ4LDB4OWQg fSwKLSsgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4NmUsMHhiYSww eGFlLAotKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUsMHg0NiwweDcw LDB4ZjEgfSwKLSsgICAgfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKLSsgICAgewot KyAgICB0ZXN0WzJdWzBdKys7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGExKCkK LSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3Np emVvZih0ZXN0WzBdKSA7ICsrbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1Rf TEVOR1RIXTsKLSsKLSsJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKSxtZCwgTlVM TCwgRVZQX3NoYTEoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkK LSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwl9Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9m aXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3No YTEuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxNzMg QEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0r ICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0 cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgot KyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0r ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgot KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS Ci0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvaG1hYy5oPgotKwotKyNpZm5kZWYgRklQU0NBTklTVEVSX08KLStpbnQgRklQU19z ZWxmdGVzdF9mYWlsZWQoKSB7IHJldHVybiAwOyB9Ci0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNr KCkge30KLSt2b2lkIE9QRU5TU0xfY2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9Ci0rI2Vu ZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyB2b2lkIGhtYWNfaW5pdChT SEFfQ1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgsCi0rCQkgICAgICBjb25zdCBjaGFyICprZXkp Ci0rICAgIHsKLSsgICAgc2l6ZV90IGxlbj1zdHJsZW4oa2V5KTsKLSsgICAgaW50IGk7Ci0rICAg IHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKLSsgICAgdW5zaWduZWQg Y2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKLSsKLSsgICAgaWYgKGxlbiA+IFNIQV9DQkxP Q0spCi0rCXsKLSsJU0hBMV9Jbml0KG1kX2N0eCk7Ci0rCVNIQTFfVXBkYXRlKG1kX2N0eCxrZXks bGVuKTsKLSsJU0hBMV9GaW5hbChrZXltZCxtZF9jdHgpOwotKwlsZW49MjA7Ci0rCX0KLSsgICAg ZWxzZQotKwltZW1jcHkoa2V5bWQsa2V5LGxlbik7Ci0rICAgIG1lbXNldCgma2V5bWRbbGVuXSwn XDAnLEhNQUNfTUFYX01EX0NCTE9DSy1sZW4pOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNf TUFYX01EX0NCTE9DSyA7IGkrKykKLSsJcGFkW2ldPTB4MzZea2V5bWRbaV07Ci0rICAgIFNIQTFf SW5pdChtZF9jdHgpOwotKyAgICBTSEExX1VwZGF0ZShtZF9jdHgscGFkLFNIQV9DQkxPQ0spOwot KwotKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykKLSsJcGFkW2ld PTB4NWNea2V5bWRbaV07Ci0rICAgIFNIQTFfSW5pdChvX2N0eCk7Ci0rICAgIFNIQTFfVXBkYXRl KG9fY3R4LHBhZCxTSEFfQ0JMT0NLKTsKLSsgICAgfQotKwotK3N0YXRpYyB2b2lkIGhtYWNfZmlu YWwodW5zaWduZWQgY2hhciAqbWQsU0hBX0NUWCAqbWRfY3R4LFNIQV9DVFggKm9fY3R4KQotKyAg ICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIwXTsKLSsKLSsgICAgU0hBMV9GaW5hbChidWYs bWRfY3R4KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgsYnVmLHNpemVvZiBidWYpOwotKyAgICBT SEExX0ZpbmFsKG1kLG9fY3R4KTsKLSsgICAgfQotKwotKyNlbmRpZgotKwotK2ludCBtYWluKGlu dCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBz dGF0aWMgY2hhciBrZXlbXT0iZXRhb25yaXNoZGxjdXBmbSI7Ci0rICAgIGludCBuLGJpbmFyeT0w OwotKwotKyAgICBpZihhcmdjIDwgMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgWzxmaWxl Pl0rXG4iLGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIG49MTsKLSsgICAgaWYg KCFzdHJjbXAoYXJndltuXSwiLWJpbmFyeSIpKQotKwl7Ci0rCW4rKzsKLSsJYmluYXJ5PTE7CS8q IGVtaXQgYmluYXJ5IGZpbmdlcnByaW50Li4uICovCi0rCX0KLSsKLSsgICAgZm9yKDsgbiA8IGFy Z2MgOyArK24pCi0rCXsKLSsJRklMRSAqZj1mb3Blbihhcmd2W25dLCJyYiIpOwotKwlTSEFfQ1RY IG1kX2N0eCxvX2N0eDsKLSsJdW5zaWduZWQgY2hhciBtZFsyMF07Ci0rCWludCBpOwotKwotKwlp ZighZikKLSsJICAgIHsKLSsJICAgIHBlcnJvcihhcmd2W25dKTsKLSsJICAgIGV4aXQoMik7Ci0r CSAgICB9Ci0rCi0rCWhtYWNfaW5pdCgmbWRfY3R4LCZvX2N0eCxrZXkpOwotKwlmb3IoIDsgOyAp Ci0rCSAgICB7Ci0rCSAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsJICAgIHNpemVfdCBsPWZyZWFkKGJ1 ZiwxLHNpemVvZiBidWYsZik7Ci0rCi0rCSAgICBpZihsID09IDApCi0rCQl7Ci0rCQlpZihmZXJy b3IoZikpCi0rCQkgICAgewotKwkJICAgIHBlcnJvcihhcmd2W25dKTsKLSsJCSAgICBleGl0KDMp OwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICBicmVhazsKLSsJCX0KLSsJICAgIFNIQTFfVXBk YXRlKCZtZF9jdHgsYnVmLGwpOwotKwkgICAgfQotKwlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9f Y3R4KTsKLSsKLSsJaWYgKGJpbmFyeSkKLSsJICAgIHsKLSsJICAgIGZ3cml0ZShtZCwyMCwxLHN0 ZG91dCk7Ci0rCSAgICBicmVhazsJLyogLi4uIGZvciBzaW5nbGUoISkgZmlsZSAqLwotKwkgICAg fQotKwotKwlwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7Ci0rCWZvcihpPTAgOyBp IDwgMjAgOyArK2kpCi0rCSAgICBwcmludGYoIiUwMngiLG1kW2ldKTsKLSsJcHJpbnRmKCJcbiIp OwotKwl9Ci0rI2VuZGlmCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRl LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNTg4IEBA Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKgotKyAqIFRoaXMgY29tbWFuZCBp cyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGluZwotKyAq IGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMgdGhl IHVzZSBvZiB0aGUKLSsgKiBPcGVuU1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9m IGNvbW1vbiBjcnlwdG9ncmFwaGljCi0rICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxmIHRl c3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRlbGliZXJhdGVseQotKyAqIHBvaW50aW5nIHRvIGFuIGlu dmFsaWQgZXhlY3V0YWJsZSBoYXNoCi0rICoKLSsgKiBDb250cmlidXRlZCBieSBTdGV2ZSBNYXJx dWVzcy4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxhc3NlcnQu aD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Rlcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgot KwotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKLSsgICAgewotKyAgICBwcmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7Ci0rICAgIHJl dHVybigwKTsKLSsgICAgfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBr bm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQK LSsqLwotK3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAw OwotKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFsxNl07 Ci0rCXVuc2lnbmVkIGNoYXIga2V5WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIs MTMsMTQsMTUsMTZ9OwotKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNo ZGxjdSI7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4 KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEws IGtleSwgTlVMTCwgMSkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIGNp dG1wLCBwbGFpbnRleHQsIDE2KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9h ZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlF VlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYpOwotKwlpZiAobWVtY21wKHBsdG1wLCBw bGFpbnRleHQsIDE2KSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9D SVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStzdGF0aWMg aW50IEZJUFNfZGVzM190ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVk IGNoYXIgcGx0bXBbOF07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbOF07Ci0rICAgIAl1bnNpZ25l ZCBjaGFyIGtleVtdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwx NywxOCwKLSsJCSAgICAgICAgICAgICAgMTksMjAsMjEsMjIsMjMsMjR9OwotKyAgICAJdW5zaWdu ZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdyJywgJ2kn LCAncycgfTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZj dHgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5V TEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgs IGNpdG1wLCBwbGFpbnRleHQsIDgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQ X2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwot KwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgOCk7Ci0rCWlmIChtZW1jbXAocGx0bXAs IHBsYWludGV4dCwgOCkpCi0rCQlnb3RvIGVycjsKLSsJcmV0ID0gMTsKLSsJZXJyOgotKwlFVlBf Q0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyoKLSsg KiBEU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0r ICovCi0rc3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGludCBiYWQpCi0rICAgIHsKLSsgICAgRFNB ICpkc2EgPSBOVUxMOwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAgdW5zaWduZWQgY2hhciBkZ3N0 W10gPSAiZXRhb25yaXNoZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOwotKyAgICB1 bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgaW50IHIgPSAwOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7 Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgp OwotKyAgICBkc2EgPSBEU0FfbmV3KCk7Ci0rICAgIGlmICghZHNhKQotKwlnb3RvIGVuZDsKLSsg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5VTEws TlVMTCxOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2Ep KQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGRzYS0+cHVi X2tleSwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rICAgIHBrLnBrZXku ZHNhID0gZHNhOwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBk Z3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25G aW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAgIGlmICgh RVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVuZDsK LSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAx KSkKLSsJZ290byBlbmQ7Ci0rICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xl biwgJnBrKTsKLSsgICAgZW5kOgotKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAg ICBpZiAoZHNhKQotKyAgCSAgRFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0 dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyoKLSsgKiBSU0E6IGdlbmVyYXRl IGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGljIGlu dCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIHVu c2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25l ZCBjaGFyIGJ1ZlsyNTZdOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgQklHTlVNICpi bjsKLSsgICAgRVZQX01EX0NUWCBtY3R4OwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAgaW50IHIg PSAwOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZt Y3R4KTsKLSsgICAga2V5ID0gUlNBX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAgICBp ZiAoIWtleSB8fCAhYm4pCi0rCXJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1Mzcp OwotKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQotKwly ZXR1cm4gMDsKLSsgICAgQk5fZnJlZShibik7Ci0rICAgIGlmIChiYWQpCi0rCSAgICBCTl9hZGRf d29yZChrZXktPm4sIDEpOwotKwotKyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOwotKyAgICBw ay5wa2V5LnJzYSA9IGtleTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVW UF9zaGExKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgm bWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKLSsJZ290byBlbmQ7 Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKLSsJZ290 byBlbmQ7Ci0rCi0rICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCks IE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBp bnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAg ciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0r ICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChrZXkpCi0rICAJICAgIFJT QV9mcmVlKGtleSk7Ci0rICAgIGlmIChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1cm4g MTsKLSsgICAgfQotKwotKy8qIFNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZh bHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0r Ki8KLStzdGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBj aGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQotKyAgICAgICAgeyAweDExLCAweGYxLCAw eDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAweDM4 LCAweDBjLCAweDhiLCAweDFlLCAweDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07Ci0rICAg IHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNo YXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsg ICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEx KCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1k KSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBT SEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRv IGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJ UFNfc2hhMjU2X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1 Nl9ESUdFU1RfTEVOR1RIXSA9Ci0rCXsweGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEs IDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4 OTEsCi0rCSAweDYsIDB4ZWMsIDB4OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4 YWYsIDB4NjQsIDB4MjIsIDB4ZTYsIDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9OwotKyAgICB1bnNp Z25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1k W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAg IGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2 KCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1k KSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBT SEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRv IGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJ UFNfc2hhNTEyX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUx Ml9ESUdFU1RfTEVOR1RIXSA9Ci0rCXsweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0 LCAweDc4LCAweDg4LCAweGRmLCAweDg4LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4LCAw eGNhLAotKwkgMHgxNiwgMHgxZiwgMHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwg MHgwMywgMHg5OSwgMHhiMiwgMHhkMCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKLSsJIDB4NDUs IDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4 N2YsIDB4MjQsIDB4YjEsIDB4ZDksIDB4NDAsIDB4MjIsCi0rCSAweDQ5LCAweDU0LCAweDEwLCAw eGMyLCAweDIyLCAweDlkLCAweDI3LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAweDJk LCAweDQyLCAweDFkLCAweGEzfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJp c2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07Ci0r Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVv ZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAg IGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9m IGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVk IGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKLSsg ICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNp Z25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFs W0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5 NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwg MHg3MCwKLSsJIDB4YjIsIDB4ZmIsIDB4ZWMsIDB4YzZ9OwotKwotKyAgICB1bnNpZ25lZCBjaGFy IG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNpemVv ZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlm IChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0 dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkKLSsgICAg ewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25l ZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VW UF9NQVhfTURfU0laRV0gPQotKwl7MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwg MHg4NywgMHgwZiwgMHg3NSwgMHhmZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgz NSwKLSsJIDB4ZTUsIDB4NjIsIDB4NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4 MzQsIDB4MzMsIDB4M2EsIDB4MTl9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFY X01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSktMSxp dixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChv dXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsg ICAgfQotKwotKy8qIEhNQUMtU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2 YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAot KyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVu c2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZb XSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9T SVpFXSA9Ci0rCXsweGU5LCAweDE3LCAweGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRh LCAweGQyLCAweDMwLCAweDM2LCAweDAyLCAweGY1LCAweDcyLCAweDMzLCAweDg3LAotKwkgMHg5 ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwg MHhlZSwgMHg1MSwgMHhmZiwgMHhkYSwgMHgyNCwgMHhmNH07Ci0rCi0rICAgIHVuc2lnbmVkIGNo YXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0r ICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtleSxz aXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAg ICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yg a25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQg Y29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCi0r ICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5z aWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZh bFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4 YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4M2Is IDB4MTAsCi0rCSAweGUyLCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5 LCAweDgxLCAweDJhLCAweDFiLCAweGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAotKwkgMHhm MywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwg MHhjMywgMHhmMywgMHhiOCwgMHg5YiwgMHg4OCwgMHgxY307Ci0rCi0rICAgIHVuc2lnbmVkIGNo YXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0r ICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtleSxz aXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAg ICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yg a25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQg Y29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpCi0r ICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5z aWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZh bFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4 YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4YTks IDB4ZTYsCi0rCSAweGY3LCAweGQxLCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4 LCAweGE2LCAweDNiLCAweGMxLCAweGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAotKwkgMHhk NywgMHg3OSwgMHgwYSwgMHhhNSwgMHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwg MHg1MiwgMHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5YywKLSsJIDB4NDcsIDB4ODYsIDB4NWQs IDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4 YTYsIDB4ZDksIDB4MmEsIDB4NTN9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFY X01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSktMSxp dixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChv dXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsg ICAgfQotKwotKwotKy8qIERIOiBnZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycwotKyovCi0rc3Rh dGljIGludCBkaF90ZXN0KCkKLSsgICAgewotKyAgICBESCAqZGg7Ci0rICAgIEVSUl9jbGVhcl9l cnJvcigpOwotKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7Ci0rICAgIGlmICghZGgpCi0rCXJldHVy biAwOwotKyAgICBpZiAoIURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5V TEwpKQotKwlyZXR1cm4gMDsKLSsgICAgRklQU19kaF9mcmVlKGRoKTsKLSsgICAgcmV0dXJuIDE7 Ci0rICAgIH0KLSsKLSsvKiBaZXJvaXplCi0rKi8KLStzdGF0aWMgaW50IFplcm9pemUoKQotKyAg ICB7Ci0rICAgIFJTQSAqa2V5OwotKyAgICBCSUdOVU0gKmJuOwotKyAgICB1bnNpZ25lZCBjaGFy IHVzZXJrZXlbMTZdID0gCi0rCXsgMHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwg MHhkMywgMHhhZiwgMHg2ZSwgMHg0NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2 OCB9OwotKyAgICBpbnQgaSwgbjsKLSsKLSsgICAga2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rICAg IGJuID0gQk5fbmV3KCk7Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAg IEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChr ZXksIDEwMjQsYm4sTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAg Ci0rICAgIG4gPSBCTl9udW1fYnl0ZXMoa2V5LT5kKTsKLSsgICAgcHJpbnRmKCIgR2VuZXJhdGVk ICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5XG4iLCBuKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBi ZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQp OwotKyAgICBCTl9yYW5kKGtleS0+ZCxuKjgsLTEsMCk7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkg YWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQp OwotKwotKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzog XG5cdFx0Iik7Ci0rICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmlu dGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsgICAgUkFO RF9ieXRlcyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7Ci0rICAgIHByaW50ZigiXHRjaGFyIGJ1 ZmZlciBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IoaSA9IDA7IGkg PCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0rICAg ICAgICBwcmludGYoIlxuIik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rc3RhdGlj IGludCBFcnJvcjsKLStjb25zdCBjaGFyICogRmFpbChjb25zdCBjaGFyICptc2cpCi0rICAgIHsK LSsgICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgIEVycm9yKys7Ci0rICAgIHJldHVybiBtc2c7 IAotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsK LSsgICAgaW50IGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdl biA9IDA7Ci0rICAgIGludCBiYWRfcnNhID0gMCwgYmFkX2RzYSA9IDA7Ci0rICAgIGludCBkb19y bmdfc3RpY2sgPSAwOwotKyAgICBpbnQgbm9fZXhpdCA9IDA7Ci0rCi0rICAgIHByaW50ZigiXHRG SVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlvblxuXG4iKTsKLSsKLSsgICAgLyogTG9hZCBlbnRyb3B5 IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYgYW55ICovCi0rICAgIFJBTkRfbG9hZF9maWxlKCIucm5k IiwgMTAyNCk7Ci0rCi0rICAgIGlmIChhcmd2WzFdKSB7Ci0rICAgICAgICAvKiBDb3JydXB0ZWQg S0FUIHRlc3RzICovCi0rICAgICAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKLSsg ICAgICAgICAgICBGSVBTX2NvcnJ1cHRfYWVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJBRVMg ZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAg ICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRlcyIpKSB7Ci0rICAgICAgICAgICAgRklQ U19jb3JydXB0X2RlcygpOwotKyAgICAgICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlv bi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0 X2RzYSgpOwotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWdu YXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBl bHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29y cnVwdF9yc2EoKTsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5IikpIHsKLSsgICAgICAgICAgICBw cmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJhZF9yc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9 IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7 Ci0rCSAgICBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0r ICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxp ZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoYXJndlsxXSwgImRzYWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Eg a2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtl eS4uLlxuIik7Ci0rCSAgICBiYWRfZHNhID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAg ICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgewotKwkgICAgZG9f Y29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAg IHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRo IGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFy Z3ZbMV0sICJzaGExIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOwotKyAg ICAgICAgICAgIHByaW50ZigiU0hBLTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwot Kwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZyIpKSB7Ci0rCSAgICBGSVBTX2NvcnJ1 cHRfcm5nKCk7Ci0rCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgewot KwkgICAgZG9fcm5nX3N0aWNrID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKwkgICAgcHJpbnRm KCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7Ci0rICAgICAgICB9 IGVsc2UgewotKyAgICAgICAgICAgIHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJn dlsxXSk7Ci0rICAgICAgICAgICAgZXhpdCgxKTsKLSsgICAgICAgIH0KLSsJaWYgKCFub19leGl0 KSB7Ci0rICAgICAgICAJaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7Ci0rIAkJICAgIGRvX3ByaW50 X2Vycm9ycygpOwotKyAgICAgICAgCSAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWls ZWRcbiIpOwotKwkJICAgIGV4aXQoMSk7Ci0rCQl9Ci0rICAgICAgICAJcHJpbnRmKCJQb3dlci11 cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7Ci0rICAgICAgICAJZXhpdCgwKTsKLSsJfQotKyAg ICB9Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAg ICAqLwotKyAgICBwcmludGYoIjEuIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlv biB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1I KS4uLiIpOwotKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAotKyAgICAqLwot KyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93ZXIt dXAgc2VsZiB0ZXN0Li4uIik7Ci0rICAgIGlmICghRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlk b19wcmludF9lcnJvcnMoKTsKLSsgICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7Ci0r CWV4aXQoMSk7Ci0rCX0KLSsgICAgcHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsKLSsgICAgaWYgKGRv X2NvcnJ1cHRfZHNhX2tleWdlbikKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdl bigpOwotKyAgICBpZiAoZG9fY29ycnVwdF9yc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNf Y29ycnVwdF9yc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19ybmdfc3RpY2spCi0rICAgICAgICAg ICAgRklQU19ybmdfc3RpY2soKTsKLSsKLSsgICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlv bgotKyAgICAqLwotKyAgICBwcmludGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4i KTsKLSsgICAgcHJpbnRmKCBGSVBTX2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5 cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19y c2FfdGVzdChiYWRfcnNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 Ci0rCi0rICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAg IHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJp bnRmKCBGSVBTX2RlczNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxu IikgKTsKLSsKLSsgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRh dGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2ln bmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9k c2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyog U0hBLTEgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7Ci0r ICAgIHByaW50ZiggRklQU19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS0yNTYgaGFzaAotKyAgICAqLwotKyAgICBwcmlu dGYoIjdiLiBTSEEtMjU2IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBT SEEtNTEyIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7 Ci0rICAgIHByaW50ZiggRklQU19zaGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFp bCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMSBoYXNoCi0rICAgICovCi0r ICAgIHByaW50ZigiN2QuIEhNQUMtU0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNf aG1hY19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTIyNCBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2Uu IEhNQUMtU0hBLTIyNCBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTIyNF90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAv KiBITUFDLVNIQS0yNTYgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0y NTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8gInN1 Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEt Mzg0IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4i KTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCi0r ICAgICovCi0rICAgIHByaW50ZigiN2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHBy aW50ZiggRklQU19obWFjX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJG QUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVy YXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhp YyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Ci0rICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdv cml0aG0gKEQtSCkuLi4iKTsKLSsgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBh cyBleHBlY3RlZFxuIgotKwkgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOwot KwotKyAgICAvKiBaZXJvaXphdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjkuIFplcm8taXph dGlvbi4uLlxuIik7Ci0rICAgIHByaW50ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBl eHBlY3RlZFxuIgotKwkgICAgOiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0r Ci0rICAgIHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBF cnJvcik7Ci0rICAgIHJldHVybiBFcnJvciA/IDEgOiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHNfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19sb2Ns LmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHNfbG9jbC5oCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCi1AQCAtMCwwICsxLDcyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsK LSsjZW5kaWYKLSsKLSt2b2lkIGZpcHNfd19sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc193X3VubG9j ayh2b2lkKTsKLSt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc19yX3VubG9jayh2 b2lkKTsKLStpbnQgZmlwc19pc19zdGFydGVkKHZvaWQpOwotK3ZvaWQgZmlwc19zZXRfc3RhcnRl ZCh2b2lkKTsKLStpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOwotK2ludCBmaXBzX3Nl dF9vd25pbmdfdGhyZWFkKHZvaWQpOwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lk KTsKLStpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpOwotKwotKyNkZWZpbmUgRklQ U19NQVhfQ0lQSEVSX1RFU1RfU0laRQkxNgotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0r I2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL01ha2Vm aWxlLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9NYWtlZmlsZQotLS0tIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsODEgQEAKLSsjCi0rIyBP cGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0rIwotKwotK0RJUj0JZmlwcwotK1RPUD0JLi4v Li4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxBRz0tZwotK01BS0VGSUxFPQlNYWtlZmlsZQot K0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLSsKLStHRU5FUkFM PU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3JhbmR0ZXN0LmMKLStBUFBT PQotKwotK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKLStMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3Qu YyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxm dGVzdC5jIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBzX3NoYTFfc2VsZnRlc3QuYyBm aXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAotKyAgICBmaXBzX3JzYV94 OTMxZy5jCi0rCi0rTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3Qu byBmaXBzX2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZpcHNf cnNhX3NlbGZ0ZXN0Lm8gZmlwc19zaGExX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0 ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKLSsgICAgZmlwc19yc2FfeDkzMWcubwotKwotK1NSQz0gJChM SUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9zaGExLmMKLSsKLStFWEhFQURFUj0gZmlwcy5oIGZpcHNf cmFuZC5oCi0rSEVBREVSPQkkKEVYSEVBREVSKQotKwotK0FMTD0gICAgJChHRU5FUkFMKSAkKFNS QykgJChIRUFERVIpCi0rCi0rdG9wOgotKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8g U0RJUlM9JChESVIpIHN1Yl9hbGwpCi0rCi0rYWxsOglsaWIKLSsKLStsaWI6CSQoTElCT0JKKQot KwkkKEFSKSAkKExJQikgJChMSUJPQkopCi0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZl ciBtaW5kLgotKwlAdG91Y2ggbGliCi0rCi0rZmlsZXM6Ci0rCSQoUEVSTCkgJChUT1ApL3V0aWwv ZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0rCi0rbGlua3M6Ci0rCUAkKFBFUkwp ICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikK LSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotKwlA JChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0rCi0raW5z dGFsbDoKLSsJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBN YWtlZmlsZS4uLgotKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRl cmxpc3QgOyBcCi0rCWRvICBcCi0rCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExU T1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLSsJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgp JChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLSsJZG9uZTsKLSsKLSt0YWdz OgotKwljdGFncyAkKFNSQykKLSsKLSt0ZXN0czoKLSsKLStsaW50OgotKwlsaW50IC1ETElOVCAk KElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLSsKLStkZXBlbmQ6Ci0rCUBbIC1uICIkKE1BS0VERVBF TkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotKwkkKE1BS0VERVBF TkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJT UkMpCi0rCi0rZGNsZWFuOgotKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRI SVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0r CW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotKwotK2NsZWFuOgotKwlybSAtZiAqLm8g Ki5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotKwotKyMg RE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLSsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vaG1hYy9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9obWFjL2ht YWMuYy5maXBzCTIwMTAtMDEtMjYgMTU6MzM6NTIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vaG1hYy9obWFjLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKLUBAIC03Nyw2ICs3NywxMyBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgs IGNvbnN0IHZvCi0gCi0gCWlmIChrZXkgIT0gTlVMTCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBT KQotKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCi0rCQkgfHwgIShjdHgtPmlfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9G SVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVykpKQotKwkJCWdvdG8gZXJyOwotKyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJ CWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOwotIAkJT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNp emVvZihjdHgtPmtleSkpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vTWFrZWZpbGUu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL01ha2VmaWxlLmZpcHMJMjAwOS0wNC0wNiAxNjozMTozNS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wL2NyeXB0by9NYWtlZmlsZQkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAotQEAgLTM0LDE0ICszNCwxNCBAQCBHRU5FUkFMPU1ha2VmaWxlIFJFQURNRSBj cnlwdG8tbGliLmNvbSBpCi0gCi0gTElCPSAkKFRPUCkvbGliY3J5cHRvLmEKLSBTSEFSRURfTElC PSBsaWJjcnlwdG8kKFNITElCX0VYVCkKLS1MSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMgbWVtX2Ns ci5jIG1lbV9kYmcuYyBjdmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGljLmMgdWlk LmMgb190aW1lLmMgb19zdHIuYyBvX2Rpci5jCi0tTElCT0JKPSBjcnlwdGxpYi5vIG1lbS5vIG1l bV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJjZGljLm8gdWlkLm8gb190 aW1lLm8gb19zdHIubyBvX2Rpci5vICQoQ1BVSURfT0JKKQotK0xJQlNSQz0JY3J5cHRsaWIuYyBt ZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5jIGNwdF9lcnIuYyBl YmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMgb19pbml0LmMgZmlwc19lcnIu YwotK0xJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8gY3ZlcnNpb24ubyBleF9kYXRh Lm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGltZS5vIG9fc3RyLm8gb19kaXIubyBvX2lu aXQubyBmaXBzX2Vyci5vICQoQ1BVSURfT0JKKQotIAotIFNSQz0gJChMSUJTUkMpCi0gCi0gRVhI RUFERVI9IGNyeXB0by5oIG9wZW5zc2x2Lmggb3BlbnNzbGNvbmYuaCBlYmNkaWMuaCBzeW1oYWNr cy5oIFwKLSAJb3NzbF90eXAuaAotLUhFQURFUj0JY3J5cHRsaWIuaCBidWlsZGluZi5oIG1kMzJf Y29tbW9uLmggb190aW1lLmggb19zdHIuaCBvX2Rpci5oICQoRVhIRUFERVIpCi0rSEVBREVSPQlj cnlwdGxpYi5oIGJ1aWxkaW5mLmggZmlwc19sb2NsLmggbWQzMl9jb21tb24uaCBvX3RpbWUuaCBv X3N0ci5oIG9fZGlyLmggJChFWEhFQURFUikKLSAKLSBBTEw9ICAgICQoR0VORVJBTCkgJChTUkMp ICQoSEVBREVSKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyZGdz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCi0tLS0gb3BlbnNz bC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAwNC0wNy0yNSAyMToxMDo0MS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMJ MjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MSw2ICs2MSwxMSBAQAot ICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9tZGMyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSAj dW5kZWYgYzJsCi0gI2RlZmluZSBjMmwoYyxsKQkobCA9KChERVNfTE9ORykoKigoYykrKykpKSAg ICAsIFwKLUBAIC03NSw3ICs4MCw3IEBACi0gCQkJKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgo bCk+PjI0TCkmMHhmZikpCi0gCi0gc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJfQ1RYICpjLCBj b25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7Ci0taW50IE1EQzJfSW5pdChNREMy X0NUWCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoTURDMikKLSAJewotIAljLT5udW09MDsK LSAJYy0+cGFkX3R5cGU9MTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kYzIvbWRj Mi5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyLmgKLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9tZGMyL21kYzIuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyLmgJMjAxMC0wMy0zMCAx MDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC04MCw3ICs4MCw5IEBAIHR5cGVkZWYgc3RydWN0 IG1kYzJfY3R4X3N0Ci0gCWludCBwYWRfdHlwZTsgLyogZWl0aGVyIDEgb3IgMiwgZGVmYXVsdCAx ICovCi0gCX0gTURDMl9DVFg7Ci0gCi0tCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2 YXRlX01EQzJfSW5pdChNREMyX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1EQzJfSW5pdChNREMy X0NUWCAqYyk7Ci0gaW50IE1EQzJfVXBkYXRlKE1EQzJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTURDMl9GaW5hbCh1bnNpZ25lZCBjaGFyICpt ZCwgTURDMl9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQyL21kMl9k Z3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwotLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAwNy0wOC0zMSAxMjoxMjozNS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwky MDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTYyLDYgKzYyLDExIEBACi0g I2luY2x1ZGUgPG9wZW5zc2wvbWQyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotIAotIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05f UFRFWFQ7Ci0gCi1AQCAtMTE2LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZv aWQpCi0gCQlyZXR1cm4oIm1kMihpbnQpIik7Ci0gCX0KLSAKLS1pbnQgTUQyX0luaXQoTUQyX0NU WCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoTUQyKQotIAl7Ci0gCWMtPm51bT0wOwotIAlt ZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC9jcnlwdG8vbWQyL21kMi5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQyL21kMi5oCi0t LS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQyL21kMi5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0 NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyLmgJMjAx MC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC04MSw2ICs4MSw5IEBAIHR5cGVk ZWYgc3RydWN0IE1EMnN0YXRlX3N0Ci0gCX0gTUQyX0NUWDsKLSAKLSBjb25zdCBjaGFyICpNRDJf b3B0aW9ucyh2b2lkKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTUQyX0lu aXQoTUQyX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1EMl9Jbml0KE1EMl9DVFggKmMpOwotIGlu dCBNRDJfVXBkYXRlKE1EMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVf dCBsZW4pOwotIGludCBNRDJfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1EMl9DVFggKmMpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21k NC9tZDRfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMS4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwkyMDEwLTAzLTMwIDEwOjM0OjQx LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0gI2luY2x1ZGUgIm1kNF9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIgTUQ0X3ZlcnNp b25bXT0iTUQ0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtNzAsNyArNzUsNyBAQCBj b25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9WCi0gI2RlZmluZSBJTklUX0RB VEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVu c2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1pbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYykKLStG SVBTX05PTl9GSVBTX01EX0luaXQoTUQ0KQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykp OwotIAljLT5BPUlOSVRfREFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ0 L21kNC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ0L21kNC5oCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vbWQ0L21kNC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDQvbWQ0LmgJMjAxMC0wMy0zMCAxMDoz NDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMDUsNiArMTA1LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg TUQ0c3RhdGVfc3QKLSAJdW5zaWduZWQgaW50IG51bTsKLSAJfSBNRDRfQ1RYOwotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRfQ1RYICpjKTsKLSsjZW5k aWYKLSBpbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYyk7Ci0gaW50IE1ENF9VcGRhdGUoTUQ0X0NUWCAq YywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1ENF9GaW5hbCh1bnNpZ25l ZCBjaGFyICptZCwgTUQ0X0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNS9tZDVfZGdzdC5jCi0t LS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0 OjA3OjExLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNS9tZDVf ZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNTksNiArNTks MTEgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSAibWQ1X2xvY2wuaCIKLSAjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r Ci0gCi0gY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVkVSU0lPTl9QVEVY VDsKLSAKLUBAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBP UEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVM Ci0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAotIAotLWlu dCBNRDVfSW5pdChNRDVfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDUpCi0gCXsK LSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDUvbWQ1LmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9tZDUvbWQ1LmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDUvbWQ1LmguZmlwcwkyMDEw LTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L21kNS9tZDUuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNSw2 ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDVzdGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgbnVt OwotIAl9IE1ENV9DVFg7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX01E NV9Jbml0KE1ENV9DVFggKmMpOwotKyNlbmRpZgotIGludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsK LSBpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVu KTsKLSBpbnQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDVfQ1RYICpjKTsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21lbS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8v bWVtLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZW0uYy5maXBzCTIwMDgtMTEtMTIgMDQ6 NTc6NDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWVtLmMJMjAx MC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMDEsNyArMTAxLDcgQEAgc3Rh dGljIHZvaWQgKCpmcmVlX2xvY2tlZF9mdW5jKSh2b2lkICopIAotIAotIC8qIG1heSBiZSBjaGFu Z2VkIGFzIGxvbmcgYXMgJ2FsbG93X2N1c3RvbWl6ZV9kZWJ1ZycgaXMgc2V0ICovCi0gLyogWFhY IHVzZSBjb3JyZWN0IGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMgKi8KLS0jaWZkZWYgQ1JZUFRPX01E RUJVRwotKyNpZiBkZWZpbmVkKENSWVBUT19NREVCVUcpICYmICFkZWZpbmVkKE9QRU5TU0xfRklQ UykKLSAvKiB1c2UgZGVmYXVsdCBmdW5jdGlvbnMgZnJvbSBtZW1fZGJnLmMgKi8KLSBzdGF0aWMg dm9pZCAoKm1hbGxvY19kZWJ1Z19mdW5jKSh2b2lkICosaW50LGNvbnN0IGNoYXIgKixpbnQsaW50 KQotIAk9IENSWVBUT19kYmdfbWFsbG9jOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v b19pbml0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wt MS4wLjAvY3J5cHRvL29faW5pdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9vX2luaXQuYwkyMDEwLTAzLTMwIDEwOjM0 OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw4MCBAQAotKy8qIG9faW5pdC5jICovCi0r LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxlX29zLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9w ZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSsgKiBDdXJyZW50bHkgb25seSBzZXRz IEZJUFMgY2FsbGJhY2tzCi0rICovCi0rCi0rdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lk KQotKwl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlzdGF0aWMgaW50IGRvbmUgPSAwOwotKwlp ZiAoIWRvbmUpCi0rCQl7Ci0rI2lmZGVmIENSWVBUT19NREVCVUcKLSsJCUNSWVBUT19tYWxsb2Nf ZGVidWdfaW5pdCgpOwotKyNlbmRpZgotKwkJZG9uZSA9IDE7Ci0rCQl9Ci0rI2VuZGlmCi0rCX0K LSsJCQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAwNS0xMi0xNiAxMTozNzoyMy4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIw MTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMSw1ICsxLDIwIEBACi0gLyog Y3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtF REVQRU5ECi0rCi0rLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBl eHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCi0rICogdGhhdCBzaG91bGQgYmUgdmlz aWJsZSB0byBtYWtlZGVwZW5kLgotKyAqCi0rICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3Qg YWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCi0rICog aW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVz IHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCi0rICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKLSsjZGVmaW5lIE9QRU5TU0xfRklQUwotKyNlbmRpZgotKwotKyNlbmRpZgotKwotIC8qIEdl bmVyYXRlIDgwMzg2IGNvZGU/ICovCi0gI3VuZGVmIEkzODZfT05MWQotIAotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3BrY3MxMi9wMTJfY3J0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9wa2NzMTIvcDEy X2NydC5jLmZpcHMJMjAwOS0wMy0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAw MDAwMDAwICswMjAwCi1AQCAtNTksNiArNTksMTAgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAj aW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot IAotIAotIHN0YXRpYyBpbnQgcGtjczEyX2FkZF9iYWcoU1RBQ0tfT0YoUEtDUzEyX1NBRkVCQUcp ICoqcGJhZ3MsIFBLQ1MxMl9TQUZFQkFHICpiYWcpOwotQEAgLTkwLDcgKzk0LDE0IEBAIFBLQ1Mx MiAqUEtDUzEyX2NyZWF0ZShjaGFyICpwYXNzLCBjaGFyICoKLSAKLSAJLyogU2V0IGRlZmF1bHRz ICovCi0gCWlmICghbmlkX2NlcnQpCi0rCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYg KEZJUFNfbW9kZSgpKQotKwkJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1Ry aXBsZURFU19DQkM7Ci0rCQllbHNlCi0rI2VuZGlmCi0gCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0 aFNIQTFBbmQ0MEJpdFJDMl9DQkM7Ci0rCQl9Ci0gCWlmICghbmlkX2tleSkKLSAJCW5pZF9rZXkg PSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKLSAJaWYgKCFpdGVyKQot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yYW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jLmZpcHMJMjAwOS0wMS0wMyAxMDoyNTozMi4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDEwLTAzLTMwIDEwOjM0OjQx LjAwMDAwMDAwMCArMDIwMAotQEAgLTEyNiw2ICsxMjYsMTAgQEAKLSAKLSAjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotICNpZmRl ZiBCTl9ERUJVRwotICMgZGVmaW5lIFBSRURJQ1QKLUBAIC0zNDIsNiArMzQ2LDE0IEBAIHN0YXRp YyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKLSAjZW5kaWYKLSAJaW50IGRvX3N0 aXJfcG9vbCA9IDA7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX21vZGUoKSkK LSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTLEZJUFNfUl9O T05fRklQU19NRVRIT0QpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0g I2lmZGVmIFBSRURJQ1QKLSAJaWYgKHJhbmRfcHJlZGljdGFibGUpCi0gCQl7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9yYW5kL3JhbmRfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL3JhbmRf ZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIyOjI5OjQxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAotQEAgLTcwLDYgKzcwLDEzIEBACi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFU QSBSQU5EX3N0cl9mdW5jdHNbXT0KLSAJewotK3tFUlJfRlVOQyhSQU5EX0ZfRU5HX1JBTkRfR0VU X1JBTkRfTUVUSE9EKSwJIkVOR19SQU5EX0dFVF9SQU5EX01FVEhPRCJ9LAotK3tFUlJfRlVOQyhS QU5EX0ZfRklQU19SQU5EKSwJIkZJUFNfUkFORCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19S QU5EX0JZVEVTKSwJIkZJUFNfUkFORF9CWVRFUyJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19S QU5EX1NFVF9EVCksCSJGSVBTX1JBTkRfU0VUX0RUIn0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBT X1NFVF9EVCksCSJGSVBTX1NFVF9EVCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfUFJO R19TRUVEKSwJIkZJUFNfU0VUX1BSTkdfU0VFRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19T RVRfVEVTVF9NT0RFKSwJIkZJUFNfU0VUX1RFU1RfTU9ERSJ9LAotIHtFUlJfRlVOQyhSQU5EX0Zf UkFORF9HRVRfUkFORF9NRVRIT0QpLAkiUkFORF9nZXRfcmFuZF9tZXRob2QifSwKLSB7RVJSX0ZV TkMoUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCi0gezAs TlVMTH0KLUBAIC03Nyw3ICs4NCwxNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3Ry X2Z1bmN0c1tdCi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9yZWFzb25zW109 Ci0gCXsKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZp cHMgbWV0aG9kIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX05PVF9JTl9URVNUX01PREUpICAgICAs Im5vdCBpbiB0ZXN0IG1vZGUifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9fS0VZX1NFVCkgICAg ICAgICAgICwibm8ga2V5IHNldCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0FTS0lOR19G T1JfVE9PX01VQ0gpLCJwcm5nIGFza2luZyBmb3IgdG9vIG11Y2gifSwKLSt7RVJSX1JFQVNPTihS QU5EX1JfUFJOR19FUlJPUikgICAgICAgICAgICwicHJuZyBlcnJvciJ9LAotK3tFUlJfUkVBU09O KFJBTkRfUl9QUk5HX0tFWUVEKSAgICAgICAgICAgLCJwcm5nIGtleWVkIn0sCi0re0VSUl9SRUFT T04oUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQpICAgICAsInBybmcgbm90IHJla2V5ZWQifSwKLSt7 RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQpICAgICwicHJuZyBub3QgcmVzZWVk ZWQifSwKLSB7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfU0VFREVEKSAgICAgICwiUFJORyBu b3Qgc2VlZGVkIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRD SF9LRVkpLCJwcm5nIHNlZWQgbXVzdCBub3QgbWF0Y2gga2V5In0sCi0re0VSUl9SRUFTT04oUkFO RF9SX1BSTkdfU1RVQ0spICAgICAgICAgICAsInBybmcgc3R1Y2sifSwKLSB7MCxOVUxMfQotIAl9 OwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9yYW5kL3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jh bmQvcmFuZC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL3JhbmQuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAotQEAgLTEyOCwxMSArMTI4LDI4IEBAIHZvaWQgRVJSX2xvYWRfUkFORF9zdHJp bmdzKHZvaWQpOwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMuICovCi0g Ci0gLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JB TkRfTUVUSE9ECQkJIDEwOAotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAzCi0rI2Rl ZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRfRl9GSVBT X1JBTkRfU0VUX0RUCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJCQkgMTA0 Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNwotKyNkZWZpbmUgUkFO RF9GX0ZJUFNfU0VUX1RFU1RfTU9ERQkJCSAxMDUKLSAjZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9S QU5EX01FVEhPRAkJCSAxMDEKLSAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAx MDAKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNfTUVU SE9ECQkJCSAxMDUKLSsjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAxMDYKLSsj ZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUCQkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0FT S0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCi0rI2RlZmluZSBSQU5EX1JfUFJOR19FUlJPUgkJCQkg MTA4Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19LRVlFRAkJCQkgMTA5Ci0rI2RlZmluZSBSQU5EX1Jf UFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCi0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVE RUQJCQkgMTAzCi0gI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKLSsjZGVm aW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0rI2RlZmluZSBS QU5EX1JfUFJOR19TVFVDSwkJCQkgMTA0Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIH0KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jh bmQvcmFuZF9saWIuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDQuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCTIwMTAtMDMtMzAgMTA6MzQ6 NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNjAsNiArNjAsMTIgQEAKLSAjaW5jbHVkZSA8dGltZS5o PgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsj aW5jbHVkZSAicmFuZF9sY2wuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNlbmRpZgot KwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUu aD4KLSAjZW5kaWYKLUBAIC0xMDIsOCArMTA4LDE5IEBAIGNvbnN0IFJBTkRfTUVUSE9EICpSQU5E X2dldF9yYW5kX21ldGhvZCgKLSAJCQlmdW5jdF9yZWYgPSBlOwotIAkJZWxzZQotICNlbmRpZgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlkZWZhdWx0X1JBTkRfbWV0aCA9IEZJUFNfbW9kZSgp ID8gRklQU19yYW5kX21ldGhvZCgpIDogUkFORF9TU0xlYXkoKTsKLSsJCX0KLSsJaWYgKEZJUFNf bW9kZSgpCi0rCQkmJiBkZWZhdWx0X1JBTkRfbWV0aCAhPSBGSVBTX3JhbmRfY2hlY2soKSkKLSsJ ICAgIHsKLSsJICAgIFJBTkRlcnIoUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ELFJBTkRfUl9O T05fRklQU19NRVRIT0QpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2Vsc2UKLSAJCQlk ZWZhdWx0X1JBTkRfbWV0aCA9IFJBTkRfU1NMZWF5KCk7Ci0gCQl9Ci0rI2VuZGlmCi0gCXJldHVy biBkZWZhdWx0X1JBTkRfbWV0aDsKLSAJfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlw dG8vcmMyL3JjMi5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmMyL3JjMi5oCi0tLS0gb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcmMyL3JjMi5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzIvcmMyLmgJMjAxMC0wMy0z MCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03OSw3ICs3OSw5IEBAIHR5cGVkZWYgc3Ry dWN0IHJjMl9rZXlfc3QKLSAJUkMyX0lOVCBkYXRhWzY0XTsKLSAJfSBSQzJfS0VZOwotIAotLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZ ICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOwotKyNl bmRpZgotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKLSB2b2lkIFJDMl9lY2JfZW5jcnlwdChjb25zdCB1 bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsUkMyX0tFWSAqa2V5LAotIAkJICAg ICBpbnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjMi9yYzJfc2tleS5j LmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmMyL3JjMl9za2V5LmMKLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBzCTIwMDctMDktMTggMjM6MTA6MzIuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmMyL3JjMl9za2V5LmMJMjAxMC0w My0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01Nyw2ICs1NywxMSBAQAotICAqLwot IAotICNpbmNsdWRlIDxvcGVuc3NsL3JjMi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rCi0gI2luY2x1ZGUgInJjMl9sb2NsLmgiCi0gCi0gc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2V5X3RhYmxlWzI1Nl09ewotQEAgLTk0LDggKzk5LDIwIEBAIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTYKLSAgKiBCU0FGRSB1c2VzIHRoZSAncmV0YXJkZWQn IHZlcnNpb24uICBXaGF0IEkgcHJldmlvdXNseSBzaGlwcGVkIGlzCi0gICogdGhlIHNhbWUgYXMg c3BlY2lmeWluZyAxMDI0IGZvciB0aGUgJ2JpdHMnIHBhcmFtZXRlci4gIEJzYWZlIHVzZXMKLSAg KiBhIHZlcnNpb24gd2hlcmUgdGhlIGJpdHMgcGFyYW1ldGVyIGlzIHRoZSBzYW1lIGFzIGxlbio4 ICovCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYml0cykKLSAJewot KwlpZiAoRklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9SVChSQzIpCi0rCXByaXZhdGVfUkMy X3NldF9rZXkoa2V5LCBsZW4sIGRhdGEsIGJpdHMpOwotKwl9Ci0rdm9pZCBwcml2YXRlX1JDMl9z ZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwK LSsJCQkJCQkJCWludCBiaXRzKQotKyNlbHNlCi0rdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICpr ZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQotKyNlbmRp ZgotKwl7Ci0gCWludCBpLGo7Ci0gCXVuc2lnbmVkIGNoYXIgKms7Ci0gCVJDMl9JTlQgKmtpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbAotLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMJMjAwOS0wMi0xMiAxNTo0ODo0OS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkw eC5wbAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTIwMiw0ICsyMDIs NiBAQCBSQzRfb3B0aW9uczoKLSAuc3RyaW5nCSJyYzQoOHgsY2hhcikiCi0gX19fCi0gCi0rJGNv ZGUgPX4gcy9SQzRfc2V0X2tleS9wcml2YXRlX1JDNF9zZXRfa2V5L2cgaWYgKCRFTlZ7RklQU30g bmUgIiIpOwotKwotIHByaW50ICRjb2RlOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v cmM0L2FzbS9yYzQteDg2XzY0LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9y YzQteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0 LnBsLmZpcHMJMjAwOS0wNC0yNyAyMTozMTowNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwJMjAxMC0wMy0zMCAxMDozNDo0MS4w MDAwMDAwMDAgKzAyMDAKLUBAIC00OTksNiArNDk5LDggQEAgX19fCi0gCi0gJGNvZGUgPX4gcy8j KFtid2RdKS8kMS9nbTsKLSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3ByaXZhdGVfUkM0X3Nl dF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNvZGU7Ci0gCi0gY2xv c2UgU1RET1VUOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2 LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCi0tLS0gb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsLmZpcHMJMjAwNy0xMi0wMiAyMjoz MjowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3Jj NC01ODYucGwJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNjYsOCAr MTY2LDEyIEBAICRpZHg9ImVkeCI7Ci0gCi0gJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJj YXBfUCIpOwotIAotKyRzZXRrZXlmdW5jID0gIlJDNF9zZXRfa2V5IjsKLSskc2V0a2V5ZnVuYyA9 ICJwcml2YXRlX1JDNF9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0rCi0gIyB2 b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSxpbnQgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEpOwotLSZmdW5jdGlvbl9iZWdpbigiUkM0X3NldF9rZXkiKTsKLSsmZnVuY3Rpb25fYmVn aW4oJHNldGtleWZ1bmMpOwotIAkmbW92CSgkb3V0LCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGtleQot IAkmbW92CSgkaWRpLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIGxlbgotIAkmbW92CSgkaW5wLCZ3cGFy YW0oMikpOwkJIyBsb2FkIGRhdGEKLUBAIC0yNDUsNyArMjQ5LDcgQEAgJGlkeD0iZWR4IjsKLSAJ JnhvcgkoImVheCIsImVheCIpOwotIAkmbW92CSgmRFdQKC04LCRvdXQpLCJlYXgiKTsJCSMga2V5 LT54PTA7Ci0gCSZtb3YJKCZEV1AoLTQsJG91dCksImVheCIpOwkJIyBrZXktPnk9MDsKLS0mZnVu Y3Rpb25fZW5kKCJSQzRfc2V0X2tleSIpOwotKyZmdW5jdGlvbl9lbmQoJHNldGtleWZ1bmMpOwot IAotICMgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7Ci0gJmZ1bmN0aW9uX2JlZ2luX0Io IlJDNF9vcHRpb25zIik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvTWFrZWZp bGUuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9yYzQvTWFrZWZpbGUuZmlwcwkyMDA5LTAyLTExIDExOjAxOjM2LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9NYWtlZmlsZQkyMDEwLTAzLTMw IDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTIxLDggKzIxLDggQEAgVEVTVD1yYzR0ZXN0 LmMKLSBBUFBTPQotIAotIExJQj0kKFRPUCkvbGliY3J5cHRvLmEKLS1MSUJTUkM9cmM0X3NrZXku YyByYzRfZW5jLmMKLS1MSUJPQko9JChSQzRfRU5DKQotK0xJQlNSQz1yYzRfc2tleS5jIHJjNF9l bmMuYyByYzRfZmJsay5jCi0rTElCT0JKPSQoUkM0X0VOQykgcmM0X2ZibGsubwotIAotIFNSQz0g JChMSUJTUkMpCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0X2ZibGsu Yy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzRfZmJsay5jCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vcmM0L3JjNF9mYmxrLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzRfZmJsay5jCTIwMTAt MDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDc1IEBACi0rLyogY3J5 cHRvL3JjNC9yYzRfZmJsay5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8K LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsKLSsjaW5jbHVkZSA8b3Bl bnNzbC9yYzQuaD4KLSsjaW5jbHVkZSAicmM0X2xvY2wuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rLyogRklQUyBt b2RlIGJsb2NraW5nIGZvciBSQzQgaGFzIHRvIGJlIGRvbmUgc2VwYXJhdGVseSBzaW5jZSBSQzRf c2V0X2tleQotKyAqIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbiBhc3NlbWJseSBsYW5ndWFnZSBm aWxlLgotKyAqLwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt2b2lkIFJDNF9zZXRfa2V5KFJD NF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsJewotKwlp ZiAoRklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9SVChSQzQpCi0rCXByaXZhdGVfUkM0X3Nl dF9rZXkoa2V5LCBsZW4sIGRhdGEpOwotKwl9Ci0rI2VuZGlmCi0rCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yYzQvcmM0LmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0 LmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0LmguZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzQu aAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTc4LDYgKzc4LDkgQEAg dHlwZWRlZiBzdHJ1Y3QgcmM0X2tleV9zdAotIAotICAKLSBjb25zdCBjaGFyICpSQzRfb3B0aW9u cyh2b2lkKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5 KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0rI2Vu ZGlmCi0gdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmRhdGEpOwotIHZvaWQgUkM0KFJDNF9LRVkgKmtleSwgc2l6ZV90IGxlbiwgY29u c3QgdW5zaWduZWQgY2hhciAqaW5kYXRhLAotIAkJdW5zaWduZWQgY2hhciAqb3V0ZGF0YSk7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0X3NrZXkuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3JjNC9yYzRfc2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0 L3JjNF9za2V5LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjEzLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzRfc2tleS5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEu MDAwMDAwMDAwICswMjAwCi1AQCAtNTksNiArNTksMTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9y YzQuaD4KLSAjaW5jbHVkZSAicmM0X2xvY2wuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns di5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gY29uc3QgY2hhciBS QzRfdmVyc2lvbltdPSJSQzQiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC04NSw3ICs5 MCwxMSBAQCBjb25zdCBjaGFyICpSQzRfb3B0aW9ucyh2b2lkKQotICAqIERhdGU6IFdlZCwgMTQg U2VwIDE5OTQgMDY6MzU6MzEgR01UCi0gICovCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3Zv aWQgcHJpdmF0ZV9SQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmRhdGEpCi0rI2Vsc2UKLSB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwg aW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsjZW5kaWYKLSAJewotICAgICAg ICAgcmVnaXN0ZXIgUkM0X0lOVCB0bXA7Ci0gICAgICAgICByZWdpc3RlciBpbnQgaWQxLGlkMjsK LUBAIC0xMjYsNyArMTM1LDEyIEBAIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQg bGVuLCAKLSAJCSAqIG1vZHVsZS4uLgotIAkJICoJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgot IAkJICovCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJdW5zaWduZWQgbG9uZyAqaWEzMmNhcF9w dHIgPSBPUEVOU1NMX2lhMzJjYXBfbG9jKCk7Ci0rCQlpZiAoaWEzMmNhcF9wdHIgJiYgKCppYTMy Y2FwX3B0ciAmICgxPDwyOCkpKSB7Ci0rI2Vsc2UKLSAJCWlmIChPUEVOU1NMX2lhMzJjYXBfUCAm ICgxPDwyOCkpIHsKLSsjZW5kaWYKLSAJCQl1bnNpZ25lZCBjaGFyICpjcD0odW5zaWduZWQgY2hh ciAqKWQ7Ci0gCi0gCQkJZm9yIChpPTA7aTwyNTY7aSsrKSBjcFtpXT1pOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcmlwZW1kL3JpcGVtZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vcmlwZW1kL3JpcGVtZC5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmlwZW1kL3JpcGVt ZC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yaXBlbWQvcmlwZW1kLmgJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAw MDAgKzAyMDAKLUBAIC05MSw2ICs5MSw5IEBAIHR5cGVkZWYgc3RydWN0IFJJUEVNRDE2MHN0YXRl X3N0Ci0gCXVuc2lnbmVkIGludCAgIG51bTsKLSAJfSBSSVBFTUQxNjBfQ1RYOwotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9SSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RY ICpjKTsKLSsjZW5kaWYKLSBpbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7Ci0g aW50IFJJUEVNRDE2MF9VcGRhdGUoUklQRU1EMTYwX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGxlbik7Ci0gaW50IFJJUEVNRDE2MF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgUklQ RU1EMTYwX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQvcm1k X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0 OjA3OjEzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9y bWRfZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNTksNiAr NTksMTEgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSAicm1kX2xvY2wuaCIKLSAj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0rCi0gCi0gY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIiBPUEVOU1NM X1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtNjksNyArNzQsNyBAQCBjb25zdCBjaGFyIFJNRDE2MF92 ZXJzaW9uW109IlJJUEUtTUQxNjAiCi0gICAgICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQx NjBfQ1RYICpjLCB1bnNpZ25lZCBsb25nICpwLHNpemVfdCBudW0pOwotICMgIGVuZGlmCi0gCi0t aW50IFJJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9J bml0KFJJUEVNRDE2MCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1S SVBFTUQxNjBfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZWF5LmMu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2VheS5jCi0tLS0gb3BlbnNzbC0xLjAu MC9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMDgtMDktMTQgMTU6NTE6NDQuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9lYXkuYwkyMDEwLTAzLTMw IDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTExNCw2ICsxMTQsMTAgQEAKLSAjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotICNpZm5kZWYg UlNBX05VTEwKLSAKLUBAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3Br Y3MxX2VheV9tZXRoPXsKLSAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFggcHJvYmFibHkgd2Ugc2hv dWxkIG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCi0gCVJTQV9lYXlfaW5pdCwKLSAJ UlNBX2VheV9maW5pc2gsCi0tCTAsIC8qIGZsYWdzICovCi0rCVJTQV9GTEFHX0ZJUFNfTUVUSE9E LCAvKiBmbGFncyAqLwotIAlOVUxMLAotIAkwLCAvKiByc2Ffc2lnbiAqLwotIAkwLCAvKiByc2Ff dmVyaWZ5ICovCi1AQCAtMTUwLDYgKzE1NCwxNiBAQCBjb25zdCBSU0FfTUVUSE9EICpSU0FfUEtD UzFfU1NMZWF5KHZvaWQpCi0gCXJldHVybigmcnNhX3BrY3MxX2VheV9tZXRoKTsKLSAJfQotIAot Ky8qIFVzYWdlIGV4YW1wbGU7Ci0rICogICAgTU9OVF9IRUxQRVIocnNhLCBibl9jdHgsIHAsIHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVycik7Ci0rICovCi0rI2Rl ZmluZSBNT05UX0hFTFBFUihyc2EsIGN0eCwgbSwgcHJlX2NvbmQsIGVycl9pbnN0cikgXAotKwlp ZigocHJlX2NvbmQpICYmICgocnNhKS0+X21ldGhvZF9tb2RfIyNtID09IE5VTEwpICYmIFwKLSsJ CQkhQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmKChyc2EpLT5fbWV0aG9kX21vZF8jI20pLCBcCi0r CQkJCUNSWVBUT19MT0NLX1JTQSwgXAotKwkJCQkocnNhKS0+bSwgKGN0eCkpKSBcCi0rCQllcnJf aW5zdHIKLSsKLSBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sCi0gCSAgICAgdW5zaWduZWQgY2hhciAqdG8sIFJTQSAq cnNhLCBpbnQgcGFkZGluZykKLSAJewotQEAgLTE1OCw2ICsxNzIsMjMgQEAgc3RhdGljIGludCBS U0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsK LSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNf bW9kZSgpKQotKwkJewotKwkJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewotKwkJ CUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMo cnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJ UlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKEJO X251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQotIAkJewot IAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9P X0xBUkdFKTsKLUBAIC0yMjMsOSArMjU0LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19l bmNyeXB0KGludCBmbAotIAkJZ290byBlcnI7Ci0gCQl9Ci0gCi0tCWlmIChyc2EtPmZsYWdzICYg UlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZy c2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJCWdv dG8gZXJyOwotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFH X0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4 cChyZXQsZixyc2EtPmUscnNhLT5uLGN0eCwKLSAJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8g ZXJyOwotQEAgLTM1NSw2ICszODQsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5j cnlwdChpbnQgZgotIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOwotIAlCTl9CTElORElORyAqYmxp bmRpbmcgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgp KQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2Vy cihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5u KSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNBZXJy KFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJO X0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlm ICAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNDMyLDkgKzQ3OCw3IEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKLSAJCWVsc2UKLSAJCQlkPSByc2EtPmQ7Ci0gCi0t CQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKLS0JCQlpZighQk5fTU9O VF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJz YS0+biwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0rCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwg cnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAkJaWYg KCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAotIAkJCQlyc2EtPl9t ZXRob2RfbW9kX24pKSBnb3RvIGVycjsKLUBAIC00ODgsNiArNTMyLDIzIEBAIHN0YXRpYyBpbnQg UlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAJaW50IGxvY2FsX2JsaW5kaW5nID0gMDsK LSAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkp Ci0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYg KEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMp Ci0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRp ZgotKwotIAlpZigoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5f Q1RYX3N0YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC01NTUsOSArNjE2 LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgotIAkJZWxzZQot IAkJCWQgPSByc2EtPmQ7Ci0gCi0tCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BV QkxJQykKLS0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2Rf biwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJCWdvdG8gZXJyOwotKwkJTU9O VF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMs IGdvdG8gZXJyKTsKLSAJCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLGQscnNhLT5u LGN0eCwKLSAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkKLSAJCSAgZ290byBlcnI7Ci1AQCAtNjE3 LDYgKzY3NiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCi0g CXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNf REVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJ CX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVD UllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQot KwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf REVDUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTY2Nyw5ICs3NDMsNyBAQCBz dGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCi0gCQlnb3RvIGVycjsKLSAJ CX0KLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlpZiAo IUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tf UlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4 LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0g CWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAotIAkJ cnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7Ci1AQCAtNzE3LDYgKzc5MSw3IEBAIHN0YXRp YyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKLSAJQklHTlVNICpyMSwqbTEsKnZy Znk7Ci0gCUJJR05VTSBsb2NhbF9kbXAxLGxvY2FsX2RtcTEsbG9jYWxfYyxsb2NhbF9yMTsKLSAJ QklHTlVNICpkbXAxLCpkbXExLCpjLCpwcjE7Ci0rCWludCBibl9mbGFnczsKLSAJaW50IHJldD0w OwotIAotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLUBAIC03MjQsNDEgKzc5OSwzMSBAQCBzdGF0aWMg aW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCi0gCW0xID0gQk5fQ1RYX2dldChjdHgp OwotIAl2cmZ5ID0gQk5fQ1RYX2dldChjdHgpOwotIAotLQl7Ci0tCQlCSUdOVU0gbG9jYWxfcCwg bG9jYWxfcTsKLS0JCUJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTDsKLS0KLS0JCS8qIE1ha2Ug c3VyZSBCTl9tb2RfaW52ZXJzZSBpbiBNb250Z29tZXJ5IGludGlhbGl6YXRpb24gdXNlcyB0aGUK LS0JCSAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZyAodW5sZXNzIFJTQV9GTEFHX05PX0NPTlNUVElN RSBpcyBzZXQpCi0tCQkgKi8KLS0JCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05T VFRJTUUpKQotLQkJCXsKLS0JCQlCTl9pbml0KCZsb2NhbF9wKTsKLS0JCQlwID0gJmxvY2FsX3A7 Ci0tCQkJQk5fd2l0aF9mbGFncyhwLCByc2EtPnAsIEJOX0ZMR19DT05TVFRJTUUpOwotLQotLQkJ CUJOX2luaXQoJmxvY2FsX3EpOwotLQkJCXEgPSAmbG9jYWxfcTsKLS0JCQlCTl93aXRoX2ZsYWdz KHEsIHJzYS0+cSwgQk5fRkxHX0NPTlNUVElNRSk7Ci0tCQkJfQotLQkJZWxzZQotLQkJCXsKLS0J CQlwID0gcnNhLT5wOwotLQkJCXEgPSByc2EtPnE7Ci0tCQkJfQotKwkvKiBNYWtlIHN1cmUgbW9k X2ludmVyc2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdCAKLSsJICog Qk5fRkxHX0NPTlNUVElNRSBmbGFnLgotKwkgKi8KLSsJYm5fZmxhZ3MgPSByc2EtPnAtPmZsYWdz OwotKwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKLSsJCXsKLSsJ CXJzYS0+cC0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKLSsJCX0KLSsJTU9OVF9IRUxQRVIo cnNhLCBjdHgsIHAsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVy cik7Ci0rCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLwotKwlyc2EtPnAtPmZsYWdzID0g Ym5fZmxhZ3M7Ci0gCi0tCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUp Ci0tCQkJewotLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21v ZF9wLCBDUllQVE9fTE9DS19SU0EsIHAsIGN0eCkpCi0tCQkJCWdvdG8gZXJyOwotLQkJCWlmICgh Qk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9xLCBDUllQVE9fTE9DS19S U0EsIHEsIGN0eCkpCi0tCQkJCWdvdG8gZXJyOwotLQkJCX0KLS0JfQotKyAgICAgICAgLyogTWFr ZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1vbnRnb21lcmV5IGludGlhbGl6YXRpb24gdXNlIGNvcnJl Y3QKLSsgICAgICAgICAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZy4KLSsgICAgICAgICAqLwotKwli bl9mbGFncyA9IHJzYS0+cS0+ZmxhZ3M7Ci0rCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19O T19DT05TVFRJTUUpKQotKwkJewotKwkJcnNhLT5xLT5mbGFncyB8PSBCTl9GTEdfQ09OU1RUSU1F OwotKwkJfQotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcSwgcnNhLT5mbGFncyAmIFJTQV9GTEFH X0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsJLyogV2UgcmVzdG9yZSBibl9mbGFncyBiYWNr ICovCi0rCXJzYS0+cS0+ZmxhZ3MgPSBibl9mbGFnczsJCi0gCi0tCWlmIChyc2EtPmZsYWdzICYg UlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZy c2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJCWdv dG8gZXJyOwotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFH X0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAkvKiBjb21wdXRlIEkgbW9kIHEgKi8KLSAJ aWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi1AQCAtODc1LDYgKzk0 MCw5IEBAIGVycjoKLSAKLSBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKLSAJewot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgot IAlyc2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFU RTsKLSAJcmV0dXJuKDEpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2Ev cnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9lcnIuYwotLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDA4LTEyLTI5IDE3OjExOjU2 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZXJyLmMJ MjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTEsOCArMTExLDEyIEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BSSU5UX0ZQKSwJIlJTQV9wcmludF9mcCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0Ff UFJJVl9ERUNPREUpLAkiUlNBX1BSSVZfREVDT0RFIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9Q UklWX0VOQ09ERSksCSJSU0FfUFJJVl9FTkNPREUifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVCksCSJSU0FfcHJpdmF0ZV9lbmNyeXB0In0sCi0ge0VSUl9GVU5DKFJTQV9G X1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JT QV9QVUJMSUNfREVDUllQVCksCSJSU0FfcHVibGljX2RlY3J5cHQifSwKLSB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwJIlJTQV9zZXR1cF9ibGluZGluZyJ9LAotK3tFUlJfRlVO QyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwJIlJTQV9zZXRfZGVmYXVsdF9tZXRob2Qi fSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0QpLAkiUlNBX3NldF9tZXRob2QifSwK LSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLAkiUlNBX3NpZ24ifSwKLSB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcpLAkiUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJ TkcifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWSksCSJSU0FfdmVyaWZ5In0sCi1AQCAt MTU1LDEwICsxNTksMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX3JlYXNvbnNb XQotIHtFUlJfUkVBU09OKFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAgLCJrZXkgc2l6ZSB0 b28gc21hbGwifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQpICAgICwi bGFzdCBvY3RldCBpbnZhbGlkIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTU9EVUxVU19UT09fTEFS R0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0re0VSUl9SRUFTT04oUlNBX1JfTk9OX0ZJ UFNfTUVUSE9EKSAgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAotIHtFUlJfUkVBU09OKFJTQV9S X05PX1BVQkxJQ19FWFBPTkVOVCkgICAgLCJubyBwdWJsaWMgZXhwb25lbnQifSwKLSB7RVJSX1JF QVNPTihSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HKSwibnVsbCBiZWZvcmUgYmxvY2sg bWlzc2luZyJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RKSAgLCJu IGRvZXMgbm90IGVxdWFsIHAgcSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX09BRVBfREVDT0RJTkdf RVJST1IpICAgLCJvYWVwIGRlY29kaW5nIGVycm9yIn0sCi0re0VSUl9SRUFTT04oUlNBX1JfT1BF UkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSksIm9wZXJhdGlvbiBub3QgYWxsb3dlZCBp biBmaXBzIG1vZGUifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRF RF9GT1JfVEhJU19LRVlUWVBFKSwib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMga2V5 dHlwZSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVEKSAgLCJwYWRk aW5nIGNoZWNrIGZhaWxlZCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX1BfTk9UX1BSSU1FKSAgICAg ICAgICAgLCJwIG5vdCBwcmltZSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNh L3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKLS0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToy Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2dlbi5j CTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNjcsNiArNjcsODIgQEAK LSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotK3N0YXRpYyBpbnQgZmlwc19y c2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2 b2lkKQotKwl7Ci0rCWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0raW50IGZp cHNfY2hlY2tfcnNhKFJTQSAqcnNhKQotKwl7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgdGJzW10g PSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKwl1bnNpZ25lZCBjaGFyICpjdGJ1ZiA9IE5V TEwsICpwdGJ1ZiA9IE5VTEw7Ci0rCWludCBsZW4sIHJldCA9IDA7Ci0rCUVWUF9QS0VZICpwazsK LSsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwot KwlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKLSsKLSsJLyogUGVyZm9ybSBwYWlyd2lzZSBj b25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BLQ1MxLCBOVUxMKQotKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg dGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEsIE5VTEwpCi0rCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAot KwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBOVUxMKSkK LSsJCWdvdG8gZXJyOwotKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNy eXB0L2RlY3J5cHQgdGVzdCAqLwotKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJz YSkpOwotKwlpZiAoIWN0YnVmKQotKwkJZ290byBlcnI7Ci0rCi0rCWxlbiA9IFJTQV9wdWJsaWNf ZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJ TkcpOwotKwlpZiAobGVuIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJLyogQ2hlY2sgY2lwaGVydGV4 dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLwotKwlpZiAoKGxlbiA9PSAoc2l6ZW9mKHRicykg LSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQotKwkJZ290byBlcnI7Ci0rCXB0YnVm ID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCi0rCWlmICghcHRidWYpCi0rCQln b3RvIGVycjsKLSsJbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0YnVmLCBwdGJ1Ziwg cnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gIT0gKHNpemVvZih0YnMpIC0gMSkp Ci0rCQlnb3RvIGVycjsKLSsJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQotKwkJZ290byBl cnI7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWlmICghcHRidWYpCi0rCQlnb3RvIGVycjsKLSsJCi0r CWVycjoKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgp OwotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BBSVJXSVNFX1RFU1Rf RkFJTEVEKTsKLSsJCX0KLSsKLSsJaWYgKGN0YnVmKQotKwkJT1BFTlNTTF9mcmVlKGN0YnVmKTsK LSsJaWYgKHB0YnVmKQotKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKLSsJaWYgKHBrKQotKwkJRVZQ X1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLSAKLSBzdGF0 aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92 YWx1ZSwgQk5fR0VOQ0IgKmNiKTsKLSAKLUBAIC05MCw2ICsxNjYsMjMgQEAgc3RhdGljIGludCBy c2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIAotIAlpbnQgYml0c3AsYml0c3Esb2s9IC0xLG49 MDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICAJ ewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOwotKwkgICAgCXJldHVybiAwOwotKwkgICAgCX0KLSsKLSsJCWlmIChi aXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJICAgIHsKLSsJCSAg ICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQp OwotKwkJICAgIHJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4PUJOX0NU WF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0 eCk7Ci1AQCAtMjAxLDYgKzI5NCwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihS U0EgKnJzYSwgCi0gCQlwID0gcnNhLT5wOwotIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFt cCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQotKwkJ CUJOX2FkZF93b3JkKHJzYS0+biwgMSk7Ci0rCi0rCQlpZighZmlwc19jaGVja19yc2EocnNhKSkK LSsJCSAgICBnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJb2s9MTsKLSBlcnI6Ci0gCWlm IChvayA9PSAtMSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2EuaC5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2EuaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3JzYS9yc2EuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYS5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAw MDAwICswMjAwCi1AQCAtNzQsNiArNzQsMjEgQEAKLSAjZXJyb3IgUlNBIGlzIGRpc2FibGVkLgot ICNlbmRpZgotIAotKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIFJTQSBtZXRob2QgaXMgRklQ UyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCi0rICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNl dCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCi0rICogYXBwbGljYXRpb24g c2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkK LSsgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmlu ZSBSU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAotKwotKy8qIElmIHRoaXMgZmxhZyBpcyBz ZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQotKyAq IHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8g ZW5zdXJlIHRoYXQgdGhlCi0rICogdXNhZ2UgaXMgY29tcGxpYW50LgotKyAqLwotKwotKyNkZWZp bmUgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKLSsKLSAjaWZkZWYgIF9fY3BsdXNw bHVzCi0gZXh0ZXJuICJDIiB7Ci0gI2VuZGlmCi1AQCAtMTY0LDYgKzE3OSw4IEBAIHN0cnVjdCBy c2Ffc3QKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTCTE2Mzg0Ci0gI2Vu ZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAot KwotICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCi0gIyBkZWZpbmUgT1BF TlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIKLSAjZW5kaWYKLUBAIC0yNjcsNiArMjg0 LDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50IGJpdHMsIHVuc2lnbmUKLSAKLSAvKiBO ZXcgdmVyc2lvbiAqLwotIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0 cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNB ICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCi0r CQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhw LAotKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVN ICpYcSwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9YOTMx X2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5f R0VOQ0IgKmNiKTsKLSAKLSBpbnQJUlNBX2NoZWNrX2tleShjb25zdCBSU0EgKik7Ci0gCS8qIG5l eHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KLUBAIC00MzgsOCArNDYwLDEyIEBAIHZvaWQgRVJS X2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJ IDExNgotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKLSAjZGVmaW5lIFJT QV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4Ci0rI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9F TkNSWVBUCQkJIDE0OAotICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUJCQkJIDEzOQotKyNk ZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQotICNkZWZpbmUgUlNBX0ZfUlNB X1NFVFVQX0JMSU5ESU5HCQkJIDEzNgotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01F VEhPRAkJCSAxNTAKLSsjZGVmaW5lIFJTQV9GX1JTQV9TRVRfTUVUSE9ECQkJCSAxNTEKLSAjZGVm aW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkgMTE3Ci0gI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04x X09DVEVUX1NUUklORwkJIDExOAotICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5Ci1A QCAtNDc5LDEwICs1MDUsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAj ZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMjAKLSAjZGVmaW5lIFJTQV9SX0xB U1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKLSAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdF CQkJCSAxMDUKLSsjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTQ5Ci0gI2RlZmlu ZSBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCi0gI2RlZmluZSBSU0FfUl9OVUxMX0JF Rk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMwotICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVB TF9QX1EJCQkgMTI3Ci0gI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQot KyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTUwCi0g I2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFCSAx NDgKLSAjZGVmaW5lIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJIDExNAotICNkZWZpbmUg UlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v cnNhL3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfbGliLmMKLS0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAwOS0xMi0wOSAxNDoz ODoyMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2xp Yi5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtODAsNiArODAsMTMg QEAgUlNBICpSU0FfbmV3KHZvaWQpCi0gCi0gdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNv bnN0IFJTQV9NRVRIT0QgKm1ldGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJ ewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBT X01FVEhPRCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rI2VuZGlmCi0gCWRlZmF1bHRfUlNBX21ldGgg PSBtZXRoOwotIAl9Ci0gCi1AQCAtMTExLDYgKzExOCwxMyBAQCBpbnQgUlNBX3NldF9tZXRob2Qo UlNBICpyc2EsIGNvbnN0IFJTQV9NCi0gCS8qIE5COiBUaGUgY2FsbGVyIGlzIHNwZWNpZmljYWxs eSBzZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cwotIAkgKiB0byBkZWFsIHdp dGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCi0gCWNvbnN0IFJTQV9NRVRIT0QgKm10 bXA7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5m bGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0Ff U0VUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQot KyNlbmRpZgotIAltdG1wID0gcnNhLT5tZXRoOwotIAlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5m aW5pc2gocnNhKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAtMTYzLDYgKzE3Nywx OCBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQotIAkJCX0KLSAJCX0KLSAj ZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+ bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNB X0ZfUlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rI2lmbmRlZiBPUEVO U1NMX05PX0VOR0lORQotKwkJaWYgKHJldC0+ZW5naW5lKQotKwkJCUVOR0lORV9maW5pc2gocmV0 LT5lbmdpbmUpOwotKyNlbmRpZgotKwkJT1BFTlNTTF9mcmVlKHJldCk7Ci0rCQlyZXR1cm4gTlVM TDsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJcmV0LT5wYWQ9MDsKLSAJcmV0LT52ZXJzaW9uPTA7Ci1A QCAtMjk0LDYgKzMyMCwxMyBAQCBpbnQgUlNBX3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25z dCB1Ci0gaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAotIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGlu ZykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkgJiYgIShyc2Et PmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwkJewotKwkJUlNBZXJyKFJTQV9G X1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBT X01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCXJldHVybihyc2EtPm1ldGgt PnJzYV9wcml2X2VuYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5nKSk7Ci0gCX0KLSAKLUBA IC0zMDYsNiArMzM5LDEzIEBAIGludCBSU0FfcHJpdmF0ZV9kZWNyeXB0KGludCBmbGVuLCBjb25z dCAKLSBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKLSAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcp Ci0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9S U0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01P REUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCXJldHVybihyc2EtPm1ldGgtPnJz YV9wdWJfZGVjKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKLSAJfQotIAotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9yc2EvcnNhX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2Ff c2lnbi5jLmZpcHMJMjAwNy0wNC0yNCAwMzowNTo0Mi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAotQEAgLTEzMCw3ICsxMzAsOCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUsIGNv bnN0IHVuc2lnbmVkIGNoCi0gCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7Ci0gCQlzPXRtcHM7Ci0g CX0KLS0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURE SU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQg RklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2EtPm1l dGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwot IAlpZiAoaSA8PSAwKQotIAkJcmV0PTA7Ci0gCWVsc2UKLUBAIC0xNjEsOCArMTYyLDggQEAgaW50 IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAotIAlpZigoZHR5cGUgPT0g TklEX21kNV9zaGExKSAmJiBybSkKLSAJCXsKLS0JCWkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGlu dClzaWdsZW4sCi0tCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJCWkg PSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNp Z2xlbiwKLSsJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAJCWlm IChpIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gCQkqcHJtX2xlbiA9IGk7Ci1AQCAtMTc5LDcgKzE4 MCw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAJCQlSU0Fl cnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7Ci0g CQkJZ290byBlcnI7Ci0gCX0KLS0JaT1SU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sc2ln YnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBt ZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRo LT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2lnYnVm LHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCi0gCWlmIChpIDw9IDApIGdvdG8gZXJy OwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmMuZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9zZWVkL3NlZWQuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Nl ZWQvc2VlZC5jLmZpcHMJMjAwOC0xMi0xNiAwODo0MToyMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9zZWVkL3NlZWQuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAotQEAgLTM0LDYgKzM0LDkgQEAKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9zZWVk Lmg+Ci0gI2luY2x1ZGUgInNlZWRfbG9jbC5oIgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGNvbnN0IHNlZWRfd29y ZCBTU1s0XVsyNTZdID0gewl7Ci0gCTB4Mjk4OWExYTgsIDB4MDU4NTgxODQsIDB4MTZjNmQyZDQs IDB4MTNjM2QzZDAsIDB4MTQ0NDUwNTQsIDB4MWQwZDExMWMsIDB4MmM4Y2EwYWMsIDB4MjUwNTIx MjQsCi1AQCAtMTkzLDcgKzE5NiwxOCBAQCBzdGF0aWMgY29uc3Qgc2VlZF93b3JkIEtDW10gPSB7 Ci0gCUtDOCwJS0M5LAlLQzEwLAlLQzExLAlLQzEyLAlLQzEzLAlLQzE0LAlLQzE1CX07Ci0gI2Vu ZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotIHZvaWQgU0VFRF9zZXRfa2V5KGNvbnN0IHVu c2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICpr cykKLSsgICAgICAgIHsKLSsgICAgICAgIGlmIChGSVBTX21vZGUoKSkKLSsgICAgICAgICAgICAg ICAgRklQU19CQURfQUJPUlQoU0VFRCkKLSsgICAgICAgIHByaXZhdGVfU0VFRF9zZXRfa2V5KHJh d2tleSwga3MpOwotKyAgICAgICAgfQotKwotK3ZvaWQgcHJpdmF0ZV9TRUVEX3NldF9rZXkoY29u c3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURV TEUgKmtzKQotKyNlbHNlCi0rdm9pZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciBy YXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKQotKyNlbmRpZgot IHsKLSAJc2VlZF93b3JkIHgxLCB4MiwgeDMsIHg0OwotIAlzZWVkX3dvcmQgdDAsIHQxOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmguZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9zZWVkL3NlZWQuaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2VlZC5o LmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9zZWVkL3NlZWQuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIw MAotQEAgLTExNyw2ICsxMTcsOSBAQCB0eXBlZGVmIHN0cnVjdCBzZWVkX2tleV9zdCB7Ci0gfSBT RUVEX0tFWV9TQ0hFRFVMRTsKLSAKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBwcml2 YXRlX1NFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5H VEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpOwotKyNlbmRpZgotIHZvaWQgU0VFRF9zZXRfa2V5 KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1ND SEVEVUxFICprcyk7Ci0gCi0gdm9pZCBTRUVEX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciBz W1NFRURfQkxPQ0tfU0laRV0sIHVuc2lnbmVkIGNoYXIgZFtTRUVEX0JMT0NLX1NJWkVdLCBjb25z dCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v c2hhL3NoYV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhX2Rnc3QuYwot LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAx NDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hh X2Rnc3QuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTU3LDYgKzU3 LDEyIEBACi0gICovCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot ICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTApICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB KQotIAotICN1bmRlZiAgU0hBXzEKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9z aGEuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGEuaAotLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYS5oCTIwMTAtMDMtMzAgMTA6MzQ6 NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTA2LDYgKzEwNiw5IEBAIHR5cGVkZWYgc3RydWN0IFNI QXN0YXRlX3N0Ci0gCX0gU0hBX0NUWDsKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9TSEFfSW5pdChTSEFfQ1RYICpjKTsKLSsj ZW5kaWYKLSBpbnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7Ci0gaW50IFNIQV9VcGRhdGUoU0hBX0NU WCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQV9GaW5hbCh1bnNp Z25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfbG9jbC5o Ci0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9z aGFfbG9jbC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTIyLDgg KzEyMiwxNSBAQCB2b2lkIHNoYTFfYmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAqYywgCi0gI2Rl ZmluZSBJTklUX0RBVEFfaDMgMHgxMDMyNTQ3NlVMCi0gI2RlZmluZSBJTklUX0RBVEFfaDQgMHhj M2QyZTFmMFVMCi0gCi0rI2lmIGRlZmluZWQoU0hBXzApICYmIGRlZmluZWQoT1BFTlNTTF9GSVBT KQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChTSEEpCi0rI2Vsc2UKLSBpbnQgSEFTSF9JTklUIChT SEFfQ1RYICpjKQotKyNlbmRpZgotIAl7Ci0rI2lmIGRlZmluZWQoU0hBXzEpICYmIGRlZmluZWQo T1BFTlNTTF9GSVBTKQotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNl dCAoYywwLHNpemVvZigqYykpOwotIAljLT5oMD1JTklUX0RBVEFfaDA7Ci0gCWMtPmgxPUlOSVRf REFUQV9oMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9zaGEvc2hhMWRnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMJMjAxMC0wMy0z MCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Myw2ICs2MywxMCBAQAotICNkZWZpbmUg U0hBXzEKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gY29uc3Qg Y2hhciBTSEExX3ZlcnNpb25bXT0iU0hBMSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAu MC9jcnlwdG8vc2hhL3NoYTI1Ni5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYTI1 Ni5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9zaGEvc2hhMjU2LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAg KzAyMDAKLUBAIC0xMiwxMiArMTIsMTkgQEAKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2x2Lmg+Ci0gCi0gY29uc3QgY2hhciBTSEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2IiBPUEVO U1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0gaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQot IAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2Vu ZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJ Yy0+aFsxXT0weDM2N2NkNTA3VUw7Ci0gCWMtPmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4 ZjcwZTU5MzlVTDsKLUBAIC0yOSw2ICszNiw5IEBAIGludCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NU WCAqYykKLSAKLSBpbnQgU0hBMjU2X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0 IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmhbMF09MHg2YTA5ZTY2N1VMOwljLT5oWzFdPTB4YmI2 N2FlODVVTDsKLSAJYy0+aFsyXT0weDNjNmVmMzcyVUw7CWMtPmhbM109MHhhNTRmZjUzYVVMOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vc2hhL3NoYTUxMi5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3No YTUxMi5jLmZpcHMJMjAwOS0xMi0zMCAxMjo1MzozMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAw MDAgKzAyMDAKLUBAIC01LDYgKzUsMTAgQEAKLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAqLwotICNpbmNs dWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9O T19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBNTEyKQotIC8qCi0gICogSU1QTEVNRU5U QVRJT04gTk9URVMuCi1AQCAtNjEsNiArNjUsOSBAQCBjb25zdCBjaGFyIFNIQTUxMl92ZXJzaW9u W109IlNIQS01MTIiIE9QCi0gCi0gaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQotIAl7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlm Ci0gI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5l ZChfX2FybSkpCi0gCS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxl ciBtb2R1bGUgKi8KLSAJdW5zaWduZWQgaW50ICpoID0gKHVuc2lnbmVkIGludCAqKWMtPmg7Ci1A QCAtOTAsNiArOTcsOSBAQCBpbnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCi0gCi0gaW50 IFNIQTUxMl9Jbml0IChTSEE1MTJfQ1RYICpjKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gI2lmIGRlZmluZWQoU0hBNTEyX0FT TSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkpCi0gCS8qIG1haW50YWlu IGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8KLSAJdW5zaWduZWQg aW50ICpoID0gKHVuc2lnbmVkIGludCAqKWMtPmg7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by93aHJscG9vbC93aHJscG9vbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vd2hybHBv b2wvd2hybHBvb2wuaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3docmxwb29s LmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3docmxwb29sL3docmxwb29sLmgJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAw MDAwMDAgKzAyMDAKLUBAIC0yNCw2ICsyNCw5IEBAIHR5cGVkZWYgc3RydWN0CXsKLSAJfSBXSElS TFBPT0xfQ1RYOwotIAotICNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0raW50IHByaXZhdGVfV0hJUkxQT09MX0luaXQoV0hJUkxQT09MX0NUWCAqYyk7 Ci0rI2VuZGlmCi0gaW50IFdISVJMUE9PTF9Jbml0CShXSElSTFBPT0xfQ1RYICpjKTsKLSBpbnQg V0hJUkxQT09MX1VwZGF0ZQkoV0hJUkxQT09MX0NUWCAqYyxjb25zdCB2b2lkICppbnAsc2l6ZV90 IGJ5dGVzKTsKLSB2b2lkIFdISVJMUE9PTF9CaXRVcGRhdGUoV0hJUkxQT09MX0NUWCAqYyxjb25z dCB2b2lkICppbnAsc2l6ZV90IGJpdHMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v d2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vd2hybHBvb2wvd3Bf ZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJ MjAwOC0xMi0yOSAxMzozNTo0OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by93aHJscG9vbC93cF9kZ3N0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAy MDAKLUBAIC01Myw4ICs1MywxMiBAQAotIAotICNpbmNsdWRlICJ3cF9sb2NsLmgiCi0gI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0taW50IFdISVJM UE9PTF9Jbml0CShXSElSTFBPT0xfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChXSElS TFBPT0wpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCXJldHVybigxKTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvTWFrZWZpbGUub3JnLmZpcHMgb3BlbnNzbC0xLjAuMC9NYWtl ZmlsZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4wL01ha2VmaWxlLm9yZy5maXBzCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5vcmcJ MjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTAsNiArMTEwLDkgQEAg TElCS1JCNT0KLSBaTElCX0lOQ0xVREU9Ci0gTElCWkxJQj0KLSAKLSsjIE5vbi1lbXB0eSBpZiBG SVBTIGVuYWJsZWQKLStGSVBTPQotKwotIERJUlM9ICAgY3J5cHRvIHNzbCBlbmdpbmVzIGFwcHMg dGVzdCB0b29scwotIEVOR0RJUlM9IGNjZ29zdAotIFNITElCRElSUz0gY3J5cHRvIHNzbAotQEAg LTEyMiw3ICsxMjUsNyBAQCBTRElSUz0gIFwKLSAJYm4gZWMgcnNhIGRzYSBlY2RzYSBkaCBlY2Ro IGRzbyBlbmdpbmUgXAotIAlidWZmZXIgYmlvIHN0YWNrIGxoYXNoIHJhbmQgZXJyIFwKLSAJZXZw IGFzbjEgcGVtIHg1MDkgeDUwOXYzIGNvbmYgdHh0X2RiIHBrY3M3IHBrY3MxMiBjb21wIG9jc3Ag dWkga3JiNSBcCi0tCWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUKLSsJY21zIHBxdWV1ZSB0cyBq cGFrZSBzdG9yZSBmaXBzCi0gIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYWJvdmUgbGlzdCBpcyBh ZGp1c3RlZCBieSAuL0NvbmZpZ3VyZQotICMgYWNjb3JkaW5nIHRvIG5vLXh4eCBhcmd1bWVudHMu Li4KLSAKLUBAIC0yMDYsNiArMjA5LDcgQEAgQlVJTERFTlY9CVBMQVRGT1JNPSckKFBMQVRGT1JN KScgUFJPQ0VTUwotIAkJUk1EMTYwX0FTTV9PQko9JyQoUk1EMTYwX0FTTV9PQkopJwkJXAotIAkJ V1BfQVNNX09CSj0nJChXUF9BU01fT0JKKScJCQlcCi0gCQlQRVJMQVNNX1NDSEVNRT0nJChQRVJM QVNNX1NDSEVNRSknCQlcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAotIAkJVEhJUz0k JHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KLSAjIE1BS0VPVkVS UklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1ha2Ug Zmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBpbiB2YXJp YWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvc3NsL3NzbF9j aXBoLmMuZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfY2lwaC5jCi0tLS0gb3BlbnNzbC0xLjAu MC9zc2wvc3NsX2NpcGguYy5maXBzCTIwMDktMDktMTMgMDE6MTg6MDkuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2NpcGguYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAw MDAwMDAwMCArMDIwMAotQEAgLTcyNyw2ICs3MjcsOSBAQCBzdGF0aWMgdm9pZCBzc2xfY2lwaGVy X2NvbGxlY3RfY2lwaGVycyhjCi0gCQkgICAgIShjLT5hbGdvcml0aG1fYXV0aCAmIGRpc2FibGVk X2F1dGgpICYmCi0gCQkgICAgIShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJsZWRfZW5jKSAmJgot IAkJICAgICEoYy0+YWxnb3JpdGhtX21hYyAmIGRpc2FibGVkX21hYykgJiYKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCQkJKCFGSVBTX21vZGUoKSB8fCAoYy0+YWxnb19zdHJlbmd0aCAmIFNTTF9G SVBTKSkgJiYKLSsjZW5kaWYKLSAJCSAgICAhKGMtPmFsZ29yaXRobV9zc2wgJiBkaXNhYmxlZF9z c2wpKQotIAkJCXsKLSAJCQljb19saXN0W2NvX2xpc3RfbnVtXS5jaXBoZXIgPSBjOwotQEAgLTE0 MjMsNyArMTQyNiwxMSBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJf Ci0gCSAqLwotIAlmb3IgKGN1cnIgPSBoZWFkOyBjdXJyICE9IE5VTEw7IGN1cnIgPSBjdXJyLT5u ZXh0KQotIAkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChjdXJyLT5hY3RpdmUgJiYg KCFGSVBTX21vZGUoKSB8fCBjdXJyLT5jaXBoZXItPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykp Ci0rI2Vsc2UKLSAJCWlmIChjdXJyLT5hY3RpdmUpCi0rI2VuZGlmCi0gCQkJewotIAkJCXNrX1NT TF9DSVBIRVJfcHVzaChjaXBoZXJzdGFjaywgY3Vyci0+Y2lwaGVyKTsKLSAjaWZkZWYgQ0lQSEVS X0RFQlVHCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfbGliLmMuZmlwcyBvcGVuc3Ns LTEuMC4wL3NzbC9zc2xfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfbGliLmMuZmlw cwkyMDEwLTAyLTE3IDIwOjQzOjQ2LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAv c3NsL3NzbF9saWIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTE1 MjEsNiArMTUyMSwxNCBAQCBTU0xfQ1RYICpTU0xfQ1RYX25ldyhjb25zdCBTU0xfTUVUSE9EICpt Ci0gCQlyZXR1cm4oTlVMTCk7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAo RklQU19tb2RlKCkgJiYgKG1ldGgtPnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQkKLSsJCXsKLSsJ CVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBT X01PREUpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChTU0xfZ2V0 X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkgPCAwKQotIAkJewotIAkJU1NMZXJyKFNTTF9G X1NTTF9DVFhfTkVXLFNTTF9SX1g1MDlfVkVSSUZJQ0FUSU9OX1NFVFVQX1BST0JMRU1TKTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvc3NsL3NzbHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvc3Ns L3NzbHRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3NzbHRlc3QuYy5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9zc2wvc3NsdGVz dC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMjY4LDYgKzI2OCw5 IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZvaWQpCi0gCXsKLSAJZnByaW50ZihzdGRlcnIsInVz YWdlOiBzc2x0ZXN0IFthcmdzIC4uLl1cbiIpOwotIAlmcHJpbnRmKHN0ZGVyciwiXG4iKTsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCWZwcmludGYoc3RkZXJyLCItRiAgICAgICAgICAgICAtIHJ1 biB0ZXN0IGluIEZJUFMgbW9kZVxuIik7Ci0rI2VuZGlmCi0gCWZwcmludGYoc3RkZXJyLCIgLXNl cnZlcl9hdXRoICAtIGNoZWNrIHNlcnZlciBjZXJ0aWZpY2F0ZVxuIik7Ci0gCWZwcmludGYoc3Rk ZXJyLCIgLWNsaWVudF9hdXRoICAtIGRvIGNsaWVudCBhdXRoZW50aWNhdGlvblxuIik7Ci0gCWZw cmludGYoc3RkZXJyLCIgLXByb3h5ICAgICAgICAtIGFsbG93IHByb3h5IGNlcnRpZmljYXRlc1xu Iik7Ci1AQCAtNDg3LDYgKzQ5MCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Ci0gI2VuZGlmCi0gCVNUQUNLX09GKFNTTF9DT01QKSAqc3NsX2NvbXBfbWV0aG9kcyA9IE5VTEw7 Ci0gCWludCB0ZXN0X2NpcGhlcmxpc3QgPSAwOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaW50 IGZpcHNfbW9kZT0wOwotKyNlbmRpZgotIAotIAl2ZXJib3NlID0gMDsKLSAJZGVidWcgPSAwOwot QEAgLTUxOCw3ICs1MjQsMTYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAK LSAJd2hpbGUgKGFyZ2MgPj0gMSkKLSAJCXsKLS0JCWlmCShzdHJjbXAoKmFyZ3YsIi1zZXJ2ZXJf YXV0aCIpID09IDApCi0rCQlpZighc3RyY21wKCphcmd2LCItRiIpKQotKwkJCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCQkJZmlwc19tb2RlPTE7Ci0rI2Vsc2UKLSsJCQlmcHJpbnRmKHN0ZGVy ciwibm90IGNvbXBpbGVkIHdpdGggRklQUyBzdXBwb3J0LCBzbyBleGl0dGluZyB3aXRob3V0IHJ1 bm5pbmcuXG4iKTsKLSsJCQlFWElUKDApOwotKyNlbmRpZgotKwkJCX0KLSsJCWVsc2UgaWYJKHN0 cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKLSAJCQlzZXJ2ZXJfYXV0aD0xOwotIAkJ ZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY2xpZW50X2F1dGgiKSA9PSAwKQotIAkJCWNsaWVudF9h dXRoPTE7Ci1AQCAtNzE0LDYgKzcyOSwyMCBAQCBiYWQ6Ci0gCQlFWElUKDEpOwotIAkJfQotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoZmlwc19tb2RlKQotKwkJewotKwkJaWYoIUZJUFNf bW9kZV9zZXQoMSkpCi0rCQkJewotKwkJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7Ci0rCQkJ RVJSX3ByaW50X2Vycm9ycyhCSU9fbmV3X2ZwKHN0ZGVycixCSU9fTk9DTE9TRSkpOwotKwkJCUVY SVQoMSk7Ci0rCQkJfQotKwkJZWxzZQotKwkJCWZwcmludGYoc3RkZXJyLCIqKiogSU4gRklQUyBN T0RFICoqKlxuIik7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChwcmludF90aW1lKQotIAkJewot IAkJaWYgKCFiaW9fcGFpcikKLUBAIC0yMTU2LDEyICsyMTg1LDEyIEBAIHN0YXRpYyBpbnQgTVNf Q0FMTEJBQ0sgYXBwX3ZlcmlmeV9jYWxsYmEKLSAJCX0KLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9f WDUwOV9WRVJJRlkKLS0jIGlmZGVmIE9QRU5TU0xfRklQUwotKyMgaWYgMAotIAlpZihzLT52ZXJz aW9uID09IFRMUzFfVkVSU0lPTikKLSAJCUZJUFNfYWxsb3dfbWQ1KDEpOwotICMgZW5kaWYKLSAJ b2sgPSBYNTA5X3ZlcmlmeV9jZXJ0KGN0eCk7Ci0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGlm IDAKLSAJaWYocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCi0gCQlGSVBTX2FsbG93X21kNSgw KTsKLSAjIGVuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfY2xudC5jLmZpcHMg b3BlbnNzbC0xLjAuMC9zc2wvczIzX2NsbnQuYwotLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3MyM19j bG50LmMuZmlwcwkyMDEwLTAyLTE2IDE1OjIwOjQwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjAvc3NsL3MyM19jbG50LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAy MDAKLUBAIC0zMzQsNiArMzM0LDE0IEBAIHN0YXRpYyBpbnQgc3NsMjNfY2xpZW50X2hlbGxvKFNT TCAqcykKLSAJCQl2ZXJzaW9uX21ham9yID0gVExTMV9WRVJTSU9OX01BSk9SOwotIAkJCXZlcnNp b25fbWlub3IgPSBUTFMxX1ZFUlNJT05fTUlOT1I7Ci0gCQkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJCWVsc2UgaWYoRklQU19tb2RlKCkpCi0rCQkJewotKwkJCVNTTGVycihTU0xfRl9TU0wy M19DTElFTlRfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9E RSk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsjZW5kaWYKLSAJCWVsc2UgaWYgKHZlcnNpb24g PT0gU1NMM19WRVJTSU9OKQotIAkJCXsKLSAJCQl2ZXJzaW9uX21ham9yID0gU1NMM19WRVJTSU9O X01BSk9SOwotQEAgLTYxNyw2ICs2MjUsMTQgQEAgc3RhdGljIGludCBzc2wyM19nZXRfc2VydmVy X2hlbGxvKFNTTCAqcwotIAkJaWYgKChwWzJdID09IFNTTDNfVkVSU0lPTl9NSU5PUikgJiYKLSAJ CQkhKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU1NMdjMpKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCQkJaWYoRklQU19tb2RlKCkpCi0rCQkJCXsKLSsJCQkJU1NMZXJyKFNTTF9GX1NT TDIzX0dFVF9TRVJWRVJfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJ UFNfTU9ERSk7Ci0rCQkJCWdvdG8gZXJyOwotKwkJCQl9Ci0rI2VuZGlmCi0gCQkJcy0+dmVyc2lv bj1TU0wzX1ZFUlNJT047Ci0gCQkJcy0+bWV0aG9kPVNTTHYzX2NsaWVudF9tZXRob2QoKTsKLSAJ CQl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfc3J2ci5jLmZpcHMgb3BlbnNzbC0x LjAuMC9zc2wvczIzX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3MyM19zcnZyLmMuZmlw cwkyMDEwLTAyLTE2IDE1OjIwOjQwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAv c3NsL3MyM19zcnZyLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0z OTMsNiArMzkzLDE1IEBAIGludCBzc2wyM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcykKLSAJCQl9 Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgKHMt PnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQotKwkJewotKwkJU1NMZXJyKFNTTF9GX1NTTDIzX0dF VF9DTElFTlRfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9E RSk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKHMtPnN0YXRlID09IFNT TDIzX1NUX1NSX0NMTlRfSEVMTE9fQikKLSAJCXsKLSAJCS8qIHdlIGhhdmUgU1NMdjMvVExTdjEg aW4gYW4gU1NMdjIgaGVhZGVyCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zM19jbG50LmMu ZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zM19jbG50LmMKLS0tLSBvcGVuc3NsLTEuMC4wL3NzbC9z M19jbG50LmMuZmlwcwkyMDEwLTAyLTI4IDAxOjI0OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAvc3NsL3MzX2NsbnQuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCAr MDIwMAotQEAgLTE1Niw2ICsxNTYsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYK LSsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fREgKLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotICNl bmRpZgotQEAgLTE1NDYsNiArMTU1MCw4IEBAIGludCBzc2wzX2dldF9rZXlfZXhjaGFuZ2UoU1NM ICpzKQotIAkJCXE9bWRfYnVmOwotIAkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQotIAkJ CQl7Ci0rCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0rCQkJCQlFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChu dW0gPT0gMikKLSAJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwotIAkJCQlF VlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19S QU5ET01fU0laRSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zM19lbmMuYy5maXBzIG9w ZW5zc2wtMS4wLjAvc3NsL3MzX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMC9zc2wvczNfZW5jLmMu ZmlwcwkyMDA5LTA0LTE2IDE5OjIyOjUwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAvc3NsL3MzX2VuYy5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAt MTcwLDYgKzE3MCw3IEBAIHN0YXRpYyBpbnQgc3NsM19nZW5lcmF0ZV9rZXlfYmxvY2soU1NMICoK LSAjZW5kaWYKLSAJaz0wOwotIAlFVlBfTURfQ1RYX2luaXQoJm01KTsKLSsJRVZQX01EX0NUWF9z ZXRfZmxhZ3MoJm01LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAlFVlBfTURf Q1RYX2luaXQoJnMxKTsKLSAJZm9yIChpPTA7IChpbnQpaTxudW07IGkrPU1ENV9ESUdFU1RfTEVO R1RIKQotIAkJewotQEAgLTYxNCw2ICs2MTUsOCBAQCBpbnQgc3NsM19kaWdlc3RfY2FjaGVkX3Jl Y29yZHMoU1NMICpzKQotIAkJaWYgKChtYXNrICYgcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdv cml0aG0yKSAmJiBtZCkgCi0gCQkJewotIAkJCXMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXT1FVlBf TURfQ1RYX2NyZWF0ZSgpOwotKwkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKHMtPnMzLT5oYW5kc2hh a2VfZGdzdFtpXSwKLSsJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJCQlF VlBfRGlnZXN0SW5pdF9leChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sbWQsTlVMTCk7Ci0gCQkJ RVZQX0RpZ2VzdFVwZGF0ZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0saGRhdGEsaGRhdGFsZW4p OwotIAkJCX0gCi1AQCAtNjcwLDYgKzY3Myw3IEBAIHN0YXRpYyBpbnQgc3NsM19oYW5kc2hha2Vf bWFjKFNTTCAqcywgaW4KLSAJCXJldHVybiAwOwotIAl9CQotIAlFVlBfTURfQ1RYX2luaXQoJmN0 eCk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVyk7Ci0gCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LGQpOwotIAluPUVWUF9NRF9DVFhf c2l6ZSgmY3R4KTsKLSAJaWYgKG4gPCAwKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvczNf c3J2ci5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wvczNfc3J2ci5jCi0tLS0gb3BlbnNzbC0xLjAu MC9zc2wvczNfc3J2ci5jLmZpcHMJMjAxMC0wMi0yOCAwMDowNDoxMC4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4wL3NzbC9zM19zcnZyLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAw MDAwMDAgKzAyMDAKLUBAIC0xNzUyLDYgKzE3NTIsOCBAQCBpbnQgc3NsM19zZW5kX3NlcnZlcl9r ZXlfZXhjaGFuZ2UoU1NMICpzCi0gCQkJCWo9MDsKLSAJCQkJZm9yIChudW09MjsgbnVtID4gMDsg bnVtLS0pCi0gCQkJCQl7Ci0rCQkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAotKwkJ CQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQkJCQlFVlBfRGlnZXN0SW5p dF9leCgmbWRfY3R4LChudW0gPT0gMikKLSAJCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5zaGEx LCBOVUxMKTsKLSAJCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRf cmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvc3Ns L3QxX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wvdDFfZW5jLmMKLS0tLSBvcGVuc3NsLTEu MC4wL3NzbC90MV9lbmMuYy5maXBzCTIwMDktMDQtMTkgMjA6MDM6MTMuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC9zc2wvdDFfZW5jLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAw MDAwMDAgKzAyMDAKLUBAIC0xNjksNiArMTY5LDggQEAgc3RhdGljIHZvaWQgdGxzMV9QX2hhc2go Y29uc3QgRVZQX01EICptZAotIAotIAlITUFDX0NUWF9pbml0KCZjdHgpOwotIAlITUFDX0NUWF9p bml0KCZjdHhfdG1wKTsKLSsJSE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxB R19OT05fRklQU19BTExPVyk7Ci0rCUhNQUNfQ1RYX3NldF9mbGFncygmY3R4X3RtcCwgRVZQX01E X0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJSE1BQ19Jbml0X2V4KCZjdHgsc2VjLHNlY19s ZW4sbWQsIE5VTEwpOwotIAlITUFDX0luaXRfZXgoJmN0eF90bXAsc2VjLHNlY19sZW4sbWQsIE5V TEwpOwotIAlpZiAoc2VlZDEgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMSxzZWVkMV9s ZW4pOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtaW5pdC1zaGEyNTYucGF0Y2ggYi9vcGVu c3NsLTEuMC4wLWluaXQtc2hhMjU2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAxMTU3MjJjLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtaW5pdC1zaGEyNTYucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Rv Yy9zc2wvU1NMX2xpYnJhcnlfaW5pdC5wb2Quc2hhMjU2IG9wZW5zc2wtMS4wLjAvZG9jL3NzbC9T U0xfbGlicmFyeV9pbml0LnBvZAotLS0tIG9wZW5zc2wtMS4wLjAvZG9jL3NzbC9TU0xfbGlicmFy eV9pbml0LnBvZC5zaGEyNTYJMjAwNi0wMy0xMiAwMTozNzo1NS4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wL2RvYy9zc2wvU1NMX2xpYnJhcnlfaW5pdC5wb2QJMjAxMC0wNC0wOSAx NjozMzoxMS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNSw3ICsxNSw3IEBAIFNTTF9saWJyYXJ5X2lu aXQsIE9wZW5TU0xfYWRkX3NzbF9hbGdvcmkKLSAKLSA9aGVhZDEgREVTQ1JJUFRJT04KLSAKLS1T U0xfbGlicmFyeV9pbml0KCkgcmVnaXN0ZXJzIHRoZSBhdmFpbGFibGUgY2lwaGVycyBhbmQgZGln ZXN0cy4KLStTU0xfbGlicmFyeV9pbml0KCkgcmVnaXN0ZXJzIHRoZSBhdmFpbGFibGUgU1NML1RM UyBjaXBoZXJzIGFuZCBkaWdlc3RzLgotIAotIE9wZW5TU0xfYWRkX3NzbF9hbGdvcml0aG1zKCkg YW5kIFNTTGVheV9hZGRfc3NsX2FsZ29yaXRobXMoKSBhcmUgc3lub255bXMKLSBmb3IgU1NMX2xp YnJhcnlfaW5pdCgpLgotQEAgLTI3LDI0ICsyNywyOCBAQCBTU0xfbGlicmFyeV9pbml0KCkgaXMg bm90IHJlZW50cmFudC4gCi0gCi0gPWhlYWQxIFdBUk5JTkcKLSAKLS1TU0xfbGlicmFyeV9pbml0 KCkgb25seSByZWdpc3RlcnMgY2lwaGVycy4gQW5vdGhlciBpbXBvcnRhbnQgaW5pdGlhbGl6YXRp b24KLS1pcyB0aGUgc2VlZGluZyBvZiB0aGUgUFJORyAoUHNldWRvIFJhbmRvbSBOdW1iZXIgR2Vu ZXJhdG9yKSwgd2hpY2ggaGFzIHRvCi0tYmUgcGVyZm9ybWVkIHNlcGFyYXRlbHkuCi0rU1NMX2xp YnJhcnlfaW5pdCgpIGFkZHMgY2lwaGVycyBhbmQgZGlnZXN0cyB1c2VkIGRpcmVjdGx5IGFuZCBp bmRpcmVjdGx5IGJ5Ci0rU1NML1RMUy4KLSAKLSA9aGVhZDEgRVhBTVBMRVMKLSAKLSBBIHR5cGlj YWwgVExTL1NTTCBhcHBsaWNhdGlvbiB3aWxsIHN0YXJ0IHdpdGggdGhlIGxpYnJhcnkgaW5pdGlh bGl6YXRpb24sCi0td2lsbCBwcm92aWRlIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VzIGFuZCB3aWxs IHNlZWQgdGhlIFBSTkcuCi0rYW5kIHByb3ZpZGUgcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMuCi0g Ci0gIFNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsgICAgICAgICAgICAgICAgLyogcmVhZGFibGUg ZXJyb3IgbWVzc2FnZXMgKi8KLSAgU1NMX2xpYnJhcnlfaW5pdCgpOyAgICAgICAgICAgICAgICAg ICAgICAvKiBpbml0aWFsaXplIGxpYnJhcnkgKi8KLS0gYWN0aW9uc190b19zZWVkX1BSTkcoKTsg Ci0gCi0gPWhlYWQxIFJFVFVSTiBWQUxVRVMKLSAKLSBTU0xfbGlicmFyeV9pbml0KCkgYWx3YXlz IHJldHVybnMgIjEiLCBzbyBpdCBpcyBzYWZlIHRvIGRpc2NhcmQgdGhlIHJldHVybgotIHZhbHVl LgotIAotKz1oZWFkMSBOT1RFUwotKwotK09wZW5TU0wgMC45LjhvIGFuZCAxLjAuMGEgYW5kIGxh dGVyIGFkZGVkIFNIQTIgYWxnb3JpdGhtcyB0byBTU0xfbGlicmFyeV9pbml0KCkuCi0rQXBwbGlj YXRpb25zIHdoaWNoIG5lZWQgdG8gdXNlIFNIQTIgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBPcGVu U1NMIHNob3VsZCBjYWxsCi0rT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKSBhcyB3ZWxsLgot KwotID1oZWFkMSBTRUUgQUxTTwotIAotIEw8c3NsKDMpfHNzbCgzKT4sIEw8U1NMX2xvYWRfZXJy b3Jfc3RyaW5ncygzKXxTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKDMpPiwKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvc3NsL3NzbF9hbGdzLmMuc2hhMjU2IG9wZW5zc2wtMS4wLjAvc3NsL3NzbF9hbGdz LmMKLS0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfYWxncy5jLnNoYTI1NgkyMDEwLTA0LTA2IDEy OjUyOjM4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvc3NsL3NzbF9hbGdzLmMJ MjAxMC0wNC0wOSAxNjozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTEsNiArMTExLDE0IEBA IGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCi0gCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3No YTEsInNzbDMtc2hhMSIpOwotIAlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVu Y3J5cHRpb24sU05fc2hhMVdpdGhSU0EpOwotICNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19T SEEyNTYKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdlc3Qo RVZQX3NoYTI1NigpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rCUVW UF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIo KSk7Ci0rI2VuZGlmCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChP UEVOU1NMX05PX0RTQSkKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7IC8qIERTQSB3aXRo IHNoYTEgKi8KLSAJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsU05fZHNhV2l0 aFNIQTFfMik7Ci1AQCAtMTQ4LDYgKzE1NiwxNCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lk KQotIAlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKLSAJRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsK LSAjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0rCUVWUF9hZGRfZGlnZXN0KEVW UF9zaGEyMjQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0rI2VuZGlmCi0r I2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkp OwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyNlbmRpZgotICNpZiAhZGVmaW5l ZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCi0gCUVWUF9hZGRf ZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0aCBzaGExICovCi0gCUVWUF9hZGRfZGlnZXN0 X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOwoKZGlmZiAtLWdpdCBhL29w ZW5zc2wtMS4wLjAtbmFtZS1oYXNoLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1uYW1lLWhhc2gucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOThjMGEuLjAwMDAwMDAKLS0tIGEv b3BlbnNzbC0xLjAuMC1uYW1lLWhhc2gucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCww IEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by94NTA5L3g1MDlfY21wLmMubmFtZS1o YXNoIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3g1MDkveDUwOV9jbXAuYwotLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3g1MDkveDUwOV9jbXAuYy5uYW1lLWhhc2gJMjAxMC0wMS0xMiAxODoyNzoxMC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by94NTA5L3g1MDlfY21wLmMJ MjAxMC0wNC0wNiAxNjo0NDo1Mi4wMDAwMDAwMDAgKzAyMDAKLUBAIC0yMzYsMTAgKzIzNiwxNyBA QCB1bnNpZ25lZCBsb25nIFg1MDlfTkFNRV9oYXNoX29sZChYNTA5X05BCi0gCXsKLSAJdW5zaWdu ZWQgbG9uZyByZXQ9MDsKLSAJdW5zaWduZWQgY2hhciBtZFsxNl07Ci0rCUVWUF9NRF9DVFggY3R4 OyAKLSAKLSAJLyogTWFrZSBzdXJlIFg1MDlfTkFNRSBzdHJ1Y3R1cmUgY29udGFpbnMgdmFsaWQg Y2FjaGVkIGVuY29kaW5nICovCi0gCWkyZF9YNTA5X05BTUUoeCxOVUxMKTsKLS0JRVZQX0RpZ2Vz dCh4LT5ieXRlcy0+ZGF0YSwgeC0+Ynl0ZXMtPmxlbmd0aCwgbWQsIE5VTEwsIEVWUF9tZDUoKSwg TlVMTCk7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsJRVZQX01EX0NUWF9zZXRfZmxh Z3MoJmN0eCxFVlBfTURfQ1RYX0ZMQUdfT05FU0hPVCB8IEVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVyk7Ci0rICAgICAgICBFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBFVlBfbWQ1KCksIE5V TEwpCi0rCQkmJiBFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIHgtPmJ5dGVzLT5kYXRhLCB4LT5ieXRl cy0+bGVuZ3RoKQotKwkJJiYgRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG1kLCBOVUxMKTsKLSsJ RVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwotIAotIAlyZXQ9KAkoKHVuc2lnbmVkIGxvbmcpbWRb MF0gICAgICl8KCh1bnNpZ25lZCBsb25nKW1kWzFdPDw4TCl8Ci0gCQkoKHVuc2lnbmVkIGxvbmcp bWRbMl08PDE2TCl8KCh1bnNpZ25lZCBsb25nKW1kWzNdPDwyNEwpCgpkaWZmIC0tZ2l0IGEvb3Bl bnNzbC0xLjAuMC12ZXJzaW9uLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC12ZXJzaW9uLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGFlYTZhLi4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjAtdmVyc2lvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL29wZW5zc2x2LmgudmVyc2lvbiBvcGVuc3NsLTEu MC4wL2NyeXB0by9vcGVuc3Nsdi5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vb3BlbnNzbHYu aC52ZXJzaW9uCTIwMTAtMDMtMzAgMTA6NTk6MjYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vb3BlbnNzbHYuaAkyMDEwLTAzLTMwIDExOjAwOjUyLjAwMDAwMDAwMCAr MDIwMAotQEAgLTI1LDcgKzI1LDggQEAKLSAgKiAoUHJpb3IgdG8gMC45LjVhIGJldGExLCBhIGRp ZmZlcmVudCBzY2hlbWUgd2FzIHVzZWQ6IE1NTk5GRlJCQiBmb3IKLSAgKiAgbWFqb3IgbWlub3Ig Zml4IGZpbmFsIHBhdGNoL2JldGEpCi0gICovCi0tI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVN QkVSCTB4MTAwMDAwMGZMCi0rLyogd2UgaGF2ZSB0byBrZWVwIHRoZSB2ZXJzaW9uIG51bWJlciB0 byBub3QgYnJlYWsgdGhlIGFiaSAqLwotKyNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkw eDEwMDAwMDAzTAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjZGVmaW5lIE9QRU5TU0xfVkVSU0lP Tl9URVhUCSJPcGVuU1NMIDEuMC4wLWZpcHMgMjkgTWFyIDIwMTAiCi0gI2Vsc2UKCmRpZmYgLS1n aXQgYS9vcGVuc3NsLTEuMC4wYS1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMGEtZmlwcy5wYXRj aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFlNTA3Ci0tLSAvZGV2L251 bGwKKysrIGIvb3BlbnNzbC0xLjAuMGEtZmlwcy5wYXRjaApAQCAtMCwwICsxLDEyMTY0IEBACitk aWZmIC11cCBvcGVuc3NsLTEuMC4wYS9Db25maWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4wYS9Db25m aWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4wYS9Db25maWd1cmUuZmlwcwkyMDEwLTA2LTA0IDEyOjI1 OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL0NvbmZpZ3VyZQkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTY2MCw2ICs2NjAsNyBAQCBteSAkY21s bF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sCisgbXkgJHByb2Nlc3Nvcj0iIjsKKyBt eSAkZGVmYXVsdF9yYW5saWI7CisgbXkgJHBlcmw7CisrbXkgJGZpcHM9MDsKKyAKKyAKKyAjIEFs bCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKFJDNSB3YXMgZW5hYmxl ZCBiZWZvcmUgMC45LjgpOgorQEAgLTgwNiw2ICs4MDcsMTAgQEAgUFJPQ0VTU19BUkdTOgorIAkJ CX0KKyAJCWVsc2lmICgvXjM4NiQvKQorIAkJCXsgJHByb2Nlc3Nvcj0zODY7IH0KKysJCWVsc2lm ICgvXmZpcHMkLykKKysJCQl7CisrCQkJJGZpcHM9MTsKKysJCSAgICAgICAgfQorIAkJZWxzaWYg KC9ecnNhcmVmJC8pCisgCQkJeworIAkJCSMgTm8gUlNBcmVmIHN1cHBvcnQgYW55IG1vcmUgc2lu Y2UgaXQncyBub3QgbmVlZGVkLgorQEAgLTEzNjgsNiArMTM3MywxMSBAQCAkY2ZsYWdzLj0iIC1E T1BFTlNTTF9JQTMyX1NTRTIiIGlmICghJG5vCisgCisgJGNmbGFncy49IiAtRE9QRU5TU0xfQk5f QVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8tbW9udC8pOworIAorK2lmICgkZmlwcykKKysJewor Kwkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CisrCX0K KysKKyAkY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8p OworICRkZXNfb2JqPSRkZXNfZW5jCXVubGVzcyAoJGRlc19vYmogPX4gL1wubyQvKTsKKyAkYmZf b2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29iaiA9fiAvXC5vJC8pOworQEAgLTE1MzUsNiArMTU0 NSwxMCBAQCB3aGlsZSAoPElOPikKKyAJcy9eTElCS1JCNT0uKi9MSUJLUkI1PSR3aXRoYXJnc3si a3JiNS1saWIifS87CisgCXMvXkxJQlpMSUI9LiovTElCWkxJQj0kd2l0aGFyZ3N7InpsaWItbGli In0vOworIAlzL15aTElCX0lOQ0xVREU9LiovWkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1p bmNsdWRlIn0vOworKwlpZiAoJGZpcHMpCisrCQl7CisrCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsK KysJCX0KKyAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87 CisgCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOworIAlzL15TSEFS RURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8g aWYgKCEkbm9fc2hhcmVkKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9iZi9iZl9z a2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYmYvYmZfc2tleS5jCistLS0gb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2JmL2JmX3NrZXkuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTc6NTIuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JmL2JmX3NrZXkuYwkyMDEw LTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDEwICs1OSwxNSBAQAorICNp bmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9ibG93ZmlzaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1 ZGUgImJmX2xvY2wuaCIKKyAjaW5jbHVkZSAiYmZfcGkuaCIKKyAKKy12b2lkIEJGX3NldF9rZXko QkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrRklQU19O T05fRklQU19WQ0lQSEVSX0luaXQoQkYpCisgCXsKKyAJaW50IGk7CisgCUJGX0xPTkcgKnAscmks aW5bMl07CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYmYvYmxvd2Zpc2guaC5maXBz IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9iZi9ibG93ZmlzaC5oCistLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9iZi9ibG93ZmlzaC5oCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTA0LDcgKzEwNCw5IEBAIHR5cGVkZWYgc3Ry dWN0IGJmX2tleV9zdAorIAlCRl9MT05HIFNbNCoyNTZdOworIAl9IEJGX0tFWTsKKyAKKy0gCisr I2lmZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lkIHByaXZhdGVfQkZfc2V0X2tleShCRl9LRVkgKmtl eSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisrI2VuZGlmCisgdm9pZCBC Rl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh KTsKKyAKKyB2b2lkIEJGX2VuY3J5cHQoQkZfTE9ORyAqZGF0YSxjb25zdCBCRl9LRVkgKmtleSk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vYm4uaC5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9ibi9ibi5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JuL2JuLmguZmlw cwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9ibi9ibi5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAt NTQwLDYgKzU0MCwxNyBAQCBpbnQJQk5faXNfcHJpbWVfZXgoY29uc3QgQklHTlVNICpwLGludCBu CisgaW50CUJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KGNvbnN0IEJJR05VTSAqcCxpbnQgbmNoZWNr cywgQk5fQ1RYICpjdHgsCisgCQlpbnQgZG9fdHJpYWxfZGl2aXNpb24sIEJOX0dFTkNCICpjYik7 CisgCisraW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGlu dCBuYml0cywgQk5fQ1RYICpjdHgpOworKworK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChC SUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJY29uc3QgQklHTlVNICpYcCwg Y29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAq ZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYik7CisraW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJp bWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorKwkJCUJJR05VTSAqWHAx LCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAq ZSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0IgKmNiKTsKKysKKyBCTl9NT05UX0NUWCAqQk5f TU9OVF9DVFhfbmV3KHZvaWQgKTsKKyB2b2lkIEJOX01PTlRfQ1RYX2luaXQoQk5fTU9OVF9DVFgg KmN0eCk7CisgaW50IEJOX21vZF9tdWxfbW9udGdvbWVyeShCSUdOVU0gKnIsY29uc3QgQklHTlVN ICphLGNvbnN0IEJJR05VTSAqYiwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ibi9i bl94OTMxcC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JuL2JuX3g5MzFwLmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vYm5feDkzMXAuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JuL2JuX3g5MzFw LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjcyIEBA CisrLyogYm5feDkzMXAuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAo c3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysg Ki8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBp bmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAq IChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3Jp dHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLwor KworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrLyog WDkuMzEgcm91dGluZXMgZm9yIHByaW1lIGRlcml2YXRpb24gKi8KKysKKysvKiBYOS4zMSBwcmlt ZSBkZXJpdmF0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQorKyAq IChwMSwgcDIsIHExLCBxMikgZnJvbSBhIHBhcmFtZXRlciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vz c2l2ZSBvZGQKKysgKiBpbnRlZ2Vycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJuX3g5MzFfZGVy aXZlX3BpKEJJR05VTSAqcGksIGNvbnN0IEJJR05VTSAqWHBpLCBCTl9DVFggKmN0eCwKKysJCQlC Tl9HRU5DQiAqY2IpCisrCXsKKysJaW50IGkgPSAwOworKwlpZiAoIUJOX2NvcHkocGksIFhwaSkp CisrCQlyZXR1cm4gMDsKKysJaWYgKCFCTl9pc19vZGQocGkpICYmICFCTl9hZGRfd29yZChwaSwg MSkpCisrCQlyZXR1cm4gMDsKKysJZm9yKDs7KQorKwkJeworKwkJaSsrOworKwkJQk5fR0VOQ0Jf Y2FsbChjYiwgMCwgaSk7CisrCQkvKiBOQiAyNyBNUiBpcyBzcGVjaWZpY2VkIGluIFg5LjMxICov CisrCQlpZiAoQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKKysJ CQlicmVhazsKKysJCWlmICghQk5fYWRkX3dvcmQocGksIDIpKQorKwkJCXJldHVybiAwOworKwkJ fQorKwlCTl9HRU5DQl9jYWxsKGNiLCAyLCBpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBU aGlzIGlzIHRoZSBtYWluIFg5LjMxIHByaW1lIGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFy YW1ldGVycworKyAqIFhwMSwgWHAyIGFuZCBYcCBkZXJpdmUgdGhlIHByaW1lIHAuIElmIHRoZSBw YXJhbWV0ZXJzIHAxIG9yIHAyIGFyZQorKyAqIG5vdCBOVUxMIHRoZXkgd2lsbCBiZSByZXR1cm5l ZCB0b286IHRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nLgorKyAqLworKworK2ludCBCTl9YOTMx X2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJ Y29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAor KwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYikKKysJeworKwlp bnQgcmV0ID0gMDsKKysKKysJQklHTlVNICp0LCAqcDFwMiwgKnBtMTsKKysKKysJLyogT25seSBl dmVuIGUgc3VwcG9ydGVkICovCisrCWlmICghQk5faXNfb2RkKGUpKQorKwkJcmV0dXJuIDA7Cisr CisrCUJOX0NUWF9zdGFydChjdHgpOworKwlpZiAoIXAxKQorKwkJcDEgPSBCTl9DVFhfZ2V0KGN0 eCk7CisrCisrCWlmICghcDIpCisrCQlwMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJdCA9IEJO X0NUWF9nZXQoY3R4KTsKKysKKysJcDFwMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJcG0xID0g Qk5fQ1RYX2dldChjdHgpOworKworKwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0 eCwgY2IpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhw MiwgY3R4LCBjYikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAy LCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJw ICovCisrCisrCWlmICghQk5fbW9kX2ludmVyc2UocCwgcDIsIHAxLCBjdHgpKQorKwkJZ290byBl cnI7CisrCisrCWlmICghQk5fbXVsKHAsIHAsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisr CWlmICghQk5fbW9kX2ludmVyc2UodCwgcDEsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisr CWlmICghQk5fbXVsKHQsIHQsIHAxLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5f c3ViKHAsIHAsIHQpKQorKwkJZ290byBlcnI7CisrCisrCWlmIChwLT5uZWcgJiYgIUJOX2FkZChw LCBwLCBwMXAyKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBwIG5vdyBlcXVhbHMgUnAgKi8KKysK KysJaWYgKCFCTl9tb2Rfc3ViKHAsIHAsIFhwLCBwMXAyLCBjdHgpKQorKwkJZ290byBlcnI7Cisr CisrCWlmICghQk5fYWRkKHAsIHAsIFhwKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBwIG5vdyBl cXVhbHMgWXAwICovCisrCisrCWZvciAoOzspCisrCQl7CisrCQlpbnQgaSA9IDE7CisrCQlCTl9H RU5DQl9jYWxsKGNiLCAwLCBpKyspOworKwkJaWYgKCFCTl9jb3B5KHBtMSwgcCkpCisrCQkJZ290 byBlcnI7CisrCQlpZiAoIUJOX3N1Yl93b3JkKHBtMSwgMSkpCisrCQkJZ290byBlcnI7CisrCQlp ZiAoIUJOX2djZCh0LCBwbTEsIGUsIGN0eCkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoQk5faXNf b25lKHQpCisrCQkvKiBYOS4zMSBzcGVjaWZpZXMgOCBNUiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFu eSBwcmltZSB0ZXN0CisrCQkgKiBvZmZlcmluZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVz IDUwIE1SIGlzIGNvbnNpZGVyYWJseSAKKysJCSAqIGJldHRlci4KKysJCSAqLworKwkJCSYmIEJO X2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIDUwLCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsKKysJ CWlmICghQk5fYWRkKHAsIHAsIHAxcDIpKQorKwkJCWdvdG8gZXJyOworKwkJfQorKworKwlCTl9H RU5DQl9jYWxsKGNiLCAzLCAwKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKworKwlCTl9D VFhfZW5kKGN0eCk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKiBHZW5lcmF0ZSBwYWly IG9mIHBhcmFtdGVycyBYcCwgWHEgZm9yIFg5LjMxIHByaW1lIGdlbmVyYXRpb24uCisrICogTm90 ZTogbmJpdHMgcGFyYW10ZXIgaXMgc3VtIG9mIG51bWJlciBvZiBiaXRzIGluIGJvdGguCisrICov CisrCisraW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGlu dCBuYml0cywgQk5fQ1RYICpjdHgpCisrCXsKKysJQklHTlVNICp0OworKwlpbnQgaTsKKysJLyog TnVtYmVyIG9mIGJpdHMgZm9yIGVhY2ggcHJpbWUgaXMgb2YgdGhlIGZvcm0KKysJICogNTEyKzEy OHMgZm9yIHMgPSAwLCAxLCAuLi4KKysJICovCisrCWlmICgobmJpdHMgPCAxMDI0KSB8fCAobmJp dHMgJiAweGZmKSkKKysJCXJldHVybiAwOworKwluYml0cyA+Pj0gMTsKKysJLyogVGhlIHJhbmRv bSB2YWx1ZSBYcCBtdXN0IGJlIGJldHdlZW4gc3FydCgyKSAqIDJeKG5iaXRzLTEpIGFuZAorKwkg KiAyXm5iaXRzIC0gMS4gQnkgc2V0dGluZyB0aGUgdG9wIHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0 IHRoZSBsb3dlcgorKwkgKiBib3VuZCBpcyBleGNlZWRlZC4KKysJICovCisrCWlmICghQk5fcmFu ZChYcCwgbmJpdHMsIDEsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgp OworKwl0ID0gQk5fQ1RYX2dldChjdHgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsr KQorKwkJeworKwkJaWYgKCFCTl9yYW5kKFhxLCBuYml0cywgMSwgMCkpCisrCQkJcmV0dXJuIDA7 CisrCQkvKiBDaGVjayB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSAqLworKwkJQk5f c3ViKHQsIFhwLCBYcSk7CisrCQlpZiAoQk5fbnVtX2JpdHModCkgPiAobmJpdHMgLSAxMDApKQor KwkJCWJyZWFrOworKwkJfQorKworKwlCTl9DVFhfZW5kKGN0eCk7CisrCisrCWlmIChpIDwgMTAw MCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQorKworKy8qIEdlbmVyYXRl IHByaW1lcyB1c2luZyBYOS4zMSBhbGdvcml0aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBY cDEKKysgKiBhbmQgWHAyIG9ubHkgJ3AnIG5lZWRzIHRvIGJlIG5vbi1OVUxMLiBJZiBhbnkgb2Yg dGhlIG90aGVycyBhcmUgbm90IE5VTEwKKysgKiB0aGUgcmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwg YmUgc3RvcmVkIGluIGl0LgorKyAqCisrICogRHVlIHRvIHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8 ID4gMl4obmJpdHMgLSAxMDApIG11c3QgYmUgc2F0aXNmaWVkIFhwIGFuZCBYcQorKyAqIGFyZSBn ZW5lcmF0ZWQgdXNpbmcgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1 dC4KKysgKi8KKysKKytpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJ R05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAorKwkJ CWNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKKysJ CQlCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCUJOX0NUWF9zdGFydChj dHgpOworKwlpZiAoIVhwMSkKKysJCVhwMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJaWYgKCFYcDIp CisrCQlYcDIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmICghQk5fcmFuZChYcDEsIDEwMSwg MCwgMCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQor KwkJZ290byBlcnJvcjsKKysJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChwLCBwMSwgcDIs IFhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwlyZXQgPSAx OworKworKwllcnJvcjoKKysJQk5fQ1RYX2VuZChjdHgpOworKworKwlyZXR1cm4gcmV0OworKwor Kwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vYm4vTWFrZWZpbGUuZmlwcwkyMDA4LTExLTEyIDA5OjE5OjAyLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ibi9NYWtlZmlsZQkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDEzICsyNiwxMyBAQCBMSUJTUkM9CWJuX2FkZC5jIGJu X2Rpdi5jIGJuX2V4cC5jIGJuX2xpCisgCWJuX3ByaW50LmMgYm5fcmFuZC5jIGJuX3NoaWZ0LmMg Ym5fd29yZC5jIGJuX2JsaW5kLmMgXAorIAlibl9rcm9uLmMgYm5fc3FydC5jIGJuX2djZC5jIGJu X3ByaW1lLmMgYm5fZXJyLmMgYm5fc3FyLmMgYm5fYXNtLmMgXAorIAlibl9yZWNwLmMgYm5fbW9u dC5jIGJuX21waS5jIGJuX2V4cDIuYyBibl9nZjJtLmMgYm5fbmlzdC5jIFwKKy0JYm5fZGVwci5j IGJuX2NvbnN0LmMKKysJYm5fZGVwci5jIGJuX2NvbnN0LmMgYm5feDkzMXAuYworIAorIExJQk9C Sj0JYm5fYWRkLm8gYm5fZGl2Lm8gYm5fZXhwLm8gYm5fbGliLm8gYm5fY3R4Lm8gYm5fbXVsLm8g Ym5fbW9kLm8gXAorIAlibl9wcmludC5vIGJuX3JhbmQubyBibl9zaGlmdC5vIGJuX3dvcmQubyBi bl9ibGluZC5vIFwKKyAJYm5fa3Jvbi5vIGJuX3NxcnQubyBibl9nY2QubyBibl9wcmltZS5vIGJu X2Vyci5vIGJuX3Nxci5vICQoQk5fQVNNKSBcCisgCWJuX3JlY3AubyBibl9tb250Lm8gYm5fbXBp Lm8gYm5fZXhwMi5vIGJuX2dmMm0ubyBibl9uaXN0Lm8gXAorLQlibl9kZXByLm8gYm5fY29uc3Qu bworKwlibl9kZXByLm8gYm5fY29uc3QubyBibl94OTMxcC5vCisgCisgU1JDPSAkKExJQlNSQykK KyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYu cGwuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBzCTIw MDktMDQtMDYgMTY6MjU6MDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAw MCArMDIwMAorQEAgLTcyMiwxMiArNzIyLDE1IEBAIG15ICRiaWFzPWludChAVFswXSk/c2hpZnQo QFQpOjA7CisgfQorICZmdW5jdGlvbl9lbmQoIkNhbWVsbGlhX0VrZXlnZW4iKTsKKyAKKyskc2V0 a2V5ZnVuYyA9ICJDYW1lbGxpYV9zZXRfa2V5IjsKKyskc2V0a2V5ZnVuYyA9ICJwcml2YXRlX0Nh bWVsbGlhX3NldF9rZXkiIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBpZiAoJE9QRU5TU0wp IHsKKyAjIGludCBDYW1lbGxpYV9zZXRfa2V5ICgKKyAjCQljb25zdCB1bnNpZ25lZCBjaGFyICp1 c2VyS2V5LAorICMJCWludCBiaXRzLAorICMJCUNBTUVMTElBX0tFWSAqa2V5KQorLSZmdW5jdGlv bl9iZWdpbl9CKCJDYW1lbGxpYV9zZXRfa2V5Iik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoJHNldGtl eWZ1bmMpOworIAkmcHVzaAkoImVieCIpOworIAkmbW92CSgiZWN4Iiwmd3BhcmFtKDApKTsJIyBw dWxsIGFyZ3VtZW50cworIAkmbW92CSgiZWJ4Iiwmd3BhcmFtKDEpKTsKK0BAIC03NjAsNyArNzYz LDcgQEAgaWYgKCRPUEVOU1NMKSB7CisgJnNldF9sYWJlbCgiZG9uZSIsNCk7CisgCSZwb3AJKCJl YngiKTsKKyAJJnJldAkoKTsKKy0mZnVuY3Rpb25fZW5kX0IoIkNhbWVsbGlhX3NldF9rZXkiKTsK KysmZnVuY3Rpb25fZW5kX0IoJHNldGtleWZ1bmMpOworIH0KKyAKKyBAU0JPWD0oCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaC5maXBzIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtODgsNiArODgsMTEgQEAgc3Ry dWN0IGNhbWVsbGlhX2tleV9zdCAKKyAJfTsKKyB0eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlf c3QgQ0FNRUxMSUFfS0VZOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9D YW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBi aXRzLAorKwlDQU1FTExJQV9LRVkgKmtleSk7CisrI2VuZGlmCisrCisgaW50IENhbWVsbGlhX3Nl dF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgCUNB TUVMTElBX0tFWSAqa2V5KTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1l bGxpYS9jbWxsX2ZibGsuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxs X2ZibGsuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5m aXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCitAQCAtMCwwICsxLDY4IEBACisrLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlh X21pc2MuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLworKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICovCisrIAorKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KKysjaW5jbHVkZSAi Y21sbF9sb2NsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisraW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq dXNlcktleSwgY29uc3QgaW50IGJpdHMsCisrCUNBTUVMTElBX0tFWSAqa2V5KQorKwl7CisrCWlm IChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFEX0FCT1JUKENBTUVMTElBKQorKwlyZXR1cm4gcHJp dmF0ZV9DYW1lbGxpYV9zZXRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisrCX0KKysjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBz IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYworLS0tIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBzCTIwMDgtMTAtMjggMTM6MTM6 NTIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2Nt bGxfbWlzYy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTIsMTEg KzUyLDIwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9jYW1lbGxpYS5oPgorICNpbmNsdWRlICJjbWxsX2xvY2wuaCIKKysjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorIAorIGNvbnN0IGNoYXIgQ0FNRUxMSUFfdmVyc2lvbltdPSJDQU1F TExJQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytp bnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXks IGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9LRVkgKmtleSkKKysjZWxzZQorIGludCBDYW1l bGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRz LAorIAlDQU1FTExJQV9LRVkgKmtleSkKKysjZW5kaWYKKyAJeworIAlpZighdXNlcktleSB8fCAh a2V5KQorIAkJcmV0dXJuIC0xOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVs bGlhL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxl CistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMJMjAwOC0x Mi0yMyAxMjozMzowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v Y2FtZWxsaWEvTWFrZWZpbGUJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BA IC0yMyw5ICsyMyw5IEBAIEFQUFM9CisgCisgTElCPSQoVE9QKS9saWJjcnlwdG8uYQorIExJQlNS Qz1jYW1lbGxpYS5jIGNtbGxfbWlzYy5jIGNtbGxfZWNiLmMgY21sbF9jYmMuYyBjbWxsX29mYi5j IFwKKy0JICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIAorKwkgICBjbWxsX2NmYi5jIGNtbGxfY3Ry LmMgY21sbF9mYmxrLmMKKyAKKy1MSUJPQko9IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2Nm Yi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykKKytMSUJPQko9IGNtbGxfZWNiLm8gY21sbF9vZmIu byBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykgY21sbF9mYmxrLm8KKyAKKyBTUkM9 ICQoTElCU1JDKQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY2FzdC5o LmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY2FzdC5oCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNC4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FzdC9jYXN0LmgJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Myw3ICs4Myw5IEBAIHR5cGVkZWYgc3RydWN0 IGNhc3Rfa2V5X3N0CisgCWludCBzaG9ydF9rZXk7CS8qIFVzZSByZWR1Y2VkIHJvdW5kcyBmb3Ig c2hvcnQga2V5ICovCisgCX0gQ0FTVF9LRVk7CisgCistIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMg Cisrdm9pZCBwcml2YXRlX0NBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lkIENBU1Rfc2V0X2tleShDQVNU X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyB2b2lkIENB U1RfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91 dCwgY29uc3QgQ0FTVF9LRVkgKmtleSwKKyAJCSAgICAgIGludCBlbmMpOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vY2FzdC9jX3NrZXkuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYXN0L2Nfc2tleS5j LmZpcHMJMjAwMC0wNi0wMyAxNjoxMzozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vY2FzdC9jX3NrZXkuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTU3LDYgKzU3LDExIEBACisgICovCisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY2Fz dC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgImNhc3Rf bGNsLmgiCisgI2luY2x1ZGUgImNhc3Rfcy5oIgorIAorQEAgLTcyLDcgKzc3LDcgQEAKKyAjZGVm aW5lIFM2IENBU1RfU190YWJsZTYKKyAjZGVmaW5lIFM3IENBU1RfU190YWJsZTcKKyAKKy12b2lk IENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKQorK0ZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KENBU1QpCisgCXsKKyAJQ0FTVF9M T05HIHhbMTZdOworIAlDQVNUX0xPTkcgelsxNl07CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY3J5cHRvLmgKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jcnlwdG8uaAkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTU0NywxMiArNTQ3LDcwIEBAIHVuc2ln bmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkKKyAjZGVmaW5lIE9QRU5TU0xfaWEz MmNhcCAoKihPUEVOU1NMX2lhMzJjYXBfbG9jKCkpKQorIGludCBPUEVOU1NMX2lzc2VydmljZSh2 b2lkKTsKKyAKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2RlZmluZSBGSVBTX0VSUk9SX0lH Tk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorKwkJYWxnICIgcHJl dmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKKysKKysjZGVm aW5lIEZJUFNfQkFEX0FCT1JUKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwK KysJCSNhbGcgIiBBbGdvcml0aG0gZm9yYmlkZGVuIGluIEZJUFMgbW9kZSIpOworKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCisrI2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBG SVBTX0JBRF9BQk9SVChhbGcpCisrI2Vsc2UKKysjZGVmaW5lIEZJUFNfQkFEX0FMR09SSVRITShh bGcpIFwKKysJeyBcCisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBT X01FVEhPRCk7IFwKKysJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJBbGdvcml0aG09IiwgI2FsZyk7 IFwKKysJcmV0dXJuIDA7IFwKKysJfQorKyNlbmRpZgorKworKy8qIExvdyBsZXZlbCBkaWdlc3Qg QVBJIGJsb2NraW5nIG1hY3JvICovCisrCisrI2RlZmluZSBGSVBTX05PTl9GSVBTX01EX0luaXQo YWxnKSBcCisrCWludCBhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykgXAorKwkJeyBcCisrCQlpZiAo RklQU19tb2RlKCkpIFwKKysJCQlGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBcCisrCQlyZXR1cm4g cHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKysJCX0gXAorKwlpbnQgcHJpdmF0ZV8jI2FsZyMj X0luaXQoYWxnIyNfQ1RYICpjKQorKworKy8qIEZvciBjaXBoZXJzIHRoZSBBUEkgb2Z0ZW4gdmFy aWVzIGZyb20gY2lwaGVyIHRvIGNpcGhlciBhbmQgZWFjaCBuZWVkcyB0bworKyAqIGJlIHRyZWF0 ZWQgYXMgYSBzcGVjaWFsIGNhc2UuIFZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVycyAoQmxvd2Zp c2gsIFJDNCwKKysgKiBDQVNUKSBob3dldmVyIGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIGNhbiB1c2Ug YSBibG9ja2luZyBtYWNyby4KKysgKi8KKysKKysjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfVkNJUEhF Ul9Jbml0KGFsZykgXAorKwl2b2lkIGFsZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBs ZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpIFwKKysJCXsgXAorKwkJaWYgKEZJUFNfbW9k ZSgpKSBcCisrCQkJRklQU19CQURfQUJPUlQoYWxnKSBcCisrCQlwcml2YXRlXyMjYWxnIyNfc2V0 X2tleShrZXksIGxlbiwgZGF0YSk7IFwKKysJCX0gXAorKwl2b2lkIHByaXZhdGVfIyNhbGcjI19z ZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBcCisrCQkJCQljb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhKQorKworKyNlbHNlCisrCisrI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJf SW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKworKyNkZWZpbmUgRklQU19OT05fRklQU19N RF9Jbml0KGFsZykgXAorKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIAorKworKyNlbmRp ZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCisrCisgLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKyAv KiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1r ZXJyLnBsLiBBbnkgY2hhbmdlcworICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3Zl cndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgorICAqLworIHZvaWQgRVJSX2xv YWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7CisgCisrI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkx Cisrdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKKysKKyAvKiBFcnJvciBjb2RlcyBm b3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vZGgvZGhfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhf ZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIyOjI5OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9kaC9kaF9lcnIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAw MCArMDIwMAorQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBESF9zdHJf ZnVuY3RzW109Cisge0VSUl9GVU5DKERIX0ZfQ09NUFVURV9LRVkpLAkiQ09NUFVURV9LRVkifSwK KyB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJESHBhcmFtc19wcmludF9mcCJ9 LAorIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5fR0VO UEFSQU1TIn0sCisre0VSUl9GVU5DKERIX0ZfREhfQ09NUFVURV9LRVkpLAkiREhfY29tcHV0ZV9r ZXkifSwKKyt7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkpLAkiREhfZ2VuZXJhdGVfa2V5 In0sCisge0VSUl9GVU5DKERIX0ZfREhfTkVXX01FVEhPRCksCSJESF9uZXdfbWV0aG9kIn0sCisg e0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BBUkFNX0RFQ09ERSJ9LAorIHtF UlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZfREVDT0RFIn0sCitAQCAtOTQs NiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9yZWFzb25zW109Cisge0VS Ul9SRUFTT04oREhfUl9CTl9FUlJPUikgICAgICAgICAgICAgICAsImJuIGVycm9yIn0sCisge0VS Ul9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAor IHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAgICAgLCJpbnZhbGlkIHB1Ymxp YyBrZXkifSwKKyt7RVJSX1JFQVNPTihESF9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAgICwia2V5 IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFTT04oREhfUl9LRVlTX05PVF9TRVQpICAgICAg ICAgICAsImtleXMgbm90IHNldCJ9LAorIHtFUlJfUkVBU09OKERIX1JfTU9EVUxVU19UT09fTEFS R0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAorIHtFUlJfUkVBU09OKERIX1JfTk9fUEFS QU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9LAorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Ro L2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAw NS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZGgvZGhfZ2VuLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02 NSw2ICs2NSwxMCBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNl bmRpZgorIAorIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwgaW50IHBy aW1lX2xlbiwgaW50IGdlbmVyYXRvciwgQk5fR0VOQ0IgKmNiKTsKKyAKK0BAIC0xMDYsNiArMTEw LDIwIEBAIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwKKyAJaW50IGcs b2s9IC0xOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ aWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0RIX0JV SUxUSU5fR0VOUEFSQU1TLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4g MDsKKysJCX0KKysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RI X0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlESGVycihESF9GX0RIX0JVSUxUSU5f R0VOUEFSQU1TLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0K KysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3Rv IGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2RoL2RoLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kaC9kaC5oCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNzcsNiArNzcsOCBAQAorICMgZGVmaW5lIE9QRU5T U0xfREhfTUFYX01PRFVMVVNfQklUUwkxMDAwMAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNT TF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUgREhfRkxBR19DQUNI RV9NT05UX1AgICAgIDB4MDEKKyAjZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAy IC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERICisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0 aW1lCitAQCAtMjQxLDYgKzI0Myw4IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsK KyAjZGVmaW5lIERIX0ZfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAxMDQKKyAjZGVmaW5lIERIX0Zf UEtFWV9ESF9ERVJJVkUJCQkJIDExMgorICNkZWZpbmUgREhfRl9QS0VZX0RIX0tFWUdFTgkJCQkg MTEzCisrI2RlZmluZSBESF9GX0RIX0NPTVBVVEVfS0VZCQkJCSAxMTQKKysjZGVmaW5lIERIX0Zf REhfR0VORVJBVEVfS0VZCQkJIDExNQorIAorIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyAjZGVmaW5l IERIX1JfQkFEX0dFTkVSQVRPUgkJCQkgMTAxCitAQCAtMjUzLDYgKzI1Nyw3IEBAIHZvaWQgRVJS X2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERIX1JfTk9fUEFSQU1FVEVSU19TRVQJ CQkJIDEwNworICNkZWZpbmUgREhfUl9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKKyAjZGVmaW5l IERIX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQorKyNkZWZpbmUgREhfUl9LRVlf U0laRV9UT09fU01BTEwJCQkJIDExMAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZGgvZGhfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfa2V5 LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjIzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9kaC9kaF9rZXkuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTYxLDYgKzYxLDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3Rh dGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVu c2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOworQEAgLTEw Nyw2ICsxMTAsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQorIAlCTl9NT05U X0NUWCAqbW9udD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2Jp dHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJ REhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJl dHVybiAwOworKwkJfQorKyNlbmRpZgorKworIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChj dHggPT0gTlVMTCkgZ290byBlcnI7CisgCitAQCAtMTg0LDYgKzE5NSwxMyBAQCBzdGF0aWMgaW50 IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCisgCQlESGVycihESF9GX0NPTVBVVEVfS0VZ LERIX1JfTU9EVUxVU19UT09fTEFSR0UpOworIAkJZ290byBlcnI7CisgCQl9CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9Q RU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfQ09N UFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQor KyNlbmRpZgorIAorIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290 byBlcnI7CitAQCAtMjUxLDYgKzI2OSw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25z dCBESCAqZGgsIEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQorIAl7CisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRoLT5m bGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2Ff Z2VuLmMuZmlwcwkyMDA4LTEyLTI2IDE4OjE3OjIxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCitAQCAtNzcsOCArNzcsMTIgQEAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2RzYS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVk ZSA8b3BlbnNzbC9zaGEuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorICNpbmNsdWRlICJkc2FfbG9jbC5oIgorIAorIGludCBEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMsCitAQCAtMTI2LDYgKzEz MCwyMSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCUJOX0NU WCAqY3R4PU5VTEw7CisgCXVuc2lnbmVkIGludCBoPTI7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihG SVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sCisrCQkgICAgRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKKysJICAgIGdvdG8gZXJyOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkg JiYgKGJpdHMgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJ RFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChxc2l6ZSAhPSBTSEFf RElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgorIAkgICAg cXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCisgCQkvKiBpbnZhbGlkIHEgc2l6ZSAqLwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9kc2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYS5o LmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vZHNhL2RzYS5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw CitAQCAtODgsNiArODgsOCBAQAorICMgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJ VFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVM VVNfQklUUyAxMDI0CisrCisgI2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQorICNk ZWZpbmUgRFNBX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAu OS43aDsgdGhlIGJ1aWx0LWluIERTQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKK0BA IC05Nyw2ICs5OSwyMSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIGJlIHVzZWQgZm9yIGFsbCBleHBvbmVudHMuCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgCisrLyogSWYgdGhpcyBmbGFnIGlzIHNl dCB0aGUgRFNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKKysgKiBp biBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4g SWYgYW4KKysgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMg aXQgaXMgaXRzIHJlcG9zaWJpbGl0eQorKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBs aWFudC4KKysgKi8KKysKKysjZGVmaW5lIERTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCisr CisrLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxl ZCBpbiBGSVBTIG1vZGUgYXJlCisrICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0 aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKKysgKiB1c2FnZSBpcyBjb21w bGlhbnQuCisrICovCisrCisrI2RlZmluZSBEU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQw MAorKworICNpZmRlZiAgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC0y NzAsOCArMjg3LDExIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmlu ZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEwNAorICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BS SU5UCQkJCSAxMDAKKyAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEKKysj ZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQKKysjZGVmaW5lIERTQV9GX0RT QV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMworICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04JCQkJ IDExMgorICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCisrI2RlZmluZSBEU0Ff Rl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAxMjUKKyAjZGVmaW5lIERTQV9GX0RTQV9ORVdf TUVUSE9ECQkJCSAxMDMKKyAjZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQor ICNkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UX0ZQCQkJCSAxMDUKK0BAIC0yOTYsOSArMzE2LDEyIEBA IHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBEU0FfUl9EQVRBX1RP T19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAKKyAjZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJ CQkgMTA0CisgI2RlZmluZSBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFCQkJIDEwNgorKyNkZWZp bmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDExMAorICNkZWZpbmUgRFNBX1JfTUlTU0lO R19QQVJBTUVURVJTCQkJIDEwMQorICNkZWZpbmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJ IDEwMworKyNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMTEKKyAjZGVmaW5lIERT QV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKKysjZGVmaW5lIERTQV9SX09QRVJBVElPTl9O T1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDExMgorICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VO Q09ESU5HX0VSUk9SCQkJIDEwNQorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2RzYS9kc2Ffa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9rZXku Yy5maXBzCTIwMDctMDMtMjggMDI6MTU6MjUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKK0BAIC02Myw5ICs2Myw1NSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1 ZGUgImZpcHNfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAq ZHNhKTsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGludCBmaXBzX2RzYV9w YWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQp CisrCXsKKysJZmlwc19kc2FfcGFpcndpc2VfZmFpbCA9IDE7CisrCX0KKysKKytpbnQgZmlwc19j aGVja19kc2EoRFNBICpkc2EpCisrCXsKKysJRVZQX1BLRVkgKnBrOworKwl1bnNpZ25lZCBjaGFy IHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKKysJaW50IHJldCA9IDA7CisrCisr ICAgIAlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisr CUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQkJCU5VTEwsIDAsIEVWUF9zaGExKCksIDAsIE5VTEwp KQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrZXJyOgorKwlpZiAocmV0ID09IDAp CisrCQl7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlp ZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNl bmRpZgorKworIGludCBEU0FfZ2VuZXJhdGVfa2V5KERTQSAqZHNhKQorIAl7CisgCWlmKGRzYS0+ bWV0aC0+ZHNhX2tleWdlbikKK0BAIC03OSw2ICsxMjUsMTQgQEAgc3RhdGljIGludCBkc2FfYnVp bHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCUJJR05VTSAqcHVi X2tleT1OVUxMLCpwcml2X2tleT1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYg KEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlH RU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5k aWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAKKyAJ aWYgKGRzYS0+cHJpdl9rZXkgPT0gTlVMTCkKK0BAIC0xMTcsNiArMTcxLDE1IEBAIHN0YXRpYyBp bnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQorIAorIAlkc2EtPnByaXZfa2V5PXByaXZf a2V5OworIAlkc2EtPnB1Yl9rZXk9cHViX2tleTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlm IChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBzX2RzYV9wYWlyd2lzZV9mYWlsKQorKwkJ CUJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7CisrCQlpZighZmlwc19jaGVja19kc2EoZHNh KSkKKysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKyAJb2s9MTsKKyAKKyBlcnI6Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v ZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI2LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhX29zc2wuYwkyMDEwLTA2LTA0IDEyOjI1 OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTY1LDYgKzY1LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNz bC9kc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv YXNuMS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisgCisgc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Cisgc3RhdGljIGludCBkc2Ffc2lnbl9z ZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipy cCk7CitAQCAtODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2FfbW9kX2V4cCwgKi8KKyBOVUxMLCAv KiBkc2FfYm5fbW9kX2V4cCwgKi8KKyBkc2FfaW5pdCwKKyBkc2FfZmluaXNoLAorLTAsCisrRFNB X0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwKKyBOVUxMLAorIE5VTEwKK0BAIC0xMzcsNiArMTQw LDIwIEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24KKyAJaW50IHJl YXNvbj1FUlJfUl9CTl9MSUI7CisgCURTQV9TSUcgKnJldD1OVUxMOworIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJ UFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Cisr CSAgICByZXR1cm4gTlVMTDsKKysJICAgIH0KKysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9u dW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJ CXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxM KTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorKworIAlCTl9pbml0KCZtKTsKKyAJ Qk5faW5pdCgmeHIpOworIAorQEAgLTMxMiw2ICszMjksMjAgQEAgc3RhdGljIGludCBkc2FfZG9f dmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAorIAkJcmV0dXJuIC0xOworIAkJfQorIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAg IEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVE KTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChC Tl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK KysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOworKwkJcmV0dXJuIC0xOworKwkJfQorKyNlbmRpZgorKworIAlpID0gQk5fbnVtX2Jp dHMoZHNhLT5xKTsKKyAJLyogZmlwcyAxODYtMyBhbGxvd3Mgb25seSBkaWZmZXJlbnQgc2l6ZXMg Zm9yIHEgKi8KKyAJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0ICYmIGkgIT0gMjU2KQorQEAgLTQw Myw2ICs0MzQsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgCisg Cisgc3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRzYS0+ZmxhZ3N8PURTQV9G TEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Vyci9l cnJfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIw MDktMDgtMDkgMTY6NTg6MDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2Vyci9lcnJfYWxsLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BA IC05Niw2ICs5Niw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb2NzcC5oPgorICNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3RzLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5T U0xfTk9fQ01TCisgI2luY2x1ZGUgPG9wZW5zc2wvY21zLmg+CisgI2VuZGlmCitAQCAtMTQ5LDYg KzE1Miw5IEBAIHZvaWQgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3Modm9pZCkKKyAjZW5kaWYKKyAJ RVJSX2xvYWRfT0NTUF9zdHJpbmdzKCk7CisgCUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCUVSUl9sb2FkX0ZJUFNfc3RyaW5ncygpOworKyNlbmRpZgorICNp Zm5kZWYgT1BFTlNTTF9OT19DTVMKKyAJRVJSX2xvYWRfQ01TX3N0cmluZ3MoKTsKKyAjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZXZwL2RpZ2VzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2 cC9kaWdlc3QuYy5maXBzCTIwMTAtMDMtMDUgMTQ6MzM6NDMuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9kaWdlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorQEAgLTExNiw2ICsxMTYsNyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKKyAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAi ZXZwX2xvY2wuaCIKKyAKKyB2b2lkIEVWUF9NRF9DVFhfaW5pdChFVlBfTURfQ1RYICpjdHgpCisg CXsKK0BAIC0xMzgsOSArMTM5LDUwIEBAIGludCBFVlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpj dHgsIGNvbnMKKyAJcmV0dXJuIEVWUF9EaWdlc3RJbml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7Cisg CX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2Ug aXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxn b3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0 YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAqY3R4KQorKwl7IEZJUFNfRVJST1JfSUdOT1JF RCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShF VlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxzaXplX3QgY291bnQpCisrCXsgRklQU19F UlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50 IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5zaWduZWQgY2hhciAqbWQpCisrCXsgRklQU19F UlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25z dCBFVlBfTUQgYmFkX21kID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5p dCwKKysJYmFkX3VwZGF0ZSwKKysJYmFkX2ZpbmFsLAorKwlOVUxMLAorKwlOVUxMLAorKwlOVUxM LAorKwkwLAorKwl7MCwwLDAsMH0sCisrCX07CisrCisrI2VuZGlmCisrCisgaW50IEVWUF9EaWdl c3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmlt cGwpCisgCXsKKyAJRVZQX01EX0NUWF9jbGVhcl9mbGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NM RUFORUQpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VWUF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrCQlyZXR1cm4g MDsKKysJCX0KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRo ZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29u dGV4dHMKKyAJICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBU cnkgdG8gYXZvaWQgcmVsZWFzaW5nCitAQCAtMTk3LDYgKzIzOSwxOCBAQCBpbnQgRVZQX0RpZ2Vz dEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisgI2VuZGlmCisgCWlmIChjdHgtPmRpZ2VzdCAh PSB0eXBlKQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkK KysJCQl7CisrCQkJaWYgKCEodHlwZS0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKSAKKysJCQkg JiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQkJ eworKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZP Ul9GSVBTKTsKKysJCQkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOworKwkJCQlyZXR1cm4gMDsKKysJ CQkJfQorKwkJCX0KKysjZW5kaWYKKyAJCWlmIChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+ Y3R4X3NpemUpCisgCQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CisgCQljdHgtPmRpZ2Vz dD10eXBlOworQEAgLTIzMCw2ICsyODQsOSBAQCBza2lwX3RvX2luaXQ6CisgCisgaW50IEVWUF9E aWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291 bnQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAJcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKKyAJfQorIAor QEAgLTI0Niw2ICszMDMsOSBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0eCwg dW5zCisgaW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCisgCXsKKyAJaW50IHJldDsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAKKyAJT1BFTlNT TF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKKyAJcmV0 PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2Flcy5jCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAwNC0wMS0yOCAyMDow NTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfYWVz LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OSwzMiArNjksMjkg QEAgdHlwZWRlZiBzdHJ1Y3QKKyAKKyBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xMjgsIGtz LCBBRVMsIEVWUF9BRVNfS0VZLAorIAkJICAgICAgIE5JRF9hZXNfMTI4LCAxNiwgMTYsIDE2LCAx MjgsCistCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKKy0JCSAgICAgICBFVlBfQ0lQ SEVSX3NldF9hc24xX2l2LAorLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCistCQkg ICAgICAgTlVMTCkKKysJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEsCisrCQkgICAgICAgYWVzX2luaXRfa2V5LAorKwkJICAgICAgIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpCisgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTkyLCBrcywgQUVT LCBFVlBfQUVTX0tFWSwKKyAJCSAgICAgICBOSURfYWVzXzE5MiwgMTYsIDI0LCAxNiwgMTI4LAor LQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCistCQkgICAgICAgRVZQX0NJUEhFUl9z ZXRfYXNuMV9pdiwKKy0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorLQkJICAgICAg IE5VTEwpCisrCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVM VF9BU04xLAorKwkJICAgICAgIGFlc19pbml0X2tleSwKKysJCSAgICAgICBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMKQorIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzI1Niwga3MsIEFFUywgRVZQ X0FFU19LRVksCisgCQkgICAgICAgTklEX2Flc18yNTYsIDE2LCAzMiwgMTYsIDEyOCwKKy0JCSAg ICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAorLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2Fz bjFfaXYsCistCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKy0JCSAgICAgICBOVUxM KQorLQorLSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRf Q0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQorLQorLUlNUExFTUVO VF9BRVNfQ0ZCUigxMjgsMSkKKy1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEpCistSU1QTEVNRU5U X0FFU19DRkJSKDI1NiwxKQorLQorLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsOCkKKy1JTVBMRU1F TlRfQUVTX0NGQlIoMTkyLDgpCistSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4KQorKwkJICAgICAg IEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAg ICBhZXNfaW5pdF9rZXksCisrCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKysKKysj ZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cyxmbGFncykJSU1QTEVNRU5UX0NG QlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywxNixmbGFncykKKysKKytJTVBM RU1FTlRfQUVTX0NGQlIoMTI4LDEsRVZQX0NJUEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9BRVNf Q0ZCUigxOTIsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDI1Niwx LEVWUF9DSVBIX0ZMQUdfRklQUykKKysKKytJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgsRVZQX0NJ UEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCxFVlBfQ0lQSF9GTEFHX0ZJ UFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4LEVWUF9DSVBIX0ZMQUdfRklQUykKKyAKKyBz dGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICprZXksCisgCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzCTIwMDYtMDgtMzEgMjI6NTY6MjAuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC05Myw3ICs5Myw3IEBAIElNUExFTUVOVF9C TE9DS19DSVBIRVIoY2FtZWxsaWFfMjU2LCBrcywKKyAJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwK KyAJTlVMTCkKKyAKKy0jZGVmaW5lIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKGtzaXplLGNiaXRz KQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBfQ0FNRUxMSUFfS0VZLGtzLGtz aXplLGNiaXRzLDE2KQorKyNkZWZpbmUgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoa3NpemUsY2Jp dHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlhLENhbWVsbGlhLEVWUF9DQU1FTExJQV9LRVksa3Ms a3NpemUsY2JpdHMsMTYsMCkKKyAKKyBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxMjgsMSkKKyBJ TVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxOTIsMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfZGVzMy5j CistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzCTIwMDgtMTItMjkg MTM6MzU6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9l X2RlczMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTIwNiw5ICsy MDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjhfY2lwaGVyKEVWUF9DSVBICisgICAgIH0K KyAKKyBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUs IDgsIDE2LCA4LCA2NCwKKy0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZV9pbml0X2tleSwg TlVMTCwgCistCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCQlFVlBfQ0lQSEVSX2dldF9h c24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBI X0ZMQUdfREVGQVVMVF9BU04xLAorKwkJCWRlc19lZGVfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVM TCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgI2RlZmluZSBkZXNfZWRlM19jZmI2NF9jaXBo ZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKK0BAIC0yMTcsMjEgKzIxNywyMSBAQCBCTE9DS19DSVBI RVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwgCisgI2RlZmluZSBkZXNfZWRlM19lY2JfY2lw aGVyIGRlc19lZGVfZWNiX2NpcGhlcgorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBE RVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCistCQkJRVZQX0NJUEhfUkFO RF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24x X2l2LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxF VlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2Vk ZTNfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisg QkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0 LDgsMSwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEws CistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAg ICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVS X2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsOCwKKy0JCSAg ICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVW UF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisr CQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxM LCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgc3RhdGljIGludCBkZXNfZWRlX2luaXRf a2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZXZwL2VfbnVsbC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX251 bGwuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9lX251bGwuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAw MCArMDIwMAorQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBo ZXI9CisgCXsKKyAJTklEX3VuZGVmLAorIAkxLDAsMCwKKy0JMCwKKysJRVZQX0NJUEhfRkxBR19G SVBTLAorIAludWxsX2luaXRfa2V5LAorIAludWxsX2NpcGhlciwKKyAJTlVMTCwKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9yYzQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9ldnAvZV9yYzQuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9yYzQuYy5m aXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9lX3JjNC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw CitAQCAtNjQsNiArNjQsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRl IDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4KKysjaW5jbHVk ZSAiZXZwX2xvY2wuaCIKKyAKKyAvKiBGSVhNRTogc3VyZWx5IHRoaXMgaXMgYXZhaWxhYmxlIGVs c2V3aGVyZT8gKi8KKyAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2CitkaWZmIC11cCBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvZXZwX2VuYy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBfZW5jLmMu ZmlwcwkyMDEwLTAzLTAxIDAyOjUyOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCitAQCAtNjgsOCArNjgsNTMgQEAKKyAKKyBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVW UCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysv KiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0 byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRo ZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAq Y3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqaXYsIGludCBlbmMpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyBy ZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVu c2lnbmVkIGludCBpbmwpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7 IHJldHVybiAwO30KKysKKysvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQg YWZ0ZXIgZmFpbGVkIGluaXQgKi8KKysKKytzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNp cGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQ X0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCisrCXsgRklQU19FUlJPUl9JR05PUkVE KCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQorK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQ X0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKKysJeyBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29u c3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAor KwkwLAorKwliYWRfaW5pdCwKKysJYmFkX2RvX2NpcGhlciwKKysJTlVMTCwKKysJMCwKKysJYmFk X3NldF9hc24xLAorKwliYWRfZ2V0X2FzbjEsCisrCWJhZF9jdHJsLAorKwlOVUxMCisrCX07Cisr CisrI2VuZGlmCisrCisgdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpj dHgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAkvKiBj dHgtPmNpcGhlcj1OVUxMOyAqLworIAl9CitAQCAtMTAxLDYgKzE0NiwxNCBAQCBpbnQgRVZQX0Np cGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgCQkJZW5jID0gMTsKKyAJCWN0eC0+ZW5j cnlwdCA9IGVuYzsKKyAJCX0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhl cjsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJ TkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9u ICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2 ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0yMTksNiArMjcyLDIyIEBA IHNraXBfdG9faW5pdDoKKyAJCX0KKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJLyog QWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJt aXNzaWJsZS4KKysJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhp cyBwb2ludC4KKysJICovCisrCWlmIChrZXkgJiYgRklQU19tb2RlKCkpCisrCQl7CisrCQlpZiAo IShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrCQkJJiAhKGN0eC0+ ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQl7CisrCQkJRVZQZXJy KEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrCQkJ Y3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9Cisr I2VuZGlmCisrCisgCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxX QVlTX0NBTExfSU5JVCkpIHsKKyAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVu YykpIHJldHVybiAwOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2 cF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2Vyci5jCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcwkyMDEwLTAyLTA3IDE0OjQxOjIz LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2Vyci5j CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTU1LDYgKzE1NSw3IEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9yZWFzb25zW10KKyB7RVJSX1JFQVNPTihF VlBfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCisge0VSUl9SRUFT T04oRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUykgICAsImRpZmZlcmVudCBrZXkgdHlwZXMifSwK KyB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUykgICwiZGlmZmVyZW50IHBh cmFtZXRlcnMifSwKKyt7RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9GT1JfRklQUykgICAgICwi ZGlzYWJsZWQgZm9yIGZpcHMifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9FTkNPREVfRVJST1IpICAg ICAgICAgICwiZW5jb2RlIGVycm9yIn0sCisge0VSUl9SRUFTT04oRVZQX1JfRVZQX1BCRV9DSVBI RVJJTklUX0VSUk9SKSwiZXZwIHBiZSBjaXBoZXJpbml0IGVycm9yIn0sCisge0VSUl9SRUFTT04o RVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkpICAsImV4cGVjdGluZyBhbiByc2Ega2V5In0sCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cC5oLmZpcHMgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwLmgu ZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9ldnAvZXZwLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAK K0BAIC03NSw2ICs3NSwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorICNlbmRpZgor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrCisgLyoKKyAjZGVmaW5lIEVWUF9SQzJfS0VZX1NJWkUJCTE2CisgI2RlZmluZSBFVlBf UkM0X0tFWV9TSVpFCQkxNgorQEAgLTE5Nyw2ICsyMDEsOCBAQCB0eXBlZGVmIGludCBldnBfdmVy aWZ5X21ldGhvZChpbnQgdHlwZSxjCisgCisgI2RlZmluZSBFVlBfTURfRkxBR19QS0VZX01FVEhP RF9TSUdOQVRVUkUJMHgwMDA0CisgCisrI2RlZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAv KiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisrCisgLyogRGlnZXN0 QWxnb3JpdGhtSWRlbnRpZmllciBmbGFncy4uLiAqLworIAorICNkZWZpbmUgRVZQX01EX0ZMQUdf RElHQUxHSURfTUFTSwkJMHgwMDE4CitAQCAtMjY5LDEwICsyNzUsNiBAQCBzdHJ1Y3QgZW52X21k X2N0eF9zdAorIAkJCQkJCSogY2xlYW5lZCAqLworICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JF VVNFCQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2RhdGEKKyAJCQkJCQkqIGluIEVW UF9NRF9DVFhfY2xlYW51cCAqLworLS8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVk IGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQorLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50 YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4KKy0gKi8KKy0KKyAjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9m IG5vbiBGSVBTIGRpZ2VzdAorIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAqLworIAorQEAgLTI4NCw2 ICsyODYsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19QQURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCisgI2RlZmluZSBFVlBfTURf Q1RYX0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICovCisgI2RlZmluZSBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLworKyNkZWZpbmUgTV9FVlBfTURf Q1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisrCQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAv KiBzZWVkIGxlbmd0aCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZG RkYJLyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19QU1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAj ZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6 ZSBtZF9kYXRhICovCisgCitAQCAtMzMwLDEyICszMzYsMTYgQEAgc3RydWN0IGV2cF9jaXBoZXJf c3QKKyAjZGVmaW5lIAlFVlBfQ0lQSF9OT19QQURESU5HCQkweDEwMAorIC8qIGNpcGhlciBoYW5k bGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZ CQkweDIwMAorLS8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMg Ki8KKy0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAKKysvKiBOb3RlIGlmIHN1 aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19G SVBTCQkweDQwMAorKy8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KKysj ZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCisgLyogQWxsb3cgdXNl IGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEJMHgxMDAwCisgLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZC MSBtb2RlIG9ubHkgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAw MAorKy8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KKysj ZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCisgCisgLyogY3RybCgpIHZhbHVl cyAqLworIAorQEAgLTEyMzksNiArMTI0OSw3IEBAIHZvaWQgRVJSX2xvYWRfRVZQX3N0cmluZ3Mo dm9pZCk7CisgI2RlZmluZSBFVlBfUl9ERUNPREVfRVJST1IJCQkJIDExNAorICNkZWZpbmUgRVZQ X1JfRElGRkVSRU5UX0tFWV9UWVBFUwkJCSAxMDEKKyAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9Q QVJBTUVURVJTCQkJIDE1MworKyNkZWZpbmUgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMJCQkJIDE2 MAorICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTUKKyAjZGVmaW5lIEVWUF9SX0VW UF9QQkVfQ0lQSEVSSU5JVF9FUlJPUgkJCSAxMTkKKyAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19B Tl9SU0FfS0VZCQkJIDEyNworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBf bGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9saWIuYworLS0tIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxMC0wMS0yNiAxNTozMzo1MS4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9saWIuYwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTY3LDYgKzY3LDggQEAgaW50 IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVy LT5zZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNu MV9wYXJhbWV0ZXJzKGMsdHlwZSk7CisrCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysJCXJldD1FVlBfQ0lQSEVSX3NldF9hc24xX2l2KGMs IHR5cGUpOworIAllbHNlCisgCQlyZXQ9LTE7CisgCXJldHVybihyZXQpOworQEAgLTc4LDYgKzgw LDggQEAgaW50IEVWUF9DSVBIRVJfYXNuMV90b19wYXJhbShFVlBfQ0lQSEVSXworIAorIAlpZiAo Yy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVy LT5nZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlwZSk7CisrCWVsc2UgaWYgKGMtPmNpcGhlci0+Zmxh Z3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysJCXJldD1FVlBfQ0lQSEVSX2dldF9h c24xX2l2KGMsIHR5cGUpOworIAllbHNlCisgCQlyZXQ9LTE7CisgCXJldHVybihyZXQpOworQEAg LTE4Niw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBf CisgCisgaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKyAJeworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAly ZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7CisgCX0KKyAKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9l dnAvZXZwX2xvY2wuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMjU0LDE0ICsyNTQsMzIgQEAgY29uc3QgRVZQX0NJUEhF UiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAorIAorICNkZWZpbmUgRVZQX0NfREFUQShrc3RydWN0 LCBjdHgpCSgoa3N0cnVjdCAqKShjdHgpLT5jaXBoZXJfZGF0YSkKKyAKKy0jZGVmaW5lIElNUExF TUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2JpdHMsaXZf bGVuKSBcCisrI2RlZmluZSBJTVBMRU1FTlRfQ0ZCUihjaXBoZXIsY3ByZWZpeCxrc3RydWN0LGtz Y2hlZCxrZXlzaXplLGNiaXRzLGl2X2xlbixmbCkgXAorIAlCTE9DS19DSVBIRVJfZnVuY19jZmIo Y2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKKyAJQkxP Q0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwKKyAJCQkgICAg IE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCist CQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAorLQkJCSAgICAgRVZQX0NJUEhF Ul9zZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLQkJ CSAgICAgTlVMTCkKKysJCQkgICAgIChmbCl8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIFwK KysJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorKwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjZGVmaW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3Nl dF9rZXkKKysjZGVmaW5lIFJDNF9zZXRfa2V5CXByaXZhdGVfUkM0X3NldF9rZXkKKysjZGVmaW5l IENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQorKyNkZWZpbmUgUkM1XzMyX3NldF9r ZXkJcHJpdmF0ZV9SQzVfMzJfc2V0X2tleQorKyNkZWZpbmUgQkZfc2V0X2tleQlwcml2YXRlX0JG X3NldF9rZXkKKysjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorKyNk ZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkKKysjZGVmaW5l IGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZhdGVfaWRlYV9zZXRfZW5jcnlwdF9rZXkKKysKKysj ZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVfTUQ1X0luaXQKKysjZGVmaW5lIE1ENF9Jbml0CXByaXZh dGVfTUQ0X0luaXQKKysjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0luaXQKKysjZGVmaW5l IE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAorKyNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9T SEFfSW5pdAorKyNkZWZpbmUgUklQRU1EMTYwX0luaXQJcHJpdmF0ZV9SSVBFTUQxNjBfSW5pdAor KyNkZWZpbmUgV0hJUkxQT09MX0luaXQJcHJpdmF0ZV9XSElSTFBPT0xfSW5pdAorKworKyNlbmRp ZgorIAorIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKKyAJeworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX2Rz cy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAwNi0wNC0x OSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZw L21fZHNzLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MSw3ICs4 MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJ TklEX2RzYVdpdGhTSEEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZ X0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJ aW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fZHNzMS5jCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzCTIwMDYtMDQtMTkgMTk6 MDU6NTcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX2Rz czEuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTgyLDcgKzgyLDcg QEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQorIAlOSURfZHNhLAorIAlOSURfZHNhV2l0 aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwK KysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJ dXBkYXRlLAorIAlmaW5hbCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9t ZGMyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWRjMi5jCistLS0gb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kYzIuYy5maXBzCTIwMTAtMDItMDIgMTQ6MzY6MDUuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kYzIuYwkyMDEw LTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisr I2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0 eCkKKyAJeyByZXR1cm4gTURDMl9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9l dnAvbV9tZDIuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIw MDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2V2cC9tX21kMi5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAt NjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50 IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBNRDJfSW5pdChjdHgtPm1kX2RhdGEp OyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWQ0LmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWQ0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v ZXZwL21fbWQ0LmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZDQuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNB CisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgImV2cF9sb2Ns LmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gTUQ0 X0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2 cC9tX21kNS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kNS5jCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kNS5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWQ1LmMJMjAx MC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OCw2ICs2OCw3IEBACisgI2lm bmRlZiBPUEVOU1NMX05PX1JTQQorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNlbmRpZgor KyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpj dHgpCisgCXsgcmV0dXJuIE1ENV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvbV9yaXBlbWQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvbV9yaXBlbWQuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9yaXBlbWQu Yy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2V2cC9tX3JpcGVtZC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAjaW5j bHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAK KyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBSSVBFTUQxNjBf SW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZw L21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX3NoYTEuYworLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwkyMDA4LTAzLTEyIDIyOjE0OjI0 LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9zaGExLmMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Miw3ICs4Miw4IEBAIHN0 YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KKyAJTklEX3NoYTEsCisgCU5JRF9zaGExV2l0aFJT QUVuY3J5cHRpb24sCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01F VEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxB R19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJ RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMTks NyArMTIwLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9CisgCU5JRF9zaGEyMjQs CisgCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMjI0X0RJR0VTVF9MRU5HVEgs CistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0MjI0LAorIAl1 cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTEzOCw3ICsxNDAsOCBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIHNoYTI1Nl9tZD0KKyAJTklEX3NoYTI1NiwKKyAJTklEX3NoYTI1NldpdGhSU0FFbmNy eXB0aW9uLAorIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVW UF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyNTYsCisgCXVwZGF0ZTI1NiwKKyAJZmluYWwyNTYsCitA QCAtMTY5LDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0X21kPQorIAlOSURf c2hhMzg0LAorIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTM4NF9ESUdFU1Rf TEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdf RElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDM4 NCwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0xODgsNyArMTkyLDggQEAgc3RhdGlj IGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9CisgCU5JRF9zaGE1MTIsCisgCU5JRF9zaGE1MTJXaXRo UlNBRW5jcnlwdGlvbiwKKyAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BL RVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9N RF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8 CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0NTEyLAorIAl1cGRhdGU1MTIsCisgCWZpbmFs NTEyLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX3dwLmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fd3AuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9l dnAvbV93cC5jLmZpcHMJMjAwNS0xMS0zMCAyMTo1NzoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fd3AuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAorQEAgLTksNiArOSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5o PgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC93aHJscG9v bC5oPgorKyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURf Q1RYICpjdHgpCisgCXsgcmV0dXJuIFdISVJMUE9PTF9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbmFtZXMuYy5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9ldnAvbmFtZXMuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbmFt ZXMuYy5maXBzCTIwMTAtMDMtMDYgMjE6NDc6NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9uYW1lcy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtNjYsNiArNjYsMTAgQEAgaW50IEVWUF9hZGRfY2lwaGVyKGNvbnN0IEVWUF9D SVBIRVIgKmMpCisgCXsKKyAJaW50IHI7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVO U1NMX2luaXRfbGlicmFyeSgpOworKyNlbmRpZgorKworIAlyPU9CSl9OQU1FX2FkZChPQkpfbmlk MnNuKGMtPm5pZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwoY29uc3QgY2hhciAqKWMpOwor IAlpZiAociA9PSAwKSByZXR1cm4oMCk7CisgCWNoZWNrX2RlZmVyKGMtPm5pZCk7CitAQCAtNzks NiArODMsMTAgQEAgaW50IEVWUF9hZGRfZGlnZXN0KGNvbnN0IEVWUF9NRCAqbWQpCisgCWludCBy OworIAljb25zdCBjaGFyICpuYW1lOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNT TF9pbml0X2xpYnJhcnkoKTsKKysjZW5kaWYKKysKKyAJbmFtZT1PQkpfbmlkMnNuKG1kLT50eXBl KTsKKyAJcj1PQkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9UWVBFX01EX01FVEgsKGNvbnN0IGNo YXIgKiltZCk7CisgCWlmIChyID09IDApIHJldHVybigwKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL3Bf c2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIwMDYt MDUtMjQgMTU6Mjk6MzAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2V2cC9wX3NpZ24uYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTYx LDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgorIAorICNpZmRlZiB1bmRlZgorIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9D VFggKmN0eCwgRVZQX01EICp0eXBlKQorQEAgLTEwMSw2ICsxMDIsMjIgQEAgaW50IEVWUF9TaWdu RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZworIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9Q S0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQln b3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQor KwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURE SU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NU WF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDAp CisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FM VChjdHgpOworKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisr CQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxB R19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0 X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7Cisr CQkJfQorIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xl bikgPD0gMCkKKyAJCQlnb3RvIGVycjsKKyAJCSpzaWdsZW4gPSBzbHRtcDsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9ldnAvcF92ZXJpZnkuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF92ZXJp ZnkuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBf TURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKKyAJICAgICB1bnNpZ25l ZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKK0BAIC04Niw2ICs4NywyMiBAQCBpbnQgRVZQ X1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCisgCQkJZ290byBlcnI7CisgCQlpZiAo RVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQor IAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMx X1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVW UF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykg PD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BT U19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExF TikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NU WF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NU WF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVy cjsKKysJCQl9CisgCQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwg bSwgbV9sZW4pOworIAkJZXJyOgorIAkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgpOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCistLS0gb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfYWVzYXZzLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0w LDAgKzEsOTM5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIE5JU1QgQUVTIEFsZ29yaXRobSBW YWxpZGF0aW9uIFN1aXRlCisrICBUZXN0IFByb2dyYW0KKysKKysgIERvbmF0ZWQgdG8gT3BlblNT TCBieToKKysgIFYtT05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRl IDMwMAorKyAgR2VybWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5BLgorKyAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrI2luY2x1ZGUgPHN0ZGlv Lmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9y dFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrI2RlZmluZSBBRVNfQkxP Q0tfU0laRSAxNgorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisrLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50IEFFU1Rlc3QoRVZQX0NJ UEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBj aGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwg IC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqcGxh aW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKQorKyAgICB7CisrICAg IGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CisrCisrICAgIGlmIChzdHJjYXNlY21w KGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNh c2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7CisrCQlicmVhazsKKysKKysJ CWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7CisrCQlicmVhazsKKysK KysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7CisrCQlicmVhazsK KysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0g MCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVy ID0gRVZQX2Flc18xMjhfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lw aGVyID0gRVZQX2Flc18xOTJfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJ Y2lwaGVyID0gRVZQX2Flc18yNTZfZWNiKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBl bHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCMTI4IikgPT0gMCkKKysJeworKwlzd2l0Y2gg KGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2Zi MTI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18x OTJfY2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQ X2Flc18yNTZfY2ZiMTI4KCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlm IChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5 c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOwor KwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigp OworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29m YigpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9k ZSwiQ0ZCMSIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6Cisr CQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTky OgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNl IDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEoKTsKKysJCWJyZWFrOworKwkJfQor Kwl9CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJeworKwlzd2l0 Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhf Y2ZiOCgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNf MTkyX2NmYjgoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBf YWVzXzI1Nl9jZmI4KCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlCisrCXsKKysJ cHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAwOworKwl9Cisr ICAgIGlmICghY2lwaGVyKQorKwl7CisrCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIs IGFrZXlzeik7CisrCXJldHVybiAwOyAKKysJfQorKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgo Y3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKKysJcmV0dXJuIDA7Cisr ICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0 X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7CisrICAgIGlmIChkaXIpCisr CQlFVlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOworKwllbHNlCisr CQlFVlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKyAgICByZXR1 cm4gMTsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVY VCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgi LCJDRkIxMjgifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEy OH07CisrZW51bSBYQ3J5cHQge1hERUNSWVBULCBYRU5DUllQVH07CisrCisrLyo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PSovCisrLyogIE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICov CisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrLyojZGVmaW5lIGdiKGEs YikgKCgoYSlbKGIpLzhdID4+ICgoYiklOCkpJjEpKi8KKysvKiNkZWZpbmUgc2IoYSxiLHYpICgo YSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkp KSovCisrCisrI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCisr I2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4 KSkpfCghISh2KSA8PCAoNy0oYiklOCkpKQorKworK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAor KwkgICBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMs CisrCSAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCisrCSAgIEZJTEUg KnJmcCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBrZXlb MTAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07Cisr ICAgIHVuc2lnbmVkIGNoYXIgcHRleHRbMTAwMV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGN0 ZXh0WzEwMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOworKyAg ICBpbnQgaSwgaiwgbiwgbjEsIG4yOworKyAgICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5 c3ovODsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOworKworKyAgICBpZiAobGVuID4gMzIpCisrCXsKKysJcHJpbnRmKCJcbj4+Pj4gTGVu Z3RoIGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8PDxcblxuIiwgCisrCSAgICAgICBhbW9kZSwgYWtl eXN6KTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7 ICsraW1vZGUpCisrCWlmIChzdHJjbXAoYW1vZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCisrCSAg ICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25p emVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAtMTsKKysJfQorKworKyAgICBtZW1j cHkoa2V5WzBdLCBhS2V5LCBua2V5c3opOworKyAgICBpZiAoaVZlYykKKysJbWVtY3B5KGl2WzBd LCBpVmVjLCBBRVNfQkxPQ0tfU0laRSk7CisrICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCW1l bWNweShwdGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZWxzZQorKwltZW1jcHkoY3RleHRbMF0s IHRleHQsIGxlbik7CisrICAgIGZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkKKysJeworKwkvKiBw cmludGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7ICovCisrCWlmIChpID4gMCkKKysJICAgIHsKKysJ ICAgIGZwcmludGYocmZwLCJDT1VOVCA9ICVkXG4iLGkpOworKwkgICAgT3V0cHV0VmFsdWUoIktF WSIsa2V5W2ldLG5rZXlzeixyZnAsMCk7CisrCSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNC ICovCisrCQlPdXRwdXRWYWx1ZSgiSVYiLGl2W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKKysJ ICAgIC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCisrCSAgICBPdXRwdXRWYWx1 ZSh0X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRbMF0gOiBjdGV4dFswXSxsZW4scmZwLAorKwkJCWlt b2RlID09IENGQjEpOworKwkgICAgfQorKwlmb3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQorKwkg ICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJaWYg KGogPT0gMCkKKysJCSAgICB7IC8qIHNldCB1cCBlbmNyeXB0aW9uICovCisrCQkgICAgcmV0ID0g QUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIE5VTEwsIAorKwkJCQkgIGRpciwg IC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtq XSwgbGVuKTsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCW1lbWNweShwdGV4dFtq KzFdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0s IHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYg KGRpciA9PSBYRU5DUllQVCkKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwg cHRleHRbal0sIGxlbik7CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOwor KwkJCX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0s IGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsK KysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENCQzoKKysJICAgIGNh c2UgT0ZCOiAgCisrCSAgICBjYXNlIENGQjEyODoKKysJCWlmIChqID09IDApCisrCQkgICAgewor KwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwg CisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRl eHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJ bWVtY3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHko Y3RleHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJ CSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0 ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0x XSwgbGVuKTsKKysJCQl9CisrCQkgICAgZWxzZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgs IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRb ai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENG Qjg6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgs IGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNy eXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJ CSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisr CQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxz ZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAg IH0KKysJCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkgICAgeworKwkJICAgIGlmIChqIDwgMTYp CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisr CQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMTZdLCBsZW4pOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1jcHkoY3RleHRbaisxXSwg Jml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRl eHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjE6 CisrCQlpZihqID09IDApCisrCQkgICAgeworKyNpZiAwCisrCQkgICAgLyogY29tcGVuc2F0ZSBm b3Igd3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1dCBmaWxlICovCisrCQkgICAgaWYoaSA9PSAwKQor KwkJCXB0ZXh0WzBdWzBdPDw9NzsKKysjZW5kaWYKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgs YW1vZGUsYWtleXN6LGtleVtpXSxpdltpXSxkaXIsCisrCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwg bGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVO Q1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Cisr CQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4p OworKworKwkJICAgIH0KKysJCWlmKGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAg aWYoaiA8IDEyOCkKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVs c2UKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoY3RleHRbai0xMjhdLDApKTsKKysJCSAgICB9Cisr CQllbHNlCisrCQkgICAgeworKwkJICAgIGlmKGogPCAxMjgpCisrCQkJc2IoY3RleHRbaisxXSww LGdiKGl2W2ldLGopKTsKKysJCSAgICBlbHNlCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0 W2otMTI4XSwwKSk7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCS0tajsg LyogcmVzZXQgdG8gbGFzdCBvZiByYW5nZSAqLworKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBs YWludGV4dCAqLworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRl eHRbal0sbGVuLHJmcCwKKysJCSAgICBpbW9kZSA9PSBDRkIxKTsKKysJZnByaW50ZihyZnAsICJc biIpOyAgLyogYWRkIHNlcGFyYXRvciAqLworKworKwkvKiBDb21wdXRlIG5leHQgS0VZICovCisr CWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkK KysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJ CWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJ CSAgICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBp ZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFr ZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJd LDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJ CWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOworKwkJ ICAgIGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0 W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsK KysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBj dGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAx Nik7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwllbHNlCisrCSAgICB7Cisr CSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0 XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8 IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJd WzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4x PTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBo ZXJ0ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRj aCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0 ZXh0LCBwdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAg bWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhl cnRleHQrOCwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNp cGhlcnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkg ICAgfQorKwkvKiBDb21wdXRlIG5leHQga2V5OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8K KysJZm9yIChuID0gMDsgbiA8IG5rZXlzejsgKytuKQorKwkgICAga2V5W2krMV1bbl0gPSBrZXlb aV1bbl0gXiBjaXBoZXJ0ZXh0W25dOworKwkKKysJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0 ICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2Rl KQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBB RVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBP RkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVT X0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tf U0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCODoKKysJCS8qIElWW2krMV0gPSBjdCAq LworKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCisrCQkgICAg aXZbaSsxXVtuMV0gPSBjdGV4dFtqLW4yXVswXTsKKysJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0x Nl1bMF07CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCMToKKysJCWZvcihuMT0wLG4yPTEyNyA7 IG4xIDwgMTI4IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1u Ml0sMCkpOworKwkJcHRleHRbMF1bMF09Y3RleHRbai0xMjhdWzBdJjB4ODA7CisrCQlicmVhazsK KysJCX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJ CXsKKysJICAgIGNhc2UgRUNCOgorKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JM T0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgor KwkgICAgY2FzZSBDRkIxMjg6CisrCQltZW1jcHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9D S19TSVpFKTsKKysJCW1lbWNweShjdGV4dFswXSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUp OworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjg6CisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsg bjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBd OworKwkJY3RleHRbMF1bMF0gPSBwdGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2Fz ZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkg ICAgc2IoaXZbaSsxXSxuMSxnYihwdGV4dFtqLW4yXSwwKSk7CisrCQljdGV4dFswXVswXT1wdGV4 dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIAor KyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0qLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorKyAgIyBDb25maWcgaW5mbyBmb3Igdi1vbmUKKysgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBm b3IgRUNCCisrICAjIFN0YXRlIDogRW5jcnlwdCBhbmQgRGVjcnlwdAorKyAgIyBLZXkgTGVuZ3Ro IDogMjU2CisrICAjIEZyaSBBdWcgMzAgMDQ6MDc6MjIgUE0KKysgIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLworKworK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3Bm aWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICph ZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdOworKyAgICBjaGFy IHRidWZbMjA0OF07CisrICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYWxn b1s4XSA9ICIiOworKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbOF0g PSAiIjsKKysgICAgaW50IGFrZXlzeiA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0s IGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1 bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0 ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAg ICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpy cWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7Cisr CX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3Blbihh Zm4sICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywg JXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7Cisr CX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ry c3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQor KwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJ bWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNw eShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9 IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3Bl biBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlm Y2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxl ICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsK KysJdGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKiAg ICAgIHByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyAqLworKwlzd2l0Y2ggKHN0 ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChp YnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCgqYWxn byA9PSAnXDAnKSB8fAorKwkJICAgICgqYW1vZGUgPT0gJ1wwJykgfHwKKysJCSAgICAoYWtleXN6 ID09IDApKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2Rl IG9yIEtleVNpemUgKCVzLyVzLyVkKVxuIiwKKysJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7Cisr CQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRz KGlidWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNl IGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBp dGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAv KiBwcm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50 IG47CisrCQlpZiAoYWtleXN6KQorKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRh dGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAs ICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJ ICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2 KSA9PSAwKQorKwkJCXsKKysJCQlzdHJjcHkoYWxnbywgIkFFUyIpOworKwkJCS8qIGdldCB0ZXN0 IHR5cGUgKi8KKysJCQlwcCArPSA2OworKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4g PSB4cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAn OworKwkJCS8qIGdldCBtb2RlICovCisrCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQg bW9kZSIgKi8KKysJCQluID0gc3RybGVuKHhwKzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHAr MSwgbik7CisrCQkJYW1vZGVbbl0gPSAnXDAnOworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8K KysJCQlpZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwg YXRlc3QsIGFtb2RlKTsKKysJCQl9CisrCQkgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJL ZXkgTGVuZ3RoIDogIiwgMTMpID09IDApCisrCQkJeworKwkJCWFrZXlzeiA9IGF0b2kocHArMTMp OworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlz eik7CisrCQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAv KiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJ CXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAo aWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYg KHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7 CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xu IiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJ ICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1p c3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAg ICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmKCppYnVmID09ICdcbicpCisrCQlicmVhazsK KysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQlicmVhazsKKysK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiS0VZID0gIiwgNikgIT0gMCkKKysJCXsKKysJ CXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UK KysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVu IDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAg ZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFL ZXksIGxlbik7CisrCQlpZiAoc3RyY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJCSAgICB7Cisr CQkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7CisrCQkgICAgc3RlcCA9IChkaXIp PyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCisrCQkgICAgfQorKwkJZWxzZQorKwkJICAg ICsrc3RlcDsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAq LworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAi SVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVy ciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilp YnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50Zigi SW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0K KysJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsK KysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8K KysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBM QUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVY VFxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0g c3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxl bj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49 aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgewor KwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAg ZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBs YWludGV4dCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsK KysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxh aW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250 ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6 LCBhS2V5LCBpVmVjLCAKKysJCQkgICAgICBkaXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQs IGxlbiwgCisrCQkJICAgICAgcmZwKSA8IDApCisrCQkJRVhJVCgxKTsKKysJCSAgICB9CisrCQll bHNlCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwg YUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICov CisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVl KCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNG QjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJ Y2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQor KwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkg ICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1i aW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQor KwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAw KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkg ICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysKKysJCVByaW50VmFsdWUoIkNJ UEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIp ID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChh bW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwg cmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3Qo JmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4p OworKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50 ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJ c3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGli dWZbMF0gIT0gJ1xuJykKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVy bWluYXRvclxuIik7CisrCQl9CisrCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAh PSAwKQorKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJCX0KKysJICAgIHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAg ICB9CisrCX0KKysgICAgaWYgKHJmcCkKKysJZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisr CWZjbG9zZShhZnApOworKyAgICByZXR1cm4gZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVp dGhlciBhIHNpbmdsZSBmaWxlIG9yIAorKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJl IHBhc3NlZCBpbiBhIGZpbGUuCisrICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysg ICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQorKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFz OgorKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEu dHh0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpy cWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxM OworKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0 ID0gMCwgZF9vcHQgPSAxOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNf bW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0K KysjZW5kaWYKKysgICAgaWYgKGFyZ2MgPiAxKQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3Zb MV0sICItZCIpID09IDApCisrCSAgICB7CisrCSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVs c2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZf b3B0ID0gMTsKKysJICAgIGRfb3B0ID0gMDsKKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkg ICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0 dXJuIDA7CisrCSAgICB9CisrCWlmIChhcmdjIDwgMykKKysJICAgIHsKKysJICAgIHByaW50Zigi TWlzc2luZyBwYXJhbWV0ZXJcbiIpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChk X29wdCkKKysJICAgIHJxbGlzdCA9IGFyZ3ZbMl07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0 cmNweShmbiwgYXJndlsyXSk7CisrCSAgICByc3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJ fQorKyAgICBpZiAoZF9vcHQpCisrCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLwor KwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYo IkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAg fQorKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0 cnRvayhmbiwgIlxyXG4iKTsKKysJICAgIHN0cmNweShyZm4sIGZuKTsKKysJICAgIGlmIChWRVJC T1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9j X2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFp bGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJ ZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYg KFZFUkJPU0UpCisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChw cm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vz c2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJfQorKyAgICBFWElU KDApOworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf ZGVzbW92cy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsx LDcwMiBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIERFUyBNb2RlcyBvZiBPcGVyYXRp b24gVmFsaWRhdGlvbiBTeXN0ZW0KKysgIFRlc3QgUHJvZ3JhbQorKworKyAgQmFzZWQgb24gdGhl IEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3aGljaCB3YXM6CisrICBEb25hdGVkIHRvIE9wZW5TU0wg Ynk6CisrICBWLU9ORSBDb3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAz MDAKKysgIEdlcm1hbnRvd24sIE1EIDIwODc0CisrICBVLlMuQS4KKysgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKyNpbmNsdWRlIDxzdGRpby5o PgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PGVycm5vLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgREVTIHN1cHBvcnRc biIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKyNkZWZpbmUgREVTX0JMT0NL X1NJWkUgOAorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisraW50IERFU1Rlc3QoRVZQX0NJUEhF Ul9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFy ICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8q IDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1 bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbikKKysgICAgeworKyAgICBjb25zdCBFVlBfQ0lQSEVS ICpjaXBoZXIgPSBOVUxMOworKworKyAgICBpZiAoYWtleXN6ICE9IDE5MikKKysJeworKwlwcmlu dGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOworKwlFWElUKDEpOworKwl9Cisr CisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX2NiYygpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikg PT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2VjYigpOworKyAgICBlbHNlIGlmIChzdHJj YXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2Zi NjQoKTsKKysgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQor KwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfb2ZiKCk7CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAo YW1vZGUsIkNGQjgiKSkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjgoKTsKKysgICAgZWxz ZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNf Y2ZiMSgpOworKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBh bW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0 eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCisrCXJldHVybiAwOworKyAg ICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9m bGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOworKyAgICBFVlBfQ2lwaGVyKGN0 eCwgb3V0LCBpbiwgbGVuKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIERl YnVnVmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCisrICAgIHsK KysgICAgY2hhciBvYnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsKKysgICAgb2xlbiA9IGJpbjJo ZXgodmFsLCBsZW4sIG9idWYpOworKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVu LCBvYnVmKTsKKysgICAgfQorKworK3ZvaWQgc2hpZnRpbih1bnNpZ25lZCBjaGFyICpkc3QsdW5z aWduZWQgY2hhciAqc3JjLGludCBuYml0cykKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAg LyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8KKysgICAgbWVtbW92ZShkc3QsZHN0K25iaXRzLzgsMyo4 LW5iaXRzLzgpOworKyAgICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8KKysgICAgbWVtY3B5KGRzdCsz KjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcpLzgpOworKyAgICAvKiBsZWZ0IHNoaWZ0IHRoZSBiaXRz ICovCisrICAgIGlmKG5iaXRzJTgpCisrCWZvcihuPTAgOyBuIDwgMyo4IDsgKytuKQorKwkgICAg ZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRzJTgpKXwoZHN0W24rMV0gPj4gKDgtbmJpdHMlOCkpOwor KyAgICB9CQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9Owor K2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkI2 NCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCNjR9OworK2lu dCBTaXplc1s2XT17NjQsNjQsNjQsMSw4LDY0fTsKKysKKyt2b2lkIGRvX21jdChjaGFyICphbW9k ZSwgCisrCSAgICBpbnQgYWtleXN6LCBpbnQgbnVta2V5cywgdW5zaWduZWQgY2hhciAqYWtleSx1 bnNpZ25lZCBjaGFyICppdmVjLAorKwkgICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwg aW50IGxlbiwKKysJICAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQgaSxpbW9kZTsKKysg ICAgdW5zaWduZWQgY2hhciBua1s0KjhdOyAvKiBsb25nZXN0IGtleSs4ICovCisrICAgIHVuc2ln bmVkIGNoYXIgdGV4dDBbOF07CisrCisrICAgIGZvciAoaW1vZGU9MCA7IGltb2RlIDwgNiA7ICsr aW1vZGUpCisrCWlmKCFzdHJjbXAoYW1vZGUsdF9tb2RlW2ltb2RlXSkpCisrCSAgICBicmVhazsK KysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6 ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgZm9yKGk9MCA7IGkgPCA0 MDAgOyArK2kpCisrCXsKKysJaW50IGo7CisrCWludCBuOworKwlpbnQga3A9YWtleXN6LzY0Owor Kwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBf Q0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKwlmcHJpbnRmKHJmcCwiXG5DT1VOVCA9ICVkXG4i LGkpOworKwlpZihrcCA9PSAxKQorKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsYWtleSw4LHJmcCww KTsKKysJZWxzZQorKwkgICAgZm9yKG49MCA7IG4gPCBrcCA7ICsrbikKKysJCXsKKysJCWZwcmlu dGYocmZwLCJLRVklZCIsbisxKTsKKysJCU91dHB1dFZhbHVlKCIiLGFrZXkrbio4LDgscmZwLDAp OworKwkJfQorKworKwlpZihpbW9kZSAhPSBFQ0IpCisrCSAgICBPdXRwdXRWYWx1ZSgiSVYiLGl2 ZWMsOCxyZnAsMCk7CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSx0ZXh0LGxlbixyZnAsaW1v ZGUgPT0gQ0ZCMSk7CisrI2lmIDAKKysJLyogY29tcGVuc2F0ZSBmb3IgZW5kaWFubmVzcyAqLwor KwlpZihpbW9kZSA9PSBDRkIxKQorKwkgICAgdGV4dFswXTw8PTc7CisrI2VuZGlmCisrCW1lbWNw eSh0ZXh0MCx0ZXh0LDgpOworKworKwlmb3Ioaj0wIDsgaiA8IDEwMDAwIDsgKytqKQorKwkgICAg eworKwkgICAgdW5zaWduZWQgY2hhciBvbGRfdGV4dFs4XTsKKysKKysJICAgIG1lbWNweShvbGRf dGV4dCx0ZXh0LDgpOworKwkgICAgaWYoaiA9PSAwKQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixp dmVjLDgpOworKwkJREVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixha2V5LGl2ZWMsZGlyLHRleHQs dGV4dCxsZW4pOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixjdHgu aXYsOCk7CisrCQlFVlBfQ2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxlbik7CisrCQl9CisrCSAgICBp ZihqID09IDk5OTkpCisrCQl7CisrCQlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLHRleHQsbGVuLHJm cCxpbW9kZSA9PSBDRkIxKTsKKysJCS8qCQltZW1jcHkoaXZlYyx0ZXh0LDgpOyAqLworKwkJfQor KwkgICAgLyoJICAgIERlYnVnVmFsdWUoIml2IixjdHguaXYsOCk7ICovCisrCSAgICAvKiBhY2N1 bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUgbmV4dCBrZXkgKi8KKysJICAgIHNoaWZ0aW4obmssdGV4 dCxTaXplc1tpbW9kZV0pOworKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIm5rIixuaywyNCk7Ki8K KysJICAgIGlmKChkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9k ZSA9PSBDRkI2NAorKwkJCXx8IGltb2RlID09IENCQykpIHx8IGltb2RlID09IE9GQikKKysJCW1l bWNweSh0ZXh0LG9sZF9pdiw4KTsKKysKKysJICAgIGlmKCFkaXIgJiYgKGltb2RlID09IENGQjEg fHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NCkpCisrCQl7CisrCQkvKiB0aGUgdGVz dCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3IERFUyBvcGVyYXRpb24KKysJ CSAgIHdoaWNoIHdlIGRvbid0IGhhdmUsIHNvIHJlY29uc3RydWN0IGl0Li4uICovCisrCQlmb3Io bj0wIDsgbiA8IDggOyArK24pCisrCQkgICAgdGV4dFtuXV49b2xkX3RleHRbbl07CisrCQl9Cisr CSAgICB9CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbbl1ePW5rWzE2K25d OworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5Wzgrbl1ePW5rWzgrbl07Cisr CWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbMTYrbl1ePW5rW25dOworKwlpZihu dW1rZXlzIDwgMykKKysJICAgIG1lbWNweSgmYWtleVsyKjhdLGFrZXksOCk7CisrCWlmKG51bWtl eXMgPCAyKQorKwkgICAgbWVtY3B5KCZha2V5WzhdLGFrZXksOCk7CisrCURFU19zZXRfb2RkX3Bh cml0eSgoREVTX2NibG9jayAqKWFrZXkpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxv Y2sgKikoYWtleSs4KSk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5 KzE2KSk7CisrCW1lbWNweShpdmVjLGN0eC5pdiw4KTsKKysKKysJLyogcG9pbnRsZXNzIGV4ZXJj aXNlIC0gdGhlIGZpbmFsIHRleHQgZG9lc24ndCBkZXBlbmQgb24gdGhlCisrCSAgIGluaXRpYWwg dGV4dCBpbiBPRkIgbW9kZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQgaXM/IChXaG8KKysJICAgZGVz aWduZWQgdGhlc2UgdGVzdHM/KSAqLworKwlpZihpbW9kZSA9PSBPRkIpCisrCSAgICBmb3Iobj0w IDsgbiA8IDggOyArK24pCisrCQl0ZXh0W25dPXRleHQwW25dXm9sZF9pdltuXTsKKysJfQorKyAg ICB9CisrICAgIAorK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQor KyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBO VUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdLCB0YnVmWzIwNDhdOworKyAg ICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAg IGNoYXIgYXRlc3RbMTAwXSA9ICIiOworKyAgICBpbnQgYWtleXN6PTA7CisrICAgIHVuc2lnbmVk IGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0 ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhF Ul9DVFggY3R4OworKyAgICBpbnQgbnVta2V5cz0xOworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50 ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwg cnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisr CXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZu LCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxl KQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNp ZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwi cmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOwor KwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJ cnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3Iikp ID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAor KwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0g TlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVm LCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGli dWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKglwcmludGYoInN0ZXA9JWQgaWJ1Zj0l cyIsc3RlcCxpYnVmKTsqLworKwlpZihzdGVwID09IDMgJiYgIXN0cmNtcChhbW9kZSwiRUNCIikp CisrCSAgICB7CisrCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJICAgIHN0 ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLworKwkgICAgfQorKwlzd2l0 Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAg IGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYg KCphbW9kZSA9PSAnXDAnKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1pc3NpbmcgTW9kZVxu Iik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAg IGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAg ICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVh bWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQor KwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOwor KwkJaW50IG47CisrCQlpZigqYW1vZGUpCisrCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1l ICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRm KHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7 CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZighc3RybmNtcChwcCwiSU5WRVJT RSAiLDgpIHx8ICFzdHJuY21wKHBwLCJERVMgIiw0KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBw LCJUREVTICIsNSkKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiUEVSTVVUQVRJT04gIiwxMikK KysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiU1VCU1RJVFVUSU9OICIsMTMpCisrCQkgICAgICAg fHwgIXN0cm5jbXAocHAsIlZBUklBQkxFICIsOSkpCisrCQkJeworKwkJCS8qIGdldCB0ZXN0IHR5 cGUgKi8KKysJCQlpZighc3RybmNtcChwcCwiREVTICIsNCkpCisrCQkJICAgIHBwKz00OworKwkJ CWVsc2UgaWYoIXN0cm5jbXAocHAsIlRERVMgIiw1KSkKKysJCQkgICAgcHArPTU7CisrCQkJeHAg PSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5jcHkoYXRlc3QsIHBw LCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUgKi8KKysJCQl4cCA9 IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBzdHJsZW4oeHArMSkt MTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtuXSA9ICdcMCc7Cisr CQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYo IlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRlc3QsYW1vZGUpOworKwkJCX0KKysJCSAgICB9CisrCQl9 CisrCSAgICBicmVhazsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICov CisrCSAgICBpZihpYnVmWzBdID09ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmIChpYnVmWzBd ID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAo c3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsK KysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJ ICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBr ZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVh azsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7Cisr CQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7 CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0g eHh4eCAqLworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCXsKKysJICAgICAgICBmcHV0cyhp YnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJu Y2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1Ziwg cmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2Vj bXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwor KwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVm LCJOdW1LZXlzID0gIiwxMCkpCisrCQl7CisrCQludW1rZXlzPWF0b2koaWJ1ZisxMCk7CisrCQli cmVhazsKKysJCX0KKysJICAKKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZighc3Ry bmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2KSkKKysJCXsKKysJCWFrZXlzej02NDsKKysJCWxlbiA9 IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7 CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAg YnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCSsr c3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWXMgPSAiLDcp KQorKwkJeworKwkJYWtleXN6PTY0KjM7CisrCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleSk7Cisr CQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7 CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJbWVtY3B5KGFLZXkr OCxhS2V5LDgpOworKwkJbWVtY3B5KGFLZXkrMTYsYUtleSw4KTsKKysJCWlidWZbNF09J1wwJzsK KysJCVByaW50VmFsdWUoIktFWXMiLGFLZXksbGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAg IGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSIsMykpCisrCQl7CisrCQlpbnQgbj1pYnVm WzNdLScxJzsKKysKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkr bio4KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQg S0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlpYnVm WzRdPSdcMCc7CisrCQlQcmludFZhbHVlKGlidWYsYUtleSxsZW4pOworKwkJaWYobiA9PSAyKQor KwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCXByaW50ZigiTWlzc2lu ZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6 IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJu Y2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5n IElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBo ZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgewor KwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJy ZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAg PSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlO VEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNh c2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJN aXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJ eworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZC MSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVs c2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8 IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1 ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChs ZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVy IG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5z aWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRl IikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0 KGFtb2RlLGFrZXlzeixudW1rZXlzLGFLZXksaVZlYyxkaXIscGxhaW50ZXh0LGxlbixyZnApOwor KwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0KGRpciA9PSAxKTsKKysJ CSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJ CQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIGNpcGhlcnRl eHQsIHBsYWludGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lw aGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0K KysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNTogLyogQ0lQSEVS VEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNh c2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKKysJCXsKKysJCXByaW50Zigi TWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJ CWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxz dHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW4gPSBoZXgy YmluKGlidWYrMTMsY2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCQkKKysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBo ZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1v bnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3os IG51bWtleXMsIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnAp OworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0KGRpciA9PSAwKTsK KysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAor KwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHBsYWlu dGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwo dW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJD RkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisr CWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCisrCQl7CisrCQllcnIgPSAxOwor KwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOworKwkJfQorKwkgICAgZWxzZSBpZiAo c3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKKysJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVy bWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQl9CisrCSAgICBzdGVwID0g MTsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIGlmIChyZnApCisrCWZjbG9zZShy ZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xvc2UoYWZwKTsKKysgICAgcmV0dXJuIGVycjsKKysg ICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKKysgIGEgc2V0IG9m IGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgorKyAgQSBzaW5nbGUgZmls ZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKKysgIEEgc2V0IG9m IGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4CisrICBU aGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7 CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZd ID0gIiI7CisrICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKKysKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9y cygpOworKwlFWElUKDEpOworKwl9CisrI2VuZGlmCisrICAgIGlmIChhcmdjID4gMSkKKysJewor KwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQorKwkgICAgeworKwkgICAgZF9v cHQgPSAxOworKwkgICAgfQorKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09 IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9IDE7CisrCSAgICBkX29wdCA9IDA7CisrCSAgICB9 CisrCWVsc2UKKysJICAgIHsKKysJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4i LCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoYXJnYyA8IDMpCisr CSAgICB7CisrCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKKysJICAgIHJldHVy biAwOworKwkgICAgfQorKwlpZiAoZF9vcHQpCisrCSAgICBycWxpc3QgPSBhcmd2WzJdOworKwll bHNlCisrCSAgICB7CisrCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOworKwkgICAgcnNwZmlsZSA9 IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysgICAgaWYgKGRfb3B0KQorKwl7IC8qIGxpc3Qgb2Yg ZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQor KwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKKysJ ICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBm cCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2soZm4sICJcclxuIik7CisrCSAgICBzdHJjcHkocmZu LCBmbik7CisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYg KHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2lu ZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAg fQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJewor KwlpZiAoVkVSQk9TRSkKKysJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYg KHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9j ZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVY SVQoMCk7CisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2 cy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDUzNyBA QAorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCisreworKyAgICBwcmludGYoIk5vIEZJUFMgRFNBIHN1cHBvcnRcbiIpOworKyAgICBy ZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5o IgorKworK3N0YXRpYyB2b2lkIHBibihjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7 CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVkIGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5 dGVzKGJuKTsKKysJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKKysJaWYgKCF0bXApCisrCQl7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKysJCXJl dHVybjsKKysJCX0KKysJQk5fYm4yYmluKGJuLCB0bXApOworKwlwcmludGYoIiVzID0gIiwgbmFt ZSk7CisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKysJCXByaW50ZigiJTAyWCIsIHRtcFtp XSk7CisrCWZwdXRzKCJcbiIsIHN0ZG91dCk7CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwlyZXR1 cm47CisrCX0KKysKKyt2b2lkIHByaW1lcygpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNDBd OworKyAgICBjaGFyIGxidWZbMTAyNDBdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Cisr CisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7Cisr CWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwg bGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtleXdvcmQsIlByaW1lIikp CisrCSAgICB7CisrCSAgICBCSUdOVU0gKnBwOworKworKwkgICAgcHA9Qk5fbmV3KCk7CisrCSAg ICBkb19oZXgyYm4oJnBwLHZhbHVlKTsKKysJICAgIHByaW50ZigicmVzdWx0PSAlY1xuIiwKKysJ CSAgIEJOX2lzX3ByaW1lX2V4KHBwLDIwLE5VTEwsTlVMTCkgPyAnUCcgOiAnRicpOworKwkgICAg fQkgICAgCisrCX0KKysgICAgfQorKworK3ZvaWQgcHFnKCkKKysgICAgeworKyAgICBjaGFyIGJ1 ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFs dWU7CisrICAgIGludCBubW9kPTA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsK KysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFs dWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQorKwkgICAgeworKwkgICAgaW50 IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsK KysKKysJICAgIHdoaWxlKG4tLSkKKysJCXsKKysJCXVuc2lnbmVkIGNoYXIgc2VlZFsyMF07Cisr CQlEU0EgKmRzYTsKKysJCWludCBjb3VudGVyOworKwkJdW5zaWduZWQgbG9uZyBoOworKwkJZHNh ID0gRklQU19kc2FfbmV3KCk7CisrCisrCQlpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KGRzYSwgbm1vZCxzZWVkLDAsJmNvdW50ZXIsJmgsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50 X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJcGJuKCJQIixkc2EtPnApOworKwkJ cGJuKCJRIixkc2EtPnEpOworKwkJcGJuKCJHIixkc2EtPmcpOworKwkJcHYoIlNlZWQiLHNlZWQs MjApOworKwkJcHJpbnRmKCJjID0gJWRcbiIsY291bnRlcik7CisrCQlwcmludGYoIkggPSAlbHhc biIsaCk7CisrCQlwdXRjKCdcbicsc3Rkb3V0KTsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkg ICAgZnB1dHMoYnVmLHN0ZG91dCk7CisrCX0KKysgICAgfQorKworK3ZvaWQgcHFndmVyKCkKKysg ICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwg KmcgPSBOVUxMOworKyAgICBpbnQgY291bnRlciwgY291bnRlcjI7CisrICAgIHVuc2lnbmVkIGxv bmcgaCwgaDI7CisrICAgIERTQSAqZHNhPU5VTEw7CisrICAgIGludCBubW9kPTA7CisrICAgIHVu c2lnbmVkIGNoYXIgc2VlZFsxMDI0XTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBi dWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFs dWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVl OworKwkJfQorKwlmcHV0cyhidWYsIHN0ZG91dCk7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21v ZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlNlZWQiKSkKKysJICAgIHsKKysJICAgIGludCBzbGVuID0gaGV4MmJpbih2YWx1ZSwgc2VlZCk7 CisrCSAgICBpZiAoc2xlbiAhPSAyMCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiU2VlZCBw YXJzZSBsZW5ndGggZXJyb3JcbiIpOworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICB9CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJjIikpCisrCSAgICBjb3VudGVyID1hdG9pKGJ1Zis0KTsK KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkgiKSkKKysJICAgIHsKKysJICAgIGggPSBhdG9p KHZhbHVlKTsKKysJICAgIGlmICghcCB8fCAhcSB8fCAhZykKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICBkc2EgPSBG SVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCBubW9kLHNlZWQsMjAgLCZjb3VudGVyMiwmaDIsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50 X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKyAgICAgICAgICAgIGlmIChCTl9jbXAo ZHNhLT5wLCBwKSB8fCBCTl9jbXAoZHNhLT5xLCBxKSB8fCBCTl9jbXAoZHNhLT5nLCBnKQorKwkJ fHwgKGNvdW50ZXIgIT0gY291bnRlcjIpIHx8IChoICE9IGgyKSkKKysJICAgIAlwcmludGYoIlJl c3VsdCA9IEZcbiIpOworKwkgICAgZWxzZQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gUFxuIik7 CisrCSAgICBCTl9mcmVlKHApOworKwkgICAgQk5fZnJlZShxKTsKKysJICAgIEJOX2ZyZWUoZyk7 CisrCSAgICBwID0gTlVMTDsKKysJICAgIHEgPSBOVUxMOworKwkgICAgZyA9IE5VTEw7CisrCSAg ICBGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2EgPSBOVUxMOworKwkgICAgfQorKwl9Cisr ICAgIH0KKysKKysvKiBLZXlwYWlyIHZlcmlmaWNhdGlvbiByb3V0aW5lLiBOQjogdGhpcyBpc24n dCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBGSVBTMTQwLTIKKysgKiBhbGdvcml0aG0gdGVzdHMuIEl0 IGlzIGFuIGFkZGl0aW9uYWwgdGVzdCB0byBwZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gdGhlCisr ICogb3V0cHV0IG9mIHRoZSBLZXlQYWlyIHRlc3QuCisrICovCisrCisrc3RhdGljIGludCBkc3Nf cGFyYW1jaGVjayhpbnQgbm1vZCwgQklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqZywKKysJ CQkJCQkJQk5fQ1RYICpjdHgpCisrICAgIHsKKysgICAgQklHTlVNICpyZW0gPSBOVUxMOworKyAg ICBpZiAoQk5fbnVtX2JpdHMocCkgIT0gbm1vZCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9u dW1fYml0cyhxKSAhPSAxNjApCisrCXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgo cCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICBp ZiAoQk5faXNfcHJpbWVfZXgocSwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCisr CXJldHVybiAwOworKyAgICByZW0gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFCTl9tb2QocmVtLCBw LCBxLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKQorKyAgICAJfHwgKEJOX2NtcChnLCBCTl92YWx1 ZV9vbmUoKSkgPD0gMCkKKysJfHwgIUJOX21vZF9leHAocmVtLCBnLCBxLCBwLCBjdHgpIHx8ICFC Tl9pc19vbmUocmVtKSkKKysJeworKwlCTl9mcmVlKHJlbSk7CisrCXJldHVybiAwOworKwl9Cisr ICAgIC8qIFRvZG86IGNoZWNrIGcgKi8KKysgICAgQk5fZnJlZShyZW0pOworKyAgICByZXR1cm4g MTsKKysgICAgfQorKworK3ZvaWQga2V5dmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0 XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Cisr ICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMLCAqWCA9IE5VTEwsICpZ ID0gTlVMTDsKKysgICAgQklHTlVNICpZMjsKKysgICAgQk5fQ1RYICpjdHggPSBOVUxMOworKyAg ICBpbnQgbm1vZD0wLCBwYXJhbWNoZWNrID0gMDsKKysKKysgICAgY3R4ID0gQk5fQ1RYX25ldygp OworKyAgICBZMiA9IEJOX25ldygpOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7 CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgaWYg KHApCisrCQlCTl9mcmVlKHApOworKwkgICAgcCA9IE5VTEw7CisrCSAgICBpZiAocSkKKysJCUJO X2ZyZWUocSk7CisrCSAgICBxID0gTlVMTDsKKysJICAgIGlmIChnKQorKwkJQk5fZnJlZShnKTsK KysJICAgIGcgPSBOVUxMOworKwkgICAgcGFyYW1jaGVjayA9IDA7CisrCSAgICBubW9kPWF0b2ko dmFsdWUpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAg cD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAg cT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAg Zz1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWCIpKQorKwkgICAg WD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAg eworKwkgICAgWT1oZXgyYm4odmFsdWUpOworKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnIHx8ICFY IHx8ICFZKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQll eGl0ICgxKTsKKysJCX0KKysJICAgIHBibigiUCIscCk7CisrCSAgICBwYm4oIlEiLHEpOworKwkg ICAgcGJuKCJHIixnKTsKKysJICAgIHBibigiWCIsWCk7CisrCSAgICBwYm4oIlkiLFkpOworKwkg ICAgaWYgKCFwYXJhbWNoZWNrKQorKwkJeworKwkJaWYgKGRzc19wYXJhbWNoZWNrKG5tb2QsIHAs IHEsIGcsIGN0eCkpCisrCQkJcGFyYW1jaGVjayA9IDE7CisrCQllbHNlCisrCQkJcGFyYW1jaGVj ayA9IC0xOworKwkJfQorKwkgICAgaWYgKHBhcmFtY2hlY2sgIT0gMSkKKysJICAgCXByaW50Zigi UmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNlCisrCQl7CisrCQlpZiAoIUJOX21vZF9leHAoWTIs IGcsIFgsIHAsIGN0eCkgfHwgQk5fY21wKFkyLCBZKSkKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQg PSBGXG4iKTsKKysJICAgICAgICBlbHNlCisrCSAgICAJCXByaW50ZigiUmVzdWx0ID0gUFxuIik7 CisrCQl9CisrCSAgICBCTl9mcmVlKFgpOworKwkgICAgQk5fZnJlZShZKTsKKysJICAgIFggPSBO VUxMOworKwkgICAgWSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysJaWYgKHApCisrCSAgICBCTl9m cmVlKHApOworKwlpZiAocSkKKysJICAgIEJOX2ZyZWUocSk7CisrCWlmIChnKQorKwkgICAgQk5f ZnJlZShnKTsKKysJaWYgKFkyKQorKwkgICAgQk5fZnJlZShZMik7CisrICAgIH0KKysKKyt2b2lk IGtleXBhaXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZb MTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysK KysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlm cHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdv cmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAgICBEU0EgKmRzYTsKKysJICAgIGludCBuPWF0b2ko dmFsdWUpOworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBk c2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNf ZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9l cnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAg ICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBwYm4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdc bicsc3Rkb3V0KTsKKysKKysJICAgIHdoaWxlKG4tLSkKKysJCXsKKysJCWlmICghRFNBX2dlbmVy YXRlX2tleShkc2EpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEp OworKwkJCX0KKysKKysJCXBibigiWCIsZHNhLT5wcml2X2tleSk7CisrCQlwYm4oIlkiLGRzYS0+ cHViX2tleSk7CisrCQlwdXRjKCdcbicsc3Rkb3V0KTsKKysJCX0KKysJICAgIH0KKysJfQorKyAg ICB9CisrCisrdm9pZCBzaWdnZW4oKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAg ICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50 IG5tb2Q9MDsKKysgICAgRFNBICpkc2E9TlVMTDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNp emVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3Jk LCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNv bnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJ ICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9k KTsKKysJICAgIGlmIChkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2EgPSBG SVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMo KTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4o IlEiLGRzYS0+cSk7CisrCSAgICBwYm4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rk b3V0KTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAg eworKwkgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07CisrCSAgICB1bnNpZ25lZCBjaGFyIHNi dWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50IHNsZW47CisrCSAgICBpbnQgbjsKKysJICAgIEVW UF9QS0VZIHBrOworKwkgICAgRVZQX01EX0NUWCBtY3R4OworKwkgICAgRFNBX1NJRyAqc2lnOwor KwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysKKysJICAgIG49aGV4MmJpbih2YWx1ZSxt c2cpOworKwkgICAgcHYoIk1zZyIsbXNnLG4pOworKworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVf a2V5KGRzYSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9 CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7 CisrCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCisrCSAgICBFVlBfU2lnbkluaXRfZXgo Jm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOworKwkgICAgRVZQX1NpZ25VcGRhdGUoJm1jdHgsIG1z Zywgbik7CisrCSAgICBFVlBfU2lnbkZpbmFsKCZtY3R4LCBzYnVmLCAmc2xlbiwgJnBrKTsKKysK KysJICAgIHNpZyA9IERTQV9TSUdfbmV3KCk7CisrCSAgICBGSVBTX2RzYV9zaWdfZGVjb2RlKHNp Zywgc2J1Ziwgc2xlbik7CisrCisrCSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMi LHNpZy0+cyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIERTQV9TSUdfZnJlZShz aWcpOworKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysJICAgIH0KKysJfQorKwlp ZiAoZHNhKQorKwkJRklQU19kc2FfZnJlZShkc2EpOworKyAgICB9CisrCisrdm9pZCBzaWd2ZXIo KQorKyAgICB7CisrICAgIERTQSAqZHNhPU5VTEw7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAg ICBjaGFyIGxidWZbMTAyNF07CisrICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOworKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTAsIG49MDsKKysgICAgRFNBX1NJ RyBzZywgKnNpZyA9ICZzZzsKKysKKysgICAgc2lnLT5yID0gTlVMTDsKKysgICAgc2lnLT5zID0g TlVMTDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp CisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisr CQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Cisr CSAgICBpZihkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2E9RklQU19kc2Ff bmV3KCk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBk c2EtPnA9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJ ICAgIGRzYS0+cT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIp KQorKwkgICAgeworKwkgICAgZHNhLT5nPWhleDJibih2YWx1ZSk7CisrCisrCSAgICBwcmludGYo Ilttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBi bigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxz dGRvdXQpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAg ICB7CisrCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKKysJICAgIHB2KCJNc2ciLG1zZyxuKTsK KysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKKysJICAgIGRzYS0+cHVi X2tleT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUiIpKQorKwkg ICAgc2lnLT5yPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTIikp CisrCSAgICB7CisrCSAgICBFVlBfTURfQ1RYIG1jdHg7CisrCSAgICBFVlBfUEtFWSBwazsKKysJ ICAgIHVuc2lnbmVkIGNoYXIgc2lnYnVmWzYwXTsKKysJICAgIHVuc2lnbmVkIGludCBzbGVuOwor KwkgICAgaW50IHI7CisrCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKwkgICAgcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKKysJICAgIHBrLnBrZXkuZHNhID0gZHNhOworKwkgICAgc2lnLT5z PWhleDJibih2YWx1ZSk7CisrCQorKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkgICAg cGJuKCJSIixzaWctPnIpOworKwkgICAgcGJuKCJTIixzaWctPnMpOworKworKwkgICAgc2xlbiA9 IEZJUFNfZHNhX3NpZ19lbmNvZGUoc2lnYnVmLCBzaWcpOworKwkgICAgRVZQX1ZlcmlmeUluaXRf ZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOworKwkgICAgRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0 eCwgbXNnLCBuKTsKKysJICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZ2J1Ziwgc2xl biwgJnBrKTsKKysJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrCQorKwkgICAgcHJp bnRmKCJSZXN1bHQgPSAlY1xuIiwgciA9PSAxID8gJ1AnIDogJ0YnKTsKKysJICAgIHB1dGMoJ1xu JyxzdGRvdXQpOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxj aGFyICoqYXJndikKKysgICAgeworKyAgICBpZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50Zihz dGRlcnIsIiVzIFtwcmltZXxwcWd8cHFndmVyfGtleXBhaXJ8c2lnZ2VufHNpZ3Zlcl1cbiIsYXJn dlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsK KysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNtcChh cmd2WzFdLCJwcmltZSIpKQorKwlwcmltZXMoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sInBxZyIpKQorKwlwcWcoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZ3Zl ciIpKQorKwlwcWd2ZXIoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXBhaXIi KSkKKysJa2V5cGFpcigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5dmVyIikp CisrCWtleXZlcigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lnZ2VuIikpCisr CXNpZ2dlbigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lndmVyIikpCisrCXNp Z3ZlcigpOworKyAgICBlbHNlCisrCXsKKysJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93 IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhpdCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsK KysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcm5ndnMuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2 cy5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyMzAgQEAKKysvKgorKyAqIENydWRlIHRlc3Qg ZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCisr ICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1Y3QuCisrICoKKysgKiBOb3RlIHRo ZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1h dAorKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1i ZXIgR2VuZXJhdG9yCisrICogVmFsaWRhdGlvbiBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAw NC4KKysgKgorKyAqLworKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lm bmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRc biIpOworKyAgICByZXR1cm4gMDsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUw OXYzLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNp bmNsdWRlICJmaXBzX3V0bC5oIgorKworK3ZvaWQgdnN0KCkKKysgICAgeworKyAgICB1bnNpZ25l ZCBjaGFyICprZXkgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKKysgICAg dW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Cisr ICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysgICAgbG9uZyBpLCBrZXlsZW47CisrCisrICAgIGtleWxlbiA9IDA7 CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7 CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0i LCAxMykpCisrCQlrZXlsZW4gPSAxNjsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTky LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAyNDsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltB RVMgMjU2LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAzMjsKKysJaWYgKCFwYXJzZV9saW5lKCZr ZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQljb250aW51ZTsKKysJaWYoIXN0cmNtcChr ZXl3b3JkLCJLZXkiKSkKKysJICAgIHsKKysJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwor KwkgICAgaWYgKGkgIT0ga2V5bGVuKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlk IGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7CisrCQlyZXR1cm47CisrCQl9 CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQorKwkgICAgeworKwkg ICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9 CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCisrCSAgICB7CisrCSAg ICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9Cisr CisrCSAgICBpZiAoIWtleSB8fCAhZHQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Np bmcga2V5IG9yIERUXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAgIEZJUFNfcmFuZF9z ZXRfa2V5KGtleSwga2V5bGVuKTsKKysJICAgIEZJUFNfcmFuZF9zZWVkKHYsMTYpOworKwkgICAg RklQU19yYW5kX3NldF9kdChkdCk7CisrCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikg PD0gMCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVl XG4iKTsKKysJICAgICAgICByZXR1cm47CisrCSAgICAgICAgfQorKworKwkgICAgcHYoIlIiLHJl dCwxNik7CisrCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKKysJICAgIGtleSA9IE5VTEw7CisrCSAg ICBPUEVOU1NMX2ZyZWUoZHQpOworKwkgICAgZHQgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVl KHYpOworKwkgICAgdiA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworK3ZvaWQgbWN0 KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOworKyAgICB1bnNpZ25l ZCBjaGFyICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOworKyAgICB1 bnNpZ25lZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxi dWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgbG9uZyBpLCBrZXls ZW47CisrICAgIGludCBqOworKworKyAgICBrZXlsZW4gPSAwOworKworKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0 KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0g MTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5 bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQor KwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCSAg ICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IGtleWxl bikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3Rp bmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsKKysJICAgIGR0PWhleDJiaW5fbSh2YWx1 ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgeworKwkgICAgdj1oZXgyYmluX20odmFsdWUs JmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgaWYgKCFrZXkgfHwg IWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Cisr CQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7 CisrCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2KTsKKysJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAw MDsgaSsrKQorKwkJeworKwkJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOworKwkJICAgIGlmIChG SVBTX3JhbmRfYnl0ZXMocmV0LDE2KSA8PSAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7CisrCQkgICAgICAgIHJldHVybjsKKysJCSAg ICAgICAgfQorKwkJICAgIC8qIEluY3JlbWVudCBEVCAqLworKwkJICAgIGZvciAoaiA9IDE1OyBq ID49IDA7IGotLSkKKysJCQl7CisrCQkJZHRbal0rKzsKKysJCQlpZiAoZHRbal0pCisrCQkJCWJy ZWFrOworKwkJCX0KKysJCX0KKysKKysJICAgIHB2KCJSIixyZXQsMTYpOworKwkgICAgT1BFTlNT TF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsK KysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZSh2KTsKKysJICAgIHYgPSBOVUxM OworKwkgICAgfQorKwl9CisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJn dikKKysgICAgeworKyAgICBpZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVz IFttY3R8dnN0XVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighRklQU19t b2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQor KyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKKysgICAgaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkp CisrCXsKKysJZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4i KTsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNt cChhcmd2WzFdLCJtY3QiKSkKKysJbWN0KCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFd LCJ2c3QiKSkKKysJdnN0KCk7CisrICAgIGVsc2UKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiRG9u J3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwlleGl0KDEpOworKwl9CisrCisrICAg IHJldHVybiAwOworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9m aXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5j CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM5MCBAQAor Ky8qIGZpcHNfcnNhZ3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4K KysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA3IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlv dW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAq CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNT TF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHBy aW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisr I2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAq b3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNB ICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05VTSAqWHAsCisrCQlCSUdO VU0gKmUpOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAor KwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKTsKKysKKytpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVM TDsKKysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJewor KwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGFyZ2Mg PT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIi KTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQg PSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJ fQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19w cmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2Uo aW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKwor KwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEw MjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY2hhciAq bGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJ UlNBICpyc2EgPSBOVUxMOworKwlCSUdOVU0gKlhwMSA9IE5VTEwsICpYcDIgPSBOVUxMLCAqWHAg PSBOVUxMOworKwlCSUdOVU0gKlhxMSA9IE5VTEwsICpYcTIgPSBOVUxMLCAqWHEgPSBOVUxMOwor KwlCSUdOVU0gKmUgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKwor KwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5l YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGlu ZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGlsZSAoZmdldHMob2xp bmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0 cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNr aXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJ cCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0 aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXAgfHwgKmtl eXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJ CQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7Cisr CisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0g cCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisr CQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsg c3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdv cmQsICJ4cDEiKSkKKysJCQl7CisrCQkJaWYgKFhwMSB8fCAhZG9faGV4MmJuKCZYcDEsdmFsdWUp KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgInhwMiIpKQorKwkJCXsKKysJCQlpZiAoWHAyIHx8ICFkb19oZXgyYm4oJlhwMix2YWx1 ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiWHAiKSkKKysJCQl7CisrCQkJaWYgKFhwIHx8ICFkb19oZXgyYm4oJlhwLHZhbHVl KSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJ4cTEiKSkKKysJCQl7CisrCQkJaWYgKFhxMSB8fCAhZG9faGV4MmJuKCZYcTEsdmFs dWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInhxMiIpKQorKwkJCXsKKysJCQlpZiAoWHEyIHx8ICFkb19oZXgyYm4oJlhxMix2 YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiWHEiKSkKKysJCQl7CisrCQkJaWYgKFhxIHx8ICFkb19oZXgyYm4oJlhxLHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJlIikpCisrCQkJeworKwkJCWlmIChlIHx8ICFkb19oZXgyYm4oJmUsdmFsdWUp KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgInAxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJwMiIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicCIp KQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTEiKSkKKysJ CQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEyIikpCisrCQkJY29u dGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxIikpCisrCQkJY29udGludWU7 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJuIikpCisrCQkJY29udGludWU7CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJkIikpCisrCQkJY29udGludWU7CisrCQllbHNlCisr CQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJ aWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkKKysJCQl7CisrCQkJcnNhID0gRklQU19yc2FfbmV3 KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYgKCFyc2FfcHJpbnRr ZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAsIGUpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJO X2ZyZWUoWHAxKTsKKysJCQlYcDEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHAyKTsKKysJCQlYcDIg PSBOVUxMOworKwkJCUJOX2ZyZWUoWHApOworKwkJCVhwID0gTlVMTDsKKysJCQlCTl9mcmVlKGUp OworKwkJCWUgPSBOVUxMOworKwkJCX0KKysKKysJCWlmIChyc2EgJiYgWHExICYmIFhxMiAmJiBY cSkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkyKG91dCwgcnNhLCBYcTEsIFhxMiwgWHEp KQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHExKTsKKysJCQlYcTEgPSBOVUxMOwor KwkJCUJOX2ZyZWUoWHEyKTsKKysJCQlYcTIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEpOworKwkJ CVhxID0gTlVMTDsKKysJCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJcnNhID0gTlVMTDsKKysJ CQl9CisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYp CisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xf ZnJlZShsaW5lYnVmKTsKKysKKysJaWYgKFhwMSkKKysJCUJOX2ZyZWUoWHAxKTsKKysJaWYgKFhw MikKKysJCUJOX2ZyZWUoWHAyKTsKKysJaWYgKFhwKQorKwkJQk5fZnJlZShYcCk7CisrCWlmIChY cTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlm IChYcTIpCisrCQlCTl9mcmVlKFhxMik7CisrCWlmIChYcSkKKysJCUJOX2ZyZWUoWHEpOworKwlp ZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCWlmIChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJzYSk7 CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisr CWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAq b3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwK KysJCUJJR05VTSAqZSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpwMSA9IE5VTEws ICpwMiA9IE5VTEw7CisrCXAxID0gQk5fbmV3KCk7CisrCXAyID0gQk5fbmV3KCk7CisrCWlmICgh cDEgfHwgIXAyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgo cnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhwMSwgWHAyLCBYcCwKKysJCQkJCQlOVUxMLCBOVUxM LCBOVUxMLCBlLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUo b3V0LCAicDEiLCBwMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDIiLCBwMik7CisrCWRv X2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJzYS0+cCk7CisrCisrCXJldCA9IDE7CisrCisrCWVy cm9yOgorKwlpZiAocDEpCisrCQlCTl9mcmVlKHAxKTsKKysJaWYgKHAyKQorKwkJQk5fZnJlZShw Mik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIo RklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVN ICpYcSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpxMSA9IE5VTEwsICpxMiA9IE5V TEw7CisrCXExID0gQk5fbmV3KCk7CisrCXEyID0gQk5fbmV3KCk7CisrCWlmICghcTEgfHwgIXEy KQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxM LCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCQkJWHExLCBYcTIsIFhxLCBO VUxMLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAi cTEiLCBxMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTIiLCBxMik7CisrCWRvX2JuX3By aW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAibiIs IHJzYS0+bik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAiZCIsIHJzYS0+ZCk7CisrCisrCXJl dCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocTEpCisrCQlCTl9mcmVlKHExKTsKKysJaWYgKHEy KQorKwkJQk5fZnJlZShxMik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzCTIwMTAt MDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKK0BAIC0wLDAgKzEsMzcwIEBACisrLyogZmlwc19yc2FzdGVzdC5jICovCisrLyogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2lu Y2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ht YWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5o PgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAg IHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysK KytzdGF0aWMgaW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbik7 Cisrc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQ X01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRs ZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICpp biA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMSwgU2FsdGxlbiA9IC0xOwor KworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOwor KwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0 bGVuIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlm IChTYWx0bGVuIDwgMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxp ZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOwor KwkJYXJndiArPSAyOworKwkJfQorKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14 OTMxIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlh cmd2Kys7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNl CisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91 dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJ aWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6 YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3Jc biIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghcnNhX3N0ZXN0KG91dCwgaW4sIFNh bHRsZW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FTVEVTVCBmaWxlIHBy b2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9 IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwor KwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYg KG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisr CX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNhX3N0 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVi dWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCVJTQSAq cnNhID0gTlVMTDsKKysJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKKysJdW5zaWduZWQgY2hh ciAqTXNnID0gTlVMTDsKKysJbG9uZyBNc2dsZW4gPSAtMTsKKysJaW50IGtleWxlbiA9IC0xLCBj dXJyZW50X2tleWxlbiA9IC0xOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKwor KwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5l YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGlu ZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGlsZSAoZmdldHMob2xp bmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0 cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNr aXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJ cCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBqdXN0IGNvcHkgKi8K KysJCWlmICghcCkKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJ CQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7Cisr CisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0g cCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisr CQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsg c3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCS8qIExvb2sgZm9yIFttb2Qg PSBYWFhdIGZvciBrZXkgbGVuZ3RoICovCisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW21v ZCIpKQorKwkJCXsKKysJCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCQlpZiAo KnAgIT0gJ10nKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCSpwID0gMDsKKysJCQlrZXls ZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoa2V5bGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTSEFBbGciKSkKKysJ CQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCisrCQkJCWRnc3QgPSBFVlBfc2hh MSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkKKysJCQkJZGdzdCA9 IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2IikpCisr CQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNI QTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAo dmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsKKysJCQllbHNlCisr CQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFs Z29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJCQl2YWx1ZSk7CisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkK KysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoc3Ry bGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJTXNnID0gaGV4MmJp bl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQl9CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCS8qIElmIGtleSBs ZW5ndGggaGFzIGNoYW5nZWQsIGdlbmVyYXRlIGFuZCBvdXRwdXQgcHVibGljCisrCQkgKiBrZXkg Y29tcG9uZW50cyBvZiBuZXcgUlNBIHByaXZhdGUga2V5LgorKwkJICovCisrCisrCQlpZiAoa2V5 bGVuICE9IGN1cnJlbnRfa2V5bGVuKQorKwkJCXsKKysJCQlCSUdOVU0gKmJuX2U7CisrCQkJaWYg KHJzYSkKKysJCQkJRklQU19yc2FfZnJlZShyc2EpOworKwkJCXJzYSA9IEZJUFNfcnNhX25ldygp OworKwkJCWlmICghcnNhKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWJuX2UgPSBCTl9uZXcoKTsK KysJCQlpZiAoIWJuX2UgfHwgIUJOX3NldF93b3JkKGJuX2UsIDB4MTAwMSkpCisrCQkJCWdvdG8g ZXJyb3I7CisrCQkJaWYgKCFSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBrZXlsZW4sIGJu X2UsIE5VTEwpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoYm5fZSk7CisrCQkJZnB1 dHMoIm4gPSAiLCBvdXQpOworKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5uKTsKKysJCQlmcHV0 cygiXG5lID0gIiwgb3V0KTsKKysJCQlkb19ibl9wcmludChvdXQsIHJzYS0+ZSk7CisrCQkJZnB1 dHMoIlxuIiwgb3V0KTsKKysJCQljdXJyZW50X2tleWxlbiA9IGtleWxlbjsKKysJCQl9CisrCisr CQlpZiAoTXNnICYmIGRnc3QpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50c2lnKG91dCwgcnNh LCBkZ3N0LCBNc2csIE1zZ2xlbiwKKysJCQkJCQkJCVNhbHRsZW4pKQorKwkJCQlnb3RvIGVycm9y OworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJfQorKworKwkJ fQorKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BF TlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGlu ZWJ1Zik7CisrCWlmIChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiBy ZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNl IGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7Cisr CisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBj b25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBp bnQgU2FsdGxlbikKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciAqc2lnYnVm ID0gTlVMTDsKKysJaW50IGksIHNpZ2xlbjsKKysJLyogRVZQX1BLRVkgc3RydWN0dXJlICovCisr CUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RYIGN0eDsKKysJcGsudHlwZSA9IEVWUF9QS0VZX1JT QTsKKysJcGsucGtleS5yc2EgPSByc2E7CisrCisrCXNpZ2xlbiA9IFJTQV9zaXplKHJzYSk7Cisr CXNpZ2J1ZiA9IE9QRU5TU0xfbWFsbG9jKHNpZ2xlbik7CisrCWlmICghc2lnYnVmKQorKwkJZ290 byBlcnJvcjsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoU2FsdGxlbiA+ PSAwKQorKwkJeworKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9NRF9D VFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAoU2Fs dGxlbiA9PSAtMikKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9G TEFHX1BBRF9YOTMxKTsKKysJaWYgKCFFVlBfU2lnbkluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkp CisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduVXBkYXRlKCZjdHgsIE1zZywgTXNnbGVu KSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmY3R4LCBzaWdidWYsICh1 bnNpZ25lZCBpbnQgKikmc2lnbGVuLCAmcGspKQorKwkJZ290byBlcnJvcjsKKysKKysJRVZQX01E X0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlmcHV0cygiUyA9ICIsIG91dCk7CisrCisrCWZvciAo aSA9IDA7IGkgPCBzaWdsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAyWCIsIHNpZ2J1Zltp XSk7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgor KworKwlyZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVz dC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM3NyBA QAorKy8qIGZpcHNfcnNhdnRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl bnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAw NS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3Vu ZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgor KyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xf RklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmlu dGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNl bHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91 dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKKytzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxF ICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwK KysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpT LCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJl dCA9IDE7CisrCWludCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQor KwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKKysJCXsKKysJCVNh bHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4gPCAwKQorKwkJCXsKKysJCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKKysJCQlnb3Rv IGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9IDI7CisrCQl9CisrCWVsc2Ug aWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKKysJCXsKKysJCVNh bHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJCX0KKysKKysJaWYgKGFyZ2Mg PT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIi KTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQg PSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8g ZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQp CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisr CQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShv dXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhM SU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBT YWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFy ICprZXl3b3JkLCAqdmFsdWU7CisrCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7CisrCUJJR05V TSAqbiA9IE5VTEwsICplID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMg PSBOVUxMOworKwlsb25nIE1zZ2xlbiwgU2xlbjsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVt ID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVO KTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKwor KwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUg KGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVt Kys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7 CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNp Z24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Ig c3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYg KCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0 KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9 IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7Cisr CQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1 ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwg aXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0 cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmZSx2YWx1ZSkpCisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hB QWxnIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQorKwkJCQlkZ3N0 ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCisr CQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNI QTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAo dmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKKysJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Cisr CQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJIkZBVEFMOiB1bnN1 cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJCQkJdmFsdWUpOworKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCU1z ZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQor KwkJCXsKKysJCQlpZiAoUykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoc3RybGVu KHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJUyA9IGhleDJiaW5fbSh2 YWx1ZSwgJlNsZW4pOworKwkJCWlmICghUykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQiKSkKKysJCQljb250aW51ZTsK KysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMob2xpbmVidWYsIG91 dCk7CisrCisrCQlpZiAobiAmJiBlICYmIE1zZyAmJiBTICYmIGRnc3QpCisrCQkJeworKwkJCWlm ICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdzdCwKKysJCQkJCU1zZywgTXNnbGVuLCBTLCBT bGVuLCBTYWx0bGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsK KysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xfZnJlZShTKTsKKysJCQlTID0gTlVMTDsKKysJ CQl9CisrCisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAo b2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJ CU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKG4pCisrCQlCTl9mcmVlKG4pOworKwlpZiAo ZSkKKysJCUJOX2ZyZWUoZSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgor KworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAl ZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJz YV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKKysJCWNvbnN0 IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCisrCQl1 bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKQorKwl7CisrCWludCByZXQg PSAwLCByOworKwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KKysJUlNB ICpyc2FfcHVia2V5ID0gTlVMTDsKKysJRVZQX1BLRVkgcGs7CisrCUVWUF9NRF9DVFggY3R4Owor Kwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworKwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3 KCk7CisrCWlmICghcnNhX3B1YmtleSkKKysJCWdvdG8gZXJyb3I7CisrCXJzYV9wdWJrZXktPm4g PSBCTl9kdXAobik7CisrCXJzYV9wdWJrZXktPmUgPSBCTl9kdXAoZSk7CisrCWlmICghcnNhX3B1 YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKKysJCWdvdG8gZXJyb3I7CisrCXBrLnR5cGUgPSBF VlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhX3B1YmtleTsKKysKKysJRVZQX01EX0NU WF9pbml0KCZjdHgpOworKworKwlpZiAoU2FsdGxlbiA+PSAwKQorKwkJeworKwkJTV9FVlBfTURf Q1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRs ZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKKysJCU1fRVZQX01E X0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKKysJaWYgKCFF VlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlm ICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCisrCQlnb3RvIGVycm9yOwor KworKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMsIFNsZW4sICZwayk7CisrCisrCisrCUVW UF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYgKHIgPCAwKQorKwkJZ290byBlcnJvcjsK KysJRVJSX2NsZWFyX2Vycm9yKCk7CisrCisrCWlmIChyID09IDApCisrCQlmcHV0cygiUmVzdWx0 ID0gRlxuIiwgb3V0KTsKKysJZWxzZQorKwkJZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7Cisr CisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocnNhX3B1YmtleSkKKysJCUZJUFNfcnNh X2ZyZWUocnNhX3B1YmtleSk7CisrCWlmIChidWYpCisrCQlPUEVOU1NMX2ZyZWUoYnVmKTsKKysK KysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9m aXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM4OCBAQAorKy8q IGZpcHNfc2hhdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAq LworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysg KgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3Ry aWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisr ICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysg KiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICog KGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisr CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0 cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMK KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJO byBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxz ZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgZGdzdF90ZXN0KEZJ TEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQg Km1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4pOworK3N0 YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAorKwkJdW5z aWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlp bnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmlu dF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJ aW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlp ZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFy Z3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQor KworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGlu aXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWRn c3RfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgZGlnZXN0 IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQor KwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3Jz KCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYg KG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJl dDsKKysKKysJfQorKworKyNkZWZpbmUgU0hBX1RFU1RfTUFYX0JJVFMJMTAyNDAwCisrI2RlZmlu ZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNUX01BWF9CSVRTID4+IDMpICogMikgKyAx MDApCisrCisraW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKQorKwl7CisrCWNvbnN0 IEVWUF9NRCAqbWQgPSBOVUxMOworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsK KysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAq U2VlZCA9IE5VTEw7CisrCWxvbmcgTXNnTGVuID0gLTEsIExlbiA9IC0xLCBTZWVkTGVuID0gLTE7 CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNT TF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxv YyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikK KysJCWdvdG8gZXJyb3I7CisrCisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgU0hBX1RFU1Rf TUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9s aW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNl ICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5 d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVi dWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbTD0yMF0g bGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWZwdXRzKG9saW5lYnVm LCBvdXQpOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsK KysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJl bW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4o dmFsdWUpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiW0wiKSAm JiAqcD09J10nKQorKwkJCXsKKysJCQlzd2l0Y2ggKGF0b2kodmFsdWUpKQorKwkJCQl7CisrCQkJ CWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7CisrCQkJCWNhc2UgMjg6IG1kPUVWUF9z aGEyMjQoKTsgYnJlYWs7CisrCQkJCWNhc2UgMzI6IG1kPUVWUF9zaGEyNTYoKTsgYnJlYWs7Cisr CQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJlYWs7CisrCQkJCWNhc2UgNjQ6IG1kPUVW UF9zaGE1MTIoKTsgYnJlYWs7CisrCQkJCWRlZmF1bHQ6IGdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ CX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJMZW4iKSkKKysJCQl7Cisr CQkJaWYgKExlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlMZW4gPSBhdG9p KHZhbHVlKTsKKysJCQlpZiAoTGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkv KiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRzICovCisrCQkJaWYgKExlbiAmIDB4NykK KysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoTGVuID4gU0hBX1RFU1RfTUFYX0JJVFMp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnTGVuID0gTGVuID4+IDM7CisrCQkJfQor KworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWxvbmcg dG1wbGVuOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcw JzsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1zZyA9IGhleDJi aW5fbSh2YWx1ZSwgJnRtcGxlbik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU2VlZCIpKQorKwkJCXsK KysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJ aWYgKFNlZWQpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJU2VlZCA9IGhleDJiaW5fbSh2 YWx1ZSwgJlNlZWRMZW4pOworKwkJCWlmICghU2VlZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNRCIpKQorKwkJCWNvbnRpbnVl OworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwg b3V0KTsKKysKKysJCWlmIChtZCAmJiBNc2cgJiYgKE1zZ0xlbiA+PSAwKSkKKysJCQl7CisrCQkJ aWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNnTGVuKSkKKysJCQkJZ290byBlcnJvcjsK KysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU1zZ0xlbiA9IC0x OworKwkJCUxlbiA9IC0xOworKwkJCX0KKysJCWVsc2UgaWYgKG1kICYmIFNlZWQgJiYgKFNlZWRM ZW4gPiAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9tb250ZShtZCwgb3V0LCBTZWVkLCBTZWVk TGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoU2VlZCk7CisrCQkJU2Vl ZCA9IE5VTEw7CisrCQkJU2VlZExlbiA9IC0xOworKwkJCX0KKysJCisrCisrCQl9CisrCisrCisr CXJldCA9IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NM X2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVm KTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xfZnJlZShNc2cpOworKwlpZiAoU2VlZCkKKysJCU9Q RU5TU0xfZnJlZShTZWVkKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6Cisr CisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVk XG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcHJp bnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAq TXNnLCBpbnQgTXNnbGVuKQorKwl7CisrCWludCBpLCBtZGxlbjsKKysJdW5zaWduZWQgY2hhciBt ZFtFVlBfTUFYX01EX1NJWkVdOworKwlpZiAoIUVWUF9EaWdlc3QoTXNnLCBNc2dsZW4sIG1kLCAo dW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwpKQorKwkJeworKwkJZnB1dHMoIkVycm9y IGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZnB1 dHMoIk1EID0gIiwgb3V0KTsKKysJZm9yIChpID0gMDsgaSA8IG1kbGVuOyBpKyspCisrCQlmcHJp bnRmKG91dCwgIiUwMngiLCBtZFtpXSk7CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCXJldHVybiAx OworKwl9CisrCisrc3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxF ICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbikKKysJeworKwl1bnNp Z25lZCBpbnQgaSwgaiwgazsKKysJaW50IHJldCA9IDA7CisrCUVWUF9NRF9DVFggY3R4OworKwl1 bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOworKwl1bnNpZ25lZCBpbnQgbWxlbiwgbTFs ZW4sIG0ybGVuLCBtM2xlbjsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAo U2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKKysJCW1sZW4gPSBTZWVkTGVuOworKwllbHNlCisr CQltbGVuID0gRVZQX01BWF9NRF9TSVpFOworKworKwltMSA9IE9QRU5TU0xfbWFsbG9jKG1sZW4p OworKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKwltMyA9IE9QRU5TU0xfbWFsbG9jKG1s ZW4pOworKworKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMpCisrCQlnb3RvIG1jX2Vycm9yOworKwor KwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVuOworKwltZW1jcHkobTEsIFNlZWQsIFNl ZWRMZW4pOworKwltZW1jcHkobTIsIFNlZWQsIFNlZWRMZW4pOworKwltZW1jcHkobTMsIFNlZWQs IFNlZWRMZW4pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKworKwlmb3IgKGogPSAwOyBqIDwg MTAwOyBqKyspCisrCQl7CisrCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorKwkJCXsKKysJ CQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVMTCk7CisrCQkJRVZQX0RpZ2VzdFVwZGF0 ZSgmY3R4LCBtMSwgbTFsZW4pOworKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTIsIG0ybGVu KTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0zLCBtM2xlbik7CisrCQkJcCA9IG0xOwor KwkJCW0xID0gbTI7CisrCQkJbTFsZW4gPSBtMmxlbjsKKysJCQltMiA9IG0zOworKwkJCW0ybGVu ID0gbTNsZW47CisrCQkJbTMgPSBwOworKwkJCUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LCBtMywg Jm0zbGVuKTsKKysJCQl9CisrCQlmcHJpbnRmKG91dCwgIkNPVU5UID0gJWRcbiIsIGopOworKwkJ ZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJCWZvciAoayA9IDA7IGsgPCBtM2xlbjsgaysrKQorKwkJ CWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKKysJCWZwdXRzKCJcblxuIiwgb3V0KTsKKysJ CW1lbWNweShtMSwgbTMsIG0zbGVuKTsKKysJCW1lbWNweShtMiwgbTMsIG0zbGVuKTsKKysJCW0x bGVuID0gbTJsZW4gPSBtM2xlbjsKKysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJbWNfZXJyb3I6 CisrCWlmIChtMSkKKysJCU9QRU5TU0xfZnJlZShtMSk7CisrCWlmIChtMikKKysJCU9QRU5TU0xf ZnJlZShtMik7CisrCWlmIChtMykKKysJCU9QRU5TU0xfZnJlZShtMyk7CisrCisrCUVWUF9NRF9D VFhfY2xlYW51cCgmY3R4KTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf dXRsLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzQz IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrdm9pZCBkb19wcmludF9lcnJvcnMo dm9pZCkKKysJeworKwljb25zdCBjaGFyICpmaWxlLCAqZGF0YTsKKysJaW50IGxpbmUsIGZsYWdz OworKwl1bnNpZ25lZCBsb25nIGw7CisrCXdoaWxlICgobCA9IEVSUl9nZXRfZXJyb3JfbGluZV9k YXRhKCZmaWxlLCAmbGluZSwgJmRhdGEsICZmbGFncykpKQorKwkJeworKwkJZnByaW50ZihzdGRl cnIsICJFUlJPUjolbHg6bGliPSVkLGZ1bmM9JWQscmVhc29uPSVkIgorKwkJCQkiOmZpbGU9JXM6 bGluZT0lZDolc1xuIiwKKysJCQlsLCBFUlJfR0VUX0xJQihsKSwgRVJSX0dFVF9GVU5DKGwpLCBF UlJfR0VUX1JFQVNPTihsKSwKKysJCQlmaWxlLCBsaW5lLCBmbGFncyAmIEVSUl9UWFRfU1RSSU5H ID8gZGF0YSA6ICIiKTsKKysJCX0KKysJfQorKworK2ludCBoZXgyYmluKGNvbnN0IGNoYXIgKmlu LCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG4xLCBuMjsKKysgICAgdW5z aWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0wLG4yPTAgOyBpbltuMV0gJiYgaW5bbjFd ICE9ICdcbicgOyApCisrCXsgLyogZmlyc3QgYnl0ZSAqLworKwlpZiAoKGluW24xXSA+PSAnMCcp ICYmIChpbltuMV0gPD0gJzknKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnMCc7CisrCWVsc2Ug aWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCisrCSAgICBjaCA9IGluW24x KytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9 ICdmJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7CisrCWVsc2UKKysJICAgIHJl dHVybiAtMTsKKysJaWYoIWluW24xXSkKKysJICAgIHsKKysJICAgIG91dFtuMisrXT1jaDsKKysJ ICAgIGJyZWFrOworKwkgICAgfQorKwlvdXRbbjJdID0gY2ggPDwgNDsKKysJLyogc2Vjb25kIGJ5 dGUgKi8KKysJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBj aCA9IGluW24xKytdIC0gJzAnOworKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24x XSA8PSAnRicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgo aW5bbjFdID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAt ICdhJyArIDEwOworKwllbHNlCisrCSAgICByZXR1cm4gLTE7CisrCW91dFtuMisrXSB8PSBjaDsK KysJfQorKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt1bnNpZ25lZCBjaGFyICpoZXgyYmlu X20oY29uc3QgY2hhciAqaW4sIGxvbmcgKnBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqcDsK KysJcCA9IE9QRU5TU0xfbWFsbG9jKChzdHJsZW4oaW4pICsgMSkvMik7CisrCSpwbGVuID0gaGV4 MmJpbihpbiwgcCk7CisrCXJldHVybiBwOworKwl9CisrCisraW50IGRvX2hleDJibihCSUdOVU0g KipwciwgY29uc3QgY2hhciAqaW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqcDsKKysJbG9uZyBw bGVuOworKwlpbnQgciA9IDA7CisrCXAgPSBoZXgyYmluX20oaW4sICZwbGVuKTsKKysJaWYgKCFw KQorKwkJcmV0dXJuIDA7CisrCWlmICghKnByKQorKwkJKnByID0gQk5fbmV3KCk7CisrCWlmICgh KnByKQorKwkJcmV0dXJuIDA7CisrCWlmIChCTl9iaW4yYm4ocCwgcGxlbiwgKnByKSkKKysJCXIg PSAxOworKwlPUEVOU1NMX2ZyZWUocCk7CisrCXJldHVybiByOworKwl9CisrCisraW50IGRvX2Ju X3ByaW50KEZJTEUgKm91dCwgQklHTlVNICpibikKKysJeworKwlpbnQgbGVuLCBpOworKwl1bnNp Z25lZCBjaGFyICp0bXA7CisrCWxlbiA9IEJOX251bV9ieXRlcyhibik7CisrCWlmIChsZW4gPT0g MCkKKysJCXsKKysJCWZwdXRzKCIwMCIsIG91dCk7CisrCQlyZXR1cm4gMTsKKysJCX0KKysKKysJ dG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKKysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKysJCXJldHVybiAwOworKwkJ fQorKwlCTl9ibjJiaW4oYm4sIHRtcCk7CisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKysJ CWZwcmludGYob3V0LCAiJTAyeCIsIHRtcFtpXSk7CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwly ZXR1cm4gMTsKKysJfQorKworK2ludCBkb19ibl9wcmludF9uYW1lKEZJTEUgKm91dCwgY29uc3Qg Y2hhciAqbmFtZSwgQklHTlVNICpibikKKysJeworKwlpbnQgcjsKKysJZnByaW50ZihvdXQsICIl cyA9ICIsIG5hbWUpOworKwlyID0gZG9fYm5fcHJpbnQob3V0LCBibik7CisrCWlmICghcikKKysJ CXJldHVybiAwOworKwlmcHV0cygiXG4iLCBvdXQpOworKwlyZXR1cm4gMTsKKysJfQorKworK2lu dCBwYXJzZV9saW5lKGNoYXIgKipwa3csIGNoYXIgKipwdmFsLCBjaGFyICpsaW5lYnVmLCBjaGFy ICpvbGluZWJ1ZikKKysJeworKwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKKysJc3Ry Y3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJa2V5d29yZCA9IGxpbmVidWY7CisrCS8qIFNraXAg bGVhZGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29y ZCkpCisrCQlrZXl3b3JkKys7CisrCisrCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwlwID0gc3Ry Y2hyKGxpbmVidWYsICc9Jyk7CisrCisrCS8qIElmIG5vICc9JyBleGl0ICovCisrCWlmICghcCkK KysJCXJldHVybiAwOworKworKwlxID0gcCAtIDE7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBz cGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkqcS0tID0g MDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9IHAgKyAxOworKworKwkvKiBSZW1vdmUgbGVhZGlu ZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2 YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2 YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJd2hpbGUgKCpw ID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkqcC0tID0gMDsKKysK KysJKnBrdyA9IGtleXdvcmQ7CisrCSpwdmFsID0gdmFsdWU7CisrCXJldHVybiAxOworKwl9Cisr CisrQklHTlVNICpoZXgyYm4oY29uc3QgY2hhciAqaW4pCisrICAgIHsKKysgICAgQklHTlVNICpw PU5VTEw7CisrCisrICAgIGlmICghZG9faGV4MmJuKCZwLCBpbikpCisrCXJldHVybiBOVUxMOwor KworKyAgICByZXR1cm4gcDsKKysgICAgfQorKworK2ludCBiaW4yaGV4KGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuMSwgbjI7Cisr ICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9MCxuMj0wIDsgbjEgPCBsZW4g OyArK24xKQorKwl7CisrCWNoPWluW24xXSA+PiA0OworKwlpZiAoY2ggPD0gMHgwOSkKKysJICAg IG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UKKysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7Cisr CWNoPWluW24xXSAmIDB4MGY7CisrCWlmKGNoIDw9IDB4MDkpCisrCSAgICBvdXRbbjIrK109Y2gr JzAnOworKwllbHNlCisrCSAgICBvdXRbbjIrK109Y2gtMTArJ2EnOworKwl9CisrICAgIG91dFtu Ml09J1wwJzsKKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisrdm9pZCBwdihjb25zdCBjaGFy ICp0YWcsY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLGludCBsZW4pCisrICAgIHsKKysgICAgY2hh ciBvYnVmWzIwNDhdOworKworKyAgICBiaW4yaGV4KHZhbCxsZW4sb2J1Zik7CisrICAgIHByaW50 ZigiJXMgPSAlc1xuIix0YWcsb2J1Zik7CisrICAgIH0KKysKKysvKiBUbyBhdm9pZCBleHRlbnNp dmUgY2hhbmdlcyB0byB0ZXN0IHByb2dyYW0gYXQgdGhpcyBzdGFnZSBqdXN0IGNvbnZlcnQKKysg KiB0aGUgaW5wdXQgbGluZSBpbnRvIGFuIGFjY2VwdGFibGUgZm9ybS4gS2V5d29yZCBsaW5lcyBj b252ZXJ0ZWQgdG8gZm9ybQorKyAqICJrZXl3b3JkID0gdmFsdWVcbiIgbm8gbWF0dGVyIHdoYXQg d2hpdGUgc3BhY2UgcHJlc2VudCwgYWxsIG90aGVyIGxpbmVzCisrICoganVzdCBoYXZlIGxlYWRp bmcgYW5kIHRyYWlsaW5nIHNwYWNlIHJlbW92ZWQuCisrICovCisrCisraW50IHRpZHlfbGluZShj aGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKKysJeworKwljaGFyICprZXl3b3JkLCAqdmFs dWUsICpwLCAqcTsKKysJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJa2V5d29yZCA9IGxp bmVidWY7CisrCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCisrCQlrZXl3b3JkKys7CisrCS8qIExvb2sgZm9yID0gc2ln biAqLworKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCS8qIElmIG5vICc9JyBqdXN0 IGNob3AgbGVhZGluZywgdHJhaWxpbmcgd3MgKi8KKysJaWYgKCFwKQorKwkJeworKwkJcCA9IGtl eXdvcmQgKyBzdHJsZW4oa2V5d29yZCkgLSAxOworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCQlzdHJjcHkob2xpbmVi dWYsIGtleXdvcmQpOworKwkJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKKysJCXJldHVybiAxOwor KwkJfQorKworKwlxID0gcCAtIDE7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwor Kwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkqcS0tID0gMDsKKysKKysJ KnAgPSAwOworKwl2YWx1ZSA9IHAgKyAxOworKworKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBm cm9tIHZhbHVlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisr CQl2YWx1ZSsrOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwor KwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJd2hpbGUgKCpwID09ICdcbicg fHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkqcC0tID0gMDsKKysKKysJc3RyY3B5 KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJc3RyY2F0KG9saW5lYnVmLCAiID0gIik7CisrCXN0cmNh dChvbGluZWJ1ZiwgdmFsdWUpOworKwlzdHJjYXQob2xpbmVidWYsICJcbiIpOworKworKwlyZXR1 cm4gMTsKKysJfQorKworKy8qIE5COiB0aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIF9iaXRzXyBy ZWFkICovCisraW50IGJpbnQyYmluKGNvbnN0IGNoYXIgKmluLCBpbnQgbGVuLCB1bnNpZ25lZCBj aGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIG1lbXNldChvdXQsMCxsZW4p OworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKKysJaWYoaW5bbl0gPT0gJzEnKQorKwkg ICAgb3V0W24vOF18PSgweDgwID4+IChuJTgpKTsKKysgICAgcmV0dXJuIGxlbjsKKysgICAgfQor KworK2ludCBiaW4yYmludChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91 dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24p CisrCW91dFtuXT0oaW5bbi84XSYoMHg4MCA+PiAobiU4KSkpID8gJzEnIDogJzAnOworKyAgICBy ZXR1cm4gbjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLworKworK3ZvaWQgUHJpbnRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVk IGNoYXIgKnZhbCwgaW50IGxlbikKKyt7CisrI2lmIFZFUkJPU0UKKysgIGNoYXIgb2J1ZlsyMDQ4 XTsKKysgIGludCBvbGVuOworKyAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAg cHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2VuZGlmCisrfQorKwor K3ZvaWQgT3V0cHV0VmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4s IEZJTEUgKnJmcCxpbnQgYml0bW9kZSkKKysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07Cisr ICAgIGludCBvbGVuOworKworKyAgICBpZihiaXRtb2RlKQorKwlvbGVuPWJpbjJiaW50KHZhbCxs ZW4sb2J1Zik7CisrICAgIGVsc2UKKysJb2xlbj1iaW4yaGV4KHZhbCxsZW4sb2J1Zik7CisrCisr ICAgIGZwcmludGYocmZwLCAiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNpZiBW RVJCT1NFCisrICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNl bmRpZgorKyAgICB9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwc19lcnIu Yy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2Vyci5jCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2ZpcHNfZXJyLmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2Vyci5jCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcgQEAKKysjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgImZp cHNfZXJyLmgiCisrI2Vsc2UKKytzdGF0aWMgdm9pZCAqZHVtbXk9JmR1bW15OworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHNfZXJyLmguZmlwcyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vZmlwc19lcnIuaAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2Vy ci5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwc19lcnIuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiBjcnlwdG8vZmlwc19lcnIuaCAqLworKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAo ZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysK KysvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBta2Vyci5wbCBz Y3JpcHQ6IGFueSBjaGFuZ2VzCisrICogbWFkZSB0byBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdo ZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhpcyBmaWxlLAorKyAqIG9ubHkgcmVhc29uIHN0 cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKwor Ky8qIEJFR0lOIEVSUk9SIENPREVTICovCisrI2lmbmRlZiBPUEVOU1NMX05PX0VSUgorKworKyNk ZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0soRVJSX0xJQl9GSVBTLGZ1bmMsMCkKKysjZGVm aW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsMCxyZWFzb24pCisr Cisrc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5jdHNbXT0KKysJeworK3tFUlJf RlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJTFRJTl9HRU5QQVJBTVMi fSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJIkRTQV9CVUlMVElO X1BBUkFNR0VOIn0sCisre0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9fU0lHTiksCSJEU0FfZG9fc2ln biJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0s Cisre0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCksCSJFVlBfQ2lwaGVySW5pdF9l eCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgpLAkiRVZQX0RpZ2VzdElu aXRfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfRFNBKSwJIkZJUFNfQ0hFQ0tf RFNBIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCks CSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQ U19DSEVDS19SU0EpLAkiRklQU19DSEVDS19SU0EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNf RFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNLIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX01P REVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfUEtFWV9T SUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QifSwKKyt7RVJSX0ZVTkMo RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJIkZJUFNfc2VsZnRlc3RfYWVzIn0sCisre0VSUl9G VU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyksCSJGSVBTX3NlbGZ0ZXN0X2RlcyJ9LAorK3tF UlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLAkiRklQU19zZWxmdGVzdF9kc2EifSwK Kyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyksCSJGSVBTX3NlbGZ0ZXN0X2ht YWMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HKSwJIkZJUFNfc2VsZnRl c3Rfcm5nIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEpLAkiRklQU19z ZWxmdGVzdF9zaGExIn0sCisre0VSUl9GVU5DKEZJUFNfRl9IQVNIX0ZJTkFMKSwJIkhBU0hfRklO QUwifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiksCSJSU0FfQlVJTFRJ Tl9LRVlHRU4ifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUKSwJ IlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BS SVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfRU5DUllQVCJ9LAorK3tFUlJfRlVOQyhG SVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZX1BVQkxJQ19ERUNSWVBUIn0s Cisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9FQVlfUFVC TElDX0VOQ1JZUFQifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9F WCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX1NTTEVB WV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCisrezAsTlVMTH0KKysJfTsKKysK KytzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX3JlYXNvbnNbXT0KKysJeworK3tFUlJf UkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUpICAgICAgLCJjYW5ub3QgcmVhZCBleGUifSwK Kyt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVCksImNhbm5vdCByZWFk IGV4ZSBkaWdlc3QifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5D RSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2UifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRVhFX0RJ R0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdlc3QgZG9lcyBub3QgbWF0Y2gifSwKKyt7RVJS X1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpLCJmaW5nZXJwcmludCBk b2VzIG5vdCBtYXRjaCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05P VF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggbm9u cGljIHJlbG9jYXRlZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05P VF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggc2Vn bWVudCBhbGlhc2luZyJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9T RVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxmdGVzdCBmYWlsZWQifSwKKyt7RVJSX1JFQVNPTihG SVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwiaW52YWxpZCBrZXkgbGVuZ3RoIn0sCisre0VS Ul9SRUFTT04oRklQU19SX0tFWV9UT09fU0hPUlQpICAgICAgICAsImtleSB0b28gc2hvcnQifSwK Kyt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZpcHMgbWV0 aG9kIn0sCisre0VSUl9SRUFTT04oRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKSAsInBhaXJ3 aXNlIHRlc3QgZmFpbGVkIn0sCisre0VSUl9SRUFTT04oRklQU19SX1JTQV9ERUNSWVBUX0VSUk9S KSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFTT04oRklQU19SX1JTQV9FTkNS WVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFTT04oRklQU19S X1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0ZXN0IGZhaWxlZCJ9LAorK3tFUlJfUkVBU09O KEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAgICAgLCJ0ZXN0IGZhaWx1cmUifSwKKyt7RVJSX1JF QVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pICwidW5zdXBwb3J0ZWQgcGxhdGZvcm0i fSwKKyt7MCxOVUxMfQorKwl9OworKworKyNlbmRpZgorKworK3ZvaWQgRVJSX2xvYWRfRklQU19z dHJpbmdzKHZvaWQpCisrCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCisrCisrCWlmIChFUlJf ZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVuY3RzWzBdLmVycm9yKSA9PSBOVUxMKQorKwkJ eworKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX2Z1bmN0cyk7CisrCQlFUlJfbG9hZF9z dHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7CisrCQl9CisrI2VuZGlmCisrCX0KK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlw c19hZXNfc2VsZnRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAg LTAsMCArMSwxMDMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIHN0cnVjdAorKyAgICB7 CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworKyAgICB9IHRlc3Rz W109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgw NywKKysJICAweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKKysJeyAw eDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCisrCSAgMHg4OCwweDk5LDB4 QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZGIH0sCisrCXsgMHg2OSwweEM0LDB4RTAsMHhEOCww eDZBLDB4N0IsMHgwNCwweDMwLAorKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4 QzUsMHg1QSB9LAorKwl9LAorKwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCisrICAg IHsKKysgICAgdGVzdHNbMF0ua2V5WzBdKys7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVz dF9hZXMoKQorKyAgICB7CisrICAgIGludCBuOworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgRVZQ X0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAg ICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCisrCXsKKysJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0 eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJCXRlc3RzW25dLmtleSwgTlVMTCwKKysJCQkJdGVz dHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tuXS5jaXBoZXJ0ZXh0LAorKwkJCQkxNikgPD0g MCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7CisrICAgIGVycjoKKysgICAgRVZQ X0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKwkgICAgRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Cisr ICAgIHJldHVybiByZXQ7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9maXBzL2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHMu YworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMv Zmlwcy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQx OSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKworKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKysjaWZu ZGVmIFBBVEhfTUFYCisrI2RlZmluZSBQQVRIX01BWCAxMDI0CisrI2VuZGlmCisrCisrc3RhdGlj IGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWw7Cisrc3RhdGljIGludCBmaXBzX21vZGU7Cisrc3RhdGlj IGNvbnN0IHZvaWQgKmZpcHNfcmFuZF9jaGVjazsKKysKKytzdGF0aWMgdm9pZCBmaXBzX3NldF9t b2RlKGludCBvbm9mZikKKysJeworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5n X3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93 bmluZ190aHJlYWQpIGZpcHNfd19sb2NrKCk7CisrCQlmaXBzX21vZGUgPSBvbm9mZjsKKysJCWlm ICghb3duaW5nX3RocmVhZCkgZmlwc193X3VubG9jaygpOworKwkJfQorKwl9CisrCisrc3RhdGlj IHZvaWQgZmlwc19zZXRfcmFuZF9jaGVjayhjb25zdCB2b2lkICpyYW5kX2NoZWNrKQorKwl7Cisr CWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlmIChm aXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xv Y2soKTsKKysJCWZpcHNfcmFuZF9jaGVjayA9IHJhbmRfY2hlY2s7CisrCQlpZiAoIW93bmluZ190 aHJlYWQpIGZpcHNfd191bmxvY2soKTsKKysJCX0KKysJfQorKworK2ludCBGSVBTX21vZGUodm9p ZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293 bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJaWYg KCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwkJcmV0ID0gZmlwc19tb2RlOworKwkJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7CisrCQl9CisrCXJldHVybiByZXQ7 CisrCX0KKysKKytjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCkKKysJeworKwljb25z dCB2b2lkICpyZXQgPSAwOworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3Ro cmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93bmlu Z190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCQlyZXQgPSBmaXBzX3JhbmRfY2hlY2s7CisrCQlp ZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJCX0KKysJcmV0dXJuIHJldDsK KysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQorKyAgICB7CisrICAgIGlu dCByZXQgPSAwOworKyAgICBpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCXsKKysJaW50IG93bmlu Z190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3JfbG9jaygpOworKwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7CisrCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwl9CisrICAgIHJldHVybiByZXQ7Cisr ICAgIH0KKysKKysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3 aWxsIGJlIGNhbGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4g SXQgaGFzIHRoZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJp ZyBhIHBlcmZvcm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2so dm9pZCkKKysgICAgeworKyAgICBpZiAoZmlwc19zZWxmdGVzdF9mYWlsKQorKwl7CisrCU9wZW5T U0xEaWUoX19GSUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsK KysJfQorKyAgICB9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisrICAg IHsKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgfQorKworK2ludCBGSVBTX3Nl bGZ0ZXN0KCkKKysgICAgeworKworKyAgICByZXR1cm4gRklQU19zZWxmdGVzdF9zaGExKCkKKysJ JiYgRklQU19zZWxmdGVzdF9obWFjKCkKKysJJiYgRklQU19zZWxmdGVzdF9hZXMoKQorKwkmJiBG SVBTX3NlbGZ0ZXN0X2RlcygpCisrCSYmIEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJJiYgRklQU19z ZWxmdGVzdF9kc2EoKTsKKysgICAgfQorKworK2ludCBGSVBTX21vZGVfc2V0KGludCBvbm9mZikK KysgICAgeworKyAgICBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOworKyAgICBpbnQgZmlw c19jbGVhcl9vd25pbmdfdGhyZWFkKCk7CisrICAgIGludCByZXQgPSAwOworKworKyAgICBmaXBz X3dfbG9jaygpOworKyAgICBmaXBzX3NldF9zdGFydGVkKCk7CisrICAgIGZpcHNfc2V0X293bmlu Z190aHJlYWQoKTsKKysKKysgICAgaWYob25vZmYpCisrCXsKKysJdW5zaWduZWQgY2hhciBidWZb NDhdOworKworKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKworKwkvKiBEb24ndCBnbyBpbnRv IEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCisrCSAgIHNlZWRp bmcgKi8KKysJaWYoRklQU19tb2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpOworKwkgICAgZmlwc19z ZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAg IH0KKysKKysjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIKKysJaWYgKChPUEVOU1NMX2lhMzJjYXAg JiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8MjYpKQorKwkgICAgeworKwkgICAgRklQU2Vy cihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pOworKwkg ICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVu ZDsKKysJICAgIH0KKysjZW5kaWYKKysKKysJLyogUGVyZm9ybSBSTkcgS0FUIGJlZm9yZSBzZWVk aW5nICovCisrCWlmICghRklQU19zZWxmdGVzdF9ybmcoKSkKKysJICAgIHsKKysJICAgIGZpcHNf c2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAg ICB9CisrCisrCS8qIGF1dG9tYWdpY2FsbHkgc2VlZCBQUk5HIGlmIG5vdCBhbHJlYWR5IHNlZWRl ZCAqLworKwlpZighRklQU19yYW5kX3N0YXR1cygpKQorKwkgICAgeworKwkgICAgaWYoUkFORF9i eXRlcyhidWYsc2l6ZW9mIGJ1ZikgPD0gMCkKKysJCXsKKysJCWZpcHNfc2VsZnRlc3RfZmFpbCA9 IDE7CisrCQlyZXQgPSAwOworKwkJZ290byBlbmQ7CisrCQl9CisrCSAgICBGSVBTX3JhbmRfc2V0 X2tleShidWYsMzIpOworKwkgICAgRklQU19yYW5kX3NlZWQoYnVmKzMyLDE2KTsKKysJICAgIH0K KysKKysJLyogbm93IHN3aXRjaCBpbnRvIEZJUFMgbW9kZSAqLworKwlmaXBzX3NldF9yYW5kX2No ZWNrKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCVJBTkRfc2V0X3JhbmRfbWV0aG9kKEZJUFNfcmFu ZF9tZXRob2QoKSk7CisrCWlmKEZJUFNfc2VsZnRlc3QoKSkKKysJICAgIGZpcHNfc2V0X21vZGUo MSk7CisrCWVsc2UKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAg ICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCXJldCA9IDE7CisrCWdvdG8g ZW5kOworKwl9CisrICAgIGZpcHNfc2V0X21vZGUoMCk7CisrICAgIGZpcHNfc2VsZnRlc3RfZmFp bCA9IDA7CisrICAgIHJldCA9IDE7CisrZW5kOgorKyAgICBmaXBzX2NsZWFyX293bmluZ190aHJl YWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9Cisr Cisrdm9pZCBmaXBzX3dfbG9jayh2b2lkKQkJeyBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJ UFMpOyB9Cisrdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpCXsgQ1JZUFRPX3dfdW5sb2NrKENSWVBU T19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfbG9jayh2b2lkKQkJeyBDUllQVE9fcl9sb2Nr KENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpCXsgQ1JZUFRP X3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9CisrCisrc3RhdGljIGludCBmaXBzX3N0YXJ0 ZWQgPSAwOworK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcHNfdGhyZWFkID0gMDsKKysKKyt2b2lk IGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCkKKysJeworKwlmaXBzX3N0YXJ0ZWQgPSAxOworKwl9Cisr CisraW50IGZpcHNfaXNfc3RhcnRlZCh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3N0YXJ0ZWQ7 CisrCX0KKysKKytpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJl dCA9IDA7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCUNSWVBUT19yX2xv Y2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhyZWFkICE9IDAgJiYgZmlwc190 aHJlYWQgPT0gQ1JZUFRPX3RocmVhZF9pZCgpKQorKwkJCXJldCA9IDE7CisrCQlDUllQVE9fcl91 bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisr aW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysK KysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWQgPT0gMCkKKysJCQl7CisrCQkJZmlwc190 aHJlYWQgPSBDUllQVE9fdGhyZWFkX2lkKCk7CisrCQkJcmV0ID0gMTsKKysJCQl9CisrCQlDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9 CisrCisraW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQg PSAwOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVhZCA9PSBDUllQVE9fdGhyZWFk X2lkKCkpCisrCQkJeworKwkJCWZpcHNfdGhyZWFkID0gMDsKKysJCQlyZXQgPSAxOworKwkJCX0K KysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiBy ZXQ7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2ln bnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCisrICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2Fn ZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAorKyAqIGZsYWdzIG1kX2ZsYWdz LiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKKysgKiBhZGRpdGlv bmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0 CisrICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1 cnBvc2VzIGluIGNhc2UKKysgKiBvZiBmYWlsdXJlLgorKyAqLworKworK2ludCBmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAq dGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQg aW50IGthdGxlbiwKKysJCQljb25zdCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2Zs YWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQorKwl7CQorKwlpbnQgcmV0ID0gMDsKKysJ dW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKKysJdW5zaWduZWQgaW50 IHNpZ2xlbjsKKysJRVZQX01EX0NUWCBtY3R4OworKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwor KworKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQorKwkJJiYgKFJTQV9zaXplKHBr ZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKKysJCXsKKysJCXNpZyA9IE9QRU5TU0xf bWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7CisrCQlpZiAoIXNpZykKKysJCQl7Cisr CQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEVSUl9SX01BTExPQ19G QUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCisrCWlmICh0YnNsZW4gPT0g LTEpCisrCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOworKworKwlpZiAobWRfZmxhZ3Mp CisrCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxhZ3MpOworKworKwlpZiAoIUVW UF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlm ICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7Cisr CWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKKysJCWdvdG8g ZXJyb3I7CisrCisrCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0 LCBzaWcsIGthdGxlbikpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFFVlBfVmVyaWZ5SW5p dF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1Zl cmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290byBlcnJvcjsKKysJcmV0ID0g RVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtleSk7CisrCisrCWVycm9yOgor KwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJCU9QRU5TU0xfZnJlZShzaWcpOworKwlFVlBfTURfQ1RY X2NsZWFudXAoJm1jdHgpOworKwlpZiAocmV0ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1RfRkFJTFVSRSk7CisrCQlpZiAo ZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsK KysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworKy8qIEdlbmVyYWxpemVk IHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1 bHQKKysgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9y aWdpbmFsIHBsYWludGV4dC4KKysgKi8KKysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0 ZXh0LAorKwkJCWludCBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01BWF9D SVBIRVJfVEVTVF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBIRVJf VEVTVF9TSVpFXTsKKysJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9URVNU X1NJWkUpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwg aXYsIDEpIDw9IDApCisrCQlyZXR1cm4gMDsKKysJRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFp bnRleHQsIGxlbik7CisrCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCisrCQly ZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXks IGl2LCAwKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCUVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0 bXAsIGxlbik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKKysJCXJldHVy biAwOworKwlyZXR1cm4gMTsKKysJfQorKworKyNpZiAwCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhp cyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KKysg KiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAorKyAqLwor K3ZvaWQgaGFzaF9maW5hbCh2b2lkKQorKwl7CisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUws RklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCX0KKysjZW5kaWYKKysKKysKKysjZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDYt MDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Zp cHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIw MAorQEAgLTAsMCArMSwxMzkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgc3RydWN0CisrICAgIHsKKysgICAgdW5zaWdu ZWQgY2hhciBrZXlbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAg dW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzMltdPQorKwl7CisrCXsK KysJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4ZWMsCisrCSAgMHgwYiww eDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCisrCXsgMHgwNiwweGE3LDB4ZDgs MHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCisrCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJm LDB4YzQsMHg0ZSwweGZkIH0KKysJfSwKKysJeworKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgy NSwweGM3LDB4M2UsMHgzNCwKKysJICAweDAxLDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUw LDB4NjggfSwKKysJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwK KysJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4ZmYgfSwKKysJfQorKwl9 OworKworK3N0YXRpYyBzdHJ1Y3QKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNF07 CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNp cGhlcnRleHRbOF07CisrICAgIH0gdGVzdHMzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJICAweEZFLDB4REMsMHhCQSwweDk4LDB4 NzYsMHg1NCwweDMyLDB4MTAsCisrCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhk ZSwweGYwIH0sCisrCXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0s CisrCXsgMHg1OSwweDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCisrCX0sCisr CXsKKysJeyAweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCisrCSAgMHgw MSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAorKwkgIDB4RUQsMHgzOSwweEQ5 LDB4NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9LAorKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4 OSwweEFCLDB4Q0QsMHhFRiB9LAorKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4 ODIsMHg4NiB9LAorKwl9LAorKwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X2RlcygpCisrICAg IHsKKysgICAgdGVzdHMyWzBdLnBsYWludGV4dFswXSsrOworKyAgICB9CisrCisraW50IEZJUFNf c2VsZnRlc3RfZGVzKCkKKysgICAgeworKyAgICBpbnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJ UEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBF bmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dl cnMgKi8KKysgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQorKwl7CisrCWlmICghZmlwc19jaXBo ZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKKysJCQkJdGVzdHMyW25dLmtleSwgTlVM TCwKKysJCQkJdGVzdHMyW25dLnBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQor KwkJZ290byBlcnI7CisrCX0KKysKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBh bmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsr bikKKysJeworKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigp LAorKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0 ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAx OworKyAgICBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlm IChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOworKworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0t IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEw LTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKK0BAIC0wLDAgKzEsMTg2IEBACisrLyogY3J5cHRvL2RzYS9kc2F0ZXN0LmMgKi8KKysv KiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkK KysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNT TCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25m b3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBm b3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwg YmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0 IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGgg dGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMK KysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBz dWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUg cmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMg WW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0 aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9y bSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1 bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4K KysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcg KGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2Fu IGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWlu ZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3Ug aW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVv ZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlv dSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBg QVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAq IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBU aGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFp bGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBj aGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQg cHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRo ZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIHNl ZWQsIG91dF9wLCBvdXRfcSwgb3V0X2cgYXJlIHRha2VuIHRoZSBOSVNUIHRlc3QgdmVjdG9ycyAq LworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0geworKwkweDc3LCAweDhmLCAw eDQwLCAweDc0LCAweDZmLCAweDY2LCAweGJlLCAweDMzLCAweGNlLCAweGJlLCAweDk5LCAweDM0 LAorKwkweDRjLCAweGZjLCAweGYzLCAweDI4LCAweGFhLCAweDcwLCAweDJkLCAweDNhCisrICAJ fTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0geworKwkweGY3LCAweDdjLCAw eDFiLCAweDgzLCAweGQ4LCAweGU4LCAweDVjLCAweDdmLCAweDg1LCAweDMwLCAweDE3LCAweDU3 LAorKwkweDIxLCAweDk1LCAweGZlLCAweDI2LCAweDA0LCAweGViLCAweDQ3LCAweDRjLCAweDNh LCAweDRhLCAweDgxLCAweDRiLAorKwkweDcxLCAweDJlLCAweGVkLCAweDZlLCAweDRmLCAweDNk LCAweDExLCAweDBmLCAweDdjLCAweGZlLCAweDM2LCAweDQzLAorKwkweDUxLCAweGQ5LCAweDgx LCAweDM5LCAweDE3LCAweGRmLCAweDYyLCAweGY2LCAweDljLCAweDAxLCAweGE4LCAweDY5LAor KwkweDcxLCAweGRkLCAweDI5LCAweDdmLCAweDQ3LCAweGU2LCAweDY1LCAweGE2LCAweDIyLCAw eGU4LCAweDZhLCAweDEyLAorKwkweDJiLCAweGMyLCAweDgxLCAweGZmLCAweDMyLCAweDcwLCAw eDJmLCAweDllLCAweGNhLCAweDUzLCAweDI2LCAweDQ3LAorKwkweDBmLCAweDU5LCAweGQ3LCAw eDllLCAweDJjLCAweGE1LCAweDA3LCAweGM0LCAweDQ5LCAweDUyLCAweGEzLCAweGU0LAorKwkw eDZiLCAweDA0LCAweDAwLCAweDI1LCAweDQ5LCAweGUyLCAweGU2LCAweDdmLCAweDI4LCAweDc4 LCAweDk3LCAweGI4LAorKwkweDNhLCAweDMyLCAweDE0LCAweDM4LCAweGEyLCAweDUxLCAweDMz LCAweDIyLCAweDQ0LCAweDdlLCAweGQ3LCAweGVmLAorKwkweDQ1LCAweGRiLCAweDA2LCAweDRh LCAweGQyLCAweDgyLCAweDRhLCAweDgyLCAweDJjLCAweGIxLCAweGQ3LCAweGQ4LAorKwkweGI2 LCAweDczLCAweDAwLCAweDRkLCAweDk0LCAweDc3LCAweDk0LCAweGVmCisrCX07CisrCisrc3Rh dGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKKysJMHhkNCwgMHgwYSwgMHhhYywgMHg5Ziwg MHhiZCwgMHg4YywgMHg4MCwgMHhjMiwgMHgzOCwgMHg3ZSwgMHgyZSwgMHgwYywKKysJMHg1Miwg MHg1YywgMHhlYSwgMHgzNCwgMHhhMSwgMHg4MywgMHgzMiwgMHhmMworKwl9OworKworK3N0YXRp YyB1bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7CisrCTB4MzQsIDB4NzMsIDB4OGIsIDB4NTcsIDB4 ODQsIDB4OGUsIDB4NTUsIDB4YmYsIDB4NTcsIDB4Y2MsIDB4NDEsIDB4YmIsCisrCTB4NWUsIDB4 MmIsIDB4ZDUsIDB4NDIsIDB4ZGQsIDB4MjQsIDB4MjIsIDB4MmEsIDB4MDksIDB4ZWEsIDB4MjYs IDB4MWUsCisrCTB4MTcsIDB4NjUsIDB4Y2IsIDB4MWEsIDB4YjMsIDB4MTIsIDB4NDQsIDB4YTMs IDB4OWUsIDB4OTksIDB4ZTksIDB4NjMsCisrCTB4ZWIsIDB4MzAsIDB4YjEsIDB4NzgsIDB4N2Is IDB4MDksIDB4NDAsIDB4MzAsIDB4ZmEsIDB4ODMsIDB4YzIsIDB4MzUsCisrCTB4ZTEsIDB4YzQs IDB4MmQsIDB4NzQsIDB4MWEsIDB4YjEsIDB4ODMsIDB4NTQsIDB4ZDgsIDB4MjksIDB4ZjQsIDB4 Y2YsCisrCTB4N2YsIDB4NmYsIDB4NjcsIDB4MWMsIDB4MzYsIDB4NDksIDB4ZWUsIDB4NmMsIDB4 YTIsIDB4M2MsIDB4MmQsIDB4NmEsCisrCTB4ZTksIDB4ZDMsIDB4OWEsIDB4ZjYsIDB4NTcsIDB4 NzgsIDB4NmYsIDB4ZmQsIDB4MzMsIDB4Y2QsIDB4M2MsIDB4ZWQsCisrCTB4ZmQsIDB4ZDQsIDB4 NDEsIDB4ZTYsIDB4NWMsIDB4OGIsIDB4ZTAsIDB4NjgsIDB4MzEsIDB4NDcsIDB4NDcsIDB4YWYs CisrCTB4MTIsIDB4YTcsIDB4ZjksIDB4MzIsIDB4MGQsIDB4OTQsIDB4MTUsIDB4NDgsIDB4ZDAs IDB4NTQsIDB4ODUsIDB4YjIsCisrCTB4MDQsIDB4YjUsIDB4NGQsIDB4ZDQsIDB4OWQsIDB4MDUs IDB4MjIsIDB4MjUsIDB4ZDksIDB4ZmQsIDB4NmMsIDB4MzYsCisrCTB4ZWYsIDB4YmUsIDB4Njks IDB4NmMsIDB4NTUsIDB4ZjQsIDB4ZWUsIDB4ZWMKKysJfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkwIjsKKysKKyt2b2lkIEZJUFNf Y29ycnVwdF9kc2EoKQorKyAgICB7CisrICAgICsrc2VlZFswXTsKKysgICAgfQorKworK2ludCBG SVBTX3NlbGZ0ZXN0X2RzYSgpCisrICAgIHsKKysgICAgRFNBICpkc2E7CisrICAgIGludCBjb3Vu dGVyLGksaiwgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIHVuc2lnbmVk IGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2lnbmVkIGxvbmcgaDsKKysgICAgRVZQX01EX0NUWCBt Y3R4OworKyAgICBFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKyAgICBFVlBfTURfQ1RYX2luaXQo Jm1jdHgpOworKworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrCisrICAgIGlmKGRzYSA9PSBOVUxM KQorKwlnb3RvIGVycjsKKysgICAgaWYoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwg MTAyNCxzZWVkLDIwLCZjb3VudGVyLCZoLE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKGNv dW50ZXIgIT0gMzc4KSAKKysJZ290byBlcnI7CisrICAgIGlmIChoICE9IDIpCisrCWdvdG8gZXJy OworKyAgICBpPUJOX2JuMmJpbihkc2EtPnEsYnVmKTsKKysgICAgaj1zaXplb2Yob3V0X3EpOwor KyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X3EsaSkgIT0gMCkKKysJZ290byBlcnI7 CisrCisrICAgIGk9Qk5fYm4yYmluKGRzYS0+cCxidWYpOworKyAgICBqPXNpemVvZihvdXRfcCk7 CisrICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcCxpKSAhPSAwKQorKwlnb3RvIGVy cjsKKysKKysgICAgaT1CTl9ibjJiaW4oZHNhLT5nLGJ1Zik7CisrICAgIGo9c2l6ZW9mKG91dF9n KTsKKysgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9nLGkpICE9IDApCisrCWdvdG8g ZXJyOworKyAgICBEU0FfZ2VuZXJhdGVfa2V5KGRzYSk7CisrCisrICAgIGlmICgocGs9RVZQX1BL RVlfbmV3KCkpID09IE5VTEwpCisrCWdvdG8gZXJyOworKyAgICBFVlBfUEtFWV9hc3NpZ25fRFNB KHBrLCBkc2EpOworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBz dHIxLCAyMCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1 ZiwgJnNsZW4sIHBrKSkKKysJZ290byBlcnI7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRf ZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKCFFVlBf VmVyaWZ5VXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoRVZQ X1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sIHBrKSAhPSAxKQorKwlnb3RvIGVycjsKKysK KysgICAgcmV0ID0gMTsKKysKKysgICAgZXJyOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1j dHgpOworKyAgICBpZiAocGspCisrCUVWUF9QS0VZX2ZyZWUocGspOworKyAgICBlbHNlIGlmIChk c2EpCisrCURTQV9mcmVlKGRzYSk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICBy ZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzLmgKKy0t LSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1 OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHMu aAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNjMgQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns Y29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vycm9yIEZJUFMgaXMgZGlzYWJs ZWQuCisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1 c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1Y3QgZHNhX3N0OworK3N0cnVj dCBldnBfcGtleV9zdDsKKytzdHJ1Y3QgZW52X21kX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX3N0 OworK3N0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKKysKKytpbnQgRklQU19tb2RlX3NldChpbnQg b25vZmYpOworK2ludCBGSVBTX21vZGUodm9pZCk7CisrY29uc3Qgdm9pZCAqRklQU19yYW5kX2No ZWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKyt2b2lkIEZJUFNf c2VsZnRlc3RfY2hlY2sodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsKKytp bnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVz KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVw dF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKytpbnQg RklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOwor K3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rf ZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJUFNfcm5n X3N0aWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKKytpbnQgRklQU19z ZWxmdGVzdF9obWFjKHZvaWQpOworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3Ry dWN0IGV2cF9wa2V5X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50 IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRs ZW4sCisrCQkJY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRf ZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpOworKworK2ludCBmaXBzX2NpcGhlcl90 ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJCWNvbnN0IHN0cnVjdCBldnBf Y2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4 dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pOwor KworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUg YXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKysgKiBt YWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBp cyBuZXh0IHJ1bi4KKysgKi8KKyt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKKysK KysvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLworKworKy8qIEZ1bmN0 aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEw MAorKyNkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQorKyNkZWZpbmUg RklQU19GX0RTQV9ET19TSUdOCQkJCSAxMDIKKysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZ CQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKKysjZGVm aW5lIEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysjZGVmaW5lIEZJUFNfRl9GSVBT X0NIRUNLX0RTQQkJCQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklO R0VSUFJJTlQJCSAxMDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkgMTA2Cisr I2RlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sJCQkJIDEwNworKyNkZWZpbmUgRklQU19GX0ZJ UFNfTU9ERV9TRVQJCQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVf VEVTVAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEKKysjZGVmaW5lIEZJUFNfRl9G SVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hN QUMJCQkgMTEzCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJCQkgMTE0CisrI2Rl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExCQkJIDExNQorKyNkZWZpbmUgRklQU19GX0hB U0hfRklOQUwJCQkJIDEyMworKyNkZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAx MTYKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVAkJCSAxMTcKKysjZGVm aW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAxMTgKKysjZGVmaW5lIEZJUFNf Rl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJIDExOQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlf UFVCTElDX0VOQ1JZUFQJCQkgMTIwCisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVf S0VZX0VYCQkJIDEyMQorKyNkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEyMgor KworKy8qIFJlYXNvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJ CQkJIDEwMworKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QJCQkgMTA0Cisr I2RlZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRQkJCSAxMTQKKysjZGVmaW5lIEZJ UFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENICQkgMTA1CisrI2RlZmluZSBGSVBTX1JfRklO R0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gJCSAxMTAKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklO VF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQorKyNkZWZpbmUgRklQU19SX0ZJ TkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCisrI2RlZmluZSBG SVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgorKyNkZWZpbmUgRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVECQkJIDEwNgorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdU SAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKKysjZGVmaW5l IEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZpbmUgRklQU19SX1BBSVJXSVNF X1RFU1RfRkFJTEVECQkJIDEwNworKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCQkJ IDExNQorKyNkZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCQkJIDExNgorKyNkZWZpbmUg RklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCisrI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlM VVJFCQkJCSAxMTcKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STQkJCSAxMTMK KysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9m aXBzX2htYWNfc2VsZnRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAor QEAgLTAsMCArMSwxMzcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw NSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsK KysJY29uc3QgRVZQX01EICooKmFsZykodm9pZCk7CisrCWNvbnN0IGNoYXIgKmtleSwgKml2Owor Kwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07CisrfSBITUFDX0tBVDsKKysK KytzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7CisrICAgIHsJRVZQX3NoYTEsCisr CS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9m aXBzLTE5OGEucGRmICovCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIi LAorKwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKKysJICAweDRm LDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMsCisrCSAgMHhjNiwweGM3LDB4NWQs MHgyNCB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTIyNCwKKysJLyoganVzdCBrZWVwIGV4dGVu ZGluZyB0aGUgYWJvdmUuLi4gKi8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBs ZSAjMiIsCisrCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAorKwkg IDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKKysJICAweDA4LDB4ZjMs MHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCisrCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9 CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTI1NiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwK KysJIlNhbXBsZSAjMiIsCisrCXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0Myww eDA5LAorKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKKysJICAw eGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4MzgsCisrCSAgMHgwZCwweGMxLDB4 N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMzg0 LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA4LDB4 YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCisrCSAgMHg5YSwweDFkLDB4NmEsMHhj ZSwweDIzLDB4YzUsMHgwYiwweGY2LAorKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNk LDB4NDksMHgwNCwKKysJICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYs CisrCSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAorKwkgIDB4YTQs MHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9CisrICAgIH0sCisrICAgIHsJRVZQ X3NoYTUxMiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsg MHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSwweDQxLAorKwkgIDB4MDUsMHhiZCww eDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKKysJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4 ZDAsMHg4OSwweDJiLDB4ZDAsCisrCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3 NywweDY4LAorKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKKysJ ICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCisrCSAgMHg0NywweDAy LDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAorKwkgIDB4YmQsMHg0ZiwweDI1LDB4Mjcs MHg0MiwweDk4LDB4OTksMHgwNSB9CisrICAgIH0sCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVz dF9obWFjKCkKKysgICAgeworKyAgICBpbnQgbjsKKysgICAgdW5zaWduZWQgaW50ICAgIG91dGxl bjsKKysgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICBjb25z dCBFVlBfTUQgICAqbWQ7CisrICAgIGNvbnN0IEhNQUNfS0FUICp0OworKworKyAgICBmb3Iobj0w LHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQor Kwl7CisrCW1kID0gKCp0LT5hbGcpKCk7CisrCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkp LAorKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAorKwkJb3V0 LCZvdXRsZW4pOworKworKwlpZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCisrCSAgICB7 CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNU X0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsK KysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlw c19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYworLS0t IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9m aXBzX3JhbmQuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCAr MSw0MTIgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKgorKyAqIFRoaXMgaXMg YSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCisrICov CisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVO X1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKKysgICBiZSBkZWZpbmVkIGFu ZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMK KysgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KKysjaWZuZGVmIF9YT1BFTl9TT1VS Q0VfRVhURU5ERUQKKysjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgor KworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrI2luY2x1ZGUgPHN5cy90aW1lLmg+Cisr I2VuZGlmCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIK KysjIGlmZGVmIE9QRU5TU0xfVU5JU1RECisrIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAorKyMg ZWxzZQorKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKworK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOworKworKyNkZWZpbmUgQUVT X0JMT0NLX0xFTkdUSAkxNgorKworKworKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24g Ki8KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwlpbnQgc2VlZGVkOworKwlpbnQga2V5ZWQ7 CisrCWludCB0ZXN0X21vZGU7CisrCWludCBzZWNvbmQ7CisrCWludCBlcnJvcjsKKysJdW5zaWdu ZWQgbG9uZyBjb3VudGVyOworKwlBRVNfS0VZIGtzOworKwlpbnQgdnBvczsKKysJLyogVGVtcG9y YXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KKysJdW5zaWdu ZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIFZbQUVT X0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07Cisr CXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJfSBGSVBTX1BSTkdfQ1RY OworKworK3N0YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3By bmdfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQorKwl7CisrCWZpcHNf cHJuZ19mYWlsID0gMTsKKysJfQorKworK3ZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQU19Q Uk5HX0NUWCAqY3R4KQorKwl7CisrCWN0eC0+c2VlZGVkID0gMDsKKysJY3R4LT5rZXllZCA9IDA7 CisrCWN0eC0+dGVzdF9tb2RlID0gMDsKKysJY3R4LT5jb3VudGVyID0gMDsKKysJY3R4LT5zZWNv bmQgPSAwOworKwljdHgtPmVycm9yID0gMDsKKysJY3R4LT52cG9zID0gMDsKKysJT1BFTlNTTF9j bGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmY3R4 LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKKysJfQorKwkKKysKKytzdGF0aWMgaW50IGZpcHNfc2V0 X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpr ZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQorKwl7CisrCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKKysJaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQor KwkJeworKwkJLyogZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8KKysJCXJldHVybiAwOworKwkJ fQorKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKKysJ aWYgKGtleWxlbiA9PSAxNikKKysJCXsKKysJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYp OworKwkJY3R4LT5rZXllZCA9IDI7CisrCQl9CisrCWVsc2UKKysJCWN0eC0+a2V5ZWQgPSAxOwor KwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsKKysJcmV0dXJuIDE7CisrCX0K KysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCisr CQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQor Kwl7CisrCWludCBpOworKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQlyZXR1cm4gMDsKKysJLyogSW4g dGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCisrCWlmIChjdHgtPnRlc3Rf bW9kZSkKKysJCXsKKysJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJcmV0 dXJuIDA7CisrCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCWN0 eC0+c2VlZGVkID0gMTsKKysJCXJldHVybiAxOworKwkJfQorKwkvKiBPdXRzaWRlIHRlc3QgbW9k ZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KKysJZm9yIChpID0gMDsg aSA8IHNlZWRsZW47IGkrKykKKysJCXsKKysJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtp XTsKKysJCWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJY3R4 LT52cG9zID0gMDsKKysJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxl bmd0aCBlcXVhbHMKKysgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90 IG1hdGNoLgorKyAJCQkgKi8gCisrCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKKysJCQkJeworKwkJ CQlpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQorKwkJCQkJeworKwkJCQkJ UkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAorKwkJCQkJCVJBTkRfUl9QUk5HX1NF RURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKKysJCQkJCXJldHVybiAwOworKwkJCQkJfQorKwkJCQlP UEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7CisrCQkJCWN0eC0+a2V5ZWQgPSAxOwor KwkJCQl9CisrCQkJY3R4LT5zZWVkZWQgPSAxOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7Cisr CX0KKysKKytpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKKysJewor KwlpZiAoY3R4LT5rZXllZCkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1Rf TU9ERSxSQU5EX1JfUFJOR19LRVlFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJY3R4LT50ZXN0 X21vZGUgPSAxOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2Rl KHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7CisrCX0KKysK KytpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKKysJeworKwlpZiAoIXNj dHgudGVzdF9tb2RlKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCxS QU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJbWVtY3B5KHNj dHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0 aWMgdm9pZCBmaXBzX2dldF9kdChGSVBTX1BSTkdfQ1RYICpjdHgpCisrICAgIHsKKysjaWZkZWYg T1BFTlNTTF9TWVNfV0lOMzIKKysJRklMRVRJTUUgZnQ7CisrI2Vsc2UKKysJc3RydWN0IHRpbWV2 YWwgdHY7CisrI2VuZGlmCisrCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGN0eC0+RFQ7CisrCisrI2lm bmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJdW5zaWduZWQgbG9uZyBwaWQ7CisrI2VuZGlm CisrCisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1l KCZmdCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAw eGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4g OCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRp bWUgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGln aERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKGZ0 LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQu ZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikg KChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQg Y2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKyNlbHNlCisrCWdldHRp bWVvZmRheSgmdHYsTlVMTCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfc2Vj ICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAm IDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYpICYg MHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAw eGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhmZik7Cisr CWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKKysJ YnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKKysJ YnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsKKysj ZW5kaWYKKysJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpIChjdHgtPmNvdW50ZXIgJiAweGZmKTsK KysJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDgpICYgMHhmZik7 CisrCWJ1ZlsxMF0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMTYpICYgMHhm Zik7CisrCWJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMjQpICYg MHhmZik7CisrCisrCWN0eC0+Y291bnRlcisrOworKworKworKyNpZm5kZWYgR0VUUElEX0lTX01F QU5JTkdMRVNTCisrCXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQoKTsKKysJYnVmWzEyXSA9ICh1 bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7CisrCWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikg KChwaWQgPj4gOCkgJiAweGZmKTsKKysJYnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+ PiAxNikgJiAweGZmKTsKKysJYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkg JiAweGZmKTsKKysjZW5kaWYKKysgICAgfQorKworK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNf UFJOR19DVFggKmN0eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qg b3V0bGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNf QkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07Cisr CWludCBpOworKwlpZiAoY3R4LT5lcnJvcikKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNf UkFORCxSQU5EX1JfUFJOR19FUlJPUik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFjdHgt PmtleWVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlf U0VUKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+c2VlZGVkKQorKwkJeworKwkJ UkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQor KwkJCWZpcHNfZ2V0X2R0KGN0eCk7CisrCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4LT5r cyk7CisrCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJCXRtcFtp XSA9IElbaV0gXiBjdHgtPlZbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgtPmtzKTsK KysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0g UltpXSBeIElbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOworKwkJ LyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KKysJCWlmIChjdHgtPnNlY29uZCkKKysJCQl7Cisr CQkJaWYgKGZpcHNfcHJuZ19mYWlsKQorKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxP Q0tfTEVOR1RIKTsKKysJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5H VEgpKQorKwkJCQl7CisrCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BS TkdfU1RVQ0spOworKwkJCQljdHgtPmVycm9yID0gMTsKKysJCQkJZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCW1lbWNweShjdHgtPmxh c3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJaWYgKCFjdHgtPnNlY29uZCkKKysJCQl7Cisr CQkJY3R4LT5zZWNvbmQgPSAxOworKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJCWNvbnRp bnVlOworKwkJCX0KKysKKysJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7 CisrCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9CisrCisrCQlt ZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCW91dCArPSBBRVNfQkxPQ0tfTEVO R1RIOworKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7CisrCQl9CisrCXJldHVybiAxOwor Kwl9CisrCisrCisraW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3df bG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgs IGtleSwga2V5bGVuKTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwly ZXR1cm4gcmV0OworKwl9CisrCisraW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQs IEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgs IHNlZWQsIHNlZWRsZW4pOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Cisr CXJldHVybiByZXQ7CisrCX0KKysKKysKKytpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNo YXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBjb3VudCkKKysJeworKwlpbnQgcmV0OworKwlDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91 dCwgY291bnQpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVy biByZXQ7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQorKwl7CisrCWludCBy ZXQ7CisrCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IHNjdHguc2Vl ZGVkOworKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7 CisrCX0KKysKKyt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQorKwl7CisrCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKKysJ Q1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9CisrCisrc3RhdGljIHZvaWQg Zmlwc19kb19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVk bGVuKQorKwl7CisrCUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRsZW4pOworKwl9CisrCisrc3Rh dGljIHZvaWQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0la RV9UIHNlZWRsZW4sCisrCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCisrCXsKKysJRklQU19yYW5k X3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCX0KKysKKytzdGF0aWMgY29uc3QgUkFORF9NRVRIT0Qg cmFuZF9maXBzX21ldGg9CisrICAgIHsKKysgICAgZmlwc19kb19yYW5kX3NlZWQsCisrICAgIEZJ UFNfcmFuZF9ieXRlcywKKysgICAgRklQU19yYW5kX3Jlc2V0LAorKyAgICBmaXBzX2RvX3JhbmRf YWRkLAorKyAgICBGSVBTX3JhbmRfYnl0ZXMsCisrICAgIEZJUFNfcmFuZF9zdGF0dXMKKysgICAg fTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKQorK3sKKysg IHJldHVybiAmcmFuZF9maXBzX21ldGg7CisrfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZmlwcy9maXBzX3JhbmQuaAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNf cmFuZC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpZm5kZWYgSEVBREVSX0ZJUFNfUkFORF9ICisrI2RlZmluZSBIRUFERVJfRklQU19S QU5EX0gKKysKKysjaW5jbHVkZSAiZGVzLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor KyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytpbnQgRklQ U19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9U IGtleWxlbik7CisraW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5E X1NJWkVfVCBudW0pOworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBG SVBTX1JBTkRfU0laRV9UIG91dGxlbik7CisrCisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9p ZCk7Cisrdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7CisraW50IEZJUFNfcmFuZF9zZXRfZHQo dW5zaWduZWQgY2hhciAqZHQpOworKworK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOworKwor K2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpOworKworKyNpZmRlZiAg X19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1 OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNf cmFuZF9zZWxmdGVzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAt MCwwICsxLDM3MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor KyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1bnNpZ25lZCBjaGFy IERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsK KysJfSBBRVNfUFJOR19UVjsKKysKKysvKiBUaGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUg dGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAqLworKworK3N0YXRpYyB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9CisrCQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4 NjAsMHg3MiwweDQyLAorKwkJIDB4ZWQsMHgwNiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgw Mn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xMjhfdHZbXSA9IHsKKysJeworKwkJCQkv KiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJ CSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4Zjl9LAorKwkJCQkvKiBWICov CisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsw eDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhiMCwweGMwLDB4NTUsCisrCQkgMHg4NCwweDc5LDB4 NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQxfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisr CQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgx ZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmYX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGMw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4N2MsMHgyMiww eDJjLDB4ZjQsMHhjYSwweDhmLDB4YTIsMHg0YywKKysJCSAweDFjLDB4OWMsMHhiNiwweDQxLDB4 YTksMHhmMywweDIyLDB4MGR9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4 YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhm YiwweGIwLDB4ZTksMHgyMiwweGZifSwKKysJCQkJLyogViAqLworKwkJezB4ZTAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg4YSwweGFhLDB4MDAsMHgzOSww eDY2LDB4NjcsMHg1YiwweGU1LAorKwkJIDB4MjksMHgxNCwweDI4LDB4ODEsMHhhOSwweDRkLDB4 NGUsMHhjN30KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4 NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhl OSwweDIyLDB4ZmN9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDg4LDB4ZGQsMHhhNCwweDU2LDB4MzAsMHgyNCww eDIzLDB4ZTUsCisrCQkgMHhmNiwweDlkLDB4YTUsMHg3ZSwweDdiLDB4OTUsMHhjNywweDNhfQor Kwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4 MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhm ZH0sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJ CQkJLyogUiAqLworKwkJezB4MDUsMHgyNSwweDkyLDB4NDYsMHg2MSwweDc5LDB4ZDIsMHhjYiwK KysJCSAweDc4LDB4YzQsMHgwYiwweDE0LDB4MGEsMHg1YSwweDlhLDB4Yzh9CisrCX0sCisrCXsK KysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4 NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMywweDc3fSwKKysJCQkJ LyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJ CSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmV9LAorKwkJCQkvKiBSICov CisrCQl7MHgwZCwweGQ1LDB4YTAsMHgzNiwweDdhLDB4NTksMHgyNiwweGJjLAorKwkJIDB4NDgs MHhkOSwweDM4LDB4YmYsMHhmMCwweDg1LDB4OGYsMHhlYX0KKysJfSwKKysJeworKwkJCQkvKiBE VCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAw eGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIzLDB4Nzh9LAorKwkJCQkvKiBWICovCisr CQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJCS8qIFIgKi8KKysJCXsweGFl LDB4NTMsMHg4NywweGVlLDB4OGMsMHhkOSwweDEyLDB4ZjUsCisrCQkgMHg3MywweDUzLDB4YWUs MHgwMywweGY5LDB4ZDUsMHgxMywweDMzfQorKwl9LAorK307CisrCisrc3RhdGljIHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0KKysJCXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhk MywweDI1LDB4NmUsCisrCQkgMHg0NCwweDY0LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJj LAorKwkJIDB4NGEsMHhmYiwweGNhLDB4ZWIsMHg0YywweDhiLDB4OTksMHgzYn07CisrCisrc3Rh dGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHZbXSA9IHsKKysJeworKwkJCQkvKiBEVCAqLworKwkJ ezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTks MHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDE3LDB4MDcsMHhk NSwweDI4LDB4MTksMHg3OSwweDFlLDB4ZWYsCisrCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1 LDB4NTYsMHhiNCwweDkzfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4 LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQs MHgyNCwweDc4LDB4ZjMsMHg0Y30sCisrCQkJCS8qIFYgKi8KKysJCXsweGMwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4OTIsMHg4ZCwweGJlLDB4MDcsMHhk ZCwweGM3LDB4NTgsMHhjMCwKKysJCSAweDZmLDB4MzUsMHg0MSwweDliLDB4MTcsMHhjOSwweGJk LDB4OWJ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4 LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4Nzgs MHhmMywweDRkfSwKKysJCQkJLyogViAqLworKwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhkNSwweGRlLDB4ZjQsMHg1MCwweGYzLDB4YjcsMHgx MCwweDRlLAorKwkJIDB4YjgsMHhjNiwweGY4LDB4Y2YsMHhlMiwweGIxLDB4Y2EsMHhhMn0KKysJ fSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5 LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGV9 LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJ CS8qIFIgKi8KKysJCXsweGNlLDB4MjksMHgwOCwweDQzLDB4ZmMsMHgzNCwweDQxLDB4ZTcsCisr CQkgMHg0NywweDhmLDB4YjMsMHg2NiwweDJiLDB4NDYsMHhiMSwweGJifQorKwl9LAorKwl7Cisr CQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMx LAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Zn0sCisrCQkJCS8q IFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkg MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLwor KwkJezB4YjMsMHgyNiwweDBmLDB4ZjUsMHhkNiwweGNhLDB4YTgsMHhiZiwKKysJCSAweDg5LDB4 YjgsMHg1ZSwweDJmLDB4MjIsMHg1NiwweDkyLDB4MmZ9CisrCX0sCisrCXsKKysJCQkJLyogRFQg Ki8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhi ZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweGM5fSwKKysJCQkJLyogViAqLworKwkJ ezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmV9LAorKwkJCQkvKiBSICovCisrCQl7MHgwNSww eGViLDB4MTgsMHg1MiwweDM0LDB4NDMsMHgwMCwweDQzLAorKwkJIDB4NmUsMHg1YSwweGE1LDB4 ZmUsMHg3YiwweDMyLDB4YzQsMHgyZH0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4 M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3 ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4Y2F9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJCS8qIFIgKi8KKysJCXsweDE1LDB4M2MsMHhlOCww eGQxLDB4MDQsMHhjNywweGFkLDB4NTAsCisrCQkgMHgwYiwweGYwLDB4MDcsMHgxNiwweGU3LDB4 NTYsMHg3YSwweGVhfQorKwl9LAorK307CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9rZXlbMzJdID0KKysJCXsweDZkLDB4MTQsMHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQs CisrCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiwweDdhLDB4MDMsMHhiNywweDlmLAorKwkJIDB4MGMs MHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUsMHhiNSwKKysJCSAweDIxLDB4MDUsMHg4Yyww eDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2 X3R2W10gPSB7CisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4 MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5 ZSwweDg4fSwKKysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAorKwkJCQkvKiBSICovCisrCQl7MHgzNSwweGM3LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSww eGJjLAorKwkJIDB4ODIsMHg3OSwweDk5LDB4ZmIsMHhkMCwweGIzLDB4M2IsMHg3Mn0KKysJfSwK KysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4 YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODl9LAor KwkJCQkvKiBWICovCisrCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8q IFIgKi8KKysJCXsweDZjLDB4ZjQsMHg0MiwweDVkLDB4YzcsMHgwNCwweDFhLDB4NDEsCisrCQkg MHgyOCwweDJhLDB4NzgsMHhhOSwweGIwLDB4MTIsMHhjNCwweDk1fQorKwl9LAorKwl7CisrCQkJ CS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAor KwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4YX0sCisrCQkJCS8qIFYg Ki8KKysJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJ ezB4MTYsMHg5MCwweGE0LDB4ZmYsMHg3YiwweDdlLDB4YjksMHgzMCwKKysJCSAweGRiLDB4Njcs MHg0YiwweGFjLDB4MmQsMHhlMSwweGQxLDB4NzV9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8K KysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiww eGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhifSwKKysJCQkJLyogViAqLworKwkJezB4 ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgxNCwweDZm LDB4ZjUsMHg5NSwweGExLDB4NDYsMHg2NSwweDMwLAorKwkJIDB4YmMsMHg1NywweGUyLDB4NGEs MHhmNywweDQ1LDB4NjIsMHgwNX0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEs MHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSww eDM0LDB4NzQsMHg4ZSwweDllLDB4OGN9LAorKwkJCQkvKiBWICovCisrCQl7MHhmOCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDk2LDB4ZTIsMHhiNCwweDFl LDB4NjYsMHg1ZSwweDBmLDB4YTQsCisrCQkgMHhjNSwweGNkLDB4YTIsMHgwNywweGNjLDB4Yjcs MHg5NCwweDQwfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEs MHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCww eDhlLDB4OWYsMHgwNn0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZlfSwKKysJCQkJLyogUiAqLworKwkJezB4NjEsMHhjZSwweDFkLDB4NmEsMHg0OCwweDc1 LDB4OTcsMHgyOCwKKysJCSAweDRiLDB4NDEsMHhkZSwweDE4LDB4NDQsMHg0ZiwweDU2LDB4ZWN9 CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQs MHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5Ziww eDA3fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAor KwkJCQkvKiBSICovCisrCQl7MHg1MiwweDg5LDB4NTksMHg3OSwweDJkLDB4YWEsMHgyOCwweGIz LAorKwkJIDB4YjAsMHg4YSwweDNlLDB4NzAsMHhmYSwweDcxLDB4NTksMHg4NH0KKysJfSwKKyt9 OworKworKworK3ZvaWQgRklQU19jb3JydXB0X3JuZygpCisrICAgIHsKKysgICAgYWVzXzE5Ml90 dlswXS5WWzBdKys7CisrICAgIH0KKysKKysjZGVmaW5lIGZpcHNfcmFuZF90ZXN0KGtleSwgdHYp IFwKKysJZG9fcmFuZF90ZXN0KGtleSwgc2l6ZW9mIGtleSwgdHYsIHNpemVvZih0dikvc2l6ZW9m KEFFU19QUk5HX1RWKSkKKysKKytzdGF0aWMgaW50IGRvX3JhbmRfdGVzdCh1bnNpZ25lZCBjaGFy ICprZXksIGludCBrZXlsZW4sCisrCQkJQUVTX1BSTkdfVFYgKnR2LCBpbnQgbnR2KQorKwl7Cisr CXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCWludCBpOworKwlpZiAoIUZJUFNfcmFuZF9zZXRfa2V5 KGtleSwga2V5bGVuKSkKKysJCXJldHVybiAwOworKwlmb3IgKGkgPSAwOyBpIDwgbnR2OyBpKysp CisrCQl7CisrCQlGSVBTX3JhbmRfc2VlZCh0dltpXS5WLCAxNik7CisrCQlGSVBTX3JhbmRfc2V0 X2R0KHR2W2ldLkRUKTsKKysJCUZJUFNfcmFuZF9ieXRlcyhSLCAxNik7CisrCQlpZiAobWVtY21w KFIsIHR2W2ldLlIsIDE2KSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0K KysJCisrCisraW50IEZJUFNfc2VsZnRlc3Rfcm5nKCkKKysJeworKwlGSVBTX3JhbmRfcmVzZXQo KTsKKysJaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX1NFTEZURVNUX1JORyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAw OworKwkJfQorKwlpZiAoIWZpcHNfcmFuZF90ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpCisr CQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18xOTJfdHYpCisrCQl8fCAhZmlw c19yYW5kX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18yNTZfdHYpKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1 cm4gMDsKKysJCX0KKysJRklQU19yYW5kX3Jlc2V0KCk7CisrCXJldHVybiAxOworKwl9CisrCisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBz L2ZpcHNfcmFuZHRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAg LTAsMCArMSwyNDggQEAKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhp cyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3Jp dHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFz IGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBU aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0 aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0 Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgor KyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2Ft ZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmlj IFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBj b2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBp biBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICog YXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlz IGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0 dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQg d2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICog ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Cisr ICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAn Y3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxp YnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDot KS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBh IGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFw cGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERB TUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBh bnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhp cyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBi ZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UK KysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRs aWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2lu Y2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUkFORCBzdXBwb3J0 XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBz X3V0bC5oIgorKworK3R5cGVkZWYgc3RydWN0CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07 CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVT X1BSTkdfTUNUOworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0g PQorKwl7MHg5ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgzNCwweGI1LAorKwkgMHhkOCww eDJiLDB4ZTgsMHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsKKysKKytzdGF0aWMgQUVTX1BSTkdf TUNUIGFlc18xMjhfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDYzLDB4NzYsMHhiYiww eGU1LDB4MjksMHgwMiwweGJhLDB4M2IsCisrCSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgx ZiwweDExLDB4YWN9LAorKwkJCS8qIFYgKi8KKysJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4Nyww eDI2LDB4NDcsMHg5NywKKysJIDB4N2UsMHg3NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhk MX0sCisrCQkJLyogUiAqLworKwl7MHg0OCwweGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCww eGZiLAorKwkgMHhlNCwweDU3LDB4OTAsMHhkNSwweGMzLDB4ZmMsMHg5YiwweDczfQorK307Cisr Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9CisrCXsweGI3LDB4 NmMsMHgzNCwweGQxLDB4MDksMHg2NywweGFiLDB4NzMsCisrCSAweDRkLDB4NWEsMHhkNSwweDM0 LDB4OTgsMHgxNiwweDBiLDB4OTEsCisrCSAweGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSww eDkzLDB4OGF9OworKworK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7Cisr CQkJLyogRFQgKi8KKysJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwK KysJIDB4ODQsMHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCisrCQkJLyogViAq LworKwl7MHhiNiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAorKwkgMHhkZCww eGM3LDB4N2EsMHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKKysJCQkvKiBSICovCisrCXsweGZj LDB4ODUsMHg2MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCisrCSAweGRkLDB4ODYsMHgyMCww eDMyLDB4OGEsMHgyOSwweDZmLDB4NDd9CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBh ZXNfMjU2X21jdF9rZXlbMzJdID0KKysJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4 ZjgsMHgzYSwKKysJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKKysJ IDB4YjgsMHg3ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKKysJIDB4ODYsMHgzMiww eGZjLDB4MWYsMHg1ZSwweDFkLDB4MWUsMHg1MH07CisrCisrc3RhdGljIEFFU19QUk5HX01DVCBh ZXNfMjU2X21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHgzMSwweDZlLDB4MzUsMHg5YSww eGIxLDB4NDQsMHhmMCwweGVlLAorKwkgMHg2MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5 MiwweDRjfSwKKysJCQkvKiBWICovCisrCXsweDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiww eDRkLDB4YTEsCisrCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAor KwkJCS8qIFIgKi8KKysJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwK KysJIDB4ZTcsMHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0KKyt9OworKworK3N0 YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikKKysgICAgeworKyAg ICB3aGlsZShuLS0gPiAwKQorKwl7CisrCXByaW50ZigiICUwMngiLCpiKyspOworKwl9CisrICAg IH0KKysKKytzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxj b25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwKKysJCSAgICBpbnQgbikKKysgICAgeworKyAg ICBpbnQgaTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQorKwlpZihyZXN1bHRbaV0g IT0gZXhwZWN0ZWRbaV0pCisrCSAgICB7CisrCSAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQs IGdvdDoiKTsKKysJICAgIGR1bXAocmVzdWx0LG4pOworKwkgICAgcHV0cygiXG4gICAgICAgICAg ICAgICBleHBlY3RlZDoiKTsKKysJICAgIGR1bXAoZXhwZWN0ZWQsbik7CisrCSAgICBwdXRjaGFy KCdcbicpOworKwkgICAgRVhJVCgxKTsKKysJICAgIH0KKysgICAgfQorKworKworK3N0YXRpYyB2 b2lkIHJ1bl90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgQUVTX1BSTkdfTUNU ICp0dikKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKKysgICAg aW50IGksIGo7CisrICAgIEZJUFNfcmFuZF9yZXNldCgpOworKyAgICBGSVBTX3JhbmRfdGVzdF9t b2RlKCk7CisrICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysgICAgRklQU19y YW5kX3NlZWQodHYtPlYsIDE2KTsKKysgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKKysgICAg Zm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCisrCXsKKysgICAgCUZJUFNfcmFuZF9zZXRfZHQo ZHQpOworKwlGSVBTX3JhbmRfYnl0ZXMoYnVmLCAxNik7CisrCS8qIEluY3JlbWVudCBEVCAqLwor Kwlmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCisrCQl7CisrCQlkdFtqXSsrOworKwkJaWYgKGR0 W2pdKQorKwkJCWJyZWFrOworKwkJfQorKwl9CisrCisrICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAx Nik7CisrICAgIH0KKysKKytpbnQgbWFpbigpCisrCXsKKysJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rf a2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRv bmVcbiIpOworKwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYp OworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18y NTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRl c3QgMyBkb25lXG4iKTsKKysJcmV0dXJuIDA7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19y c2Ffc2VsZnRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAs MCArMSw0NDEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3 IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgbltdID0KKysiXHgwMFx4QkJceEY4 XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4MzhceEFDXHgyQlx4OURceEE4XHg3MSIKKysi XHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4NDNceEE0XHg0MFx4RDZceEI2XHhGMFx4NzRc eDU0XHhGNSIKKysiXHgxRlx4QjhceERGXHhCQVx4QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFc eDQ4XHhDRVx4RUJceDZGXHhDRCIKKysiXHg0OFx4NzZceEVEXHg1Mlx4MERceDYwXHhFMVx4RUNc eDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIKKysiXHg3Rlx4QUZceEI4XHhFMFx4QTNc eERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhCN1x4RDlceDNBXHgyNSIKKysiXHg4NFx4RUVc eDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIyXHg0NVx4NDVceDk4XHgzOSIK KysiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVceDFGXHg1Mlx4N0FceDlBXHg0MVx4 RjZceEMxXHg2OCIKKysiXHg3Rlx4RTJceDUzXHg3Mlx4OThceENBXHgyQVx4OEZceDU5XHg0Nlx4 RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKKysiXHhDQiI7CisrCisrCisrc3RhdGljIGludCBzZXRy c2FrZXkoUlNBICprZXkpCisrICAgIHsKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZVtdID0gIlx4MTEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkW10gPQor KyJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFceEZBXHhGMlx4ODlceEM0XHhCOVx4ODhceERCXHgz MFx4QzFceENEIgorKyJceEY4XHgzRlx4MzFceDI1XHgxRVx4MDZceDY4XHhCNFx4MjdceDg0XHg4 MVx4MzhceDAxXHg1N1x4OTZceDQxIgorKyJceEIyXHg5NFx4MTBceEIzXHhDN1x4OTlceDhEXHg2 Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4MjZceDY5IgorKyJceEQ2XHg4N1x4MERceEEyXHhD MFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJFXHhDOVx4M0VceERBIgorKyJceEM5XHg3 Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4QkNceDExXHgxQ1x4NzZceEYxXHhBOVx4NTJceDk0 IgorKyJceDQ0XHhFNVx4NkFceEFGXHg2OFx4QzVceDZDXHgwOVx4MkNceEQzXHg4RFx4QzNceEJF XHhGNVx4RDJceDBBIgorKyJceDkzXHg5OVx4MjZceEVEXHg0Rlx4NzRceEExXHgzRVx4RERceEZC XHhFMVx4QTFceENFXHhDQ1x4NDhceDk0IgorKyJceEFGXHg5NFx4MjhceEMyXHhCN1x4QjhceDg4 XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1Qlx4MUNceEIzIgorKyJceEMxIjsKKysKKysgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0KKysiXHgwMFx4RUVceENGXHhBRVx4ODFc eEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4QTFceEI1XHg2MCIKKysiXHgwMVx4OTlc eEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4QjhceDFBXHg5RVx4M0RceDg0XHhGNiIK KysiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4 QUFceDA0XHgwQSIKKysiXHgyRFx4NUJceDI1XHgyMVx4NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4 NDFceEJBXHgyQVx4NThceEZCXHg2NSIKKysiXHg5OSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHFbXSA9CisrIlx4MDBceEM5XHg3Rlx4QjFceEYwXHgyN1x4RjRceDUzXHhG Nlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4RDkiCisrIlx4MzVceDNGXHg2Q1x4NDJceEQwXHg4 OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4MzVceDAyXHg4Qlx4OUQiCisrIlx4ODZceDk4XHg0 MFx4QjRceDE2XHg2Nlx4QjRceDJFXHg5Mlx4RUFceDBEXHhBM1x4QjRceDMyXHgwNFx4QjUiCisr Ilx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4MDRceDE2XHhBNVx4QTRceDQxXHhFN1x4MDBceEFG XHg0Nlx4MTUiCisrIlx4MDMiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBk bXAxW10gPQorKyJceDU0XHg0OVx4NENceEE2XHgzRVx4QkFceDAzXHgzN1x4RTRceEUyXHg0MFx4 MjNceEZDXHhENlx4OUFceDVBIgorKyJceEVCXHgwN1x4RERceERDXHgwMVx4ODNceEE0XHhEMFx4 QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFceDNFIgorKyJceEQ5XHg0OVx4MDlceDc1XHhFQVx4 QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4RjdceDY5XHgyRVx4OUFceDJFIgorKyJceDIwXHgyQlx4 MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4NzRceEFEXHhDOVx4M0NceDFGXHg2N1x4QzlceDgxIjsK KysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1xMVtdID0KKysiXHg0N1x4MUVc eDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAzXHg1MVx4QjdceEY4XHg3OFx4ODZceDRDXHhBOSIK KysiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5OVx4MUNceDVDXHgwNVx4NTZceEE5XHg0Q1x4 MzFceDQ2XHhBNyIKKysiXHhGOVx4ODBceDNGXHg4Rlx4NkZceDhBXHhFM1x4NDJceEU5XHgzMVx4 RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKKysiXHgxQlx4OTlceEE0XHg5NVx4ODRceDk4XHgwN1x4 RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERBXHgzRCI7CisrICAgIAorKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQorKyJceDAwXHhCMFx4NkNceDRGXHhEQVx4QkJc eDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhBRVx4OTRceDIzIgorKyJceEIzXHg4MFx4RjJc eDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgwN1x4N0ZceENEXHgzOVx4RTJceDExIgorKyJc eDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4 MkJceDRFIgorKyJceDlFXHgyRVx4MEZceDk2XHg1Nlx4RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4 RkJceDI1XHg3OVx4ODBceDM5IgorKyJceEY3IjsKKysKKysgICAga2V5LT5uID0gQk5fYmluMmJu KG4sIHNpemVvZihuKS0xLCBrZXktPm4pOworKyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6 ZW9mKGUpLTEsIGtleS0+ZSk7CisrICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCkt MSwga2V5LT5kKTsKKysgICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBrZXkt PnApOworKyAgICBrZXktPnEgPSBCTl9iaW4yYm4ocSwgc2l6ZW9mKHEpLTEsIGtleS0+cSk7Cisr ICAgIGtleS0+ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBzaXplb2YoZG1wMSktMSwga2V5LT5kbXAx KTsKKysgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNpemVvZihkbXExKS0xLCBrZXkt PmRtcTEpOworKyAgICBrZXktPmlxbXAgPSBCTl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXApLTEs IGtleS0+aXFtcCk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBGSVBTX2NvcnJ1 cHRfcnNhKCkKKysgICAgeworKyAgICBuWzBdKys7CisrICAgIH0KKysKKysvKiBLbm93biBBbnN3 ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcK KysgKiBrYXRfdGJzLgorKyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90 YnNbXSA9ICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FUIjsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7CisrICAweDJELCAw eEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAweEExLCAweEI5LCAweDQ2LCAweERB LCAweDBGLAorKyAgMHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhDMiwgMHg1NSwgMHgyNywgMHhF NCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwKKysgIDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4 MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4RjgsIDB4RDMsCisrICAweEQxLCAw eERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1 LCAweDRDLAorKyAgMHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgx MiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywKKysgIDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4 NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4RjUsCisrICAweEI2LCAw eEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1 LCAweDQ1LAorKyAgMHgwQSwgMHhFOSwgMHg4RSwgMHgzOCwgMHhENywgMHgxOCwgMHhDNiwgMHgy QSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwKKysgIDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4 NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEsIDB4RTgsCisrICAweDIzLCAw eEI1LCAweDdGLCAweERDLCAweDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1 LCAweDg0LAorKyAgMHgyNiwgMHhDNiwgMHg3OSwgMHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhB OQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0 W10gPSB7CisrICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVE LCAweEVGLCAweEM1LCAweDU4LCAweEE3LAorKyAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1 MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKKysgIDB4QjEsIDB4 OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYs IDB4NTcsCisrICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3 LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorKyAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2 NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKKysgIDB4QjEsIDB4 RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIs IDB4MjIsCisrICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQw LCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorKyAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhB OCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKKysgIDB4NTgsIDB4 RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEs IDB4MkQsCisrICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZB LCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorKyAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5 QywgMHhCMiwgMHhFRSwgMHhDMAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7CisrICAweDZELCAweDNELCAweEJFLCAweDhGLCAweDYw LCAweDZELCAweDI1LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAweDg5LAorKyAgMHgwMCwgMHg5 NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywg MHg4RiwKKysgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIs IDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAweEMxLCAweDc3LCAweEM2LCAweDI3LCAweDk3 LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAweDk2LCAweDczLCAweDRFLAorKyAgMHg3RCwgMHgy RSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0Nywg MHgwNSwKKysgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUs IDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAweDJGLCAweDdBLCAweDU0LCAweDUzLCAweDRF LCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAweEI2LAorKyAgMHgwQiwgMHg0 NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwg MHg5RiwKKysgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAs IDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAweDVGLCAweEI3LCAweDAxLCAweERGLCAweEMz LCAweDExLCAweDZDLCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAweEY2LAorKyAgMHg3MiwgMHhG NCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQworK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7CisrICAweDQwLCAweEZC LCAweEExLCAweDIxLCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAw eEYyLAorKyAgMHhFQywgMHgxQywgMHhDNCwgMHhDOCwgMHg3QywgMHgyMiwgMHg2NSwgMHg5Qywg MHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKKysgIDB4ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4Nzgs IDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4Q0QsCisrICAweEFBLCAweDI1 LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAweDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAw eDdGLAorKyAgMHg2RiwgMHgwMiwgMHhFRiwgMHhDMSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwg MHgzMSwgMHhEQywgMHg0MiwgMHg2QywKKysgIDB4QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYs IDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4RkIsCisrICAweDkxLCAweENB LCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAw eDJGLAorKyAgMHgzQSwgMHhCRSwgMHg4OSwgMHgzOCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwg MHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwKKysgIDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAs IDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4NkYsCisrICAweDQ4LCAweEY2 LCAweEFFLCAweEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAw eDU1LAorKyAgMHg0OCwgMHg0NCwgMHhFRSwgMHgxRiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10g PSB7CisrICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAw eDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwg MHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKKysgIDB4OUIsIDB4NTQs IDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4 REQsCisrICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAw eDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwg MHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKKysgIDB4N0MsIDB4RTMs IDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4 NjEsCisrICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAw eDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwg MHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKKysgIDB4MkQsIDB4NjAs IDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4 RkUsCisrICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAw eDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwg MHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9TSEExW10gPSB7CisrICAweDcxLCAweEVFLCAweDFBLCAweEMwLCAweEZFLCAweDAxLCAw eDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYyLCAweDRDLAorKyAgMHg0QSwgMHhGRCwgMHgxQSwg MHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKKysg IDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4 NzcsIDB4OTAsIDB4Q0YsCisrICAweERDLCAweDIyLCAweDM3LCAweDhFLCAweEQwLCAweEUxLCAw eEFFLCAweDA5LCAweEUzLCAweDNELCAweDFFLCAweEY4LAorKyAgMHg4MCwgMHhEMSwgMHg4Qiwg MHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKKysg IDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4 NDksIDB4MzAsIDB4QkEsCisrICAweEE5LCAweDlFLCAweEU4LCAweEIxLCAweDhBLCAweDYyLCAw eDE2LCAweEJGLCAweDRFLCAweENBLCAweDJFLCAweDRFLAorKyAgMHhCQywgMHgyOSwgMHhBOCwg MHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKKysg IDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4 MjMsIDB4NDgsIDB4MUYsCisrICAweDcyLCAweDA1LCAweERFLCAweEU2LCAweEU4LCAweDdGLCAw eDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJGLCAweDk1LAorKyAgMHhERiwgMHhGMSwgMHg1Riwg MHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhCNAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKKysgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTks IDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4RjksCisrICAweDI1 LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAweDM0LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAw eDE4LCAweDhELAorKyAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwg MHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwKKysgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQs IDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCisrICAweEE0 LCAweDAyLCAweEFELCAweEIxLCAweDZELCAweDQ0LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAw eDQxLCAweEU1LAorKyAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwg MHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhDQywKKysgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcs IDB4MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCisrICAweDBC LCAweDQ0LCAweDRDLCAweDQ2LCAweDk1LCAweEY0LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAw eDNFLCAweEIyLAorKyAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5Miwg MHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwKKysgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcs IDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCisrICAweDQw LCAweDIxLCAweDg5LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAweDhECisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0geworKyAgMHgwRCwgMHg1 NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwg MHgyMywKKysgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEs IDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisrICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUz LCAweDg1LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAorKyAgMHg5OCwgMHgy RCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwg MHg2RSwKKysgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgs IDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0 LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAorKyAgMHhCRSwgMHgy MiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwg MHgzQSwKKysgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMs IDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAweEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1 LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAorKyAgMHgyNywgMHg0 OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywg MHg5MCwKKysgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7 CisrICAweDFELCAweEUzLCAweDZBLCAweERELCAweDI3LCAweDRDLCAweEMwLCAweEE1LCAweDI3 LCAweEVGLCAweEU2LCAweDFGLAorKyAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhB RSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywKKysgIDB4NkYsIDB4MjIsIDB4 MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMs CisrICAweEE3LCAweDY1LCAweDUyLCAweDhBLCAweEM4LCAweDQ0LCAweDdFLCAweDg2LCAweDVE LCAweEE5LCAweEE2LCAweDU1LAorKyAgMHg2NSwgMHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgz OCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwKKysgIDB4ODIsIDB4REQsIDB4 N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIs CisrICAweDFCLCAweDJCLCAweEIwLCAweDgyLCAweDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUy LCAweDdELCAweEVCLCAweDhDLAorKyAgMHhGRiwgMHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgz RCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwKKysgIDB4RUEsIDB4ODUsIDB4 RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEs CisrICAweDE2LCAweDI4LCAweDI0LCAweDY0LCAweDA0LCAweDM5LCAweDJELCAweDU4LCAweDFF LCAweDM3LCAweERDLCAweDA0LAorKyAgMHhCRCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgz NSwgMHg1NiwgMHhCRgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JT QV9TSEE1MTJbXSA9IHsKKysgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4 Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCisrICAweDQ5LCAweDI1LCAweDRBLCAw eEExLCAweDZBLCAweDc3LCAweDRDLCAweDM2LCAweDQwLCAweEY4LCAweEIyLCAweDlBLAorKyAg MHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2 QiwgMHgzMiwgMHhGMSwKKysgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4 OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCisrICAweDhELCAweENDLCAweEFDLCAw eDhBLCAweEJCLCAweDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUzLCAweDYyLCAweEI1LAorKyAg MHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3 NSwgMHg5MiwgMHg2QiwKKysgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4 MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCisrICAweDU5LCAweDU2LCAweEE1LCAw eEI5LCAweDVDLCAweEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYzLCAweDg0LCAweDA1LAorKyAg MHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3 MSwgMHhFMCwgMHgyRCwKKysgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4 REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCisrICAweERGLCAweDcwLCAweDE0LCAw eEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0geworKyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhC QSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKKysgIDB4 RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQs IDB4QjIsIDB4NzUsCisrICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEy LCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFDLAorKyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgw QiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKKysgIDB4 NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4Mzgs IDB4QkUsIDB4RDYsCisrICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3LCAweEI0LCAweDBF LCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5LAorKyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5 MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhENywKKysgIDB4 NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQs IDB4MUMsIDB4OTksCisrICAweDQ4LCAweEFGLCAweDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlC LCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2LAorKyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3 RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2NywKKysgIDB4 QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKKysgIDB4 N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQsIDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQs IDB4NTQsIDB4ODksCisrICAweEU1LCAweDUyLCAweDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRF LCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAweERELAorKyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1 QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKKysgIDB4 MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYsIDB4NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0Is IDB4QzgsIDB4OUIsCisrICAweEM2LCAweDUzLCAweDg4LCAweDI2LCAweDIwLCAweDg4LCAweDcz LCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAweDRCLAorKyAgMHgwMCwgMHg4NSwgMHhGMywgMHhE RCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKKysgIDB4 QUQsIDB4NEUsIDB4NDksIDB4MkMsIDB4RDcsIDB4NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTks IDB4MDEsIDB4RUMsCisrICAweDdFLCAweDc1LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2 LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAweDhDLAorKyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4 QywgMHgwMywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKKysgIDB4 MjEsIDB4RUQsIDB4OEQsIDB4QkMsIDB4QkMsIDB4REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAs IDB4NUIsIDB4REMsCisrICAweEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0 LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFf U0hBMzg0W10gPSB7CisrICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDEx LCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAorKyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5 OSwgMHhCRCwgMHhFRiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwgMHgzNywgMHhDQiwKKysgIDB4 RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUs IDB4MkUsIDB4RTMsCisrICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlD LCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAorKyAgMHg1NywgMHhDMiwgMHhCMCwgMHgw OCwgMHg1MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2NiwgMHhFRSwgMHgzMSwKKysgIDB4 RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQs IDB4OEQsIDB4RjEsCisrICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4LCAweERELCAweDJC LCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAorKyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhC NywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwgMHg3QywgMHhGRiwKKysgIDB4 MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIs IDB4NDQsIDB4MzUsCisrICAweEVGLCAweDAxLCAweEU2LCAweDVFLCAweDM5LCAweDMxLCAweDJE LCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAorKyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhE QiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0geworKyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3 NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKKysgIDB4 RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDks IDB4REEsIDB4QUMsCisrICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAweDExLCAweDRCLCAweDhB LCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAorKyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1 MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKKysgIDB4 QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4Qzcs IDB4RjgsIDB4QzUsCisrICAweDZFLCAweDJCLCAweDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4 LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFGLAorKyAgMHgxNywgMHgwRSwgMHhFMCwgMHhC RiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKKysgIDB4 Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYs IDB4NUYsIDB4MDksCisrICAweDlGLCAweDA5LCAweENBLCAweDg0LCAweDE1LCAweDg1LCAweEUw LCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdDLAorKyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgz MSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKKysgIDB4 NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKKyt9OworKworKwor K2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisrCXsKKysJaW50IHJldCA9IDA7CisrCVJTQSAqa2V5 OworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKwlpZiAoKGtleT1SU0FfbmV3KCkpID09IE5V TEwpCisrCQlnb3RvIGVycjsKKysJc2V0cnNha2V5KGtleSk7CisrCWlmICgocGs9RVZQX1BLRVlf bmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfYXNzaWduX1JTQShw aywga2V5KTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0Ff U0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJ CSJSU0EgU0hBMSBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JT QV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCksCisrCQkJCUVWUF9zaGEyMjQoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyMjQgUEtDUyMxIikpCisrCQln b3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9T SEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisr CQkJCSJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlr YXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKKysJCQkJRVZQX3NoYTM4NCgp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkK KysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRf UlNBX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NT MSwKKysJCQkJIlJTQSBTSEE1MTIgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEs CisrCQkJCWthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKKysJCQkJ RVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMSBQU1Mi KSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjI0LCBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyMjQgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1Niks CisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0Eg U0hBMjU2IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19T SEEzODQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTM4NCBQU1MiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9Q U1NfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywK KysJCQkJIlJTQSBTSEE1MTIgUFNTIikpCisrCQlnb3RvIGVycjsKKysKKysKKysJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisr CQkJa2F0X1JTQV9YOTMxX1NIQTEsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMSksCisrCQkJRVZQ X3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMSBYOTMxIikp CisrCQlnb3RvIGVycjsKKysJLyogTkI6IFNIQTIyNCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICov CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1g5MzFf U0hBMjU2KSwKKysJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJ CQkiUlNBIFNIQTI1NiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JT QV9YOTMxX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQpLAorKwkJCUVWUF9zaGEz ODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkK KysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yo a2F0X1JTQV9YOTMxX1NIQTUxMiksCisrCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEsCisrCQkJIlJTQSBTSEE1MTIgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCisrCisr CXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7Cisr CWVsc2UgaWYgKGtleSkKKysJCVJTQV9mcmVlKGtleSk7CisrCXJldHVybiByZXQ7CisrCX0KKysK KysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9m aXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBz X3JzYV94OTMxZy5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDI4MSBAQAorKy8qIGNyeXB0by9y c2EvcnNhX2dlbi5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAo ZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRo aXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMg WW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdy aXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhp cyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBh cyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAg VGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4g dGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBl dGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24K KysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNh bWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVk c29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJp YyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUg Y29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQg aW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAq IGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhp cyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFy dHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVk IHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAq ICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQor KyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQg J2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBs aWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6 LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3Ig YSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChh cHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNv biAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM CisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBE QU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3Ig YW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRo aXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkg YmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNl CisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5j bHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrCisrZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7 CisrI2VuZGlmCisrCisrLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9u ICovCisrCisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklH TlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwg Y29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpY cTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05V TSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9 TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxMOworKworKwlpZiAo IXJzYSkgCisrCQlnb3RvIGVycjsKKysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0 eCkgCisrCQlnb3RvIGVycjsKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7CisrCisrCXIwID0gQk5fQ1RY X2dldChjdHgpOworKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjIgPSBCTl9DVFhfZ2V0KGN0 eCk7CisrCXIzID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAocjMgPT0gTlVMTCkKKysJCWdv dG8gZXJyOworKwlpZiAoIXJzYS0+ZSkKKysJCXsKKysJCXJzYS0+ZSA9IEJOX2R1cChlKTsKKysJ CWlmICghcnNhLT5lKQorKwkJCWdvdG8gZXJyOworKwkJfQorKwllbHNlCisrCQllID0gcnNhLT5l OworKworKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3 aGF0IHdlIGNhbi4KKysJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2Vs ZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAqLworKworKwlpZiAoWHAgJiYgIXJzYS0+cCkKKysJCXsK KysJCXJzYS0+cCA9IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnApCisrCQkJZ290byBlcnI7Cisr CisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAorKwkJCQkJ WHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYg KFhxICYmICFyc2EtPnEpCisrCQl7CisrCQlyc2EtPnEgPSBCTl9uZXcoKTsKKysJCWlmICghcnNh LT5xKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2Et PnEsIHExLCBxMiwKKysJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCisrCQkJZ290byBl cnI7CisrCQl9CisrCisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCisrCQl7CisrCQlCTl9DVFhf ZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJcmV0dXJuIDI7CisrCQl9CisrCisr CS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJl bWFpbmluZyAKKysJICogY29tcG9uZW50cy4KKysJICovCisrCisrCS8qIGNhbGN1bGF0ZSBuICov CisrCXJzYS0+bj1CTl9uZXcoKTsKKysJaWYgKHJzYS0+biA9PSBOVUxMKQorKwkJZ290byBlcnI7 CisrCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCisrCQlnb3RvIGVycjsK KysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVl X29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBwLTEgKi8KKysJaWYgKCFCTl9zdWIocjIscnNhLT5x LEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBxLTEgKi8KKysJaWYgKCFCTl9tdWwo cjAscjEscjIsY3R4KSkKKysJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCisrCisrCWlmICgh Qk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFCTl9kaXYo cjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkg Ki8KKysKKysJY3R4MiA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgyKQorKwkJZ290byBlcnI7 CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAq LworKwlpZiAocnNhLT5kID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRl IGQgbW9kIChwLTEpICovCisrCXJzYS0+ZG1wMT1CTl9uZXcoKTsKKysJaWYgKHJzYS0+ZG1wMSA9 PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEs Y3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KKysJ cnNhLT5kbXExPUJOX25ldygpOworKwlpZiAocnNhLT5kbXExID09IE5VTEwpCisrCQlnb3RvIGVy cjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQorKwkJZ290byBlcnI7 CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KKysJcnNhLT5pcW1wPUJO X21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKKysKKysJZXJyOgorKwlpZiAo Y3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJ CX0KKysJaWYgKGN0eDIpCisrCQlCTl9DVFhfZnJlZShjdHgyKTsKKysJLyogSWYgdGhpcyBpcyBz ZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KKysJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVM TCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQorKworK2ludCBSU0FfWDkz MV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJO X0dFTkNCICpjYikKKysJeworKwlpbnQgb2sgPSAwOworKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhx ID0gTlVMTDsKKysJQk5fQ1RYICpjdHggPSBOVUxMOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCSAgICB7 CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tF WV9UT09fU0hPUlQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCisrCWlmIChiaXRzICYg MHhmZikKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tF WV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKysJICAgIHJldHVybiAwOworKwkgICAg fQorKworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2Vy cihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysjZW5kaWYKKysKKysJY3R4ID0gQk5f Q1RYX25ldygpOworKwlpZiAoIWN0eCkKKysJCWdvdG8gZXJyb3I7CisrCisrCUJOX0NUWF9zdGFy dChjdHgpOworKwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7 CisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQorKwkJZ290 byBlcnJvcjsKKysKKysJcnNhLT5wID0gQk5fbmV3KCk7CisrCXJzYS0+cSA9IEJOX25ldygpOwor KwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQorKwkJZ290byBlcnJvcjsKKysKKysJLyogR2VuZXJh dGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLworKworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVf cHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKKysJCQkJCWUsIGN0 eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1l X2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCisrCQkJCQllLCBjdHgsIGNi KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2 YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQorKwkgKiByZW1haW5pbmcgUlNBIGNvbXBv bmVudHMuCisrCSAqLworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsCisrCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IGUsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZigh Zmlwc19jaGVja19yc2EocnNhKSkKKysJICAgIGdvdG8gZXJyb3I7CisrI2VuZGlmCisrCisrCW9r ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7 CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKworKwlpZiAob2spCisrCQlyZXR1cm4gMTsK KysKKysJcmV0dXJuIDA7CisrCisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9m aXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMv Zmlwc19zaGExX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBz X3NoYTFfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMJMjAx MC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsOTkgQEAKKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9zaGEuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIGNoYXIgdGVz dFtdWzYwXT0KKysgICAgeworKyAgICAiIiwKKysgICAgImFiYyIsCisrICAgICJhYmNkYmNkZWNk ZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKKysgICAgfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09 CisrICAgIHsKKysgICAgeyAweGRhLDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQs MHgzMiwweDU1LAorKyAgICAgIDB4YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhk OCwweDA3LDB4MDkgfSwKKysgICAgeyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgx LDB4NmEsMHhiYSwweDNlLAorKyAgICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4 OWMsMHhkMCwweGQ4LDB4OWQgfSwKKysgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgz YiwweGQyLDB4NmUsMHhiYSwweGFlLAorKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSww eGU1LDB4ZTUsMHg0NiwweDcwLDB4ZjEgfSwKKysgICAgfTsKKysKKyt2b2lkIEZJUFNfY29ycnVw dF9zaGExKCkKKysgICAgeworKyAgICB0ZXN0WzJdWzBdKys7CisrICAgIH0KKysKKytpbnQgRklQ U19zZWxmdGVzdF9zaGExKCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49MCA7 IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsrbikKKysJeworKwl1bnNpZ25lZCBj aGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxl bih0ZXN0W25dKSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChtZCxy ZXRbbl0sc2l6ZW9mIG1kKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VM RlRFU1RfU0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkg ICAgfQorKwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYworLS0tIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMuZmlwcwkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9m aXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKK0BAIC0wLDAgKzEsMTczIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3NoYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysjaWZuZGVmIEZJUFND QU5JU1RFUl9PCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkgeyByZXR1cm4gMDsgfQorK3Zv aWQgRklQU19zZWxmdGVzdF9jaGVjaygpIHt9Cisrdm9pZCBPUEVOU1NMX2NsZWFuc2Uodm9pZCAq cCxzaXplX3QgbGVuKSB7fQorKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytz dGF0aWMgdm9pZCBobWFjX2luaXQoU0hBX0NUWCAqbWRfY3R4LFNIQV9DVFggKm9fY3R4LAorKwkJ ICAgICAgY29uc3QgY2hhciAqa2V5KQorKyAgICB7CisrICAgIHNpemVfdCBsZW49c3RybGVuKGtl eSk7CisrICAgIGludCBpOworKyAgICB1bnNpZ25lZCBjaGFyIGtleW1kW0hNQUNfTUFYX01EX0NC TE9DS107CisrICAgIHVuc2lnbmVkIGNoYXIgcGFkW0hNQUNfTUFYX01EX0NCTE9DS107CisrCisr ICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NLKQorKwl7CisrCVNIQTFfSW5pdChtZF9jdHgpOworKwlT SEExX1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7CisrCVNIQTFfRmluYWwoa2V5bWQsbWRfY3R4KTsK KysJbGVuPTIwOworKwl9CisrICAgIGVsc2UKKysJbWVtY3B5KGtleW1kLGtleSxsZW4pOworKyAg ICBtZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9DQkxPQ0stbGVuKTsKKysKKysg ICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDM2 XmtleW1kW2ldOworKyAgICBTSEExX0luaXQobWRfY3R4KTsKKysgICAgU0hBMV9VcGRhdGUobWRf Y3R4LHBhZCxTSEFfQ0JMT0NLKTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9D QkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDVjXmtleW1kW2ldOworKyAgICBTSEExX0luaXQob19j dHgpOworKyAgICBTSEExX1VwZGF0ZShvX2N0eCxwYWQsU0hBX0NCTE9DSyk7CisrICAgIH0KKysK KytzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNIQV9DVFggKm1kX2N0 eCxTSEFfQ1RYICpvX2N0eCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMF07Cisr CisrICAgIFNIQTFfRmluYWwoYnVmLG1kX2N0eCk7CisrICAgIFNIQTFfVXBkYXRlKG9fY3R4LGJ1 ZixzaXplb2YgYnVmKTsKKysgICAgU0hBMV9GaW5hbChtZCxvX2N0eCk7CisrICAgIH0KKysKKysj ZW5kaWYKKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysgICAgc3RhdGljIGNoYXIga2V5W109ImV0YW9ucmlzaGRsY3VwZm0i OworKyAgICBpbnQgbixiaW5hcnk9MDsKKysKKysgICAgaWYoYXJnYyA8IDIpCisrCXsKKysJZnBy aW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQor KworKyAgICBuPTE7CisrICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sIi1iaW5hcnkiKSkKKysJewor KwluKys7CisrCWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmludC4uLiAqLworKwl9 CisrCisrICAgIGZvcig7IG4gPCBhcmdjIDsgKytuKQorKwl7CisrCUZJTEUgKmY9Zm9wZW4oYXJn dltuXSwicmIiKTsKKysJU0hBX0NUWCBtZF9jdHgsb19jdHg7CisrCXVuc2lnbmVkIGNoYXIgbWRb MjBdOworKwlpbnQgaTsKKysKKysJaWYoIWYpCisrCSAgICB7CisrCSAgICBwZXJyb3IoYXJndltu XSk7CisrCSAgICBleGl0KDIpOworKwkgICAgfQorKworKwlobWFjX2luaXQoJm1kX2N0eCwmb19j dHgsa2V5KTsKKysJZm9yKCA7IDsgKQorKwkgICAgeworKwkgICAgY2hhciBidWZbMTAyNF07Cisr CSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxzaXplb2YgYnVmLGYpOworKworKwkgICAgaWYobCA9 PSAwKQorKwkJeworKwkJaWYoZmVycm9yKGYpKQorKwkJICAgIHsKKysJCSAgICBwZXJyb3IoYXJn dltuXSk7CisrCQkgICAgZXhpdCgzKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgYnJlYWs7 CisrCQl9CisrCSAgICBTSEExX1VwZGF0ZSgmbWRfY3R4LGJ1ZixsKTsKKysJICAgIH0KKysJaG1h Y19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7CisrCisrCWlmIChiaW5hcnkpCisrCSAgICB7Cisr CSAgICBmd3JpdGUobWQsMjAsMSxzdGRvdXQpOworKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2lu Z2xlKCEpIGZpbGUgKi8KKysJICAgIH0KKysKKysJcHJpbnRmKCJITUFDLVNIQTEoJXMpPSAiLGFy Z3Zbbl0pOworKwlmb3IoaT0wIDsgaSA8IDIwIDsgKytpKQorKwkgICAgcHJpbnRmKCIlMDJ4Iixt ZFtpXSk7CisrCXByaW50ZigiXG4iKTsKKysJfQorKyNlbmRpZgorKyAgICByZXR1cm4gMDsKKysg ICAgfQorKworKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc190ZXN0 X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUu YworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAw MCArMDIwMAorQEAgLTAsMCArMSw1ODggQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqCisrICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9y IHRoZSBGSVBTLTE0MCB0ZXN0aW5nCisrICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRh dGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQorKyAqIE9wZW5TU0wgbGlicmFy eSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKKysgKiBmdW5j dGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0 ZWx5CisrICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKKysgKgorKyAq IENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgorKyAqCisrICovCisrI2luY2x1ZGUgPHN0 ZGlvLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv YWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorKyAgICB7CisrICAgIHByaW50ZigiTm8g RklQUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworKyAgICB9CisrI2Vsc2UKKysKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrLyog QUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBt YXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAorKyovCisrc3RhdGljIGludCBGSVBTX2Flc190ZXN0 KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOwor Kwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKKysJdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAx LDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07CisrCXVuc2lnbmVkIGNoYXIg cGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKKysJRVZQX0NJUEhFUl9DVFggY3R4Owor KwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0 eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJZ290byBl cnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOworKwlpZiAoRVZQ X0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAw KSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAx Nik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQorKwkJZ290byBlcnI7Cisr CXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJcmV0 dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKKysJewor KwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKKysJdW5zaWduZWQgY2hh ciBjaXRtcFs4XTsKKysgICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2LDcs OCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAorKwkJICAgICAgICAgICAgICAxOSwyMCwy MSwyMiwyMywyNH07CisrICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0 JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7 CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgm Y3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJZ290 byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7CisrCWlmIChF VlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxM LCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1w LCA4KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKKysJCWdvdG8gZXJyOwor KwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCXJl dHVybiByZXQ7CisrCX0KKysKKysvKgorKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwg dmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3Qo aW50IGJhZCkKKysgICAgeworKyAgICBEU0EgKmRzYSA9IE5VTEw7CisrICAgIEVWUF9QS0VZIHBr OworKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNp Z25lZCBjaGFyIGJ1Zls2MF07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICBpbnQgciA9 IDA7CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7Cisr ICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGRzYSA9IERTQV9uZXcoKTsKKysgICAg aWYgKCFkc2EpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAg aWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoYmFkKQor KwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysKKysgICAgcGsudHlwZSA9IEVW UF9QS0VZX0RTQTsKKysgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCisrICAgIGlmICghRVZQX1Np Z25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlm ICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwlnb3Rv IGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQor Kwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2Rz czEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1j dHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVWUF9W ZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6CisrICAgIEVWUF9N RF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChkc2EpCisrICAJICBEU0FfZnJlZShkc2Ep OworKyAgICBpZiAociAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0K KysKKysvKgorKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBs YWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKKysgICAg eworKyAgICBSU0EgKmtleTsKKysgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0 YW9ucmlzaGRsYyI7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2lnbmVk IGludCBzbGVuOworKyAgICBCSUdOVU0gKmJuOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrICAg IEVWUF9QS0VZIHBrOworKyAgICBpbnQgciA9IDA7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigp OworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBrZXkgPSBSU0FfbmV3KCk7Cisr ICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysJcmV0dXJuIDA7Cisr ICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9l eChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsKKysg ICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7CisrCisrICAgIHBrLnR5 cGUgPSBFVlBfUEtFWV9SU0E7CisrICAgIHBrLnBrZXkucnNhID0ga2V5OworKworKyAgICBpZiAo IUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOwor KyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0 X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4 LCBidWYsICZzbGVuLCAmcGspKQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5 SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAo IUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQp IC0gMSkpCisrCWdvdG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYs IHNsZW4sICZwayk7CisrICAgIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsK KysgICAgaWYgKGtleSkKKysgIAkgICAgUlNBX2ZyZWUoa2V5KTsKKysgICAgaWYgKHIgIT0gMSkK KysJcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBMTogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3Qo KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9 CisrICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4 OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgs IDB4YjMsIDB4YzUsIDB4MTggfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJp c2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisr ICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihz dHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAo bWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBy ZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBk aWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0 IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCisrICAgIHsKKysgICAg dW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KKysJezB4ZjUsIDB4 NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwg MHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKKysJIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwg MHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0 ZiwgMHg0NywgMHg1N307CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7 CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKworKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3Ry KSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAo bWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBy ZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBk aWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0 IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCisrICAgIHsKKysgICAg dW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KKysJezB4OTksIDB4 YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYs IDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCisrCSAweDE2LCAweDFmLCAweDNkLCAweGY0 LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3LCAw eDBiLCAweDk0LCAweDRhLAorKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwg MHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgy MiwKKysJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4 YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OworKyAgICB1bnNp Z25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1k W1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAg IGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEy KCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1k KSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBI TUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJl IHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50 IEZJUFNfaG1hY19zaGExX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDczLCAw eGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVh LCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAorKwkgMHhiMiwgMHhmYiwgMHhlYywgMHhj Nn07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVu c2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAo IUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZv dXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysg ICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hB MjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBr bm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBT X2htYWNfc2hhMjI0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAi ZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Cisr ICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDc1LCAweDU4 LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLCAw eDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAorKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwg MHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07CisrCisrICAg IHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBv dXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3No YTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJl dHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEyNTY6IGdlbmVy YXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAg cHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEy NTZfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hk IjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWdu ZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4ZTksIDB4MTcsIDB4YzEsIDB4 N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUs IDB4NzIsIDB4MzMsIDB4ODcsCisrCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4 LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0LCAw eGY0fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAg dW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlm ICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91 dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikp CisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFD LVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUg dG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQg RklQU19obWFjX3NoYTM4NF90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtd ID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQi OworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhiMiwg MHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2MywgMHgw OCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKKysJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4 ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAs IDB4MDcsIDB4MzksIDB4MDgsCisrCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2 LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4LCAw eDFjfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAg dW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlm ICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91 dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikp CisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFD LVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUg dG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQg RklQU19obWFjX3NoYTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtd ID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQi OworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhjZCwg MHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhm MywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKKysJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4 OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4N2Us IDB4MjQsIDB4Y2EsIDB4YjEsCisrCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJj LCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGViLCAw eDljLAorKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwg MHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307CisrCisrICAg IHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBv dXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3No YTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJl dHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrCisrLyogREg6IGdlbmVyYXRlIHNo YXJlZCBwYXJhbWV0ZXJzCisrKi8KKytzdGF0aWMgaW50IGRoX3Rlc3QoKQorKyAgICB7CisrICAg IERIICpkaDsKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGRoID0gRklQU19kaF9uZXco KTsKKysgICAgaWYgKCFkaCkKKysJcmV0dXJuIDA7CisrICAgIGlmICghREhfZ2VuZXJhdGVfcGFy YW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCisrCXJldHVybiAwOworKyAgICBGSVBTX2Ro X2ZyZWUoZGgpOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFplcm9pemUKKysqLwor K3N0YXRpYyBpbnQgWmVyb2l6ZSgpCisrICAgIHsKKysgICAgUlNBICprZXk7CisrICAgIEJJR05V TSAqYm47CisrICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKKysJeyAweDQ4LCAweDUw LCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLCAw eDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07CisrICAgIGludCBpLCBuOworKworKyAgICBr ZXkgPSBGSVBTX3JzYV9uZXcoKTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFrZXkg fHwgIWJuKQorKwlyZXR1cm4gMDsKKysgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAg aWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJuIDA7 CisrICAgIEJOX2ZyZWUoYm4pOworKyAgICAKKysgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQp OworKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4p OworKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOworKyAgICBk b19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwtMSww KTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOworKyAgICBk b19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrCisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZl ciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwg c2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAg ICAgcHJpbnRmKCJcbiIpOworKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5 KTsKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5c dFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYo IiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysKKysgICAgcmV0 dXJuIDE7CisrICAgIH0KKysKKytzdGF0aWMgaW50IEVycm9yOworK2NvbnN0IGNoYXIgKiBGYWls KGNvbnN0IGNoYXIgKm1zZykKKysgICAgeworKyAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAg RXJyb3IrKzsKKysgICAgcmV0dXJuIG1zZzsgCisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJn YyxjaGFyICoqYXJndikKKysgICAgeworKworKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2Vu ID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKKysgICAgaW50IGJhZF9yc2EgPSAwLCBi YWRfZHNhID0gMDsKKysgICAgaW50IGRvX3JuZ19zdGljayA9IDA7CisrICAgIGludCBub19leGl0 ID0gMDsKKysKKysgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIp OworKworKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8K KysgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKKysKKysgICAgaWYgKGFyZ3ZbMV0p IHsKKysgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KKysgICAgICAgIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJhZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsK KysgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3Jy dXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi ZGVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7CisrICAgICAgICAgICAg cHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FU Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsK KysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJE U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVk IEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIp KSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOworKyAgICAgICAgICAgIHByaW50 ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1 cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJy c2FrZXkiKSkgeworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAgYmFk X3JzYSA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9 IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2Vu ZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4u XG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsK KysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZh bGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9kc2EgPSAxOwor KwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwg ImRzYWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOworKwkgICAg bm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5k IHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7CisrICAg ICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgeworKyAgICAgICAgICAg IEZJUFNfY29ycnVwdF9zaGExKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdp dGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi cm5nIikpIHsKKysJICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKKysJfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJybmdzdGljayIpKSB7CisrCSAgICBkb19ybmdfc3RpY2sgPSAxOworKwkgICAg bm9fZXhpdCA9IDE7CisrCSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91 cyB0ZXN0Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcHJpbnRmKCJC YWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsKKysgICAgICAgICAgICBleGl0KDEpOwor KyAgICAgICAgfQorKwlpZiAoIW5vX2V4aXQpIHsKKysgICAgICAgIAlpZiAoIUZJUFNfbW9kZV9z ZXQoMSkpIHsKKysgCQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICAJICAgIHByaW50 ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7CisrCQkgICAgZXhpdCgxKTsKKysJCX0K KysgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKKysg ICAgICAgIAlleGl0KDApOworKwl9CisrICAgIH0KKysKKysgICAgLyogTm9uLUFwcHJvdmVkIGNy eXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiMS4gTm9uLUFwcHJv dmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBwcmludGYoIlx0 YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHByaW50ZiggZGhfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogUG93 ZXItdXAgc2VsZiB0ZXN0CisrICAgICovCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBw cmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKKysgICAgaWYgKCFG SVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKyAgICAgICAgcHJp bnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBwcmludGYoInN1 Y2Nlc3NmdWxcbiIpOworKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQorKyAgICAgICAg ICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19jb3JydXB0X3JzYV9r ZXlnZW4pCisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKKysgICAgaWYg KGRvX3JuZ19zdGljaykKKysgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOworKworKyAgICAv KiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiMy4gQUVT IGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfYWVzX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFJT QSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAg IHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24u Li4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxc biIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogREVTLUNCQyBlbmNyeXB0aW9u L2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24v ZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBEU0Ega2V5IGdlbmVy YXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiNi4g RFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOworKyAgICBw cmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJG QUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtMSBoYXNoCisrICAgICovCisrICAgIHByaW50 ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTI1 NiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOworKyAg ICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS01MTIgaGFzaAorKyAgICAqLworKyAgICBwcmlu dGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBI TUFDLVNIQS0xIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNo Li4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxc biIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjI0IGhhc2gK KysgICAgKi8KKysgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKKysgICAg cHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCisrICAgICovCisr ICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQ U19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4i KSApOworKworKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAorKyAgICAqLworKyAgICBwcmludGYo IjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEz ODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysg ICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3aC4gSE1BQy1T SEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIE5vbi1B cHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjgu IE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAg cHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYo IGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwoImZh aWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAgIC8qIFplcm9pemF0aW9uCisrICAgICov CisrICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKKysgICAgcHJpbnRmKCBaZXJv aXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwoIlx0ZmFp bGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21w bGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKKysgICAgcmV0dXJuIEVycm9yID8gMSA6 IDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9m aXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2xvY2wuaAorLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2xvY2wuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHNfbG9jbC5oCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcyIEBACisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRl ZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKyt2b2lkIGZpcHNfd19s b2NrKHZvaWQpOworK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKTsKKyt2b2lkIGZpcHNfcl9sb2Nr KHZvaWQpOworK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKTsKKytpbnQgZmlwc19pc19zdGFydGVk KHZvaWQpOworK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lkKTsKKytpbnQgZmlwc19pc19vd25p bmdfdGhyZWFkKHZvaWQpOworK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOworK3Zv aWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKytpbnQgZmlwc19jbGVhcl9vd25pbmdf dGhyZWFkKHZvaWQpOworKworKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkxNgor KworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9maXBzL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvTWFrZWZp bGUuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9maXBzL01ha2VmaWxlCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtMCwwICsxLDgxIEBACisrIworKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9NYWtl ZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4uLy4uCisrQ0M9CWNjCisrSU5DTFVERVM9 CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUKKytBUj0JCWFyIHIKKysKKytDRkxBR1M9 ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJBTD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190 ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQUz0KKysKKytMSUI9JChUT1ApL2xpYmNy eXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBm aXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNh X3NlbGZ0ZXN0LmMgZmlwc19zaGExX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0 LmMgIGZpcHNfcmFuZC5jIFwKKysgICAgZmlwc19yc2FfeDkzMWcuYworKworK0xJQk9CSj1maXBz X2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8g Zmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hh MV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5vICBmaXBzX3JhbmQubyBcCisr ICAgIGZpcHNfcnNhX3g5MzFnLm8KKysKKytTUkM9ICQoTElCU1JDKSBmaXBzX3N0YW5kYWxvbmVf c2hhMS5jCisrCisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAorK0hFQURFUj0JJChFWEhF QURFUikKKysKKytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorKworK3RvcDoK KysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQor KworK2FsbDoJbGliCisrCisrbGliOgkkKExJQk9CSikKKysJJChBUikgJChMSUIpICQoTElCT0JK KQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKysJQHRvdWNoIGxpYgor KworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQo VE9QKS9NSU5GTworKworK2xpbmtzOgorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwg Li4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCisrCUAkKFBFUkwpICQoVE9QKS91dGls L21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWts aW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorKworK2luc3RhbGw6CisrCUBbIC1uICIkKElOU1RB TExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKysJQGhlYWRlcmxp c3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAorKwlkbyAgXAorKwko Y3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRp OyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9v cGVuc3NsLyQkaSApOyBcCisrCWRvbmU7CisrCisrdGFnczoKKysJY3RhZ3MgJChTUkMpCisrCisr dGVzdHM6CisrCisrbGludDoKKysJbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZm CisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQg YnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xV REVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQorKworK2RjbGVhbjoKKysJJChQ RVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQo MCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldworKwltdiAtZiBNYWtlZmlsZS5uZXcgJChN QUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1 cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKKysKKysjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5F IC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vaG1hYy9obWFj LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDEwLTAxLTI2 IDE1OjMzOjUyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9obWFj L2htYWMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTc3LDYgKzc3 LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KKyAKKyAJaWYg KGtleSAhPSBOVUxMKQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21v ZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCisrCQkmJiAoIShjdHgtPm1k X2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0 eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwg IShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCisr CQkJZ290byBlcnI7CisrI2VuZGlmCisgCQlyZXNldD0xOworIAkJaj1FVlBfTURfYmxvY2tfc2l6 ZShtZCk7CisgCQlPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vTWFrZWZpbGUuZmlw cwkyMDA5LTA0LTA2IDE2OjMxOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9NYWtlZmlsZQkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAg LTM0LDE0ICszNCwxNCBAQCBHRU5FUkFMPU1ha2VmaWxlIFJFQURNRSBjcnlwdG8tbGliLmNvbSBp CisgCisgTElCPSAkKFRPUCkvbGliY3J5cHRvLmEKKyBTSEFSRURfTElCPSBsaWJjcnlwdG8kKFNI TElCX0VYVCkKKy1MSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMgbWVtX2Nsci5jIG1lbV9kYmcuYyBj dmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGljLmMgdWlkLmMgb190aW1lLmMgb19z dHIuYyBvX2Rpci5jCistTElCT0JKPSBjcnlwdGxpYi5vIG1lbS5vIG1lbV9kYmcubyBjdmVyc2lv bi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJjZGljLm8gdWlkLm8gb190aW1lLm8gb19zdHIubyBv X2Rpci5vICQoQ1BVSURfT0JKKQorK0xJQlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMg bWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBv X3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMgb19pbml0LmMgZmlwc19lcnIuYworK0xJQk9CSj0gY3J5 cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8gY3ZlcnNpb24ubyBleF9kYXRhLm8gY3B0X2Vyci5vIGVi Y2RpYy5vIHVpZC5vIG9fdGltZS5vIG9fc3RyLm8gb19kaXIubyBvX2luaXQubyBmaXBzX2Vyci5v ICQoQ1BVSURfT0JKKQorIAorIFNSQz0gJChMSUJTUkMpCisgCisgRVhIRUFERVI9IGNyeXB0by5o IG9wZW5zc2x2Lmggb3BlbnNzbGNvbmYuaCBlYmNkaWMuaCBzeW1oYWNrcy5oIFwKKyAJb3NzbF90 eXAuaAorLUhFQURFUj0JY3J5cHRsaWIuaCBidWlsZGluZi5oIG1kMzJfY29tbW9uLmggb190aW1l Lmggb19zdHIuaCBvX2Rpci5oICQoRVhIRUFERVIpCisrSEVBREVSPQljcnlwdGxpYi5oIGJ1aWxk aW5mLmggZmlwc19sb2NsLmggbWQzMl9jb21tb24uaCBvX3RpbWUuaCBvX3N0ci5oIG9fZGlyLmgg JChFWEhFQURFUikKKyAKKyBBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorIAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAwNC0wNy0yNSAyMToxMDo0MS4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjEsNiArNjEsMTEgQEAKKyAjaW5jbHVkZSA8 c3RyaW5nLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv bWRjMi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgI3VuZGVmIGMybAor ICNkZWZpbmUgYzJsKGMsbCkJKGwgPSgoREVTX0xPTkcpKCooKGMpKyspKSkgICAgLCBcCitAQCAt NzUsNyArODAsNyBAQAorIAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4 ZmYpKQorIAorIHN0YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOworLWludCBNREMyX0luaXQoTURDMl9DVFggKmMpCisr RklQU19OT05fRklQU19NRF9Jbml0KE1EQzIpCisgCXsKKyAJYy0+bnVtPTA7CisgCWMtPnBhZF90 eXBlPTE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9tZGMyLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vbWRjMi9tZGMyLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZGMyL21kYzIuaAkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorQEAgLTgwLDcgKzgwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgbWRjMl9j dHhfc3QKKyAJaW50IHBhZF90eXBlOyAvKiBlaXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KKyAJ fSBNREMyX0NUWDsKKyAKKy0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfTURD Ml9Jbml0KE1EQzJfQ1RYICpjKTsKKysjZW5kaWYKKyBpbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpj KTsKKyBpbnQgTURDMl9VcGRhdGUoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRh dGEsIHNpemVfdCBsZW4pOworIGludCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMy X0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDEw LTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTYyLDYgKzYyLDExIEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvbWQyLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorIAorIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRF WFQ7CisgCitAQCAtMTE2LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQp CisgCQlyZXR1cm4oIm1kMihpbnQpIik7CisgCX0KKyAKKy1pbnQgTUQyX0luaXQoTUQyX0NUWCAq YykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoTUQyKQorIAl7CisgCWMtPm51bT0wOworIAltZW1z ZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL21kMi9tZDIuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDIvbWQyLmgKKy0t LSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQyL21kMi5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQyL21kMi5oCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtODEsNiArODEsOSBAQCB0eXBl ZGVmIHN0cnVjdCBNRDJzdGF0ZV9zdAorIAl9IE1EMl9DVFg7CisgCisgY29uc3QgY2hhciAqTUQy X29wdGlvbnModm9pZCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX01EMl9J bml0KE1EMl9DVFggKmMpOworKyNlbmRpZgorIGludCBNRDJfSW5pdChNRDJfQ1RYICpjKTsKKyBp bnQgTUQyX1VwZGF0ZShNRDJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXpl X3QgbGVuKTsKKyBpbnQgTUQyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDJfQ1RYICpjKTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTksNiArNTksMTEgQEAKKyAjaW5jbHVkZSA8c3Rk aW8uaD4KKyAjaW5jbHVkZSAibWQ0X2xvY2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns di5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBNRDRf dmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC03MCw3ICs3NSw3 IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElO SVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCisgI2RlZmluZSBJTklUX0RBVEFf RCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAorLWludCBNRDRfSW5pdChNRDRfQ1RYICpj KQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDQpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9m KCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vbWQ0L21kNC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kNC9tZDQuaAorLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0LmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0LmgJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDUsNiArMTA1LDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgTUQ0c3RhdGVfc3QKKyAJdW5zaWduZWQgaW50IG51bTsKKyAJfSBNRDRfQ1RYOwor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRfQ1RYICpj KTsKKysjZW5kaWYKKyBpbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYyk7CisgaW50IE1ENF9VcGRhdGUo TUQ0X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IE1ENF9GaW5h bCh1bnNpZ25lZCBjaGFyICptZCwgTUQ0X0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21k NV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwky MDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAor QEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgIm1kNV9s b2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NM X1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtNzAsNyArNzUsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJz aW9uW109Ik1ENSIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9u ZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMy NTQ3NkwKKyAKKy1pbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0lu aXQoTUQ1KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5BPUlOSVRfREFU QV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kNS9tZDUuaC5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9tZDUvbWQ1LmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1 L21kNS5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNS5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0Cisg CXVuc2lnbmVkIGludCBudW07CisgCX0gTUQ1X0NUWDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisraW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CisrI2VuZGlmCisgaW50IE1ENV9J bml0KE1ENV9DVFggKmMpOworIGludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQg KmRhdGEsIHNpemVfdCBsZW4pOworIGludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1E NV9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21lbS5jLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL21lbS5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21lbS5j LmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vbWVtLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BA IC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgKCpmcmVlX2xvY2tlZF9mdW5jKSh2b2lkICop IAorIAorIC8qIG1heSBiZSBjaGFuZ2VkIGFzIGxvbmcgYXMgJ2FsbG93X2N1c3RvbWl6ZV9kZWJ1 ZycgaXMgc2V0ICovCisgLyogWFhYIHVzZSBjb3JyZWN0IGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMg Ki8KKy0jaWZkZWYgQ1JZUFRPX01ERUJVRworKyNpZiBkZWZpbmVkKENSWVBUT19NREVCVUcpICYm ICFkZWZpbmVkKE9QRU5TU0xfRklQUykKKyAvKiB1c2UgZGVmYXVsdCBmdW5jdGlvbnMgZnJvbSBt ZW1fZGJnLmMgKi8KKyBzdGF0aWMgdm9pZCAoKm1hbGxvY19kZWJ1Z19mdW5jKSh2b2lkICosaW50 LGNvbnN0IGNoYXIgKixpbnQsaW50KQorIAk9IENSWVBUT19kYmdfbWFsbG9jOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29faW5pdC5jLmZpcHMJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v b19pbml0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEs ODAgQEAKKysvKiBvX2luaXQuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICov CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysg KiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8K KysKKysjaW5jbHVkZSA8ZV9vcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKworKy8q IFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVuU1NMIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMu CisrICogQ3VycmVudGx5IG9ubHkgc2V0cyBGSVBTIGNhbGxiYWNrcworKyAqLworKworK3ZvaWQg T1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKysJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ c3RhdGljIGludCBkb25lID0gMDsKKysJaWYgKCFkb25lKQorKwkJeworKyNpZmRlZiBDUllQVE9f TURFQlVHCisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQoKTsKKysjZW5kaWYKKysJCWRvbmUg PSAxOworKwkJfQorKyNlbmRpZgorKwl9CisrCQkKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29wZW5z c2xjb25mLmguaW4KKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5m aXBzCTIwMDUtMTItMTYgMTE6Mzc6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL29wZW5zc2xjb25mLmguaW4JMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKK0BAIC0xLDUgKzEsMjAgQEAKKyAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLwor IAorKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKysKKysvKiBJbmNsdWRlIGFueSBz eW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZl YXR1cmUKKysgKiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1ha2VkZXBlbmQuCisrICoKKysg KiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVz ZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKKysgKiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQg ZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0K KysgKi8KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNkZWZpbmUgT1BFTlNTTF9GSVBTCisr I2VuZGlmCisrCisrI2VuZGlmCisrCisgLyogR2VuZXJhdGUgODAzODYgY29kZT8gKi8KKyAjdW5k ZWYgSTM4Nl9PTkxZCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcGtjczEyL3Ax Ml9jcnQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCistLS0g b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAzLTA5IDE0 OjA4OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9wa2NzMTIv cDEyX2NydC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTksNiAr NTksMTAgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAj aW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIAorIHN0YXRpYyBpbnQgcGtjczEy X2FkZF9iYWcoU1RBQ0tfT0YoUEtDUzEyX1NBRkVCQUcpICoqcGJhZ3MsIFBLQ1MxMl9TQUZFQkFH ICpiYWcpOworQEAgLTkwLDcgKzk0LDE0IEBAIFBLQ1MxMiAqUEtDUzEyX2NyZWF0ZShjaGFyICpw YXNzLCBjaGFyICoKKyAKKyAJLyogU2V0IGRlZmF1bHRzICovCisgCWlmICghbmlkX2NlcnQpCisr CQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9kZSgpKQorKwkJCW5pZF9j ZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7CisrCQllbHNlCisr I2VuZGlmCisgCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQ0MEJpdFJDMl9DQkM7Cisr CQl9CisgCWlmICghbmlkX2tleSkKKyAJCW5pZF9rZXkgPSBOSURfcGJlX1dpdGhTSEExQW5kM19L ZXlfVHJpcGxlREVTX0NCQzsKKyAJaWYgKCFpdGVyKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvbWRf cmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMJMjAw OS0wMS0wMyAxMDoyNTozMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vcmFuZC9tZF9yYW5kLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BA IC0xMjYsNiArMTI2LDEwIEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAjaWZkZWYgQk5fREVCVUcKKyAjIGRlZmlu ZSBQUkVESUNUCitAQCAtMzQyLDYgKzM0NiwxNCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5 dGVzKHVuc2lnbmVkIGNoCisgI2VuZGlmCisgCWludCBkb19zdGlyX3Bvb2wgPSAwOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBT ZXJyKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJ ICAgIHJldHVybiAwOworKwkgICAgfQorKyNlbmRpZgorKworICNpZmRlZiBQUkVESUNUCisgCWlm IChyYW5kX3ByZWRpY3RhYmxlKQorIAkJeworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L3JhbmQvcmFuZF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYW5kL3JhbmRfZXJy LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jLmZpcHMJMjAwNi0x MS0yMSAyMjoyOTo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v cmFuZC9yYW5kX2Vyci5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAt NzAsNiArNzAsMTMgQEAKKyAKKyBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0 c1tdPQorIAl7Cisre0VSUl9GVU5DKFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QpLAki RU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9EIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkQp LAkiRklQU19SQU5EIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfQllURVMpLAkiRklQ U19SQU5EX0JZVEVTIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUKSwJIkZJ UFNfUkFORF9TRVRfRFQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX0RUKSwJIkZJUFNf U0VUX0RUIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQpLAkiRklQU19T RVRfUFJOR19TRUVEIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUpLAki RklQU19TRVRfVEVTVF9NT0RFIn0sCisge0VSUl9GVU5DKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01F VEhPRCksCSJSQU5EX2dldF9yYW5kX21ldGhvZCJ9LAorIHtFUlJfRlVOQyhSQU5EX0ZfU1NMRUFZ X1JBTkRfQllURVMpLAkiU1NMRUFZX1JBTkRfQllURVMifSwKKyB7MCxOVUxMfQorQEAgLTc3LDcg Kzg0LDE3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW10KKyAKKyBz dGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX3JlYXNvbnNbXT0KKyAJeworK3tFUlJfUkVB U09OKFJBTkRfUl9OT05fRklQU19NRVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKKyt7 RVJSX1JFQVNPTihSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSkgICAgICwibm90IGluIHRlc3QgbW9k ZSJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9OT19LRVlfU0VUKSAgICAgICAgICAgLCJubyBrZXkg c2V0In0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSCksInBy bmcgYXNraW5nIGZvciB0b28gbXVjaCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0VSUk9S KSAgICAgICAgICAgLCJwcm5nIGVycm9yIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfS0VZ RUQpICAgICAgICAgICAsInBybmcga2V5ZWQifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19O T1RfUkVLRVlFRCkgICAgICwicHJuZyBub3QgcmVrZXllZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRf Ul9QUk5HX05PVF9SRVNFRURFRCkgICAgLCJwcm5nIG5vdCByZXNlZWRlZCJ9LAorIHtFUlJfUkVB U09OKFJBTkRfUl9QUk5HX05PVF9TRUVERUQpICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKKyt7 RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSksInBybmcgc2Vl ZCBtdXN0IG5vdCBtYXRjaCBrZXkifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TVFVDSykg ICAgICAgICAgICwicHJuZyBzdHVjayJ9LAorIHswLE5VTEx9CisgCX07CisgCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vcmFuZC9yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kLmguZmlw cwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9yYW5kL3JhbmQuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAor QEAgLTEyOCwxMSArMTI4LDI4IEBAIHZvaWQgRVJSX2xvYWRfUkFORF9zdHJpbmdzKHZvaWQpOwor IC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMuICovCisgCisgLyogRnVuY3Rp b24gY29kZXMuICovCisrI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJ IDEwOAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAzCisrI2RlZmluZSBSQU5EX0Zf RklQU19SQU5EX0JZVEVTCQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RU CQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJCQkgMTA0CisrI2RlZmluZSBS QU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNworKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VU X1RFU1RfTU9ERQkJCSAxMDUKKyAjZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRAkJ CSAxMDEKKyAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKKyAKKyAvKiBS ZWFzb24gY29kZXMuICovCisrI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUK KysjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRf Ul9OT19LRVlfU0VUCQkJCSAxMDcKKysjZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9P X01VQ0gJCQkgMTAxCisrI2RlZmluZSBSQU5EX1JfUFJOR19FUlJPUgkJCQkgMTA4CisrI2RlZmlu ZSBSQU5EX1JfUFJOR19LRVlFRAkJCQkgMTA5CisrI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVL RVlFRAkJCQkgMTAyCisrI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQJCQkgMTAzCisg I2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKKysjZGVmaW5lIFJBTkRfUl9Q Uk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCisrI2RlZmluZSBSQU5EX1JfUFJOR19T VFVDSwkJCQkgMTA0CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworIH0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vcmFuZC9yYW5kX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9s aWIuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAorQEAgLTYwLDYgKzYwLDEyIEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5j bHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUg InJhbmRfbGNsLmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjZW5kaWYKKysKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CisgI2Vu ZGlmCitAQCAtMTAyLDggKzEwOCwxOSBAQCBjb25zdCBSQU5EX01FVEhPRCAqUkFORF9nZXRfcmFu ZF9tZXRob2QoCisgCQkJZnVuY3RfcmVmID0gZTsKKyAJCWVsc2UKKyAjZW5kaWYKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCQkJZGVmYXVsdF9SQU5EX21ldGggPSBGSVBTX21vZGUoKSA/IEZJUFNf cmFuZF9tZXRob2QoKSA6IFJBTkRfU1NMZWF5KCk7CisrCQl9CisrCWlmIChGSVBTX21vZGUoKQor KwkJJiYgZGVmYXVsdF9SQU5EX21ldGggIT0gRklQU19yYW5kX2NoZWNrKCkpCisrCSAgICB7Cisr CSAgICBSQU5EZXJyKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCxSQU5EX1JfTk9OX0ZJUFNf TUVUSE9EKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNlbHNlCisgCQkJZGVmYXVsdF9S QU5EX21ldGggPSBSQU5EX1NTTGVheSgpOworIAkJfQorKyNlbmRpZgorIAlyZXR1cm4gZGVmYXVs dF9SQU5EX21ldGg7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzIv cmMyLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmMyL3JjMi5oCistLS0gb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3JjMi9yYzIuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTQuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjMi9yYzIuaAkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTc5LDcgKzc5LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg cmMyX2tleV9zdAorIAlSQzJfSU5UIGRhdGFbNjRdOworIAl9IFJDMl9LRVk7CisgCistIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMgCisrdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtl eSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7CisrI2VuZGlm Cisgdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEsaW50IGJpdHMpOworIHZvaWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxSQzJfS0VZICprZXksCisgCQkgICAgIGlu dCBlbmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjMi9yYzJfc2tleS5jCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZpcHMJMjAwNy0wOS0xOCAyMzoxMDozMi4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmMyL3JjMl9za2V5LmMJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Nyw2ICs1NywxMSBAQAorICAqLwor IAorICNpbmNsdWRlIDxvcGVuc3NsL3JjMi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrCisgI2luY2x1ZGUgInJjMl9sb2NsLmgiCisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2V5X3RhYmxlWzI1Nl09eworQEAgLTk0LDggKzk5LDIwIEBAIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTYKKyAgKiBCU0FGRSB1c2VzIHRoZSAncmV0YXJkZWQn IHZlcnNpb24uICBXaGF0IEkgcHJldmlvdXNseSBzaGlwcGVkIGlzCisgICogdGhlIHNhbWUgYXMg c3BlY2lmeWluZyAxMDI0IGZvciB0aGUgJ2JpdHMnIHBhcmFtZXRlci4gIEJzYWZlIHVzZXMKKyAg KiBhIHZlcnNpb24gd2hlcmUgdGhlIGJpdHMgcGFyYW1ldGVyIGlzIHRoZSBzYW1lIGFzIGxlbio4 ICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYml0cykKKyAJewor KwlpZiAoRklQU19tb2RlKCkpCisrCQlGSVBTX0JBRF9BQk9SVChSQzIpCisrCXByaXZhdGVfUkMy X3NldF9rZXkoa2V5LCBsZW4sIGRhdGEsIGJpdHMpOworKwl9Cisrdm9pZCBwcml2YXRlX1JDMl9z ZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwK KysJCQkJCQkJCWludCBiaXRzKQorKyNlbHNlCisrdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICpr ZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQorKyNlbmRp ZgorKwl7CisgCWludCBpLGo7CisgCXVuc2lnbmVkIGNoYXIgKms7CisgCVJDMl9JTlQgKmtpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCistLS0gb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMJMjAwOS0wMi0xMiAxNTo0ODo0 OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L2FzbS9yYzQt czM5MHgucGwJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMDIsNCAr MjAyLDYgQEAgUkM0X29wdGlvbnM6CisgLnN0cmluZwkicmM0KDh4LGNoYXIpIgorIF9fXworIAor KyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJ UFN9IG5lICIiKTsKKysKKyBwcmludCAkY29kZTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0 L2FzbS9yYzQteDg2XzY0LnBsCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0 LXg4Nl82NC5wbC5maXBzCTIwMDktMDQtMjcgMjE6MzE6MDQuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTQ5OSw2ICs0OTksOCBAQCBfX18KKyAKKyAkY29k ZSA9fiBzLyMoW2J3ZF0pLyQxL2dtOworIAorKyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0 ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBwcmludCAkY29kZTsK KyAKKyBjbG9zZSBTVERPVVQ7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L2Fz bS9yYzQtNTg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5w bAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwuZmlwcwkyMDA3 LTEyLTAyIDIyOjMyOjAzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9yYzQvYXNtL3JjNC01ODYucGwJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAK K0BAIC0xNjYsOCArMTY2LDEyIEBAICRpZHg9ImVkeCI7CisgCisgJmV4dGVybmFsX2xhYmVsKCJP UEVOU1NMX2lhMzJjYXBfUCIpOworIAorKyRzZXRrZXlmdW5jID0gIlJDNF9zZXRfa2V5IjsKKysk c2V0a2V5ZnVuYyA9ICJwcml2YXRlX1JDNF9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7 CisrCisrCisgIyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSxpbnQgbGVuLGNvbnN0IHVu c2lnbmVkIGNoYXIgKmRhdGEpOworLSZmdW5jdGlvbl9iZWdpbigiUkM0X3NldF9rZXkiKTsKKysm ZnVuY3Rpb25fYmVnaW4oJHNldGtleWZ1bmMpOworIAkmbW92CSgkb3V0LCZ3cGFyYW0oMCkpOwkJ IyBsb2FkIGtleQorIAkmbW92CSgkaWRpLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIGxlbgorIAkmbW92 CSgkaW5wLCZ3cGFyYW0oMikpOwkJIyBsb2FkIGRhdGEKK0BAIC0yNDUsNyArMjQ5LDcgQEAgJGlk eD0iZWR4IjsKKyAJJnhvcgkoImVheCIsImVheCIpOworIAkmbW92CSgmRFdQKC04LCRvdXQpLCJl YXgiKTsJCSMga2V5LT54PTA7CisgCSZtb3YJKCZEV1AoLTQsJG91dCksImVheCIpOwkJIyBrZXkt Pnk9MDsKKy0mZnVuY3Rpb25fZW5kKCJSQzRfc2V0X2tleSIpOworKyZmdW5jdGlvbl9lbmQoJHNl dGtleWZ1bmMpOworIAorICMgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7CisgJmZ1bmN0 aW9uX2JlZ2luX0IoIlJDNF9vcHRpb25zIik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vcmM0L01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9NYWtlZmlsZQor LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvTWFrZWZpbGUuZmlwcwkyMDA5LTAyLTExIDEx OjAxOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvTWFr ZWZpbGUJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMSw4ICsyMSw4 IEBAIFRFU1Q9cmM0dGVzdC5jCisgQVBQUz0KKyAKKyBMSUI9JChUT1ApL2xpYmNyeXB0by5hCist TElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jCistTElCT0JKPSQoUkM0X0VOQykKKytMSUJTUkM9 cmM0X3NrZXkuYyByYzRfZW5jLmMgcmM0X2ZibGsuYworK0xJQk9CSj0kKFJDNF9FTkMpIHJjNF9m YmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzRfZmJs ay5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v cmM0L3JjNF9mYmxrLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0w LDAgKzEsNzUgQEAKKysvKiBjcnlwdG8vcmM0L3JjNF9mYmxrLmMgKi8KKysvKiBXcml0dGVuIGJ5 IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wK KysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLwor KworKworKyNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorKyNpbmNsdWRlICJyYzRfbG9jbC5oIgor KyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysKKysvKiBGSVBTIG1vZGUgYmxvY2tpbmcgZm9yIFJDNCBoYXMgdG8gYmUgZG9uZSBz ZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5CisrICogbWF5IGJlIGltcGxlbWVudGVkIGluIGFu IGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCisrICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor K3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhKQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFEX0FCT1JUKFJD NCkKKysJcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7CisrCX0KKysjZW5kaWYK KysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvcmM0LmguZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vcmM0L3JjNC5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9y YzQuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL3JjNC9yYzQuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTc4LDYgKzc4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcmM0X2tleV9zdAorIAorICAK KyBjb25zdCBjaGFyICpSQzRfb3B0aW9ucyh2b2lkKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr dm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSk7CisrI2VuZGlmCisgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICpr ZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworIHZvaWQgUkM0KFJDNF9L RVkgKmtleSwgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5kYXRhLAorIAkJdW5z aWduZWQgY2hhciAqb3V0ZGF0YSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0 L3JjNF9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L3JjNF9za2V5LmMKKy0t LSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcwkyMDA3LTAxLTIxIDE0 OjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvcmM0 X3NrZXkuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYgKzU5 LDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+CisgI2luY2x1ZGUgInJjNF9sb2NsLmgi CisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgUkM0X3ZlcnNpb25bXT0iUkM0IiBPUEVOU1NMX1ZF UlNJT05fUFRFWFQ7CisgCitAQCAtODUsNyArOTAsMTEgQEAgY29uc3QgY2hhciAqUkM0X29wdGlv bnModm9pZCkKKyAgKiBEYXRlOiBXZWQsIDE0IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAorICAqLwor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tF WSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKyNlbHNlCisgdm9p ZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEpCisrI2VuZGlmCisgCXsKKyAgICAgICAgIHJlZ2lzdGVyIFJDNF9JTlQgdG1wOworICAg ICAgICAgcmVnaXN0ZXIgaW50IGlkMSxpZDI7CitAQCAtMTI2LDcgKzEzNSwxMiBAQCB2b2lkIFJD NF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgCisgCQkgKiBtb2R1bGUuLi4KKyAJCSAq CQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAJCSAqLworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBfcHRyID0gT1BFTlNTTF9pYTMyY2FwX2xvYygpOwor KwkJaWYgKGlhMzJjYXBfcHRyICYmICgqaWEzMmNhcF9wdHIgJiAoMTw8MjgpKSkgeworKyNlbHNl CisgCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1AgJiAoMTw8MjgpKSB7CisrI2VuZGlmCisgCQkJdW5z aWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNoYXIgKilkOworIAorIAkJCWZvciAoaT0wO2k8MjU2 O2krKykgY3BbaV09aTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBlbWQvcmlw ZW1kLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmlwZW1kL3JpcGVtZC5oCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JpcGVtZC9yaXBl bWQuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTkxLDYgKzkxLDkg QEAgdHlwZWRlZiBzdHJ1Y3QgUklQRU1EMTYwc3RhdGVfc3QKKyAJdW5zaWduZWQgaW50ICAgbnVt OworIAl9IFJJUEVNRDE2MF9DVFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2 YXRlX1JJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOworKyNlbmRpZgorIGludCBSSVBF TUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKKyBpbnQgUklQRU1EMTYwX1VwZGF0ZShSSVBF TUQxNjBfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgUklQRU1E MTYwX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBSSVBFTUQxNjBfQ1RYICpjKTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9y aXBlbWQvcm1kX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTksNiArNTksMTEgQEAKKyAjaW5jbHVkZSA8 c3RkaW8uaD4KKyAjaW5jbHVkZSAicm1kX2xvY2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBS TUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitA QCAtNjksNyArNzQsNyBAQCBjb25zdCBjaGFyIFJNRDE2MF92ZXJzaW9uW109IlJJUEUtTUQxNjAi CisgICAgICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQxNjBfQ1RYICpjLCB1bnNpZ25lZCBs b25nICpwLHNpemVfdCBudW0pOworICMgIGVuZGlmCisgCistaW50IFJJUEVNRDE2MF9Jbml0KFJJ UEVNRDE2MF9DVFggKmMpCisrRklQU19OT05fRklQU19NRF9Jbml0KFJJUEVNRDE2MCkKKyAJewor IAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1SSVBFTUQxNjBfQTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9l YXkuYy5maXBzCTIwMDgtMDktMTQgMTU6NTE6NDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAw MDAgKzAyMDAKK0BAIC0xMTQsNiArMTE0LDEwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyAjaWZuZGVmIFJTQV9OVUxMCisgCitAQCAt MTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlfbWV0aD17Cisg CUJOX21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNob3VsZCBub3QgdXNlIE1vbnRn b21lcnkgaWYgIGUgPT0gMyAqLworIAlSU0FfZWF5X2luaXQsCisgCVJTQV9lYXlfZmluaXNoLAor LQkwLCAvKiBmbGFncyAqLworKwlSU0FfRkxBR19GSVBTX01FVEhPRCwgLyogZmxhZ3MgKi8KKyAJ TlVMTCwKKyAJMCwgLyogcnNhX3NpZ24gKi8KKyAJMCwgLyogcnNhX3ZlcmlmeSAqLworQEAgLTE1 MCw2ICsxNTQsMTYgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX1BLQ1MxX1NTTGVheSh2b2lkKQor IAlyZXR1cm4oJnJzYV9wa2NzMV9lYXlfbWV0aCk7CisgCX0KKyAKKysvKiBVc2FnZSBleGFtcGxl OworKyAqICAgIE1PTlRfSEVMUEVSKHJzYSwgYm5fY3R4LCBwLCByc2EtPmZsYWdzICYgUlNBX0ZM QUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOworKyAqLworKyNkZWZpbmUgTU9OVF9IRUxQRVIo cnNhLCBjdHgsIG0sIHByZV9jb25kLCBlcnJfaW5zdHIpIFwKKysJaWYoKHByZV9jb25kKSAmJiAo KHJzYSktPl9tZXRob2RfbW9kXyMjbSA9PSBOVUxMKSAmJiBcCisrCQkJIUJOX01PTlRfQ1RYX3Nl dF9sb2NrZWQoJigocnNhKS0+X21ldGhvZF9tb2RfIyNtKSwgXAorKwkJCQlDUllQVE9fTE9DS19S U0EsIFwKKysJCQkJKHJzYSktPm0sIChjdHgpKSkgXAorKwkJZXJyX2luc3RyCisrCisgc3RhdGlj IGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpmcm9tLAorIAkgICAgIHVuc2lnbmVkIGNoYXIgKnRvLCBSU0EgKnJzYSwgaW50IHBhZGRpbmcp CisgCXsKK0BAIC0xNTgsNiArMTcyLDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5j cnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7CisgCUJOX0NUWCAqY3R4PU5V TEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX21vZGUoKSkKKysJCXsKKysJ CWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9S U0FfRUFZX1BVQkxJQ19FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJ Z290byBlcnI7CisrCQkJfQorKworKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NM X1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0Ff RUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVy biAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4p ID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9S U0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMjIz LDkgKzI1NCw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAJ CWdvdG8gZXJyOworIAkJfQorIAorLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BV QkxJQykKKy0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9u LCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQlnb3RvIGVycjsKKysJTU9OVF9I RUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdv dG8gZXJyKTsKKyAKKyAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJz YS0+bixjdHgsCisgCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVycjsKK0BAIC0zNTUsNiAr Mzg0LDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKKyAJaW50 IGxvY2FsX2JsaW5kaW5nID0gMDsKKyAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlf UFJJVkFURV9FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBl cnI7CisrCQkJfQorKworKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BS SVZBVEVfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7 CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5V TEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJZiAgID0gQk5fQ1RYX2dldChj dHgpOworQEAgLTQzMiw5ICs0NzgsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNy eXB0KGludCBmCisgCQllbHNlCisgCQkJZD0gcnNhLT5kOworIAorLQkJaWYgKHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCistCQkJaWYoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQo JnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJ CWdvdG8gZXJyOworKwkJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAKKyAJCWlmICghcnNhLT5tZXRoLT5ibl9t b2RfZXhwKHJldCxmLGQscnNhLT5uLGN0eCwKKyAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290 byBlcnI7CitAQCAtNDg4LDYgKzUzMiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9k ZWNyeXB0KGludCBmCisgCWludCBsb2NhbF9ibGluZGluZyA9IDA7CisgCUJOX0JMSU5ESU5HICpi bGluZGluZyA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2Rl KCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBT ZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2Et Pm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0Fl cnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYoKGN0eCA9 IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOwor IAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7CitAQCAtNTU1LDkgKzYxNiw3IEBAIHN0YXRpYyBpbnQg UlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKKyAJCWVsc2UKKyAJCQlkID0gcnNhLT5kOwor IAorLQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCistCQkJaWYgKCFC Tl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JT QSwgcnNhLT5uLCBjdHgpKQorLQkJCQlnb3RvIGVycjsKKysJCU1PTlRfSEVMUEVSKHJzYSwgY3R4 LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7CisgCQlp ZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgsCisgCQkJCXJzYS0+ X21ldGhvZF9tb2RfbikpCisgCQkgIGdvdG8gZXJyOworQEAgLTYxNyw2ICs2NzYsMjMgQEAgc3Rh dGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAorIAl1bnNpZ25lZCBjaGFyICpi dWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoQk5f bnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKKysJ CQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysK KyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRT KQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01P RFVMVVNfVE9PX0xBUkdFKTsKK0BAIC02NjcsOSArNzQzLDcgQEAgc3RhdGljIGludCBSU0FfZWF5 X3B1YmxpY19kZWNyeXB0KGludCBmbAorIAkJZ290byBlcnI7CisgCQl9CisgCistCWlmIChyc2Et PmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRf bG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgp KQorLQkJCWdvdG8gZXJyOworKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAm IFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOworIAorIAlpZiAoIXJzYS0+bWV0aC0+ Ym5fbW9kX2V4cChyZXQsZixyc2EtPmUscnNhLT5uLGN0eCwKKyAJCXJzYS0+X21ldGhvZF9tb2Rf bikpIGdvdG8gZXJyOworQEAgLTcxNyw2ICs3OTEsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9k X2V4cChCSUdOVU0gKnIwLCBjCisgCUJJR05VTSAqcjEsKm0xLCp2cmZ5OworIAlCSUdOVU0gbG9j YWxfZG1wMSxsb2NhbF9kbXExLGxvY2FsX2MsbG9jYWxfcjE7CisgCUJJR05VTSAqZG1wMSwqZG1x MSwqYywqcHIxOworKwlpbnQgYm5fZmxhZ3M7CisgCWludCByZXQ9MDsKKyAKKyAJQk5fQ1RYX3N0 YXJ0KGN0eCk7CitAQCAtNzI0LDQxICs3OTksMzEgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9l eHAoQklHTlVNICpyMCwgYworIAltMSA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJdnJmeSA9IEJOX0NU WF9nZXQoY3R4KTsKKyAKKy0JeworLQkJQklHTlVNIGxvY2FsX3AsIGxvY2FsX3E7CistCQlCSUdO VU0gKnAgPSBOVUxMLCAqcSA9IE5VTEw7CistCistCQkvKiBNYWtlIHN1cmUgQk5fbW9kX2ludmVy c2UgaW4gTW9udGdvbWVyeSBpbnRpYWxpemF0aW9uIHVzZXMgdGhlCistCQkgKiBCTl9GTEdfQ09O U1RUSU1FIGZsYWcgKHVubGVzcyBSU0FfRkxBR19OT19DT05TVFRJTUUgaXMgc2V0KQorLQkJICov CistCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKKy0JCQl7Cist CQkJQk5faW5pdCgmbG9jYWxfcCk7CistCQkJcCA9ICZsb2NhbF9wOworLQkJCUJOX3dpdGhfZmxh Z3MocCwgcnNhLT5wLCBCTl9GTEdfQ09OU1RUSU1FKTsKKy0KKy0JCQlCTl9pbml0KCZsb2NhbF9x KTsKKy0JCQlxID0gJmxvY2FsX3E7CistCQkJQk5fd2l0aF9mbGFncyhxLCByc2EtPnEsIEJOX0ZM R19DT05TVFRJTUUpOworLQkJCX0KKy0JCWVsc2UKKy0JCQl7CistCQkJcCA9IHJzYS0+cDsKKy0J CQlxID0gcnNhLT5xOworLQkJCX0KKysJLyogTWFrZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1vbnRn b21lcmV5IGludGlhbGl6YXRpb24gdXNlIGNvcnJlY3QgCisrCSAqIEJOX0ZMR19DT05TVFRJTUUg ZmxhZy4KKysJICovCisrCWJuX2ZsYWdzID0gcnNhLT5wLT5mbGFnczsKKysJaWYgKCEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCisrCQl7CisrCQlyc2EtPnAtPmZsYWdzIHw9 IEJOX0ZMR19DT05TVFRJTUU7CisrCQl9CisrCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBwLCByc2Et PmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOworKwkvKiBXZSByZXN0 b3JlIGJuX2ZsYWdzIGJhY2sgKi8KKysJcnNhLT5wLT5mbGFncyA9IGJuX2ZsYWdzOworIAorLQkJ aWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFKQorLQkJCXsKKy0JCQlpZiAo IUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfcCwgQ1JZUFRPX0xPQ0tf UlNBLCBwLCBjdHgpKQorLQkJCQlnb3RvIGVycjsKKy0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9s b2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfcSwgQ1JZUFRPX0xPQ0tfUlNBLCBxLCBjdHgpKQorLQkJ CQlnb3RvIGVycjsKKy0JCQl9CistCX0KKysgICAgICAgIC8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJz ZSBpbiBtb250Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0CisrICAgICAgICAgKiBC Tl9GTEdfQ09OU1RUSU1FIGZsYWcuCisrICAgICAgICAgKi8KKysJYm5fZmxhZ3MgPSByc2EtPnEt PmZsYWdzOworKwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKKysJ CXsKKysJCXJzYS0+cS0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKKysJCX0KKysJTU9OVF9I RUxQRVIocnNhLCBjdHgsIHEsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBn b3RvIGVycik7CisrCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLworKwlyc2EtPnEtPmZs YWdzID0gYm5fZmxhZ3M7CQorIAorLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BV QkxJQykKKy0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9u LCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQlnb3RvIGVycjsKKysJTU9OVF9I RUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdv dG8gZXJyKTsKKyAKKyAJLyogY29tcHV0ZSBJIG1vZCBxICovCisgCWlmICghKHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQorQEAgLTg3NSw2ICs5NDAsOSBAQCBlcnI6CisgCisg c3RhdGljIGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcnNhLT5mbGFnc3w9UlNB X0ZMQUdfQ0FDSEVfUFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7CisgCXJldHVybigxKTsK KyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAwOC0xMi0yOSAxNzoxMTo1Ni4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTExMSw4ICsxMTEsMTIgQEAgc3RhdGljIEVSUl9T VFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJTlRf RlApLAkiUlNBX3ByaW50X2ZwIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0RFQ09ERSks CSJSU0FfUFJJVl9ERUNPREUifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZfRU5DT0RFKSwJ IlJTQV9QUklWX0VOQ09ERSJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBU KSwJIlJTQV9wcml2YXRlX2VuY3J5cHQifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNP REUpLAkiUlNBX1BVQl9ERUNPREUifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQkxJQ19ERUNS WVBUKSwJIlJTQV9wdWJsaWNfZGVjcnlwdCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBf QkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9T RVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9LAorK3tFUlJfRlVO QyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAorIHtFUlJfRlVOQyhS U0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9B U04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAorIHtFUlJf RlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKK0BAIC0xNTUsMTAgKzE1OSwx MiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfcmVhc29uc1tdCisge0VSUl9SRUFT T04oUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAor IHtFUlJfUkVBU09OKFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRCkgICAgLCJsYXN0IG9jdGV0IGlu dmFsaWQifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9k dWx1cyB0b28gbGFyZ2UifSwKKyt7RVJSX1JFQVNPTihSU0FfUl9OT05fRklQU19NRVRIT0QpICAg ICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCisge0VSUl9SRUFTT04oUlNBX1JfTk9fUFVCTElDX0VY UE9ORU5UKSAgICAsIm5vIHB1YmxpYyBleHBvbmVudCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX05V TExfQkVGT1JFX0JMT0NLX01JU1NJTkcpLCJudWxsIGJlZm9yZSBibG9jayBtaXNzaW5nIn0sCisg e0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4gZG9lcyBub3QgZXF1 YWwgcCBxIn0sCisge0VSUl9SRUFTT04oUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUikgICAsIm9h ZXAgZGVjb2RpbmcgZXJyb3IifSwKKyt7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX0FM TE9XRURfSU5fRklQU19NT0RFKSwib3BlcmF0aW9uIG5vdCBhbGxvd2VkIGluIGZpcHMgbW9kZSJ9 LAorIHtFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tF WVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCisge0VS Ul9SRUFTT04oUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQpICAsInBhZGRpbmcgY2hlY2sgZmFp bGVkIn0sCisge0VSUl9SRUFTT04oUlNBX1JfUF9OT1RfUFJJTUUpICAgICAgICAgICAsInAgbm90 IHByaW1lIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI3LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2dlbi5jCTIwMTAtMDYt MDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjcsNiArNjcsODIgQEAKKyAjaW5jbHVk ZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworK3N0YXRpYyBpbnQgZmlwc19yc2FfcGFpcndp c2VfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKQorKwl7 CisrCWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOworKwl9CisrCisraW50IGZpcHNfY2hlY2tf cnNhKFJTQSAqcnNhKQorKwl7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiUlNBIFBh aXJ3aXNlIENoZWNrIERhdGEiOworKwl1bnNpZ25lZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpwdGJ1 ZiA9IE5VTEw7CisrCWludCBsZW4sIHJldCA9IDA7CisrCUVWUF9QS0VZICpwazsKKysKKysJaWYg KChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtF WV9zZXQxX1JTQShwaywgcnNhKTsKKysKKysJLyogUGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5j eSBzaWduYXR1cmUgdGVzdCAqLworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg dGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BL Q1MxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwK KysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5VTEwp CisrCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEws IDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBOVUxMKSkKKysJCWdvdG8g ZXJyOworKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0L2RlY3J5 cHQgdGVzdCAqLworKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKwlp ZiAoIWN0YnVmKQorKwkJZ290byBlcnI7CisrCisrCWxlbiA9IFJTQV9wdWJsaWNfZW5jcnlwdChz aXplb2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKwlp ZiAobGVuIDw9IDApCisrCQlnb3RvIGVycjsKKysJLyogQ2hlY2sgY2lwaGVydGV4dCBkb2Vzbid0 IG1hdGNoIHBsYWludGV4dCAqLworKwlpZiAoKGxlbiA9PSAoc2l6ZW9mKHRicykgLSAxKSkgJiYg IW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQorKwkJZ290byBlcnI7CisrCXB0YnVmID0gT1BFTlNT TF9tYWxsb2MoUlNBX3NpemUocnNhKSk7CisrCisrCWlmICghcHRidWYpCisrCQlnb3RvIGVycjsK KysJbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0YnVmLCBwdGJ1ZiwgcnNhLCBSU0Ff UEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gIT0gKHNpemVvZih0YnMpIC0gMSkpCisrCQlnb3Rv IGVycjsKKysJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQorKwkJZ290byBlcnI7CisrCisr CXJldCA9IDE7CisrCisrCWlmICghcHRidWYpCisrCQlnb3RvIGVycjsKKysJCisrCWVycjoKKysJ aWYgKHJldCA9PSAwKQorKwkJeworKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJRklQ U2VycihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsK KysJCX0KKysKKysJaWYgKGN0YnVmKQorKwkJT1BFTlNTTF9mcmVlKGN0YnVmKTsKKysJaWYgKHB0 YnVmKQorKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJl ZShwayk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IHJz YV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5f R0VOQ0IgKmNiKTsKKyAKK0BAIC05MCw2ICsxNjYsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRp bl9rZXlnZW4oUlNBICpyc2EsIAorIAlpbnQgYml0c3AsYml0c3Esb2s9IC0xLG49MDsKKyAJQk5f Q1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUo KSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICAJeworKwkJICAg IEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOworKwkgICAgCXJldHVybiAwOworKwkgICAgCX0KKysKKysJCWlmIChiaXRzIDwgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJICAgIHsKKysJCSAgICBGSVBTZXJy KEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkJICAg IHJldHVybiAwOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXcoKTsK KyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAt MjAxLDYgKzI5NCwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwg CisgCQlwID0gcnNhLT5wOworIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEs cCxjdHgpKSBnb3RvIGVycjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21v ZGUoKSkKKysJCXsKKysJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93 b3JkKHJzYS0+biwgMSk7CisrCisrCQlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJCSAgICBn b3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJb2s9MTsKKyBlcnI6CisgCWlmIChvayA9PSAt MSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vcnNhL3JzYS5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9y c2EuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL3JzYS9yc2EuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTc0LDYgKzc0LDIxIEBACisgI2Vycm9yIFJTQSBpcyBkaXNhYmxlZC4KKyAjZW5k aWYKKyAKKysvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBSU0EgbWV0aG9kIGlzIEZJUFMgY29t cGxpYW50IGFuZCBjYW4gYmUgdXNlZAorKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4g dGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgorKyAqIGFwcGxpY2F0aW9uIHNldHMg dGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5CisrICog dG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgorKyAqLworKworKyNkZWZpbmUgUlNB X0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKKysKKysvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRo ZSBvcGVyYXRpb25zIG5vcm1hbGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKKysgKiBwZXJt aXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3Vy ZSB0aGF0IHRoZQorKyAqIHVzYWdlIGlzIGNvbXBsaWFudC4KKysgKi8KKysKKysjZGVmaW5lIFJT QV9GTEFHX05PTl9GSVBTX0FMTE9XCQkJMHgwNDAwCisrCisgI2lmZGVmICBfX2NwbHVzcGx1cwor IGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTE2NCw2ICsxNzksOCBAQCBzdHJ1Y3QgcnNhX3N0 CisgIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4NAorICNlbmRpZgor IAorKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAj aWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUworICMgZGVmaW5lIE9QRU5TU0xf UlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcyCisgI2VuZGlmCitAQCAtMjY3LDYgKzI4NCwxMSBA QCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCisgCisgLyogTmV3IHZl cnNpb24gKi8KKyBpbnQJUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJ R05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNh LCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNv bnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJ CQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEs CisrCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNC ICpjYik7CisgCisgaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOworIAkvKiBuZXh0IDQg cmV0dXJuIC0xIG9uIGVycm9yICovCitAQCAtNDM4LDggKzQ2MCwxMiBAQCB2b2lkIEVSUl9sb2Fk X1JTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYK KyAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3CisgI2RlZmluZSBSU0FfRl9S U0FfUFJJVl9FTkNPREUJCQkJIDEzOAorKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQ VAkJCSAxNDgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAxMzkKKysjZGVmaW5l IFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9TRVRV UF9CTElORElORwkJCSAxMzYKKysjZGVmaW5lIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJ CQkgMTUwCisrI2RlZmluZSBSU0FfRl9SU0FfU0VUX01FVEhPRAkJCQkgMTUxCisgI2RlZmluZSBS U0FfRl9SU0FfU0lHTgkJCQkJIDExNworICNkZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RF VF9TVFJJTkcJCSAxMTgKKyAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkJCQkJIDExOQorQEAgLTQ3 OSwxMCArNTA1LDEyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmlu ZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTIwCisgI2RlZmluZSBSU0FfUl9MQVNUX09D VEVUX0lOVkFMSUQJCQkgMTM0CisgI2RlZmluZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkg MTA1CisrI2RlZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDE0OQorICNkZWZpbmUgUlNB X1JfTk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0MAorICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVf QkxPQ0tfTUlTU0lORwkJCSAxMTMKKyAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9R CQkJIDEyNworICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKKysjZGVm aW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1MAorICNkZWZp bmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4Cisg I2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKKyAjZGVmaW5lIFJTQV9S X1BfTk9UX1BSSU1FCQkJCSAxMjgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2Ev cnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIwMDktMTItMDkgMTQ6Mzg6 MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfbGli LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MCw2ICs4MCwxMyBA QCBSU0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29u c3QgUlNBX01FVEhPRCAqbWV0aCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJ UFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7 CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNf TUVUSE9EKTsKKysJCXJldHVybjsKKysJCX0KKysjZW5kaWYKKyAJZGVmYXVsdF9SU0FfbWV0aCA9 IG1ldGg7CisgCX0KKyAKK0BAIC0xMTEsNiArMTE4LDEzIEBAIGludCBSU0Ffc2V0X21ldGhvZChS U0EgKnJzYSwgY29uc3QgUlNBX00KKyAJLyogTkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5 IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCisgCSAqIHRvIGRlYWwgd2l0 aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8KKyAJY29uc3QgUlNBX01FVEhPRCAqbXRt cDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZs YWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9T RVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuIDA7CisrCQl9Cisr I2VuZGlmCisgCW10bXAgPSByc2EtPm1ldGg7CisgCWlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZp bmlzaChyc2EpOworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK0BAIC0xNjMsNiArMTc3LDE4 IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCisgCQkJfQorIAkJfQorICNl bmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5t ZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0Ff Rl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysjaWZuZGVmIE9QRU5T U0xfTk9fRU5HSU5FCisrCQlpZiAocmV0LT5lbmdpbmUpCisrCQkJRU5HSU5FX2ZpbmlzaChyZXQt PmVuZ2luZSk7CisrI2VuZGlmCisrCQlPUEVOU1NMX2ZyZWUocmV0KTsKKysJCXJldHVybiBOVUxM OworKwkJfQorKyNlbmRpZgorIAorIAlyZXQtPnBhZD0wOworIAlyZXQtPnZlcnNpb249MDsKK0BA IC0yOTQsNiArMzIwLDEzIEBAIGludCBSU0FfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0 IHUKKyBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5n KQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisrCQl7CisrCQlSU0FlcnIoUlNBX0Zf UlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNf TU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAJcmV0dXJuKHJzYS0+bWV0aC0+ cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKKyAJfQorIAorQEAg LTMwNiw2ICszMzksMTMgQEAgaW50IFJTQV9wcml2YXRlX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0 IAorIGludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAorIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykK KyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZs YWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JT QV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9E RSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAJcmV0dXJuKHJzYS0+bWV0aC0+cnNh X3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOworIAl9CisgCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vcnNhL3JzYV9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3Jz YV9zaWduLmMuZmlwcwkyMDA3LTA0LTI0IDAzOjA1OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorQEAgLTEzMCw3ICsxMzAsOCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUs IGNvbnN0IHVuc2lnbmVkIGNoCisgCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7CisgCQlzPXRtcHM7 CisgCX0KKy0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9Q QURESU5HKTsKKysJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZv aWQgRklQUyBibG9ja2luZyAqLworKwlpID0gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2Et Pm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAw OworIAlpZiAoaSA8PSAwKQorIAkJcmV0PTA7CisgCWVsc2UKK0BAIC0xNjEsOCArMTYyLDggQEAg aW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQorIAorIAlpZigoZHR5cGUg PT0gTklEX21kNV9zaGExKSAmJiBybSkKKyAJCXsKKy0JCWkgPSBSU0FfcHVibGljX2RlY3J5cHQo KGludClzaWdsZW4sCistCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJ CWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50 KXNpZ2xlbiwKKysJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAJ CWlmIChpIDw9IDApCisgCQkJcmV0dXJuIDA7CisgCQkqcHJtX2xlbiA9IGk7CitAQCAtMTc5LDcg KzE4MCw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKKyAJCQlS U0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7 CisgCQkJZ290byBlcnI7CisgCX0KKy0JaT1SU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4s c2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyogTkI6IGNhbGwgdW5kZXJseWlu ZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLworKwlpID0gcnNhLT5t ZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2ln YnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCisgCWlmIChpIDw9IDApIGdvdG8g ZXJyOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NlZWQvc2VlZC5jLmZpcHMg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NlZWQvc2VlZC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3NlZWQvc2VlZC5jLmZpcHMJMjAwOC0xMi0xNiAwODo0MToyMS4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2VlZC9zZWVkLmMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNCw2ICszNCw5IEBACisgCisgI2luY2x1ZGUgPG9wZW5z c2wvc2VlZC5oPgorICNpbmNsdWRlICJzZWVkX2xvY2wuaCIKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBjb25zdCBz ZWVkX3dvcmQgU1NbNF1bMjU2XSA9IHsJeworIAkweDI5ODlhMWE4LCAweDA1ODU4MTg0LCAweDE2 YzZkMmQ0LCAweDEzYzNkM2QwLCAweDE0NDQ1MDU0LCAweDFkMGQxMTFjLCAweDJjOGNhMGFjLCAw eDI1MDUyMTI0LAorQEAgLTE5Myw3ICsxOTYsMTggQEAgc3RhdGljIGNvbnN0IHNlZWRfd29yZCBL Q1tdID0geworIAlLQzgsCUtDOSwJS0MxMCwJS0MxMSwJS0MxMiwJS0MxMywJS0MxNCwJS0MxNQl9 OworICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyB2b2lkIFNFRURfc2V0X2tleShj b25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hF RFVMRSAqa3MpCisrICAgICAgICB7CisrICAgICAgICBpZiAoRklQU19tb2RlKCkpCisrICAgICAg ICAgICAgICAgIEZJUFNfQkFEX0FCT1JUKFNFRUQpCisrICAgICAgICBwcml2YXRlX1NFRURfc2V0 X2tleShyYXdrZXksIGtzKTsKKysgICAgICAgIH0KKysKKyt2b2lkIHByaXZhdGVfU0VFRF9zZXRf a2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZ X1NDSEVEVUxFICprcykKKysjZWxzZQorK3ZvaWQgU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVk IGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcykKKysj ZW5kaWYKKyB7CisgCXNlZWRfd29yZCB4MSwgeDIsIHgzLCB4NDsKKyAJc2VlZF93b3JkIHQwLCB0 MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zZWVkL3NlZWQuaC5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9zZWVkL3NlZWQuaAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9z ZWVkL3NlZWQuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTQuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NlZWQvc2VlZC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCitAQCAtMTE3LDYgKzExNyw5IEBAIHR5cGVkZWYgc3RydWN0IHNlZWRfa2V5 X3N0IHsKKyB9IFNFRURfS0VZX1NDSEVEVUxFOworIAorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK Kyt2b2lkIHByaXZhdGVfU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NF RURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcyk7CisrI2VuZGlmCisgdm9pZCBT RUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwg U0VFRF9LRVlfU0NIRURVTEUgKmtzKTsKKyAKKyB2b2lkIFNFRURfZW5jcnlwdChjb25zdCB1bnNp Z25lZCBjaGFyIHNbU0VFRF9CTE9DS19TSVpFXSwgdW5zaWduZWQgY2hhciBkW1NFRURfQkxPQ0tf U0laRV0sIGNvbnN0IFNFRURfS0VZX1NDSEVEVUxFICprcyk7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hh L3NoYV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMuZmlw cwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9zaGEvc2hhX2Rnc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIw MAorQEAgLTU3LDYgKzU3LDEyIEBACisgICovCisgCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTApICYmICFkZWZpbmVk KE9QRU5TU0xfTk9fU0hBKQorIAorICN1bmRlZiAgU0hBXzEKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9zaGEvc2hhLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYS5o CistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGEu aAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTEwNiw2ICsxMDYsOSBA QCB0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAorIAl9IFNIQV9DVFg7CisgCisgI2lmbmRlZiBP UEVOU1NMX05PX1NIQTAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfU0hBX0lu aXQoU0hBX0NUWCAqYyk7CisrI2VuZGlmCisgaW50IFNIQV9Jbml0KFNIQV9DVFggKmMpOworIGlu dCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwor IGludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3NoYS9zaGFfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGFf bG9jbC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAw MDAwMDAgKzAyMDAKK0BAIC0xMjIsOCArMTIyLDE1IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRhX29y ZGVyIChTSEFfQ1RYICpjLCAKKyAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1NDc2VUwKKyAj ZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKKyAKKysjaWYgZGVmaW5lZChTSEFfMCkg JiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrRklQU19OT05fRklQU19NRF9Jbml0KFNIQSkKKysj ZWxzZQorIGludCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCisrI2VuZGlmCisgCXsKKysjaWYgZGVm aW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmgwPUlOSVRf REFUQV9oMDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGEx ZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMJMjAw Ny0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vc2hhL3NoYTFkZ3N0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BA IC02Myw2ICs2MywxMCBAQAorICNkZWZpbmUgU0hBXzEKKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3Nsdi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBTSEExX3ZlcnNpb25bXT0iU0hBMSIgT1BF TlNTTF9WRVJTSU9OX1BURVhUOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3No YS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhMjU2LmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzox NC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYTI1Ni5j CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTIsMTIgKzEyLDE5IEBA CisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvc2hh Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorIAorIGNvbnN0IGNoYXIg U0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorIGlu dCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2Yo KmMpKTsKKyAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOworIAlj LT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7CitAQCAtMjksNiArMzYs OSBAQCBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCisgCisgaW50IFNIQTI1Nl9Jbml0 IChTSEEyNTZfQ1RYICpjKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5o WzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1VUw7CisgCWMtPmhbMl09MHgzYzZl ZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYTUxMi5j CistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzCTIwMDktMTItMzAg MTI6NTM6MzMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9z aGE1MTIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSwx MCBAQAorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisgICovCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorKworICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BF TlNTTF9OT19TSEE1MTIpCisgLyoKKyAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KK0BAIC02MSw2 ICs2NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKKyAKKyBp bnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAjaWYgZGVmaW5lZChTSEE1MTJf QVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKKyAJLyogbWFpbnRh aW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLworIAl1bnNpZ25l ZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKK0BAIC05MCw2ICs5Nyw5IEBAIGludCBT SEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKKyAKKyBpbnQgU0hBNTEyX0luaXQgKFNIQTUxMl9D VFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKKysjZW5kaWYKKyAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9f KSB8fCBkZWZpbmVkKF9fYXJtKSkKKyAJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQg YnkgYXNzZW1ibGVyIG1vZHVsZSAqLworIAl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50 ICopYy0+aDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by93aHJscG9vbC93aHJscG9v bC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3docmxwb29sL3docmxwb29sLmgKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vd2hybHBvb2wvd2hybHBvb2wuaC5maXBzCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3docmxw b29sL3docmxwb29sLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0y NCw2ICsyNCw5IEBAIHR5cGVkZWYgc3RydWN0CXsKKyAJfSBXSElSTFBPT0xfQ1RYOworIAorICNp Zm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHBy aXZhdGVfV0hJUkxQT09MX0luaXQoV0hJUkxQT09MX0NUWCAqYyk7CisrI2VuZGlmCisgaW50IFdI SVJMUE9PTF9Jbml0CShXSElSTFBPT0xfQ1RYICpjKTsKKyBpbnQgV0hJUkxQT09MX1VwZGF0ZQko V0hJUkxQT09MX0NUWCAqYyxjb25zdCB2b2lkICppbnAsc2l6ZV90IGJ5dGVzKTsKKyB2b2lkIFdI SVJMUE9PTF9CaXRVcGRhdGUoV0hJUkxQT09MX0NUWCAqYyxjb25zdCB2b2lkICppbnAsc2l6ZV90 IGJpdHMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3docmxwb29sL3dwX2Rnc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAwOC0xMi0yOSAxMzoz NTo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vd2hybHBvb2wv d3BfZGdzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsOCAr NTMsMTIgQEAKKyAKKyAjaW5jbHVkZSAid3BfbG9jbC5oIgorICNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorLWludCBXSElSTFBPT0xfSW5pdAkoV0hJ UkxQT09MX0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoV0hJUkxQT09MKQorIAl7Cisg CW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAlyZXR1cm4oMSk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wYS9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4wYS9NYWtlZmlsZS5vcmcKKy0t LSBvcGVuc3NsLTEuMC4wYS9NYWtlZmlsZS5vcmcuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL01ha2VmaWxlLm9yZwkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTExMCw2ICsxMTAsOSBAQCBMSUJLUkI1PQor IFpMSUJfSU5DTFVERT0KKyBMSUJaTElCPQorIAorKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxl ZAorK0ZJUFM9CisrCisgRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xz CisgRU5HRElSUz0gY2Nnb3N0CisgU0hMSUJESVJTPSBjcnlwdG8gc3NsCitAQCAtMTIyLDcgKzEy NSw3IEBAIFNESVJTPSAgXAorIAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2lu ZSBcCisgCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAorIAlldnAgYXNuMSBwZW0g eDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwK Ky0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9yZQorKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3Jl IGZpcHMKKyAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5 IC4vQ29uZmlndXJlCisgIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgorIAorQEAg LTIwNiw2ICsyMDksNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNT CisgCQlSTUQxNjBfQVNNX09CSj0nJChSTUQxNjBfQVNNX09CSiknCQlcCisgCQlXUF9BU01fT0JK PSckKFdQX0FTTV9PQkopJwkJCVwKKyAJCVBFUkxBU01fU0NIRU1FPSckKFBFUkxBU01fU0NIRU1F KScJCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElTPSQke1RISVM6LSRA fSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZm ZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAor ICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0 bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9jaXBoLmMuZmlw cyBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsX2NpcGguYworLS0tIG9wZW5zc2wtMS4wLjBhL3NzbC9z c2xfY2lwaC5jLmZpcHMJMjAwOS0wOS0xMyAwMToxODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4wYS9zc2wvc3NsX2NpcGguYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAw MCArMDIwMAorQEAgLTcyNyw2ICs3MjcsOSBAQCBzdGF0aWMgdm9pZCBzc2xfY2lwaGVyX2NvbGxl Y3RfY2lwaGVycyhjCisgCQkgICAgIShjLT5hbGdvcml0aG1fYXV0aCAmIGRpc2FibGVkX2F1dGgp ICYmCisgCQkgICAgIShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJsZWRfZW5jKSAmJgorIAkJICAg ICEoYy0+YWxnb3JpdGhtX21hYyAmIGRpc2FibGVkX21hYykgJiYKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCQkJKCFGSVBTX21vZGUoKSB8fCAoYy0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkg JiYKKysjZW5kaWYKKyAJCSAgICAhKGMtPmFsZ29yaXRobV9zc2wgJiBkaXNhYmxlZF9zc2wpKQor IAkJCXsKKyAJCQljb19saXN0W2NvX2xpc3RfbnVtXS5jaXBoZXIgPSBjOworQEAgLTE0MjMsNyAr MTQyNiwxMSBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJfCisgCSAq LworIAlmb3IgKGN1cnIgPSBoZWFkOyBjdXJyICE9IE5VTEw7IGN1cnIgPSBjdXJyLT5uZXh0KQor IAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChjdXJyLT5hY3RpdmUgJiYgKCFGSVBT X21vZGUoKSB8fCBjdXJyLT5jaXBoZXItPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpCisrI2Vs c2UKKyAJCWlmIChjdXJyLT5hY3RpdmUpCisrI2VuZGlmCisgCQkJeworIAkJCXNrX1NTTF9DSVBI RVJfcHVzaChjaXBoZXJzdGFjaywgY3Vyci0+Y2lwaGVyKTsKKyAjaWZkZWYgQ0lQSEVSX0RFQlVH CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAu MGEvc3NsL3NzbF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2xfbGliLmMuZmlwcwky MDEwLTAyLTE3IDIwOjQzOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL3Nz bC9zc2xfbGliLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTIx LDYgKzE1MjEsMTQgQEAgU1NMX0NUWCAqU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbQor IAkJcmV0dXJuKE5VTEwpOworIAkJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJ UFNfbW9kZSgpICYmIChtZXRoLT52ZXJzaW9uIDwgVExTMV9WRVJTSU9OKSkJCisrCQl7CisrCQlT U0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19N T0RFKTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorKworIAlpZiAoU1NMX2dldF9l eF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpIDwgMCkKKyAJCXsKKyAJCVNTTGVycihTU0xfRl9T U0xfQ1RYX05FVyxTU0xfUl9YNTA5X1ZFUklGSUNBVElPTl9TRVRVUF9QUk9CTEVNUyk7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvc3Ns L3NzbHRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2x0ZXN0LmMuZmlwcwkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2x0 ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNjgsNiArMjY4 LDkgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKKyAJeworIAlmcHJpbnRmKHN0ZGVyciwi dXNhZ2U6IHNzbHRlc3QgW2FyZ3MgLi4uXVxuIik7CisgCWZwcmludGYoc3RkZXJyLCJcbiIpOwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJZnByaW50ZihzdGRlcnIsIi1GICAgICAgICAgICAgIC0g cnVuIHRlc3QgaW4gRklQUyBtb2RlXG4iKTsKKysjZW5kaWYKKyAJZnByaW50ZihzdGRlcnIsIiAt c2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVyIGNlcnRpZmljYXRlXG4iKTsKKyAJZnByaW50Zihz dGRlcnIsIiAtY2xpZW50X2F1dGggIC0gZG8gY2xpZW50IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAJ ZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAgICAgIC0gYWxsb3cgcHJveHkgY2VydGlmaWNhdGVz XG4iKTsKK0BAIC00ODcsNiArNDkwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKKyAjZW5kaWYKKyAJU1RBQ0tfT0YoU1NMX0NPTVApICpzc2xfY29tcF9tZXRob2RzID0gTlVM TDsKKyAJaW50IHRlc3RfY2lwaGVybGlzdCA9IDA7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp bnQgZmlwc19tb2RlPTA7CisrI2VuZGlmCisgCisgCXZlcmJvc2UgPSAwOworIAlkZWJ1ZyA9IDA7 CitAQCAtNTE4LDcgKzUyNCwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQor IAorIAl3aGlsZSAoYXJnYyA+PSAxKQorIAkJeworLQkJaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZl cl9hdXRoIikgPT0gMCkKKysJCWlmKCFzdHJjbXAoKmFyZ3YsIi1GIikpCisrCQkJeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJCQlmaXBzX21vZGU9MTsKKysjZWxzZQorKwkJCWZwcmludGYoc3Rk ZXJyLCJub3QgY29tcGlsZWQgd2l0aCBGSVBTIHN1cHBvcnQsIHNvIGV4aXR0aW5nIHdpdGhvdXQg cnVubmluZy5cbiIpOworKwkJCUVYSVQoMCk7CisrI2VuZGlmCisrCQkJfQorKwkJZWxzZSBpZgko c3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQorIAkJCXNlcnZlcl9hdXRoPTE7Cisg CQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jbGllbnRfYXV0aCIpID09IDApCisgCQkJY2xpZW50 X2F1dGg9MTsKK0BAIC03MTQsNiArNzI5LDIwIEBAIGJhZDoKKyAJCUVYSVQoMSk7CisgCQl9Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihmaXBzX21vZGUpCisrCQl7CisrCQlpZighRklQ U19tb2RlX3NldCgxKSkKKysJCQl7CisrCQkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKKysJ CQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdfZnAoc3RkZXJyLEJJT19OT0NMT1NFKSk7CisrCQkJ RVhJVCgxKTsKKysJCQl9CisrCQllbHNlCisrCQkJZnByaW50ZihzdGRlcnIsIioqKiBJTiBGSVBT IE1PREUgKioqXG4iKTsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKHByaW50X3RpbWUpCisgCQl7 CisgCQlpZiAoIWJpb19wYWlyKQorQEAgLTIxNTYsMTIgKzIxODUsMTIgQEAgc3RhdGljIGludCBN U19DQUxMQkFDSyBhcHBfdmVyaWZ5X2NhbGxiYQorIAkJfQorIAorICNpZm5kZWYgT1BFTlNTTF9O T19YNTA5X1ZFUklGWQorLSMgaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpZiAwCisgCWlmKHMtPnZl cnNpb24gPT0gVExTMV9WRVJTSU9OKQorIAkJRklQU19hbGxvd19tZDUoMSk7CisgIyBlbmRpZgor IAlvayA9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4KTsKKy0jIGlmZGVmIE9QRU5TU0xfRklQUworKyMg aWYgMAorIAlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKKyAJCUZJUFNfYWxsb3dfbWQ1 KDApOworICMgZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL3NzbC9zMjNfY2xudC5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvc3NsL3MyM19jbG50LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9zc2wv czIzX2NsbnQuYy5maXBzCTIwMTAtMDItMTYgMTU6MjA6NDAuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMGEvc3NsL3MyM19jbG50LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAw MDAgKzAyMDAKK0BAIC0zMzQsNiArMzM0LDE0IEBAIHN0YXRpYyBpbnQgc3NsMjNfY2xpZW50X2hl bGxvKFNTTCAqcykKKyAJCQl2ZXJzaW9uX21ham9yID0gVExTMV9WRVJTSU9OX01BSk9SOworIAkJ CXZlcnNpb25fbWlub3IgPSBUTFMxX1ZFUlNJT05fTUlOT1I7CisgCQkJfQorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJCWVsc2UgaWYoRklQU19tb2RlKCkpCisrCQkJeworKwkJCVNTTGVycihTU0xf Rl9TU0wyM19DTElFTlRfSEVMTE8sCisrCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJ UFNfTU9ERSk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysjZW5kaWYKKyAJCWVsc2UgaWYgKHZl cnNpb24gPT0gU1NMM19WRVJTSU9OKQorIAkJCXsKKyAJCQl2ZXJzaW9uX21ham9yID0gU1NMM19W RVJTSU9OX01BSk9SOworQEAgLTYxNyw2ICs2MjUsMTQgQEAgc3RhdGljIGludCBzc2wyM19nZXRf c2VydmVyX2hlbGxvKFNTTCAqcworIAkJaWYgKChwWzJdID09IFNTTDNfVkVSU0lPTl9NSU5PUikg JiYKKyAJCQkhKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU1NMdjMpKQorIAkJCXsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCQkJaWYoRklQU19tb2RlKCkpCisrCQkJCXsKKysJCQkJU1NMZXJyKFNT TF9GX1NTTDIzX0dFVF9TRVJWRVJfSEVMTE8sCisrCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VE X0lOX0ZJUFNfTU9ERSk7CisrCQkJCWdvdG8gZXJyOworKwkJCQl9CisrI2VuZGlmCisgCQkJcy0+ dmVyc2lvbj1TU0wzX1ZFUlNJT047CisgCQkJcy0+bWV0aG9kPVNTTHYzX2NsaWVudF9tZXRob2Qo KTsKKyAJCQl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9zc2wvczIzX3NydnIuYy5maXBzIG9w ZW5zc2wtMS4wLjBhL3NzbC9zMjNfc3J2ci5jCistLS0gb3BlbnNzbC0xLjAuMGEvc3NsL3MyM19z cnZyLmMuZmlwcwkyMDEwLTAyLTE2IDE1OjIwOjQwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjBhL3NzbC9zMjNfc3J2ci5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCitAQCAtMzkzLDYgKzM5MywxNSBAQCBpbnQgc3NsMjNfZ2V0X2NsaWVudF9oZWxsbyhTU0wg KnMpCisgCQkJfQorIAkJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9k ZSgpICYmIChzLT52ZXJzaW9uIDwgVExTMV9WRVJTSU9OKSkKKysJCXsKKysJCVNTTGVycihTU0xf Rl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLAorKwkJCQkJU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9J Tl9GSVBTX01PREUpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChzLT5z dGF0ZSA9PSBTU0wyM19TVF9TUl9DTE5UX0hFTExPX0IpCisgCQl7CisgCQkvKiB3ZSBoYXZlIFNT THYzL1RMU3YxIGluIGFuIFNTTHYyIGhlYWRlcgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3Ns L3MzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19jbG50LmMKKy0tLSBvcGVuc3Ns LTEuMC4wYS9zc2wvczNfY2xudC5jLmZpcHMJMjAxMC0wMi0yOCAwMToyNDoyNC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9zc2wvczNfY2xudC5jCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTU2LDYgKzE1NiwxMCBAQAorICNpbmNsdWRlIDxvcGVu c3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9tZDUuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKworICNpZm5kZWYgT1BFTlNTTF9OT19ESAorICNpbmNsdWRlIDxvcGVu c3NsL2RoLmg+CisgI2VuZGlmCitAQCAtMTU0Niw2ICsxNTUwLDggQEAgaW50IHNzbDNfZ2V0X2tl eV9leGNoYW5nZShTU0wgKnMpCisgCQkJcT1tZF9idWY7CisgCQkJZm9yIChudW09MjsgbnVtID4g MDsgbnVtLS0pCisgCQkJCXsKKysJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKKysJ CQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCQkJCUVWUF9EaWdlc3RJbml0 X2V4KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwg TlVMTCk7CisgCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFu ZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL3NzbC9z M19lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19lbmMuYworLS0tIG9wZW5zc2wtMS4w LjBhL3NzbC9zM19lbmMuYy5maXBzCTIwMDktMDQtMTYgMTk6MjI6NTAuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMGEvc3NsL3MzX2VuYy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCitAQCAtMTcwLDYgKzE3MCw3IEBAIHN0YXRpYyBpbnQgc3NsM19nZW5lcmF0 ZV9rZXlfYmxvY2soU1NMICoKKyAjZW5kaWYKKyAJaz0wOworIAlFVlBfTURfQ1RYX2luaXQoJm01 KTsKKysJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm01LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpOworIAlFVlBfTURfQ1RYX2luaXQoJnMxKTsKKyAJZm9yIChpPTA7IChpbnQpaTxudW07 IGkrPU1ENV9ESUdFU1RfTEVOR1RIKQorIAkJeworQEAgLTYxNCw2ICs2MTUsOCBAQCBpbnQgc3Ns M19kaWdlc3RfY2FjaGVkX3JlY29yZHMoU1NMICpzKQorIAkJaWYgKChtYXNrICYgcy0+czMtPnRt cC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yKSAmJiBtZCkgCisgCQkJeworIAkJCXMtPnMzLT5oYW5k c2hha2VfZGdzdFtpXT1FVlBfTURfQ1RYX2NyZWF0ZSgpOworKwkJCUVWUF9NRF9DVFhfc2V0X2Zs YWdzKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSwKKysJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9G SVBTX0FMTE9XKTsKKyAJCQlFVlBfRGlnZXN0SW5pdF9leChzLT5zMy0+aGFuZHNoYWtlX2Rnc3Rb aV0sbWQsTlVMTCk7CisgCQkJRVZQX0RpZ2VzdFVwZGF0ZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3Rb aV0saGRhdGEsaGRhdGFsZW4pOworIAkJCX0gCitAQCAtNjcwLDYgKzY3Myw3IEBAIHN0YXRpYyBp bnQgc3NsM19oYW5kc2hha2VfbWFjKFNTTCAqcywgaW4KKyAJCXJldHVybiAwOworIAl9CQorIAlF VlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9N RF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LGQp OworIAluPUVWUF9NRF9DVFhfc2l6ZSgmY3R4KTsKKyAJaWYgKG4gPCAwKQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvc3NsL3MzX3NydnIuYy5maXBzIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19zcnZy LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvczNfc3J2ci5jLmZpcHMJMjAxMC0wMi0yOCAwMDow NDoxMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9zc2wvczNfc3J2ci5jCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTc1Miw2ICsxNzUyLDggQEAg aW50IHNzbDNfc2VuZF9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKFNTTCAqcworIAkJCQlqPTA7CisgCQkJ CWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQorIAkJCQkJeworKwkJCQkJRVZQX01EX0NUWF9z ZXRfZmxhZ3MoJm1kX2N0eCwKKysJCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp OworIAkJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIpCisgCQkJCQkJP3Mt PmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7CisgCQkJCQlFVlBfRGlnZXN0VXBkYXRlKCZt ZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9zc2wvdDFfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9zc2wv dDFfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvdDFfZW5jLmMuZmlwcwkyMDEwLTA1LTE3 IDEzOjI2OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL3NzbC90MV9lbmMu YwkyMDEwLTA2LTA0IDEzOjI4OjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MCw2ICsxNzAsOCBA QCBzdGF0aWMgaW50IHRsczFfUF9oYXNoKGNvbnN0IEVWUF9NRCAqbWQsCisgCisgCUhNQUNfQ1RY X2luaXQoJmN0eCk7CisgCUhNQUNfQ1RYX2luaXQoJmN0eF90bXApOworKwlITUFDX0NUWF9zZXRf ZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJSE1BQ19DVFhf c2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAlp ZiAoIUhNQUNfSW5pdF9leCgmY3R4LHNlYyxzZWNfbGVuLG1kLCBOVUxMKSkKKyAJCWdvdG8gZXJy OworIAlpZiAoIUhNQUNfSW5pdF9leCgmY3R4X3RtcCxzZWMsc2VjX2xlbixtZCwgTlVMTCkpCgpk aWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMGEtZmlwc21vZGUucGF0Y2ggYi9vcGVuc3NsLTEuMC4w YS1maXBzbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJl NzRlCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMGEtZmlwc21vZGUucGF0Y2gKQEAg LTAsMCArMSwyNzIgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9lbmdpbmUvZW5n X2FsbC5jLmZpcHNtb2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwc21vZGUJMjAwOS0w Ny0wMSAxNjo1NTo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v ZW5naW5lL2VuZ19hbGwuYwkyMDEwLTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAorQEAg LTU4LDkgKzU4LDIzIEBACisgCisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgImVu Z19pbnQuaCIKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorIAorIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCisg CXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlm IChGSVBTX21vZGUoKSkgeworKwkJLyogV2UgYWxsb3cgbG9hZGluZyBkeW5hbWljIGVuZ2luZSBh cyBhIHRoaXJkIHBhcnR5CisrCQkgICBlbmdpbmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQuCisr CQkgICBVc2VyIGlzIGRpc2FsbG93ZWQgdG8gbG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMKKysJ CSAgIGJ5IHNlY3VyaXR5IHBvbGljeS4gKi8KKysJCUVOR0lORV9sb2FkX2R5bmFtaWMoKTsKKysJ CXJldHVybjsKKysJfQorKyNlbmRpZgorICNpZiAwCisgCS8qIFRoZXJlJ3Mgbm8gbG9uZ2VyIGFu eSBuZWVkIGZvciBhbiAib3BlbnNzbCIgRU5HSU5FIHVubGVzcywgb25lIGRheSwKKyAJICogaXQg aXMgdGhlICpvbmx5KiB3YXkgZm9yIHN0YW5kYXJkIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25zIHRv IGJlIGJlCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHNt b2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19hbGxjLmMKKy0tLSBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHNtb2RlCTIwMDktMTItMjUgMTU6MTI6MjQuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDEwLTA2 LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTY1LDYgKzY1LDExIEBACisgdm9pZCBP cGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZighRklQU19tb2RlKCkpIAorKwkJewor KyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rl c19jZmIoKSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKK0BAIC0yMjEsNCAr MjI2LDYxIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9j aXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiQ0FNRUxMSUEyNTYiKTsKKyAJRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKKyAjZW5k aWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVmIE9Q RU5TU0xfTk9fREVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQ X2Rlc19lZGVfb2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOwor KworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfZWRlM19jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUz X2NiYywiREVTMyIpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRl czMiKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7CisrCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfZWRlMygpKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVT CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2VjYigpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjEoKSk7CisrCUVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTI4X2NmYjgoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigp KTsKKysjaWYgMAorKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7CisrI2VuZGlm CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKKysJRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsImFlczEyOCIpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Ni YygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9j ZmI4KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9vZmIoKSk7CisrI2lmIDAKKysJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOworKyNlbmRpZgorKwlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiQUVTMTkyIik7CisrCUVWUF9hZGRfY2lwaGVyX2Fs aWFzKFNOX2Flc18xOTJfY2JjLCJhZXMxOTIiKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfZWNiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY2ZiMSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOworKyNpZiAwCisrCUVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMjU2X2N0cigpKTsKKysjZW5kaWYKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05f YWVzXzI1Nl9jYmMsIkFFUzI1NiIpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2 X2NiYywiYWVzMjU2Iik7CisrI2VuZGlmCisrCQl9CisrI2VuZGlmCisgCX0KK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwc21vZGUgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2V2cC9jX2FsbGQuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19hbGxk LmMuZmlwc21vZGUJMjAwOS0wNy0wOCAxMDo1MDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL2NfYWxsZC5jCTIwMTAtMDYtMDQgMTM6MzI6MTMuMDAwMDAw MDAwICswMjAwCitAQCAtNjQsNiArNjQsMTEgQEAKKyAKKyB2b2lkIE9wZW5TU0xfYWRkX2FsbF9k aWdlc3RzKHZvaWQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9s aWJyYXJ5KCk7CisrCWlmICghRklQU19tb2RlKCkpCisrCQl7CisrI2VuZGlmCisgI2lmbmRlZiBP UEVOU1NMX05PX01ENAorIAlFVlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOworICNlbmRpZgorQEAg LTExMSw0ICsxMTYsMzIgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorICNp Zm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX3doaXJscG9v bCgpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9CisrCWVsc2UKKysJCXsK KysjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB MSkKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX3NoYTEsInNzbDMtc2hhMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0 aFJTQUVuY3J5cHRpb24sU05fc2hhMVdpdGhSU0EpOworKyNpZm5kZWYgT1BFTlNTTF9OT19EU0EK KysJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhT Tl9kc2FXaXRoU0hBMSwiRFNTMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRo U0hBMSwiZHNzMSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKwlFVlBf YWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7CisrI2VuZGlmCisrI2VuZGlmCisrI2lmbmRlZiBPUEVO U1NMX05PX1NIQTI1NgorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRk X2RpZ2VzdChFVlBfc2hhMjU2KCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1 MTIKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQ X3NoYTUxMigpKTsKKysjZW5kaWYKKysJCX0KKysjZW5kaWYKKyAJfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL29faW5pdC5jLmZpcHNtb2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9v X2luaXQuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vX2luaXQuYy5maXBzbW9kZQkyMDEw LTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9vX2luaXQuYwkyMDEwLTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYg KzU5LDQzIEBACisgI2luY2x1ZGUgPGVfb3MuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDx1bmlzdGQu aD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKworKyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJv Yy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCIKKysKKytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9k ZSh2b2lkKQorKwl7CisrCWNoYXIgYnVmWzJdID0gIjAiOworKwlpbnQgZmQ7CisrCQorKwlpZiAo Z2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCisrCQl7CisrCQlidWZb MF0gPSAnMSc7CisrCQl9CisrCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9G SUxFLCBPX1JET05MWSkpID49IDApCisrCQl7CisrCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXpl b2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKysJCWNsb3NlKGZkKTsKKysJCX0KKysJ LyogRmFpbHVyZSByZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBu b3QKKysJICogc3dpdGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFu eSB0aGluZ3MKKysJICogb3RoZXJ3aXNlLiAKKysJICovCisrCQorKwlpZiAoYnVmWzBdID09ICcx JykKKysJCXsKKysJCUZJUFNfbW9kZV9zZXQoMSk7CisrCQl9CisrCX0KKysjZW5kaWYKKysKKyAv KiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25z LgorICAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKKyAgKi8KK0BAIC03Miw2 ICsxMDksNyBAQCB2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCisgI2lmZGVmIENSWVBU T19NREVCVUcKKyAJCUNSWVBUT19tYWxsb2NfZGVidWdfaW5pdCgpOworICNlbmRpZgorKwkJaW5p dF9maXBzX21vZGUoKTsKKyAJCWRvbmUgPSAxOworIAkJfQorICNlbmRpZgorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvc3NsL3NzbF9hbGdzLmMuZmlwc21vZGUgb3BlbnNzbC0xLjAuMGEvc3NsL3Nz bF9hbGdzLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsX2FsZ3MuYy5maXBzbW9kZQkyMDEw LTA0LTA3IDE1OjE4OjMwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9z c2xfYWxncy5jCTIwMTAtMDYtMDQgMTM6MzI6NDguMDAwMDAwMDAwICswMjAwCitAQCAtNjQsNiAr NjQsMTIgQEAKKyBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQorIAl7CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAoIUZJUFNfbW9kZSgp KQorKwkJeworKyNlbmRpZgorKworICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19jYmMoKSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMo KSk7CitAQCAtMTI3LDYgKzEzMyw0OCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQorIAlF VlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOworIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwor ICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCX0KKysJZWxzZQorKwkJeworKyNpZm5k ZWYgT1BFTlNTTF9OT19ERVMKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsK KysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVO U1NMX05PX01ENQorKwkvKiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFD ICovCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX21kNSwic3NsMi1tZDUiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wz LW1kNSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKysJRVZQX2FkZF9kaWdl c3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KKysJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fc2hhMSwic3NsMy1zaGExIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFX aXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVO U1NMX05PX1NIQTI1NgorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRk X2RpZ2VzdChFVlBfc2hhMjU2KCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1 MTIKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQ X3NoYTUxMigpKTsKKysjZW5kaWYKKysjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFk ZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyog RFNBIHdpdGggc2hhMSAqLworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxT Tl9kc2FXaXRoU0hBMV8yKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEs IkRTUzEiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsK KysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQ X2VjZHNhKCkpOworKyNlbmRpZgorKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19D T01QCisgCS8qIFRoaXMgd2lsbCBpbml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBh bGdvcml0aG1zLgorIAkgICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgYSBTVEFDS19PRihTU0xfQ09N UCksIGJ1dCB0aGF0IGNhbgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjBhLXZlcnNpb24ucGF0 Y2ggYi9vcGVuc3NsLTEuMC4wYS12ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjc1YTAyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4wYS12 ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9vcGVuc3Nsdi5oLnZlcnNpb24gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29wZW5zc2x2LmgK Ky0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vb3BlbnNzbHYuaC52ZXJzaW9uCTIwMTAtMDYtMDQg MTM6Mjg6NTIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29wZW5z c2x2LmgJMjAxMC0wNi0wNCAxMzoyOTo0Mi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw4 IEBACisgICogKFByaW9yIHRvIDAuOS41YSBiZXRhMSwgYSBkaWZmZXJlbnQgc2NoZW1lIHdhcyB1 c2VkOiBNTU5ORkZSQkIgZm9yCisgICogIG1ham9yIG1pbm9yIGZpeCBmaW5hbCBwYXRjaC9iZXRh KQorICAqLworLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDFmTAorKy8q IHdlIGhhdmUgdG8ga2VlcCB0aGUgdmVyc2lvbiBudW1iZXIgdG8gbm90IGJyZWFrIHRoZSBhYmkg Ki8KKysjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDAwM0wKKyAjaWZkZWYg T1BFTlNTTF9GSVBTCisgI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAu MGEtZmlwcyAxIEp1biAyMDEwIgorICNlbHNlCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC5zcGVjIGIv b3BlbnNzbC5zcGVjCmluZGV4IDdlYjg1ZTguLjBjN2I4ODggMTAwNjQ0Ci0tLSBhL29wZW5zc2wu c3BlYworKysgYi9vcGVuc3NsLnNwZWMKQEAgLTIwLDggKzIwLDggQEAKIAogU3VtbWFyeTogQSBn ZW5lcmFsIHB1cnBvc2UgY3J5cHRvZ3JhcGh5IGxpYnJhcnkgd2l0aCBUTFMgaW1wbGVtZW50YXRp b24KIE5hbWU6IG9wZW5zc2wKLVZlcnNpb246IDEuMC4wCi1SZWxlYXNlOiA0JXs/ZGlzdH0KK1Zl cnNpb246IDEuMC4wYQorUmVsZWFzZTogMSV7P2Rpc3R9CiAjIFdlIHJlbW92ZSBjZXJ0YWluIHBh dGVudGVkIGFsZ29yaXRobXMgZnJvbSB0aGUgb3BlbnNzbCBzb3VyY2UgdGFyYmFsbAogIyB3aXRo IHRoZSBob2JibGUtb3BlbnNzbCBzY3JpcHQgd2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cuCiBTb3Vy Y2U6IG9wZW5zc2wtJXt2ZXJzaW9ufS11c2EudGFyLmJ6MgpAQCAtNTAsMjAgKzUwLDE4IEBAIFBh dGNoMzQ6IG9wZW5zc2wtMC45LjYteDUwOS5wYXRjaAogUGF0Y2gzNTogb3BlbnNzbC0wLjkuOGot dmVyc2lvbi1hZGQtZW5naW5lcy5wYXRjaAogUGF0Y2gzODogb3BlbnNzbC0xLjAuMC1iZXRhNS1j aXBoZXItY2hhbmdlLnBhdGNoCiBQYXRjaDM5OiBvcGVuc3NsLTEuMC4wLWJldGE1LWlwdjYtYXBw cy5wYXRjaAotUGF0Y2g0MDogb3BlbnNzbC0xLjAuMC1maXBzLnBhdGNoCitQYXRjaDQwOiBvcGVu c3NsLTEuMC4wYS1maXBzLnBhdGNoCiBQYXRjaDQxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNj aGVjay5wYXRjaAotUGF0Y2g0Mzogb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzbW9kZS5wYXRjaAor UGF0Y2g0Mzogb3BlbnNzbC0xLjAuMGEtZmlwc21vZGUucGF0Y2gKIFBhdGNoNDQ6IG9wZW5zc2wt MS4wLjAtYmV0YTMtZmlwc3JuZy5wYXRjaAogUGF0Y2g0NTogb3BlbnNzbC0wLjkuOGotZW52LW5v emxpYi5wYXRjaAogUGF0Y2g0Nzogb3BlbnNzbC0xLjAuMC1iZXRhNS1yZWFkbWUtd2FybmluZy5w YXRjaAogUGF0Y2g0OTogb3BlbnNzbC0xLjAuMC1iZXRhNC1hbGdvLWRvYy5wYXRjaAogUGF0Y2g1 MDogb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0Y2gKLVBhdGNoNTE6IG9wZW5zc2wt MS4wLjAtdmVyc2lvbi5wYXRjaAorUGF0Y2g1MTogb3BlbnNzbC0xLjAuMGEtdmVyc2lvbi5wYXRj aAogUGF0Y2g1Mjogb3BlbnNzbC0xLjAuMC1iZXRhNC1hZXNuaS5wYXRjaAogUGF0Y2g1Mzogb3Bl bnNzbC0xLjAuMC1uYW1lLWhhc2gucGF0Y2gKICMgQmFja3BvcnRlZCBmaXhlcyBpbmNsdWRpbmcg c2VjdXJpdHkgZml4ZXMKLVBhdGNoNjA6IG9wZW5zc2wtMS4wLjAtZHRsczEtYmFja3BvcnRzLnBh dGNoCi1QYXRjaDYxOiBvcGVuc3NsLTEuMC4wLWluaXQtc2hhMjU2LnBhdGNoCiAKIExpY2Vuc2U6 IE9wZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCkBAIC0xNDUsOCAr MTQzLDYgQEAgZnJvbSBvdGhlciBmb3JtYXRzIHRvIHRoZSBmb3JtYXRzIHVzZWQgYnkgdGhlIE9w ZW5TU0wgdG9vbGtpdC4KICVwYXRjaDUyIC1wMSAtYiAuYWVzbmkKICVwYXRjaDUzIC1wMSAtYiAu bmFtZS1oYXNoCiAKLSVwYXRjaDYwIC1wMSAtYiAuZHRsczEKLSVwYXRjaDYxIC1wMSAtYiAuc2hh MjU2CiAjIE1vZGlmeSB0aGUgdmFyaW91cyBwZXJsIHNjcmlwdHMgdG8gcmVmZXJlbmNlIHBlcmwg aW4gdGhlIHJpZ2h0IGxvY2F0aW9uLgogcGVybCB1dGlsL3BlcmxwYXRoLnBsIGBkaXJuYW1lICV7 X19wZXJsfWAKIApAQCAtMzA1LDE2ICszMDEsNiBAQCBta2RpciAtbTc1NSAkUlBNX0JVSUxEX1JP T1Qle19zeXNjb25mZGlyfS9wa2kvQ0EvbmV3Y2VydHMKICMgbXVsaXRsaWIgY29uZmxpY3RzIGFu ZCB1bm5lY2Vzc2FyeSByZW5hbWVzIG9uIHVwZ3JhZGUKIHRvdWNoIC1yICV7U09VUkNFMn0gJFJQ TV9CVUlMRF9ST09UJXtfc3lzY29uZmRpcn0vcGtpL3Rscy9vcGVuc3NsLmNuZgogCi0jIEZpeCBs aWJkaXIuCi1wdXNoZCAkUlBNX0JVSUxEX1JPT1QvJXtfbGliZGlyfS9wa2djb25maWcKLWZvciBp IGluICoucGMgOyBkbwotCXNlZCAncyxebGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYixsaWJkaXI9 JHtleGVjX3ByZWZpeH0vJXtfbGlifSxnJyBcCi0JCSRpID4kaS50bXAgJiYgXAotCWNhdCAkaS50 bXAgPiRpICYmIFwKLQlybSAtZiAkaS50bXAKLWRvbmUKLXBvcGQKLQogIyBEZXRlcm1pbmUgd2hp Y2ggYXJjaCBvcGVuc3NsY29uZi5oIGlzIGdvaW5nIHRvIHRyeSB0byAjaW5jbHVkZS4KIGJhc2Vh cmNoPSV7X2FyY2h9CiAlaWZhcmNoICV7aXg4Nn0KQEAgLTQwNSw2ICszOTEsMTMgQEAgcm0gLXJm ICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAlcG9zdHVuIC1wIC9z YmluL2xkY29uZmlnCiAKICVjaGFuZ2Vsb2cKKyogRnJpIEp1biAgNCAyMDEwIFRvbWFzIE1yYXog PHRtcmF6QHJlZGhhdC5jb20+IDEuMC4wYS0xCistIG5ldyB1cHN0cmVhbSBwYXRjaCByZWxlYXNl LCBmaXhlcyBDVkUtMjAxMC0wNzQyICgjNTk4NzM4KQorICBhbmQgQ1ZFLTIwMTAtMTYzMyAoIzU5 ODczMikKKworKiBXZWQgTWF5IDE5IDIwMTAgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4g MS4wLjAtNQorLSBwa2djb25maWcgZmlsZXMgbm93IGNvbnRhaW4gdGhlIGNvcnJlY3QgbGliZGly ICgjNTkzNzIzKQorCiAqIFR1ZSBNYXkgMTggMjAxMCBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQu Y29tPiAxLjAuMC00CiAtIG1ha2UgQ0EgZGlyIHJlYWRhYmxlIC0gdGhlIHByaXZhdGUga2V5cyBh cmUgaW4gcHJpdmF0ZSBzdWJkaXIgKCM1ODQ4MTApCiAKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIv c291cmNlcwppbmRleCBkYWRhZTJjLi5mNDJiNjhkIDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBi L3NvdXJjZXMKQEAgLTEgKzEgQEAKLWYxZDBkNzMzMjdkNzRiMzAyZjUwMzc2M2JkZGYxY2Y4ICBv cGVuc3NsLTEuMC4wLXVzYS50YXIuYnoyCiszNmE5OTM2ZTE3OTE1NjZiMjA1ZGFhN2NiNGJlYTA3 NCAgb3BlbnNzbC0xLjAuMGEtdXNhLnRhci5iejIK