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: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: fix DSA key generation in FIPS mode (#833866) Date: Tue, 09 Jun 2026 12:42:41 GMT Message-ID: <178100896149.1.13469664823918135231.rpms-openssl-55a3598cc73f@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 55a3598cc73f933d33d820f9959daf8bc56f7231 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbnNzbAogICAgICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAg ICAgICAgICAgIENvbW1pdCA6IDU1YTM1OThjYzczZjkzM2QzM2Q4MjBmOTk1OWRhZjhiYzU2Zjcy MzEKICAgICAgICAgICAgQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CiAgICAgICAgICAgIERhdGUgICA6IDIwMTItMDctMTJUMjE6NTk6NTYrMDI6MDAKICAgICAg ICAgICAgU3RhdHMgIDogKzIwMzcwLy0yMDMzOCBpbiAzIGZpbGUocykKICAgICAgICAgICAgVVJM ICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9vcGVuc3NsL2MvNTVhMzU5 OGNjNzNmOTMzZDMzZDgyMGY5OTU5ZGFmOGJjNTZmNzIzMT9icmFuY2g9cmViYXNlXzQwYmV0YQoK ICAgICAgICAgICAgTG9nOgogICAgICAgICAgICBmaXggRFNBIGtleSBnZW5lcmF0aW9uIGluIEZJ UFMgbW9kZSAoIzgzMzg2NikKCi0gYWxsb3cgZHVwbGljYXRlIEZJUFNfbW9kZV9zZXQoMSkKLSBl bmFibGUgYnVpbGQgb24gcHBjNjQgc3ViYXJjaCAoIzgzNDY1MikKCi0tLQpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMWItZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjFiLWZpcHMucGF0Y2gKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MDM3YTcuLjAwMDAwMDAKLS0tIGEvb3BlbnNz bC0xLjAuMWItZmlwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMzM0ICswLDAgQEAKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2FwcHMvcGtjczEyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9h cHBzL3BrY3MxMi5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvYXBwcy9wa2NzMTIuYy5maXBzCTIwMTEt MDMtMTMgMTk6MjA6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWIvYXBwcy9w a2NzMTIuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM3OTc2ODg0MCArMDIwMAotQEAgLTY3LDYgKzY3 LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9wZW0u aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotICNkZWZpbmUgUFJPRyBwa2Nz MTJfbWFpbgotIAotQEAgLTEzMCw2ICsxMzMsMTEgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQotIAotICAgICBhcHBzX3N0YXJ0dXAoKTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIGlmIChGSVBTX21vZGUoKSkKLSsJY2VydF9wYmUgPSBrZXlfcGJlOyAvKiBjYW5ub3Qg dXNlIFJDMiBpbiB0aGUgRklQUyBtb2RlICovCi0rI2VuZGlmCi0rCi0gICAgIGVuYyA9IEVWUF9k ZXNfZWRlM19jYmMoKTsKLSAgICAgaWYgKGJpb19lcnIgPT0gTlVMTCApIGJpb19lcnIgPSBCSU9f bmV3X2ZwIChzdGRlcnIsIEJJT19OT0NMT1NFKTsKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFi L2FwcHMvc3BlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2FwcHMvc3BlZWQuYwotLS0tIG9wZW5z c2wtMS4wLjFiL2FwcHMvc3BlZWQuYy5maXBzCTIwMTItMDEtMTEgMjI6NDk6MTYuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWIvYXBwcy9zcGVlZC5jCTIwMTItMDQtMjYgMTg6MDA6 NTEuMzgwNzY4ODYxICswMjAwCi1AQCAtMTk1LDcgKzE5NSw2IEBACi0gI2lmZGVmIE9QRU5TU0xf RE9JTkdfTUFLRURFUEVORAotICN1bmRlZiBBRVNfc2V0X2VuY3J5cHRfa2V5Ci0gI3VuZGVmIEFF U19zZXRfZGVjcnlwdF9rZXkKLS0jdW5kZWYgREVTX3NldF9rZXlfdW5jaGVja2VkCi0gI2VuZGlm Ci0gI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQotICNkZWZpbmUgQ0FTVF9z ZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMjAzLDcgKzIwMiw2IEBACi0gI2RlZmlu ZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKLSAjZGVmaW5lIFJDMl9zZXRfa2V5 CXByaXZhdGVfUkMyX3NldF9rZXkKLSAjZGVmaW5lIFJDNF9zZXRfa2V5CXByaXZhdGVfUkM0X3Nl dF9rZXkKLS0jZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZAlwcml2YXRlX0RFU19zZXRfa2V5 X3VuY2hlY2tlZAotICNkZWZpbmUgQUVTX3NldF9lbmNyeXB0X2tleQlwcml2YXRlX0FFU19zZXRf ZW5jcnlwdF9rZXkKLSAjZGVmaW5lIEFFU19zZXRfZGVjcnlwdF9rZXkJcHJpdmF0ZV9BRVNfc2V0 X2RlY3J5cHRfa2V5Ci0gI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFf c2V0X2tleQotQEAgLTk0MSw3ICs5MzksMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAJCQlpZiAoc3RyY21wKCphcmd2LCJyc2Ei KSA9PSAwKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJCWlmICghRklQU19tb2Rl KCkpCi0rI2VuZGlmCi0rCQkJCXsKLSAJCQlyc2FfZG9pdFtSX1JTQV81MTJdPTE7Ci0rCQkJCX0K LSAJCQlyc2FfZG9pdFtSX1JTQV8xMDI0XT0xOwotIAkJCXJzYV9kb2l0W1JfUlNBXzIwNDhdPTE7 Ci0gCQkJcnNhX2RvaXRbUl9SU0FfNDA5Nl09MTsKLUBAIC05NTEsNyArOTU0LDEyIEBAIGludCBN QUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0gCQkJ aWYgKHN0cmNtcCgqYXJndiwiZHNhIikgPT0gMCkKLSAJCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwkJCQlpZiAoIUZJUFNfbW9kZSgpKQotKyNlbmRpZgotKwkJCQl7Ci0gCQkJZHNhX2RvaXRb Ul9EU0FfNTEyXT0xOwotKwkJCQl9Ci0gCQkJZHNhX2RvaXRbUl9EU0FfMTAyNF09MTsKLSAJCQlk c2FfZG9pdFtSX0RTQV8yMDQ4XT0xOwotIAkJCX0KLUBAIC0xMjI2LDMwICsxMjM0LDU0IEBAIGlu dCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJQUVTX3NldF9lbmNyeXB0X2tleShrZXkz MiwyNTYsJmFlc19rczMpOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQot KwlpZiAoZG9pdFtEX0NCQ18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRb RF9DQkNfMjU2X0NNTF0pCi0rCSAgICB7Ci0gCUNhbWVsbGlhX3NldF9rZXkoa2V5MTYsMTI4LCZj YW1lbGxpYV9rczEpOwotIAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwxOTIsJmNhbWVsbGlhX2tz Mik7Ci0gCUNhbWVsbGlhX3NldF9rZXkoY2tleTMyLDI1NiwmY2FtZWxsaWFfa3MzKTsKLSsJICAg IH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fSURFQQotKwlpZiAoZG9pdFtEX0NCQ19J REVBXSkKLSsJICAgIHsKLSAJaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsJmlkZWFfa3MpOwot KwkgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19TRUVECi0rCWlmIChkb2l0W0Rf Q0JDX1NFRURdKQotKwkgICAgewotIAlTRUVEX3NldF9rZXkoa2V5MTYsJnNlZWRfa3MpOwotKwkg ICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKLSsJaWYgKGRvaXRbRF9SQzRd KQotKwkgICAgewotIAlSQzRfc2V0X2tleSgmcmM0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkMyCi0rCWlmIChkb2l0W0RfQ0JDX1JDMl0pCi0r CSAgICB7Ci0gCVJDMl9zZXRfa2V5KCZyYzJfa3MsMTYsa2V5MTYsMTI4KTsKLSsJICAgIH0KLSAj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkM1Ci0rCWlmIChkb2l0W0RfQ0JDX1JDNV0pCi0r CSAgICB7Ci0gCVJDNV8zMl9zZXRfa2V5KCZyYzVfa3MsMTYsa2V5MTYsMTIpOwotKwkgICAgfQot ICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19CRgotKwlpZiAoZG9pdFtEX0NCQ19CRl0pCi0r CSAgICB7Ci0gCUJGX3NldF9rZXkoJmJmX2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYK LSAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FTVAotKwlpZiAoZG9pdFtEX0NCQ19DQVNUXSkKLSsJICAg IHsKLSAJQ0FTVF9zZXRfa2V5KCZjYXN0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYK LSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gCW1lbXNldChyc2FfYywwLHNpemVvZihyc2FfYykp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0xLjAuMWIv Q29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMWIvQ29uZmlndXJlLmZpcHMJMjAxMi0wNC0yNiAx ODowMDo1MS4zNDE3NjgwMDkgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9Db25maWd1cmUJMjAx Mi0wNC0yNiAxODowMDo1MS4zODE3Njg4ODMgKzAyMDAKLUBAIC05OTMsMTEgKzk5Myw2IEBAIGlm IChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQKLSAJJGRpc2FibGVkeyJzc2wy In0gPSAiZm9yY2VkIjsKLSAJfQotIAotLWlmICgkZmlwcyAmJiAkZmlwc2xpYmRpciBlcSAiIikK LS0JewotLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsKLS0JfQotLQotICMgUlNB WCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2QuCi0gaWYgKCRmaXBzKQot IAl7Ci1AQCAtMTQ3Miw3ICsxNDY3LDYgQEAgJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX0dG Mm0iIGlmICgkYgotIGlmICgkZmlwcykKLSAJewotIAkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0i I2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7Ci0tCSRjZmxhZ3MgLj0gIiAtSVwkKEZJUFNESVIpL2lu Y2x1ZGUiOwotIAl9Ci0gCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9v YmogPX4gL1wubyQvKTsKLUBAIC0xNjU5LDkgKzE2NTMsMTIgQEAgd2hpbGUgKDxJTj4pCi0gCi0g CXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87Ci0gCXMvXkZJUFNMSUJESVI9LiovRklQ U0xJQkRJUj0kZmlwc2xpYmRpci87Ci0tCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJj cnlwdG8vIGlmICRmaXBzOwotIAlzL15CQVNFQUREUj0uKi9CQVNFQUREUj0kYmFzZWFkZHIvOwot IAotKwlpZiAoJGZpcHMpCi0rCQl7Ci0rCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKLSsJCX0KLSAJ cy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87Ci0gCXMvXlNI TElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwotIAlzL15TSEFSRURfTElCUz0u Ki9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9f c2hhcmVkKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9hZXMvYWVzX21pc2MuYy5m aXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9hZXMvYWVzX21pc2MuYwotLS0tIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTEtMDYtMDUgMTk6MzY6MzMuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCTIwMTIt MDQtMjYgMTg6MDA6NTEuMzgyNzY4OTA2ICswMjAwCi1AQCAtNjksMTcgKzY5LDExIEBAIGNvbnN0 IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpIHsKLSBpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25z dCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAJCQlBRVNfS0VZICpr ZXkpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWZpcHNfY2lwaGVyX2Fib3J0KEFFUyk7 Ci0tI2VuZGlmCi0gCXJldHVybiBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwg Yml0cywga2V5KTsKLSAJfQotIAotIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAkJCUFFU19LRVkgKmtleSkKLSAJ ewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKLS0jZW5k aWYKLSAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBr ZXkpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vY21hYy9jbWFjLmMuZmlw cyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vY21hYy9jbWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDEyLTA0LTExIDE3OjExOjE2LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9jbWFjL2NtYWMuYwkyMDEyLTA0LTI2IDE4OjAw OjUxLjM4Mjc2ODkwNiArMDIwMAotQEAgLTEwNywxMyArMTA3LDYgQEAgQ01BQ19DVFggKkNNQUNf Q1RYX25ldyh2b2lkKQotIAotIHZvaWQgQ01BQ19DVFhfY2xlYW51cChDTUFDX0NUWCAqY3R4KQot IAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0 eC5lbmdpbmUpCi0tCQl7Ci0tCQlGSVBTX2NtYWNfY3R4X2NsZWFudXAoY3R4KTsKLS0JCXJldHVy bjsKLS0JCX0KLS0jZW5kaWYKLSAJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4LT5jY3R4KTsK LSAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7Ci0gCU9Q RU5TU0xfY2xlYW5zZShjdHgtPmsxLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7Ci1AQCAtMTY0LDEx ICsxNTcsNiBAQCBpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQKLSAJCQlF VlBlcnIoRVZQX0ZfQ01BQ19JTklULCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0gCQkJcmV0 dXJuIDA7Ci0gCQkJfQotLQkJLyogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9u ZSBpbiBGSVBTX2NtYWNfaW5pdCwKLS0JCSAqIHZpYSBGSVBTX2NpcGhlcmluaXQoKS4KLS0JCSAq LwotLQkJaWYgKCFpbXBsICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJCXJldHVybiBGSVBTX2Nt YWNfaW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIsIE5VTEwpOwotIAkJfQotICNlbmRpZgot IAkvKiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLwotQEAgLTIxNiwxMCArMjA0LDYgQEAgaW50 IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQotIAl7Ci0gCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmRhdGEgPSBpbjsKLSAJc2l6ZV90IGJsOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMK LS0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJcmV0dXJuIEZJUFNf Y21hY191cGRhdGUoY3R4LCBpbiwgZGxlbik7Ci0tI2VuZGlmCi0gCWlmIChjdHgtPm5sYXN0X2Js b2NrID09IC0xKQotIAkJcmV0dXJuIDA7Ci0gCWlmIChkbGVuID09IDApCi1AQCAtMjYxLDEwICsy NDUsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pCi0gaW50IENN QUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKnBvdXRs ZW4pCi0gCXsKLSAJaW50IGksIGJsLCBsYjsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChG SVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0JCXJldHVybiBGSVBTX2NtYWNfZmlu YWwoY3R4LCBvdXQsIHBvdXRsZW4pOwotLSNlbmRpZgotIAlpZiAoY3R4LT5ubGFzdF9ibG9jayA9 PSAtMSkKLSAJCXJldHVybiAwOwotIAlibCA9IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoJmN0 eC0+Y2N0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vY3J5cHRvLmguZmlwcyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vY3J5cHRvLmgKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Y3J5cHRvLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjA5NDc2MjYxMyArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9jcnlwdG8uaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4Mjc2ODkw NiArMDIwMAotQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBGSVBTX21vZGVfc2V0KGludCByKTsK LSB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKLSAKLSAjZGVmaW5lIGZpcHNfbWRfaW5pdChhbGcp IGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCi0rI2RlZmluZSBub25maXBzX21kX2luaXQoYWxn KSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQotKyNkZWZpbmUgZmlwc19tZF9pbml0X2N0 eChhbGcsIGN4KSBcCi0rCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQotIAotICNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotKyNkZWZp bmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0gCWludCBhbGcjI19Jbml0KGN4IyNf Q1RYICpjKSBcCi0gCXsgXAotIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18s IF9fTElORV9fLCBcCi0tCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcgIiBm b3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCi0rCQkiRGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRl biBpbiBGSVBTIG1vZGUhIik7IFwKLSAJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBc Ci0gCX0gXAotIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19DVFggKmMpCi0gCi0gI2Rl ZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKLSAJaWYgKEZJUFNfbW9kZSgpKSBPcGVuU1NM RGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLQkJIkxvdyBsZXZlbCBBUEkgY2FsbCB0byBjaXBo ZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQotKwkJIkNpcGhlciAiICNhbGcg IiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCi0rLyogZGllIGlmIEZJUFMgc2VsZnRlc3Qg ZmFpbGVkICovCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotIAotICNlbHNlCi0t I2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLS0JaW50IGFsZyMjX0luaXQoY3gj I19DVFggKmMpCi0rI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gpIGZpcHNfbWRf aW5pdF9jdHgoYWxnLCBjeCkKLSAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgd2hpbGUo MCkKLSAjZW5kaWYKLSAKLUBAIC01ODAsNiArNTg1LDkgQEAgdm9pZCBPUEVOU1NMX2luaXQodm9p ZCk7Ci0gICovCi0gdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKLSAKLSsjZGVm aW5lIE9QRU5TU0xfSEFWRV9JTklUCTEKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQp OwotKwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KLSAKLSAv KiBGdW5jdGlvbiBjb2Rlcy4gKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kZXMv ZGVzLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGVzL2Rlcy5oCi0tLS0gb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2Rlcy9kZXMuaC5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMTczNzY0MzQw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Rlcy9kZXMuaAkyMDEyLTA0LTI2IDE4 OjAwOjUxLjM4Mzc2ODkyOCArMDIwMAotQEAgLTIyNCw5ICsyMjQsNiBAQCBpbnQgREVTX3NldF9r ZXkoY29uc3RfREVTX2NibG9jayAqa2V5LERFCi0gaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVT X2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLSBpbnQgREVTX3NldF9r ZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1 bGUpOwotIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxE RVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLXZvaWQg cHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19r ZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLS0jZW5kaWYKLSB2b2lkIERFU19zdHJpbmdfdG9fa2V5 KGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkpOwotIHZvaWQgREVTX3N0cmluZ190b18y a2V5cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsK LSB2b2lkIERFU19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVk IGNoYXIgKm91dCxsb25nIGxlbmd0aCwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9k ZXMvc2V0X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Rlcy9zZXRfa2V5LmMKLS0t LSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzCTIwMTEtMDYtMDEgMTg6 NTQ6MDQuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Rlcy9zZXRf a2V5LmMJMjAxMi0wNC0yNiAxODowMDo1MS4zODM3Njg5MjggKzAyMDAKLUBAIC0zMzcsMTMgKzMz Nyw2IEBAIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sKLSAJfQotIAot IHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tl eV9zY2hlZHVsZSAqc2NoZWR1bGUpCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQl7Ci0tCWZpcHNf Y2lwaGVyX2Fib3J0KERFUyk7Ci0tCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGtleSwg c2NoZWR1bGUpOwotLQl9Ci0tdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25z dF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNlbmRpZgot IAl7Ci0gCXN0YXRpYyBjb25zdCBpbnQgc2hpZnRzMlsxNl09ezAsMCwxLDEsMSwxLDEsMSwwLDEs MSwxLDEsMSwxLDB9OwotIAlyZWdpc3RlciBERVNfTE9ORyBjLGQsdCxzLHQyOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2RoL2RoX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2dlbi5jLmZp cHMJMjAxMS0wNi0wOSAxNzoyMTo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zODM3Njg5MjggKzAyMDAK LUBAIC04NCwxMSArODQsNiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0 LCBpCi0gI2VuZGlmCi0gCWlmKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQotIAkJcmV0dXJu IHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNi KTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXJldHVybiBG SVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sCi0tCQkJCQkJCWdl bmVyYXRvciwgY2IpOwotLSNlbmRpZgotIAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0 LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwotIAl9Ci0gCi1AQCAtMTIzLDYgKzExOCwyMCBA QCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCi0gCWludCBnLG9rPSAt MTsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9ESF9CVUlMVElO X0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBB UkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2Vu ZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7 Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Ro L2RoLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgvZGguaAotLS0tIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS4wMzM3NjEyODEgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgvZGguaAkyMDEyLTA0LTI2IDE4OjAwOjUx LjM4NDc2ODk1MCArMDIwMAotQEAgLTc3LDYgKzc3LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RI X01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9O VF9QICAgICAweDAxCi0gI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBu ZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2RoL2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2Ro X2tleS5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxMi0wNC0yNiAxODowMDo1MS4zODQ3Njg5 NTAgKzAyMDAKLUBAIC02MSw2ICs2MSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAot IHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Ci0gc3RhdGljIGludCBjb21wdXRlX2tl eSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKLUBA IC0xMDQsNyArMTA3LDcgQEAgY29tcHV0ZV9rZXksCi0gZGhfYm5fbW9kX2V4cCwKLSBkaF9pbml0 LAotIGRoX2ZpbmlzaCwKLS0wLAotK0RIX0ZMQUdfRklQU19NRVRIT0QsCi0gTlVMTCwKLSBOVUxM Ci0gfTsKLUBAIC0xMjMsNiArMTI2LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpk aCkKLSAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLSAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnBy aXZfa2V5PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkg JiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRT KSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19T TUFMTCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4ID0gQk5fQ1RYX25l dygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAotQEAgLTIxMyw2ICsyMjQsMTMg QEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQotIAkJREhlcnIoREhf Rl9DT01QVVRFX0tFWSxESF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLSAJCWdvdG8gZXJyOwotIAkJ fQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlE SGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3Rv IGVycjsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJY3R4ID0gQk5fQ1RYX25ldygpOwotIAlpZiAoY3R4 ID09IE5VTEwpIGdvdG8gZXJyOwotQEAgLTI4MCw2ICsyOTgsOSBAQCBzdGF0aWMgaW50IGRoX2Ju X21vZF9leHAoY29uc3QgREggKmRoLCBCCi0gCi0gc3RhdGljIGludCBkaF9pbml0KERIICpkaCkK LSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNl bmRpZgotIAlkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsK LSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2RoL2RoX2xpYi5jLmZpcHMJMjAxMS0wNi0yMCAyMTo0MToxMS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgvZGhfbGliLmMJMjAxMi0wNC0yNiAxODowMDo1MS4z ODQ3Njg5NTAgKzAyMDAKLUBAIC04MSwxNCArODEsNyBAQCBjb25zdCBESF9NRVRIT0QgKkRIX2dl dF9kZWZhdWx0X21ldGhvZCh2Ci0gCXsKLSAJaWYoIWRlZmF1bHRfREhfbWV0aG9kKQotIAkJewot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkKLS0JCQlyZXR1cm4gRklQ U19kaF9vcGVuc3NsKCk7Ci0tCQllbHNlCi0tCQkJcmV0dXJuIERIX09wZW5TU0woKTsKLS0jZWxz ZQotIAkJZGVmYXVsdF9ESF9tZXRob2QgPSBESF9PcGVuU1NMKCk7Ci0tI2VuZGlmCi0gCQl9Ci0g CXJldHVybiBkZWZhdWx0X0RIX21ldGhvZDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9l cnIuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAxMS0x MC0xMCAwMToxMzo0OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v ZHNhL2RzYV9lcnIuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4NTc2ODk3MiArMDIwMAotQEAgLTc0 LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1tdPQotIHtF UlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLAkiRE9fRFNBX1BSSU5UIn0sCi0ge0VSUl9GVU5D KERTQV9GX0RTQVBBUkFNU19QUklOVCksCSJEU0FwYXJhbXNfcHJpbnQifSwKLSB7RVJSX0ZVTkMo RFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQKSwJIkRTQXBhcmFtc19wcmludF9mcCJ9LAotK3tFUlJf RlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLAkiZHNhX2J1aWx0aW5fa2V5Z2VuIn0sCi0r e0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJImRzYV9idWlsdGluX3BhcmFt Z2VuIn0sCi0ge0VSUl9GVU5DKERTQV9GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCi0g e0VSUl9GVU5DKERTQV9GX0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAotIHtFUlJf RlVOQyhEU0FfRl9EU0FfR0VORVJBVEVfS0VZKSwJIkRTQV9nZW5lcmF0ZV9rZXkifSwKLUBAIC0x MDYsNiArMTA4LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNbXQot IHtFUlJfUkVBU09OKERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSksImRhdGEgdG9v IGxhcmdlIGZvciBrZXkgc2l6ZSJ9LAotIHtFUlJfUkVBU09OKERTQV9SX0RFQ09ERV9FUlJPUikg ICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJ R0VTVF9UWVBFKSAgICwiaW52YWxpZCBkaWdlc3QgdHlwZSJ9LAotK3tFUlJfUkVBU09OKERTQV9S X0tFWV9TSVpFX0lOVkFMSUQpICAgICAgLCJrZXkgc2l6ZSBpbnZhbGlkIn0sCi0re0VSUl9SRUFT T04oRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAot IHtFUlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUykgICAgLCJtaXNzaW5nIHBhcmFt ZXRlcnMifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9k dWx1cyB0b28gbGFyZ2UifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxV RVMpICwibmVlZCBuZXcgc2V0dXAgdmFsdWVzIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX2dl bi5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDExLTA2 LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9k c2EvZHNhX2dlbi5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzg1NzY4OTcyICswMjAwCi1AQCAtODUs NiArODUsMTQgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gI2VuZGlmCi0gCi0rI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NU WCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQX01EICpldnBt ZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAotKwkJQklHTlVNICoqcF9yZXQs IEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOwotK3N0YXRp YyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0g KnEsCi0rCQlCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpj Yik7Ci0rI2VuZGlmCi0rCi0gaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0 LCBpbnQgYml0cywKLSAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVkX2xl biwKLSAJCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAq Y2IpCi1AQCAtMTAwLDE0ICsxMDgsNiBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgo RFNBICpyZXQsCi0gCWlmKHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQotIAkJcmV0dXJuIHJldC0+ bWV0aC0+ZHNhX3BhcmFtZ2VuKHJldCwgYml0cywgc2VlZF9pbiwgc2VlZF9sZW4sCi0gCQkJCWNv dW50ZXJfcmV0LCBoX3JldCwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZWxzZSBpZiAo RklQU19tb2RlKCkpCi0tCQl7Ci0tCQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChyZXQsIGJpdHMsIAotLQkJCQkJCQlzZWVkX2luLCBzZWVkX2xlbiwKLS0JCQkJCQkJY291 bnRlcl9yZXQsIGhfcmV0LCBjYik7Ci0tCQl9Ci0tI2VuZGlmCi0gCWVsc2UKLSAJCXsKLSAJCWNv bnN0IEVWUF9NRCAqZXZwbWQ7Ci1AQCAtMTI1LDI3ICsxMjUsMTE5IEBAIGludCBEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKLSAJCQl9Ci0gCi0gCQlyZXR1cm4gZHNhX2J1aWx0 aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywgZXZwbWQsCi0tCQkJc2VlZF9pbiwgc2VlZF9s ZW4sIE5VTEwsIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotKwkJCQlzZWVkX2luLCBzZWVkX2xl biwgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7Ci0gCQl9Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCi0rCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLSsJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKLSsJewotKwlyZXR1cm4gZHNhX2J1aWx0 aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywKLSsJCWV2cG1kLCBzZWVkX2luLCBzZWVkX2xl biwKLSsJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotKwl9Ci0rI2VuZGlmCi0rCi0gaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAot IAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXpl X3Qgc2VlZF9sZW4sCi0tCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotIAlpbnQgKmNvdW50ZXJf cmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotIAl7Ci0gCWludCBvaz0w OwotIAl1bnNpZ25lZCBjaGFyIHNlZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwlCSUdOVU0g Kmc9TlVMTCwqcT1OVUxMLCpwPU5VTEw7Ci0rCXNpemVfdCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0r CUJOX0NUWCAqY3R4PU5VTEw7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4sCi0rCQkgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAg IGdvdG8gZXJyOwotKwkgICAgfQotKwotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmCi0rCSAg ICAoYml0cyAhPSAxMDI0IHx8IHFiaXRzICE9IDE2MCkgJiYKLSsJICAgIChiaXRzICE9IDIwNDgg fHwgcWJpdHMgIT0gMjI0KSAmJgotKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYp ICYmCi0rCSAgICAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9IDI1NikpCi0rCQl7Ci0rCQlEU0Fl cnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpOwot KwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4g PCAoc2l6ZV90KXFzaXplKSkKLSsJCXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9v IHNtYWxsIC0tIGlnbm9yZSAqLwotKwlpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpIAotKwkJ c2VlZF9sZW4gPSBzaXplb2Yoc2VlZCk7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxv d3MgbGFyZ2VyIFNFRUQsCi0rCQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSBy ZXN0cmljdGVkIHRvIDI1NiBiaXRzKi8KLSsJaWYgKHNlZWRfaW4gIT0gTlVMTCkKLSsJCW1lbWNw eShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7Ci0rCWVsc2UKLSsJCXNlZWRfbGVuID0gMDsKLSsK LSsJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUJO X0NUWF9zdGFydChjdHgpOwotKwotKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0 cywgcWJpdHMsIGV2cG1kLAotKwkJc2VlZCwgc2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQs IGNiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2coY3R4LCBw LCBxLCAmZywgaF9yZXQsIGNiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlvaz0xOwotK2VycjoKLSsJ aWYgKG9rKQotKwkJewotKwkJaWYocmV0LT5wKQotKwkJCXsKLSsJCQlCTl9mcmVlKHJldC0+cCk7 Ci0rCQkJcmV0LT5wID0gTlVMTDsKLSsJCQl9Ci0rCQlpZihyZXQtPnEpCi0rCQkJewotKwkJCUJO X2ZyZWUocmV0LT5xKTsKLSsJCQlyZXQtPnEgPSBOVUxMOwotKwkJCX0KLSsJCWlmKHJldC0+ZykK LSsJCQl7Ci0rCQkJQk5fZnJlZShyZXQtPmcpOwotKwkJCXJldC0+ZyA9IE5VTEw7Ci0rCQkJfQot KwkJcmV0LT5wPUJOX2R1cChwKTsKLSsJCXJldC0+cT1CTl9kdXAocSk7Ci0rCQlyZXQtPmc9Qk5f ZHVwKGcpOwotKwkJaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ ZyA9PSBOVUxMKQotKwkJCW9rPTA7Ci0rCQl9Ci0rCWlmKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9l bmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSsJfQot KwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljCi0rI2VuZGlmCi0raW50IEZJUFNfZHNh X2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJ Y29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAot KwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9H RU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rPTA7Ci0gCXVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJ R0VTVF9MRU5HVEhdOwotLQl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF0s YnVmMltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9E SUdFU1RfTEVOR1RIXTsKLSAJQklHTlVNICpyMCwqVywqWCwqYywqdGVzdDsKLS0JQklHTlVNICpn PU5VTEwsKnE9TlVMTCwqcD1OVUxMOwotLQlCTl9NT05UX0NUWCAqbW9udD1OVUxMOwotLQlpbnQg aSwgaywgbj0wLCBtPTAsIHFzaXplID0gcWJpdHMgPj4gMzsKLSsJQklHTlVNICpxPU5VTEwsKnA9 TlVMTDsKLSsJaW50IGksIGssIGIsIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0gCWlu dCBjb3VudGVyPTA7Ci0gCWludCByPTA7Ci0tCUJOX0NUWCAqY3R4PU5VTEw7Ci0tCXVuc2lnbmVk IGludCBoPTI7Ci0gCi0gCWlmIChxc2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAh PSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgotIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9M RU5HVEgpCi1AQCAtMTUzLDUxICsyNDUsNDMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERT QSAqcmV0LCBzaXplXwotIAkJcmV0dXJuIDA7Ci0gCi0gCWlmIChldnBtZCA9PSBOVUxMKQotLQkJ LyogdXNlIFNIQTEgYXMgZGVmYXVsdCAqLwotLQkJZXZwbWQgPSBFVlBfc2hhMSgpOwotKwkgICAg ewotKwkJaWYgKHFiaXRzIDw9IDE2MCkKLSsJCQlldnBtZCA9IEVWUF9zaGExKCk7Ci0rCQllbHNl IGlmIChxYml0cyA8PSAyMjQpCi0rCQkJZXZwbWQgPSBFVlBfc2hhMjI0KCk7Ci0rCQllbHNlCi0r CQkJZXZwbWQgPSBFVlBfc2hhMjU2KCk7Ci0rCSAgICB9Ci0gCi0gCWlmIChiaXRzIDwgNTEyKQot IAkJYml0cyA9IDUxMjsKLSAKLSAJYml0cyA9IChiaXRzKzYzKS82NCo2NDsKLSAKLS0JLyogTkI6 IHNlZWRfbGVuID09IDAgaXMgc3BlY2lhbCBjYXNlOiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvCi0t IAkgKiBzZWVkX2luIGlmIGl0IGlzIG5vdCBOVUxMLgotLSAJICovCi0tCWlmIChzZWVkX2xlbiAm JiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKLS0JCXNlZWRfaW4gPSBOVUxMOwkJLyogc2Vl ZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLwotLQlpZiAoc2VlZF9sZW4gPiAoc2l6ZV90 KXFzaXplKSAKLS0JCXNlZWRfbGVuID0gcXNpemU7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4 NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCi0tCQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMg YXJlIHJlc3RyaWN0ZWQgdG8gMTYwIGJpdHMqLwotLQlpZiAoc2VlZF9pbiAhPSBOVUxMKQotLQkJ bWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKLS0KLS0JaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKQotLQkJZ290byBlcnI7Ci0tCi0tCWlmICgobW9udD1CTl9NT05UX0NUWF9u ZXcoKSkgPT0gTlVMTCkKLS0JCWdvdG8gZXJyOwotLQotLQlCTl9DVFhfc3RhcnQoY3R4KTsKLSAJ cjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0tCWcgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCVcgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0tCXEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCSpxX3JldCA9IHEgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0gCVggPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCWMgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0tCXAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCSpwX3JldCA9IHAgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0gCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCi0gCWlmICghQk5fbHNoaWZ0KHRlc3Qs Qk5fdmFsdWVfb25lKCksYml0cy0xKSkKLSAJCWdvdG8gZXJyOwotIAotKwkvKiBzdGVwIDMgbiA9 IFxsY2VpbCBiaXRzIC8gcWJpdHMgXHJjZWlsIC0gMSAqLwotKwluID0gKGJpdHMrcWJpdHMtMSkv cWJpdHMgLSAxOwotKwkvKiBzdGVwIDQgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzICovCi0rCWIg PSBiaXRzIC0gMSAtIG4qcWJpdHM7Ci0rCi0gCWZvciAoOzspCi0gCQl7Ci0gCQlmb3IgKDs7KSAv KiBmaW5kIHEgKi8KLSAJCQl7Ci0gCQkJaW50IHNlZWRfaXNfcmFuZG9tOwotIAotLQkJCS8qIHN0 ZXAgMSAqLwotKwkJCS8qIHN0ZXAgNSBnZW5lcmF0ZSBzZWVkICovCi0gCQkJaWYoIUJOX0dFTkNC X2NhbGwoY2IsIDAsIG0rKykpCi0gCQkJCWdvdG8gZXJyOwotIAotQEAgLTIxMiwzMCArMjk2LDE4 IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQkJc2VlZF9s ZW49MDsgLyogdXNlIHJhbmRvbSBzZWVkIGlmICdzZWVkX2luJyB0dXJucyBvdXQgdG8gYmUgYmFk Ki8KLSAJCQkJfQotIAkJCW1lbWNweShidWYgLCBzZWVkLCBxc2l6ZSk7Ci0tCQkJbWVtY3B5KGJ1 ZjIsIHNlZWQsIHFzaXplKTsKLS0JCQkvKiBwcmVjb21wdXRlICJTRUVEICsgMSIgZm9yIHN0ZXAg NzogKi8KLS0JCQlmb3IgKGkgPSBxc2l6ZS0xOyBpID49IDA7IGktLSkKLS0JCQkJewotLQkJCQli dWZbaV0rKzsKLS0JCQkJaWYgKGJ1ZltpXSAhPSAwKQotLQkJCQkJYnJlYWs7Ci0tCQkJCX0KLSAK LS0JCQkvKiBzdGVwIDIgKi8KLSsJCQkvKiBzdGVwIDYgVSA9IGhhc2goc2VlZCkgKi8KLSAJCQlp ZiAoIUVWUF9EaWdlc3Qoc2VlZCwgcXNpemUsIG1kLCAgIE5VTEwsIGV2cG1kLCBOVUxMKSkKLSAJ CQkJZ290byBlcnI7Ci0tCQkJaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgIHFzaXplLCBidWYyLCBOVUxM LCBldnBtZCwgTlVMTCkpCi0tCQkJCWdvdG8gZXJyOwotLQkJCWZvciAoaSA9IDA7IGkgPCBxc2l6 ZTsgaSsrKQotLQkJCQltZFtpXV49YnVmMltpXTsKLSAKLS0JCQkvKiBzdGVwIDMgKi8KLSsJCQkv KiBzdGVwIDcgcSA9IDJeKHFiaXRzLTEpICsgVSArIDEgLSAoVSBtb2QgMikgKi8KLSAJCQltZFsw XSB8PSAweDgwOwotIAkJCW1kW3FzaXplLTFdIHw9IDB4MDE7Ci0gCQkJaWYgKCFCTl9iaW4yYm4o bWQsIHFzaXplLCBxKSkKLSAJCQkJZ290byBlcnI7Ci0gCi0tCQkJLyogc3RlcCA0ICovCi0rCQkJ Lyogc3RlcCA4IHRlc3QgZm9yIHByaW1lICg2NCByb3VuZCBvZiBSYWJpbi1NaWxsZXIpICovCi0g CQkJciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHEsIERTU19wcmltZV9jaGVja3MsIGN0eCwK LSAJCQkJCXNlZWRfaXNfcmFuZG9tLCBjYik7Ci0gCQkJaWYgKHIgPiAwKQotQEAgLTI0MywyNyAr MzE1LDIyIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQlp ZiAociAhPSAwKQotIAkJCQlnb3RvIGVycjsKLSAKLS0JCQkvKiBkbyBhIGNhbGxiYWNrIGNhbGwg Ki8KLS0JCQkvKiBzdGVwIDUgKi8KLSAJCQl9Ci0gCi0gCQlpZighQk5fR0VOQ0JfY2FsbChjYiwg MiwgMCkpIGdvdG8gZXJyOwotIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDMsIDApKSBnb3RvIGVy cjsKLSAKLS0JCS8qIHN0ZXAgNiAqLwotKwkJLyogc3RlcCAxMSAqLwotIAkJY291bnRlcj0wOwot LQkJLyogIm9mZnNldCA9IDIiICovCi0tCi0tCQluPShiaXRzLTEpLzE2MDsKLSsJCS8qICJvZmZz ZXQgPSAxIiAqLwotIAotIAkJZm9yICg7OykKLSAJCQl7Ci0gCQkJaWYgKChjb3VudGVyICE9IDAp ICYmICFCTl9HRU5DQl9jYWxsKGNiLCAwLCBjb3VudGVyKSkKLSAJCQkJZ290byBlcnI7Ci0gCi0t CQkJLyogc3RlcCA3ICovCi0rCQkJLyogc3RlcCAxMS4xLCAxMS4yIG9idGFpbiBXICovCi0gCQkJ Qk5femVybyhXKTsKLS0JCQkvKiBub3cgJ2J1ZicgY29udGFpbnMgIlNFRUQgKyBvZmZzZXQgLSAx IiAqLwotIAkJCWZvciAoaz0wOyBrPD1uOyBrKyspCi0gCQkJCXsKLSAJCQkJLyogb2J0YWluICJT RUVEICsgb2Zmc2V0ICsgayIgYnkgaW5jcmVtZW50aW5nOiAqLwotQEAgLTI3OCwyOCArMzQ1LDMw IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQkJCQkJCQlO VUxMKSkKLSAJCQkJCWdvdG8gZXJyOwotIAotLQkJCQkvKiBzdGVwIDggKi8KLSAJCQkJaWYgKCFC Tl9iaW4yYm4obWQsIHFzaXplLCByMCkpCi0gCQkJCQlnb3RvIGVycjsKLS0JCQkJaWYgKCFCTl9s c2hpZnQocjAscjAsKHFzaXplIDw8IDMpKmspKSBnb3RvIGVycjsKLSsJCQkJaWYgKGsgPT0gbikK LSsJCQkJCUJOX21hc2tfYml0cyhyMCxiKTsKLSsJCQkJaWYgKCFCTl9sc2hpZnQocjAscjAscWJp dHMqaykpIGdvdG8gZXJyOwotIAkJCQlpZiAoIUJOX2FkZChXLFcscjApKSBnb3RvIGVycjsKLSAJ CQkJfQotIAotLQkJCS8qIG1vcmUgb2Ygc3RlcCA4ICovCi0tCQkJaWYgKCFCTl9tYXNrX2JpdHMo VyxiaXRzLTEpKSBnb3RvIGVycjsKLSsJCQkvKiBzdGVwIDExLjMgWCA9IFcgKyAyXihMLTEpICov Ci0gCQkJaWYgKCFCTl9jb3B5KFgsVykpIGdvdG8gZXJyOwotIAkJCWlmICghQk5fYWRkKFgsWCx0 ZXN0KSkgZ290byBlcnI7Ci0gCi0tCQkJLyogc3RlcCA5ICovCi0rCQkJLyogc3RlcCAxMS40IGMg PSBYIG1vZCAyKnEgKi8KLSAJCQlpZiAoIUJOX2xzaGlmdDEocjAscSkpIGdvdG8gZXJyOwotIAkJ CWlmICghQk5fbW9kKGMsWCxyMCxjdHgpKSBnb3RvIGVycjsKLSsKLSsJCQkvKiBzdGVwIDExLjUg cCA9IFggLSAoYyAtIDEpICovCi0gCQkJaWYgKCFCTl9zdWIocjAsYyxCTl92YWx1ZV9vbmUoKSkp IGdvdG8gZXJyOwotIAkJCWlmICghQk5fc3ViKHAsWCxyMCkpIGdvdG8gZXJyOwotIAotLQkJCS8q IHN0ZXAgMTAgKi8KLSsJCQkvKiBzdGVwIDExLjYgKi8KLSAJCQlpZiAoQk5fY21wKHAsdGVzdCkg Pj0gMCkKLSAJCQkJewotLQkJCQkvKiBzdGVwIDExICovCi0rCQkJCS8qIHN0ZXAgMTEuNyAqLwot IAkJCQlyID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocCwgRFNTX3ByaW1lX2NoZWNrcywKLSAJ CQkJCQljdHgsIDEsIGNiKTsKLSAJCQkJaWYgKHIgPiAwKQotQEAgLTMwOCwxOSArMzc3LDQ1IEBA IGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQkJCWdvdG8gZXJy OwotIAkJCQl9Ci0gCi0tCQkJLyogc3RlcCAxMyAqLwotKwkJCS8qIHN0ZXAgMTEuOSAqLwotIAkJ CWNvdW50ZXIrKzsKLSAJCQkvKiAib2Zmc2V0ID0gb2Zmc2V0ICsgbiArIDEiICovCi0gCi0tCQkJ Lyogc3RlcCAxNCAqLwotLQkJCWlmIChjb3VudGVyID49IDQwOTYpIGJyZWFrOwotKwkJCS8qIHN0 ZXAgMTIgKi8KLSsJCQlpZiAoY291bnRlciA+PSA0KmJpdHMpIGJyZWFrOwotIAkJCX0KLSAJCX0K LSBlbmQ6Ci0gCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAxKSkKLSAJCWdvdG8gZXJyOwotIAot LQkvKiBXZSBub3cgbmVlZCB0byBnZW5lcmF0ZSBnICovCi0rCW9rPTE7Ci0rZXJyOgotKwlpZiAo b2spCi0rCQl7Ci0rCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50 ZXI7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSsJfQotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0r c3RhdGljCi0rI2VuZGlmCi0raW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJ R05VTSAqcCwgQklHTlVNICpxLAotKwkJQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhf cmV0LCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rPTA7Ci0rCUJJR05VTSAqcjAsICp0ZXN0 LCAqZyA9IE5VTEw7Ci0rCUJOX01PTlRfQ1RYICptb250OwotKwl1bnNpZ25lZCBpbnQgaD0yOwot KwotKwlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsK LSsKLSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCSpnX3JldCA9IGcgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0rCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0gCS8qIFNldCByMD0ocC0xKS9xICov Ci0gCWlmICghQk5fc3ViKHRlc3QscCxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOwotIAlpZiAo IUJOX2RpdihyMCxOVUxMLHRlc3QscSxjdHgpKSBnb3RvIGVycjsKLUBAIC0zNDQsMjYgKzQzOSw3 IEBAIGVuZDoKLSBlcnI6Ci0gCWlmIChvaykKLSAJCXsKLS0JCWlmKHJldC0+cCkgQk5fZnJlZShy ZXQtPnApOwotLQkJaWYocmV0LT5xKSBCTl9mcmVlKHJldC0+cSk7Ci0tCQlpZihyZXQtPmcpIEJO X2ZyZWUocmV0LT5nKTsKLS0JCXJldC0+cD1CTl9kdXAocCk7Ci0tCQlyZXQtPnE9Qk5fZHVwKHEp OwotLQkJcmV0LT5nPUJOX2R1cChnKTsKLS0JCWlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEg PT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKLS0JCQl7Ci0tCQkJb2s9MDsKLS0JCQlnb3RvIGVy cjsKLS0JCQl9Ci0tCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50 ZXI7Ci0gCQlpZiAoaF9yZXQgIT0gTlVMTCkgKmhfcmV0PWg7Ci0tCQlpZiAoc2VlZF9vdXQpCi0t CQkJbWVtY3B5KHNlZWRfb3V0LCBzZWVkLCBxc2l6ZSk7Ci0tCQl9Ci0tCWlmKGN0eCkKLS0JCXsK LS0JCUJOX0NUWF9lbmQoY3R4KTsKLS0JCUJOX0NUWF9mcmVlKGN0eCk7Ci0gCQl9Ci0gCWlmICht b250ICE9IE5VTEwpIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7Ci0gCXJldHVybiBvazsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZHNhL2RzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2EuaC5maXBz CTIwMTItMDQtMjYgMTg6MDA6NTAuODQwNzU3MDY1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2RzYS9kc2EuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4Njc2ODk5MyArMDIwMAotQEAg LTg4LDYgKzg4LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEw MDAwCi0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMgMTAyNAotKwotICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKLSAjZGVmaW5l IERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7 IHRoZSBidWlsdC1pbiBEU0EKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtMjY0 LDYgKzI2NiwxNyBAQCBpbnQJRFNBX3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCi0g REggKkRTQV9kdXBfREgoY29uc3QgRFNBICpyKTsKLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCi0rCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLSsJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Ci0raW50IEZJUFNfZHNhX2dlbmVyYXRl X3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQ X01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAotKwkJQklHTlVN ICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2Ip OwotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05V TSAqcSwKLSsJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0Ig KmNiKTsKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2Vu X2JpdHMoY3R4LCBuYml0cykgXAotIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RT QSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKLSAJCQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1H RU5fQklUUywgbmJpdHMsIE5VTEwpCi1AQCAtMjg1LDEwICsyOTgsMTMgQEAgdm9pZCBFUlJfbG9h ZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0 Ci0gI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJCQkJIDEwMAotICNkZWZpbmUgRFNBX0Zf RFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZ R0VOCQkJIDEyNAotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCi0g I2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCi0gI2RlZmluZSBEU0FfRl9EU0FfRE9f VkVSSUZZCQkJCSAxMTMKLS0jZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNAot LSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjMKLSsjZGVmaW5l IERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNgotKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVS QVRFX1BBUkFNRVRFUlNfRVgJCSAxMjcKLSsjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJB TUVURVJTCS8qIHVudXNlZCAqLwkgMTI1Ci0gI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJ CQkgMTAzCi0gI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKLSAjZGVmaW5l IERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAtMzE0LDExICszMzAsMTUgQEAgdm9pZCBF UlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdF X0ZPUl9LRVlfU0laRQkJIDEwMAotICNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQK LSAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2Ci0rI2RlZmluZSBEU0Ff Ul9LRVlfU0laRV9JTlZBTElECQkJCSAxMTMKLSsjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTAkJCSAxMTAKLSAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAj ZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKLS0jZGVmaW5lIERTQV9SX05F RURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTAKLSsjZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQ X1ZBTFVFUwkJCSAxMTIKLSAjZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QJCQkgMTEx Ci0rI2RlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDExMQotICNkZWZpbmUgRFNBX1Jf Tk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwotKyNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9B TExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8gMTEyCi0gI2RlZmluZSBEU0FfUl9QQVJB TUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vZHNhL2RzYV9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2Ev ZHNhX2tleS5jLmZpcHMJMjAxMS0wNi0wOSAxNzoyMTo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9rZXkuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4 Njc2ODk5MyArMDIwMAotQEAgLTY2LDYgKzY2LDI0IEBACi0gCi0gI2lmZGVmIE9QRU5TU0xfRklQ UwotICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsKLStzdGF0aWMgaW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVWUF9QS0VZ IHBrOwotKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsK LSsgICAgCXBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rICAgIAlway5wa2V5LmRzYSA9IGRzYTsK LSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoJnBrLCB0YnMsIDAsIE5VTEwsIDAs IE5VTEwsIDAsIE5VTEwpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0Es RklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwo KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotICNlbmRpZgotIAot IHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKLUBAIC04MiwxMCArMTAw LDYgQEAgaW50IERTQV9nZW5lcmF0ZV9rZXkoRFNBICpkc2EpCi0gI2VuZGlmCi0gCWlmKGRzYS0+ bWV0aC0+ZHNhX2tleWdlbikKLSAJCXJldHVybiBkc2EtPm1ldGgtPmRzYV9rZXlnZW4oZHNhKTsK LS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXJldHVybiBGSVBT X2RzYV9nZW5lcmF0ZV9rZXkoZHNhKTsKLS0jZW5kaWYKLSAJcmV0dXJuIGRzYV9idWlsdGluX2tl eWdlbihkc2EpOwotIAl9Ci0gCi1AQCAtOTUsNiArMTA5LDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1 aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9DVFggKmN0eD1OVUxMOwotIAlCSUdOVU0gKnB1 Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykK LSsJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9S X0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJ aWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAKLSAJaWYgKGRzYS0+ cHJpdl9rZXkgPT0gTlVMTCkKLUBAIC0xMzMsNiArMTU2LDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1 aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAotIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OwotIAlk c2EtPnB1Yl9rZXk9cHViX2tleTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9k ZSgpICYmICFmaXBzX2NoZWNrX2RzYShkc2EpKQotKwkJewotKwkJZHNhLT5wdWJfa2V5ID0gTlVM TDsKLSsJCWRzYS0+cHJpdl9rZXkgPSBOVUxMOwotKwkgICAgCWdvdG8gZXJyOwotKwkJfQotKyNl bmRpZgotIAlvaz0xOwotIAotIGVycjoKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9k c2EvZHNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfbGliLmMKLS0t LSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzCTIwMTEtMTEtMTQgMTU6 MTY6MDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2Ff bGliLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zODc3NjkwMTQgKzAyMDAKLUBAIC04NywxNCArODcs NyBAQCBjb25zdCBEU0FfTUVUSE9EICpEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kCi0gCXsKLSAJaWYo IWRlZmF1bHRfRFNBX21ldGhvZCkKLSAJCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAo RklQU19tb2RlKCkpCi0tCQkJcmV0dXJuIEZJUFNfZHNhX29wZW5zc2woKTsKLS0JCWVsc2UKLS0J CQlyZXR1cm4gRFNBX09wZW5TU0woKTsKLS0jZWxzZQotIAkJZGVmYXVsdF9EU0FfbWV0aG9kID0g RFNBX09wZW5TU0woKTsKLS0jZW5kaWYKLSAJCX0KLSAJcmV0dXJuIGRlZmF1bHRfRFNBX21ldGhv ZDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZp cHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MC44NDQ3NTcx NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9sb2NsLmgJMjAxMi0w NC0yNiAxODowMDo1MS4zODc3NjkwMTQgKzAyMDAKLUBAIC01Niw1ICs1Niw0IEBACi0gCi0gaW50 IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRz LAotIAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBz aXplX3Qgc2VlZF9sZW4sCi0tCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotIAlpbnQgKmNvdW50 ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9kc2EvZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX29z c2wuYy5maXBzCTIwMTEtMDItMDEgMTM6NTM6NDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzg4NzY5 MDM1ICswMjAwCi1AQCAtNjUsNiArNjUsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgot ICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYK LSAKLSBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdz dCwgaW50IGRsZW4sIERTQSAqZHNhKTsKLSBzdGF0aWMgaW50IGRzYV9zaWduX3NldHVwKERTQSAq ZHNhLCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJwKTsKLUBAIC04 Miw3ICs4NSw3IEBAIE5VTEwsIC8qIGRzYV9tb2RfZXhwLCAqLwotIE5VTEwsIC8qIGRzYV9ibl9t b2RfZXhwLCAqLwotIGRzYV9pbml0LAotIGRzYV9maW5pc2gsCi0tMCwKLStEU0FfRkxBR19GSVBT X01FVEhPRCwKLSBOVUxMLAotIE5VTEwsCi0gTlVMTAotQEAgLTEzOCw2ICsxNDEsMjEgQEAgc3Rh dGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgotIAlEU0FfU0lHICpyZXQ9TlVM TDsKLSAJaW50IG5vcmVkbyA9IDA7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RP X1NJR04sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiBOVUxMOwot KwkgICAgfQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpIAotKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9ET19T SUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0r I2VuZGlmCi0rCi0gCUJOX2luaXQoJm0pOwotIAlCTl9pbml0KCZ4cik7Ci0gCi1AQCAtMzI1LDYg KzM0MywyMSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKLSAJCXJl dHVybiAtMTsKLSAJCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZ LEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9 Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQ U19BTExPVykgCi0rCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwg RFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJldHVybiAtMTsKLSsJCX0KLSsjZW5kaWYK LSsKLSAJaWYgKEJOX251bV9iaXRzKGRzYS0+cCkgPiBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19C SVRTKQotIAkJewotIAkJRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksRFNBX1JfTU9EVUxVU19U T09fTEFSR0UpOwotQEAgLTM5OSw2ICs0MzIsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnko Y29uc3QgdW5zaWduZWQKLSAKLSBzdGF0aWMgaW50IGRzYV9pbml0KERTQSAqZHNhKQotIHsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJ ZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7Ci0gfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfcG1ldGguYy5maXBzIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v ZHNhL2RzYV9wbWV0aC5jLmZpcHMJMjAxMS0wNi0yMCAyMjowNToxMy4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCTIwMTItMDQtMjYgMTg6 MDA6NTEuMzg4NzY5MDM1ICswMjAwCi1AQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgcGtl eV9kc2FfcGFyYW1nZW4oRVZQX1BLRVlfQ1QKLSAJaWYgKCFkc2EpCi0gCQlyZXR1cm4gMDsKLSAJ cmV0ID0gZHNhX2J1aWx0aW5fcGFyYW1nZW4oZHNhLCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMs IGRjdHgtPnBtZCwKLS0JICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgcGNiKTsKLSsJICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwg TlVMTCwgTlVMTCwgcGNiKTsKLSAJaWYgKHJldCkKLSAJCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGtl eSwgZHNhKTsKLSAJZWxzZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2F0 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYXRlc3QuYwotLS0tIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMJMjAwOC0wOC0wNiAxNzo1NDoxMS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYXRlc3QuYwky MDEyLTA0LTI2IDE4OjAwOjUxLjM4OTc2OTA1OCArMDIwMAotQEAgLTk2LDM2ICs5Niw0MSBAQCBz dGF0aWMgaW50IE1TX0NBTExCQUNLIGRzYV9jYihpbnQgcCwgaW50Ci0gLyogc2VlZCwgb3V0X3As IG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gZnJvbSB0aGUgdXBkYXRlZCBBcHBlbmRpeCA1IHRvCi0g ICogRklQUyBQVUIgMTg2IGFuZCBhbHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElC IDE4Ni0xICovCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF09ewotLQkweGQ1LDB4MDEs MHg0ZSwweDRiLDB4NjAsMHhlZiwweDJiLDB4YTgsMHhiNiwweDIxLDB4MWIsMHg0MCwKLS0JMHg2 MiwweGJhLDB4MzIsMHgyNCwweGUwLDB4NDIsMHg3ZCwweGQzLAotKwkweDAyLDB4NDcsMHgxMSww eDkyLDB4MTEsMHg4OCwweEM4LDB4RkIsMHhBRiwweDQ4LDB4NEMsMHg2MiwKLSsJMHhERiwweEE1 LDB4QkUsMHhBMCwweEE0LDB4M0MsMHg1NiwweEUzLAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25l ZCBjaGFyIG91dF9wW109ewotLQkweDhkLDB4ZjIsMHhhNCwweDk0LDB4NDksMHgyMiwweDc2LDB4 YWEsCi0tCTB4M2QsMHgyNSwweDc1LDB4OWIsMHhiMCwweDY4LDB4NjksMHhjYiwKLS0JMHhlYSww eGMwLDB4ZDgsMHgzYSwweGZiLDB4OGQsMHgwYywweGY3LAotLQkweGNiLDB4YjgsMHgzMiwweDRm LDB4MGQsMHg3OCwweDgyLDB4ZTUsCi0tCTB4ZDAsMHg3NiwweDJmLDB4YzUsMHhiNywweDIxLDB4 MGUsMHhhZiwKLS0JMHhjMiwweGU5LDB4YWQsMHhhYywweDMyLDB4YWIsMHg3YSwweGFjLAotLQkw eDQ5LDB4NjksMHgzZCwweGZiLDB4ZjgsMHgzNywweDI0LDB4YzIsCi0tCTB4ZWMsMHgwNywweDM2 LDB4ZWUsMHgzMSwweGM4LDB4MDIsMHg5MSwKLSsJMHhBQywweENCLDB4MUUsMHg2MywweDYwLDB4 NjksMHgwQywweEZCLDB4MDYsMHgxOSwweDY4LDB4M0UsCi0rCTB4QTUsMHgwMSwweDVBLDB4QTIs MHgxNSwweDVDLDB4RTIsMHg5OSwweDJELDB4RDUsMHgzMCwweDk5LAotKwkweDdFLDB4NUYsMHg4 RCwweEUyLDB4RjcsMHhDNiwweDJFLDB4OEQsMHhBMywweDlGLDB4NTgsMHhBRCwKLSsJMHhENiww eEE5LDB4N0QsMHgwRSwweDBELDB4OTUsMHg1MywweEE2LDB4NzEsMHgzQSwweERFLDB4QUIsCi0r CTB4QUMsMHhFOSwweEY0LDB4MzYsMHg1NSwweDlFLDB4QjksMHhENiwweDkzLDB4QkYsMHhGMyww eDE4LAotKwkweDFDLDB4MTQsMHg3QiwweEE1LDB4NDIsMHgyRSwweENELDB4MDAsMHhFQiwweDM1 LDB4M0IsMHgxQiwKLSsJMHhBOCwweDUxLDB4QkIsMHhFMSwweDU4LDB4NDIsMHg4NSwweDg0LDB4 MjIsMHhBNywweDk3LDB4NUUsCi0rCTB4OTksMHg2RiwweDM4LDB4MjAsMHhCRCwweDlELDB4QjYs MHhEOSwweDMzLDB4MzcsMHgyQSwweEZELAotKwkweEJCLDB4RDQsMHhCQywweDBDLDB4MkEsMHg2 NywweENCLDB4OUYsMHhCQiwweERGLDB4RjksMHg5MywKLSsJMHhBQSwweEQ2LDB4RjAsMHhENiww eDk1LDB4MEIsMHg1RCwweDY1LDB4MTQsMHhEMCwweDE4LDB4OUQsCi0rCTB4QzYsMHhBRiwweEYw LDB4QzYsMHgzNywweDdDLDB4RjMsMHg1RiwKLSAJfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hh ciBvdXRfcVtdPXsKLS0JMHhjNywweDczLDB4MjEsMHg4YywweDczLDB4N2UsMHhjOCwweGVlLAot LQkweDk5LDB4M2IsMHg0ZiwweDJkLDB4ZWQsMHgzMCwweGY0LDB4OGUsCi0tCTB4ZGEsMHhjZSww eDkxLDB4NWYsCi0rCTB4RTMsMHg4RSwweDVFLDB4NkQsMHhCRiwweDJCLDB4NzksMHhGOCwweEM1 LDB4NEIsMHg4OSwweDhCLAotKwkweEJBLDB4MkQsMHg5MSwweEMzLDB4NkMsMHg4MCwweEFDLDB4 ODcsCi0gCX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXT17Ci0tCTB4NjIsMHg2 ZCwweDAyLDB4NzgsMHgzOSwweGVhLDB4MGEsMHgxMywKLS0JMHg0MSwweDMxLDB4NjMsMHhhNSww eDViLDB4NGMsMHhiNSwweDAwLAotLQkweDI5LDB4OWQsMHg1NSwweDIyLDB4OTUsMHg2YywweGVm LDB4Y2IsCi0tCTB4M2IsMHhmZiwweDEwLDB4ZjMsMHg5OSwweGNlLDB4MmMsMHgyZSwKLS0JMHg3 MSwweGNiLDB4OWQsMHhlNSwweGZhLDB4MjQsMHhiYSwweGJmLAotLQkweDU4LDB4ZTUsMHhiNyww eDk1LDB4MjEsMHg5MiwweDVjLDB4OWMsCi0tCTB4YzQsMHgyZSwweDlmLDB4NmYsMHg0NiwweDRi LDB4MDgsMHg4YywKLS0JMHhjNSwweDcyLDB4YWYsMHg1MywweGU2LDB4ZDcsMHg4OCwweDAyLAot KwkweDQyLDB4NEEsMHgwNCwweDRFLDB4NzksMHhCNCwweDk5LDB4N0YsMHhGRCwweDU4LDB4MzYs MHgyQywKLSsJMHgxQiwweDVGLDB4MTgsMHg3RSwweDBELDB4Q0MsMHhBQiwweDgxLDB4QzksMHg1 RCwweDEwLDB4Q0UsCi0rCTB4NEUsMHg4MCwweDdFLDB4NTgsMHhCNCwweDM0LDB4M0YsMHhBNyww eDQ1LDB4QzcsMHhBQSwweDM2LAotKwkweDI0LDB4NDIsMHhBOSwweDNCLDB4RTgsMHgwRSwweDA0 LDB4MDIsMHgyRCwweEZCLDB4QTYsMHgxMywKLSsJMHhCOSwweEI1LDB4MTUsMHhBNSwweDU2LDB4 MDcsMHgzNSwweEU0LDB4MDMsMHhCNiwweDc5LDB4N0MsCi0rCTB4NjIsMHhERCwweERGLDB4M0Ys MHg3MSwweDNBLDB4OUQsMHg4QiwweEM0LDB4RjYsMHhFNywweDFELAotKwkweDUyLDB4QTgsMHhB OSwweDQzLDB4MUQsMHgzMywweDUxLDB4ODgsMHgzOSwweEJELDB4NzMsMHhFOSwKLSsJMHg1Riww eEJFLDB4ODIsMHg0OSwweDI3LDB4RTYsMHhCNSwweDUzLDB4QzEsMHgzOCwweEFDLDB4MkYsCi0r CTB4NkQsMHg5NywweDZDLDB4RUIsMHg2NywweEMxLDB4NUYsMHg2NywweEY4LDB4MzUsMHgwNSww eDVFLAotKwkweEQ1LDB4NjgsMHg4MCwweEFBLDB4OTYsMHhDQSwweDBCLDB4OEEsMHhFNiwweEYx LDB4QjEsMHg0MSwKLSsJMHhDNiwweDc1LDB4OTQsMHgwQSwweDBBLDB4MkEsMHhGQSwweDI5LAot IAl9OwotIAotIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEy MzQ1Njc4OTAiOwotQEAgLTE1Nyw3ICsxNjIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCi0gCUJJT19wcmludGYoYmlvX2VyciwidGVzdCBnZW5lcmF0aW9uIG9mIERTQSBwYXJh bWV0ZXJzXG4iKTsKLSAKLSAJQk5fR0VOQ0Jfc2V0KCZjYiwgZHNhX2NiLCBiaW9fZXJyKTsKLS0J aWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChkc2EsIDUxMiwKLSsJaWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCi0gCQkJCXNlZWQsIDIwLCAmY291bnRl ciwgJmgsICZjYikpCi0gCQlnb3RvIGVuZDsKLSAKLUBAIC0xNzAsOSArMTc1LDkgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAlCSU9fcHJpbnRmKGJpb19lcnIsIlxuY291bnRl cj0lZCBoPSVsZFxuIixjb3VudGVyLGgpOwotIAkJCi0gCURTQV9wcmludChiaW9fZXJyLGRzYSww KTsKLS0JaWYgKGNvdW50ZXIgIT0gMTA1KSAKLSsJaWYgKGNvdW50ZXIgIT0gMjM5KSAKLSAJCXsK LS0JCUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMTA1XG4iKTsKLSsJCUJJ T19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMjM5XG4iKTsKLSAJCWdvdG8gZW5k OwotIAkJfQotIAlpZiAoaCAhPSAyKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Vu Z2luZS9lbmdfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZW5naW5lL2VuZ19hbGwu YwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMJMjAxMS0w OC0xMCAyMDo1MzoxMy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v ZW5naW5lL2VuZ19hbGwuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4OTc2OTA1OCArMDIwMAotQEAg LTU4LDExICs1OCwyNSBAQAotIAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlICJl bmdfaW50LmgiCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjZW5kaWYKLSAKLSB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcyh2b2lkKQot IAl7Ci0gCS8qIFNvbWUgRU5HSU5FcyBuZWVkIHRoaXMgKi8KLSAJT1BFTlNTTF9jcHVpZF9zZXR1 cCgpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJ aWYgKEZJUFNfbW9kZSgpKSB7Ci0rCQkvKiBXZSBhbGxvdyBsb2FkaW5nIGR5bmFtaWMgZW5naW5l IGFzIGEgdGhpcmQgcGFydHkKLSsJCSAgIGVuZ2luZSBtaWdodCBiZSBGSVBTIHZhbGlkYXRlZC4K LSsJCSAgIFVzZXIgaXMgZGlzYWxsb3dlZCB0byBsb2FkIG5vbi12YWxpZGF0ZWQgZW5naW5lcwot KwkJICAgYnkgc2VjdXJpdHkgcG9saWN5LiAqLwotKwkJRU5HSU5FX2xvYWRfZHluYW1pYygpOwot KwkJcmV0dXJuOwotKwl9Ci0rI2VuZGlmCi0gI2lmIDAKLSAJLyogVGhlcmUncyBubyBsb25nZXIg YW55IG5lZWQgZm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5sZXNzLCBvbmUgZGF5LAotIAkgKiBp dCBpcyB0aGUgKm9ubHkqIHdheSBmb3Igc3RhbmRhcmQgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbnMg dG8gYmUgYmUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZp cHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Vyci9lcnJfYWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIwMTEtMDYtMjEgMTg6NTg6MTAuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Vyci9lcnJfYWxsLmMJMjAxMi0wNC0y NiAxODowMDo1MS4zOTA3NjkwODEgKzAyMDAKLUBAIC05Niw2ICs5Niw5IEBACi0gI2luY2x1ZGUg PG9wZW5zc2wvb2NzcC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotICNpbmNsdWRlIDxv cGVuc3NsL3RzLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0gI2luY2x1ZGUgPG9wZW5z c2wvY21zLmg+Ci0gI2VuZGlmCi1AQCAtMTUzLDYgKzE1Niw5IEBAIHZvaWQgRVJSX2xvYWRfY3J5 cHRvX3N0cmluZ3Modm9pZCkKLSAjZW5kaWYKLSAJRVJSX2xvYWRfT0NTUF9zdHJpbmdzKCk7Ci0g CUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUVSUl9sb2Fk X0ZJUFNfc3RyaW5ncygpOwotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKLSAJRVJS X2xvYWRfQ01TX3N0cmluZ3MoKTsKLSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9ldnAvY19hbGxjLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2NfYWxsYy5j Ci0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzCTIwMTEtMTEtMTQg MjI6MTM6MzUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9j X2FsbGMuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5MDc2OTA4MSArMDIwMAotQEAgLTY1LDYgKzY1 LDExIEBACi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotIAl7Ci0gCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZighRklQU19t b2RlKCkpIAotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgp KTsKLUBAIC0yMjcsNCArMjMyLDYwIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9p ZCkKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiQ0FNRUxMSUEy NTYiKTsKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiY2FtZWxs aWEyNTYiKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl X2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKLSsKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfb2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2Fs aWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9k ZXNfZWRlM19jYmMsImRlczMiKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7 Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsjZW5kaWYKLSsKLSsjaWZuZGVm IE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2VjYigpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjEoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X29mYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY3RyKCkpOwot KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMs IkFFUzEyOCIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiYWVzMTI4 Iik7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2VjYigpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIo KSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29m YigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOwotKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18x OTJfY2JjLCJBRVMxOTIiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMs ImFlczE5MiIpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIxKCkpOwotKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmI4KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9vZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl94dHMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMy NTYiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsImFlczI1NiIpOwot KyNlbmRpZgotKwkJfQotKyNlbmRpZgotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vZXZwL2NfYWxsZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9jX2FsbGQuYwot LS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcwkyMDA5LTA3LTA4IDEw OjUwOjUzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvY19h bGxkLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTA3NjkwODEgKzAyMDAKLUBAIC02NCw2ICs2NCwx MSBAQAotIAotIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSAJewotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJaWYgKCFGSVBTX21v ZGUoKSkKLSsJCXsKLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ0Ci0gCUVWUF9hZGRf ZGlnZXN0KEVWUF9tZDQoKSk7Ci0gI2VuZGlmCi1AQCAtMTExLDQgKzExNiwzMiBAQCB2b2lkIE9w ZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCi0gI2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9P TAotIAlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkpOwotICNlbmRpZgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05P X1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQotKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7Ci0r CUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0 aFJTQSk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNz MSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsU05fZHNhV2l0aFNI QTFfMik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJEU1MxIik7Ci0r CUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJkc3MxIik7Ci0rI2VuZGlmCi0r I2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsK LSsjZW5kaWYKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0rCUVWUF9hZGRf ZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0r I2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMzg0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyNlbmRpZgotKwkJ fQotKyNlbmRpZgotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2RpZ2Vz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9kaWdlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDExLTA1LTI5IDE3OjU1OjEzLjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZGlnZXN0LmMJMjAxMi0w NC0yNiAxODowMDo1MS4zOTE3NjkxMDMgKzAyMDAKLUBAIC0xNDIsOSArMTQyLDUwIEBAIGludCBF VlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKLSAJcmV0dXJuIEVWUF9EaWdlc3RJ bml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r Ci0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVt cHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9y ZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAq Y3R4KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQot KwotK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0 YSxzaXplX3QgY291bnQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7 IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5z aWduZWQgY2hhciAqbWQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsg cmV0dXJuIDA7fQotKwotK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KLSsJewotKwkwLAot KwkwLAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX3VwZGF0ZSwKLSsJYmFkX2ZpbmFs LAotKwlOVUxMLAotKwlOVUxMLAotKwlOVUxMLAotKwkwLAotKwl7MCwwLDAsMH0sCi0rCX07Ci0r Ci0rI2VuZGlmCi0rCi0gaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29u c3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCi0gCXsKLSAJRVZQX01EX0NUWF9jbGVhcl9m bGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0VW UF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQljdHgtPmRp Z2VzdCA9ICZiYWRfbWQ7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBj YW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBjb250ZXh0IG1h eSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAtMjAx LDYgKzI0MiwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCi0g I2VuZGlmCi0gCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQotIAkJewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSkKLSsJCQl7Ci0rCQkJaWYgKCEodHlwZS0+ZmxhZ3Mg JiBFVlBfTURfRkxBR19GSVBTKSAKLSsJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQkJewotKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VT VElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSsJCQkJY3R4LT5kaWdlc3QgPSAm YmFkX21kOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsjZW5kaWYKLSAJCWlmIChj dHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCi0gCQkJT1BFTlNTTF9mcmVlKGN0 eC0+bWRfZGF0YSk7Ci0gCQljdHgtPmRpZ2VzdD10eXBlOwotQEAgLTIyOSwyNiArMjgyLDE1IEBA IHNraXBfdG9faW5pdDoKLSAJCX0KLSAJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf Tk9fSU5JVCkKLSAJCXJldHVybiAxOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNf bW9kZSgpKQotLQkJewotLQkJaWYgKEZJUFNfZGlnZXN0aW5pdChjdHgsIHR5cGUpKQotLQkJCXJl dHVybiAxOwotLQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7Ci0tCQljdHgtPm1kX2RhdGEg PSBOVUxMOwotLQkJcmV0dXJuIDA7Ci0tCQl9Ci0tI2VuZGlmCi0gCXJldHVybiBjdHgtPmRpZ2Vz dC0+aW5pdChjdHgpOwotIAl9Ci0gCi0gaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAq Y3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCi0gCXsKLSAjaWZkZWYgT1BFTlNT TF9GSVBTCi0tCXJldHVybiBGSVBTX2RpZ2VzdHVwZGF0ZShjdHgsIGRhdGEsIGNvdW50KTsKLS0j ZWxzZQotLQlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEsY291bnQpOwotKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7Ci0gI2VuZGlmCi0rCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3Vu dCk7Ci0gCX0KLSAKLSAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMg YW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KLUBAIC0yNjMsMTAgKzMwNSwxMSBA QCBpbnQgRVZQX0RpZ2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zCi0gLyogVGhlIGNhbGxl ciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBj b250ZXh0ICovCi0gaW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9G SVBTCi0tCXJldHVybiBGSVBTX2RpZ2VzdGZpbmFsKGN0eCwgbWQsIHNpemUpOwotLSNlbHNlCi0g CWludCByZXQ7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 Ci0rI2VuZGlmCi0rCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVW UF9NQVhfTURfU0laRSk7Ci0gCXJldD1jdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LG1kKTsKLSAJaWYg KHNpemUgIT0gTlVMTCkKLUBAIC0yNzgsNyArMzIxLDYgQEAgaW50IEVWUF9EaWdlc3RGaW5hbF9l eChFVlBfTURfQ1RYICpjdHgsCi0gCQl9Ci0gCW1lbXNldChjdHgtPm1kX2RhdGEsMCxjdHgtPmRp Z2VzdC0+Y3R4X3NpemUpOwotIAlyZXR1cm4gcmV0OwotLSNlbmRpZgotIAl9Ci0gCi0gaW50IEVW UF9NRF9DVFhfY29weShFVlBfTURfQ1RYICpvdXQsIGNvbnN0IEVWUF9NRF9DVFggKmluKQotQEAg LTM3Miw3ICs0MTQsNiBAQCB2b2lkIEVWUF9NRF9DVFhfZGVzdHJveShFVlBfTURfQ1RYICpjdHgp Ci0gLyogVGhpcyBjYWxsIGZyZWVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRl eHQgKi8KLSBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKLSAJewotLSNp Zm5kZWYgT1BFTlNTTF9GSVBTCi0gCS8qIERvbid0IGFzc3VtZSBjdHgtPm1kX2RhdGEgd2FzIGNs ZWFuZWQgaW4gRVZQX0RpZ2VzdF9GaW5hbCwKLSAJICogYmVjYXVzZSBzb21ldGltZXMgb25seSBj b3BpZXMgb2YgdGhlIGNvbnRleHQgYXJlIGV2ZXIgZmluYWxpc2VkLgotIAkgKi8KLUBAIC0zODUs NyArNDI2LDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCi0gCQlP UEVOU1NMX2NsZWFuc2UoY3R4LT5tZF9kYXRhLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Ci0gCQlP UEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLSAJCX0KLS0jZW5kaWYKLSAJaWYgKGN0eC0+cGN0 eCkKLSAJCUVWUF9QS0VZX0NUWF9mcmVlKGN0eC0+cGN0eCk7Ci0gI2lmbmRlZiBPUEVOU1NMX05P X0VOR0lORQotQEAgLTM5NCw5ICs0MzQsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9N RF9DVFggKmN0eCkKLSAJCSAqIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHdlIGhlbGQgZm9yIHRoaXMg cmVhc29uLiAqLwotIAkJRU5HSU5FX2ZpbmlzaChjdHgtPmVuZ2luZSk7Ci0gI2VuZGlmCi0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLQlGSVBTX21kX2N0eF9jbGVhbnVwKGN0eCk7Ci0tI2VuZGlmCi0g CW1lbXNldChjdHgsJ1wwJyxzaXplb2YgKmN0eCk7Ci0gCi0gCXJldHVybiAxOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2V2cC9lX2Flcy5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9lX2Flcy5jLmZp cHMJMjAxMS0xMS0xNSAxMzoxOTo1Ni4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTE3NjkxMDMgKzAyMDAK LUBAIC01Niw3ICs1Niw2IEBACi0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2Flcy5oPgotICNpbmNsdWRlICJldnBfbG9jbC5oIgotLSNpZm5kZWYgT1BFTlNTTF9GSVBT Ci0gI2luY2x1ZGUgIm1vZGVzX2xjbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAK LUBAIC03MTYsNyArNzE1LDcgQEAgc3RhdGljIGludCBhZXNfZ2NtX2N0cmwoRVZQX0NJUEhFUl9D VFggKgotIAkJaWYgKGFyZyA8PSAwKQotIAkJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0JCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVW UF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0gCQkJCQkJICYmIGFyZyA8IDEyKQotIAkJCXJl dHVybiAwOwotICNlbmRpZgotQEAgLTExMjgsNyArMTEyNyw3IEBAIHN0YXRpYyBpbnQgYWVzX3h0 c19jaXBoZXIoRVZQX0NJUEhFUl9DVFgKLSAJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSAJLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICovCi0tCWlmIChGSVBTX21vZHVsZV9t b2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYK LSsJaWYgKEZJUFNfbW9kZSgpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpICYmCi0gCQkJKGxlbiA+ICgxVUw8PDIwKSoxNikpCi0gCQl7Ci0gCQlFVlBlcnIo RVZQX0ZfQUVTX1hUU19DSVBIRVIsIEVWUF9SX1RPT19MQVJHRSk7Ci1AQCAtMTMxMCw0ICsxMzA5 LDMgQEAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDE5MiwxLDEyLGNjbQotIEJMT0NLX0NJ UEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20sQ0NNLEVWUF9DSVBIX0ZMQUdfRklQU3xD VVNUT01fRkxBR1MpCi0gCi0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9lX2Rl czMuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcwkyMDExLTA1 LTI5IDAxOjAxOjI2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9l dnAvZV9kZXMzLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTI3NjkxMjUgKzAyMDAKLUBAIC02NSw4 ICs2NSw2IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0tCi0gc3RhdGljIGludCBkZXNfZWRl X2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwK LSAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50IGVuYyk7Ci0gCi1AQCAtMjA4LDkg KzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiOF9jaXBoZXIoRVZQX0NJUEgKLSAgICAg fQotIAotIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLCBOSURfZGVzX2Vk ZSwgOCwgMTYsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlX2luaXRfa2V5 LCBOVUxMLCAKLS0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkJZGVzX2VkZV9pbml0X2tleSwKLSsJCQlOVUxMLCBO VUxMLCBOVUxMLAotIAkJCWRlczNfY3RybCkKLSAKLSAjZGVmaW5lIGRlc19lZGUzX2NmYjY0X2Np cGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgotQEAgLTIxOSwyMSArMjE3LDIxIEBAIEJMT0NLX0NJ UEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLAotICNkZWZpbmUgZGVzX2VkZTNfZWNiX2Np cGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywg REVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JB TkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRfYXNu MV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8 RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRlc19l ZGUzX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAot IEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywy NCw4LDEsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxM LAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dl dF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9D SVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAg ICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhF Ul9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDgsCi0tCQkg ICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBF VlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAot KwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVM TCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIHN0YXRpYyBpbnQgZGVzX2VkZV9pbml0 X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi1AQCAt MzEzLDQgKzMxMSwzIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlMyh2b2lkKQotIAly ZXR1cm4gJmRlc19lZGUzX2VjYjsKLSB9Ci0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2V2cC9lX251bGwuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZV9udWxsLmMuZmlw cwkyMDExLTA2LTIwIDIyOjAwOjEwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9ldnAvZV9udWxsLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTI3NjkxMjUgKzAyMDAK LUBAIC02MSw4ICs2MSw2IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0tCi0gc3RhdGlj IGludCBudWxsX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwKLSAJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50IGVuYyk7Ci0gc3RhdGljIGlu dCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi1A QCAtNzEsNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBuX2NpcGhlcj0KLSAJewot IAlOSURfdW5kZWYsCi0gCTEsMCwwLAotLQkwLAotKwlFVlBfQ0lQSF9GTEFHX0ZJUFMsCi0gCW51 bGxfaW5pdF9rZXksCi0gCW51bGxfY2lwaGVyLAotIAlOVUxMLAotQEAgLTEwMSw0ICs5OSwzIEBA IHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmMKLSAJCW1lbWNweSgoY2hh ciAqKW91dCwoY29uc3QgY2hhciAqKWluLGlubCk7Ci0gCXJldHVybiAxOwotIAl9Ci0tI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2V2cC9ldnBfZW5jLmMuZmlwcwkyMDEyLTA0LTIwIDAyOjA3OjQ4LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTItMDQtMjYgMTg6MDI6 MjUuNDE5ODIzMjc2ICswMjAwCi1AQCAtNjksMTcgKzY5LDU4IEBACi0gI2VuZGlmCi0gI2luY2x1 ZGUgImV2cF9sb2NsLmgiCi0gCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSNkZWZpbmUgTV9kb19j aXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIEZJUFNfY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQot LSNlbHNlCi0gI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgY3R4LT5jaXBo ZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKLS0jZW5kaWYKLSAKLSAKLSBjb25zdCBj aGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHBy b2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJ UFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBiYWRf aW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCi0rCXsgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZG9fY2lw aGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkgY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0rCXsgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KLSsKLSsvKiBOQjogbm8gY2xlYW51cCBi ZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsKLStzdGF0aWMgaW50 IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLSsJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Ci0rc3RhdGlj IGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0r CXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0 YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcs IHZvaWQgKnB0cikKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVy biAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KLSsJewotKwkw LAotKwkwLAotKwkwLAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX2RvX2NpcGhlciwK LSsJTlVMTCwKLSsJMCwKLSsJYmFkX3NldF9hc24xLAotKwliYWRfZ2V0X2FzbjEsCi0rCWJhZF9j dHJsLAotKwlOVUxMCi0rCX07Ci0rCi0rI2VuZGlmCi0rCi0gdm9pZCBFVlBfQ0lQSEVSX0NUWF9p bml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBf Q0lQSEVSX0NUWCkpOwotIAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLwotIAl9Ci1AQCAtMTExLDYg KzE1MiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gCQkJ ZW5jID0gMTsKLSAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4 LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotICNp Zm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAi SW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0aGlzIGNv bnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcK LUBAIC0xNjksMTAgKzIxOCw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NU WCAqY3QKLSAJCQljdHgtPmVuZ2luZSA9IE5VTEw7Ci0gI2VuZGlmCi0gCi0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX2NpcGhlcmluaXQo Y3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7Ci0tI2VuZGlmCi0gCQljdHgtPmNpcGhlcj1jaXBo ZXI7Ci0gCQlpZiAoY3R4LT5jaXBoZXItPmN0eF9zaXplKQotIAkJCXsKLUBAIC0yMDYsMTAgKzI1 MSw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAjaWZuZGVm IE9QRU5TU0xfTk9fRU5HSU5FCi0gc2tpcF90b19pbml0OgotICNlbmRpZgotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChj dHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKLS0jZW5kaWYKLSAJLyogd2UgYXNzdW1lIGJsb2Nr IHNpemUgaXMgYSBwb3dlciBvZiAyIGluICpjcnlwdFVwZGF0ZSAqLwotIAlPUEVOU1NMX2Fzc2Vy dChjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSAxCi0gCSAgICB8fCBjdHgtPmNpcGhlci0+Ymxv Y2tfc2l6ZSA9PSA4Ci1AQCAtMjQ5LDYgKzI5MCwyMiBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0g CX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBm dXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNvIG9ubHkg Y2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwotKwlpZiAo a2V5ICYmIEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYg RVZQX0NJUEhfRkxBR19GSVBTKQotKwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19O T05fRklQU19BTExPVykpCi0rCQkJewotKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9F WCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBo ZXI7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZihrZXkgfHwg KGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0gCQlp ZighY3R4LT5jaXBoZXItPmluaXQoY3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJfQotQEAg LTU2OCw3ICs2MjUsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQX0NJUEhFUl9DVFgK LSAKLSBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKLSAJewot LSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0gCWlmIChjLT5jaXBoZXIgIT0gTlVMTCkKLSAJCXsKLSAJ CWlmKGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVyLT5jbGVhbnVwKGMpKQotQEAgLTU3 OSwxNiArNjM1LDEyIEBAIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1QK LSAJCX0KLSAJaWYgKGMtPmNpcGhlcl9kYXRhKQotIAkJT1BFTlNTTF9mcmVlKGMtPmNpcGhlcl9k YXRhKTsKLS0jZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCWlmIChjLT5lbmdp bmUpCi0gCQkvKiBUaGUgRVZQX0NJUEhFUiB3ZSB1c2VkIGJlbG9uZ3MgdG8gYW4gRU5HSU5FLCBy ZWxlYXNlIHRoZQotIAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyBy ZWFzb24uICovCi0gCQlFTkdJTkVfZmluaXNoKGMtPmVuZ2luZSk7Ci0gI2VuZGlmCi0tI2lmZGVm IE9QRU5TU0xfRklQUwotLQlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cChjKTsKLS0jZW5kaWYKLSAJ bWVtc2V0KGMsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAJcmV0dXJuIDE7Ci0gCX0KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwLmguZmlwcyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXZwL2V2cC5oCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9ldnAuaC5m aXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMTI4NzYzMzU3ICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2V2cC9ldnAuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5NDc2OTE2OCArMDIwMAot QEAgLTc1LDYgKzc1LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0gI2VuZGlmCi0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5k aWYKLSsKLSAvKgotICNkZWZpbmUgRVZQX1JDMl9LRVlfU0laRQkJMTYKLSAjZGVmaW5lIEVWUF9S QzRfS0VZX1NJWkUJCTE2Ci1AQCAtMjcyLDEwICsyNzYsNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9z dAotIAkJCQkJCSogY2xlYW5lZCAqLwotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNFCQkw eDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2RhdGEKLSAJCQkJCQkqIGluIEVWUF9NRF9D VFhfY2xlYW51cCAqLwotLS8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGluIDEu MC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQotLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBy ZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4KLS0gKi8KLS0KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5vbiBG SVBTIGRpZ2VzdAotIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAqLwotIAotQEAgLTI4Nyw2ICsyODcs MTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURf UEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLwotKyNkZWZpbmUgTV9FVlBfTURfQ1RYX0ZM QUdfUFNTX1NBTFQoY3R4KSBcCi0rCQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBzZWVk IGxlbmd0aCAqLwotKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJLyog c2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KLSsjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1Nf TVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KLSAKLSAjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9k YXRhICovCi0gCi1AQCAtMzM4LDE1ICszNDIsMTUgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QKLSAv KiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlFVlBf Q0lQSF9SQU5EX0tFWQkJMHgyMDAKLSAvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBj b3B5aW5nIGxvZ2ljICovCi0tI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwCi0r I2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwMAotIC8qIEFsbG93IHVzZSBkZWZh dWx0IEFTTjEgZ2V0L3NldCBpdiAqLwotICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xCTB4MTAwMAotIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9k ZSBvbmx5ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUwkweDIwMDAKLSAv KiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCi0tI2RlZmluZQkJRVZQ X0NJUEhfRkxBR19GSVBTCQkweDQwMDAKLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4 NDAwCi0gLyogQWxsb3cgbm9uIEZJUFMgY2lwaGVyIGluIEZJUFMgbW9kZSAqLwotLSNkZWZpbmUJ CUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAwCi0rI2RlZmluZQkJRVZQX0NJUEhf RkxBR19OT05fRklQU19BTExPVwkweDgwMAotIC8qIENpcGhlciBoYW5kbGVzIGFueSBhbmQgYWxs IHBhZGRpbmcgbG9naWMgYXMgd2VsbAotICAqIGFzIGZpbmFsaXNhdGlvbi4KLSAgKi8KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2V2cC9ldnBfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2V2 cF9saWIuYy5maXBzCTIwMTEtMDUtMjkgMDQ6MzI6MDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9ldnBfbGliLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTQ3 NjkxNjggKzAyMDAKLUBAIC0xOTAsNiArMTkwLDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2Nr X3NpemUoY29uc3QgRVZQXwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGlu dCBpbmwpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixp bmwpOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2V2cF9sb2Ns LmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjEx ODc2MzEzOCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwX2xvY2wuaAky MDEyLTA0LTI2IDE4OjAwOjUxLjM5NTc2OTE5MCArMDIwMAotQEAgLTI1OCwxMCArMjU4LDkgQEAg Y29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAotIAlCTE9DS19DSVBIRVJf ZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2NoZWQp IFwKLSAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwK LSAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNi aXRzLCBcCi0tCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAotLQkJCSAgICAg RVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAotLQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9p diwgXAotLQkJCSAgICAgTlVMTCkKLSsJCQkgICAgIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04x LCBcCi0rCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkK LSsKLSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0Ci0gCXsKLUBAIC0zNjcsMTEgKzM2Niw2IEBA IGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVmaW5lIE1EMl9J bml0CXByaXZhdGVfTUQyX0luaXQKLSAjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5p dAotICNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAotLSNkZWZpbmUgU0hBMV9Jbml0 CXByaXZhdGVfU0hBMV9Jbml0Ci0tI2RlZmluZSBTSEEyMjRfSW5pdAlwcml2YXRlX1NIQTIyNF9J bml0Ci0tI2RlZmluZSBTSEEyNTZfSW5pdAlwcml2YXRlX1NIQTI1Nl9Jbml0Ci0tI2RlZmluZSBT SEEzODRfSW5pdAlwcml2YXRlX1NIQTM4NF9Jbml0Ci0tI2RlZmluZSBTSEE1MTJfSW5pdAlwcml2 YXRlX1NIQTUxMl9Jbml0Ci0gCi0gI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tl eQotICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMzc5LDcg KzM3Myw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVm aW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQotICNkZWZpbmUgUkMyX3NldF9r ZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRf c2V0X2tleQotLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkCi0gI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFf c2V0X2tleQotIAotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9N YWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvTWFrZWZpbGUKLS0tLSBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMJMjAxMi0wNC0yNiAxMjo0MjoxOS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL01ha2VmaWxlCTIw MTItMDQtMjYgMTg6MDA6NTEuMzk1NzY5MTkwICswMjAwCi1AQCAtMjgsNyArMjgsNyBAQCBMSUJT UkM9IGVuY29kZS5jIGRpZ2VzdC5jIGV2cF9lbmMuYyBldnBfCi0gCWJpb19tZC5jIGJpb19iNjQu YyBiaW9fZW5jLmMgZXZwX2Vyci5jIGVfbnVsbC5jIFwKLSAJY19hbGwuYyBjX2FsbGMuYyBjX2Fs bGQuYyBldnBfbGliLmMgYmlvX29rLmMgXAotIAlldnBfcGtleS5jIGV2cF9wYmUuYyBwNV9jcnB0 LmMgcDVfY3JwdDIuYyBcCi0tCWVfb2xkLmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0aF9n bi5jIG1fc2lndmVyLmMgZXZwX2ZpcHMuYwlcCi0rCWVfb2xkLmMgcG1ldGhfbGliLmMgcG1ldGhf Zm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMgXAotIAllX2Flc19jYmNfaG1hY19zaGExLmMgZV9y YzRfaG1hY19tZDUuYwotIAotIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2 cF9rZXkubyBldnBfYWNuZi5vIFwKLUBAIC00MSw3ICs0MSw3IEBAIExJQk9CSj0JZW5jb2RlLm8g ZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF8KLSAJYmlvX21kLm8gYmlvX2I2NC5vIGJpb19lbmMubyBl dnBfZXJyLm8gZV9udWxsLm8gXAotIAljX2FsbC5vIGNfYWxsYy5vIGNfYWxsZC5vIGV2cF9saWIu byBiaW9fb2subyBcCi0gCWV2cF9wa2V5Lm8gZXZwX3BiZS5vIHA1X2NycHQubyBwNV9jcnB0Mi5v IFwKLS0JZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIu byBldnBfZmlwcy5vIFwKLSsJZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRoX2du Lm8gbV9zaWd2ZXIubyBcCi0gCWVfYWVzX2NiY19obWFjX3NoYTEubyBlX3JjNF9obWFjX21kNS5v Ci0gCi0gU1JDPSAkKExJQlNSQykKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAv bV9kc3MxLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL21fZHNzMS5jCi0tLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzCTIwMTEtMDYtMDEgMTc6MTE6MDAu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9tX2RzczEuYwky MDEyLTA0LTI2IDE4OjAwOjUxLjM5Njc2OTIxMiArMDIwMAotQEAgLTY4LDggKzY4LDYgQEAKLSAj aW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjZW5kaWYKLSAKLS0jaWZuZGVmIE9QRU5TU0xfRklQ UyAKLS0KLSBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBTSEEx X0luaXQoY3R4LT5tZF9kYXRhKTsgfQotIAotQEAgLTg0LDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0 IEVWUF9NRCBkc3MxX21kPQotIAlOSURfZHNhLAotIAlOSURfZHNhV2l0aFNIQTEsCi0gCVNIQV9E SUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKLSsJRVZQX01EX0ZMQUdf UEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAotIAlmaW5h bCwKLUBAIC0xMDAsNCArOTgsMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9kc3MxKHZvaWQpCi0gCXJl dHVybigmZHNzMV9tZCk7Ci0gCX0KLSAjZW5kaWYKLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAv bV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzCTIwMTEt MDYtMDEgMTc6MTE6MDAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2V2cC9tX2Rzcy5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk2NzY5MjEyICswMjAwCi1AQCAtNjYs NyArNjYsNiBAQAotICNlbmRpZgotIAotICNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLS0jaWZuZGVm IE9QRU5TU0xfRklQUwotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsg cmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci1AQCAtODIsNyArODEsNyBAQCBzdGF0 aWMgY29uc3QgRVZQX01EIGRzYV9tZD0KLSAJTklEX2RzYVdpdGhTSEEsCi0gCU5JRF9kc2FXaXRo U0hBLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0r CUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVw ZGF0ZSwKLSAJZmluYWwsCi1AQCAtOTgsNCArOTcsMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9kc3Mo dm9pZCkKLSAJcmV0dXJuKCZkc2FfbWQpOwotIAl9Ci0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZXZwL21fbWQyLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL21fbWQyLmMu ZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5Njc2OTIxMiArMDIw MAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3Rh dGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gTUQyX0luaXQoY3R4LT5t ZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9tX3NoYTEuYy5m aXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvbV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxMS0wNS0yOSAwMTowMToyNi4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTItMDQtMjYg MTg6MDA6NTEuMzk2NzY5MjEyICswMjAwCi1AQCAtNTksOCArNTksNiBAQAotICNpbmNsdWRlIDxz dGRpby5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBT Ci0tCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQQotIAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgotQEAgLTg1LDcgKzgzLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kPQotIAlOSURf c2hhMSwKLSAJTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBX0RJR0VTVF9MRU5HVEgs Ci0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRh dGUsCi0gCWZpbmFsLAotQEAgLTEyMiw3ICsxMjEsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNo YTIyNF9tZD0KLSAJTklEX3NoYTIyNCwKLSAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAot IAlTSEEyMjRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFH X0ZJUFMsCi0gCWluaXQyMjQsCi0gCXVwZGF0ZTI1NiwKLSAJZmluYWwyNTYsCi1AQCAtMTQxLDcg KzE0MSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2X21kPQotIAlOSURfc2hhMjU2LAot IAlOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAot LQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdf RElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDI1NiwKLSAJdXBk YXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNzIsNyArMTczLDggQEAgc3RhdGljIGNvbnN0IEVW UF9NRCBzaGEzODRfbWQ9Ci0gCU5JRF9zaGEzODQsCi0gCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlw dGlvbiwKLSAJU0hBMzg0X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9E X1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BL RVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBf TURfRkxBR19GSVBTLAotIAlpbml0Mzg0LAotIAl1cGRhdGU1MTIsCi0gCWZpbmFsNTEyLAotQEAg LTE5MSw3ICsxOTMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZD0KLSAJTklEX3No YTUxMiwKLSAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEE1MTJfRElHRVNUX0xF TkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9N RF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQ1MTIs Ci0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1AQCAtMjA2LDQgKzIwOSwzIEBAIGNvbnN0IEVW UF9NRCAqRVZQX3NoYTUxMih2b2lkKQotIAl7IHJldHVybigmc2hhNTEyX21kKTsgfQotICNlbmRp ZgkvKiBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIgKi8KLSAKLS0jZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vZXZwL3Bfc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9wX3NpZ24uYy5m aXBzCTIwMTEtMDYtMDkgMTg6MDI6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5Njc2OTIxMiArMDIw MAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotIAotICNpZmRlZiB1bmRlZgotIHZvaWQgRVZQX1NpZ25Jbml0 KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQotQEAgLTEwMyw2ICsxMDQsMjIgQEAgaW50 IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZwotIAkJCWdvdG8gZXJyOwotIAkJ aWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0g MCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BB RF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0Ff WDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlm IChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJ TkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxB R19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1Nf TURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9N RF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290 byBlcnI7Ci0rCQkJfQotIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1w LCBtLCBtX2xlbikgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSAJCSpzaWdsZW4gPSBzbHRtcDsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9ldnAvcF92ZXJpZnkuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9l dnAvcF92ZXJpZnkuYy5maXBzCTIwMTEtMDYtMDkgMTg6MDI6MzkuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTItMDQtMjYgMTg6MDA6 NTEuMzk2NzY5MjEyICswMjAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNz bC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0gaW50IEVWUF9WZXJpZnlG aW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKLSAJICAg ICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKLUBAIC04OCw2ICs4OSwyMiBA QCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCi0gCQkJZ290byBlcnI7 Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0 KSA8PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgs IFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKLSsJCQl7Ci0rCQkJaW50IHNhbHRsZW47Ci0r CQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1Nf UEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NU WF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFH X1BTU19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0xOwotKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0g RVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJCQlzYWx0bGVuID0gLTI7Ci0rCQkJaWYgKEVW UF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKwkJ CQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYs IHNpZ2xlbiwgbSwgbV9sZW4pOwotIAkJZXJyOgotIAkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5j LmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCi0tLS0g b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMJMjAxMi0w NC0yNiAxODowMDo1MS4zOTc3NjkyMzQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTc3NjkyMzQgKzAy MDAKLUBAIC0wLDAgKzEsOTM5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg 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 ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIE5JU1QgQUVTIEFs Z29yaXRobSBWYWxpZGF0aW9uIFN1aXRlCi0rICBUZXN0IFByb2dyYW0KLSsKLSsgIERvbmF0ZWQg dG8gT3BlblNTTCBieToKLSsgIFYtT05FIENvcnBvcmF0aW9uCi0rICAyMDI1MCBDZW50dXJ5IEJs dmQsIFN1aXRlIDMwMAotKyAgR2VybWFudG93biwgTUQgMjA4NzQKLSsgIFUuUy5BLgotKyAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0 eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBB RVMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rI2RlZmlu ZSBBRVNfQkxPQ0tfU0laRSAxNgotKwotKyNkZWZpbmUgVkVSQk9TRSAwCi0rCi0rLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0raW50IEFFU1Rl c3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKLSsJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1 bnNpZ25lZCBjaGFyICphS2V5LCAKLSsJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAotKwkgICAg aW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkgICAgdW5zaWduZWQg Y2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKQotKyAg ICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7Ci0rCi0rICAgIGlmIChz dHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJ CXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7Ci0rCQlicmVh azsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7Ci0rCQli cmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7Ci0r CQlicmVhazsKLSsJCX0KLSsKLSsJfQotKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAi RUNCIikgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4Ogot KwkJY2lwaGVyID0gRVZQX2Flc18xMjhfZWNiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTky OgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfZWNiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2Ug MjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfZWNiKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJ fQotKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCMTI4IikgPT0gMCkKLSsJewot Kwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Fl c18xMjhfY2ZiMTI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0g RVZQX2Flc18xOTJfY2ZiMTI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lw aGVyID0gRVZQX2Flc18yNTZfY2ZiMTI4KCk7Ci0rCQlicmVhazsKLSsJCX0KLSsKLSsJfQotKyAg ICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCi0rCXsKLSsJc3dp dGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4 X29mYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNf MTkyX29mYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9h ZXNfMjU2X29mYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZighc3RyY2Fz ZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2Fz ZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxKCk7Ci0rCQlicmVhazsKLSsKLSsJ CWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMSgpOwotKwkJYnJlYWs7Ci0r Ci0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEoKTsKLSsJCWJyZWFr OwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKLSsJ ewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQ X2Flc18xMjhfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMTkyX2NmYjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBo ZXIgPSBFVlBfYWVzXzI1Nl9jZmI4KCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNl Ci0rCXsKLSsJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCXJldHVybiAw OwotKwl9Ci0rICAgIGlmICghY2lwaGVyKQotKwl7Ci0rCXByaW50ZigiSW52YWxpZCBrZXkgc2l6 ZTogJWRcbiIsIGFrZXlzeik7Ci0rCXJldHVybiAwOyAKLSsJfQotKyAgICBpZiAoRVZQX0NpcGhl ckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKLSsJcmV0 dXJuIDA7Ci0rICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCU1fRVZQX0NJUEhF Ul9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7Ci0rICAgIGlm IChkaXIpCi0rCQlFVlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOwot KwllbHNlCi0rCQlFVlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwot KyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAi Q0lQSEVSVEVYVCJ9OwotK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZC MSIsIkNGQjgiLCJDRkIxMjgifTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENG QjgsIENGQjEyOH07Ci0rZW51bSBYQ3J5cHQge1hERUNSWVBULCBYRU5DUllQVH07Ci0rCi0rLyo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0rLyogIE1vbnRlIENhcmxvIFRlc3RzICAg ICAgICAgICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rLyojZGVm aW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICgoYiklOCkpJjEpKi8KLSsvKiNkZWZpbmUgc2Io YSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoKGIpJTgpKSl8KCEhKHYpIDw8 ICgoYiklOCkpKSovCi0rCi0rI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoNy0oYikl OCkpJjEpCi0rI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8 ICg3LShiKSU4KSkpfCghISh2KSA8PCAoNy0oYiklOCkpKQotKwotK2ludCBkb19tY3QoY2hhciAq YW1vZGUsIAotKwkgICBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LHVuc2lnbmVkIGNo YXIgKmlWZWMsCi0rCSAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCi0r CSAgIEZJTEUgKnJmcCkKLSsgICAgewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXlbMTAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbMTAxXVtBRVNfQkxPQ0tf U0laRV07Ci0rICAgIHVuc2lnbmVkIGNoYXIgcHRleHRbMTAwMV1bMzJdOwotKyAgICB1bnNpZ25l ZCBjaGFyIGN0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzY0 KzRdOwotKyAgICBpbnQgaSwgaiwgbiwgbjEsIG4yOwotKyAgICBpbnQgaW1vZGUgPSAwLCBua2V5 c3ogPSBha2V5c3ovODsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBpZiAobGVuID4gMzIpCi0rCXsKLSsJcHJpbnRmKCJc bj4+Pj4gTGVuZ3RoIGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8PDxcblxuIiwgCi0rCSAgICAgICBh bW9kZSwgYWtleXN6KTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGZvciAoaW1vZGUgPSAwOyBp bW9kZSA8IDY7ICsraW1vZGUpCi0rCWlmIChzdHJjbXAoYW1vZGUsIHRfbW9kZVtpbW9kZV0pID09 IDApCi0rCSAgICBicmVhazsKLSsgICAgaWYgKGltb2RlID09IDYpCi0rCXsgCi0rCXByaW50Zigi VW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKwot KyAgICBtZW1jcHkoa2V5WzBdLCBhS2V5LCBua2V5c3opOwotKyAgICBpZiAoaVZlYykKLSsJbWVt Y3B5KGl2WzBdLCBpVmVjLCBBRVNfQkxPQ0tfU0laRSk7Ci0rICAgIGlmIChkaXIgPT0gWEVOQ1JZ UFQpCi0rCW1lbWNweShwdGV4dFswXSwgdGV4dCwgbGVuKTsKLSsgICAgZWxzZQotKwltZW1jcHko Y3RleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkKLSsJ ewotKwkvKiBwcmludGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7ICovCi0rCWlmIChpID4gMCkKLSsJ ICAgIHsKLSsJICAgIGZwcmludGYocmZwLCJDT1VOVCA9ICVkXG4iLGkpOwotKwkgICAgT3V0cHV0 VmFsdWUoIktFWSIsa2V5W2ldLG5rZXlzeixyZnAsMCk7Ci0rCSAgICBpZiAoaW1vZGUgIT0gRUNC KSAgLyogRUNCICovCi0rCQlPdXRwdXRWYWx1ZSgiSVYiLGl2W2ldLEFFU19CTE9DS19TSVpFLHJm cCwwKTsKLSsJICAgIC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCi0rCSAgICBP dXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRbMF0gOiBjdGV4dFswXSxsZW4scmZw LAotKwkJCWltb2RlID09IENGQjEpOwotKwkgICAgfQotKwlmb3IgKGogPSAwOyBqIDwgMTAwMDsg KytqKQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNC OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7IC8qIHNldCB1cCBlbmNyeXB0aW9uICovCi0rCQkg ICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIE5VTEwsIAotKwkJ CQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0W2pd LCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCW1lbWNw eShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0 ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0r CQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBj dGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pd LCBsZW4pOwotKwkJCX0KLSsJCSAgICBlbHNlCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwg cHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtq XSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCi0rCSAgICBjYXNlIENCQzoK LSsJICAgIGNhc2UgT0ZCOiAgCi0rCSAgICBjYXNlIENGQjEyODoKLSsJCWlmIChqID09IDApCi0r CQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ld LCBpdltpXSwgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0r CQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZ UFQpCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJ CQltZW1jcHkoY3RleHRbaisxXSwgaXZbaV0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVy KCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkocHRleHRbaisxXSwg Y3RleHRbai0xXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lw aGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisx XSwgcHRleHRbai0xXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCi0rCSAg ICBjYXNlIENGQjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNU ZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRpciwgIC8q IDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwg bGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVO Q1JZUFQpCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0r CQkgICAgZWxzZQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4p OwotKwkJICAgIH0KLSsJCWlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJICAgIGlm IChqIDwgMTYpCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAg ICBlbHNlCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAg IH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGogPCAxNikKLSsJCQltZW1jcHkoY3Rl eHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkoY3RleHRb aisxXSwgcHRleHRbai0xNl0sIGxlbik7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCi0rCSAgICBj YXNlIENGQjE6Ci0rCQlpZihqID09IDApCi0rCQkgICAgewotKyNpZiAwCi0rCQkgICAgLyogY29t cGVuc2F0ZSBmb3Igd3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1dCBmaWxlICovCi0rCQkgICAgaWYo aSA9PSAwKQotKwkJCXB0ZXh0WzBdWzBdPDw9NzsKLSsjZW5kaWYKLSsJCSAgICByZXQgPSBBRVNU ZXN0KCZjdHgsYW1vZGUsYWtleXN6LGtleVtpXSxpdltpXSxkaXIsCi0rCQkJCXB0ZXh0W2pdLCBj dGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0s IGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0 W2pdLCBsZW4pOwotKwotKwkJICAgIH0KLSsJCWlmKGRpciA9PSBYRU5DUllQVCkKLSsJCSAgICB7 Ci0rCQkgICAgaWYoaiA8IDEyOCkKLSsJCQlzYihwdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOwot KwkJICAgIGVsc2UKLSsJCQlzYihwdGV4dFtqKzFdLDAsZ2IoY3RleHRbai0xMjhdLDApKTsKLSsJ CSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmKGogPCAxMjgpCi0rCQkJc2IoY3Rl eHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAgICBlbHNlCi0rCQkJc2IoY3RleHRbaisxXSww LGdiKHB0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9 Ci0rCS0tajsgLyogcmVzZXQgdG8gbGFzdCBvZiByYW5nZSAqLwotKwkvKiBPdXRwdXQgQ2lwaGVy dGV4dCB8IFBsYWludGV4dCAqLwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLGRpciA/IGN0ZXh0 W2pdIDogcHRleHRbal0sbGVuLHJmcCwKLSsJCSAgICBpbW9kZSA9PSBDRkIxKTsKLSsJZnByaW50 ZihyZnAsICJcbiIpOyAgLyogYWRkIHNlcGFyYXRvciAqLwotKwotKwkvKiBDb21wdXRlIG5leHQg S0VZICovCi0rCWlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCSAgICB7Ci0rCSAgICBpZiAoaW1vZGUg PT0gQ0ZCOCkKLSsJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rb al0gKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwg LS1uMikKLSsJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0W2otbjJdWzBdOwotKwkJfQotKwkg ICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQotKwkJewotKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEg OyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKGN0 ZXh0W2otbjJdLDApKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXN3aXRjaCAoYWtleXN6KQotKwkJ ICAgIHsKLSsJCWNhc2UgMTI4OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqXSwg MTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAxOTI6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRl eHQsIGN0ZXh0W2otMV0rOCwgOCk7Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgY3RleHRb al0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMjU2OgotKwkJICAgIG1lbWNweShjaXBo ZXJ0ZXh0LCBjdGV4dFtqLTFdLCAxNik7Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIGN0 ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkgICAgfQotKwllbHNlCi0r CSAgICB7Ci0rCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKLSsJCXsgLyogY3QgPSBDVFtqLTE1XSB8 fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlz ei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKLSsJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IHB0 ZXh0W2otbjJdWzBdOwotKwkJfQotKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQotKwkJewot KwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKLSsJCSAg ICBzYihjaXBoZXJ0ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKLSsJCX0KLSsJICAgIGVsc2UK LSsJCXN3aXRjaCAoYWtleXN6KQotKwkJICAgIHsKLSsJCWNhc2UgMTI4OgotKwkJICAgIG1lbWNw eShjaXBoZXJ0ZXh0LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAxOTI6 Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0rOCwgOCk7Ci0rCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQrOCwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2Ug MjU2OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdLCAxNik7Ci0rCQkgICAg bWVtY3B5KGNpcGhlcnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQkg ICAgfQotKwkgICAgfQotKwkvKiBDb21wdXRlIG5leHQga2V5OiBLZXlbaSsxXSA9IEtleVtpXSB4 b3IgY3QgKi8KLSsJZm9yIChuID0gMDsgbiA8IG5rZXlzejsgKytuKQotKwkgICAga2V5W2krMV1b bl0gPSBrZXlbaV1bbl0gXiBjaXBoZXJ0ZXh0W25dOwotKwkKLSsJLyogQ29tcHV0ZSBuZXh0IElW IGFuZCB0ZXh0ICovCi0rCWlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCSAgICB7Ci0rCSAgICBzd2l0 Y2ggKGltb2RlKQotKwkJewotKwkgICAgY2FzZSBFQ0I6Ci0rCQltZW1jcHkocHRleHRbMF0sIGN0 ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0JDOgotKwkg ICAgY2FzZSBPRkI6Ci0rCSAgICBjYXNlIENGQjEyODoKLSsJCW1lbWNweShpdltpKzFdLCBjdGV4 dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqLTFdLCBB RVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCODoKLSsJCS8qIElWW2kr MV0gPSBjdCAqLwotKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIp Ci0rCQkgICAgaXZbaSsxXVtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJCXB0ZXh0WzBdWzBdID0g Y3RleHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0w LG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGl2W2krMV0sbjEsZ2Io Y3RleHRbai1uMl0sMCkpOwotKwkJcHRleHRbMF1bMF09Y3RleHRbai0xMjhdWzBdJjB4ODA7Ci0r CQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgc3dpdGNoIChp bW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtq XSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNh c2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgcHRleHRbal0s IEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNweShjdGV4dFswXSwgcHRleHRbai0xXSwgQUVTX0JM T0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQlmb3IgKG4xID0gMCwg bjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKLSsJCSAgICBpdltpKzFdW24xXSA9IHB0ZXh0 W2otbjJdWzBdOwotKwkJY3RleHRbMF1bMF0gPSBwdGV4dFtqLTE2XVswXTsKLSsJCWJyZWFrOwot KwkgICAgY2FzZSBDRkIxOgotKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0t bjIpCi0rCQkgICAgc2IoaXZbaSsxXSxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQljdGV4dFsw XVswXT1wdGV4dFtqLTEyOF1bMF0mMHg4MDsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwl9 Ci0rICAgIAotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rCi0rLyo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotKyAgIyBDb25maWcgaW5mbyBmb3Igdi1vbmUKLSsgICMgQUVTVlMgTU1UIHRl c3QgZGF0YSBmb3IgRUNCCi0rICAjIFN0YXRlIDogRW5jcnlwdCBhbmQgRGVjcnlwdAotKyAgIyBL ZXkgTGVuZ3RoIDogMjU2Ci0rICAjIEZyaSBBdWcgMzAgMDQ6MDc6MjIgUE0KLSsgIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBj aGFyICpyc3BmaWxlKQotKyAgICB7Ci0rICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOwotKyAg ICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKLSsgICAgY2hhciBpYnVmWzIwNDhdOwot KyAgICBjaGFyIHRidWZbMjA0OF07Ci0rICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7Ci0rICAg IGNoYXIgYWxnb1s4XSA9ICIiOwotKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7Ci0rICAgIGNoYXIg YXRlc3RbOF0gPSAiIjsKLSsgICAgaW50IGFrZXlzeiA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIg aVZlY1syMF0sIGFLZXlbNDBdOwotKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAw OwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKLSsgICAgdW5zaWduZWQgY2hh ciBjaXBoZXJ0ZXh0WzIwNDhdOwotKyAgICBjaGFyICpycDsKLSsgICAgRVZQX0NJUEhFUl9DVFgg Y3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBpZiAoIXJxZmls ZSB8fCAhKCpycWZpbGUpKQotKwl7Ci0rCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOwotKwlyZXR1 cm4gLTE7Ci0rCX0KLSsgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKLSsKLSsgICAgaWYgKChhZnAg PSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRmKCJDYW5ub3Qgb3BlbiBm aWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOwotKwlyZXR1 cm4gLTE7Ci0rCX0KLSsgICAgaWYgKCFyc3BmaWxlKQotKwl7Ci0rCXN0cmNweShyZm4sYWZuKTsK LSsJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlp ZiAoIXJwKQotKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKLSsjZW5kaWYKLSsJYXNzZXJ0 KHJwKTsKLSsJbWVtY3B5KHJwLCJyc3AiLDMpOwotKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7 Ci0rCW1lbWNweShycCwgIi5yc3AiLCA0KTsKLSsJcnNwZmlsZSA9IHJmbjsKLSsJfQotKyAgICBp ZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRmKCJD YW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJu bykpOwotKwlmY2xvc2UoYWZwKTsKLSsJYWZwID0gTlVMTDsKLSsJcmV0dXJuIC0xOwotKwl9Ci0r ICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5V TEwpCi0rCXsKLSsJdGlkeV9saW5lKHRidWYsIGlidWYpOwotKwlpbGVuID0gc3RybGVuKGlidWYp OwotKwkvKiAgICAgIHByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyAqLwotKwlz d2l0Y2ggKHN0ZXApCi0rCSAgICB7Ci0rCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KLSsJ ICAgIGlmIChpYnVmWzBdID09ICdcbicpCi0rCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLwotKwkJ aWYgKCgqYWxnbyA9PSAnXDAnKSB8fAotKwkJICAgICgqYW1vZGUgPT0gJ1wwJykgfHwKLSsJCSAg ICAoYWtleXN6ID09IDApKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIk1pc3NpbmcgQWxnb3Jp dGhtLCBNb2RlIG9yIEtleVNpemUgKCVzLyVzLyVkKVxuIiwKLSsJCQkgICBhbGdvLGFtb2RlLGFr ZXlzeik7Ci0rCQkgICAgZXJyID0gMTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJ ICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgKysgc3RlcDsKLSsJCSAgICB9Ci0rCQl9Ci0r CSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKLSsJCXsKLSsJCXByaW50ZigiSW52YWxpZCBw cmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxz ZQotKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCi0rCQljaGFyICp4cCwgKnBwID0gaWJ1Zisy OwotKwkJaW50IG47Ci0rCQlpZiAoYWtleXN6KQotKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQg dGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7Ci0rCQkgICAgZnBy aW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkg ICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgaWYgKHN0cm5jbXAocHAsICJB RVNWUyAiLCA2KSA9PSAwKQotKwkJCXsKLSsJCQlzdHJjcHkoYWxnbywgIkFFUyIpOwotKwkJCS8q IGdldCB0ZXN0IHR5cGUgKi8KLSsJCQlwcCArPSA2OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcp OwotKwkJCW4gPSB4cC1wcDsKLSsJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rb bl0gPSAnXDAnOwotKwkJCS8qIGdldCBtb2RlICovCi0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcp OyAvKiBnZXQgbW9kZSIgKi8KLSsJCQluID0gc3RybGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShh bW9kZSwgeHArMSwgbik7Ci0rCQkJYW1vZGVbbl0gPSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0g J1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJUZXN0ID0gJXMsIE1vZGUg PSAlc1xuIiwgYXRlc3QsIGFtb2RlKTsKLSsJCQl9Ci0rCQkgICAgZWxzZSBpZiAoc3RybmNhc2Vj bXAocHAsICJLZXkgTGVuZ3RoIDogIiwgMTMpID09IDApCi0rCQkJewotKwkJCWFrZXlzeiA9IGF0 b2kocHArMTMpOwotKwkJCWlmIChWRVJCT1NFKQotKwkJCQlwcmludGYoIktleSBzaXplID0gJWRc biIsIGFrZXlzeik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwlj YXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KLSsJICAgIGlmIChpYnVmWzBdID09 ICdbJykKLSsJCXsKLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQkrK3N0ZXA7Ci0rCQlpZiAoc3Ry bmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMTsKLSsJ CWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQotKwkJICAg IGRpciA9IDA7Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3 b3JkOiAlc1xuIiwgaWJ1Zik7Ci0rCQkgICAgZXJyID0gMTsKLSsJCSAgICB9Ci0rCQlicmVhazsK LSsJCX0KLSsJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlw cmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOwotKwkJYnJlYWs7Ci0r CQl9Ci0rCSAgICBlbHNlIAotKwkJc3RlcCA9IDI7Ci0rCi0rCWNhc2UgMjogLyogS0VZID0geHh4 eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0r CQlicmVhazsKLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCi0rCQli cmVhazsKLSsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiS0VZID0gIiwgNikgIT0gMCkK LSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7Ci0r CQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7 Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUo IktFWSIsIGFLZXksIGxlbik7Ci0rCQlpZiAoc3RyY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKLSsJ CSAgICB7Ci0rCQkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7Ci0rCQkgICAgc3Rl cCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCi0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgICsrc3RlcDsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDM6IC8qIElW ID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNt cChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4i KTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmlu KChjaGFyKilpYnVmKzUsIGlWZWMpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAg IHByaW50ZigiSW52YWxpZCBJVlxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwot KwkJICAgIH0KLSsJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKLSsJCXN0ZXAgPSAoZGly KT8gNDogNTsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9 IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAo aWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5n IFBMQUlOVEVYVFxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJ aW50IG5uID0gc3RybGVuKGlidWYrMTIpOwotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQot KwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKLSsJCWVsc2UKLSsJ CSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0r CQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7 Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlmIChsZW4gPj0g c2l6ZW9mKHBsYWludGV4dCkpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJm bG93XG4iKTsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQg Y2hhciopcGxhaW50ZXh0LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDAp ICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGlmKGRvX21jdChhbW9k ZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkgICAgICBkaXIsICh1bnNpZ25lZCBjaGFyKilw bGFpbnRleHQsIGxlbiwgCi0rCQkJICAgICAgcmZwKSA8IDApCi0rCQkJRVhJVCgxKTsKLSsJCSAg ICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUs IGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJICAgIE91 dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAo YW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVh azsKLSsKLSsJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEz KSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwot KwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJ ICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOwot KwkJZWxzZQotKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKLSsJCWlm IChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxu Iik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsKLSsJCVByaW50 VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhdGVz dCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAg IGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhlcnRl eHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIHJldCA9 IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAg LyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0 ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFy ICopcGxhaW50ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkg ICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA2OgotKwkg ICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1p c3NpbmcgdGVybWluYXRvclxuIik7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3Qs ICJNQ1QiKSAhPSAwKQotKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAq LwotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCX0KLSsJICAgIHN0ZXAgPSAxOwotKwkgICAgYnJl YWs7Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKHJmcCkKLSsJZmNsb3NlKHJmcCk7Ci0rICAgIGlm IChhZnApCi0rCWZjbG9zZShhZnApOwotKyAgICByZXR1cm4gZXJyOwotKyAgICB9Ci0rCi0rLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgUHJv Y2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAotKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2Ug bmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCi0rICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmll ZCBhczoKLSsgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQotKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3Bl Y2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKLSsgIFRoZSBkZWZhdWx0IGlz OiAtZCByZXEudHh0Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsgICAgewotKyAg ICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKLSsgICAgRklMRSAq ZnAgPSBOVUxMOwotKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKLSsgICAg aW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAg aWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCUVYSVQo MSk7Ci0rCX0KLSsjZW5kaWYKLSsgICAgaWYgKGFyZ2MgPiAxKQotKwl7Ci0rCWlmIChzdHJjYXNl Y21wKGFyZ3ZbMV0sICItZCIpID09IDApCi0rCSAgICB7Ci0rCSAgICBkX29wdCA9IDE7Ci0rCSAg ICB9Ci0rCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKLSsJICAgIHsK LSsJICAgIGZfb3B0ID0gMTsKLSsJICAgIGRfb3B0ID0gMDsKLSsJICAgIH0KLSsJZWxzZQotKwkg ICAgewotKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOwot KwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChhcmdjIDwgMykKLSsJICAgIHsKLSsJICAg IHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9 Ci0rCWlmIChkX29wdCkKLSsJICAgIHJxbGlzdCA9IGFyZ3ZbMl07Ci0rCWVsc2UKLSsJICAgIHsK LSsJICAgIHN0cmNweShmbiwgYXJndlsyXSk7Ci0rCSAgICByc3BmaWxlID0gYXJndlszXTsKLSsJ ICAgIH0KLSsJfQotKyAgICBpZiAoZF9vcHQpCi0rCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0 b3J5KSAqLwotKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCi0rCSAgICB7Ci0rCSAg ICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOwotKwkgICAgcmV0dXJuIC0x OwotKwkgICAgfQotKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKLSsJICAgIHsK LSsJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKLSsJICAgIHN0cmNweShyZm4sIGZuKTsKLSsJICAg IGlmIChWRVJCT1NFKQotKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKLSsJICAg IGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJCXByaW50ZigiPj4+IFByb2Nl c3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJRVhJVCgxKTsKLSsJCX0KLSsJ ICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCi0r CXsKLSsJaWYgKFZFUkJPU0UpCi0rCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7 Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCI+ Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKLSsJICAgIH0KLSsJfQot KyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwotLS0tIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMJMjAxMi0wNC0y NiAxODowMDo1MS4zOTc3NjkyMzQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5Nzc2OTIzNCArMDIw MAotQEAgLTAsMCArMSw1MTcgQEAKLSsvKiBmaXBzX2NtYWN0ZXN0LmMgKi8KLSsvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jbWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJ UFMgQ01BQyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStz dGF0aWMgaW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwg RklMRSAqaW4sCi0rCWludCBtb2RlLCBpbnQgS2xlbl9jb3VudHNfa2V5cywgaW50IGtub3duX2tl eWxlbik7Ci0rc3RhdGljIGludCBwcmludF9jbWFjX2dlbihjb25zdCBFVlBfQ0lQSEVSICpjaXBo ZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNp Z25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCi0rCQlpbnQgVGxlbik7Ci0rc3RhdGljIGludCBw cmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVu c2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBN c2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNYWMsIGludCBNYWNsZW4sCi0rCQlpbnQgVGxlbik7 Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMKLStpbnQgZmlwc19jbWFjdGVzdF9tYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKLSsjZWxzZQotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK LSsjZW5kaWYKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwlpbnQgbW9k ZSA9IDA7CQkvKiAwID0+IEdlbmVyYXRlLCAxID0+IFZlcmlmeSAqLwotKwlpbnQgS2xlbl9jb3Vu dHNfa2V5cyA9IDA7IC8qIDAgPT4gS2xlbiBpcyBzaXplIG9mIG9uZSBrZXkKLSsJCQkJICAgICAx ID0+IEtsZW4gaXMgYW1vdW50IG9mIGtleXMKLSsJCQkJICAqLwotKwlpbnQga25vd25fa2V5bGVu ID0gMDsJLyogT25seSBzZXQgd2hlbiBLbGVuX2NvdW50c19rZXlzID0gMSAqLwotKwljb25zdCBF VlBfQ0lQSEVSICpjaXBoZXIgPSAwOwotKwlpbnQgcmV0ID0gMTsKLSsJZmlwc19hbGd0ZXN0X2lu aXQoKTsKLSsKLSsJd2hpbGUgKGFyZ2MgPiAxICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKQotKwkJewot KwkJc3dpdGNoIChhcmd2WzFdWzFdKQotKwkJCXsKLSsJCWNhc2UgJ2EnOgotKwkJCXsKLSsJCQlj aGFyICpwID0gJmFyZ3ZbMV1bMl07Ci0rCQkJaWYgKCpwID09ICdcMCcpCi0rCQkJCXsKLSsJCQkJ aWYgKGFyZ2MgPD0gMikKLSsJCQkJCXsKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiT3B0aW9uICVz IG5lZWRzIGEgdmFsdWVcbiIsIGFyZ3ZbMV0pOwotKwkJCQkJZ290byBlbmQ7Ci0rCQkJCQl9Ci0r CQkJCWFyZ3YrKzsKLSsJCQkJYXJnYy0tOwotKwkJCQlwID0gJmFyZ3ZbMV1bMF07Ci0rCQkJCX0K LSsJCQlpZiAoIXN0cmNtcChwLCAiYWVzMTI4IikpCi0rCQkJCWNpcGhlciA9IEVWUF9hZXNfMTI4 X2NiYygpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgImFlczE5MiIpKQotKwkJCQljaXBoZXIg PSBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHAsICJhZXMyNTYiKSkK LSsJCQkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcChw LCAidGRlYTMiKSB8fCAhc3RyY21wKHAsICJ0ZGVzMyIpKQotKwkJCQl7Ci0rCQkJCWNpcGhlciA9 IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsJCQkJS2xlbl9jb3VudHNfa2V5cyA9IDE7Ci0rCQkJCWtu b3duX2tleWxlbiA9IDg7Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50Zihz dGRlcnIsICJVbmtub3duIGFsZ29yaXRobSAlc1xuIiwgcCk7Ci0rCQkJCWdvdG8gZW5kOwotKwkJ CQl9Ci0rCQkJfQotKwkJCWJyZWFrOwotKwkJY2FzZSAnZyc6Ci0rCQkJbW9kZSA9IDA7Ci0rCQkJ YnJlYWs7Ci0rCQljYXNlICd2JzoKLSsJCQltb2RlID0gMTsKLSsJCQlicmVhazsKLSsJCWRlZmF1 bHQ6Ci0rCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiAlc1xuIiwgYXJndlsxXSk7 Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYXJndisrOwotKwkJYXJnYy0tOwotKwkJfQotKwlp ZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2 WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UK LSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJ CWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwotKwlpZiAoIWNtYWNfdGVzdChjaXBoZXIsIG91dCwgaW4sIG1vZGUsCi0rCQkJS2xl bl9jb3VudHNfa2V5cywga25vd25fa2V5bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgY21hYyBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKGluICYmIChpbiAhPSBz dGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJ CWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBDTUFD X1RFU1RfTUFYTElORUxFTgkxNTAwMDAKLSsKLStpbnQgY21hY190ZXN0KGNvbnN0IEVWUF9DSVBI RVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKLSsJaW50IG1vZGUsIGludCBLbGVuX2Nv dW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGlu ZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCXVuc2lnbmVkIGNoYXIg KipLZXlzID0gTlVMTCwgKk1zZyA9IE5VTEwsICpNYWMgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFy ICpLZXkgPSBOVUxMOwotKwlpbnQgQ291bnQsIEtsZW4sIE1sZW4sIFRsZW47Ci0rCWxvbmcgS2V5 bGVuLCBNc2dsZW4sIE1hY2xlbjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsK LSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RFU1RfTUFYTElORUxFTik7Ci0rCWxp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICgh bGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwlDb3VudCA9IC0xOwot KwlLbGVuID0gLTE7Ci0rCU1sZW4gPSAtMTsKLSsJVGxlbiA9IC0xOwotKwotKwl3aGlsZSAoZmdl dHMob2xpbmVidWYsIENNQUNfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7 Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0r CQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBTa2lwIGNvbW1lbnRzICov Ci0rCQlpZiAoa2V5d29yZFswXSA9PSAnIycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1 Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwot KwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0r Ci0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBj b3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8 IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAg LSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2 YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAq LwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsr OwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2 YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNt cChrZXl3b3JkLCAiQ291bnQiKSkKLSsJCQl7Ci0rCQkJaWYgKENvdW50ICE9IC0xKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCUNvdW50ID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKENvdW50 IDwgMCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJLbGVuIikpCi0rCQkJewotKwkJCWlmIChLbGVuICE9IC0xKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCUtsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoS2xlbiA8IDAp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKEtsZW5fY291bnRzX2tleXMpCi0rCQkJ CXsKLSsJCQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqS2V5cykgKiBLbGVuKTsKLSsJ CQkJbWVtc2V0KEtleXMsICdcMCcsIHNpemVvZigqS2V5cykgKiBLbGVuKTsKLSsJCQkJfQotKwkJ CWVsc2UKLSsJCQkJewotKwkJCQlLZXlzID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKCpLZXlzKSk7 Ci0rCQkJCW1lbXNldChLZXlzLCAnXDAnLCBzaXplb2YoKktleXMpKTsKLSsJCQkJfQotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1sZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKE1s ZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTWxlbiA9IGF0b2kodmFsdWUp OwotKwkJCWlmIChNbGVuIDwgMCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJUbGVuIikpCi0rCQkJewotKwkJCWlmIChUbGVuICE9 IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsKLSsJ CQlpZiAoVGxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiS2V5IikgJiYgIUtsZW5fY291bnRzX2tleXMpCi0rCQkJewot KwkJCWlmIChLZXlzWzBdKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUtleXNbMF0gPSBo ZXgyYmluX20odmFsdWUsICZLZXlsZW4pOwotKwkJCWlmICghS2V5c1swXSkKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RybmNtcChrZXl3b3JkLCAiS2V5Iiwg MykgJiYgS2xlbl9jb3VudHNfa2V5cykKLSsJCQl7Ci0rCQkJaW50IGtleW51bSA9IGF0b2koa2V5 d29yZCArIDMpOwotKwkJCWlmICgha2V5bnVtIHx8IGtleW51bSA+IEtsZW4gfHwgS2V5c1trZXlu dW0tMV0pCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJS2V5c1trZXludW0tMV0gPSBoZXgy YmluX20odmFsdWUsICZLZXlsZW4pOwotKwkJCWlmICghS2V5c1trZXludW0tMV0pCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNn IikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNn ID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNYWMiKSkK LSsJCQl7Ci0rCQkJaWYgKG1vZGUgPT0gMCkKLSsJCQkJY29udGludWU7Ci0rCQkJaWYgKE1hYykK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNYWMgPSBoZXgyYmluX20odmFsdWUsICZNYWNs ZW4pOwotKwkJCWlmICghTWFjKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQotKwkJCXsKLSsJCQlpZiAobW9kZSA9 PSAxKQotKwkJCQljb250aW51ZTsKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0r Ci0rCQlpZiAoS2V5cyAmJiBNc2cgJiYgKCFtb2RlIHx8IE1hYykgJiYgKFRsZW4gPiAwKSAmJiAo S2xlbiA+IDApKQotKwkJCXsKLSsJCQlpZiAoS2xlbl9jb3VudHNfa2V5cykKLSsJCQkJewotKwkJ CQlpbnQgeDsKLSsJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2MoS2xlbiAqIGtub3duX2tleWxlbik7 Ci0rCQkJCWZvciAoeCA9IDA7IHggPCBLbGVuOyB4KyspCi0rCQkJCQl7Ci0rCQkJCQltZW1jcHko S2V5ICsgeCAqIGtub3duX2tleWxlbiwKLSsJCQkJCQlLZXlzW3hdLCBrbm93bl9rZXlsZW4pOwot KwkJCQkJT1BFTlNTTF9mcmVlKEtleXNbeF0pOwotKwkJCQkJfQotKwkJCQlLbGVuICo9IGtub3du X2tleWxlbjsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlLZXkgPSBPUEVOU1NMX21h bGxvYyhLbGVuKTsKLSsJCQkJbWVtY3B5KEtleSwgS2V5c1swXSwgS2xlbik7Ci0rCQkJCU9QRU5T U0xfZnJlZShLZXlzWzBdKTsKLSsJCQkJfQotKwkJCU9QRU5TU0xfZnJlZShLZXlzKTsKLSsKLSsJ CQlzd2l0Y2gobW9kZSkKLSsJCQkJewotKwkJCWNhc2UgMDoKLSsJCQkJaWYgKCFwcmludF9jbWFj X2dlbihjaXBoZXIsIG91dCwKLSsJCQkJCQlLZXksIEtsZW4sCi0rCQkJCQkJTXNnLCBNbGVuLAot KwkJCQkJCVRsZW4pKQotKwkJCQkJZ290byBlcnJvcjsKLSsJCQkJYnJlYWs7Ci0rCQkJY2FzZSAx OgotKwkJCQlpZiAoIXByaW50X2NtYWNfdmVyKGNpcGhlciwgb3V0LAotKwkJCQkJCUtleSwgS2xl biwKLSsJCQkJCQlNc2csIE1sZW4sCi0rCQkJCQkJTWFjLCBNYWNsZW4sCi0rCQkJCQkJVGxlbikp Ci0rCQkJCQlnb3RvIGVycm9yOwotKwkJCQlicmVhazsKLSsJCQkJfQotKwotKwkJCU9QRU5TU0xf ZnJlZShLZXkpOwotKwkJCUtleSA9IE5VTEw7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJ TXNnID0gTlVMTDsKLSsJCQlPUEVOU1NMX2ZyZWUoTWFjKTsKLSsJCQlNYWMgPSBOVUxMOwotKwkJ CUtsZW4gPSAtMTsKLSsJCQlNbGVuID0gLTE7Ci0rCQkJVGxlbiA9IC0xOwotKwkJCUNvdW50ID0g LTE7Ci0rCQkJfQotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJ aWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYp Ci0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChLZXkpCi0rCQlPUEVOU1NMX2ZyZWUo S2V5KTsKLSsJaWYgKE1zZykKLSsJCU9QRU5TU0xfZnJlZShNc2cpOwotKwlpZiAoTWFjKQotKwkJ T1BFTlNTTF9mcmVlKE1hYyk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgot KwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAl ZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHBy aW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAotKwkJdW5z aWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1s ZW4sCi0rCQlpbnQgVGxlbikKLSsJewotKwlpbnQgcmMsIGk7Ci0rCXNpemVfdCByZXNsZW47Ci0r CXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07Ci0rCUNNQUNfQ1RYICpjbWFjX2N0eCA9IENNQUNfQ1RY X25ldygpOwotKwotKwlDTUFDX0luaXQoY21hY19jdHgsIEtleSwgS2xlbiwgY2lwaGVyLCAwKTsK LSsJQ01BQ19VcGRhdGUoY21hY19jdHgsIE1zZywgTWxlbik7Ci0rCWlmICghQ01BQ19GaW5hbChj bWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkKLSsJCXsKLSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGlu ZyBDTUFDXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlIGlmIChUbGVuID4g KGludClyZXNsZW4pCi0rCQl7Ci0rCQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuID4gQ01B QyBsZW5ndGhcbiIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJ CWZwdXRzKCJNYWMgPSAiLCBvdXQpOwotKwkJZm9yIChpID0gMDsgaSA8IFRsZW47IGkrKykKLSsJ CQlmcHJpbnRmKG91dCwgIiUwMngiLCByZXNbaV0pOwotKwkJZnB1dHMoUkVTUF9FT0wsIG91dCk7 Ci0rCQlyYyA9IDE7Ci0rCQl9Ci0rCUNNQUNfQ1RYX2ZyZWUoY21hY19jdHgpOwotKwlyZXR1cm4g cmM7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X2NtYWNfdmVyKGNvbnN0IEVWUF9DSVBIRVIg KmNpcGhlciwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKLSsJ CXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNYWMsIGlu dCBNYWNsZW4sCi0rCQlpbnQgVGxlbikKLSsJewotKwlpbnQgcmMgPSAxOwotKwlzaXplX3QgcmVz bGVuOwotKwl1bnNpZ25lZCBjaGFyIHJlc1sxMjhdOwotKwlDTUFDX0NUWCAqY21hY19jdHggPSBD TUFDX0NUWF9uZXcoKTsKLSsKLSsJQ01BQ19Jbml0KGNtYWNfY3R4LCBLZXksIEtsZW4sIGNpcGhl ciwgMCk7Ci0rCUNNQUNfVXBkYXRlKGNtYWNfY3R4LCBNc2csIE1sZW4pOwotKwlpZiAoIUNNQUNf RmluYWwoY21hY19jdHgsIHJlcywgJnJlc2xlbikpCi0rCQl7Ci0rCQlmcHV0cygiRXJyb3IgY2Fs Y3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAo VGxlbiA+IChpbnQpcmVzbGVuKQotKwkJewotKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxl biA+IENNQUMgbGVuZ3RoXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlIGlm IChUbGVuICE9IE1hY2xlbikKLSsJCXsKLSsJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4g IT0gcmVzdWx0aW5nIE1hYyBsZW5ndGhcbiIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0r CWVsc2UKLSsJCXsKLSsJCWlmICghbWVtY21wKE1hYywgcmVzLCBNYWNsZW4pKQotKwkJCWZwdXRz KCJSZXN1bHQgPSBQIiBSRVNQX0VPTCwgb3V0KTsKLSsJCWVsc2UKLSsJCQlmcHV0cygiUmVzdWx0 ID0gRiIgUkVTUF9FT0wsIG91dCk7Ci0rCQl9Ci0rCUNNQUNfQ1RYX2ZyZWUoY21hY19jdHgpOwot KwlyZXR1cm4gcmM7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk4NzY5MjU1ICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwky MDEyLTA0LTI2IDE4OjAwOjUxLjM5ODc2OTI1NSArMDIwMAotQEAgLTAsMCArMSw3MDIgQEAKLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBERVMgTW9kZXMgb2YgT3BlcmF0aW9uIFZhbGlkYXRp b24gU3lzdGVtCi0rICBUZXN0IFByb2dyYW0KLSsKLSsgIEJhc2VkIG9uIHRoZSBBRVMgVmFsaWRh dGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgotKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgotKyAgVi1P TkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCi0rICBHZXJt YW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVk ZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgot KyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlICJlX29zLmgi Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERFUyBzdXBwb3J0XG4iKTsKLSsgICAg cmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjZGVmaW5lIERFU19CTE9DS19TSVpFIDgKLSsK LSsjZGVmaW5lIFZFUkJPU0UgMAotKwotK2ludCBERVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgs Ci0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0r CSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlw dCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hh ciAqaW4sIGludCBsZW4pCi0rICAgIHsKLSsgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0g TlVMTDsKLSsKLSsgICAgaWYgKGFrZXlzeiAhPSAxOTIpCi0rCXsKLSsJcHJpbnRmKCJJbnZhbGlk IGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBpZiAo c3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19j YmMoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCWNp cGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9k ZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjY0KCk7Ci0rICAg IGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKLSsJY2lwaGVyID0g RVZQX2Rlc19lZGUzX29mYigpOwotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4 IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNh c2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjEoKTsKLSsg ICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlF WElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwg TlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYoIXN0cmNh c2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBF VlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsgICAgRVZQX0NpcGhlcihjdHgsIG91dCwgaW4s IGxlbik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9pZCBEZWJ1Z1ZhbHVlKGNo YXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNoYXIg b2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rICAgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVu LCBvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0r ICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hhciAqZHN0LHVuc2lnbmVkIGNoYXIg KnNyYyxpbnQgbmJpdHMpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIC8qIG1vdmUgdGhl IGJ5dGVzLi4uICovCi0rICAgIG1lbW1vdmUoZHN0LGRzdCtuYml0cy84LDMqOC1uYml0cy84KTsK LSsgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCi0rICAgIG1lbWNweShkc3QrMyo4LW5iaXRzLzgs c3JjLChuYml0cys3KS84KTsKLSsgICAgLyogbGVmdCBzaGlmdCB0aGUgYml0cyAqLwotKyAgICBp ZihuYml0cyU4KQotKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsrbikKLSsJICAgIGRzdFtuXT0oZHN0 W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5iaXRzJTgpKTsKLSsgICAgfQkKLSsK LSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStj aGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21v ZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCNjQifTsKLStlbnVt IE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjY0fTsKLStpbnQgU2l6ZXNbNl09 ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0rdm9pZCBkb19tY3QoY2hhciAqYW1vZGUsIAotKwkgICAg aW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNoYXIgKmFrZXksdW5zaWduZWQgY2hh ciAqaXZlYywKLSsJICAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCi0r CSAgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IGksaW1vZGU7Ci0rICAgIHVuc2lnbmVk IGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLwotKyAgICB1bnNpZ25lZCBjaGFyIHRl eHQwWzhdOwotKwotKyAgICBmb3IgKGltb2RlPTAgOyBpbW9kZSA8IDYgOyArK2ltb2RlKQotKwlp Zighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChp bW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1v ZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgNDAwIDsgKytpKQot Kwl7Ci0rCWludCBqOwotKwlpbnQgbjsKLSsJaW50IGtwPWFrZXlzei82NDsKLSsJdW5zaWduZWQg Y2hhciBvbGRfaXZbOF07Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKLSsKLSsJZnByaW50ZihyZnAsIlxuQ09VTlQgPSAlZFxuIixpKTsKLSsJaWYo a3AgPT0gMSkKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFrZXksOCxyZnAsMCk7Ci0rCWVsc2UK LSsJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCi0rCQl7Ci0rCQlmcHJpbnRmKHJmcCwiS0VZ JWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1ZSgiIixha2V5K24qOCw4LHJmcCwwKTsKLSsJCX0KLSsK LSsJaWYoaW1vZGUgIT0gRUNCKQotKwkgICAgT3V0cHV0VmFsdWUoIklWIixpdmVjLDgscmZwLDAp OwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEp OwotKyNpZiAwCi0rCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlhbm5lc3MgKi8KLSsJaWYoaW1vZGUg PT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08PD03OwotKyNlbmRpZgotKwltZW1jcHkodGV4dDAsdGV4 dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsraikKLSsJICAgIHsKLSsJICAgIHVu c2lnbmVkIGNoYXIgb2xkX3RleHRbOF07Ci0rCi0rCSAgICBtZW1jcHkob2xkX3RleHQsdGV4dCw4 KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJCXsKLSsJCW1lbWNweShvbGRfaXYsaXZlYyw4KTsKLSsJ CURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVjLGRpcix0ZXh0LHRleHQsbGVuKTsK LSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCW1lbWNweShvbGRfaXYsY3R4Lml2LDgpOwotKwkJ RVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOwotKwkJfQotKwkgICAgaWYoaiA9PSA5OTk5 KQotKwkJewotKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0g Q0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsgKi8KLSsJCX0KLSsJICAgIC8qCSAg ICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLwotKwkgICAgLyogYWNjdW11bGF0ZSBtYXRl cmlhbCBmb3IgdGhlIG5leHQga2V5ICovCi0rCSAgICBzaGlmdGluKG5rLHRleHQsU2l6ZXNbaW1v ZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIsbmssMjQpOyovCi0rCSAgICBpZigo ZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQK LSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBPRkIpCi0rCQltZW1jcHkodGV4dCxv bGRfaXYsOCk7Ci0rCi0rCSAgICBpZighZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09 IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQotKwkJewotKwkJLyogdGhlIHRlc3Qgc3BlY2lmaWVz IHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3BlcmF0aW9uCi0rCQkgICB3aGljaCB3 ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAqLwotKwkJZm9yKG49MCA7IG4gPCA4 IDsgKytuKQotKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25dOwotKwkJfQotKwkgICAgfQotKwlm b3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5W25dXj1ua1sxNituXTsKLSsJZm9yKG49 MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVs4K25dXj1ua1s4K25dOwotKwlmb3Iobj0wIDsg biA8IDggOyArK24pCi0rCSAgICBha2V5WzE2K25dXj1ua1tuXTsKLSsJaWYobnVta2V5cyA8IDMp Ci0rCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOwotKwlpZihudW1rZXlzIDwgMikKLSsJ ICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19j YmxvY2sgKilha2V5KTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkr OCkpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSsxNikpOwotKwlt ZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0rCi0rCS8qIHBvaW50bGVzcyBleGVyY2lzZSAtIHRoZSBm aW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQotKwkgICBpbml0aWFsIHRleHQgaW4gT0ZC IG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hvCi0rCSAgIGRlc2lnbmVkIHRoZXNl IHRlc3RzPykgKi8KLSsJaWYoaW1vZGUgPT0gT0ZCKQotKwkgICAgZm9yKG49MCA7IG4gPCA4IDsg KytuKQotKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07Ci0rCX0KLSsgICAgfQotKyAgICAK LStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAg ICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9 IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4s IGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0 WzEwMF0gPSAiIjsKLSsgICAgaW50IGFrZXlzej0wOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNb MjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsg ICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lw aGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsK LSsgICAgaW50IG51bWtleXM9MTsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsK LSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBm aWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0r Ci0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50 ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3Io ZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlz dHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNT TF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0r I2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJz dHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSBy Zm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQot Kwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJm biwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJl dHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGli dWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxl biA9IHN0cmxlbihpYnVmKTsKLSsJLyoJcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1 Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1vZGUsIkVDQiIpKQotKwkgICAgewot KwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7Ci0rCSAgICBzdGVwID0gKGRpcik/ IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJICAgIH0KLSsJc3dpdGNoIChzdGVwKQot KwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1Zlsw XSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgqYW1vZGUgPT0g J1wwJykKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIE1vZGVcbiIpOwotKwkJICAg IGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVm LCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAo aWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTog JXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJv Y2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwot KwkJaWYoKmFtb2RlKQotKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8K LSsJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7Ci0rCQkgICAgZnByaW50ZihyZnAsICIjICVz IiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgaWYoIXN0cm5jbXAocHAsIklOVkVSU0UgIiw4KSB8fCAh c3RybmNtcChwcCwiREVTICIsNCkKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVERFUyAiLDUp Ci0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFUSU9OICIsMTIpCi0rCQkgICAgICAg fHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQotKwkJICAgICAgIHx8ICFzdHJuY21w KHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJCXsKLSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJ aWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQotKwkJCSAgICBwcCs9NDsKLSsJCQllbHNlIGlmKCFz dHJuY21wKHBwLCJUREVTICIsNSkpCi0rCQkJICAgIHBwKz01OwotKwkJCXhwID0gc3RyY2hyKHBw LCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7Ci0rCQkJ YXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBtb2RlICovCi0rCQkJeHAgPSBzdHJyY2hyKHBw LCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQluID0gc3RybGVuKHhwKzEpLTE7Ci0rCQkJc3Ry bmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1vZGVbbl0gPSAnXDAnOwotKwkJCS8qIGFtb2Rl WzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJUZXN0PSVzLCBN b2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKLSsJCQl9Ci0rCQkgICAgfQotKwkJfQotKwkgICAgYnJl YWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLwotKwkgICAgaWYo aWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0r CQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21w KGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlm IChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAw OwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNc biIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0r CSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJN aXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkg ICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJ ICAgIGlmKCppYnVmID09ICdcbicpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK LSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1 ZiwiQ09VTlQgPSAiLDgpKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQli cmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNP VU5UPSIsNikpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwot KyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiTnVtS2V5cyA9 ICIsMTApKQotKwkJewotKwkJbnVta2V5cz1hdG9pKGlidWYrMTApOwotKwkJYnJlYWs7Ci0rCQl9 Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYoIXN0cm5jYXNlY21wKGli dWYsIktFWSA9ICIsNikpCi0rCQl7Ci0rCQlha2V5c3o9NjQ7Ci0rCQlsZW4gPSBoZXgyYmluKChj aGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHBy aW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJ ICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7Ci0rCQkrK3N0ZXA7Ci0rCQl9 Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVlzID0gIiw3KSkKLSsJCXsKLSsJ CWFrZXlzej02NCozOwotKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkpOwotKwkJaWYobGVuICE9 IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVy cj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCW1lbWNweShhS2V5KzgsYUtleSw4KTsK LSsJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7Ci0rCQlpYnVmWzRdPSdcMCc7Ci0rCQlQcmludFZh bHVlKCJLRVlzIixhS2V5LGxlbik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFz dHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQotKwkJewotKwkJaW50IG49aWJ1ZlszXS0nMSc7Ci0r Ci0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmluKGlidWYrNyxhS2V5K24qOCk7Ci0rCQlp ZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0r CQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWJ1Zls0XT0nXDAnOwot KwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKLSsJCWlmKG4gPT0gMikKLSsJCSAgICArK3N0 ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsK LSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4 eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0r CQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hh ciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAg ICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6 IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4 ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYs ICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJ TlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBu biA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAg ICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAg bGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAg IHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJ ICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVv ZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xu Iik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIq KXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAv KiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChhbW9kZSxha2V5 c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxsZW4scmZwKTsKLSsJCSAgICB9Ci0r CQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChkaXIgPT0gMSk7Ci0rCQkgICAgcmV0ID0g REVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAv KiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBjaXBoZXJ0ZXh0LCBwbGFpbnRl eHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVu LHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0g NjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4 ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYs ICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZ XG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZighc3RyY21w KGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYr MTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEz LGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50Zigi SW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0r CQkgICAgfQotKwkJCi0rCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVu KTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBU ZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBudW1rZXlzLCBh S2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9 Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChkaXIgPT0gMCk7Ci0rCQkgICAgcmV0 ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIs ICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhl cnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNo YXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJ CSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDY6Ci0r CSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50Zigi TWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVz dCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5s ICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJfQotKwkgICAgc3RlcCA9IDE7Ci0rCSAgICBi cmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAocmZwKQotKwlmY2xvc2UocmZwKTsKLSsgICAg aWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJldHVybiBlcnI7Ci0rICAgIH0KLSsKLSsv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQ cm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCi0rICBhIHNldCBvZiBmaWxlcyB3aG9z ZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KLSsgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lm aWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCi0rICBBIHNldCBvZiBmaWxlcyBpcyBz cGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQg aXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyAgICB7Ci0r ICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOwotKyAgICBGSUxF ICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOwotKyAg ICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAg ICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJRVhJ VCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAoYXJnYyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNh c2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJ ICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQotKwkgICAg ewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9vcHQgPSAwOwotKwkgICAgfQotKwllbHNlCi0r CSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7 Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGFyZ2MgPCAzKQotKwkgICAgewotKwkg ICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAg IH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKLSsJZWxzZQotKwkgICAg ewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJICAgIHJzcGZpbGUgPSBhcmd2WzNdOwot KwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkKLSsJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJl Y3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKLSsJICAgIHsKLSsJ ICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7Ci0rCSAgICByZXR1cm4g LTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQotKwkgICAg ewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwotKwkgICAgc3RyY3B5KHJmbiwgZm4pOwotKwkg ICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKLSsJICAgIGlmIChwcm9jX2ZpbGUo cmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZv cjogJXMgPDw8XG4iLCByZm4pOwotKwkJRVhJVCgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZmNsb3Nl KGZwKTsKLSsJfQotKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCi0rCXsKLSsJaWYgKFZFUkJP U0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7Ci0rCWlmIChwcm9jX2ZpbGUo Zm4sIHJzcGZpbGUpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWls ZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKLSsJICAgIH0KLSsJfQotKyAgICBFWElUKDApOwotKyAg ICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kaHZzLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfZGh2cy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTg3NjkyNTUgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jCTIwMTItMDQtMjYg MTg6MDA6NTEuMzk4NzY5MjU1ICswMjAwCi1AQCAtMCwwICsxLDI5MiBAQAotKy8qIGZpcHMvZGgv Zmlwc19kaHZzLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBT QVBJCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBESCBzdXBwb3J0XG4iKTsKLSsgICAg cmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlw ZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRpYyBjb25zdCBFVlBfTUQg KnBhcnNlX21kKGNoYXIgKmxpbmUpCi0rCXsKLSsJY2hhciAqcDsKLSsJaWYgKGxpbmVbMF0gIT0g J1snIHx8IGxpbmVbMV0gIT0gJ0YnKQotKwkJcmV0dXJuIE5VTEw7Ci0rCXAgPSBzdHJjaHIobGlu ZSwgJy0nKTsKLSsJaWYgKCFwKQotKwkJcmV0dXJuIE5VTEw7Ci0rCWxpbmUgPSBwICsgMTsKLSsJ cCA9IHN0cmNocihsaW5lLCAnXScpOwotKwlpZiAoIXApCi0rCQlyZXR1cm4gTlVMTDsKLSsJKnAg PSAwOwotKwlwID0gbGluZTsKLSsJd2hpbGUoaXNzcGFjZSgqcCkpCi0rCQlwKys7Ci0rCWlmICgh c3RyY21wKHAsICJTSEExIikpCi0rCQlyZXR1cm4gRVZQX3NoYTEoKTsKLSsJZWxzZSBpZiAoIXN0 cmNtcChwLCAiU0hBMjI0IikpCi0rCQlyZXR1cm4gRVZQX3NoYTIyNCgpOwotKwllbHNlIGlmICgh c3RyY21wKHAsICJTSEEyNTYiKSkKLSsJCXJldHVybiBFVlBfc2hhMjU2KCk7Ci0rCWVsc2UgaWYg KCFzdHJjbXAocCwgIlNIQTM4NCIpKQotKwkJcmV0dXJuIEVWUF9zaGEzODQoKTsKLSsJZWxzZSBp ZiAoIXN0cmNtcChwLCAiU0hBNTEyIikpCi0rCQlyZXR1cm4gRVZQX3NoYTUxMigpOwotKwllbHNl Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotK3N0YXRpYyB2b2lkIG91dHB1dF9aaGFzaChGSUxF ICpvdXQsIGludCBleG91dCwKLSsJCQkJREggKmRoLCBCSUdOVU0gKnBlZXJrZXksIGNvbnN0IEVW UF9NRCAqbWQsCi0rCQkJCXVuc2lnbmVkIGNoYXIgKnJoYXNoLCBzaXplX3Qgcmhhc2hsZW4pCi0r CXsKLSsJdW5zaWduZWQgY2hhciAqWjsKLSsJdW5zaWduZWQgY2hhciBjaGFzaFtFVlBfTUFYX01E X1NJWkVdOwotKwlpbnQgWmxlbjsKLSsJaWYgKHJoYXNoID09IE5VTEwpCi0rCQl7Ci0rCQlyaGFz aGxlbiA9IE1fRVZQX01EX3NpemUobWQpOwotKwkJaWYgKCFESF9nZW5lcmF0ZV9rZXkoZGgpKQot KwkJCWV4aXQgKDEpOwotKwkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJZZXBoZW1JVVQiLCBkaC0+ cHViX2tleSk7Ci0rCQlpZiAoZXhvdXQpCi0rCQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJYZXBo ZW1JVVQiLCBkaC0+cHJpdl9rZXkpOwotKwkJfQotKwlaID0gT1BFTlNTTF9tYWxsb2MoQk5fbnVt X2J5dGVzKGRoLT5wKSk7Ci0rCWlmICghWikKLSsJCWV4aXQoMSk7Ci0rCVpsZW4gPSBESF9jb21w dXRlX2tleV9wYWRkZWQoWiwgcGVlcmtleSwgZGgpOwotKwlpZiAoZXhvdXQpCi0rCQlPdXRwdXRW YWx1ZSgiWiIsIFosIFpsZW4sIG91dCwgMCk7Ci0rCUZJUFNfZGlnZXN0KFosIFpsZW4sIGNoYXNo LCBOVUxMLCBtZCk7Ci0rCU91dHB1dFZhbHVlKHJoYXNoID8gIklVVEhhc2haWiIgOiAiSGFzaFpa IiwgY2hhc2gsIHJoYXNobGVuLCBvdXQsIDApOwotKwlpZiAocmhhc2gpCi0rCQl7Ci0rCQlmcHJp bnRmKG91dCwgIlJlc3VsdCA9ICVzXG4iLAotKwkJCQltZW1jbXAoY2hhc2gsIHJoYXNoLCByaGFz aGxlbikgPyAiRiIgOiAiUCIpOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlCTl9jbGVhcl9mcmVl KGRoLT5wcml2X2tleSk7Ci0rCQlCTl9jbGVhcl9mcmVlKGRoLT5wdWJfa2V5KTsKLSsJCWRoLT5w cml2X2tleSA9IE5VTEw7Ci0rCQlkaC0+cHViX2tleSA9IE5VTEw7Ci0rCQl9Ci0rCU9QRU5TU0xf Y2xlYW5zZShaLCBabGVuKTsKLSsJT1BFTlNTTF9mcmVlKFopOwotKwl9Ci0rCi0rI2lmZGVmIEZJ UFNfQUxHVlMKLStpbnQgZmlwc19kaHZzX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNl bHNlCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbmRpZgotKwl7Ci0rCWNo YXIgKiphcmdzID0gYXJndiArIDE7Ci0rCWludCBhcmduID0gYXJnYyAtIDE7Ci0rCUZJTEUgKmlu LCAqb3V0OwotKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKLSsJdW5zaWduZWQgY2hhciAq cmhhc2g7Ci0rCWxvbmcgcmhhc2hsZW47Ci0rCURIICpkaCA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9N RCAqbWQgPSBOVUxMOwotKwlCSUdOVU0gKnBlZXJrZXkgPSBOVUxMOwotKwljaGFyICprZXl3b3Jk ID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKLSsJaW50IGRvX3ZlcmlmeSA9IC0xLCBleG91dCA9IDA7 Ci0rCi0rCWZpcHNfYWxndGVzdF9pbml0KCk7Ci0rCi0rCWlmIChhcmduICYmICFzdHJjbXAoKmFy Z3MsICJkaHZlciIpKQotKwkJewotKwkJZG9fdmVyaWZ5ID0gMTsKLSsJCWFyZ3MrKzsKLSsJCWFy Z24tLTsKLSsJCX0KLSsJZWxzZSBpZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAiZGhnZW4iKSkK LSsJCXsKLSsJCWRvX3ZlcmlmeSA9IDA7Ci0rCQlhcmdzKys7Ci0rCQlhcmduLS07Ci0rCQl9Ci0r Ci0rCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICItZXhvdXQiKSkKLSsJCXsKLSsJCWV4b3V0 ID0gMTsKLSsJCWFyZ3MrKzsKLSsJCWFyZ24tLTsKLSsJCX0KLSsKLSsJaWYgKGRvX3ZlcmlmeSA9 PSAtMSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0 XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsKLSsJ aWYgKGFyZ24gPT0gMikKLSsJCXsKLSsJCWluID0gZm9wZW4oKmFyZ3MsICJyIik7Ci0rCQlpZiAo IWluKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmls ZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlvdXQgPSBmb3BlbihhcmdzWzFdLCAidyIp OwotKwkJaWYgKCFvdXQpCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3Blbmlu ZyBvdXRwdXQgZmlsZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UgaWYg KGFyZ24gPT0gMCkKLSsJCXsKLSsJCWluID0gc3RkaW47Ci0rCQlvdXQgPSBzdGRvdXQ7Ci0rCQl9 Ci0rCWVsc2UKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4 b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsK LSsJZGggPSBGSVBTX2RoX25ldygpOwotKwotKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVm KSwgaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsIG91dCk7Ci0rCQlpZiAoc3RybGVu KGJ1ZikgPiA2ICYmICFzdHJuY21wKGJ1ZiwgIltGIiwgMikpCi0rCQkJewotKwkJCW1kID0gcGFy c2VfbWQoYnVmKTsKLSsJCQlpZiAobWQgPT0gTlVMTCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlpZiAoZGgpCi0rCQkJCUZJUFNfZGhfZnJlZShkaCk7Ci0rCQkJZGggPSBGSVBTX2RoX25l dygpOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwkJaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlAiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5wLCB2YWx1ZSkpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi USIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgtPnEsIHZhbHVlKSkKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJHIikp Ci0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZkaC0+ZywgdmFsdWUpKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhlcGhlbUlV VCIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgtPnByaXZfa2V5LCB2YWx1ZSkpCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiWWVwaGVtSVVUIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cHViX2tleSwg dmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlllcGhlbUNBVlMiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJnBl ZXJrZXksIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoZG9fdmVyaWZ5 ID09IDApCi0rCQkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCi0r CQkJCQkJCU5VTEwsIDApOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNB VlNIYXNoWloiKSkKLSsJCQl7Ci0rCQkJaWYgKCFtZCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlyaGFzaCA9IGhleDJiaW5fbSh2YWx1ZSwgJnJoYXNobGVuKTsKLSsJCQlpZiAoIXJoYXNo IHx8IHJoYXNobGVuICE9IE1fRVZQX01EX3NpemUobWQpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCi0rCQkJCQkJ CXJoYXNoLCByaGFzaGxlbik7Ci0rCQkJfQotKwkJfQotKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4p Ci0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIG91dCAhPSBzdGRvdXQpCi0rCQlmY2xvc2Uo b3V0KTsKLSsJcmV0dXJuIDA7Ci0rCXBhcnNlX2Vycm9yOgotKwlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIFBhcnNpbmcgcmVxdWVzdCBmaWxlXG4iKTsKLSsJZXhpdCgxKTsKLSsJfQotKwotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5j LmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jCi0tLS0g b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMJMjAxMi0w NC0yNiAxODowMDo1MS4zOTg3NjkyNTUgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTg3NjkyNTUgKzAy MDAKLUBAIC0wLDAgKzEsNDE2IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ3ZzLmMgKi8KLSsv KiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3Ig dGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqLwotKwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAg IHByaW50ZigiTm8gRklQUyBEUkJHIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQot KyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9k c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXZwLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNp bmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRpYyBpbnQgZHBhcnNlX21kKGNoYXIgKnN0cikK LSsJewotKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKLSsJCXsKLSsJCWNhc2UgMToKLSsJCXJldHVy biBOSURfc2hhMTsKLSsKLSsJCWNhc2UgMjI0OgotKwkJcmV0dXJuIE5JRF9zaGEyMjQ7Ci0rCi0r CQljYXNlIDI1NjoKLSsJCXJldHVybiBOSURfc2hhMjU2OwotKwotKwkJY2FzZSAzODQ6Ci0rCQly ZXR1cm4gTklEX3NoYTM4NDsKLSsKLSsJCWNhc2UgNTEyOgotKwkJcmV0dXJuIE5JRF9zaGE1MTI7 Ci0rCi0rCQl9Ci0rCi0rCXJldHVybiBOSURfdW5kZWY7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHBh cnNlX2VjKGNoYXIgKnN0cikKLSsJewotKwlpbnQgY3VydmVfbmlkLCBtZF9uaWQ7Ci0rCWNoYXIg Km1kOwotKwltZCA9IHN0cmNocihzdHIsICcgJyk7Ci0rCWlmICghbWQpCi0rCQlyZXR1cm4gTklE X3VuZGVmOwotKwlpZiAoIXN0cm5jbXAoc3RyLCAiW1AtMjU2IiwgNikpCi0rCQljdXJ2ZV9uaWQg PSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKLSsJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiW1AtMzg0 IiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDM4NHIxOwotKwllbHNlIGlmICghc3RybmNt cChzdHIsICJbUC01MjEiLCA2KSkKLSsJCWN1cnZlX25pZCA9IE5JRF9zZWNwNTIxcjE7Ci0rCWVs c2UKLSsJCXJldHVybiBOSURfdW5kZWY7Ci0rCW1kX25pZCA9IGRwYXJzZV9tZChtZCk7Ci0rCWlm IChtZF9uaWQgPT0gTklEX3VuZGVmKQotKwkJcmV0dXJuIE5JRF91bmRlZjsKLSsJcmV0dXJuIChj dXJ2ZV9uaWQgPDwgMTYpIHwgbWRfbmlkOwotKwl9Ci0rCi0rc3RhdGljIGludCBwYXJzZV9hZXMo Y2hhciAqc3RyLCBpbnQgKnBkZikKLSsJewotKwotKwlpZiAoIXN0cm5jbXAoc3RyICsgOSwgIm5v IiwgMikpCi0rCQkqcGRmID0gMDsKLSsJZWxzZQotKwkJKnBkZiA9IERSQkdfRkxBR19DVFJfVVNF X0RGOwotKwotKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJ cmV0dXJuIE5JRF9hZXNfMTI4X2N0cjsKLSsKLSsJCWNhc2UgMTkyOgotKwkJcmV0dXJuIE5JRF9h ZXNfMTkyX2N0cjsKLSsKLSsJCWNhc2UgMjU2OgotKwkJcmV0dXJuIE5JRF9hZXNfMjU2X2N0cjsK LSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gTklEX3VuZGVmOwotKwotKwkJfQotKwl9Ci0rCi0r dHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqZW50OwotKwlzaXplX3QgZW50 bGVuOwotKwl1bnNpZ25lZCBjaGFyICpub25jZTsKLSsJc2l6ZV90IG5vbmNlbGVuOwotKwl9IFRF U1RfRU5UOwotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1 bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJVEVTVF9F TlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKwkqcG91dCA9ICh1bnNpZ25l ZCBjaGFyICopdC0+ZW50OwotKwlyZXR1cm4gdC0+ZW50bGVuOwotKwl9Ci0rCi0rc3RhdGljIHNp emVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xl biwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2Fw cF9kYXRhKGRjdHgpOwotKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7Ci0rCXJl dHVybiB0LT5ub25jZWxlbjsKLSsJfQotKwotKyNpZmRlZiBGSVBTX0FMR1ZTCi0raW50IGZpcHNf ZHJiZ3ZzX21haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFpbihpbnQg YXJnYyxjaGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQg PSBOVUxMOwotKwlEUkJHX0NUWCAqZGN0eCA9IE5VTEw7Ci0rCVRFU1RfRU5UIHQ7Ci0rCWludCBy LCBuaWQgPSAwOwotKwlpbnQgcHIgPSAwOwotKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsK LSsJdW5zaWduZWQgY2hhciByYW5kb3V0WzIwNDhdOwotKwljaGFyICprZXl3b3JkID0gTlVMTCwg KnZhbHVlID0gTlVMTDsKLSsKLSsJdW5zaWduZWQgY2hhciAqZW50ID0gTlVMTCwgKm5vbmNlID0g TlVMTCwgKnBlcnMgPSBOVUxMLCAqYWRpbiA9IE5VTEw7Ci0rCWxvbmcgZW50bGVuLCBub25jZWxl biwgcGVyc2xlbiwgYWRpbmxlbjsKLSsJaW50IGRmID0gMDsKLSsKLSsJZW51bSBkdHlwZSB7IERS QkdfTk9ORSwgRFJCR19DVFIsIERSQkdfSEFTSCwgRFJCR19ITUFDLCBEUkJHX0RVQUxfRUMgfQot KwkJZHJiZ190eXBlID0gRFJCR19OT05FOwotKwotKwlpbnQgcmFuZG91dGxlbiA9IDA7Ci0rCi0r CWludCBnZW4gPSAwOwotKwotKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOwotKwotKwlpZiAoYXJnYyA9 PSAzKQotKwkJewotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwkJaWYgKCFpbikKLSsJ CQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOwot KwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsJCWlm ICghb3V0KQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0 IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJfQotKwllbHNlIGlmIChhcmdjID09 IDEpCi0rCQl7Ci0rCQlpbiA9IHN0ZGluOwotKwkJb3V0ID0gc3Rkb3V0OwotKwkJfQotKwllbHNl Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiJXMgKGluZmlsZSBvdXRmaWxlKVxuIixhcmd2WzBd KTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYp LCBpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWZwdXRzKGJ1Ziwgb3V0KTsKLSsJCWlmIChkcmJnX3R5 cGUgPT0gRFJCR19OT05FKQotKwkJCXsKLSsJCQlpZiAoc3Ryc3RyKGJ1ZiwgIkNUUl9EUkJHIikp Ci0rCQkJCWRyYmdfdHlwZSA9IERSQkdfQ1RSOwotKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJI YXNoX0RSQkciKSkKLSsJCQkJZHJiZ190eXBlID0gRFJCR19IQVNIOwotKwkJCWVsc2UgaWYgKHN0 cnN0cihidWYsICJITUFDX0RSQkciKSkKLSsJCQkJZHJiZ190eXBlID0gRFJCR19ITUFDOwotKwkJ CWVsc2UgaWYgKHN0cnN0cihidWYsICJEdWFsX0VDX0RSQkciKSkKLSsJCQkJZHJiZ190eXBlID0g RFJCR19EVUFMX0VDOwotKwkJCWVsc2UKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKHN0 cmxlbihidWYpID4gNCAmJiAhc3RybmNtcChidWYsICJbU0hBLSIsIDUpKQotKwkJCXsKLSsJCQlu aWQgPSBkcGFyc2VfbWQoYnVmKTsKLSsJCQlpZiAobmlkID09IE5JRF91bmRlZikKLSsJCQkJZXhp dCgxKTsKLSsJCQlpZiAoZHJiZ190eXBlID09IERSQkdfSE1BQykKLSsJCQkJewotKwkJCQlzd2l0 Y2ggKG5pZCkKLSsJCQkJCXsKLSsJCQkJCWNhc2UgTklEX3NoYTE6Ci0rCQkJCQluaWQgPSBOSURf aG1hY1dpdGhTSEExOwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQljYXNlIE5JRF9zaGEyMjQ6Ci0r CQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEyMjQ7Ci0rCQkJCQlicmVhazsKLSsKLSsJCQkJCWNh c2UgTklEX3NoYTI1NjoKLSsJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTI1NjsKLSsJCQkJCWJy ZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhMzg0OgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRo U0hBMzg0OwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQljYXNlIE5JRF9zaGE1MTI6Ci0rCQkJCQlu aWQgPSBOSURfaG1hY1dpdGhTSEE1MTI7Ci0rCQkJCQlicmVhazsKLSsKLSsJCQkJCWRlZmF1bHQ6 Ci0rCQkJCQlleGl0KDEpOwotKwkJCQkJfQotKwkJCQl9Ci0rCQkJfQotKwkJaWYgKHN0cmxlbihi dWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW0FFUy0iLCA1KSkKLSsJCQl7Ci0rCQkJbmlkID0g cGFyc2VfYWVzKGJ1ZiwgJmRmKTsKLSsJCQlpZiAobmlkID09IE5JRF91bmRlZikKLSsJCQkJZXhp dCgxKTsKLSsJCQl9Ci0rCQlpZiAoc3RybGVuKGJ1ZikgPiAxMiAmJiAhc3RybmNtcChidWYsICJb UC0iLCAzKSkKLSsJCQl7Ci0rCQkJbmlkID0gcGFyc2VfZWMoYnVmKTsKLSsJCQlpZiAobmlkID09 IE5JRF91bmRlZikKLSsJCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtl eXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsKLSsKLSsJCWlmICghc3Ry Y21wKGtleXdvcmQsICJbUHJlZGljdGlvblJlc2lzdGFuY2UiKSkKLSsJCQl7Ci0rCQkJaWYgKCFz dHJjbXAodmFsdWUsICJUcnVlXSIpKQotKwkJCQlwciA9IDE7Ci0rCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIkZhbHNlXSIpKQotKwkJCQlwciA9IDA7Ci0rCQkJZWxzZQotKwkJCQlleGl0KDEp OwotKwkJCX0KLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXQiKSkKLSsJ CQl7Ci0rCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKLSsJCQl0LmVudCA9IGVu dDsKLSsJCQl0LmVudGxlbiA9IGVudGxlbjsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3 b3JkLCAiTm9uY2UiKSkKLSsJCQl7Ci0rCQkJbm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZub25j ZWxlbik7Ci0rCQkJdC5ub25jZSA9IG5vbmNlOwotKwkJCXQubm9uY2VsZW4gPSBub25jZWxlbjsK LSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiUGVyc29uYWxpemF0aW9uU3RyaW5n IikpCi0rCQkJewotKwkJCXBlcnMgPSBoZXgyYmluX20odmFsdWUsICZwZXJzbGVuKTsKLSsJCQlp ZiAobmlkID09IDApCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJEUkJHIHR5cGUgbm90 IHJlY29nbmlzZWQhXG4iKTsKLSsJCQkJZXhpdCAoMSk7Ci0rCQkJCX0KLSsJCQlkY3R4ID0gRklQ U19kcmJnX25ldyhuaWQsIGRmIHwgRFJCR19GTEFHX1RFU1QpOwotKwkJCWlmICghZGN0eCkKLSsJ CQkJZXhpdCAoMSk7Ci0rCQkJRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRy b3B5LCAwLCAwLAotKwkJCQkJCQl0ZXN0X25vbmNlLCAwKTsKLSsJCQlGSVBTX2RyYmdfc2V0X2Fw cF9kYXRhKGRjdHgsICZ0KTsKLSsJCQlyYW5kb3V0bGVuID0gKGludClGSVBTX2RyYmdfZ2V0X2Js b2NrbGVuZ3RoKGRjdHgpOwotKwkJCXIgPSBGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgcGVy cywgcGVyc2xlbik7Ci0rCQkJaWYgKCFyKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAi RXJyb3IgaW5zdGFudGlhdGluZyBEUkJHXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJ CU9QRU5TU0xfZnJlZShwZXJzKTsKLSsJCQlPUEVOU1NMX2ZyZWUoZW50KTsKLSsJCQlPUEVOU1NM X2ZyZWUobm9uY2UpOwotKwkJCWVudCA9IG5vbmNlID0gcGVycyA9IE5VTEw7Ci0rCQkJZ2VuID0g MDsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQWRkaXRpb25hbElucHV0Iikp Ci0rCQkJewotKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUsICZhZGlubGVuKTsKLSsJCQlpZiAo cHIpCi0rCQkJCWNvbnRpbnVlOwotKwkJCXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgcmFuZG91dGxlbiwgMCwKLSsJCQkJCQkJCWFkaW4sIGFkaW5sZW4pOwotKwkJCWlmICgh cikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdlbmVyYXRpbmcgRFJCRyBi aXRzXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCWlmICghcikKLSsJCQkJZXhpdCgx KTsKLSsJCQlPUEVOU1NMX2ZyZWUoYWRpbik7Ci0rCQkJYWRpbiA9IE5VTEw7Ci0rCQkJZ2VuKys7 Ci0rCQkJfQotKwotKwkJaWYgKHByKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAi RW50cm9weUlucHV0UFIiKSkKLSsJCQkJewotKwkJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZl bnRsZW4pOwotKwkJCQl0LmVudCA9IGVudDsKLSsJCQkJdC5lbnRsZW4gPSBlbnRsZW47Ci0rCQkJ CXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwKLSsJCQkJCQkJcmFuZG91dCwgcmFuZG91dGxl biwKLSsJCQkJCQkJMSwgYWRpbiwgYWRpbmxlbik7Ci0rCQkJCWlmICghcikKLSsJCQkJCXsKLSsJ CQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJCSJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xu Iik7Ci0rCQkJCQlleGl0KDEpOwotKwkJCQkJfQotKwkJCQlPUEVOU1NMX2ZyZWUoYWRpbik7Ci0r CQkJCU9QRU5TU0xfZnJlZShlbnQpOwotKwkJCQlhZGluID0gZW50ID0gTlVMTDsKLSsJCQkJZ2Vu Kys7Ci0rCQkJCX0KLSsJCQl9Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0 UmVzZWVkIikpCi0rCQkJewotKwkJCWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7Ci0r CQkJdC5lbnQgPSBlbnQ7Ci0rCQkJdC5lbnRsZW4gPSBlbnRsZW47Ci0rCQkJfQotKwkJaWYgKCFz dHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dFJlc2VlZCIpKQotKwkJCXsKLSsJCQlhZGlu ID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7Ci0rCQkJRklQU19kcmJnX3Jlc2VlZChkY3R4 LCBhZGluLCBhZGlubGVuKTsKLSsJCQlPUEVOU1NMX2ZyZWUoZW50KTsKLSsJCQlPUEVOU1NMX2Zy ZWUoYWRpbik7Ci0rCQkJZW50ID0gYWRpbiA9IE5VTEw7Ci0rCQkJfQotKwkJaWYgKGdlbiA9PSAy KQotKwkJCXsKLSsJCQlPdXRwdXRWYWx1ZSgiUmV0dXJuZWRCaXRzIiwgcmFuZG91dCwgcmFuZG91 dGxlbiwKLSsJCQkJCQkJCQlvdXQsIDApOwotKwkJCUZJUFNfZHJiZ19mcmVlKGRjdHgpOwotKwkJ CWRjdHggPSBOVUxMOwotKwkJCWdlbiA9IDA7Ci0rCQkJfQotKwotKwkJfQotKwlpZiAoaW4gJiYg aW4gIT0gc3RkaW4pCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIG91dCAhPSBzdGRvdXQp Ci0rCQlmY2xvc2Uob3V0KTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEu Mzk4NzY5MjU1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Rzc3ZzLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTg3NjkyNTUgKzAyMDAKLUBAIC0wLDAgKzEs NTM3IEBACi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7Ci0r ICAgIHJldHVybigwKTsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rc3RhdGljIHZvaWQgcGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4p Ci0rCXsKLSsJaW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9u dW1fYnl0ZXMoYm4pOwotKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwot KwkJcmV0dXJuOwotKwkJfQotKwlCTl9ibjJiaW4oYm4sIHRtcCk7Ci0rCXByaW50ZigiJXMgPSAi LCBuYW1lKTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotKwkJcHJpbnRmKCIlMDJYIiwg dG1wW2ldKTsKLSsJZnB1dHMoIlxuIiwgc3Rkb3V0KTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0r CXJldHVybjsKLSsJfQotKwotK3ZvaWQgcHJpbWVzKCkKLSsgICAgewotKyAgICBjaGFyIGJ1Zlsx MDI0MF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0r CXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZh bHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJp bWUiKSkKLSsJICAgIHsKLSsJICAgIEJJR05VTSAqcHA7Ci0rCi0rCSAgICBwcD1CTl9uZXcoKTsK LSsJICAgIGRvX2hleDJibigmcHAsdmFsdWUpOwotKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4i LAotKwkJICAgQk5faXNfcHJpbWVfZXgocHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7Ci0r CSAgICB9CSAgICAKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBwcWcoKQotKyAgICB7Ci0rICAgIGNo YXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVv ZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAm dmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRp bnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRv aSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCi0rCSAgICB7Ci0rCSAg ICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5t b2QpOwotKwotKwkgICAgd2hpbGUobi0tKQotKwkJewotKwkJdW5zaWduZWQgY2hhciBzZWVkWzIw XTsKLSsJCURTQSAqZHNhOwotKwkJaW50IGNvdW50ZXI7Ci0rCQl1bnNpZ25lZCBsb25nIGg7Ci0r CQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKLSsKLSsJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRl cnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291bnRlciwmaCxOVUxMKSkKLSsJCQl7Ci0rCQkJZG9f cHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlwYm4oIlAiLGRzYS0+cCk7 Ci0rCQlwYm4oIlEiLGRzYS0+cSk7Ci0rCQlwYm4oIkciLGRzYS0+Zyk7Ci0rCQlwdigiU2VlZCIs c2VlZCwyMCk7Ci0rCQlwcmludGYoImMgPSAlZFxuIixjb3VudGVyKTsKLSsJCXByaW50ZigiSCA9 ICVseFxuIixoKTsKLSsJCXB1dGMoJ1xuJyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwllbHNl Ci0rCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBwcWd2ZXIo KQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0r ICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBO VUxMLCAqZyA9IE5VTEw7Ci0rICAgIGludCBjb3VudGVyLCBjb3VudGVyMjsKLSsgICAgdW5zaWdu ZWQgbG9uZyBoLCBoMjsKLSsgICAgRFNBICpkc2E9TlVMTDsKLSsgICAgaW50IG5tb2Q9MDsKLSsg ICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRdOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6 ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQs ICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29u dGludWU7Ci0rCQl9Ci0rCWZwdXRzKGJ1Ziwgc3Rkb3V0KTsKLSsJaWYoIXN0cmNtcChrZXl3b3Jk LCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiUCIpKQotKwkgICAgcD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiUSIpKQotKwkgICAgcT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiRyIpKQotKwkgICAgZz1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiU2VlZCIpKQotKwkgICAgewotKwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBz ZWVkKTsKLSsJICAgIGlmIChzbGVuICE9IDIwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJT ZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIH0K LSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImMiKSkKLSsJICAgIGNvdW50ZXIgPWF0b2koYnVm KzQpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSCIpKQotKwkgICAgewotKwkgICAgaCA9 IGF0b2kodmFsdWUpOwotKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIGRz YSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50ZXIyLCZoMixOVUxMKSkKLSsJCQl7Ci0rCQkJZG9f cHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rICAgICAgICAgICAgaWYgKEJO X2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcp Ci0rCQl8fCAoY291bnRlciAhPSBjb3VudGVyMikgfHwgKGggIT0gaDIpKQotKwkgICAgCXByaW50 ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAgICBlbHNlCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQ XG4iKTsKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCSAgICBCTl9mcmVlKHEpOwotKwkgICAgQk5fZnJl ZShnKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgcSA9IE5VTEw7Ci0rCSAgICBnID0gTlVMTDsK LSsJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYSA9IE5VTEw7Ci0rCSAgICB9Ci0r CX0KLSsgICAgfQotKwotKy8qIEtleXBhaXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlz IGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZJUFMxNDAtMgotKyAqIGFsZ29yaXRobSB0ZXN0 cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0 aGUKLSsgKiBvdXRwdXQgb2YgdGhlIEtleVBhaXIgdGVzdC4KLSsgKi8KLSsKLStzdGF0aWMgaW50 IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpn LAotKwkJCQkJCQlCTl9DVFggKmN0eCkKLSsgICAgewotKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7 Ci0rICAgIGlmIChCTl9udW1fYml0cyhwKSAhPSBubW9kKQotKwlyZXR1cm4gMDsKLSsgICAgaWYg KEJOX251bV9iaXRzKHEpICE9IDE2MCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmlt ZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0r ICAgIGlmIChCTl9pc19wcmltZV9leChxLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0g MSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJlbSA9IEJOX25ldygpOwotKyAgICBpZiAoIUJOX21vZChy ZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pCi0rICAgIAl8fCAoQk5fY21wKGcsIEJO X3ZhbHVlX29uZSgpKSA8PSAwKQotKwl8fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkg fHwgIUJOX2lzX29uZShyZW0pKQotKwl7Ci0rCUJOX2ZyZWUocmVtKTsKLSsJcmV0dXJuIDA7Ci0r CX0KLSsgICAgLyogVG9kbzogY2hlY2sgZyAqLwotKyAgICBCTl9mcmVlKHJlbSk7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rdm9pZCBrZXl2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVm WzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVM TCwgKlkgPSBOVUxMOwotKyAgICBCSUdOVU0gKlkyOwotKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7 Ci0rICAgIGludCBubW9kPTAsIHBhcmFtY2hlY2sgPSAwOwotKwotKyAgICBjdHggPSBCTl9DVFhf bmV3KCk7Ci0rICAgIFkyID0gQk5fbmV3KCk7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXpl b2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250 aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAg ICBpZiAocCkKLSsJCUJOX2ZyZWUocCk7Ci0rCSAgICBwID0gTlVMTDsKLSsJICAgIGlmIChxKQot KwkJQk5fZnJlZShxKTsKLSsJICAgIHEgPSBOVUxMOwotKwkgICAgaWYgKGcpCi0rCQlCTl9mcmVl KGcpOwotKwkgICAgZyA9IE5VTEw7Ci0rCSAgICBwYXJhbWNoZWNrID0gMDsKLSsJICAgIG5tb2Q9 YXRvaSh2YWx1ZSk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0r CSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0r CSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0r CSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCi0r CSAgICBYPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0r CSAgICB7Ci0rCSAgICBZPWhleDJibih2YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcg fHwgIVggfHwgIVkpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsK LSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixwKTsKLSsJICAgIHBibigiUSIscSk7 Ci0rCSAgICBwYm4oIkciLGcpOwotKwkgICAgcGJuKCJYIixYKTsKLSsJICAgIHBibigiWSIsWSk7 Ci0rCSAgICBpZiAoIXBhcmFtY2hlY2spCi0rCQl7Ci0rCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1v ZCwgcCwgcSwgZywgY3R4KSkKLSsJCQlwYXJhbWNoZWNrID0gMTsKLSsJCWVsc2UKLSsJCQlwYXJh bWNoZWNrID0gLTE7Ci0rCQl9Ci0rCSAgICBpZiAocGFyYW1jaGVjayAhPSAxKQotKwkgICAJcHJp bnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmICghQk5fbW9kX2V4 cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9jbXAoWTIsIFkpKQotKwkgICAgCQlwcmludGYoIlJl c3VsdCA9IEZcbiIpOwotKwkgICAgICAgIGVsc2UKLSsJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQ XG4iKTsKLSsJCX0KLSsJICAgIEJOX2ZyZWUoWCk7Ci0rCSAgICBCTl9mcmVlKFkpOwotKwkgICAg WCA9IE5VTEw7Ci0rCSAgICBZID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKwlpZiAocCkKLSsJICAg IEJOX2ZyZWUocCk7Ci0rCWlmIChxKQotKwkgICAgQk5fZnJlZShxKTsKLSsJaWYgKGcpCi0rCSAg ICBCTl9mcmVlKGcpOwotKwlpZiAoWTIpCi0rCSAgICBCTl9mcmVlKFkyKTsKLSsgICAgfQotKwot K3ZvaWQga2V5cGFpcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIg bGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0w OwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJ ewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsK LSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAo a2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsKLSsJICAgIERTQSAqZHNhOwotKwkgICAgaW50IG49 YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJ ICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1l dGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3By aW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsK LSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1 dGMoJ1xuJyxzdGRvdXQpOwotKwotKwkgICAgd2hpbGUobi0tKQotKwkJewotKwkJaWYgKCFEU0Ff Z2VuZXJhdGVfa2V5KGRzYSkpCi0rCQkJewotKwkJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJCWV4 aXQoMSk7Ci0rCQkJfQotKwotKwkJcGJuKCJYIixkc2EtPnByaXZfa2V5KTsKLSsJCXBibigiWSIs ZHNhLT5wdWJfa2V5KTsKLSsJCXB1dGMoJ1xuJyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwl9 Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ2dlbigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07 Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAg ICBpbnQgbm1vZD0wOwotKyAgICBEU0EgKmRzYT1OVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhi dWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtl eXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwot KwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAg ewotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4i LG5tb2QpOwotKwkgICAgaWYgKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRz YSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vy cm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAg IHBibigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xu JyxzdGRvdXQpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCi0r CSAgICB7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKLSsJICAgIHVuc2lnbmVkIGNo YXIgc2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsJICAgIGludCBuOwotKwkg ICAgRVZQX1BLRVkgcGs7Ci0rCSAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBEU0FfU0lHICpz aWc7Ci0rCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwotKwkgICAgbj1oZXgyYmluKHZh bHVlLG1zZyk7Ci0rCSAgICBwdigiTXNnIixtc2csbik7Ci0rCi0rCSAgICBpZiAoIURTQV9nZW5l cmF0ZV9rZXkoZHNhKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsK LSsJCX0KLSsJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9 IGRzYTsKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsKLSsJICAgIEVWUF9TaWduSW5p dF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7Ci0rCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0 eCwgbXNnLCBuKTsKLSsJICAgIEVWUF9TaWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGsp OwotKwotKwkgICAgc2lnID0gRFNBX1NJR19uZXcoKTsKLSsJICAgIEZJUFNfZHNhX3NpZ19kZWNv ZGUoc2lnLCBzYnVmLCBzbGVuKTsKLSsKLSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBi bigiUyIsc2lnLT5zKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgRFNBX1NJR19m cmVlKHNpZyk7Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwkgICAgfQotKwl9 Ci0rCWlmIChkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rICAgIH0KLSsKLSt2b2lkIHNp Z3ZlcigpCi0rICAgIHsKLSsgICAgRFNBICpkc2E9TlVMTDsKLSsgICAgY2hhciBidWZbMTAyNF07 Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Ci0r ICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MCwgbj0wOwotKyAgICBE U0FfU0lHIHNnLCAqc2lnID0gJnNnOwotKwotKyAgICBzaWctPnIgPSBOVUxMOwotKyAgICBzaWct PnMgPSBOVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVl KTsKLSsJICAgIGlmKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYT1GSVBT X2RzYV9uZXcoKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJ ICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIp KQotKwkgICAgZHNhLT5xPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJHIikpCi0rCSAgICB7Ci0rCSAgICBkc2EtPmc9aGV4MmJuKHZhbHVlKTsKLSsKLSsJICAgIHBy aW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkg ICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0Yygn XG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkK LSsJICAgIHsKLSsJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOwotKwkgICAgcHYoIk1zZyIsbXNn LG4pOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQotKwkgICAgZHNh LT5wdWJfa2V5PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikp Ci0rCSAgICBzaWctPnI9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlMiKSkKLSsJICAgIHsKLSsJICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAgIEVWUF9QS0VZIHBr OwotKwkgICAgdW5zaWduZWQgY2hhciBzaWdidWZbNjBdOwotKwkgICAgdW5zaWduZWQgaW50IHNs ZW47Ci0rCSAgICBpbnQgcjsKLSsJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCSAgICBw ay50eXBlID0gRVZQX1BLRVlfRFNBOwotKwkgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCSAgICBz aWctPnM9aGV4MmJuKHZhbHVlKTsKLSsJCi0rCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0r CSAgICBwYm4oIlIiLHNpZy0+cik7Ci0rCSAgICBwYm4oIlMiLHNpZy0+cyk7Ci0rCi0rCSAgICBz bGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShzaWdidWYsIHNpZyk7Ci0rCSAgICBFVlBfVmVyaWZ5 SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7Ci0rCSAgICBFVlBfVmVyaWZ5VXBkYXRl KCZtY3R4LCBtc2csIG4pOwotKwkgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVm LCBzbGVuLCAmcGspOwotKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJCi0rCSAg ICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCByID09IDEgPyAnUCcgOiAnRicpOwotKwkgICAgcHV0 YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBh cmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJp bnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxu Iixhcmd2WzBdKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkK LSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighc3Ry Y21wKGFyZ3ZbMV0sInByaW1lIikpCi0rCXByaW1lcygpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAo YXJndlsxXSwicHFnIikpCi0rCXBxZygpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwi cHFndmVyIikpCi0rCXBxZ3ZlcigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5 cGFpciIpKQotKwlrZXlwYWlyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2 ZXIiKSkKLSsJa2V5dmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4i KSkKLSsJc2lnZ2VuKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkK LSsJc2lndmVyKCk7Ci0rICAgIGVsc2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25v dyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVy biAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2djbXRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMv Zmlwc19nY210ZXN0LmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5OTc2OTI3NiArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMJMjAxMi0w NC0yNiAxODowMDo1MS4zOTk3NjkyNzYgKzAyMDAKLUBAIC0wLDAgKzEsNTcxIEBACi0rLyogZmlw cy9hZXMvZmlwc19nY210ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z b24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAq LwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFBy 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKwotKyNkZWZpbmUgT1BF TlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZu ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBHQ00gc3VwcG9ydFxu Iik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUg ImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZvaWQgZ2NtdGVzdChGSUxFICppbiwgRklMRSAqb3V0 LCBpbnQgZW5jcnlwdCkKLSsJewotKwljaGFyIGJ1ZlsyMDQ4XTsKLSsJY2hhciBsYnVmWzIwNDhd OwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWludCBrZXlsZW4gPSAtMSwgaXZsZW4gPSAt MSwgYWFkbGVuID0gLTEsIHRhZ2xlbiA9IC0xLCBwdGxlbiA9IC0xOwotKwlpbnQgcnY7Ci0rCWxv bmcgbDsKLSsJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0gTlVMTCwgKmFhZCA9IE5V TEwsICp0YWcgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpjdCA9IE5VTEwsICpwdCA9IE5VTEw7 Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJY29uc3QgRVZQX0NJUEhFUiAqZ2NtID0gTlVMTDsK LSsJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7Ci0rCi0rCXdoaWxlKGZnZXRzKGJ1ZixzaXpl b2YgYnVmLGluKSAhPSBOVUxMKQotKwkJewotKwkJZnB1dHMoYnVmLG91dCk7Ci0rCQlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsKLSsJ CWlmKCFzdHJjbXAoa2V5d29yZCwiW0tleWxlbiIpKQotKwkJCXsKLSsJCQlrZXlsZW4gPSBhdG9p KHZhbHVlKTsKLSsJCQlpZiAoa2V5bGVuID09IDEyOCkKLSsJCQkJZ2NtID0gRVZQX2Flc18xMjhf Z2NtKCk7Ci0rCQkJZWxzZSBpZiAoa2V5bGVuID09IDE5MikKLSsJCQkJZ2NtID0gRVZQX2Flc18x OTJfZ2NtKCk7Ci0rCQkJZWxzZSBpZiAoa2V5bGVuID09IDI1NikKLSsJCQkJZ2NtID0gRVZQX2Fl c18yNTZfZ2NtKCk7Ci0rCQkJZWxzZSAKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVu c3VwcG9ydGVkIGtleWxlbiAlZFxuIiwKLSsJCQkJCQkJa2V5bGVuKTsKLSsJCQkJfQotKwkJCWtl eWxlbiA+Pj0gMzsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbSVZsZW4i KSkKLSsJCQlpdmxlbiA9IGF0b2kodmFsdWUpID4+IDM7Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJbQUFEbGVuIikpCi0rCQkJYWFkbGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltUYWdsZW4iKSkKLSsJCQl0YWdsZW4gPSBhdG9pKHZh bHVlKSA+PiAzOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1BUbGVuIikpCi0rCQkJ cHRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIktl eSIpKQotKwkJCXsKLSsJCQlrZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAh PSBrZXlsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5 IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiSVYiKSkKLSsJCQl7Ci0rCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZs KTsKLSsJCQlpZiAobCAhPSBpdmxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklu Y29uc2lzdGVudCBJViBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQot KwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlBUIikpCi0rCQkJewotKwkJCXB0ID0gaGV4MmJp bl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gcHRsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50 ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgUFQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJ CQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJDVCIpKQotKwkJCXsKLSsJ CQljdCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IHB0bGVuKQotKwkJCQl7 Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7Ci0rCQkJ CWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiQUFE IikpCi0rCQkJewotKwkJCWFhZCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9 IGFhZGxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBBQUQg bGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJUYWciKSkKLSsJCQl7Ci0rCQkJdGFnID0gaGV4MmJpbl9tKHZhbHVlLCAm bCk7Ci0rCQkJaWYgKGwgIT0gdGFnbGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAi SW5jb25zaXN0ZW50IFRhZyBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJ fQotKwkJaWYgKGVuY3J5cHQgJiYgcHQgJiYgYWFkICYmIChpdiB8fCBlbmNyeXB0PT0xKSkKLSsJ CQl7Ci0rCQkJdGFnID0gT1BFTlNTTF9tYWxsb2ModGFnbGVuKTsKLSsJCQlGSVBTX2NpcGhlcmlu aXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAxKTsKLSsJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFp bnRzIGZvciB0ZXN0aW5nICovCi0rCQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwg RVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwo JmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOwotKwkJCWlmIChlbmNyeXB0 ID09IDEpCi0rCQkJCXsKLSsJCQkJc3RhdGljIHVuc2lnbmVkIGNoYXIgaXZfZml4ZWRbNF0gPSB7 MSwyLDMsNH07Ci0rCQkJCWlmICghaXYpCi0rCQkJCQlpdiA9IE9QRU5TU0xfbWFsbG9jKGl2bGVu KTsKLSsJCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgTlVMTCwgMSk7Ci0rCQkJ CUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsCi0rCQkJCQkJRVZQX0NUUkxfR0NNX1NFVF9JVl9G SVhFRCwKLSsJCQkJCQk0LCBpdl9maXhlZCk7Ci0rCQkJCWlmICghRklQU19jaXBoZXJfY3R4X2N0 cmwoJmN0eCwKLSsJCQkJCUVWUF9DVFJMX0dDTV9JVl9HRU4sIDAsIGl2KSkKLSsJCQkJCXsKLSsJ CQkJCWZwcmludGYoc3RkZXJyLCAiSVYgZ2VuIGVycm9yXG4iKTsKLSsJCQkJCWV4aXQoMSk7Ci0r CQkJCQl9Ci0rCQkJCU91dHB1dFZhbHVlKCJJViIsIGl2LCBpdmxlbiwgb3V0LCAwKTsKLSsJCQkJ fQotKwkJCWVsc2UKLSsJCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDEp OwotKwotKwotKwkJCWlmIChhYWRsZW4pCi0rCQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFh ZCwgYWFkbGVuKTsKLSsJCQlpZiAocHRsZW4pCi0rCQkJCXsKLSsJCQkJY3QgPSBPUEVOU1NMX21h bGxvYyhwdGxlbik7Ci0rCQkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgY3QsIHB0LCBwdGxlbik7 Ci0rCQkJCX0KLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKTsKLSsJCQlGSVBT X2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywKLSsJCQkJCQkJCXRh Z2xlbiwgdGFnKTsJCi0rCQkJT3V0cHV0VmFsdWUoIkNUIiwgY3QsIHB0bGVuLCBvdXQsIDApOwot KwkJCU91dHB1dFZhbHVlKCJUYWciLCB0YWcsIHRhZ2xlbiwgb3V0LCAwKTsKLSsJCQlpZiAoaXYp Ci0rCQkJCU9QRU5TU0xfZnJlZShpdik7Ci0rCQkJaWYgKGFhZCkKLSsJCQkJT1BFTlNTTF9mcmVl KGFhZCk7Ci0rCQkJaWYgKGN0KQotKwkJCQlPUEVOU1NMX2ZyZWUoY3QpOwotKwkJCWlmIChwdCkK LSsJCQkJT1BFTlNTTF9mcmVlKHB0KTsKLSsJCQlpZiAoa2V5KQotKwkJCQlPUEVOU1NMX2ZyZWUo a2V5KTsKLSsJCQlpZiAodGFnKQotKwkJCQlPUEVOU1NMX2ZyZWUodGFnKTsKLSsJCQlpdiA9IGFh ZCA9IGN0ID0gcHQgPSBrZXkgPSB0YWcgPSBOVUxMOwotKwkJCX0JCi0rCQlpZiAoIWVuY3J5cHQg JiYgdGFnKQotKwkJCXsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxM LCAwKTsKLSsJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCi0rCQkJ TV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19B TExPVyk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9J VkxFTiwgaXZsZW4sIDApOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIGl2 LCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX1RB RywgdGFnbGVuLCB0YWcpOwotKwkJCWlmIChhYWRsZW4pCi0rCQkJCUZJUFNfY2lwaGVyKCZjdHgs IE5VTEwsIGFhZCwgYWFkbGVuKTsKLSsJCQlpZiAocHRsZW4pCi0rCQkJCXsKLSsJCQkJcHQgPSBP UEVOU1NMX21hbGxvYyhwdGxlbik7Ci0rCQkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgcHQsIGN0 LCBwdGxlbik7Ci0rCQkJCX0KLSsJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEws IDApOwotKwkJCWlmIChydiA8IDApCi0rCQkJCWZwcmludGYob3V0LCAiRkFJTCIgUkVTUF9FT0wp OwotKwkJCWVsc2UKLSsJCQkJT3V0cHV0VmFsdWUoIlBUIiwgcHQsIHB0bGVuLCBvdXQsIDApOwot KwkJCWlmIChpdikKLSsJCQkJT1BFTlNTTF9mcmVlKGl2KTsKLSsJCQlpZiAoYWFkKQotKwkJCQlP UEVOU1NMX2ZyZWUoYWFkKTsKLSsJCQlpZiAoY3QpCi0rCQkJCU9QRU5TU0xfZnJlZShjdCk7Ci0r CQkJaWYgKHB0KQotKwkJCQlPUEVOU1NMX2ZyZWUocHQpOwotKwkJCWlmIChrZXkpCi0rCQkJCU9Q RU5TU0xfZnJlZShrZXkpOwotKwkJCWlmICh0YWcpCi0rCQkJCU9QRU5TU0xfZnJlZSh0YWcpOwot KwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9IE5VTEw7Ci0rCQkJfQotKwkJfQot KwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCi0rCX0KLSsKLStzdGF0aWMgdm9pZCB4 dHN0ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCi0rCXsKLSsJY2hhciBidWZbMjA0ODAwXTsKLSsJ Y2hhciBsYnVmWzIwNDgwMF07Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJaW50IGlubGVu ID0gMDsKLSsJaW50IGVuY3J5cHQgPSAwOwotKwlsb25nIGw7Ci0rCXVuc2lnbmVkIGNoYXIgKmtl eSA9IE5VTEwsICppdiA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKmluYnVmID0gTlVMTCwgKm91 dGJ1ZiA9IE5VTEw7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJY29uc3QgRVZQX0NJUEhFUiAq eHRzID0gTlVMTDsKLSsJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7Ci0rCi0rCXdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQotKwkJewotKwkJZnB1dHMoYnVmLG91dCk7 Ci0rCQlpZiAoYnVmWzBdID09ICdbJyAmJiBzdHJsZW4oYnVmKSA+PSA5KQotKwkJCXsKLSsJCQlp Zighc3RybmNtcChidWYsIltFTkNSWVBUXSIsIDkpKQotKwkJCQllbmNyeXB0ID0gMTsKLSsJCQll bHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0RFQ1JZUFRdIiwgOSkpCi0rCQkJCWVuY3J5cHQgPSAwOwot KwkJCX0KLSsJCWlmICAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK LSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJCQl7 Ci0rCQkJa2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgPT0gMzIpCi0rCQkJ CXh0cyA9IEVWUF9hZXNfMTI4X3h0cygpOwotKwkJCWVsc2UgaWYgKGwgPT0gNjQpCi0rCQkJCXh0 cyA9IEVWUF9hZXNfMjU2X3h0cygpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0 ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJ fQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJpIikpCi0rCQkJewotKwkJCWl2 ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gMTYpCi0rCQkJCXsKLSsJCQkJ ZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgaSBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEp OwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZihlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwi UFQiKSkKLSsJCQl7Ci0rCQkJaW5idWYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpbmxl biA9IGw7Ci0rCQkJfQotKwkJZWxzZSBpZighZW5jcnlwdCAmJiAhc3RyY21wKGtleXdvcmQsIkNU IikpCi0rCQkJewotKwkJCWluYnVmID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaW5sZW4g PSBsOwotKwkJCX0KLSsJCWlmIChpbmJ1ZikKLSsJCQl7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZj dHgsIHh0cywga2V5LCBpdiwgZW5jcnlwdCk7Ci0rCQkJb3V0YnVmID0gT1BFTlNTTF9tYWxsb2Mo aW5sZW4pOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIG91dGJ1ZiwgaW5idWYsIGlubGVuKTsKLSsJ CQlPdXRwdXRWYWx1ZShlbmNyeXB0ID8gIkNUIjoiUFQiLCBvdXRidWYsIGlubGVuLCBvdXQsIDAp OwotKwkJCU9QRU5TU0xfZnJlZShpbmJ1Zik7Ci0rCQkJT1BFTlNTTF9mcmVlKG91dGJ1Zik7Ci0r CQkJT1BFTlNTTF9mcmVlKGtleSk7Ci0rCQkJT1BFTlNTTF9mcmVlKGl2KTsKLSsJCQlpdiA9IGtl eSA9IGluYnVmID0gb3V0YnVmID0gTlVMTDsKLSsJCQl9CQotKwkJfQotKwlGSVBTX2NpcGhlcl9j dHhfY2xlYW51cCgmY3R4KTsJCi0rCX0KLSsKLStzdGF0aWMgdm9pZCBjY210ZXN0KEZJTEUgKmlu LCBGSUxFICpvdXQpCi0rCXsKLSsJY2hhciBidWZbMjAwMDQ4XTsKLSsJY2hhciBsYnVmWzIwMDA0 OF07Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJbG9uZyBsOwotKwl1bnNpZ25lZCBjaGFy ICpLZXkgPSBOVUxMLCAqTm9uY2UgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpBZGF0YSA9IE5V TEwsICpQYXlsb2FkID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqQ1QgPSBOVUxMOwotKwlpbnQg UGxlbiA9IC0xLCBObGVuID0gLTEsIFRsZW4gPSAtMSwgQWxlbiA9IC0xOwotKwlpbnQgZGVjciA9 IDA7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJY29uc3QgRVZQX0NJUEhFUiAqY2NtID0gTlVM TDsKLSsJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7Ci0rCi0rCXdoaWxlKGZnZXRzKGJ1Zixz aXplb2YgYnVmLGluKSAhPSBOVUxMKQotKwkJewotKwkJY2hhciAqcDsKLSsJCWZwdXRzKGJ1Zixv dXQpOwotKwkJcmVkbzoKLSsJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwotKwkJLyogSWYgc3Vycm91bmRlZCBieSBzcXVhcmUg YnJhY2tldHMgemFwIHRoZW0gKi8KLSsJCWlmIChrZXl3b3JkWzBdID09ICdbJykKLSsJCQl7Ci0r CQkJa2V5d29yZCsrOwotKwkJCXAgPSBzdHJjaHIodmFsdWUsICddJyk7Ci0rCQkJaWYgKHApCi0r CQkJCSpwID0gMDsKLSsJCQl9Ci0rCQkvKiBTZWUgaWYgd2UgaGF2ZSBhIGNvbW1hIHNlcGFyYXRl ZCBsaXN0IG9mIHBhcmFtZXRlcnMKLSsJCSAqIGlmIHNvIGNvcHkgcmVzdCBvZiBsaW5lIGJhY2sg dG8gYnVmZmVyIGFuZCByZWRvIGxhdGVyLgotKwkJICovCi0rCQlwID0gc3RyY2hyKHZhbHVlLCAn LCcpOwotKwkJaWYgKHApCi0rCQkJewotKwkJCSpwID0gMDsKLSsJCQlzdHJjcHkoYnVmLCBwICsg MSk7Ci0rCQkJc3RyY2F0KGJ1ZiwgIlxuIik7Ci0rCQkJZGVjciA9IDE7Ci0rCQkJfQotKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwiUGxlbiIpKQotKwkJCVBsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiTmxlbiIpKQotKwkJCU5sZW4gPSBhdG9pKHZhbHVlKTsK LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiVGxlbiIpKQotKwkJCVRsZW4gPSBhdG9pKHZh bHVlKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQWxlbiIpKQotKwkJCUFsZW4gPSBh dG9pKHZhbHVlKTsKLSsJCWlmIChwKQotKwkJCWdvdG8gcmVkbzsKLSsJCWlmICghc3RyY21wKGtl eXdvcmQsIktleSIpKQotKwkJCXsKLSsJCQlpZiAoS2V5KQotKwkJCQlPUEVOU1NMX2ZyZWUoS2V5 KTsKLSsJCQlLZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCA9PSAxNikKLSsJ CQkJY2NtID0gRVZQX2Flc18xMjhfY2NtKCk7Ci0rCQkJZWxzZSBpZiAobCA9PSAyNCkKLSsJCQkJ Y2NtID0gRVZQX2Flc18xOTJfY2NtKCk7Ci0rCQkJZWxzZSBpZiAobCA9PSAzMikKLSsJCQkJY2Nt ID0gRVZQX2Flc18yNTZfY2NtKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3Rk ZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJOb25jZSIpKQotKwkJCXsKLSsJ CQlpZiAoTm9uY2UpCi0rCQkJCU9QRU5TU0xfZnJlZShOb25jZSk7Ci0rCQkJTm9uY2UgPSBoZXgy YmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBObGVuKQotKwkJCQl7Ci0rCQkJCWZwcmlu dGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IG5vbmNlIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7 Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIlBheWxvYWQiKSAm JiAhZGVjcikKLSsJCQl7Ci0rCQkJUGF5bG9hZCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJ CWlmIChQbGVuICYmIGwgIT0gUGxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklu Y29uc2lzdGVudCBQYXlsb2FkIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJ CQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkFkYXRhIikpCi0rCQkJewotKwkJCWlm IChBZGF0YSkKLSsJCQkJT1BFTlNTTF9mcmVlKEFkYXRhKTsKLSsJCQlBZGF0YSA9IGhleDJiaW5f bSh2YWx1ZSwgJmwpOwotKwkJCWlmIChBbGVuICYmIGwgIT0gQWxlbikKLSsJCQkJewotKwkJCQlm cHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxlbmd0aFxuIik7Ci0rCQkJCWV4 aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkNUIikg JiYgZGVjcikKLSsJCQl7Ci0rCQkJQ1QgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAo bCAhPSAoUGxlbiArIFRsZW4pKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25z aXN0ZW50IENUIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQlp ZiAoUGF5bG9hZCkKLSsJCQl7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwg TlVMTCwgMSk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NF VF9JVkxFTiwgTmxlbiwgMCk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NU UkxfQ0NNX1NFVF9UQUcsIFRsZW4sIDApOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxM LCBLZXksIE5vbmNlLCAxKTsKLSsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQ bGVuKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7Ci0rCQkJQ1Qg PSBPUEVOU1NMX21hbGxvYyhQbGVuICsgVGxlbik7Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgQ1Qs IFBheWxvYWQsIFBsZW4pOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJM X0NDTV9HRVRfVEFHLCBUbGVuLAotKwkJCQkJCUNUICsgUGxlbik7Ci0rCQkJT3V0cHV0VmFsdWUo IkNUIiwgQ1QsIFBsZW4gKyBUbGVuLCBvdXQsIDApOwotKwkJCU9QRU5TU0xfZnJlZShDVCk7Ci0r CQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOwotKwkJCUNUID0gUGF5bG9hZCA9IE5VTEw7Ci0rCQkJ fQotKwkJaWYgKENUKQotKwkJCXsKLSsJCQlpbnQgcnY7Ci0rCQkJaW50IGxlbiA9IFBsZW4gPT0g MCA/IDE6IFBsZW47Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwg MCk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxF TiwgTmxlbiwgMCk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NN X1NFVF9UQUcsCi0rCQkJCQkJVGxlbiwgQ1QgKyBQbGVuKTsKLSsJCQlGSVBTX2NpcGhlcmluaXQo JmN0eCwgTlVMTCwgS2V5LCBOb25jZSwgMCk7Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwg TlVMTCwgUGxlbik7Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgQWRhdGEsIEFsZW4pOwot KwkJCVBheWxvYWQgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwotKwkJCXJ2ID0gRklQU19jaXBoZXIo JmN0eCwgUGF5bG9hZCwgQ1QsIFBsZW4pOwotKwkJCWlmIChydiA+PSAwKQotKwkJCQl7Ci0rCQkJ CWlmIChydiA9PSAwKQotKwkJCQkJUGF5bG9hZFswXSA9IDA7Ci0rCQkJCWZwdXRzKCJSZXN1bHQg PSBQYXNzIiBSRVNQX0VPTCwgb3V0KTsKLSsJCQkJT3V0cHV0VmFsdWUoIlBheWxvYWQiLCBQYXls b2FkLCBsZW4sIG91dCwgMCk7Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJCWZwdXRzKCJSZXN1bHQg PSBGYWlsIiBSRVNQX0VPTCwgb3V0KTsKLSsJCQlPUEVOU1NMX2ZyZWUoQ1QpOwotKwkJCU9QRU5T U0xfZnJlZShQYXlsb2FkKTsKLSsJCQlDVCA9IFBheWxvYWQgPSBOVUxMOwotKwkJCX0KLSsJCX0K LSsJaWYgKEtleSkKLSsJCU9QRU5TU0xfZnJlZShLZXkpOwotKwlpZiAoTm9uY2UpCi0rCQlPUEVO U1NMX2ZyZWUoTm9uY2UpOwotKwlpZiAoQWRhdGEpCi0rCQlPUEVOU1NMX2ZyZWUoQWRhdGEpOwot KwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsKLSsJfQotKwotKyNpZmRlZiBGSVBTX0FM R1ZTCi0raW50IGZpcHNfZ2NtdGVzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZWxz ZQotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwlpbnQg ZW5jcnlwdDsKLSsJaW50IHh0cyA9IDAsIGNjbSA9IDA7Ci0rCUZJTEUgKmluLCAqb3V0OwotKwlp ZiAoYXJnYyA9PSA0KQotKwkJewotKwkJaW4gPSBmb3Blbihhcmd2WzJdLCAiciIpOwotKwkJaWYg KCFpbikKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZp bGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJb3V0ID0gZm9wZW4oYXJndlszXSwgInci KTsKLSsJCWlmICghb3V0KQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5p bmcgb3V0cHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJfQotKwllbHNlIGlm IChhcmdjID09IDIpCi0rCQl7Ci0rCQlpbiA9IHN0ZGluOwotKwkJb3V0ID0gc3Rkb3V0OwotKwkJ fQotKwllbHNlCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiJXMgWy1lbmNyeXB0fC1kZWNyeXB0 XVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCWZpcHNfYWxndGVzdF9pbml0KCk7 Ci0rCWlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHQiKSkKLSsJCWVuY3J5cHQgPSAxOwotKwll bHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHRJVmV4dCIpKQotKwkJZW5jcnlwdCA9IDI7 Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZGVjcnlwdCIpKQotKwkJZW5jcnlwdCA9IDA7 Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItY2NtIikpCi0rCQljY20gPSAxOwotKwllbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwiLXh0cyIpKQotKwkJeHRzID0gMTsKLSsJZWxzZQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKLSsJ CWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCWlmIChjY20pCi0rCQljY210ZXN0KGluLCBvdXQpOwotKwll bHNlIGlmICh4dHMpCi0rCQl4dHN0ZXN0KGluLCBvdXQpOwotKwllbHNlCi0rCQlnY210ZXN0KGlu LCBvdXQsIGVuY3J5cHQpOwotKwotKwlpZiAoYXJnYyA9PSA0KQotKwkJewotKwkJZmNsb3NlKGlu KTsKLSsJCWZjbG9zZShvdXQpOwotKwkJfQotKwotKwlyZXR1cm4gMDsKLSt9Ci0rCi0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5m aXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCi0tLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjM5OTc2OTI3NiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2NhdnMvZmlwc19ybmd2cy5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk5NzY5Mjc2ICswMjAwCi1A QCAtMCwwICsxLDIzMCBAQAotKy8qCi0rICogQ3J1ZGUgdGVzdCBkcml2ZXIgZm9yIHByb2Nlc3Np bmcgdGhlIFZTVCBhbmQgTUNUIHRlc3R2ZWN0b3IgZmlsZXMKLSsgKiBnZW5lcmF0ZWQgYnkgdGhl IENNVlAgUk5HVlMgcHJvZHVjdC4KLSsgKgotKyAqIE5vdGUgdGhlIGlucHV0IGZpbGVzIGFyZSBh c3N1bWVkIHRvIGhhdmUgYSBfdmVyeV8gc3BlY2lmaWMgZm9ybWF0Ci0rICogYXMgZGVzY3JpYmVk IGluIHRoZSBOSVNUIGRvY3VtZW50ICJUaGUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IKLSsgKiBW YWxpZGF0aW9uIFN5c3RlbSAoUk5HVlMpIiwgTWF5IDI1LCAyMDA0LgotKyAqCi0rICovCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwot KyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK LSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSTkcgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybiAw OwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgi Ci0rCi0rdm9pZCB2c3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9 IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKLSsgICAgY2hhciBidWZbMTAyNF07 Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAg ICBsb25nIGksIGtleWxlbjsKLSsKLSsgICAga2V5bGVuID0gMDsKLSsKLSsgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9 IDE2OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKLSsJCWtl eWxlbiA9IDI0OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkK LSsJCWtleWxlbiA9IDMyOwotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1 ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkg ICAgewotKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSBrZXls ZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0 aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIkRUIikpCi0rCSAgICB7Ci0rCSAgICBkdD1oZXgyYmluX20odmFs dWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIklu dmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlYiKSkKLSsJICAgIHsKLSsJICAgIHY9aGV4MmJpbl9tKHZhbHVl LCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZh bGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIGlmICgha2V5IHx8 ICFkdCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIpOwot KwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4p OwotKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7Ci0rCSAgICBGSVBTX3g5MzFfc2V0X2R0KGR0 KTsKLSsJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2KSA8PSAwKQotKwkJewotKwkJZnBy aW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOwotKwkgICAgICAgIHJl dHVybjsKLSsJICAgICAgICB9Ci0rCi0rCSAgICBwdigiUiIscmV0LDE2KTsKLSsJICAgIE9QRU5T U0xfZnJlZShrZXkpOwotKwkgICAga2V5ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZShkdCk7 Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUodik7Ci0rCSAgICB2ID0gTlVM TDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBtY3QoKQotKyAgICB7Ci0rICAgIHVu c2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOwot KyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2 XTsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hh ciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBsb25nIGksIGtleWxlbjsKLSsgICAgaW50IGo7Ci0r Ci0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0 ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlpZighc3RybmNtcChi dWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAxNjsKLSsJZWxzZSBpZighc3Ry bmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAyNDsKLSsJZWxzZSBp Zighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAzMjsKLSsJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51 ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJICAgIHsKLSsJICAgIGtleT1oZXgy YmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0ga2V5bGVuKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7 Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJE VCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChp ICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7 Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJW IikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAh PSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7Ci0r CQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBpZiAoIWtleSB8fCAhZHQpCi0rCQl7Ci0rCQlmcHJp bnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsK LSsJICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJICAgIEZJUFNfeDkzMV9z ZWVkKHYsMTYpOwotKwkgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCi0rCQl7Ci0rCQkg ICAgRklQU194OTMxX3NldF9kdChkdCk7Ci0rCQkgICAgaWYgKEZJUFNfeDkzMV9ieXRlcyhyZXQs MTYpIDw9IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5H IHZhbHVlXG4iKTsKLSsJCSAgICAgICAgcmV0dXJuOwotKwkJICAgICAgICB9Ci0rCQkgICAgLyog SW5jcmVtZW50IERUICovCi0rCQkgICAgZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQotKwkJCXsK LSsJCQlkdFtqXSsrOwotKwkJCWlmIChkdFtqXSkKLSsJCQkJYnJlYWs7Ci0rCQkJfQotKwkJfQot KwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJICAg IGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoZHQpOwotKwkgICAgZHQgPSBOVUxMOwot KwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkgICAgdiA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsg ICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGlm KGFyZ2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgW21jdHx2c3RdXG4iLGFyZ3Zb MF0pOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0r CWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIEZJUFNfeDkzMV9yZXNl dCgpOwotKyAgICBpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUoKSkKLSsJewotKwlmcHJpbnRmKHN0 ZGVyciwgIkVycm9yIHNldHRpbmcgUFJORyB0ZXN0IG1vZGVcbiIpOwotKwlkb19wcmludF9lcnJv cnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sIm1jdCIpKQot KwltY3QoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInZzdCIpKQotKwl2c3QoKTsK LSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5c biIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0K LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19y c2FndGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0 ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3Qu Yy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk5NzY5Mjc2ICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAxMi0wNC0yNiAxODowMDo1 MS4zOTk3NjkyNzYgKzAyMDAKLUBAIC0wLDAgKzEsMzkwIEBACi0rLyogZmlwc19yc2FndGVzdC5j ICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9y ZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vu c2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5 cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0 c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGlt Ci0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBz dXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRl ICJmaXBzX3V0bC5oIgotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStz dGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAq WHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSk7Ci0rc3RhdGljIGlu dCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklH TlVNICpYcTIsIEJJR05VTSAqWHEpOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0g MTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMo KTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRp bjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8 IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3 Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0 IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAo IW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0 aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91 dCwgaW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHBy b2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9 IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwot KwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYg KG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0r CX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rl c3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYs ICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0r CUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpYcCA9IE5VTEw7Ci0rCUJJR05VTSAq WHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJJR05VTSAqZSA9IE5VTEw7 Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNT TF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxv YyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikK LSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFY TElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5l YnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICov Ci0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29y ZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYs ICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFy XSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsK LSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJ CWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJ CSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJl bW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsK LSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQot KwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQotKwkJCXsK LSsJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCi0rCQkJ ewotKwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQotKwkJ CXsKLSsJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQotKwkJ CXsKLSsJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCi0r CQkJewotKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEyLHZhbHVlKSkKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQot KwkJCXsKLSsJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEsdmFsdWUpKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJ CQl7Ci0rCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKLSsJCQlj b250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAyIikpCi0rCQkJY29udGlu dWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwIikpCi0rCQkJY29udGludWU7Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIm4iKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgImQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAoZSAmJiBYcDEgJiYgWHAy ICYmIFhwKQotKwkJCXsKLSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwg WHAyLCBYcCwgZSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcDEpOwotKwkJCVhw MSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcDIpOwotKwkJCVhwMiA9IE5VTEw7Ci0rCQkJQk5fZnJl ZShYcCk7Ci0rCQkJWHAgPSBOVUxMOwotKwkJCUJOX2ZyZWUoZSk7Ci0rCQkJZSA9IE5VTEw7Ci0r CQkJfQotKwotKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYmIFhxKQotKwkJCXsKLSsJCQlpZiAo IXJzYV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBYcSkpCi0rCQkJCWdvdG8gZXJyb3I7 Ci0rCQkJQk5fZnJlZShYcTEpOwotKwkJCVhxMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcTIpOwot KwkJCVhxMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcSk7Ci0rCQkJWHEgPSBOVUxMOwotKwkJCUZJ UFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsKLSsJcmV0 ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShv bGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwot KwlpZiAoWHAxKQotKwkJQk5fZnJlZShYcDEpOwotKwlpZiAoWHAyKQotKwkJQk5fZnJlZShYcDIp OwotKwlpZiAoWHApCi0rCQlCTl9mcmVlKFhwKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHEx KTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMikKLSsJCUJOX2ZyZWUo WHEyKTsKLSsJaWYgKFhxKQotKwkJQk5fZnJlZShYcSk7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShl KTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsK LSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJy b3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJ fQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJ QklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAotKwkJQklHTlVNICplKQotKwl7 Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKLSsJcDEg PSBCTl9uZXcoKTsKLSsJcDIgPSBCTl9uZXcoKTsKLSsJaWYgKCFwMSB8fCAhcDIpCi0rCQlnb3Rv IGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwg TlVMTCwgWHAxLCBYcDIsIFhwLAotKwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQot KwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKLSsJ ZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQs ICJwIiwgcnNhLT5wKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChwMSkKLSsJ CUJOX2ZyZWUocDEpOwotKwlpZiAocDIpCi0rCQlCTl9mcmVlKHAyKTsKLSsKLSsJcmV0dXJuIHJl dDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNh LAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0gTlVMTDsKLSsJcTEgPSBCTl9uZXco KTsKLSsJcTIgPSBCTl9uZXcoKTsKLSsJaWYgKCFxMSB8fCAhcTIpCi0rCQlnb3RvIGVycm9yOwot KwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVM TCwgTlVMTCwgTlVMTCwKLSsJCQkJCQlYcTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQotKwkJZ290 byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMSIsIHExKTsKLSsJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwg cnNhLT5xKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJuIiwgcnNhLT5uKTsKLSsJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6 Ci0rCWlmIChxMSkKLSsJCUJOX2ZyZWUocTEpOwotKwlpZiAocTIpCi0rCQlCTl9mcmVlKHEyKTsK LSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDA3 NjkyOTggKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh c3Rlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMDc2OTI5OCArMDIwMAotQEAgLTAsMCArMSwz NzAgQEAKLSsvKiBmaXBzX3JzYXN0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0 IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0r ICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVO U1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAg cHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsK LSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRpYyBpbnQgcnNhX3N0 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKTsKLStzdGF0aWMgaW50IHJzYV9w cmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNp Z25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5V TEw7Ci0rCi0rCWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVf c2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJ CXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJ CXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsK LSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9 Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJ CXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJ aWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJn dlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNl Ci0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7 Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwot KwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0g c3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0r CQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNB X1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxF ICppbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwg KnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwljb25z dCBFVlBfTUQgKmRnc3QgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOwotKwls b25nIE1zZ2xlbiA9IC0xOwotKwlpbnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0gLTE7 Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNT TF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxv YyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikK LSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFY TElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5l YnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICov Ci0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29y ZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYs ICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsK LSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJ CWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJ CSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJl bW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsK LSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQot KwkJCSpwLS0gPSAwOwotKwotKwkJLyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBsZW5n dGggKi8KLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJbbW9kIikpCi0rCQkJewotKwkJCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwkJCWlmICgqcCAhPSAnXScpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJKnAgPSAwOwotKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOwot KwkJCWlmIChrZXlsZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTEiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAo IXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJ CWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEy NTYoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3Qg PSBFVlBfc2hhMzg0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQot KwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRm KHN0ZGVyciwKLSsJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwK LSsJCQkJCQkJCXZhbHVlKTsKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNn KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJ CQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4p OwotKwkJCWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsKLSsJCWZw dXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdlZCwg Z2VuZXJhdGUgYW5kIG91dHB1dCBwdWJsaWMKLSsJCSAqIGtleSBjb21wb25lbnRzIG9mIG5ldyBS U0EgcHJpdmF0ZSBrZXkuCi0rCQkgKi8KLSsKLSsJCWlmIChrZXlsZW4gIT0gY3VycmVudF9rZXls ZW4pCi0rCQkJewotKwkJCUJJR05VTSAqYm5fZTsKLSsJCQlpZiAocnNhKQotKwkJCQlGSVBTX3Jz YV9mcmVlKHJzYSk7Ci0rCQkJcnNhID0gRklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2EpCi0r CQkJCWdvdG8gZXJyb3I7Ci0rCQkJYm5fZSA9IEJOX25ldygpOwotKwkJCWlmICghYm5fZSB8fCAh Qk5fc2V0X3dvcmQoYm5fZSwgMHgxMDAxKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAoIVJT QV9YOTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCi0rCQkJCWdv dG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShibl9lKTsKLSsJCQlmcHV0cygibiA9ICIsIG91dCk7Ci0r CQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPm4pOwotKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQpOwot KwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5lKTsKLSsJCQlmcHV0cygiXG4iLCBvdXQpOwotKwkJ CWN1cnJlbnRfa2V5bGVuID0ga2V5bGVuOwotKwkJCX0KLSsKLSsJCWlmIChNc2cgJiYgZGdzdCkK LSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNnbGVu LAotKwkJCQkJCQkJU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVl KE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0r Ci0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYp OwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKHJzYSkK LSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJy b3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBs aW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBp bnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwK LSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQotKwl7Ci0r CWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOwotKwlpbnQgaSwg c2lnbGVuOwotKwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8KLSsJRVZQX1BLRVkgcGs7Ci0rCUVW UF9NRF9DVFggY3R4OwotKwlway50eXBlID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9 IHJzYTsKLSsKLSsJc2lnbGVuID0gUlNBX3NpemUocnNhKTsKLSsJc2lnYnVmID0gT1BFTlNTTF9t YWxsb2Moc2lnbGVuKTsKLSsJaWYgKCFzaWdidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwlFVlBf TURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChTYWx0bGVuID49IDApCi0rCQl7Ci0rCQlNX0VW UF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCi0rCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAo U2FsdGxlbiA8PCAxNikpOwotKwkJfQotKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQotKwkJTV9F VlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwotKwlp ZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0r CWlmICghRVZQX1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQotKwkJZ290byBlcnJvcjsK LSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZzaWds ZW4sICZwaykpCi0rCQlnb3RvIGVycm9yOwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7 Ci0rCi0rCWZwdXRzKCJTID0gIiwgb3V0KTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IHNpZ2xlbjsg aSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsKLSsKLSsJZnB1dHMoIlxu Iiwgb3V0KTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCXJldHVybiByZXQ7Ci0r CX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlw c19yc2F2dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3Jz YXZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRl c3QuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDAwNzY5Mjk4ICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMJMjAxMi0wNC0yNiAxODow MDo1MS40MDA3NjkyOTggKzAyMDAKLUBAIC0wLDAgKzEsMzc3IEBACi0rLyogZmlwc19yc2F2dGVz dC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsg KgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNp bmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwot KyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgot KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0 b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNv ZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQot KyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUg PHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC94NTA5djMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3JzYS5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3Vw cG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAi Zmlwc191dGwuaCIKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IHNh bHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJTEUgKm91dCwKLSsJCUJJR05VTSAq biwgQklHTlVNICplLAotKwkJY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAq TXNnLCBsb25nIE1zZ2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNh bHRsZW4pOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxF ICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsJaW50IFNhbHRs ZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9l cnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3Ry Y21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2koYXJndlsy XSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRkFU QUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFy Z2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAh c3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwotKwkJYXJn Yy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRp bjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8 IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3 Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0 IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAo IW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0 aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91 dCwgaW4sIFNhbHRsZW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FWVEVT VCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UK LSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9y cygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlm IChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiBy ZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKLSsKLStp bnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJY2hh ciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsK LSsJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKLSsJQklHTlVNICpuID0gTlVMTCwgKmUgPSBO VUxMOwotKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAqUyA9IE5VTEw7Ci0rCWxvbmcgTXNn bGVuLCBTbGVuOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1 ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAh b2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJT QV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5l YnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGlu ZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQot KwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNo cihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3Ig W2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdb JykKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBl cnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBS ZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0r Ci0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1v dmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZh bHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJuIikp Ci0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZuLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCi0rCQkJewot KwkJCWlmICghZG9faGV4MmJuKCZlLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTSEFBbGciKSkKLSsJCQl7Ci0rCQkJ aWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMSgpOwotKwkJ CWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEy MjQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2IikpCi0rCQkJCWRnc3Qg PSBFVlBfc2hhMjU2KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQot KwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJT SEE1MTIiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJ CQkJZnByaW50ZihzdGRlcnIsCi0rCQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBc IiVzXCJcbiIsCi0rCQkJCQkJCQl2YWx1ZSk7Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ CX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0r CQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVl KSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVl LCAmTXNnbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTIikpCi0rCQkJewotKwkJCWlmIChTKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJ KigtLXZhbHVlKSA9ICcwJzsKLSsJCQlTID0gaGV4MmJpbl9tKHZhbHVlLCAmU2xlbik7Ci0rCQkJ aWYgKCFTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlJlc3VsdCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZQotKwkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChuICYm IGUgJiYgTXNnICYmIFMgJiYgZGdzdCkKLSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJpbnR2ZXIob3V0 LCBuLCBlLCBkZ3N0LAotKwkJCQkJTXNnLCBNc2dsZW4sIFMsIFNsZW4sIFNhbHRsZW4pKQotKwkJ CQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0r CQkJT1BFTlNTTF9mcmVlKFMpOwotKwkJCVMgPSBOVUxMOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsK LSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5T U0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVi dWYpOwotKwlpZiAobikKLSsJCUJOX2ZyZWUobik7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShlKTsK LSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJ Z290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJTEUgKm91 dCwKLSsJCUJJR05VTSAqbiwgQklHTlVNICplLAotKwkJY29uc3QgRVZQX01EICpkZ3N0LAotKwkJ dW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKlMsIGxv bmcgU2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDAsIHI7Ci0rCS8qIFNldHVw IFJTQSBhbmQgRVZQX1BLRVkgc3RydWN0dXJlcyAqLwotKwlSU0EgKnJzYV9wdWJrZXkgPSBOVUxM OwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXVuc2lnbmVkIGNoYXIgKmJ1 ZiA9IE5VTEw7Ci0rCXJzYV9wdWJrZXkgPSBGSVBTX3JzYV9uZXcoKTsKLSsJaWYgKCFyc2FfcHVi a2V5KQotKwkJZ290byBlcnJvcjsKLSsJcnNhX3B1YmtleS0+biA9IEJOX2R1cChuKTsKLSsJcnNh X3B1YmtleS0+ZSA9IEJOX2R1cChlKTsKLSsJaWYgKCFyc2FfcHVia2V5LT5uIHx8ICFyc2FfcHVi a2V5LT5lKQotKwkJZ290byBlcnJvcjsKLSsJcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsJcGsu cGtleS5yc2EgPSByc2FfcHVia2V5OwotKwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0r CWlmIChTYWx0bGVuID49IDApCi0rCQl7Ci0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgs Ci0rCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOwotKwkJfQot KwllbHNlIGlmIChTYWx0bGVuID09IC0yKQotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4 LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwotKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZj dHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfVmVyaWZ5VXBkYXRl KCZjdHgsIE1zZywgTXNnbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXIgPSBFVlBfVmVyaWZ5 RmluYWwoJmN0eCwgUywgU2xlbiwgJnBrKTsKLSsKLSsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZj dHgpOwotKwotKwlpZiAociA8IDApCi0rCQlnb3RvIGVycm9yOwotKwlFUlJfY2xlYXJfZXJyb3Io KTsKLSsKLSsJaWYgKHIgPT0gMCkKLSsJCWZwdXRzKCJSZXN1bHQgPSBGXG4iLCBvdXQpOwotKwll bHNlCi0rCQlmcHV0cygiUmVzdWx0ID0gUFxuIiwgb3V0KTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJ ZXJyb3I6Ci0rCWlmIChyc2FfcHVia2V5KQotKwkJRklQU19yc2FfZnJlZShyc2FfcHVia2V5KTsK LSsJaWYgKGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShidWYpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9 Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf c2hhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRl c3QuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMu ZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMDc2OTI5OCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMJMjAxMi0wNC0yNiAxODowMDo1MS40 MDA3NjkyOTggKzAyMDAKLUBAIC0wLDAgKzEsMzg4IEBACi0rLyogZmlwc19zaGF0ZXN0LmMgKi8K LSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBm b3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20p LiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVk c29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8u aD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgU0hBWFhYIHN1cHBv cnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZp cHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7 Ci0rc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJ CXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7Ci0rc3RhdGljIGludCBwcmludF9tb250 ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBp bnQgU2VlZExlbik7Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0r CUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwotKwlp ZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNl Ci0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91 dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJ aWYgKCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6 YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3Jc biIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghZGdzdF90ZXN0KG91dCwgaW4pKQot KwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBkaWdlc3QgZmlsZSBwcm9jZXNzaW5nIGVy cm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwll bmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYm IChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rk b3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2Rl ZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKLSsjZGVmaW5lIFNIQV9URVNUX01BWExJTkVM RU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAyKSArIDEwMCkKLSsKLStpbnQgZGdzdF90 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCi0rCXsKLSsJY29uc3QgRVZQX01EICptZCA9IE5VTEw7 Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAq dmFsdWU7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTZWVkID0gTlVMTDsKLSsJbG9u ZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0r CWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9N QVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVM RU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsK LSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0r CQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29y ZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBM b29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8q IElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8K LSsJCWlmICghcCkKLSsJCQl7Ci0rCQkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCQkJY29udGlu dWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9 IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxl YWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwkJd2hp bGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9 IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJbTCIpICYmICpwPT0nXScpCi0rCQkJewot KwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCi0rCQkJCXsKLSsJCQkJY2FzZSAyMDogbWQ9RVZQX3No YTEoKTsgICBicmVhazsKLSsJCQkJY2FzZSAyODogbWQ9RVZQX3NoYTIyNCgpOyBicmVhazsKLSsJ CQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVhazsKLSsJCQkJY2FzZSA0ODogbWQ9RVZQ X3NoYTM4NCgpOyBicmVhazsKLSsJCQkJY2FzZSA2NDogbWQ9RVZQX3NoYTUxMigpOyBicmVhazsK LSsJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQotKwkJCXsKLSsJCQlpZiAoTGVuICE9IC0xKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChM ZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCS8qIE9ubHkgaGFuZGxlIG11bHRp cGxlcyBvZiA4IGJpdHMgKi8KLSsJCQlpZiAoTGVuICYgMHg3KQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhfQklUUykKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQlNc2dMZW4gPSBMZW4gPj4gMzsKLSsJCQl9Ci0rCi0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJbG9uZyB0bXBsZW47Ci0rCQkJaWYgKHN0 cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCWlmIChNc2cpCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmdG1wbGVu KTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCi0rCQkJewotKwkJCWlmIChzdHJsZW4odmFs dWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlpZiAoU2VlZCkKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQlTZWVkID0gaGV4MmJpbl9tKHZhbHVlLCAmU2VlZExlbik7Ci0r CQkJaWYgKCFTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKG1k ICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQotKwkJCXsKLSsJCQlpZiAoIXByaW50X2Rnc3QobWQs IG91dCwgTXNnLCBNc2dMZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShN c2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJTXNnTGVuID0gLTE7Ci0rCQkJTGVuID0gLTE7Ci0r CQkJfQotKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAoU2VlZExlbiA+IDApKQotKwkJCXsKLSsJ CQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQsIFNlZWRMZW4pKQotKwkJCQlnb3RvIGVy cm9yOwotKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKLSsJCQlTZWVkID0gTlVMTDsKLSsJCQlTZWVk TGVuID0gLTE7Ci0rCQkJfQotKwkKLSsKLSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJ ZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0r CWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAoTXNnKQotKwkJ T1BFTlNTTF9mcmVlKE1zZyk7Ci0rCWlmIChTZWVkKQotKwkJT1BFTlNTTF9mcmVlKFNlZWQpOwot KwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwln b3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9N RCAqZW1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4pCi0r CXsKLSsJaW50IGksIG1kbGVuOwotKwl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07 Ci0rCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwgbWQsICh1bnNpZ25lZCBpbnQgKikmbWRs ZW4sIGVtZCwgTlVMTCkpCi0rCQl7Ci0rCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgSEFTSFxu Iiwgc3RkZXJyKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmcHV0cygiTUQgPSAiLCBvdXQpOwot Kwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKLSsJCWZwcmludGYob3V0LCAiJTAyeCIsIG1k W2ldKTsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMg aW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVk IGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQotKwl7Ci0rCXVuc2lnbmVkIGludCBpLCBqLCBrOwot KwlpbnQgcmV0ID0gMDsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXVuc2lnbmVkIGNoYXIgKm0xLCAq bTIsICptMywgKnA7Ci0rCXVuc2lnbmVkIGludCBtbGVuLCBtMWxlbiwgbTJsZW4sIG0zbGVuOwot KwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChTZWVkTGVuID4gRVZQX01BWF9N RF9TSVpFKQotKwkJbWxlbiA9IFNlZWRMZW47Ci0rCWVsc2UKLSsJCW1sZW4gPSBFVlBfTUFYX01E X1NJWkU7Ci0rCi0rCW0xID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0rCW0yID0gT1BFTlNTTF9t YWxsb2MobWxlbik7Ci0rCW0zID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0rCi0rCWlmICghbTEg fHwgIW0yIHx8ICFtMykKLSsJCWdvdG8gbWNfZXJyb3I7Ci0rCi0rCW0xbGVuID0gbTJsZW4gPSBt M2xlbiA9IFNlZWRMZW47Ci0rCW1lbWNweShtMSwgU2VlZCwgU2VlZExlbik7Ci0rCW1lbWNweSht MiwgU2VlZCwgU2VlZExlbik7Ci0rCW1lbWNweShtMywgU2VlZCwgU2VlZExlbik7Ci0rCi0rCWZw dXRzKCJcbiIsIG91dCk7Ci0rCi0rCWZvciAoaiA9IDA7IGogPCAxMDA7IGorKykKLSsJCXsKLSsJ CWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0rCQkJewotKwkJCUVWUF9EaWdlc3RJbml0X2V4 KCZjdHgsIG1kLCBOVUxMKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0xLCBtMWxlbik7 Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwgbTJsZW4pOwotKwkJCUVWUF9EaWdlc3RV cGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKLSsJCQlwID0gbTE7Ci0rCQkJbTEgPSBtMjsKLSsJCQlt MWxlbiA9IG0ybGVuOwotKwkJCW0yID0gbTM7Ci0rCQkJbTJsZW4gPSBtM2xlbjsKLSsJCQltMyA9 IHA7Ci0rCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG0zLCAmbTNsZW4pOwotKwkJCX0KLSsJ CWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7Ci0rCQlmcHV0cygiTUQgPSAiLCBvdXQp OwotKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKyspCi0rCQkJZnByaW50ZihvdXQsICIlMDJ4 IiwgbTNba10pOwotKwkJZnB1dHMoIlxuXG4iLCBvdXQpOwotKwkJbWVtY3B5KG0xLCBtMywgbTNs ZW4pOwotKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOwotKwkJbTFsZW4gPSBtMmxlbiA9IG0zbGVu OwotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwltY19lcnJvcjoKLSsJaWYgKG0xKQotKwkJT1BF TlNTTF9mcmVlKG0xKTsKLSsJaWYgKG0yKQotKwkJT1BFTlNTTF9mcmVlKG0yKTsKLSsJaWYgKG0z KQotKwkJT1BFTlNTTF9mcmVlKG0zKTsKLSsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwot KwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfdXRsLmgKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfdXRsLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMDc2OTI5OCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAkyMDEyLTA0LTI2IDE4 OjAwOjUxLjQwMDc2OTI5OCArMDIwMAotQEAgLTAsMCArMSwzNDMgQEAKLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICoKLSsgKi8KLSsKLSt2b2lkIGRvX3ByaW50X2Vycm9ycyh2b2lkKQotKwl7Ci0rCWNvbnN0 IGNoYXIgKmZpbGUsICpkYXRhOwotKwlpbnQgbGluZSwgZmxhZ3M7Ci0rCXVuc2lnbmVkIGxvbmcg bDsKLSsJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAm ZGF0YSwgJmZsYWdzKSkpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVseDpsaWI9 JWQsZnVuYz0lZCxyZWFzb249JWQiCi0rCQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4iLAotKwkJ CWwsIEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09OKGwpLAot KwkJCWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIpOwotKwkJ fQotKwl9Ci0rCi0raW50IGhleDJiaW4oY29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91 dCkKLSsgICAgewotKyAgICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwot KyAgICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkKLSsJeyAv KiBmaXJzdCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScp KQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnQScp ICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKLSsJ ZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAgIGNoID0g aW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlpZighaW5b bjFdKQotKwkgICAgewotKwkgICAgb3V0W24yKytdPWNoOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9 Ci0rCW91dFtuMl0gPSBjaCA8PCA0OwotKwkvKiBzZWNvbmQgYnl0ZSAqLwotKwlpZiAoKGluW24x XSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnMCc7 Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCi0rCSAgICBj aCA9IGluW24xKytdIC0gJ0EnICsgMTA7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAo aW5bbjFdIDw9ICdmJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7Ci0rCWVsc2UK LSsJICAgIHJldHVybiAtMTsKLSsJb3V0W24yKytdIHw9IGNoOwotKwl9Ci0rICAgIHJldHVybiBu MjsKLSsgICAgfQotKwotK3Vuc2lnbmVkIGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFyICppbiwg bG9uZyAqcGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICpwOwotKwlwID0gT1BFTlNTTF9tYWxs b2MoKHN0cmxlbihpbikgKyAxKS8yKTsKLSsJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsKLSsJcmV0 dXJuIHA7Ci0rCX0KLSsKLStpbnQgZG9faGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBjaGFyICpp bikKLSsJewotKwl1bnNpZ25lZCBjaGFyICpwOwotKwlsb25nIHBsZW47Ci0rCWludCByID0gMDsK LSsJcCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsJ aWYgKCEqcHIpCi0rCQkqcHIgPSBCTl9uZXcoKTsKLSsJaWYgKCEqcHIpCi0rCQlyZXR1cm4gMDsK LSsJaWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQotKwkJciA9IDE7Ci0rCU9QRU5TU0xfZnJl ZShwKTsKLSsJcmV0dXJuIHI7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnQoRklMRSAqb3V0LCBC SUdOVU0gKmJuKQotKwl7Ci0rCWludCBsZW4sIGk7Ci0rCXVuc2lnbmVkIGNoYXIgKnRtcDsKLSsJ bGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKLSsJaWYgKGxlbiA9PSAwKQotKwkJewotKwkJZnB1dHMo IjAwIiwgb3V0KTsKLSsJCXJldHVybiAxOwotKwkJfQotKwotKwl0bXAgPSBPUEVOU1NMX21hbGxv YyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFs bG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUJOX2JuMmJpbihibiwg dG1wKTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4 IiwgdG1wW2ldKTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0r aW50IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0g KmJuKQotKwl7Ci0rCWludCByOwotKwlmcHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7Ci0rCXIg PSBkb19ibl9wcmludChvdXQsIGJuKTsKLSsJaWYgKCFyKQotKwkJcmV0dXJuIDA7Ci0rCWZwdXRz KCJcbiIsIG91dCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IHBhcnNlX2xpbmUoY2hhciAq KnBrdywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQotKwl7Ci0r CWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOwotKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVi dWYpOwotKwlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0r CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCWtleXdvcmQrKzsK LSsKLSsJLyogTG9vayBmb3IgPSBzaWduICovCi0rCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsK LSsKLSsJLyogSWYgbm8gJz0nIGV4aXQgKi8KLSsJaWYgKCFwKQotKwkJcmV0dXJuIDA7Ci0rCi0r CXEgPSBwIC0gMTsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpxLS0gPSAwOwotKwotKwkqcCA9IDA7Ci0r CXZhbHVlID0gcCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCXZhbHVlKys7 Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXAgPSB2YWx1 ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAwOwotKwotKwkqcGt3ID0ga2V5d29yZDsK LSsJKnB2YWwgPSB2YWx1ZTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStCSUdOVU0gKmhleDJibihj b25zdCBjaGFyICppbikKLSsgICAgewotKyAgICBCSUdOVU0gKnA9TlVMTDsKLSsKLSsgICAgaWYg KCFkb19oZXgyYm4oJnAsIGluKSkKLSsJcmV0dXJuIE5VTEw7Ci0rCi0rICAgIHJldHVybiBwOwot KyAgICB9Ci0rCi0raW50IGJpbjJoZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixj aGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG4xLCBuMjsKLSsgICAgdW5zaWduZWQgY2hhciBj aDsKLSsKLSsgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxlbiA7ICsrbjEpCi0rCXsKLSsJY2g9 aW5bbjFdID4+IDQ7Ci0rCWlmIChjaCA8PSAweDA5KQotKwkgICAgb3V0W24yKytdPWNoKycwJzsK LSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKLSsJY2g9aW5bbjFdICYgMHgwZjsK LSsJaWYoY2ggPD0gMHgwOSkKLSsJICAgIG91dFtuMisrXT1jaCsnMCc7Ci0rCWVsc2UKLSsJICAg IG91dFtuMisrXT1jaC0xMCsnYSc7Ci0rCX0KLSsgICAgb3V0W24yXT0nXDAnOwotKyAgICByZXR1 cm4gbjI7Ci0rICAgIH0KLSsKLSt2b2lkIHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1bnNpZ25l ZCBjaGFyICp2YWwsaW50IGxlbikKLSsgICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rCi0r ICAgIGJpbjJoZXgodmFsLGxlbixvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICVzXG4iLHRhZyxv YnVmKTsKLSsgICAgfQotKwotKy8qIFRvIGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRlc3Qg cHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAotKyAqIHRoZSBpbnB1dCBsaW5lIGlu dG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBmb3JtCi0r ICogImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBwcmVzZW50 LCBhbGwgb3RoZXIgbGluZXMKLSsgKiBqdXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3Bh Y2UgcmVtb3ZlZC4KLSsgKi8KLSsKLStpbnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYsIGNoYXIg Km9saW5lYnVmKQotKwl7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOwotKwlzdHJj cHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJLyogU2tpcCBs ZWFkaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3Jk KSkKLSsJCWtleXdvcmQrKzsKLSsJLyogTG9vayBmb3IgPSBzaWduICovCi0rCXAgPSBzdHJjaHIo bGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyogSWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5nLCB0cmFp bGluZyB3cyAqLwotKwlpZiAoIXApCi0rCQl7Ci0rCQlwID0ga2V5d29yZCArIHN0cmxlbihrZXl3 b3JkKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSpwKSkKLSsJCQkqcC0tID0gMDsKLSsJCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCQlz dHJjYXQob2xpbmVidWYsICJcbiIpOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXEgPSBwIC0g MTsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpxLS0gPSAwOwotKwotKwkqcCA9IDA7Ci0rCXZhbHVlID0g cCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCXZhbHVlKys7Ci0rCi0rCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXAgPSB2YWx1ZSArIHN0cmxl bih2YWx1ZSkgLSAxOwotKwotKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAwOwotKwotKwlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQp OwotKwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKLSsJc3RyY2F0KG9saW5lYnVmLCB2YWx1ZSk7 Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyog TkI6IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNfIHJlYWQgKi8KLStpbnQgYmludDJi aW4oY29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLSsgICAgewot KyAgICBpbnQgbjsKLSsKLSsgICAgbWVtc2V0KG91dCwwLGxlbik7Ci0rICAgIGZvcihuPTAgOyBu IDwgbGVuIDsgKytuKQotKwlpZihpbltuXSA9PSAnMScpCi0rCSAgICBvdXRbbi84XXw9KDB4ODAg Pj4gKG4lOCkpOwotKyAgICByZXR1cm4gbGVuOwotKyAgICB9Ci0rCi0raW50IGJpbjJiaW50KGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGlu dCBuOwotKwotKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKLSsJb3V0W25dPShpbltuLzhd JigweDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7Ci0rICAgIHJldHVybiBuOwotKyAgICB9Ci0r Ci0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0r Ci0rdm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVu KQotK3sKLSsjaWYgVkVSQk9TRQotKyAgY2hhciBvYnVmWzIwNDhdOwotKyAgaW50IG9sZW47Ci0r ICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7Ci0rICBwcmludGYoIiVzID0gJS4qc1xu IiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSt9Ci0rCi0rdm9pZCBPdXRwdXRWYWx1ZShj aGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGludCBiaXRt b2RlKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rCi0r ICAgIGlmKGJpdG1vZGUpCi0rCW9sZW49YmluMmJpbnQodmFsLGxlbixvYnVmKTsKLSsgICAgZWxz ZQotKwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKLSsKLSsgICAgZnByaW50ZihyZnAsICIl cyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rI2lmIFZFUkJPU0UKLSsgICAgcHJpbnRm KCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rI2VuZGlmCi0rICAgIH0KLSsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzCTIwMTItMDQt MjYgMTg6MDA6NTEuNDAxNzY5MzIxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMTc2OTMyMSArMDIw MAotQEAgLTAsMCArMSwzNTkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq 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 KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGNvbnN0IHN0 cnVjdAotKyAgICB7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgY29u c3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy IGNpcGhlcnRleHRbMTZdOwotKyAgICB9IHRlc3RzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgw MSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSsJICAweDA4LDB4MDksMHgwQSwweDBC LDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKLSsJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1 NSwweDY2LDB4NzcsCi0rCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZG IH0sCi0rCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAotKwkgIDB4 RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAotKwl9LAotKwl9OwotKwot K3N0YXRpYyBpbnQgY29ycnVwdF9hZXM7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKLSsg ICAgewotKyAgICBjb3JydXB0X2FlcyA9IDE7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVz dF9hZXMoKQotKyAgICB7Ci0rICAgIGludCBuOwotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgRVZQ X0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAg ICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBrZXlbMTZdOwot KwotKwltZW1jcHkoa2V5LCB0ZXN0c1tuXS5rZXksIHNpemVvZihrZXkpKTsKLSsJaWYgKGNvcnJ1 cHRfYWVzKQotKwkJa2V5WzBdKys7Ci0rCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9h ZXNfMTI4X2VjYigpLAotKwkJCQlrZXksIE5VTEwsCi0rCQkJCXRlc3RzW25dLnBsYWludGV4dCwK LSsJCQkJdGVzdHNbbl0uY2lwaGVydGV4dCwKLSsJCQkJMTYpIDw9IDApCi0rCQlnb3RvIGVycjsK LSsJfQotKyAgICByZXQgPSAxOwotKyAgICBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFu dXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf U0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICByZXR1cm4gcmV0Owot KyAgICB9Ci0rCi0rLyogQUVTLUNDTSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZl Y3RvcnMgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fa2V5W10gPSB7Ci0r CTB4Y2UsMHhiMCwweDA5LDB4YWUsMHhhNCwweDQ1LDB4NDQsMHg1MSwweGZlLDB4YWQsMHhmMCww eGU2LAotKwkweGIzLDB4NmYsMHg0NSwweDU1LDB4NWQsMHhkMCwweDQ3LDB4MjMsMHhiYSwweGE0 LDB4NDgsMHhlOAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX25vbmNlW10g PSB7Ci0rCTB4NzYsMHg0MCwweDQzLDB4YzQsMHg5NCwweDYwLDB4YjcKLSt9OwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGNjbV9hZGF0YVtdID0gewotKwkweDZlLDB4ODAsMHhkZCwweDdm LDB4MWIsMHhhZCwweGYzLDB4YTEsMHhjOSwweGFiLDB4MjUsMHhjNywKLSsJMHg1ZiwweDEwLDB4 YmQsMHhlNywweDhjLDB4MjMsMHhmYSwweDBlLDB4YjgsMHhmOSwweGFhLDB4YTUsCi0rCTB4M2Es MHhkZSwweGZiLDB4ZjQsMHhjYiwweGY3LDB4OGYsMHhlNAotK307Ci0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgY2NtX3B0W10gPSB7Ci0rCTB4YzgsMHhkMiwweDc1LDB4ZjksMHgxOSwweGUx LDB4N2QsMHg3ZiwweGU2LDB4OWMsMHgyYSwweDFmLAotKwkweDU4LDB4OTMsMHg5ZCwweGZlLDB4 NGQsMHg0MCwweDM3LDB4OTEsMHhiNSwweGRmLDB4MTMsMHgxMAotK307Ci0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgY2NtX2N0W10gPSB7Ci0rCTB4OGEsMHgwZiwweDNkLDB4ODIsMHgyOSww eGU0LDB4OGUsMHg3NCwweDg3LDB4ZmQsMHg5NSwweGEyLAotKwkweDhhLDB4ZDMsMHg5MiwweGM4 LDB4MGIsMHgzNiwweDgxLDB4ZDQsMHhmYiwweGM3LDB4YmIsMHhmZAotK307Ci0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0gewotKwkweDJkLDB4ZDYsMHhlZiwweDFjLDB4 NDUsMHhkNCwweGNjLDB4YjcsMHgyMywweGRjLDB4MDcsMHg0NCwKLSsJMHgxNCwweGRiLDB4NTAs MHg2ZAotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lkKQotKwl7Ci0rCWlu dCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOwotKwlFVlBfQ0lQ SEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCW1lbXNldChvdXQs IDAsIHNpemVvZihvdXQpKTsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzE5 Ml9jY20oKSwgTlVMTCwgTlVMTCwgMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVS X0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2YoY2Nt X25vbmNlKSwgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJs KCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLAotKwkJCQkJc2l6ZW9mKGNjbV90YWcpLCBOVUxM KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIGNjbV9r ZXksIGNjbV9ub25jZSwgMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwg TlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21fcHQpKQotKwkJZ290byBl cnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNjbV9h ZGF0YSkpIDwgMCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGNj bV9wdCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21fY3QpKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fR0VUX1RBRywg MTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsJaWYgKG1lbWNtcCh0YWcsIGNjbV90YWcsIHNpemVv ZihjY21fdGFnKSkKLSsJCXx8IG1lbWNtcChvdXQsIGNjbV9jdCwgc2l6ZW9mKGNjbV9jdCkpKQot KwkJZ290byBlcnI7Ci0rCi0rCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsKLSsJaWYg KCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwgMCkp Ci0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJM X0NDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2YoY2NtX25vbmNlKSwgTlVMTCkpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRf VEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgs IE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9D aXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fY3Qp KQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwg c2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigm Y3R4LCBvdXQsIGNjbV9jdCwgc2l6ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fcHQpKQotKwkJ Z290byBlcnI7Ci0rCi0rCWlmIChtZW1jbXAob3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSkK LSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RY X2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChyZXQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKwllbHNlCi0rCQlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rLyogQUVT LUdDTSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KLSsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fa2V5W10gPSB7Ci0rCTB4ZWUsMHhiYywweDFmLDB4 NTcsMHg0OCwweDdmLDB4NTEsMHg5MiwweDFjLDB4MDQsMHg2NSwweDY2LAotKwkweDVmLDB4OGEs MHhlNiwweGQxLDB4NjUsMHg4YiwweGIyLDB4NmQsMHhlNiwweGY4LDB4YTAsMHg2OSwKLSsJMHhh MywweDUyLDB4MDIsMHg5MywweGE1LDB4NzIsMHgwNywweDhmCi0rfTsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBnY21faXZbXSA9IHsKLSsJMHg5OSwweGFhLDB4M2UsMHg2OCwweGVkLDB4 ODEsMHg3MywweGEwLDB4ZWUsMHhkMCwweDY2LDB4ODQKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGdjbV9wdFtdID0gewotKwkweGY1LDB4NmUsMHg4NywweDA1LDB4NWIsMHhjMyww eDJkLDB4MGUsMHhlYiwweDMxLDB4YjIsMHhlYSwKLSsJMHhjYywweDJiLDB4ZjIsMHhhNQotK307 Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2FhZFtdID0gewotKwkweDRkLDB4MjMs MHhjMywweGNlLDB4YzMsMHgzNCwweGI0LDB4OWIsMHhkYiwweDM3LDB4MGMsMHg0MywKLSsJMHg3 ZiwweGVjLDB4NzgsMHhkZQotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2N0 W10gPSB7Ci0rCTB4ZjcsMHgyNiwweDQ0LDB4MTMsMHhhOCwweDRjLDB4MGUsMHg3YywweGQ1LDB4 MzYsMHg4NiwweDdlLAotKwkweGI5LDB4ZjIsMHgxNywweDM2Ci0rfTsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBnY21fdGFnW10gPSB7Ci0rCTB4NjcsMHhiYSwweDA1LDB4MTAsMHgyNiww eDJhLDB4ZTQsMHg4NywweGQ3LDB4MzcsMHhlZSwweDYyLAotKwkweDk4LDB4ZjcsMHg3ZSwweDBj Ci0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXNfZ2NtKHZvaWQpCi0rCXsKLSsJaW50IHJl dCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgb3V0WzEyOF0sIHRhZ1sxNl07Ci0rCUVWUF9DSVBIRVJf Q1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJbWVtc2V0KG91dCwgMCwg c2l6ZW9mKG91dCkpOwotKwltZW1zZXQodGFnLCAwLCBzaXplb2YodGFnKSk7Ci0rCWlmICghRVZQ X0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIDEpKQotKwkJ Z290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01f U0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGdjbV9pdiksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0r CWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAxKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2Yo Z2NtX2FhZCkpIDwgMCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQs IGdjbV9wdCwgc2l6ZW9mKGdjbV9wdCkpICE9IHNpemVvZihnY21fY3QpKQotKwkJZ290byBlcnI7 Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKLSsJCWdvdG8gZXJy OwotKwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX0dFVF9U QUcsIDE2LCB0YWcpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChtZW1jbXAodGFnLCBnY21fdGFn LCAxNikgfHwgbWVtY21wKG91dCwgZ2NtX2N0LCAxNikpCi0rCQlnb3RvIGVycjsKLSsKLSsJbWVt c2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwotKwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgs IEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCAwKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo IUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsJCQkJ CXNpemVvZihnY21faXYpLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJf Q1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIDE2LCB0YWcpKQotKwkJZ290byBl cnI7Ci0rCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAw KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBnY21fYWFkLCBz aXplb2YoZ2NtX2FhZCkpIDwgMCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4 LCBvdXQsIGdjbV9jdCwgc2l6ZW9mKGdjbV9jdCkpICE9IHNpemVvZihnY21fcHQpKQotKwkJZ290 byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKLSsJCWdv dG8gZXJyOwotKwotKwlpZiAobWVtY21wKG91dCwgZ2NtX3B0LCAxNikpCi0rCQlnb3RvIGVycjsK LSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgp OwotKwotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZU RVNUX0FFU19HQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0K LSsJZWxzZQotKwkJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIFhUU18xMjhfa2V5W10gPSB7Ci0rCTB4YTEsMHhiOSwweDBjLDB4YmEsMHgzZiww eDA2LDB4YWMsMHgzNSwweDNiLDB4MmMsMHgzNCwweDM4LAotKwkweDc2LDB4MDgsMHgxNywweDYy LDB4MDksMHgwOSwweDIzLDB4MDIsMHg2ZSwweDkxLDB4NzcsMHgxOCwKLSsJMHgxNSwweGYyLDB4 OWQsMHhhYiwweDAxLDB4OTMsMHgyZiwweDJmCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBYVFNfMTI4X2lbXSA9IHsKLSsJMHg0ZiwweGFlLDB4ZjcsMHgxMSwweDdjLDB4ZGEsMHg1 OSwweGM2LDB4NmUsMHg0YiwweDkyLDB4MDEsCi0rCTB4M2UsMHg3NiwweDhhLDB4ZDUKLSt9Owot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfcHRbXSA9IHsKLSsJMHhlYiwweGFi LDB4Y2UsMHg5NSwweGIxLDB4NGQsMHgzYywweDhkLDB4NmYsMHhiMywweDUwLDB4MzksCi0rCTB4 MDcsMHg5MCwweDMxLDB4MWMKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18x MjhfY3RbXSA9IHsKLSsJMHg3NywweDhhLDB4ZTgsMHhiNCwweDNjLDB4YjksMHg4ZCwweDVhLDB4 ODIsMHg1MCwweDgxLDB4ZDUsCi0rCTB4YmUsMHg0NywweDFjLDB4NjMKLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfa2V5W10gPSB7Ci0rCTB4MWUsMHhhNiwweDYx LDB4YzUsMHg4ZCwweDk0LDB4M2EsMHgwZSwweDQ4LDB4MDEsMHhlNCwweDJmLAotKwkweDRiLDB4 MDksMHg0NywweDE0LDB4OWUsMHg3ZiwweDlmLDB4OGUsMHgzZSwweDY4LDB4ZDAsMHhjNywKLSsJ MHg1MCwweDUyLDB4MTAsMHhiZCwweDMxLDB4MWEsMHgwZSwweDdjLDB4ZDYsMHhlMSwweDNmLDB4 ZmQsCi0rCTB4ZjIsMHg0MSwweDhkLDB4OGQsMHgxOSwweDExLDB4YzAsMHgwNCwweGNkLDB4YTUs MHg4ZCwweGEzLAotKwkweGQ2LDB4MTksMHhiNywweGUyLDB4YjksMHgxNCwweDFlLDB4NTgsMHgz MSwweDhlLDB4ZWEsMHgzOSwKLSsJMHgyYywweGY0LDB4MWIsMHgwOAotK307Ci0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9pW10gPSB7Ci0rCTB4YWQsMHhmOCwweGQ5LDB4MjYs MHgyNywweDQ2LDB4NGEsMHhkMiwweGYwLDB4NDIsMHg4ZSwweDg0LAotKwkweGE5LDB4ZjgsMHg3 NSwweDY0Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X3B0W10gPSB7 Ci0rCTB4MmUsMHhlZCwweGVhLDB4NTIsMHhjZCwweDgyLDB4MTUsMHhlMSwweGFjLDB4YzYsMHg0 NywweGU4LAotKwkweDEwLDB4YmIsMHhjMywweDY0LDB4MmUsMHg4NywweDI4LDB4N2YsMHg4ZCww eDJlLDB4NTcsMHhlMywKLSsJMHg2YywweDBhLDB4MjQsMHhmYiwweGMxLDB4MmEsMHgyMCwweDJl Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2N0W10gPSB7Ci0rCTB4 Y2IsMHhhYSwweGQwLDB4ZTIsMHhmNiwweGNlLDB4YTMsMHhmNSwweDBiLDB4MzcsMHhmOSwweDM0 LAotKwkweGQ0LDB4NmEsMHg5YiwweDEzLDB4MGIsMHg5ZCwweDU0LDB4ZjAsMHg3ZSwweDM0LDB4 ZjMsMHg2YSwKLSsJMHhmNywweDkzLDB4ZTgsMHg2ZiwweDczLDB4YzYsMHhkNywweGRiCi0rfTsK LSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKCkKLSsJewotKwlpbnQgcmV0ID0gMTsKLSsJ RVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKwlp ZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF94dHMoKSwKLSsJCQkJWFRTXzEy OF9rZXksIFhUU18xMjhfaSwgWFRTXzEyOF9wdCwgWFRTXzEyOF9jdCwKLSsJCQkJc2l6ZW9mKFhU U18xMjhfcHQpKSA8PSAwKQotKwkJcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfY2lwaGVyX3Rlc3Qo JmN0eCwgRVZQX2Flc18yNTZfeHRzKCksCi0rCQkJCVhUU18yNTZfa2V5LCBYVFNfMjU2X2ksIFhU U18yNTZfcHQsIFhUU18yNTZfY3QsCi0rCQkJCXNpemVvZihYVFNfMjU2X3B0KSkgPD0gMCkKLSsJ CXJldCA9IDA7Ci0rCi0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCWlmIChyZXQg PT0gMCkKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hUUyxGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2ZpcHMvZmlwcy5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwcy5jLmZp cHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDE3NjkzMjEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZmlwcy9maXBzLmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDE3NjkzMjEgKzAyMDAK LUBAIC0wLDAgKzEsNDg5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2RlZmlu ZSBfR05VX1NPVVJDRQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxsaW1pdHMu aD4KLSsjaW5jbHVkZSA8ZGxmY24uaD4KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8 c3RkbGliLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rI2lmbmRlZiBQQVRIX01BWAot KyNkZWZpbmUgUEFUSF9NQVggMTAyNAotKyNlbmRpZgotKwotK3N0YXRpYyBpbnQgZmlwc19zZWxm dGVzdF9mYWlsID0gMDsKLStzdGF0aWMgaW50IGZpcHNfbW9kZSA9IDA7Ci0rc3RhdGljIGludCBm aXBzX3N0YXJ0ZWQgPSAwOwotKwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZv aWQpOwotK3N0YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsKLStzdGF0aWMg aW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsKLSsKLSsjZGVmaW5lIGZpcHNfd19s b2NrKCkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTKQotKyNkZWZpbmUgZmlwc193X3Vu bG9jaygpCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTKQotKyNkZWZpbmUgZmlwc19y X2xvY2soKQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3Jf dW5sb2NrKCkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rCi0rc3RhdGljIHZv aWQgZmlwc19zZXRfbW9kZShpbnQgb25vZmYpCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBm aXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkKLSsJCXsKLSsJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKLSsJCWZpcHNfbW9kZSA9IG9ub2Zm OwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsK LStpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlpbnQg b3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoZmlwc19z dGFydGVkKQotKwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOwotKwkJ cmV0ID0gZmlwc19tb2RlOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7 Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQo dm9pZCkKLSsgICAgewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYgKGZpcHNfc3RhcnRlZCkK LSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwot KwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCXJldCA9IGZpcHNfc2VsZnRl c3RfZmFpbDsKLSsJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCX0KLSsg ICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qIFNlbGZ0ZXN0IGZhaWx1cmUgZmF0YWwgZXhp dCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCi0rICogZHVyaW5nICphbnkqIGNyeXB0b2dy YXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0KLSsgKiBvdmVyaGVhZCBwb3NzaWJs ZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0LgotKyAqLwotKwotK3ZvaWQgRklQ U19zZWxmdGVzdF9jaGVjayh2b2lkKQotKyAgICB7Ci0rICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2Zh aWwpCi0rCXsKLSsJT3BlblNTTERpZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VM RlRFU1QgRkFJTFVSRSIpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwodm9pZCkKLSsgICAgewotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICB9 Ci0rCi0rLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNrIGRvZXMgb3Vyc2VsdmVzICov Ci0rCi0rc3RhdGljIGludAotK2dldF9saWJyYXJ5X3BhdGgoY29uc3QgY2hhciAqbGlibmFtZSwg Y29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4pCi0rewot KwlEbF9pbmZvIGluZm87Ci0rCXZvaWQgKmRsLCAqc3ltOwotKwlpbnQgcnYgPSAtMTsKLSsKLSsg ICAgICAgIGRsID0gZGxvcGVuKGxpYm5hbWUsIFJUTERfTEFaWSk7Ci0rICAgICAgICBpZiAoZGwg PT0gTlVMTCkgewotKwkgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0gICAgICAgCi0rCi0r CXN5bSA9IGRsc3ltKGRsLCBzeW1ib2xuYW1lKTsKLSsKLSsJaWYgKHN5bSAhPSBOVUxMICYmIGRs YWRkcihzeW0sICZpbmZvKSkgewotKwkJc3RybmNweShwYXRoLCBpbmZvLmRsaV9mbmFtZSwgcGF0 aGxlbi0xKTsKLSsJCXBhdGhbcGF0aGxlbi0xXSA9ICdcMCc7Ci0rCQlydiA9IDA7Ci0rCX0KLSsK LSsJZGxjbG9zZShkbCk7CQotKwkKLSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgY29uc3Qg Y2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0rCi0rc3RhdGljIGNoYXIgKgotK2Jp bjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQotK3sKLSsJY2hhciAqaGV4LCAqcDsKLSsJdW5z aWduZWQgY2hhciAqc3JjID0gYnVmOwotKwkKLSsJaGV4ID0gbWFsbG9jKGxlbiAqIDIgKyAxKTsK LSsJaWYgKGhleCA9PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXAgPSBoZXg7Ci0rCi0r CXdoaWxlIChsZW4gPiAwKSB7Ci0rCQl1bnNpZ25lZCBjOwotKwotKwkJYyA9ICpzcmM7Ci0rCQlz cmMrKzsKLSsKLSsJCSpwID0gY29udltjID4+IDRdOwotKwkJKytwOwotKwkJKnAgPSBjb252W2Mg JiAweDBmXTsKLSsJCSsrcDsKLSsJCS0tbGVuOwotKwl9Ci0rCSpwID0gJ1wwJzsKLSsJcmV0dXJu IGhleDsKLSt9Ci0rCi0rI2RlZmluZSBITUFDX1BSRUZJWCAiLiIgCi0rI2RlZmluZSBITUFDX1NV RkZJWCAiLmhtYWMiIAotKyNkZWZpbmUgUkVBRF9CVUZGRVJfTEVOR1RIIDE2Mzg0Ci0rCi0rc3Rh dGljIGNoYXIgKgotK21ha2VfaG1hY19wYXRoKGNvbnN0IGNoYXIgKm9yaWdwYXRoKQotK3sKLSsJ Y2hhciAqcGF0aCwgKnA7Ci0rCWNvbnN0IGNoYXIgKmZuOwotKwotKwlwYXRoID0gbWFsbG9jKHNp emVvZihITUFDX1BSRUZJWCkgKyBzaXplb2YoSE1BQ19TVUZGSVgpICsgc3RybGVuKG9yaWdwYXRo KSk7Ci0rCWlmKHBhdGggPT0gTlVMTCkgewotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJZm4g PSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOwotKwlpZiAoZm4gPT0gTlVMTCkgewotKwkJZm4gPSBv cmlncGF0aDsKLSsJfSBlbHNlIHsKLSsJCSsrZm47Ci0rCX0KLSsKLSsJc3RybmNweShwYXRoLCBv cmlncGF0aCwgZm4tb3JpZ3BhdGgpOwotKwlwID0gcGF0aCArIChmbiAtIG9yaWdwYXRoKTsKLSsJ cCA9IHN0cGNweShwLCBITUFDX1BSRUZJWCk7Ci0rCXAgPSBzdHBjcHkocCwgZm4pOwotKwlwID0g c3RwY3B5KHAsIEhNQUNfU1VGRklYKTsKLSsKLSsJcmV0dXJuIHBhdGg7Ci0rfQotKwotK3N0YXRp YyBjb25zdCBjaGFyIGhtYWNrZXlbXSA9ICJvcmJvRGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFy UCI7Ci0rCi0rc3RhdGljIGludAotK2NvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIgKnBhdGgs IHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKLSt7Ci0rCUZJTEUgKmYgPSBOVUxMOwotKwlp bnQgcnYgPSAtMTsKLSsJdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xFTkdUSF07Ci0r CXNpemVfdCBsZW47Ci0rCXVuc2lnbmVkIGludCBobGVuOwotKwlITUFDX0NUWCBjOwotKwotKwlI TUFDX0NUWF9pbml0KCZjKTsKLSsKLSsJZiA9IGZvcGVuKHBhdGgsICJyIik7Ci0rCi0rCWlmIChm ID09IE5VTEwpIHsKLSsJCWdvdG8gZW5kOwotKwl9Ci0rCi0rCUhNQUNfSW5pdCgmYywgaG1hY2tl eSwgc2l6ZW9mKGhtYWNrZXkpLTEsIEVWUF9zaGEyNTYoKSk7Ci0rCi0rCXdoaWxlICgobGVuPWZy ZWFkKHJidWYsIDEsIHNpemVvZihyYnVmKSwgZikpICE9IDApIHsKLSsJCUhNQUNfVXBkYXRlKCZj LCByYnVmLCBsZW4pOwotKwl9Ci0rCi0rCWxlbiA9IHNpemVvZihyYnVmKTsKLSsJLyogcmV1c2Ug cmJ1ZiBmb3IgaG1hYyAqLwotKwlITUFDX0ZpbmFsKCZjLCByYnVmLCAmaGxlbik7Ci0rCi0rCSpi dWYgPSBtYWxsb2MoaGxlbik7Ci0rCWlmICgqYnVmID09IE5VTEwpIHsKLSsJCWdvdG8gZW5kOwot Kwl9Ci0rCi0rCSpobWFjbGVuID0gaGxlbjsKLSsKLSsJbWVtY3B5KCpidWYsIHJidWYsIGhsZW4p OwotKwotKwlydiA9IDA7Ci0rZW5kOgotKwlITUFDX0NUWF9jbGVhbnVwKCZjKTsKLSsKLSsJaWYg KGYpCi0rCQlmY2xvc2UoZik7Ci0rCi0rCXJldHVybiBydjsKLSt9Ci0rCi0rc3RhdGljIGludAot K0ZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9s bmFtZSkKLSt7Ci0rCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsKLSsJaW50IHJ2OwotKwlGSUxFICpo ZjsKLSsJY2hhciAqaG1hY3BhdGgsICpwOwotKwljaGFyICpobWFjID0gTlVMTDsKLSsJc2l6ZV90 IG47Ci0rCQotKwlydiA9IGdldF9saWJyYXJ5X3BhdGgobGlibmFtZSwgc3ltYm9sbmFtZSwgcGF0 aCwgc2l6ZW9mKHBhdGgpKTsKLSsKLSsJaWYgKHJ2IDwgMCkKLSsJCXJldHVybiAwOwotKwotKwlo bWFjcGF0aCA9IG1ha2VfaG1hY19wYXRoKHBhdGgpOwotKwlpZiAoaG1hY3BhdGggPT0gTlVMTCkK LSsJCXJldHVybiAwOwotKwotKwloZiA9IGZvcGVuKGhtYWNwYXRoLCAiciIpOwotKwlpZiAoaGYg PT0gTlVMTCkgewotKwkJZnJlZShobWFjcGF0aCk7Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotKwlp ZiAoZ2V0bGluZSgmaG1hYywgJm4sIGhmKSA+IDApIHsKLSsJCXZvaWQgKmJ1ZjsKLSsJCXNpemVf dCBobWFjbGVuOwotKwkJY2hhciAqaGV4OwotKwotKwkJaWYgKChwPXN0cmNocihobWFjLCAnXG4n KSkgIT0gTlVMTCkKLSsJCQkqcCA9ICdcMCc7Ci0rCi0rCQlpZiAoY29tcHV0ZV9maWxlX2htYWMo cGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgewotKwkJCXJ2ID0gLTQ7Ci0rCQkJZ290byBlbmQ7 Ci0rCQl9Ci0rCi0rCQlpZiAoKGhleD1iaW4yaGV4KGJ1ZiwgaG1hY2xlbikpID09IE5VTEwpIHsK LSsJCQlmcmVlKGJ1Zik7Ci0rCQkJcnYgPSAtNTsKLSsJCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJ CWlmIChzdHJjbXAoaGV4LCBobWFjKSAhPSAwKSB7Ci0rCQkJcnYgPSAtMTsKLSsJCX0KLSsJCWZy ZWUoYnVmKTsKLSsJCWZyZWUoaGV4KTsKLSsJfQotKwotK2VuZDoKLSsJZnJlZShobWFjKTsKLSsJ ZnJlZShobWFjcGF0aCk7Ci0rCWZjbG9zZShoZik7Ci0rCi0rCWlmIChydiA8IDApCi0rCQlyZXR1 cm4gMDsKLSsKLSsJLyogY2hlY2sgc3VjY2Vzc2Z1bCAqLwotKwlyZXR1cm4gMTsJCi0rfQotKwot K2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgpCi0r ICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0rICAgIGZp cHNfc3RhcnRlZCA9IDE7Ci0rICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsKLSsgICAg aWYob25vZmYpCi0rCXsKLSsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsJLyogRG9u J3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYwot KwkgICBzZWVkaW5nICovCi0rCWlmKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJICAgIHsKLSsJICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxS RUFEWV9TRVQpOwotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7 Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIK LSsJewotKwlleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzJdOwotKwlpZiAo KE9QRU5TU0xfaWEzMmNhcF9QWzBdICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkK LSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNf Ul9VTlNVUFBPUlRFRF9QTEFURk9STSk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwot KwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlPUEVOU1NMX2lhMzJj YXBfUFswXSB8PSAoMTw8MjgpOwkvKiBzZXQgInNoYXJlZCBjYWNoZSIJKi8KLSsJT1BFTlNTTF9p YTMyY2FwX1BbMV0gJj0gfigxPDwoNjAtMzIpKTsJLyogY2xlYXIgQVZYCQkqLwotKwl9Ci0rI2Vu ZGlmCi0rCi0rCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJjcnlwdG8uc28uIiBTSExJQl9WRVJT SU9OX05VTUJFUiwiRklQU19tb2RlX3NldCIpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBT X0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENI KTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAg Z290byBlbmQ7Ci0rCSAgICB9Ci0rCi0rCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJzc2wuc28u IiBTSExJQl9WRVJTSU9OX05VTUJFUiwiU1NMX0NUWF9uZXciKSkKLSsJICAgIHsKLSsJICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSU5HRVJQUklOVF9ET0VT X05PVF9NQVRDSCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0g MDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwotKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCi0r CSAgICBmaXBzX3NldF9tb2RlKG9ub2ZmKTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgZmlwc19z ZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAg IH0KLSsJcmV0ID0gMTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsgICAgZmlwc19zZXRfbW9kZSgwKTsK LSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAgcmV0ID0gMTsKLStlbmQ6Ci0rICAg IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBmaXBzX3dfdW5sb2NrKCk7Ci0rICAg IHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLStzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNfdGhy ZWFkOwotK3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKLSsKLStzdGF0aWMgaW50IGZp cHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAo Zmlwc19zdGFydGVkKQotKwkJewotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTMik7 Ci0rCQlpZiAoZmlwc190aHJlYWRfc2V0KQotKwkJCXsKLSsJCQlDUllQVE9fVEhSRUFESUQgY3Vy OwotKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOwotKwkJCWlmICghQ1JZUFRPX1RI UkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQotKwkJCQlyZXQgPSAxOwotKwkJCX0KLSsJ CUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7 Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJQ1JZUFRPX3dfbG9jayhD UllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoIWZpcHNfdGhyZWFkX3NldCkKLSsJCQl7Ci0rCQkJ Q1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFkKTsKLSsJCQlyZXQgPSAxOwotKwkJ CWZpcHNfdGhyZWFkX3NldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19M T0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBmaXBzX2NsZWFy X293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNf c3RhcnRlZCkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJ aWYgKGZpcHNfdGhyZWFkX3NldCkKLSsJCQl7Ci0rCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKLSsJ CQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKLSsJCQlpZiAoIUNSWVBUT19USFJFQURJ RF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKLSsJCQkJZmlwc190aHJlYWRfc2V0ID0gMDsKLSsJ CQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJfQotKwlyZXR1 cm4gcmV0OwotKwl9Ci0rCi0rCi0rI2lmIDAKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRv IGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgotKyAqIG5hbWUg aXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0Ci0rICovCi0rdm9pZCBo YXNoX2ZpbmFsKHZvaWQpCi0rCXsKLSsJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1Jf Tk9OX0ZJUFNfTUVUSE9EKTsKLSsJfQotKyNlbmRpZgotKwotKwotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAx ODowMDo1MS40MDE3NjkzMjEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9m aXBzX2NtYWNfc2VsZnRlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMTc2OTMyMSArMDIwMAot QEAgLTAsMCArMSwxNjEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAx MSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KLSsjaW5jbHVkZSAiZmlwc19s b2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsKLSsJaW50 IG5pZDsKLSsJY29uc3QgdW5zaWduZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RIXTsgc2l6 ZV90IGtleXNpemU7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnWzY0XTsgc2l6ZV90IG1zZ3Np emU7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMyXTsgc2l6ZV90IG1hY3NpemU7Ci0rfSBD TUFDX0tBVDsKLSsKLSsvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9u aXN0cHVicy84MDAtMzhCL1NQXzgwMC0zOEIucGRmICovCi0rc3RhdGljIGNvbnN0IENNQUNfS0FU IHZlY3RvcltdID0gewotKyAgICB7CU5JRF9hZXNfMTI4X2NiYywJLyogQ291bnQgPSAzMiBmcm9t IENNQUNHZW5BRVMxMjgudHh0ICovCi0rCXsgMHg3NywweGE3LDB4N2YsMHhhZiwgMHgyOSwweDBj LDB4MWYsMHhhMywKLSsJICAweDBjLDB4NjgsMHgzZCwweGYxLCAweDZiLDB4YTcsMHhhNywweDdi LCB9LCAxMjgsCi0rCXsgMHgwMiwweDA2LDB4ODMsMHhlMSwgMHhmMCwweDM5LDB4MmYsMHg0YywK LSsJICAweGFjLDB4NTQsMHgzMSwweDhiLCAweDYwLDB4MjksMHgyNSwweDllLAotKwkgIDB4OWMs MHg1NSwweDNkLDB4YmMsIDB4NGIsMHg2YSwweGQ5LDB4OTgsCi0rCSAgMHhlNiwweDRkLDB4NTgs MHhlNCwgMHhlNywweGRjLDB4MmUsMHgxMywgfSwgMjU2LAotKwl7IDB4ZmIsMHhmZSwweGE0LDB4 MWIsIH0sIDMyCi0rICAgIH0sCi0rICAgIHsJTklEX2Flc18xOTJfY2JjLAkvKiBDb3VudCA9IDIz IGZyb20gQ01BQ0dlbkFFUzE5Mi50eHQgKi8KLSsJeyAweDdiLDB4MzIsMHgzOSwweDEzLCAweDY5 LDB4YWEsMHg0YywweGE5LAotKwkgIDB4NzUsMHg1OCwweDA5LDB4NWIsIDB4ZTMsMHhjMywweGVj LDB4ODYsCi0rCSAgMHgyYiwweGQwLDB4NTcsMHhjZSwgMHhmMSwweGUzLDB4MmQsMHg2MiwgfSwg MTkyLAotKwl7IDB4MCB9LCAwLAotKwl7IDB4ZTQsMHhkOSwweDM0LDB4MGIsIDB4MDMsMHhlNiww eDdkLDB4ZWYsCi0rCSAgMHhkNCwweDk2LDB4OWMsMHhjMSwgMHhlZCwweDM3LDB4MzUsMHhlNiwg fSwgMTI4LAotKyAgICB9LAotKyAgICB7CU5JRF9hZXNfMjU2X2NiYywJLyogQ291bnQgPSAzMyBm cm9tIENNQUNHZW5BRVMyNTYudHh0ICovCi0rCXsgMHgwYiwweDEyLDB4MmEsMHhjOCwgMHhmMyww eDRlLDB4ZDEsMHhmZSwKLSsJICAweDA4LDB4MmEsMHgzNiwweDI1LCAweGQxLDB4NTcsMHg1Niww eDE0LAotKwkgIDB4NTQsMHgxNiwweDdhLDB4YzEsIDB4NDUsMHhhMSwweDBiLDB4YmYsCi0rCSAg MHg3NywweGM2LDB4YTcsMHgwNSwgMHg5NiwweGQ1LDB4NzQsMHhmMSwgfSwgMjU2LAotKwl7IDB4 NDksMHg4YiwweDUzLDB4ZmQsIDB4ZWMsMHg4NywweGVkLDB4Y2IsCi0rCSAgMHhmMCwweDcwLDB4 OTcsMHhkYywgMHhjZCwweGU5LDB4M2EsMHgwOCwKLSsJICAweDRiLDB4YWQsMHg3NSwweDAxLCAw eGEyLDB4MjQsMHhlMywweDg4LAotKwkgIDB4ZGYsMHgzNCwweDljLDB4ZTEsIDB4ODksMHg1OSww eGZlLDB4ODQsCi0rCSAgMHg4NSwweGY4LDB4YWQsMHgxNSwgMHgzNywweGYwLDB4ZDgsMHg5NiwK LSsJICAweGVhLDB4NzMsMHhiZSwweGRjLCAweDcyLDB4MTQsMHg3MSwweDNmLCB9LCAzODQsCi0r CXsgMHhmNiwweDJjLDB4NDYsMHgzMiwgMHg5YiwgfSwgNDAsCi0rICAgIH0sCi0rICAgIHsJTklE X2Rlc19lZGUzX2NiYywJLyogQ291bnQgPSA0MSBmcm9tIENNQUNHZW5UREVTMy5yZXEgKi8KLSsJ eyAweDg5LDB4YmMsMHhkOSwweDUyLCAweGE4LDB4YzgsMHhhYiwweDM3LAotKwkgIDB4MWEsMHhm NCwweDhhLDB4YzcsIDB4ZDAsMHg3MCwweDg1LDB4ZDUsCi0rCSAgMHhlZiwweGY3LDB4MDIsMHhl NiwgMHhkNiwweDJjLDB4ZGMsMHgyMywgfSwgMTkyLAotKwl7IDB4ZmEsMHg2MiwweDBjLDB4MWIs IDB4YmUsMHg5NywweDMxLDB4OWUsCi0rCSAgMHg5YSwweDBjLDB4ZjAsMHg0OSwgMHgyMSwweDIx LDB4ZjcsMHhhMiwKLSsJICAweDBlLDB4YjAsMHg4YSwweDZhLCAweDcwLDB4OWQsMHhjYiwweGQw LAotKwkgIDB4MGEsMHhhZiwweDM4LDB4ZTQsIDB4ZjksMHg5ZSwweDc1LDB4NGUsIH0sIDI1NiwK LSsJeyAweDhmLDB4NDksMHhhMSwweGI3LCAweGQ2LDB4YWEsMHgyMiwweDU4LCB9LCA2NCwKLSsg ICAgfSwKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWMoKQotKwl7Ci0rCXNpemVfdCBu LCBvdXRsZW47Ci0rCXVuc2lnbmVkIGNoYXIgICAgb3V0WzMyXTsKLSsJY29uc3QgRVZQX0NJUEhF UiAqY2lwaGVyOwotKwlDTUFDX0NUWCAqY3R4ID0gQ01BQ19DVFhfbmV3KCk7Ci0rCWNvbnN0IENN QUNfS0FUICp0OwotKwlpbnQgcnYgPSAxOwotKwotKwlmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVv Zih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQotKwkJewotKwkJY2lwaGVyID0g RklQU19nZXRfY2lwaGVyYnluaWQodC0+bmlkKTsKLSsJCWlmICghY2lwaGVyKQotKwkJCXsKLSsJ CQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCWlmICghQ01BQ19Jbml0KGN0eCwg dC0+a2V5LCB0LT5rZXlzaXplLzgsIGNpcGhlciwgMCkpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0r CQkJZ290byBlcnI7Ci0rCQkJfQotKwkJaWYgKCFDTUFDX1VwZGF0ZShjdHgsIHQtPm1zZywgdC0+ bXNnc2l6ZS84KSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0r CQkJCi0rCQlpZiAoIUNNQUNfRmluYWwoY3R4LCBvdXQsICZvdXRsZW4pKQotKwkJCXsKLSsJCQly diA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCUNNQUNfQ1RYX2NsZWFudXAoY3R4KTsK LSsKLSsJCWlmKG91dGxlbiA8IHQtPm1hY3NpemUvOCB8fCBtZW1jbXAob3V0LHQtPm1hYyx0LT5t YWNzaXplLzgpKQotKwkJCXsKLSsJCSAgICAJcnYgPSAwOwotKwkJICAgIAl9Ci0rCQl9Ci0rCi0r CWVycjoKLSsJQ01BQ19DVFhfZnJlZShjdHgpOwotKwotKwlpZiAocnYgPT0gLTEpCi0rCQl7Ci0r CQlydiA9IDA7Ci0rCQl9Ci0rCWlmICghcnYpCi0rCQkgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX0NNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCi0rCXJldHVybiBydjsKLSsJ fQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kZXNf c2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0 ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5j LmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDE3NjkzMjEgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEu NDAxNzY5MzIxICswMjAwCi1AQCAtMCwwICsxLDE0NyBAQAotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgot KyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xj b25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QK LSsgICAgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhl cnRleHRbOF07Ci0rICAgIH0gdGVzdHMyW109Ci0rCXsKLSsJewotKwl7IDB4N2MsMHg0ZiwweDZl LDB4ZjcsMHhhMiwweDA0LDB4MTYsMHhlYywKLSsJICAweDBiLDB4NmIsMHg3YywweDllLDB4NWUs MHgxOSwweGE3LDB4YzQgfSwKLSsJeyAweDA2LDB4YTcsMHhkOCwweDc5LDB4YWEsMHhjZSwweDY5 LDB4ZWYgfSwKLSsJeyAweDRjLDB4MTEsMHgxNywweDU1LDB4YmYsMHhjNCwweDRlLDB4ZmQgfQot Kwl9LAotKwl7Ci0rCXsgMHg1ZCwweDllLDB4MDEsMHhkMywweDI1LDB4YzcsMHgzZSwweDM0LAot KwkgIDB4MDEsMHgxNiwweDdjLDB4ODUsMHgyMywweGRmLDB4ZTAsMHg2OCB9LAotKwl7IDB4OWMs MHg1MCwweDA5LDB4MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9LAotKwl7IDB4ZDIsMHgwYiwweDE4 LDB4ZGYsMHhkOSwweDBkLDB4OWUsMHhmZiB9LAotKwl9Ci0rCX07Ci0rCi0rc3RhdGljIGNvbnN0 IHN0cnVjdAotKyAgICB7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKLSsgICAg Y29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgY2lwaGVydGV4dFs4XTsKLSsgICAgfSB0ZXN0czNbXT0KLSsJewotKwl7Ci0rCXsgMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkgIDB4RkUsMHhEQywweEJBLDB4 OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwKLSsJICAweDEyLDB4MzQsMHg1NiwweDc4LDB4OWEsMHhi YywweGRlLDB4ZjAgfSwKLSsJeyAweDhmLDB4OGYsMHhiZiwweDliLDB4NWQsMHg0OCwweGI0LDB4 MWMgfSwKLSsJeyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMsMHhhMiwweGVhLDB4MWIgfSwKLSsJ fSwKLSsJewotKwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsMHhGRSwKLSsJ ICAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYsCi0rCSAgMHhFRCwweDM5 LDB4RDksMHg1MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCi0rCXsgMHgwMSwweDIzLDB4NDUsMHg2 NywweDg5LDB4QUIsMHhDRCwweEVGIH0sCi0rCXsgMHgxMSwweDI1LDB4YjAsMHgzNSwweGJlLDB4 YTAsMHg4MiwweDg2IH0sCi0rCX0sCi0rCX07Ci0rCi0rCi0rc3RhdGljIGludCBjb3JydXB0X2Rl czsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9kZXMoKQotKyAgICB7Ci0rICAgIGNvcnJ1cHRfZGVz ID0gMTsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0rICAgIHsKLSsgICAg aW50IG4sIHJldCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RF UyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7 ICsrbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsKLSsJbWVtY3B5KHBs YWludGV4dCwgdGVzdHMyW25dLnBsYWludGV4dCwgc2l6ZW9mKHBsYWludGV4dCkpOwotKwlpZiAo Y29ycnVwdF9kZXMpCi0rCQlwbGFpbnRleHRbMF0rKzsKLSsJaWYgKCFmaXBzX2NpcGhlcl90ZXN0 KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAotKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxMLAotKwkJ CQlwbGFpbnRleHQsIHRlc3RzMltuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9 Ci0rCi0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25v d24gYW5zd2VycyAqLwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJaWYgKCFm aXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSwKLSsJCQkJdGVzdHMzW25d LmtleSwgTlVMTCwKLSsJCQkJdGVzdHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRl eHQsIDgpKQotKwkJZ290byBlcnI7Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAg ICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVE KTsKLSsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX2N0ci5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDE3NjkzMjEgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMJMjAxMi0w NC0yNiAxODowMDo1MS40MDI3NjkzNDMgKzAyMDAKLUBAIC0wLDAgKzEsNDM2IEBACi0rLyogZmlw cy9yYW5kL2ZpcHNfZHJiZ19jdHIuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl bnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0r ICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0 ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLStzdGF0aWMgdm9pZCBpbmNf MTI4KERSQkdfQ1RSX0NUWCAqY2N0eCkKLSsJewotKwlpbnQgaTsKLSsJdW5zaWduZWQgY2hhciBj OwotKwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1OwotKwlmb3IgKGkgPSAwOyBpIDwg MTY7IGkrKykKLSsJCXsKLSsJCWMgPSAqcDsKLSsJCWMrKzsKLSsJCSpwID0gYzsKLSsJCWlmIChj KQotKwkJCXJldHVybjsKLSsJCXAtLTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyB2b2lkIGN0cl9Y T1IoRFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlu bGVuKQotKwl7Ci0rCXNpemVfdCBpLCBuOwotKwkvKiBBbnkgemVybyBwYWRkaW5nIHdpbGwgaGF2 ZSBubyBlZmZlY3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQotKwkgKiBhcmUgWE9SaW5nLiBTbyBqdXN0 IHByb2Nlc3MgaG93ZXZlciBtdWNoIGlucHV0IHdlIGhhdmUuCi0rCSAqLwotKwotKwlpZiAoIWlu IHx8ICFpbmxlbikKLSsJCXJldHVybjsKLSsKLSsJaWYgKGlubGVuIDwgY2N0eC0+a2V5bGVuKQot KwkJbiA9IGlubGVuOwotKwllbHNlCi0rCQluID0gY2N0eC0+a2V5bGVuOwotKwotKwlmb3IgKGkg PSAwOyBpIDwgbjsgaSsrKQotKwkJY2N0eC0+S1tpXSBePSBpbltpXTsKLSsJaWYgKGlubGVuIDw9 IGNjdHgtPmtleWxlbikKLSsJCXJldHVybjsKLSsKLSsJbiA9IGlubGVuIC0gY2N0eC0+a2V5bGVu OwotKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCi0rCWlmIChuID4gMTYpCi0rCQluID0gMTY7 Ci0rCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKwkJY2N0eC0+VltpXSBePSBpbltpICsgY2N0 eC0+a2V5bGVuXTsKLSsJfQotKwotKy8qIFByb2Nlc3MgYSBjb21wbGV0ZSBibG9jayB1c2luZyBC Q0MgYWxnb3JpdGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4zICovCi0rCi0rc3RhdGljIHZvaWQgY3Ry X0JDQ19ibG9jayhEUkJHX0NUUl9DVFggKmNjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqaW4pCi0rCXsKLSsJaW50IGk7Ci0rCWZvciAoaSA9IDA7IGkg PCAxNjsgaSsrKQotKwkJb3V0W2ldIF49IGluW2ldOwotKwlBRVNfZW5jcnlwdChvdXQsIG91dCwg JmNjdHgtPmRmX2tzKTsKLSsjaWYgMAotK2ZwcmludGYoc3RkZXJyLCAiQkNDIGluK291dFxuIik7 Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOwotK0JJT19kdW1wX2ZwKHN0ZGVyciwgb3V0 LCAxNik7Ci0rI2VuZGlmCi0rCX0KLSsKLSsvKiBIYW5kbGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9u cyBmb3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9yIEsgYW5kIFggKi8KLStzdGF0aWMgdm9p ZCBjdHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmluKQotKwl7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGluKTsKLSsJY3RyX0JD Q19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBpbik7Ci0rCWlmIChjY3R4LT5rZXlsZW4gIT0g MTYpCi0rCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGluKTsKLSsJfQotKy8q IEluaXRpYWxpc2UgQkNDIGJsb2NrczogdGhlc2UgaGF2ZSB0aGUgdmFsdWUgMCwxLDIgaW4gbGVm dG1vc3QgcG9zaXRpb25zOgotKyAqIHNlZSAxMC40LjIgc3RhZ2UgNy4KLSsgKi8KLStzdGF0aWMg dm9pZCBjdHJfQkNDX2luaXQoRFJCR19DVFJfQ1RYICpjY3R4KQotKwl7Ci0rCW1lbXNldChjY3R4 LT5LWCwgMCwgNDgpOwotKwltZW1zZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsKLSsJY3RyX0JDQ19i bG9jayhjY3R4LCBjY3R4LT5LWCwgY2N0eC0+Ymx0bXApOwotKwljY3R4LT5ibHRtcFszXSA9IDE7 Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOwotKwlp ZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJewotKwkJY2N0eC0+Ymx0bXBbM10gPSAyOwotKwkJ Y3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBjY3R4LT5ibHRtcCk7Ci0rCQl9Ci0r CX0KLSsKLSsvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRobSwgc29t ZSBwb3NzaWJseSBwYXJ0aWFsICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUoRFJCR19D VFJfQ1RYICpjY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVu KQotKwl7Ci0rCWlmICghaW4gfHwgIWlubGVuKQotKwkJcmV0dXJuOwotKwkvKiBJZiB3ZSBoYXZl IHBhcnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0ICovCi0rCWlmIChjY3R4LT5ibHRtcF9wb3Mp Ci0rCQl7Ci0rCQlzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9zOwotKwkJLyogSWYg d2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNzIGl0ICovCi0rCQlpZiAoaW5sZW4g Pj0gbGVmdCkKLSsJCQl7Ci0rCQkJbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9z LCBpbiwgbGVmdCk7Ci0rCQkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwotKwkJ CWNjdHgtPmJsdG1wX3BvcyA9IDA7Ci0rCQkJaW5sZW4gLT0gbGVmdDsKLSsJCQlpbiArPSBsZWZ0 OwotKwkJCX0KLSsJCX0KLSsJLyogUHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxvY2tz ICovCi0rCXdoaWxlIChpbmxlbiA+PSAxNikKLSsJCXsKLSsJCWN0cl9CQ0NfYmxvY2tzKGNjdHgs IGluKTsKLSsJCWluICs9IDE2OwotKwkJaW5sZW4gLT0gMTY7Ci0rCQl9Ci0rCS8qIENvcHkgYW55 IHJlbWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0rCWlm IChpbmxlbiA+IDApCi0rCQl7Ci0rCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9w b3MsIGluLCBpbmxlbik7Ci0rCQljY3R4LT5ibHRtcF9wb3MgKz0gaW5sZW47Ci0rCQl9Ci0rCX0K LSsKLStzdGF0aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAqY2N0eCkKLSsJewot KwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQotKwkJewotKwkJbWVtc2V0KGNjdHgtPmJsdG1wICsgY2N0 eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1wX3Bvcyk7Ci0rCQljdHJfQkNDX2Jsb2Nr cyhjY3R4LCBjY3R4LT5ibHRtcCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBjdHJfZGYo RFJCR19DVFJfQ1RYICpjY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90 IGluMWxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQotKwl7Ci0rCXNpemVf dCBpbmxlbjsKLSsJdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPmJsdG1wOwotKwlzdGF0aWMgdW5z aWduZWQgY2hhciBjODAgPSAweDgwOwotKwotKwljdHJfQkNDX2luaXQoY2N0eCk7Ci0rCWlmICgh aW4xKQotKwkJaW4xbGVuID0gMDsKLSsJaWYgKCFpbjIpCi0rCQlpbjJsZW4gPSAwOwotKwlpZiAo IWluMykKLSsJCWluM2xlbiA9IDA7Ci0rCWlubGVuID0gaW4xbGVuICsgaW4ybGVuICsgaW4zbGVu OwotKwkvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICovCi0rCSpwKysgPSAo aW5sZW4gPj4gMjQpICYgMHhmZjsKLSsJKnArKyA9IChpbmxlbiA+PiAxNikgJiAweGZmOwotKwkq cCsrID0gKGlubGVuID4+IDgpICYgMHhmZjsKLSsJKnArKyA9IGlubGVuICYgMHhmZjsKLSsJLyog TkIga2V5bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KLSsJKnArKyA9IDA7Ci0rCSpwKysgPSAw OwotKwkqcCsrID0gMDsKLSsJKnAgPSAodW5zaWduZWQgY2hhcikoKGNjdHgtPmtleWxlbiArIDE2 KSAmIDB4ZmYpOwotKwljY3R4LT5ibHRtcF9wb3MgPSA4OwotKwljdHJfQkNDX3VwZGF0ZShjY3R4 LCBpbjEsIGluMWxlbik7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwgaW4ybGVuKTsKLSsJ Y3RyX0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOwotKwljdHJfQkNDX3VwZGF0ZShjY3R4 LCAmYzgwLCAxKTsKLSsJY3RyX0JDQ19maW5hbChjY3R4KTsKLSsJLyogU2V0IHVwIGtleSBLICov Ci0rCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNjdHgtPmtleWxlbiAqIDgsICZjY3R4 LT5kZl9reGtzKTsKLSsJLyogWCBmb2xsb3dzIGtleSBLICovCi0rCUFFU19lbmNyeXB0KGNjdHgt PktYICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNjdHgtPmRmX2t4a3MpOwotKwlBRVNfZW5j cnlwdChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3MpOwotKwlpZiAoY2N0 eC0+a2V5bGVuICE9IDE2KQotKwkJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAxNiwgY2N0eC0+S1gg KyAzMiwgJmNjdHgtPmRmX2t4a3MpOwotKyNpZiAwCi0rZnByaW50ZihzdGRlcnIsICJPdXRwdXQg b2YgY3RyX2RmOlxuIik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LWCwgY2N0eC0+a2V5 bGVuICsgMTYpOwotKyNlbmRpZgotKwl9Ci0rCi0rLyogTkIgdGhlIG5vLWRmICBVcGRhdGUgaW4g U1A4MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5wdXQgbGVuZ3RoCi0rICogb2Ygc2VlZGxl biwgaG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxnb3JpdGhtIHBhZCB0aGUgaW5wdXQgd2l0 aAotKyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhhdmUgdXAgdG8gdHdvIHBhcmFtZXRlcnMg WE9SZWQgdG9nZXRoZXIsCi0rICogaGFuZGxlIGJvdGggY2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBp bnN0ZWFkLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0cl9VcGRhdGUoRFJCR19DVFggKmRjdHgs Ci0rCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQljb25zdCB1 bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQljb25zdCB1bnNpZ25lZCBjaGFy ICpub25jZSwgc2l6ZV90IG5vbmNlbGVuKQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZk Y3R4LT5kLmN0cjsKLSsJLyoga3MgaXMgYWxyZWFkeSBzZXR1cCBmb3IgY29ycmVjdCBrZXkgKi8K LSsJaW5jXzEyOChjY3R4KTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgt PmtzKTsKLSsJLyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEyOCBiaXRzIG5lZWQgZXh0cmEgZW5j cnlwdCAqLwotKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJewotKwkJaW5jXzEyOChjY3R4 KTsKLSsJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNjdHgtPmtzKTsKLSsJ CX0KLSsJaW5jXzEyOChjY3R4KTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+ViwgJmNj dHgtPmtzKTsKLSsJLyogSWYgMTkyIGJpdCBrZXkgcGFydCBvZiBWIGlzIG9uIGVuZCBvZiBLICov Ci0rCWlmIChjY3R4LT5rZXlsZW4gPT0gMjQpCi0rCQl7Ci0rCQltZW1jcHkoY2N0eC0+ViArIDgs IGNjdHgtPlYsIDgpOwotKwkJbWVtY3B5KGNjdHgtPlYsIGNjdHgtPksgKyAyNCwgOCk7Ci0rCQl9 Ci0rCi0rCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKLSsJCXsKLSsJ CS8qIElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5nIGRlcml2ZWQgdmFsdWUgKi8KLSsJCWlmIChp bjEgfHwgbm9uY2UgfHwgaW4yKQotKwkJCWN0cl9kZihjY3R4LCBpbjEsIGluMWxlbiwgbm9uY2Us IG5vbmNlbGVuLCBpbjIsIGluMmxlbik7Ci0rCQkvKiBJZiB0aGlzIGEgcmV1c2UgaW5wdXQgaW4x bGVuICE9IDAgKi8KLSsJCWlmIChpbjFsZW4pCi0rCQkJY3RyX1hPUihjY3R4LCBjY3R4LT5LWCwg ZGN0eC0+c2VlZGxlbik7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWN0cl9YT1IoY2N0eCwgaW4x LCBpbjFsZW4pOwotKwkJY3RyX1hPUihjY3R4LCBpbjIsIGluMmxlbik7Ci0rCQl9Ci0rCi0rCUFF U19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7Ci0r I2lmIDAKLStmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciB1cGRhdGUgaXM6XG4iKTsKLStCSU9f ZHVtcF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxlbik7Ci0rQklPX2R1bXBfZnAoc3Rk ZXJyLCBjY3R4LT5WLCAxNik7Ci0rI2VuZGlmCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3Ry X2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVu dCwgc2l6ZV90IGVudGxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90 IG5vbmNlbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVu KQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsJbWVtc2V0KGNj dHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7Ci0rCW1lbXNldChjY3R4LT5WLCAwLCBzaXplb2Yo Y2N0eC0+VikpOwotKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3Ro LCAmY2N0eC0+a3MpOwotKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBwZXJzLCBwZXJz bGVuLCBub25jZSwgbm9uY2VsZW4pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQg ZHJiZ19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCAKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICplbnQsIHNpemVfdCBlbnRsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6 ZV90IGFkaW5sZW4pCi0rCXsKLSsJY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgYWRpbiwg YWRpbmxlbiwgTlVMTCwgMCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJn X2N0cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvdXRsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5s ZW4pCi0rCXsKLSsJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKwlpZiAoYWRp biAmJiBhZGlubGVuKQotKwkJewotKwkJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBO VUxMLCAwLCBOVUxMLCAwKTsKLSsJCS8qIFRoaXMgbWVhbnMgd2UgcmV1c2UgZGVyaXZlZCB2YWx1 ZSAqLwotKwkJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQotKwkJCXsK LSsJCQlhZGluID0gTlVMTDsKLSsJCQlhZGlubGVuID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UK LSsJCWFkaW5sZW4gPSAwOwotKwotKwlmb3IgKDs7KQotKwkJewotKwkJaW5jXzEyOChjY3R4KTsK LSsJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFs aWQpCi0rCQkJewotKwkJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGRjdHgtPmxiLCAmY2N0eC0+a3Mp OwotKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAo b3V0bGVuIDwgMTYpCi0rCQkJewotKwkJCS8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQgd2ls bCBiZSB1cGRhdGVkICovCi0rCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgt PmtzKTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNjdHgtPkspKQotKwkJ CQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBjY3R4LT5LLCBvdXRsZW4pOwotKwkJCWJyZWFr OwotKwkJCX0KLSsJCUFFU19lbmNyeXB0KGNjdHgtPlYsIG91dCwgJmNjdHgtPmtzKTsKLSsJCWlm ICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsJCQlyZXR1cm4gMDsKLSsJCW91 dCArPSAxNjsKLSsJCW91dGxlbiAtPSAxNjsKLSsJCWlmIChvdXRsZW4gPT0gMCkKLSsJCQlicmVh azsKLSsJCX0KLSsKLSsJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBO VUxMLCAwKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3Ry X3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJbWVtc2V0KCZkY3R4LT5kLmN0 ciwgMCwgc2l6ZW9mKERSQkdfQ1RSX0NUWCkpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBm aXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJRFJCR19DVFJfQ1RYICpj Y3R4ID0gJmRjdHgtPmQuY3RyOwotKwotKwlzaXplX3Qga2V5bGVuOwotKwotKwlzd2l0Y2ggKGRj dHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKLSsJCWtleWxlbiA9IDE2 OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKLSsJCWtleWxlbiA9IDI0 OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2N0cjoKLSsJCWtleWxlbiA9IDMy OwotKwkJYnJlYWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJcmV0dXJuIC0yOwotKwkJfQotKwotKwlk Y3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRpYXRlOwotKwlkY3R4LT5yZXNlZWQg PSBkcmJnX2N0cl9yZXNlZWQ7Ci0rCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJhdGU7 Ci0rCWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOwotKwotKwlj Y3R4LT5rZXlsZW4gPSBrZXlsZW47Ci0rCWRjdHgtPnN0cmVuZ3RoID0ga2V5bGVuICogODsKLSsJ ZGN0eC0+YmxvY2tsZW5ndGggPSAxNjsKLSsJZGN0eC0+c2VlZGxlbiA9IGtleWxlbiArIDE2Owot KwotKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCi0rCQl7Ci0rCQkv KiBkZiBpbml0aWFsaXNhdGlvbiAqLwotKwkJc3RhdGljIHVuc2lnbmVkIGNoYXIgZGZfa2V5WzMy XSA9Ci0rCQkJewotKwkJCTB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywK LSsJCQkweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsCi0rCQkJMHgxMCww eDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAotKwkJCTB4MTgsMHgxOSwweDFhLDB4 MWIsMHgxYywweDFkLDB4MWUsMHgxZiAKLSsJCQl9OwotKwkJLyogU2V0IGtleSBzY2hlZHVsZSBm b3IgZGZfa2V5ICovCi0rCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGRmX2tleSwgZGN0eC0+c3RyZW5n dGgsICZjY3R4LT5kZl9rcyk7Ci0rCi0rCQlkY3R4LT5taW5fZW50cm9weSA9IGNjdHgtPmtleWxl bjsKLSsJCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwkJZGN0eC0+bWlu X25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKwkJZGN0eC0+bWF4X25vbmNlID0gRFJC R19NQVhfTEVOR1RIOwotKwkJZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCQlk Y3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJ ZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOwotKwkJZGN0eC0+bWF4X2VudHJvcHkg PSBkY3R4LT5zZWVkbGVuOwotKwkJLyogTm9uY2Ugbm90IHVzZWQgKi8KLSsJCWRjdHgtPm1pbl9u b25jZSA9IDA7Ci0rCQlkY3R4LT5tYXhfbm9uY2UgPSAwOwotKwkJZGN0eC0+bWF4X3BlcnMgPSBk Y3R4LT5zZWVkbGVuOwotKwkJZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOwotKwkJfQot KwotKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OwotKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwg PSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9maXBzX2RyYmdfaGFzaC5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2hhc2guYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDAyNzY5MzQzICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwkyMDEyLTA0LTI2IDE4 OjAwOjUxLjQwMjc2OTM0MyArMDIwMAotQEAgLTAsMCArMSwzNzggQEAKLSsvKiBmaXBzL3JhbmQv Zmlwc19kcmJnX2hhc2guYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAo c3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0 aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgot KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K LSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgot KyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJ UFNBUEkKLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5o IgotKwotKy8qIFRoaXMgaXMgSGFzaF9kZiBmcm9tIFNQIDgwMC05MCAxMC40LjEgKi8KLSsKLStz dGF0aWMgaW50IGhhc2hfZGYoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQkJY29uc3QgdW5z aWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmluMywgc2l6ZV90IGluM2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjQsIHNpemVf dCBpbjRsZW4pCi0rCXsKLSsJRVZQX01EX0NUWCAqbWN0eCA9ICZkY3R4LT5kLmhhc2gubWN0eDsK LSsJdW5zaWduZWQgY2hhciAqdnRtcCA9IGRjdHgtPmQuaGFzaC52dG1wOwotKwl1bnNpZ25lZCBj aGFyIHRtcFs2XTsKLSsJLyogU3RhbmRhcmQgb25seSBldmVyIG5lZWRzIHNlZWRsZW4gYnl0ZXMg d2hpY2ggaXMgYWx3YXlzIGxlc3MgdGhhbgotKwkgKiBtYXhpbXVtIHBlcm1pdHRlZCBzbyBubyBu ZWVkIHRvIGNoZWNrIGxlbmd0aC4KLSsJICovCi0rCXNpemVfdCBvdXRsZW4gPSBkY3R4LT5zZWVk bGVuOwotKwl0bXBbMF0gPSAxOwotKwl0bXBbMV0gPSAoKG91dGxlbiAqIDgpID4+IDI0KSAmIDB4 ZmY7Ci0rCXRtcFsyXSA9ICgob3V0bGVuICogOCkgPj4gMTYpICYgMHhmZjsKLSsJdG1wWzNdID0g KChvdXRsZW4gKiA4KSA+PiA4KSAmIDB4ZmY7Ci0rCXRtcFs0XSA9IChvdXRsZW4gKiA4KSAmIDB4 ZmY7Ci0rCWlmICghaW4xKQotKwkJewotKwkJdG1wWzVdID0gKHVuc2lnbmVkIGNoYXIpaW4xbGVu OwotKwkJaW4xID0gdG1wICsgNTsKLSsJCWluMWxlbiA9IDE7Ci0rCQl9Ci0rCWZvciAoOzspCi0r CQl7Ci0rCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBkY3R4LT5kLmhhc2gubWQpKQotKwkJ CXJldHVybiAwOwotKwkJaWYgKCFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCB0bXAsIDUpKQotKwkJ CXJldHVybiAwOwotKwkJaWYgKGluMSAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4xLCBp bjFsZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKGluMiAmJiAhRklQU19kaWdlc3R1cGRhdGUo bWN0eCwgaW4yLCBpbjJsZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKGluMyAmJiAhRklQU19k aWdlc3R1cGRhdGUobWN0eCwgaW4zLCBpbjNsZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKGlu NCAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW40LCBpbjRsZW4pKQotKwkJCXJldHVybiAw OwotKwkJaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJCXsKLSsJCQlpZiAoIUZJ UFNfZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCi0rCQkJCXJldHVybiAwOwotKwkJCW1l bWNweShvdXQsIHZ0bXAsIG91dGxlbik7Ci0rCQkJT1BFTlNTTF9jbGVhbnNlKHZ0bXAsIGRjdHgt PmJsb2NrbGVuZ3RoKTsKLSsJCQlyZXR1cm4gMTsKLSsJCQl9Ci0rCQllbHNlIGlmKCFGSVBTX2Rp Z2VzdGZpbmFsKG1jdHgsIG91dCwgTlVMTCkpCi0rCQkJcmV0dXJuIDA7Ci0rCi0rCQlvdXRsZW4g LT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQlpZiAob3V0bGVuID09IDApCi0rCQkJcmV0dXJuIDE7 Ci0rCQl0bXBbMF0rKzsKLSsJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCX0KLSsJfQot KwotKwotKy8qIEFkZCBhbiB1bnNpZ25lZCBidWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwgc3Rvcmlu ZyB0aGUgcmVzdWx0IGluIGJ1Zi4gRm9yCi0rICogdGhpcyBhbGdvcml0aG0gdGhlIGxlbmd0aCBv ZiBpbnB1dCBuZXZlciBleGNlZWRzIHRoZSBzZWVkIGxlbmd0aC4KLSsgKi8KLSsKLStzdGF0aWMg dm9pZCBjdHhfYWRkX2J1ZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqYnVmLAotKwkJ CQl1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQotKwl7Ci0rCXNpemVfdCBpID0gaW5s ZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnE7Ci0rCXVuc2lnbmVkIGNoYXIgYywgKnA7Ci0r CXAgPSBidWYgKyBkY3R4LT5zZWVkbGVuOwotKwlxID0gaW4gKyBpbmxlbjsKLSsKLSsJT1BFTlNT TF9hc3NlcnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKLSsKLSsJLyogU3BlY2lhbCBjYXNlOiB6ZXJv IGxlbmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICovCi0rCWlmIChpKQotKwkJYyA9IDA7Ci0r CWVsc2UgCi0rCQljID0gMTsKLSsKLSsJd2hpbGUgKGkpCi0rCQl7Ci0rCQlpbnQgcjsKLSsJCXAt LTsKLSsJCXEtLTsKLSsJCXIgPSAqcCArICpxICsgYzsKLSsJCS8qIENhcnJ5ICovCi0rCQlpZiAo ciA+IDB4ZmYpCi0rCQkJYyA9IDE7Ci0rCQllbHNlCi0rCQkJYyA9IDA7Ci0rCQkqcCA9IHIgJiAw eGZmOwotKwkJaS0tOwotKwkJfQotKwotKwlpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVuOwotKwot KwkvKiBJZiBub3QgYWRkaW5nIHdob2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2FycmllcyAqLwot KwlpZiAoYyAmJiBpKQotKwkJewotKwkJZG8KLSsJCQl7Ci0rCQkJcC0tOwotKwkJCWMgPSAqcDsK LSsJCQljKys7Ci0rCQkJKnAgPSBjOwotKwkJCWlmKGMpCi0rCQkJCXJldHVybjsKLSsJCQl9IHdo aWxlKGktLSk7Ci0rCQl9Ci0rCX0KLSsKLSsvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2ggdG8gViAq LwotKwkKLStzdGF0aWMgaW50IGN0eF9hZGRfbWQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaWYg KCFGSVBTX2RpZ2VzdGZpbmFsKCZkY3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ZC5oYXNoLnZ0bXAs IE5VTEwpKQotKwkJCXJldHVybiAwOwotKwljdHhfYWRkX2J1ZihkY3R4LCBkY3R4LT5kLmhhc2gu ViwgZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJcmV0dXJuIDE7Ci0r CX0KLSsKLStzdGF0aWMgaW50IGhhc2hfZ2VuKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsIHNpemVfdCBvdXRsZW4pCi0rCXsKLSsJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4 LT5kLmhhc2g7Ci0rCWlmIChvdXRsZW4gPT0gMCkKLSsJCXJldHVybiAxOwotKwltZW1jcHkoaGN0 eC0+dnRtcCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWZvcig7OykKLSsJCXsKLSsJCUZJ UFNfZGlnZXN0aW5pdCgmaGN0eC0+bWN0eCwgaGN0eC0+bWQpOwotKwkJRklQU19kaWdlc3R1cGRh dGUoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgtPnNlZWRsZW4pOwotKwkJaWYgKCEoZGN0 eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKLSsJCQl7Ci0r CQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgZGN0eC0+bGIsIE5VTEwpOwotKwkJCWRj dHgtPmxiX3ZhbGlkID0gMTsKLSsJCQl9Ci0rCQllbHNlIGlmIChvdXRsZW4gPCBkY3R4LT5ibG9j a2xlbmd0aCkKLSsJCQl7Ci0rCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgaGN0eC0+ dnRtcCwgTlVMTCk7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBoY3R4LT52 dG1wKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5KG91dCwgaGN0eC0+dnRtcCwgb3V0bGVu KTsKLSsJCQlyZXR1cm4gMTsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJewotKwkJCUZJUFNfZGlnZXN0 ZmluYWwoJmhjdHgtPm1jdHgsIG91dCwgTlVMTCk7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfY3Bybmdf dGVzdChkY3R4LCBvdXQpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlvdXRsZW4gLT0gZGN0eC0+Ymxv Y2tsZW5ndGg7Ci0rCQkJaWYgKG91dGxlbiA9PSAwKQotKwkJCQlyZXR1cm4gMTsKLSsJCQlvdXQg Kz0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQkJfQotKwkJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ dnRtcCwgTlVMTCwgMCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaGFzaF9pbnN0 YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBz aXplX3QgZW50X2xlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBu b25jZV9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xl bikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJaWYgKCFo YXNoX2RmKGRjdHgsIGhjdHgtPlYsIAotKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xl biwgcHN0ciwgcHN0cl9sZW4sCi0rCQkJTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFo YXNoX2RmKGRjdHgsIGhjdHgtPkMsIAotKwkJCU5VTEwsIDAsIGhjdHgtPlYsIGRjdHgtPnNlZWRs ZW4sCi0rCQkJTlVMTCwgMCwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsjaWZkZWYgSEFT SF9EUkJHX1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGluc3RhbnRpYXRlOlxu Iik7Ci0rCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWhleHBy aW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rI2VuZGlmCi0rCXJldHVybiAx OwotKwl9Ci0rCi0rCQotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3Jlc2VlZChEUkJHX0NUWCAqZGN0 eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKLSsJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0rCURSQkdf SEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwkvKiBWIGFib3V0IHRvIGJlIHVwZGF0 ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KLSsJaWYgKCFoYXNoX2RmKGRjdHgsIGhj dHgtPkMsCi0rCQkJTlVMTCwgMSwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKLSsJCQllbnQsIGVu dF9sZW4sIGFkaW4sIGFkaW5fbGVuKSkKLSsJCXJldHVybiAwOwotKwltZW1jcHkoaGN0eC0+Viwg aGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLCBO VUxMLCAwLAotKwkJCWhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sIE5VTEwsIDAsIE5VTEwsIDApKQot KwkJcmV0dXJuIDA7Ci0rI2lmZGVmIEhBU0hfRFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwg IlYrQyBhZnRlciByZXNlZWQ6XG4iKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4 LT5zZWVkbGVuKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsK LSsjZW5kaWYKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaGFzaF9nZW5l cmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0 bGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0r CXsKLSsJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCUVWUF9NRF9DVFgg Km1jdHggPSAmaGN0eC0+bWN0eDsKLSsJdW5zaWduZWQgY2hhciB0bXBbNF07Ci0rCWlmIChhZGlu ICYmIGFkaW5fbGVuKQotKwkJewotKwkJdG1wWzBdID0gMjsKLSsJCWlmICghRklQU19kaWdlc3Rp bml0KG1jdHgsIGhjdHgtPm1kKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghRVZQX0RpZ2VzdFVw ZGF0ZShtY3R4LCB0bXAsIDEpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFFVlBfRGlnZXN0VXBk YXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYg KCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGFkaW4sIGFkaW5fbGVuKSkKLSsJCQlyZXR1cm4gMDsK LSsJCWlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsJCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFo YXNoX2dlbihkY3R4LCBvdXQsIG91dGxlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJdG1wWzBdID0g MzsKLSsJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQotKwkJcmV0dXJuIDA7 Ci0rCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQotKwkJcmV0dXJuIDA7Ci0r CWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkKLSsJ CXJldHVybiAwOwotKwotKwlpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCi0rCQlyZXR1cm4gMDsKLSsK LSsJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0r Ci0rCXRtcFswXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZmOwotKwl0bXBb MV0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYgMHhmZjsKLSsJdG1wWzJdID0gKGRj dHgtPnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKLSsJdG1wWzNdID0gZGN0eC0+cmVzZWVk X2NvdW50ZXIgJiAweGZmOwotKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCB0bXAsIDQpOwot KyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKLSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgZ2Vu ZXJhdGU6XG4iKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsK LSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaGFzaF91bmluc3RhbnRpYXRlKERS QkdfQ1RYICpkY3R4KQotKwl7Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmZGN0eC0+ZC5oYXNoLm1j dHgpOwotKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaGFzaCwgc2l6ZW9mKERSQkdfSEFTSF9D VFgpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJH X0NUWCAqZGN0eCkKLSsJewotKwljb25zdCBFVlBfTUQgKm1kOwotKwlEUkJHX0hBU0hfQ1RYICpo Y3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJbWQgPSBGSVBTX2dldF9kaWdlc3RieW5pZChkY3R4LT50 eXBlKTsKLSsJaWYgKCFtZCkKLSsJCXJldHVybiAtMjsKLSsJc3dpdGNoIChkY3R4LT50eXBlKQot KwkJewotKwkJY2FzZSBOSURfc2hhMToKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTI4OwotKwkJYnJl YWs7Ci0rCi0rCQljYXNlIE5JRF9zaGEyMjQ6Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsKLSsJ CWJyZWFrOwotKwotKwkJZGVmYXVsdDoKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMjU2OwotKwkJYnJl YWs7Ci0rCQl9Ci0rCi0rCWRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3RhbnRpYXRl OwotKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVkOwotKwlkY3R4LT5nZW5lcmF0ZSA9 IGRyYmdfaGFzaF9nZW5lcmF0ZTsKLSsJZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF91 bmluc3RhbnRpYXRlOwotKwotKwlkY3R4LT5kLmhhc2gubWQgPSBtZDsKLSsJRVZQX01EX0NUWF9p bml0KCZoY3R4LT5tY3R4KTsKLSsKLSsJLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1AgODAwLTkw IDEwLjEgdGFibGUgMiAqLwotKwotKwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3NpemUo bWQpOwotKwlpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKLSsJCWRjdHgtPnNlZWRsZW4gPSAx MTE7Ci0rCWVsc2UKLSsJCWRjdHgtPnNlZWRsZW4gPSA1NTsKLSsKLSsKLSsJZGN0eC0+bWluX2Vu dHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7Ci0rCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19N QVhfTEVOR1RIOwotKwotKwlkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7 Ci0rCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsJZGN0eC0+bWF4X3Bl cnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCWRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RI OwotKwotKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OwotKwlkY3R4LT5yZXNlZWRfaW50ZXJ2 YWwgPSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX2htYWMuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDAyNzY5MzQzICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjQwMjc2OTM0MyArMDIwMAotQEAgLTAsMCArMSwyODEgQEAKLSsvKiBmaXBzL3Jh bmQvZmlwc19kcmJnX2htYWMuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICov Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGxp Yi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgi Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAq aW4zLCBzaXplX3QgaW4zbGVuCi0rCQkJKQotKwl7Ci0rCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGMw ID0gMCwgYzEgPSAxOwotKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKLSsJ SE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKLSsKLSsJaWYgKCFITUFDX0luaXRfZXgoaGN0 eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJldHVy biAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3Ro KSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMCwgMSkpCi0rCQly ZXR1cm4gMDsKLSsJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4p KQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwg aW4ybGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4 LCBpbjMsIGluM2xlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0ZpbmFsKGhjdHgs IGhtYWMtPkssIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhj dHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1 cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0 aCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5V TEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghaW4xbGVuICYmICFpbjJsZW4gJiYgIWluM2xl bikKLSsJCXJldHVybiAxOwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBk Y3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICgh SE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0dXJu IDA7Ci0rCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMxLCAxKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCi0rCQlyZXR1cm4g MDsKLSsJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQotKwkJ cmV0dXJuIDA7Ci0rCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVu KSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVM TCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+Sywg ZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlpZiAo IUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCXJldHVy biAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rCQlyZXR1 cm4gMDsKLSsKLSsJcmV0dXJuIDE7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaG1hY19p bnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50 LCBzaXplX3QgZW50X2xlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVf dCBub25jZV9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3Ry X2xlbikKLSsJewotKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKLSsJbWVt c2V0KGhtYWMtPkssIDAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJbWVtc2V0KGhtYWMtPlYsIDEs IGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCi0rCQkJ ZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbikpCi0rCQlyZXR1 cm4gMDsKLSsKLSsjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAiSytW IGFmdGVyIGluc3RhbnRpYXRlOlxuIik7Ci0rCWhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1h Yy0+YmxvY2tsZW5ndGgpOwotKwloZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2Nr bGVuZ3RoKTsKLSsjZW5kaWYKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdf aG1hY19yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVu dCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVf dCBhZGluX2xlbikKLSsJewotKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKLSsJCQllbnQs IGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwotKyNp ZmRlZiBITUFDX0RSQkdfVFJBQ0UKLSsJewotKwkJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4 LT5kLmhtYWM7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciByZXNlZWQ6XG4iKTsKLSsJ CWhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOwotKwkJaGV4cHJp bnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rCX0KLSsjZW5kaWYKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaG1hY19nZW5lcmF0ZShEUkJHX0NU WCAqZGN0eCwKLSsJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJRFJCR19I TUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCUhNQUNfQ1RYICpoY3R4ID0gJmhtYWMt PmhjdHg7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKlZ0bXAgPSBobWFjLT5WOwotKwlpZiAoYWRp bl9sZW4gJiYgIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sCi0rCQkJCQkJ TlVMTCwgMCwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsJZm9yICg7OykKLSsJCXsKLSsJCWlm ICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLAotKwkJCQkJ CQlobWFjLT5tZCwgTlVMTCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUhNQUNfVXBkYXRlKGhj dHgsIFZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCi0rCQkJewot KwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBkY3R4LT5sYiwgTlVMTCkpCi0rCQkJCXJldHVybiAw OwotKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKLSsJCQlWdG1wID0gZGN0eC0+bGI7Ci0rCQkJY29u dGludWU7Ci0rCQkJfQotKwkJZWxzZSBpZiAob3V0bGVuID4gZGN0eC0+YmxvY2tsZW5ndGgpCi0r CQkJewotKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBvdXQsIE5VTEwpKQotKwkJCQlyZXR1cm4g MDsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCi0rCQkJCXJldHVy biAwOwotKwkJCVZ0bXAgPSBvdXQ7Ci0rCQkJfQotKwkJZWxzZQotKwkJCXsKLSsJCQlpZiAoIUhN QUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rCQkJCXJldHVybiAwOwotKwkJCWlmICgh Zmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaG1hYy0+VikpCi0rCQkJCXJldHVybiAwOwotKwkJ CW1lbWNweShvdXQsIGhtYWMtPlYsIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwkJb3V0 ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKwkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOwot KwkJfQotKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEws IDAsIE5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3Rh dGljIGludCBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlI TUFDX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhtYWMuaGN0eCk7Ci0rCU9QRU5TU0xfY2xlYW5zZSgm ZGN0eC0+ZC5obWFjLCBzaXplb2YoRFJCR19ITUFDX0NUWCkpOwotKwlyZXR1cm4gMTsKLSsJfQot KwotK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWNvbnN0 IEVWUF9NRCAqbWQgPSBOVUxMOwotKwlEUkJHX0hNQUNfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaG1h YzsKLSsJZGN0eC0+c3RyZW5ndGggPSAyNTY7Ci0rCXN3aXRjaCAoZGN0eC0+dHlwZSkKLSsJCXsK LSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMToKLSsJCW1kID0gRVZQX3NoYTEoKTsKLSsJCWRjdHgt PnN0cmVuZ3RoID0gMTI4OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTIy NDoKLSsJCW1kID0gRVZQX3NoYTIyNCgpOwotKwkJZGN0eC0+c3RyZW5ndGggPSAxOTI7Ci0rCQli cmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMjU2OgotKwkJbWQgPSBFVlBfc2hhMjU2 KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMzg0OgotKwkJbWQgPSBF VlBfc2hhMzg0KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBNTEyOgot KwkJbWQgPSBFVlBfc2hhNTEyKCk7Ci0rCQlicmVhazsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlkY3R4 LT5zdHJlbmd0aCA9IDA7Ci0rCQlyZXR1cm4gLTI7Ci0rCQl9Ci0rICAgICAgICBkY3R4LT5pbnN0 YW50aWF0ZSA9IGRyYmdfaG1hY19pbnN0YW50aWF0ZTsKLSsgICAgICAgIGRjdHgtPnJlc2VlZCA9 IGRyYmdfaG1hY19yZXNlZWQ7Ci0rICAgICAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19n ZW5lcmF0ZTsKLSsgICAgICAgIGRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2htYWNfdW5pbnN0 YW50aWF0ZTsKLSsJSE1BQ19DVFhfaW5pdCgmaGN0eC0+aGN0eCk7Ci0rCWhjdHgtPm1kID0gbWQ7 Ci0rCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rCWRjdHgtPnNlZWRs ZW4gPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsKLSsgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0g ZGN0eC0+c3RyZW5ndGggLyA4OwotKyAgICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01B WF9MRU5HVEg7Ci0rCi0rICAgICAgICBkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9w eSAvIDI7Ci0rICAgICAgICBkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0r ICAgICAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKLSsgICAgICAgIGRjdHgt Pm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAgZGN0eC0+bWF4X3JlcXVl c3QgPSAxPDwxNjsKLSsgICAgICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0OwotKwot KwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xp Yi5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMJ MjAxMi0wNC0yNiAxODowMDo1MS40MDI3NjkzNDMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDI3NjkzNDMg KzAyMDAKLUBAIC0wLDAgKzEsNTc4IEBACi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVu c29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsg Ki8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0r ICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0 cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgot KyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0r ICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNf bG9jbC5oIgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyogU3VwcG9ydCBmcmFt ZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICovCi0rCi0raW50IEZJUFNfZHJiZ19pbml0KERSQkdf Q1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQotKwl7Ci0rCWludCBydjsK LSsJbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOwotKwlkY3R4LT5zdGF0dXMgPSBE UkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKwlkY3R4LT54ZmxhZ3MgPSBmbGFnczsKLSsJZGN0 eC0+dHlwZSA9IHR5cGU7Ci0rCi0rCWRjdHgtPmlmbGFncyA9IDA7Ci0rCWRjdHgtPmVudHJvcHlf YmxvY2tsZW4gPSAwOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKLSsJZGN0eC0+aGVh bHRoX2NoZWNrX2ludGVydmFsID0gRFJCR19IRUFMVEhfSU5URVJWQUw7Ci0rCi0rCXJ2ID0gZmlw c19kcmJnX2hhc2hfaW5pdChkY3R4KTsKLSsKLSsJaWYgKHJ2ID09IC0yKQotKwkJcnYgPSBmaXBz X2RyYmdfY3RyX2luaXQoZGN0eCk7Ci0rCWlmIChydiA9PSAtMikKLSsJCXJ2ID0gZmlwc19kcmJn X2htYWNfaW5pdChkY3R4KTsKLSsKLSsJaWYgKHJ2IDw9IDApCi0rCQl7Ci0rCQlpZiAocnYgPT0g LTIpCi0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9VTlNVUFBPUlRF RF9EUkJHX1RZUEUpOwotKwkJZWxzZQotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklU LCBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcpOwotKwkJfQotKwotKwkvKiBJZiBub3Qg aW4gdGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCi0r Ci0rCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkKLSsJCXsKLSsJCWlmICgh RklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsK LSsJCQl9Ci0rCQl9Ci0rCi0rCXJldHVybiBydjsKLSsJfQotKwotK0RSQkdfQ1RYICpGSVBTX2Ry YmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rCXsKLSsJRFJCR19DVFggKmRj dHg7Ci0rCWRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRFJCR19DVFgpKTsKLSsJaWYgKCFk Y3R4KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX05FVywgRVJSX1JfTUFMTE9D X0ZBSUxVUkUpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCi0rCWlmICh0eXBlID09IDApCi0r CQl7Ci0rCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCQlkY3R4LT50eXBl ID0gMDsKLSsJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCQly ZXR1cm4gZGN0eDsKLSsJCX0KLSsKLSsJaWYgKEZJUFNfZHJiZ19pbml0KGRjdHgsIHR5cGUsIGZs YWdzKSA8PSAwKQotKwkJewotKwkJT1BFTlNTTF9mcmVlKGRjdHgpOwotKwkJcmV0dXJuIE5VTEw7 Ci0rCQl9Ci0rCQkKLSsJcmV0dXJuIGRjdHg7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19mcmVl KERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmIChkY3R4LT51bmluc3RhbnRpYXRlKQotKwkJZGN0 eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJLyogRG9uJ3QgZnJlZSB1cCBkZWZhdWx0IERSQkcg Ki8KLSsJaWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpCi0rCQl7Ci0rCQltZW1z ZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCQlkY3R4LT50eXBlID0gMDsKLSsJCWRj dHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsJCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsJCU9Q RU5TU0xfZnJlZShkY3R4KTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyBzaXplX3QgZmlwc19nZXRf ZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJdW5zaWduZWQg Y2hhciAqdG91dCwgKnA7Ci0rCXNpemVfdCBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4sIHJ2 OwotKwlpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQotKwkJcmV0dXJuIDA7Ci0rCWlmIChkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCi0rCQlyZXR1cm4gZGN0eC0+Z2V0X2VudHJv cHkoZGN0eCwgcG91dCwgZW50cm9weSwgbWluX2xlbiwgbWF4X2xlbik7Ci0rCXJ2ID0gZGN0eC0+ Z2V0X2VudHJvcHkoZGN0eCwgJnRvdXQsIGVudHJvcHkgKyBibCwKLSsJCQkJbWluX2xlbiArIGJs LCBtYXhfbGVuICsgYmwpOwotKwlpZiAodG91dCA9PSBOVUxMKQotKwkJcmV0dXJuIDA7Ci0rCSpw b3V0ID0gdG91dCArIGJsOwotKwlpZiAocnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBibCkp Ci0rCQlyZXR1cm4gMDsKLSsJLyogQ29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNvbnRp bnVvdXMgUFJORyB0ZXN0ICovCi0rCWZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBibDsg cCArPSBibCkKLSsJCXsKLSsJCWlmICghbWVtY21wKHAsIHAgKyBibCwgYmwpKQotKwkJCXsKLSsJ CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VSQ0Vf U1RVQ0spOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsJcnYgLT0gYmw7Ci0rCWlmIChy diA+IG1heF9sZW4pCi0rCQlyZXR1cm4gbWF4X2xlbjsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0r c3RhdGljIHZvaWQgZmlwc19jbGVhbnVwX2VudHJvcHkoRFJCR19DVFggKmRjdHgsCi0rCQkJCQl1 bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKQotKwl7Ci0rCXNpemVfdCBibDsKLSsJaWYg KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKwkJYmwgPSAwOwotKwllbHNlCi0rCQli bCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW47Ci0rCS8qIENhbGwgY2xlYW51cCB3aXRoIG9yaWdp bmFsIGFyZ3VtZW50cyAqLwotKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkoZGN0eCwgb3V0IC0gYmws IG9sZW4gKyBibCk7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdf Q1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xl bikKLSsJewotKwlzaXplX3QgZW50bGVuID0gMCwgbm9uY2VsZW4gPSAwOwotKwl1bnNpZ25lZCBj aGFyICpub25jZSA9IE5VTEwsICplbnRyb3B5ID0gTlVMTDsKLSsKLSsjaWYgMAotKwkvKiBQdXQg aGVyZSBzbyBlcnJvciBzY3JpcHQgcGlja3MgdGhlbSB1cCAqLwotKwlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfSU5TVEFOVElBVEUsCi0rCQkJCUZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5H X1RPT19MT05HKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBT X1JfSU5fRVJST1JfU1RBVEUpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElB VEUsIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCk7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSk7Ci0rCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJ TkdfTk9OQ0UpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNf Ul9JTlNUQU5USUFURV9FUlJPUik7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5U SUFURSwgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEKTsKLSsjZW5kaWYKLSsKLSsJaW50IHIg PSAwOwotKwotKwlpZiAocGVyc2xlbiA+IGRjdHgtPm1heF9wZXJzKQotKwkJewotKwkJciA9IEZJ UFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmICghZGN0eC0+aW5zdGFudGlhdGUpCi0rCQl7Ci0rCQlyID0gRklQU19SX0RSQkdf Tk9UX0lOSVRJQUxJU0VEOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChkY3R4LT5zdGF0 dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXsKLSsJCWlmIChkY3R4LT5zdGF0 dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsK LSsJCWVsc2UKLSsJCQlyID0gRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEOwotKwkJZ290byBl bmQ7Ci0rCQl9Ci0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwotKwll bnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwK LSsJCQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKLSsKLSsJaWYgKGVu dGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KQot KwkJewotKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rCQlnb3RvIGVu ZDsKLSsJCX0KLSsKLSsJaWYgKGRjdHgtPm1heF9ub25jZSA+IDAgJiYgZGN0eC0+Z2V0X25vbmNl KQotKwkJewotKwkJbm9uY2VsZW4gPSBkY3R4LT5nZXRfbm9uY2UoZGN0eCwgJm5vbmNlLAotKwkJ CQkJZGN0eC0+c3RyZW5ndGggLyAyLAotKwkJCQkJZGN0eC0+bWluX25vbmNlLCBkY3R4LT5tYXhf bm9uY2UpOwotKwotKwkJaWYgKG5vbmNlbGVuIDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNlbGVu ID4gZGN0eC0+bWF4X25vbmNlKQotKwkJCXsKLSsJCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJ TkdfTk9OQ0U7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwotKwkJfQotKwotKwlpZiAoIWRjdHgt Pmluc3RhbnRpYXRlKGRjdHgsIAotKwkJCQllbnRyb3B5LCBlbnRsZW4sCi0rCQkJCW5vbmNlLCBu b25jZWxlbiwKLSsJCQkJcGVycywgcGVyc2xlbikpCi0rCQl7Ci0rCQlyID0gRklQU19SX0VSUk9S X0lOU1RBTlRJQVRJTkdfRFJCRzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwotKwlkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKLSsJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19D VVNUT01fUkVTRUVEKSkKLSsJCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKLSsKLSsJZW5kOgot KwotKwlpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCi0rCQlmaXBzX2NsZWFu dXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOwotKwotKwlpZiAobm9uY2UgJiYgZGN0 eC0+Y2xlYW51cF9ub25jZSkKLSsJCWRjdHgtPmNsZWFudXBfbm9uY2UoZGN0eCwgbm9uY2UsIG5v bmNlbGVuKTsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKLSsJ CXJldHVybiAxOwotKwotKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VS UikpCi0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIHIpOwotKwotKwly ZXR1cm4gMDsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJCR19DVFggKmRj dHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4sIGludCBo Y2hlY2spCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqZW50cm9weSA9IE5VTEw7Ci0rCXNpemVfdCBl bnRsZW4gPSAwOwotKwlpbnQgciA9IDA7Ci0rCi0rI2lmIDAKLSsJRklQU2VycihGSVBTX0ZfRFJC R19SRVNFRUQsIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEKTsKLSsJRklQU2VycihGSVBTX0ZfRFJC R19SRVNFRUQsIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HKTsKLSsjZW5kaWYKLSsJ aWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQotKwkJJiYgZGN0eC0+c3RhdHVz ICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKLSsJCXsKLSsJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJC R19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsJCWVsc2Ug aWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQkJciA9IEZJ UFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghYWRp bikKLSsJCWFkaW5sZW4gPSAwOwotKwllbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4p Ci0rCQl7Ci0rCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCS8q IFBlZm9ybSBoZWFsdGggY2hlY2sgb24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5vdCBhIHBy ZWRpY3Rpb24KLSsJICogcmVzaXN0YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVzdCBtb2RlLgot KwkgKi8KLSsJaWYgKGhjaGVjayAmJiAhKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkK LSsJCXsKLSsJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0rCQkJ ciA9IEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCX0K LSsKLSsJZW50bGVuID0gZmlwc19nZXRfZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3Ry ZW5ndGgsCi0rCQkJCWRjdHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0r CWlmIChlbnRsZW4gPCBkY3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50 cm9weSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOwotKwkJ Z290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghZGN0eC0+cmVzZWVkKGRjdHgsIGVudHJvcHksIGVu dGxlbiwgYWRpbiwgYWRpbmxlbikpCi0rCQlnb3RvIGVuZDsKLSsKLSsJZGN0eC0+c3RhdHVzID0g RFJCR19TVEFUVVNfUkVBRFk7Ci0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JF U0VFRCkpCi0rCQlkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7Ci0rCWVuZDoKLSsKLSsJaWYgKGVu dHJvcHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQotKwkJZmlwc19jbGVhbnVwX2VudHJvcHko ZGN0eCwgZW50cm9weSwgZW50bGVuKTsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NU QVRVU19SRUFEWSkKLSsJCXJldHVybiAxOwotKwotKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAm IERSQkdfRkxBR19OT0VSUikpCi0rCQlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgcik7Ci0r Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRj dHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rCXsK LSsJcmV0dXJuIGRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIDEpOwotKwl9Ci0rCi0r c3RhdGljIGludCBmaXBzX2RyYmdfY2hlY2soRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaWYgKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKwkJcmV0dXJuIDE7Ci0rCWRjdHgtPmhlYWx0 aF9jaGVja19jbnQrKzsKLSsJaWYgKGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPj0gZGN0eC0+aGVh bHRoX2NoZWNrX2ludGVydmFsKQotKwkJewotKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNr KGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJUFNf Ul9TRUxGVEVTVF9GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5z aWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lz dGFuY2UsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0r CXsKLSsJaW50IHIgPSAwOwotKwotKwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsK LSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJaWYgKCFmaXBzX2RyYmdfY2hlY2soZGN0 eCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19S RUFEWQotKwkJJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKLSsJCXsKLSsJ CWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9J Tl9FUlJPUl9TVEFURTsKLSsJCWVsc2UgaWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VO SU5JVElBTElTRUQpCi0rCQkJciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKwkJZ290byBl bmQ7Ci0rCQl9Ci0rCi0rCWlmIChvdXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVzdCkKLSsJCXsKLSsJ CXIgPSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkc7Ci0rCQlyZXR1cm4gMDsKLSsJ CX0KLSsKLSsJaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikKLSsJCXsKLSsJCXIgPSBGSVBT X1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKQotKwkJZGN0eC0+Z2VuZXJhdGUo ZGN0eCwgTlVMTCwgb3V0bGVuLCBOVUxMLCAwKTsKLSsJZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2Nv dW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQotKwkJZGN0eC0+c3RhdHVzID0gRFJCR19T VEFUVVNfUkVTRUVEOwotKwotKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFU0VF RCB8fCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UpCi0rCQl7Ci0rCQkvKiBJZiBwcmVkaWN0aW9uIHJl c2lzdGFuY2UgcmVxdWVzdCBkb24ndCBkbyBoZWFsdGggY2hlY2sgKi8KLSsJCWludCBoY2hlY2sg PSBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UgPyAwIDogMTsKLSsJCQotKwkJaWYgKCFkcmJnX3Jlc2Vl ZChkY3R4LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKQotKwkJCXsKLSsJCQlyID0gRklQU19SX1JF U0VFRF9FUlJPUjsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhZGluID0gTlVMTDsKLSsJCWFk aW5sZW4gPSAwOwotKwkJfQotKwotKwlpZiAoIWRjdHgtPmdlbmVyYXRlKGRjdHgsIG91dCwgb3V0 bGVuLCBhZGluLCBhZGlubGVuKSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfR0VORVJBVEVfRVJST1I7 Ci0rCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQotKwkJewotKwkJ aWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCkKLSsJCQlk Y3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7Ci0rCQllbHNlCi0rCQkJZGN0eC0+cmVz ZWVkX2NvdW50ZXIrKzsKLSsJCX0KLSsKLSsJZW5kOgotKwlpZiAocikKLSsJCXsKLSsJCWlmICgh KGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rCQkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0dFTkVSQVRFLCByKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlyZXR1cm4gMTsK LSsJfQotKwotK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSsJ ewotKwlpbnQgcnY7Ci0rCWlmICghZGN0eC0+dW5pbnN0YW50aWF0ZSkKLSsJCXJ2ID0gMTsKLSsJ ZWxzZQotKwkJcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOwotKwkvKiBBbHRob3VnaCB3 ZSdkIGxpa2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJlY2F1c2Ugd2UgaGF2ZSB0bwotKwkg KiB0ZXN0IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMgdGhlIGRhdGEuCi0rCSAqLwot KwltZW1zZXQoJmRjdHgtPmQsIDAsIHNpemVvZihkY3R4LT5kKSk7Ci0rCWRjdHgtPnN0YXR1cyA9 IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCS8qIElmIG1ldGhvZCBoYXMgcHJvYmxlbXMg dW5pbnN0YW50aWF0aW5nLCByZXR1cm4gZXJyb3IgKi8KLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0r aW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlzaXplX3QgKCpn ZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWlu dCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xl YW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBv bGVuKSwKLSsJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCi0rCXNpemVfdCAoKmdldF9ub25jZSko RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5LCBz aXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xlYW51cF9ub25jZSko RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpCi0rCXsKLSsJ aWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJcmV0dXJu IDA7Ci0rCWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRyb3B5X2Jsb2NrbGVuOwotKwlkY3R4 LT5nZXRfZW50cm9weSA9IGdldF9lbnRyb3B5OwotKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkgPSBj bGVhbnVwX2VudHJvcHk7Ci0rCWRjdHgtPmdldF9ub25jZSA9IGdldF9ub25jZTsKLSsJZGN0eC0+ Y2xlYW51cF9ub25jZSA9IGNsZWFudXBfbm9uY2U7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50 IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAo KmdldF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCi0rCXZvaWQg KCpjbGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90 IG9sZW4pLAotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQg KmJ1ZiwgaW50IG51bSksCi0rCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAotKwkJ CQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSkKLSsJewotKwlpZiAo ZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQlyZXR1cm4gMDsK LSsJZGN0eC0+Z2V0X2FkaW4gPSBnZXRfYWRpbjsKLSsJZGN0eC0+Y2xlYW51cF9hZGluID0gY2xl YW51cF9hZGluOwotKwlkY3R4LT5yYW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7Ci0rCWRjdHgt PnJhbmRfYWRkX2NiID0gcmFuZF9hZGRfY2I7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rdm9pZCAq RklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlyZXR1cm4gZGN0 eC0+YXBwX2RhdGE7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19D VFggKmRjdHgsIHZvaWQgKmFwcF9kYXRhKQotKwl7Ci0rCWRjdHgtPmFwcF9kYXRhID0gYXBwX2Rh dGE7Ci0rCX0KLSsKLStzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAq ZGN0eCkKLSsJewotKwlyZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCX0KLSsKLStpbnQgRklQ U19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlyZXR1cm4gZGN0eC0+ c3RyZW5ndGg7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJC R19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKLSsJewotKwlkY3R4LT5oZWFsdGhfY2hlY2tfaW50 ZXJ2YWwgPSBpbnRlcnZhbDsKLSsJfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50 ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKLSsJewotKwlkY3R4LT5yZXNlZWRf aW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19zdGljayA9IDA7 Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKQotKwl7Ci0rCWRyYmdfc3RpY2sg PSBvbm9mZjsKLSsJfQotKwotKy8qIENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0aW9uICov Ci0raW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICpvdXQpCi0rCXsKLSsJLyogTm8gQ1BSTkcgaW4gdGVzdCBtb2RlICovCi0rCWlmIChk Y3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKLSsJCXJldHVybiAxOwotKwkvKiBDaGVjayBi bG9jayBpcyB2YWxpZDogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotKwlpZiAoZGN0eC0+bGJfdmFs aWQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBG SVBTX1JfSU5URVJOQUxfRVJST1IpOwotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJ cmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChkcmJnX3N0aWNrKQotKwkJbWVtY3B5KGRjdHgtPmxiLCBv dXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2NrOiBm YWlsIGlmIG1hdGNoICovCi0rCWlmICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2Nr bGVuZ3RoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBG SVBTX1JfRFJCR19TVFVDSyk7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlyZXR1 cm4gMDsKLSsJCX0KLSsJLyogU2F2ZSBsYXN0IGJsb2NrIGZvciBuZXh0IGNvbXBhcmlzb24gKi8K LSsJbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJcmV0dXJuIDE7 Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5k LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCi0tLS0g b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzCTIwMTItMDQt MjYgMTg6MDA6NTEuNDAzNzY5MzY1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX3JhbmQuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMzc2OTM2NSArMDIwMAot QEAgLTAsMCArMSwxNzIgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3JhbmQuYyAqLwotKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19y YW5kX2xjbC5oIgotKwotKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAgRFJCR3MgdG8gT3BlblNTTCBS QU5EX01FVEhPRCAqLwotKwotKy8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgZ2xvYmFsIFBSTkcg dXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2JhbAotKyAqIHZhcmlhYmxlIHRv IHN0b3JlIGNvbnRleHQuCi0rICovCi0rCi0rc3RhdGljIERSQkdfQ1RYIG9zc2xfZGN0eDsKLSsK LStEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZv c3NsX2RjdHg7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19ieXRlcyh1bnNpZ25lZCBj aGFyICpvdXQsIGludCBjb3VudCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7 Ci0rCWludCBydiA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKmFkaW4gPSBOVUxMOwotKwlzaXplX3Qg YWRpbmxlbiA9IDA7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWRvIAot KwkJewotKwkJc2l6ZV90IHJjbnQ7Ci0rCQlpZiAoY291bnQgPiAoaW50KWRjdHgtPm1heF9yZXF1 ZXN0KQotKwkJCXJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsKLSsJCWVsc2UKLSsJCQlyY250ID0g Y291bnQ7Ci0rCQlpZiAoZGN0eC0+Z2V0X2FkaW4pCi0rCQkJewotKwkJCWFkaW5sZW4gPSBkY3R4 LT5nZXRfYWRpbihkY3R4LCAmYWRpbik7Ci0rCQkJaWYgKGFkaW5sZW4gJiYgIWFkaW4pCi0rCQkJ CXsKLSsJCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0JZVEVTLCBGSVBTX1JfRVJST1JfUkVU UklFVklOR19BRERJVElPTkFMX0lOUFVUKTsKLSsJCQkJZ290byBlcnI7Ci0rCQkJCX0KLSsJCQl9 Ci0rCQlydiA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBvdXQsIHJjbnQsIDAsIGFkaW4sIGFk aW5sZW4pOwotKwkJaWYgKGFkaW4pCi0rCQkJewotKwkJCWlmIChkY3R4LT5jbGVhbnVwX2FkaW4p Ci0rCQkJCWRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKLSsJCQlhZGlu ID0gTlVMTDsKLSsJCQl9Ci0rCQlpZiAoIXJ2KQotKwkJCWdvdG8gZXJyOwotKwkJb3V0ICs9IHJj bnQ7Ci0rCQljb3VudCAtPSByY250OwotKwkJfQotKwl3aGlsZSAoY291bnQpOwotKwlydiA9IDE7 Ci0rCWVycjoKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4g cnY7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hhciAq b3V0LCBpbnQgY291bnQpCi0rCXsKLSsJaWYgKGZpcHNfZHJiZ19ieXRlcyhvdXQsIGNvdW50KSA8 PSAwKQotKwkJcmV0dXJuIC0xOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlw c19kcmJnX3N0YXR1cyh2b2lkKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsK LSsJaW50IHJ2OwotKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlydiA9IGRj dHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEgOiAwOwotKwlDUllQVE9fcl91bmxv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK3N0YXRpYyB2b2lk IGZpcHNfZHJiZ19jbGVhbnVwKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHggPSAmb3NzbF9k Y3R4OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwot Kwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQg c2VlZGxlbikKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCWlmIChkY3R4 LT5yYW5kX3NlZWRfY2IpCi0rCQlyZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNlZWQs IHNlZWRsZW4pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Fk ZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbiwKLSsJCQkJCWRvdWJsZSBhZGRfZW50cm9w eSkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCWlmIChkY3R4LT5yYW5k X2FkZF9jYikKLSsJCXJldHVybiBkY3R4LT5yYW5kX2FkZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVu LCBhZGRfZW50cm9weSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGNvbnN0IFJBTkRf TUVUSE9EIHJhbmRfZHJiZ19tZXRoID0KLSsJewotKwlmaXBzX2RyYmdfc2VlZCwKLSsJZmlwc19k cmJnX2J5dGVzLAotKwlmaXBzX2RyYmdfY2xlYW51cCwKLSsJZmlwc19kcmJnX2FkZCwKLSsJZmlw c19kcmJnX3BzZXVkbywKLSsJZmlwc19kcmJnX3N0YXR1cwotKwl9OwotKwotK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZyYW5kX2RyYmdf bWV0aDsKLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdf c2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxm dGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDM3NjkzNjUgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYwkyMDEyLTA0LTI2IDE4 OjAwOjUxLjQwMzc2OTM2NSArMDIwMAotQEAgLTAsMCArMSw4NjIgQEAKLSsvKiBmaXBzL3JhbmQv Zmlwc19kcmJnX3NlbGZ0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z b24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAq LwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFBy 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19y YW5kX2xjbC5oIgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaW5jbHVkZSAiZmlwc19k cmJnX3NlbGZ0ZXN0LmgiCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwlpbnQgcG9zdDsKLSsJaW50 IG5pZDsKLSsJdW5zaWduZWQgaW50IGZsYWdzOwotKwotKwkvKiBLQVQgZGF0YSBmb3Igbm8gUFIg Ki8KLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50OwotKwlzaXplX3QgZW50bGVuOwotKwljb25z dCB1bnNpZ25lZCBjaGFyICpub25jZTsKLSsJc2l6ZV90IG5vbmNlbGVuOwotKwljb25zdCB1bnNp Z25lZCBjaGFyICpwZXJzOwotKwlzaXplX3QgcGVyc2xlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hh ciAqYWRpbjsKLSsJc2l6ZV90IGFkaW5sZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHJl c2VlZDsKLSsJc2l6ZV90IGVudHJlc2VlZGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRp bnJlc2VlZDsKLSsJc2l6ZV90IGFkaW5yZXNlZWRsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmFkaW4yOwotKwlzaXplX3QgYWRpbjJsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDsK LSsJc2l6ZV90IGthdGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0MjsKLSsJc2l6ZV90 IGthdDJsZW47Ci0rCi0rCS8qIEtBVCBkYXRhIGZvciBQUiAqLwotKwljb25zdCB1bnNpZ25lZCBj aGFyICplbnRfcHI7Ci0rCXNpemVfdCBlbnRsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIg Km5vbmNlX3ByOwotKwlzaXplX3Qgbm9uY2VsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIg KnBlcnNfcHI7Ci0rCXNpemVfdCBwZXJzbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICph ZGluX3ByOwotKwlzaXplX3QgYWRpbmxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50 cHJfcHI7Ci0rCXNpemVfdCBlbnRwcmxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRp bmdfcHI7Ci0rCXNpemVfdCBhZGluZ2xlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50 Z19wcjsKLSsJc2l6ZV90IGVudGdsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdF9w cjsKLSsJc2l6ZV90IGthdGxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0Ml9wcjsK LSsJc2l6ZV90IGthdDJsZW5fcHI7Ci0rCi0rCX0gRFJCR19TRUxGVEVTVF9EQVRBOwotKwotKyNk ZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcsIHByLCBwKSB7cCwgbmlkLCBmbGFn IHwgRFJCR19GTEFHX1RFU1QsIFwKLSsJcHIjI19lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX2Vu dHJvcHlpbnB1dCksIFwKLSsJcHIjI19ub25jZSwgc2l6ZW9mKHByIyNfbm9uY2UpLCBcCi0rCXBy IyNfcGVyc29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wZXJzb25hbGl6YXRpb25zdHJp bmcpLCBcCi0rCXByIyNfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5w dXQpLCBcCi0rCXByIyNfZW50cm9weWlucHV0cmVzZWVkLCBzaXplb2YocHIjI19lbnRyb3B5aW5w dXRyZXNlZWQpLCBcCi0rCXByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIjI19h ZGRpdGlvbmFsaW5wdXRyZXNlZWQpLCBcCi0rCXByIyNfYWRkaXRpb25hbGlucHV0Miwgc2l6ZW9m KHByIyNfYWRkaXRpb25hbGlucHV0MiksIFwKLSsJcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBzaXpl b2YocHIjI19pbnRfcmV0dXJuZWRiaXRzKSwgXAotKwlwciMjX3JldHVybmVkYml0cywgc2l6ZW9m KHByIyNfcmV0dXJuZWRiaXRzKSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHBy IyNfcHJfZW50cm9weWlucHV0KSwgXAotKwlwciMjX3ByX25vbmNlLCBzaXplb2YocHIjI19wcl9u b25jZSksIFwKLSsJcHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3By X3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKLSsJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQsIHNp emVvZihwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCksIFwKLSsJcHIjI19wcl9lbnRyb3B5aW5wdXRw ciwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIpLCBcCi0rCXByIyNfcHJfYWRkaXRpb25h bGlucHV0Miwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0MiksIFwKLSsJcHIjI19wcl9l bnRyb3B5aW5wdXRwcjIsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dHByMiksIFwKLSsJcHIj I19wcl9pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzKSwg XAotKwlwciMjX3ByX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcHJfcmV0dXJuZWRiaXRzKSwg XAotKwl9Ci0rCi0rI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKG5pZCwgcHIsIHApIFwK LSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIERSQkdfRkxBR19DVFJfVVNFX0RGLCBwciwgcCkK LSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZWMoY3VydmUsIG1kLCBwciwgcCkgXAot KwltYWtlX2RyYmdfdGVzdF9kYXRhKChjdXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQotKwot K3N0YXRpYyBEUkJHX1NFTEZURVNUX0RBVEEgZHJiZ190ZXN0W10gPSB7Ci0rCW1ha2VfZHJiZ190 ZXN0X2RhdGFfZGYoTklEX2Flc18xMjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCi0rCW1ha2Vf ZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCksCi0r CW1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9kZiwg MSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNfMTI4X25v X2RmLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIsIDAsIGFlc18x OTJfbm9fZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMjU2X2N0ciwgMCwg YWVzXzI1Nl9ub19kZiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTEsIDAsIHNo YTEsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyMjQsIDAsIHNoYTIyNCwgMCks Ci0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1NiwgMCwgc2hhMjU2LCAxKSwKLSsJbWFr ZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBzaGEzODQsIDApLAotKwltYWtlX2RyYmdf dGVzdF9kYXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUxMiwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2Rh dGEoTklEX2htYWNXaXRoU0hBMSwgMCwgaG1hY19zaGExLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3Rf ZGF0YShOSURfaG1hY1dpdGhTSEEyMjQsIDAsIGhtYWNfc2hhMjI0LCAwKSwKLSsJbWFrZV9kcmJn X3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyNTYsIDAsIGhtYWNfc2hhMjU2LCAxKSwKLSsJbWFr ZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEzODQsIDAsIGhtYWNfc2hhMzg0LCAwKSwK LSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEE1MTIsIDAsIGhtYWNfc2hhNTEy LCAwKSwKLSsJezAsMCwwfQotKwl9OwotKwotK3R5cGVkZWYgc3RydWN0IAotKwl7Ci0rCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJaW50IGVudGNudDsKLSsJ Y29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJaW50IG5v bmNlY250OwotKwl9IFRFU1RfRU5UOwotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERS QkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4p Ci0rCXsKLSsJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKwkq cG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OwotKwl0LT5lbnRjbnQrKzsKLSsJcmV0dXJu IHQtPmVudGxlbjsKLSsJfQotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NUWCAq ZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0r CVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAo dW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOwotKwl0LT5ub25jZWNudCsrOwotKwlyZXR1cm4gdC0+ bm9uY2VsZW47Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zaW5nbGVfa2F0KERSQkdf Q1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAotKwkJCQkJCQkJaW50IHF1aWNrKQot Kwl7Ci0rCVRFU1RfRU5UIHQ7Ci0rCWludCBydiA9IDA7Ci0rCXNpemVfdCBhZGlubGVuOwotKwl1 bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07Ci0rCi0rCS8qIEluaXRpYWwgdGVzdCB3aXRob3V0 IFBSICovCi0rCi0rCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNl IGFuZCBwZXJzb25hbGlzYXRpb24KLSsJICogc3RyaW5nLgotKwkgKi8KLSsKLSsJaWYgKCFGSVBT X2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKwkJcmV0dXJuIDA7Ci0rCWlm ICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0 X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRj dHgsICZ0KTsKLSsKLSsJdC5lbnQgPSB0ZC0+ZW50OwotKwl0LmVudGxlbiA9IHRkLT5lbnRsZW47 Ci0rCXQubm9uY2UgPSB0ZC0+bm9uY2U7Ci0rCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47Ci0r CXQuZW50Y250ID0gMDsKLSsJdC5ub25jZWNudCA9IDA7Ci0rCi0rCWlmICghRklQU19kcmJnX2lu c3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCi0rCQlnb3RvIGVycjsKLSsK LSsJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVl cwotKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5s ZW4KLSsJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KLSsJICov Ci0rCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZk Y3R4LT5pZmxhZ3MpKQotKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuIC8gMjsKLSsJZWxzZQotKwkJ YWRpbmxlbiA9IHRkLT5hZGlubGVuOwotKwotKwkvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFuZCB2 ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLwotKwlpZiAoIUZJUFNfZHJiZ19n ZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgYWRp bmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0LCB0 ZC0+a2F0bGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FU LCBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFKTsKLSsJCWdvdG8gZXJyMjsKLSsJCX0KLSsJLyog SWYgYWJicmV2aWF0ZWQgUE9TVCBlbmQgb2YgdGVzdCAqLwotKwlpZiAocXVpY2spCi0rCQl7Ci0r CQlydiA9IDE7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJLyogUmVzZWVkIERSQkcgd2l0aCB0ZXN0 IGVudHJvcHkgYW5kIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJdC5lbnQgPSB0ZC0+ZW50cmVzZWVk OwotKwl0LmVudGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47Ci0rCi0rCWlmICghRklQU19kcmJnX3Jl c2VlZChkY3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4pKQotKwkJZ290byBl cnI7Ci0rCi0rCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hl cyBleHBlY3RlZCBkYXRhICovCi0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRv dXQsIHRkLT5rYXQybGVuLCAwLAotKwkJCQl0ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCi0rCQln b3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJsZW4p KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9O T1BSX1RFU1QyX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwotKwlGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsKLSsJLyogTm93IHRlc3Qgd2l0aCBQUiAqLwotKwotKwkv KiBJbnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxp c2F0aW9uCi0rCSAqIHN0cmluZy4KLSsJICovCi0rCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwg dGQtPm5pZCwgdGQtPmZsYWdzKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUZJUFNfZHJiZ19zZXRf Y2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rCQly ZXR1cm4gMDsKLSsKLSsJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Ci0rCi0rCXQu ZW50ID0gdGQtPmVudF9wcjsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuX3ByOwotKwl0Lm5vbmNl ID0gdGQtPm5vbmNlX3ByOwotKwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuX3ByOwotKwl0LmVu dGNudCA9IDA7Ci0rCXQubm9uY2VjbnQgPSAwOwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50 aWF0ZShkY3R4LCB0ZC0+cGVyc19wciwgdGQtPnBlcnNsZW5fcHIpKQotKwkJZ290byBlcnI7Ci0r Ci0rCS8qIE5vdyBnZW5lcmF0ZSB3aXRoIFBSOiB3ZSBuZWVkIHRvIHN1cHBseSBlbnRyb3B5IGFz IHRoaXMgd2lsbAotKwkgKiBwZXJmb3JtIGEgcmVzZWVkIG9wZXJhdGlvbi4gQ2hlY2sgb3V0cHV0 IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuCi0rCSAqLwotKwotKwl0LmVudCA9IHRkLT5lbnRwcl9w cjsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50cHJsZW5fcHI7Ci0rCi0rCS8qIE5vdGUgZm9yIENUUiB3 aXRob3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKLSsJICogaWdub3JlIGJ5dGVz IGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCi0rCSAqIHRvIGhhbGYgdG8g ZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCi0rCSAqLwotKwlpZiAoIWZpcHNfcG9zdF9j b3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKLSsJCWFk aW5sZW4gPSB0ZC0+YWRpbmxlbl9wciAvIDI7Ci0rCWVsc2UKLSsJCWFkaW5sZW4gPSB0ZC0+YWRp bmxlbl9wcjsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dGxlbl9wciwgMSwKLSsJCQkJdGQtPmFkaW5fcHIsIGFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdF9wciwgdGQtPmthdGxlbl9wcikpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1Qx X0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwotKwkvKiBOb3cgZ2VuZXJhdGUgYWdh aW4gd2l0aCBQUjogc3VwcGx5IG5ldyBlbnRyb3B5IGFnYWluLgotKwkgKiBDaGVjayBvdXRwdXQg bWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KLSsJICovCi0rCi0rCXQuZW50ID0gdGQtPmVudGdfcHI7 Ci0rCXQuZW50bGVuID0gdGQtPmVudGdsZW5fcHI7Ci0rCi0rCWlmICghRklQU19kcmJnX2dlbmVy YXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuX3ByLCAxLAotKwkJCQl0ZC0+YWRpbmdfcHIs IHRkLT5hZGluZ2xlbl9wcikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChyYW5kb3V0 LCB0ZC0+a2F0Ml9wciwgdGQtPmthdDJsZW5fcHIpKQotKwkJewotKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFKTsKLSsJCWdvdG8g ZXJyMjsKLSsJCX0KLSsJLyogQWxsIE9LLCB0ZXN0IGNvbXBsZXRlICovCi0rCXJ2ID0gMTsKLSsK LSsJZXJyOgotKwlpZiAocnYgPT0gMCkKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5H TEVfS0FULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJZXJyMjoKLSsJRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCk7Ci0rCQotKwlyZXR1cm4gcnY7Ci0rCi0rCX0KLSsKLSsvKiBJbml0 aWFsaXNlIGEgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCi0rCi0rc3RhdGljIGludCBk b19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsIFRFU1Rf RU5UICp0KQotKwl7Ci0rCi0rCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQt PmZsYWdzKSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tz KGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rCQlyZXR1cm4gMDsK LSsKLSsJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCB0KTsKLSsKLSsJdC0+ZW50ID0gdGQt PmVudDsKLSsJdC0+ZW50bGVuID0gdGQtPmVudGxlbjsKLSsJdC0+bm9uY2UgPSB0ZC0+bm9uY2U7 Ci0rCXQtPm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOwotKwl0LT5lbnRjbnQgPSAwOwotKwl0LT5u b25jZWNudCA9IDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogSW5pdGlhbGlzZSBhbmQgaW5z dGFudGlhdGUgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCi0rc3RhdGljIGludCBkb19k cmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAot KwkJCQkJCQkJVEVTVF9FTlQgKnQpCi0rCXsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQs IHQpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzLCB0ZC0+cGVyc2xlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLSsvKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGV4dGVuc2l2ZSBlcnJvciBjaGVja2luZyBh cyByZXF1aXJlZCBieSBTUDgwMC05MC4KLSsgKiBJbmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1vZGVz IGFuZCBjaGVjayBhbiBlcnJvciBjb25kaXRpb24gaXMgc2V0LgotKyAqIFRoaXMgZnVuY3Rpb24g YWxvbmcgd2l0aCBmaXBzX2RyYmdfc2luZ2xlX2thdCBwZWZvcm1zIHRoZSBoZWFsdGggY2hlY2tp bmcKLSsgKiBvcGVyYXRpb24uCi0rICovCi0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfZXJyb3Jf Y2hlY2soRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQpCi0rCXsKLSsJdW5z aWduZWQgY2hhciByYW5kb3V0WzEwMjRdOwotKwlURVNUX0VOVCB0OwotKwlzaXplX3QgaTsKLSsJ dW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyX3RtcDsKLSsJdW5zaWduZWQgY2hhciAqcCA9ICh1 bnNpZ25lZCBjaGFyICopZGN0eDsKLSsKLSsJLyogSW5pdGlhbGlzZSBEUkJHICovCi0rCi0rCWlm ICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogRG9u J3QgcmVwb3J0IGluZHVjZWQgZXJyb3JzICovCi0rCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdf Tk9FUlI7Ci0rCi0rCS8qIFBlcnNvbmFsaXNhdGlvbiBzdHJpbmcgdGVzdHMgKi8KLSsKLSsJLyog VGVzdCBkZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBlcnNvbmxpc2F0aW9uIHN0cmluZyAqLwotKwot KwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCBkY3R4LT5tYXhfcGVy cyArIDEpID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJy OwotKwkJfQotKwotKwkvKiBFbnRyb3B5IHNvdXJjZSB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IGVu dHJvcHkgc291cmNlIGZhaWx1cmUgZGV0ZWNpb246IGkuZS4gcmV0dXJucyBubyBkYXRhICovCi0r Ci0rCXQuZW50bGVuID0gMDsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0 ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQln b3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVHJ5IHRvIGdlbmVyYXRlIG91dHB1dCBmcm9tIHVuaW5z dGFudGlhdGVkIERSQkcgKi8KLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewotKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfR0VORVJBVEVfRVJS T1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9 IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkp Ci0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9V TklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIWRvX2Ry YmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWRjdHgtPmlmbGFncyB8 PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCS8qIFRlc3QgaW5zdWZmaWNpZW50IGVudHJvcHkgKi8K LSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7Ci0rCi0rCWlmIChGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VS Uk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAm PSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgp KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf VU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVGVzdCB0 b28gbXVjaCBlbnRyb3B5ICovCi0rCi0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkp Ci0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsK LSsJdC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7Ci0rCi0rCWlmIChGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9S X1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAmPSB+ RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogTm9uY2UgdGVz dHMgKi8KLSsKLSsJLyogVGVzdCB0b28gc21hbGwgbm9uY2UgKi8KLSsKLSsJaWYgKGRjdHgtPm1p bl9ub25jZSkKLSsJCXsKLSsKLSsJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0r CQkJZ290byBlcnI7Ci0rCi0rCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwot KwkJdC5ub25jZWxlbiA9IGRjdHgtPm1pbl9ub25jZSAtIDE7Ci0rCi0rCQlpZiAoRklQU19kcmJn X2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJCXsKLSsJ CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJP Ul9VTkRFVEVDVEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlkY3R4LT5pZmxhZ3Mg Jj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0 eCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCX0K LSsKLSsJLyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KLSsKLSsJaWYgKGRjdHgtPm1heF9ub25j ZSkKLSsJCXsKLSsKLSsJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQkJZ290 byBlcnI7Ci0rCi0rCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwkJdC5u b25jZWxlbiA9IGRjdHgtPm1heF9ub25jZSArIDE7Ci0rCi0rCQlpZiAoRklQU19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJCXsKLSsJCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRF VEVDVEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlkY3R4LT5pZmxhZ3MgJj0gfkRS QkdfRkxBR19OT0VSUjsKLSsJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0r CQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VO SU5TVEFOVElBVEVfRVJST1IpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJ LyogSW5zdGFudGlhdGUgd2l0aCB2YWxpZCBkYXRhLiAqLwotKwlpZiAoIWRvX2RyYmdfaW5zdGFu dGlhdGUoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsKLSsKLSsJLyogQ2hlY2sgZ2VuZXJh dGlvbiBpcyBub3cgT0sgKi8KLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91 dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCWdvdG8g ZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwkvKiBSZXF1 ZXN0IHRvbyBtdWNoIGRhdGEgZm9yIG9uZSByZXF1ZXN0ICovCi0rCWlmIChGSVBTX2RyYmdfZ2Vu ZXJhdGUoZGN0eCwgcmFuZG91dCwgZGN0eC0+bWF4X3JlcXVlc3QgKyAxLCAwLAotKwkJCQl0ZC0+ YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQln b3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVHJ5IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICov Ci0rCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwK LSsJCQkJdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9S X1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIENoZWNrIHByZWRpY3Rp b24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCi0rCSAqIGZhaWx1 cmUuCi0rCSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWlmIChGSVBTX2RyYmdfZ2VuZXJh dGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlu bGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJCQot KwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9 Ci0rCi0rCi0rCS8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGggdmFsaWQgZGF0YSAqLwotKwotKwlp ZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsKLSsJ LyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLwotKwkvKiBTYXZlIGluaXRpYWwgcmVzZWVk IGNvdW50ZXIgKi8KLSsJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7 Ci0rCS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KLSsJZGN0eC0+ cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7Ci0rCi0rCS8qIEdlbmVyYXRl IG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAq LwotKwl0LmVudGNudCA9IDA7Ci0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRv dXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKHQuZW50Y250ICE9IDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VF RCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJl ZW4gcmVzZXQgKi8KLSsJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVy X3RtcCArIDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJ ZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1Jf Q0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KwotKwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBlbnRy b3B5IHNvdXJjZQotKwkgKiBmYWlsdXJlLgotKwkgKi8KLSsKLSsJdC5lbnRsZW4gPSAwOwotKwot KwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwlpZiAoRklQU19kcmJnX2dlbmVy YXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRp bmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCQkK LSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCWlmICghRklQU19kcmJn X3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwot KwkJfQotKwotKwotKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKLSsJ CQlnb3RvIGVycjsKLSsJLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLwotKwkvKiBTYXZl IGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KLSsJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+ cmVzZWVkX2NvdW50ZXI7Ci0rCS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2 YWwgKi8KLSsJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7Ci0r Ci0rCS8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0 ZWQgZm9yIHJlc2VlZCAqLwotKwl0LmVudGNudCA9IDA7Ci0rCWlmICghRklQU19kcmJnX2dlbmVy YXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRp bmxlbikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKHQuZW50Y250ICE9IDEpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFV RVNURURfRk9SX1JFU0VFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJLyogQ2hlY2sgcmVzZWVk IGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KLSsJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9 IHJlc2VlZF9jb3VudGVyX3RtcCArIDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7Ci0rCQlnb3RvIGVy cjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmICgh RklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwotKwkvKiBFeHBsaWNpdCByZXNlZWQgdGVzdHMgKi8KLSsKLSsJLyog VGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLwot KwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWRj dHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCWlmIChGSVBTX2RyYmdfcmVzZWVk KGRjdHgsIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEpID4gMCkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRf RVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVGVzdCBleHBs aWNpdCByZXNlZWQgd2l0aCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlICovCi0rCi0rCXQuZW50bGVu ID0gMDsKLSsKLSsJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlu bGVuKSA+IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRo IHRvbyBtdWNoIGVudHJvcHkgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0 KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwot KwotKwl0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKLSsKLSsJaWYgKEZJUFNfZHJi Z19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1Jf Q0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsaXR0bGUgZW50cm9weSAqLwot KwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0r CWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50bGVuID0gZGN0eC0+ bWluX2VudHJvcHkgLSAxOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRp biwgdGQtPmFkaW5sZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVy cjsKLSsJCX0KLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsK LSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFO VElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCXAgPSAodW5zaWduZWQgY2hh ciAqKSZkY3R4LT5kOwotKwkvKiBTdGFuZGFyZCBzYXlzIHdlIGhhdmUgdG8gY2hlY2sgdW5pbnN0 YW50aWF0ZSByZWFsbHkgemVyb2VzCi0rCSAqIHRoZSBkYXRhLi4uCi0rCSAqLwotKwlmb3IgKGkg PSAwOyBpIDwgc2l6ZW9mKGRjdHgtPmQpOyBpKyspCi0rCQl7Ci0rCQlpZiAoKnAgIT0gMCkKLSsJ CQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9aRVJPSVNFX0VSUk9SKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCQlwKys7 Ci0rCQl9Ci0rCi0rCXJldHVybiAxOwotKwotKwllcnI6Ci0rCS8qIEEgcmVhbCBlcnJvciBhcyBv cHBvc2VkIHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5nIGZ1bmN0aW9uIHdpbGwKLSsJICog aW5kaWNhdGUgdGhlIGVycm9yLgotKwkgKi8KLSsJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19G TEFHX05PRVJSKSkKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX0ZVTkNUSU9OX0VSUk9SKTsKLSsJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0r CXJldHVybiAwOwotKwotKwl9Ci0rCi0raW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgs IGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncykKLSsJewotKwlEUkJHX1NFTEZURVNUX0RBVEEg KnRkOwotKwlmbGFncyB8PSBEUkJHX0ZMQUdfVEVTVDsKLSsJZm9yICh0ZCA9IGRyYmdfdGVzdDsg dGQtPm5pZCAhPSAwOyB0ZCsrKQotKwkJewotKwkJaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRkLT5m bGFncyA9PSBmbGFncykKLSsJCQl7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4 LCB0ZCwgMCkpCi0rCQkJCXJldHVybiAwOwotKwkJCXJldHVybiBmaXBzX2RyYmdfZXJyb3JfY2hl Y2soZGN0eCwgdGQpOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLStpbnQgRklQ U19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlpbnQgcnY7Ci0rCURS QkdfQ1RYICp0Y3R4ID0gTlVMTDsKLSsJdGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rCWZp cHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdz KTsKLSsJaWYgKCF0Y3R4KQotKwkJcmV0dXJuIDA7Ci0rCXJ2ID0gZmlwc19kcmJnX2thdCh0Y3R4 LCBkY3R4LT50eXBlLCBkY3R4LT54ZmxhZ3MpOwotKwlpZiAodGN0eCkKLSsJCUZJUFNfZHJiZ19m cmVlKHRjdHgpOwotKwlpZiAocnYpCi0rCQlmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJC RywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWVsc2UKLSsJCWZpcHNfcG9zdF9mYWls ZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOwotKwlpZiAoIXJ2 KQotKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCWVsc2UKLSsJCWRjdHgt PmhlYWx0aF9jaGVja19jbnQgPSAwOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19z ZWxmdGVzdF9kcmJnKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHg7Ci0rCURSQkdfU0VMRlRF U1RfREFUQSAqdGQ7Ci0rCWludCBydiA9IDE7Ci0rCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDAp OwotKwlpZiAoIWRjdHgpCi0rCQlyZXR1cm4gMDsKLSsJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQt Pm5pZCAhPSAwOyB0ZCsrKQotKwkJewotKwkJaWYgKHRkLT5wb3N0ICE9IDEpCi0rCQkJY29udGlu dWU7Ci0rCQlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAm dGQtPmZsYWdzKSkKLSsJCQlyZXR1cm4gMTsKLSsJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQo ZGN0eCwgdGQsIDEpKQotKwkJCXsKLSsJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJH LCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsJCQlydiA9IDA7Ci0rCQkJY29udGludWU7Ci0rCQkJ fQotKwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRk LT5mbGFncykpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfZHJiZ19mcmVlKGRjdHgpOwot KwlyZXR1cm4gcnY7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lk KQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4OwotKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwotKwlp bnQgcnYgPSAxOwotKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJaWYgKCFkY3R4KQot KwkJcmV0dXJuIDA7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykK LSsJCXsKLSsJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQs ICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAxOwotKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2th dChkY3R4LCB0ZCwgMCkpCi0rCQkJewotKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RS QkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwotKwkJCXJ2ID0gMDsKLSsJCQljb250aW51ZTsKLSsJ CQl9Ci0rCQlpZiAoIWZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCkpCi0rCQkJewotKwkJ CWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwot KwkJCXJ2ID0gMDsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoIWZpcHNfcG9zdF9zdWNj ZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsJCQlyZXR1cm4gMDsK LSsJCX0KLSsJRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlw cyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAotLS0tIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMJMjAxMi0w NC0yNiAxODowMDo1MS40MDQ3NjkzODcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNDc2OTM4NyAr MDIwMAotQEAgLTAsMCArMSwyMzM1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZS5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKy8qIFNlbGZ0 ZXN0IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBmb3IgdGhlIFNQODAwLTkwIERSQkcgKi8KLSsKLSsj ZGVmaW5lIF9fZmlwc19jb25zdHNlZwotKwotKy8qIEFFUy0xMjggdXNlIGRmIFBSICAqLwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDYxLDB4NTIsMHg3YywweGUzLDB4MjMsMHg3 ZCwweDBhLDB4MDcsMHgxMCwweDBjLDB4NTAsMHgzMywKLSsJMHhjOCwweGRiLDB4ZmYsMHgxMgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NTEsMHgwZCwweDg1LDB4NzcsMHhl ZCwweDIyLDB4OTcsMHgyOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KLSsJewotKwkweDU5LDB4OWYsMHhiYiwweGNkLDB4ZDUsMHgyNSwweDY5LDB4YjUsMHhjYiww eGI1LDB4MDMsMHhmZSwKLSsJMHhkNywweGQ3LDB4MDEsMHg2NwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGVmLDB4ODgsMHg3NiwweDAxLDB4YWYsMHgzYyww eGZlLDB4OGIsMHhhZiwweDI2LDB4MDYsMHg5ZSwKLSsJMHg5YSwweDQ3LDB4MDgsMHg3NgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZTIsMHg3NiwweGY5LDB4 ZjYsMHgzYSwweGJhLDB4MTAsMHg5ZiwweGJmLDB4NDcsMHgwZSwweDUxLAotKwkweDA5LDB4ZmIs MHhhMywweGI2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eGQ0LDB4OTgsMHg4YSwweDQ2LDB4ODAsMHg0YywweGRiLDB4YTMsMHg1OSwweDAyLDB4NTcsMHg1 MiwKLSsJMHg2NiwweDFjLDB4ZWEsMHg1YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9Ci0rCXsKLSsJMHg4OCwweDhjLDB4OTEsMHhkNiwweGJlLDB4NTYsMHg2ZSwweDA4LDB4 OWEsMHg2MiwweDJiLDB4MTEsCi0rCTB4M2YsMHg1ZSwweDMxLDB4MDYKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhjMCwweDVjLDB4NmIsMHg5OCwweDAxLDB4 MGQsMHg1OCwweDE4LDB4NTEsMHgxOCwweDk2LDB4YWUsCi0rCTB4YTcsMHhlMywweGE4LDB4NjcK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjZiwweDAxLDB4YWMs MHgyMiwweDMxLDB4MDYsMHg4ZSwweGZjLDB4Y2UsMHg1NiwweGVhLDB4MjQsCi0rCTB4MGYsMHgz OCwweDQzLDB4YzYKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBObyBQUiAgKi8KLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9k Zl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxZiwweDhlLDB4MzQsMHg4MiwweDBjLDB4Yjcs MHhiZSwweGM1LDB4MDEsMHgzZSwweGQwLDB4YTMsCi0rCTB4OWQsMHg3ZCwweDFjLDB4OWIKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X3VzZV9kZl9ub25jZVtdID0KLSsJewotKwkweGQ1LDB4NGQsMHhiZCwweDRhLDB4OTMsMHg3 ZiwweGI4LDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsK LSsJMHhhYiwweGQ2LDB4M2YsMHgwNCwweGZlLDB4MjcsMHg2YiwweDJkLDB4ZDcsMHhjMywweDFj LDB4ZjMsCi0rCTB4MzgsMHg2NiwweGJhLDB4MWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5w dXRbXSA9Ci0rCXsKLSsJMHhmZSwweGY0LDB4MDksMHhhOCwweGI3LDB4NzMsMHgyNywweDljLDB4 NWYsMHhhNywweGVhLDB4NDYsCi0rCTB4YjUsMHhlMiwweGIyLDB4NDEKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9p bnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NDIsMHhlNCwweDRlLDB4N2IsMHgyNywweGRk LDB4Y2IsMHhiYywweDBhLDB4Y2YsMHhhNiwweDY3LAotKwkweGU3LDB4NTcsMHgxMSwweGI0Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4MTQsMHgyNiwweDY5 LDB4ZDksMHhmMywweDY1LDB4MDMsMHhkNiwweDZiLDB4YjksMHg0NCwweDBiLAotKwkweGM3LDB4 YzQsMHg5ZSwweDM5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4NTUsMHgyZSwweDYwLDB4OWEsMHgwNSwweDcyLDB4OGEsMHhhOCwweGVmLDB4MjIsMHg4 MSwweDVhLAotKwkweGM4LDB4OTMsMHhmYSwweDg0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlu cHV0MltdID0KLSsJewotKwkweDNjLDB4NDAsMHhjOCwweGM0LDB4MTYsMHgwYywweDIxLDB4YTQs MHgzNywweDJjLDB4OGYsMHhhNSwKLSsJMHgwNiwweDBjLDB4MTUsMHgyYwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUxLDB4M2UsMHg5OSwweDk4LDB4ODYsMHg2Nyww eDBiLDB4NjMsMHg3YiwweGJlLDB4M2YsMHg4OCwKLSsJMHg0NiwweDgxLDB4YzcsMHgxOQotKwl9 OwotKwotKwotKy8qIEFFUy0xOTIgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtd ID0KLSsJewotKwkweDJiLDB4NGUsMHg4YiwweGUxLDB4ZjEsMHgzNCwweDgwLDB4NTYsMHg4MSww eGY5LDB4NzQsMHhlYywKLSsJMHgxNywweDQ0LDB4MmEsMHhmMSwweDE0LDB4YjAsMHhiZiwweDk3 LDB4MzksMHhiNywweDA0LDB4N2QKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9ub25jZVtdID0KLSsJewotKwkw eGQ2LDB4OWQsMHhlYiwweDE0LDB4NGUsMHg2YywweDMwLDB4MWUsMHgzOSwweDU1LDB4NzMsMHhk MCwKLSsJMHhkMSwweDgwLDB4NzgsMHhmYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KLSsJewotKwkweGZjLDB4NDMsMHg0YSwweGY4LDB4OWEsMHg1NSwweGIzLDB4 NTMsMHg4MywweGUyLDB4MTgsMHgxNiwKLSsJMHgwYywweGRjLDB4Y2QsMHg1ZSwweDRmLDB4YTAs MHgwMywweDAxLDB4MmIsMHg5ZiwweGU0LDB4ZDUsCi0rCTB4N2QsMHg0OSwweGYwLDB4NDEsMHg5 ZSwweDNkLDB4OTksMHgwNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJ ewotKwkweDVlLDB4OWYsMHg0OSwweDZmLDB4MjEsMHg4YiwweDFkLDB4MzIsMHhkNSwweDg0LDB4 NWMsMHhhYywKLSsJMHhhZiwweGRmLDB4ZTQsMHg3OSwweDllLDB4YWYsMHhhOSwweDgyLDB4ZDAs MHhmOCwweDRmLDB4Y2IsCi0rCTB4NjksMHgxMCwweDBhLDB4N2UsMHg4MSwweDU3LDB4YjUsMHgz NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZDQsMHg4MSww eDBjLDB4ZDcsMHg2NiwweDM5LDB4ZWMsMHg0MiwweDUzLDB4ODcsMHg0MSwweGE1LAotKwkweDFl LDB4N2QsMHg4MCwweDkxLDB4OGUsMHhiYiwweGVkLDB4YWMsMHgxNCwweDAyLDB4MWEsMHhkNQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkZiwweDFkLDB4 MzksMHg0NSwweDdjLDB4OWIsMHhjNiwweDJiLDB4N2QsMHg4YywweDkzLDB4ZTksCi0rCTB4MTks MHgzMCwweDZiLDB4NjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7 Ci0rCTB4MDAsMHg3MSwweDI3LDB4NGUsMHhkMywweDE0LDB4ZjEsMHgyMCwweDdmLDB4NGEsMHg0 MSwweDMyLAotKwkweDJhLDB4OTcsMHgxMSwweDQzLDB4OGYsMHg0YSwweDE1LDB4N2IsMHg5Yiww eDUxLDB4NzksMHhkYSwKLSsJMHg0OSwweDNkLDB4ZGUsMHhlOCwweGJjLDB4OTMsMHg5MSwweDk5 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4OTAsMHhlZSww eDc2LDB4YTEsMHg0NSwweDhkLDB4YjcsMHg0MCwweGIwLDB4MTEsMHhiZiwweGQwLAotKwkweDY1 LDB4ZDcsMHgzYywweDdjLDB4NGYsMHgyMCwweDNmLDB4NGUsMHgxMSwweDlkLDB4YjMsMHg1ZQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDI0LDB4M2IsMHgyMCww eGE0LDB4MzcsMHg2NiwweGJhLDB4NzIsMHgzOSwweDNmLDB4Y2YsMHgzYywKLSsJMHg3ZSwweDFh LDB4MmIsMHg4MwotKwl9OwotKwotKwotKy8qIEFFUy0xOTIgdXNlIGRmIE5vIFBSICAqLwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2Rm X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDhkLDB4NzQsMHhhNCwweDUwLDB4MWEsMHgwMiww eDY4LDB4MGMsMHgyYSwweDY5LDB4YzQsMHg4MiwKLSsJMHgzYiwweGJiLDB4ZGEsMHgwZSwweDdm LDB4NzcsMHhhMywweDE3LDB4NzgsMHg1NywweGIyLDB4N2IKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25jZVtd ID0KLSsJewotKwkweDc1LDB4ZDUsMHgxZiwweGFjLDB4YTQsMHg4ZCwweDQyLDB4NzgsMHhkNyww eDY5LDB4ODYsMHg5ZCwKLSsJMHg3NywweGQ3LDB4NDEsMHgwZQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDRlLDB4MzMsMHg0MSwweDNjLDB4OWMsMHhj MiwweGQyLDB4NTMsMHhhZiwweDkwLDB4ZWEsMHhjZiwKLSsJMHgxOSwweDUwLDB4MWUsMHhlNiww eDZmLDB4NjMsMHhjOCwweDMyLDB4MjIsMHhkYywweDA3LDB4NjUsCi0rCTB4OWMsMHhkMywweGY4 LDB4MzAsMHg5ZSwweGVkLDB4MzUsMHg3MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtd ID0KLSsJewotKwkweDVkLDB4OGIsMHg4YywweGMxLDB4ZGYsMHgwZSwweDAyLDB4NzgsMHhmYiww eDE5LDB4YjgsMHg2OSwKLSsJMHg3OCwweDRlLDB4OWMsMHg1MiwweGJjLDB4YzcsMHgyMCwweGM5 LDB4ZTYsMHg1ZSwweDc3LDB4MjIsCi0rCTB4MjgsMHgzZCwweDBjLDB4OWUsMHg2OCwweGE4LDB4 NDUsMHhkNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkNSww eGU3LDB4MDgsMHhjNSwweDE5LDB4OTksMHhkNSwweDMxLDB4MDMsMHgwYSwweDc0LDB4YjYsCi0r CTB4YjcsMHhlZCwweGU5LDB4ZWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9 Ci0rCXsKLSsJMHg5YywweDI2LDB4ZGEsMHhmMSwweGFjLDB4ZDksMHg1YSwweGQ2LDB4YTgsMHg2 NSwweGY1LDB4MDIsCi0rCTB4OGYsMHhkYywweGEyLDB4MDksMHg1NCwweGE2LDB4ZTIsMHhhNCww eGRlLDB4MzIsMHhlMCwweDAxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10g PQotKwl7Ci0rCTB4OWIsMHg5MCwweGIwLDB4M2EsMHgwZSwweDNhLDB4ODAsMHgwNywweDRhLDB4 ZjQsMHhkYSwweDc2LAotKwkweDI4LDB4MzAsMHgzYywweGVlLDB4NTQsMHgxYiwweDk0LDB4NTks MHg1MSwweDQzLDB4NTYsMHg3NywKLSsJMHhhZiwweDg4LDB4ZGQsMHg2MywweDg5LDB4NDcsMHgw NiwweDY1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDNjLDB4 MTEsMHg2NCwweDdhLDB4OTYsMHhmNSwweGQ4LDB4YjgsMHhhZSwweGQ2LDB4NzAsMHg0ZSwKLSsJ MHgxNiwweDk2LDB4ZGUsMHhlOSwweDYyLDB4YmMsMHhlZSwweDI4LDB4MmYsMHgyNiwweGE2LDB4 ZjAsCi0rCTB4NTYsMHhlZiwweGEzLDB4ZjEsMHg2YiwweGExLDB4YjEsMHg3NwotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDBiLDB4ZTIsMHg1NiwweDAzLDB4MWUsMHhk YiwweDJjLDB4NmQsMHg3ZiwweDFiLDB4MTUsMHg1OCwKLSsJMHgxYSwweGY5LDB4MTMsMHgyOAot Kwl9OwotKwotKwotKy8qIEFFUy0yNTYgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1 dFtdID0KLSsJewotKwkweDYxLDB4NjgsMHhmYywweDFhLDB4ZjAsMHhiNSwweDk1LDB4NmIsMHg4 NSwweDA5LDB4OWIsMHg3NCwKLSsJMHgzZiwweDEzLDB4NzgsMHg0OSwweDNiLDB4ODUsMHhlYyww eDkzLDB4MTMsMHgzYiwweGE5LDB4NGYsCi0rCTB4OTYsMHhhYiwweDJjLDB4ZTQsMHhjOCwweDhm LDB4ZGQsMHg2YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4YWQsMHhkMiww eGJiLDB4YmEsMHhiNywweDY1LDB4ODksMHhjMywweDIxLDB4NmMsMHg1NSwweDMzLAotKwkweDJi LDB4MzYsMHhmZiwweGE0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQotKwl7Ci0rCTB4NmUsMHhjYSwweGU3LDB4MjAsMHg3MiwweGQzLDB4ODQsMHg1YSwweDMyLDB4 ZDMsMHg0YiwweDI0LAotKwkweDcyLDB4YzQsMHg2MywweDJiLDB4OWQsMHgxMiwweDI0LDB4MGMs MHgyMywweDI2LDB4OGUsMHg4MywKLSsJMHgxNiwweDM3LDB4MGIsMHhkMSwweDA2LDB4NGYsMHg2 OCwweDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4N2Us MHgwOCwweDRhLDB4YmIsMHhlMywweDIxLDB4N2MsMHhjOSwweDIzLDB4ZDIsMHhmOCwweGIwLAot KwkweDczLDB4OTgsMHhiYSwweDg0LDB4NzQsMHgyMywweGFiLDB4MDYsMHg4YSwweGUyLDB4MjIs MHhkMywKLSsJMHg3YiwweGNlLDB4OWIsMHhkMiwweDRhLDB4NzYsMHhiOCwweGRlCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgwYiwweDIzLDB4YWYsMHhkZiww eGYxLDB4NjIsMHhkNywweGQzLDB4NDMsMHg5NywweGY4LDB4NzcsCi0rCTB4MDQsMHhhOCwweDQy LDB4MjAsMHhiZCwweGY2LDB4MGYsMHhjMSwweDE3LDB4MmYsMHg5ZiwweDU0LAotKwkweGJiLDB4 NTYsMHgxNywweDg2LDB4NjgsMHgwZSwweGJhLDB4YTkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9pbnRfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MzEsMHg4ZSwweGFkLDB4YWYsMHg0MCwweGViLDB4NmIs MHg3NCwweDMxLDB4NDYsMHg4MCwweGM3LAotKwkweDE3LDB4YWIsMHgzYywweDdhCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDk0LDB4NmIsMHhjOSwweDlm LDB4YWIsMHg4ZCwweGM1LDB4ZWMsMHg3MSwweDg4LDB4MWQsMHgwMCwKLSsJMHg4YywweDg5LDB4 NjgsMHhlNCwweGM4LDB4MDcsMHg3NywweDM2LDB4MTcsMHg2ZCwweDc5LDB4NzgsCi0rCTB4Yzcs MHgwNiwweDRlLDB4OTksMHgwNCwweDI4LDB4MjksMHhjMwotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJv cHlpbnB1dHByMltdID0KLSsJewotKwkweGJmLDB4NmMsMHg1OSwweDJhLDB4MGQsMHg0NCwweDBm LDB4YWUsMHg5YSwweDVlLDB4MDMsMHg3MywKLSsJMHhkOCwweGE2LDB4ZTEsMHhjZiwweDI1LDB4 NjEsMHgzOCwweDI0LDB4ODYsMHg5ZSwweDUzLDB4ZTgsCi0rCTB4YTQsMHhkZiwweDU2LDB4ZjQs MHgwNiwweDA3LDB4OWMsMHgwZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDIyLDB4NGEsMHhiNCwweGI4LDB4YjYsMHhlZSwweDdkLDB4YjEsMHg5ZSwweGM5LDB4 ZjksMHhhMCwKLSsJMHhkOSwweGUyLDB4OTcsMHgwMAotKwl9OwotKwotKwotKy8qIEFFUy0yNTYg dXNlIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGE1LDB4M2Us MHgzNywweDEwLDB4MTcsMHg0MywweDkxLDB4OTMsMHg1OSwweDFlLDB4NDcsMHg1MCwKLSsJMHg4 NywweGFhLDB4ZGQsMHhkNSwweGMxLDB4YzMsMHg4NiwweGNkLDB4Y2EsMHgwZCwweGRiLDB4Njgs Ci0rCTB4ZTAsMHgwMiwweGQ4LDB4MGYsMHhkYywweDQwLDB4MWEsMHg0NwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2Rm X25vbmNlW10gPQotKwl7Ci0rCTB4YTksMHg0ZCwweGE1LDB4NWEsMHhmZCwweGM1LDB4MGMsMHhl NSwweDFjLDB4OWEsMHgzYiwweDhhLAotKwkweDRjLDB4NDQsMHg4NCwweDQwCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OGIsMHg1MiwweGEyLDB4NGEs MHg5MywweGMzLDB4NGUsMHhhNywweDFlLDB4MWMsMHhhNywweDA1LAotKwkweGViLDB4ODIsMHg5 YiwweGE2LDB4NWQsMHhlNCwweGQ0LDB4ZTAsMHg3ZiwweGEzLDB4ZDgsMHg2YiwKLSsJMHgzNyww eDg0LDB4NWYsMHhmMSwweGM3LDB4ZDUsMHhmNiwweGQyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4MjAsMHhmNCwweDIyLDB4ZWQsMHhmOCwweDVjLDB4YTEsMHg2 YSwweDAxLDB4Y2YsMHhiZSwweDVmLAotKwkweDhkLDB4NmMsMHg5NCwweDdmLDB4YWUsMHgxMiww eGE4LDB4NTcsMHhkYiwweDJhLDB4YTksMHhiZiwKLSsJMHhjNywweGIzLDB4NjUsMHg4MSwweDgw LDB4OGQsMHgwZCwweDQ2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewot KwkweDRlLDB4NDQsMHhmZCwweGYzLDB4OWUsMHgyOSwweGEyLDB4YjgsMHgwZiwweDVkLDB4NmMs MHhlMSwKLSsJMHgyOCwweDBjLDB4M2IsMHhjMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KLSsJewotKwkweGRkLDB4NDAsMHhlNSwweDk4LDB4N2IsMHgyNywweDE2LDB4NzMs MHgxNSwweDY4LDB4ZDIsMHg3NiwKLSsJMHhiZiwweDBjLDB4NjcsMHgxNSwweDc1LDB4NzksMHgw MywweGQzLDB4ZGUsMHhkZSwweDkxLDB4NDYsCi0rCTB4NDIsMHhkZCwweGQ0LDB4NjcsMHhjOCww eDc5LDB4YzgsMHgxZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJ ewotKwkweDdmLDB4ZDgsMHgxZiwweGJkLDB4MmEsMHhiNSwweDFjLDB4MTEsMHg1ZCwweDgzLDB4 NGUsMHg5OSwKLSsJMHhmNiwweDVjLDB4YTUsMHg0MCwweDIwLDB4ZWQsMHgzOCwweDhlLDB4ZDUs MHg5ZSwweGUwLDB4NzUsCi0rCTB4OTMsMHhmZSwweDEyLDB4NWUsMHg1ZCwweDczLDB4ZmIsMHg3 NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhjZCwweDJjLDB4 ZmYsMHgxNCwweDY5LDB4M2UsMHg0YywweDllLDB4ZmQsMHhmZSwweDI2LDB4MGQsCi0rCTB4ZTks MHg4NiwweDAwLDB4NDksMHgzMCwweGJhLDB4YjEsMHhjNiwweDUwLDB4NTcsMHg3NywweDJhLAot KwkweDYyLDB4MzksMHgyYywweDNiLDB4NzQsMHhlYiwweGM5LDB4MGQKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZiwweDc4LDB4YmUsMHhiOSwweDRkLDB4OTcsMHg4 YywweGU5LDB4ZDAsMHg5NywweGZlLDB4YWQsCi0rCTB4ZmEsMHhmZCwweDM1LDB4NWUKLSsJfTsK LSsKLSsKLSsvKiBBRVMtMTI4IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQot Kwl7Ci0rCTB4OWEsMHgyNSwweDY1LDB4MTAsMHg2NywweGQ1LDB4YjYsMHg2YiwweDcwLDB4YTEs MHhiMywweGE0LAotKwkweDQzLDB4OTUsMHg4MCwweGMwLDB4ODQsMHgwYSwweDc5LDB4YjAsMHg4 OCwweDc0LDB4ZjIsMHhiZiwKLSsJMHgzMSwweDZjLDB4MzMsMHgzOCwweDBiLDB4MDAsMHhiMiww eDVhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9ub19kZl9wcl9ub25jZVtdID0KLSsJewotKwkweDc4LDB4NDcsMHg2YiwweGY3 LDB4OTAsMHg4ZSwweDg3LDB4ZjEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0KLSsJewotKwkweGY3LDB4MjIsMHgxZCwweDNhLDB4YmUsMHgxZCwweGNhLDB4MzIsMHgx YiwweGJkLDB4ODcsMHgwYywKLSsJMHg1MSwweDI0LDB4MTksMHhlZSwweGEzLDB4MjMsMHgwOSww eDYzLDB4MzMsMHgzZCwweGE4LDB4MGMsCi0rCTB4MWMsMHhmYSwweDQyLDB4ODksMHhjYywweDZm LDB4YTAsMHhhOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4 YzksMHhlMCwweDgwLDB4YmYsMHg4YywweDQ1LDB4NTgsMHgzOSwweGZmLDB4MDAsMHhhYiwweDAy LAotKwkweDRjLDB4M2UsMHgzYSwweDk1LDB4OWIsMHg4MCwweGE4LDB4MjEsMHgyYSwweGVlLDB4 YmEsMHg3MywKLSsJMHhiMSwweGQ5LDB4Y2YsMHgyOCwweGY2LDB4OGYsMHg5YiwweDEyCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDRjLDB4YTgsMHhjNSwweGYw LDB4NTksMHg5ZSwweGE2LDB4OGQsMHgyNiwweDUzLDB4ZDcsMHg4YSwKLSsJMHhhOSwweGQ4LDB4 ZjcsMHhlZCwweGIyLDB4ZjksMHgxMiwweDQyLDB4ZTEsMHhlNSwweGJkLDB4ZTcsCi0rCTB4ZTcs MHgxZCwweDc0LDB4OTksMHgwMCwweDlkLDB4MzEsMHgzZQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfaW50X3Jl dHVybmVkYml0c1tdID0KLSsJewotKwkweGUyLDB4YWMsMHgyMCwweGYwLDB4ODAsMHhlNywweGJj LDB4N2UsMHg5YywweDdiLDB4NjUsMHg3MSwKLSsJMHhhZiwweDE5LDB4MzIsMHgxNgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf bm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDMyLDB4N2YsMHgzOCwweDhi LDB4NzMsMHgwYSwweDc4LDB4ODMsMHhkYywweDMwLDB4YmUsMHg5ZiwKLSsJMHgxMCwweDFmLDB4 ZjUsMHgxZiwweGNhLDB4MDAsMHhiNSwweDBkLDB4ZDYsMHg5ZCwweDYwLDB4ODMsCi0rCTB4NTEs MHg1NCwweDdkLDB4MzgsMHgyMywweDNhLDB4NTIsMHg1MAotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9w eWlucHV0cHIyW10gPQotKwl7Ci0rCTB4MTgsMHg2MSwweDUzLDB4NTYsMHhlZCwweGVkLDB4ZDcs MHgyMCwweGZiLDB4NzEsMHgwNCwweDdhLAotKwkweGIyLDB4YWMsMHhjMSwweDI4LDB4Y2QsMHhm MiwweGMyLDB4ZmMsMHhhYSwweGIxLDB4MDYsMHgwNywKLSsJMHhlOSwweDQ2LDB4OTUsMHgwMiww eDQ4LDB4MDEsMHg3OCwweGY5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsK LSsJMHgyOSwweGM4LDB4MWIsMHgxNSwweGIxLDB4ZDEsMHhjMiwweGY2LDB4NzEsMHg4NiwweDY4 LDB4MzMsCi0rCTB4NTcsMHg4MiwweDMzLDB4YWYKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTI4IG5v IGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YzksMHhjNSwweDc5 LDB4YmMsMHhlOCwweGM1LDB4MTksMHhkOCwweGJjLDB4NjYsMHg3MywweDY3LAotKwkweGY2LDB4 ZDMsMHg3MiwweGFhLDB4YTYsMHgxNiwweGI4LDB4NTAsMHhiNywweDQ3LDB4M2EsMHg0MiwKLSsJ MHhhYiwweGY0LDB4MTYsMHhiMiwweDk2LDB4ZDIsMHhiNiwweDYwCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9ub25j ZVtdID0KLSsJewotKwkweDVmLDB4YmYsMHg5NywweDBjLDB4NGIsMHhhNCwweDg3LDB4MTMKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGNlLDB4ZmIsMHg3 YiwweDNmLDB4ZDQsMHg2YiwweDI5LDB4MGQsMHg2OSwweDA2LDB4ZmYsMHhiYiwKLSsJMHhmMiww eGU1LDB4YzYsMHg2YywweDBhLDB4MTAsMHhhMCwweGNmLDB4MWEsMHg0OCwweGM3LDB4OGIsCi0r CTB4M2MsMHgxNiwweDg4LDB4ZWQsMHg1MCwweDEzLDB4ODEsMHhjZQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRk aXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4NGIsMHgyMiwweDQ2LDB4MTgsMHgwMiwweDdiLDB4 ZDIsMHgxYiwweDIyLDB4NDIsMHg3YywweDM3LAotKwkweGQ5LDB4ZjYsMHhlOCwweDliLDB4MTIs MHgzMCwweDVmLDB4ZTksMHg5MCwweGU4LDB4MDgsMHgyNCwKLSsJMHg0ZiwweDA2LDB4NjYsMHhk YiwweDE5LDB4MmIsMHgxMywweDk1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4MmUsMHg5NiwweDcwLDB4NjQsMHhmYSwweGRmLDB4ZGYsMHg1NywweGI1LDB4ODIs MHhlZSwweGQ2LAotKwkweGVkLDB4M2UsMHg2NSwweGMyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5w dXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgyNiwweGMwLDB4NzIsMHgxNiwweDNhLDB4NGIsMHhiNyww eDk5LDB4ZDQsMHgwNywweGFmLDB4NjYsCi0rCTB4NjIsMHgzNiwweDk2LDB4YTQsMHg1MSwweDE3 LDB4ZmEsMHgwNywweDhiLDB4MTcsMHg1ZSwweGExLAotKwkweDJmLDB4M2MsMHgxMCwweGU3LDB4 OTAsMHhkMCwweDQ2LDB4MDAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0K LSsJewotKwkweDgzLDB4MzksMHgzNywweDdiLDB4MDIsMHgwNiwweGQyLDB4MTIsMHgxMywweDhk LDB4OGIsMHhmMiwKLSsJMHhmMCwweGY2LDB4MjYsMHhlYiwweGE0LDB4MjIsMHg3YiwweGMyLDB4 ZTcsMHhiYSwweDc5LDB4ZTQsCi0rCTB4M2IsMHg3NywweDVkLDB4NGQsMHg0NywweGIyLDB4MmQs MHhiNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDBiLDB4Yjks MHg2NywweDM3LDB4ZGIsMHg4MywweGRmLDB4Y2EsMHg4MSwweDhiLDB4ZjksMHgzZiwKLSsJMHhm MSwweDExLDB4MWIsMHgyZiwweGYwLDB4NjEsMHhhNiwweGRmLDB4YmEsMHhhMywweGIxLDB4YWMs Ci0rCTB4ZDMsMHhlNiwweDA5LDB4YjgsMHgyYywweDZhLDB4NjcsMHhkNgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MWUsMHhhNywweGE0LDB4ZTQsMHhlMSwweGE2LDB4 N2MsMHg2OSwweDlhLDB4NDQsMHg2YywweDM2LAotKwkweDgxLDB4MzcsMHgxOSwweGQ0Ci0rCX07 Ci0rCi0rCi0rLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0K LSsJewotKwkweDlkLDB4MmMsMHhkMiwweDU1LDB4NjYsMHhlYSwweGUwLDB4YmUsMHgxOCwweGI3 LDB4NzYsMHhlNywKLSsJMHg3MywweDM1LDB4ZDgsMHgxZiwweGFkLDB4M2EsMHhlMywweDgxLDB4 MGUsMHg5MiwweGQwLDB4NjEsCi0rCTB4YzksMHgxMiwweDI2LDB4ZjYsMHgxYywweGRmLDB4ZmUs MHg0NywweGFhLDB4ZmUsMHg3ZCwweDVhLAotKwkweDE3LDB4MWYsMHg4ZCwweDlhCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wcl9ub25jZVtdID0KLSsJewotKwkweDQ0LDB4ODIsMHhlZCwweGU4LDB4NGMsMHgyOCww eDVhLDB4MTQsMHhmZiwweDg4LDB4OGQsMHgxOSwKLSsJMHg2MSwweDVjLDB4ZWUsMHgwZgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NDcsMHhkNyww eDliLDB4OTksMHhhYSwweGNiLDB4ZTcsMHhkMiwweDU3LDB4NjYsMHgyYywweGUxLAotKwkweDc4 LDB4ZDYsMHgyYywweGVhLDB4YTMsMHgyMywweDVmLDB4MmEsMHhjMSwweDNhLDB4ZjAsMHhhNCwK LSsJMHgyMCwweDNiLDB4ZmEsMHgwNywweGQ1LDB4MDUsMHgwMiwweGU0LDB4NTcsMHgwMSwweGI2 LDB4MTAsCi0rCTB4NTcsMHgyZSwweGU3LDB4NTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxp bnB1dFtdID0KLSsJewotKwkweDRiLDB4NzQsMHgwYiwweDQwLDB4Y2UsMHg2YiwweGMyLDB4NmEs MHgyNCwweGI0LDB4ZjMsMHhhZCwKLSsJMHg3YSwweGE1LDB4N2EsMHhhMiwweDE1LDB4ZTIsMHhj OCwweDYxLDB4MTUsMHhjNiwweGI3LDB4ODUsCi0rCTB4NjksMHgxMSwweGFkLDB4N2IsMHgxNCww eGQyLDB4ZjYsMHgxMiwweGExLDB4OTUsMHg1ZCwweDNmLAotKwkweGUyLDB4ZDAsMHgwYywweDJm Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDBjLDB4OWMsMHhh ZCwweDA1LDB4ZWUsMHhhZSwweDQ4LDB4MjMsMHg4OSwweDU5LDB4YTEsMHg5NCwKLSsJMHhkNyww eGQ4LDB4NzUsMHhkNSwweDU0LDB4OTMsMHhjNywweDRhLDB4ZDksMHgyNiwweGRlLDB4ZWIsCi0r CTB4YmEsMHhiMCwweDdlLDB4MzAsMHgxZCwweDVmLDB4NjksMHg0MCwweDljLDB4M2IsMHgxNyww eDU4LAotKwkweDFkLDB4MzAsMHhiMywweDc4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4ZjcsMHg5MywweGIwLDB4NmQsMHg3NywweDgzLDB4ZDUsMHgzOCww eDAxLDB4ZTEsMHg1MiwweDQwLAotKwkweDdlLDB4M2UsMHgwYywweDI2Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4YmMsMHg0YiwweDM3LDB4NDQsMHgxYyww eGM1LDB4NDUsMHg1ZiwweDhmLDB4NTEsMHg2MiwweDhhLAotKwkweDg1LDB4MzAsMHgxZCwweDdj LDB4ZTQsMHhjZiwweGY3LDB4NDQsMHhjZSwweDMyLDB4M2UsMHg1NywKLSsJMHg5NSwweGE0LDB4 MmEsMHhkZiwweGZkLDB4OWUsMHgzOCwweDQxLDB4YjMsMHhmNiwweGM1LDB4ZWUsCi0rCTB4MGMs MHg0YiwweGVlLDB4NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewot KwkweGVjLDB4YWYsMHhmNiwweDRmLDB4YjEsMHhhMCwweDU0LDB4YjUsMHg1YiwweGUzLDB4NDYs MHhiMCwKLSsJMHg3NiwweDVhLDB4N2MsMHgzZiwweDdiLDB4OTQsMHg2OSwweDIxLDB4NTEsMHgw MiwweGU1LDB4OWYsCi0rCTB4MDQsMHg1OSwweDAyLDB4OTgsMHhjNiwweDQzLDB4MmMsMHhjYyww eDI2LDB4NGMsMHg4NywweDZiLAotKwkweDhlLDB4MGEsMHg4MywweGRmCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9w cl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg3NCwweDQ1LDB4ZmIsMHg1MywweDg0LDB4OTYs MHhiZSwweGZmLDB4MTUsMHhjYywweDQxLDB4OTEsCi0rCTB4YjksMHhhMSwweDIxLDB4NjgKLSsJ fTsKLSsKLSsKLSsvKiBBRVMtMTkyIG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0W10g PQotKwl7Ci0rCTB4M2MsMHg3ZCwweGI1LDB4ZTAsMHg1NCwweGQ5LDB4NmUsMHg4YywweGE5LDB4 ODYsMHhjZSwweDRlLAotKwkweDZiLDB4YWYsMHhlYiwweDJmLDB4ZTcsMHg3NSwweGUwLDB4OGIs MHhhNCwweDNiLDB4MDcsMHhmZSwKLSsJMHhiZSwweDMzLDB4NzUsMHg5MywweDgwLDB4MjcsMHhi NSwweDI5LDB4NDcsMHg4YiwweGM3LDB4MjgsCi0rCTB4OTQsMHhjMywweDU5LDB4NjMKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX25vbmNlW10gPQotKwl7Ci0rCTB4NDMsMHhmMSwweDdkLDB4YjgsMHhjMywweGZlLDB4 ZDAsMHgyMywweDZiLDB4YjQsMHg5MiwweGRiLAotKwkweDI5LDB4ZmQsMHg0NSwweDcxCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg5ZiwweDI0LDB4Mjks MHg5OSwweDllLDB4MDEsMHhhYiwweGU5LDB4MTksMHhkOCwweDIzLDB4MDgsCi0rCTB4YjcsMHhk NiwweDdlLDB4OGMsMHhjMCwweDllLDB4N2YsMHg2ZSwweDViLDB4MzMsMHgyMCwweDk2LAotKwkw eDBiLDB4MjMsMHgyYywweGE1LDB4NmEsMHhmOCwweDFiLDB4MDQsMHgyNiwweGRiLDB4MmUsMHgy YiwKLSsJMHgzYiwweDg4LDB4Y2UsMHgzNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0W10g PQotKwl7Ci0rCTB4OTQsMHhlOSwweDdjLDB4M2QsMHhhNywweGRiLDB4NjAsMHg4MywweDFmLDB4 OTgsMHgzZiwweDBiLAotKwkweDg4LDB4NTksMHg1NywweDUxLDB4ODgsMHg5ZiwweDc2LDB4NDks MHg5ZiwweGE2LDB4ZGEsMHg3MSwKLSsJMHgxZCwweDBkLDB4NDcsMHgxNiwweDYzLDB4YzUsMHg2 OCwweGU0LDB4NWQsMHgzOSwweDY5LDB4YjMsCi0rCTB4M2UsMHhiZSwweGQ0LDB4OGUKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhmOSwweGQ3LDB4YWQsMHg2OSww eGFiLDB4OGYsMHgyMywweDU2LDB4NzAsMHgxNywweDRmLDB4MmEsCi0rCTB4NDUsMHhlNywweDRh LDB4YzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGE2LDB4 NzEsMHg2YSwweDNkLDB4YmEsMHhkMSwweGU4LDB4NjYsMHhhNiwweGVmLDB4YjIsMHgwZSwKLSsJ MHhhOCwweDljLDB4YWEsMHg0ZSwweGFmLDB4MTcsMHg4OSwweDUwLDB4MDAsMHhkYSwweGExLDB4 YjEsCi0rCTB4MGIsMHhhNCwweGQ5LDB4MzUsMHg4OSwweGM4LDB4ZTUsMHhiMCwweGQ5LDB4Yjcs MHhjNCwweDMzLAotKwkweDliLDB4Y2IsMHg3ZSwweDc1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFs aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgyNywweDIxLDB4ZmMsMHhjMiwweGJkLDB4ZjMsMHgz YywweGNlLDB4YzMsMHhjYSwweGMxLDB4MDEsCi0rCTB4ZTAsMHhmZiwweDkzLDB4MTIsMHg3ZCww eDU0LDB4NDIsMHhlMywweDlmLDB4MDMsMHhkZiwweDI3LAotKwkweDA0LDB4MDcsMHgzYywweDUz LDB4N2YsMHhhOCwweDY2LDB4YzgsMHg5NywweDRiLDB4NjEsMHg0MCwKLSsJMHg1ZCwweDdhLDB4 MjUsMHg3OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDJkLDB4 OGUsMHgxNiwweDVkLDB4MGIsMHg5ZiwweGViLDB4YWEsMHhkNiwweGVjLDB4MjgsMHg3MSwKLSsJ MHg3YywweDBiLDB4YzEsMHgxZCwweGQ0LDB4NDQsMHgxOSwweDQ3LDB4ZmQsMHgxZCwweDdjLDB4 ZTUsCi0rCTB4ZjMsMHgyNywweGUxLDB4YjYsMHg3MiwweDBhLDB4ZTAsMHhlYywweDBlLDB4Y2Qs MHhlZiwweDFhLAotKwkweDkxLDB4NmEsMHhlMywweDVmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHhlNSwweGRhLDB4YjgsMHhlMCwweDYzLDB4NTksMHg1YSwweGNjLDB4 M2QsMHhkYywweDlmLDB4ZTgsCi0rCTB4NjYsMHg2NywweDJjLDB4OTIKLSsJfTsKLSsKLSsKLSsv KiBBRVMtMjU2IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4 MTUsMHhjNywweDVkLDB4Y2IsMHg0MSwweDRiLDB4MTYsMHgwMSwweDNhLDB4ZDEsMHg0NCwweGU4 LAotKwkweDIyLDB4MzIsMHhjNiwweDljLDB4M2YsMHhlNywweDQzLDB4ZjUsMHg5YSwweGQzLDB4 ZWEsMHhmMiwKLSsJMHhkNywweDRlLDB4NmUsMHg2YSwweDU1LDB4NzMsMHg0MCwweGVmLDB4ODks MHhhZCwweDBkLDB4MDMsCi0rCTB4OTYsMHg3ZSwweDc4LDB4ODEsMHgyZiwweDkxLDB4MWIsMHg0 NCwweGIwLDB4MDIsMHhiYSwweDFjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0KLSsJewotKwkw eGRjLDB4ZTQsMHhkNCwweDI3LDB4N2EsMHg5MCwweGQ3LDB4OTksMHg0MywweGExLDB4M2MsMHgz MCwKLSsJMHhjYywweDRiLDB4ZWUsMHgyZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQotKwl7Ci0rCTB4ZTMsMHhlNiwweGI5LDB4MTEsMHhlNCwweDdhLDB4YTQsMHg0 MCwweDZiLDB4ZjgsMHg3MywweGY3LAotKwkweDdlLDB4ZWMsMHhjNywweGI5LDB4OTcsMHhiZiww eGY4LDB4MjUsMHg3YiwweGJlLDB4MTEsMHg5YiwKLSsJMHg1YiwweDZhLDB4MGMsMHgyZSwweDJi LDB4MDEsMHg1MSwweGNkLDB4NDEsMHg0YiwweDZiLDB4YWMsCi0rCTB4MzEsMHhhOCwweDBiLDB4 ZjcsMHhlNiwweDU5LDB4NDIsMHhiOCwweDAzLDB4MGMsMHhmOCwweDA2Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9w cl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg2YSwweDlmLDB4MDAsMHg5MSwweGFlLDB4 ZmUsMHhjZiwweDg0LDB4OTksMHhjZSwweGIxLDB4NDAsCi0rCTB4NmQsMHg1ZCwweDMzLDB4Mjgs MHg4NCwweGY0LDB4OGMsMHg2MywweDRjLDB4N2UsMHhiZCwweDJjLAotKwkweDgwLDB4NzYsMHhl ZSwweDVhLDB4YWEsMHgxNSwweDA3LDB4MzEsMHhkOCwweGJiLDB4OGMsMHg2OSwKLSsJMHg5ZCww eDlkLDB4YmMsMHg3ZSwweDQ5LDB4YWUsMHhlYywweDM5LDB4NmIsMHhkMSwweDFmLDB4N2UKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZjMsMHhiOSwweDc1LDB4 OWMsMHhiZCwweDg4LDB4ZWEsMHhhMiwweDUwLDB4YWQsMHhkNiwweDE2LAotKwkweDFhLDB4MTIs MHgzYywweDg2LDB4NjgsMHhhZiwweDZmLDB4YmUsMHgxOSwweGYyLDB4ZWUsMHhjYywKLSsJMHhh NSwweDcwLDB4ODQsMHg1MywweDUwLDB4Y2IsMHg5ZiwweDE0LDB4YTksMHhlNSwweGVlLDB4Yjks Ci0rCTB4NDgsMHg0NSwweDQwLDB4ZTIsMHhjNywweGM5LDB4OWEsMHg3NCwweGZmLDB4OGMsMHg5 OSwweDFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MmUs MHhmMiwweDQ1LDB4NGMsMHg2MiwweDJlLDB4MGEsMHhiOSwweDZiLDB4YTIsMHhmZCwweDU2LAot KwkweDc5LDB4NjAsMHg5MywweGNmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PQotKwl7Ci0rCTB4YWYsMHg2OSwweDIwLDB4ZTksMHgzYiwweDM3LDB4OWQsMHgzZiwweGI0LDB4 ODAsMHgwMiwweDdhLAotKwkweDI1LDB4N2QsMHhiOCwweGRlLDB4NzEsMHhjNSwweDA2LDB4MGMs MHhiNCwweGUyLDB4OGYsMHgzNSwKLSsJMHhkOCwweDE0LDB4MGQsMHg3ZiwweDc2LDB4NjMsMHg0 ZSwweGI1LDB4ZWUsMHhlOSwweDZmLDB4MzQsCi0rCTB4YzcsMHg1ZiwweDU2LDB4MTQsMHg0YSww eGU4LDB4NzMsMHg5NSwweDViLDB4MWMsMHhiOSwweGNiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhlNSwweGIwLDB4MmUsMHg3ZSwweDUyLDB4MzAsMHhlMyww eDYzLDB4ODIsMHhiNiwweDQ0LDB4ZDMsCi0rCTB4MjUsMHgxOSwweDA1LDB4MjQsMHg5YSwweDlm LDB4NWYsMHgyNywweDZhLDB4MjksMHhhYiwweGZhLAotKwkweDA3LDB4YTIsMHg0MiwweDBmLDB4 YzUsMHhhOCwweDk0LDB4N2MsMHgxNywweDdiLDB4ODUsMHg4MywKLSsJMHgwYywweDI1LDB4MGUs MHg2MywweDBiLDB4ZTksMHgxMiwweDYwLDB4Y2QsMHhlZiwweDgwLDB4MGYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDVlLDB4ZjIsMHgyNiwweGVmLDB4OWYsMHg1 OCwweDVkLDB4ZDUsMHg0YSwweDEwLDB4ZmUsMHhhNywKLSsJMHgyZCwweDVmLDB4NGEsMHg0Ngot Kwl9OwotKwotKwotKy8qIEFFUy0yNTYgbm8gZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRb XSA9Ci0rCXsKLSsJMHhmYiwweGNmLDB4MWIsMHg2MSwweDE2LDB4ODksMHg3OCwweDIzLDB4ZjUs MHhkOCwweDk2LDB4ZTMsCi0rCTB4NGUsMHg2NCwweDBiLDB4MjksMHg5YSwweDNmLDB4ZjgsMHhh NSwweGVkLDB4ZjIsMHhmZSwweGRiLAotKwkweDE2LDB4Y2EsMHg3ZiwweDEwLDB4ZmEsMHg1ZSww eDE4LDB4NzYsMHgyYywweDYzLDB4NWUsMHg5NiwKLSsJMHhjZiwweGIzLDB4ZDYsMHhmYywweGFm LDB4OTksMHgzOSwweDI4LDB4OWMsMHg2MSwweGU4LDB4YjMKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX25vbmNlW10g PQotKwl7Ci0rCTB4MTIsMHg5NiwweGYwLDB4NTIsMHhmMywweDhkLDB4ODEsMHhjZiwweGRlLDB4 ODYsMHhmMiwweDk5LAotKwkweDQzLDB4OTYsMHhiOSwweGYwCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg2MywweDBkLDB4NzgsMHhmNSwweDkwLDB4OGUs MHgzMiwweDQ3LDB4YjAsMHg0ZCwweDM3LDB4NjAsCi0rCTB4MDksMHg5NiwweGJjLDB4YmYsMHg5 NywweDdhLDB4NjIsMHgxNCwweDQ1LDB4YmQsMHg4ZCwweGNjLAotKwkweDY5LDB4ZmIsMHgwMyww eGUxLDB4ODAsMHgxYywweGM3LDB4ZTIsMHgyYSwweGY5LDB4MzcsMHgzZiwKLSsJMHg2NiwweDRk LDB4NjIsMHhkOSwweDEwLDB4ZTAsMHhhZCwweGM4LDB4OWEsMHhmMCwweGE4LDB4NmQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDM2LDB4YzYsMHgxMywweDYwLDB4 YmIsMHgxNCwweGFkLDB4MjIsMHhiMCwweDM4LDB4YWMsMHhhNiwKLSsJMHgxOCwweDE2LDB4OTMs MHgyNSwweDg2LDB4YjcsMHhkYywweGRjLDB4MzYsMHg5OCwweDJiLDB4ZjksCi0rCTB4NjgsMHgz MywweGQzLDB4YzYsMHhmZiwweGNlLDB4OGQsMHgxNSwweDU5LDB4ODIsMHg3NiwweGVkLAotKwkw eDZmLDB4OGQsMHg0OSwweDc0LDB4MmYsMHhkYSwweGRjLDB4MWYsMHgxNywweGQwLDB4ZGUsMHgx NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDE2LDB4MmYsMHg4 ZSwweDNmLDB4MjEsMHg3YSwweDFjLDB4MjAsMHg1NiwweGQxLDB4OTIsMHhmNiwKLSsJMHhkMiww eDI1LDB4NzUsMHgwZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0r CTB4OTEsMHg3OSwweDc2LDB4ZWUsMHhlMCwweGNmLDB4OWUsMHhjMiwweGQ1LDB4ZDQsMHgyMyww eDliLAotKwkweDEyLDB4OGMsMHg3ZSwweDBhLDB4YjcsMHhkMiwweDhiLDB4ZDYsMHg3YywweGEz LDB4YzYsMHhlNSwKLSsJMHgwZSwweGFhLDB4YzcsMHg2YiwweGFlLDB4MGQsMHhmYSwweDUzLDB4 MDYsMHg3OSwweGExLDB4ZWQsCi0rCTB4NGQsMHg2YSwweDBlLDB4ZDgsMHg5ZCwweGJlLDB4MWIs MHgzMSwweDkzLDB4N2IsMHhlYywweGZiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9Ci0rCXsKLSsJMHhkMiwweDQ2LDB4NTAsMHgyMiwweDEwLDB4MTQsMHg2MywweGY3LDB4 ZWEsMHgwZiwweGI5LDB4N2UsCi0rCTB4MGQsMHhlMSwweDk0LDB4MDcsMHhhZiwweDA5LDB4NDQs MHgzMSwweGVhLDB4NjQsMHhhNCwweDE4LAotKwkweDViLDB4ZjksMHhkOCwweGMyLDB4ZmEsMHgw MywweDQ3LDB4YzUsMHgzOSwweDQzLDB4ZDUsMHgzYiwKLSsJMHg2MiwweDg2LDB4NjQsMHhlYSww eDJjLDB4NzMsMHg4YywweGFlLDB4OWQsMHg5OCwweDk4LDB4MjkKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0 aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg4YywweGFiLDB4MTgsMHhmOCwweGMzLDB4ZWMsMHgx OCwweDVjLDB4YjMsMHgxZSwweDlkLDB4YmUsCi0rCTB4M2YsMHgwMywweGI0LDB4MDAsMHg5OCww eDlkLDB4YWUsMHhlYiwweGY0LDB4OTQsMHhmOCwweDQyLAotKwkweDhmLDB4ZTMsMHgzOSwweDA3 LDB4ZTEsMHhjOSwweGFkLDB4MGIsMHgxZiwweGVkLDB4YzAsMHhiYSwKLSsJMHhmNiwweGQxLDB4 ZWMsMHgyNywweDg2LDB4N2IsMHhkNiwweDU1LDB4OWIsMHg2MCwweGE1LDB4YzYKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGVmLDB4ZDIsMHhkOCwweDVjLDB4ZGMsMHg2 MiwweDI1LDB4OWYsMHhhYSwweDFlLDB4MmMsMHg2NywKLSsJMHhmNiwweDAyLDB4MzIsMHhlMgot Kwl9OwotKwotKwotKy8qIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4ZDIs MHgzNiwweGE1LDB4MjcsMHgzMSwweDczLDB4ZGQsMHgxMSwweDRmLDB4OTMsMHhiZCwweGUyLAot KwkweDMxLDB4YTUsMHg5MSwweDEzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtdID0KLSsJewotKwkweGI1LDB4YjMs MHg2MCwweGVmLDB4ZjcsMHg2MywweDMxLDB4ZjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0KLSsJewotKwkweGQ0LDB4YmIsMHgwMiwweDEwLDB4YjIsMHg3MSwweGRiLDB4ODEsMHhk NiwweGYwLDB4NDIsMHg2MCwKLSsJMHhkYSwweGVhLDB4NzcsMHg1MgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4NGQsMHhkMiwweDZjLDB4ODcsMHhmYiwweDJjLDB4NGYsMHhh NiwweDhkLDB4MTYsMHg2MywweDIyLAotKwkweDZhLDB4NTEsMHhlMywweGY4Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRy b3B5aW5wdXRwcltdID0KLSsJewotKwkweGM5LDB4ODMsMHg5ZSwweDE2LDB4ZjYsMHgxYywweDBm LDB4YjIsMHhlYywweDYwLDB4MzEsMHhhOSwKLSsJMHhjYiwweGE5LDB4MzYsMHg3YQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJf aW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGE4LDB4MTMsMHg0ZiwweGY0LDB4MzEsMHgw MiwweDQ0LDB4ZTMsMHhkMywweDNkLDB4NjEsMHg5ZSwKLSsJMHhlNSwweGM2LDB4M2UsMHg4OSww eGI1LDB4OWIsMHgwZiwweDM1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4 ZjksMHhlOCwweGQyLDB4NzIsMHgxMywweDM0LDB4OTUsMHg2ZiwweDE1LDB4NDksMHg0NywweDk5 LAotKwkweDE2LDB4MDMsMHgxOSwweDQ3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsK LSsJMHg0ZSwweDhjLDB4NDksMHg5YiwweDRhLDB4NWMsMHg5YiwweDljLDB4M2EsMHhlZSwweGZi LDB4ZDIsCi0rCTB4YWUsMHhjZCwweDhjLDB4YzQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDUwLDB4YjQsMHhiNCwweGNkLDB4NjgsMHg1NywweGZjLDB4MmUsMHhjMSwweDUyLDB4 Y2MsMHhmNiwKLSsJMHg2OCwweGE0LDB4ODEsMHhlZCwweDdlLDB4ZTQsMHgxZCwweDg3Ci0rCX07 Ci0rCi0rCi0rLyogU0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhhOSwweDQ3 LDB4MWIsMHgyOSwweDJkLDB4MWMsMHgwNSwweGRmLDB4NzYsMHhkMCwweDYyLDB4ZjksCi0rCTB4 ZTIsMHg3ZiwweDRjLDB4N2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX25vbmNlW10gPQotKwl7Ci0rCTB4NTMsMHgyMywweDI0LDB4 ZTMsMHhlYywweDBjLDB4NTQsMHgxNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7 Ci0rCTB4N2EsMHg4NywweGExLDB4YWMsMHgxYywweGZkLDB4YWIsMHhhZSwweGY3LDB4ZDYsMHhm YiwweDc2LAotKwkweDI4LDB4ZWMsMHg2ZCwweGNhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHhmYywweDkyLDB4MzUsMHhkNiwweDdlLDB4YjcsMHgyNCwweDY1LDB4ZmQsMHgxMiww eDI3LDB4MzUsCi0rCTB4YzAsMHg3MiwweGNhLDB4MjgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHg1NywweDg4LDB4ODIsMHhlNSwweDI1LDB4YTUsMHgyYywweDRhLDB4MDYsMHgy MCwweDZjLDB4NzIsCi0rCTB4NTUsMHg2MSwweGRkLDB4OTAsMHg3MSwweDlmLDB4OTUsMHhlYQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NjksMHhhNSwweDQwLDB4NjIsMHg5 OCwweDQ3LDB4NTYsMHg3MywweDRhLDB4OGYsMHg2MCwweDk2LAotKwkweGQ2LDB4OTksMHgyNyww eGVkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhlNSwweDQwLDB4NGUs MHhiZCwweDUwLDB4MDAsMHhmNSwweDE1LDB4YTYsMHhlZSwweDQ1LDB4ZGEsCi0rCTB4ODQsMHgz ZCwweGQ0LDB4YzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgxMSwweDUxLDB4 MTQsMHhmMCwweDA5LDB4MWIsMHg0ZSwweDU2LDB4MGQsMHhlOSwweGY2LDB4MWUsCi0rCTB4NTIs MHg2NSwweGNkLDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGExLDB4OWMsMHg5 NCwweDZlLDB4MjksMHhlMSwweDMzLDB4MGQsMHgzMiwweGQ2LDB4YWEsMHhjZSwKLSsJMHg3MSww eDNmLDB4NTIsMHg3MiwweDhiLDB4NDIsMHhhOCwweGQ3Ci0rCX07Ci0rCi0rCi0rLyogU0hBLTIy NCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTIsMHg2OSwweDMyLDB4NGYsMHg4 MywweGE2LDB4ZjUsMHgxNCwweGUzLDB4NDksMHgzZSwweDc1LAotKwkweDNlLDB4ZGUsMHhhZCww eGExLDB4MjksMHhjMywweGYzLDB4MTksMHgyMCwweGI1LDB4NGMsMHhkOQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9ub25j ZVtdID0KLSsJewotKwkweDZhLDB4NzgsMHhkMCwweGViLDB4YmIsMHg1YSwweGYwLDB4ZWUsMHhl OCwweGMzLDB4YmEsMHg3MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsK LSsJMHhkNSwweGI4LDB4YjYsMHhiYywweGMxLDB4NWIsMHg2MCwweDMxLDB4M2MsMHhmNSwweGU1 LDB4YzAsCi0rCTB4OGUsMHg1MiwweDdhLDB4YmQsMHhlYSwweDQ3LDB4YTksMHg1ZiwweDhmLDB4 ZjksMHg4YiwweGFlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDFmLDB4 NTUsMHhlYywweGFlLDB4MTYsMHgxMiwweDg0LDB4YmEsMHg4NCwweDE2LDB4MTksMHg4OCwKLSsJ MHg4ZSwweGI4LDB4MzMsMHgyNSwweDU0LDB4ZmYsMHhjYSwweDc5LDB4YWYsMHgwNywweDI1LDB4 NTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg5MiwweGEzLDB4MzIsMHhh OCwweDlhLDB4MGEsMHg1OCwweDdjLDB4MWQsMHg1YSwweDdlLDB4ZTEsCi0rCTB4YjIsMHg3Myww eGFiLDB4MGUsMHgxNiwweDc5LDB4MjMsMHhkMywweDI5LDB4ODksMHg4MSwweGUxCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3By X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhmMywweDM4LDB4OTEsMHg0MCwweDM3LDB4 N2EsMHg1MSwweDcyLDB4NDIsMHg3NCwweDc4LDB4MGEsCi0rCTB4NjksMHhmZCwweGE2LDB4NDQs MHg0MywweDQ1LDB4NmMsMHgwYywweDVhLDB4MTksMHhmZiwweGYxLAotKwkweDU0LDB4NjAsMHhl ZSwweDZhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3NSwweGYzLDB4 MDQsMHgyNSwweGRkLDB4MzYsMHhhOCwweDM3LDB4NDYsMHhhZSwweDBjLDB4NTIsCi0rCTB4MDUs MHg3OSwweDRjLDB4MjYsMHhkYiwweGU5LDB4NzEsMHgxNiwweDRjLDB4MGEsMHhmMiwweDYwCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweGVhLDB4YzUsMHgwMywweDBhLDB4 NGYsMHhiMCwweDM4LDB4OGQsMHgyMywweGQ0LDB4YzgsMHg3NywKLSsJMHhlMiwweDZkLDB4OWMs MHgwYiwweDQ0LDB4ZjcsMHgyZCwweDViLDB4YmYsMHg1ZCwweDJhLDB4MTEKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NjAsMHg1MCwweDJiLDB4ZTcsMHg4NiwweGQ4LDB4MjYs MHg3MywweGUzLDB4MWQsMHg5NSwweDIwLAotKwkweGIzLDB4MmMsMHgzMiwweDFjLDB4ZjUsMHhj ZSwweDU3LDB4YTYsMHg2NywweDJiLDB4ZGMsMHg0ZSwKLSsJMHhkZCwweDExLDB4NGMsMHhjNAot Kwl9OwotKwotKwotKy8qIFNIQS0yMjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkw eGIyLDB4MWMsMHg3NywweDRkLDB4ZjYsMHhkMywweGI2LDB4NDAsMHhiNywweDMwLDB4M2UsMHgy OSwKLSsJMHhiMCwweDg1LDB4MWMsMHhiZSwweDRhLDB4ZWEsMHg2YiwweDVhLDB4YjUsMHg4YSww eDk3LDB4ZWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyMjRfbm9uY2VbXSA9Ci0rCXsKLSsJMHg0MiwweDAyLDB4MGEsMHgxYywweDk4 LDB4OWEsMHg3NywweDllLDB4OWYsMHg4MCwweGJhLDB4ZTAKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQotKwl7Ci0rCTB4OTgsMHhiOCwweDA0LDB4NDEsMHhmYywweGMxLDB4NWQsMHhj NSwweGU5LDB4YjksMHgwOCwweGRhLAotKwkweGY5LDB4ZmEsMHgwZCwweDkwLDB4Y2UsMHhkZiww eDFkLDB4MTAsMHhhOSwweDhkLDB4NTAsMHgwYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHg5YSwweDhkLDB4MzksMHg0OSwweDQyLDB4ZDUsMHgwYiwweGFlLDB4ZTEsMHhhZiww eGI3LDB4MDAsCi0rCTB4MDIsMHhmYSwweDk2LDB4YjEsMHhhNSwweDFkLDB4MmQsMHgyNSwweDc4 LDB4ZWUsMHg4MywweDNmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlNCww eGY1LDB4NTMsMHg3OSwweDVhLDB4OTcsMHg1OCwweDA2LDB4MDgsMHhiYSwweDdiLDB4ZmEsCi0r CTB4ZjAsMHg4MywweDA1LDB4OGMsMHgyMiwweGMwLDB4YzksMHhkYiwweDE1LDB4ZTcsMHhkZSww eDIwLAotKwkweDU1LDB4MjIsMHg5YSwweGFkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0K LSsJewotKwkweDY3LDB4MDksMHg0OCwweGFhLDB4MDcsMHgxNiwweDk5LDB4ODksMHg3ZiwweDZk LDB4YTAsMHhlNSwKLSsJMHg4ZiwweGRmLDB4YmMsMHhkYiwweGZlLDB4ZTUsMHg2YywweDdhLDB4 OTUsMHg0YSwweDY2LDB4MTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0r CTB4MGYsMHg0YiwweDFjLDB4NmYsMHhiNywweGUzLDB4NDcsMHhlNSwweDVkLDB4N2QsMHgzOCww eGQ2LAotKwkweDI4LDB4OWIsMHhlYiwweDU1LDB4NjMsMHgwOSwweDNlLDB4N2MsMHg1NiwweGVh LDB4ZjgsMHgxOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MmQsMHgyNiww eDdjLDB4MzcsMHhlNCwweDdhLDB4MjgsMHg1ZSwweDVhLDB4M2MsMHhhZiwweDNkLAotKwkweDVh LDB4OGUsMHg1NSwweGEyLDB4MWEsMHg2ZSwweGMwLDB4ZTUsMHhmNiwweDIxLDB4ZDMsMHhmNgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTIyNF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZCwweDgzLDB4MzUsMHhkZiwweDY3LDB4 YTksMHhmYywweDE3LDB4ZGEsMHg3MCwweGNjLDB4OGIsCi0rCTB4N2YsMHg3NywweGFlLDB4YTIs MHg1ZiwweGI5LDB4N2UsMHg3NCwweDRjLDB4MjYsMHhjMSwweDdhLAotKwkweDNiLDB4YTcsMHg1 YywweDkzCi0rCX07Ci0rCi0rCi0rLyogU0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQot Kwl7Ci0rCTB4Y2UsMHg0OSwweDAwLDB4N2EsMHg1NiwweGUzLDB4NjcsMHg4ZiwweGUxLDB4YjYs MHhhNywweGQ0LAotKwkweDRmLDB4MDgsMHg3YSwweDFiLDB4MDEsMHhmNCwweGZhLDB4NmIsMHhl ZiwweGI3LDB4ZTUsMHhlYiwKLSsJMHgwNywweDNkLDB4MTEsMHgwZCwweGM4LDB4ZWEsMHgyYiww eGZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NzMsMHg0MSwweGM4LDB4OTIsMHg5NCww eGUyLDB4YzUsMHg1ZiwweDkzLDB4ZmQsMHgzOSwweDVkLAotKwkweDJiLDB4OTEsMHg0ZCwweDM4 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDUwLDB4NmQsMHgw MSwweDAxLDB4MDcsMHg1YSwweDgwLDB4MzUsMHg3YSwweDU2LDB4MWEsMHg1NiwKLSsJMHgyZiww eDlhLDB4MGIsMHgzNSwweGIyLDB4YjEsMHhjOSwweGU1LDB4Y2EsMHg2OSwweDYxLDB4NDgsCi0r CTB4ZmYsMHhmYiwweDBmLDB4ZDksMHg0YiwweDc5LDB4MWQsMHhiYQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlv bmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgyMCwweGI4LDB4ZGYsMHg0NCwweDc3LDB4NWEsMHhiOCww eGQzLDB4YmYsMHhmNiwweGNmLDB4YWMsCi0rCTB4NWUsMHhhNiwweDk2LDB4NjIsMHg3MywweDQ0 LDB4NDAsMHg0YSwweDMwLDB4ZmIsMHgzOCwweGE1LAotKwkweDdiLDB4MGQsMHhlNCwweDBkLDB4 YzYsMHhlNCwweDlhLDB4MWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgw NCwweGM0LDB4NjUsMHhmNCwweGQzLDB4YmYsMHg4MywweDRiLDB4YWIsMHhjOCwweDQxLDB4YTgs Ci0rCTB4YzIsMHhlMCwweDQ0LDB4NjMsMHg3NywweDRjLDB4NmYsMHg2YywweDQ5LDB4NDYsMHhm ZiwweDk0LAotKwkweDE3LDB4ZWEsMHhlNiwweDFhLDB4OWQsMHg1ZSwweDY2LDB4NzgKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf cHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDA3LDB4NGQsMHhhYywweDliLDB4ODYs MHhjYSwweDRhLDB4YWEsMHg2ZSwweDdhLDB4MDMsMHhhMiwKLSsJMHg1ZCwweDEwLDB4ZWEsMHgw YiwweGY5LDB4ODMsMHhjYywweGQxLDB4ZmMsMHhlMiwweDA3LDB4YzcsCi0rCTB4MDYsMHgzNCww eDYwLDB4NmYsMHg4MywweDk0LDB4OTksMHg3NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PQotKwl7Ci0rCTB4ODksMHg0ZSwweDQ1LDB4OGMsMHgxMSwweGY5LDB4YmMsMHg1YiwweGFjLDB4 NzQsMHg4YiwweDRiLAotKwkweDVmLDB4ZjcsMHgxOSwweGYzLDB4ZjUsMHgyNCwweDU0LDB4MTQs MHhkMSwweDE1LDB4YjEsMHg0MywKLSsJMHgxMiwweGE0LDB4NWYsMHhkNCwweGVjLDB4ZmMsMHhj ZCwweDA5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDBlLDB4ZWIsMHgx ZiwweGQ3LDB4ZmMsMHhkMSwweDlkLDB4ZDQsMHgwNSwweDM2LDB4OGIsMHhiMiwKLSsJMHhmYiww eGU0LDB4ZjQsMHg1MSwweDBjLDB4ODcsMHg5YiwweDAyLDB4NDQsMHhkNSwweDkyLDB4NGQsCi0r CTB4NDQsMHhmZSwweDFhLDB4MDMsMHg0MywweDU2LDB4YmQsMHg4NgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHgwMiwweGFhLDB4YjYsMHgxZCwweDdlLDB4MmEsMHg0MCwweDAz LDB4NjksMHgyZCwweDQ5LDB4YTMsCi0rCTB4NDEsMHhlNywweDQ0LDB4MGIsMHhhZiwweDdiLDB4 ODUsMHhlNCwweDVmLDB4NTMsMHgzYiwweDY0LAotKwkweGJjLDB4ODksMHhjOCwweDgyLDB4ZDQs MHg3OCwweDM3LDB4YTIKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMjU2IE5vIFBSICAqLwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5w dXRbXSA9Ci0rCXsKLSsJMHg1YiwweDFiLDB4ZWMsMHg0ZCwweGE5LDB4MzgsMHg3NCwweDVhLDB4 MzQsMHgwYiwweDdiLDB4YzUsCi0rCTB4ZTUsMHhkNywweDY2LDB4N2MsMHhiYywweDgyLDB4Yjks MHgwZSwweDJkLDB4MWYsMHg5MiwweGQ3LAotKwkweGMxLDB4YmMsMHg2NywweDY5LDB4ZWMsMHg2 YiwweDAzLDB4M2MKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhNCwweDBjLDB4ZDgsMHg5Yyww eDYxLDB4ZDgsMHhjMywweDU0LDB4ZmUsMHg1MywweGM5LDB4ZTUsCi0rCTB4NWQsMHg2ZiwweDZk LDB4MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MjIsMHg1ZSww eDYyLDB4OTMsMHg0MiwweDgzLDB4NzgsMHgyNCwweGQ4LDB4NDAsMHg4YywweGRlLAotKwkweDZm LDB4ZjksMHhhNCwweDdhLDB4YzUsMHhhNywweDNiLDB4ODgsMHhhMywweGVlLDB4NDIsMHgyMCwK LSsJMHhmZCwweDYxLDB4NTYsMHhjNiwweDRjLDB4MTMsMHg0MSwweDljCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9u YWxpbnB1dFtdID0KLSsJewotKwkweGJmLDB4NzQsMHg1YiwweGY2LDB4YzUsMHg2NCwweDVlLDB4 OTksMHgzNCwweDhmLDB4YmMsMHhhNCwKLSsJMHhlMiwweGJkLDB4ZDgsMHg4NSwweDI2LDB4Mzcs MHhlYSwweGJhLDB4NGYsMHhmMiwweDlhLDB4OWEsCi0rCTB4NjYsMHhmYywweGRmLDB4NjMsMHgy NiwweDI2LDB4MTksMHg4NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YjMs MHhjNiwweDA3LDB4MDcsMHhkNiwweDc1LDB4ZjYsMHgyYiwweGQ2LDB4MjEsMHg5NiwweGYxLAot KwkweGFlLDB4ZGIsMHgyYiwweGFjLDB4MjUsMHgyYSwweGFlLDB4YWUsMHg0MSwweDcyLDB4MDMs MHg1ZSwKLSsJMHhiZiwweGQzLDB4NjQsMHhiYywweDU5LDB4ZjksMHhjMCwweDc2Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGJmLDB4MjAsMHgzMywweDU2LDB4MjksMHhh OCwweDM3LDB4MDQsMHgxZiwweDc4LDB4MzQsMHgzZCwKLSsJMHg4MSwweDJhLDB4YzksMHg4Niww eGM2LDB4N2EsMHgyZiwweDg4LDB4NWUsMHhkNSwweGJlLDB4MzQsCi0rCTB4NDYsMHgyMCwweGE0 LDB4MzUsMHhlYiwweGM3LDB4ZTIsMHg5ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 Ci0rCXsKLSsJMHg5YiwweGFlLDB4MmQsMHgyZCwweDYxLDB4YTQsMHg4OSwweGViLDB4NDMsMHg0 NiwweGE3LDB4ZGEsCi0rCTB4ZWYsMHg0MCwweGNhLDB4NGEsMHg5OSwweDExLDB4NDEsMHhkYyww eDVjLDB4OTQsMHhlOSwweGFjLAotKwkweGQ0LDB4ZDAsMHhlNiwweGJkLDB4ZmIsMHgwMywweDlj LDB4YTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDIzLDB4YWEsMHgwYyww eGJkLDB4MjgsMHgzMywweGUyLDB4NTEsMHhmYywweDcxLDB4ZDIsMHgxNSwKLSsJMHgxZiwweDc2 LDB4ZmQsMHgwZCwweGUwLDB4YjcsMHhiNSwweDg0LDB4NzUsMHg1YiwweGJlLDB4ZjMsCi0rCTB4 NWMsMHhjYSwweGM1LDB4MzAsMHhmMiwweDc1LDB4MWYsMHhkYQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHg5MCwweDNjLDB4YzEsMHgxMCwweDhjLDB4MTIsMHgwMSwweGM2LDB4YTYs MHgzYSwweDBmLDB4NGQsCi0rCTB4YjYsMHgzYSwweDRmLDB4NDEsMHg5YywweDYxLDB4NzUsMHg4 NCwweGU5LDB4NzQsMHg3NSwweGZkLAotKwkweGZlLDB4ZjIsMHgxZiwweDQzLDB4ZDgsMHg1ZSww eDI0LDB4YTMKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMzg0IFBSICAqLwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9 Ci0rCXsKLSsJMHg3MSwweDlkLDB4YjIsMHg1YSwweDcxLDB4NmQsMHgwNCwweGU5LDB4MWUsMHhj NywweDkyLDB4MjQsCi0rCTB4NmUsMHgxMiwweDMzLDB4YTksMHg1MiwweDY0LDB4MzEsMHhlZiww eDcxLDB4ZWIsMHgyMiwweDU1LAotKwkweDI4LDB4OTcsMHgwNiwweDZhLDB4YzAsMHgwYywweGEw LDB4N2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhmNSwweDBkLDB4ZmEsMHhiMCwweGVj LDB4NmEsMHg3YywweGQ2LDB4YmQsMHg5YiwweDA1LDB4ZmQsCi0rCTB4MzgsMHgzZSwweDJlLDB4 NTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NzQsMHhhYyww eDdlLDB4NmQsMHhiMSwweGE0LDB4ZTcsMHgyMSwweGQxLDB4MWUsMHg2ZSwweDk2LAotKwkweDZk LDB4NGQsMHg1MywweDQ2LDB4ODIsMHg5NiwweDZlLDB4Y2YsMHhhYSwweDgxLDB4OGQsMHg3ZCwK LSsJMHg5ZSwweGUxLDB4MGYsMHgxNSwweGVhLDB4NDEsMHhiZiwweGUzCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGRhLDB4OTUsMHhkNCwweGQwLDB4YjgsMHgxMSwweGQz LDB4NDksMHgyNywweDVkLDB4YTksMHgzOSwKLSsJMHg2OCwweGYzLDB4YTgsMHhlOSwweDVkLDB4 MTksMHg4YSwweDJiLDB4NjYsMHhlOCwweDY5LDB4MDYsCi0rCTB4N2MsMHg5ZSwweDAzLDB4YTEs MHg4YiwweDI2LDB4MmQsMHg2ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkw eDQ5LDB4ZGYsMHg0NCwweDAwLDB4ZTQsMHgxYywweDc1LDB4MGIsMHgyNiwweDVhLDB4NTksMHg2 NCwKLSsJMHgxZiwweDRlLDB4YjEsMHhiMiwweDEzLDB4ZjEsMHgyMiwweDRlLDB4YjQsMHg2ZCww eDlhLDB4Y2MsCi0rCTB4YTAsMHg0OCwweGU2LDB4Y2YsMHgxZCwweGQxLDB4OTIsMHgwZAotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YzgsMHg1MiwweGFlLDB4YmYsMHgw NCwweDNjLDB4MjcsMHhiNywweDc4LDB4MTgsMHhhYSwweDhmLAotKwkweGZmLDB4Y2YsMHhhNCww eGYxLDB4Y2MsMHhlNywweDY4LDB4ZmEsMHgyMiwweGEyLDB4MTMsMHg0NSwKLSsJMHhlOCwweGRk LDB4ODcsMHhlNiwweGYyLDB4NmUsMHhkZCwweGM3LDB4NTIsMHg5MCwweDlmLDB4N2IsCi0rCTB4 ZmEsMHg2MSwweDJkLDB4OWQsMHg5ZSwweGNmLDB4OTgsMHhhYywweDUyLDB4NDAsMHhjZSwweGFm Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg2MSwweDdjLDB4MDMsMHg5 YSwweDNlLDB4NTAsMHg1NywweDYwLDB4YzUsMHg4MywweGM5LDB4YjIsCi0rCTB4ZDEsMHg4Nyww eDg1LDB4NjYsMHg5MiwweDVkLDB4ODQsMHgwZSwweDUzLDB4ZmIsMHg3MCwweDAzLAotKwkweDcy LDB4ZmQsMHhiYSwweGFlLDB4OWMsMHg4ZiwweGY4LDB4MTgKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0 cHIyW10gPQotKwl7Ci0rCTB4ZjgsMHhlYiwweDg5LDB4YjEsMHg4ZCwweDc4LDB4YmUsMHgyMSww eGUwLDB4YmIsMHg5ZCwweGI3LAotKwkweDk1LDB4MGUsMHhkOSwweDQ2LDB4MGMsMHg4YywweGUy LDB4NjMsMHhiNywweDlkLDB4NjcsMHg5MCwKLSsJMHhiZCwweGM3LDB4MGIsMHhhNSwweGNlLDB4 YjIsMHg2NSwweDgxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGU2LDB4OWYs MHhmZSwweDY4LDB4ZDYsMHhiNSwweDc5LDB4ZjEsMHgwNiwweDVmLDB4YTMsMHhiYiwKLSsJMHgy MywweDg1LDB4ZDgsMHhmMCwweDI5LDB4NWEsMHg2OCwweDllLDB4ZjUsMHhmNCwweGE2LDB4MTIs Ci0rCTB4ZTAsMHg5YSwweGUyLDB4YWMsMHgwMCwweDFkLDB4OTgsMHgyNiwweGZjLDB4NTMsMHg5 NSwweDUzLAotKwkweGU0LDB4M2UsMHgxNywweGQ1LDB4MDgsMHgwYiwweDcwLDB4M2QsMHg2Nyww eDk5LDB4YWMsMHg2NgotKwl9OwotKwotKwotKy8qIFNIQS0zODQgTm8gUFIgICovCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1 dFtdID0KLSsJewotKwkweDA3LDB4MTUsMHgyNywweDJhLDB4YWYsMHg3NCwweDI0LDB4MzcsMHhi YywweGQ1LDB4MTQsMHg2OSwKLSsJMHhjZSwweDExLDB4ZmYsMHhhMiwweDZiLDB4YjgsMHgwNSww eDY3LDB4MzQsMHhmOCwweGJkLDB4NmQsCi0rCTB4NmEsMHhjYywweGNkLDB4NjAsMHhhMywweDY4 LDB4Y2EsMHhmNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9ub25jZVtdID0KLSsJewotKwkweDcwLDB4MTcsMHhjMiwweDViLDB4 NWQsMHgyMiwweDBiLDB4MDYsMHgxNSwweDU0LDB4NzgsMHg3NywKLSsJMHg0NCwweGFmLDB4MmYs MHgwOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg4OSwweDM5LDB4 MjgsMHhiMCwweDYwLDB4ZWIsMHgzZCwweGRjLDB4NTUsMHg3NSwweDg2LDB4ZWIsCi0rCTB4YWUs MHhhMiwweDhmLDB4YmMsMHgxYiwweDc1LDB4ZDQsMHhlMSwweDBmLDB4YWEsMHgzOCwweGNhLAot KwkweDYyLDB4OGIsMHhjYiwweDJjLDB4MjYsMHhmNiwweGJjLDB4YjEKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4MzAsMHgyYiwweDQyLDB4MzUsMHhlZiwweGRhLDB4NDAsMHg1 NSwweDI4LDB4YzYsMHg5NSwweGZiLAotKwkweDU0LDB4MDEsMHg2MiwweGQ3LDB4ODcsMHgxNCww eDQ4LDB4NmQsMHg5MCwweDRjLDB4YTksMHgwMiwKLSsJMHg1NCwweDQwLDB4MjIsMHhjOCwweDY2 LDB4YTUsMHg0OCwweDQ4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4Miww eGM0LDB4YTEsMHg5YywweDIxLDB4ZDIsMHhlNywweGE1LDB4YTYsMHhmNiwweDVmLDB4MDQsCi0r CTB4NWMsMHhjNywweDMxLDB4OWQsMHg4ZCwweDU5LDB4NzQsMHg1MCwweDE5LDB4ODksMHgyZiww eDYzLAotKwkweGQ1LDB4YjcsMHg3ZSwweGViLDB4MTUsMHhlMywweDcwLDB4ODMsMHhhMSwweDI0 LDB4NTksMHhmYSwKLSsJMHgyYywweDU2LDB4ZjYsMHg4OCwweDNhLDB4OTIsMHg5MywweGExLDB4 ZmIsMHg3OSwweGMxLDB4N2EKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4 MzksMHhhNiwweGU4LDB4NWMsMHg4MiwweDE3LDB4NzEsMHgyNiwweDU3LDB4NGYsMHg5ZiwweGMy LAotKwkweDU1LDB4ZmYsMHg1YywweDliLDB4NTMsMHgxYSwweGQxLDB4NWYsMHhiYywweDYyLDB4 ZTQsMHgyNywKLSsJMHgyZCwweDMyLDB4ZjAsMHhlNCwweDUyLDB4OGMsMHhjNSwweDBjCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDhkLDB4Y2IsMHg4ZCwweGNlLDB4 MDgsMHhlYSwweDgwLDB4ZTgsMHg5YiwweDYxLDB4YTgsMHgwZiwKLSsJMHhhZiwweDQ5LDB4MjAs MHg5ZSwweDc0LDB4Y2IsMHg1NywweDgwLDB4NDIsMHhiMCwweDg0LDB4NWUsCi0rCTB4MzAsMHgy YSwweDY3LDB4MDgsMHhmNCwweGUzLDB4NDAsMHgyMgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10g PQotKwl7Ci0rCTB4N2MsMHg4ZiwweGMyLDB4YWUsMHgyMiwweDRhLDB4ZDYsMHhmNiwweDA1LDB4 YTQsMHg3YSwweGVhLAotKwkweGJiLDB4MjUsMHhkMCwweGI3LDB4NWEsMHhkNiwweGNmLDB4OWQs MHhmMywweDZjLDB4ZTIsMHhiMiwKLSsJMHg0ZSwweGI0LDB4YmQsMHhmNCwweGU1LDB4NDAsMHg4 MCwweDk0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMzg0X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDllLDB4N2UsMHhmYiwweDU5 LDB4YmIsMHhhYSwweDNjLDB4ZjcsMHhlMSwweGY4LDB4NzYsMHhkZCwKLSsJMHg2MywweDVmLDB4 YWYsMHgyMywweGQ2LDB4NjQsMHg2MSwweGMwLDB4OWEsMHgwOSwweDQ3LDB4YzksCi0rCTB4MzMs MHhkZiwweDZkLDB4NTUsMHg5MSwweDM0LDB4NzksMHg3MCwweGM0LDB4OTksMHg2ZSwweDU0LAot KwkweDA5LDB4NjQsMHgyMSwweDFhLDB4YmQsMHgxZSwweDgwLDB4NDAsMHgzNCwweGFkLDB4ZmEs MHhkNwotKwl9OwotKwotKwotKy8qIFNIQS01MTIgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJ ewotKwkweDEzLDB4ZjcsMHg2MSwweDc1LDB4NjUsMHgyOCwweGEyLDB4NTksMHgxMywweDVhLDB4 NGEsMHg0ZiwKLSsJMHg1NiwweDYwLDB4OGMsMHg1MywweDdkLDB4YjAsMHhiZCwweDA2LDB4NGYs MHhlZCwweGNjLDB4ZDIsCi0rCTB4YTIsMHhiNSwweGZkLDB4NWIsMHgzYSwweGFiLDB4ZWMsMHgy OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9wcl9ub25jZVtdID0KLSsJewotKwkweGJlLDB4YTMsMHg5MSwweDkzLDB4MWQsMHhj MywweDMxLDB4M2EsMHgyMywweDMzLDB4NTAsMHg2NywKLSsJMHg4OCwweGM3LDB4YTIsMHhjNAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxZiwweDU5LDB4NGQs MHg3YiwweGU2LDB4NDYsMHg5MSwweDQ4LDB4YzEsMHgyNSwweGZhLDB4ZmYsCi0rCTB4ODksMHgx MiwweDc3LDB4MzUsMHhkZiwweDNlLDB4ZjQsMHg4MCwweDVmLDB4ZDksMHhiMCwweDA3LAotKwkw eDIyLDB4NDEsMHhkZCwweDQ4LDB4NzgsMHg2YiwweDc3LDB4MmIKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4MzAsMHhmZiwweDYzLDB4NmYsMHhhYywweGQ5LDB4ODQsMHgz OSwweDZmLDB4ZTQsMHg5OSwweGNlLAotKwkweDkxLDB4N2QsMHg3ZSwweGM4LDB4NTgsMHhmMiww eDEyLDB4YzMsMHhiNiwweGFkLDB4ZGEsMHgyMiwKLSsJMHgwNCwweGEwLDB4ZDIsMHgyMSwweGZl LDB4ZjIsMHg5NSwweDFkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4NjQs MHg1NCwweDEzLDB4ZWMsMHg0ZiwweDc3LDB4ZGEsMHhiMiwweDkyLDB4MmUsMHg1MiwweDgwLAot KwkweDExLDB4MTAsMHhjMiwweGY4LDB4ZTYsMHhhNywweGNkLDB4NGIsMHhmYywweDMyLDB4MmUs MHg5ZSwKLSsJMHhlYiwweGJiLDB4YjEsMHhiZiwweDE1LDB4NWMsMHg3MywweDA4Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3By X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlZiwweDFlLDB4ZGMsMHgwYSwweGE0LDB4 MzYsMHg5MSwweDljLDB4M2QsMHgyNywweDk3LDB4NTAsCi0rCTB4OGQsMHgzNiwweDI5LDB4OGQs MHhjZSwweDZhLDB4MGMsMHhmNywweDIxLDB4YzAsMHg5MSwweGFlLAotKwkweDBjLDB4OTYsMHg3 MiwweGJkLDB4NTIsMHg4MSwweDU4LDB4ZmMsMHg2ZCwweGU1LDB4ZjcsMHhhNSwKLSsJMHhmZCww eDVkLDB4YTcsMHg1OCwweDY4LDB4YzgsMHg5OSwweDU4LDB4OGUsMHhjOCwweGNlLDB4OTUsCi0r CTB4MDEsMHg3ZCwweGZmLDB4YTQsMHhjOCwweGY3LDB4NjMsMHhmZSwweDVmLDB4NjksMHg4Myww eDUzLAotKwkweGUyLDB4YzYsMHg4YiwweGMzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 Ci0rCXsKLSsJMHhlNiwweDliLDB4YzQsMHg4OCwweDM0LDB4Y2EsMHhlYSwweDI5LDB4MmYsMHg5 OCwweDA1LDB4YTQsCi0rCTB4ZDMsMHhjMCwweDdiLDB4MTEsMHhlOCwweGJiLDB4NzUsMHhmMiww eGJkLDB4MjksMHhiNywweDQwLAotKwkweDI1LDB4N2YsMHhjMSwweGI3LDB4YjEsMHhmMSwweDI1 LDB4NjEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4MjMsMHg2ZCwweGZm LDB4ZGUsMHhmYiwweGQxLDB4YmEsMHgzMywweDE4LDB4ZTYsMHhiZSwweGI1LAotKwkweDQ4LDB4 NzcsMHg2ZCwweDdmLDB4YTcsMHhlMSwweDRkLDB4NDgsMHgxZSwweDNjLDB4YTcsMHgzNCwKLSsJ MHgxYSwweGM4LDB4NjAsMHhkYiwweDhmLDB4OTksMHgxNSwweDk5Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweDcwLDB4MjcsMHgzMSwweGRiLDB4OTIsMHg3MCwweDIxLDB4ZmUs MHgxNiwweGI2LDB4YzgsMHg1MSwKLSsJMHgzNCwweDg3LDB4NjUsMHhkMCwweDRlLDB4ZmQsMHhm ZSwweDY4LDB4ZWMsMHhhYywweGRjLDB4OTMsCi0rCTB4NDEsMHgzOCwweDkyLDB4OTAsMHhiNCww eDk0LDB4ZjksMHgwZCwweGE0LDB4ZjcsMHg0ZSwweDgwLAotKwkweDkyLDB4NjcsMHg0OCwweDQw LDB4YTcsMHgwOCwweGM3LDB4YmMsMHg2NiwweDAwLDB4ZmQsMHhmNywKLSsJMHg0YywweDhiLDB4 MTcsMHg2ZSwweGQxLDB4OGYsMHg5YiwweGYzLDB4NmYsMHhmNiwweDM0LDB4ZGQsCi0rCTB4Njcs MHhmNywweDY4LDB4ZGQKLSsJfTsKLSsKLSsKLSsvKiBTSEEtNTEyIE5vIFBSICAqLwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5w dXRbXSA9Ci0rCXsKLSsJMHhiNiwweDBiLDB4YjcsMHhiYywweDg0LDB4NTYsMHhmNiwweDEyLDB4 YWYsMHg0NSwweDY3LDB4MTcsCi0rCTB4N2MsMHhkMSwweGIyLDB4NzgsMHgyYiwweGEwLDB4ZjIs MHhiZSwweGI2LDB4NmQsMHg4YiwweDU2LAotKwkweGM2LDB4YmMsMHg0ZCwweGUxLDB4ZjcsMHhi ZSwweGNlLDB4YmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGE1MTJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg5ZCwweGVkLDB4YzAsMHhlNSww eDVhLDB4OTgsMHg2YSwweGNiLDB4NTEsMHg3ZCwweDc2LDB4MzEsCi0rCTB4NWEsMHg2NCwweGYw LDB4ZjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YzIsMHg2ZCww eGEzLDB4YzMsMHgwNiwweDc0LDB4ZTUsMHgwMSwweDVjLDB4MTAsMHgxNywweGM3LAotKwkweGFm LDB4ODMsMHg5ZCwweDU5LDB4OGQsMHgyZCwweDI5LDB4MzgsMHhjNSwweDU5LDB4NzAsMHg4YiwK LSsJMHg0NiwweDQ4LDB4MmQsMHhjZiwweDM2LDB4N2QsMHg1OSwweGMwCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9u YWxpbnB1dFtdID0KLSsJewotKwkweGVjLDB4OGMsMHhkNCwweGY3LDB4NjEsMHg2ZSwweDBkLDB4 OTUsMHg3OSwweGI3LDB4MjgsMHhhZCwKLSsJMHg1ZiwweDY5LDB4NzQsMHg1ZiwweDJkLDB4MzYs MHgwNiwweDhhLDB4NmIsMHhhYywweDU0LDB4OTcsCi0rCTB4YzQsMHhhMSwweDEyLDB4ODUsMHgw YSwweGRmLDB4NGIsMHgzNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ODQs MHgyZiwweDFmLDB4NjgsMHg2YSwweGEzLDB4YWQsMHgxZSwweGZiLDB4ZjQsMHgxNSwweGJkLAot KwkweGRlLDB4MzgsMHhkNCwweDMwLDB4ODAsMHg1MSwweGU5LDB4ZDMsMHhjNywweDIwLDB4ODgs MHhlOSwKLSsJMHhmNSwweGNjLDB4ZGYsMHg1NywweDVjLDB4NDcsMHgyZiwweDU3LDB4M2MsMHg1 ZiwweDEzLDB4NTYsCi0rCTB4Y2MsMHhjNSwweDRmLDB4ODQsMHhmOCwweDEwLDB4NDEsMHhkNSww eDdlLDB4NTgsMHg2ZSwweDE5LAotKwkweDE5LDB4OWUsMHhhZiwweGMyLDB4MjIsMHg1OCwweDQx LDB4NTAsMHg3OSwweGMyLDB4ZDgsMHgwNCwKLSsJMHgyOCwweGQ0LDB4MzksMHg5YQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9l bnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhmYSwweDdmLDB4NDYsMHg1MSwweDgzLDB4 NjIsMHg5OCwweDE2LDB4OWEsMHgxOSwweGEyLDB4NDksCi0rCTB4YTksMHhlNiwweDRhLDB4ZDgs MHg4NSwweGU3LDB4ZDQsMHgzYiwweDJjLDB4ODIsMHhjNSwweDgyLAotKwkweGJmLDB4MTEsMHhm OSwweDllLDB4YmMsMHhkMCwweDAxLDB4ZWUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10g PQotKwl7Ci0rCTB4YjksMHgxMiwweGUwLDB4NGYsMHhmNywweGE3LDB4YzQsMHhkOCwweGQwLDB4 OGUsMHg5OSwweDI5LAotKwkweDdjLDB4OWEsMHhlOSwweGNmLDB4YzQsMHg2YywweGY4LDB4YzMs MHhhNywweDQxLDB4ODMsMHhkNiwKLSsJMHgyZSwweGZhLDB4YjgsMHg1ZSwweDhlLDB4NmIsMHg3 OCwweDIwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhkNywweDA3LDB4NTIs MHhiOSwweDgzLDB4MmMsMHgwMywweDcxLDB4ZWUsMHhjOSwweGMwLDB4ODUsCi0rCTB4ZTEsMHg1 NywweGIyLDB4Y2QsMHgzYSwweGYwLDB4YzksMHgzNCwweDI0LDB4NDEsMHgxYywweDQyLAotKwkw eDk5LDB4YjIsMHg4NCwweGU5LDB4MTcsMHhkMiwweDc2LDB4OTIKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4MzYsMHgxNywweDVkLDB4OTgsMHgyYiwweDY1LDB4MjUsMHg4ZSwweGM4 LDB4MjksMHhkZiwweDI3LAotKwkweDA1LDB4MzYsMHgyNiwweDEyLDB4OGEsMHg2OCwweDc0LDB4 MjcsMHgzNywweGQ0LDB4N2YsMHgzMiwKLSsJMHhiMSwweDEyLDB4ZDYsMHg4NSwweDgzLDB4ZWIs MHgyZSwweGEwLDB4ZWQsMHg0YiwweGI1LDB4N2IsCi0rCTB4NmYsMHgzOSwweDNjLDB4NzEsMHg3 NywweDAyLDB4MTIsMHhjYywweDJjLDB4M2EsMHg4ZSwweDYzLAotKwkweGRmLDB4NGEsMHhiZCww eDZmLDB4NmUsMHgyZSwweGVkLDB4MGEsMHg4NSwweGE1LDB4MmYsMHhhMiwKLSsJMHg2OCwweGRl LDB4NDIsMHhiNQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTEgUFIgICovCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlp bnB1dFtdID0KLSsJewotKwkweDI2LDB4NWYsMHgzNiwweDE0LDB4ZmYsMHgzZCwweDgzLDB4ZmEs MHg3MywweDVlLDB4NzUsMHhkYywKLSsJMHgyYywweDE4LDB4MTcsMHgxYgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9u b25jZVtdID0KLSsJewotKwkweGM4LDB4ZTMsMHg1NywweGE1LDB4N2IsMHg3NCwweDg2LDB4NmUK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NmUsMHhkYiww eDBkLDB4ZmUsMHg3ZCwweGFjLDB4NzksMHhkMCwweGE1LDB4M2EsMHg0OCwweDg1LAotKwkweDgw LDB4ZTIsMHg3ZiwweDJhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkw eDMxLDB4Y2QsMHg1ZSwweDQzLDB4ZGMsMHhmYiwweDdhLDB4NzksMHhjYSwweDg4LDB4ZGUsMHgx ZiwKLSsJMHhkNywweGJiLDB4NDIsMHgwOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0K LSsJewotKwkweDdjLDB4MjMsMHg5NSwweDM4LDB4MDAsMHg5NSwweGMxLDB4NzgsMHgxZiwweDhm LDB4ZDcsMHg2MywKLSsJMHgyMywweDg3LDB4MmEsMHhlZAotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4YmIsMHgzNCwweGU3LDB4OTMsMHhhMywweDAyLDB4MmMsMHg0 YSwweGQwLDB4ODksMHhkYSwweDdmLAotKwkweGVkLDB4ZjQsMHg0YywweGRlLDB4MTcsMHhlYyww eGU1LDB4NmMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDQ5LDB4 YmMsMHgyZCwweDJjLDB4YjcsMHgzMiwweGNiLDB4MjAsMHhkZiwweGY1LDB4NzcsMHg1OCwKLSsJ MHhhMCwweDRiLDB4OTMsMHg2ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsK LSsJMHgzYywweGFhLDB4YjAsMHgyMSwweDQyLDB4YjAsMHhkZCwweDM0LDB4ZjAsMHgxNiwweDdm LDB4MGMsCi0rCTB4MGYsMHhmZiwweDJlLDB4YWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4OGUsMHhjYiwweGEzLDB4NjQsMHhiMiwweGI4LDB4MzMsMHg2YywweDY0LDB4 M2IsMHg3OCwweDE2LAotKwkweDk5LDB4MzUsMHhjOCwweDMwLDB4Y2IsMHgzZSwweGEwLDB4ZDgK LSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0xIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRbXSA9Ci0r CXsKLSsJMHgzMiwweDlhLDB4MmEsMHg4NywweDdiLDB4ODksMHg3YywweGY2LDB4Y2IsMHg5NSww eGQ1LDB4NDAsCi0rCTB4MTcsMHhmZSwweDQ3LDB4NzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfbm9uY2VbXSA9Ci0rCXsK LSsJMHgxNiwweGQ4LDB4ZTAsMHhjNywweDUyLDB4Y2YsMHg0YSwweDI1Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDM1LDB4MzUsMHhhOSwweGE1LDB4NDAsMHhi ZSwweDliLDB4ZDEsMHg1NiwweGRkLDB4NDQsMHgwMCwKLSsJMHg3MiwweGY3LDB4ZDMsMHg1ZQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgxYiwweDJjLDB4ODQsMHgyZCww eDRhLDB4ODksMHg4ZiwweDY5LDB4MTksMHhmMSwweGYzLDB4ZGIsCi0rCTB4YmIsMHhlMywweGFh LDB4ZWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGNmLDB4ZmEsMHg3 ZCwweDcyLDB4MGYsMHhlNiwweGM3LDB4OTYsMHhhMCwweDY5LDB4MzEsMHgxMSwKLSsJMHg5Yiww eDBiLDB4MWEsMHgyMCwweDFmLDB4M2YsMHhhYSwweGQxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KLSsJewotKwkweDkwLDB4NzUsMHgxNSwweDA0LDB4OTUsMHhmMSwweGJhLDB4ODEs MHgwYywweDM3LDB4OTQsMHg2ZiwKLSsJMHg4NiwweDUyLDB4NmQsMHg5YwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg1YiwweDQwLDB4YmEsMHg1ZiwweDE3LDB4 NzAsMHhmMCwweDRiLDB4ZGYsMHhjOSwweDk3LDB4OTIsCi0rCTB4NzksMHhjNSwweDgyLDB4MjgK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTFfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDk3LDB4YzgsMHg4MCwweDkw LDB4YjMsMHhhYSwweDZlLDB4NjAsMHhlYSwweDgzLDB4N2EsMHhlMywKLSsJMHg4YSwweGNhLDB4 YTQsMHg3ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg5MCwweGJkLDB4MDUs MHg1NiwweDZkLDB4YjUsMHgyMiwweGQ1LDB4YjksMHg1YSwweDI5LDB4MmQsCi0rCTB4ZTksMHgw YiwweGUxLDB4YWMsMHhkZSwweDI3LDB4MGIsMHhiMAotKwl9OwotKwotKwotKy8qIEhNQUMgU0hB LTIyNCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxNywweDMyLDB4MmIs MHgyZSwweDZmLDB4MWIsMHg5YywweDZkLDB4MzEsMHhlMCwweDM0LDB4MDcsCi0rCTB4Y2YsMHhl ZCwweGY2LDB4YjYsMHg1YSwweDc2LDB4NGMsMHhiYywweDYyLDB4ODUsMHgwMSwweDkwCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyMjRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHgzOCwweGJmLDB4NWYsMHgyMCwweGIzLDB4Njgs MHgyZiwweDQzLDB4NjEsMHgwNSwweDhmLDB4MjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhjMCwweGM5LDB4NDUsMHhhYywweDhkLDB4MjcsMHg3Nyww eDA4LDB4MGIsMHgxNywweDZkLDB4ZWQsCi0rCTB4YzEsMHg3ZCwweGQ1LDB4MDcsMHg5ZCwweDZl LDB4ZjgsMHgyMywweDJhLDB4MjIsMHgxMywweGJkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlu cHV0W10gPQotKwl7Ci0rCTB4YTQsMHgzYywweGU3LDB4M2IsMHhlYSwweDE5LDB4NDUsMHgzMiww eGMyLDB4ODMsMHg2ZCwweDIxLAotKwkweDhhLDB4YzAsMHhlZSwweDY3LDB4NDUsMHhkZSwweDEz LDB4N2QsMHg5ZCwweDYxLDB4MDAsMHgzYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByW10g PQotKwl7Ci0rCTB4MTUsMHgwNSwweDc0LDB4NGEsMHg3ZiwweDhkLDB4NWMsMHg2MCwweDE2LDB4 ZTUsMHg3YiwweGFkLAotKwkweGY1LDB4NDEsMHg4ZiwweDU1LDB4NjAsMHhjNCwweDA5LDB4ZWUs MHgxZSwweDExLDB4ODEsMHhhYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHg2ZiwweGY1LDB4OWEsMHhlMiwweDU0LDB4NTMsMHgzMCwweDNkLDB4NWEsMHgyNyww eDI5LDB4MzgsCi0rCTB4MjcsMHhmMiwweDBkLDB4MDUsMHhlOSwweDI2LDB4Y2IsMHgxNiwweGMz LDB4NTEsMHg1ZiwweDEzLAotKwkweDQxLDB4ZmUsMHg5OSwweGYyCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRk aXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDczLDB4ODEsMHg4OCwweDg0LDB4OGYsMHhlZCww eDZmLDB4MTAsMHg5ZiwweDkzLDB4YmYsMHgxNywKLSsJMHgzNSwweDdjLDB4ZWYsMHhkNSwweDhk LDB4MjYsMHhhNiwweDdhLDB4ZTgsMHgwOSwweDM2LDB4NGYKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhlNiwweGNmLDB4Y2YsMHg3ZSwweDEyLDB4ZTUsMHg0Myww eGQyLDB4MzgsMHhkOCwweDI0LDB4NmYsCi0rCTB4NWEsMHgzNywweDY4LDB4YmYsMHg0ZiwweGEw LDB4ZmYsMHhkNSwweDYxLDB4OGEsMHg5MywweGUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4YWYsMHhmOSwweGQ4LDB4MTksMHg5MSwweDMwLDB4ODIsMHg2ZiwweGE5 LDB4MWUsMHg5ZCwweGQ3LAotKwkweGYzLDB4NTAsMHhlMCwweGM3LDB4ZDUsMHg2NCwweDk2LDB4 N2QsMHg0YywweDRkLDB4NzgsMHgwMywKLSsJMHg2ZCwweGQ4LDB4OWUsMHg3MgotKwl9OwotKwot KwotKy8qIEhNQUMgU0hBLTIyNCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJ MHgxMSwweDgyLDB4ZmQsMHhkOSwweDQyLDB4ZjQsMHhmYSwweGM4LDB4ZjIsMHg0MSwweGU2LDB4 NTQsCi0rCTB4MDEsMHhhZSwweDIyLDB4NmUsMHhjNiwweGFmLDB4YWYsMHhkMCwweGE2LDB4YjIs MHhlMiwweDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyMjRfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhOSwweDQ4LDB4ZDcsMHg5 MiwweDM5LDB4N2UsMHgyYSwweGRjLDB4MzAsMHgxZiwweDBlLDB4MmIKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxMSwweGQ1LDB4ZjQsMHhiZCwweDY3LDB4 OGMsMHgzMSwweGNmLDB4YTMsMHgzZiwweDFlLDB4NmIsCi0rCTB4YTgsMHgwNywweDAyLDB4MGIs MHhjOCwweDJlLDB4NmMsMHg2NCwweDQxLDB4NWIsMHhjOCwweDM3Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4NjgsMHgxOCwweGMyLDB4MDYsMHhlYiwweDNlLDB4MDQs MHg5NSwweDQ0LDB4NWUsMHhmYiwweGU2LAotKwkweDQxLDB4YzEsMHg1YywweGNjLDB4NDAsMHgy ZiwweGI3LDB4ZDIsMHgwZiwweGYzLDB4NmIsMHhlNwotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2ludF9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHg3ZiwweDQ1LDB4YzcsMHg1ZCwweDMyLDB4ZTYsMHgxNywweDYwLDB4 YmEsMHhkYywweGI4LDB4NDIsCi0rCTB4MWIsMHg5YywweGYxLDB4ZmEsMHgzYiwweDRkLDB4Mjks MHg1NCwweGM2LDB4OTAsMHhmZiwweDVjLAotKwkweGNkLDB4ZDYsMHhhOSwweGNjCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy MjRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4YzQsMHg4ZSwweDM3LDB4OTUsMHg2 OSwweDUzLDB4MjgsMHhkNywweDM3LDB4YmIsMHg3MCwweDk1LAotKwkweDFjLDB4MDcsMHgxZCww eGQ5LDB4YjcsMHhlNiwweDFiLDB4YmIsMHhmZSwweDQxLDB4ZWIsMHhjOQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDUzLDB4MTcsMHhhMSwweDZhLDB4ZmEs MHg3NywweDQ3LDB4YjAsMHg5NSwweDU2LDB4OWEsMHgyMCwKLSsJMHg1NywweGRlLDB4NWMsMHg4 OSwweDlmLDB4N2YsMHhlMiwweGRlLDB4MTcsMHgzYSwweDUwLDB4MjMKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRp dGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4M2EsMHgzMiwweGY5LDB4ODUsMHgwYywweGMxLDB4 ZWQsMHg3NiwweDJkLDB4ZGYsMHg0MCwweGMzLAotKwkweDA2LDB4MjIsMHg2NiwweGQ0LDB4OWEs MHg5YSwweGZmLDB4NWEsMHg3ZSwweDdhLDB4ZjMsMHg5NgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3JldHVybmVkYml0 c1tdID0KLSsJewotKwkweDQzLDB4YjQsMHg1NywweDVjLDB4MzgsMHgyNSwweDlkLDB4YWUsMHhl YywweDk2LDB4ZDEsMHg4NSwKLSsJMHgzYSwweDg0LDB4OGQsMHhmZSwweDY4LDB4ZDUsMHgwZSww eDVjLDB4OGYsMHg2NSwweGE1LDB4NGUsCi0rCTB4NDUsMHg4NCwweGE4LDB4OTQKLSsJfTsKLSsK LSsKLSsvKiBITUFDIFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0r CTB4NGQsMHhiMCwweDQzLDB4ZDgsMHgzNCwweDRiLDB4MTAsMHg3MCwweGIxLDB4OGIsMHhlZCww eGVhLAotKwkweDA3LDB4OTIsMHg5ZiwweDZjLDB4NzksMHgzMSwweGFmLDB4ODEsMHgyOSwweGVi LDB4NmUsMHhjYSwKLSsJMHgzMiwweDQ4LDB4MjgsMHhlNywweDAyLDB4NWQsMHhhNiwweGE2Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHgzYSwweGFlLDB4MTUsMHhhOSwweDk5LDB4 ZGMsMHhlNCwweDY3LDB4MzQsMHgzYiwweDcwLDB4MTUsCi0rCTB4YWEsMHhkMywweDMwLDB4OWEK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxMywweDFk LDB4MjQsMHgwNCwweGIwLDB4MTgsMHg4MSwweDE1LDB4MjEsMHg1MSwweDJhLDB4MjQsCi0rCTB4 NTIsMHg2MSwweGJlLDB4NjQsMHg4MiwweDZiLDB4NTUsMHgyZiwweGUyLDB4ZjEsMHg0MCwweDdk LAotKwkweDcxLDB4ZDgsMHgwMSwweDg2LDB4MTUsMHhiNywweDhiLDB4YjUKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg4ZiwweGE2LDB4NTQsMHg1ZiwweGIxLDB4 ZDAsMHhkOCwweGMzLDB4ZTcsMHgwYywweDE1LDB4YTksCi0rCTB4MjMsMHg2ZSwweGZlLDB4ZmIs MHg5MywweGY3LDB4M2EsMHhiZCwweDU5LDB4MDEsMHhmYSwweDE4LAotKwkweDhlLDB4ZTksMHgx YSwweGE5LDB4NzgsMHhmYywweDc5LDB4MGIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltd ID0KLSsJewotKwkweGNmLDB4MjQsMHhiOSwweGViLDB4YjMsMHhkNCwweGNkLDB4MTcsMHgzNyww eDM4LDB4NzUsMHg3OSwKLSsJMHgxNSwweGNiLDB4MmQsMHg3NSwweDUxLDB4ZjEsMHhjYywweGFh LDB4MzIsMHhhNCwweGE3LDB4MzYsCi0rCTB4N2MsMHg1YywweGU0LDB4NDcsMHhmMSwweDNlLDB4 MWQsMHhlNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg1Miww eDQyLDB4ZmEsMHhlYiwweDg1LDB4ZTAsMHgzMCwweDIyLDB4NzksMHgwMCwweDE2LDB4YjIsCi0r CTB4ODgsMHgyZiwweDE0LDB4NmEsMHhiNywweGZjLDB4YjcsMHg1MywweGRjLDB4NGEsMHgxMiww eGVmLAotKwkweDU0LDB4ZDYsMHgzMywweGU5LDB4MjAsMHhkNiwweGZkLDB4NTYKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ZjQsMHhmNiwweDQ5LDB4YTEsMHgy ZCwweDY0LDB4MmIsMHgzMCwweDU4LDB4ZjgsMHhiZCwweGI4LAotKwkweDc1LDB4ZWIsMHhiYiww eDVlLDB4MWMsMHg5YiwweDgxLDB4NmEsMHhkYSwweDE0LDB4ODYsMHg2ZSwKLSsJMHhkMCwweGRh LDB4MTgsMHhiNywweDg4LDB4ZmIsMHg1OSwweGYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0 cHIyW10gPQotKwl7Ci0rCTB4MjEsMHhjZCwweDZlLDB4NDYsMHhhZCwweDk5LDB4MDcsMHgxNyww eGI0LDB4M2QsMHg3NiwweDBhLAotKwkweGZmLDB4NWIsMHg1MiwweDUwLDB4NzgsMHhkZiwweDFm LDB4MjQsMHgwNiwweDBkLDB4M2YsMHg3NCwKLSsJMHhhOSwweGM5LDB4MzcsMHhjZiwweGQ4LDB4 MjYsMHgyNSwweDkxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YTcs MHhhZiwweDJmLDB4MjksMHhlMCwweDNhLDB4NzIsMHg5NSwweDk2LDB4MWMsMHhhOSwweGYwLAot KwkweDRhLDB4MTcsMHg0ZCwweDY2LDB4MDYsMHgxMCwweGJmLDB4MzksMHg4OSwweDg4LDB4Yjgs MHg5MSwKLSsJMHgzNywweDE4LDB4OTksMHhjZiwweDhjLDB4NTMsMHgzYiwweDdlCi0rCX07Ci0r Ci0rCi0rLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweDk2LDB4YjcsMHg1MywweDIyLDB4MWUsMHg1MiwweDJhLDB4OTYsMHhiMSwweDE1LDB4M2Ms MHgzNSwKLSsJMHg1YSwweDhiLDB4ZDMsMHg0YSwweGE2LDB4NmMsMHg4MywweDBhLDB4N2QsMHhh MywweDIzLDB4M2QsCi0rCTB4NDMsMHhhMSwweDA3LDB4MmMsMHgyZCwweGUzLDB4ODEsMHhjYwot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjU2X25vbmNlW10gPQotKwl7Ci0rCTB4ZjEsMHhhYywweDk3LDB4Y2IsMHg1ZSwweDA2 LDB4NDgsMHhkMiwweDk0LDB4YmUsMHgxNSwweDJlLAotKwkweGM3LDB4ZmMsMHhjMiwweDAxCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OTgsMHhjNSwweDFl LDB4MzUsMHg1ZSwweDg5LDB4MGQsMHhjZSwweDY0LDB4NmQsMHgxOCwweGE3LAotKwkweDVhLDB4 YzYsMHhmMywweGU3LDB4ZDYsMHg5ZSwweGMwLDB4ZWEsMHhiNywweDNhLDB4OGQsMHg2NSwKLSsJ MHhiOCwweGViLDB4MTAsMHhkNywweDU3LDB4MTgsMHhhMCwweDMyCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4MWIsMHgxMCwweGFmLDB4YWMsMHhkMCwweDY1LDB4OTUs MHhhZCwweDA0LDB4YWQsMHgwMywweDFjLAotKwkweGUwLDB4NDAsMHhkNiwweDNlLDB4MWMsMHg0 NiwweDUzLDB4MzksMHg3YywweGUyLDB4YmMsMHhkYSwKLSsJMHg4YywweGEyLDB4MzMsMHhhNyww eDlhLDB4MjYsMHhkMywweDI3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewot KwkweGJhLDB4NjEsMHgwZSwweDU1LDB4ZmUsMHgxMSwweDhhLDB4OWUsMHgwZiwweDgwLDB4ZGYs MHgxZCwKLSsJMHgwMywweDBhLDB4ZmUsMHgxNSwweDk0LDB4MjgsMHg0YiwweGJhLDB4ZjQsMHg5 ZiwweDUxLDB4MjUsCi0rCTB4ODgsMHhlNSwweDRlLDB4ZmIsMHhhZiwweGNlLDB4NjksMHg5MAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDYyLDB4N2YsMHgxZSww eDZiLDB4ZTgsMHg4ZSwweGUxLDB4MzUsMHg3ZCwweDliLDB4NGYsMHhjNywKLSsJMHhlYywweGM4 LDB4YWMsMHhlZiwweDZiLDB4MTMsMHg5ZSwweDA1LDB4NTYsMHhjMSwweDA4LDB4ZjksCi0rCTB4 MmYsMHgwZiwweDI3LDB4OWMsMHhkNCwweDE1LDB4ZWQsMHgyZAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9u YWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGM3LDB4NzYsMHg2ZSwweGE5LDB4ZDIsMHhiMiww eDc2LDB4NDAsMHg4MiwweDI1LDB4MmMsMHhiMywKLSsJMHg2ZiwweGFjLDB4ZTksMHg3NCwweGVm LDB4OGYsMHgzYywweDhlLDB4Y2QsMHhmMSwweGJmLDB4YjMsCi0rCTB4NDksMHg3NywweDM0LDB4 ODgsMHg1MiwweDM2LDB4ZTYsMHgyZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0r CXsKLSsJMHg4ZCwweGI4LDB4MGMsMHhkMSwweGJmLDB4NzAsMHhmNiwweDE5LDB4YzMsMHg0MSww eDgwLDB4OWYsCi0rCTB4ZTEsMHhhNSwweGE0LDB4MWYsMHgyYywweDI2LDB4YjEsMHhlNSwweGQ4 LDB4ZWIsMHhiZSwweGY4LAotKwkweGRmLDB4ODgsMHg2YSwweDg5LDB4ZDYsMHgwNSwweGQ4LDB4 OWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0MywweDEyLDB4MmEsMHgy YywweDQwLDB4NTMsMHgyZSwweDdjLDB4NjYsMHgzNCwweGFjLDB4YzMsCi0rCTB4NDMsMHhlMyww eGUwLDB4NmEsMHhmYywweGZhLDB4ZWEsMHg4NywweDIxLDB4MWYsMHhlMiwweDI2LAotKwkweGM0 LDB4ZjksMHgwOSwweDlhLDB4MGQsMHg2ZSwweDdmLDB4ZTAKLSsJfTsKLSsKLSsKLSsvKiBITUFD IFNIQS0zODQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NjksMHg4MSww eDk4LDB4ODgsMHg0NCwweGY1LDB4ZDYsMHgyZSwweDAwLDB4MDgsMHgzYiwweGM1LAotKwkweGZi LDB4ZDcsMHg4ZSwweDZmLDB4MjMsMHhmOCwweDZkLDB4MDksMHhkNiwweDg1LDB4NDksMHhkMSwK LSsJMHhmOCwweDZkLDB4YTQsMHg1OCwweDU0LDB4ZmQsMHg4OCwweGE5Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJf bm9uY2VbXSA9Ci0rCXsKLSsJMHg2ZSwweDM4LDB4ODEsMHhjYSwweGI3LDB4ZTgsMHg2ZSwweDY2 LDB4NDksMHg4YSwweGIyLDB4NTksCi0rCTB4ZWUsMHgxNiwweGM5LDB4ZGUKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9w cl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhmZSwweDRjLDB4ZDksMHhmNCww eDc4LDB4M2IsMHgwOCwweDQxLDB4OGQsMHg4ZiwweDU1LDB4YzQsCi0rCTB4NDMsMHg1NiwweGI2 LDB4MTIsMHgzNiwweDZiLDB4MzAsMHhiNywweDVlLDB4ZTEsMHhiOSwweDQ3LAotKwkweDA0LDB4 YjEsMHg0ZSwweGE5LDB4MDAsMHhhMSwweDUyLDB4YTEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFs aW5wdXRbXSA9Ci0rCXsKLSsJMHg4OSwweGU5LDB4Y2MsMHg4ZiwweDI3LDB4M2MsMHgyNiwweGQx LDB4OTUsMHhjOCwweDdkLDB4MGYsCi0rCTB4NWIsMHgxYSwweGYwLDB4NzgsMHgzOSwweDU2LDB4 NmYsMHhhNCwweDIzLDB4ZTcsMHhkMSwweGRhLAotKwkweDdjLDB4NjYsMHgzMywweGEwLDB4OTAs MHhjOSwweDkyLDB4ODgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkw eGJlLDB4M2QsMHg3YywweDBkLDB4Y2EsMHhkYSwweDdjLDB4NDksMHhiOCwweDEyLDB4MzYsMHhj MCwKLSsJMHhkYiwweGFkLDB4MzUsMHhhOCwweGM3LDB4MGIsMHgyYSwweDJjLDB4NjksMHg2ZCww eDI1LDB4NTYsCi0rCTB4NjMsMHg4MiwweDExLDB4M2UsMHhhNywweDMzLDB4NzAsMHg3MgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4MiwweDNkLDB4ZTYsMHg1 NCwweDgwLDB4NDIsMHhmOCwweGJhLDB4OTAsMHg0ZiwweDA2LDB4YTYsCi0rCTB4ZDIsMHg3Ziww eGJmLDB4NzksMHg3YywweDEyLDB4N2QsMHhhNiwweGEyLDB4NjYsMHhlOCwweGE2LAotKwkweGMw LDB4ZDYsMHg0YSwweDU1LDB4YmYsMHhkOCwweDBhLDB4YzUsMHhmOCwweDAzLDB4ODgsMHhkZCwK LSsJMHg4ZSwweDg3LDB4ZDEsMHg1YSwweDQ4LDB4MjYsMHg3MiwweDJhLDB4OGUsMHhjZiwweGVl LDB4YmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OGYsMHhm ZiwweGQ5LDB4ODQsMHhiYiwweDg1LDB4M2EsMHg2NiwweGExLDB4MjEsMHhjZSwweGIyLAotKwkw eDNhLDB4M2EsMHgxNywweDIyLDB4MTksMHhhZSwweGM3LDB4YjYsMHg2MywweDgxLDB4ZDUsMHhm ZiwKLSsJMHgwZCwweGM4LDB4ZTEsMHhhZiwweDU3LDB4ZDIsMHhjYiwweDYwCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4ZDcsMHhmYiwweGM5LDB4ZTgsMHhlMiww eGYyLDB4YWEsMHg0YywweGI4LDB4NTEsMHgyZiwweGUxLAotKwkweDIyLDB4YmEsMHhmMywweGRh LDB4MGEsMHgxOSwweDc2LDB4NzEsMHg1NywweGIyLDB4MWQsMHg5NCwKLSsJMHgwOSwweDY5LDB4 NmMsMHhkMywweDk3LDB4NTEsMHg4MSwweDg3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4ZTYsMHgxOSwweDI4LDB4YTgsMHgyMSwweGNlLDB4NWUsMHhkYiwweDI0LDB4 NzksMHg4YywweDc2LAotKwkweDVkLDB4NzMsMHhiMiwweGRmLDB4YWMsMHhlZiwweDg1LDB4YTcs MHgzYiwweDE5LDB4MDksMHg4YiwKLSsJMHg3ZiwweDk4LDB4MjgsMHhhOSwweDkzLDB4ZDgsMHg3 YSwweGFkLDB4NTUsMHg4YiwweDI0LDB4OWQsCi0rCTB4ZTYsMHg5OCwweGZlLDB4NDcsMHhkNSww eDQ4LDB4YzEsMHgyMywweGQ4LDB4MWQsMHg2MiwweDc1Ci0rCX07Ci0rCi0rCi0rLyogSE1BQyBT SEEtMzg0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGMzLDB4NTYsMHgy YiwweDFkLDB4YzIsMHhiYiwweGE4LDB4ZjAsMHhhZSwweDFiLDB4MGQsMHhkMywKLSsJMHg1YSww eDZjLDB4ZGEsMHg1NywweDhlLDB4YTUsMHg4YSwweDBkLDB4NmMsMHg0YiwweDE4LDB4YjEsCi0r CTB4MDQsMHgzZSwweGI0LDB4OTksMHgzNSwweGM0LDB4YzAsMHg1ZgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X25vbmNl W10gPQotKwl7Ci0rCTB4YzUsMHg0OSwweDFlLDB4NjYsMHgyNywweDkyLDB4YmUsMHhlYywweGI1 LDB4MWUsMHg0YiwweGIxLAotKwkweDM4LDB4ZTMsMHhlYiwweDYyCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YmUsMHhlNywweDZiLDB4NTcsMHhkZSwweDg4 LDB4MTEsMHg5NiwweDliLDB4NmUsMHhlYSwweGU1LAotKwkweDYzLDB4ODMsMHg0YywweGI2LDB4 OGQsMHg2NiwweGFhLDB4MWYsMHg4YiwweDU0LDB4ZTcsMHg2MiwKLSsJMHg2ZCwweDVhLDB4ZmMs MHhiZiwweDk3LDB4YmEsMHhjZCwweDc3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0W10gPQot Kwl7Ci0rCTB4ZTUsMHgyOCwweDVmLDB4NDMsMHhmNSwweDgzLDB4NmUsMHgwYSwweDgzLDB4NWMs MHhlMywweDgxLAotKwkweDAzLDB4ZjIsMHhmOCwweDc4LDB4MDAsMHg3YywweDk1LDB4ODcsMHgx NiwweGQ2LDB4NmMsMHg1OCwKLSsJMHgzMywweDZjLDB4NTMsMHgzNSwweDBkLDB4NjYsMHhlMyww eGNlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUyLDB4MWYsMHhm MywweGRhLDB4MGQsMHgxOSwweDk5LDB4ODcsMHhjNCwweDkwLDB4YTIsMHgzMSwKLSsJMHhjYSww eDJhLDB4ODksMHg1OCwweDQzLDB4NDQsMHhiOCwweGRlLDB4Y2YsMHhhNCwweGJlLDB4M2IsCi0r CTB4NTMsMHgyNiwweDIyLDB4MzEsMHg3NiwweDQxLDB4MjIsMHhiNSwweGE4LDB4NzAsMHgyZiww eDRiLAotKwkweDY0LDB4OTUsMHg0ZCwweDQ4LDB4OTYsMHgzNSwweGU2LDB4YmQsMHgzYywweDM0 LDB4ZGIsMHgxYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDc3 LDB4NjEsMHhiYSwweGJjLDB4ZjIsMHhjMSwweGYzLDB4NGIsMHg4NiwweDY1LDB4ZmQsMHg0OCwK LSsJMHgwZSwweDNjLDB4MDIsMHg1ZSwweGEyLDB4N2EsMHg2YiwweDdjLDB4ZWQsMHgyMSwweDVl LDB4ZjksCi0rCTB4Y2QsMHhjZCwweDc3LDB4MDcsMHgyYiwweGJlLDB4YzUsMHg1YwotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh Mzg0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDE4LDB4MjQsMHg1ZiwweGM2 LDB4ODQsMHhkMSwweDY3LDB4YzMsMHg5YSwweDExLDB4YTUsMHg4YywKLSsJMHgwNywweDM5LDB4 MjEsMHg4MywweDRkLDB4MDQsMHhjNCwweDZhLDB4MjgsMHgxOSwweGNmLDB4OTIsCi0rCTB4MjEs MHhkOSwweDllLDB4NDEsMHg3MiwweDZjLDB4OWUsMHg2MwotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxp bnB1dDJbXSA9Ci0rCXsKLSsJMHg5NiwweDY3LDB4NDEsMHgyOCwweDliLDB4YjcsMHg5MiwweDhk LDB4NjQsMHgzYiwweGU0LDB4Y2YsCi0rCTB4N2UsMHhhYSwweDFlLDB4YjEsMHg0YiwweDFkLDB4 MDksMHg1NiwweDY3LDB4OWMsMHhjNiwweDZkLAotKwkweDNiLDB4ZTgsMHg5MSwweDlkLDB4ZTEs MHg4YSwweGI3LDB4MzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlMyww eDU5LDB4NjEsMHgzOCwweDkyLDB4ZWMsMHhlMiwweDNjLDB4ZmYsMHhiNywweGRiLDB4MTksCi0r CTB4MGYsMHg1YiwweDkzLDB4NjgsMHgwZCwweGE0LDB4OTQsMHg0MCwweDcyLDB4MGIsMHhlMCww eGVkLAotKwkweDRkLDB4Y2QsMHg2OCwweGEwLDB4MWUsMHhmZSwweDY3LDB4YjIsMHhmYSwweDIx LDB4NTYsMHg3NCwKLSsJMHhhNCwweGFkLDB4Y2YsMHhiNywweDYwLDB4NjYsMHgyZSwweDQwLDB4 ZGUsMHg4MiwweGNhLDB4ZmIKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS01MTIgUFIgICovCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YWEsMHg5ZSwweDQ1LDB4NjcsMHgwZSwweDAw LDB4MmEsMHg2NywweDk4LDB4ZDYsMHhkYSwweDBiLAotKwkweDBmLDB4MTcsMHg3ZSwweGFjLDB4 ZmQsMHgyNywweGM0LDB4Y2EsMHg4NCwweGRmLDB4ZGUsMHhiYSwKLSsJMHg4NSwweGQ5LDB4YmUs MHg4ZiwweGYzLDB4ZmYsMHg5MSwweDRkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJ MHg4YywweDQ5LDB4MmYsMHg1OCwweDFlLDB4N2EsMHhkYSwweDRiLDB4N2UsMHg4YSwweDMwLDB4 N2IsCi0rCTB4ODYsMHhlYSwweGFmLDB4YTIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9Ci0rCXsKLSsJMHg3MSwweGUxLDB4YmIsMHhhZCwweGE3LDB4NGIsMHgyZSwweDMx LDB4M2IsMHgwYiwweGVjLDB4MjQsCi0rCTB4OTksMHgzOCwweGJjLDB4YWEsMHgwNSwweDRjLDB4 NDYsMHg0NCwweGZhLDB4YWQsMHg4ZSwweDAyLAotKwkweGMxLDB4N2UsMHhhZCwweGVjLDB4NTQs MHhhNiwweGQwLDB4YWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJ MHgzZCwweDZlLDB4YTYsMHhhOCwweDI5LDB4MmEsMHhiMiwweGY1LDB4OTgsMHg0MiwweGU0LDB4 OTIsCi0rCTB4NzgsMHgyMiwweDY3LDB4ZmQsMHgxYiwweDE1LDB4MWUsMHgyOSwweGFhLDB4NzEs MHgzYywweDNjLAotKwkweGU3LDB4MDUsMHgyMCwweGE5LDB4MjksMHhjNiwweDc1LDB4NzEKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGFiLDB4YjksMHgxNiwweGQ4 LDB4NTUsMHgzNSwweDU0LDB4YjcsMHg5NywweDNmLDB4OTQsMHhiYywKLSsJMHgyZiwweDdjLDB4 NzAsMHhjNywweGQwLDB4ZWQsMHhiNywweDRiLDB4ZjcsMHhmNiwweDZjLDB4MDMsCi0rCTB4MGMs MHhiMCwweDAzLDB4ZDgsMHhiYiwweDcxLDB4ZDksMHgxMAotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2ludF9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4ZSwweGQzLDB4ZmQsMHg1MiwweDllLDB4ODMsMHgwOCww eDQ5LDB4MTgsMHg2ZSwweDIzLDB4NTYsCi0rCTB4NWMsMHg0NSwweDkzLDB4MzQsMHgwNSwweGUy LDB4OTgsMHg4ZiwweDBjLDB4ZDQsMHgzMiwweDBjLAotKwkweGZkLDB4ZGEsMHg1ZiwweDkyLDB4 M2EsMHg4YywweDgxLDB4YmQsMHhmNiwweDZjLDB4NTUsMHhmZCwKLSsJMHhiOCwweDIwLDB4Y2Us MHg4ZCwweDk3LDB4MjcsMHhlOCwweGU4LDB4ZTAsMHhiMywweDg1LDB4NTAsCi0rCTB4YTIsMHhj MiwweGIyLDB4OTUsMHgxZCwweDQ4LDB4ZDMsMHg3YiwweDRiLDB4NzgsMHgxMywweDM1LAotKwkw eDA1LDB4MTcsMHhiZSwweDBkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJ ewotKwkweGMzLDB4ZmMsMHg5NSwweGFhLDB4NjksMHgwNiwweGFlLDB4NTksMHg0MSwweGNlLDB4 MjYsMHgwOCwKLSsJMHgyOSwweDZkLDB4NDUsMHhkYSwweGU4LDB4YjMsMHg2YywweDk1LDB4NjAs MHgwZiwweDcwLDB4MmMsCi0rCTB4MTAsMHhiYSwweDM4LDB4OGMsMHhjZiwweDI5LDB4OTksMHhh YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDNiLDB4OWEsMHgy NSwweGNlLDB4ZDcsMHhmOSwweDVjLDB4ZDEsMHgzYSwweDNlLDB4YWEsMHg3MSwKLSsJMHgxNCww eDNlLDB4MTksMHhlOCwweGNlLDB4ZTYsMHhmZSwweDUxLDB4ODQsMHhlOSwweDFiLDB4ZmUsCi0r CTB4M2YsMHhhNywweGYyLDB4ZmQsMHg3NiwweDVmLDB4NmEsMHhlNwotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3Jl dHVybmVkYml0c1tdID0KLSsJewotKwkweGI3LDB4ODIsMHhhOSwweDU3LDB4ODEsMHg2NywweDUz LDB4YjUsMHhhMSwweGU5LDB4M2QsMHgzNSwKLSsJMHhmOSwweGU0LDB4OTcsMHhiZSwweGE2LDB4 Y2EsMHhmMSwweDAxLDB4MTMsMHgwOSwweGU3LDB4MjEsCi0rCTB4YzAsMHhlZCwweDkzLDB4NWQs MHg0YiwweGY0LDB4ZWIsMHg4ZCwweDUzLDB4MjUsMHg4YSwweGM0LAotKwkweGIxLDB4NmYsMHg2 ZSwweDM3LDB4Y2QsMHgyZSwweGFjLDB4MzksMHhiMiwweGI2LDB4OTksMHhhMywKLSsJMHg4Miww eDAwLDB4YjAsMHgyMSwweGYwLDB4YzcsMHgyZiwweDRjLDB4NzMsMHg5MiwweGZkLDB4MDAsCi0r CTB4YjYsMHhhZiwweGJjLDB4ZDMKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS01MTIgTm8gUFIg ICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGE1MTJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NmUsMHg4NSwweGU2LDB4MjUsMHg5Niww eDI5LDB4YTcsMHg1MiwweDViLDB4NjAsMHhiYSwweGFhLAotKwkweGRlLDB4ZGIsMHgzNiwweDBh LDB4NTEsMHg5YSwweDE1LDB4YWUsMHg2ZSwweDE4LDB4ZDMsMHhmZSwKLSsJMHgzOSwweGI5LDB4 NGEsMHg5NiwweGY4LDB4NzcsMHhjYiwweDk1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfbm9uY2VbXSA9Ci0rCXsKLSsJ MHhlMCwweGE2LDB4NWQsMHgwOCwweGMzLDB4N2MsMHhhZSwweDI1LDB4MmUsMHg4MCwweGQxLDB4 M2UsCi0rCTB4ZDksMHhhZiwweDQzLDB4M2MKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9Ci0rCXsKLSsJMHg1MywweDk5LDB4NTIsMHg1ZiwweDExLDB4YTksMHg2NCwweDY2LDB4 MjAsMHg1ZSwweDFiLDB4NWYsCi0rCTB4NDIsMHhiMywweGY0LDB4ZGEsMHhlZCwweGJiLDB4NjMs MHhjMSwweDIzLDB4YWYsMHhkMCwweDAxLAotKwkweDkwLDB4M2IsMHhkMCwweDc4LDB4ZTQsMHgw YiwweGE3LDB4MjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg4NSww eDkwLDB4ODAsMHhkMywweDk4LDB4ZjEsMHg1MywweDZkLDB4NjgsMHgxNSwweDhmLDB4ZTUsCi0r CTB4NjAsMHgzZiwweDE3LDB4MjksMHg1NSwweDhkLDB4MzMsMHhiMSwweDQ1LDB4NjQsMHg2NCww eDhkLAotKwkweDUwLDB4MjEsMHg4OSwweGFlLDB4ZjYsMHhmZCwweDMyLDB4NzMKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjgsMHg1NiwweDMwLDB4NmYsMHhmNCww eGExLDB4NDgsMHhlMCwweGM5LDB4ZjUsMHg3NSwweDkwLAotKwkweGNjLDB4ZmIsMHhkZiwweGRm LDB4NzEsMHgzZCwweDBhLDB4OWEsMHgwMywweDY1LDB4M2IsMHgxOCwKLSsJMHg2MSwweGUzLDB4 ZDEsMHhkYSwweGNjLDB4NGEsMHhmZSwweDU1LDB4MzgsMHhmOCwweDIxLDB4NmIsCi0rCTB4ZmEs MHgxOCwweDAxLDB4NDIsMHgzOSwweDJmLDB4OTksMHg1MywweDM4LDB4MTUsMHg4MiwweDM0LAot KwkweGM1LDB4OTMsMHg5MiwweGJjLDB4NGQsMHg3NSwweDFhLDB4NWYsMHgyMSwweDI3LDB4Y2Ms MHhhMSwKLSsJMHhiMSwweDU3LDB4NjksMHhlOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0KLSsJewotKwkweDhjLDB4NTIsMHg3ZSwweDc3LDB4NzIsMHgzZiwweGEzLDB4MDQsMHg5 NywweDEwLDB4OWIsMHg0MSwKLSsJMHhiZCwweGU4LDB4ZmYsMHg4OSwweGVkLDB4ODAsMHhlMyww eGJkLDB4YWEsMHgxMiwweDJkLDB4Y2EsCi0rCTB4NzUsMHg4MiwweDM2LDB4NzcsMHg4OCwweGNk LDB4YTYsMHg3MwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkw eDdlLDB4MzIsMHhlMywweDY5LDB4NjksMHgwNywweDM0LDB4YTIsMHgxNiwweGEyLDB4NWQsMHgx YSwKLSsJMHgxMCwweDkxLDB4ZDMsMHhlMiwweDIxLDB4YTIsMHhhMywweGRkLDB4Y2QsMHgwYyww eDA5LDB4ODYsCi0rCTB4MTEsMHhlMSwweDUwLDB4ZmYsMHg1YywweGI3LDB4ZWIsMHg1YwotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3ZiwweDc4LDB4NjYsMHhkOCww eGZiLDB4NjcsMHhjZiwweDhkLDB4OGMsMHgwOCwweDMwLDB4YTUsCi0rCTB4ZjgsMHg3ZCwweGNm LDB4NDQsMHg1OSwweGNlLDB4ZjgsMHhkZiwweDU4LDB4ZDMsMHg2MCwweGNiLAotKwkweGE4LDB4 NjAsMHhiOSwweDA3LDB4YzQsMHhiMSwweDk1LDB4NDgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHhkZiwweGE3LDB4MzYsMHhkNCwweGRjLDB4NWQsMHg0ZCwweDMxLDB4YWQs MHg2OSwweDQ2LDB4OWYsCi0rCTB4ZjEsMHg3YywweGQ3LDB4M2IsMHg0ZiwweDU1LDB4ZjIsMHhk NywweGI5LDB4OWQsMHhhZCwweDdhLAotKwkweDc5LDB4MDgsMHg1OSwweGE1LDB4ZGMsMHg3NCww eGY1LDB4OWIsMHg3MywweGQyLDB4MTMsMHgyNSwKLSsJMHgwYiwweDgxLDB4MDgsMHgwOCwweDI1 LDB4ZmIsMHgzOSwweGYyLDB4ZjAsMHhhMywweGE0LDB4OGQsCi0rCTB4ZWYsMHgwNSwweDllLDB4 YjgsMHhjNywweDUyLDB4ZTQsMHgwZSwweDQyLDB4YWEsMHg3YywweDc5LAotKwkweGMyLDB4ZDYs MHhmZCwweGE1Ci0rCX07Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9m aXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19k c2Ffc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHNhX3Nl bGZ0ZXN0LmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNDc2OTM4NyArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxMi0wNC0yNiAx ODowMDo1MS40MDQ3NjkzODcgKzAyMDAKLUBAIC0wLDAgKzEsMTkzIEBACi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo 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 L2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZHNhX3Rlc3RfMjA0OF9wW10gPSB7Ci0rCTB4YTgsMHg1MywweDc4LDB4ZDgsMHhmZCwweDNmLDB4 OGQsMHg3MiwweGVjLDB4NzQsMHgxOCwweDA4LAotKwkweDBkLDB4YTIsMHgxMywweDE3LDB4ZTQs MHgzZSwweGM0LDB4YjYsMHgyYiwweGE4LDB4YzgsMHg2MiwKLSsJMHgzYiwweDdlLDB4NGQsMHgw NCwweDQ0LDB4MWQsMHhkMSwweGEwLDB4NjUsMHg4NiwweDYyLDB4NTksCi0rCTB4NjQsMHg5Myww eGNhLDB4OGUsMHg5ZSwweDhmLDB4YmIsMHg3ZSwweDM0LDB4YWEsMHhkZCwweGI2LAotKwkweDJl LDB4NWQsMHg2NywweGI2LDB4ZDAsMHg5YSwweDZlLDB4NjEsMHhiNywweDY5LDB4ZTcsMHhjMywK LSsJMHg1MiwweGFhLDB4MmIsMHgxMCwweGUyLDB4MGMsMHhhMCwweDYzLDB4NjksMHg2MywweGI1 LDB4NTIsCi0rCTB4M2UsMHg4NiwweDQ3LDB4MGQsMHhlYywweGJiLDB4ZWQsMHhhMCwweDI3LDB4 ZTcsMHg5NywweGU3LAotKwkweGI2LDB4NzYsMHgzNSwweGQ0LDB4ZDQsMHg5YywweDMwLDB4NzAs MHgwZSwweDc0LDB4YWYsMHg4YSwKLSsJMHgwZiwweGYxLDB4NTYsMHhhOCwweDAxLDB4YWYsMHg1 NywweGEyLDB4NmUsMHg3MCwweDc4LDB4ZjEsCi0rCTB4ZDgsMHgyZiwweDc0LDB4OTAsMHg4ZSww eGNiLDB4NmQsMHgwNywweGU3LDB4MGIsMHgzNSwweDAzLAotKwkweGVlLDB4ZDksMHg0ZiwweGEz LDB4MmMsMHhmMSwweDdhLDB4N2YsMHhjMywweGQ2LDB4Y2YsMHg0MCwKLSsJMHhkYywweDdiLDB4 MDAsMHg4MywweDBlLDB4NmEsMHgyNSwweDY2LDB4ZGMsMHgwNywweDNlLDB4MzQsCi0rCTB4MzMs MHgxMiwweDUxLDB4N2MsMHg2YSwweGE1LDB4MTUsMHgyYiwweDRiLDB4ZmUsMHhjZCwweDJlLAot KwkweDU1LDB4MWYsMHhlZSwweDM0LDB4NjMsMHgxOCwweGExLDB4NTMsMHg0MiwweDNjLDB4OTks MHg2YiwKLSsJMHgwZCwweDVkLDB4Y2IsMHg5MSwweDAyLDB4YWUsMHhkZCwweDM4LDB4NzksMHg4 NiwweDE2LDB4ZjEsCi0rCTB4ZjEsMHhlMCwweGQ2LDB4YzQsMHgwMywweDUyLDB4NWIsMHgxZiww eDliLDB4M2QsMHg0ZCwweGM3LAotKwkweDY2LDB4ZGUsMHgyZCwweGZjLDB4NGEsMHg1NiwweGQ3 LDB4YjgsMHhiYSwweDU5LDB4NjMsMHhkNiwKLSsJMHgwZiwweDNlLDB4MTYsMHgzMSwweDg4LDB4 NzAsMHhhZCwweDQzLDB4NjksMHg1MiwweGU1LDB4NTcsCi0rCTB4NjUsMHgzNywweDRlLDB4YWIs MHg4NSwweGU4LDB4ZWMsMHgxNywweGQ2LDB4YjksMHhhNCwweDU0LAotKwkweDdiLDB4OWIsMHg1 ZiwweDI3LDB4NTIsMHhmMywweDEwLDB4NWIsMHhlOCwweDA5LDB4YjIsMHgzYSwKLSsJMHgyYyww eDhkLDB4NzQsMHg2OSwweGRiLDB4MDIsMHhlMiwweDRkLDB4NTksMHgyMywweDk0LDB4YTcsCi0r CTB4ZGIsMHhhMCwweDY5LDB4ZTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGRzYV90ZXN0XzIwNDhfcVtdID0gewotKwkweGQyLDB4NzcsMHgwNCwweDRlLDB4NTAsMHhmNSww eGE0LDB4ZTMsMHhmNSwweDEwLDB4YTUsMHgwYSwKLSsJMHgwYiwweDg0LDB4ZmQsMHhmZiwweGJj LDB4YTAsMHg0NywweGVkLDB4MjcsMHg2MCwweDIwLDB4NTYsCi0rCTB4NzQsMHg0MSwweGEwLDB4 YTUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfZ1td ID0gewotKwkweDEzLDB4ZDcsMHg1NCwweGUyLDB4MWYsMHhkMiwweDQxLDB4NjUsMHg1ZCwweGE4 LDB4OTEsMHhjNSwKLSsJMHgyMiwweGE2LDB4NWEsMHg3MiwweGE4LDB4OWIsMHhkYywweDY0LDB4 ZWMsMHg5YiwweDU0LDB4YTgsCi0rCTB4MjEsMHhlZCwweDRhLDB4ODksMHg4YiwweDQ5LDB4MGUs MHgwYywweDRmLDB4Y2IsMHg3MiwweDE5LAotKwkweDJhLDB4NGEsMHgyMCwweGY1LDB4NDEsMHhm MywweGYyLDB4OTIsMHg1MywweDk5LDB4ZjAsMHhiYSwKLSsJMHhlYywweGY5LDB4MjksMHhhYSww eGZiLDB4ZjcsMHg5ZCwweGZlLDB4NDMsMHgzMiwweDM5LDB4M2IsCi0rCTB4MzIsMHhjZCwweDJl LDB4MmYsMHhjZiwweDI3LDB4MmYsMHgzMiwweGE2LDB4MjcsMHg0MywweDRhLAotKwkweDBkLDB4 ZjIsMHg0MiwweGI3LDB4NWIsMHg0MSwweDRkLDB4ZjMsMHg3MiwweDEyLDB4MWUsMHg1MywKLSsJ MHhhNSwweDUzLDB4ZjIsMHgyMiwweGY4LDB4MzYsMHhiMCwweDAwLDB4ZjAsMHgxNiwweDQ4LDB4 NWIsCi0rCTB4NmIsMHhkMCwweDg5LDB4ODQsMHg1MSwweDgwLDB4MWQsMHhjZCwweDhkLDB4ZTYs MHg0YywweGQ1LAotKwkweDM2LDB4NTYsMHg5NiwweGZmLDB4YzUsMHgzMiwweGQ1LDB4MjgsMHhj NSwweDA2LDB4NjIsMHgwYSwKLSsJMHg5NCwweDJhLDB4MDMsMHgwNSwweDA0LDB4NmQsMHg4Ziww eDE4LDB4NzYsMHgzNCwweDFmLDB4MWUsCi0rCTB4NTcsMHgwYiwweGMzLDB4OTcsMHg0YiwweGE2 LDB4YjksMHhhNCwweDM4LDB4ZTksMHg3MCwweDIzLAotKwkweDAyLDB4YTIsMHhlNiwweGU2LDB4 N2IsMHhmZCwweDA2LDB4ZDMsMHgyYiwweGM2LDB4NzksMHg5NiwKLSsJMHgyMiwweDcxLDB4ZDcs MHhiNCwweDBjLDB4ZDcsMHgyZiwweDM4LDB4NmUsMHg2NCwweGUwLDB4ZDcsCi0rCTB4ZWYsMHg4 NiwweGNhLDB4OGMsMHhhNSwweGQxLDB4NDIsMHgyOCwweGRjLDB4MmEsMHg0ZiwweDE2LAotKwkw eGUzLDB4MTgsMHg5OCwweDg2LDB4YjUsMHg5OSwweDA2LDB4NzQsMHhmNCwweDIwLDB4MGYsMHgz YSwKLSsJMHg0YywweGY2LDB4NWEsMHgzZiwweDBkLDB4ZGIsMHhhMSwweGZhLDB4NjcsMHgyZCww eGZmLDB4MmYsCi0rCTB4NWUsMHgxNCwweDNkLDB4MTAsMHhlNCwweGU5LDB4N2EsMHhlOCwweDRm LDB4NmQsMHhhMCwweDk1LAotKwkweDM1LDB4ZDUsMHhiOSwweGRmLDB4MjUsMHg5MSwweDgxLDB4 YTcsMHg5YiwweDYzLDB4YjAsMHg2OSwKLSsJMHhlOSwweDQ5LDB4OTcsMHgyYiwweDAyLDB4YmEs MHgzNiwweGIzLDB4NTgsMHg2YSwweGFiLDB4N2UsCi0rCTB4NDUsMHhmMywweDIyLDB4ZjgsMHgy ZSwweDRlLDB4ODUsMHhjYSwweDNhLDB4YjgsMHg1NSwweDkxLAotKwkweGIzLDB4YzIsMHhhOSww eDY2Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3B1 Yl9rZXlbXSA9IHsKLSsJMHgyNCwweDUyLDB4ZjMsMHhjYywweGJlLDB4OWUsMHhkNSwweGNhLDB4 N2QsMHhjNywweDRjLDB4NjAsCi0rCTB4MmIsMHg5OSwweDIyLDB4NmUsMHg4ZiwweDJmLDB4YWIs MHgzOCwweGU3LDB4ZDcsMHhkZCwweGZiLAotKwkweDc1LDB4NTMsMHg5YiwweDE3LDB4MTUsMHg1 ZSwweDlmLDB4Y2YsMHhkMSwweGFiLDB4YTUsMHg2NCwKLSsJMHhlYiwweDg1LDB4MzUsMHhkOCww eDEyLDB4YzksMHhjMiwweGRjLDB4ZjksMHg3MiwweDg0LDB4NDQsCi0rCTB4MWIsMHhjNCwweDgy LDB4MjQsMHgzNiwweDI0LDB4YzcsMHhmNCwweDU3LDB4NTgsMHgwYywweDFjLAotKwkweDM4LDB4 YTUsMHg3YywweDQ2LDB4YzQsMHg1NywweDM5LDB4MjQsMHg3MCwweGVkLDB4YjUsMHgyYywKLSsJ MHhiNSwweGE2LDB4ZTAsMHgzZiwweGU2LDB4MjgsMHg3YiwweGI2LDB4ZjQsMHg5YSwweDQyLDB4 YTIsCi0rCTB4MDYsMHg1YSwweDA1LDB4NGYsMHgwMywweDA4LDB4MzksMHhkZiwweDFmLDB4ZDMs MHgxNCwweDljLAotKwkweDRjLDB4YTAsMHg1MywweDFkLDB4ZDgsMHhjYSwweDhhLDB4YWEsMHg5 YywweGM3LDB4MzMsMHg3MSwKLSsJMHg5MywweDM4LDB4NzMsMHg0OCwweDMzLDB4NjEsMHgxOCww eDIyLDB4NDUsMHg0NSwweGU4LDB4OGMsCi0rCTB4ODAsMHhmZiwweGQ4LDB4NzYsMHg1ZCwweDc0 LDB4MzYsMHgwMywweDMzLDB4Y2MsMHhhYiwweDk5LAotKwkweDcyLDB4NzcsMHg5YiwweDY1LDB4 MjUsMHhhNiwweDViLDB4ZGQsMHgwZCwweDEwLDB4YzYsMHg3NSwKLSsJMHhjMSwweDA5LDB4YmIs MHhkMywweGU1LDB4YmUsMHg0ZCwweDcyLDB4ZWYsMHg2ZSwweGJhLDB4NmUsCi0rCTB4NDMsMHg4 ZCwweDUyLDB4MjYsMHgyMywweDdkLDB4YjgsMHg4OCwweDM3LDB4OWMsMHg1ZiwweGNjLAotKwkw eDQ3LDB4YTMsMHg4NCwweDdmLDB4ZjYsMHgzNywweDExLDB4YmEsMHhlZCwweDZkLDB4MDMsMHhh ZiwKLSsJMHhlOCwweDFlLDB4NjksMHg0YSwweDQxLDB4M2IsMHg2OCwweDBiLDB4ZDMsMHg4YSww eGI0LDB4OTAsCi0rCTB4M2YsMHg4MywweDcwLDB4YTcsMHgwNywweGVmLDB4NTUsMHgxZCwweDQ5 LDB4NDEsMHgwMiwweDZkLAotKwkweDk1LDB4NzksMHhkNiwweDkxLDB4ZGUsMHg4ZSwweGRhLDB4 YTEsMHg2MSwweDA1LDB4ZWIsMHg5ZCwKLSsJMHhiYSwweDNjLDB4MmYsMHg0YywweDFiLDB4ZWMs MHg1MCwweDgyLDB4NzUsMHhhYSwweDAyLDB4MDcsCi0rCTB4ZTIsMHg1MSwweGI1LDB4ZWMsMHhj YiwweDI4LDB4NmEsMHg0YiwweDAxLDB4ZDQsMHg0OSwweGQzLAotKwkweDBhLDB4Y2IsMHg2Nyww eDM3LDB4MTcsMHhhMCwweGQyLDB4ZmIsMHgzYiwweDUwLDB4YzgsMHg5MywKLSsJMHhmNywweGRh LDB4YjEsMHg0ZgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3Rf MjA0OF9wcml2X2tleVtdID0gewotKwkweDBjLDB4NGIsMHgzMCwweDg5LDB4ZDEsMHhiOCwweDYy LDB4Y2IsMHgzYywweDQzLDB4NjQsMHg5MSwKLSsJMHhmMCwweDkxLDB4NTQsMHg3MCwweGM1LDB4 MjcsMHg5NiwweGUzLDB4YWMsMHhiZSwweGU4LDB4MDAsCi0rCTB4ZWMsMHg1NSwweGY2LDB4Y2MK LSt9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9kc2E7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRf ZHNhKCkKLSsgICAgewotKyAgICBjb3JydXB0X2RzYSA9IDE7Ci0rICAgIH0KLSsKLStpbnQgRklQ U19zZWxmdGVzdF9kc2EoKQotKwl7Ci0rCURTQSAqZHNhID0gTlVMTDsKLSsJRVZQX1BLRVkgKnBr ID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWRzYSA9IERTQV9uZXcoKTsKLSsKLSsJaWYo ZHNhID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQo ZHNhLCBwLCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBx LCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBkc2Ff dGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBkc2Ff dGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwgZHNh X3Rlc3RfMjA0OCk7Ci0rCi0rCWlmIChjb3JydXB0X2RzYSkKLSsJCUJOX3NldF9iaXQoZHNhLT5w dWJfa2V5LCAyMDQ3KTsKLSsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJ CWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOwotKwotKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwgMCwKLSsJCQkJCU5VTEwsIDAsIEVW UF9zaGEyNTYoKSwgMCwKLSsJCQkJCSJEU0EgU0hBMjU2IikpCi0rCQlnb3RvIGVycjsKLSsJcmV0 ID0gMTsKLSsKLSsJZXJyOgotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsJZWxz ZSBpZiAoZHNhKQotKwkJRFNBX2ZyZWUoZHNhKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDU3Njk0MDgg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCTIwMTItMDQt MjYgMTg6MDA6NTEuNDA1NzY5NDA4ICswMjAwCi1AQCAtMCwwICsxLDE5MSBAQAotKy8qIGZpcGUv ZXZwL2ZpcHNfZW5jLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5n IChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog VGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJp YyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMg d3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBU aGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNl IGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8u ICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBp biB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMs IGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlv bgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUg c2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBI dWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBF cmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRo ZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNl ZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0r ICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBU aGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0 YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlk ZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK LSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0r ICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5 Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29y ZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhl IGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVk IDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChv ciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3Rvcnkg KGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVk c29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNI IERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZv ciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2Yg dGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBs eSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2Vu Y2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwotKyNp bmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rCi0rY29uc3QgRVZQX0NJUEhFUiAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5p ZCkKLSsJewotKwlzd2l0Y2ggKG5pZCkKLSsJCXsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2JjOgot KwkJcmV0dXJuIEVWUF9hZXNfMTI4X2NiYygpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9jY206 Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2Nm YjE6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzEy OF9jZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMTI4KCk7Ci0rCi0rCQljYXNlIE5J RF9hZXNfMTI4X2NmYjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOwotKwotKwkJY2Fz ZSBOSURfYWVzXzEyOF9jdHI6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7Ci0rCi0rCQlj YXNlIE5JRF9hZXNfMTI4X2VjYjoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9lY2IoKTsKLSsKLSsJ CWNhc2UgTklEX2Flc18xMjhfZ2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2djbSgpOwotKwot KwkJY2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfb2ZiKCk7 Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X3h0czoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF94dHMo KTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY2JjOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2Ni YygpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jY206Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJf Y2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2NmYjE6Ci0rCQlyZXR1cm4gRVZQX2Flc18x OTJfY2ZiMSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jZmIxMjg6Ci0rCQlyZXR1cm4gRVZQ X2Flc18xOTJfY2ZiMTI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2NmYjg6Ci0rCQlyZXR1 cm4gRVZQX2Flc18xOTJfY2ZiOCgpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jdHI6Ci0rCQly ZXR1cm4gRVZQX2Flc18xOTJfY3RyKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2VjYjoKLSsJ CXJldHVybiBFVlBfYWVzXzE5Ml9lY2IoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfZ2NtOgot KwkJcmV0dXJuIEVWUF9hZXNfMTkyX2djbSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9vZmIx Mjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJfb2ZiKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2 X2NiYzoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18y NTZfY2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgpOwotKwotKwkJY2FzZSBOSURfYWVz XzI1Nl9jZmIxOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEoKTsKLSsKLSsJCWNhc2UgTklE X2Flc18yNTZfY2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwotKwkJ Y2FzZSBOSURfYWVzXzI1Nl9jZmI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjgoKTsKLSsK LSsJCWNhc2UgTklEX2Flc18yNTZfY3RyOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2N0cigpOwot KwotKwkJY2FzZSBOSURfYWVzXzI1Nl9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfZWNiKCk7 Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2djbToKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9nY20o KTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfb2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2 X29mYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl94dHM6Ci0rCQlyZXR1cm4gRVZQX2Flc18y NTZfeHRzKCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlX2VjYjoKLSsJCXJldHVybiBFVlBfZGVz X2VkZSgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfZWNiOgotKwkJcmV0dXJuIEVWUF9kZXNf ZWRlMygpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2JjOgotKwkJcmV0dXJuIEVWUF9kZXNf ZWRlM19jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjE6Ci0rCQlyZXR1cm4gRVZQ X2Rlc19lZGUzX2NmYjEoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjY0OgotKwkJcmV0 dXJuIEVWUF9kZXNfZWRlM19jZmI2NCgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiODoK LSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNf b2ZiNjQ6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzX29mYigpOwotKwotKwkJY2FzZSBOSURfZGVz X2VkZV9jYmM6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9k ZXNfZWRlX2NmYjY0OgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlX2NmYjY0KCk7Ci0rCi0rCQljYXNl IE5JRF9kZXNfZWRlX29mYjY0OgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlX29mYigpOwotKwotKwkJ ZGVmYXVsdDoKLSsJCXJldHVybiBOVUxMOwotKwotKwkJfQotKwl9Ci0rCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9maXBzLmgKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwky MDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2ZpcHMuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAotQEAg LTAsMCArMSwyNzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBU 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 SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp bmNsdWRlIDxzdGRhcmcuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNlcnJvciBGSVBT IGlzIGRpc2FibGVkLgotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaWZk ZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0rc3RydWN0IGRzYV9z dDsKLStzdHJ1Y3QgcnNhX3N0OwotK3N0cnVjdCBldnBfcGtleV9zdDsKLStzdHJ1Y3QgZW52X21k X3N0OwotK3N0cnVjdCBlbnZfbWRfY3R4X3N0OwotK3N0cnVjdCBldnBfY2lwaGVyX3N0OwotK3N0 cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKLStzdHJ1Y3QgZGhfbWV0aG9kOwotK3N0cnVjdCBDTUFD X0NUWF9zdDsKLStzdHJ1Y3QgaG1hY19jdHhfc3Q7Ci0rCi0raW50IEZJUFNfbW9kdWxlX21vZGVf c2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCk7Ci0raW50IEZJUFNfbW9kdWxlX21vZGUo dm9pZCk7Ci0rY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOwotK2ludCBGSVBTX3Nl bGZ0ZXN0KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKLSt2b2lkIEZJ UFNfY29ycnVwdF9zaGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9hZXModm9p ZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVz dF9hZXNfZ2NtKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHModm9pZCk7Ci0raW50 IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsK LStpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZv aWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7Ci0raW50IEZJUFNfc2Vs ZnRlc3RfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKLSt2b2lkIEZJ UFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lk KTsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0rdm9pZCBGSVBTX3JuZ19zdGljayh2 b2lkKTsKLSt2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpOwotK3ZvaWQgRklQU19kcmJn X3N0aWNrKGludCBvbm9mZik7Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOwotK2ludCBG SVBTX3NlbGZ0ZXN0X3g5MzEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsK LStpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdf YWxsKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWModm9pZCk7Ci0rCi0rdm9pZCBGSVBT X2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7Ci0r Ci0rI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBf X0xJTkVfXywgXAotKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVy cm9yIGlnbm9yZWQiKTsKLSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVjdCBl dnBfcGtleV9zdCAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNs ZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAot KwkJCWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdz LAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLStpbnQgZmlwc19jaXBoZXJfdGVzdChz dHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKLSsJCQljb25zdCBzdHJ1Y3QgZXZwX2NpcGhl cl9zdCAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCQljb25zdCB1 bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJCQlpbnQgbGVuKTsKLSsKLSt2 b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGVudl9t ZF9zdCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGV2 cF9jaXBoZXJfc3QgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotKwotKy8qIEJF R0lOIEVSUk9SIENPREVTICovCi0rLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5l cmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSsgKiBtYWRlIGFmdGVy IHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1 bi4KLSsgKi8KLSt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKLSsKLSsvKiBFcnJv ciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLwotKwotKy8qIEZ1bmN0aW9uIGNvZGVz LiAqLwotKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAotKyNkZWZp bmUgRklQU19GX0RIX0lOSVQJCQkJCSAxNDgKLSsjZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VFRAkJ CQkgMTYyCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAxCi0rI2Rl ZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yCQkJIDEwNwotKyNkZWZpbmUgRklQU19G X0RTQV9ET19TSUdOCQkJCSAxMDIKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAx MDMKLSsjZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZCQkJCSAxNjMKLSsjZGVmaW5lIEZJ UFNfRl9FQ0RTQV9ET19TSUdOCQkJCSAxNjQKLSsjZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19WRVJJ RlkJCQkJIDE2NQotKyNkZWZpbmUgRklQU19GX0VDX0tFWV9HRU5FUkFURV9LRVkJCQkgMTY2Ci0r I2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkgMTI0Ci0rI2RlZmluZSBGSVBTX0Zf RVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJ CQkJIDEwNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBX1BSTkcJCQkgMTUxCi0rI2Rl ZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQwkJCQkgMTQyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19D SEVDS19FQ19QUk5HCQkJIDE1MgotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJ TkdFUlBSSU5UCQkgMTA1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJCQkJIDEwNgot KyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBX1BSTkcJCQkgMTUwCi0rI2RlZmluZSBGSVBT X0ZfRklQU19DSVBIRVIJCQkJIDE2MAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSSU5JVAkJ CQkgMTQzCi0rI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJfQ1RYX0NUUkwJCQkgMTYxCi0rI2Rl ZmluZSBGSVBTX0ZfRklQU19ESUdFU1RGSU5BTAkJCQkgMTU4Ci0rI2RlZmluZSBGSVBTX0ZfRklQ U19ESUdFU1RJTklUCQkJCSAxMjgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFURQkJ CSAxNTkKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllURVMJCQkJIDEzMQotKyNkZWZpbmUg RklQU19GX0ZJUFNfRFJCR19DSEVDSwkJCQkgMTQ2Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJH X0NQUk5HX1RFU1QJCQkgMTMyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL CQkJIDEzNgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURQkJCSAxMzQKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5JVAkJCQkgMTM1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19E UkJHX0lOU1RBTlRJQVRFCQkJIDEzOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcJCQkJ IDEzOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNFRUQJCQkJIDE0MAotKyNkZWZpbmUg RklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUCQkJIDE0MQotKyNkZWZpbmUgRklQU19GX0ZJUFNf RFNBX0NIRUNLCQkvKiB1bnVzZWQgKi8JIDEwNwotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1NJ R05fRElHRVNUCQkJIDE1NAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1ZFUklGWV9ESUdFU1QJ CQkgMTU1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19HRVRfRU5UUk9QWQkJCQkgMTQ3Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJLyogdW51c2VkICovCSAxMDgKLSsjZGVmaW5lIEZJUFNf Rl9GSVBTX01PRFVMRV9NT0RFX1NFVAkJCSAxMDgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlf U0lHTkFUVVJFX1RFU1QJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0FERAkJCQkg MTM3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMjIKLSsjZGVmaW5lIEZJ UFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTCQkJIDE2NwotKyNkZWZpbmUgRklQU19GX0ZJUFNf UkFORF9TRUVECQkJCSAxNjgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRAkJ CSAxMjYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTCQkJCSAxMjcKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVAkJCSAxNTYKLSsjZGVmaW5lIEZJUFNfRl9GSVBT X1JTQV9WRVJJRllfRElHRVNUCQkJIDE1NwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTCQkJIDExMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTQkJCSAxNDUK LSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19HQ00JCQkgMTI5Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTCQkJIDE0NAotKyNkZWZpbmUgRklQU19GX0ZJUFNf U0VMRlRFU1RfQ01BQwkJCSAxMzAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJ CSAxMTEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBCQkJIDEzMwotKyNkZWZpbmUgRklQU19GX0ZJUFNf U0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORwkv KiB1bnVzZWQgKi8JIDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAx MTUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEJCQkgMTE0Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19TRVRfUFJOR19LRVkJCQkgMTUzCi0rI2RlZmluZSBGSVBTX0ZfSEFTSF9GSU5B TAkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOCQkJIDExNgotKyNk ZWZpbmUgRklQU19GX1JTQV9FQVlfSU5JVAkJCQkgMTQ5Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VB WV9QUklWQVRFX0RFQ1JZUFQJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0VOQ1JZUFQJCQkgMTE4Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJ CSAxMTkKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAotKyNk ZWZpbmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKLSsjZGVmaW5lIEZJ UFNfRl9TU0xFQVlfUkFORF9CWVRFUwkvKiB1bnVzZWQgKi8JIDEyMgotKwotKy8qIFJlYXNvbiBj b2Rlcy4gKi8KLSsjZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNU RUQJIDE1MAotKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcJCSAxMjUK LSsjZGVmaW5lIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRAkJCSAxMzQKLSsjZGVmaW5lIEZJ UFNfUl9BVVRIRU5USUNBVElPTl9GQUlMVVJFCQkJIDE1MQotKyNkZWZpbmUgRklQU19SX0NBTk5P VF9SRUFEX0VYRQkJLyogdW51c2VkICovCSAxMDMKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVB RF9FWEVfRElHRVNUCS8qIHVudXNlZCAqLwkgMTA0Ci0rI2RlZmluZSBGSVBTX1JfQ09OVFJBRElD VElOR19FVklERU5DRQkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNF RAkJCSAxNTIKLSsjZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNLCQkJCSAxMDMKLSsjZGVmaW5lIEZJ UFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQJCQkgMTA0Ci0rI2RlZmluZSBGSVBTX1JfRU5U Uk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQJCSAxMDUKLSsjZGVmaW5lIEZJUFNfUl9FTlRS T1BZX1NPVVJDRV9TVFVDSwkJCSAxNDIKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJ TkdfRFJCRwkJCSAxMTUKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJ CQkgMTI3Ci0rI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVU CSAxMjQKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkJCQkgMTIyCi0r I2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRQkJCSAxNDAKLSsjZGVmaW5lIEZJ UFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIICAgLyogdW51c2VkICovCSAxMDUKLSsjZGVm aW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUgRklQ U19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0rI2Rl ZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAx MTIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2RlZmlu ZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1JfRlVO Q1RJT05fRVJST1IJCQkJIDExNgotKyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SCQkJCSAx MzcKLSsjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVECQkgMTE4Ci0rI2Rl ZmluZSBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IJCQkgMTE5Ci0rI2RlZmluZSBGSVBTX1JfSU5T VUZGSUNJRU5UX1NFQ1VSSVRZX1NUUkVOR1RICQkgMTIwCi0rI2RlZmluZSBGSVBTX1JfSU5URVJO QUxfRVJST1IJCQkJIDEyMQotKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAx MDkKLSsjZGVmaW5lIEZJUFNfUl9JTlZBTElEX1BBUkFNRVRFUlMJCQkgMTQ0Ci0rI2RlZmluZSBG SVBTX1JfSU5fRVJST1JfU1RBVEUJCQkJIDEyMwotKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hP UlQJCQkJIDEwOAotKyNkZWZpbmUgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQJCQkgMTQ5 Ci0rI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKLSsjZGVmaW5lIEZJUFNf Ul9OT1BSX1RFU1QxX0ZBSUxVUkUJCQkgMTQ1Ci0rI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMl9G QUlMVVJFCQkJIDE0NgotKyNkZWZpbmUgRklQU19SX05PVF9JTlNUQU5USUFURUQJCQkJIDEyNgot KyNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNwotKyNkZWZpbmUgRklQ U19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVECQkgMTI4Ci0rI2RlZmluZSBGSVBT X1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORwkJIDEyOQotKyNkZWZpbmUgRklQU19S X1BSTkdfU1RSRU5HVEhfVE9PX0xPVwkJCSAxNDMKLSsjZGVmaW5lIEZJUFNfUl9QUl9URVNUMV9G QUlMVVJFCQkJCSAxNDcKLSsjZGVmaW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFCQkJCSAxNDgK LSsjZGVmaW5lIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVECQkgMTMwCi0r I2RlZmluZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkcJCSAxMzEKLSsjZGVmaW5l IEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUgkJCSAxMzIKLSsjZGVmaW5lIEZJUFNfUl9SRVNF RURfRVJST1IJCQkJIDEzMwotKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCS8qIHVu dXNlZCAqLwkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJLyogdW51c2Vk ICovCSAxMTYKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQotKyNkZWZp bmUgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUJCQkJIDEzNQotKyNkZWZpbmUgRklQU19SX1NUUkVO R1RIX0VSUk9SX1VOREVURUNURUQJCSAxMzYKLSsjZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUJ CQkJIDExNwotKyNkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IJCQkgMTQxCi0rI2Rl ZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SCQkgMTM4Ci0rI2RlZmluZSBG SVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFCQkJIDEzOQotKyNkZWZpbmUgRklQU19SX1VOU1VQ UE9SVEVEX1BMQVRGT1JNCQkJIDExMwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2Vu ZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2ht YWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfaG1hY19z ZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0 ZXN0LmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCTIwMTItMDQtMjYgMTg6 MDA6NTEuNDA1NzY5NDA4ICswMjAwCi1AQCAtMCwwICsxLDEzNyBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz 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 LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwljb25zdCBFVlBfTUQgKigqYWxnKSh2b2lkKTsKLSsJ Y29uc3QgY2hhciAqa2V5LCAqaXY7Ci0rCXVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9T SVpFXTsKLSt9IEhNQUNfS0FUOwotKwotK3N0YXRpYyBjb25zdCBITUFDX0tBVCB2ZWN0b3JbXSA9 IHsKLSsgICAgewlFVlBfc2hhMSwKLSsJLyogZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJs aWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8KLSsJIjAxMjM0NTY3ODk6Ozw9 Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHgwOSwweDIyLDB4ZDMsMHg0MCwweDVmLDB4 YWEsMHgzZCwweDE5LAotKwkgIDB4NGYsMHg4MiwweGE0LDB4NTgsMHgzMCwweDczLDB4N2QsMHg1 YywKLSsJICAweGM2LDB4YzcsMHg1ZCwweDI0IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhMjI0 LAotKwkvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92ZS4uLiAqLwotKwkiMDEyMzQ1Njc4 OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweGRkLDB4ZWYsMHgwYSwweDQwLDB4 Y2IsMHg3ZCwweDUwLDB4ZmIsCi0rCSAgMHg2ZSwweGU2LDB4Y2UsMHhhMSwweDIwLDB4YmEsMHgy NiwweGFhLAotKwkgIDB4MDgsMHhmMywweDA3LDB4NzUsMHg4NywweGI4LDB4YWQsMHgxYiwKLSsJ ICAweDhjLDB4OGQsMHgxMiwweGM3IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhMjU2LAotKwki MDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweGI4LDB4ZjIsMHgw ZCwweGI1LDB4NDEsMHhlYSwweDQzLDB4MDksCi0rCSAgMHhjYSwweDRlLDB4YTksMHgzOCwweDBj LDB4ZDAsMHhlOCwweDM0LAotKwkgIDB4ZjcsMHgxZiwweGJlLDB4OTEsMHg3NCwweGEyLDB4NjEs MHgzOCwKLSsJICAweDBkLDB4YzEsMHg3ZSwweGFlLDB4NmEsMHgzNCwweDUxLDB4ZDkgfQotKyAg ICB9LAotKyAgICB7CUVWUF9zaGEzODQsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJT YW1wbGUgIzIiLAotKwl7IDB4MDgsMHhiYywweGIwLDB4ZGEsMHg0OSwweDFlLDB4ODcsMHhhZCwK LSsJICAweDlhLDB4MWQsMHg2YSwweGNlLDB4MjMsMHhjNSwweDBiLDB4ZjYsCi0rCSAgMHhiNyww eDE4LDB4MDYsMHhhNSwweDc3LDB4Y2QsMHg0OSwweDA0LAotKwkgIDB4ODksMHhmMSwweGU2LDB4 MjMsMHg0NCwweDUxLDB4NTEsMHg5ZiwKLSsJICAweDg1LDB4NTYsMHg4MCwweDc5LDB4MGMsMHhi ZCwweDRkLDB4NTAsCi0rCSAgMHhhNCwweDVmLDB4MjksMHhlMywweDkzLDB4ZjAsMHhlOCwweDdm IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhNTEyLAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMi LAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDgwLDB4OWQsMHg0NCwweDA1LDB4N2MsMHg1YiwweDk1 LDB4NDEsCi0rCSAgMHgwNSwweGJkLDB4MDQsMHgxMywweDE2LDB4ZGIsMHgwZiwweGFjLAotKwkg IDB4NDQsMHhkNSwweGE0LDB4ZDUsMHhkMCwweDg5LDB4MmIsMHhkMCwKLSsJICAweDRlLDB4ODYs MHg2NCwweDEyLDB4YzAsMHg5MCwweDc3LDB4NjgsCi0rCSAgMHhmMSwweDg3LDB4YjcsMHg3Yyww eDRmLDB4YWUsMHgyYywweDJmLAotKwkgIDB4MjEsMHhhNSwweGI1LDB4NjUsMHg5YSwweDRmLDB4 NGIsMHhhNywKLSsJICAweDQ3LDB4MDIsMHhhMywweGRlLDB4OWIsMHg1MSwweGYxLDB4NDUsCi0r CSAgMHhiZCwweDRmLDB4MjUsMHgyNywweDQyLDB4OTgsMHg5OSwweDA1IH0KLSsgICAgfSwKLSt9 OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQotKyAgICB7Ci0rICAgIGludCBuOwotKyAg ICB1bnNpZ25lZCBpbnQgICAgb3V0bGVuOwotKyAgICB1bnNpZ25lZCBjaGFyICAgb3V0W0VWUF9N QVhfTURfU0laRV07Ci0rICAgIGNvbnN0IEVWUF9NRCAgICptZDsKLSsgICAgY29uc3QgSE1BQ19L QVQgKnQ7Ci0rCi0rICAgIGZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9m KHZlY3RvclswXSk7IG4rKyx0KyspCi0rCXsKLSsJbWQgPSAoKnQtPmFsZykoKTsKLSsJSE1BQyht ZCx0LT5rZXksc3RybGVuKHQtPmtleSksCi0rCQkoY29uc3QgdW5zaWduZWQgY2hhciAqKXQtPml2 LHN0cmxlbih0LT5pdiksCi0rCQlvdXQsJm91dGxlbik7Ci0rCi0rCWlmKG1lbWNtcChvdXQsdC0+ a2F2YWwsb3V0bGVuKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRF U1RfSE1BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAg fQotKwl9Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9maXBzL2ZpcHNfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19s b2NsLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA1 NzY5NDA4ICswMjAwCi1AQCAtMCwwICsxLDcxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu 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 Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLStleHRl cm4gIkMiIHsKLSsjZW5kaWYKLSsKLSsjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUJ MzIKLSsjZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGtleSwgY29tcCwgcHJlKSBcCi0r CWtleS0+Y29tcCA9IEJOX2JpbjJibihwcmUjI18jI2NvbXAsIHNpemVvZihwcmUjI18jI2NvbXAp LCBrZXktPmNvbXApOyBcCi0rCWlmICgha2V5LT5jb21wKSBcCi0rCQlnb3RvIGVycgotKwotKyNk ZWZpbmUgZmlwc19wb3N0X3N0YXJ0ZWQoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZpbmUgZmlwc19w b3N0X3N1Y2Nlc3MoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZpbmUgZmlwc19wb3N0X2ZhaWxlZChp ZCwgc3ViaWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQsIGV4 KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQotKwotKyNpZmRlZiAgX19jcGx1c3Bs dXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9maXBzX21kLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX21kLmMK LS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2ZpcHNfbWQuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAotQEAgLTAsMCAr MSwxNDUgQEAKLSsvKiBmaXBzL2V2cC9maXBzX21kLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5 OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3 cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBp bXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVz IFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQg bm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0 byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNB LAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRo ZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24g aXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0 aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBD b3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQg bm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0 aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdp dmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxp YnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVz c2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUg b3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBz b2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRo ZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5 cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93 cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0 aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4g YWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg d3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0r ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlz dHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgot KyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlz IGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIg ZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2Vu Y2UuXQotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsg KiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkuCi0rICoKLSsgKi8KLSsKLSsvKiBNaW5pbWFsIHN0YW5kYWxvbmUgRklQUyB2ZXJzaW9ucyBv ZiBEaWdlc3Qgb3BlcmF0aW9ucyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0r I2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL29iamVjdHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rY29uc3QgRVZQX01E ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKQotKwl7Ci0rCXN3aXRjaCAobmlkKQotKwkJ ewotKwkJY2FzZSBOSURfc2hhMToKLSsJCXJldHVybiBFVlBfc2hhMSgpOwotKwotKwkJY2FzZSBO SURfc2hhMjI0OgotKwkJcmV0dXJuIEVWUF9zaGEyMjQoKTsKLSsKLSsJCWNhc2UgTklEX3NoYTI1 NjoKLSsJCXJldHVybiBFVlBfc2hhMjU2KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEzODQ6Ci0rCQly ZXR1cm4gRVZQX3NoYTM4NCgpOwotKwotKwkJY2FzZSBOSURfc2hhNTEyOgotKwkJcmV0dXJuIEVW UF9zaGE1MTIoKTsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsJfQot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcyBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDY3Njk0Mjkg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwkyMDEyLTA0 LTI2IDE4OjAwOjUxLjQwNjc2OTQyOSArMDIwMAotQEAgLTAsMCArMSwyMDUgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxsaW1pdHMuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCi0rLyogUG93ZXIgb24gc2VsZiB0ZXN0IChQT1NUKSBzdXBwb3J0IGZ1bmN0aW9ucyAq LwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgi Ci0rCi0rLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KLStpbnQgRklQU19zZWxmdGVzdCh2b2lkKQot Kwl7Ci0rCWludCBydiA9IDE7Ci0rCWlmICghRklQU19zZWxmdGVzdF9kcmJnKCkpCi0rCQlydiA9 IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF94OTMxKCkpCi0rCQlydiA9IDA7Ci0rICAgIAlpZiAo IUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQotKwkJcnYgPSAwOwotKyAgICAJaWYgKCFGSVBTX3NlbGZ0 ZXN0X3NoYTIoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2htYWMoKSkKLSsJ CXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2NtYWMoKSkKLSsJCXJ2ID0gMDsKLSsJaWYg KCFGSVBTX3NlbGZ0ZXN0X2FlcygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3Rf YWVzX2NjbSgpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2djbSgpKQot KwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX3h0cygpKQotKwkJcnYgPSAwOwot KwlpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxm dGVzdF9yc2EoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQotKwkJ cnYgPSAwOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLSsvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5 IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCi0rICogc3VwcGxpZWQg aW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAot KyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0 IHdpbGwKLSsgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBh IGtub3duIGFuc3dlciB0ZXN0Ci0rICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9y IGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKLSsgKiBvZiBmYWlsdXJlLiBJZiAicGtl eSIgaXMgTlVMTCBqdXN0IHBlcmZvcm0gYSBtZXNzYWdlIGRpZ2VzdCBjaGVjay4KLSsgKi8KLSsK LStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVu c2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cikKLSsJewkKLSsJ aW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7 Ci0rCXVuc2lnbmVkIGludCBzaWdsZW47Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJRVZQX01EX0NU WF9pbml0KCZtY3R4KTsKLSsKLSsJaWYgKGRpZ2VzdCA9PSBOVUxMKQotKwkJZGlnZXN0ID0gRVZQ X3NoYTI1NigpOwotKwotKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQotKwkJJiYg KFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKLSsJCXsKLSsJCXNp ZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7Ci0rCQlpZiAoIXNp ZykKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEVS Ul9SX01BTExPQ19GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCWlm ICh0YnNsZW4gPT0gLTEpCi0rCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOwotKwotKwlp ZiAobWRfZmxhZ3MpCi0rCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxhZ3MpOwot KwotKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKLSsJCWdvdG8g ZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsJCWdv dG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5 KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8 fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKCFF VlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0r CWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQotKwkJZ290byBlcnJv cjsKLSsJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtleSk7Ci0r Ci0rCWVycm9yOgotKwlpZiAoc2lnICE9IHNpZ3RtcCkKLSsJCU9QRU5TU0xfZnJlZShzaWcpOwot KwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwlpZiAocmV0ICE9IDEpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1RfRkFJTFVS RSk7Ci0rCQlpZiAoZmFpbF9zdHIpCi0rCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIs IGZhaWxfc3RyKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotKy8q IEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0IGRhdGEs IHZlcmlmeSByZXN1bHQKLSsgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBhbmQgY29t cGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KLSsgKi8KLSsKLStpbnQgZmlwc19jaXBoZXJf dGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCi0rCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAot KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICpjaXBoZXJ0ZXh0LAotKwkJCWludCBsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBwbHRt cFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFtGSVBT X01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsKLSsJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJUFNf TUFYX0NJUEhFUl9URVNUX1NJWkUpOwotKwltZW1zZXQocGx0bXAsIDAsIEZJUFNfTUFYX0NJUEhF Ul9URVNUX1NJWkUpOwotKwltZW1zZXQoY2l0bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJ WkUpOwotKwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwg aXYsIDEpIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKEVWUF9DaXBoZXIoY3R4LCBjaXRtcCwg cGxhaW50ZXh0LCBsZW4pIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKG1lbWNtcChjaXRtcCwg Y2lwaGVydGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgo Y3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYg KEVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbikgPD0gMCkKLSsJCXJldHVybiAwOwot KwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikpCi0rCQlyZXR1cm4gMDsKLSsJcmV0 dXJuIDE7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2ZpcHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMK LS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTItMDQt MjYgMTg6MDA6NTEuNDA2NzY5NDI5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvZmlwc19yYW5kLmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDY3Njk0MjkgKzAyMDAKLUBAIC0w LDAgKzEsNDU3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rLyoKLSsgKiBUaGlz IGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEuMi40Lgot KyAqLwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0r Ci0rLyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0 aW1ldmFsIHdvbid0Ci0rICAgYmUgZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3QgYmUg ZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCi0rICAgbGlrZSBERUMgQyBpbiBBTlNJIEMg bW9kZS4gICovCi0rI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECi0rI2RlZmluZSBfWE9Q RU5fU09VUkNFX0VYVEVOREVEIDEKLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2lmICEoZGVmaW5lZChPUEVOU1NM X1NZU19XSU4zMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSkKLSsjIGluY2x1ZGUg PHN5cy90aW1lLmg+Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykK LSsjIGluY2x1ZGUgPHRpbWUuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2lm bmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKLSsjICBpbmNs dWRlIE9QRU5TU0xfVU5JU1RECi0rIyBlbHNlCi0rIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0rIyBl bmRpZgotKyNlbmRpZgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsKLSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKLSsKLSsjZGVmaW5lIEFFU19CTE9DS19M RU5HVEgJMTYKLSsKLSsKLSsvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCi0rCi0r dHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IHNlZWRlZDsKLSsJaW50IGtleWVkOwotKwlpbnQg dGVzdF9tb2RlOwotKwlpbnQgc2Vjb25kOwotKwlpbnQgZXJyb3I7Ci0rCXVuc2lnbmVkIGxvbmcg Y291bnRlcjsKLSsJQUVTX0tFWSBrczsKLSsJaW50IHZwb3M7Ci0rCS8qIFRlbXBvcmFyeSBzdG9y YWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCi0rCXVuc2lnbmVkIGNoYXIg dG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19M RU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25l ZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCX0gRklQU19QUk5HX0NUWDsKLSsKLStz dGF0aWMgRklQU19QUk5HX0NUWCBzY3R4OwotKwotK3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwg PSAwOwotKwotK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZikKLSsJewotKwlmaXBzX3By bmdfZmFpbCA9IG9ub2ZmOwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQotKwl7 Ci0rCUZJUFNfeDkzMV9zdGljaygxKTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfcmFuZF9w cm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwljdHgtPnNlZWRlZCA9IDA7Ci0r CWN0eC0+a2V5ZWQgPSAwOwotKwljdHgtPnRlc3RfbW9kZSA9IDA7Ci0rCWN0eC0+Y291bnRlciA9 IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJY3R4LT5lcnJvciA9IDA7Ci0rCWN0eC0+dnBvcyA9 IDA7Ci0rCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOwotKwlPUEVO U1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7Ci0rCX0KLSsJCi0rCi0rc3Rh dGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQotKwl7Ci0rCWlmIChGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRVRfUFJO R19LRVksIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlm IChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKLSsJCXsKLSsJ CS8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCi0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQUVT X3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7Ci0rCWlmIChrZXls ZW4gPT0gMTYpCi0rCQl7Ci0rCQltZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKLSsJCWN0 eC0+a2V5ZWQgPSAyOwotKwkJfQotKwllbHNlCi0rCQljdHgtPmtleWVkID0gMTsKLSsJY3R4LT5z ZWVkZWQgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3Rh dGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGludCBzZWVkbGVuKQotKwl7Ci0rCXVuc2ln bmVkIGludCBpOwotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQlyZXR1cm4gMDsKLSsJLyogSW4gdGVz dCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCi0rCWlmIChjdHgtPnRlc3RfbW9k ZSkKLSsJCXsKLSsJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJcmV0dXJu IDA7Ci0rCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCWN0eC0+ c2VlZGVkID0gMTsKLSsJCXJldHVybiAxOwotKwkJfQotKwkvKiBPdXRzaWRlIHRlc3QgbW9kZSBY T1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KLSsJZm9yIChpID0gMDsgaSA8 IHNlZWRsZW47IGkrKykKLSsJCXsKLSsJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtpXTsK LSsJCWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQl7Ci0rCQkJY3R4LT52 cG9zID0gMDsKLSsJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxlbmd0 aCBlcXVhbHMKLSsgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1h dGNoLgotKyAJCQkgKi8gCi0rCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKLSsJCQkJewotKwkJCQlp ZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQotKwkJCQkJewotKwkJCQkJUkFO RGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAotKwkJCQkJCVJBTkRfUl9QUk5HX1NFRURf TVVTVF9OT1RfTUFUQ0hfS0VZKTsKLSsJCQkJCXJldHVybiAwOwotKwkJCQkJfQotKwkJCQlPUEVO U1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7Ci0rCQkJCWN0eC0+a2V5ZWQgPSAxOwotKwkJ CQl9Ci0rCQkJY3R4LT5zZWVkZWQgPSAxOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLStzdGF0aWMgaW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgpCi0r CXsKLSsJaWYgKGN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9U RVNUX01PREUsUkFORF9SX1BSTkdfS0VZRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWN0eC0+ dGVzdF9tb2RlID0gMTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU194OTMxX3Rlc3Rf bW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOwotKwl9 Ci0rCi0raW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKLSsJewotKwlyZXR1cm4gZmlwc19z ZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSsJfQotKwotKwotK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVu c2lnbmVkIGNoYXIgKmR0KQotKwl7Ci0rCWlmICghc2N0eC50ZXN0X21vZGUpCi0rCQl7Ci0rCQlS QU5EZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsK LSsJCXJldHVybiAwOwotKwkJfQotKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5H VEgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVk IGNoYXIgKmR0KQotKwl7Ci0rCWlmICghc2N0eC50ZXN0X21vZGUpCi0rCQl7Ci0rCQlSQU5EZXJy KFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOwot KwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFy ICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpCi0rCXsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lO MzIKLSsJRklMRVRJTUUgZnQ7Ci0rI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQot KyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOwotKyNlbHNlCi0rCXN0cnVjdCB0aW1ldmFsIHR2 OwotKyNlbmRpZgotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXVuc2lnbmVk IGxvbmcgcGlkOwotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlHZXRT eXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0 LmR3SGlnaERhdGVUaW1lICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0 LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFy KSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWdu ZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsJYnVmWzRdID0g KHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7Ci0rCWJ1Zls1XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzZd ID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJ YnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZm KTsKLSsjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rCWNsb2NrX2dldHRpbWUo Q0xPQ0tfUkVBTFRJTUUsICZ0cyk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHMudHZf c2VjICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiA4 KSAmIDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gMTYp ICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAyNCkg JiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9uc2VjICYgMHhmZik7 Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZmKTsK LSsJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAxNikgJiAweGZmKTsK LSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAyNCkgJiAweGZmKTsK LSsjZWxzZQotKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOwotKwlidWZbMF0gPSAodW5zaWduZWQg Y2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0 di50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHYu dHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0di50 dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZf dXNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+ IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4g MTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4g MjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoKnBjdHIg JiAweGZmKTsKLSsJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gOCkgJiAweGZm KTsKLSsJYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDE2KSAmIDB4ZmYpOwot KwlidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMjQpICYgMHhmZik7Ci0rCi0r CSgqcGN0cikrKzsKLSsKLSsKLSsjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwlwaWQ9 KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7Ci0rCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikgKHBp ZCAmIDB4ZmYpOwotKwlidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYgMHhm Zik7Ci0rCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7Ci0r CWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7Ci0rI2VuZGlm Ci0rICAgIH0KLSsKLStzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0r CQkJdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBpbnQgb3V0bGVuKQotKwl7Ci0rCXVuc2ln bmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5z aWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCWludCBpOwotKwlpZiAoY3R4LT5l cnJvcikKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19FUlJP Uik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPmtleWVkKQotKwkJewotKwkJUkFO RGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKLSsJCXJldHVybiAwOwot KwkJfQotKwlpZiAoIWN0eC0+c2VlZGVkKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19S QU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWZvciAo OzspCi0rCQl7Ci0rCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCUZJUFNfZ2V0X3RpbWV2ZWMo Y3R4LT5EVCwgJmN0eC0+Y291bnRlcik7Ci0rCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4 LT5rcyk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJCXRt cFtpXSA9IElbaV0gXiBjdHgtPlZbaV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgtPmtz KTsKLSsJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1wW2ld ID0gUltpXSBeIElbaV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOwot KwkJLyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KLSsJCWlmIChjdHgtPnNlY29uZCkKLSsJCQl7 Ci0rCQkJaWYgKGZpcHNfcHJuZ19mYWlsKQotKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNf QkxPQ0tfTEVOR1RIKTsKLSsJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19M RU5HVEgpKQotKwkJCQl7Ci0rCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9S X1BSTkdfU1RVQ0spOwotKwkJCQljdHgtPmVycm9yID0gMTsKLSsJCQkJZmlwc19zZXRfc2VsZnRl c3RfZmFpbCgpOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCW1lbWNweShjdHgt Pmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJaWYgKCFjdHgtPnNlY29uZCkKLSsJCQl7 Ci0rCQkJY3R4LT5zZWNvbmQgPSAxOwotKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJCWNv bnRpbnVlOwotKwkJCX0KLSsKLSsJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJ CQl7Ci0rCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0rCi0r CQltZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCW91dCArPSBBRVNfQkxPQ0tf TEVOR1RIOwotKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7Ci0rCQl9Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0rCi0raW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwgaW50IGtleWxlbikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBU T19MT0NLX1JBTkQpOwotKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXls ZW4pOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7 Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKLSsJewotKwlyZXR1cm4gRklQU194OTMxX3NldF9r ZXkoa2V5LCBrZXlsZW4pOwotKwl9Ci0rCi0raW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQg KnNlZWQsIGludCBzZWVkbGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwg c2VlZGxlbik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJu IHJldDsKLSsJfQotKwotKwotK2ludCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0 LCBpbnQgY291bnQpCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9D S19SQU5EKTsKLSsJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKLSsJQ1JZUFRP X3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50 IEZJUFNfeDkzMV9zdGF0dXModm9pZCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fcl9sb2Nr KENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBzY3R4LnNlZWRlZDsKLSsJQ1JZUFRPX3JfdW5s b2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rdm9pZCBGSVBT X3g5MzFfcmVzZXQodm9pZCkKLSsJewotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQ VE9fTE9DS19SQU5EKTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX3NlZWQoY29u c3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCi0rCXsKLSsJRklQU194OTMxX3NlZWQoc2VlZCwg c2VlZGxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RvX3JhbmRf YWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAotKwkJCQkJZG91YmxlIGFkZF9lbnRy b3B5KQotKwl7Ci0rCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwlyZXR1cm4gMTsK LSsJfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aD0KLSsgICAg ewotKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKLSsgICAgRklQU194OTMxX2J5dGVzLAotKyAgICBG SVBTX3g5MzFfcmVzZXQsCi0rICAgIGZpcHNfZG9fcmFuZF9hZGQsCi0rICAgIEZJUFNfeDkzMV9i eXRlcywKLSsgICAgRklQU194OTMxX3N0YXR1cwotKyAgICB9OwotKwotK2NvbnN0IFJBTkRfTUVU SE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpCi0rewotKyAgcmV0dXJuICZyYW5kX3g5MzFfbWV0 aDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9m aXBzX3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCi0t LS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjQwNjc2OTQyOSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2ZpcHNfcmFuZC5oCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA2NzY5NDI5ICswMjAwCi1AQCAtMCww ICsxLDE0NSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAq ICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZm5kZWYgSEVBREVS X0ZJUFNfUkFORF9ICi0rI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKLSsKLSsjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlm Ci0rCi0raW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50 IGtleWxlbik7Ci0raW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7 Ci0raW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRsZW4pOwot KwotK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU194OTMxX3Jlc2V0 KHZvaWQpOwotK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLSsKLStp bnQgRklQU194OTMxX3N0YXR1cyh2b2lkKTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU194 OTMxX21ldGhvZCh2b2lkKTsKLSsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0eF9zdCBEUkJHX0NU WDsKLSsvKiBEUkJHIGV4dGVybmFsIGZsYWdzICovCi0rLyogRmxhZyBmb3IgQ1RSIG1vZGUgb25s eTogdXNlIGRlcml2YXRpb24gZnVuY3Rpb24gY3RyX2RmICovCi0rI2RlZmluZQlEUkJHX0ZMQUdf Q1RSX1VTRV9ERgkJMHgxCi0rLyogUFJORyBpcyBpbiB0ZXN0IHN0YXRlICovCi0rI2RlZmluZQlE UkJHX0ZMQUdfVEVTVAkJCTB4MgotKwotK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBl LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0 eCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0raW50IEZJUFNfZHJiZ19pbnN0YW50 aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6 ZV90IHBlcnNsZW4pOwotK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCBjb25z dCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0raW50IEZJUFNfZHJiZ19n ZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVu LAotKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKwotK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShEUkJHX0NUWCAqZGN0eCk7Ci0rdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0eCk7 Ci0rCi0raW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlzaXpl X3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0r CQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lk ICgqY2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvbGVuKSwKLSsJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCi0rCXNpemVfdCAoKmdldF9u b25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRy b3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xlYW51cF9u b25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpOwot KwotK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlz aXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpLAot Kwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs IHNpemVfdCBvbGVuKSwKLSsJaW50ICgqcmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25z dCB2b2lkICpidWYsIGludCBudW0pLAotKwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0 eCwKLSsJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkpOwotKwot K3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCk7Ci0rdm9pZCBGSVBT X2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsKLStzaXpl X3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IEZJUFNf ZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpOwotK3ZvaWQgRklQU19kcmJnX3NldF9j aGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKLSt2b2lkIEZJUFNf ZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOwot KwotK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KTsKLSsKLStEUkJH X0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpOwotK2NvbnN0IFJBTkRfTUVUSE9EICpG SVBTX2RyYmdfbWV0aG9kKHZvaWQpOwotKwotKwotK2ludCBGSVBTX3JhbmRfc2V0X21ldGhvZChj b25zdCBSQU5EX01FVEhPRCAqbWV0aCk7Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9n ZXRfbWV0aG9kKHZvaWQpOwotKwotK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cyk7 Ci0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKTsKLSsKLSsvKiAxLjAuMCBjb21wYXQg ZnVuY3Rpb25zICovCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25z dCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLStpbnQgRklQU19yYW5kX2J5dGVz KHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwotK2ludCBGSVBT X3JhbmRfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOwotK2lu dCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLStpbnQgRklQU19yYW5kX3N0 YXR1cyh2b2lkKTsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKTsK LSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCi0tLS0gb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1 MS40MDY3Njk0MjkgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3Jh bmRfbGNsLmgJMjAxMi0wNC0yNiAxODowMDo1MS40MDY3Njk0MjkgKzAyMDAKLUBAIC0wLDAgKzEs MjE5IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9sY2wuaCAqLwotKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAot KyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0r Ci0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCBEUkJHX0hBU0hfQ1RYOwotK3R5cGVk ZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19ITUFDX0NUWDsKLSt0eXBlZGVmIHN0cnVj dCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOwotKwotKy8qIDg4OCBiaXRzIGZyb20gMTAu MSB0YWJsZSAyICovCi0rI2RlZmluZSBIQVNIX1BSTkdfTUFYX1NFRURMRU4JMTExCi0rCi0rc3Ry dWN0IGRyYmdfaGFzaF9jdHhfc3QKLSsJewotKwljb25zdCBFVlBfTUQgKm1kOwotKwlFVlBfTURf Q1RYIG1jdHg7Ci0rCXVuc2lnbmVkIGNoYXIgVltIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwotKwl1 bnNpZ25lZCBjaGFyIENbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKLSsJLyogVGVtcG9yYXJ5IHZh bHVlIHN0b3JhZ2U6IHNob3VsZCBhbHdheXMgZXhjZWVkIG1heCBkaWdlc3QgbGVuZ3RoICovCi0r CXVuc2lnbmVkIGNoYXIgdnRtcFtIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwotKwl9OwotKwotK3N0 cnVjdCBkcmJnX2htYWNfY3R4X3N0Ci0rCXsKLSsJY29uc3QgRVZQX01EICptZDsKLSsJSE1BQ19D VFggaGN0eDsKLSsJdW5zaWduZWQgY2hhciBLW0VWUF9NQVhfTURfU0laRV07Ci0rCXVuc2lnbmVk IGNoYXIgVltFVlBfTUFYX01EX1NJWkVdOwotKwl9OwotKwotK3N0cnVjdCBkcmJnX2N0cl9jdHhf c3QKLSsJewotKwlBRVNfS0VZIGtzOwotKwlzaXplX3Qga2V5bGVuOwotKwl1bnNpZ25lZCBjaGFy IEtbMzJdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwkvKiBUZW1wIHZhcmlhYmxlcyB1c2Vk IGJ5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KLSsJQUVTX0tFWSBkZl9rczsKLSsJQUVTX0tFWSBk Zl9reGtzOwotKwkvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFnZSB1c2VkIGJ5IGN0cl9kZiAqLwot Kwl1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKLSsJc2l6ZV90IGJsdG1wX3BvczsKLSsJdW5zaWdu ZWQgY2hhciBLWFs0OF07Ci0rCX07Ci0rCi0rLyogRFJCRyBpbnRlcm5hbCBmbGFncyAqLwotKwot Ky8qIEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIgbGlicmFyeSAqLwotKyNkZWZpbmUJRFJC R19GTEFHX05PRVJSCQkJMHgxCi0rLyogQ3VzdG9tIHJlc2VlZCBjaGVja2luZyAqLwotKyNkZWZp bmUJRFJCR19DVVNUT01fUkVTRUVECQkweDIKLSsKLSsvKiBEUkJHIHN0YXR1cyB2YWx1ZXMgKi8K LSsvKiBub3QgaW5pdGlhbGlzZWQgKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVTX1VOSU5JVElBTElT RUQJMAotKy8qIG9rIGFuZCByZWFkeSB0byBnZW5lcmF0ZSByYW5kb20gYml0cyAqLwotKyNkZWZp bmUgRFJCR19TVEFUVVNfUkVBRFkJCTEKLSsvKiByZXNlZWQgcmVxdWlyZWQgKi8KLSsjZGVmaW5l IERSQkdfU1RBVFVTX1JFU0VFRAkJMgotKy8qIGZhdGFsIGVycm9yIGNvbmRpdGlvbiAqLwotKyNk ZWZpbmUgRFJCR19TVEFUVVNfRVJST1IJCTMKLSsKLSsvKiBBIGRlZmF1bHQgbWF4aW11bSBsZW5n dGg6IGxhcmdlciB0aGFuIGFueSByZWFzb25hYmxlIHZhbHVlIHVzZWQgaW4gcHJhdGljZSAqLwot KwotKyNkZWZpbmUgRFJCR19NQVhfTEVOR1RICQkJMHg3ZmZmZmZmMAotKy8qIE1heGltdW0gRFJC RyBibG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBhcmUgYmlnZ2VyIHRoYW4gY2lwaGVyIGJsb2Nr cyBzaXplcwotKyAqIHNvIHVzZSBtYXggZGlnZXN0IGxlbmd0aC4KLSsgKi8KLSsjZGVmaW5lIERS QkdfTUFYX0JMT0NLCQkJRVZQX01BWF9NRF9TSVpFCi0rCi0rI2RlZmluZSBEUkJHX0hFQUxUSF9J TlRFUlZBTAkJKDEgPDwgMjQpCi0rCi0rLyogRFJCRyBjb250ZXh0IHN0cnVjdHVyZSAqLwotKwot K3N0cnVjdCBkcmJnX2N0eF9zdAotKwl7Ci0rCS8qIEZpcnN0IHR5cGVzIGNvbW1vbiB0byBhbGwg aW1wbGVtZW50YXRpb25zICovCi0rCS8qIERSQkcgdHlwZTogYSBOSUQgZm9yIHRoZSB1bmRlcmx5 aW5nIGFsZ29yaXRobSAqLwotKwlpbnQgdHlwZTsKLSsJLyogVmFyaW91cyBleHRlcm5hbCBmbGFn cyAqLwotKwl1bnNpZ25lZCBpbnQgeGZsYWdzOwotKwkvKiBWYXJpb3VzIGludGVybmFsIHVzZSBv bmx5IGZsYWdzICovCi0rCXVuc2lnbmVkIGludCBpZmxhZ3M7Ci0rCS8qIFVzZWQgZm9yIHBlcmlv ZGljIGhlYWx0aCBjaGVja3MgKi8KLSsJaW50IGhlYWx0aF9jaGVja19jbnQsIGhlYWx0aF9jaGVj a19pbnRlcnZhbDsKLSsKLSsJLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzZXR1cCBi eSBtZWNoYW5pc20gZHJiZ19pbml0KCkgY2FsbCAqLwotKwlpbnQgc3RyZW5ndGg7Ci0rCXNpemVf dCBibG9ja2xlbmd0aDsKLSsJc2l6ZV90IG1heF9yZXF1ZXN0OwotKwotKwlzaXplX3QgbWluX2Vu dHJvcHksIG1heF9lbnRyb3B5OwotKwlzaXplX3QgbWluX25vbmNlLCBtYXhfbm9uY2U7Ci0rCXNp emVfdCBtYXhfcGVycywgbWF4X2FkaW47Ci0rCXVuc2lnbmVkIGludCByZXNlZWRfY291bnRlcjsK LSsJdW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKLSsJc2l6ZV90IHNlZWRsZW47Ci0rCWlu dCBzdGF0dXM7Ci0rCS8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5cGljYWxseSB1c2VkIGJ5IHRlc3Qg Z2V0X2VudHJvcHkgKi8KLSsJdm9pZCAqYXBwX2RhdGE7Ci0rCS8qIEltcGxlbWVudGF0aW9uIHNw ZWNpZmljIHN0cnVjdHVyZXMgKi8KLSsJdW5pb24gCi0rCQl7Ci0rCQlEUkJHX0hBU0hfQ1RYIGhh c2g7Ci0rCQlEUkJHX0hNQUNfQ1RYIGhtYWM7Ci0rCQlEUkJHX0NUUl9DVFggIGN0cjsKLSsJCX0g ZDsKLSsJLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0dXAgY2FsbGJhY2tzIGJlbG93ICovCi0r CWludCAoKmluaXQpKERSQkdfQ1RYICpjdHgsIGludCBuaWQsIGludCBzZWN1cml0eSwgdW5zaWdu ZWQgaW50IGZsYWdzKTsKLSsJLyogSW50YW50aWF0ZSBQUk5HICovCi0rCWludCAoKmluc3RhbnRp YXRlKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVf dCBlbnRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2Vs ZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKLSsJ LyogcmVzZWVkICovCi0rCWludCAoKnJlc2VlZCkoRFJCR19DVFggKmN0eCwKLSsJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rCS8qIGdlbmVyYXQgb3V0cHV0ICovCi0rCWlu dCAoKmdlbmVyYXRlKShEUkJHX0NUWCAqY3R4LAotKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvdXRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlu bGVuKTsKLSsJLyogdW5pbnN0YW50aWF0ZSAqLwotKwlpbnQgKCp1bmluc3RhbnRpYXRlKShEUkJH X0NUWCAqY3R4KTsKLSsKLSsJLyogRW50cm9weSBzb3VyY2UgYmxvY2sgbGVuZ3RoICovCi0rCXNp emVfdCBlbnRyb3B5X2Jsb2NrbGVuOwotKwotKwkvKiBlbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlv biAqLwotKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hh ciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9s ZW4pOwotKwkvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIGVudHJvcHkgYnVmZmVy ICovCi0rCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG9sZW4pOwotKwotKwkvKiBub25jZSBnYXRoZXJpbmcgZnVuY3Rpb24g Ki8KLSsJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoq cG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7 Ci0rCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggbm9uY2UgYnVmZmVyICovCi0r CXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs IHNpemVfdCBvbGVuKTsKLSsKLSsJLyogQ29udGludW91cyByYW5kb20gbnVtYmVyIHRlc3QgdGVt cG9yYXJ5IGFyZWEgKi8KLSsJLyogTGFzdCBibG9jayAqLwkKLSsJdW5zaWduZWQgY2hhciBsYltF VlBfTUFYX01EX1NJWkVdOwotKwkvKiBzZXQgaWYgbGIgaXMgdmFsaWQgKi8KLSsJaW50IGxiX3Zh bGlkOwotKwotKwkvKiBDYWxsYmFja3MgdXNlZCB3aGVuIGNhbGxlZCB0aHJvdWdoIFJBTkQgaW50 ZXJmYWNlICovCi0rCS8qIEdldCBhbnkgYWRkaXRpb25hbCBpbnB1dCBmb3IgZ2VuZXJhdGUgKi8K LSsJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0 KTsKLSsJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3Qgb2xlbik7Ci0rCS8qIENhbGxiYWNrIGZvciBSQU5EX3NlZWQoKSwgUkFORF9h ZGQoKSAqLwotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQg KmJ1ZiwgaW50IG51bSk7Ci0rCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAotKwkJ CQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KTsKLSsJfTsKLSsKLSsK LStpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KTsKLStpbnQgZmlwc19kcmJn X2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJC R19DVFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlk LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotK2ludCBmaXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NU WCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KTsKLSsKLStjb25zdCBzdHJ1Y3QgZW52 X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKLSsKLStjb25zdCBzdHJ1Y3Qg ZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7Ci0rCi0rI2RlZmlu ZSBGSVBTX2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKLSsjZGVmaW5lIEZJUFNfZGlnZXN0dXBk YXRlIEVWUF9EaWdlc3RVcGRhdGUKLSsjZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2Vz dEZpbmFsCi0rI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9zaXplCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNzc2OTQ1MSAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYwkyMDEy LTA0LTI2IDE4OjAwOjUxLjQwNzc2OTQ1MSArMDIwMAotQEAgLTAsMCArMSwxOTEgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgot KyNpbmNsdWRlICJlX29zLmgiCi0rCi0rLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1pbGFy IHRvIFJBTkQgZnVuY3Rpb25hbGl0eSBidXQgd2l0aG91dAotKyAqIEVOR0lORSBhbmQgYWRkaXRp b25hbCBjaGVja2luZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRob2RzLgotKyAqLwotKwotK3N0YXRp YyBjb25zdCBSQU5EX01FVEhPRCAqZmlwc19yYW5kX21ldGggPSBOVUxMOwotK3N0YXRpYyBpbnQg Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOwotK3N0YXRpYyBpbnQgZmlwc19yYW5kX2JpdHMg PSAwOwotKwotKy8qIEFsbG93cyBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2YgYml0 cyBhbmQgdXNlcyBub24tRklQUyBtZXRob2RzICovCi0rdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMo aW50IG5iaXRzKQotKwl7Ci0rCWZpcHNfcmFuZF9iaXRzID0gbmJpdHM7Ci0rCX0KLSsKLStpbnQg RklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpCi0rCXsKLSsJaWYg KCFmaXBzX3JhbmRfYml0cykKLSsJCXsKLSsJCWlmIChtZXRoID09IEZJUFNfZHJiZ19tZXRob2Qo KSkKLSsJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDE7Ci0rCQllbHNlIGlmIChtZXRoID09 IEZJUFNfeDkzMV9tZXRob2QoKSkKLSsJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDI7Ci0r CQllbHNlCi0rCQkJewotKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMDsKLSsJCQlpZiAo RklQU19tb2R1bGVfbW9kZSgpKQotKwkJCQl7Ci0rCQkJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFO RF9TRVRfTUVUSE9ELAotKwkJCQkJCUZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJCQlyZXR1 cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCX0KLSsJZmlwc19yYW5kX21ldGggPSBtZXRoOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhv ZCh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3JhbmRfbWV0aDsKLSsJfQotKwotK2NvbnN0IFJB TkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCi0rCXsKLSsJcmV0dXJuIEZJUFNfcmFu ZF9nZXRfbWV0aG9kKCk7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQotKwl7 Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCkKLSsJCWZp cHNfcmFuZF9tZXRoLT5jbGVhbnVwKCk7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3NlZWQoY29u c3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKLSsJewotKwlpZiAoIWZpcHNfYXBw cm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfUkFORF9TRUVELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVy biAwOwotKwkJfQotKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnNlZWQp Ci0rCQlmaXBzX3JhbmRfbWV0aC0+c2VlZChidWYsbnVtKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LSt2b2lkIEZJUFNfcmFuZF9hZGQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50 cm9weSkKLSsJewotKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxl X21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9BREQsIEZJUFNfUl9O T05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuOwotKwkJfQotKwlpZiAoZmlwc19yYW5kX21ldGgg JiYgZmlwc19yYW5kX21ldGgtPmFkZCkKLSsJCWZpcHNfcmFuZF9tZXRoLT5hZGQoYnVmLG51bSxl bnRyb3B5KTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqYnVm LCBGSVBTX1JBTkRfU0laRV9UIG51bSkKLSsJewotKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9t ZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNf UkFORF9CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0K LSsJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5ieXRlcykKLSsJCXJldHVy biBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMoYnVmLG51bSk7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0r aW50IEZJUFNfcmFuZF9wc2V1ZG9fYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtKQot Kwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgp KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1BTRVVET19CWVRFUywgRklQU19S X05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKGZpcHNfcmFuZF9t ZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKQotKwkJcmV0dXJuIGZpcHNfcmFuZF9t ZXRoLT5wc2V1ZG9yYW5kKGJ1ZixudW0pOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLStpbnQgRklQ U19yYW5kX3N0YXR1cyh2b2lkKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGgg JiYgRklQU19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5E X1NUQVRVUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJ aWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMpCi0rCQlyZXR1cm4g Zmlwc19yYW5kX21ldGgtPnN0YXR1cygpOwotKwlyZXR1cm4gMDsKLSsJfQotKwotKy8qIFJldHVy biBpbnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJORy4gRm9yIERSQkcgdGhpcyBpcyBhbiBpbnRl cm5hbAotKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMxIFBSTkcgaXQgaXMgODAgYml0cyAoZnJvbSBT UDgwMC0xMzEpLiBBbnkgb3RoZXIKLSsgKiB0eXBlIG9mIFBSTkcgaXMgbm90IGFwcHJvdmVkIGFu ZCByZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBtYXhpbXVtCi0rICogMjU2IG91dHNpZGUgRklQ UyBtb2RlLgotKyAqLwotKwotK2ludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCkKLSsJewotKwlp ZiAoZmlwc19yYW5kX2JpdHMpCi0rCQlyZXR1cm4gZmlwc19yYW5kX2JpdHM7Ci0rCWlmIChmaXBz X2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAxKQotKwkJcmV0dXJuIEZJUFNfZHJiZ19nZXRfc3RyZW5n dGgoRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpOwotKwllbHNlIGlmIChmaXBzX2FwcHJvdmVkX3Jh bmRfbWV0aCA9PSAyKQotKwkJcmV0dXJuIDgwOwotKwllbHNlIGlmIChmaXBzX2FwcHJvdmVkX3Jh bmRfbWV0aCA9PSAwKQotKwkJewotKwkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCQlyZXR1 cm4gMDsKLSsJCWVsc2UKLSsJCQlyZXR1cm4gMjU2OwotKwkJfQotKwlyZXR1cm4gMDsKLSsJfQot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwotLS0t IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMJMjAx Mi0wNC0yNiAxODowMDo1MS40MDc3Njk0NTEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNzc2OTQ1 MSArMDIwMAotQEAgLTAsMCArMSwxODMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsK LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWdu ZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIg UlsxNl07Ci0rCX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZlY3Rv cnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsKLStzdGF0aWMg dW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSwweDY2LDB4NmQs MHgxMywweDYwLDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhkNCww eDYyLDB4MDJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2ID0gCi0rCXsKLSsJ CQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIs Ci0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKLSsJCQkJLyog ViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAw eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0r CQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAotKwkJIDB4ODQsMHg3 OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfTsKLSsKLStzdGF0aWMgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPQotKwkJezB4MTUsMHhkOCwweDc4LDB4MGQsMHg2Miww eGQzLDB4MjUsMHg2ZSwKLSsJCSAweDQ0LDB4NjQsMHgxMCwweDEzLDB4NjAsMHgyYiwweGE5LDB4 YmMsCi0rCQkgMHg0YSwweGZiLDB4Y2EsMHhlYiwweDRjLDB4OGIsMHg5OSwweDNifTsKLSsKLStz dGF0aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90diA9IAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7 MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSww eDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Yn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTcsMHgwNywweGQ1 LDB4MjgsMHgxOSwweDc5LDB4MWUsMHhlZiwKLSsJCSAweGE1LDB4MGMsMHhiZiwweDI1LDB4ZTUs MHg1NiwweGI0LDB4OTN9Ci0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9r ZXlbMzJdID0KLSsJCXsweDZkLDB4MTQsMHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQsCi0r CQkgMHg4MiwweDhkLDB4ZmEsMHhmMiwweDdhLDB4MDMsMHhiNywweDlmLAotKwkJIDB4MGMsMHhj NywweDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUsMHhiNSwKLSsJCSAweDIxLDB4MDUsMHg4YywweDRm LDB4MzEsMHg3YSwweDgwLDB4YmJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2 ID0KLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEz LDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODh9 LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJ CS8qIFIgKi8KLSsJCXsweDM1LDB4YzcsMHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5LDB4YmMsCi0r CQkgMHg4MiwweDc5LDB4OTksMHhmYiwweGQwLDB4YjMsMHgzYiwweDcyfQotKwl9OwotKwotK3Zv aWQgRklQU19jb3JydXB0X3JuZygpCi0rICAgIHsKLSsgICAgYWVzXzE5Ml90di5WWzBdKys7Ci0r ICAgIH0KLSsKLSsjZGVmaW5lIGZpcHNfeDkzMV90ZXN0KGtleSwgdHYpIFwKLSsJZG9feDkzMV90 ZXN0KGtleSwgc2l6ZW9mIGtleSwgJnR2KQotKwotK3N0YXRpYyBpbnQgZG9feDkzMV90ZXN0KHVu c2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKLSsJCQlBRVNfUFJOR19UViAqdHYpCi0rCXsK LSsJdW5zaWduZWQgY2hhciBSWzE2XSwgVlsxNl07Ci0rCWludCBydiA9IDE7Ci0rCW1lbWNweShW LCB0di0+Viwgc2l6ZW9mKFYpKTsKLSsJaWYgKCFGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxl bikpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfWDkz MSwga2V5bGVuLCBOVUxMKSkKLSsJCXJldHVybiAxOwotKwlpZiAoIWZpcHNfcG9zdF9jb3JydXB0 KEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQotKwkJVlswXSsrOwotKwlGSVBTX3g5MzFf c2VlZChWLCAxNik7Ci0rCUZJUFNfeDkzMV9zZXRfZHQodHYtPkRUKTsKLSsJRklQU194OTMxX2J5 dGVzKFIsIDE2KTsKLSsJaWYgKG1lbWNtcChSLCB0di0+UiwgMTYpKQotKwkJewotKwkJZmlwc19w b3N0X2ZhaWxlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKTsKLSsJCXJ2ID0gMDsKLSsJ CX0KLSsJZWxzZSBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4s IE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBTX3Nl bGZ0ZXN0X3g5MzEoKQotKwl7Ci0rCWludCBydiA9IDE7Ci0rCUZJUFNfeDkzMV9yZXNldCgpOwot KwlpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJ UFNfU0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwot KwkJfQotKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpKQotKwkJ cnYgPSAwOwotKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KSkK LSsJCXJ2ID0gMDsKLSsJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMjU2X2tleSwgYWVzXzI1Nl90 dikpCi0rCQlydiA9IDA7Ci0rCUZJUFNfeDkzMV9yZXNldCgpOwotKwlpZiAoIXJ2KQotKwkJRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwot KwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCkKLSsJewot KwlyZXR1cm4gRklQU19zZWxmdGVzdF94OTMxKCk7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA3NzY5 NDUxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5j CTIwMTItMDQtMjYgMTg6MDA6NTEuNDA3NzY5NDUxICswMjAwCi1AQCAtMCwwICsxLDI1MCBAQAot Ky8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4g U1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNv bmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl IGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9u LCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1 c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0 aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJt cwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFz IHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBi ZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJp YyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9m IHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBm b3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRv Y3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdl LgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBj YW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJl aW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlv dSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVy ZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkg eW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcg YGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0r ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAq IFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2 YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJl IGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFu ZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcg dGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09 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 Ci0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSAiZV9vcy5oIgot KwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOwotKyAgICByZXR1 cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWduZWQg Y2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgUlsx Nl07Ci0rCX0gQUVTX1BSTkdfTUNUOwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbWN0X2tleVsxNl0gPQotKwl7MHg5ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgz NCwweGI1LAotKwkgMHhkOCwweDJiLDB4ZTgsMHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsKLSsK LStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2ID0gewotKwkJCS8qIERU ICovCi0rCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4MjksMHgwMiwweGJhLDB4M2IsCi0rCSAweDY3 LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4YWN9LAotKwkJCS8qIFYgKi8KLSsJezB4 NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcsMHg5NywKLSsJIDB4N2UsMHg3NCwweGZi LDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCi0rCQkJLyogUiAqLwotKwl7MHg0OCwweGU5LDB4 YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAotKwkgMHhlNCwweDU3LDB4OTAsMHhkNSwweGMz LDB4ZmMsMHg5YiwweDczfQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9tY3Rfa2V5WzI0XSA9Ci0rCXsweGI3LDB4NmMsMHgzNCwweGQxLDB4MDksMHg2NywweGFi LDB4NzMsCi0rCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgsMHgxNiwweDBiLDB4OTEsCi0rCSAw eGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4OGF9OwotKwotK3N0YXRpYyBjb25z dCBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4ODQs MHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwKLSsJIDB4ODQsMHgzYywweDBhLDB4 YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCi0rCQkJLyogViAqLwotKwl7MHhiNiwweGFmLDB4ZTYs MHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAotKwkgMHhkZCwweGM3LDB4N2EsMHhjMSwweGJiLDB4 OTAsMHgzYSwweDZkfSwKLSsJCQkvKiBSICovCi0rCXsweGZjLDB4ODUsMHg2MCwweDlhLDB4Mjks MHg2ZiwweGVmLDB4MjEsCi0rCSAweGRkLDB4ODYsMHgyMCwweDMyLDB4OGEsMHgyOSwweDZmLDB4 NDd9Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlb MzJdID0KLSsJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgzYSwKLSsJIDB4 YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKLSsJIDB4YjgsMHg3ZSwweGYx LDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKLSsJIDB4ODYsMHgzMiwweGZjLDB4MWYsMHg1ZSww eDFkLDB4MWUsMHg1MH07Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMjU2X21j dF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHgzMSwweDZlLDB4MzUsMHg5YSwweGIxLDB4NDQs MHhmMCwweGVlLAotKwkgMHg2MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5MiwweDRjfSwK LSsJCQkvKiBWICovCi0rCXsweDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiwweDRkLDB4YTEs Ci0rCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAotKwkJCS8qIFIg Ki8KLSsJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwKLSsJIDB4ZTcs MHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0KLSt9OwotKwotK3N0YXRpYyB2b2lk IGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikKLSsgICAgewotKyAgICB3aGlsZShu LS0gPiAwKQotKwl7Ci0rCXByaW50ZigiICUwMngiLCpiKyspOwotKwl9Ci0rICAgIH0KLSsKLStz dGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1bnNp Z25lZCBjaGFyICpleHBlY3RlZCwKLSsJCSAgICBpbnQgbikKLSsgICAgewotKyAgICBpbnQgaTsK LSsKLSsgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQotKwlpZihyZXN1bHRbaV0gIT0gZXhwZWN0 ZWRbaV0pCi0rCSAgICB7Ci0rCSAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsK LSsJICAgIGR1bXAocmVzdWx0LG4pOwotKwkgICAgcHV0cygiXG4gICAgICAgICAgICAgICBleHBl Y3RlZDoiKTsKLSsJICAgIGR1bXAoZXhwZWN0ZWQsbik7Ci0rCSAgICBwdXRjaGFyKCdcbicpOwot KwkgICAgRVhJVCgxKTsKLSsJICAgIH0KLSsgICAgfQotKwotKwotK3N0YXRpYyB2b2lkIHJ1bl90 ZXN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKLSsJCQkJCQkJY29uc3Qg QUVTX1BSTkdfTUNUICp0dikKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0 WzE2XTsKLSsgICAgaW50IGksIGo7Ci0rICAgIEZJUFNfeDkzMV9yZXNldCgpOwotKyAgICBGSVBT X3g5MzFfdGVzdF9tb2RlKCk7Ci0rICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsK LSsgICAgRklQU194OTMxX3NlZWQodHYtPlYsIDE2KTsKLSsgICAgbWVtY3B5KGR0LCB0di0+RFQs IDE2KTsKLSsgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCi0rCXsKLSsgICAgCUZJUFNf eDkzMV9zZXRfZHQoZHQpOwotKwlGSVBTX3g5MzFfYnl0ZXMoYnVmLCAxNik7Ci0rCS8qIEluY3Jl bWVudCBEVCAqLwotKwlmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCi0rCQl7Ci0rCQlkdFtqXSsr OwotKwkJaWYgKGR0W2pdKQotKwkJCWJyZWFrOwotKwkJfQotKwl9Ci0rCi0rICAgIGNvbXBhcmUo YnVmLHR2LT5SLCAxNik7Ci0rICAgIH0KLSsKLStpbnQgbWFpbigpCi0rCXsKLSsJcnVuX3Rlc3Qo YWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBS TkcgdGVzdCAxIGRvbmVcbiIpOwotKwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVz XzE5Ml9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7Ci0rCXJ1 bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7Ci0rCXByaW50Zigi RklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTIt MDQtMjYgMTg6MDA6NTEuNDA3NzY5NDUxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNzc2OTQ1MSAr MDIwMAotQEAgLTAsMCArMSw0NDQgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot KwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbltd ID0KLSsiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4MzhceEFDXHgy Qlx4OURceEE4XHg3MSIKLSsiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4NDNceEE0XHg0 MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKLSsiXHgxRlx4QjhceERGXHhCQVx4QUZceDAzXHg1 Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKLSsiXHg0OFx4NzZceEVEXHg1 Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIKLSsiXHg3 Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhCN1x4RDlceDNB XHgyNSIKLSsiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIy XHg0NVx4NDVceDk4XHgzOSIKLSsiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVceDFG XHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKLSsiXHg3Rlx4RTJceDUzXHg3Mlx4OThceENB XHgyQVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKLSsiXHhDQiI7Ci0rCi0r c3RhdGljIGludCBjb3JydXB0X3JzYTsKLSsKLStzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtl eSkKLSsgICAgewotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgxMSI7 Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9Ci0rIlx4MDBceEE1XHhE QVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0QiCi0r Ilx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFceDU3 XHg5Nlx4NDEiCi0rIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVceDc0 XHg1RVx4NUNceDM5XHgyNlx4NjkiCi0rIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlceDM5 XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCi0rIlx4QzlceDdGXHhGM1x4QURceDU5 XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCi0rIlx4NDRceEU1 XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1XHhEMlx4MEEi Ci0rIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4Q0Vc eENDXHg0OFx4OTQiCi0rIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZc eDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCi0rIlx4QzEiOwotKwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBwW10gPQotKyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhCM1x4 QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgotKyJceDAxXHg5OVx4RUJceDlGXHg0NFx4 QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgotKyJceDMyXHgxMlx4 NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4MDRceDBBIgot KyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJBXHg1 OFx4RkJceDY1IgotKyJceDk5IjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg cVtdID0KLSsiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJceDMz XHhFQVx4QUFceEQxXHhEOSIKLSsiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFceEQw XHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKLSsiXHg4Nlx4OThceDQwXHhCNFx4MTZceDY2 XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKLSsiXHhDRlx4Q0VceDMz XHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgxNSIKLSsi XHgwMyI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9Ci0rIlx4 NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5 QVx4NUEiCi0rIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhC MFx4NTFceEYyXHhCMVx4M0UiCi0rIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhG Rlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCi0rIlx4MjBceDJCXHgzOFx4RkNceDkxXHgw QVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOwotKwotKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQotKyJceDQ3XHgxRVx4MDJceDkwXHhGRlx4 MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgotKyJceDYxXHhBRFx4 QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3Igot KyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3 QVx4MjJceDBEIgotKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5XHgy NFx4NUFceDk4XHgzNlx4REFceDNEIjsKLSsgICAgCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGlxbXBbXSA9Ci0rIlx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgxOVx4 OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCi0rIlx4QjNceDgwXHhGMlx4NzFceEY3XHgzNFx4 NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCi0rIlx4OUZceEM5XHg4Nlx4 MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCi0rIlx4 OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5XHg4 MFx4MzkiCi0rIlx4RjciOwotKwotKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9mKG4p LTEsIGtleS0+bik7Ci0rICAgIGlmIChjb3JydXB0X3JzYSkKLSsJQk5fc2V0X2JpdChrZXktPm4s IDEwMjQpOwotKyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ZSk7 Ci0rICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKLSsgICAg a2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBrZXktPnApOwotKyAgICBrZXktPnEg PSBCTl9iaW4yYm4ocSwgc2l6ZW9mKHEpLTEsIGtleS0+cSk7Ci0rICAgIGtleS0+ZG1wMSA9IEJO X2JpbjJibihkbXAxLCBzaXplb2YoZG1wMSktMSwga2V5LT5kbXAxKTsKLSsgICAga2V5LT5kbXEx ID0gQk5fYmluMmJuKGRtcTEsIHNpemVvZihkbXExKS0xLCBrZXktPmRtcTEpOwotKyAgICBrZXkt PmlxbXAgPSBCTl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFtcCk7Ci0rICAg IHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKLSsgICAgewot KyAgICBjb3JydXB0X3JzYSA9IDE7Ci0rICAgIH0KLSsKLSsvKiBLbm93biBBbnN3ZXIgVGVzdCAo S0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcKLSsgKiBrYXRf dGJzLgotKyAqLwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9ICJP cGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FUIjsKLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7Ci0rICAweDJELCAweEFGLCAweDZF LCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAweEExLCAweEI5LCAweDQ2LCAweERBLCAweDBGLAot KyAgMHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhDMiwgMHg1NSwgMHgyNywgMHhFNCwgMHgxRCwg MHhEMiwgMHg5MCwgMHhCQiwKLSsgIDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4NTEs IDB4QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4RjgsIDB4RDMsCi0rICAweEQxLCAweERGLCAweEU3 LCAweEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAot KyAgMHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1MSwg MHg2MCwgMHhEMCwgMHhBNywKLSsgIDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4RDks IDB4MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4RjUsCi0rICAweEI2LCAweEYzLCAweEYy LCAweDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAot KyAgMHgwQSwgMHhFOSwgMHg4RSwgMHgzOCwgMHhENywgMHgxOCwgMHhDNiwgMHgyQSwgMHgwRiwg MHhGOCwgMHhCNywgMHgzMSwKLSsgIDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEs IDB4RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEsIDB4RTgsCi0rICAweDIzLCAweEI1LCAweDdG LCAweERDLCAweDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAot KyAgMHgyNiwgMHhDNiwgMHg3OSwgMHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhBOQotK307Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7Ci0r ICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAw eEM1LCAweDU4LCAweEE3LAotKyAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwg MHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKLSsgIDB4QjEsIDB4OUUsIDB4RDIs IDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCi0r ICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAw eDU0LCAweDFDLCAweDg5LAotKyAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwg MHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKLSsgIDB4QjEsIDB4RTYsIDB4N0Is IDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCi0r ICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAw eDYyLCAweEQxLCAweEI1LAotKyAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwg MHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKLSsgIDB4NTgsIDB4RDIsIDB4NzQs IDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCi0r ICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAw eDk1LCAweEMwLCAweDAwLAotKyAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwg MHhFRSwgMHhDMAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9Q U1NfU0hBMjU2W10gPSB7Ci0rICAweDZELCAweDNELCAweEJFLCAweDhGLCAweDYwLCAweDZELCAw eDI1LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAweDg5LAotKyAgMHgwMCwgMHg5NywgMHhGQSwg MHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywgMHg4RiwKLSsg IDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIsIDB4OEQsIDB4 N0QsIDB4NzMsIDB4MjgsCi0rICAweEMxLCAweDc3LCAweEM2LCAweDI3LCAweDk3LCAweDAwLCAw eDhCLCAweDAwLCAweEEzLCAweDk2LCAweDczLCAweDRFLAotKyAgMHg3RCwgMHgyRSwgMHgyQywg MHgzNCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0NywgMHgwNSwKLSsg IDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4 NkQsIDB4MjYsIDB4QkEsCi0rICAweDJGLCAweDdBLCAweDU0LCAweDUzLCAweDRFLCAweEVELCAw eDcxLCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAweEI2LAotKyAgMHgwQiwgMHg0NywgMHgzNCwg MHhBRiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwKLSsg IDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4 MTIsIDB4RTQsIDB4NkQsCi0rICAweDVGLCAweEI3LCAweDAxLCAweERGLCAweEMzLCAweDExLCAw eDZDLCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAweEY2LAotKyAgMHg3MiwgMHhGNCwgMHhGNiwg MHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7Ci0rICAweDQwLCAweEZCLCAweEExLCAw eDIxLCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAotKyAg MHhFQywgMHgxQywgMHhDNCwgMHhDOCwgMHg3QywgMHgyMiwgMHg2NSwgMHg5QywgMHg1NywgMHg0 NSwgMHhDRCwgMHg1RSwKLSsgIDB4ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4 REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4Q0QsCi0rICAweEFBLCAweDI1LCAweEY0LCAw eEIyLCAweEZDLCAweEYwLCAweDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAotKyAg MHg2RiwgMHgwMiwgMHhFRiwgMHhDMSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwgMHhE QywgMHg0MiwgMHg2QywKLSsgIDB4QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4 RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4RkIsCi0rICAweDkxLCAweENBLCAweEY1LCAw eDcwLCAweEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAotKyAg MHgzQSwgMHhCRSwgMHg4OSwgMHgzOCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwgMHhB RCwgMHg0MiwgMHg4OSwKLSsgIDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4RkMsIDB4 MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4NkYsCi0rICAweDQ4LCAweEY2LCAweEFFLCAw eEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAotKyAg MHg0OCwgMHg0NCwgMHhFRSwgMHgxRiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7Ci0rICAw eDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFF LCAweDYzLCAweDhDLAotKyAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhG MiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKLSsgIDB4OUIsIDB4NTQsIDB4OUUsIDB4 QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCi0rICAw eDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5 LCAweDIzLCAweDM5LAotKyAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5 QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKLSsgIDB4N0MsIDB4RTMsIDB4N0YsIDB4 RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCi0rICAw eDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAweEIw LCAweDg1LCAweDEzLAotKyAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwgMHhD OCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKLSsgIDB4MkQsIDB4NjAsIDB4RjUsIDB4 NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4RkUsCi0rICAw eDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAweDdGLCAweDgw LCAweEMyLCAweDg4LAotKyAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgx NCwgMHg4QgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEx W10gPSB7Ci0rICAweDcxLCAweEVFLCAweDFBLCAweEMwLCAweEZFLCAweDAxLCAweDkzLCAweDU0 LCAweDc5LCAweDVDLCAweEYyLCAweDRDLAotKyAgMHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwgMHg4 RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKLSsgIDB4RTcsIDB4 RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAs IDB4Q0YsCi0rICAweERDLCAweDIyLCAweDM3LCAweDhFLCAweEQwLCAweEUxLCAweEFFLCAweDA5 LCAweEUzLCAweDNELCAweDFFLCAweEY4LAotKyAgMHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwgMHhF QywgMHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKLSsgIDB4MjAsIDB4 MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAs IDB4QkEsCi0rICAweEE5LCAweDlFLCAweEU4LCAweEIxLCAweDhBLCAweDYyLCAweDE2LCAweEJG LCAweDRFLCAweENBLCAweDJFLCAweDRFLAotKyAgMHhCQywgMHgyOSwgMHhBOCwgMHg2NywgMHgx MywgMHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKLSsgIDB4MzUsIDB4 MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgs IDB4MUYsCi0rICAweDcyLCAweDA1LCAweERFLCAweEU2LCAweEU4LCAweDdGLCAweDMzLCAweDhB LCAweDc2LCAweDRCLCAweDJGLCAweDk1LAotKyAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4 MCwgMHhEOSwgMHg0NiwgMHhCNAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2F0X1JTQV9TSEEyMjRbXSA9IHsKLSsgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4 MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4RjksCi0rICAweDI1LCAweEJCLCAw eEZBLCAweEQ0LCAweDNBLCAweDM0LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAweDE4LCAweDhE LAotKyAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwgMHhD NSwgMHgxQSwgMHhDNSwgMHg4OSwKLSsgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4 NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCi0rICAweEE0LCAweDAyLCAw eEFELCAweEIxLCAweDZELCAweDQ0LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAweDQxLCAweEU1 LAotKyAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwgMHg1 RSwgMHgwQiwgMHhBOSwgMHhDQywKLSsgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDksIDB4 MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCi0rICAweDBCLCAweDQ0LCAw eDRDLCAweDQ2LCAweDk1LCAweEY0LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAweDNFLCAweEIy LAotKyAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwgMHhD MCwgMHg2NiwgMHhFNiwgMHgzNSwKLSsgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcsIDB4NUUsIDB4 MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCi0rICAweDQwLCAweDIxLCAw eDg5LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAweDhECi0rfTsKLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0gewotKyAgMHgwRCwgMHg1NSwgMHhFMiwg MHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywKLSsg IDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4 N0IsIDB4QUEsIDB4MjMsCi0rICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1LCAw eDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAotKyAgMHg5OCwgMHgyRCwgMHg2OSwg MHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKLSsg IDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4 OTAsIDB4MkQsIDB4MTgsCi0rICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5LCAw eDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAotKyAgMHhCRSwgMHgyMiwgMHhDNywg MHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKLSsg IDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4 ODEsIDB4QTYsIDB4MzgsCi0rICAweEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlELCAw eENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAotKyAgMHgyNywgMHg0OCwgMHgyQiwg MHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKLSsg IDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7Ci0rICAweDFE LCAweEUzLCAweDZBLCAweERELCAweDI3LCAweDRDLCAweEMwLCAweEE1LCAweDI3LCAweEVGLCAw eEU2LCAweDFGLAotKyAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhCRCwg MHg5OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywKLSsgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgs IDB4RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCi0rICAweEE3 LCAweDY1LCAweDUyLCAweDhBLCAweEM4LCAweDQ0LCAweDdFLCAweDg2LCAweDVELCAweEE5LCAw eEE2LCAweDU1LAotKyAgMHg2NSwgMHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwg MHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwKLSsgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUs IDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCi0rICAweDFC LCAweDJCLCAweEIwLCAweDgyLCAweDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUyLCAweDdELCAw eEVCLCAweDhDLAotKyAgMHhGRiwgMHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwg MHhCRiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwKLSsgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAs IDB4REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCi0rICAweDE2 LCAweDI4LCAweDI0LCAweDY0LCAweDA0LCAweDM5LCAweDJELCAweDU4LCAweDFFLCAweDM3LCAw eERDLCAweDA0LAotKyAgMHhCRCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1Niwg MHhCRgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJb XSA9IHsKLSsgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIs IDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCi0rICAweDQ5LCAweDI1LCAweDRBLCAweEExLCAweDZB LCAweDc3LCAweDRDLCAweDM2LCAweDQwLCAweEY4LCAweEIyLCAweDlBLAotKyAgMHgxNSwgMHhF QSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgzMiwg MHhGMSwKLSsgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4QjYs IDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCi0rICAweDhELCAweENDLCAweEFDLCAweDhBLCAweEJC LCAweDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUzLCAweDYyLCAweEI1LAotKyAgMHg4MCwgMHhF MiwgMHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5Miwg MHg2QiwKLSsgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4REYs IDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCi0rICAweDU5LCAweDU2LCAweEE1LCAweEI5LCAweDVD LCAweEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYzLCAweDg0LCAweDA1LAotKyAgMHg2RiwgMHgw RSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwg MHgyRCwKLSsgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4MkQs IDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCi0rICAweERGLCAweDcwLCAweDE0LCAweEE1LCAweDNG LCAweDM2LCAweEFCLCAweDg0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1g5MzFfU0hBMVtdID0gewotKyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwg MHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKLSsgIDB4RTksIDB4MkQs IDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4 NzUsCi0rICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEyLCAweDFFLCAw eDFFLCAweDE0LCAweEI4LCAweEFDLAotKyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1Qywg MHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKLSsgIDB4NzAsIDB4RkIs IDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4 RDYsCi0rICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3LCAweEI0LCAweDBFLCAweENDLCAw eEIxLCAweDFBLCAweDExLCAweDE5LAotKyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwg MHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhENywKLSsgIDB4NkYsIDB4NEMs IDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4 OTksCi0rICAweDQ4LCAweEFGLCAweDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAw eERCLCAweEVBLCAweEVELCAweDc2LAotKyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwg MHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2NywKLSsgIDB4QTMsIDB4Mjks IDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKLSsgIDB4N0UsIDB4QTIs IDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQsIDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQsIDB4 ODksCi0rICAweEU1LCAweDUyLCAweDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAw eDU4LCAweDkyLCAweDFDLCAweERELAotKyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwg MHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKLSsgIDB4MTYsIDB4NzYs IDB4NjgsIDB4RjYsIDB4QzYsIDB4NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0IsIDB4QzgsIDB4 OUIsCi0rICAweEM2LCAweDUzLCAweDg4LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2LCAw eDEzLCAweEI4LCAweEYwLCAweDRCLAotKyAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywg MHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKLSsgIDB4QUQsIDB4NEUs IDB4NDksIDB4MkMsIDB4RDcsIDB4NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTksIDB4MDEsIDB4 RUMsCi0rICAweDdFLCAweDc1LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2LCAweDg1LCAw eDQ2LCAweDhELCAweEEwLCAweDhDLAotKyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgwMywg MHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKLSsgIDB4MjEsIDB4RUQs IDB4OEQsIDB4QkMsIDB4QkMsIDB4REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIsIDB4 REMsCi0rICAweEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0LCAweDgwCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0W10g PSB7Ci0rICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDExLCAweDM4LCAw eEJCLCAweDdCLCAweEVDLCAweDdCLAotKyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhCRCwg MHhFRiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwgMHgzNywgMHhDQiwKLSsgIDB4RTYsIDB4NEYs IDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUsIDB4MkUsIDB4 RTMsCi0rICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlDLCAweDhFLCAw eEQ3LCAweDRBLCAweDYzLCAweEY2LAotKyAgMHg1NywgMHhDMiwgMHhCMCwgMHgwOCwgMHg1MSwg MHg3MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2NiwgMHhFRSwgMHgzMSwKLSsgIDB4RDgsIDB4Njks IDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQsIDB4 RjEsCi0rICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4LCAweERELCAweDJCLCAweEQ1LCAw eEEwLCAweDYwLCAweDQxLCAweDc5LAotKyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhCNywgMHhCRiwg MHg0NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwgMHg3QywgMHhGRiwKLSsgIDB4MEUsIDB4MDks IDB4RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIsIDB4NDQsIDB4 MzUsCi0rICAweEVGLCAweDAxLCAweEU2LCAweDVFLCAweDM5LCAweDMxLCAweDJELCAweDcxLCAw eEE1LCAweERDLCAweEM2LCAweDZELAotKyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhEQiwgMHg3Mywg MHg4MiwgMHg2NSwgMHgyOAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9YOTMxX1NIQTUxMltdID0gewotKyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0Riwg MHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKLSsgIDB4RkMsIDB4QTEs IDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4 QUMsCi0rICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFBLCAw eDA1LCAweDlFLCAweDc3LCAweEQ3LAotKyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwg MHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKLSsgIDB4QTAsIDB4OTks IDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4 QzUsCi0rICAweDZFLCAweDJCLCAweDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAw eDM0LCAweDUzLCAweEQyLCAweEFGLAotKyAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwg MHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKLSsgIDB4Q0UsIDB4OEEs IDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4 MDksCi0rICAweDlGLCAweDA5LCAweENBLCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAw eDA0LCAweDJELCAweEZCLCAweDdDLAotKyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywg MHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKLSsgIDB4NjAsIDB4ODMs IDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKLSt9OwotKwotKwotK2ludCBGSVBT X3NlbGZ0ZXN0X3JzYSgpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCVJTQSAqa2V5OwotKwlFVlBf UEtFWSAqcGsgPSBOVUxMOwotKwotKwlpZiAoKGtleT1SU0FfbmV3KCkpID09IE5VTEwpCi0rCQln b3RvIGVycjsKLSsJc2V0cnNha2V5KGtleSk7Ci0rCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09 IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJRVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsK LSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCi0r CQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hB MSBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEyMjQs IHNpemVvZihrYXRfUlNBX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9G TEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEyMjQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsK LSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAot KwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0Eg U0hBMjU2IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NI QTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkKLSsJCWdvdG8g ZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUx MiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJ IlJTQSBTSEE1MTIgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWth dF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKLSsJCQkJRVZQX3NoYTEo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMSBQU1MiKSkKLSsJCWdv dG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMjI0LCBzaXplb2Yoa2F0X1JT QV9QU1NfU0hBMjI0KSwKLSsJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BT UywKLSsJCQkJIlJTQSBTSEEyMjQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJ CWthdF9SU0FfUFNTX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksCi0rCQkJCUVW UF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjU2IFBT UyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEzODQsIHNp emVvZihrYXRfUlNBX1BTU19TSEEzODQpLAotKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhf RkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTM4NCBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBNTEy KSwKLSsJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJT QSBTSEE1MTIgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsKLSsKLSsJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JT QV9YOTMxX1NIQTEsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMSksCi0rCQkJRVZQX3NoYTEoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBMSBYOTMxIikpCi0rCQlnb3Rv IGVycjsKLSsJLyogTkI6IFNIQTIyNCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCi0rCWlmICgh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAx LAotKwkJCWthdF9SU0FfWDkzMV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwK LSsJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNI QTI1NiBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMxX1NI QTM4NCwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQpLAotKwkJCUVWUF9zaGEzODQoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkKLSsJCWdvdG8g ZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9Y OTMxX1NIQTUxMiksCi0rCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEs Ci0rCQkJIlJTQSBTSEE1MTIgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCi0rCi0rCXJldCA9IDE7 Ci0rCi0rCWVycjoKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCWVsc2UgaWYg KGtleSkKLSsJCVJTQV9mcmVlKGtleSk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYg LyogZGVmIE9QRU5TU0xfRklQUyAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNf cnNhX3g5MzFnLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMx Zy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDg3Njk0NzQgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMTItMDQtMjYgMTg6MDA6NTEu NDA4NzY5NDc0ICswMjAwCi1AQCAtMCwwICsxLDI4MiBAQAotKy8qIGNyeXB0by9yc2EvcnNhX2dl bi5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2Fn ZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28g YXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5 IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFz Ci0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0 cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2Rl OyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNs dWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJp Z2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydz LCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUg bm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9k dWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBh dXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUg aW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0r ICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhl IHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dy YXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0r ICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICog NC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0 aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlv biBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJ QyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0r ICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1Ymxp Y2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBj YW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBj b3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2lu Y2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3Rk aW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHRpbWUuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rCi0rZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7Ci0rI2VuZGlm Ci0rCi0rLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCi0rCi0r aW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwg QklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklH TlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0 IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5f R0VOQ0IgKmNiKQotKwl7Ci0rCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9 TlVMTDsKLSsJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxMOwotKwotKwlpZiAoIXJzYSkgCi0r CQlnb3RvIGVycjsKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkgCi0rCQln b3RvIGVycjsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCi0rCXIwID0gQk5fQ1RYX2dldChjdHgp OwotKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIz ID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAocjMgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwot KwlpZiAoIXJzYS0+ZSkKLSsJCXsKLSsJCXJzYS0+ZSA9IEJOX2R1cChlKTsKLSsJCWlmICghcnNh LT5lKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwllbHNlCi0rCQllID0gcnNhLT5lOwotKwotKwkv KiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNh bi4KLSsJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBh cmFtZXRlcnMuCi0rCSAqLwotKwotKwlpZiAoWHAgJiYgIXJzYS0+cCkKLSsJCXsKLSsJCXJzYS0+ cCA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnApCi0rCQkJZ290byBlcnI7Ci0rCi0rCQlpZiAo IUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAotKwkJCQkJWHAsIFhwMSwg WHAyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKFhxICYmICFy c2EtPnEpCi0rCQl7Ci0rCQlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJCWlmICghcnNhLT5xKQotKwkJ CWdvdG8gZXJyOwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBx MiwKLSsJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7Ci0rCQl9 Ci0rCi0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7 Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJcmV0dXJuIDI7Ci0rCQl9Ci0rCi0rCS8qIFNpbmNl IGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAK LSsJICogY29tcG9uZW50cy4KLSsJICovCi0rCi0rCS8qIGNhbGN1bGF0ZSBuICovCi0rCXJzYS0+ bj1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+biA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICgh Qk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyog Y2FsY3VsYXRlIGQgKi8KLSsJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkK LSsJCWdvdG8gZXJyOwkvKiBwLTEgKi8KLSsJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVl X29uZSgpKSkKLSsJCWdvdG8gZXJyOwkvKiBxLTEgKi8KLSsJaWYgKCFCTl9tdWwocjAscjEscjIs Y3R4KSkKLSsJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCi0rCi0rCWlmICghQk5fZ2NkKHIz LCByMSwgcjIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9kaXYocjAsIE5VTEws IHIwLCByMywgY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KLSsKLSsJ Y3R4MiA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgyKQotKwkJZ290byBlcnI7Ci0rCi0rCXJz YS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLwotKwlpZiAo cnNhLT5kID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgbW9kIChw LTEpICovCi0rCXJzYS0+ZG1wMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKLSsJ CWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KLSsJcnNhLT5kbXEx PUJOX25ldygpOwotKwlpZiAocnNhLT5kbXExID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYg KCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8q IGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KLSsJcnNhLT5pcW1wPUJOX21vZF9pbnZl cnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKLSsKLSsJZXJyOgotKwlpZiAoY3R4KQotKwkJ ewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsJaWYg KGN0eDIpCi0rCQlCTl9DVFhfZnJlZShjdHgyKTsKLSsJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNh bGxzIHN1Y2Nlc3NmdWwgKi8KLSsJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKLSsJCXJl dHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwotK2ludCBSU0FfWDkzMV9nZW5lcmF0 ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpj YikKLSsJewotKwlpbnQgb2sgPSAwOwotKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsK LSsJQk5fQ1RYICpjdHggPSBOVUxMOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJ UFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJiAK LSsJCShiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJICAgIHsK LSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfS0VZ X1RPT19TSE9SVCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYgKGJpdHMgJiAw eGZmKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZ X0VYLEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9 Ci0rCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJy KEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKyNlbmRpZgotKwotKwljdHggPSBCTl9D VFhfbmV3KCk7Ci0rCWlmICghY3R4KQotKwkJZ290byBlcnJvcjsKLSsKLSsJQk5fQ1RYX3N0YXJ0 KGN0eCk7Ci0rCVhwID0gQk5fQ1RYX2dldChjdHgpOwotKwlYcSA9IEJOX0NUWF9nZXQoY3R4KTsK LSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0eCkpCi0rCQlnb3Rv IGVycm9yOwotKwotKwlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJcnNhLT5xID0gQk5fbmV3KCk7Ci0r CWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQlnb3RvIGVycm9yOwotKwotKwkvKiBHZW5lcmF0 ZSB0d28gcHJpbWVzIGZyb20gWHAsIFhxICovCi0rCi0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9w cmltZV9leChyc2EtPnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhwLAotKwkJCQkJZSwgY3R4 LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVf ZXgocnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcSwKLSsJCQkJCWUsIGN0eCwgY2Ip KQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogU2luY2UgcnNhLT5wIGFuZCByc2EtPnEgYXJlIHZh bGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCi0rCSAqIHJlbWFpbmluZyBSU0EgY29tcG9u ZW50cy4KLSsJICovCi0rCi0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwKLSsJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg ZSwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKCFm aXBzX2NoZWNrX3JzYShyc2EpKQotKwkgICAgZ290byBlcnJvcjsKLSsjZW5kaWYKLSsKLSsJb2sg PSAxOwotKwotKwllcnJvcjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsK LSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCi0rCWlmIChvaykKLSsJCXJldHVybiAxOwot KwotKwlyZXR1cm4gMDsKLSsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2Zp cHNfc2hhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3No YV9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDg3Njk0NzQgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTItMDQt MjYgMTg6MDA6NTEuNDA4NzY5NDc0ICswMjAwCi1AQCAtMCwwICsxLDE0MCBAQAotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsg KgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3NoYS5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgY29uc3QgY2hhciB0 ZXN0W11bNjBdPQotKyAgICB7Ci0rICAgICIiLAotKyAgICAiYWJjIiwKLSsgICAgImFiY2RiY2Rl Y2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgotKyAgICB9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RI XT0KLSsgICAgewotKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4ZWUsMHg1ZSwweDZiLDB4NGIsMHgw ZCwweDMyLDB4NTUsCi0rICAgICAgMHhiZiwweGVmLDB4OTUsMHg2MCwweDE4LDB4OTAsMHhhZiww eGQ4LDB4MDcsMHgwOSB9LAotKyAgICB7IDB4YTksMHg5OSwweDNlLDB4MzYsMHg0NywweDA2LDB4 ODEsMHg2YSwweGJhLDB4M2UsCi0rICAgICAgMHgyNSwweDcxLDB4NzgsMHg1MCwweGMyLDB4NmMs MHg5YywweGQwLDB4ZDgsMHg5ZCB9LAotKyAgICB7IDB4ODQsMHg5OCwweDNlLDB4NDQsMHgxYyww eDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCi0rICAgICAgMHg0YSwweGExLDB4ZjksMHg1MSwweDI5 LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAotKyAgICB9OwotKwotK3N0YXRpYyBpbnQgY29y cnVwdF9zaGE7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCi0rICAgIHsKLSsgICAgY29y cnVwdF9zaGEgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCi0rICAg IHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2Yo dGVzdFswXSkgOyArK24pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdU SF07Ci0rCi0rCUVWUF9EaWdlc3QodGVzdFtuXSxzdHJsZW4odGVzdFtuXSkrY29ycnVwdF9zaGEs bWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOwotKwlpZihtZW1jbXAobWQscmV0W25dLHNpemVv ZiBtZCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEs RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJfQot KyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1z Z19zaGEyNTZbXSA9IHsgMHhmYSwgMHg0OCwgMHg1OSwgMHgyYSwgMHhlMSwgMHhhZSwgMHgxZiwg MHgzMCwKLSsJCQkJCSAgICAweGZjIH07Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGln X3NoYTI1NltdID0geyAweGY3LCAweDI2LCAweGQ4LCAweDk4LCAweDQ3LCAweDkxLCAweDY4LCAw eDViLAotKwkJCQkJICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUsIDB4YmYs IDB4MDEsCi0rCQkJCQkgICAgMHgxNywgMHgwYywgMHg4NCwgMHgwMCwgMHgwMSwgMHg3YSwgMHg5 NCwgMHg4MywKLSsJCQkJCSAgICAweGYzLCAweDBiLCAweDE1LCAweDg0LCAweDRiLCAweDY5LCAw eDg4LCAweDhhIH07Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTUxMltd ID0geyAweDM3LCAweGQxLCAweDM1LCAweDlkLCAweDE4LCAweDQxLCAweGU5LCAweGI3LAotKwkJ CQkJICAgIDB4NmQsIDB4OWEsIDB4MTMsIDB4ZGEsIDB4NWYsIDB4ZjMsIDB4YmQgfTsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhNTEyW10gPSB7IDB4MTEsIDB4MTMsIDB4YzQs IDB4MTksIDB4ZWQsIDB4MmIsIDB4MWQsIDB4MTYsCi0rCQkJCQkgICAgMHgxMSwgMHhlYiwgMHg5 YiwgMHhiZSwgMHhmMCwgMHg3ZiwgMHhjZiwgMHg0NCwKLSsJCQkJCSAgICAweDhiLCAweGQ3LCAw eDU3LCAweGJkLCAweDhkLCAweGE5LCAweDI1LCAweGIwLAotKwkJCQkJICAgIDB4NDcsIDB4MjUs IDB4ZDYsIDB4NmMsIDB4OWEsIDB4NTQsIDB4N2YsIDB4OGYsCi0rCQkJCQkgICAgMHgwYiwgMHg1 MywgMHgxYSwgMHgxMCwgMHg2OCwgMHgzMiwgMHgwMywgMHgzOCwKLSsJCQkJCSAgICAweDgyLCAw eGM0LCAweDg3LCAweGM0LCAweGVhLCAweDBlLCAweGQxLCAweDA0LAotKwkJCQkJICAgIDB4YTks IDB4OTgsIDB4YzEsIDB4MDUsIDB4YTMsIDB4ZjMsIDB4ZjgsIDB4YjEsCi0rCQkJCQkgICAgMHhh ZiwgMHhiYywgMHhkOSwgMHg3OCwgMHg3ZSwgMHhlZSwgMHgzZCwgMHg0MyB9OwotKwotK2ludCBG SVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCkKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9E SUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQX0RpZ2VzdChtc2dfc2hhMjU2LCBzaXplb2YobXNnX3No YTI1NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpOwotKwlpZihtZW1jbXAoZGlnX3No YTI1NiwgbWQsIHNpemVvZihkaWdfc2hhMjU2KSkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9G SVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJ fQotKwotKwlFVlBfRGlnZXN0KG1zZ19zaGE1MTIsIHNpemVvZihtc2dfc2hhNTEyKSwgbWQsIE5V TEwsIEVWUF9zaGE1MTIoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChkaWdfc2hhNTEyLCBtZCwgc2l6 ZW9mKGRpZ19zaGE1MTIpKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQs IEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCXJldHVy biAxOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Zmlwc19zdGFuZGFsb25lX2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2Zp cHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwODc2OTQ3NCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFj LmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDg3Njk0NzQgKzAyMDAKLUBAIC0wLDAgKzEsMTgwIEBA Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2lu Y2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2htYWMuaD4KLSsKLSsjaWZuZGVmIEZJUFNDQU5JU1RFUl9PCi0raW50IEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkgeyByZXR1cm4gMDsgfQotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygp IHt9Ci0rdm9pZCBPUEVOU1NMX2NsZWFuc2Uodm9pZCAqcCxzaXplX3QgbGVuKSB7fQotKyNlbmRp ZgotKwotKyNpZglkZWZpbmVkKF9faTM4NikgICB8fCBkZWZpbmVkKF9faTM4Nl9fKSAgIHx8IGRl ZmluZWQoX01fSVg4NikgfHwgXAotKwlkZWZpbmVkKF9fSU5URUxfXykgfHwgXAotKwlkZWZpbmVk KF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8 IGRlZmluZWQoX01fWDY0KQotKwotK3Vuc2lnbmVkIGludCAgT1BFTlNTTF9pYTMyY2FwX1BbMl07 Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyB2b2lkIGhtYWNf aW5pdChTSEEyNTZfQ1RYICptZF9jdHgsU0hBMjU2X0NUWCAqb19jdHgsCi0rCQkgICAgICBjb25z dCBjaGFyICprZXkpCi0rICAgIHsKLSsgICAgc2l6ZV90IGxlbj1zdHJsZW4oa2V5KTsKLSsgICAg aW50IGk7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKLSsg ICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKLSsKLSsgICAgaWYgKGxl biA+IFNIQV9DQkxPQ0spCi0rCXsKLSsJU0hBMjU2X0luaXQobWRfY3R4KTsKLSsJU0hBMjU2X1Vw ZGF0ZShtZF9jdHgsa2V5LGxlbik7Ci0rCVNIQTI1Nl9GaW5hbChrZXltZCxtZF9jdHgpOwotKwls ZW49U0hBMjU2X0RJR0VTVF9MRU5HVEg7Ci0rCX0KLSsgICAgZWxzZQotKwltZW1jcHkoa2V5bWQs a2V5LGxlbik7Ci0rICAgIG1lbXNldCgma2V5bWRbbGVuXSwnXDAnLEhNQUNfTUFYX01EX0NCTE9D Sy1sZW4pOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykK LSsJcGFkW2ldPTB4MzZea2V5bWRbaV07Ci0rICAgIFNIQTI1Nl9Jbml0KG1kX2N0eCk7Ci0rICAg IFNIQTI1Nl9VcGRhdGUobWRfY3R4LHBhZCxTSEEyNTZfQ0JMT0NLKTsKLSsKLSsgICAgZm9yKGk9 MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCi0rCXBhZFtpXT0weDVjXmtleW1kW2ld OwotKyAgICBTSEEyNTZfSW5pdChvX2N0eCk7Ci0rICAgIFNIQTI1Nl9VcGRhdGUob19jdHgscGFk LFNIQTI1Nl9DQkxPQ0spOwotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNp Z25lZCBjaGFyICptZCxTSEEyNTZfQ1RYICptZF9jdHgsU0hBMjU2X0NUWCAqb19jdHgpCi0rICAg IHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwotKyAg ICBTSEEyNTZfRmluYWwoYnVmLG1kX2N0eCk7Ci0rICAgIFNIQTI1Nl9VcGRhdGUob19jdHgsYnVm LHNpemVvZiBidWYpOwotKyAgICBTSEEyNTZfRmluYWwobWQsb19jdHgpOwotKyAgICB9Ci0rCi0r I2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtleVtdPSJvcmJvRGVKSVRJVGVqc2ly cEFET05pdmlycFVrdmFyUCI7Ci0rICAgIGludCBuLGJpbmFyeT0wOwotKwotKyAgICBpZihhcmdj IDwgMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgWzxmaWxlPl0rXG4iLGFyZ3ZbMF0pOwot KwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIG49MTsKLSsgICAgaWYgKCFzdHJjbXAoYXJndltuXSwi LWJpbmFyeSIpKQotKwl7Ci0rCW4rKzsKLSsJYmluYXJ5PTE7CS8qIGVtaXQgYmluYXJ5IGZpbmdl cnByaW50Li4uICovCi0rCX0KLSsKLSsgICAgZm9yKDsgbiA8IGFyZ2MgOyArK24pCi0rCXsKLSsJ RklMRSAqZj1mb3Blbihhcmd2W25dLCJyYiIpOwotKwlTSEEyNTZfQ1RYIG1kX2N0eCxvX2N0eDsK LSsJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCWludCBpOwotKwot KwlpZighZikKLSsJICAgIHsKLSsJICAgIHBlcnJvcihhcmd2W25dKTsKLSsJICAgIGV4aXQoMik7 Ci0rCSAgICB9Ci0rCi0rCWhtYWNfaW5pdCgmbWRfY3R4LCZvX2N0eCxrZXkpOwotKwlmb3IoIDsg OyApCi0rCSAgICB7Ci0rCSAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsJICAgIHNpemVfdCBsPWZyZWFk KGJ1ZiwxLHNpemVvZiBidWYsZik7Ci0rCi0rCSAgICBpZihsID09IDApCi0rCQl7Ci0rCQlpZihm ZXJyb3IoZikpCi0rCQkgICAgewotKwkJICAgIHBlcnJvcihhcmd2W25dKTsKLSsJCSAgICBleGl0 KDMpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICBicmVhazsKLSsJCX0KLSsJICAgIFNIQTI1 Nl9VcGRhdGUoJm1kX2N0eCxidWYsbCk7Ci0rCSAgICB9Ci0rCWhtYWNfZmluYWwobWQsJm1kX2N0 eCwmb19jdHgpOwotKwotKwlpZiAoYmluYXJ5KQotKwkgICAgewotKwkgICAgZndyaXRlKG1kLFNI QTI1Nl9ESUdFU1RfTEVOR1RILDEsc3Rkb3V0KTsKLSsJICAgIGJyZWFrOwkvKiAuLi4gZm9yIHNp bmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rLyoJcHJpbnRmKCJITUFDLVNIQTEoJXMpPSAi LGFyZ3Zbbl0pOyAqLwotKwlmb3IoaT0wIDsgaSA8IFNIQTI1Nl9ESUdFU1RfTEVOR1RIIDsgKytp KQotKwkgICAgcHJpbnRmKCIlMDJ4IixtZFtpXSk7Ci0rCXByaW50ZigiXG4iKTsKLSsJfQotKyNl bmRpZgotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDg3Njk0NzQgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDEy LTA0LTI2IDE4OjAwOjUxLjQwODc2OTQ3NCArMDIwMAotQEAgLTAsMCArMSw1ODggQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqCi0rICogVGhpcyBjb21tYW5kIGlzIGludGVu ZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCi0rICogbGFiIHBl cmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9m IHRoZQotKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9u IGNyeXB0b2dyYXBoaWMKLSsgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBk ZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5Ci0rICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBl eGVjdXRhYmxlIGhhc2gKLSsgKgotKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgot KyAqCi0rICovCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNp bmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3RkbGli Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rCi0r I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot KyAgICB7Ci0rICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDAp OwotKyAgICB9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1 ZGUgImZpcHNfdXRsLmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBs YWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAotKyovCi0r c3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVu c2lnbmVkIGNoYXIgcGx0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKLSsJdW5z aWduZWQgY2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwx NSwxNn07Ci0rCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsK LSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwlp ZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBO VUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBs YWludGV4dCwgMTYpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhf ZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBo ZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4 dCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9D VFhfY2xlYW51cCgmY3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgRklQ U19kZXMzX3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBw bHRtcFs4XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsgICAgCXVuc2lnbmVkIGNoYXIg a2V5W10gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAot KwkJICAgICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07Ci0rICAgIAl1bnNpZ25lZCBjaGFy IHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9 OwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0r CWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5 LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAs IHBsYWludGV4dCwgOCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2Vk ZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9D aXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50 ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9DSVBIRVJf Q1RYX2NsZWFudXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsvKgotKyAqIERTQTog Z2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStz dGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBEU0EgKmRzYSA9 IE5VTEw7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJl dGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07Ci0rICAgIHVuc2lnbmVk IGludCBzbGVuOwotKyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsKLSsg ICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAg IGRzYSA9IERTQV9uZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAo IURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5V TEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCWdv dG8gZW5kOwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAx KTsKLSsKLSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAgcGsucGtleS5kc2EgPSBk c2E7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxM KSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNp emVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZt Y3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVy aWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBp ZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwln b3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGsp OwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChk c2EpCi0rICAJICBEU0FfZnJlZShkc2EpOwotKyAgICBpZiAociAhPSAxKQotKwlyZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKgotKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBh bmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNf cnNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBSU0EgKmtleTsKLSsgICAgdW5zaWduZWQg Y2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVuc2lnbmVkIGNoYXIg YnVmWzI1Nl07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBCSUdOVU0gKmJuOwotKyAg ICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICBpbnQgciA9IDA7Ci0r Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwot KyAgICBrZXkgPSBSU0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlmICgha2V5 IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Ci0rICAg IGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCi0rCXJldHVybiAw OwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgaWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGtl eS0+biwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rICAgIHBrLnBrZXku cnNhID0ga2V5OwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEo KSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBp bnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAg aWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsK LSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkp Ci0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0 ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICByID0gRVZQ X1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVuZDoKLSsgICAgRVZQ X01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkKLSsgIAkgICAgUlNBX2ZyZWUo a2V5KTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAg ICB9Ci0rCi0rLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5k IGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0 YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGln ZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4 M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMs IDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKLSsgICAgdW5zaWdu ZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtT SEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAo IUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVM TCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTI1Njog Z2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24K LSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGEy NTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VT VF9MRU5HVEhdID0KLSsJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwg MHgxNywgMHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKLSsJ IDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2 NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307Ci0rICAgIHVuc2lnbmVkIGNo YXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2 X0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFF VlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVM TCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTUxMjog Z2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24K LSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGE1 MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VT VF9MRU5HVEhdID0KLSsJezB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4Nzgs IDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCi0r CSAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAw eDk5LCAweGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAotKwkgMHg0NSwgMHhkMiwg MHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgy NCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKLSsJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4 MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIs IDB4MWQsIDB4YTN9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwot KwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAg RVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikg LSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1l bWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0 dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24g ZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVj dCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQotKyAgICB7Ci0r ICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNo YXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01B WF9NRF9TSVpFXSA9Ci0rCXsweDczLCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVk LCAweGRkLCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAot KwkgMHhiMiwgMHhmYiwgMHhlYywgMHhjNn07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VW UF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSkt MSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNt cChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsK LSsgICAgfQotKwotKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2Vz dCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFz aAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQotKyAgICB7Ci0rICAg IHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIg aXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9N RF9TSVpFXSA9Ci0rCXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAw eDBmLCAweDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAotKwkg MHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgz MywgMHgzYSwgMHgxOX07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVv ZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZh bCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStz dGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K LSsJezB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIs IDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCi0rCSAweDlmLCAweGM2 LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAw eDUxLCAweGZmLCAweGRhLCAweDI0LCAweGY0fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRb RVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJS X2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihr ZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmICht ZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJu IDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBk aWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0 IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKLSsgICAgewot KyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBj aGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9N QVhfTURfU0laRV0gPQotKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhl MywgMHgzMSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwK LSsJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEs IDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCi0rCSAweGYzLCAweDkx LCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAw eGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRb RVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJS X2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihr ZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmICht ZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJu IDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBk aWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0 IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKLSsgICAgewot KyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBj aGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9N QVhfTURfU0laRV0gPQotKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3 ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwK LSsJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYs IDB4M2IsIDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCi0rCSAweGQ3LCAweDc5 LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAw eDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAotKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwg MHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhk OSwgMHgyYSwgMHg1M307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVv ZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZh bCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rCi0rLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCi0rKi8KLStzdGF0aWMgaW50 IGRoX3Rlc3QoKQotKyAgICB7Ci0rICAgIERIICpkaDsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7 Ci0rICAgIGRoID0gRklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFkaCkKLSsJcmV0dXJuIDA7Ci0r ICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCi0r CXJldHVybiAwOwotKyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIFplcm9pemUKLSsqLwotK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCi0rICAgIHsKLSsg ICAgUlNBICprZXk7Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtl eVsxNl0gPSAKLSsJeyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAw eGFmLCAweDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07Ci0r ICAgIGludCBpLCBuOwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKLSsgICAgYm4gPSBC Tl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1cm4gMDsKLSsgICAgQk5fc2V0 X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAy NCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4pOwotKyAgICAKLSsgICAg biA9IEJOX251bV9ieXRlcyhrZXktPmQpOwotKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0 ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBv dmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rICAg IEJOX3JhbmQoa2V5LT5kLG4qOCwtMSwwKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBv dmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rCi0r ICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQi KTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAy eCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwotKyAgICBSQU5EX2J5dGVz KHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtl eSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihpID0gMDsgaSA8IHNpemVv Zih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKLSsgICAgICAgIHBy aW50ZigiXG4iKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLStzdGF0aWMgaW50IEVy cm9yOwotK2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1zZykKLSsgICAgewotKyAgICBk b19wcmludF9lcnJvcnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAgcmV0dXJuIG1zZzsgCi0rICAg IH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKwotKyAgICBp bnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsK LSsgICAgaW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsgICAgaW50IGRvX3JuZ19zdGlj ayA9IDA7Ci0rICAgIGludCBub19leGl0ID0gMDsKLSsKLSsgICAgcHJpbnRmKCJcdEZJUFMtbW9k ZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBl eHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0 KTsKLSsKLSsgICAgaWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVz dHMgKi8KLSsgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgewotKyAgICAgICAg ICAgIEZJUFNfY29ycnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0 aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1 cHRfZGVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5 cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2WzFdLCAiZHNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7 Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2 YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3Jz YSgpOwotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1 cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNl IGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAgICAgICAgICAgIHByaW50Zigi UlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRl ZCBrZXkuLi5cbiIpOwotKwkgICAgYmFkX3JzYSA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKLSsJICAg IGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAg ICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24g d2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChhcmd2WzFdLCAiZHNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2Vu ZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4i KTsKLSsJICAgIGJhZF9kc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7Ci0rCSAgICBkb19jb3JydXB0 X2RzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJpbnRm KCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwg InNoYTEiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9zaGExKCk7Ci0rICAgICAgICAg ICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rCX0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKLSsJICAgIEZJUFNfY29ycnVwdF9ybmco KTsKLSsJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7Ci0rCSAgICBk b19ybmdfc3RpY2sgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rCSAgICBwcmludGYoIlJORyB0 ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSB7 Ci0rICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsK LSsgICAgICAgICAgICBleGl0KDEpOwotKyAgICAgICAgfQotKwlpZiAoIW5vX2V4aXQpIHsKLSsg ICAgICAgIAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgCQkgICAgZG9fcHJpbnRfZXJyb3Jz KCk7Ci0rICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7 Ci0rCQkgICAgZXhpdCgxKTsKLSsJCX0KLSsgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYg dGVzdCBzdWNjZXNzZnVsXG4iKTsKLSsgICAgICAgIAlleGl0KDApOwotKwl9Ci0rICAgIH0KLSsK LSsgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0r ICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3Qu Li5cbiIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7 Ci0rICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVE IVxuIikgKTsKLSsKLSsgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0Ci0rICAgICovCi0rICAgIEVS Ul9jbGVhcl9lcnJvcigpOwotKyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxm IHRlc3QuLi4iKTsKLSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50 X2Vycm9ycygpOwotKyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsJZXhpdCgx KTsKLSsJfQotKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwotKyAgICBpZiAoZG9fY29ycnVw dF9kc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7Ci0r ICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4pCi0rICAgICAgICAgICAgRklQU19jb3JydXB0 X3JzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykKLSsgICAgICAgICAgICBGSVBT X3JuZ19zdGljaygpOwotKwotKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAg ICovCi0rICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAg ICBwcmludGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxF RCFcbiIpICk7Ci0rCi0rICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFu ZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0 KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsg ICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRm KCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJ UFNfZGVzM190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCi0r ICAgICovCi0rICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUg dmFsaWRhdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtMSBo YXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKLSsgICAgcHJp bnRmKCBGSVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxu IikgKTsKLSsKLSsgICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2Iu IFNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS01MTIg aGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKLSsgICAg cHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlM RUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKLSsgICAgKi8KLSsgICAgcHJp bnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3No YTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsg ICAgLyogSE1BQy1TSEEtMjI0IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZS4gSE1BQy1T SEEtMjI0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMt U0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNo Li4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1 bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0zODQgaGFz aAotKyAgICAqLwotKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOwotKyAg ICBwcmludGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFp bCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKLSsgICAgKi8K LSsgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBG SVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFc biIpICk7Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgot KyAgICAqLwotKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJh dGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAo RC1IKS4uLiIpOwotKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVj dGVkXG4iCi0rCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0rCi0rICAg IC8qIFplcm9pemF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4u XG4iKTsKLSsgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVk XG4iCi0rCSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAg cHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsK LSsgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2ZpcHMvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9NYWtl ZmlsZS5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA5NzY5NDk2ICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxMi0wNC0yNiAxODowMDo1MS40MDk3Njk0 OTYgKzAyMDAKLUBAIC0wLDAgKzEsMzQwIEBACi0rIwotKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9N YWtlZmlsZQotKyMKLSsKLStESVI9CWZpcHMKLStUT1A9CS4uLy4uCi0rQ0M9CWNjCi0rSU5DTFVE RVM9Ci0rQ0ZMQUc9LWcKLStNQUtFRklMRT0JTWFrZWZpbGUKLStBUj0JCWFyIHIKLSsKLStDRkxB R1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0rCi0rR0VORVJBTD1NYWtlZmlsZQotK1RFU1Q9Zmlw c190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCi0rQVBQUz0KLSsKLStQUk9HUkFNPSBmaXBz X3N0YW5kYWxvbmVfaG1hYwotK0VYRT0gJChQUk9HUkFNKSQoRVhFX0VYVCkKLSsKLStMSUI9JChU T1ApL2xpYmNyeXB0by5hCi0rTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2Vs ZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCi0rICAg IGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGFfc2VsZnRlc3QuYyBmaXBzLmMgZmlwc19kc2Ff c2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAotKyAgICBmaXBzX3JzYV94OTMxZy5jIGZpcHNfcG9z dC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBzX2RyYmdfaGFzaC5jIGZpcHNfZHJiZ19obWFjLmMgXAot KyAgICBmaXBzX2RyYmdfbGliLmMgZmlwc19kcmJnX3JhbmQuYyBmaXBzX2RyYmdfc2VsZnRlc3Qu YyBmaXBzX3JhbmRfbGliLmMgXAotKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QuYyBmaXBzX2VuYy5j IGZpcHNfbWQuYwotKwotK0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0 ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAotKyAgICBm aXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3Nl bGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKLSsgICAgZmlwc19yc2FfeDkzMWcubyBmaXBzX3Bvc3Qu byBmaXBzX2RyYmdfY3RyLm8gZmlwc19kcmJnX2hhc2gubyBmaXBzX2RyYmdfaG1hYy5vIFwKLSsg ICAgZmlwc19kcmJnX2xpYi5vIGZpcHNfZHJiZ19yYW5kLm8gZmlwc19kcmJnX3NlbGZ0ZXN0Lm8g Zmlwc19yYW5kX2xpYi5vIFwKLSsgICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8gZmlwc19lbmMubyBm aXBzX21kLm8KLSsKLStMSUJDUllQVE89LUwuLiAtbGNyeXB0bwotKwotK1NSQz0gJChMSUJTUkMp IGZpcHNfc3RhbmRhbG9uZV9obWFjLmMKLSsKLStFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFuZC5o Ci0rSEVBREVSPQkkKEVYSEVBREVSKQotKwotK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChI RUFERVIpCi0rCi0rdG9wOgotKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9 JChESVIpIHN1Yl9hbGwpCi0rCi0rYWxsOglsaWIgZXhlCi0rCi0rbGliOgkkKExJQk9CSikKLSsJ JChBUikgJChMSUIpICQoTElCT0JKKQotKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIg bWluZC4KLSsJQHRvdWNoIGxpYgotKwotK2V4ZToJJChFWEUpCi0rCi0rZmlsZXM6Ci0rCSQoUEVS TCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0rCi0rbGlu a3M6Ci0rCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5z c2wgJChFWEhFQURFUikKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rl c3QgJChURVNUKQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAk KEFQUFMpCi0rCi0raW5zdGFsbDoKLSsJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQg YmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBm b3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0rCWRvICBcCi0rCShjcCAkJGkgJChJTlNUQUxMX1BS RUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLSsJY2htb2QgNjQ0ICQo SU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLSsJ ZG9uZTsKLSsKLSt0YWdzOgotKwljdGFncyAkKFNSQykKLSsKLSt0ZXN0czoKLSsKLStsaW50Ogot KwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLSsKLStkZXBlbmQ6Ci0rCUBb IC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4u LgotKwkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0g JChQUk9HUykgJChMSUJTUkMpCi0rCi0rZGNsZWFuOgotKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBE TyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+ TWFrZWZpbGUubmV3Ci0rCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotKwotK2NsZWFu OgotKwlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJh ayBmbHVmZgotKwotKyQoRVhFKTogJChQUk9HUkFNKS5vCi0rCUZJUFNfU0hBX0FTTT0iIjsgZm9y IGkgaW4gJChTSEExX0FTTV9PQkopIHNoYTI1Ni5vOyBkbyBGSVBTX1NIQV9BU009IiQkRklQU19T SEFfQVNNIC4uL3NoYS8kJGkiIDsgZG9uZTsgXAotKwkkKENDKSAtbyAkQCAkKENGTEFHUykgJChQ Uk9HUkFNKS5vICQkRklQU19TSEFfQVNNCi0rCi0rIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAt LSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotKwotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStm aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3Jh bmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLStmaXBzLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwcy5jIGZpcHNf bG9jbC5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBz X2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmplY3RzLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIGZpcHNfYWVzX3NlbGZ0ZXN0LmMKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZGVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kZXNfc2VsZnRlc3QuYwotK2ZpcHNfZHJiZ19jdHIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHJiZ19j dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwc19yYW5kLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFj LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJn X2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdfY3Ry Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oCi0rZmlwc19kcmJnX2N0ci5vOiBmaXBzX2RyYmdfY3RyLmMgZmlwc19yYW5kX2xj bC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJn X2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAot K2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19oYXNoLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2hhc2guYwotK2ZpcHNfZHJiZ19oYXNo Lm86IGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX2htYWMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv aG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfaG1hYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStm aXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBz X2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHJiZ19o bWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19obWFjLmMK LStmaXBzX2RyYmdfaG1hYy5vOiBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0r Zmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o Ci0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNf ZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFu ZC5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgK LStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZmlwc19kcmJnX2xpYi5vOiBmaXBzX2RyYmdfbGli LmMgZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBz X2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgK LStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStm aXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmplY3RzLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3JhbmQuYwotK2ZpcHNfZHJiZ19yYW5kLm86IGZpcHNf cmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19kcmJnX3NlbGZ0ZXN0LmMKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogZmlw c19kcmJnX3NlbGZ0ZXN0LmggZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Ym4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2Rz YV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Rz YV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19kc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RzYV9zZWxmdGVz dC5jCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogZmlwc19sb2NsLmgKLStmaXBzX2htYWNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0 by5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2Zp cHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlwc19o bWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19obWFj X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2htYWNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfaG1hY19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfaG1h Y19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfaG1h Y19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfaG1h Y19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2htYWNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19obWFjX3Nl bGZ0ZXN0LmMKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcG9zdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgK LStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlw c19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHNf cG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmggZmlwc19sb2NsLmggZmlwc19wb3N0LmMKLStmaXBzX3JhbmQubzogLi4vLi4vZV9vcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o Ci0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNfcmFuZC5vOiBmaXBzX2xvY2wuaCBmaXBz X3JhbmQuYwotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hZXMuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2Zp cHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX3JhbmRfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStm aXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3Jh bmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yYW5k X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfcmFuZF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JhbmQuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNfcmFuZF9saWIubzogZmlwc19yYW5k X2xpYi5jCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvaG1hYy5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cmFuZC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCBmaXBzX2xvY2wuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiBmaXBzX3JhbmRfc2VsZnRl c3QuYwotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlw c19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX3JzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19yc2Ffc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19yc2Ffc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV9zZWxmdGVzdC5jCi0rZmlwc19yc2FfeDkz MWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2FfeDkzMWcuYwotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o Ci0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0r Zmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX3NoYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfc2hhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX3NoYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19zaGFfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3NoYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19zaGFfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19zaGFfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggZmlwc19zaGFfc2VsZnRlc3QuYwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ht YWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2htYWMvaG1hYy5jCi0tLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxMS0wNi0xMiAxNzowNzoyNi4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vaG1hYy9obWFjLmMJMjAx Mi0wNC0yNiAxODowMDo1MS40MDk3Njk0OTYgKzAyMDAKLUBAIC04MSwxMSArODEsNiBAQCBpbnQg SE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gCQkJRVZQZXJyKEVWUF9GX0hN QUNfSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotIAkJCXJldHVybiAwOwotIAkJ CX0KLS0JCS8qIE90aGVyIGFsZ29yaXRobSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19j bWFjX2luaXQsCi0tCQkgKiB2aWEgRklQU19obWFjX2luaXRfZXgoKS4KLS0JCSAqLwotLQkJaWYg KCFpbXBsICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKLS0JCQlyZXR1cm4gRklQU19obWFjX2luaXRf ZXgoY3R4LCBrZXksIGxlbiwgbWQsIE5VTEwpOwotIAkJfQotICNlbmRpZgotIAotQEAgLTk5LDYg Kzk0LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAKLSAJ aWYgKGtleSAhPSBOVUxMKQotIAkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBT X21vZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCi0rCQkmJiAoIShjdHgt Pm1kX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsJCSB8fCAh KGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkg fHwgIShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkp Ci0rCQkJZ290byBlcnI7Ci0rI2VuZGlmCi0gCQlyZXNldD0xOwotIAkJaj1FVlBfTURfYmxvY2tf c2l6ZShtZCk7Ci0gCQlPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7 Ci1AQCAtMTU1LDEwICsxNTcsNiBAQCBpbnQgSE1BQ19Jbml0KEhNQUNfQ1RYICpjdHgsIGNvbnN0 IHZvaWQKLSAKLSBpbnQgSE1BQ19VcGRhdGUoSE1BQ19DVFggKmN0eCwgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSwgc2l6ZV90IGxlbikKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYg KEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKLS0JCXJldHVybiBGSVBTX2htYWNf dXBkYXRlKGN0eCwgZGF0YSwgbGVuKTsKLS0jZW5kaWYKLSAJcmV0dXJuIEVWUF9EaWdlc3RVcGRh dGUoJmN0eC0+bWRfY3R4LGRhdGEsbGVuKTsKLSAJfQotIAotQEAgLTE2NiwxMCArMTY0LDYgQEAg aW50IEhNQUNfRmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgYwotIAl7Ci0gCXVuc2lnbmVk IGludCBpOwotIAl1bnNpZ25lZCBjaGFyIGJ1ZltFVlBfTUFYX01EX1NJWkVdOwotLSNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKLS0J CXJldHVybiBGSVBTX2htYWNfZmluYWwoY3R4LCBtZCwgbGVuKTsKLS0jZW5kaWYKLSAKLSAJaWYg KCFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eC0+bWRfY3R4LGJ1ZiwmaSkpCi0gCQlnb3RvIGVycjsK LUBAIC0yMDksMTMgKzIwMyw2IEBAIGludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBI TUFDX0MKLSAKLSB2b2lkIEhNQUNfQ1RYX2NsZWFudXAoSE1BQ19DVFggKmN0eCkKLSAJewotLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2lu ZSkKLS0JCXsKLS0JCUZJUFNfaG1hY19jdHhfY2xlYW51cChjdHgpOwotLQkJcmV0dXJuOwotLQkJ fQotLSNlbmRpZgotIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+aV9jdHgpOwotIAlFVlBfTURf Q1RYX2NsZWFudXAoJmN0eC0+b19jdHgpOwotIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+bWRf Y3R4KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMTItMDQt MjYgMTg6MDA6NTEuNDA5NzY5NDk2ICswMjAwCi1AQCAtNjIsNiArNjIsMTEgQEAKLSAjaW5jbHVk ZSA8b3BlbnNzbC9tZDIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0g Ci0gY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsK LSAKLUBAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCkKLSAJ CXJldHVybigibWQyKGludCkiKTsKLSAJfQotIAotLWZpcHNfbWRfaW5pdChNRDIpCi0rbm9uZmlw c19tZF9pbml0KE1EMikKLSAJewotIAljLT5udW09MDsKLSAJbWVtc2V0KGMtPnN0YXRlLDAsc2l6 ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDQvbWQ0X2Rn c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwotLS0tIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL21kNC9tZDRfZGdzdC5j CTIwMTItMDQtMjYgMTg6MDA6NTEuNDA5NzY5NDk2ICswMjAwCi1AQCAtNzEsNyArNzEsNyBAQCBj b25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9WCi0gI2RlZmluZSBJTklUX0RB VEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVu c2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1maXBzX21kX2luaXQoTUQ0KQotK25vbmZpcHNf bWRfaW5pdChNRDQpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5J VF9EQVRBX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQzLjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEy LTA0LTI2IDE4OjAwOjUxLjQwOTc2OTQ5NiArMDIwMAotQEAgLTcxLDcgKzcxLDcgQEAgY29uc3Qg Y2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRBX0Mg KHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25l ZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0tZmlwc19tZF9pbml0KE1ENSkKLStub25maXBzX21kX2lu aXQoTUQ1KQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5BPUlOSVRfREFU QV9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NC4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCTIwMTIt MDQtMjYgMTg6MDA6NTEuNjkxNzc1NjU2ICswMjAwCi1AQCAtNzYsNyArNzYsNyBAQAotIAkJCSoo KGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQotIAotIHN0YXRpYyB2b2lk IG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBs ZW4pOwotLWZpcHNfbWRfaW5pdChNREMyKQotK25vbmZpcHNfbWRfaW5pdChNREMyKQotIAl7Ci0g CWMtPm51bT0wOwotIAljLT5wYWRfdHlwZT0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL29faW5pdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL29faW5pdC5jLmZpcHMJMjAxMS0wNS0yNiAxNjoxOToxOS4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vb19pbml0LmMJMjAxMi0wNC0y NiAxODowMDo1MS42OTY3NzU3NjYgKzAyMDAKLUBAIC01NSwyOCArNTUsNjMgQEAKLSAjaW5jbHVk ZSA8ZV9vcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotICNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0rI2lu Y2x1ZGUgPGZjbnRsLmg+Ci0rI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxlcnJuby5o PgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKwotKyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxF ICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCIKLSsKLStzdGF0aWMgdm9pZCBpbml0X2Zp cHNfbW9kZSh2b2lkKQotKwl7Ci0rCWNoYXIgYnVmWzJdID0gIjAiOwotKwlpbnQgZmQ7Ci0rCQot KwlpZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCi0rCQl7Ci0r CQlidWZbMF0gPSAnMSc7Ci0rCQl9Ci0rCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NX SVRDSF9GSUxFLCBPX1JET05MWSkpID49IDApCi0rCQl7Ci0rCQl3aGlsZSAocmVhZChmZCwgYnVm LCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLSsJCWNsb3NlKGZkKTsKLSsJ CX0KLSsJLyogRmFpbHVyZSByZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMg anVzdCBub3QKLSsJICogc3dpdGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0 b28gbWFueSB0aGluZ3MKLSsJICogb3RoZXJ3aXNlLiAKLSsJICovCi0rCQotKwlpZiAoYnVmWzBd ID09ICcxJykKLSsJCXsKLSsJCUZJUFNfbW9kZV9zZXQoMSk7Ci0rCQl9Ci0rCX0KLSAjZW5kaWYK LSAKLSAvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVy YXRpb25zLgotICAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKLSAgKi8KLSAK LS12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9p ZCkKLSAJewotIAlzdGF0aWMgaW50IGRvbmUgPSAwOwotIAlpZiAoZG9uZSkKLSAJCXJldHVybjsK LSAJZG9uZSA9IDE7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlGSVBTX3NldF9sb2NraW5nX2Nh bGxiYWNrcyhDUllQVE9fbG9jaywgQ1JZUFRPX2FkZF9sb2NrKTsKLS0JRklQU19zZXRfZXJyb3Jf Y2FsbGJhY2tzKEVSUl9wdXRfZXJyb3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpOwotLQlGSVBTX3Nl dF9tYWxsb2NfY2FsbGJhY2tzKENSWVBUT19tYWxsb2MsIENSWVBUT19mcmVlKTsKLSAJUkFORF9p bml0X2ZpcHMoKTsKLSsJaW5pdF9maXBzX21vZGUoKTsKLSAjZW5kaWYKLSAjaWYgMAotIAlmcHJp bnRmKHN0ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIpOwotICNlbmRpZgotIAl9Ci0gCi0r dm9pZCBPUEVOU1NMX2luaXQodm9pZCkKLSsJewotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwot Kwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBz IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCi0tLS0gb3BlbnNzbC0xLjAu MWIvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIw MTItMDQtMjYgMTg6MDA6NTEuNzAyNzc1ODk3ICswMjAwCi1AQCAtMSw1ICsxLDIwIEBACi0gLyog Y3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtF REVQRU5ECi0rCi0rLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBl eHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCi0rICogdGhhdCBzaG91bGQgYmUgdmlz aWJsZSB0byBtYWtlZGVwZW5kLgotKyAqCi0rICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3Qg YWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCi0rICog aW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVz IHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCi0rICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKLSsjZGVmaW5lIE9QRU5TU0xfRklQUwotKyNlbmRpZgotKwotKyNlbmRpZgotKwotIC8qIEdl bmVyYXRlIDgwMzg2IGNvZGU/ICovCi0gI3VuZGVmIEkzODZfT05MWQotIAotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vcGtjczEyL3AxMl9jcnQuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9wa2NzMTIv cDEyX2NydC5jLmZpcHMJMjAwOS0wMy0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwkyMDEyLTA0LTI2IDE4OjAwOjUx LjcwODc3NjAyOCArMDIwMAotQEAgLTU5LDYgKzU5LDEwIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYK LSsKLSAKLSAKLSBzdGF0aWMgaW50IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZF QkFHKSAqKnBiYWdzLCBQS0NTMTJfU0FGRUJBRyAqYmFnKTsKLUBAIC05MCw3ICs5NCwxNCBAQCBQ S0NTMTIgKlBLQ1MxMl9jcmVhdGUoY2hhciAqcGFzcywgY2hhciAqCi0gCi0gCS8qIFNldCBkZWZh dWx0cyAqLwotIAlpZiAoIW5pZF9jZXJ0KQotKwkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ CWlmIChGSVBTX21vZGUoKSkKLSsJCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tl eV9UcmlwbGVERVNfQ0JDOwotKwkJZWxzZQotKyNlbmRpZgotIAkJbmlkX2NlcnQgPSBOSURfcGJl X1dpdGhTSEExQW5kNDBCaXRSQzJfQ0JDOwotKwkJfQotIAlpZiAoIW5pZF9rZXkpCi0gCQluaWRf a2V5ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Ci0gCWlmICghaXRl cikKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9yYW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9yYW5kL21kX3JhbmQuYy5maXBzCTIwMTEtMDEtMjYgMTU6NTU6MjMuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTItMDQtMjYg MTg6MDA6NTEuNzEzNzc2MTM3ICswMjAwCi1AQCAtMzg5LDcgKzM4OSwxMCBAQCBzdGF0aWMgaW50 IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCi0gCUNSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EMik7Ci0gCWNyeXB0b19sb2NrX3JhbmQgPSAxOwotIAotLQlpZiAoIWluaXRpYWxp emVkKQotKwkvKiBhbHdheXMgcG9sbCBmb3IgZXh0ZXJuYWwgZW50cm9weSBpbiBGSVBTIG1vZGUs IGRyYmcgcHJvdmlkZXMgdGhlIAotKwkgKiBleHBhbnNpb24KLSsJICovCi0rCWlmICghaW5pdGlh bGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgpKSAKLSAJCXsKLSAJCVJBTkRfcG9sbCgpOwotIAkJ aW5pdGlhbGl6ZWQgPSAxOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JhbmQvcmFu ZC5oLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JhbmQvcmFuZC5oCi0tLS0gb3BlbnNzbC0x LjAuMWIvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MC44MDk3NTYz ODggKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxMi0wNC0y NiAxODowMDo1MS43MTQ3NzYxNTkgKzAyMDAKLUBAIC0xMzMsMTUgKzEzMywzMyBAQCB2b2lkIEVS Ul9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQg ZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9G X0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JB TkQJCQkJIDEwMwotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCi0rI2Rl ZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX0ZfRklQ U19YOTMxX1NFVF9EVAkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEw NAotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKLSsjZGVmaW5lIFJB TkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1Ci0gI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRf UkFORF9NRVRIT0QJCQkgMTAxCi0tI2RlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEw MgotKyNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBTCQkJCSAxMDkKLSAjZGVmaW5lIFJBTkRf Rl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0tI2Rl ZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTAyCi0tI2RlZmluZSBSQU5E X1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEwMwotLSNkZWZpbmUgUkFORF9SX05PX0ZJ UFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMDEKLSsjZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFM SVNJTkdfRFJCRwkJCSAxMTIKLSsjZGVmaW5lIFJBTkRfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RS QkcJCQkgMTEzCi0rI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKLSsjZGVm aW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfUl9OT19G SVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTExCi0rI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJ CQkgMTA3Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNICQkJIDEwMQot KyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEwOAotKyNkZWZpbmUgUkFORF9SX1BSTkdf S0VZRUQJCQkJIDEwOQotKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJIDEwMgot KyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVECQkJIDEwMwotICNkZWZpbmUgUkFORF9S X1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCi0rI2RlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1Rf Tk9UX01BVENIX0tFWQkJIDExMAotKyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAot IAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcmlwZW1kL3Jt ZF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlw cwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcxNTc3NjE4MSAr MDIwMAotQEAgLTcwLDcgKzcwLDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBF LU1EMTYwIgotICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5z aWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKLSAjICBlbmRpZgotIAotLWZpcHNfbWRfaW5pdChS SVBFTUQxNjApCi0rbm9uZmlwc19tZF9pbml0KFJJUEVNRDE2MCkKLSAJewotIAltZW1zZXQgKGMs MCxzaXplb2YoKmMpKTsKLSAJYy0+QT1SSVBFTUQxNjBfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2Ev cnNhX2NycHQuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBz CTIwMTEtMDYtMDIgMjA6MjI6NDIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL3JzYS9yc2FfY3JwdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNzE1Nzc2MTgxICswMjAw Ci1AQCAtOTAsMTAgKzkwLDkgQEAgaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNv bnN0Ci0gCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0gI2lmZGVmIE9QRU5TU0xf RklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdf RklQU19NRVRIT0QpCi0tCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKQotKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykpCi0gCQl7Ci0tCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNB X1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5D UllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0gCQlyZXR1 cm4gLTE7Ci0gCQl9Ci0gI2VuZGlmCi1AQCAtMTE4LDEwICsxMTcsOSBAQCBpbnQgUlNBX3B1Ymxp Y19kZWNyeXB0KGludCBmbGVuLCBjb25zdCB1Ci0gCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5n KQotIAl7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2Et Pm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0tCQkJJiYgIShyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0gCQl7Ci0tCQlSU0FlcnIoUlNBX0Zf UlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLSsJCVJTQWVy cihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9J Tl9GSVBTX01PREUpOwotIAkJcmV0dXJuIC0xOwotIAkJfQotICNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vcnNhL3JzYV9lYXkuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX2VheS5j LmZpcHMJMjAxMS0xMC0xOSAxNjo1ODo1OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vcnNhL3JzYV9lYXkuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcxNjc3NjIwMyAr MDIwMAotQEAgLTExNCw2ICsxMTQsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotICNpZm5kZWYgUlNBX05VTEwKLSAKLUBAIC0xMzgs NyArMTQyLDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoPXsKLSAJQk5f bW9kX2V4cF9tb250LCAvKiBYWFggcHJvYmFibHkgd2Ugc2hvdWxkIG5vdCB1c2UgTW9udGdvbWVy eSBpZiAgZSA9PSAzICovCi0gCVJTQV9lYXlfaW5pdCwKLSAJUlNBX2VheV9maW5pc2gsCi0tCTAs IC8qIGZsYWdzICovCi0rCVJTQV9GTEFHX0ZJUFNfTUVUSE9ELCAvKiBmbGFncyAqLwotIAlOVUxM LAotIAkwLCAvKiByc2Ffc2lnbiAqLwotIAkwLCAvKiByc2FfdmVyaWZ5ICovCi1AQCAtMTU4LDYg KzE2MiwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0gCXVu c2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoRklQU19zZWxmdGVz dF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5D UllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0K LSsKLSsJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkm JiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0Ff Ul9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2Vu ZGlmCi0rCi0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVM VVNfQklUUykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBS U0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtMzYxLDYgKzM4MywyNCBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCi0gCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7 Ci0gCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgp KQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCi0rCQlp ZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkJJiYgKEJOX251 bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJ CXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsK LSAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0 YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC01MDQsNiArNTQ0LDI0IEBA IHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAJQklHTlVNICp1bmJs aW5kID0gTlVMTDsKLSAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9E RUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJ CX0KLSsKLSsJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJ CQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUykpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwg UlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQot KyNlbmRpZgotKwotIAlpZigoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsK LSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC02Mzks NiArNjk3LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJ dW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJ fQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJ CSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsj ZW5kaWYKLSsKLSAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9E VUxVU19CSVRTKQotIAkJewotIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQs IFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLUBAIC04NDcsMTIgKzkyMywxMiBAQCBzdGF0aWMg aW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCi0gCWlmICghQk5fbW9kKHIwLHByMSxy c2EtPnAsY3R4KSkgZ290byBlcnI7Ci0gCi0gCS8qIElmIHAgPCBxIGl0IGlzIG9jY2FzaW9uYWxs eSBwb3NzaWJsZSBmb3IgdGhlIGNvcnJlY3Rpb24gb2YKLS0gICAgICAgICAqIGFkZGluZyAncCcg aWYgcjAgaXMgbmVnYXRpdmUgYWJvdmUgdG8gbGVhdmUgdGhlIHJlc3VsdCBzdGlsbAotKwkgKiBh ZGRpbmcgJ3AnIGlmIHIwIGlzIG5lZ2F0aXZlIGFib3ZlIHRvIGxlYXZlIHRoZSByZXN1bHQgc3Rp bGwKLSAJICogbmVnYXRpdmUuIFRoaXMgY2FuIGJyZWFrIHRoZSBwcml2YXRlIGtleSBvcGVyYXRp b25zOiB0aGUgZm9sbG93aW5nCi0gCSAqIHNlY29uZCBjb3JyZWN0aW9uIHNob3VsZCAqYWx3YXlz KiBjb3JyZWN0IHRoaXMgcmFyZSBvY2N1cnJlbmNlLgotIAkgKiBUaGlzIHdpbGwgKm5ldmVyKiBo YXBwZW4gd2l0aCBPcGVuU1NMIGdlbmVyYXRlZCBrZXlzIGJlY2F1c2UKLS0gICAgICAgICAqIHRo ZXkgZW5zdXJlIHAgPiBxIFtzdGV2ZV0KLS0gICAgICAgICAqLwotKwkgKiB0aGV5IGVuc3VyZSBw ID4gcSBbc3RldmVdCi0rCSAqLwotIAlpZiAoQk5faXNfbmVnYXRpdmUocjApKQotIAkJaWYgKCFC Tl9hZGQocjAscjAscnNhLT5wKSkgZ290byBlcnI7Ci0gCWlmICghQk5fbXVsKHIxLHIwLHJzYS0+ cSxjdHgpKSBnb3RvIGVycjsKLUBAIC04OTcsNiArOTczLDkgQEAgZXJyOgotIAotIHN0YXRpYyBp bnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NB Q0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL3JzYS9yc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNh L3JzYV9lcnIuYy5maXBzCTIwMTEtMTAtMTAgMDE6MTM6NTAuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAxMi0wNC0yNiAxODowMDo1MS43 MTc3NzYyMjUgKzAyMDAKLUBAIC0xMjEsNiArMTIxLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFU QSBSU0Ffc3RyX2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQp LAkiUlNBX3B1YmxpY19lbmNyeXB0In0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RF KSwJIlJTQV9QVUJfREVDT0RFIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElO RyksCSJSU0Ffc2V0dXBfYmxpbmRpbmcifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZB VUxUX01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0sCi0re0VSUl9GVU5DKFJTQV9G X1JTQV9TRVRfTUVUSE9EKSwJIlJTQV9zZXRfbWV0aG9kIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JT QV9TSUdOKSwJIlJTQV9zaWduIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NU RVRfU1RSSU5HKSwJIlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HIn0sCi0ge0VSUl9GVU5DKFJT QV9GX1JTQV9WRVJJRlkpLAkiUlNBX3ZlcmlmeSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYV9n ZW4uYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAxMS0w Ni0wOSAxNToxODowNy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v cnNhL3JzYV9nZW4uYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcxODc3NjI0NiArMDIwMAotQEAgLTY5 LDYgKzY5LDc4IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2lmZGVmIE9QRU5TU0xf RklQUwotICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLStzdGF0aWMgaW50IGZpcHNfcnNhX3Bh aXJ3aXNlX2ZhaWwgPSAwOwotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkK LSsJewotKwlmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMTsKLSsJfQotKwotK2ludCBmaXBzX2No ZWNrX3JzYShSU0EgKnJzYSkKLSsJewotKwljb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJT QSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKLSsJdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAq cHRidWYgPSBOVUxMOwotKwlpbnQgbGVuLCByZXQgPSAwOwotKwlFVlBfUEtFWSAqcGs7Ci0rCi0r CWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJRVZQ X1BLRVlfc2V0MV9SU0EocGssIHJzYSk7Ci0rCi0rCS8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lz dGVuY3kgc2lnbmF0dXJlIHRlc3QgKi8KLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9QS0NTMSwgTlVMTCkKLSsJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywg LTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBO VUxMKQotKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQlO VUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCi0rCQln b3RvIGVycjsKLSsJLyogTm93IHBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9k ZWNyeXB0IHRlc3QgKi8KLSsJY3RidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsK LSsJaWYgKCFjdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwotKwlsZW4gPSBSU0FfcHVibGljX2VuY3J5 cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMsIGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsK LSsJaWYgKGxlbiA8PSAwKQotKwkJZ290byBlcnI7Ci0rCS8qIENoZWNrIGNpcGhlcnRleHQgZG9l c24ndCBtYXRjaCBwbGFpbnRleHQgKi8KLSsJaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkp ICYmICFtZW1jbXAodGJzLCBjdGJ1ZiwgbGVuKSkKLSsJCWdvdG8gZXJyOwotKwlwdGJ1ZiA9IE9Q RU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBl cnI7Ci0rCWxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwg UlNBX1BLQ1MxX1BBRERJTkcpOwotKwlpZiAobGVuICE9IChzaXplb2YodGJzKSAtIDEpKQotKwkJ Z290byBlcnI7Ci0rCWlmIChtZW1jbXAocHRidWYsIHRicywgbGVuKSkKLSsJCWdvdG8gZXJyOwot KwotKwlyZXQgPSAxOwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCQotKwllcnI6 Ci0rCWlmIChyZXQgPT0gMCkKLSsJCXsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJ CUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxF RCk7Ci0rCQl9Ci0rCi0rCWlmIChjdGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShjdGJ1Zik7Ci0rCWlm IChwdGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShwdGJ1Zik7Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZ X2ZyZWUocGspOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0gI2VuZGlmCi0gCi0gc3RhdGljIGlu dCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUs IEJOX0dFTkNCICpjYik7Ci1AQCAtODEsNyArMTUzLDcgQEAgc3RhdGljIGludCByc2FfYnVpbHRp bl9rZXlnZW4oUlNBICpyc2EsCi0gaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGlu dCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYikKLSAJewotICNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9G TEFHX0ZJUFNfTUVUSE9EKQotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEocnNhLT5tZXRo LT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotIAkJCSYmICEocnNhLT5mbGFncyAmIFJT QV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfR0VORVJB VEVfS0VZX0VYLCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLUBAIC05MCwxMCArMTYyLDYg QEAgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaQotICNlbmRpZgotIAlp Zihyc2EtPm1ldGgtPnJzYV9rZXlnZW4pCi0gCQlyZXR1cm4gcnNhLT5tZXRoLT5yc2Ffa2V5Z2Vu KHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJ UFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfcnNhX2dlbmVyYXRlX2tleV9leChyc2EsIGJpdHMs IGVfdmFsdWUsIGNiKTsKLS0jZW5kaWYKLSAJcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2Es IGJpdHMsIGVfdmFsdWUsIGNiKTsKLSAJfQotIAotQEAgLTEwNSw2ICsxNzMsMjMgQEAgc3RhdGlj IGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCi0gCWludCBiaXRzcCxiaXRzcSxvaz0g LTEsbj0wOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpCi0rCSAgICAJewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgCXJldHVybiAwOwotKwkgICAgCX0K LSsKLSsJCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJ ICAgIHsKLSsJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tF WV9UT09fU0hPUlQpOwotKwkJICAgIHJldHVybiAwOwotKwkJICAgIH0KLSsJCX0KLSsjZW5kaWYK LSsKLSAJY3R4PUJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJ Qk5fQ1RYX3N0YXJ0KGN0eCk7Ci1AQCAtMjE2LDYgKzMwMSwxNyBAQCBzdGF0aWMgaW50IHJzYV9i dWlsdGluX2tleWdlbihSU0EgKnJzYSwKLSAJCXAgPSByc2EtPnA7Ci0gCWlmICghQk5fbW9kX2lu dmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJyOwotIAotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCWlmIChmaXBzX3Jz YV9wYWlyd2lzZV9mYWlsKQotKwkJCUJOX2FkZF93b3JkKHJzYS0+biwgMSk7Ci0rCi0rCQlpZigh Zmlwc19jaGVja19yc2EocnNhKSkKLSsJCSAgICBnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsK LSAJb2s9MTsKLSBlcnI6Ci0gCWlmIChvayA9PSAtMSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYS5oCi0t LS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTItMDQtMjYgMTg6MDA6 NTEuMTQwNzYzNjE5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2EuaAky MDEyLTA0LTI2IDE4OjAwOjUxLjcxODc3NjI0NiArMDIwMAotQEAgLTE2NCw2ICsxNjQsOCBAQCBz dHJ1Y3QgcnNhX3N0Ci0gIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4 NAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRT IDEwMjQKLSsKLSAjaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwotICMgZGVm aW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcyCi0gI2VuZGlmCi1AQCAtMjkw LDYgKzI5MiwxMSBAQCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCi0g Ci0gLyogTmV3IHZlcnNpb24gKi8KLSBpbnQJUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwg aW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZGVyaXZl X2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0g KnEyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklH TlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0 IEJJR05VTSAqWHEsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBS U0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0g KmUsIEJOX0dFTkNCICpjYik7Ci0gCi0gaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOwot IAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9yICovCi1AQCAtNDg3LDcgKzQ5NCw3IEBAIHZv aWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElO R19BRERfTk9ORQkJCSAxMDcKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9P QUVQCQkgMTIxCi0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTCQkJIDEy NQotLSNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTQ4Ci0r I2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01HRjEJCSAxNTgKLSAjZGVm aW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzEJCSAxMDgKLSAjZGVmaW5lIFJT QV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzIJCSAxMDkKLSAjZGVmaW5lIFJTQV9GX1JT QV9QQURESU5HX0FERF9TU0xWMjMJCQkgMTEwCi1AQCAtNTAwLDIwICs1MDcsMjIgQEAgdm9pZCBF UlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0NI RUNLX1g5MzEJCQkgMTI4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKLSAjZGVm aW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2Ci0tI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFU RV9ERUNSWVBUCQkJIDE1MAotLSNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAx NTEKLSsjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQJCQkgMTU3Ci0rI2RlZmluZSBS U0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJIDE0OAotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZf REVDT0RFCQkJCSAxMzcKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4Ci0t I2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTUyCi0rI2RlZmluZSBSU0FfRl9S U0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZ UFQJCQkgMTUzCi0gI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5Ci0gI2RlZmlu ZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2RlZmluZSBSU0FfRl9SU0FfU0VU X0RFRkFVTFRfTUVUSE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJ IDE1MQotICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcKLSAjZGVmaW5lIFJTQV9GX1JT QV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZ CQkJCSAxMTkKLSAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfQVNOMV9PQ1RFVF9TVFJJTkcJCSAx MjAKLSAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTCQkJIDEyNgotLSNkZWZpbmUg UlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNDkKLSsjZGVmaW5lIFJTQV9GX1JT QV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkgMTUyCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwot ICNkZWZpbmUgUlNBX1JfQUxHT1JJVEhNX01JU01BVENICQkJIDEwMAotQEAgLTU0MiwyMSArNTUx LDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfUl9J TlZBTElEX01HRjFfTUQJCQkJIDE1NgotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJ CSAxMzgKLSAjZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElOR19NT0RFCQkJIDE0MQotLSNkZWZp bmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNDkKLSsjZGVmaW5lIFJTQV9SX0lO VkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTU3Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19T QUxUTEVOCQkJIDE0NgotLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTAK LSsjZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJCQkgMTU4Ci0gI2RlZmluZSBSU0Ff Ul9JTlZBTElEX1RSQUlMRVIJCQkJIDEzOQotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9YOTMxX0RJ R0VTVAkJCSAxNDIKLSAjZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYK LSAjZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMjAKLSAjZGVmaW5lIFJTQV9S X0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKLSAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xB UkdFCQkJCSAxMDUKLS0jZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTU3Ci0r I2RlZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9ECQkJIDE0OQotKyNkZWZpbmUgUlNBX1Jf Tk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKLSAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVO VAkJCSAxNDAKLSAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEz Ci0gI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJT QV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCi0tI2RlZmluZSBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTgKLSsjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9O T1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1MAotICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05P VF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4Ci0gI2RlZmluZSBSU0FfUl9QQURESU5H X0NIRUNLX0ZBSUxFRAkJCSAxMTQKLSAjZGVmaW5lIFJTQV9SX1BfTk9UX1BSSU1FCQkJCSAxMjgK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v cnNhL3JzYV9saWIuYy5maXBzCTIwMTEtMDYtMjAgMjE6NDE6MTMuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAxMi0wNC0yNiAxODowMDo1 MS43MTk3NzYyNjcgKzAyMDAKLUBAIC04NCw2ICs4NCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkK LSAKLSB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkK LSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNB X1NFVF9ERUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybjsK LSsJCX0KLSsjZW5kaWYKLSAJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0gCX0KLSAKLUBAIC05 MSwxOCArOTgsMTEgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX2dldF9kZWZhdWx0X21ldGhvZAot IAl7Ci0gCWlmIChkZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpCi0gCQl7Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX3JzYV9wa2NzMV9z c2xlYXkoKTsKLS0JCWVsc2UKLS0JCQlyZXR1cm4gUlNBX1BLQ1MxX1NTTGVheSgpOwotLSNlbHNl Ci0gI2lmZGVmIFJTQV9OVUxMCi0gCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9udWxsX21ldGhvZCgp OwotICNlbHNlCi0gCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9QS0NTMV9TU0xlYXkoKTsKLSAjZW5k aWYKLS0jZW5kaWYKLSAJCX0KLSAKLSAJcmV0dXJuIGRlZmF1bHRfUlNBX21ldGg7Ci1AQCAtMTE4 LDYgKzExOCwxMyBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCi0g CS8qIE5COiBUaGUgY2FsbGVyIGlzIHNwZWNpZmljYWxseSBzZXR0aW5nIGEgbWV0aG9kLCBzbyBp dCdzIG5vdCB1cCB0byB1cwotIAkgKiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVz IGZyb20uICovCi0gCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVU SE9EKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotIAltdG1wID0gcnNhLT5t ZXRoOwotIAlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5pc2gocnNhKTsKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCi1AQCAtMTcwLDYgKzE3NywxOCBAQCBSU0EgKlJTQV9uZXdfbWV0aG9k KEVOR0lORSAqZW5naW5lKQotIAkJCX0KLSAJCX0KLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19G SVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJTQV9S X05PTl9GSVBTX01FVEhPRCk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotKwkJaWYgKHJl dC0+ZW5naW5lKQotKwkJCUVOR0lORV9maW5pc2gocmV0LT5lbmdpbmUpOwotKyNlbmRpZgotKwkJ T1BFTlNTTF9mcmVlKHJldCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJ cmV0LT5wYWQ9MDsKLSAJcmV0LT52ZXJzaW9uPTA7Ci1AQCAtMTg4LDcgKzIwNyw3IEBAIFJTQSAq UlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCi0gCXJldC0+YmxpbmRpbmc9TlVMTDsKLSAJ cmV0LT5tdF9ibGluZGluZz1OVUxMOwotIAlyZXQtPmJpZ251bV9kYXRhPU5VTEw7Ci0tCXJldC0+ ZmxhZ3M9cmV0LT5tZXRoLT5mbGFncyAmIH5SU0FfRkxBR19OT05fRklQU19BTExPVzsKLSsJcmV0 LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzOwotIAlpZiAoIUNSWVBUT19uZXdfZXhfZGF0YShDUllQ VE9fRVhfSU5ERVhfUlNBLCByZXQsICZyZXQtPmV4X2RhdGEpKQotIAkJewotICNpZm5kZWYgT1BF TlNTTF9OT19FTkdJTkUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX3Bt ZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCi0tLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzCTIwMTItMDItMTUgMTU6MTQ6 MDEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfcG1l dGguYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcyMDc3NjI4OSArMDIwMAotQEAgLTIwNiwyMiArMjA2 LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYwotIAkJCQkJUlNB X1JfSU5WQUxJRF9ESUdFU1RfTEVOR1RIKTsKLSAJCQlyZXR1cm4gLTE7Ci0gCQkJfQotLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChyZXQgPiAwKQotLQkJCXsKLS0JCQl1bnNpZ25lZCBpbnQg c2xlbjsKLS0JCQlyZXQgPSBGSVBTX3JzYV9zaWduX2RpZ2VzdChyc2EsIHRicywgdGJzbGVuLCBy Y3R4LT5tZCwKLS0JCQkJCQkJcmN0eC0+cGFkX21vZGUsCi0tCQkJCQkJCXJjdHgtPnNhbHRsZW4s Ci0tCQkJCQkJCXJjdHgtPm1nZjFtZCwKLS0JCQkJCQkJc2lnLCAmc2xlbik7Ci0tCQkJaWYgKHJl dCA+IDApCi0tCQkJCSpzaWdsZW4gPSBzbGVuOwotLQkJCWVsc2UKLS0JCQkJKnNpZ2xlbiA9IDA7 Ci0tCQkJcmV0dXJuIHJldDsKLS0JCQl9Ci0tI2VuZGlmCi0gCi0gCQlpZiAoRVZQX01EX3R5cGUo cmN0eC0+bWQpID09IE5JRF9tZGMyKQotIAkJCXsKLUBAIC0zNTQsMTkgKzMzOCw2IEBAIHN0YXRp YyBpbnQgcGtleV9yc2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAotICNlbmRpZgotIAlpZiAocmN0eC0+ bWQpCi0gCQl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKHJ2ID4gMCkKLS0JCQl7Ci0t CQkJcmV0dXJuIEZJUFNfcnNhX3ZlcmlmeV9kaWdlc3QocnNhLAotLQkJCQkJCQl0YnMsIHRic2xl biwKLS0JCQkJCQkJcmN0eC0+bWQsCi0tCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAotLQkJCQkJCQly Y3R4LT5zYWx0bGVuLAotLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCi0tCQkJCQkJCXNpZywgc2lnbGVu KTsKLS0JCQkJCQkJCi0tCQkJfQotLSNlbmRpZgotIAkJaWYgKHJjdHgtPnBhZF9tb2RlID09IFJT QV9QS0NTMV9QQURESU5HKQotIAkJCXJldHVybiBSU0FfdmVyaWZ5KEVWUF9NRF90eXBlKHJjdHgt Pm1kKSwgdGJzLCB0YnNsZW4sCi0gCQkJCQlzaWcsIHNpZ2xlbiwgcnNhKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9yc2EvcnNhX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX3Np Z24uYy5maXBzCTIwMTItMDItMTUgMTU6MDA6MDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNzIwNzc2 Mjg5ICswMjAwCi1AQCAtMTM4LDcgKzEzOCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29u c3QgdW5zaWduZWQgY2gKLSAJCWkyZF9YNTA5X1NJRygmc2lnLCZwKTsKLSAJCXM9dG1wczsKLSAJ fQotLQlpPVJTQV9wcml2YXRlX2VuY3J5cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpOwotKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBG SVBTIGJsb2NraW5nICovCi0rCWkgPSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0 aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0g CWlmIChpIDw9IDApCi0gCQlyZXQ9MDsKLSAJZWxzZQotQEAgLTE3OCw4ICsxNzksOCBAQCBpbnQg aW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCi0gCi0gCWlmKChkdHlwZSA9PSBO SURfbWQ1X3NoYTEpICYmIHJtKQotIAkJewotLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50 KXNpZ2xlbiwKLS0JCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkJaSA9 IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2ln bGVuLAotKwkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwotIAkJaWYg KGkgPD0gMCkKLSAJCQlyZXR1cm4gMDsKLSAJCSpwcm1fbGVuID0gaTsKLUBAIC0xOTYsNyArMTk3 LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAkJCVJTQWVy cihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKLSAJ CQlnb3RvIGVycjsKLSAJfQotLQlpPVJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdi dWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1l dGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCi0rCWkgPSByc2EtPm1ldGgt PnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYs cyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAKLSAJaWYgKGkgPD0gMCkgZ290byBlcnI7 Ci0gCS8qIE9kZGJhbGwgTURDMiBjYXNlOiBzaWduYXR1cmUgY2FuIGJlIE9DVEVUIFNUUklORy4K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vc2hhL3NoYTI1Ni5jCi0tLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3No YS9zaGEyNTYuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDQuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcy MTc3NjMxMiArMDIwMAotQEAgLTEyLDEyICsxMiwxOSBAQAotIAotICNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbHYuaD4KLSAKLSBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0y NTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwg U0hBMjU2KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5oWzBdPTB4YzEw NTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7Ci0gCWMtPmhbMl09MHgzMDcwZGQxN1VMOwlj LT5oWzNdPTB4ZjcwZTU5MzlVTDsKLUBAIC0yOSw2ICszNiw5IEBAIGZpcHNfbWRfaW5pdF9jdHgo U0hBMjI0LCBTSEEyNTYpCi0gCi0gZmlwc19tZF9pbml0KFNIQTI1NikKLSAJewotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3 YWU4NVVMOwotIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL3NoYS9zaGE1MTIuYwotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEv c2hhNTEyLmMuZmlwcwkyMDExLTExLTE0IDIxOjU4OjAxLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxMi0wNC0yNiAxODowMDo1MS43MjI3 NzYzMzQgKzAyMDAKLUBAIC01LDYgKzUsMTAgQEAKLSAgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAqLwotICNp bmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaWYgIWRlZmluZWQoT1BFTlNT TF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBNTEyKQotIC8qCi0gICogSU1QTEVN RU5UQVRJT04gTk9URVMuCi1AQCAtNjEsNiArNjUsOSBAQCBjb25zdCBjaGFyIFNIQTUxMl92ZXJz aW9uW109IlNIQS01MTIiIE9QCi0gCi0gZmlwc19tZF9pbml0X2N0eChTSEEzODQsIFNIQTUxMikK LSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNl bmRpZgotIAljLT5oWzBdPVU2NCgweGNiYmI5ZDVkYzEwNTllZDgpOwotIAljLT5oWzFdPVU2NCgw eDYyOWEyOTJhMzY3Y2Q1MDcpOwotIAljLT5oWzJdPVU2NCgweDkxNTkwMTVhMzA3MGRkMTcpOwot QEAgLTc3LDYgKzg0LDkgQEAgZmlwc19tZF9pbml0X2N0eChTSEEzODQsIFNIQTUxMikKLSAKLSBm aXBzX21kX2luaXQoU0hBNTEyKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWMtPmhbMF09VTY0KDB4NmEwOWU2NjdmM2JjYzkw OCk7Ci0gCWMtPmhbMV09VTY0KDB4YmI2N2FlODU4NGNhYTczYik7Ci0gCWMtPmhbMl09VTY0KDB4 M2M2ZWYzNzJmZTk0ZjgyYik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vc2hhL3No YS5oLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3NoYS9zaGEuaAotLS0tIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9zaGEvc2hhLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUwLjYxNjc1MjE3MCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhLmgJMjAxMi0wNC0yNiAxODow MDo1MS43MjI3NzYzMzQgKzAyMDAKLUBAIC0xMTYsOSArMTE2LDYgQEAgdW5zaWduZWQgY2hhciAq U0hBKGNvbnN0IHVuc2lnbmVkIGNoYXIgKgotIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpj LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fU0hBMQotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEExX0luaXQoU0hB X0NUWCAqYyk7Ci0tI2VuZGlmCi0gaW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKLSBpbnQgU0hB MV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50 IFNIQTFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwotQEAgLTE0MSwxMCAr MTM4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBMjU2c3RhdGVfc3QKLSAJfSBTSEEyNTZfQ1RYOwot IAotICNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50 IHByaXZhdGVfU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7Ci0taW50IHByaXZhdGVfU0hBMjU2 X0luaXQoU0hBMjU2X0NUWCAqYyk7Ci0tI2VuZGlmCi0gaW50IFNIQTIyNF9Jbml0KFNIQTI1Nl9D VFggKmMpOwotIGludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBsZW4pOwotIGludCBTSEEyMjRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNI QTI1Nl9DVFggKmMpOwotQEAgLTE5MiwxMCArMTg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBNTEy c3RhdGVfc3QKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0tI2lmZGVm IE9QRU5TU0xfRklQUwotLWludCBwcml2YXRlX1NIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOwot LWludCBwcml2YXRlX1NIQTUxMl9Jbml0KFNIQTUxMl9DVFggKmMpOwotLSNlbmRpZgotIGludCBT SEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKLSBpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RY ICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMzg0X0ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hh X2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIw MTItMDQtMjYgMTg6MDA6NTAuNjIyNzUyMzAyICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTItMDQtMjYgMTg6MDA6NTEuNzIzNzc2MzU2ICswMjAwCi1A QCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFgg KmMsCi0gI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCi0gCi0gI2lmZGVmIFNIQV8w Ci0tZmlwc19tZF9pbml0KFNIQSkKLStub25maXBzX21kX2luaXQoU0hBKQotICNlbHNlCi0gZmlw c19tZF9pbml0X2N0eChTSEExLCBTSEEpCi0gI2VuZGlmCi0gCXsKLSsjaWYgZGVmaW5lZChTSEFf MSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj ZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmgwPUlOSVRfREFUQV9oMDsK LSAJYy0+aDE9SU5JVF9EQVRBX2gxOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3do cmxwb29sL3dwX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by93aHJscG9vbC93cF9k Z3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJ MjAxMS0wNi0wMSAxNTozOTo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNzI0Nzc2Mzc4ICsw MjAwCi1AQCAtNTUsNyArNTUsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNp bmNsdWRlIDxzdHJpbmcuaD4KLSAKLS1maXBzX21kX2luaXQoV0hJUkxQT09MKQotK25vbmZpcHNf bWRfaW5pdChXSElSTFBPT0wpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCXJl dHVybigxKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL01ha2VmaWxlLm9yZy5maXBzIG9wZW5z c2wtMS4wLjFiL01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjFiL01ha2VmaWxlLm9yZy5m aXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMzUwNzY4MjA3ICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWIvTWFrZWZpbGUub3JnCTIwMTItMDQtMjYgMTg6MDA6NTEuNzI0Nzc2Mzc4ICswMjAwCi1AQCAt MTM2LDYgKzEzNiw5IEBAIEZJUFNDQU5MSUI9Ci0gCi0gQkFTRUFERFI9Ci0gCi0rIyBOb24tZW1w dHkgaWYgRklQUyBlbmFibGVkCi0rRklQUz0KLSsKLSBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5l cyBhcHBzIHRlc3QgdG9vbHMKLSBFTkdESVJTPSBjY2dvc3QKLSBTSExJQkRJUlM9IGNyeXB0byBz c2wKLUBAIC0xNDgsNyArMTUxLDcgQEAgU0RJUlM9ICBcCi0gCWJuIGVjIHJzYSBkc2EgZWNkc2Eg ZGggZWNkaCBkc28gZW5naW5lIFwKLSAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBc Ci0gCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29t cCBvY3NwIHVpIGtyYjUgXAotLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCi0r CWNtcyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMgZmlwcwotICMga2VlcCBpbiBtaW5k IHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKLSAjIGFjY29y ZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCi0gCi1AQCAtMjM3LDYgKzI0MCw3IEBAIEJVSUxE RU5WPQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MKLSAJCUZJUFNMSUJESVI9JyR7RklQ U0xJQkRJUn0nCQkJXAotIAkJRklQU0RJUj0nJHtGSVBTRElSfScJCQkJXAotIAkJRklQU0NBTkxJ Qj0iJCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwKLSsJCUZJUFM9IiQke0ZJUFM6LSQo RklQUyl9IglcCi0gCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZF UlJJREVTPQotICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlz aCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAotICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVz IGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9zc2wvc3NsX2Fs Z3MuYwotLS0tIG9wZW5zc2wtMS4wLjFiL3NzbC9zc2xfYWxncy5jLmZpcHMJMjAxMi0wMS0xNSAx NDo0Mjo1MC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYi9zc2wvc3NsX2FsZ3Mu YwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcyNTc3NjM5OSArMDIwMAotQEAgLTY0LDYgKzY0LDEyIEBA Ci0gaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKLSAJewotIAotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJaWYgKCFGSVBTX21vZGUoKSkKLSsJCXsK LSsjZW5kaWYKLSsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0gCUVWUF9hZGRfY2lwaGVyKEVW UF9kZXNfY2JjKCkpOwotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOwotQEAg LTEzNiw2ICsxNDIsNTAgQEAgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKLSAJRVZQX2FkZF9k aWdlc3QoRVZQX3NoYSgpKTsKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsKLSAjZW5kaWYK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsjaWZuZGVmIE9QRU5T U0xfTk9fREVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rI2VuZGlm Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9j YmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKLSsJRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9n Y20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKLSsjZW5kaWYKLSsj aWZuZGVmIE9QRU5TU0xfTk9fTUQ1Ci0rCS8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUg Zm9yIFRMUyBNQUMgKi8KLSsJRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKLSsJRVZQX2FkZF9k aWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wyLW1kNSIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhT Tl9tZDUsInNzbDMtbWQ1Iik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQQotKwlF VlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLwotKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKLSsjZW5kaWYKLSsj aWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7 Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVO U1NMX05PX1NIQTUxMgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOwotKwlFVlBfYWRk X2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyNlbmRpZgotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05P X1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9k c3MxKCkpOyAvKiBEU0Egd2l0aCBzaGExICovCi0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2Rz YVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9k c2FXaXRoU0hBMSwiRFNTMSIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hB MSwiZHNzMSIpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotKwlFVlBfYWRk X2RpZ2VzdChFVlBfZWNkc2EoKSk7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBP UEVOU1NMX05PX0NPTVAKLSAJLyogVGhpcyB3aWxsIGluaXRpYWxpc2UgdGhlIGJ1aWx0LWluIGNv bXByZXNzaW9uIGFsZ29yaXRobXMuCi0gCSAgIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhIFNUQUNL X09GKFNTTF9DT01QKSwgYnV0IHRoYXQgY2FuCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWMt Zmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjFjLWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uOWQ1NmExMwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4w LjFjLWZpcHMucGF0Y2gKQEAgLTAsMCArMSwyMDM1NyBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvYXBwcy9wa2NzMTIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2FwcHMvcGtjczEyLmMKKy0tLSBv cGVuc3NsLTEuMC4xYy9hcHBzL3BrY3MxMi5jLmZpcHMJMjAxMS0wMy0xMyAxOToyMDoyMy4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9hcHBzL3BrY3MxMi5jCTIwMTItMDctMTIg MjE6NDk6MjUuMzE2MzUxNzg5ICswMjAwCitAQCAtNjcsNiArNjcsOSBAQAorICNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgorICNpbmNsdWRlIDxvcGVu c3NsL3BrY3MxMi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisgCisgI2RlZmluZSBQUk9HIHBrY3MxMl9tYWluCisgCitAQCAtMTMw LDYgKzEzMywxMSBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgICAgIGFw cHNfc3RhcnR1cCgpOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9k ZSgpKQorKwljZXJ0X3BiZSA9IGtleV9wYmU7IC8qIGNhbm5vdCB1c2UgUkMyIGluIHRoZSBGSVBT IG1vZGUgKi8KKysjZW5kaWYKKysKKyAgICAgZW5jID0gRVZQX2Rlc19lZGUzX2NiYygpOworICAg ICBpZiAoYmlvX2VyciA9PSBOVUxMICkgYmlvX2VyciA9IEJJT19uZXdfZnAgKHN0ZGVyciwgQklP X05PQ0xPU0UpOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvYXBwcy9zcGVlZC5jLmZpcHMg b3BlbnNzbC0xLjAuMWMvYXBwcy9zcGVlZC5jCistLS0gb3BlbnNzbC0xLjAuMWMvYXBwcy9zcGVl ZC5jLmZpcHMJMjAxMi0wMS0xMSAyMjo0OToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xYy9hcHBzL3NwZWVkLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMTczNTE4MTEgKzAyMDAK K0BAIC0xOTUsNyArMTk1LDYgQEAKKyAjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECisg I3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKKyAjdW5kZWYgQUVTX3NldF9kZWNyeXB0X2tleQor LSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQKKyAjZW5kaWYKKyAjZGVmaW5lIEJGX3NldF9r ZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisgI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNU X3NldF9rZXkKK0BAIC0yMDMsNyArMjAyLDYgQEAKKyAjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2 YXRlX1NFRURfc2V0X2tleQorICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tl eQorICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQorLSNkZWZpbmUgREVT X3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCisgI2RlZmlu ZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleQorICNkZWZp bmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKyAjZGVm aW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CitAQCAtOTQxLDcg KzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2lmbmRlZiBPUEVO U1NMX05PX1JTQQorIAkJCWlmIChzdHJjbXAoKmFyZ3YsInJzYSIpID09IDApCisgCQkJeworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkJaWYgKCFGSVBTX21vZGUoKSkKKysjZW5kaWYKKysJCQkJ eworIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09MTsKKysJCQkJfQorIAkJCXJzYV9kb2l0W1JfUlNB XzEwMjRdPTE7CisgCQkJcnNhX2RvaXRbUl9SU0FfMjA0OF09MTsKKyAJCQlyc2FfZG9pdFtSX1JT QV80MDk2XT0xOworQEAgLTk1MSw3ICs5NTQsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorICNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKyAJCQlpZiAoc3RyY21wKCphcmd2LCJk c2EiKSA9PSAwKQorIAkJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJCWlmICghRklQU19t b2RlKCkpCisrI2VuZGlmCisrCQkJCXsKKyAJCQlkc2FfZG9pdFtSX0RTQV81MTJdPTE7CisrCQkJ CX0KKyAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0XT0xOworIAkJCWRzYV9kb2l0W1JfRFNBXzIwNDhd PTE7CisgCQkJfQorQEAgLTEyMjYsMzAgKzEyMzQsNTQgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorIAlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleTMyLDI1NiwmYWVzX2tzMyk7Cisg I2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCisrCWlmIChkb2l0W0RfQ0JDXzEy OF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NNTF0gfHwgZG9pdFtEX0NCQ18yNTZfQ01MXSkKKysJ ICAgIHsKKyAJQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwxMjgsJmNhbWVsbGlhX2tzMSk7CisgCUNh bWVsbGlhX3NldF9rZXkoY2tleTI0LDE5MiwmY2FtZWxsaWFfa3MyKTsKKyAJQ2FtZWxsaWFfc2V0 X2tleShja2V5MzIsMjU2LCZjYW1lbGxpYV9rczMpOworKwkgICAgfQorICNlbmRpZgorICNpZm5k ZWYgT1BFTlNTTF9OT19JREVBCisrCWlmIChkb2l0W0RfQ0JDX0lERUFdKQorKwkgICAgeworIAlp ZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwmaWRlYV9rcyk7CisrCSAgICB9CisgI2VuZGlmCisg I2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKKysJaWYgKGRvaXRbRF9DQkNfU0VFRF0pCisrCSAgICB7 CisgCVNFRURfc2V0X2tleShrZXkxNiwmc2VlZF9rcyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lm bmRlZiBPUEVOU1NMX05PX1JDNAorKwlpZiAoZG9pdFtEX1JDNF0pCisrCSAgICB7CisgCVJDNF9z ZXRfa2V5KCZyYzRfa3MsMTYsa2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BF TlNTTF9OT19SQzIKKysJaWYgKGRvaXRbRF9DQkNfUkMyXSkKKysJICAgIHsKKyAJUkMyX3NldF9r ZXkoJnJjMl9rcywxNixrZXkxNiwxMjgpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BF TlNTTF9OT19SQzUKKysJaWYgKGRvaXRbRF9DQkNfUkM1XSkKKysJICAgIHsKKyAJUkM1XzMyX3Nl dF9rZXkoJnJjNV9rcywxNixrZXkxNiwxMik7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBP UEVOU1NMX05PX0JGCisrCWlmIChkb2l0W0RfQ0JDX0JGXSkKKysJICAgIHsKKyAJQkZfc2V0X2tl eSgmYmZfa3MsMTYsa2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19DQVNUCisrCWlmIChkb2l0W0RfQ0JDX0NBU1RdKQorKwkgICAgeworIAlDQVNUX3NldF9rZXko JmNhc3Rfa3MsMTYsa2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19SU0EKKyAJbWVtc2V0KHJzYV9jLDAsc2l6ZW9mKHJzYV9jKSk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYy9Db25maWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4xYy9Db25maWd1cmUKKy0tLSBvcGVu c3NsLTEuMC4xYy9Db25maWd1cmUuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjI3NjM1MDg4OSAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL0NvbmZpZ3VyZQkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMx OTM1MTg1NSArMDIwMAorQEAgLTk5MywxMSArOTkzLDYgQEAgaWYgKGRlZmluZWQoJGRpc2FibGVk eyJtZDUifSkgfHwgZGVmaW5lZAorIAkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOworIAl9 CisgCistaWYgKCRmaXBzICYmICRmaXBzbGliZGlyIGVxICIiKQorLQl7CistCSRmaXBzbGliZGly ID0gJGZpcHNkaXIgLiAiL2xpYi8iOworLQl9CistCisgIyBSU0FYIEVOR0lORSBzZXRzIGRlZmF1 bHQgbm9uLUZJUFMgUlNBIG1ldGhvZC4KKyBpZiAoJGZpcHMpCisgCXsKK0BAIC0xNDcyLDcgKzE0 NjcsNiBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fR0YybSIgaWYgKCRiCisgaWYgKCRm aXBzKQorIAl7CisgCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQ U1xuIjsKKy0JJGNmbGFncyAuPSAiIC1JXCQoRklQU0RJUikvaW5jbHVkZSI7CisgCX0KKyAKKyAk Y3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOworQEAg LTE2NTksOSArMTY1MywxMiBAQCB3aGlsZSAoPElOPikKKyAKKyAJcy9eRklQU0RJUj0uKi9GSVBT RElSPSRmaXBzZGlyLzsKKyAJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGly LzsKKy0Jcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmNyeXB0by8gaWYgJGZpcHM7Cisg CXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRiYXNlYWRkci87CisgCisrCWlmICgkZmlwcykKKysJ CXsKKysJCXMvXkZJUFM9LiovRklQUz15ZXMvOworKwkJfQorIAlzL15TSExJQl9UQVJHRVQ9Liov U0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKKyAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9N QVJLPSRzaGFyZWRfbWFyay87CisgCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNI QVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2Flcy9hZXNfbWlzYy5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Flcy9hZXNf bWlzYy5jLmZpcHMJMjAxMS0wNi0wNSAxOTozNjozMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vYWVzL2Flc19taXNjLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMTkz NTE4NTUgKzAyMDAKK0BAIC02OSwxNyArNjksMTEgQEAgY29uc3QgY2hhciAqQUVTX29wdGlvbnMo dm9pZCkgeworIGludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVz ZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAkJCUFFU19LRVkgKmtleSkKKyAJeworLSNpZmRlZiBP UEVOU1NMX0ZJUFMKKy0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKKy0jZW5kaWYKKyAJcmV0dXJu IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworIAl9Cisg CisgaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwg Y29uc3QgaW50IGJpdHMsCisgCQkJQUVTX0tFWSAqa2V5KQorIAl7CistI2lmZGVmIE9QRU5TU0xf RklQUworLQlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOworLSNlbmRpZgorIAlyZXR1cm4gcHJpdmF0 ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisgCX0KK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9jbWFjL2NtYWMuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jbWFjL2NtYWMuYy5m aXBzCTIwMTItMDQtMTEgMTc6MTE6MTYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2NtYWMvY21hYy5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzE5MzUxODU1ICswMjAw CitAQCAtMTA3LDEzICsxMDcsNiBAQCBDTUFDX0NUWCAqQ01BQ19DVFhfbmV3KHZvaWQpCisgCisg dm9pZCBDTUFDX0NUWF9jbGVhbnVwKENNQUNfQ1RYICpjdHgpCisgCXsKKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0JCXsKKy0J CUZJUFNfY21hY19jdHhfY2xlYW51cChjdHgpOworLQkJcmV0dXJuOworLQkJfQorLSNlbmRpZgor IAlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgtPmNjdHgpOworIAlPUEVOU1NMX2NsZWFuc2Uo Y3R4LT50YmwsIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKKyAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ azEsIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKK0BAIC0xNjQsMTEgKzE1Nyw2IEBAIGludCBDTUFD X0luaXQoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAorIAkJCUVWUGVycihFVlBfRl9DTUFDX0lO SVQsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKyAJCQlyZXR1cm4gMDsKKyAJCQl9CistCQkv KiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0 LAorLQkJICogdmlhIEZJUFNfY2lwaGVyaW5pdCgpLgorLQkJICovCistCQlpZiAoIWltcGwgJiYg IWN0eC0+Y2N0eC5lbmdpbmUpCistCQkJcmV0dXJuIEZJUFNfY21hY19pbml0KGN0eCwga2V5LCBr ZXlsZW4sIGNpcGhlciwgTlVMTCk7CisgCQl9CisgI2VuZGlmCisgCS8qIEFsbCB6ZXJvcyBtZWFu cyByZXN0YXJ0ICovCitAQCAtMjE2LDEwICsyMDQsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19D VFggKmN0eCwgY29uc3Qgdm9pCisgCXsKKyAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGlu OworIAlzaXplX3QgYmw7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkg JiYgIWN0eC0+Y2N0eC5lbmdpbmUpCistCQlyZXR1cm4gRklQU19jbWFjX3VwZGF0ZShjdHgsIGlu LCBkbGVuKTsKKy0jZW5kaWYKKyAJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisgCQlyZXR1 cm4gMDsKKyAJaWYgKGRsZW4gPT0gMCkKK0BAIC0yNjEsMTAgKzI0NSw2IEBAIGludCBDTUFDX1Vw ZGF0ZShDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2kKKyBpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqcG91dGxlbikKKyAJeworIAlpbnQgaSwg YmwsIGxiOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgt PmNjdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNfY21hY19maW5hbChjdHgsIG91dCwgcG91dGxl bik7CistI2VuZGlmCisgCWlmIChjdHgtPm5sYXN0X2Jsb2NrID09IC0xKQorIAkJcmV0dXJuIDA7 CisgCWJsID0gRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0 by9jcnlwdG8uaAorLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTIt MDctMTIgMjE6NDk6MjUuMDQ4MzQ1NzYwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2NyeXB0by5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzIwMzUxODc4ICswMjAwCitAQCAtNTUzLDI0 ICs1NTMsMjkgQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IHIpOworIHZvaWQgT1BFTlNTTF9pbml0 KHZvaWQpOworIAorICNkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9pbml0X2N0eChh bGcsIGFsZykKKysjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdChhbGcpIG5vbmZpcHNfbWRfaW5pdF9j dHgoYWxnLCBhbGcpCisrI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKysJaW50 IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCisgCisgI2lmZGVmIE9QRU5TU0xfRklQUworLSNkZWZp bmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisrI2RlZmluZSBub25maXBzX21kX2luaXRf Y3R4KGFsZywgY3gpIFwKKyAJaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpIFwKKyAJeyBcCisg CWlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKy0JCSJM b3cgbGV2ZWwgQVBJIGNhbGwgdG8gZGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1v ZGUhIik7IFwKKysJCSJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKTsg XAorIAlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKyAJfSBcCisgCWludCBwcml2 YXRlXyMjYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKyAKKyAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fi b3J0KGFsZykgXAorIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElO RV9fLCBcCistCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGNpcGhlciAiICNhbGcgIiBmb3JiaWRk ZW4gaW4gRklQUyBtb2RlISIpCisrCQkiQ2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBT IG1vZGUhIikKKysKKysvKiBkaWUgaWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KKyt2b2lkIEZJ UFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7CisgCisgI2Vsc2UKKy0jZGVmaW5lIGZpcHNfbWRfaW5p dF9jdHgoYWxnLCBjeCkgXAorLQlpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKysjZGVmaW5l IG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KQor ICNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSB3aGlsZSgwKQorICNlbmRpZgorIAorQEAg LTU4MCw2ICs1ODUsOSBAQCB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKKyAgKi8KKyB2b2lkIEVS Ul9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOworIAorKyNkZWZpbmUgT1BFTlNTTF9IQVZFX0lO SVQJMQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7CisrCisgLyogRXJyb3IgY29k ZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVzLiAq LworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9kZXMvZGVzLmgKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL2Rl cy5oLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4xMjQzNDc0NjkgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZGVzL2Rlcy5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzIwMzUxODc4ICsw MjAwCitAQCAtMjI0LDkgKzIyNCw2IEBAIGludCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Jsb2Nr ICprZXksREUKKyBpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tl eV9zY2hlZHVsZSAqc2NoZWR1bGUpOworIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RF U19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Cisgdm9pZCBERVNfc2V0 X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNj aGVkdWxlKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5 X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1 bGUpOworLSNlbmRpZgorIHZvaWQgREVTX3N0cmluZ190b19rZXkoY29uc3QgY2hhciAqc3RyLERF U19jYmxvY2sgKmtleSk7Cisgdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIgKnN0 cixERVNfY2Jsb2NrICprZXkxLERFU19jYmxvY2sgKmtleTIpOworIHZvaWQgREVTX2NmYjY0X2Vu Y3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcgbGVu Z3RoLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Rlcy9zZXRfa2V5LmMuZmlwcyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL3NldF9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9kZXMvc2V0X2tleS5jLmZpcHMJMjAxMS0wNi0wMSAxODo1NDowNC4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL3NldF9rZXkuYwkyMDEyLTA3LTEyIDIx OjQ5OjI1LjMyMTM1MTkwMSArMDIwMAorQEAgLTMzNywxMyArMzM3LDYgQEAgaW50IERFU19zZXRf a2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9jaworIAl9CisgCisgdm9pZCBERVNfc2V0X2tleV91 bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVs ZSkKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCXsKKy0JZmlwc19jaXBoZXJfYWJvcnQoREVTKTsK Ky0JcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hlZHVsZSk7CistCX0KKy12 b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwg REVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCistI2VuZGlmCisgCXsKKyAJc3RhdGljIGNvbnN0 IGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07CisgCXJl Z2lzdGVyIERFU19MT05HIGMsZCx0LHMsdDI7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfZ2VuLmMKKy0t LSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcwkyMDExLTA2LTA5IDE3OjIx OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kaC9kaF9nZW4u YwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyMTM1MTkwMSArMDIwMAorQEAgLTg0LDExICs4NCw2IEBA IGludCBESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERIICpyZXQsIGkKKyAjZW5kaWYKKyAJaWYo cmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCisgCQlyZXR1cm4gcmV0LT5tZXRoLT5nZW5lcmF0 ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOworLSNpZmRlZiBPUEVOU1NM X0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIEZJUFNfZGhfZ2VuZXJhdGVfcGFy YW1ldGVyc19leChyZXQsIHByaW1lX2xlbiwKKy0JCQkJCQkJZ2VuZXJhdG9yLCBjYik7CistI2Vu ZGlmCisgCXJldHVybiBkaF9idWlsdGluX2dlbnBhcmFtcyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJh dG9yLCBjYik7CisgCX0KKyAKK0BAIC0xMjMsNiArMTE4LDIwIEBAIHN0YXRpYyBpbnQgZGhfYnVp bHRpbl9nZW5wYXJhbXMoREggKnJldCwKKyAJaW50IGcsb2s9IC0xOworIAlCTl9DVFggKmN0eD1O VUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJaWYgKEZJUFNf bW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp CisrCQl7CisrCQlESGVycihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBESF9SX0tFWV9TSVpF X1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NU WF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0 eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RoL2RoLmgu ZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI0Ljk4NjM0NDM2NSArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9kaC9kaC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzIyMzUxOTI0ICswMjAwCitA QCAtNzcsNiArNzcsOCBAQAorICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklUUwkx MDAwMAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJ VFMgMTAyNAorKworICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKKyAjZGVm aW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhl IGJ1aWx0LWluIERICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBp bXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhf a2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwkyMDExLTEx LTE0IDE1OjE2OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9k aC9kaF9rZXkuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyMjM1MTkyNCArMDIwMAorQEAgLTYxLDYg KzYxLDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBnZW5lcmF0 ZV9rZXkoREggKmRoKTsKKyBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtl eSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOworQEAgLTEwNCw3ICsxMDcsNyBAQCBj b21wdXRlX2tleSwKKyBkaF9ibl9tb2RfZXhwLAorIGRoX2luaXQsCisgZGhfZmluaXNoLAorLTAs CisrREhfRkxBR19GSVBTX01FVEhPRCwKKyBOVUxMLAorIE5VTEwKKyB9OworQEAgLTEyMyw2ICsx MjYsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQorIAlCTl9NT05UX0NUWCAq bW9udD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgt PnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIo REhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAw OworKwkJfQorKyNlbmRpZgorKworIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0g TlVMTCkgZ290byBlcnI7CisgCitAQCAtMjEzLDYgKzIyNCwxMyBAQCBzdGF0aWMgaW50IGNvbXB1 dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCisgCQlESGVycihESF9GX0NPTVBVVEVfS0VZLERIX1Jf TU9EVUxVU19UT09fTEFSR0UpOworIAkJZ290byBlcnI7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xf REhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfQ09NUFVURV9L RVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRp ZgorIAorIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7 CitAQCAtMjgwLDYgKzI5OCw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAq ZGgsIEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQorIAl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRoLT5mbGFncyB8 PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v ZGgvZGhfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfbGliLmMuZmlwcwky MDExLTA2LTIwIDIxOjQxOjExLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9kaC9kaF9saWIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyMzM1MTk0NyArMDIwMAorQEAg LTgxLDE0ICs4MSw3IEBAIGNvbnN0IERIX01FVEhPRCAqREhfZ2V0X2RlZmF1bHRfbWV0aG9kKHYK KyAJeworIAlpZighZGVmYXVsdF9ESF9tZXRob2QpCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQ UworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJldHVybiBGSVBTX2RoX29wZW5zc2woKTsKKy0J CWVsc2UKKy0JCQlyZXR1cm4gREhfT3BlblNTTCgpOworLSNlbHNlCisgCQlkZWZhdWx0X0RIX21l dGhvZCA9IERIX09wZW5TU0woKTsKKy0jZW5kaWYKKyAJCX0KKyAJcmV0dXJuIGRlZmF1bHRfREhf bWV0aG9kOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9lcnIu Yy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX2Vyci5jCistLS0gb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcwkyMDExLTEwLTEwIDAxOjEzOjQ5LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX2Vyci5jCTIwMTIt MDctMTIgMjE6NDk6MjUuMzIzMzUxOTQ3ICswMjAwCitAQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMg RVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKERTQV9GX0RPX0RT QV9QUklOVCksCSJET19EU0FfUFJJTlQifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFSQU1TX1BS SU5UKSwJIkRTQXBhcmFtc19wcmludCJ9LAorIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJ TlRfRlApLAkiRFNBcGFyYW1zX3ByaW50X2ZwIn0sCisre0VSUl9GVU5DKERTQV9GX0RTQV9CVUlM VElOX0tFWUdFTiksCSJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKKyt7RVJSX0ZVTkMoRFNBX0ZfRFNB X0JVSUxUSU5fUEFSQU1HRU4pLAkiZHNhX2J1aWx0aW5fcGFyYW1nZW4ifSwKKyB7RVJSX0ZVTkMo RFNBX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNB X0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0sCisge0VSUl9GVU5DKERTQV9GX0RTQV9HRU5F UkFURV9LRVkpLAkiRFNBX2dlbmVyYXRlX2tleSJ9LAorQEAgLTEwNiw2ICsxMDgsOCBAQCBzdGF0 aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCisge0VSUl9SRUFTT04oRFNBX1Jf REFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKSwiZGF0YSB0b28gbGFyZ2UgZm9yIGtleSBzaXpl In0sCisge0VSUl9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRlY29kZSBl cnJvciJ9LAorIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUpICAgLCJpbnZh bGlkIGRpZ2VzdCB0eXBlIn0sCisre0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCkg ICAgICAsImtleSBzaXplIGludmFsaWQifSwKKyt7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9U T09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFTT04oRFNBX1Jf TUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAorIHtFUlJfUkVB U09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAor IHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUykgLCJuZWVkIG5ldyBzZXR1 cCB2YWx1ZXMifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX2dlbi5j LmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMKKy0tLSBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTc6MjE6NDYuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxMi0w Ny0xMiAyMTo0OToyNS4zMjQzNTE5NjkgKzAyMDAKK0BAIC04NSw2ICs4NSwxNCBAQAorICNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyAjZW5kaWYKKyAKKysjaWZuZGVmIE9QRU5TU0xfRklQUwor K3N0YXRpYyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVfdCBiaXRz LCBzaXplX3QgcWJpdHMsCisrCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBjaGFyICpz ZWVkLCBpbnQgc2VlZF9sZW4sCisrCQlCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9yZXQsIGlu dCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYik7Cisrc3RhdGljIGludCBGSVBTX2RzYV9nZW5l cmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKKysJCUJJR05VTSAqKmdf cmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKKysjZW5kaWYKKysKKyBp bnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAorIAkJY29u c3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAorIAkJaW50ICpjb3VudGVy X3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKK0BAIC0xMDAsMTQgKzEw OCw2IEBAIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKKyAJaWYocmV0 LT5tZXRoLT5kc2FfcGFyYW1nZW4pCisgCQlyZXR1cm4gcmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4o cmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xlbiwKKyAJCQkJY291bnRlcl9yZXQsIGhfcmV0LCBj Yik7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQllbHNlIGlmIChGSVBTX21vZGUoKSkKKy0JCXsK Ky0JCXJldHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KHJldCwgYml0cywgCist CQkJCQkJCXNlZWRfaW4sIHNlZWRfbGVuLAorLQkJCQkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNi KTsKKy0JCX0KKy0jZW5kaWYKKyAJZWxzZQorIAkJeworIAkJY29uc3QgRVZQX01EICpldnBtZDsK K0BAIC0xMjUsMjcgKzEyNSwxMTkgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERT QSAqcmV0LAorIAkJCX0KKyAKKyAJCXJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJp dHMsIHFiaXRzLCBldnBtZCwKKy0JCQlzZWVkX2luLCBzZWVkX2xlbiwgTlVMTCwgY291bnRlcl9y ZXQsIGhfcmV0LCBjYik7CisrCQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBjb3VudGVyX3JldCwgaF9y ZXQsIGNiKTsKKyAJCX0KKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgRklQU19k c2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywK KysJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6 ZV90IHNlZWRfbGVuLAorKwlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwg Qk5fR0VOQ0IgKmNiKQorKwl7CisrCXJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJp dHMsIHFiaXRzLAorKwkJZXZwbWQsIHNlZWRfaW4sIHNlZWRfbGVuLAorKwkJY291bnRlcl9yZXQs IGhfcmV0LCBjYik7CisrCX0KKysjZW5kaWYKKysKKyBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4o RFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisgCWNvbnN0IEVWUF9NRCAqZXZw bWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKy0JdW5z aWduZWQgY2hhciAqc2VlZF9vdXQsCisgCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcg KmhfcmV0LCBCTl9HRU5DQiAqY2IpCisgCXsKKyAJaW50IG9rPTA7CisgCXVuc2lnbmVkIGNoYXIg c2VlZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9 TlVMTDsKKysJc2l6ZV90IHFzaXplID0gcWJpdHMgPj4gMzsKKysJQk5fQ1RYICpjdHg9TlVMTDsK KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwKKysJCSAg ICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgZ290byBlcnI7CisrCSAgICB9 CisrCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYKKysJICAgIChiaXRzICE9IDEwMjQgfHwg cWJpdHMgIT0gMTYwKSAmJgorKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyMjQpICYm CisrCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDI1NikgJiYKKysJICAgIChiaXRzICE9 IDMwNzIgfHwgcWJpdHMgIT0gMjU2KSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJ Tl9QQVJBTUdFTiwgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCk7CisrCQlnb3RvIGVycjsKKysJCX0K KysjZW5kaWYKKysJaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQor KwkJc2VlZF9pbiA9IE5VTEw7CQkvKiBzZWVkIGJ1ZmZlciB0b28gc21hbGwgLS0gaWdub3JlICov CisrCWlmIChzZWVkX2xlbiA+IHNpemVvZihzZWVkKSkgCisrCQlzZWVkX2xlbiA9IHNpemVvZihz ZWVkKTsJLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJnZXIgU0VFRCwKKysJ CQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gMjU2IGJp dHMqLworKwlpZiAoc2VlZF9pbiAhPSBOVUxMKQorKwkJbWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNl ZWRfbGVuKTsKKysJZWxzZQorKwkJc2VlZF9sZW4gPSAwOworKworKwlpZiAoKGN0eD1CTl9DVFhf bmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7Cisr CisrCWlmICghRklQU19kc2FfZ2VuZXJhdGVfcHEoY3R4LCBiaXRzLCBxYml0cywgZXZwbWQsCisr CQlzZWVkLCBzZWVkX2xlbiwgJnAsICZxLCBjb3VudGVyX3JldCwgY2IpKQorKwkJZ290byBlcnI7 CisrCisrCWlmICghRklQU19kc2FfZ2VuZXJhdGVfZyhjdHgsIHAsIHEsICZnLCBoX3JldCwgY2Ip KQorKwkJZ290byBlcnI7CisrCisrCW9rPTE7CisrZXJyOgorKwlpZiAob2spCisrCQl7CisrCQlp ZihyZXQtPnApCisrCQkJeworKwkJCUJOX2ZyZWUocmV0LT5wKTsKKysJCQlyZXQtPnAgPSBOVUxM OworKwkJCX0KKysJCWlmKHJldC0+cSkKKysJCQl7CisrCQkJQk5fZnJlZShyZXQtPnEpOworKwkJ CXJldC0+cSA9IE5VTEw7CisrCQkJfQorKwkJaWYocmV0LT5nKQorKwkJCXsKKysJCQlCTl9mcmVl KHJldC0+Zyk7CisrCQkJcmV0LT5nID0gTlVMTDsKKysJCQl9CisrCQlyZXQtPnA9Qk5fZHVwKHAp OworKwkJcmV0LT5xPUJOX2R1cChxKTsKKysJCXJldC0+Zz1CTl9kdXAoZyk7CisrCQlpZiAocmV0 LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5VTEwpCisrCQkJb2s9 MDsKKysJCX0KKysJaWYoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RY X2ZyZWUoY3R4KTsKKysJCX0KKysJcmV0dXJuIG9rOworKwl9CisrCisrI2lmbmRlZiBPUEVOU1NM X0ZJUFMKKytzdGF0aWMKKysjZW5kaWYKKytpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RY ICpjdHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCQljb25zdCBFVlBfTUQgKmV2cG1k LCB1bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCisrCQlCSUdOVU0gKipwX3JldCwg QklHTlVNICoqcV9yZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYikKKysJeworKwlp bnQgb2s9MDsKKyAJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CistCXVu c2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSxidWYyW1NIQTI1Nl9ESUdFU1Rf TEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworIAlC SUdOVU0gKnIwLCpXLCpYLCpjLCp0ZXN0OworLQlCSUdOVU0gKmc9TlVMTCwqcT1OVUxMLCpwPU5V TEw7CistCUJOX01PTlRfQ1RYICptb250PU5VTEw7CistCWludCBpLCBrLCBuPTAsIG09MCwgcXNp emUgPSBxYml0cyA+PiAzOworKwlCSUdOVU0gKnE9TlVMTCwqcD1OVUxMOworKwlpbnQgaSwgaywg Yiwgbj0wLCBtPTAsIHFzaXplID0gcWJpdHMgPj4gMzsKKyAJaW50IGNvdW50ZXI9MDsKKyAJaW50 IHI9MDsKKy0JQk5fQ1RYICpjdHg9TlVMTDsKKy0JdW5zaWduZWQgaW50IGg9MjsKKyAKKyAJaWYg KHFzaXplICE9IFNIQV9ESUdFU1RfTEVOR1RIICYmIHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVO R1RIICYmCisgCSAgICBxc2l6ZSAhPSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKK0BAIC0xNTMsNTEg KzI0NSw0MyBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQly ZXR1cm4gMDsKKyAKKyAJaWYgKGV2cG1kID09IE5VTEwpCistCQkvKiB1c2UgU0hBMSBhcyBkZWZh dWx0ICovCistCQlldnBtZCA9IEVWUF9zaGExKCk7CisrCSAgICB7CisrCQlpZiAocWJpdHMgPD0g MTYwKQorKwkJCWV2cG1kID0gRVZQX3NoYTEoKTsKKysJCWVsc2UgaWYgKHFiaXRzIDw9IDIyNCkK KysJCQlldnBtZCA9IEVWUF9zaGEyMjQoKTsKKysJCWVsc2UKKysJCQlldnBtZCA9IEVWUF9zaGEy NTYoKTsKKysJICAgIH0KKyAKKyAJaWYgKGJpdHMgPCA1MTIpCisgCQliaXRzID0gNTEyOworIAor IAliaXRzID0gKGJpdHMrNjMpLzY0KjY0OworIAorLQkvKiBOQjogc2VlZF9sZW4gPT0gMCBpcyBz cGVjaWFsIGNhc2U6IGNvcHkgZ2VuZXJhdGVkIHNlZWQgdG8KKy0gCSAqIHNlZWRfaW4gaWYgaXQg aXMgbm90IE5VTEwuCistIAkgKi8KKy0JaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXpl X3QpcXNpemUpKQorLQkJc2VlZF9pbiA9IE5VTEw7CQkvKiBzZWVkIGJ1ZmZlciB0b28gc21hbGwg LS0gaWdub3JlICovCistCWlmIChzZWVkX2xlbiA+IChzaXplX3QpcXNpemUpIAorLQkJc2VlZF9s ZW4gPSBxc2l6ZTsJLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJnZXIgU0VF RCwKKy0JCQkJCSAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAx NjAgYml0cyovCistCWlmIChzZWVkX2luICE9IE5VTEwpCistCQltZW1jcHkoc2VlZCwgc2VlZF9p biwgc2VlZF9sZW4pOworLQorLQlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpCistCQln b3RvIGVycjsKKy0KKy0JaWYgKChtb250PUJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQorLQkJ Z290byBlcnI7CistCistCUJOX0NUWF9zdGFydChjdHgpOworIAlyMCA9IEJOX0NUWF9nZXQoY3R4 KTsKKy0JZyA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJVyA9IEJOX0NUWF9nZXQoY3R4KTsKKy0JcSA9 IEJOX0NUWF9nZXQoY3R4KTsKKysJKnFfcmV0ID0gcSA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJWCA9 IEJOX0NUWF9nZXQoY3R4KTsKKyAJYyA9IEJOX0NUWF9nZXQoY3R4KTsKKy0JcCA9IEJOX0NUWF9n ZXQoY3R4KTsKKysJKnBfcmV0ID0gcCA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJdGVzdCA9IEJOX0NU WF9nZXQoY3R4KTsKKyAKKyAJaWYgKCFCTl9sc2hpZnQodGVzdCxCTl92YWx1ZV9vbmUoKSxiaXRz LTEpKQorIAkJZ290byBlcnI7CisgCisrCS8qIHN0ZXAgMyBuID0gXGxjZWlsIGJpdHMgLyBxYml0 cyBccmNlaWwgLSAxICovCisrCW4gPSAoYml0cytxYml0cy0xKS9xYml0cyAtIDE7CisrCS8qIHN0 ZXAgNCBiID0gYml0cyAtIDEgLSBuICogcWJpdHMgKi8KKysJYiA9IGJpdHMgLSAxIC0gbipxYml0 czsKKysKKyAJZm9yICg7OykKKyAJCXsKKyAJCWZvciAoOzspIC8qIGZpbmQgcSAqLworIAkJCXsK KyAJCQlpbnQgc2VlZF9pc19yYW5kb207CisgCistCQkJLyogc3RlcCAxICovCisrCQkJLyogc3Rl cCA1IGdlbmVyYXRlIHNlZWQgKi8KKyAJCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMCwgbSsrKSkK KyAJCQkJZ290byBlcnI7CisgCitAQCAtMjEyLDMwICsyOTYsMTggQEAgaW50IGRzYV9idWlsdGlu X3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCQlzZWVkX2xlbj0wOyAvKiB1c2UgcmFuZG9t IHNlZWQgaWYgJ3NlZWRfaW4nIHR1cm5zIG91dCB0byBiZSBiYWQqLworIAkJCQl9CisgCQkJbWVt Y3B5KGJ1ZiAsIHNlZWQsIHFzaXplKTsKKy0JCQltZW1jcHkoYnVmMiwgc2VlZCwgcXNpemUpOwor LQkJCS8qIHByZWNvbXB1dGUgIlNFRUQgKyAxIiBmb3Igc3RlcCA3OiAqLworLQkJCWZvciAoaSA9 IHFzaXplLTE7IGkgPj0gMDsgaS0tKQorLQkJCQl7CistCQkJCWJ1ZltpXSsrOworLQkJCQlpZiAo YnVmW2ldICE9IDApCistCQkJCQlicmVhazsKKy0JCQkJfQorIAorLQkJCS8qIHN0ZXAgMiAqLwor KwkJCS8qIHN0ZXAgNiBVID0gaGFzaChzZWVkKSAqLworIAkJCWlmICghRVZQX0RpZ2VzdChzZWVk LCBxc2l6ZSwgbWQsICAgTlVMTCwgZXZwbWQsIE5VTEwpKQorIAkJCQlnb3RvIGVycjsKKy0JCQlp ZiAoIUVWUF9EaWdlc3QoYnVmLCAgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2cG1kLCBOVUxMKSkKKy0J CQkJZ290byBlcnI7CistCQkJZm9yIChpID0gMDsgaSA8IHFzaXplOyBpKyspCistCQkJCW1kW2ld Xj1idWYyW2ldOworIAorLQkJCS8qIHN0ZXAgMyAqLworKwkJCS8qIHN0ZXAgNyBxID0gMl4ocWJp dHMtMSkgKyBVICsgMSAtIChVIG1vZCAyKSAqLworIAkJCW1kWzBdIHw9IDB4ODA7CisgCQkJbWRb cXNpemUtMV0gfD0gMHgwMTsKKyAJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHEpKQorIAkJ CQlnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDQgKi8KKysJCQkvKiBzdGVwIDggdGVzdCBmb3Ig cHJpbWUgKDY0IHJvdW5kIG9mIFJhYmluLU1pbGxlcikgKi8KKyAJCQlyID0gQk5faXNfcHJpbWVf ZmFzdHRlc3RfZXgocSwgRFNTX3ByaW1lX2NoZWNrcywgY3R4LAorIAkJCQkJc2VlZF9pc19yYW5k b20sIGNiKTsKKyAJCQlpZiAociA+IDApCitAQCAtMjQzLDI3ICszMTUsMjIgQEAgaW50IGRzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCWlmIChyICE9IDApCisgCQkJCWdv dG8gZXJyOworIAorLQkJCS8qIGRvIGEgY2FsbGJhY2sgY2FsbCAqLworLQkJCS8qIHN0ZXAgNSAq LworIAkJCX0KKyAKKyAJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAwKSkgZ290byBlcnI7Cisg CQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpIGdvdG8gZXJyOworIAorLQkJLyogc3RlcCA2 ICovCisrCQkvKiBzdGVwIDExICovCisgCQljb3VudGVyPTA7CistCQkvKiAib2Zmc2V0ID0gMiIg Ki8KKy0KKy0JCW49KGJpdHMtMSkvMTYwOworKwkJLyogIm9mZnNldCA9IDEiICovCisgCisgCQlm b3IgKDs7KQorIAkJCXsKKyAJCQlpZiAoKGNvdW50ZXIgIT0gMCkgJiYgIUJOX0dFTkNCX2NhbGwo Y2IsIDAsIGNvdW50ZXIpKQorIAkJCQlnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDcgKi8KKysJ CQkvKiBzdGVwIDExLjEsIDExLjIgb2J0YWluIFcgKi8KKyAJCQlCTl96ZXJvKFcpOworLQkJCS8q IG5vdyAnYnVmJyBjb250YWlucyAiU0VFRCArIG9mZnNldCAtIDEiICovCisgCQkJZm9yIChrPTA7 IGs8PW47IGsrKykKKyAJCQkJeworIAkJCQkvKiBvYnRhaW4gIlNFRUQgKyBvZmZzZXQgKyBrIiBi eSBpbmNyZW1lbnRpbmc6ICovCitAQCAtMjc4LDI4ICszNDUsMzAgQEAgaW50IGRzYV9idWlsdGlu X3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCQkJCQkJCU5VTEwpKQorIAkJCQkJZ290byBl cnI7CisgCistCQkJCS8qIHN0ZXAgOCAqLworIAkJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUs IHIwKSkKKyAJCQkJCWdvdG8gZXJyOworLQkJCQlpZiAoIUJOX2xzaGlmdChyMCxyMCwocXNpemUg PDwgMykqaykpIGdvdG8gZXJyOworKwkJCQlpZiAoayA9PSBuKQorKwkJCQkJQk5fbWFza19iaXRz KHIwLGIpOworKwkJCQlpZiAoIUJOX2xzaGlmdChyMCxyMCxxYml0cyprKSkgZ290byBlcnI7Cisg CQkJCWlmICghQk5fYWRkKFcsVyxyMCkpIGdvdG8gZXJyOworIAkJCQl9CisgCistCQkJLyogbW9y ZSBvZiBzdGVwIDggKi8KKy0JCQlpZiAoIUJOX21hc2tfYml0cyhXLGJpdHMtMSkpIGdvdG8gZXJy OworKwkJCS8qIHN0ZXAgMTEuMyBYID0gVyArIDJeKEwtMSkgKi8KKyAJCQlpZiAoIUJOX2NvcHko WCxXKSkgZ290byBlcnI7CisgCQkJaWYgKCFCTl9hZGQoWCxYLHRlc3QpKSBnb3RvIGVycjsKKyAK Ky0JCQkvKiBzdGVwIDkgKi8KKysJCQkvKiBzdGVwIDExLjQgYyA9IFggbW9kIDIqcSAqLworIAkJ CWlmICghQk5fbHNoaWZ0MShyMCxxKSkgZ290byBlcnI7CisgCQkJaWYgKCFCTl9tb2QoYyxYLHIw LGN0eCkpIGdvdG8gZXJyOworKworKwkJCS8qIHN0ZXAgMTEuNSBwID0gWCAtIChjIC0gMSkgKi8K KyAJCQlpZiAoIUJOX3N1YihyMCxjLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7CisgCQkJaWYg KCFCTl9zdWIocCxYLHIwKSkgZ290byBlcnI7CisgCistCQkJLyogc3RlcCAxMCAqLworKwkJCS8q IHN0ZXAgMTEuNiAqLworIAkJCWlmIChCTl9jbXAocCx0ZXN0KSA+PSAwKQorIAkJCQl7CistCQkJ CS8qIHN0ZXAgMTEgKi8KKysJCQkJLyogc3RlcCAxMS43ICovCisgCQkJCXIgPSBCTl9pc19wcmlt ZV9mYXN0dGVzdF9leChwLCBEU1NfcHJpbWVfY2hlY2tzLAorIAkJCQkJCWN0eCwgMSwgY2IpOwor IAkJCQlpZiAociA+IDApCitAQCAtMzA4LDE5ICszNzcsNDUgQEAgaW50IGRzYV9idWlsdGluX3Bh cmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCQkJZ290byBlcnI7CisgCQkJCX0KKyAKKy0JCQkv KiBzdGVwIDEzICovCisrCQkJLyogc3RlcCAxMS45ICovCisgCQkJY291bnRlcisrOworIAkJCS8q ICJvZmZzZXQgPSBvZmZzZXQgKyBuICsgMSIgKi8KKyAKKy0JCQkvKiBzdGVwIDE0ICovCistCQkJ aWYgKGNvdW50ZXIgPj0gNDA5NikgYnJlYWs7CisrCQkJLyogc3RlcCAxMiAqLworKwkJCWlmIChj b3VudGVyID49IDQqYml0cykgYnJlYWs7CisgCQkJfQorIAkJfQorIGVuZDoKKyAJaWYoIUJOX0dF TkNCX2NhbGwoY2IsIDIsIDEpKQorIAkJZ290byBlcnI7CisgCistCS8qIFdlIG5vdyBuZWVkIHRv IGdlbmVyYXRlIGcgKi8KKysJb2s9MTsKKytlcnI6CisrCWlmIChvaykKKysJCXsKKysJCWlmIChj b3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKKysJCX0KKysJcmV0dXJu IG9rOworKwl9CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMKKysjZW5kaWYKKytp bnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEs CisrCQlCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikK KysJeworKwlpbnQgb2s9MDsKKysJQklHTlVNICpyMCwgKnRlc3QsICpnID0gTlVMTDsKKysJQk5f TU9OVF9DVFggKm1vbnQ7CisrCXVuc2lnbmVkIGludCBoPTI7CisrCisrCWlmICgobW9udD1CTl9N T05UX0NUWF9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlyMCA9IEJOX0NUWF9n ZXQoY3R4KTsKKysJKmdfcmV0ID0gZyA9IEJOX0NUWF9nZXQoY3R4KTsKKysJdGVzdCA9IEJOX0NU WF9nZXQoY3R4KTsKKysKKyAJLyogU2V0IHIwPShwLTEpL3EgKi8KKyAJaWYgKCFCTl9zdWIodGVz dCxwLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7CisgCWlmICghQk5fZGl2KHIwLE5VTEwsdGVz dCxxLGN0eCkpIGdvdG8gZXJyOworQEAgLTM0NCwyNiArNDM5LDcgQEAgZW5kOgorIGVycjoKKyAJ aWYgKG9rKQorIAkJeworLQkJaWYocmV0LT5wKSBCTl9mcmVlKHJldC0+cCk7CistCQlpZihyZXQt PnEpIEJOX2ZyZWUocmV0LT5xKTsKKy0JCWlmKHJldC0+ZykgQk5fZnJlZShyZXQtPmcpOworLQkJ cmV0LT5wPUJOX2R1cChwKTsKKy0JCXJldC0+cT1CTl9kdXAocSk7CistCQlyZXQtPmc9Qk5fZHVw KGcpOworLQkJaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9 PSBOVUxMKQorLQkJCXsKKy0JCQlvaz0wOworLQkJCWdvdG8gZXJyOworLQkJCX0KKy0JCWlmIChj b3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKKyAJCWlmIChoX3JldCAh PSBOVUxMKSAqaF9yZXQ9aDsKKy0JCWlmIChzZWVkX291dCkKKy0JCQltZW1jcHkoc2VlZF9vdXQs IHNlZWQsIHFzaXplKTsKKy0JCX0KKy0JaWYoY3R4KQorLQkJeworLQkJQk5fQ1RYX2VuZChjdHgp OworLQkJQk5fQ1RYX2ZyZWUoY3R4KTsKKyAJCX0KKyAJaWYgKG1vbnQgIT0gTlVMTCkgQk5fTU9O VF9DVFhfZnJlZShtb250KTsKKyAJcmV0dXJuIG9rOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhLmgKKy0t LSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToy NC43OTgzNDAxMzYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYS5oCTIw MTItMDctMTIgMjE6NDk6MjUuMzI0MzUxOTY5ICswMjAwCitAQCAtODgsNiArODgsOCBAQAorICMg ZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysj ZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2RlZmlu ZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQorICNkZWZpbmUgRFNBX0ZMQUdfTk9fRVhQX0NP TlNUVElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERTQQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVu dGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKK0BAIC0yNjQsNiArMjY2LDE3IEBAIGludAlE U0FfcHJpbnRfZnAoRklMRSAqYnAsIGNvbnN0IERTQSAqeCwKKyBESCAqRFNBX2R1cF9ESChjb25z dCBEU0EgKnIpOworICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgRklQU19k c2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywK KysJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6 ZV90IHNlZWRfbGVuLAorKwlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwg Qk5fR0VOQ0IgKmNiKTsKKytpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNp emVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25l ZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCisrCQlCSUdOVU0gKipwX3JldCwgQklHTlVNICoq cV9yZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYik7CisraW50IEZJUFNfZHNhX2dl bmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAorKwkJQklHTlVNICoq Z19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOworKyNlbmRpZgorKwor ICNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kc2FfcGFyYW1nZW5fYml0cyhjdHgsIG5iaXRzKSBc CisgCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfRFNBLCBFVlBfUEtFWV9PUF9QQVJB TUdFTiwgXAorIAkJCQlFVlBfUEtFWV9DVFJMX0RTQV9QQVJBTUdFTl9CSVRTLCBuYml0cywgTlVM TCkKK0BAIC0yODUsMTAgKzI5OCwxMyBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQp OworICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9GX0RT QVBBUkFNU19QUklOVAkJCQkgMTAwCisgI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAJ CQkgMTAxCisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0CisrI2RlZmlu ZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKKyAjZGVmaW5lIERTQV9GX0RTQV9E T19TSUdOCQkJCSAxMTIKKyAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMworLSNk ZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWQkJCQkgMTI0CistI2RlZmluZSBEU0FfRl9EU0Ff R0VORVJBVEVfUEFSQU1FVEVSU19FWAkJIDEyMworKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRF X0tFWQkJCQkgMTI2CisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSU19FWAkJ IDEyNworKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJLyogdW51c2VkICov CSAxMjUKKyAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKKyAjZGVmaW5lIERT QV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQorICNkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UX0ZQ CQkJCSAxMDUKK0BAIC0zMTQsMTEgKzMzMCwxNSBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdz KHZvaWQpOworICNkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAw CisgI2RlZmluZSBEU0FfUl9ERUNPREVfRVJST1IJCQkJIDEwNAorICNkZWZpbmUgRFNBX1JfSU5W QUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKKysjZGVmaW5lIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQJ CQkJIDExMworKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDExMAorICNkZWZp bmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQorICNkZWZpbmUgRFNBX1JfTU9EVUxV U19UT09fTEFSR0UJCQkJIDEwMworLSNkZWZpbmUgRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVT CQkJIDExMAorKyNkZWZpbmUgRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTCQkJIDExMgorICNk ZWZpbmUgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRAkJCSAxMTEKKysjZGVmaW5lIERTQV9SX05P Tl9GSVBTX01FVEhPRAkJCQkgMTExCisgI2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJ CQkgMTA3CisrI2RlZmluZSBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RF IC8qIHVudXNlZCAqLyAxMTIKKyAjZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJP UgkJCSAxMDUKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNh X2tleS5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDEx LTA2LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0 by9kc2EvZHNhX2tleS5jCTIwMTItMDctMTIgMjE6NDY6NTYuMDAwMDAwMDAwICswMjAwCitAQCAt NjYsNiArNjYsMzUgQEAKKyAKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisgI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworK3N0YXRpYyBpbnQgZmlw c19jaGVja19kc2EoRFNBICpkc2EpCisrCXsKKysJRVZQX1BLRVkgKnBrOworKwl1bnNpZ25lZCBj aGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKKysJaW50IHJldCA9IDA7Cisr CisrCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpICE9IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJ RVZQX1BLRVlfc2V0MV9EU0EocGssIGRzYSk7CisrCisrCWlmIChmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIHRicywgMCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkpCisrCQlyZXQgPSAxOwor KworKwllcnI6CisrCWlmIChyZXQgPT0gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf Q0hFQ0tfRFNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQlmaXBzX3NldF9zZWxm dGVzdF9mYWlsKCk7CisrCQl9CisrCisrCWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOwor KworKwlyZXR1cm4gcmV0OworKwl9CisrCisgI2VuZGlmCisgCisgc3RhdGljIGludCBkc2FfYnVp bHRpbl9rZXlnZW4oRFNBICpkc2EpOworQEAgLTgyLDEwICsxMTEsNiBAQCBpbnQgRFNBX2dlbmVy YXRlX2tleShEU0EgKmRzYSkKKyAjZW5kaWYKKyAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKQor IAkJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOworLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX2tleShk c2EpOworLSNlbmRpZgorIAlyZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2VuKGRzYSk7CisgCX0KKyAK K0BAIC05NSw2ICsxMjAsMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpk c2EpCisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tl eT1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEo ZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJJiYgKEJOX251bV9iaXRz KGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJ RFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxM KTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAoKGN0eD1CTl9DVFhfbmV3 KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAorIAlpZiAoZHNhLT5wcml2X2tleSA9PSBOVUxMKQor QEAgLTEzMyw2ICsxNjcsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpk c2EpCisgCisgCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7CisgCWRzYS0+cHViX2tleT1wdWJfa2V5 OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkgJiYgIWZpcHNfY2hlY2tf ZHNhKGRzYSkpCisrCQl7CisrCQlkc2EtPnB1Yl9rZXkgPSBOVUxMOworKwkJZHNhLT5wcml2X2tl eSA9IE5VTEw7CisrCSAgICAJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisgCW9rPTE7CisgCisg ZXJyOgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2FfbGliLmMuZmlwcyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9saWIuYwkyMDEyLTA3LTEyIDIx OjQ5OjI1LjMyNTM1MTk5MSArMDIwMAorQEAgLTg3LDE0ICs4Nyw3IEBAIGNvbnN0IERTQV9NRVRI T0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2QKKyAJeworIAlpZighZGVmYXVsdF9EU0FfbWV0aG9k KQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQly ZXR1cm4gRklQU19kc2Ffb3BlbnNzbCgpOworLQkJZWxzZQorLQkJCXJldHVybiBEU0FfT3BlblNT TCgpOworLSNlbHNlCisgCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgpOworLSNl bmRpZgorIAkJfQorIAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOworIAl9CitkaWZmIC11cCBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZHNhL2RzYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9s b2NsLmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI0LjgwMjM0MDIyNiArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyNTM1 MTk5MSArMDIwMAorQEAgLTU2LDUgKzU2LDQgQEAKKyAKKyBpbnQgZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisgCWNvbnN0IEVWUF9NRCAq ZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKy0J dW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCisgCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxv bmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5j CistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAxMS0wMi0w MSAxMzo1Mzo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNh L2RzYV9vc3NsLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMjYzNTIwMTMgKzAyMDAKK0BAIC02NSw2 ICs2NSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBEU0FfU0lH ICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpk c2EpOworIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2lu LCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOworQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwg LyogZHNhX21vZF9leHAsICovCisgTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCisgZHNhX2lu aXQsCisgZHNhX2ZpbmlzaCwKKy0wLAorK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAorIE5VTEwsCisg TlVMTCwKKyBOVUxMCitAQCAtMTM4LDYgKzE0MSwyMSBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2Rv X3NpZ24oY29uc3QgdW5zaWduCisgCURTQV9TSUcgKnJldD1OVUxMOworIAlpbnQgbm9yZWRvID0g MDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkp CisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIE5VTEw7CisrCSAgICB9CisrCisrCWlmIChG SVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykgCisr CQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysjZW5kaWYKKysKKyAJQk5faW5p dCgmbSk7CisgCUJOX2luaXQoJnhyKTsKKyAKK0BAIC0zMjUsNiArMzQzLDIxIEBAIHN0YXRpYyBp bnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAorIAkJcmV0dXJuIC0xOworIAkJfQorIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAg IHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysKKysJaWYgKEZJUFNfbW9k ZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKKysJCSYmIChC Tl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK KysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOworKwkJcmV0dXJuIC0xOworKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2Jp dHMoZHNhLT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlEU0Fl cnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSxEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMzk5 LDYgKzQzMiw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAorIAor IHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlkc2EtPmZsYWdzfD1EU0FfRkxB R19DQUNIRV9NT05UX1A7CisgCXJldHVybigxKTsKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9k c2FfcG1ldGguYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlw cwkyMDExLTA2LTIwIDIyOjA1OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9kc2EvZHNhX3BtZXRoLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMjYzNTIwMTMgKzAy MDAKK0BAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIGludCBwa2V5X2RzYV9wYXJhbWdlbihFVlBf UEtFWV9DVAorIAlpZiAoIWRzYSkKKyAJCXJldHVybiAwOworIAlyZXQgPSBkc2FfYnVpbHRpbl9w YXJhbWdlbihkc2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1kLAorLQkgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBwY2IpOwor KwkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBwY2IpOwor IAlpZiAocmV0KQorIAkJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOworIAllbHNlCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9kc2EvZHNhdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Rz YS9kc2F0ZXN0LmMuZmlwcwkyMDA4LTA4LTA2IDE3OjU0OjExLjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUu MzI3MzUyMDM1ICswMjAwCitAQCAtOTYsMzYgKzk2LDQxIEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJB Q0sgZHNhX2NiKGludCBwLCBpbnQKKyAvKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9nIGFyZSB0 YWtlbiBmcm9tIHRoZSB1cGRhdGVkIEFwcGVuZGl4IDUgdG8KKyAgKiBGSVBTIFBVQiAxODYgYW5k IGFsc28gYXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2LTEgKi8KKyBzdGF0aWMg dW5zaWduZWQgY2hhciBzZWVkWzIwXT17CistCTB4ZDUsMHgwMSwweDRlLDB4NGIsMHg2MCwweGVm LDB4MmIsMHhhOCwweGI2LDB4MjEsMHgxYiwweDQwLAorLQkweDYyLDB4YmEsMHgzMiwweDI0LDB4 ZTAsMHg0MiwweDdkLDB4ZDMsCisrCTB4MDIsMHg0NywweDExLDB4OTIsMHgxMSwweDg4LDB4Qzgs MHhGQiwweEFGLDB4NDgsMHg0QywweDYyLAorKwkweERGLDB4QTUsMHhCRSwweEEwLDB4QTQsMHgz QywweDU2LDB4RTMsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3BbXT17Cist CTB4OGQsMHhmMiwweGE0LDB4OTQsMHg0OSwweDIyLDB4NzYsMHhhYSwKKy0JMHgzZCwweDI1LDB4 NzUsMHg5YiwweGIwLDB4NjgsMHg2OSwweGNiLAorLQkweGVhLDB4YzAsMHhkOCwweDNhLDB4ZmIs MHg4ZCwweDBjLDB4ZjcsCistCTB4Y2IsMHhiOCwweDMyLDB4NGYsMHgwZCwweDc4LDB4ODIsMHhl NSwKKy0JMHhkMCwweDc2LDB4MmYsMHhjNSwweGI3LDB4MjEsMHgwZSwweGFmLAorLQkweGMyLDB4 ZTksMHhhZCwweGFjLDB4MzIsMHhhYiwweDdhLDB4YWMsCistCTB4NDksMHg2OSwweDNkLDB4ZmIs MHhmOCwweDM3LDB4MjQsMHhjMiwKKy0JMHhlYywweDA3LDB4MzYsMHhlZSwweDMxLDB4YzgsMHgw MiwweDkxLAorKwkweEFDLDB4Q0IsMHgxRSwweDYzLDB4NjAsMHg2OSwweDBDLDB4RkIsMHgwNiww eDE5LDB4NjgsMHgzRSwKKysJMHhBNSwweDAxLDB4NUEsMHhBMiwweDE1LDB4NUMsMHhFMiwweDk5 LDB4MkQsMHhENSwweDMwLDB4OTksCisrCTB4N0UsMHg1RiwweDhELDB4RTIsMHhGNywweEM2LDB4 MkUsMHg4RCwweEEzLDB4OUYsMHg1OCwweEFELAorKwkweEQ2LDB4QTksMHg3RCwweDBFLDB4MEQs MHg5NSwweDUzLDB4QTYsMHg3MSwweDNBLDB4REUsMHhBQiwKKysJMHhBQywweEU5LDB4RjQsMHgz NiwweDU1LDB4OUUsMHhCOSwweEQ2LDB4OTMsMHhCRiwweEYzLDB4MTgsCisrCTB4MUMsMHgxNCww eDdCLDB4QTUsMHg0MiwweDJFLDB4Q0QsMHgwMCwweEVCLDB4MzUsMHgzQiwweDFCLAorKwkweEE4 LDB4NTEsMHhCQiwweEUxLDB4NTgsMHg0MiwweDg1LDB4ODQsMHgyMiwweEE3LDB4OTcsMHg1RSwK KysJMHg5OSwweDZGLDB4MzgsMHgyMCwweEJELDB4OUQsMHhCNiwweEQ5LDB4MzMsMHgzNywweDJB LDB4RkQsCisrCTB4QkIsMHhENCwweEJDLDB4MEMsMHgyQSwweDY3LDB4Q0IsMHg5RiwweEJCLDB4 REYsMHhGOSwweDkzLAorKwkweEFBLDB4RDYsMHhGMCwweEQ2LDB4OTUsMHgwQiwweDVELDB4NjUs MHgxNCwweEQwLDB4MTgsMHg5RCwKKysJMHhDNiwweEFGLDB4RjAsMHhDNiwweDM3LDB4N0MsMHhG MywweDVGLAorIAl9OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9xW109eworLQkweGM3 LDB4NzMsMHgyMSwweDhjLDB4NzMsMHg3ZSwweGM4LDB4ZWUsCistCTB4OTksMHgzYiwweDRmLDB4 MmQsMHhlZCwweDMwLDB4ZjQsMHg4ZSwKKy0JMHhkYSwweGNlLDB4OTEsMHg1ZiwKKysJMHhFMyww eDhFLDB4NUUsMHg2RCwweEJGLDB4MkIsMHg3OSwweEY4LDB4QzUsMHg0QiwweDg5LDB4OEIsCisr CTB4QkEsMHgyRCwweDkxLDB4QzMsMHg2QywweDgwLDB4QUMsMHg4NywKKyAJfTsKKyAKKyBzdGF0 aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdPXsKKy0JMHg2MiwweDZkLDB4MDIsMHg3OCwweDM5LDB4 ZWEsMHgwYSwweDEzLAorLQkweDQxLDB4MzEsMHg2MywweGE1LDB4NWIsMHg0YywweGI1LDB4MDAs CistCTB4MjksMHg5ZCwweDU1LDB4MjIsMHg5NSwweDZjLDB4ZWYsMHhjYiwKKy0JMHgzYiwweGZm LDB4MTAsMHhmMywweDk5LDB4Y2UsMHgyYywweDJlLAorLQkweDcxLDB4Y2IsMHg5ZCwweGU1LDB4 ZmEsMHgyNCwweGJhLDB4YmYsCistCTB4NTgsMHhlNSwweGI3LDB4OTUsMHgyMSwweDkyLDB4NWMs MHg5YywKKy0JMHhjNCwweDJlLDB4OWYsMHg2ZiwweDQ2LDB4NGIsMHgwOCwweDhjLAorLQkweGM1 LDB4NzIsMHhhZiwweDUzLDB4ZTYsMHhkNywweDg4LDB4MDIsCisrCTB4NDIsMHg0QSwweDA0LDB4 NEUsMHg3OSwweEI0LDB4OTksMHg3RiwweEZELDB4NTgsMHgzNiwweDJDLAorKwkweDFCLDB4NUYs MHgxOCwweDdFLDB4MEQsMHhDQywweEFCLDB4ODEsMHhDOSwweDVELDB4MTAsMHhDRSwKKysJMHg0 RSwweDgwLDB4N0UsMHg1OCwweEI0LDB4MzQsMHgzRiwweEE3LDB4NDUsMHhDNywweEFBLDB4MzYs CisrCTB4MjQsMHg0MiwweEE5LDB4M0IsMHhFOCwweDBFLDB4MDQsMHgwMiwweDJELDB4RkIsMHhB NiwweDEzLAorKwkweEI5LDB4QjUsMHgxNSwweEE1LDB4NTYsMHgwNywweDM1LDB4RTQsMHgwMyww eEI2LDB4NzksMHg3QywKKysJMHg2MiwweERELDB4REYsMHgzRiwweDcxLDB4M0EsMHg5RCwweDhC LDB4QzQsMHhGNiwweEU3LDB4MUQsCisrCTB4NTIsMHhBOCwweEE5LDB4NDMsMHgxRCwweDMzLDB4 NTEsMHg4OCwweDM5LDB4QkQsMHg3MywweEU5LAorKwkweDVGLDB4QkUsMHg4MiwweDQ5LDB4Mjcs MHhFNiwweEI1LDB4NTMsMHhDMSwweDM4LDB4QUMsMHgyRiwKKysJMHg2RCwweDk3LDB4NkMsMHhF QiwweDY3LDB4QzEsMHg1RiwweDY3LDB4RjgsMHgzNSwweDA1LDB4NUUsCisrCTB4RDUsMHg2OCww eDgwLDB4QUEsMHg5NiwweENBLDB4MEIsMHg4QSwweEU2LDB4RjEsMHhCMSwweDQxLAorKwkweEM2 LDB4NzUsMHg5NCwweDBBLDB4MEEsMHgyQSwweEZBLDB4MjksCisgCX07CisgCisgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7CitAQCAtMTU3 LDcgKzE2Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJQklPX3ByaW50 ZihiaW9fZXJyLCJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNBIHBhcmFtZXRlcnNcbiIpOworIAorIAlC Tl9HRU5DQl9zZXQoJmNiLCBkc2FfY2IsIGJpb19lcnIpOworLQlpZigoKGRzYSA9IERTQV9uZXco KSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgNTEyLAorKwlp ZigoKGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KGRzYSwgMTAyNCwKKyAJCQkJc2VlZCwgMjAsICZjb3VudGVyLCAmaCwgJmNiKSkKKyAJCWdv dG8gZW5kOworIAorQEAgLTE3MCw5ICsxNzUsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCisgCUJJT19wcmludGYoYmlvX2VyciwiXG5jb3VudGVyPSVkIGg9JWxkXG4iLGNvdW50 ZXIsaCk7CisgCQkKKyAJRFNBX3ByaW50KGJpb19lcnIsZHNhLDApOworLQlpZiAoY291bnRlciAh PSAxMDUpIAorKwlpZiAoY291bnRlciAhPSAyMzkpIAorIAkJeworLQkJQklPX3ByaW50ZihiaW9f ZXJyLCJjb3VudGVyIHNob3VsZCBiZSAxMDVcbiIpOworKwkJQklPX3ByaW50ZihiaW9fZXJyLCJj b3VudGVyIHNob3VsZCBiZSAyMzlcbiIpOworIAkJZ290byBlbmQ7CisgCQl9CisgCWlmIChoICE9 IDIpCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBz IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCistLS0gb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcwkyMDExLTA4LTEwIDIwOjUzOjEzLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCTIw MTItMDctMTIgMjE6NDk6MjUuMzI3MzUyMDM1ICswMjAwCitAQCAtNTgsMTEgKzU4LDI1IEBACisg CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgImVuZ19pbnQuaCIKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHZv aWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCisgCXsKKyAJLyogU29tZSBFTkdJ TkVzIG5lZWQgdGhpcyAqLworIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAoRklQU19tb2RlKCkpIHsK KysJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQor KwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgorKwkJICAgVXNlciBpcyBkaXNh bGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCisrCQkgICBieSBzZWN1cml0eSBw b2xpY3kuICovCisrCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7CisrCQlyZXR1cm47CisrCX0KKysj ZW5kaWYKKyAjaWYgMAorIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9w ZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCisgCSAqIGl0IGlzIHRoZSAqb25seSogd2F5 IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZXJyL2Vycl9hbGwuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9lcnIvZXJyX2Fs bC5jLmZpcHMJMjAxMS0wNi0yMSAxODo1ODoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyNzM1MjAz NSArMDIwMAorQEAgLTk2LDYgKzk2LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9vY3NwLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorICNp Zm5kZWYgT1BFTlNTTF9OT19DTVMKKyAjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KKyAjZW5kaWYK K0BAIC0xNTMsNiArMTU2LDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKQor ICNlbmRpZgorIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKKyAJRVJSX2xvYWRfVUlfc3RyaW5n cygpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7Cisr I2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NNUworIAlFUlJfbG9hZF9DTVNfc3RyaW5ncygp OworICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9jX2FsbGMuYy5m aXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvY19hbGxjLmMKKy0tLSBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMJMjAxMS0xMS0xNCAyMjoxMzozNS4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTItMDctMTIg MjE6NDk6MjUuMzI4MzUyMDU4ICswMjAwCitAQCAtNjUsNiArNjUsMTEgQEAKKyB2b2lkIE9wZW5T U0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgCXsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmKCFGSVBTX21vZGUoKSkgCisrCQl7CisrI2Vu ZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2Nm YigpKTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIxKCkpOworQEAgLTIyNyw0ICsyMzIs NjAgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQorIAlFVlBfYWRkX2NpcGhl cl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCJDQU1FTExJQTI1NiIpOworIAlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCJjYW1lbGxpYTI1NiIpOworICNlbmRpZgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCX0KKysJZWxzZQorKwkJeworKyNpZm5kZWYgT1BFTlNT TF9OT19ERVMKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2ZiKCkpOworKwlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZTNfY2ZiKCkpOworKworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZV9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19vZmIoKSk7CisrCisr CUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQ X2Rlc19lZGUzX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2Jj LCJERVMzIik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiZGVzMyIp OworKworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZSgpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGUzKCkpOworKyNlbmRpZgorKworKyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKKysJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZWNiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYigpKTsKKysJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiMSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xMjhfY2ZiOCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfb2ZiKCkpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2djbSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwor KwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiQUVTMTI4Iik7CisrCUVWUF9h ZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJhZXMxMjgiKTsKKysJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfZWNiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMo KSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYigpKTsKKysJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfY2ZiMSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2Zi OCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9jdHIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2dj bSgpKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsIkFFUzE5MiIpOwor KwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiYWVzMTkyIik7CisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2VjYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIoKSk7CisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MjU2X2NmYjgoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X29mYigpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY3RyKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9nY20oKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3h0cygpKTsKKysJRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIpOworKwlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiYWVzMjU2Iik7CisrI2VuZGlmCisrCQl9CisrI2Vu ZGlmCisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvY19hbGxkLmMuZmlw cyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2NfYWxsZC5jCistLS0gb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzCTIwMDktMDctMDggMTA6NTA6NTMuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9jX2FsbGQuYwkyMDEyLTA3LTEyIDIx OjQ5OjI1LjMyODM1MjA1OCArMDIwMAorQEAgLTY0LDYgKzY0LDExIEBACisgCisgdm9pZCBPcGVu U1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlP UEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAoIUZJUFNfbW9kZSgpKQorKwkJeworKyNlbmRp ZgorICNpZm5kZWYgT1BFTlNTTF9OT19NRDQKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX21kNCgpKTsK KyAjZW5kaWYKK0BAIC0xMTEsNCArMTE2LDMyIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2Vz dHModm9pZCkKKyAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCisgCUVWUF9hZGRfZGlnZXN0 KEVWUF93aGlybHBvb2woKSk7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJfQor KwllbHNlCisrCQl7CisrI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChP UEVOU1NMX05PX1NIQTEpCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOworKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKKysjaWZuZGVmIE9Q RU5TU0xfTk9fRFNBCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOworKwlFVlBfYWRkX2Rp Z2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKKysJRVZQX2FkZF9k aWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9f RUNEU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOworKyNlbmRpZgorKyNlbmRpZgor KyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgp KTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9Q RU5TU0xfTk9fU0hBNTEyCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7CisrCUVWUF9h ZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7CisrI2VuZGlmCisrCQl9CisrI2VuZGlmCisgCX0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZXZwL2RpZ2VzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9k aWdlc3QuYy5maXBzCTIwMTEtMDUtMjkgMTc6NTU6MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9kaWdlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyOTM1 MjA4MSArMDIwMAorQEAgLTE0Miw5ICsxNDIsNTAgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9N RF9DVFggKmN0eCwgY29ucworIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBO VUxMKTsKKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBv ZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMK KysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICov CisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgpCisrCXsgRklQU19FUlJP Ul9JR05PUkVEKCJEaWdlc3QgaW5pdCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRf dXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKKysJ eyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsgcmV0dXJuIDA7fQorKworK3N0 YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKKysJ eyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5hbCIpOyByZXR1cm4gMDt9CisrCisrc3Rh dGljIGNvbnN0IEVWUF9NRCBiYWRfbWQgPQorKwl7CisrCTAsCisrCTAsCisrCTAsCisrCTAsCisr CWJhZF9pbml0LAorKwliYWRfdXBkYXRlLAorKwliYWRfZmluYWwsCisrCU5VTEwsCisrCU5VTEws CisrCU5VTEwsCisrCTAsCisrCXswLDAsMCwwfSwKKysJfTsKKysKKysjZW5kaWYKKysKKyBpbnQg RVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVO R0lORSAqaW1wbCkKKyAJeworIAlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RY X0ZMQUdfQ0xFQU5FRCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKKysJ CXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJ LyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5h bCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBF TkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0yMDEsNiArMjQyLDE4IEBAIGludCBF VlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAjZW5kaWYKKyAJaWYgKGN0eC0+ ZGlnZXN0ICE9IHR5cGUpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNf bW9kZSgpKQorKwkJCXsKKysJCQlpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMp IAorKwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp KQorKwkJCQl7CisrCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQX1JfRElT QUJMRURfRk9SX0ZJUFMpOworKwkJCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrCQkJCXJldHVy biAwOworKwkJCQl9CisrCQkJfQorKyNlbmRpZgorIAkJaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ ZGlnZXN0LT5jdHhfc2l6ZSkKKyAJCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAJCWN0 eC0+ZGlnZXN0PXR5cGU7CitAQCAtMjI5LDI2ICsyODIsMTUgQEAgc2tpcF90b19pbml0OgorIAkJ fQorIAlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19JTklUKQorIAkJcmV0dXJu IDE7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkpCistCQl7CistCQlp ZiAoRklQU19kaWdlc3Rpbml0KGN0eCwgdHlwZSkpCistCQkJcmV0dXJuIDE7CistCQlPUEVOU1NM X2ZyZWUoY3R4LT5tZF9kYXRhKTsKKy0JCWN0eC0+bWRfZGF0YSA9IE5VTEw7CistCQlyZXR1cm4g MDsKKy0JCX0KKy0jZW5kaWYKKyAJcmV0dXJuIGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7CisgCX0K KyAKKyBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBjb3VudCkKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JcmV0dXJuIEZJ UFNfZGlnZXN0dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOworLSNlbHNlCistCXJldHVybiBjdHgt PnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKyAjZW5k aWYKKysJcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKKyAJfQorIAorIC8qIFRo ZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJv bSB0aGUgY29udGV4dCAqLworQEAgLTI2MywxMCArMzA1LDExIEBAIGludCBFVlBfRGlnZXN0Rmlu YWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKKyAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0 aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KKyBpbnQgRVZQ X0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2ln bmVkIGludCAqc2l6ZSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JcmV0dXJuIEZJUFNf ZGlnZXN0ZmluYWwoY3R4LCBtZCwgc2l6ZSk7CistI2Vsc2UKKyAJaW50IHJldDsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKysKKyAJT1BF TlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKKyAJ cmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOworIAlpZiAoc2l6ZSAhPSBOVUxMKQorQEAg LTI3OCw3ICszMjEsNiBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwK KyAJCX0KKyAJbWVtc2V0KGN0eC0+bWRfZGF0YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Cisg CXJldHVybiByZXQ7CistI2VuZGlmCisgCX0KKyAKKyBpbnQgRVZQX01EX0NUWF9jb3B5KEVWUF9N RF9DVFggKm91dCwgY29uc3QgRVZQX01EX0NUWCAqaW4pCitAQCAtMzcyLDcgKzQxNCw2IEBAIHZv aWQgRVZQX01EX0NUWF9kZXN0cm95KEVWUF9NRF9DVFggKmN0eCkKKyAvKiBUaGlzIGNhbGwgZnJl ZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGV4dCAqLworIGludCBFVlBfTURf Q1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorIAl7CistI2lmbmRlZiBPUEVOU1NMX0ZJUFMK KyAJLyogRG9uJ3QgYXNzdW1lIGN0eC0+bWRfZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBfRGlnZXN0 X0ZpbmFsLAorIAkgKiBiZWNhdXNlIHNvbWV0aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUgY29udGV4 dCBhcmUgZXZlciBmaW5hbGlzZWQuCisgCSAqLworQEAgLTM4NSw3ICs0MjYsNiBAQCBpbnQgRVZQ X01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKKyAJCU9QRU5TU0xfY2xlYW5zZShjdHgt Pm1kX2RhdGEsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAJCU9QRU5TU0xfZnJlZShjdHgtPm1k X2RhdGEpOworIAkJfQorLSNlbmRpZgorIAlpZiAoY3R4LT5wY3R4KQorIAkJRVZQX1BLRVlfQ1RY X2ZyZWUoY3R4LT5wY3R4KTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMzk0LDkg KzQzNCw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorIAkJICog ZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCisgCQlFTkdJ TkVfZmluaXNoKGN0eC0+ZW5naW5lKTsKKyAjZW5kaWYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCist CUZJUFNfbWRfY3R4X2NsZWFudXAoY3R4KTsKKy0jZW5kaWYKKyAJbWVtc2V0KGN0eCwnXDAnLHNp emVvZiAqY3R4KTsKKyAKKyAJcmV0dXJuIDE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfYWVzLmMKKy0t LSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcwkyMDExLTExLTE1IDEzOjE5 OjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZV9hZXMu YwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzMDM1MjEwNCArMDIwMAorQEAgLTU2LDcgKzU2LDYgQEAK KyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisgI2luY2x1 ZGUgImV2cF9sb2NsLmgiCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAjaW5jbHVkZSAibW9kZXNf bGNsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIAorQEAgLTcxNiw3ICs3MTUsNyBA QCBzdGF0aWMgaW50IGFlc19nY21fY3RybChFVlBfQ0lQSEVSX0NUWCAqCisgCQlpZiAoYXJnIDw9 IDApCisgCQkJcmV0dXJuIDA7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9k dWxlX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykK KysJCWlmIChGSVBTX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQ U19BTExPVykKKyAJCQkJCQkgJiYgYXJnIDwgMTIpCisgCQkJcmV0dXJuIDA7CisgI2VuZGlmCitA QCAtMTEyOCw3ICsxMTI3LDcgQEAgc3RhdGljIGludCBhZXNfeHRzX2NpcGhlcihFVlBfQ0lQSEVS X0NUWAorIAkJcmV0dXJuIDA7CisgI2lmZGVmIE9QRU5TU0xfRklQUworIAkvKiBSZXF1aXJlbWVu dCBvZiBTUDgwMC0zOEUgKi8KKy0JaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGN0eC0+Zmxh Z3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgorKwlpZiAoRklQU19tb2RlKCkg JiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYKKyAJCQko bGVuID4gKDFVTDw8MjApKjE2KSkKKyAJCXsKKyAJCUVWUGVycihFVlBfRl9BRVNfWFRTX0NJUEhF UiwgRVZQX1JfVE9PX0xBUkdFKTsKK0BAIC0xMzEwLDQgKzEzMDksMyBAQCBCTE9DS19DSVBIRVJf Y3VzdG9tKE5JRF9hZXMsMTkyLDEsMTIsY2NtCisgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVz LDI1NiwxLDEyLGNjbSxDQ00sRVZQX0NJUEhfRkxBR19GSVBTfENVU1RPTV9GTEFHUykKKyAKKyAj ZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZV9kZXMz LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzCTIwMTEtMDUtMjkgMDE6MDE6MjYuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEyLTA3 LTEyIDIxOjQ5OjI1LjMzMDM1MjEwNCArMDIwMAorQEAgLTY1LDggKzY1LDYgQEAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9kZXMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgCistI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKKy0KKyBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhF Ul9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorIAkJCSAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppdixpbnQgZW5jKTsKKyAKK0BAIC0yMDgsOSArMjA2LDkgQEAgc3RhdGljIGlu dCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAorICAgICB9CisgCisgQkxPQ0tfQ0lQSEVS X2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCist CQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAorLQkJCUVWUF9D SVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9D SVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNO MSwKKysJCQlkZXNfZWRlX2luaXRfa2V5LAorKwkJCU5VTEwsIE5VTEwsIE5VTEwsCisgCQkJZGVz M19jdHJsKQorIAorICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRf Y2lwaGVyCitAQCAtMjE5LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwg REVTX0VERV9LRVksCisgI2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2Np cGhlcgorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rl c19lZGUzLCA4LCAyNCwgOCwgNjQsCistCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2lu aXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJCUVWUF9DSVBI RVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8 RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZTNfaW5pdF9rZXksCisrCQkJ TlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9j ZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKKy0JCSAgICAgRVZQ X0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBI RVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBf Q0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FT TjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxM LAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMs REVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsOCwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9L RVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFf aXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tF WXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAg IGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBk ZXMzX2N0cmwpCisgCisgc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RY ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKK0BAIC0zMTMsNCArMzExLDMgQEAgY29u c3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzKHZvaWQpCisgCXJldHVybiAmZGVzX2VkZTNfZWNi OworIH0KKyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9l dnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfbnVsbC5jCistLS0g b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMTEtMDYtMjAgMjI6MDA6 MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX251bGwu YwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzMDM1MjEwNCArMDIwMAorQEAgLTYxLDggKzYxLDYgQEAK KyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+ CisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyBzdGF0aWMgaW50IG51bGxfaW5pdF9rZXko RVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorIAljb25zdCB1 bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKKyBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9D SVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKK0BAIC03MSw3ICs2OSw3IEBAIHN0 YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyPQorIAl7CisgCU5JRF91bmRlZiwKKyAJMSww LDAsCistCTAsCisrCUVWUF9DSVBIX0ZMQUdfRklQUywKKyAJbnVsbF9pbml0X2tleSwKKyAJbnVs bF9jaXBoZXIsCisgCU5VTEwsCitAQCAtMTAxLDQgKzk5LDMgQEAgc3RhdGljIGludCBudWxsX2Np cGhlcihFVlBfQ0lQSEVSX0NUWCAqYworIAkJbWVtY3B5KChjaGFyICopb3V0LChjb25zdCBjaGFy ICopaW4saW5sKTsKKyAJcmV0dXJuIDE7CisgCX0KKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2 cC9ldnBfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBz CTIwMTItMDQtMjAgMDI6MDc6NDguMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzEzNTIxMjcgKzAyMDAK K0BAIC02OSwxNyArNjksNTggQEAKKyAjZW5kaWYKKyAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAK Ky0jaWZkZWYgT1BFTlNTTF9GSVBTCistI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4s IGlubCkgRklQU19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCistI2Vsc2UKKyAjZGVmaW5lIE1f ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwg b3V0LCBpbiwgaW5sKQorLSNlbmRpZgorIAorIAorIGNvbnN0IGNoYXIgRVZQX3ZlcnNpb25bXT0i RVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor Ky8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0 IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUg dGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9DSVBIRVJfQ1RY ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCSAgICBjb25zdCB1bnNpZ25lZCBj aGFyICppdiwgaW50IGVuYykKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBpbml0Iik7 IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9kb19jaXBoZXIoRVZQX0NJUEhFUl9DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwg dW5zaWduZWQgaW50IGlubCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciB1cGRhdGUi KTsgcmV0dXJuIDA7fQorKworKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2UgaXQgaXMgYWxsb3dl ZCBhZnRlciBmYWlsZWQgaW5pdCAqLworKworK3N0YXRpYyBpbnQgYmFkX3NldF9hc24xKEVWUF9D SVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgi Q2lwaGVyIHNldF9hc24xIik7IHJldHVybiAwO30KKytzdGF0aWMgaW50IGJhZF9nZXRfYXNuMShF VlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9S RUQoIkNpcGhlciBnZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfY3RybChF VlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQorKwl7IEZJ UFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBj b25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQorKwl7CisrCTAsCisrCTAsCisrCTAsCisrCTAs CisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfZG9fY2lwaGVyLAorKwlOVUxMLAorKwkwLAorKwli YWRfc2V0X2FzbjEsCisrCWJhZF9nZXRfYXNuMSwKKysJYmFkX2N0cmwsCisrCU5VTEwKKysJfTsK KysKKysjZW5kaWYKKysKKyB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFgg KmN0eCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygp OworKyNlbmRpZgorIAltZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7CisgCS8q IGN0eC0+Y2lwaGVyPU5VTEw7ICovCisgCX0KK0BAIC0xMTEsNiArMTUyLDE0IEBAIGludCBFVlBf Q2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQllbmMgPSAxOworIAkJY3R4LT5l bmNyeXB0ID0gZW5jOworIAkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VWUF9DSVBIRVJJTklUX0VY LEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmNpcGhlciA9ICZiYWRfY2lw aGVyOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VO R0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQg b24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBo YXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworQEAgLTE2OSwxMCArMjE4LDYg QEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorIAkJCWN0eC0+ZW5n aW5lID0gTlVMTDsKKyAjZW5kaWYKKyAKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAoRklQ U19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBp diwgZW5jKTsKKy0jZW5kaWYKKyAJCWN0eC0+Y2lwaGVyPWNpcGhlcjsKKyAJCWlmIChjdHgtPmNp cGhlci0+Y3R4X3NpemUpCisgCQkJeworQEAgLTIwNiwxMCArMjUxLDYgQEAgaW50IEVWUF9DaXBo ZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUK KyBza2lwX3RvX2luaXQ6CisgI2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQ U19tb2RlKCkpCistCQlyZXR1cm4gRklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXksIGl2 LCBlbmMpOworLSNlbmRpZgorIAkvKiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9m IDIgaW4gKmNyeXB0VXBkYXRlICovCisgCU9QRU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9j a19zaXplID09IDEKKyAJICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKK0BAIC0y NDksNiArMjkwLDIyIEBAIHNraXBfdG9faW5pdDoKKyAJCX0KKyAJfQorIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBj aGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KKysJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMg ZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KKysJICovCisrCWlmIChrZXkgJiYgRklQU19tb2RlKCkp CisrCQl7CisrCQlpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMp CisrCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJ CQl7CisrCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9G T1JfRklQUyk7CisrCQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCQlyZXR1cm4gMDsK KysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdz ICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKKyAJCWlmKCFjdHgtPmNpcGhlci0+aW5p dChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOworIAl9CitAQCAtNTY4LDcgKzYyNSw2IEBAIHZv aWQgRVZQX0NJUEhFUl9DVFhfZnJlZShFVlBfQ0lQSEVSX0NUWAorIAorIGludCBFVlBfQ0lQSEVS X0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQorIAl7CistI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKKyAJaWYgKGMtPmNpcGhlciAhPSBOVUxMKQorIAkJeworIAkJaWYoYy0+Y2lwaGVyLT5jbGVh bnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAoYykpCitAQCAtNTc5LDE2ICs2MzUsMTIgQEAgaW50 IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhFUl9DVAorIAkJfQorIAlpZiAoYy0+Y2lw aGVyX2RhdGEpCisgCQlPUEVOU1NMX2ZyZWUoYy0+Y2lwaGVyX2RhdGEpOworLSNlbmRpZgorICNp Zm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJaWYgKGMtPmVuZ2luZSkKKyAJCS8qIFRoZSBFVlBf Q0lQSEVSIHdlIHVzZWQgYmVsb25ncyB0byBhbiBFTkdJTkUsIHJlbGVhc2UgdGhlCisgCQkgKiBm dW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KKyAJCUVOR0lO RV9maW5pc2goYy0+ZW5naW5lKTsKKyAjZW5kaWYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCUZJ UFNfY2lwaGVyX2N0eF9jbGVhbnVwKGMpOworLSNlbmRpZgorIAltZW1zZXQoYywwLHNpemVvZihF VlBfQ0lQSEVSX0NUWCkpOworIAlyZXR1cm4gMTsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZXZwLmgK Ky0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAxMi0wNy0xMiAyMTo0 OToyNS4wODEzNDY1MDIgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2V2cC5o CTIwMTItMDctMTIgMjE6NDk6MjUuMzMyMzUyMTQ5ICswMjAwCitAQCAtNzUsNiArNzUsMTAgQEAK KyAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyAjZW5kaWYKKyAKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIC8qCisgI2RlZmlu ZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgorICNkZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYKK0BA IC0yNzIsMTAgKzI3Niw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0CisgCQkJCQkJKiBjbGVhbmVk ICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVl IHVwIGN0eC0+bWRfZGF0YQorIAkJCQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCistLyog RklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFy ZSBoZXJlCistICogc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9y IG90aGVyIHB1cnBvc2VzLgorLSAqLworLQorICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9G SVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0CisgCQkJCQkJ ICogaW4gRklQUyBtb2RlICovCisgCitAQCAtMjg3LDYgKzI4NywxMCBAQCBzdHJ1Y3QgZW52X21k X2N0eF9zdAorICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1Mj MSB2MS41IG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8q IFg5LjMxIG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8q IFBTUyBtb2RlICovCisrI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwK KysJCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCisrI2RlZmlu ZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRp Z2VzdCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0 IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLworIAorICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05P X0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0aWFsaXplIG1kX2RhdGEgKi8KKyAKK0BAIC0zMzgs MTUgKzM0MiwxNSBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAorIC8qIGNpcGhlciBoYW5kbGVzIHJh bmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkweDIw MAorIC8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KKy0j ZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAKKysjZGVmaW5lIAlFVlBfQ0lQSF9D VVNUT01fQ09QWQkJMHg0MDAwCisgLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2 ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCisgLyogQnVm ZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KKyAjZGVmaW5l CQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAorIC8qIE5vdGUgaWYgc3VpdGFibGUg Zm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KKy0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4 NDAwMAorKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAKKyAvKiBBbGxvdyBub24g RklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCistI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05f RklQU19BTExPVwkweDgwMDAKKysjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9X CTB4ODAwCisgLyogQ2lwaGVyIGhhbmRsZXMgYW55IGFuZCBhbGwgcGFkZGluZyBsb2dpYyBhcyB3 ZWxsCisgICogYXMgZmluYWxpc2F0aW9uLgorICAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2V2cF9s aWIuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxMS0w NS0yOSAwNDozMjowNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v ZXZwL2V2cF9saWIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzMjM1MjE0OSArMDIwMAorQEAgLTE5 MCw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCisg CisgaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKyAJeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyZXR1 cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7CisgCX0KKyAKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAv ZXZwX2xvY2wuaC5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMDcxMzQ2Mjc4ICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIwMTItMDctMTIgMjE6NDk6MjUu MzMzMzUyMTcxICswMjAwCitAQCAtMjU4LDEwICsyNTgsOSBAQCBjb25zdCBFVlBfQ0lQSEVSICpF VlBfIyNjbmFtZSMjX2VjYih2b2lkCisgCUJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18j I2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkgXAorIAlCTE9DS19DSVBIRVJf ZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAorIAkJCSAgICAgTklEXyMjY2lw aGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKKy0JCQkgICAgIDAs IGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCistCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24x X2l2LCBcCistCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCistCQkJICAgICBOVUxM KQorKwkJCSAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIFwKKysJCQkgICAgIGNpcGhl ciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorKworIAorIHN0cnVjdCBldnBf cGtleV9jdHhfc3QKKyAJeworQEAgLTM2NywxMSArMzY2LDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RG Ml9rZXlpdmdlbihFVlBfQ0lQSEVSXworICNkZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5p dAorICNkZWZpbmUgTURDMl9Jbml0CXByaXZhdGVfTURDMl9Jbml0CisgI2RlZmluZSBTSEFfSW5p dAlwcml2YXRlX1NIQV9Jbml0CistI2RlZmluZSBTSEExX0luaXQJcHJpdmF0ZV9TSEExX0luaXQK Ky0jZGVmaW5lIFNIQTIyNF9Jbml0CXByaXZhdGVfU0hBMjI0X0luaXQKKy0jZGVmaW5lIFNIQTI1 Nl9Jbml0CXByaXZhdGVfU0hBMjU2X0luaXQKKy0jZGVmaW5lIFNIQTM4NF9Jbml0CXByaXZhdGVf U0hBMzg0X0luaXQKKy0jZGVmaW5lIFNIQTUxMl9Jbml0CXByaXZhdGVfU0hBNTEyX0luaXQKKyAK KyAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisgI2RlZmluZSBDQVNUX3Nl dF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0zNzksNyArMzczLDYgQEAgaW50IFBLQ1M1 X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXworICNkZWZpbmUgU0VFRF9zZXRfa2V5CXBy aXZhdGVfU0VFRF9zZXRfa2V5CisgI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRf a2V5CisgI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5CistI2RlZmluZSBE RVNfc2V0X2tleV91bmNoZWNrZWQJcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQKKyAjZGVm aW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CisgCisgI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL2V2cC9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9l dnAvTWFrZWZpbGUuZmlwcwkyMDEyLTA0LTI2IDEyOjQyOjE5LjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvTWFrZWZpbGUJMjAxMi0wNy0xMiAyMTo0OToyNS4z MzMzNTIxNzEgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBAIExJQlNSQz0gZW5jb2RlLmMgZGlnZXN0 LmMgZXZwX2VuYy5jIGV2cF8KKyAJYmlvX21kLmMgYmlvX2I2NC5jIGJpb19lbmMuYyBldnBfZXJy LmMgZV9udWxsLmMgXAorIAljX2FsbC5jIGNfYWxsYy5jIGNfYWxsZC5jIGV2cF9saWIuYyBiaW9f b2suYyBcCisgCWV2cF9wa2V5LmMgZXZwX3BiZS5jIHA1X2NycHQuYyBwNV9jcnB0Mi5jIFwKKy0J ZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBldnBf Zmlwcy5jCVwKKysJZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9z aWd2ZXIuYyBcCisgCWVfYWVzX2NiY19obWFjX3NoYTEuYyBlX3JjNF9obWFjX21kNS5jCisgCisg TElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZwX2tleS5vIGV2cF9hY25mLm8g XAorQEAgLTQxLDcgKzQxLDcgQEAgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8g ZXZwXworIAliaW9fbWQubyBiaW9fYjY0Lm8gYmlvX2VuYy5vIGV2cF9lcnIubyBlX251bGwubyBc CisgCWNfYWxsLm8gY19hbGxjLm8gY19hbGxkLm8gZXZwX2xpYi5vIGJpb19vay5vIFwKKyAJZXZw X3BrZXkubyBldnBfcGJlLm8gcDVfY3JwdC5vIHA1X2NycHQyLm8gXAorLQllX29sZC5vIHBtZXRo X2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIGV2cF9maXBzLm8gXAorKwll X29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIFwKKyAJ ZV9hZXNfY2JjX2htYWNfc2hhMS5vIGVfcmM0X2htYWNfbWQ1Lm8KKyAKKyBTUkM9ICQoTElCU1JD KQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9ldnAvbV9kc3MxLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v ZXZwL21fZHNzMS5jLmZpcHMJMjAxMS0wNi0wMSAxNzoxMTowMC4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMTItMDctMTIgMjE6NDk6MjUu MzMzMzUyMTcxICswMjAwCitAQCAtNjgsOCArNjgsNiBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgorICNlbmRpZgorIAorLSNpZm5kZWYgT1BFTlNTTF9GSVBTIAorLQorIHN0YXRpYyBpbnQg aW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEp OyB9CisgCitAQCAtODQsNyArODIsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzczFfbWQ9Cisg CU5JRF9kc2EsCisgCU5JRF9kc2FXaXRoU0hBMSwKKyAJU0hBX0RJR0VTVF9MRU5HVEgsCistCUVW UF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURf RkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorQEAgLTEwMCw0ICs5OCwz IEBAIGNvbnN0IEVWUF9NRCAqRVZQX2RzczEodm9pZCkKKyAJcmV0dXJuKCZkc3MxX21kKTsKKyAJ fQorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9t X2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9tX2Rzcy5jCistLS0gb3BlbnNz bC0xLjAuMWMvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAxMS0wNi0wMSAxNzoxMTowMC4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL21fZHNzLmMJMjAxMi0w Ny0xMiAyMTo0OToyNS4zMzMzNTIxNzEgKzAyMDAKK0BAIC02Niw3ICs2Niw2IEBACisgI2VuZGlm CisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgCisg c3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gU0hBMV9Jbml0KGN0 eC0+bWRfZGF0YSk7IH0KK0BAIC04Miw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNh X21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJTklEX2RzYVdpdGhTSEEsCisgCVNIQV9ESUdFU1Rf TEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9E SUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BA IC05OCw0ICs5NywzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX2Rzcyh2b2lkKQorIAlyZXR1cm4oJmRz YV9tZCk7CisgCX0KKyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9ldnAvbV9tZDIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvbV9tZDIuYwor LS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMDUtMDctMTYgMTQ6 Mzc6MzIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9tX21k Mi5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM0MzUyMTkzICswMjAwCitAQCAtNjgsNiArNjgsNyBA QAorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAj ZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01E X0NUWCAqY3R4KQorIAl7IHJldHVybiBNRDJfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2V2cC9tX3NoYTEuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvbV9zaGEx LmMuZmlwcwkyMDExLTA1LTI5IDAxOjAxOjI2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9ldnAvbV9zaGExLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzQzNTIxOTMg KzAyMDAKK0BAIC01OSw4ICs1OSw2IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUg ImNyeXB0bGliLmgiCisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyAjaWZuZGVmIE9QRU5T U0xfTk9fU0hBCisgCisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CitAQCAtODUsNyArODMsOCBA QCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFfbWQ9CisgCU5JRF9zaGExLAorIAlOSURfc2hhMVdp dGhSU0FFbmNyeXB0aW9uLAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtF WV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwK KysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAt MTIyLDcgKzEyMSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kPQorIAlOSURfc2hh MjI0LAorIAlOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTIyNF9ESUdFU1RfTEVO R1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01E X0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDIyNCwK KyAJdXBkYXRlMjU2LAorIAlmaW5hbDI1NiwKK0BAIC0xNDEsNyArMTQxLDggQEAgc3RhdGljIGNv bnN0IEVWUF9NRCBzaGEyNTZfbWQ9CisgCU5JRF9zaGEyNTYsCisgCU5JRF9zaGEyNTZXaXRoUlNB RW5jcnlwdGlvbiwKKyAJU0hBMjU2X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Cisr CQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0MjU2LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2 LAorQEAgLTE3Miw3ICsxNzMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9tZD0KKyAJ TklEX3NoYTM4NCwKKyAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEzODRfRElH RVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9G TEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF fEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWlu aXQzODQsCisgCXVwZGF0ZTUxMiwKKyAJZmluYWw1MTIsCitAQCAtMTkxLDcgKzE5Myw4IEBAIHN0 YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kPQorIAlOSURfc2hhNTEyLAorIAlOSURfc2hhNTEy V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTUxMl9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxB R19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDUxMiwKKyAJdXBkYXRlNTEyLAorIAlm aW5hbDUxMiwKK0BAIC0yMDYsNCArMjA5LDMgQEAgY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZv aWQpCisgCXsgcmV0dXJuKCZzaGE1MTJfbWQpOyB9CisgI2VuZGlmCS8qIGlmbmRlZiBPUEVOU1NM X05PX1NIQTUxMiAqLworIAorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvcF9zaWduLmMKKy0t LSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxMS0wNi0wOSAxODow MjozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL3Bfc2ln bi5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM0MzUyMTkzICswMjAwCitAQCAtNjEsNiArNjEsNyBA QAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisgCisgI2lmZGVmIHVuZGVmCisgdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBF VlBfTUQgKnR5cGUpCitAQCAtMTAzLDYgKzEwNCwyMiBAQCBpbnQgRVZQX1NpZ25GaW5hbChFVlBf TURfQ1RYICpjdHgsIHVuc2lnCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3Nl dF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOwor KwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVW UF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDAp CisrCQkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BTUykKKysJCQl7CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRf cnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290 byBlcnI7CisrCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Cisr CQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxl biA9IC0xOworKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVD KQorKwkJCQlzYWx0bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19z YWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlp ZiAoRVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQor IAkJCWdvdG8gZXJyOworIAkJKnNpZ2xlbiA9IHNsdG1wOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9w X3ZlcmlmeS5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJ MjAxMS0wNi0wOSAxODowMjozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzQzNTIxOTMgKzAyMDAK K0BAIC02MSw2ICs2MSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0 eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAorIAkgICAgIHVuc2lnbmVkIGludCBzaWds ZW4sIEVWUF9QS0VZICpwa2V5KQorQEAgLTg4LDYgKzg5LDIyIEBAIGludCBFVlBfVmVyaWZ5Rmlu YWwoRVZQX01EX0NUWCAqY3R4LCBjb24KKyAJCQlnb3RvIGVycjsKKyAJCWlmIChFVlBfUEtFWV9D VFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgCQkJZ290byBl cnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKKysJCQlp ZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykg PD0gMCkKKysJCQkJZ290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTKQorKwkJCXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RY X3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQorKwkJ CQlnb3RvIGVycjsKKysJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4 KTsKKysJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQorKwkJCQlz YWx0bGVuID0gLTE7CisrCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNT X01SRUMpCisrCQkJCXNhbHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2Ff cHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCX0K KyAJCWkgPSBFVlBfUEtFWV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBtX2xlbik7 CisgCQllcnI6CisgCQlFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcyBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNTM1 MjIxNSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNh dnMuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNTM1MjIxNSArMDIwMAorQEAgLTAsMCArMSw5Mzkg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24g U3VpdGUKKysgIFRlc3QgUHJvZ3JhbQorKworKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAg Vi1PTkUgQ29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBH ZXJtYW50b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5j bHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5o PgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29z LmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKKysg ICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2 CisrCisrI2RlZmluZSBWRVJCT1NFIDAKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytpbnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAq Y3R4LAorKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXks IAorKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVu c2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQ X0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJD QkMiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6Cisr CQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6 CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAy NTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKKysJCWJyZWFrOworKwkJfQorKwor Kwl9CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwl7Cisr CXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVz XzEyOF9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBf YWVzXzE5Ml9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBF VlBfYWVzXzI1Nl9lY2IoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYgKHN0 cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQor KwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysJ CWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgo KTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9j ZmIxMjgoKTsKKysJCWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cm5jYXNl Y21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsK KysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7CisrCQlicmVhazsK KysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7CisrCQlicmVh azsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7CisrCQli cmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikp CisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9 IEVWUF9hZXNfMTI4X2NmYjEoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBo ZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJ Y2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMSgpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAg ZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6 KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7Cisr CQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgp OworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Nm YjgoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVu a25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgaWYgKCFj aXBoZXIpCisrCXsKKysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsK KysJcmV0dXJuIDA7IAorKwl9CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhl ciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0 cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4 LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgaWYgKGRpcikKKysJCUVWUF9DaXBo ZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCWVsc2UKKysJCUVWUF9DaXBo ZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07CisrY2hh ciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9 OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKKytlbnVt IFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNSWVBUfTsKKysKKysvKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ki8KKysvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAgKi8KKysvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVso YikvOF0gPj4gKChiKSU4KSkmMSkqLworKy8qI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09 KChhKVsoYikvOF0mfigxIDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8KKysKKysj ZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkKKysjZGVmaW5lIHNi KGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYp IDw8ICg3LShiKSU4KSkpCisrCisraW50IGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgIGludCBh a2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZlYywKKysJICAgaW50 IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgRklMRSAqcmZwKQorKyAg ICB7CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsK KysgICAgdW5zaWduZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsKKysgICAgdW5zaWdu ZWQgY2hhciBwdGV4dFsxMDAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1b MzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07CisrICAgIGludCBpLCBq LCBuLCBuMSwgbjI7CisrICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84OworKyAg ICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Cisr CisrICAgIGlmIChsZW4gPiAzMikKKysJeworKwlwcmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVk cyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4iLCAKKysJICAgICAgIGFtb2RlLCBha2V5c3opOworKwly ZXR1cm4gLTE7CisrCX0KKysgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkK KysJaWYgKHN0cmNtcChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKKysJICAgIGJyZWFrOwor KyAgICBpZiAoaW1vZGUgPT0gNikKKysJeyAKKysJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTog JXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIC0xOworKwl9CisrCisrICAgIG1lbWNweShrZXlbMF0s IGFLZXksIG5rZXlzeik7CisrICAgIGlmIChpVmVjKQorKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFF U19CTE9DS19TSVpFKTsKKysgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJbWVtY3B5KHB0ZXh0 WzBdLCB0ZXh0LCBsZW4pOworKyAgICBlbHNlCisrCW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVu KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKQorKwl7CisrCS8qIHByaW50ZigiSXRl cmF0aW9uICVkXG4iLCBpKTsgKi8KKysJaWYgKGkgPiAwKQorKwkgICAgeworKwkgICAgZnByaW50 ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7CisrCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0s bmtleXN6LHJmcCwwKTsKKysJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8KKysJCU91 dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOworKwkgICAgLyogT3V0 cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KKysJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rp cl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCisrCQkJaW1vZGUgPT0gQ0ZC MSk7CisrCSAgICB9CisrCWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCisrCSAgICB7CisrCSAg ICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQlpZiAoaiA9PSAwKQor KwkJICAgIHsgLyogc2V0IHVwIGVuY3J5cHRpb24gKi8KKysJCSAgICByZXQgPSBBRVNUZXN0KCZj dHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgTlVMTCwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwor KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0 W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0s IGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhF TkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwg bGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7CisrCQkJfQorKwkJ ICAgIGVsc2UKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0s IGxlbik7CisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJ CSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6ICAK KysJICAgIGNhc2UgQ0ZCMTI4OgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7CisrCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKKysJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRl eHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFd LCBpdltpXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0 ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOwor KwkJCX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0s IGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4p OworKwkJCX0KKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCODoKKysJCWlm IChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFr ZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJ CWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lw aGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQ X0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJaWYg KGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1j cHkocHRleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHko cHRleHRbaisxXSwgY3RleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAg IHsKKysJCSAgICBpZiAoaiA8IDE2KQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0s IGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwg bGVuKTsKKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCMToKKysJCWlmKGog PT0gMCkKKysJCSAgICB7CisrI2lmIDAKKysJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBl bmRpYW5uZXNzIG9mIGlucHV0IGZpbGUgKi8KKysJCSAgICBpZihpID09IDApCisrCQkJcHRleHRb MF1bMF08PD03OworKyNlbmRpZgorKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5 c3osa2V5W2ldLGl2W2ldLGRpciwKKysJCQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJ ICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJ CQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNl CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCisrCQkg ICAgfQorKwkJaWYoZGlyID09IFhFTkNSWVBUKQorKwkJICAgIHsKKysJCSAgICBpZihqIDwgMTI4 KQorKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7CisrCQkgICAgZWxzZQorKwkJCXNi KHB0ZXh0W2orMV0sMCxnYihjdGV4dFtqLTEyOF0sMCkpOworKwkJICAgIH0KKysJCWVsc2UKKysJ CSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0s aikpOworKwkJICAgIGVsc2UKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDAp KTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJLS1qOyAvKiByZXNldCB0 byBsYXN0IG9mIHJhbmdlICovCisrCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICov CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4s cmZwLAorKwkJICAgIGltb2RlID09IENGQjEpOworKwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBh ZGQgc2VwYXJhdG9yICovCisrCisrCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8KKysJaWYgKGRpciA9 PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBj dCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9 IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhl cnRleHRbbjFdID0gY3RleHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09 IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytu MSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJ fQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6 CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7 CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4 KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJy ZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0s IDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIGlmIChp bW9kZSA9PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8 fCBDVFtqXSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyAr K24xLCAtLW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07CisrCQl9 CisrCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5 c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEs Z2IocHRleHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3op CisrCQkgICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0 W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lw aGVydGV4dCwgcHRleHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBw dGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsx NiwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCS8q IENvbXB1dGUgbmV4dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAqLworKwlmb3IgKG4g PSAwOyBuIDwgbmtleXN6OyArK24pCisrCSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNp cGhlcnRleHRbbl07CisrCQorKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8KKysJaWYg KGRpciA9PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7Cisr CSAgICBjYXNlIEVDQjoKKysJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19T SVpFKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAg IGNhc2UgQ0ZCMTI4OgorKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0la RSk7CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJ CWJyZWFrOworKwkgICAgY2FzZSBDRkI4OgorKwkJLyogSVZbaSsxXSA9IGN0ICovCisrCQlmb3Ig KG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24x XSA9IGN0ZXh0W2otbjJdWzBdOworKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKKysJ CWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjgg OyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Cisr CQlwdGV4dFswXVswXT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkg ICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAg Y2FzZSBFQ0I6CisrCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7 CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNl IENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVh azsKKysJICAgIGNhc2UgQ0ZCODoKKysJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyAr K24xLCAtLW4yKQorKwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1bMF07CisrCQljdGV4 dFswXVswXSA9IHB0ZXh0W2otMTZdWzBdOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjE6Cisr CQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKKysJCSAgICBzYihpdltp KzFdLG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVsw XSYweDgwOworKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgCisrICAgIHJldHVy biByZXQ7CisrICAgIH0KKysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PSovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICAjIENv bmZpZyBpbmZvIGZvciB2LW9uZQorKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKKysg ICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBEZWNyeXB0CisrICAjIEtleSBMZW5ndGggOiAyNTYKKysg ICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQTQorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrCisraW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCisrICAg IHsKKysgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07CisrICAgIEZJTEUgKmFmcCA9IE5VTEws ICpyZnAgPSBOVUxMOworKyAgICBjaGFyIGlidWZbMjA0OF07CisrICAgIGNoYXIgdGJ1ZlsyMDQ4 XTsKKysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbGdvWzhdID0gIiI7 CisrICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVzdFs4XSA9ICIiOworKyAg ICBpbnQgYWtleXN6ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07 CisrICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNo YXIgcGxhaW50ZXh0WzIwNDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07 CisrICAgIGNoYXIgKnJwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCisr CXsKKysJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBz dHJjcHkoYWZuLCBycWZpbGUpOworKworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkg PT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisr CSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBp ZiAoIXJzcGZpbGUpCisrCXsKKysJc3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIocmZuLCJy ZXEvIik7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCWlmICghcnApCisrCSAgICBycD1z dHJzdHIocmZuLCJyZXFcXCIpOworKyNlbmRpZgorKwlhc3NlcnQocnApOworKwltZW1jcHkocnAs InJzcCIsMyk7CisrCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJwLCAiLnJz cCIsIDQpOworKwlyc3BmaWxlID0gcmZuOworKwl9CisrICAgIGlmICgocmZwID0gZm9wZW4ocnNw ZmlsZSwgInciKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVz LCAlc1xuIiwgCisrCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9zZShhZnAp OworKwlhZnAgPSBOVUxMOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFlcnIgJiYg KGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0aWR5X2xp bmUodGJ1ZiwgaWJ1Zik7CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qICAgICAgcHJpbnRm KCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7ICovCisrCXN3aXRjaCAoc3RlcCkKKysJICAg IHsKKysJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0g J1xuJykKKysJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCisrCQlpZiAoKCphbGdvID09ICdcMCcp IHx8CisrCQkgICAgKCphbW9kZSA9PSAnXDAnKSB8fAorKwkJICAgIChha2V5c3ogPT0gMCkpCisr CQkgICAgeworKwkJICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6 ZSAoJXMvJXMvJWQpXG4iLAorKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsKKysJCSAgICBlcnIg PSAxOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJCSAgICArKyBzdGVwOworKwkJICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZb MF0gIT0gJyMnKQorKwkJeworKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4i LCBpYnVmKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3Mg cHJlYW1ibGUgKi8KKysJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlm IChha2V5c3opCisrCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJ ICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBj dGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKKysJCSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09IDApCisr CQkJeworKwkJCXN0cmNweShhbGdvLCAiQUVTIik7CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwor KwkJCXBwICs9IDY7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOwor KwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyog Z2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLwor KwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJ CQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChW RVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1v ZGUpOworKwkJCX0KKysJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGgg OiAiLCAxMykgPT0gMCkKKysJCQl7CisrCQkJYWtleXN6ID0gYXRvaShwcCsxMyk7CisrCQkJaWYg KFZFUkJPU0UpCisrCQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsKKysJCQl9 CisrCQkgICAgfQorKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBU XSB8IFtERUNSWVBUXSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJCSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VO Q1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2Vj bXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsK KysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBp ZiAoZGlyID09IC0xKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNS WVBUL0RFQ1JZUFQga2V5d29yZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisr CQlzdGVwID0gMjsKKysKKysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBmcHV0cyhp YnVmLCByZnApOworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCWJyZWFrOworKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKKysJCWJyZWFrOworKworKwkgICAgaWYg KHN0cm5jYXNlY21wKGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJN aXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJ bGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlmIChsZW4gPCAwKQorKwkJ ICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsK KysJCWlmIChzdHJjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwkJICAgIHsKKysJCSAgICBtZW1z ZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAv KiBubyBpdmVjIGZvciBFQ0IgKi8KKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgKytzdGVwOwor KwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBm cHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUp ICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJ CX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZl Yyk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElW XG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRW YWx1ZSgiSVYiLCBpVmVjLCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkg ICAgYnJlYWs7CisrCisrCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0g IiwgMTIpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJ CWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1 ZisxMik7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmlu KGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGli dWYrMTIsIHBsYWludGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJp bnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0K KysJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxl bik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRl c3QgKi8KKysJCSAgICB7CisrCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlW ZWMsIAorKwkJCSAgICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuLCAKKysJ CQkgICAgICByZnApIDwgMCkKKysJCQlFWElUKDEpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAg ICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVj LCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBw bGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRF WFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJ CSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8q IENJUEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYg KHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlw cmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisr CQl7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGli dWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVu ID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAg eworKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7 CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKworKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIs IGNpcGhlcnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8q IE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJ ICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9k ZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9 IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAg T3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJm cCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsK KysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAn XG4nKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4i KTsKKysJCX0KKysJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7 IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCBy ZnApOworKwkJfQorKwkgICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQor KyAgICBpZiAocmZwKQorKwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFm cCk7CisrICAgIHJldHVybiBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2lu Z2xlIGZpbGUgb3IgCisrICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGlu IGEgZmlsZS4KKysgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVz dCAtZiB4eHgucmVxCisrICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFl c190ZXN0IC1kIHh4eHh4Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJy ZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNo YXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29w dCA9IDE7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgx KSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgor KyAgICBpZiAoYXJnYyA+IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikg PT0gMCkKKysJICAgIHsKKysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3Ry Y2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOwor KwkgICAgZF9vcHQgPSAwOworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYo IkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJ ICAgIH0KKysJaWYgKGFyZ2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBh cmFtZXRlclxuIik7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkg ICAgcnFsaXN0ID0gYXJndlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBh cmd2WzJdKTsKKysJICAgIHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlm IChkX29wdCkKKysJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZw ID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9w ZW4gcmVxIGxpc3QgZmlsZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxl IChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAi XHJcbiIpOworKwkgICAgc3RyY3B5KHJmbiwgZm4pOworKwkgICAgaWYgKFZFUkJPU0UpCisrCQlw cmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4s IHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAl cyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnAp OworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkK KysJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShm biwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxl ZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAg IHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0 by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNTM1MjIx NSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVz dC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM1MzUyMjE1ICswMjAwCitAQCAtMCwwICsxLDUxNyBA QAorKy8qIGZpcHNfY21hY3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl 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 KyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2NtYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBDTUFDIHN1cHBvcnRcbiIp OworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgY21hY190ZXN0 KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKKysJaW50IG1v ZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKTsKKytzdGF0aWMgaW50 IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJ dW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50 IE1zZ2xlbiwKKysJCWludCBUbGVuKTsKKytzdGF0aWMgaW50IHByaW50X2NtYWNfdmVyKGNvbnN0 IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBp bnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbiwKKysJCXVuc2lnbmVk IGNoYXIgKk1hYywgaW50IE1hY2xlbiwKKysJCWludCBUbGVuKTsKKysKKysjaWZkZWYgRklQU19B TEdWUworK2ludCBmaXBzX2NtYWN0ZXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNl bHNlCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7CisrCUZJ TEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCWludCBtb2RlID0gMDsJCS8qIDAgPT4gR2Vu ZXJhdGUsIDEgPT4gVmVyaWZ5ICovCisrCWludCBLbGVuX2NvdW50c19rZXlzID0gMDsgLyogMCA9 PiBLbGVuIGlzIHNpemUgb2Ygb25lIGtleQorKwkJCQkgICAgIDEgPT4gS2xlbiBpcyBhbW91bnQg b2Yga2V5cworKwkJCQkgICovCisrCWludCBrbm93bl9rZXlsZW4gPSAwOwkvKiBPbmx5IHNldCB3 aGVuIEtsZW5fY291bnRzX2tleXMgPSAxICovCisrCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9 IDA7CisrCWludCByZXQgPSAxOworKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOworKworKwl3aGlsZSAo YXJnYyA+IDEgJiYgYXJndlsxXVswXSA9PSAnLScpCisrCQl7CisrCQlzd2l0Y2ggKGFyZ3ZbMV1b MV0pCisrCQkJeworKwkJY2FzZSAnYSc6CisrCQkJeworKwkJCWNoYXIgKnAgPSAmYXJndlsxXVsy XTsKKysJCQlpZiAoKnAgPT0gJ1wwJykKKysJCQkJeworKwkJCQlpZiAoYXJnYyA8PSAyKQorKwkJ CQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsICJPcHRpb24gJXMgbmVlZHMgYSB2YWx1ZVxuIiwg YXJndlsxXSk7CisrCQkJCQlnb3RvIGVuZDsKKysJCQkJCX0KKysJCQkJYXJndisrOworKwkJCQlh cmdjLS07CisrCQkJCXAgPSAmYXJndlsxXVswXTsKKysJCQkJfQorKwkJCWlmICghc3RyY21wKHAs ICJhZXMxMjgiKSkKKysJCQkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7CisrCQkJZWxzZSBp ZiAoIXN0cmNtcChwLCAiYWVzMTkyIikpCisrCQkJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygp OworKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgImFlczI1NiIpKQorKwkJCQljaXBoZXIgPSBFVlBf YWVzXzI1Nl9jYmMoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHAsICJ0ZGVhMyIpIHx8ICFzdHJj bXAocCwgInRkZXMzIikpCisrCQkJCXsKKysJCQkJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygp OworKwkJCQlLbGVuX2NvdW50c19rZXlzID0gMTsKKysJCQkJa25vd25fa2V5bGVuID0gODsKKysJ CQkJfQorKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gYWxn b3JpdGhtICVzXG4iLCBwKTsKKysJCQkJZ290byBlbmQ7CisrCQkJCX0KKysJCQl9CisrCQkJYnJl YWs7CisrCQljYXNlICdnJzoKKysJCQltb2RlID0gMDsKKysJCQlicmVhazsKKysJCWNhc2UgJ3Yn OgorKwkJCW1vZGUgPSAxOworKwkJCWJyZWFrOworKwkJZGVmYXVsdDoKKysJCQlmcHJpbnRmKHN0 ZGVyciwgIlVua25vd24gb3B0aW9uICVzXG4iLCBhcmd2WzFdKTsKKysJCQlnb3RvIGVuZDsKKysJ CQl9CisrCQlhcmd2Kys7CisrCQlhcmdjLS07CisrCQl9CisrCWlmIChhcmdjID09IDEpCisrCQlp biA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlm IChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJn dlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5p dGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghY21h Y190ZXN0KGNpcGhlciwgb3V0LCBpbiwgbW9kZSwKKysJCQlLbGVuX2NvdW50c19rZXlzLCBrbm93 bl9rZXlsZW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBjbWFjIGZpbGUgcHJv Y2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0g MDsKKysKKysJZW5kOgorKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShp bik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisr CXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIENNQUNfVEVTVF9NQVhMSU5FTEVOCTE1 MDAwMAorKworK2ludCBjbWFjX3Rlc3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpv dXQsIEZJTEUgKmluLAorKwlpbnQgbW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93 bl9rZXlsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNo YXIgKmtleXdvcmQsICp2YWx1ZTsKKysJdW5zaWduZWQgY2hhciAqKktleXMgPSBOVUxMLCAqTXNn ID0gTlVMTCwgKk1hYyA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEw7CisrCWlu dCBDb3VudCwgS2xlbiwgTWxlbiwgVGxlbjsKKysJbG9uZyBLZXlsZW4sIE1zZ2xlbiwgTWFjbGVu OworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5T U0xfbWFsbG9jKENNQUNfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKENNQUNfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1 ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCUNvdW50ID0gLTE7CisrCUtsZW4gPSAtMTsKKysJTWxl biA9IC0xOworKwlUbGVuID0gLTE7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgQ01BQ19U RVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVm LCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBz cGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJ CWtleXdvcmQrKzsKKysKKysJCS8qIFNraXAgY29tbWVudHMgKi8KKysJCWlmIChrZXl3b3JkWzBd ID09ICcjJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJ Z290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQkvKiBMb29rIGZvciA9IHNp Z24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Ig c3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkK KysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJv cjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1v dmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpx KSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisr CQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVl KSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJDb3VudCIp KQorKwkJCXsKKysJCQlpZiAoQ291bnQgIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJQ291bnQgPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoQ291bnQgPCAwKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIktsZW4iKSkK KysJCQl7CisrCQkJaWYgKEtsZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ S2xlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChLbGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQlpZiAoS2xlbl9jb3VudHNfa2V5cykKKysJCQkJeworKwkJCQlLZXlzID0gT1BF TlNTTF9tYWxsb2Moc2l6ZW9mKCpLZXlzKSAqIEtsZW4pOworKwkJCQltZW1zZXQoS2V5cywgJ1ww Jywgc2l6ZW9mKCpLZXlzKSAqIEtsZW4pOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQl7CisrCQkJ CUtleXMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoKktleXMpKTsKKysJCQkJbWVtc2V0KEtleXMs ICdcMCcsIHNpemVvZigqS2V5cykpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiTWxlbiIpKQorKwkJCXsKKysJCQlpZiAoTWxlbiAhPSAtMSkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlNbGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKE1sZW4gPCAw KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIlRsZW4iKSkKKysJCQl7CisrCQkJaWYgKFRsZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJVGxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChUbGVuIDwgMCkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJLZXkiKSAmJiAhS2xlbl9jb3VudHNfa2V5cykKKysJCQl7CisrCQkJaWYgKEtleXNbMF0pCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJS2V5c1swXSA9IGhleDJiaW5fbSh2YWx1ZSwgJktl eWxlbik7CisrCQkJaWYgKCFLZXlzWzBdKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0K KysJCWVsc2UgaWYgKCFzdHJuY21wKGtleXdvcmQsICJLZXkiLCAzKSAmJiBLbGVuX2NvdW50c19r ZXlzKQorKwkJCXsKKysJCQlpbnQga2V5bnVtID0gYXRvaShrZXl3b3JkICsgMyk7CisrCQkJaWYg KCFrZXludW0gfHwga2V5bnVtID4gS2xlbiB8fCBLZXlzW2tleW51bS0xXSkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQlLZXlzW2tleW51bS0xXSA9IGhleDJiaW5fbSh2YWx1ZSwgJktleWxl bik7CisrCQkJaWYgKCFLZXlzW2tleW51bS0xXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJ CQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYg KE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUs ICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0K KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1hYyIpKQorKwkJCXsKKysJCQlpZiAobW9k ZSA9PSAwKQorKwkJCQljb250aW51ZTsKKysJCQlpZiAoTWFjKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCU1hYyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1hY2xlbik7CisrCQkJaWYgKCFNYWMp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiUmVzdWx0IikpCisrCQkJeworKwkJCWlmIChtb2RlID09IDEpCisrCQkJCWNvbnRpbnVl OworKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZQorKwkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChLZXlzICYmIE1z ZyAmJiAoIW1vZGUgfHwgTWFjKSAmJiAoVGxlbiA+IDApICYmIChLbGVuID4gMCkpCisrCQkJewor KwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQorKwkJCQl7CisrCQkJCWludCB4OworKwkJCQlLZXkg PSBPUEVOU1NMX21hbGxvYyhLbGVuICoga25vd25fa2V5bGVuKTsKKysJCQkJZm9yICh4ID0gMDsg eCA8IEtsZW47IHgrKykKKysJCQkJCXsKKysJCQkJCW1lbWNweShLZXkgKyB4ICoga25vd25fa2V5 bGVuLAorKwkJCQkJCUtleXNbeF0sIGtub3duX2tleWxlbik7CisrCQkJCQlPUEVOU1NMX2ZyZWUo S2V5c1t4XSk7CisrCQkJCQl9CisrCQkJCUtsZW4gKj0ga25vd25fa2V5bGVuOworKwkJCQl9Cisr CQkJZWxzZQorKwkJCQl7CisrCQkJCUtleSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4pOworKwkJCQlt ZW1jcHkoS2V5LCBLZXlzWzBdLCBLbGVuKTsKKysJCQkJT1BFTlNTTF9mcmVlKEtleXNbMF0pOwor KwkJCQl9CisrCQkJT1BFTlNTTF9mcmVlKEtleXMpOworKworKwkJCXN3aXRjaChtb2RlKQorKwkJ CQl7CisrCQkJY2FzZSAwOgorKwkJCQlpZiAoIXByaW50X2NtYWNfZ2VuKGNpcGhlciwgb3V0LAor KwkJCQkJCUtleSwgS2xlbiwKKysJCQkJCQlNc2csIE1sZW4sCisrCQkJCQkJVGxlbikpCisrCQkJ CQlnb3RvIGVycm9yOworKwkJCQlicmVhazsKKysJCQljYXNlIDE6CisrCQkJCWlmICghcHJpbnRf Y21hY192ZXIoY2lwaGVyLCBvdXQsCisrCQkJCQkJS2V5LCBLbGVuLAorKwkJCQkJCU1zZywgTWxl biwKKysJCQkJCQlNYWMsIE1hY2xlbiwKKysJCQkJCQlUbGVuKSkKKysJCQkJCWdvdG8gZXJyb3I7 CisrCQkJCWJyZWFrOworKwkJCQl9CisrCisrCQkJT1BFTlNTTF9mcmVlKEtleSk7CisrCQkJS2V5 ID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9Q RU5TU0xfZnJlZShNYWMpOworKwkJCU1hYyA9IE5VTEw7CisrCQkJS2xlbiA9IC0xOworKwkJCU1s ZW4gPSAtMTsKKysJCQlUbGVuID0gLTE7CisrCQkJQ291bnQgPSAtMTsKKysJCQl9CisrCQl9Cisr CisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlP UEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShs aW5lYnVmKTsKKysJaWYgKEtleSkKKysJCU9QRU5TU0xfZnJlZShLZXkpOworKwlpZiAoTXNnKQor KwkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCWlmIChNYWMpCisrCQlPUEVOU1NMX2ZyZWUoTWFjKTsK KysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJ Z290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfY21hY19nZW4oY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGlu dCBLbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTWxlbiwKKysJCWludCBUbGVuKQor Kwl7CisrCWludCByYywgaTsKKysJc2l6ZV90IHJlc2xlbjsKKysJdW5zaWduZWQgY2hhciByZXNb MTI4XTsKKysJQ01BQ19DVFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCisrCUNNQUNf SW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDApOworKwlDTUFDX1VwZGF0ZShjbWFj X2N0eCwgTXNnLCBNbGVuKTsKKysJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCByZXMsICZyZXNs ZW4pKQorKwkJeworKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIsIHN0ZGVycik7 CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xlbikKKysJCXsK KysJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxuIiwgc3RkZXJy KTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnB1dHMoIk1hYyA9ICIsIG91 dCk7CisrCQlmb3IgKGkgPSAwOyBpIDwgVGxlbjsgaSsrKQorKwkJCWZwcmludGYob3V0LCAiJTAy eCIsIHJlc1tpXSk7CisrCQlmcHV0cyhSRVNQX0VPTCwgb3V0KTsKKysJCXJjID0gMTsKKysJCX0K KysJQ01BQ19DVFhfZnJlZShjbWFjX2N0eCk7CisrCXJldHVybiByYzsKKysJfQorKworK3N0YXRp YyBpbnQgcHJpbnRfY21hY192ZXIoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQs CisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNn LCBpbnQgTWxlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1hYywgaW50IE1hY2xlbiwKKysJCWludCBU bGVuKQorKwl7CisrCWludCByYyA9IDE7CisrCXNpemVfdCByZXNsZW47CisrCXVuc2lnbmVkIGNo YXIgcmVzWzEyOF07CisrCUNNQUNfQ1RYICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygpOworKwor KwlDTUFDX0luaXQoY21hY19jdHgsIEtleSwgS2xlbiwgY2lwaGVyLCAwKTsKKysJQ01BQ19VcGRh dGUoY21hY19jdHgsIE1zZywgTWxlbik7CisrCWlmICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVz LCAmcmVzbGVuKSkKKysJCXsKKysJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBz dGRlcnIpOworKwkJcmMgPSAwOworKwkJfQorKwllbHNlIGlmIChUbGVuID4gKGludClyZXNsZW4p CisrCQl7CisrCQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIs IHN0ZGVycik7CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UgaWYgKFRsZW4gIT0gTWFjbGVuKQor KwkJeworKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiAhPSByZXN1bHRpbmcgTWFjIGxl bmd0aFxuIiwgc3RkZXJyKTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJaWYg KCFtZW1jbXAoTWFjLCByZXMsIE1hY2xlbikpCisrCQkJZnB1dHMoIlJlc3VsdCA9IFAiIFJFU1Bf RU9MLCBvdXQpOworKwkJZWxzZQorKwkJCWZwdXRzKCJSZXN1bHQgPSBGIiBSRVNQX0VPTCwgb3V0 KTsKKysJCX0KKysJQ01BQ19DVFhfZnJlZShjbWFjX2N0eCk7CisrCXJldHVybiByYzsKKysJfQor KworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Rlc21vdnMuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNt b3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5j LmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzUzNTIyMTUgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTItMDctMTIgMjE6NDk6MjUu MzM1MzUyMjE1ICswMjAwCitAQCAtMCwwICsxLDcwMiBAQAorKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICog Q29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgor KyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisr ICBOSVNUIERFUyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBTeXN0ZW0KKysgIFRlc3Qg UHJvZ3JhbQorKworKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3aGljaCB3 YXM6CisrICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6CisrICBWLU9ORSBDb3Jwb3JhdGlvbgorKyAg MjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKKysgIEdlcm1hbnRvd24sIE1EIDIwODc0Cisr ICBVLlMuQS4KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGFzc2VydC5o PgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5T U0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBw cmludGYoIk5vIEZJUFMgREVTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKwor KyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0 bC5oIgorKworKyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAorKworKyNkZWZpbmUgVkVSQk9TRSAw CisrCisraW50IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2Rl LCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIg KmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwor KwkgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbikKKysg ICAgeworKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOworKworKyAgICBpZiAo YWtleXN6ICE9IDE5MikKKysJeworKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBh a2V5c3opOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAi Q0JDIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKyAgICBlbHNlIGlm IChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUz X2VjYigpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9PSAwKQor KwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKKysgICAgZWxzZSBpZiAoc3RybmNhc2Vj bXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfb2ZiKCk7 CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX2NmYjgoKTsKKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIp KQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKyAgICBlbHNlCisrCXsKKysJcHJp bnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysg ICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBk aXIpIDw9IDApCisrCXJldHVybiAwOworKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIp KQorKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RI X0JJVFMpOworKyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVuKTsKKysKKysgICAgcmV0 dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIERlYnVnVmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBj aGFyICp2YWwsIGludCBsZW4pCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKyAgICBp bnQgb2xlbjsKKysgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAgICBwcmlu dGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysgICAgfQorKworK3ZvaWQgc2hp ZnRpbih1bnNpZ25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3JjLGludCBuYml0cykKKysg ICAgeworKyAgICBpbnQgbjsKKysKKysgICAgLyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8KKysgICAg bWVtbW92ZShkc3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOworKyAgICAvKiBhcHBlbmQgbmV3 IGRhdGEgKi8KKysgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcpLzgpOwor KyAgICAvKiBsZWZ0IHNoaWZ0IHRoZSBiaXRzICovCisrICAgIGlmKG5iaXRzJTgpCisrCWZvcihu PTAgOyBuIDwgMyo4IDsgKytuKQorKwkgICAgZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRzJTgpKXwo ZHN0W24rMV0gPj4gKDgtbmJpdHMlOCkpOworKyAgICB9CQorKworKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQ TEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNC IiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9G QiwgQ0ZCMSwgQ0ZCOCwgQ0ZCNjR9OworK2ludCBTaXplc1s2XT17NjQsNjQsNjQsMSw4LDY0fTsK KysKKyt2b2lkIGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgICBpbnQgYWtleXN6LCBpbnQgbnVt a2V5cywgdW5zaWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICppdmVjLAorKwkgICAgaW50 IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgIEZJTEUgKnJmcCkKKysg ICAgeworKyAgICBpbnQgaSxpbW9kZTsKKysgICAgdW5zaWduZWQgY2hhciBua1s0KjhdOyAvKiBs b25nZXN0IGtleSs4ICovCisrICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBbOF07CisrCisrICAgIGZv ciAoaW1vZGU9MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCisrCWlmKCFzdHJjbXAoYW1vZGUsdF9t b2RlW2ltb2RlXSkpCisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisr CXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7Cisr CX0KKysKKysgICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCisrCXsKKysJaW50IGo7CisrCWlu dCBuOworKwlpbnQga3A9YWtleXN6LzY0OworKwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4XTsKKysJ RVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKwlm cHJpbnRmKHJmcCwiXG5DT1VOVCA9ICVkXG4iLGkpOworKwlpZihrcCA9PSAxKQorKwkgICAgT3V0 cHV0VmFsdWUoIktFWSIsYWtleSw4LHJmcCwwKTsKKysJZWxzZQorKwkgICAgZm9yKG49MCA7IG4g PCBrcCA7ICsrbikKKysJCXsKKysJCWZwcmludGYocmZwLCJLRVklZCIsbisxKTsKKysJCU91dHB1 dFZhbHVlKCIiLGFrZXkrbio4LDgscmZwLDApOworKwkJfQorKworKwlpZihpbW9kZSAhPSBFQ0Ip CisrCSAgICBPdXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7CisrCU91dHB1dFZhbHVlKHRf dGFnW2Rpcl4xXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrI2lmIDAKKysJLyogY29t cGVuc2F0ZSBmb3IgZW5kaWFubmVzcyAqLworKwlpZihpbW9kZSA9PSBDRkIxKQorKwkgICAgdGV4 dFswXTw8PTc7CisrI2VuZGlmCisrCW1lbWNweSh0ZXh0MCx0ZXh0LDgpOworKworKwlmb3Ioaj0w IDsgaiA8IDEwMDAwIDsgKytqKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBvbGRfdGV4 dFs4XTsKKysKKysJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOworKwkgICAgaWYoaiA9PSAw KQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOworKwkJREVTVGVzdCgmY3R4LGFtb2Rl LGFrZXlzeixha2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOworKwkJfQorKwkgICAgZWxzZQor KwkJeworKwkJbWVtY3B5KG9sZF9pdixjdHguaXYsOCk7CisrCQlFVlBfQ2lwaGVyKCZjdHgsdGV4 dCx0ZXh0LGxlbik7CisrCQl9CisrCSAgICBpZihqID09IDk5OTkpCisrCQl7CisrCQlPdXRwdXRW YWx1ZSh0X3RhZ1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKKysJCS8qCQltZW1j cHkoaXZlYyx0ZXh0LDgpOyAqLworKwkJfQorKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIml2Iixj dHguaXYsOCk7ICovCisrCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUgbmV4dCBr ZXkgKi8KKysJICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0pOworKwkgICAgLyoJICAg IERlYnVnVmFsdWUoIm5rIixuaywyNCk7Ki8KKysJICAgIGlmKChkaXIgJiYgKGltb2RlID09IENG QjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAorKwkJCXx8IGltb2RlID09IENC QykpIHx8IGltb2RlID09IE9GQikKKysJCW1lbWNweSh0ZXh0LG9sZF9pdiw4KTsKKysKKysJICAg IGlmKCFkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBD RkI2NCkpCisrCQl7CisrCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91dHB1dCBv ZiB0aGUgcmF3IERFUyBvcGVyYXRpb24KKysJCSAgIHdoaWNoIHdlIGRvbid0IGhhdmUsIHNvIHJl Y29uc3RydWN0IGl0Li4uICovCisrCQlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQkgICAgdGV4 dFtuXV49b2xkX3RleHRbbl07CisrCQl9CisrCSAgICB9CisrCWZvcihuPTAgOyBuIDwgOCA7ICsr bikKKysJICAgIGFrZXlbbl1ePW5rWzE2K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisr CSAgICBha2V5Wzgrbl1ePW5rWzgrbl07CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAg IGFrZXlbMTYrbl1ePW5rW25dOworKwlpZihudW1rZXlzIDwgMykKKysJICAgIG1lbWNweSgmYWtl eVsyKjhdLGFrZXksOCk7CisrCWlmKG51bWtleXMgPCAyKQorKwkgICAgbWVtY3B5KCZha2V5Wzhd LGFrZXksOCk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKWFrZXkpOworKwlE RVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7CisrCURFU19zZXRfb2Rk X3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzE2KSk7CisrCW1lbWNweShpdmVjLGN0eC5pdiw4 KTsKKysKKysJLyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFsIHRleHQgZG9lc24ndCBk ZXBlbmQgb24gdGhlCisrCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9kZSwgc28gd2hvIGNhcmVz IHdoYXQgaXQgaXM/IChXaG8KKysJICAgZGVzaWduZWQgdGhlc2UgdGVzdHM/KSAqLworKwlpZihp bW9kZSA9PSBPRkIpCisrCSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQl0ZXh0W25dPXRl eHQwW25dXm9sZF9pdltuXTsKKysJfQorKyAgICB9CisrICAgIAorK2ludCBwcm9jX2ZpbGUoY2hh ciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJm blsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBp YnVmWzIwNDhdLCB0YnVmWzIwNDhdOworKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOworKyAg ICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbMTAwXSA9ICIiOworKyAgICBp bnQgYWtleXN6PTA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAg ICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBs YWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAg ICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBpbnQgbnVta2V5cz0x OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8 fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4g LTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBm b3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxl OiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4g LTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJ cnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAo IXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJw KTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7Cisr CW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAo KHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5u b3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykp OworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAg IHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwp CisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOwor KwkvKglwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsqLworKwlpZihzdGVwID09 IDMgJiYgIXN0cmNtcChhbW9kZSwiRUNCIikpCisrCSAgICB7CisrCSAgICBtZW1zZXQoaVZlYywg MCwgc2l6ZW9mKGlWZWMpKTsKKysJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMg Zm9yIEVDQiAqLworKwkgICAgfQorKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDog IC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8q IGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCphbW9kZSA9PSAnXDAnKQorKwkJICAgIHsKKysJ CSAgICBwcmludGYoIk1pc3NpbmcgTW9kZVxuIik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9 CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysg c3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJ CXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQll cnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisr CQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZigqYW1vZGUpCisrCQkg ICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGlt ID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOwor KwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ CSAgICBpZighc3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJuY21wKHBwLCJERVMgIiw0 KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkKKysJCSAgICAgICB8fCAhc3Ry bmNtcChwcCwiUEVSTVVUQVRJT04gIiwxMikKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiU1VC U1RJVFVUSU9OICIsMTMpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlZBUklBQkxFICIsOSkp CisrCQkJeworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlpZighc3RybmNtcChwcCwiREVT ICIsNCkpCisrCQkJICAgIHBwKz00OworKwkJCWVsc2UgaWYoIXN0cm5jbXAocHAsIlRERVMgIiw1 KSkKKysJCQkgICAgcHArPTU7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhw LXBwOworKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7Cisr CQkJLyogZ2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2Rl IiAqLworKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBu KTsKKysJCQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJ CWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRlc3QsYW1v ZGUpOworKwkJCX0KKysJCSAgICB9CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAxOiAg LyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCisrCSAgICBpZihpYnVmWzBdID09ICdcbicpCisr CQlicmVhazsKKysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYs IHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIs IDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYs ICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAg eworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAg ZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9 PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNS WVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9 IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgaWYoKmlidWYgPT0gJ1xu JykKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAg ICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisr CQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAg ICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKKysJCXsKKysJ ICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0K KysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwxMCkpCisrCQl7CisrCQlu dW1rZXlzPWF0b2koaWJ1ZisxMCk7CisrCQlicmVhazsKKysJCX0KKysJICAKKysJICAgIGZwdXRz KGlidWYsIHJmcCk7CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2KSkKKysJ CXsKKysJCWFrZXlzej02NDsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7 CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxu Iik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1 ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0 cm5jYXNlY21wKGlidWYsIktFWXMgPSAiLDcpKQorKwkJeworKwkJYWtleXN6PTY0KjM7CisrCQls ZW49aGV4MmJpbihpYnVmKzcsYUtleSk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7 CisrCQkgICAgfQorKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOworKwkJbWVtY3B5KGFLZXkrMTYs YUtleSw4KTsKKysJCWlidWZbNF09J1wwJzsKKysJCVByaW50VmFsdWUoIktFWXMiLGFLZXksbGVu KTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktF WSIsMykpCisrCQl7CisrCQlpbnQgbj1pYnVmWzNdLScxJzsKKysKKysJCWFrZXlzej02NCozOwor KwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJICAg IHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCQlpYnVmWzRdPSdcMCc7CisrCQlQcmludFZhbHVlKGlidWYs YUtleSxsZW4pOworKwkJaWYobiA9PSAyKQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGVs c2UKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0K KysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAw KQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9Cisr CSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOwor KwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7 CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUo IklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJy ZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEy KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIg PSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIp OworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVm KzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEy LCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50Zigi SW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAg IGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkg ICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQ cmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOwor KwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3Qg Ki8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixudW1rZXlzLGFLZXksaVZl YyxkaXIscGxhaW50ZXh0LGxlbixyZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7Cisr CQkgICAgYXNzZXJ0KGRpciA9PSAxKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2Rl LCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0g ZW5jcnlwdCAqLworKwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKKysJCSAgICBP dXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21w KGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJl YWs7CisrCisrCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAx MykgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsK KysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJ CSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsK KysJCWVsc2UKKysJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7CisrCQlp ZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRc biIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQkKKysJCVBy aW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChh dGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7Cisr CQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFLZXksIGlWZWMsIAorKwkJCSAg IGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7 CisrCQkgICAgYXNzZXJ0KGRpciA9PSAwKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFt b2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAx ID0gZW5jcnlwdCAqLworKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAg ICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4s cmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2 OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBdICE9 ICdcbicpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3Jc biIpOworKwkJfQorKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKKysJ CXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGlidWYs IHJmcCk7CisrCQl9CisrCSAgICBzdGVwID0gMTsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwl9 CisrICAgIGlmIChyZnApCisrCWZjbG9zZShyZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xvc2Uo YWZwKTsKKysgICAgcmV0dXJuIGVycjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIgYSBz aW5nbGUgZmlsZSBvciAKKysgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQg aW4gYSBmaWxlLgorKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190 ZXN0IC1mIHh4eC5yZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysgICAg YWVzX3Rlc3QgLWQgeHh4eHgueHh4CisrICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAorKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0ID0g InJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysgICAg Y2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7CisrICAgIGludCBmX29wdCA9IDAsIGRf b3B0ID0gMTsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVfc2V0 KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlFWElUKDEpOworKwl9CisrI2VuZGlm CisrICAgIGlmIChhcmdjID4gMSkKKysJeworKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQi KSA9PSAwKQorKwkgICAgeworKwkgICAgZF9vcHQgPSAxOworKwkgICAgfQorKwllbHNlIGlmIChz dHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9IDE7 CisrCSAgICBkX29wdCA9IDA7CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHByaW50 ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAwOwor KwkgICAgfQorKwlpZiAoYXJnYyA8IDMpCisrCSAgICB7CisrCSAgICBwcmludGYoIk1pc3Npbmcg cGFyYW1ldGVyXG4iKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoZF9vcHQpCisr CSAgICBycWxpc3QgPSBhcmd2WzJdOworKwllbHNlCisrCSAgICB7CisrCSAgICBzdHJjcHkoZm4s IGFyZ3ZbMl0pOworKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysgICAg aWYgKGRfb3B0KQorKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYgKCEo ZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5ub3Qg b3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJd2hp bGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2soZm4s ICJcclxuIik7CisrCSAgICBzdHJjcHkocmZuLCBmbik7CisrCSAgICBwcmludGYoIlByb2Nlc3Np bmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJ eworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7 CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVs c2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJCXByaW50ZigiUHJv Y2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisrCSAg ICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwg Zm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAgICB9 CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfZGh2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMu YworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMuZmlwcwky MDEyLTA3LTEyIDIxOjQ5OjI1LjMzNjM1MjIzOCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzYzNTIyMzgg KzAyMDAKK0BAIC0wLDAgKzEsMjkyIEBACisrLyogZmlwcy9kaC9maXBzX2RodnMuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICovCisrCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3Bl bnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUg PHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAg cHJpbnRmKCJObyBGSVBTIERIIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNl bHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUg ImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGNvbnN0IEVWUF9NRCAqcGFyc2VfbWQoY2hhciAqbGlu ZSkKKysJeworKwljaGFyICpwOworKwlpZiAobGluZVswXSAhPSAnWycgfHwgbGluZVsxXSAhPSAn RicpCisrCQlyZXR1cm4gTlVMTDsKKysJcCA9IHN0cmNocihsaW5lLCAnLScpOworKwlpZiAoIXAp CisrCQlyZXR1cm4gTlVMTDsKKysJbGluZSA9IHAgKyAxOworKwlwID0gc3RyY2hyKGxpbmUsICdd Jyk7CisrCWlmICghcCkKKysJCXJldHVybiBOVUxMOworKwkqcCA9IDA7CisrCXAgPSBsaW5lOwor Kwl3aGlsZShpc3NwYWNlKCpwKSkKKysJCXArKzsKKysJaWYgKCFzdHJjbXAocCwgIlNIQTEiKSkK KysJCXJldHVybiBFVlBfc2hhMSgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyMjQiKSkK KysJCXJldHVybiBFVlBfc2hhMjI0KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTI1NiIp KQorKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMzg0 IikpCisrCQlyZXR1cm4gRVZQX3NoYTM4NCgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEE1 MTIiKSkKKysJCXJldHVybiBFVlBfc2hhNTEyKCk7CisrCWVsc2UKKysJCXJldHVybiBOVUxMOwor Kwl9CisrCisrc3RhdGljIHZvaWQgb3V0cHV0X1poYXNoKEZJTEUgKm91dCwgaW50IGV4b3V0LAor KwkJCQlESCAqZGgsIEJJR05VTSAqcGVlcmtleSwgY29uc3QgRVZQX01EICptZCwKKysJCQkJdW5z aWduZWQgY2hhciAqcmhhc2gsIHNpemVfdCByaGFzaGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFy ICpaOworKwl1bnNpZ25lZCBjaGFyIGNoYXNoW0VWUF9NQVhfTURfU0laRV07CisrCWludCBabGVu OworKwlpZiAocmhhc2ggPT0gTlVMTCkKKysJCXsKKysJCXJoYXNobGVuID0gTV9FVlBfTURfc2l6 ZShtZCk7CisrCQlpZiAoIURIX2dlbmVyYXRlX2tleShkaCkpCisrCQkJZXhpdCAoMSk7CisrCQlk b19ibl9wcmludF9uYW1lKG91dCwgIlllcGhlbUlVVCIsIGRoLT5wdWJfa2V5KTsKKysJCWlmIChl eG91dCkKKysJCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlhlcGhlbUlVVCIsIGRoLT5wcml2X2tl eSk7CisrCQl9CisrCVogPSBPUEVOU1NMX21hbGxvYyhCTl9udW1fYnl0ZXMoZGgtPnApKTsKKysJ aWYgKCFaKQorKwkJZXhpdCgxKTsKKysJWmxlbiA9IERIX2NvbXB1dGVfa2V5X3BhZGRlZChaLCBw ZWVya2V5LCBkaCk7CisrCWlmIChleG91dCkKKysJCU91dHB1dFZhbHVlKCJaIiwgWiwgWmxlbiwg b3V0LCAwKTsKKysJRklQU19kaWdlc3QoWiwgWmxlbiwgY2hhc2gsIE5VTEwsIG1kKTsKKysJT3V0 cHV0VmFsdWUocmhhc2ggPyAiSVVUSGFzaFpaIiA6ICJIYXNoWloiLCBjaGFzaCwgcmhhc2hsZW4s IG91dCwgMCk7CisrCWlmIChyaGFzaCkKKysJCXsKKysJCWZwcmludGYob3V0LCAiUmVzdWx0ID0g JXNcbiIsCisrCQkJCW1lbWNtcChjaGFzaCwgcmhhc2gsIHJoYXNobGVuKSA/ICJGIiA6ICJQIik7 CisrCQl9CisrCWVsc2UKKysJCXsKKysJCUJOX2NsZWFyX2ZyZWUoZGgtPnByaXZfa2V5KTsKKysJ CUJOX2NsZWFyX2ZyZWUoZGgtPnB1Yl9rZXkpOworKwkJZGgtPnByaXZfa2V5ID0gTlVMTDsKKysJ CWRoLT5wdWJfa2V5ID0gTlVMTDsKKysJCX0KKysJT1BFTlNTTF9jbGVhbnNlKFosIFpsZW4pOwor KwlPUEVOU1NMX2ZyZWUoWik7CisrCX0KKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBz X2RodnNfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrI2Vsc2UKKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisrI2VuZGlmCisrCXsKKysJY2hhciAqKmFyZ3MgPSBhcmd2ICsg MTsKKysJaW50IGFyZ24gPSBhcmdjIC0gMTsKKysJRklMRSAqaW4sICpvdXQ7CisrCWNoYXIgYnVm WzIwNDhdLCBsYnVmWzIwNDhdOworKwl1bnNpZ25lZCBjaGFyICpyaGFzaDsKKysJbG9uZyByaGFz aGxlbjsKKysJREggKmRoID0gTlVMTDsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCUJJ R05VTSAqcGVlcmtleSA9IE5VTEw7CisrCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBO VUxMOworKwlpbnQgZG9fdmVyaWZ5ID0gLTEsIGV4b3V0ID0gMDsKKysKKysJZmlwc19hbGd0ZXN0 X2luaXQoKTsKKysKKysJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgImRodmVyIikpCisrCQl7 CisrCQlkb192ZXJpZnkgPSAxOworKwkJYXJncysrOworKwkJYXJnbi0tOworKwkJfQorKwllbHNl IGlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaGdlbiIpKQorKwkJeworKwkJZG9fdmVyaWZ5 ID0gMDsKKysJCWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJCX0KKysKKysJaWYgKGFyZ24gJiYgIXN0 cmNtcCgqYXJncywgIi1leG91dCIpKQorKwkJeworKwkJZXhvdXQgPSAxOworKwkJYXJncysrOwor KwkJYXJnbi0tOworKwkJfQorKworKwlpZiAoZG9fdmVyaWZ5ID09IC0xKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlc biIsYXJndlswXSk7CisrCQlleGl0KDEpOworKwkJfQorKworKwlpZiAoYXJnbiA9PSAyKQorKwkJ eworKwkJaW4gPSBmb3BlbigqYXJncywgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZw cmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEp OworKwkJCX0KKysJCW91dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJ CQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsK KysJCQlleGl0KDEpOworKwkJCX0KKysJCX0KKysJZWxzZSBpZiAoYXJnbiA9PSAwKQorKwkJewor KwkJaW4gPSBzdGRpbjsKKysJCW91dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0Zmls ZSlcbiIsYXJndlswXSk7CisrCQlleGl0KDEpOworKwkJfQorKworKwlkaCA9IEZJUFNfZGhfbmV3 KCk7CisrCisrCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKKysJ CXsKKysJCWZwdXRzKGJ1Ziwgb3V0KTsKKysJCWlmIChzdHJsZW4oYnVmKSA+IDYgJiYgIXN0cm5j bXAoYnVmLCAiW0YiLCAyKSkKKysJCQl7CisrCQkJbWQgPSBwYXJzZV9tZChidWYpOworKwkJCWlm IChtZCA9PSBOVUxMKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChkaCkKKysJCQkJ RklQU19kaF9mcmVlKGRoKTsKKysJCQlkaCA9IEZJUFNfZGhfbmV3KCk7CisrCQkJY29udGludWU7 CisrCQkJfQorKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQkJY29udGludWU7CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiUCIpKQorKwkJCXsKKysJ CQlpZiAoIWRvX2hleDJibigmZGgtPnAsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJRIikpCisrCQkJeworKwkJCWlm ICghZG9faGV4MmJuKCZkaC0+cSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkciKSkKKysJCQl7CisrCQkJaWYgKCFk b19oZXgyYm4oJmRoLT5nLCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWGVwaGVtSVVUIikpCisrCQkJeworKwkJCWlm ICghZG9faGV4MmJuKCZkaC0+cHJpdl9rZXksIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZZXBoZW1JVVQiKSkKKysJ CQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5wdWJfa2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVt Q0FWUyIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmcGVlcmtleSwgdmFsdWUpKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChkb192ZXJpZnkgPT0gMCkKKysJCQkJb3V0cHV0 X1poYXNoKG91dCwgZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKKysJCQkJCQkJTlVMTCwgMCk7Cisr CQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQorKwkJCXsK KysJCQlpZiAoIW1kKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCXJoYXNoID0gaGV4MmJp bl9tKHZhbHVlLCAmcmhhc2hsZW4pOworKwkJCWlmICghcmhhc2ggfHwgcmhhc2hsZW4gIT0gTV9F VlBfTURfc2l6ZShtZCkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJb3V0cHV0X1poYXNo KG91dCwgZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKKysJCQkJCQkJcmhhc2gsIHJoYXNobGVuKTsK KysJCQl9CisrCQl9CisrCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKKysJCWZjbG9zZShpbik7Cisr CWlmIChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKKysJCWZjbG9zZShvdXQpOworKwlyZXR1cm4gMDsK KysJcGFyc2VfZXJyb3I6CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgUGFyc2luZyByZXF1ZXN0 IGZpbGVcbiIpOworKwlleGl0KDEpOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNjM1 MjIzOCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJn dnMuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNjM1MjIzOCArMDIwMAorQEAgLTAsMCArMSw0MTYg QEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJndnMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3Rl cGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHBy b2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrCisr I2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5o PgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERS Qkcgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgi CisrCisrc3RhdGljIGludCBkcGFyc2VfbWQoY2hhciAqc3RyKQorKwl7CisrCXN3aXRjaChhdG9p KHN0ciArIDUpKQorKwkJeworKwkJY2FzZSAxOgorKwkJcmV0dXJuIE5JRF9zaGExOworKworKwkJ Y2FzZSAyMjQ6CisrCQlyZXR1cm4gTklEX3NoYTIyNDsKKysKKysJCWNhc2UgMjU2OgorKwkJcmV0 dXJuIE5JRF9zaGEyNTY7CisrCisrCQljYXNlIDM4NDoKKysJCXJldHVybiBOSURfc2hhMzg0Owor KworKwkJY2FzZSA1MTI6CisrCQlyZXR1cm4gTklEX3NoYTUxMjsKKysKKysJCX0KKysKKysJcmV0 dXJuIE5JRF91bmRlZjsKKysJfQorKworK3N0YXRpYyBpbnQgcGFyc2VfZWMoY2hhciAqc3RyKQor Kwl7CisrCWludCBjdXJ2ZV9uaWQsIG1kX25pZDsKKysJY2hhciAqbWQ7CisrCW1kID0gc3RyY2hy KHN0ciwgJyAnKTsKKysJaWYgKCFtZCkKKysJCXJldHVybiBOSURfdW5kZWY7CisrCWlmICghc3Ry bmNtcChzdHIsICJbUC0yNTYiLCA2KSkKKysJCWN1cnZlX25pZCA9IE5JRF9YOV82Ml9wcmltZTI1 NnYxOworKwllbHNlIGlmICghc3RybmNtcChzdHIsICJbUC0zODQiLCA2KSkKKysJCWN1cnZlX25p ZCA9IE5JRF9zZWNwMzg0cjE7CisrCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTUyMSIsIDYp KQorKwkJY3VydmVfbmlkID0gTklEX3NlY3A1MjFyMTsKKysJZWxzZQorKwkJcmV0dXJuIE5JRF91 bmRlZjsKKysJbWRfbmlkID0gZHBhcnNlX21kKG1kKTsKKysJaWYgKG1kX25pZCA9PSBOSURfdW5k ZWYpCisrCQlyZXR1cm4gTklEX3VuZGVmOworKwlyZXR1cm4gKGN1cnZlX25pZCA8PCAxNikgfCBt ZF9uaWQ7CisrCX0KKysKKytzdGF0aWMgaW50IHBhcnNlX2FlcyhjaGFyICpzdHIsIGludCAqcGRm KQorKwl7CisrCisrCWlmICghc3RybmNtcChzdHIgKyA5LCAibm8iLCAyKSkKKysJCSpwZGYgPSAw OworKwllbHNlCisrCQkqcGRmID0gRFJCR19GTEFHX0NUUl9VU0VfREY7CisrCisrCXN3aXRjaChh dG9pKHN0ciArIDUpKQorKwkJeworKwkJY2FzZSAxMjg6CisrCQlyZXR1cm4gTklEX2Flc18xMjhf Y3RyOworKworKwkJY2FzZSAxOTI6CisrCQlyZXR1cm4gTklEX2Flc18xOTJfY3RyOworKworKwkJ Y2FzZSAyNTY6CisrCQlyZXR1cm4gTklEX2Flc18yNTZfY3RyOworKworKwkJZGVmYXVsdDoKKysJ CXJldHVybiBOSURfdW5kZWY7CisrCisrCQl9CisrCX0KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJ eworKwl1bnNpZ25lZCBjaGFyICplbnQ7CisrCXNpemVfdCBlbnRsZW47CisrCXVuc2lnbmVkIGNo YXIgKm5vbmNlOworKwlzaXplX3Qgbm9uY2VsZW47CisrCX0gVEVTVF9FTlQ7CisrCisrc3RhdGlj IHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBt aW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19n ZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7Cisr CXJldHVybiB0LT5lbnRsZW47CisrCX0KKysKKytzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJC R19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikK KysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpw b3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5ub25jZTsKKysJcmV0dXJuIHQtPm5vbmNlbGVuOwor Kwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19kcmJndnNfbWFpbihpbnQgYXJn YyxjaGFyICoqYXJndikKKysjZWxzZQorK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQor KyNlbmRpZgorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCURSQkdfQ1RY ICpkY3R4ID0gTlVMTDsKKysJVEVTVF9FTlQgdDsKKysJaW50IHIsIG5pZCA9IDA7CisrCWludCBw ciA9IDA7CisrCWNoYXIgYnVmWzIwNDhdLCBsYnVmWzIwNDhdOworKwl1bnNpZ25lZCBjaGFyIHJh bmRvdXRbMjA0OF07CisrCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworKwor Kwl1bnNpZ25lZCBjaGFyICplbnQgPSBOVUxMLCAqbm9uY2UgPSBOVUxMLCAqcGVycyA9IE5VTEws ICphZGluID0gTlVMTDsKKysJbG9uZyBlbnRsZW4sIG5vbmNlbGVuLCBwZXJzbGVuLCBhZGlubGVu OworKwlpbnQgZGYgPSAwOworKworKwllbnVtIGR0eXBlIHsgRFJCR19OT05FLCBEUkJHX0NUUiwg RFJCR19IQVNILCBEUkJHX0hNQUMsIERSQkdfRFVBTF9FQyB9CisrCQlkcmJnX3R5cGUgPSBEUkJH X05PTkU7CisrCisrCWludCByYW5kb3V0bGVuID0gMDsKKysKKysJaW50IGdlbiA9IDA7CisrCisr CWZpcHNfYWxndGVzdF9pbml0KCk7CisrCisrCWlmIChhcmdjID09IDMpCisrCQl7CisrCQlpbiA9 IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0 ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9 CisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJ CWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhp dCgxKTsKKysJCQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ2MgPT0gMSkKKysJCXsKKysJCWluID0g c3RkaW47CisrCQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCIlcyAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJ CX0KKysKKysJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGluKSAhPSBOVUxMKQorKwkJ eworKwkJZnB1dHMoYnVmLCBvdXQpOworKwkJaWYgKGRyYmdfdHlwZSA9PSBEUkJHX05PTkUpCisr CQkJeworKwkJCWlmIChzdHJzdHIoYnVmLCAiQ1RSX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0g RFJCR19DVFI7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhhc2hfRFJCRyIpKQorKwkJCQlk cmJnX3R5cGUgPSBEUkJHX0hBU0g7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhNQUNfRFJC RyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0hNQUM7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1 ZiwgIkR1YWxfRUNfRFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0RVQUxfRUM7CisrCQkJ ZWxzZQorKwkJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA0ICYmICFz dHJuY21wKGJ1ZiwgIltTSEEtIiwgNSkpCisrCQkJeworKwkJCW5pZCA9IGRwYXJzZV9tZChidWYp OworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCWlmIChkcmJn X3R5cGUgPT0gRFJCR19ITUFDKQorKwkJCQl7CisrCQkJCXN3aXRjaCAobmlkKQorKwkJCQkJewor KwkJCQkJY2FzZSBOSURfc2hhMToKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTE7CisrCQkJ CQlicmVhazsKKysKKysJCQkJCWNhc2UgTklEX3NoYTIyNDoKKysJCQkJCW5pZCA9IE5JRF9obWFj V2l0aFNIQTIyNDsKKysJCQkJCWJyZWFrOworKworKwkJCQkJY2FzZSBOSURfc2hhMjU2OgorKwkJ CQkJbmlkID0gTklEX2htYWNXaXRoU0hBMjU2OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNl IE5JRF9zaGEzODQ6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEzODQ7CisrCQkJCQlicmVh azsKKysKKysJCQkJCWNhc2UgTklEX3NoYTUxMjoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNI QTUxMjsKKysJCQkJCWJyZWFrOworKworKwkJCQkJZGVmYXVsdDoKKysJCQkJCWV4aXQoMSk7Cisr CQkJCQl9CisrCQkJCX0KKysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiAxMiAmJiAhc3RybmNt cChidWYsICJbQUVTLSIsIDUpKQorKwkJCXsKKysJCQluaWQgPSBwYXJzZV9hZXMoYnVmLCAmZGYp OworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCX0KKysJCWlm IChzdHJsZW4oYnVmKSA+IDEyICYmICFzdHJuY21wKGJ1ZiwgIltQLSIsIDMpKQorKwkJCXsKKysJ CQluaWQgPSBwYXJzZV9lYyhidWYpOworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQorKwkJCQll eGl0KDEpOworKwkJCX0KKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQorKwkJCWNvbnRpbnVlOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIltQcmVk aWN0aW9uUmVzaXN0YW5jZSIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlRydWVd IikpCisrCQkJCXByID0gMTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiRmFsc2VdIikp CisrCQkJCXByID0gMDsKKysJCQllbHNlCisrCQkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dCIpKQorKwkJCXsKKysJCQllbnQgPSBoZXgy YmluX20odmFsdWUsICZlbnRsZW4pOworKwkJCXQuZW50ID0gZW50OworKwkJCXQuZW50bGVuID0g ZW50bGVuOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJOb25jZSIpKQorKwkJ CXsKKysJCQlub25jZSA9IGhleDJiaW5fbSh2YWx1ZSwgJm5vbmNlbGVuKTsKKysJCQl0Lm5vbmNl ID0gbm9uY2U7CisrCQkJdC5ub25jZWxlbiA9IG5vbmNlbGVuOworKwkJCX0KKysKKysJCWlmICgh c3RyY21wKGtleXdvcmQsICJQZXJzb25hbGl6YXRpb25TdHJpbmciKSkKKysJCQl7CisrCQkJcGVy cyA9IGhleDJiaW5fbSh2YWx1ZSwgJnBlcnNsZW4pOworKwkJCWlmIChuaWQgPT0gMCkKKysJCQkJ eworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkRSQkcgdHlwZSBub3QgcmVjb2duaXNlZCFcbiIpOwor KwkJCQlleGl0ICgxKTsKKysJCQkJfQorKwkJCWRjdHggPSBGSVBTX2RyYmdfbmV3KG5pZCwgZGYg fCBEUkJHX0ZMQUdfVEVTVCk7CisrCQkJaWYgKCFkY3R4KQorKwkJCQlleGl0ICgxKTsKKysJCQlG SVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsCisrCQkJCQkJ CXRlc3Rfbm9uY2UsIDApOworKwkJCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwor KwkJCXJhbmRvdXRsZW4gPSAoaW50KUZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoZGN0eCk7Cisr CQkJciA9IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCBwZXJzLCBwZXJzbGVuKTsKKysJCQlp ZiAoIXIpCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbnN0YW50aWF0aW5n IERSQkdcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJT1BFTlNTTF9mcmVlKHBlcnMp OworKwkJCU9QRU5TU0xfZnJlZShlbnQpOworKwkJCU9QRU5TU0xfZnJlZShub25jZSk7CisrCQkJ ZW50ID0gbm9uY2UgPSBwZXJzID0gTlVMTDsKKysJCQlnZW4gPSAwOworKwkJCX0KKysKKysJCWlm ICghc3RyY21wKGtleXdvcmQsICJBZGRpdGlvbmFsSW5wdXQiKSkKKysJCQl7CisrCQkJYWRpbiA9 IGhleDJiaW5fbSh2YWx1ZSwgJmFkaW5sZW4pOworKwkJCWlmIChwcikKKysJCQkJY29udGludWU7 CisrCQkJciA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCByYW5kb3V0bGVuLCAw LAorKwkJCQkJCQkJYWRpbiwgYWRpbmxlbik7CisrCQkJaWYgKCFyKQorKwkJCQl7CisrCQkJCWZw cmludGYoc3RkZXJyLCAiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOworKwkJCQlleGl0 KDEpOworKwkJCQl9CisrCQkJaWYgKCFyKQorKwkJCQlleGl0KDEpOworKwkJCU9QRU5TU0xfZnJl ZShhZGluKTsKKysJCQlhZGluID0gTlVMTDsKKysJCQlnZW4rKzsKKysJCQl9CisrCisrCQlpZiAo cHIpCisrCQkJeworKwkJCWlmICghc3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXRQUiIpKQor KwkJCQl7CisrCQkJCWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7CisrCQkJCXQuZW50 ID0gZW50OworKwkJCQl0LmVudGxlbiA9IGVudGxlbjsKKysJCQkJciA9IEZJUFNfZHJiZ19nZW5l cmF0ZShkY3R4LAorKwkJCQkJCQlyYW5kb3V0LCByYW5kb3V0bGVuLAorKwkJCQkJCQkxLCBhZGlu LCBhZGlubGVuKTsKKysJCQkJaWYgKCFyKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIs CisrCQkJCQkJIkVycm9yIGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKKysJCQkJCWV4aXQoMSk7 CisrCQkJCQl9CisrCQkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQkJT1BFTlNTTF9mcmVlKGVu dCk7CisrCQkJCWFkaW4gPSBlbnQgPSBOVUxMOworKwkJCQlnZW4rKzsKKysJCQkJfQorKwkJCX0K KysJCWlmICghc3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXRSZXNlZWQiKSkKKysJCQl7Cisr CQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKKysJCQl0LmVudCA9IGVudDsKKysJ CQl0LmVudGxlbiA9IGVudGxlbjsKKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQWRk aXRpb25hbElucHV0UmVzZWVkIikpCisrCQkJeworKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUs ICZhZGlubGVuKTsKKysJCQlGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4pOwor KwkJCU9QRU5TU0xfZnJlZShlbnQpOworKwkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQllbnQg PSBhZGluID0gTlVMTDsKKysJCQl9CisrCQlpZiAoZ2VuID09IDIpCisrCQkJeworKwkJCU91dHB1 dFZhbHVlKCJSZXR1cm5lZEJpdHMiLCByYW5kb3V0LCByYW5kb3V0bGVuLAorKwkJCQkJCQkJCW91 dCwgMCk7CisrCQkJRklQU19kcmJnX2ZyZWUoZGN0eCk7CisrCQkJZGN0eCA9IE5VTEw7CisrCQkJ Z2VuID0gMDsKKysJCQl9CisrCisrCQl9CisrCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKKysJCWZj bG9zZShpbik7CisrCWlmIChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKKysJCWZjbG9zZShvdXQpOwor KwlyZXR1cm4gMDsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZHNzdnMuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kc3N2cy5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzYzNTIyMzggKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDEyLTA3LTEy IDIxOjQ5OjI1LjMzNjM1MjIzOCArMDIwMAorQEAgLTAsMCArMSw1MzcgQEAKKysjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysg ICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30K KysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMg dm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKKysJeworKwlpbnQgbGVuLCBp OworKwl1bnNpZ25lZCBjaGFyICp0bXA7CisrCWxlbiA9IEJOX251bV9ieXRlcyhibik7CisrCXRt cCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7CisrCWlmICghdG1wKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisrCQlyZXR1cm47CisrCQl9Cisr CUJOX2JuMmJpbihibiwgdG1wKTsKKysJcHJpbnRmKCIlcyA9ICIsIG5hbWUpOworKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCisrCQlwcmludGYoIiUwMlgiLCB0bXBbaV0pOworKwlmcHV0cygi XG4iLCBzdGRvdXQpOworKwlPUEVOU1NMX2ZyZWUodG1wKTsKKysJcmV0dXJuOworKwl9CisrCisr dm9pZCBwcmltZXMoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjQwXTsKKysgICAgY2hhciBs YnVmWzEwMjQwXTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKworKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rk b3V0KTsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisr CQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJQcmltZSIpKQorKwkgICAgeworKwkg ICAgQklHTlVNICpwcDsKKysKKysJICAgIHBwPUJOX25ldygpOworKwkgICAgZG9faGV4MmJuKCZw cCx2YWx1ZSk7CisrCSAgICBwcmludGYoInJlc3VsdD0gJWNcbiIsCisrCQkgICBCTl9pc19wcmlt ZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1AnIDogJ0YnKTsKKysJICAgIH0JICAgIAorKwl9Cisr ICAgIH0KKysKKyt2b2lkIHBxZygpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAg IGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQg bm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK KysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFz dHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJICAgIHsKKysJICAgIGludCBuPWF0b2kodmFsdWUp OworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCisrCSAgICB3aGls ZShuLS0pCisrCQl7CisrCQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBdOworKwkJRFNBICpkc2E7Cisr CQlpbnQgY291bnRlcjsKKysJCXVuc2lnbmVkIGxvbmcgaDsKKysJCWRzYSA9IEZJUFNfZHNhX25l dygpOworKworKwkJaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2Vl ZCwwLCZjb3VudGVyLCZoLE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJ CQlleGl0KDEpOworKwkJCX0KKysJCXBibigiUCIsZHNhLT5wKTsKKysJCXBibigiUSIsZHNhLT5x KTsKKysJCXBibigiRyIsZHNhLT5nKTsKKysJCXB2KCJTZWVkIixzZWVkLDIwKTsKKysJCXByaW50 ZigiYyA9ICVkXG4iLGNvdW50ZXIpOworKwkJcHJpbnRmKCJIID0gJWx4XG4iLGgpOworKwkJcHV0 YygnXG4nLHN0ZG91dCk7CisrCQl9CisrCSAgICB9CisrCWVsc2UKKysJICAgIGZwdXRzKGJ1Zixz dGRvdXQpOworKwl9CisrICAgIH0KKysKKyt2b2lkIHBxZ3ZlcigpCisrICAgIHsKKysgICAgY2hh ciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOworKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKKysg ICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOworKyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOworKyAg ICBEU0EgKmRzYT1OVUxMOworKyAgICBpbnQgbm1vZD0wOworKyAgICB1bnNpZ25lZCBjaGFyIHNl ZWRbMTAyNF07CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBO VUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJZnB1 dHMoYnVmLCBzdGRvdXQpOworKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5t b2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBw PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBx PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBn PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCisrCSAg ICB7CisrCSAgICBpbnQgc2xlbiA9IGhleDJiaW4odmFsdWUsIHNlZWQpOworKwkgICAgaWYgKHNs ZW4gIT0gMjApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVy cm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiYyIpKQorKwkgICAgY291bnRlciA9YXRvaShidWYrNCk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJIIikpCisrCSAgICB7CisrCSAgICBoID0gYXRvaSh2YWx1ZSk7CisrCSAg ICBpZiAoIXAgfHwgIXEgfHwgIWcpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVy cm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 CisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIw ICwmY291bnRlcjIsJmgyLE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJ CQlleGl0KDEpOworKwkJCX0KKysgICAgICAgICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwg Qk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21wKGRzYS0+ZywgZykKKysJCXx8IChjb3VudGVyICE9 IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsK KysJICAgIGVsc2UKKysJICAgIAlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkgICAgQk5fZnJl ZShwKTsKKysJICAgIEJOX2ZyZWUocSk7CisrCSAgICBCTl9mcmVlKGcpOworKwkgICAgcCA9IE5V TEw7CisrCSAgICBxID0gTlVMTDsKKysJICAgIGcgPSBOVUxMOworKwkgICAgRklQU19kc2FfZnJl ZShkc2EpOworKwkgICAgZHNhID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrLyog S2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGluZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUg c3RhbmRhcmQgRklQUzE0MC0yCisrICogYWxnb3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlv bmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRoZQorKyAqIG91dHB1dCBvZiB0 aGUgS2V5UGFpciB0ZXN0LgorKyAqLworKworK3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50 IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpxLCBCSUdOVU0gKmcsCisrCQkJCQkJCUJOX0NUWCAq Y3R4KQorKyAgICB7CisrICAgIEJJR05VTSAqcmVtID0gTlVMTDsKKysgICAgaWYgKEJOX251bV9i aXRzKHApICE9IG5tb2QpCisrCXJldHVybiAwOworKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0g MTYwKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2No ZWNrcywgY3R4LCBOVUxMKSAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX2lzX3ByaW1l X2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQorKwlyZXR1cm4gMDsKKysg ICAgcmVtID0gQk5fbmV3KCk7CisrICAgIGlmICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAh Qk5faXNfb25lKHJlbSkKKysgICAgCXx8IChCTl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDAp CisrCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkp CisrCXsKKysJQk5fZnJlZShyZW0pOworKwlyZXR1cm4gMDsKKysJfQorKyAgICAvKiBUb2RvOiBj aGVjayBnICovCisrICAgIEJOX2ZyZWUocmVtKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysK Kyt2b2lkIGtleXZlcigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIg bGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBCSUdOVU0gKnAg PSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7CisrICAg IEJJR05VTSAqWTI7CisrICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKysgICAgaW50IG5tb2Q9MCwg cGFyYW1jaGVjayA9IDA7CisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKKysgICAgWTIgPSBC Tl9uZXcoKTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5V TEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZigh c3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIGlmIChwKQorKwkJQk5fZnJl ZShwKTsKKysJICAgIHAgPSBOVUxMOworKwkgICAgaWYgKHEpCisrCQlCTl9mcmVlKHEpOworKwkg ICAgcSA9IE5VTEw7CisrCSAgICBpZiAoZykKKysJCUJOX2ZyZWUoZyk7CisrCSAgICBnID0gTlVM TDsKKysJICAgIHBhcmFtY2hlY2sgPSAwOworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAg IH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlgiKSkKKysJICAgIFg9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKKysJICAgIHsKKysJICAgIFk9aGV4 MmJuKHZhbHVlKTsKKysJICAgIGlmICghcCB8fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKKysJCXsK KysJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJZXhpdCAoMSk7CisrCQl9 CisrCSAgICBwYm4oIlAiLHApOworKwkgICAgcGJuKCJRIixxKTsKKysJICAgIHBibigiRyIsZyk7 CisrCSAgICBwYm4oIlgiLFgpOworKwkgICAgcGJuKCJZIixZKTsKKysJICAgIGlmICghcGFyYW1j aGVjaykKKysJCXsKKysJCWlmIChkc3NfcGFyYW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQor KwkJCXBhcmFtY2hlY2sgPSAxOworKwkJZWxzZQorKwkJCXBhcmFtY2hlY2sgPSAtMTsKKysJCX0K KysJICAgIGlmIChwYXJhbWNoZWNrICE9IDEpCisrCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIp OworKwkgICAgZWxzZQorKwkJeworKwkJaWYgKCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgp IHx8IEJOX2NtcChZMiwgWSkpCisrCSAgICAJCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAg ICAgICAgZWxzZQorKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkJfQorKwkgICAg Qk5fZnJlZShYKTsKKysJICAgIEJOX2ZyZWUoWSk7CisrCSAgICBYID0gTlVMTDsKKysJICAgIFkg PSBOVUxMOworKwkgICAgfQorKwl9CisrCWlmIChwKQorKwkgICAgQk5fZnJlZShwKTsKKysJaWYg KHEpCisrCSAgICBCTl9mcmVlKHEpOworKwlpZiAoZykKKysJICAgIEJOX2ZyZWUoZyk7CisrCWlm IChZMikKKysJICAgIEJOX2ZyZWUoWTIpOworKyAgICB9CisrCisrdm9pZCBrZXlwYWlyKCkKKysg ICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrCisrICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91 dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisr CSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQor KwkgICAgeworKwkgICAgRFNBICpkc2E7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJ ICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgZHNhID0gRklQU19kc2Ff bmV3KCk7CisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxO VUxMLDAsTlVMTCxOVUxMLE5VTEwpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQll eGl0KDEpOworKwkJfQorKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2Et PnEpOworKwkgICAgcGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Cisr CisrCSAgICB3aGlsZShuLS0pCisrCQl7CisrCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkK KysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCisr CQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOworKwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkJ cHV0YygnXG4nLHN0ZG91dCk7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgfQorKworK3ZvaWQg c2lnZ2VuKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrICAg IERTQSAqZHNhPU5VTEw7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGlu KSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0K KysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAgICBubW9kPWF0b2ko dmFsdWUpOworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBpZiAo ZHNhKQorKwkJRklQU19kc2FfZnJlZShkc2EpOworKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 CisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAs TlVMTCxOVUxMLE5VTEwpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEp OworKwkJfQorKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOwor KwkgICAgcGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIHVuc2ln bmVkIGNoYXIgbXNnWzEwMjRdOworKwkgICAgdW5zaWduZWQgY2hhciBzYnVmWzYwXTsKKysJICAg IHVuc2lnbmVkIGludCBzbGVuOworKwkgICAgaW50IG47CisrCSAgICBFVlBfUEtFWSBwazsKKysJ ICAgIEVWUF9NRF9DVFggbWN0eDsKKysJICAgIERTQV9TSUcgKnNpZzsKKysJICAgIEVWUF9NRF9D VFhfaW5pdCgmbWN0eCk7CisrCisrCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKKysJICAgIHB2 KCJNc2ciLG1zZyxuKTsKKysKKysJICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJ eworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJfQorKwkgICAgcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKKysJICAgIHBrLnBrZXkuZHNhID0gZHNhOworKwkgICAgcGJuKCJZ Iixkc2EtPnB1Yl9rZXkpOworKworKwkgICAgRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNz MSgpLCBOVUxMKTsKKysJICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAg RVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7CisrCisrCSAgICBzaWcgPSBE U0FfU0lHX25ldygpOworKwkgICAgRklQU19kc2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4p OworKworKwkgICAgcGJuKCJSIixzaWctPnIpOworKwkgICAgcGJuKCJTIixzaWctPnMpOworKwkg ICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICBEU0FfU0lHX2ZyZWUoc2lnKTsKKysJICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrCSAgICB9CisrCX0KKysJaWYgKGRzYSkKKysJCUZJ UFNfZHNhX2ZyZWUoZHNhKTsKKysgICAgfQorKworK3ZvaWQgc2lndmVyKCkKKysgICAgeworKyAg ICBEU0EgKmRzYT1OVUxMOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOworKyAgICBpbnQgbm1vZD0wLCBuPTA7CisrICAgIERTQV9TSUcgc2csICpzaWcgPSAm c2c7CisrCisrICAgIHNpZy0+ciA9IE5VTEw7CisrICAgIHNpZy0+cyA9IE5VTEw7CisrCisrICAg IHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMo YnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJb bW9kIikpCisrCSAgICB7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgaWYoZHNhKQor KwkJRklQU19kc2FfZnJlZShkc2EpOworKwkgICAgZHNhPUZJUFNfZHNhX25ldygpOworKwkgICAg fQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgZHNhLT5wPWhleDJibih2 YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBkc2EtPnE9aGV4 MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIHsKKysJ ICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5c biIsbm1vZCk7CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7 CisrCSAgICBwYm4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAg IH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgbj1o ZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigiTXNnIixtc2csbik7CisrCSAgICB9CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCisrCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZh bHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlIiKSkKKysJICAgIHNpZy0+cj1oZXgy Ym4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUyIpKQorKwkgICAgeworKwkg ICAgRVZQX01EX0NUWCBtY3R4OworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICB1bnNpZ25lZCBj aGFyIHNpZ2J1Zls2MF07CisrCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysJICAgIGludCByOwor KwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9E U0E7CisrCSAgICBway5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUp OworKwkKKysJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJICAgIHBibigiUiIsc2lnLT5y KTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysKKysJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdf ZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKKysJICAgIEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBf ZHNzMSgpLCBOVUxMKTsKKysJICAgIEVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7Cisr CSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWdidWYsIHNsZW4sICZwayk7CisrCSAg ICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwkKKysJICAgIHByaW50ZigiUmVzdWx0ID0g JWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJ ICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisr ICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbcHJp bWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOworKwlleGl0 KDEpOworKwl9CisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vy cm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUi KSkKKysJcHJpbWVzKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKKysJ cHFnKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWd2ZXIiKSkKKysJcHFndmVy KCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXlwYWlyIikpCisrCWtleXBhaXIo KTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXZlciIpKQorKwlrZXl2ZXIoKTsK KysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIpKQorKwlzaWdnZW4oKTsKKysg ICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQorKwlzaWd2ZXIoKTsKKysgICAg ZWxzZQorKwl7CisrCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJn dlsxXSk7CisrCWV4aXQoMSk7CisrCX0KKysKKysgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYy5maXBz CTIwMTItMDctMTIgMjE6NDk6MjUuMzM2MzUyMjM4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNjM1 MjIzOCArMDIwMAorQEAgLTAsMCArMSw1NzEgQEAKKysvKiBmaXBzL2Flcy9maXBzX2djbXRlc3Qu YyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICovCisrCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor K3sKKysgICAgcHJpbnRmKCJObyBGSVBTIEdDTSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDAp OworK30KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytz dGF0aWMgdm9pZCBnY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQsIGludCBlbmNyeXB0KQorKwl7 CisrCWNoYXIgYnVmWzIwNDhdOworKwljaGFyIGxidWZbMjA0OF07CisrCWNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysJaW50IGtleWxlbiA9IC0xLCBpdmxlbiA9IC0xLCBhYWRsZW4gPSAtMSwgdGFn bGVuID0gLTEsIHB0bGVuID0gLTE7CisrCWludCBydjsKKysJbG9uZyBsOworKwl1bnNpZ25lZCBj aGFyICprZXkgPSBOVUxMLCAqaXYgPSBOVUxMLCAqYWFkID0gTlVMTCwgKnRhZyA9IE5VTEw7Cisr CXVuc2lnbmVkIGNoYXIgKmN0ID0gTlVMTCwgKnB0ID0gTlVMTDsKKysJRVZQX0NJUEhFUl9DVFgg Y3R4OworKwljb25zdCBFVlBfQ0lQSEVSICpnY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhf aW5pdCgmY3R4KTsKKysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwp CisrCQl7CisrCQlmcHV0cyhidWYsb3V0KTsKKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJaWYoIXN0cmNtcChrZXl3b3Jk LCJbS2V5bGVuIikpCisrCQkJeworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChr ZXlsZW4gPT0gMTI4KQorKwkJCQlnY20gPSBFVlBfYWVzXzEyOF9nY20oKTsKKysJCQllbHNlIGlm IChrZXlsZW4gPT0gMTkyKQorKwkJCQlnY20gPSBFVlBfYWVzXzE5Ml9nY20oKTsKKysJCQllbHNl IGlmIChrZXlsZW4gPT0gMjU2KQorKwkJCQlnY20gPSBFVlBfYWVzXzI1Nl9nY20oKTsKKysJCQll bHNlIAorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQga2V5bGVuICVk XG4iLAorKwkJCQkJCQlrZXlsZW4pOworKwkJCQl9CisrCQkJa2V5bGVuID4+PSAzOworKwkJCX0K KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltJVmxlbiIpKQorKwkJCWl2bGVuID0gYXRv aSh2YWx1ZSkgPj4gMzsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltBQURsZW4iKSkK KysJCQlhYWRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiW1RhZ2xlbiIpKQorKwkJCXRhZ2xlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJbUFRsZW4iKSkKKysJCQlwdGxlbiA9IGF0b2kodmFsdWUp ID4+IDM7CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWtl eSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGtleWxlbikKKysJCQkJewor KwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKKysJCQkJ ZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJJViIp KQorKwkJCXsKKysJCQlpdiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGl2 bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IElWIGxlbmd0 aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiUFQiKSkKKysJCQl7CisrCQkJcHQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJ CQlpZiAobCAhPSBwdGxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lz dGVudCBQVCBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIkNUIikpCisrCQkJeworKwkJCWN0ID0gaGV4MmJpbl9tKHZh bHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gcHRsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRl cnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQor KwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJBQUQiKSkKKysJCQl7CisrCQkJYWFk ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gYWFkbGVuKQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEFBRCBsZW5ndGhcbiIpOworKwkJCQll eGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlRhZyIp KQorKwkJCXsKKysJCQl0YWcgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSB0 YWdsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgVGFnIGxl bmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoZW5jcnlwdCAm JiBwdCAmJiBhYWQgJiYgKGl2IHx8IGVuY3J5cHQ9PTEpKQorKwkJCXsKKysJCQl0YWcgPSBPUEVO U1NMX21hbGxvYyh0YWdsZW4pOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEws IE5VTEwsIDEpOworKwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8K KysJCQlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9G SVBTX0FMTE9XKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01f U0VUX0lWTEVOLCBpdmxlbiwgMCk7CisrCQkJaWYgKGVuY3J5cHQgPT0gMSkKKysJCQkJeworKwkJ CQlzdGF0aWMgdW5zaWduZWQgY2hhciBpdl9maXhlZFs0XSA9IHsxLDIsMyw0fTsKKysJCQkJaWYg KCFpdikKKysJCQkJCWl2ID0gT1BFTlNTTF9tYWxsb2MoaXZsZW4pOworKwkJCQlGSVBTX2NpcGhl cmluaXQoJmN0eCwgTlVMTCwga2V5LCBOVUxMLCAxKTsKKysJCQkJRklQU19jaXBoZXJfY3R4X2N0 cmwoJmN0eCwKKysJCQkJCQlFVlBfQ1RSTF9HQ01fU0VUX0lWX0ZJWEVELAorKwkJCQkJCTQsIGl2 X2ZpeGVkKTsKKysJCQkJaWYgKCFGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LAorKwkJCQkJRVZQ X0NUUkxfR0NNX0lWX0dFTiwgMCwgaXYpKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIs ICJJViBnZW4gZXJyb3JcbiIpOworKwkJCQkJZXhpdCgxKTsKKysJCQkJCX0KKysJCQkJT3V0cHV0 VmFsdWUoIklWIiwgaXYsIGl2bGVuLCBvdXQsIDApOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQlG SVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMSk7CisrCisrCisrCQkJaWYgKGFh ZGxlbikKKysJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOworKwkJCWlm IChwdGxlbikKKysJCQkJeworKwkJCQljdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKKysJCQkJ cnYgPSBGSVBTX2NpcGhlcigmY3R4LCBjdCwgcHQsIHB0bGVuKTsKKysJCQkJfQorKwkJCUZJUFNf Y2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZj dHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLAorKwkJCQkJCQkJdGFnbGVuLCB0YWcpOwkKKysJCQlP dXRwdXRWYWx1ZSgiQ1QiLCBjdCwgcHRsZW4sIG91dCwgMCk7CisrCQkJT3V0cHV0VmFsdWUoIlRh ZyIsIHRhZywgdGFnbGVuLCBvdXQsIDApOworKwkJCWlmIChpdikKKysJCQkJT1BFTlNTTF9mcmVl KGl2KTsKKysJCQlpZiAoYWFkKQorKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKKysJCQlpZiAoY3Qp CisrCQkJCU9QRU5TU0xfZnJlZShjdCk7CisrCQkJaWYgKHB0KQorKwkJCQlPUEVOU1NMX2ZyZWUo cHQpOworKwkJCWlmIChrZXkpCisrCQkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJCWlmICh0YWcp CisrCQkJCU9QRU5TU0xfZnJlZSh0YWcpOworKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9 IHRhZyA9IE5VTEw7CisrCQkJfQkKKysJCWlmICghZW5jcnlwdCAmJiB0YWcpCisrCQkJeworKwkJ CUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDApOworKwkJCS8qIFJlbGF4 IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KKysJCQlNX0VWUF9DSVBIRVJfQ1RYX3Nl dF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJCQlGSVBTX2Np cGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwgMCk7Cisr CQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDApOworKwkJCUZJUFNfY2lw aGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCB0YWdsZW4sIHRhZyk7Cisr CQkJaWYgKGFhZGxlbikKKysJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4p OworKwkJCWlmIChwdGxlbikKKysJCQkJeworKwkJCQlwdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVu KTsKKysJCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBwdCwgY3QsIHB0bGVuKTsKKysJCQkJfQor KwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7CisrCQkJaWYgKHJ2IDwg MCkKKysJCQkJZnByaW50ZihvdXQsICJGQUlMIiBSRVNQX0VPTCk7CisrCQkJZWxzZQorKwkJCQlP dXRwdXRWYWx1ZSgiUFQiLCBwdCwgcHRsZW4sIG91dCwgMCk7CisrCQkJaWYgKGl2KQorKwkJCQlP UEVOU1NMX2ZyZWUoaXYpOworKwkJCWlmIChhYWQpCisrCQkJCU9QRU5TU0xfZnJlZShhYWQpOwor KwkJCWlmIChjdCkKKysJCQkJT1BFTlNTTF9mcmVlKGN0KTsKKysJCQlpZiAocHQpCisrCQkJCU9Q RU5TU0xfZnJlZShwdCk7CisrCQkJaWYgKGtleSkKKysJCQkJT1BFTlNTTF9mcmVlKGtleSk7Cisr CQkJaWYgKHRhZykKKysJCQkJT1BFTlNTTF9mcmVlKHRhZyk7CisrCQkJaXYgPSBhYWQgPSBjdCA9 IHB0ID0ga2V5ID0gdGFnID0gTlVMTDsKKysJCQl9CisrCQl9CisrCUZJUFNfY2lwaGVyX2N0eF9j bGVhbnVwKCZjdHgpOwkKKysJfQorKworK3N0YXRpYyB2b2lkIHh0c3Rlc3QoRklMRSAqaW4sIEZJ TEUgKm91dCkKKysJeworKwljaGFyIGJ1ZlsyMDQ4MDBdOworKwljaGFyIGxidWZbMjA0ODAwXTsK KysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlpbnQgaW5sZW4gPSAwOworKwlpbnQgZW5jcnlw dCA9IDA7CisrCWxvbmcgbDsKKysJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0gTlVM TDsKKysJdW5zaWduZWQgY2hhciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKKysJRVZQ X0NJUEhFUl9DVFggY3R4OworKwljb25zdCBFVlBfQ0lQSEVSICp4dHMgPSBOVUxMOworKwlGSVBT X2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKKysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYs aW4pICE9IE5VTEwpCisrCQl7CisrCQlmcHV0cyhidWYsb3V0KTsKKysJCWlmIChidWZbMF0gPT0g J1snICYmIHN0cmxlbihidWYpID49IDkpCisrCQkJeworKwkJCWlmKCFzdHJuY21wKGJ1ZiwiW0VO Q1JZUFRdIiwgOSkpCisrCQkJCWVuY3J5cHQgPSAxOworKwkJCWVsc2UgaWYoIXN0cm5jbXAoYnVm LCJbREVDUllQVF0iLCA5KSkKKysJCQkJZW5jcnlwdCA9IDA7CisrCQkJfQorKwkJaWYgICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlrZXkgPSBoZXgyYmlu X20odmFsdWUsICZsKTsKKysJCQlpZiAobCA9PSAzMikKKysJCQkJeHRzID0gRVZQX2Flc18xMjhf eHRzKCk7CisrCQkJZWxzZSBpZiAobCA9PSA2NCkKKysJCQkJeHRzID0gRVZQX2Flc18yNTZfeHRz KCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50 IEtleSBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsImkiKSkKKysJCQl7CisrCQkJaXYgPSBoZXgyYmluX20odmFsdWUs ICZsKTsKKysJCQlpZiAobCAhPSAxNikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklu Y29uc2lzdGVudCBpIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9Cisr CQllbHNlIGlmKGVuY3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJQVCIpKQorKwkJCXsKKysJCQlp bmJ1ZiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlubGVuID0gbDsKKysJCQl9CisrCQll bHNlIGlmKCFlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKKysJCQl7CisrCQkJaW5i dWYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpbmxlbiA9IGw7CisrCQkJfQorKwkJaWYg KGluYnVmKQorKwkJCXsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgeHRzLCBrZXksIGl2LCBl bmNyeXB0KTsKKysJCQlvdXRidWYgPSBPUEVOU1NMX21hbGxvYyhpbmxlbik7CisrCQkJRklQU19j aXBoZXIoJmN0eCwgb3V0YnVmLCBpbmJ1ZiwgaW5sZW4pOworKwkJCU91dHB1dFZhbHVlKGVuY3J5 cHQgPyAiQ1QiOiJQVCIsIG91dGJ1ZiwgaW5sZW4sIG91dCwgMCk7CisrCQkJT1BFTlNTTF9mcmVl KGluYnVmKTsKKysJCQlPUEVOU1NMX2ZyZWUob3V0YnVmKTsKKysJCQlPUEVOU1NMX2ZyZWUoa2V5 KTsKKysJCQlPUEVOU1NMX2ZyZWUoaXYpOworKwkJCWl2ID0ga2V5ID0gaW5idWYgPSBvdXRidWYg PSBOVUxMOworKwkJCX0JCisrCQl9CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkK KysJfQorKworK3N0YXRpYyB2b2lkIGNjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJewor KwljaGFyIGJ1ZlsyMDAwNDhdOworKwljaGFyIGxidWZbMjAwMDQ4XTsKKysJY2hhciAqa2V5d29y ZCwgKnZhbHVlOworKwlsb25nIGw7CisrCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEwsICpOb25j ZSA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKkFkYXRhID0gTlVMTCwgKlBheWxvYWQgPSBOVUxM OworKwl1bnNpZ25lZCBjaGFyICpDVCA9IE5VTEw7CisrCWludCBQbGVuID0gLTEsIE5sZW4gPSAt MSwgVGxlbiA9IC0xLCBBbGVuID0gLTE7CisrCWludCBkZWNyID0gMDsKKysJRVZQX0NJUEhFUl9D VFggY3R4OworKwljb25zdCBFVlBfQ0lQSEVSICpjY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9j dHhfaW5pdCgmY3R4KTsKKysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5V TEwpCisrCQl7CisrCQljaGFyICpwOworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlyZWRvOgorKwkJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGlu dWU7CisrCisrCQkvKiBJZiBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyB6YXAgdGhlbSAq LworKwkJaWYgKGtleXdvcmRbMF0gPT0gJ1snKQorKwkJCXsKKysJCQlrZXl3b3JkKys7CisrCQkJ cCA9IHN0cmNocih2YWx1ZSwgJ10nKTsKKysJCQlpZiAocCkKKysJCQkJKnAgPSAwOworKwkJCX0K KysJCS8qIFNlZSBpZiB3ZSBoYXZlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVy cworKwkJICogaWYgc28gY29weSByZXN0IG9mIGxpbmUgYmFjayB0byBidWZmZXIgYW5kIHJlZG8g bGF0ZXIuCisrCQkgKi8KKysJCXAgPSBzdHJjaHIodmFsdWUsICcsJyk7CisrCQlpZiAocCkKKysJ CQl7CisrCQkJKnAgPSAwOworKwkJCXN0cmNweShidWYsIHAgKyAxKTsKKysJCQlzdHJjYXQoYnVm LCAiXG4iKTsKKysJCQlkZWNyID0gMTsKKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJQ bGVuIikpCisrCQkJUGxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCJObGVuIikpCisrCQkJTmxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCJUbGVuIikpCisrCQkJVGxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCJBbGVuIikpCisrCQkJQWxlbiA9IGF0b2kodmFsdWUpOworKwkJaWYg KHApCisrCQkJZ290byByZWRvOworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJ eworKwkJCWlmIChLZXkpCisrCQkJCU9QRU5TU0xfZnJlZShLZXkpOworKwkJCUtleSA9IGhleDJi aW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsID09IDE2KQorKwkJCQljY20gPSBFVlBfYWVzXzEy OF9jY20oKTsKKysJCQllbHNlIGlmIChsID09IDI0KQorKwkJCQljY20gPSBFVlBfYWVzXzE5Ml9j Y20oKTsKKysJCQllbHNlIGlmIChsID09IDMyKQorKwkJCQljY20gPSBFVlBfYWVzXzI1Nl9jY20o KTsKKysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQg S2V5IGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsIk5vbmNlIikpCisrCQkJeworKwkJCWlmIChOb25jZSkKKysJCQkJ T1BFTlNTTF9mcmVlKE5vbmNlKTsKKysJCQlOb25jZSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwor KwkJCWlmIChsICE9IE5sZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNp c3RlbnQgbm9uY2UgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiUGF5bG9hZCIpICYmICFkZWNyKQorKwkJCXsKKysJ CQlQYXlsb2FkID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKFBsZW4gJiYgbCAhPSBQ bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxvYWQg bGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwiQWRhdGEiKSkKKysJCQl7CisrCQkJaWYgKEFkYXRhKQorKwkJCQlPUEVO U1NMX2ZyZWUoQWRhdGEpOworKwkJCUFkYXRhID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJ aWYgKEFsZW4gJiYgbCAhPSBBbGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5j b25zaXN0ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQ1QiKSAmJiBkZWNyKQorKwkJCXsKKysJ CQlDVCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IChQbGVuICsgVGxlbikp CisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4i KTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWlmIChQYXlsb2FkKQorKwkJCXsK KysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAxKTsKKysJCQlGSVBT X2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsK KysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgVGxl biwgMCk7CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwgTm9uY2UsIDEpOwor KworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOworKwkJCUZJUFNfY2lw aGVyKCZjdHgsIE5VTEwsIEFkYXRhLCBBbGVuKTsKKysJCQlDVCA9IE9QRU5TU0xfbWFsbG9jKFBs ZW4gKyBUbGVuKTsKKysJCQlGSVBTX2NpcGhlcigmY3R4LCBDVCwgUGF5bG9hZCwgUGxlbik7Cisr CQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIFRsZW4s CisrCQkJCQkJQ1QgKyBQbGVuKTsKKysJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBDVCwgUGxlbiArIFRs ZW4sIG91dCwgMCk7CisrCQkJT1BFTlNTTF9mcmVlKENUKTsKKysJCQlPUEVOU1NMX2ZyZWUoUGF5 bG9hZCk7CisrCQkJQ1QgPSBQYXlsb2FkID0gTlVMTDsKKysJCQl9CisrCQlpZiAoQ1QpCisrCQkJ eworKwkJCWludCBydjsKKysJCQlpbnQgbGVuID0gUGxlbiA9PSAwID8gMTogUGxlbjsKKysJCQlG SVBTX2NpcGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAwKTsKKysJCQlGSVBTX2NpcGhl cl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKKysJCQlG SVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKKysJCQkJCQlU bGVuLCBDVCArIFBsZW4pOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5v bmNlLCAwKTsKKysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKKysJCQlG SVBTX2NpcGhlcigmY3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7CisrCQkJUGF5bG9hZCA9IE9QRU5T U0xfbWFsbG9jKGxlbik7CisrCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBQYXlsb2FkLCBDVCwg UGxlbik7CisrCQkJaWYgKHJ2ID49IDApCisrCQkJCXsKKysJCQkJaWYgKHJ2ID09IDApCisrCQkJ CQlQYXlsb2FkWzBdID0gMDsKKysJCQkJZnB1dHMoIlJlc3VsdCA9IFBhc3MiIFJFU1BfRU9MLCBv dXQpOworKwkJCQlPdXRwdXRWYWx1ZSgiUGF5bG9hZCIsIFBheWxvYWQsIGxlbiwgb3V0LCAwKTsK KysJCQkJfQorKwkJCWVsc2UKKysJCQkJZnB1dHMoIlJlc3VsdCA9IEZhaWwiIFJFU1BfRU9MLCBv dXQpOworKwkJCU9QRU5TU0xfZnJlZShDVCk7CisrCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOwor KwkJCUNUID0gUGF5bG9hZCA9IE5VTEw7CisrCQkJfQorKwkJfQorKwlpZiAoS2V5KQorKwkJT1BF TlNTTF9mcmVlKEtleSk7CisrCWlmIChOb25jZSkKKysJCU9QRU5TU0xfZnJlZShOb25jZSk7Cisr CWlmIChBZGF0YSkKKysJCU9QRU5TU0xfZnJlZShBZGF0YSk7CisrCUZJUFNfY2lwaGVyX2N0eF9j bGVhbnVwKCZjdHgpOworKwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19nY210 ZXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7CisrCWludCBlbmNyeXB0OworKwlpbnQgeHRz ID0gMCwgY2NtID0gMDsKKysJRklMRSAqaW4sICpvdXQ7CisrCWlmIChhcmdjID09IDQpCisrCQl7 CisrCQlpbiA9IGZvcGVuKGFyZ3ZbMl0sICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlm cHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgx KTsKKysJCQl9CisrCQlvdXQgPSBmb3Blbihhcmd2WzNdLCAidyIpOworKwkJaWYgKCFvdXQpCisr CQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7 CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ2MgPT0gMikKKysJCXsK KysJCWluID0gc3RkaW47CisrCQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJ CWZwcmludGYoc3RkZXJyLCIlcyBbLWVuY3J5cHR8LWRlY3J5cHRdXG4iLGFyZ3ZbMF0pOworKwkJ ZXhpdCgxKTsKKysJCX0KKysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysJaWYoIXN0cmNtcChhcmd2 WzFdLCItZW5jcnlwdCIpKQorKwkJZW5jcnlwdCA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCItZW5jcnlwdElWZXh0IikpCisrCQllbmNyeXB0ID0gMjsKKysJZWxzZSBpZighc3RyY21w KGFyZ3ZbMV0sIi1kZWNyeXB0IikpCisrCQllbmNyeXB0ID0gMDsKKysJZWxzZSBpZighc3RyY21w KGFyZ3ZbMV0sIi1jY20iKSkKKysJCWNjbSA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFd LCIteHRzIikpCisrCQl4dHMgPSAxOworKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwi RG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwkJZXhpdCgxKTsKKysJCX0KKysK KysJaWYgKGNjbSkKKysJCWNjbXRlc3QoaW4sIG91dCk7CisrCWVsc2UgaWYgKHh0cykKKysJCXh0 c3Rlc3QoaW4sIG91dCk7CisrCWVsc2UKKysJCWdjbXRlc3QoaW4sIG91dCwgZW5jcnlwdCk7Cisr CisrCWlmIChhcmdjID09IDQpCisrCQl7CisrCQlmY2xvc2UoaW4pOworKwkJZmNsb3NlKG91dCk7 CisrCQl9CisrCisrCXJldHVybiAwOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzM3MzUyMjYx ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJ MjAxMi0wNy0xMiAyMTo0OToyNS4zMzczNTIyNjEgKzAyMDAKK0BAIC0wLDAgKzEsMjMwIEBACisr LyoKKysgKiBDcnVkZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1Qg dGVzdHZlY3RvciBmaWxlcworKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0 LgorKyAqCisrICogTm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92 ZXJ5XyBzcGVjaWZpYyBmb3JtYXQKKysgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1l bnQgIlRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgorKyAqIFZhbGlkYXRpb24gU3lzdGVtIChS TkdWUykiLCBNYXkgMjUsIDIwMDQuCisrICoKKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJO byBGSVBTIFJORyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuIDA7CisrfQorKyNlbHNlCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKyt2b2lkIHZzdCgpCisr ICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hh ciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWdu ZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVuOwor KworKyAgICBrZXlsZW4gPSAwOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1Zixz dGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAo YnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0 cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2Ug aWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7Cisr CWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGlu dWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4 MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4p OworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi RFQiKSkKKysJICAgIHsKKysJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAo aSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIp OworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi ViIpKQorKwkgICAgeworKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkg IT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwor KwkJcmV0dXJuOworKwkJfQorKworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9Cisr CisrCSAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3g5MzFf c2VlZCh2LDE2KTsKKysJICAgIEZJUFNfeDkzMV9zZXRfZHQoZHQpOworKwkgICAgaWYgKEZJUFNf eDkzMV9ieXRlcyhyZXQsMTYpIDw9IDApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9y IGdldHRpbmcgUFJORyB2YWx1ZVxuIik7CisrCSAgICAgICAgcmV0dXJuOworKwkgICAgICAgIH0K KysKKysJICAgIHB2KCJSIixyZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAg ICBrZXkgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsK KysJICAgIE9QRU5TU0xfZnJlZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9Cisr ICAgIH0KKysKKyt2b2lkIG1jdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0g TlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIg KmR0ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1Zlsx MDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7 CisrICAgIGxvbmcgaSwga2V5bGVuOworKyAgICBpbnQgajsKKysKKysgICAga2V5bGVuID0gMDsK KysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsK KysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIs IDEzKSkKKysJCWtleWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTIt S2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FF UyAyNTYtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUoJmtl eXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtl eXdvcmQsIktleSIpKQorKwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7Cisr CSAgICBpZiAoaSAhPSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQg a2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJCX0K KysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7CisrCSAg ICBkdD1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlm cHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0K KysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJICAg IHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysK KysJICAgIGlmICgha2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlzc2lu ZyBrZXkgb3IgRFRcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU194OTMxX3Nl dF9rZXkoa2V5LCBrZXlsZW4pOworKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7CisrCSAgICBm b3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKysJCXsKKysJCSAgICBGSVBTX3g5MzFfc2V0X2R0 KGR0KTsKKysJCSAgICBpZiAoRklQU194OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCQl7Cisr CQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOworKwkJICAg ICAgICByZXR1cm47CisrCQkgICAgICAgIH0KKysJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KKysJ CSAgICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCisrCQkJeworKwkJCWR0W2pdKys7CisrCQkJ aWYgKGR0W2pdKQorKwkJCQlicmVhazsKKysJCQl9CisrCQl9CisrCisrCSAgICBwdigiUiIscmV0 LDE2KTsKKysJICAgIE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJICAg IE9QRU5TU0xfZnJlZShkdCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUo dik7CisrCSAgICB2ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1haW4o aW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7Cisr CWZwcmludGYoc3RkZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7Cisr CX0KKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7 CisrCWV4aXQoMSk7CisrCX0KKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIGlmICghRklQ U194OTMxX3Rlc3RfbW9kZSgpKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGlu ZyBQUk5HIHRlc3QgbW9kZVxuIik7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOwor Kwl9CisrICAgIGlmKCFzdHJjbXAoYXJndlsxXSwibWN0IikpCisrCW1jdCgpOworKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwidnN0IikpCisrCXZzdCgpOworKyAgICBlbHNlCisrCXsKKysJ ZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhp dCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYworLS0tIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxMi0wNy0xMiAy MTo0OToyNS4zMzczNTIyNjEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfcnNhZ3Rlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNzM1MjI2MSArMDIwMAor QEAgLTAsMCArMSwzOTAgQEAKKysvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5 IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wK KysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDUsMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJl IHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBj cnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNs dWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9i aW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFj Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4K KysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICBy ZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisr aW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50 a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBC SUdOVU0gKlhwLAorKwkJQklHTlVNICplKTsKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklM RSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpY cSk7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmlu ID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKworKwlpZighRklQU19t b2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7Cisr CQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9 IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91 dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJy b3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKwor KwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0g c3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisr CQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNB X1RFU1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUg KmluKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICpr ZXl3b3JkLCAqdmFsdWU7CisrCVJTQSAqcnNhID0gTlVMTDsKKysJQklHTlVNICpYcDEgPSBOVUxM LCAqWHAyID0gTlVMTCwgKlhwID0gTlVMTDsKKysJQklHTlVNICpYcTEgPSBOVUxMLCAqWHEyID0g TlVMTCwgKlhxID0gTlVMTDsKKysJQklHTlVNICplID0gTlVMTDsKKysJaW50IHJldCA9IDA7Cisr CWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9N QVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVM RU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysK KysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7 CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9 IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29r IGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElm IG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAq LworKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGlu ZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQor KworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkq cCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2Ug ZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkK KysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09 ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisr CQlpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAxIikpCisrCQkJeworKwkJCWlmIChYcDEgfHwgIWRv X2hleDJibigmWHAxLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cDIiKSkKKysJCQl7CisrCQkJaWYgKFhwMiB8fCAh ZG9faGV4MmJuKCZYcDIsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhwIikpCisrCQkJeworKwkJCWlmIChYcCB8fCAh ZG9faGV4MmJuKCZYcCx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHExIikpCisrCQkJeworKwkJCWlmIChYcTEgfHwg IWRvX2hleDJibigmWHExLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTIiKSkKKysJCQl7CisrCQkJaWYgKFhxMiB8 fCAhZG9faGV4MmJuKCZYcTIsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0K KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhxIikpCisrCQkJeworKwkJCWlmIChYcSB8 fCAhZG9faGV4MmJuKCZYcSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoZSB8fCAh ZG9faGV4MmJuKCZlLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwMSIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAicDIiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgInAiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInExIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJxMiIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi cSIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQor KwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQorKwkJCWNv bnRpbnVlOworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGlu ZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCisrCQkJeworKwkJ CXJzYSA9IEZJUFNfcnNhX25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQlnb3RvIGVycm9yOwor KwkJCWlmICghcnNhX3ByaW50a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkKKysJCQkJ Z290byBlcnJvcjsKKysJCQlCTl9mcmVlKFhwMSk7CisrCQkJWHAxID0gTlVMTDsKKysJCQlCTl9m cmVlKFhwMik7CisrCQkJWHAyID0gTlVMTDsKKysJCQlCTl9mcmVlKFhwKTsKKysJCQlYcCA9IE5V TEw7CisrCQkJQk5fZnJlZShlKTsKKysJCQllID0gTlVMTDsKKysJCQl9CisrCisrCQlpZiAocnNh ICYmIFhxMSAmJiBYcTIgJiYgWHEpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50a2V5MihvdXQs IHJzYSwgWHExLCBYcTIsIFhxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9mcmVlKFhxMSk7 CisrCQkJWHExID0gTlVMTDsKKysJCQlCTl9mcmVlKFhxMik7CisrCQkJWHEyID0gTlVMTDsKKysJ CQlCTl9mcmVlKFhxKTsKKysJCQlYcSA9IE5VTEw7CisrCQkJRklQU19yc2FfZnJlZShyc2EpOwor KwkJCXJzYSA9IE5VTEw7CisrCQkJfQorKwkJfQorKworKwlyZXQgPSAxOworKworKwllcnJvcjoK KysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxp bmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCisrCWlmIChYcDEpCisrCQlCTl9m cmVlKFhwMSk7CisrCWlmIChYcDIpCisrCQlCTl9mcmVlKFhwMik7CisrCWlmIChYcCkKKysJCUJO X2ZyZWUoWHApOworKwlpZiAoWHExKQorKwkJQk5fZnJlZShYcTEpOworKwlpZiAoWHExKQorKwkJ Qk5fZnJlZShYcTEpOworKwlpZiAoWHEyKQorKwkJQk5fZnJlZShYcTIpOworKwlpZiAoWHEpCisr CQlCTl9mcmVlKFhxKTsKKysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKwlpZiAocnNhKQorKwkJ RklQU19yc2FfZnJlZShyc2EpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoK KysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUg JWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCBy c2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVN ICpYcDIsIEJJR05VTSAqWHAsCisrCQlCSUdOVU0gKmUpCisrCXsKKysJaW50IHJldCA9IDA7Cisr CUJJR05VTSAqcDEgPSBOVUxMLCAqcDIgPSBOVUxMOworKwlwMSA9IEJOX25ldygpOworKwlwMiA9 IEJOX25ldygpOworKwlpZiAoIXAxIHx8ICFwMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICgh UlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhwMiwgWHAs CisrCQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwgZSwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwor Kwlkb19ibl9wcmludF9uYW1lKG91dCwgInAxIiwgcDEpOworKwlkb19ibl9wcmludF9uYW1lKG91 dCwgInAyIiwgcDIpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnApOworKwor KwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHAxKQorKwkJQk5fZnJlZShwMSk7CisrCWlm IChwMikKKysJCUJOX2ZyZWUocDIpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrc3RhdGlj IGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhxMSwg QklHTlVNICpYcTIsIEJJR05VTSAqWHEpCisrCXsKKysJaW50IHJldCA9IDA7CisrCUJJR05VTSAq cTEgPSBOVUxMLCAqcTIgPSBOVUxMOworKwlxMSA9IEJOX25ldygpOworKwlxMiA9IEJOX25ldygp OworKwlpZiAoIXExIHx8ICFxMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghUlNBX1g5MzFf ZGVyaXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJ CQkJCVhxMSwgWHEyLCBYcSwgTlVMTCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKworKwlkb19i bl9wcmludF9uYW1lKG91dCwgInExIiwgcTEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEy IiwgcTIpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOworKwlkb19ibl9w cmludF9uYW1lKG91dCwgIm4iLCByc2EtPm4pOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgImQi LCByc2EtPmQpOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHExKQorKwkJQk5f ZnJlZShxMSk7CisrCWlmIChxMikKKysJCUJOX2ZyZWUocTIpOworKworKwlyZXR1cm4gcmV0Owor Kwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhc3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlw c19yc2FzdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3Jz YXN0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNzM1MjI2MSArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTItMDctMTIg MjE6NDk6MjUuMzM3MzUyMjYxICswMjAwCitAQCAtMCwwICsxLDM3MCBAQAorKy8qIGZpcHNfcnNh c3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGlj ZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBj cnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5 cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBU aW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNB IHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1 ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxF ICppbiwgaW50IFNhbHRsZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwg UlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9u ZyBNc2dsZW4sIGludCBTYWx0bGVuKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9 IDEsIFNhbHRsZW4gPSAtMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlk b19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoKGFyZ2MgPiAy KSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IGF0 b2koYXJndlsyXSk7CisrCQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdvdG8gZW5kOworKwkJ CX0KKysJCWFyZ2MgLT0gMjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxzZSBpZiAoKGFyZ2Mg PiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IC0y OworKwkJYXJnYy0tOworKwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJ aW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlp ZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFy Z3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQor KworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGlu aXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIXJz YV9zdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgUlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJ fQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19w cmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2Uo aW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKwor KwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEw MjQwCisrCisraW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikK KysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29y ZCwgKnZhbHVlOworKwlSU0EgKnJzYSA9IE5VTEw7CisrCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5V TEw7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7CisrCWxvbmcgTXNnbGVuID0gLTE7Cisr CWludCBrZXlsZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKKysJaW50IHJldCA9IDA7Cisr CWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9N QVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVM RU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysK KysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7 CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9 IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29r IGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElm IG5vID0ganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGlu ZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQor KworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkq cCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2Ug ZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkK KysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09 ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisr CQkvKiBMb29rIGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLworKworKwkJaWYgKCFz dHJjbXAoa2V5d29yZCwgIlttb2QiKSkKKysJCQl7CisrCQkJcCA9IHZhbHVlICsgc3RybGVuKHZh bHVlKSAtIDE7CisrCQkJaWYgKCpwICE9ICddJykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJ CQkqcCA9IDA7CisrCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKGtleWxlbiA8IDAp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiU0hBQWxnIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQor KwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hB MjI0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2 YWx1ZSwgIlNIQTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOworKwkJCWVsc2UgaWYg KCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKKysJ CQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRnc3QgPSBFVlBfc2hh NTEyKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJIkZB VEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJCQkJdmFsdWUpOwor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAn OworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJaWYgKCFNc2cpCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7 CisrCisrCQkvKiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0 IHB1YmxpYworKwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KKysJ CSAqLworKworKwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKKysJCQl7CisrCQkJQklH TlVNICpibl9lOworKwkJCWlmIChyc2EpCisrCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJCQly c2EgPSBGSVBTX3JzYV9uZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJCQkJZ290byBlcnJvcjsKKysJ CQlibl9lID0gQk5fbmV3KCk7CisrCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAw eDEwMDEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5 X2V4KHJzYSwga2V5bGVuLCBibl9lLCBOVUxMKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9m cmVlKGJuX2UpOworKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKKysJCQlkb19ibl9wcmludChvdXQs IHJzYS0+bik7CisrCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQob3V0 LCByc2EtPmUpOworKwkJCWZwdXRzKCJcbiIsIG91dCk7CisrCQkJY3VycmVudF9rZXlsZW4gPSBr ZXlsZW47CisrCQkJfQorKworKwkJaWYgKE1zZyAmJiBkZ3N0KQorKwkJCXsKKysJCQlpZiAoIXJz YV9wcmludHNpZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCisrCQkJCQkJCQlTYWx0bGVu KSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBO VUxMOworKwkJCX0KKysKKysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCWlm IChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQor KwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAocnNhKQorKwkJRklQU19yc2FfZnJlZShy c2EpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50Zihz dGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwor KworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklM RSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAq TXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVu c2lnbmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7CisrCWludCBpLCBzaWdsZW47CisrCS8qIEVWUF9Q S0VZIHN0cnVjdHVyZSAqLworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NUWCBjdHg7CisrCXBr LnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhOworKworKwlzaWdsZW4g PSBSU0Ffc2l6ZShyc2EpOworKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOworKwlp ZiAoIXNpZ2J1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsK KysKKysJaWYgKFNhbHRsZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3Mo JmN0eCwKKysJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Cisr CQl9CisrCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdz KCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7CisrCWlmICghRVZQX1NpZ25Jbml0X2V4 KCZjdHgsIGRnc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnblVwZGF0 ZSgmY3R4LCBNc2csIE1zZ2xlbikpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduRmlu YWwoJmN0eCwgc2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKKysJCWdvdG8g ZXJyb3I7CisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJZnB1dHMoIlMgPSAi LCBvdXQpOworKworKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCisrCQlmcHJpbnRmKG91 dCwgIiUwMlgiLCBzaWdidWZbaV0pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKworKwlyZXQg PSAxOworKworKwllcnJvcjoKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYworLS0tIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAxMi0wNy0x MiAyMTo0OToyNS4zMzczNTIyNjEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNzM1MjI2MSArMDIw MAorQEAgLTAsMCArMSwzNzcgQEAKKysvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KKysvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVk ZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlv Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Cisr CisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0 dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2lu dCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Cisrc3RhdGljIGlu dCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQlj b25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAor KwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9 IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKwlpbnQgU2FsdGxlbiA9IC0xOworKworKwlpZigh RklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBl bmQ7CisrCQl9CisrCisrCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJn dlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVu IDwgMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxl bmd0aFxuIik7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJndiAr PSAyOworKwkJfQorKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJn dlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7Cisr CQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9 IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91 dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJy b3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBl cnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJ ZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAm JiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0 ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNk ZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpv dXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVi dWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwljb25zdCBFVlBfTUQgKmRn c3QgPSBOVUxMOworKwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7CisrCXVuc2lnbmVkIGNo YXIgKk1zZyA9IE5VTEwsICpTID0gTlVMTDsKKysJbG9uZyBNc2dsZW4sIFNsZW47CisrCWludCBy ZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2Mo UlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVT VF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8g ZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwg aW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJ CWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKwor KwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Cisr CisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBq dXN0IGNvcHkgKi8KKysJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJCQlpZiAo ZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVl OworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFj ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAw OworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFk aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBm cm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdo aWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0g PSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQl7CisrCQkJaWYgKCFk b19oZXgyYm4oJm4sdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4o JmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwg IlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2 YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYg KCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJ CQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hh Mzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0 ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwK KysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJ CXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZh bHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlm ICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlMiKSkKKysJCQl7CisrCQkJaWYgKFMpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOwor KwkJCVMgPSBoZXgyYmluX20odmFsdWUsICZTbGVuKTsKKysJCQlpZiAoIVMpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0 IikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJ CWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBk Z3N0KQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCisrCQkJ CQlNc2csIE1zZ2xlbiwgUywgU2xlbiwgU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJ T1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoUyk7 CisrCQkJUyA9IE5VTEw7CisrCQkJfQorKworKwkJfQorKworKworKwlyZXQgPSAxOworKworKwor KwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsK KysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChuKQorKwkJ Qk5fZnJlZShuKTsKKysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKworKwlyZXR1cm4gcmV0Owor KworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJv ciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9 CisrCisrc3RhdGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBC SUdOVU0gKmUsCisrCQljb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2cs IGxvbmcgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxl bikKKysJeworKwlpbnQgcmV0ID0gMCwgcjsKKysJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBz dHJ1Y3R1cmVzICovCisrCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7CisrCUVWUF9QS0VZIHBrOwor KwlFVlBfTURfQ1RYIGN0eDsKKysJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKysJcnNhX3B1 YmtleSA9IEZJUFNfcnNhX25ldygpOworKwlpZiAoIXJzYV9wdWJrZXkpCisrCQlnb3RvIGVycm9y OworKwlyc2FfcHVia2V5LT5uID0gQk5fZHVwKG4pOworKwlyc2FfcHVia2V5LT5lID0gQk5fZHVw KGUpOworKwlpZiAoIXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCisrCQlnb3RvIGVy cm9yOworKwlway50eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYV9wdWJr ZXk7CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4gPj0gMCkK KysJCXsKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURfQ1RYX0ZM QUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNhbHRsZW4g PT0gLTIpCisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSk7CisrCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCisr CQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4p KQorKwkJZ290byBlcnJvcjsKKysKKysJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVu LCAmcGspOworKworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyIDwg MCkKKysJCWdvdG8gZXJyb3I7CisrCUVSUl9jbGVhcl9lcnJvcigpOworKworKwlpZiAociA9PSAw KQorKwkJZnB1dHMoIlJlc3VsdCA9IEZcbiIsIG91dCk7CisrCWVsc2UKKysJCWZwdXRzKCJSZXN1 bHQgPSBQXG4iLCBvdXQpOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHJzYV9w dWJrZXkpCisrCQlGSVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOworKwlpZiAoYnVmKQorKwkJT1BF TlNTTF9mcmVlKGJ1Zik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTItMDctMTIgMjE6 NDk6MjUuMzM4MzUyMjg0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3NoYXRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzODM1MjI4NCArMDIwMAorQEAg LTAsMCArMSwzODggQEAKKysvKiBmaXBzX3NoYXRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAq IHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgor KyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4g YnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlw ZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK Kyt7CisrICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7CisrICAgIHJldHVy bigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0 aWMgaW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKKytzdGF0aWMgaW50IHByaW50 X2Rnc3QoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqTXNn LCBpbnQgTXNnbGVuKTsKKytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQs IEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKKysKKytp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAq b3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEp KQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJ aWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJn dlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNl CisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsK KysJCX0KKysKKysJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBl bmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkK KysJCWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJ CWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91 dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFNIQV9URVNUX01BWF9C SVRTCTEwMjQwMAorKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhf QklUUyA+PiAzKSAqIDIpICsgMTAwKQorKworK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxF ICppbikKKysJeworKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKKysJY2hhciAqbGluZWJ1Ziwg Km9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJdW5zaWduZWQg Y2hhciAqTXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOworKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4g PSAtMSwgU2VlZExlbiA9IC0xOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKwor KwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5l YnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGlu ZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKworKwl3aGlsZSAoZmdldHMo b2xpbmVidWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJ CXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8q IFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLwor KwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMg d2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsK KysJCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlx ID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsK KysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZh bHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZh bHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJ cCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3Ry Y21wKGtleXdvcmQsIltMIikgJiYgKnA9PSddJykKKysJCQl7CisrCQkJc3dpdGNoIChhdG9pKHZh bHVlKSkKKysJCQkJeworKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOworKwkJ CQljYXNlIDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOworKwkJCQljYXNlIDMyOiBtZD1FVlBf c2hhMjU2KCk7IGJyZWFrOworKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOwor KwkJCQljYXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOworKwkJCQlkZWZhdWx0OiBnb3Rv IHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiTGVuIikpCisrCQkJeworKwkJCWlmIChMZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJTGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKExlbiA8IDApCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLwor KwkJCWlmIChMZW4gJiAweDcpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKExlbiA+ IFNIQV9URVNUX01BWF9CSVRTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1zZ0xlbiA9 IExlbiA+PiAzOworKwkJCX0KKysKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIp KQorKwkJCXsKKysJCQlsb25nIHRtcGxlbjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisr CQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOworKwkJCWlmICghTXNnKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlNlZWQiKSkKKysJCQl7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0t dmFsdWUpID0gJzAnOworKwkJCWlmIChTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CVNlZWQgPSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKKysJCQlpZiAoIVNlZWQpCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi TUQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKwor KwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4g Pj0gMCkpCisrCQkJeworKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikp CisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVM TDsKKysJCQlNc2dMZW4gPSAtMTsKKysJCQlMZW4gPSAtMTsKKysJCQl9CisrCQllbHNlIGlmICht ZCAmJiBTZWVkICYmIChTZWVkTGVuID4gMCkpCisrCQkJeworKwkJCWlmICghcHJpbnRfbW9udGUo bWQsIG91dCwgU2VlZCwgU2VlZExlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9m cmVlKFNlZWQpOworKwkJCVNlZWQgPSBOVUxMOworKwkJCVNlZWRMZW4gPSAtMTsKKysJCQl9Cisr CQorKworKwkJfQorKworKworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJaWYgKG9s aW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlP UEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChNc2cpCisrCQlPUEVOU1NMX2ZyZWUoTXNnKTsK KysJaWYgKFNlZWQpCisrCQlPUEVOU1NMX2ZyZWUoU2VlZCk7CisrCisrCXJldHVybiByZXQ7Cisr CisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9y IHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0K KysKKytzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwK KysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKKysJeworKwlpbnQgaSwgbWRsZW47 CisrCXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKKysJaWYgKCFFVlBfRGlnZXN0 KE1zZywgTXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKKysJ CXsKKysJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCWZvciAoaSA9IDA7IGkgPCBt ZGxlbjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOworKwlmcHV0cygiXG4i LCBvdXQpOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29u c3QgRVZQX01EICptZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNl ZWRMZW4pCisrCXsKKysJdW5zaWduZWQgaW50IGksIGosIGs7CisrCWludCByZXQgPSAwOworKwlF VlBfTURfQ1RYIGN0eDsKKysJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKKysJdW5z aWduZWQgaW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47CisrCisrCUVWUF9NRF9DVFhfaW5p dCgmY3R4KTsKKysKKysJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCisrCQltbGVuID0g U2VlZExlbjsKKysJZWxzZQorKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKKysKKysJbTEgPSBP UEVOU1NMX21hbGxvYyhtbGVuKTsKKysJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKKysJbTMg PSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKKysKKysJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQorKwkJ Z290byBtY19lcnJvcjsKKysKKysJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKKysJ bWVtY3B5KG0xLCBTZWVkLCBTZWVkTGVuKTsKKysJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsK KysJbWVtY3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysK KysJZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQorKwkJeworKwkJZm9yIChpID0gMDsgaSA8IDEw MDA7IGkrKykKKysJCQl7CisrCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwor KwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKKysJCQlFVlBfRGlnZXN0VXBk YXRlKCZjdHgsIG0yLCBtMmxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNs ZW4pOworKwkJCXAgPSBtMTsKKysJCQltMSA9IG0yOworKwkJCW0xbGVuID0gbTJsZW47CisrCQkJ bTIgPSBtMzsKKysJCQltMmxlbiA9IG0zbGVuOworKwkJCW0zID0gcDsKKysJCQlFVlBfRGlnZXN0 RmluYWxfZXgoJmN0eCwgbTMsICZtM2xlbik7CisrCQkJfQorKwkJZnByaW50ZihvdXQsICJDT1VO VCA9ICVkXG4iLCBqKTsKKysJCWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCQlmb3IgKGsgPSAwOyBr IDwgbTNsZW47IGsrKykKKysJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7CisrCQlmcHV0 cygiXG5cbiIsIG91dCk7CisrCQltZW1jcHkobTEsIG0zLCBtM2xlbik7CisrCQltZW1jcHkobTIs IG0zLCBtM2xlbik7CisrCQltMWxlbiA9IG0ybGVuID0gbTNsZW47CisrCQl9CisrCisrCXJldCA9 IDE7CisrCisrCW1jX2Vycm9yOgorKwlpZiAobTEpCisrCQlPUEVOU1NMX2ZyZWUobTEpOworKwlp ZiAobTIpCisrCQlPUEVOU1NMX2ZyZWUobTIpOworKwlpZiAobTMpCisrCQlPUEVOU1NMX2ZyZWUo bTMpOworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCXJldHVybiByZXQ7Cisr CX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMv Zmlwc191dGwuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwu aAorLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBzCTIw MTItMDctMTIgMjE6NDk6MjUuMzM4MzUyMjg0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzM4MzUyMjg0ICsw MjAwCitAQCAtMCwwICsxLDM0MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworK3Zv aWQgZG9fcHJpbnRfZXJyb3JzKHZvaWQpCisrCXsKKysJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7 CisrCWludCBsaW5lLCBmbGFnczsKKysJdW5zaWduZWQgbG9uZyBsOworKwl3aGlsZSAoKGwgPSBF UlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0l ZCIKKysJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCisrCQkJbCwgRVJSX0dFVF9MSUIobCks IEVSUl9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCisrCQkJZmlsZSwgbGluZSwgZmxh Z3MgJiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7CisrCQl9CisrCX0KKysKKytpbnQgaGV4 MmJpbihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGlu dCBuMSwgbjI7CisrICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9MCxuMj0w IDsgaW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQorKwl7IC8qIGZpcnN0IGJ5dGUgKi8KKysJ aWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBjaCA9IGluW24x KytdIC0gJzAnOworKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicp KQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgoaW5bbjFdID49 ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEw OworKwllbHNlCisrCSAgICByZXR1cm4gLTE7CisrCWlmKCFpbltuMV0pCisrCSAgICB7CisrCSAg ICBvdXRbbjIrK109Y2g7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJb3V0W24yXSA9IGNoIDw8 IDQ7CisrCS8qIHNlY29uZCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24x XSA8PSAnOScpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24x XSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnQScg KyAxMDsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJ ICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJuIC0xOwor KwlvdXRbbjIrK10gfD0gY2g7CisrCX0KKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisrdW5z aWduZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQorKwl7Cisr CXVuc2lnbmVkIGNoYXIgKnA7CisrCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEp LzIpOworKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOworKwlyZXR1cm4gcDsKKysJfQorKworK2lu dCBkb19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQorKwl7CisrCXVuc2lnbmVk IGNoYXIgKnA7CisrCWxvbmcgcGxlbjsKKysJaW50IHIgPSAwOworKwlwID0gaGV4MmJpbl9tKGlu LCAmcGxlbik7CisrCWlmICghcCkKKysJCXJldHVybiAwOworKwlpZiAoISpwcikKKysJCSpwciA9 IEJOX25ldygpOworKwlpZiAoISpwcikKKysJCXJldHVybiAwOworKwlpZiAoQk5fYmluMmJuKHAs IHBsZW4sICpwcikpCisrCQlyID0gMTsKKysJT1BFTlNTTF9mcmVlKHApOworKwlyZXR1cm4gcjsK KysJfQorKworK2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCisrCXsKKysJ aW50IGxlbiwgaTsKKysJdW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMo Ym4pOworKwlpZiAobGVuID09IDApCisrCQl7CisrCQlmcHV0cygiMDAiLCBvdXQpOworKwkJcmV0 dXJuIDE7CisrCQl9CisrCisrCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7CisrCWlmICghdG1w KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJQk5fYm4yYmluKGJuLCB0bXApOworKwlmb3IgKGkgPSAw OyBpIDwgbGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOworKwlPUEVO U1NMX2ZyZWUodG1wKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZG9fYm5fcHJpbnRfbmFt ZShGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IHI7 CisrCWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKKysJciA9IGRvX2JuX3ByaW50KG91dCwg Ym4pOworKwlpZiAoIXIpCisrCQlyZXR1cm4gMDsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0 dXJuIDE7CisrCX0KKysKKytpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwg Y2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29yZCwgKnZh bHVlLCAqcCwgKnE7CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdvcmQgPSBs aW5lYnVmOworKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJa2V5d29yZCsrOworKworKwkvKiBMb29rIGZvciA9 IHNpZ24gKi8KKysJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAnPScg ZXhpdCAqLworKwlpZiAoIXApCisrCQlyZXR1cm4gMDsKKysKKysJcSA9IHAgLSAxOworKworKwkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnEpKQorKwkJKnEtLSA9IDA7CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysK KysJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAt IDE7CisrCisrCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQorKwkJKnAtLSA9IDA7CisrCisrCSpwa3cgPSBrZXl3b3JkOworKwkqcHZhbCA9IHZhbHVlOwor KwlyZXR1cm4gMTsKKysJfQorKworK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQorKyAg ICB7CisrICAgIEJJR05VTSAqcD1OVUxMOworKworKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4p KQorKwlyZXR1cm4gTlVMTDsKKysKKysgICAgcmV0dXJuIHA7CisrICAgIH0KKysKKytpbnQgYmlu MmhleChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgewor KyAgICBpbnQgbjEsIG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4x PTAsbjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKKysJeworKwljaD1pbltuMV0gPj4gNDsKKysJaWYg KGNoIDw9IDB4MDkpCisrCSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRb bjIrK109Y2gtMTArJ2EnOworKwljaD1pbltuMV0gJiAweDBmOworKwlpZihjaCA8PSAweDA5KQor KwkgICAgb3V0W24yKytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydh JzsKKysJfQorKyAgICBvdXRbbjJdPSdcMCc7CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKwor K3ZvaWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVu KQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysKKysgICAgYmluMmhleCh2YWwsbGVu LG9idWYpOworKyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOworKyAgICB9CisrCisr LyogVG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3Rh Z2UganVzdCBjb252ZXJ0CisrICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZv cm0uIEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KKysgKiAia2V5d29yZCA9IHZhbHVl XG4iIG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcwor KyAqIGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgorKyAqLwor KworK2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJ Y2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1 Zik7CisrCWtleXdvcmQgPSBsaW5lYnVmOworKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJa2V5d29yZCsrOwor KwkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKwor KwkvKiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCisrCWlmICgh cCkKKysJCXsKKysJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKKysJCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAw OworKwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJCXN0cmNhdChvbGluZWJ1ZiwgIlxu Iik7CisrCQlyZXR1cm4gMTsKKysJCX0KKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQor KwkJKnEtLSA9IDA7CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVt b3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqdmFsdWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisr CXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAt LSA9IDA7CisrCisrCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCXN0cmNhdChvbGluZWJ1 ZiwgIiA9ICIpOworKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKKysJc3RyY2F0KG9saW5lYnVm LCAiXG4iKTsKKysKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBOQjogdGhpcyByZXR1cm4gdGhl IG51bWJlciBvZiBfYml0c18gcmVhZCAqLworK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwg aW50IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAg ICBtZW1zZXQob3V0LDAsbGVuKTsKKysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCisrCWlm KGluW25dID09ICcxJykKKysJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7CisrICAgIHJl dHVybiBsZW47CisrICAgIH0KKysKKytpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAq aW4saW50IGxlbixjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihu PTAgOyBuIDwgbGVuIDsgKytuKQorKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ ICcxJyA6ICcwJzsKKysgICAgcmV0dXJuIG47CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKyt2b2lkIFByaW50VmFsdWUo Y2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCisreworKyNpZiBWRVJCT1NF CisrICBjaGFyIG9idWZbMjA0OF07CisrICBpbnQgb2xlbjsKKysgIG9sZW4gPSBiaW4yaGV4KHZh bCwgbGVuLCBvYnVmKTsKKysgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYp OworKyNlbmRpZgorK30KKysKKyt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQg Y2hhciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCisrICAgIHsKKysgICAg Y2hhciBvYnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsKKysKKysgICAgaWYoYml0bW9kZSkKKysJ b2xlbj1iaW4yYmludCh2YWwsbGVuLG9idWYpOworKyAgICBlbHNlCisrCW9sZW49YmluMmhleCh2 YWwsbGVuLG9idWYpOworKworKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBv bGVuLCBvYnVmKTsKKysjaWYgVkVSQk9TRQorKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFn LCBvbGVuLCBvYnVmKTsKKysjZW5kaWYKKysgICAgfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v Zmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzgzNTIy ODQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVz dC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM4MzUyMjg0ICswMjAwCitAQCAtMCwwICsxLDM1OSBA QAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysg KgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3Ry aWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysgICAg Y29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBs YWludGV4dFsxNl07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07Cisr ICAgIH0gdGVzdHNbXT0KKysJeworKwl7CisrCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4 MDUsMHgwNiwweDA3LAorKwkgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgw RiB9LAorKwl7IDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKKysJICAw eDg4LDB4OTksMHhBQSwweEJCLDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKKysJeyAweDY5LDB4QzQs MHhFMCwweEQ4LDB4NkEsMHg3QiwweDA0LDB4MzAsCisrCSAgMHhEOCwweENELDB4QjcsMHg4MCww eDcwLDB4QjQsMHhDNSwweDVBIH0sCisrCX0sCisrCX07CisrCisrc3RhdGljIGludCBjb3JydXB0 X2FlczsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9hZXMoKQorKyAgICB7CisrICAgIGNvcnJ1cHRf YWVzID0gMTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCisrICAgIHsKKysg ICAgaW50IG47CisrICAgIGludCByZXQgPSAwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Cisr ICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGZvcihuPTAgOyBuIDwgMSA7 ICsrbikKKysJeworKwl1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrCisrCW1lbWNweShrZXksIHRl c3RzW25dLmtleSwgc2l6ZW9mKGtleSkpOworKwlpZiAoY29ycnVwdF9hZXMpCisrCQlrZXlbMF0r KzsKKysJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJ CWtleSwgTlVMTCwKKysJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tuXS5jaXBo ZXJ0ZXh0LAorKwkJCQkxNikgPD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7 CisrICAgIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYg KHJldCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBBRVMt Q0NNIHRlc3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9rZXlbXSA9IHsKKysJMHhjZSwweGIwLDB4MDksMHhh ZSwweGE0LDB4NDUsMHg0NCwweDUxLDB4ZmUsMHhhZCwweGYwLDB4ZTYsCisrCTB4YjMsMHg2Ziww eDQ1LDB4NTUsMHg1ZCwweGQwLDB4NDcsMHgyMywweGJhLDB4YTQsMHg0OCwweGU4CisrfTsKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fbm9uY2VbXSA9IHsKKysJMHg3NiwweDQwLDB4 NDMsMHhjNCwweDk0LDB4NjAsMHhiNworK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg Y2NtX2FkYXRhW10gPSB7CisrCTB4NmUsMHg4MCwweGRkLDB4N2YsMHgxYiwweGFkLDB4ZjMsMHhh MSwweGM5LDB4YWIsMHgyNSwweGM3LAorKwkweDVmLDB4MTAsMHhiZCwweGU3LDB4OGMsMHgyMyww eGZhLDB4MGUsMHhiOCwweGY5LDB4YWEsMHhhNSwKKysJMHgzYSwweGRlLDB4ZmIsMHhmNCwweGNi LDB4ZjcsMHg4ZiwweGU0CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fcHRb XSA9IHsKKysJMHhjOCwweGQyLDB4NzUsMHhmOSwweDE5LDB4ZTEsMHg3ZCwweDdmLDB4ZTYsMHg5 YywweDJhLDB4MWYsCisrCTB4NTgsMHg5MywweDlkLDB4ZmUsMHg0ZCwweDQwLDB4MzcsMHg5MSww eGI1LDB4ZGYsMHgxMywweDEwCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21f Y3RbXSA9IHsKKysJMHg4YSwweDBmLDB4M2QsMHg4MiwweDI5LDB4ZTQsMHg4ZSwweDc0LDB4ODcs MHhmZCwweDk1LDB4YTIsCisrCTB4OGEsMHhkMywweDkyLDB4YzgsMHgwYiwweDM2LDB4ODEsMHhk NCwweGZiLDB4YzcsMHhiYiwweGZkCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBj Y21fdGFnW10gPSB7CisrCTB4MmQsMHhkNiwweGVmLDB4MWMsMHg0NSwweGQ0LDB4Y2MsMHhiNyww eDIzLDB4ZGMsMHgwNywweDQ0LAorKwkweDE0LDB4ZGIsMHg1MCwweDZkCisrfTsKKysKKytpbnQg RklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2ln bmVkIGNoYXIgb3V0WzEyOF0sIHRhZ1sxNl07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwor KwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxM LCAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQ X0NUUkxfQ0NNX1NFVF9JVkxFTiwKKysJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKKysJ CWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NN X1NFVF9UQUcsCisrCQkJCQlzaXplb2YoY2NtX3RhZyksIE5VTEwpKQorKwkJZ290byBlcnI7Cisr CWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAxKSkK KysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2Yo Y2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBo ZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQorKwkJZ290 byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0 KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFFVlBfQ0lQSEVS X0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8g ZXJyOworKwlpZiAobWVtY21wKHRhZywgY2NtX3RhZywgc2l6ZW9mKGNjbV90YWcpKQorKwkJfHwg bWVtY21wKG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkpCisrCQlnb3RvIGVycjsKKysKKysJ bWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKworKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZj dHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCAwKSkKKysJCWdvdG8gZXJyOworKwlp ZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwKKysJ CQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9D SVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIDE2LCB0YWcpKQorKwkJ Z290byBlcnI7CisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgY2NtX2tleSwgY2Nt X25vbmNlLCAwKSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBO VUxMLCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCisrCQlnb3RvIGVycjsKKysJ aWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkg PCAwKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX2N0LCBz aXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCisrCQlnb3RvIGVycjsKKysKKysJaWYg KG1lbWNtcChvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkpKQorKwkJZ290byBlcnI7CisrCisr CXJldCA9IDE7CisrCisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysK KysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9B RVNfQ0NNLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWVs c2UKKysJCXJldHVybiByZXQ7CisrCisrCX0KKysKKysvKiBBRVMtR0NNIHRlc3QgZGF0YSBmcm9t IE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGdjbV9rZXlbXSA9IHsKKysJMHhlZSwweGJjLDB4MWYsMHg1NywweDQ4LDB4N2YsMHg1MSww eDkyLDB4MWMsMHgwNCwweDY1LDB4NjYsCisrCTB4NWYsMHg4YSwweGU2LDB4ZDEsMHg2NSwweDhi LDB4YjIsMHg2ZCwweGU2LDB4ZjgsMHhhMCwweDY5LAorKwkweGEzLDB4NTIsMHgwMiwweDkzLDB4 YTUsMHg3MiwweDA3LDB4OGYKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9p dltdID0geworKwkweDk5LDB4YWEsMHgzZSwweDY4LDB4ZWQsMHg4MSwweDczLDB4YTAsMHhlZSww eGQwLDB4NjYsMHg4NAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3B0W10g PSB7CisrCTB4ZjUsMHg2ZSwweDg3LDB4MDUsMHg1YiwweGMzLDB4MmQsMHgwZSwweGViLDB4MzEs MHhiMiwweGVhLAorKwkweGNjLDB4MmIsMHhmMiwweGE1CisrfTsKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBnY21fYWFkW10gPSB7CisrCTB4NGQsMHgyMywweGMzLDB4Y2UsMHhjMywweDM0 LDB4YjQsMHg5YiwweGRiLDB4MzcsMHgwYywweDQzLAorKwkweDdmLDB4ZWMsMHg3OCwweGRlCisr fTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fY3RbXSA9IHsKKysJMHhmNywweDI2 LDB4NDQsMHgxMywweGE4LDB4NGMsMHgwZSwweDdjLDB4ZDUsMHgzNiwweDg2LDB4N2UsCisrCTB4 YjksMHhmMiwweDE3LDB4MzYKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV90 YWdbXSA9IHsKKysJMHg2NywweGJhLDB4MDUsMHgxMCwweDI2LDB4MmEsMHhlNCwweDg3LDB4ZDcs MHgzNywweGVlLDB4NjIsCisrCTB4OTgsMHhmNywweDdlLDB4MGMKKyt9OworKworK2ludCBGSVBT X3NlbGZ0ZXN0X2Flc19nY20odm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQg Y2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCW1l bXNldCh0YWcsIDAsIHNpemVvZih0YWcpKTsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBF VlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFF VlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCisrCQkJCQlz aXplb2YoZ2NtX2l2KSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5p dCgmY3R4LCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChF VlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQorKwkJ Z290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX3B0LCBzaXplb2YoZ2Nt X3B0KSkgIT0gc2l6ZW9mKGdjbV9jdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIo JmN0eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQorKwkJZ290byBlcnI7CisrCisrCWlmICghRVZQX0NJ UEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywgMTYsIHRhZykpCisrCQln b3RvIGVycjsKKysKKysJaWYgKG1lbWNtcCh0YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1jbXAob3V0 LCBnY21fY3QsIDE2KSkKKysJCWdvdG8gZXJyOworKworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yo b3V0KSk7CisrCisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCks IE5VTEwsIE5VTEwsIDApKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGdjbV9pdiksIE5V TEwpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBf Q1RSTF9HQ01fU0VUX1RBRywgMTYsIHRhZykpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lw aGVySW5pdCgmY3R4LCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDApKQorKwkJZ290byBlcnI7Cisr CWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAw KQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX2N0LCBzaXpl b2YoZ2NtX2N0KSkgIT0gc2l6ZW9mKGdjbV9wdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9D aXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQorKwkJZ290byBlcnI7CisrCisrCWlmICht ZW1jbXAob3V0LCBnY21fcHQsIDE2KSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKwor KwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyZXQgPT0g MCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSxGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwllbHNlCisrCQlyZXR1cm4g cmV0OworKworKwl9CisrCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9r ZXlbXSA9IHsKKysJMHhhMSwweGI5LDB4MGMsMHhiYSwweDNmLDB4MDYsMHhhYywweDM1LDB4M2Is MHgyYywweDM0LDB4MzgsCisrCTB4NzYsMHgwOCwweDE3LDB4NjIsMHgwOSwweDA5LDB4MjMsMHgw MiwweDZlLDB4OTEsMHg3NywweDE4LAorKwkweDE1LDB4ZjIsMHg5ZCwweGFiLDB4MDEsMHg5Myww eDJmLDB4MmYKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfaVtdID0g eworKwkweDRmLDB4YWUsMHhmNywweDExLDB4N2MsMHhkYSwweDU5LDB4YzYsMHg2ZSwweDRiLDB4 OTIsMHgwMSwKKysJMHgzZSwweDc2LDB4OGEsMHhkNQorK307Cisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgWFRTXzEyOF9wdFtdID0geworKwkweGViLDB4YWIsMHhjZSwweDk1LDB4YjEsMHg0 ZCwweDNjLDB4OGQsMHg2ZiwweGIzLDB4NTAsMHgzOSwKKysJMHgwNywweDkwLDB4MzEsMHgxYwor K307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0geworKwkweDc3 LDB4OGEsMHhlOCwweGI0LDB4M2MsMHhiOSwweDhkLDB4NWEsMHg4MiwweDUwLDB4ODEsMHhkNSwK KysJMHhiZSwweDQ3LDB4MWMsMHg2MworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgWFRTXzI1Nl9rZXlbXSA9IHsKKysJMHgxZSwweGE2LDB4NjEsMHhjNSwweDhkLDB4OTQsMHgz YSwweDBlLDB4NDgsMHgwMSwweGU0LDB4MmYsCisrCTB4NGIsMHgwOSwweDQ3LDB4MTQsMHg5ZSww eDdmLDB4OWYsMHg4ZSwweDNlLDB4NjgsMHhkMCwweGM3LAorKwkweDUwLDB4NTIsMHgxMCwweGJk LDB4MzEsMHgxYSwweDBlLDB4N2MsMHhkNiwweGUxLDB4M2YsMHhmZCwKKysJMHhmMiwweDQxLDB4 OGQsMHg4ZCwweDE5LDB4MTEsMHhjMCwweDA0LDB4Y2QsMHhhNSwweDhkLDB4YTMsCisrCTB4ZDYs MHgxOSwweGI3LDB4ZTIsMHhiOSwweDE0LDB4MWUsMHg1OCwweDMxLDB4OGUsMHhlYSwweDM5LAor KwkweDJjLDB4ZjQsMHgxYiwweDA4CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBY VFNfMjU2X2lbXSA9IHsKKysJMHhhZCwweGY4LDB4ZDksMHgyNiwweDI3LDB4NDYsMHg0YSwweGQy LDB4ZjAsMHg0MiwweDhlLDB4ODQsCisrCTB4YTksMHhmOCwweDc1LDB4NjQKKyt9OworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfcHRbXSA9IHsKKysJMHgyZSwweGVkLDB4ZWEs MHg1MiwweGNkLDB4ODIsMHgxNSwweGUxLDB4YWMsMHhjNiwweDQ3LDB4ZTgsCisrCTB4MTAsMHhi YiwweGMzLDB4NjQsMHgyZSwweDg3LDB4MjgsMHg3ZiwweDhkLDB4MmUsMHg1NywweGUzLAorKwkw eDZjLDB4MGEsMHgyNCwweGZiLDB4YzEsMHgyYSwweDIwLDB4MmUKKyt9OworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfY3RbXSA9IHsKKysJMHhjYiwweGFhLDB4ZDAsMHhlMiww eGY2LDB4Y2UsMHhhMywweGY1LDB4MGIsMHgzNywweGY5LDB4MzQsCisrCTB4ZDQsMHg2YSwweDli LDB4MTMsMHgwYiwweDlkLDB4NTQsMHhmMCwweDdlLDB4MzQsMHhmMywweDZhLAorKwkweGY3LDB4 OTMsMHhlOCwweDZmLDB4NzMsMHhjNiwweGQ3LDB4ZGIKKyt9OworKworK2ludCBGSVBTX3NlbGZ0 ZXN0X2Flc194dHMoKQorKwl7CisrCWludCByZXQgPSAxOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7 CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChmaXBzX2NpcGhlcl90ZXN0 KCZjdHgsIEVWUF9hZXNfMTI4X3h0cygpLAorKwkJCQlYVFNfMTI4X2tleSwgWFRTXzEyOF9pLCBY VFNfMTI4X3B0LCBYVFNfMTI4X2N0LAorKwkJCQlzaXplb2YoWFRTXzEyOF9wdCkpIDw9IDApCisr CQlyZXQgPSAwOworKworKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzI1Nl94 dHMoKSwKKysJCQkJWFRTXzI1Nl9rZXksIFhUU18yNTZfaSwgWFRTXzI1Nl9wdCwgWFRTXzI1Nl9j dCwKKysJCQkJc2l6ZW9mKFhUU18yNTZfcHQpKSA8PSAwKQorKwkJcmV0ID0gMDsKKysKKysJRVZQ X0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJaWYgKHJldCA9PSAwKQorKwkJRklQU2VycihG SVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwly ZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzLmMKKy0t LSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5 OjI1LjMzODM1MjI4NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHMu YwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzODM1MjI4NCArMDIwMAorQEAgLTAsMCArMSw0ODkgQEAK 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 T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxkbGZj bi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVk ZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysKKysjaWZuZGVmIFBBVEhfTUFYCisrI2RlZmluZSBQQVRIX01BWCAx MDI0CisrI2VuZGlmCisrCisrc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworK3N0 YXRpYyBpbnQgZmlwc19tb2RlID0gMDsKKytzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7Cisr Cisrc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCk7Cisrc3RhdGljIGludCBm aXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlwc19jbGVhcl9vd25p bmdfdGhyZWFkKHZvaWQpOworKworKyNkZWZpbmUgZmlwc193X2xvY2soKQlDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX0ZJUFMpCisrI2RlZmluZSBmaXBzX3dfdW5sb2NrKCkJQ1JZUFRPX3dfdW5s b2NrKENSWVBUT19MT0NLX0ZJUFMpCisrI2RlZmluZSBmaXBzX3JfbG9jaygpCUNSWVBUT19yX2xv Y2soQ1JZUFRPX0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfcl91bmxvY2soKQlDUllQVE9fcl91 bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKKysKKytzdGF0aWMgdm9pZCBmaXBzX3NldF9tb2RlKGlu dCBvbm9mZikKKysJeworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVh ZCgpOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFk KSBmaXBzX3dfbG9jaygpOworKwkJZmlwc19tb2RlID0gb25vZmY7CisrCQlpZiAoIW93bmluZ190 aHJlYWQpIGZpcHNfd191bmxvY2soKTsKKysJCX0KKysJfQorKworK2ludCBGSVBTX21vZHVsZV9t b2RlKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlw c19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlp ZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCQlyZXQgPSBmaXBzX21vZGU7Cisr CQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJCX0KKysJcmV0dXJuIHJl dDsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQorKyAgICB7CisrICAg IGludCByZXQgPSAwOworKyAgICBpZiAoZmlwc19zdGFydGVkKQorKwl7CisrCWludCBvd25pbmdf dGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlmICghb3duaW5nX3RocmVh ZCkgZmlwc19yX2xvY2soKTsKKysJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOworKwlpZiAoIW93 bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJfQorKyAgICByZXR1cm4gcmV0OworKyAg ICB9CisrCisrLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRoaXMgd2ls bCBiZSBjYWxsZWQKKysgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24uIEl0 IGhhcyB0aGUgbWluaW11bQorKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBiaWcg YSBwZXJmb3JtYW5jZSBoaXQuCisrICovCisrCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZv aWQpCisrICAgIHsKKysgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKKysJeworKwlPcGVuU1NM RGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlMVVJFIik7Cisr CX0KKysgICAgfQorKworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQorKyAgICB7 CisrICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrICAgIH0KKysKKysvKiB3ZSBpbXBsZW1l bnQgd2hhdCBsaWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8KKysKKytzdGF0aWMgaW50Cisr Z2V0X2xpYnJhcnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xu YW1lLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbikKKyt7CisrCURsX2luZm8gaW5mbzsKKysJ dm9pZCAqZGwsICpzeW07CisrCWludCBydiA9IC0xOworKworKyAgICAgICAgZGwgPSBkbG9wZW4o bGlibmFtZSwgUlRMRF9MQVpZKTsKKysgICAgICAgIGlmIChkbCA9PSBOVUxMKSB7CisrCSAgICAg ICAgcmV0dXJuIC0xOworKyAgICAgICAgfSAgICAgICAKKysKKysJc3ltID0gZGxzeW0oZGwsIHN5 bWJvbG5hbWUpOworKworKwlpZiAoc3ltICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwgJmluZm8pKSB7 CisrCQlzdHJuY3B5KHBhdGgsIGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuLTEpOworKwkJcGF0aFtw YXRobGVuLTFdID0gJ1wwJzsKKysJCXJ2ID0gMDsKKysJfQorKworKwlkbGNsb3NlKGRsKTsJCisr CQorKwlyZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyIGNvbnZbXSA9ICIwMTIz NDU2Nzg5YWJjZGVmIjsKKysKKytzdGF0aWMgY2hhciAqCisrYmluMmhleCh2b2lkICpidWYsIHNp emVfdCBsZW4pCisreworKwljaGFyICpoZXgsICpwOworKwl1bnNpZ25lZCBjaGFyICpzcmMgPSBi dWY7CisrCQorKwloZXggPSBtYWxsb2MobGVuICogMiArIDEpOworKwlpZiAoaGV4ID09IE5VTEwp CisrCQlyZXR1cm4gTlVMTDsKKysKKysJcCA9IGhleDsKKysKKysJd2hpbGUgKGxlbiA+IDApIHsK KysJCXVuc2lnbmVkIGM7CisrCisrCQljID0gKnNyYzsKKysJCXNyYysrOworKworKwkJKnAgPSBj b252W2MgPj4gNF07CisrCQkrK3A7CisrCQkqcCA9IGNvbnZbYyAmIDB4MGZdOworKwkJKytwOwor KwkJLS1sZW47CisrCX0KKysJKnAgPSAnXDAnOworKwlyZXR1cm4gaGV4OworK30KKysKKysjZGVm aW5lIEhNQUNfUFJFRklYICIuIiAKKysjZGVmaW5lIEhNQUNfU1VGRklYICIuaG1hYyIgCisrI2Rl ZmluZSBSRUFEX0JVRkZFUl9MRU5HVEggMTYzODQKKysKKytzdGF0aWMgY2hhciAqCisrbWFrZV9o bWFjX3BhdGgoY29uc3QgY2hhciAqb3JpZ3BhdGgpCisreworKwljaGFyICpwYXRoLCAqcDsKKysJ Y29uc3QgY2hhciAqZm47CisrCisrCXBhdGggPSBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJFRklYKSAr IHNpemVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKKysJaWYocGF0aCA9PSBO VUxMKSB7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlmbiA9IHN0cnJjaHIob3JpZ3BhdGgs ICcvJyk7CisrCWlmIChmbiA9PSBOVUxMKSB7CisrCQlmbiA9IG9yaWdwYXRoOworKwl9IGVsc2Ug eworKwkJKytmbjsKKysJfQorKworKwlzdHJuY3B5KHBhdGgsIG9yaWdwYXRoLCBmbi1vcmlncGF0 aCk7CisrCXAgPSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOworKwlwID0gc3RwY3B5KHAsIEhNQUNf UFJFRklYKTsKKysJcCA9IHN0cGNweShwLCBmbik7CisrCXAgPSBzdHBjcHkocCwgSE1BQ19TVUZG SVgpOworKworKwlyZXR1cm4gcGF0aDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgaG1hY2tl eVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysKKytzdGF0aWMgaW50 CisrY29tcHV0ZV9maWxlX2htYWMoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmJ1Ziwgc2l6ZV90 ICpobWFjbGVuKQorK3sKKysJRklMRSAqZiA9IE5VTEw7CisrCWludCBydiA9IC0xOworKwl1bnNp Z25lZCBjaGFyIHJidWZbUkVBRF9CVUZGRVJfTEVOR1RIXTsKKysJc2l6ZV90IGxlbjsKKysJdW5z aWduZWQgaW50IGhsZW47CisrCUhNQUNfQ1RYIGM7CisrCisrCUhNQUNfQ1RYX2luaXQoJmMpOwor KworKwlmID0gZm9wZW4ocGF0aCwgInIiKTsKKysKKysJaWYgKGYgPT0gTlVMTCkgeworKwkJZ290 byBlbmQ7CisrCX0KKysKKysJSE1BQ19Jbml0KCZjLCBobWFja2V5LCBzaXplb2YoaG1hY2tleSkt MSwgRVZQX3NoYTI1NigpKTsKKysKKysJd2hpbGUgKChsZW49ZnJlYWQocmJ1ZiwgMSwgc2l6ZW9m KHJidWYpLCBmKSkgIT0gMCkgeworKwkJSE1BQ19VcGRhdGUoJmMsIHJidWYsIGxlbik7CisrCX0K KysKKysJbGVuID0gc2l6ZW9mKHJidWYpOworKwkvKiByZXVzZSByYnVmIGZvciBobWFjICovCisr CUhNQUNfRmluYWwoJmMsIHJidWYsICZobGVuKTsKKysKKysJKmJ1ZiA9IG1hbGxvYyhobGVuKTsK KysJaWYgKCpidWYgPT0gTlVMTCkgeworKwkJZ290byBlbmQ7CisrCX0KKysKKysJKmhtYWNsZW4g PSBobGVuOworKworKwltZW1jcHkoKmJ1ZiwgcmJ1ZiwgaGxlbik7CisrCisrCXJ2ID0gMDsKKytl bmQ6CisrCUhNQUNfQ1RYX2NsZWFudXAoJmMpOworKworKwlpZiAoZikKKysJCWZjbG9zZShmKTsK KysKKysJcmV0dXJuIHJ2OworK30KKysKKytzdGF0aWMgaW50CisrRklQU0NIRUNLX3ZlcmlmeShj b25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lKQorK3sKKysJY2hhciBw YXRoW1BBVEhfTUFYKzFdOworKwlpbnQgcnY7CisrCUZJTEUgKmhmOworKwljaGFyICpobWFjcGF0 aCwgKnA7CisrCWNoYXIgKmhtYWMgPSBOVUxMOworKwlzaXplX3QgbjsKKysJCisrCXJ2ID0gZ2V0 X2xpYnJhcnlfcGF0aChsaWJuYW1lLCBzeW1ib2xuYW1lLCBwYXRoLCBzaXplb2YocGF0aCkpOwor KworKwlpZiAocnYgPCAwKQorKwkJcmV0dXJuIDA7CisrCisrCWhtYWNwYXRoID0gbWFrZV9obWFj X3BhdGgocGF0aCk7CisrCWlmIChobWFjcGF0aCA9PSBOVUxMKQorKwkJcmV0dXJuIDA7CisrCisr CWhmID0gZm9wZW4oaG1hY3BhdGgsICJyIik7CisrCWlmIChoZiA9PSBOVUxMKSB7CisrCQlmcmVl KGhtYWNwYXRoKTsKKysJCXJldHVybiAwOworKwl9CisrCisrCWlmIChnZXRsaW5lKCZobWFjLCAm biwgaGYpID4gMCkgeworKwkJdm9pZCAqYnVmOworKwkJc2l6ZV90IGhtYWNsZW47CisrCQljaGFy ICpoZXg7CisrCisrCQlpZiAoKHA9c3RyY2hyKGhtYWMsICdcbicpKSAhPSBOVUxMKQorKwkJCSpw ID0gJ1wwJzsKKysKKysJCWlmIChjb21wdXRlX2ZpbGVfaG1hYyhwYXRoLCAmYnVmLCAmaG1hY2xl bikgPCAwKSB7CisrCQkJcnYgPSAtNDsKKysJCQlnb3RvIGVuZDsKKysJCX0KKysKKysJCWlmICgo aGV4PWJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgeworKwkJCWZyZWUoYnVmKTsKKysJ CQlydiA9IC01OworKwkJCWdvdG8gZW5kOworKwkJfQorKworKwkJaWYgKHN0cmNtcChoZXgsIGht YWMpICE9IDApIHsKKysJCQlydiA9IC0xOworKwkJfQorKwkJZnJlZShidWYpOworKwkJZnJlZSho ZXgpOworKwl9CisrCisrZW5kOgorKwlmcmVlKGhtYWMpOworKwlmcmVlKGhtYWNwYXRoKTsKKysJ ZmNsb3NlKGhmKTsKKysKKysJaWYgKHJ2IDwgMCkKKysJCXJldHVybiAwOworKworKwkvKiBjaGVj ayBzdWNjZXNzZnVsICovCisrCXJldHVybiAxOwkKKyt9CisrCisraW50IEZJUFNfbW9kdWxlX21v ZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCkKKysgICAgeworKyAgICBpbnQgcmV0 ID0gMDsKKysKKysgICAgZmlwc193X2xvY2soKTsKKysgICAgZmlwc19zdGFydGVkID0gMTsKKysg ICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOworKworKyAgICBpZihvbm9mZikKKysJeworKwor KwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKworKwkvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9k ZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCisrCSAgIHNlZWRpbmcgKi8KKysJ aWYoRklQU19tb2R1bGVfbW9kZSgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQ U19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCk7CisrCSAgICBm aXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOwor KwkgICAgfQorKworKyNpZmRlZiBPUEVOU1NMX0lBMzJfU1NFMgorKwl7CisrCWV4dGVybiB1bnNp Z25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07CisrCWlmICgoT1BFTlNTTF9pYTMyY2FwX1Bb MF0gJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8MjYpKQorKwkgICAgeworKwkgICAgRklQ U2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9SVEVEX1BMQVRG T1JNKTsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkg ICAgZ290byBlbmQ7CisrCSAgICB9CisrCU9QRU5TU0xfaWEzMmNhcF9QWzBdIHw9ICgxPDwyOCk7 CS8qIHNldCAic2hhcmVkIGNhY2hlIgkqLworKwlPUEVOU1NMX2lhMzJjYXBfUFsxXSAmPSB+KDE8 PCg2MC0zMikpOwkvKiBjbGVhciBBVlgJCSovCisrCX0KKysjZW5kaWYKKysKKysJaWYoIUZJUFND SEVDS192ZXJpZnkoImxpYmNyeXB0by5zby4iIFNITElCX1ZFUlNJT05fTlVNQkVSLCJGSVBTX21v ZGVfc2V0IikpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RF X1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOworKwkgICAgZmlwc19zZWxm dGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0K KysKKysJaWYoIUZJUFNDSEVDS192ZXJpZnkoImxpYnNzbC5zby4iIFNITElCX1ZFUlNJT05fTlVN QkVSLCJTU0xfQ1RYX25ldyIpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19N T0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsKKysJICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7 CisrCSAgICB9CisrCisrCWlmKEZJUFNfc2VsZnRlc3QoKSkKKysJICAgIGZpcHNfc2V0X21vZGUo b25vZmYpOworKwllbHNlCisrCSAgICB7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwor KwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKwlyZXQgPSAxOworKwln b3RvIGVuZDsKKysJfQorKyAgICBmaXBzX3NldF9tb2RlKDApOworKyAgICBmaXBzX3NlbGZ0ZXN0 X2ZhaWwgPSAwOworKyAgICByZXQgPSAxOworK2VuZDoKKysgICAgZmlwc19jbGVhcl9vd25pbmdf dGhyZWFkKCk7CisrICAgIGZpcHNfd191bmxvY2soKTsKKysgICAgcmV0dXJuIHJldDsKKysgICAg fQorKworK3N0YXRpYyBDUllQVE9fVEhSRUFESUQgZmlwc190aHJlYWQ7Cisrc3RhdGljIGludCBm aXBzX3RocmVhZF9zZXQgPSAwOworKworK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFk KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7 CisrCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVh ZF9zZXQpCisrCQkJeworKwkJCUNSWVBUT19USFJFQURJRCBjdXI7CisrCQkJQ1JZUFRPX1RIUkVB RElEX2N1cnJlbnQoJmN1cik7CisrCQkJaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZm aXBzX3RocmVhZCkpCisrCQkJCXJldCA9IDE7CisrCQkJfQorKwkJQ1JZUFRPX3JfdW5sb2NrKENS WVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBmaXBz X3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChm aXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK KysJCWlmICghZmlwc190aHJlYWRfc2V0KQorKwkJCXsKKysJCQlDUllQVE9fVEhSRUFESURfY3Vy cmVudCgmZmlwc190aHJlYWQpOworKwkJCXJldCA9IDE7CisrCQkJZmlwc190aHJlYWRfc2V0ID0g MTsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQor KwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lk KQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJ Q1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWRfc2V0 KQorKwkJCXsKKysJCQlDUllQVE9fVEhSRUFESUQgY3VyOworKwkJCUNSWVBUT19USFJFQURJRF9j dXJyZW50KCZjdXIpOworKwkJCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190 aHJlYWQpKQorKwkJCQlmaXBzX3RocmVhZF9zZXQgPSAwOworKwkJCX0KKysJCUNSWVBUT193X3Vu bG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKysK KysjaWYgMAorKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBj b2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCisrICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJv ciBjaGVja2luZyBzY3JpcHQgcXVpZXQKKysgKi8KKyt2b2lkIGhhc2hfZmluYWwodm9pZCkKKysJ eworKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwor Kwl9CisrI2VuZGlmCisrCisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9m aXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMv Zmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzODM1MjI4NCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5j CTIwMTItMDctMTIgMjE6NDk6MjUuMzM5MzUyMzA3ICswMjAwCitAQCAtMCwwICsxLDE2MSBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvY21hYy5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3QgeworKwlpbnQgbmlkOworKwljb25zdCB1bnNp Z25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5HVEhdOyBzaXplX3Qga2V5c2l6ZTsKKysJY29u c3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOyBzaXplX3QgbXNnc2l6ZTsKKysJY29uc3QgdW5zaWdu ZWQgY2hhciBtYWNbMzJdOyBzaXplX3QgbWFjc2l6ZTsKKyt9IENNQUNfS0FUOworKworKy8qIGZy b20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOEIvU1Bf ODAwLTM4Qi5wZGYgKi8KKytzdGF0aWMgY29uc3QgQ01BQ19LQVQgdmVjdG9yW10gPSB7CisrICAg IHsJTklEX2Flc18xMjhfY2JjLAkvKiBDb3VudCA9IDMyIGZyb20gQ01BQ0dlbkFFUzEyOC50eHQg Ki8KKysJeyAweDc3LDB4YTcsMHg3ZiwweGFmLCAweDI5LDB4MGMsMHgxZiwweGEzLAorKwkgIDB4 MGMsMHg2OCwweDNkLDB4ZjEsIDB4NmIsMHhhNywweGE3LDB4N2IsIH0sIDEyOCwKKysJeyAweDAy LDB4MDYsMHg4MywweGUxLCAweGYwLDB4MzksMHgyZiwweDRjLAorKwkgIDB4YWMsMHg1NCwweDMx LDB4OGIsIDB4NjAsMHgyOSwweDI1LDB4OWUsCisrCSAgMHg5YywweDU1LDB4M2QsMHhiYywgMHg0 YiwweDZhLDB4ZDksMHg5OCwKKysJICAweGU2LDB4NGQsMHg1OCwweGU0LCAweGU3LDB4ZGMsMHgy ZSwweDEzLCB9LCAyNTYsCisrCXsgMHhmYiwweGZlLDB4YTQsMHgxYiwgfSwgMzIKKysgICAgfSwK KysgICAgewlOSURfYWVzXzE5Ml9jYmMsCS8qIENvdW50ID0gMjMgZnJvbSBDTUFDR2VuQUVTMTky LnR4dCAqLworKwl7IDB4N2IsMHgzMiwweDM5LDB4MTMsIDB4NjksMHhhYSwweDRjLDB4YTksCisr CSAgMHg3NSwweDU4LDB4MDksMHg1YiwgMHhlMywweGMzLDB4ZWMsMHg4NiwKKysJICAweDJiLDB4 ZDAsMHg1NywweGNlLCAweGYxLDB4ZTMsMHgyZCwweDYyLCB9LCAxOTIsCisrCXsgMHgwIH0sIDAs CisrCXsgMHhlNCwweGQ5LDB4MzQsMHgwYiwgMHgwMywweGU2LDB4N2QsMHhlZiwKKysJICAweGQ0 LDB4OTYsMHg5YywweGMxLCAweGVkLDB4MzcsMHgzNSwweGU2LCB9LCAxMjgsCisrICAgIH0sCisr ICAgIHsJTklEX2Flc18yNTZfY2JjLAkvKiBDb3VudCA9IDMzIGZyb20gQ01BQ0dlbkFFUzI1Ni50 eHQgKi8KKysJeyAweDBiLDB4MTIsMHgyYSwweGM4LCAweGYzLDB4NGUsMHhkMSwweGZlLAorKwkg IDB4MDgsMHgyYSwweDM2LDB4MjUsIDB4ZDEsMHg1NywweDU2LDB4MTQsCisrCSAgMHg1NCwweDE2 LDB4N2EsMHhjMSwgMHg0NSwweGExLDB4MGIsMHhiZiwKKysJICAweDc3LDB4YzYsMHhhNywweDA1 LCAweDk2LDB4ZDUsMHg3NCwweGYxLCB9LCAyNTYsCisrCXsgMHg0OSwweDhiLDB4NTMsMHhmZCwg MHhlYywweDg3LDB4ZWQsMHhjYiwKKysJICAweGYwLDB4NzAsMHg5NywweGRjLCAweGNkLDB4ZTks MHgzYSwweDA4LAorKwkgIDB4NGIsMHhhZCwweDc1LDB4MDEsIDB4YTIsMHgyNCwweGUzLDB4ODgs CisrCSAgMHhkZiwweDM0LDB4OWMsMHhlMSwgMHg4OSwweDU5LDB4ZmUsMHg4NCwKKysJICAweDg1 LDB4ZjgsMHhhZCwweDE1LCAweDM3LDB4ZjAsMHhkOCwweDk2LAorKwkgIDB4ZWEsMHg3MywweGJl LDB4ZGMsIDB4NzIsMHgxNCwweDcxLDB4M2YsIH0sIDM4NCwKKysJeyAweGY2LDB4MmMsMHg0Niww eDMyLCAweDliLCB9LCA0MCwKKysgICAgfSwKKysgICAgewlOSURfZGVzX2VkZTNfY2JjLAkvKiBD b3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJlcSAqLworKwl7IDB4ODksMHhiYywweGQ5LDB4 NTIsIDB4YTgsMHhjOCwweGFiLDB4MzcsCisrCSAgMHgxYSwweGY0LDB4OGEsMHhjNywgMHhkMCww eDcwLDB4ODUsMHhkNSwKKysJICAweGVmLDB4ZjcsMHgwMiwweGU2LCAweGQ2LDB4MmMsMHhkYyww eDIzLCB9LCAxOTIsCisrCXsgMHhmYSwweDYyLDB4MGMsMHgxYiwgMHhiZSwweDk3LDB4MzEsMHg5 ZSwKKysJICAweDlhLDB4MGMsMHhmMCwweDQ5LCAweDIxLDB4MjEsMHhmNywweGEyLAorKwkgIDB4 MGUsMHhiMCwweDhhLDB4NmEsIDB4NzAsMHg5ZCwweGNiLDB4ZDAsCisrCSAgMHgwYSwweGFmLDB4 MzgsMHhlNCwgMHhmOSwweDllLDB4NzUsMHg0ZSwgfSwgMjU2LAorKwl7IDB4OGYsMHg0OSwweGEx LDB4YjcsIDB4ZDYsMHhhYSwweDIyLDB4NTgsIH0sIDY0LAorKyAgICB9LAorK307CisrCisraW50 IEZJUFNfc2VsZnRlc3RfY21hYygpCisrCXsKKysJc2l6ZV90IG4sIG91dGxlbjsKKysJdW5zaWdu ZWQgY2hhciAgICBvdXRbMzJdOworKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXI7CisrCUNNQUNf Q1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKKysJY29uc3QgQ01BQ19LQVQgKnQ7CisrCWludCBy diA9IDE7CisrCisrCWZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZl Y3RvclswXSk7IG4rKyx0KyspCisrCQl7CisrCQljaXBoZXIgPSBGSVBTX2dldF9jaXBoZXJieW5p ZCh0LT5uaWQpOworKwkJaWYgKCFjaXBoZXIpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290 byBlcnI7CisrCQkJfQorKwkJaWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQtPmtleXNpemUv OCwgY2lwaGVyLCAwKSkKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJCQlnb3RvIGVycjsKKysJCQl9 CisrCQlpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+bXNnLCB0LT5tc2dzaXplLzgpKQorKwkJCXsK KysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCQkKKysJCWlmICghQ01BQ19G aW5hbChjdHgsIG91dCwgJm91dGxlbikpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBl cnI7CisrCQkJfQorKwkJQ01BQ19DVFhfY2xlYW51cChjdHgpOworKworKwkJaWYob3V0bGVuIDwg dC0+bWFjc2l6ZS84IHx8IG1lbWNtcChvdXQsdC0+bWFjLHQtPm1hY3NpemUvOCkpCisrCQkJewor KwkJICAgIAlydiA9IDA7CisrCQkgICAgCX0KKysJCX0KKysKKysJZXJyOgorKwlDTUFDX0NUWF9m cmVlKGN0eCk7CisrCisrCWlmIChydiA9PSAtMSkKKysJCXsKKysJCXJ2ID0gMDsKKysJCX0KKysJ aWYgKCFydikKKysJCSAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQyxGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysKKysJcmV0dXJuIHJ2OworKwl9CisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIx OjQ5OjI1LjMzOTM1MjMwNyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2Zp cHNfZGVzX3NlbGZ0ZXN0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzkzNTIzMDcgKzAyMDAKK0BA IC0wLDAgKzEsMTQ3IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdAorKyAgICB7CisrICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbOF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKysgICAgfSB0 ZXN0czJbXT0KKysJeworKwl7CisrCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4MDQsMHgx NiwweGVjLAorKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9LAor Kwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAorKwl7IDB4NGMs MHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9CisrCX0sCisrCXsKKysJeyAweDVk LDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCisrCSAgMHgwMSwweDE2LDB4N2Ms MHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCisrCXsgMHg5YywweDUwLDB4MDksMHgwZiwweDVl LDB4N2QsMHg2OSwweDdlIH0sCisrCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQsMHg5 ZSwweGZmIH0sCisrCX0KKysJfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysg ICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMjRdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy IHBsYWludGV4dFs4XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwor KyAgICB9IHRlc3RzM1tdPQorKwl7CisrCXsKKysJeyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsCisrCSAgMHhGRSwweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiww eDEwLAorKwkgIDB4MTIsMHgzNCwweDU2LDB4NzgsMHg5YSwweGJjLDB4ZGUsMHhmMCB9LAorKwl7 IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1ZCwweDQ4LDB4YjQsMHgxYyB9LAorKwl7IDB4NTksMHg4 YywweGU1LDB4ZDMsMHg2YywweGEyLDB4ZWEsMHgxYiB9LAorKwl9LAorKwl7CisrCXsgMHhEQyww eEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwweEZFLAorKwkgIDB4MDEsMHgyMywweDQ1LDB4 NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKKysJICAweEVELDB4MzksMHhEOSwweDUwLDB4RkEsMHg3 NCwweEJDLDB4QzQgfSwKKysJeyAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4 RUYgfSwKKysJeyAweDExLDB4MjUsMHhiMCwweDM1LDB4YmUsMHhhMCwweDgyLDB4ODYgfSwKKysJ fSwKKysJfTsKKysKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRfZGVzOworKworK3ZvaWQgRklQU19j b3JydXB0X2RlcygpCisrICAgIHsKKysgICAgY29ycnVwdF9kZXMgPSAxOworKyAgICB9CisrCisr aW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKysgICAgeworKyAgICBpbnQgbiwgcmV0ID0gMDsKKysg ICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwor KyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtu b3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQorKwl7CisrCXVuc2ln bmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKworKwltZW1jcHkocGxhaW50ZXh0LCB0ZXN0czJbbl0u cGxhaW50ZXh0LCBzaXplb2YocGxhaW50ZXh0KSk7CisrCWlmIChjb3JydXB0X2RlcykKKysJCXBs YWludGV4dFswXSsrOworKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVf ZWNiKCksCisrCQkJCXRlc3RzMltuXS5rZXksIE5VTEwsCisrCQkJCXBsYWludGV4dCwgdGVzdHMy W25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7CisrCX0KKysKKysgICAgLyogRW5jcnlw dC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAg IGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0 eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0 ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCisrCQlnb3RvIGVy cjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2Ns ZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKworKyAgICByZXR1cm4g cmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlw cy9maXBzX2RyYmdfY3RyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfY3RyLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMu ZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzOTM1MjMwNyArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzOTM1 MjMwNyArMDIwMAorQEAgLTAsMCArMSw0MzYgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2N0 ci5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9w ZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAi Zmlwc19yYW5kX2xjbC5oIgorKworK3N0YXRpYyB2b2lkIGluY18xMjgoRFJCR19DVFJfQ1RYICpj Y3R4KQorKwl7CisrCWludCBpOworKwl1bnNpZ25lZCBjaGFyIGM7CisrCXVuc2lnbmVkIGNoYXIg KnAgPSBjY3R4LT5WICsgMTU7CisrCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKwkJeworKwkJ YyA9ICpwOworKwkJYysrOworKwkJKnAgPSBjOworKwkJaWYgKGMpCisrCQkJcmV0dXJuOworKwkJ cC0tOworKwkJfQorKwl9CisrCisrc3RhdGljIHZvaWQgY3RyX1hPUihEUkJHX0NUUl9DVFggKmNj dHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisrCXsKKysJc2l6ZV90 IGksIG47CisrCS8qIEFueSB6ZXJvIHBhZGRpbmcgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUg cmVzdWx0IGFzIHdlCisrCSAqIGFyZSBYT1JpbmcuIFNvIGp1c3QgcHJvY2VzcyBob3dldmVyIG11 Y2ggaW5wdXQgd2UgaGF2ZS4KKysJICovCisrCisrCWlmICghaW4gfHwgIWlubGVuKQorKwkJcmV0 dXJuOworKworKwlpZiAoaW5sZW4gPCBjY3R4LT5rZXlsZW4pCisrCQluID0gaW5sZW47CisrCWVs c2UKKysJCW4gPSBjY3R4LT5rZXlsZW47CisrCisrCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisr CQljY3R4LT5LW2ldIF49IGluW2ldOworKwlpZiAoaW5sZW4gPD0gY2N0eC0+a2V5bGVuKQorKwkJ cmV0dXJuOworKworKwluID0gaW5sZW4gLSBjY3R4LT5rZXlsZW47CisrCS8qIFNob3VsZCBuZXZl ciBoYXBwZW4gKi8KKysJaWYgKG4gPiAxNikKKysJCW4gPSAxNjsKKysJZm9yIChpID0gMDsgaSA8 IDE2OyBpKyspCisrCQljY3R4LT5WW2ldIF49IGluW2kgKyBjY3R4LT5rZXlsZW5dOworKwl9Cisr CisrLyogUHJvY2VzcyBhIGNvbXBsZXRlIGJsb2NrIHVzaW5nIEJDQyBhbGdvcml0aG0gb2YgU1BQ IDgwMC05MCAxMC40LjMgKi8KKysKKytzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrKERSQkdfQ1RS X0NUWCAqY2N0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICppbikKKysJeworKwlpbnQgaTsKKysJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrCQlvdXRb aV0gXj0gaW5baV07CisrCUFFU19lbmNyeXB0KG91dCwgb3V0LCAmY2N0eC0+ZGZfa3MpOworKyNp ZiAwCisrZnByaW50ZihzdGRlcnIsICJCQ0MgaW4rb3V0XG4iKTsKKytCSU9fZHVtcF9mcChzdGRl cnIsIGluLCAxNik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBvdXQsIDE2KTsKKysjZW5kaWYKKysJ fQorKworKy8qIEhhbmRsZSBzZXZlcmFsIEJDQyBvcGVyYXRpb25zIGZvciBhcyBtdWNoIGRhdGEg YXMgd2UgbmVlZCBmb3IgSyBhbmQgWCAqLworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2tzKERS QkdfQ1RSX0NUWCAqY2N0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4pCisrCXsKKysJY3RyX0JD Q19ibG9jayhjY3R4LCBjY3R4LT5LWCwgaW4pOworKwljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgt PktYICsgMTYsIGluKTsKKysJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKKysJCWN0cl9CQ0NfYmxv Y2soY2N0eCwgY2N0eC0+S1ggKyAzMiwgaW4pOworKwl9CisrLyogSW5pdGlhbGlzZSBCQ0MgYmxv Y2tzOiB0aGVzZSBoYXZlIHRoZSB2YWx1ZSAwLDEsMiBpbiBsZWZ0bW9zdCBwb3NpdGlvbnM6Cisr ICogc2VlIDEwLjQuMiBzdGFnZSA3LgorKyAqLworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfaW5pdChE UkJHX0NUUl9DVFggKmNjdHgpCisrCXsKKysJbWVtc2V0KGNjdHgtPktYLCAwLCA0OCk7CisrCW1l bXNldChjY3R4LT5ibHRtcCwgMCwgMTYpOworKwljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktY LCBjY3R4LT5ibHRtcCk7CisrCWNjdHgtPmJsdG1wWzNdID0gMTsKKysJY3RyX0JDQ19ibG9jayhj Y3R4LCBjY3R4LT5LWCArIDE2LCBjY3R4LT5ibHRtcCk7CisrCWlmIChjY3R4LT5rZXlsZW4gIT0g MTYpCisrCQl7CisrCQljY3R4LT5ibHRtcFszXSA9IDI7CisrCQljdHJfQkNDX2Jsb2NrKGNjdHgs IGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsKKysJCX0KKysJfQorKworKy8qIFByb2Nlc3Mg c2V2ZXJhbCBibG9ja3MgaW50byBCQ0MgYWxnb3JpdGhtLCBzb21lIHBvc3NpYmx5IHBhcnRpYWwg Ki8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX3VwZGF0ZShEUkJHX0NUUl9DVFggKmNjdHgsCisrCQkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisrCXsKKysJaWYgKCFpbiB8 fCAhaW5sZW4pCisrCQlyZXR1cm47CisrCS8qIElmIHdlIGhhdmUgcGFydGlhbCBibG9jayBoYW5k bGUgaXQgZmlyc3QgKi8KKysJaWYgKGNjdHgtPmJsdG1wX3BvcykKKysJCXsKKysJCXNpemVfdCBs ZWZ0ID0gMTYgLSBjY3R4LT5ibHRtcF9wb3M7CisrCQkvKiBJZiB3ZSBub3cgaGF2ZSBhIGNvbXBs ZXRlIGJsb2NrIHByb2Nlc3MgaXQgKi8KKysJCWlmIChpbmxlbiA+PSBsZWZ0KQorKwkJCXsKKysJ CQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBsZWZ0KTsKKysJCQlj dHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7CisrCQkJY2N0eC0+Ymx0bXBfcG9zID0g MDsKKysJCQlpbmxlbiAtPSBsZWZ0OworKwkJCWluICs9IGxlZnQ7CisrCQkJfQorKwkJfQorKwkv KiBQcm9jZXNzIHplcm8gb3IgbW9yZSBjb21wbGV0ZSBibG9ja3MgKi8KKysJd2hpbGUgKGlubGVu ID49IDE2KQorKwkJeworKwkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgaW4pOworKwkJaW4gKz0gMTY7 CisrCQlpbmxlbiAtPSAxNjsKKysJCX0KKysJLyogQ29weSBhbnkgcmVtYWluaW5nIHBhcnRpYWwg YmxvY2sgdG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KKysJaWYgKGlubGVuID4gMCkKKysJCXsK KysJCW1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGlubGVuKTsKKysJ CWNjdHgtPmJsdG1wX3BvcyArPSBpbmxlbjsKKysJCX0KKysJfQorKworK3N0YXRpYyB2b2lkIGN0 cl9CQ0NfZmluYWwoRFJCR19DVFJfQ1RYICpjY3R4KQorKwl7CisrCWlmIChjY3R4LT5ibHRtcF9w b3MpCisrCQl7CisrCQltZW1zZXQoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIDAsIDE2 IC0gY2N0eC0+Ymx0bXBfcG9zKTsKKysJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1w KTsKKysJCX0KKysJfQorKworK3N0YXRpYyB2b2lkIGN0cl9kZihEUkJHX0NUUl9DVFggKmNjdHgs CisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAorKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBj aGFyICppbjMsIHNpemVfdCBpbjNsZW4pCisrCXsKKysJc2l6ZV90IGlubGVuOworKwl1bnNpZ25l ZCBjaGFyICpwID0gY2N0eC0+Ymx0bXA7CisrCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGM4MCA9IDB4 ODA7CisrCisrCWN0cl9CQ0NfaW5pdChjY3R4KTsKKysJaWYgKCFpbjEpCisrCQlpbjFsZW4gPSAw OworKwlpZiAoIWluMikKKysJCWluMmxlbiA9IDA7CisrCWlmICghaW4zKQorKwkJaW4zbGVuID0g MDsKKysJaW5sZW4gPSBpbjFsZW4gKyBpbjJsZW4gKyBpbjNsZW47CisrCS8qIEluaXRpYWxpc2Ug THx8TiBpbiB0ZW1wb3JhcnkgYmxvY2sgKi8KKysJKnArKyA9IChpbmxlbiA+PiAyNCkgJiAweGZm OworKwkqcCsrID0gKGlubGVuID4+IDE2KSAmIDB4ZmY7CisrCSpwKysgPSAoaW5sZW4gPj4gOCkg JiAweGZmOworKwkqcCsrID0gaW5sZW4gJiAweGZmOworKwkvKiBOQiBrZXlsZW4gaXMgYXQgbW9z dCAzMiBieXRlcyAqLworKwkqcCsrID0gMDsKKysJKnArKyA9IDA7CisrCSpwKysgPSAwOworKwkq cCA9ICh1bnNpZ25lZCBjaGFyKSgoY2N0eC0+a2V5bGVuICsgMTYpICYgMHhmZik7CisrCWNjdHgt PmJsdG1wX3BvcyA9IDg7CisrCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMSwgaW4xbGVuKTsKKysJ Y3RyX0JDQ191cGRhdGUoY2N0eCwgaW4yLCBpbjJsZW4pOworKwljdHJfQkNDX3VwZGF0ZShjY3R4 LCBpbjMsIGluM2xlbik7CisrCWN0cl9CQ0NfdXBkYXRlKGNjdHgsICZjODAsIDEpOworKwljdHJf QkNDX2ZpbmFsKGNjdHgpOworKwkvKiBTZXQgdXAga2V5IEsgKi8KKysJQUVTX3NldF9lbmNyeXB0 X2tleShjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICogOCwgJmNjdHgtPmRmX2t4a3MpOworKwkvKiBY IGZvbGxvd3Mga2V5IEsgKi8KKysJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyBjY3R4LT5rZXlsZW4s IGNjdHgtPktYLCAmY2N0eC0+ZGZfa3hrcyk7CisrCUFFU19lbmNyeXB0KGNjdHgtPktYLCBjY3R4 LT5LWCArIDE2LCAmY2N0eC0+ZGZfa3hrcyk7CisrCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisr CQlBRVNfZW5jcnlwdChjY3R4LT5LWCArIDE2LCBjY3R4LT5LWCArIDMyLCAmY2N0eC0+ZGZfa3hr cyk7CisrI2lmIDAKKytmcHJpbnRmKHN0ZGVyciwgIk91dHB1dCBvZiBjdHJfZGY6XG4iKTsKKytC SU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKyAxNik7CisrI2VuZGlm CisrCX0KKysKKysvKiBOQiB0aGUgbm8tZGYgIFVwZGF0ZSBpbiBTUDgwMC05MCBzcGVjaWZpZXMg YSBjb25zdGFudCBpbnB1dCBsZW5ndGgKKysgKiBvZiBzZWVkbGVuLCBob3dldmVyIG90aGVyIHVz ZXMgb2YgdGhpcyBhbGdvcml0aG0gcGFkIHRoZSBpbnB1dCB3aXRoCisrICogemVyb2VzIGlmIG5l Y2Vzc2FyeSBhbmQgaGF2ZSB1cCB0byB0d28gcGFyYW1ldGVycyBYT1JlZCB0b2dldGhlciwKKysg KiBoYW5kbGUgYm90aCBjYXNlcyBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCisrICovCisrCisr c3RhdGljIHZvaWQgY3RyX1VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwg c2l6ZV90IGluMmxlbiwKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9u Y2VsZW4pCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKwkvKiBr cyBpcyBhbHJlYWR5IHNldHVwIGZvciBjb3JyZWN0IGtleSAqLworKwlpbmNfMTI4KGNjdHgpOwor KwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOworKwkvKiBJZiBrZXls ZW4gbG9uZ2VyIHRoYW4gMTI4IGJpdHMgbmVlZCBleHRyYSBlbmNyeXB0ICovCisrCWlmIChjY3R4 LT5rZXlsZW4gIT0gMTYpCisrCQl7CisrCQlpbmNfMTI4KGNjdHgpOworKwkJQUVTX2VuY3J5cHQo Y2N0eC0+ViwgY2N0eC0+SyArIDE2LCAmY2N0eC0+a3MpOworKwkJfQorKwlpbmNfMTI4KGNjdHgp OworKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5WLCAmY2N0eC0+a3MpOworKwkvKiBJZiAx OTIgYml0IGtleSBwYXJ0IG9mIFYgaXMgb24gZW5kIG9mIEsgKi8KKysJaWYgKGNjdHgtPmtleWxl biA9PSAyNCkKKysJCXsKKysJCW1lbWNweShjY3R4LT5WICsgOCwgY2N0eC0+ViwgOCk7CisrCQlt ZW1jcHkoY2N0eC0+ViwgY2N0eC0+SyArIDI0LCA4KTsKKysJCX0KKysKKysJaWYgKGRjdHgtPnhm bGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQorKwkJeworKwkJLyogSWYgbm8gaW5wdXQgcmV1 c2UgZXhpc3RpbmcgZGVyaXZlZCB2YWx1ZSAqLworKwkJaWYgKGluMSB8fCBub25jZSB8fCBpbjIp CisrCQkJY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVuLCBub25jZSwgbm9uY2VsZW4sIGluMiwgaW4y bGVuKTsKKysJCS8qIElmIHRoaXMgYSByZXVzZSBpbnB1dCBpbjFsZW4gIT0gMCAqLworKwkJaWYg KGluMWxlbikKKysJCQljdHJfWE9SKGNjdHgsIGNjdHgtPktYLCBkY3R4LT5zZWVkbGVuKTsKKysJ CX0KKysJZWxzZQorKwkJeworKwkJY3RyX1hPUihjY3R4LCBpbjEsIGluMWxlbik7CisrCQljdHJf WE9SKGNjdHgsIGluMiwgaW4ybGVuKTsKKysJCX0KKysKKysJQUVTX3NldF9lbmNyeXB0X2tleShj Y3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKKysjaWYgMAorK2ZwcmludGYoc3Rk ZXJyLCAiSytWIGFmdGVyIHVwZGF0ZSBpczpcbiIpOworK0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0 eC0+SywgY2N0eC0+a2V5bGVuKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPlYsIDE2KTsK KysjZW5kaWYKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfaW5zdGFudGlhdGUoRFJCR19D VFggKmRjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAor KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCisrCXsKKysJRFJCR19DVFJf Q1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKwltZW1zZXQoY2N0eC0+SywgMCwgc2l6ZW9mKGNj dHgtPkspKTsKKysJbWVtc2V0KGNjdHgtPlYsIDAsIHNpemVvZihjY3R4LT5WKSk7CisrCUFFU19z ZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7CisrCWN0 cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIHBlcnMsIHBlcnNsZW4sIG5vbmNlLCBub25jZWxl bik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9yZXNlZWQoRFJC R19DVFggKmRjdHgsIAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxl biwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKysJewor KwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBhZGluLCBhZGlubGVuLCBOVUxMLCAwKTsK KysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX2dlbmVyYXRlKERSQkdf Q1RYICpkY3R4LAorKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysJCQlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKysJeworKwlEUkJHX0NU Ul9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCWlmIChhZGluICYmIGFkaW5sZW4pCisrCQl7 CisrCQljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOwor KwkJLyogVGhpcyBtZWFucyB3ZSByZXVzZSBkZXJpdmVkIHZhbHVlICovCisrCQlpZiAoZGN0eC0+ eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCisrCQkJeworKwkJCWFkaW4gPSBOVUxMOwor KwkJCWFkaW5sZW4gPSAxOworKwkJCX0KKysJCX0KKysJZWxzZQorKwkJYWRpbmxlbiA9IDA7Cisr CisrCWZvciAoOzspCisrCQl7CisrCQlpbmNfMTI4KGNjdHgpOworKwkJaWYgKCEoZGN0eC0+eGZs YWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKKysJCQl7CisrCQkJQUVT X2VuY3J5cHQoY2N0eC0+ViwgZGN0eC0+bGIsICZjY3R4LT5rcyk7CisrCQkJZGN0eC0+bGJfdmFs aWQgPSAxOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmIChvdXRsZW4gPCAxNikKKysJCQl7 CisrCQkJLyogVXNlIEsgYXMgdGVtcCBzcGFjZSBhcyBpdCB3aWxsIGJlIHVwZGF0ZWQgKi8KKysJ CQlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOworKwkJCWlmICghZmlw c19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgY2N0eC0+SykpCisrCQkJCXJldHVybiAwOworKwkJCW1l bWNweShvdXQsIGNjdHgtPkssIG91dGxlbik7CisrCQkJYnJlYWs7CisrCQkJfQorKwkJQUVTX2Vu Y3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3MpOworKwkJaWYgKCFmaXBzX2RyYmdfY3Bybmdf dGVzdChkY3R4LCBvdXQpKQorKwkJCXJldHVybiAwOworKwkJb3V0ICs9IDE2OworKwkJb3V0bGVu IC09IDE2OworKwkJaWYgKG91dGxlbiA9PSAwKQorKwkJCWJyZWFrOworKwkJfQorKworKwljdHJf VXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOworKworKwlyZXR1 cm4gMTsKKysKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfdW5pbnN0YW50aWF0ZShEUkJH X0NUWCAqZGN0eCkKKysJeworKwltZW1zZXQoJmRjdHgtPmQuY3RyLCAwLCBzaXplb2YoRFJCR19D VFJfQ1RYKSk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IGZpcHNfZHJiZ19jdHJfaW5pdChE UkJHX0NUWCAqZGN0eCkKKysJeworKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7 CisrCisrCXNpemVfdCBrZXlsZW47CisrCisrCXN3aXRjaCAoZGN0eC0+dHlwZSkKKysJCXsKKysJ CWNhc2UgTklEX2Flc18xMjhfY3RyOgorKwkJa2V5bGVuID0gMTY7CisrCQlicmVhazsKKysKKysJ CWNhc2UgTklEX2Flc18xOTJfY3RyOgorKwkJa2V5bGVuID0gMjQ7CisrCQlicmVhazsKKysKKysJ CWNhc2UgTklEX2Flc18yNTZfY3RyOgorKwkJa2V5bGVuID0gMzI7CisrCQlicmVhazsKKysKKysJ CWRlZmF1bHQ6CisrCQlyZXR1cm4gLTI7CisrCQl9CisrCisrCWRjdHgtPmluc3RhbnRpYXRlID0g ZHJiZ19jdHJfaW5zdGFudGlhdGU7CisrCWRjdHgtPnJlc2VlZCA9IGRyYmdfY3RyX3Jlc2VlZDsK KysJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2N0cl9nZW5lcmF0ZTsKKysJZGN0eC0+dW5pbnN0YW50 aWF0ZSA9IGRyYmdfY3RyX3VuaW5zdGFudGlhdGU7CisrCisrCWNjdHgtPmtleWxlbiA9IGtleWxl bjsKKysJZGN0eC0+c3RyZW5ndGggPSBrZXlsZW4gKiA4OworKwlkY3R4LT5ibG9ja2xlbmd0aCA9 IDE2OworKwlkY3R4LT5zZWVkbGVuID0ga2V5bGVuICsgMTY7CisrCisrCWlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKKysJCXsKKysJCS8qIGRmIGluaXRpYWxpc2F0aW9u ICovCisrCQlzdGF0aWMgdW5zaWduZWQgY2hhciBkZl9rZXlbMzJdID0KKysJCQl7CisrCQkJMHgw MCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAorKwkJCTB4MDgsMHgwOSwweDBh LDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwKKysJCQkweDEwLDB4MTEsMHgxMiwweDEzLDB4MTQs MHgxNSwweDE2LDB4MTcsCisrCQkJMHgxOCwweDE5LDB4MWEsMHgxYiwweDFjLDB4MWQsMHgxZSww eDFmIAorKwkJCX07CisrCQkvKiBTZXQga2V5IHNjaGVkdWxlIGZvciBkZl9rZXkgKi8KKysJCUFF U19zZXRfZW5jcnlwdF9rZXkoZGZfa2V5LCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmRmX2tzKTsK KysKKysJCWRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0eC0+a2V5bGVuOworKwkJZGN0eC0+bWF4X2Vu dHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCQlkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5f ZW50cm9weSAvIDI7CisrCQlkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7CisrCQlk Y3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKKysJCWRjdHgtPm1heF9hZGluID0gRFJC R19NQVhfTEVOR1RIOworKwkJfQorKwllbHNlCisrCQl7CisrCQlkY3R4LT5taW5fZW50cm9weSA9 IGRjdHgtPnNlZWRsZW47CisrCQlkY3R4LT5tYXhfZW50cm9weSA9IGRjdHgtPnNlZWRsZW47Cisr CQkvKiBOb25jZSBub3QgdXNlZCAqLworKwkJZGN0eC0+bWluX25vbmNlID0gMDsKKysJCWRjdHgt Pm1heF9ub25jZSA9IDA7CisrCQlkY3R4LT5tYXhfcGVycyA9IGRjdHgtPnNlZWRsZW47CisrCQlk Y3R4LT5tYXhfYWRpbiA9IGRjdHgtPnNlZWRsZW47CisrCQl9CisrCisrCWRjdHgtPm1heF9yZXF1 ZXN0ID0gMTw8MTY7CisrCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0OworKworKwlyZXR1 cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2hhc2guYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMK Ky0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jLmZpcHMJMjAx Mi0wNy0xMiAyMTo0OToyNS4zMzkzNTIzMDcgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM5MzUyMzA3ICsw MjAwCitAQCAtMCwwICsxLDM3OCBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaGFzaC5jICov CisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRl IDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogVGhpcyBpcyBI YXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQuMSAqLworKworK3N0YXRpYyBpbnQgaGFzaF9kZihE UkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNp emVfdCBpbjJsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVu LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluNCwgc2l6ZV90IGluNGxlbikKKysJeworKwlF VlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQuaGFzaC5tY3R4OworKwl1bnNpZ25lZCBjaGFyICp2 dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7CisrCXVuc2lnbmVkIGNoYXIgdG1wWzZdOworKwkvKiBT dGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdheXMgbGVz cyB0aGFuCisrCSAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sgbGVuZ3Ro LgorKwkgKi8KKysJc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47CisrCXRtcFswXSA9IDE7 CisrCXRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsKKysJdG1wWzJdID0gKChv dXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOworKwl0bXBbM10gPSAoKG91dGxlbiAqIDgpID4+IDgp ICYgMHhmZjsKKysJdG1wWzRdID0gKG91dGxlbiAqIDgpICYgMHhmZjsKKysJaWYgKCFpbjEpCisr CQl7CisrCQl0bXBbNV0gPSAodW5zaWduZWQgY2hhcilpbjFsZW47CisrCQlpbjEgPSB0bXAgKyA1 OworKwkJaW4xbGVuID0gMTsKKysJCX0KKysJZm9yICg7OykKKysJCXsKKysJCWlmICghRklQU19k aWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAo IUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAo aW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEsIGluMWxlbikpCisrCQkJcmV0dXJu IDA7CisrCQlpZiAoaW4yICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIsIGluMmxlbikp CisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBp bjMsIGluM2xlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW40ICYmICFGSVBTX2RpZ2VzdHVw ZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAob3V0bGVuIDwg ZGN0eC0+YmxvY2tsZW5ndGgpCisrCQkJeworKwkJCWlmICghRklQU19kaWdlc3RmaW5hbChtY3R4 LCB2dG1wLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91dCwgdnRtcCwgb3V0 bGVuKTsKKysJCQlPUEVOU1NMX2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwkJ CXJldHVybiAxOworKwkJCX0KKysJCWVsc2UgaWYoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgb3V0 LCBOVUxMKSkKKysJCQlyZXR1cm4gMDsKKysKKysJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0 aDsKKysJCWlmIChvdXRsZW4gPT0gMCkKKysJCQlyZXR1cm4gMTsKKysJCXRtcFswXSsrOworKwkJ b3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJfQorKwl9CisrCisrCisrLyogQWRkIGFuIHVu c2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYnVm LiBGb3IKKysgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVyIGV4Y2Vl ZHMgdGhlIHNlZWQgbGVuZ3RoLgorKyAqLworKworK3N0YXRpYyB2b2lkIGN0eF9hZGRfYnVmKERS QkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCisrCQkJCXVuc2lnbmVkIGNoYXIgKmlu LCBzaXplX3QgaW5sZW4pCisrCXsKKysJc2l6ZV90IGkgPSBpbmxlbjsKKysJY29uc3QgdW5zaWdu ZWQgY2hhciAqcTsKKysJdW5zaWduZWQgY2hhciBjLCAqcDsKKysJcCA9IGJ1ZiArIGRjdHgtPnNl ZWRsZW47CisrCXEgPSBpbiArIGlubGVuOworKworKwlPUEVOU1NMX2Fzc2VydChpIDw9IGRjdHgt PnNlZWRsZW4pOworKworKwkvKiBTcGVjaWFsIGNhc2U6IHplcm8gbGVuZ3RoLCBqdXN0IGluY3Jl bWVudCBidWZmZXIgKi8KKysJaWYgKGkpCisrCQljID0gMDsKKysJZWxzZSAKKysJCWMgPSAxOwor KworKwl3aGlsZSAoaSkKKysJCXsKKysJCWludCByOworKwkJcC0tOworKwkJcS0tOworKwkJciA9 ICpwICsgKnEgKyBjOworKwkJLyogQ2FycnkgKi8KKysJCWlmIChyID4gMHhmZikKKysJCQljID0g MTsKKysJCWVsc2UKKysJCQljID0gMDsKKysJCSpwID0gciAmIDB4ZmY7CisrCQlpLS07CisrCQl9 CisrCisrCWkgPSBkY3R4LT5zZWVkbGVuIC0gaW5sZW47CisrCisrCS8qIElmIG5vdCBhZGRpbmcg d2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJyaWVzICovCisrCWlmIChjICYmIGkpCisrCQl7 CisrCQlkbworKwkJCXsKKysJCQlwLS07CisrCQkJYyA9ICpwOworKwkJCWMrKzsKKysJCQkqcCA9 IGM7CisrCQkJaWYoYykKKysJCQkJcmV0dXJuOworKwkJCX0gd2hpbGUoaS0tKTsKKysJCX0KKysJ fQorKworKy8qIEZpbmFsaXNlIGFuZCBhZGQgaGFzaCB0byBWICovCisrCQorK3N0YXRpYyBpbnQg Y3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlpZiAoIUZJUFNfZGlnZXN0ZmluYWwo JmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhhc2gudnRtcCwgTlVMTCkpCisrCQkJcmV0dXJu IDA7CisrCWN0eF9hZGRfYnVmKGRjdHgsIGRjdHgtPmQuaGFzaC5WLCBkY3R4LT5kLmhhc2gudnRt cCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQg aGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxl bikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJaWYgKG91 dGxlbiA9PSAwKQorKwkJcmV0dXJuIDE7CisrCW1lbWNweShoY3R4LT52dG1wLCBoY3R4LT5WLCBk Y3R4LT5zZWVkbGVuKTsKKysJZm9yKDs7KQorKwkJeworKwkJRklQU19kaWdlc3Rpbml0KCZoY3R4 LT5tY3R4LCBoY3R4LT5tZCk7CisrCQlGSVBTX2RpZ2VzdHVwZGF0ZSgmaGN0eC0+bWN0eCwgaGN0 eC0+dnRtcCwgZGN0eC0+c2VlZGxlbik7CisrCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQorKwkJCXsKKysJCQlGSVBTX2RpZ2VzdGZpbmFs KCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOwor KwkJCX0KKysJCWVsc2UgaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJ CQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1wLCBOVUxMKTsKKysJCQlp ZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhjdHgtPnZ0bXApKQorKwkJCQlyZXR1cm4g MDsKKysJCQltZW1jcHkob3V0LCBoY3R4LT52dG1wLCBvdXRsZW4pOworKwkJCXJldHVybiAxOwor KwkJCX0KKysJCWVsc2UKKysJCQl7CisrCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwg b3V0LCBOVUxMKTsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisr CQkJCXJldHVybiAwOworKwkJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCQlpZiAo b3V0bGVuID09IDApCisrCQkJCXJldHVybiAxOworKwkJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0 aDsKKysJCQl9CisrCQljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT52dG1wLCBOVUxMLCAwKTsKKysJ CX0KKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2luc3RhbnRpYXRlKERSQkdfQ1RYICpk Y3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQorKwl7CisrCURSQkdfSEFT SF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+ ViwgCisrCQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbiwK KysJCQlOVUxMLCAwKSkKKysJCXJldHVybiAwOworKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+ QywgCisrCQkJTlVMTCwgMCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKKysJCQlOVUxMLCAwLCBO VUxMLCAwKSkKKysJCXJldHVybiAwOworKworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysJZnBy aW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKKysJaGV4cHJpbnQoc3Rk ZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5D LCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKysJCisrc3Rh dGljIGludCBkcmJnX2hhc2hfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZk Y3R4LT5kLmhhc2g7CisrCS8qIFYgYWJvdXQgdG8gYmUgdXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRw dXQgaW5zdGVhZCAqLworKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywKKysJCQlOVUxMLCAx LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAorKwkJCWVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9s ZW4pKQorKwkJcmV0dXJuIDA7CisrCW1lbWNweShoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVk bGVuKTsKKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIE5VTEwsIDAsCisrCQkJaGN0eC0+ ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysjaWZk ZWYgSEFTSF9EUkJHX1RSQUNFCisrCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpc biIpOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKwloZXhw cmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRpZgorKwlyZXR1cm4g MTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4 LAorKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKysJeworKwlEUkJHX0hBU0hfQ1RY ICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJRVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4LT5tY3R4 OworKwl1bnNpZ25lZCBjaGFyIHRtcFs0XTsKKysJaWYgKGFkaW4gJiYgYWRpbl9sZW4pCisrCQl7 CisrCQl0bXBbMF0gPSAyOworKwkJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQp KQorKwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkp CisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgaGN0eC0+Viwg ZGN0eC0+c2VlZGxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUo bWN0eCwgYWRpbiwgYWRpbl9sZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFjdHhfYWRkX21k KGRjdHgpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWhhc2hfZ2VuKGRjdHgsIG91dCwg b3V0bGVuKSkKKysJCXJldHVybiAwOworKworKwl0bXBbMF0gPSAzOworKwlpZiAoIUZJUFNfZGln ZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFFVlBfRGlnZXN0 VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFFVlBfRGlnZXN0VXBk YXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQorKwkJcmV0dXJuIDA7CisrCisrCWlm ICghY3R4X2FkZF9tZChkY3R4KSkKKysJCXJldHVybiAwOworKworKwljdHhfYWRkX2J1ZihkY3R4 LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysKKysJdG1wWzBdID0gKGRjdHgt PnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7CisrCXRtcFsxXSA9IChkY3R4LT5yZXNlZWRf Y291bnRlciA+PiAxNikgJiAweGZmOworKwl0bXBbMl0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIg Pj4gOCkgJiAweGZmOworKwl0bXBbM10gPSBkY3R4LT5yZXNlZWRfY291bnRlciAmIDB4ZmY7Cisr CWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRtcCwgNCk7CisrI2lmZGVmIEhBU0hfRFJCR19U UkFDRQorKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBnZW5lcmF0ZTpcbiIpOworKwloZXhw cmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKwloZXhwcmludChzdGRlcnIs IGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKwor K3N0YXRpYyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsK KysJRVZQX01EX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhhc2gubWN0eCk7CisrCU9QRU5TU0xfY2xl YW5zZSgmZGN0eC0+ZC5oYXNoLCBzaXplb2YoRFJCR19IQVNIX0NUWCkpOworKwlyZXR1cm4gMTsK KysJfQorKworK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KQorKwl7Cisr CWNvbnN0IEVWUF9NRCAqbWQ7CisrCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNo OworKwltZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOworKwlpZiAoIW1kKQor KwkJcmV0dXJuIC0yOworKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCisrCQl7CisrCQljYXNlIE5JRF9z aGExOgorKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklE X3NoYTIyNDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOworKwkJYnJlYWs7CisrCisrCQlkZWZh dWx0OgorKwkJZGN0eC0+c3RyZW5ndGggPSAyNTY7CisrCQlicmVhazsKKysJCX0KKysKKysJZGN0 eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfaW5zdGFudGlhdGU7CisrCWRjdHgtPnJlc2VlZCA9 IGRyYmdfaGFzaF9yZXNlZWQ7CisrCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19oYXNoX2dlbmVyYXRl OworKwlkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX3VuaW5zdGFudGlhdGU7CisrCisr CWRjdHgtPmQuaGFzaC5tZCA9IG1kOworKwlFVlBfTURfQ1RYX2luaXQoJmhjdHgtPm1jdHgpOwor KworKwkvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4MDAtOTAgMTAuMSB0YWJsZSAyICovCisr CisrCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCWlmIChkY3R4LT5i bG9ja2xlbmd0aCA+IDMyKQorKwkJZGN0eC0+c2VlZGxlbiA9IDExMTsKKysJZWxzZQorKwkJZGN0 eC0+c2VlZGxlbiA9IDU1OworKworKworKwlkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVu Z3RoIC8gODsKKysJZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrCWRj dHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysJZGN0eC0+bWF4X25vbmNl ID0gRFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdU SDsKKysJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7CisrCisrCWRjdHgtPm1heF9y ZXF1ZXN0ID0gMTw8MTY7CisrCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0OworKworKwly ZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFj LmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jLmZpcHMJ MjAxMi0wNy0xMiAyMTo0OToyNS4zMzkzNTIzMDcgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM5MzUyMzA3 ICswMjAwCitAQCAtMCwwICsxLDI4MSBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaG1hYy5j ICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9y ZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0 cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9h ZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKytzdGF0aWMgaW50IGRy YmdfaG1hY191cGRhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXpl X3QgaW4ybGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4K KysJCQkpCisrCXsKKysJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzAgPSAwLCBjMSA9IDE7CisrCURS QkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOworKwlITUFDX0NUWCAqaGN0eCA9ICZo bWFjLT5oY3R4OworKworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5i bG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19V cGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7Cisr CWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMwLCAxKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4x bGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCisrCQlyZXR1cm4gMDsKKysJ aWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQorKwkJcmV0dXJu IDA7CisrCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVuKSkKKysJ CXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCisr CQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+ YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNf VXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOwor KworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrCQlyZXR1cm4gMDsK KysKKysJaWYgKCFpbjFsZW4gJiYgIWluMmxlbiAmJiAhaW4zbGVuKQorKwkJcmV0dXJuIDE7Cisr CisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBo bWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBo bWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1Vw ZGF0ZShoY3R4LCAmYzEsIDEpKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjFsZW4gJiYgIUhNQUNf VXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4ybGVuICYm ICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGlu M2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQorKwkJcmV0dXJuIDA7Cisr CisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKKysJCXJldHVybiAwOwor KworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwg aG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwg aG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1B Q19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4g MTsKKysKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19obWFjX2luc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQorKwl7CisrCURSQkdf SE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOworKwltZW1zZXQoaG1hYy0+SywgMCwgZGN0 eC0+YmxvY2tsZW5ndGgpOworKwltZW1zZXQoaG1hYy0+ViwgMSwgZGN0eC0+YmxvY2tsZW5ndGgp OworKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKKysJCQllbnQsIGVudF9sZW4sIG5vbmNl LCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuKSkKKysJCXJldHVybiAwOworKworKyNpZmRlZiBI TUFDX0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgaW5zdGFudGlhdGU6 XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7Cisr CWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOworKyNlbmRpZgor KwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19obWFjX3Jlc2VlZChEUkJHX0NU WCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwK KysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorKwl7Cisr CWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAorKwkJCWVudCwgZW50X2xlbiwgYWRpbiwgYWRp bl9sZW4sIE5VTEwsIDApKQorKwkJcmV0dXJuIDA7CisrCisrI2lmZGVmIEhNQUNfRFJCR19UUkFD RQorKwl7CisrCQlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJCWZwcmlu dGYoc3RkZXJyLCAiSytWIGFmdGVyIHJlc2VlZDpcbiIpOworKwkJaGV4cHJpbnQoc3RkZXJyLCBo bWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7CisrCQloZXhwcmludChzdGRlcnIsIGhtYWMtPlYs IGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysJfQorKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKwor K3N0YXRpYyBpbnQgZHJiZ19obWFjX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQl1bnNp Z25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmFkaW4sIHNpemVfdCBhZGluX2xlbikKKysJeworKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRj dHgtPmQuaG1hYzsKKysJSE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKKysJY29uc3QgdW5z aWduZWQgY2hhciAqVnRtcCA9IGhtYWMtPlY7CisrCWlmIChhZGluX2xlbiAmJiAhZHJiZ19obWFj X3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwKKysJCQkJCQlOVUxMLCAwLCBOVUxMLCAwKSkK KysJCXJldHVybiAwOworKwlmb3IgKDs7KQorKwkJeworKwkJaWYgKCFITUFDX0luaXRfZXgoaGN0 eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsCisrCQkJCQkJCWhtYWMtPm1kLCBOVUxMKSkK KysJCQlyZXR1cm4gMDsKKysJCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgVnRtcCwgZGN0eC0+Ymxv Y2tsZW5ndGgpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19G TEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKKysJCQl7CisrCQkJaWYgKCFITUFDX0ZpbmFs KGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJZGN0eC0+bGJfdmFs aWQgPSAxOworKwkJCVZ0bXAgPSBkY3R4LT5sYjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQll bHNlIGlmIChvdXRsZW4gPiBkY3R4LT5ibG9ja2xlbmd0aCkKKysJCQl7CisrCQkJaWYgKCFITUFD X0ZpbmFsKGhjdHgsIG91dCwgTlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCWlmICghZmlwc19k cmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKKysJCQkJcmV0dXJuIDA7CisrCQkJVnRtcCA9IG91 dDsKKysJCQl9CisrCQllbHNlCisrCQkJeworKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFj LT5WLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVz dChkY3R4LCBobWFjLT5WKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91dCwgaG1hYy0+ Viwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9CisrCQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5n dGg7CisrCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQl9CisrCWlmICghZHJiZ19o bWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrCQly ZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY191 bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCUhNQUNfQ1RYX2NsZWFudXAoJmRj dHgtPmQuaG1hYy5oY3R4KTsKKysJT1BFTlNTTF9jbGVhbnNlKCZkY3R4LT5kLmhtYWMsIHNpemVv ZihEUkJHX0hNQUNfQ1RYKSk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IGZpcHNfZHJiZ19o bWFjX2luaXQoRFJCR19DVFggKmRjdHgpCisrCXsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7 CisrCURSQkdfSE1BQ19DVFggKmhjdHggPSAmZGN0eC0+ZC5obWFjOworKwlkY3R4LT5zdHJlbmd0 aCA9IDI1NjsKKysJc3dpdGNoIChkY3R4LT50eXBlKQorKwkJeworKwkJY2FzZSBOSURfaG1hY1dp dGhTSEExOgorKwkJbWQgPSBFVlBfc2hhMSgpOworKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7Cisr CQlicmVhazsKKysKKysJCWNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgorKwkJbWQgPSBFVlBfc2hh MjI0KCk7CisrCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsKKysJCWJyZWFrOworKworKwkJY2FzZSBO SURfaG1hY1dpdGhTSEEyNTY6CisrCQltZCA9IEVWUF9zaGEyNTYoKTsKKysJCWJyZWFrOworKwor KwkJY2FzZSBOSURfaG1hY1dpdGhTSEEzODQ6CisrCQltZCA9IEVWUF9zaGEzODQoKTsKKysJCWJy ZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEE1MTI6CisrCQltZCA9IEVWUF9zaGE1MTIo KTsKKysJCWJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMDsKKysJ CXJldHVybiAtMjsKKysJCX0KKysgICAgICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19obWFj X2luc3RhbnRpYXRlOworKyAgICAgICAgZGN0eC0+cmVzZWVkID0gZHJiZ19obWFjX3Jlc2VlZDsK KysgICAgICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19obWFjX2dlbmVyYXRlOworKyAgICAgICAg ZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOworKwlITUFDX0NU WF9pbml0KCZoY3R4LT5oY3R4KTsKKysJaGN0eC0+bWQgPSBtZDsKKysJZGN0eC0+YmxvY2tsZW5n dGggPSBNX0VWUF9NRF9zaXplKG1kKTsKKysJZGN0eC0+c2VlZGxlbiA9IE1fRVZQX01EX3NpemUo bWQpOworKworKyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7 CisrICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysgICAg ICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysgICAgICAgIGRj dHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysgICAgICAgIGRjdHgtPm1heF9w ZXJzID0gRFJCR19NQVhfTEVOR1RIOworKyAgICAgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01B WF9MRU5HVEg7CisrCisrICAgICAgICBkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OworKyAgICAg ICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7CisrCisrCXJldHVybiAxOworKwl9Citk aWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMKKy0tLSBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjM0MDM1MjMyOSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19saWIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MDM1MjMyOSArMDIwMAorQEAgLTAsMCArMSw1 NzggQEAKKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrI2luY2x1ZGUg ImZpcHNfcmFuZF9sY2wuaCIKKysKKysvKiBTdXBwb3J0IGZyYW1ld29yayBmb3IgU1A4MDAtOTAg RFJCR3MgKi8KKysKKytpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBl LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisrCXsKKysJaW50IHJ2OworKwltZW1zZXQoZGN0eCwgMCwg c2l6ZW9mKERSQkdfQ1RYKSk7CisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQ7CisrCWRjdHgtPnhmbGFncyA9IGZsYWdzOworKwlkY3R4LT50eXBlID0gdHlwZTsKKysK KysJZGN0eC0+aWZsYWdzID0gMDsKKysJZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9IDA7CisrCWRj dHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOworKwlkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwg PSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKKysKKysJcnYgPSBmaXBzX2RyYmdfaGFzaF9pbml0KGRj dHgpOworKworKwlpZiAocnYgPT0gLTIpCisrCQlydiA9IGZpcHNfZHJiZ19jdHJfaW5pdChkY3R4 KTsKKysJaWYgKHJ2ID09IC0yKQorKwkJcnYgPSBmaXBzX2RyYmdfaG1hY19pbml0KGRjdHgpOwor KworKwlpZiAocnYgPD0gMCkKKysJCXsKKysJCWlmIChydiA9PSAtMikKKysJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1VOU1VQUE9SVEVEX0RSQkdfVFlQRSk7CisrCQll bHNlCisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9FUlJPUl9JTklU SUFMSVNJTkdfRFJCRyk7CisrCQl9CisrCisrCS8qIElmIG5vdCBpbiB0ZXN0IG1vZGUgcnVuIHNl bGZ0ZXN0cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5cGUgKi8KKysKKysJaWYgKCEoZGN0eC0+eGZs YWdzICYgRFJCR19GTEFHX1RFU1QpKQorKwkJeworKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2No ZWNrKGRjdHgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQ U19SX1NFTEZURVNUX0ZBSUxVUkUpOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysKKysJ cmV0dXJuIHJ2OworKwl9CisrCisrRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVu c2lnbmVkIGludCBmbGFncykKKysJeworKwlEUkJHX0NUWCAqZGN0eDsKKysJZGN0eCA9IE9QRU5T U0xfbWFsbG9jKHNpemVvZihEUkJHX0NUWCkpOworKwlpZiAoIWRjdHgpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfTkVXLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisrCQlyZXR1 cm4gTlVMTDsKKysJCX0KKysKKysJaWYgKHR5cGUgPT0gMCkKKysJCXsKKysJCW1lbXNldChkY3R4 LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysJCWRjdHgtPnR5cGUgPSAwOworKwkJZGN0eC0+c3Rh dHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysJCXJldHVybiBkY3R4OworKwkJfQor KworKwlpZiAoRklQU19kcmJnX2luaXQoZGN0eCwgdHlwZSwgZmxhZ3MpIDw9IDApCisrCQl7Cisr CQlPUEVOU1NMX2ZyZWUoZGN0eCk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysJCQorKwlyZXR1 cm4gZGN0eDsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpCisr CXsKKysJaWYgKGRjdHgtPnVuaW5zdGFudGlhdGUpCisrCQlkY3R4LT51bmluc3RhbnRpYXRlKGRj dHgpOworKwkvKiBEb24ndCBmcmVlIHVwIGRlZmF1bHQgRFJCRyAqLworKwlpZiAoZGN0eCA9PSBG SVBTX2dldF9kZWZhdWx0X2RyYmcoKSkKKysJCXsKKysJCW1lbXNldChkY3R4LCAwLCBzaXplb2Yo RFJCR19DVFgpKTsKKysJCWRjdHgtPnR5cGUgPSAwOworKwkJZGN0eC0+c3RhdHVzID0gRFJCR19T VEFUVVNfVU5JTklUSUFMSVNFRDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJT1BFTlNTTF9jbGVh bnNlKCZkY3R4LT5kLCBzaXplb2YoZGN0eC0+ZCkpOworKwkJT1BFTlNTTF9mcmVlKGRjdHgpOwor KwkJfQorKwl9CisrCisrc3RhdGljIHNpemVfdCBmaXBzX2dldF9lbnRyb3B5KERSQkdfQ1RYICpk Y3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5f bGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICp0b3V0LCAqcDsKKysJ c2l6ZV90IGJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbiwgcnY7CisrCWlmICghZGN0eC0+Z2V0 X2VudHJvcHkpCisrCQlyZXR1cm4gMDsKKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19U RVNUIHx8ICFibCkKKysJCXJldHVybiBkY3R4LT5nZXRfZW50cm9weShkY3R4LCBwb3V0LCBlbnRy b3B5LCBtaW5fbGVuLCBtYXhfbGVuKTsKKysJcnYgPSBkY3R4LT5nZXRfZW50cm9weShkY3R4LCAm dG91dCwgZW50cm9weSArIGJsLAorKwkJCQltaW5fbGVuICsgYmwsIG1heF9sZW4gKyBibCk7Cisr CWlmICh0b3V0ID09IE5VTEwpCisrCQlyZXR1cm4gMDsKKysJKnBvdXQgPSB0b3V0ICsgYmw7Cisr CWlmIChydiA8IChtaW5fbGVuICsgYmwpIHx8IChydiAlIGJsKSkKKysJCXJldHVybiAwOworKwkv KiBDb21wYXJlIGNvbnNlY3V0aXZlIGJsb2NrcyBmb3IgY29udGludW91cyBQUk5HIHRlc3QgKi8K KysJZm9yIChwID0gdG91dDsgcCA8IHRvdXQgKyBydiAtIGJsOyBwICs9IGJsKQorKwkJeworKwkJ aWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfR0VUX0VOVFJPUFksIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyk7CisrCQkJcmV0dXJu IDA7CisrCQkJfQorKwkJfQorKwlydiAtPSBibDsKKysJaWYgKHJ2ID4gbWF4X2xlbikKKysJCXJl dHVybiBtYXhfbGVuOworKwlyZXR1cm4gcnY7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2Ns ZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0eCwKKysJCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwg c2l6ZV90IG9sZW4pCisrCXsKKysJc2l6ZV90IGJsOworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJC R19GTEFHX1RFU1QpCisrCQlibCA9IDA7CisrCWVsc2UKKysJCWJsID0gZGN0eC0+ZW50cm9weV9i bG9ja2xlbjsKKysJLyogQ2FsbCBjbGVhbnVwIHdpdGggb3JpZ2luYWwgYXJndW1lbnRzICovCisr CWRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4LCBvdXQgLSBibCwgb2xlbiArIGJsKTsKKysJfQor KworKworK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQorKwl7CisrCXNpemVfdCBl bnRsZW4gPSAwLCBub25jZWxlbiA9IDA7CisrCXVuc2lnbmVkIGNoYXIgKm5vbmNlID0gTlVMTCwg KmVudHJvcHkgPSBOVUxMOworKworKyNpZiAwCisrCS8qIFB1dCBoZXJlIHNvIGVycm9yIHNjcmlw dCBwaWNrcyB0aGVtIHVwICovCisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFU RSwKKysJCQkJRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkcpOworKwlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTl9FUlJPUl9TVEFURSk7 CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0FMUkVBRFlf SU5TVEFOVElBVEVEKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBG SVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRSk7CisrCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOU1RBTlRJQVRFX0VSUk9S KTsKKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRFJCR19O T1RfSU5JVElBTElTRUQpOworKyNlbmRpZgorKworKwlpbnQgciA9IDA7CisrCisrCWlmIChwZXJz bGVuID4gZGN0eC0+bWF4X3BlcnMpCisrCQl7CisrCQlyID0gRklQU19SX1BFUlNPTkFMSVNBVElP Tl9TVFJJTkdfVE9PX0xPTkc7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFkY3R4LT5p bnN0YW50aWF0ZSkKKysJCXsKKysJCXIgPSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQ7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19V TklOSVRJQUxJU0VEKQorKwkJeworKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19F UlJPUikKKysJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOworKwkJZWxzZQorKwkJCXIgPSBG SVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrCisrCWVudGxlbiA9IGZpcHNfZ2V0X2Vu dHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAorKwkJCQlkY3R4LT5taW5fZW50 cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOworKworKwlpZiAoZW50bGVuIDwgZGN0eC0+bWluX2Vu dHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCisrCQl7CisrCQlyID0gRklQU19S X0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAo ZGN0eC0+bWF4X25vbmNlID4gMCAmJiBkY3R4LT5nZXRfbm9uY2UpCisrCQl7CisrCQlub25jZWxl biA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAmbm9uY2UsCisrCQkJCQlkY3R4LT5zdHJlbmd0aCAv IDIsCisrCQkJCQlkY3R4LT5taW5fbm9uY2UsIGRjdHgtPm1heF9ub25jZSk7CisrCisrCQlpZiAo bm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2UgfHwgbm9uY2VsZW4gPiBkY3R4LT5tYXhfbm9uY2Up CisrCQkJeworKwkJCXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRTsKKysJCQlnb3Rv IGVuZDsKKysJCQl9CisrCisrCQl9CisrCisrCWlmICghZGN0eC0+aW5zdGFudGlhdGUoZGN0eCwg CisrCQkJCWVudHJvcHksIGVudGxlbiwKKysJCQkJbm9uY2UsIG5vbmNlbGVuLAorKwkJCQlwZXJz LCBwZXJzbGVuKSkKKysJCXsKKysJCXIgPSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJH OworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVT X1JFQURZOworKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJ ZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOworKworKwllbmQ6CisrCisrCWlmIChlbnRyb3B5ICYm IGRjdHgtPmNsZWFudXBfZW50cm9weSkKKysJCWZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVu dHJvcHksIGVudGxlbik7CisrCisrCWlmIChub25jZSAmJiBkY3R4LT5jbGVhbnVwX25vbmNlKQor KwkJZGN0eC0+Y2xlYW51cF9ub25jZShkY3R4LCBub25jZSwgbm9uY2VsZW4pOworKworKwlpZiAo ZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZKQorKwkJcmV0dXJuIDE7CisrCisrCWlm IChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgcik7CisrCisrCXJldHVybiAwOworKworKwl9Cisr Cisrc3RhdGljIGludCBkcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbiwgaW50IGhjaGVjaykKKysJeworKwl1bnNp Z25lZCBjaGFyICplbnRyb3B5ID0gTlVMTDsKKysJc2l6ZV90IGVudGxlbiA9IDA7CisrCWludCBy ID0gMDsKKysKKysjaWYgMAorKwlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX05P VF9JTlNUQU5USUFURUQpOworKwlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX0FE RElUSU9OQUxfSU5QVVRfVE9PX0xPTkcpOworKyNlbmRpZgorKwlpZiAoZGN0eC0+c3RhdHVzICE9 IERSQkdfU1RBVFVTX1JFQURZCisrCQkmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVT RUVEKQorKwkJeworKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJ CQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOworKwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0g RFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCQlyID0gRklQU19SX05PVF9JTlNUQU5USUFU RUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFhZGluKQorKwkJYWRpbmxlbiA9IDA7 CisrCWVsc2UgaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikKKysJCXsKKysJCXIgPSBGSVBT X1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlk Y3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysJLyogUGVmb3JtIGhlYWx0aCBjaGVj ayBvbiBhbGwgcmVzZWVkIG9wZXJhdGlvbnMgaWYgbm90IGEgcHJlZGljdGlvbgorKwkgKiByZXNp c3RhbmNlIHJlcXVlc3QgYW5kIG5vdCBpbiB0ZXN0IG1vZGUuCisrCSAqLworKwlpZiAoaGNoZWNr ICYmICEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKQorKwkJeworKwkJaWYgKCFGSVBT X2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQorKwkJCXsKKysJCQlyID0gRklQU19SX1NFTEZURVNU X0ZBSUxVUkU7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJfQorKworKwllbnRsZW4gPSBmaXBz X2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKKysJCQkJZGN0eC0+ bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKKysKKysJaWYgKGVudGxlbiA8IGRjdHgt Pm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KQorKwkJeworKwkJciA9 IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwgZW50cm9weSwgZW50bGVuLCBhZGluLCBhZGlubGVu KSkKKysJCWdvdG8gZW5kOworKworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsK KysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKKysJCWRjdHgtPnJl c2VlZF9jb3VudGVyID0gMTsKKysJZW5kOgorKworKwlpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVh bnVwX2VudHJvcHkpCisrCQlmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRs ZW4pOworKworKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZKQorKwkJcmV0 dXJuIDE7CisrCisrCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkK KysJCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCByKTsKKysKKysJcmV0dXJuIDA7CisrCX0K KysKKytpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKysJeworKwlyZXR1cm4gZHJiZ19yZXNl ZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJi Z19jaGVjayhEUkJHX0NUWCAqZGN0eCkKKysJeworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19G TEFHX1RFU1QpCisrCQlyZXR1cm4gMTsKKysJZGN0eC0+aGVhbHRoX2NoZWNrX2NudCsrOworKwlp ZiAoZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA+PSBkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwp CisrCQl7CisrCQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpCisrCQkJeworKwkJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DSEVDSywgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUp OworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQg RklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvdXRsZW4sCisrCQkJaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKKysJCQljb25zdCB1 bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKysJeworKwlpbnQgciA9IDA7Cisr CisrCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAw OworKwkJfQorKworKwlpZiAoIWZpcHNfZHJiZ19jaGVjayhkY3R4KSkKKysJCXJldHVybiAwOwor KworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCisrCQkmJiBkY3R4LT5z dGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQorKwkJeworKwkJaWYgKGRjdHgtPnN0YXR1cyA9 PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOworKwkJ ZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCQly ID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KG91dGxlbiA+IGRjdHgtPm1heF9yZXF1ZXN0KQorKwkJeworKwkJciA9IEZJUFNfUl9SRVFVRVNU X1RPT19MQVJHRV9GT1JfRFJCRzsKKysJCXJldHVybiAwOworKwkJfQorKworKwlpZiAoYWRpbmxl biA+IGRjdHgtPm1heF9hZGluKQorKwkJeworKwkJciA9IEZJUFNfUl9BRERJVElPTkFMX0lOUFVU X1RPT19MT05HOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChkY3R4LT5pZmxhZ3MgJiBE UkJHX0NVU1RPTV9SRVNFRUQpCisrCQlkY3R4LT5nZW5lcmF0ZShkY3R4LCBOVUxMLCBvdXRsZW4s IE5VTEwsIDApOworKwllbHNlIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+PSBkY3R4LT5yZXNl ZWRfaW50ZXJ2YWwpCisrCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7CisrCisr CWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVTRUVEIHx8IHByZWRpY3Rpb25fcmVz aXN0YW5jZSkKKysJCXsKKysJCS8qIElmIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGRv bid0IGRvIGhlYWx0aCBjaGVjayAqLworKwkJaW50IGhjaGVjayA9IHByZWRpY3Rpb25fcmVzaXN0 YW5jZSA/IDAgOiAxOworKwkJCisrCQlpZiAoIWRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5s ZW4sIGhjaGVjaykpCisrCQkJeworKwkJCXIgPSBGSVBTX1JfUkVTRUVEX0VSUk9SOworKwkJCWdv dG8gZW5kOworKwkJCX0KKysJCWFkaW4gPSBOVUxMOworKwkJYWRpbmxlbiA9IDA7CisrCQl9Cisr CisrCWlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwgb3V0LCBvdXRsZW4sIGFkaW4sIGFkaW5sZW4p KQorKwkJeworKwkJciA9IEZJUFNfUl9HRU5FUkFURV9FUlJPUjsKKysJCWRjdHgtPnN0YXR1cyA9 IERSQkdfU1RBVFVTX0VSUk9SOworKwkJZ290byBlbmQ7CisrCQl9CisrCWlmICghKGRjdHgtPmlm bGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrCQl7CisrCQlpZiAoZGN0eC0+cmVzZWVkX2Nv dW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQorKwkJCWRjdHgtPnN0YXR1cyA9IERSQkdf U1RBVFVTX1JFU0VFRDsKKysJCWVsc2UKKysJCQlkY3R4LT5yZXNlZWRfY291bnRlcisrOworKwkJ fQorKworKwllbmQ6CisrCWlmIChyKQorKwkJeworKwkJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJC R19GTEFHX05PRVJSKSkKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUsIHIp OworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCXJldHVybiAxOworKwl9CisrCisraW50IEZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWludCBydjsKKysJaWYg KCFkY3R4LT51bmluc3RhbnRpYXRlKQorKwkJcnYgPSAxOworKwllbHNlCisrCQlydiA9IGRjdHgt PnVuaW5zdGFudGlhdGUoZGN0eCk7CisrCS8qIEFsdGhvdWdoIHdlJ2QgbGlrZSB0byBjbGVhbnNl IGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBoYXZlIHRvCisrCSAqIHRlc3QgdGhlIHVuaW5zdGFu dGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0YS4KKysJICovCisrCW1lbXNldCgmZGN0eC0+ZCwg MCwgc2l6ZW9mKGRjdHgtPmQpKTsKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklU SUFMSVNFRDsKKysJLyogSWYgbWV0aG9kIGhhcyBwcm9ibGVtcyB1bmluc3RhbnRpYXRpbmcsIHJl dHVybiBlcnJvciAqLworKwlyZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19kcmJnX3NldF9j YWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrCXNpemVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBt aW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlzaXplX3QgZW50 cm9weV9ibG9ja2xlbiwKKysJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNp Z25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXpl X3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNp Z25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSkKKysJeworKwlpZiAoZGN0eC0+c3RhdHVzICE9 IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQlyZXR1cm4gMDsKKysJZGN0eC0+ZW50cm9w eV9ibG9ja2xlbiA9IGVudHJvcHlfYmxvY2tsZW47CisrCWRjdHgtPmdldF9lbnRyb3B5ID0gZ2V0 X2VudHJvcHk7CisrCWRjdHgtPmNsZWFudXBfZW50cm9weSA9IGNsZWFudXBfZW50cm9weTsKKysJ ZGN0eC0+Z2V0X25vbmNlID0gZ2V0X25vbmNlOworKwlkY3R4LT5jbGVhbnVwX25vbmNlID0gY2xl YW51cF9ub25jZTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU19kcmJnX3NldF9yYW5k X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKKysJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCisrCWludCAoKnJh bmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKSwKKysJ aW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCisrCQkJCWNvbnN0IHZvaWQgKmJ1Ziwg aW50IG51bSwgZG91YmxlIGVudHJvcHkpKQorKwl7CisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJC R19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCXJldHVybiAwOworKwlkY3R4LT5nZXRfYWRpbiA9 IGdldF9hZGluOworKwlkY3R4LT5jbGVhbnVwX2FkaW4gPSBjbGVhbnVwX2FkaW47CisrCWRjdHgt PnJhbmRfc2VlZF9jYiA9IHJhbmRfc2VlZF9jYjsKKysJZGN0eC0+cmFuZF9hZGRfY2IgPSByYW5k X2FkZF9jYjsKKysJcmV0dXJuIDE7CisrCX0KKysKKyt2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9k YXRhKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVybiBkY3R4LT5hcHBfZGF0YTsKKysJfQor KworK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCwgdm9pZCAqYXBw X2RhdGEpCisrCXsKKysJZGN0eC0+YXBwX2RhdGEgPSBhcHBfZGF0YTsKKysJfQorKworK3NpemVf dCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVy biBkY3R4LT5ibG9ja2xlbmd0aDsKKysJfQorKworK2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3Ro KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVybiBkY3R4LT5zdHJlbmd0aDsKKysJfQorKwor K3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGlu dGVydmFsKQorKwl7CisrCWRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IGludGVydmFsOwor Kwl9CisrCisrdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0 eCwgaW50IGludGVydmFsKQorKwl7CisrCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IGludGVydmFs OworKwl9CisrCisrc3RhdGljIGludCBkcmJnX3N0aWNrID0gMDsKKysKKyt2b2lkIEZJUFNfZHJi Z19zdGljayhpbnQgb25vZmYpCisrCXsKKysJZHJiZ19zdGljayA9IG9ub2ZmOworKwl9CisrCisr LyogQ29udGludW91cyBEUkJHIHV0aWxpdHkgZnVuY3Rpb24gKi8KKytpbnQgZmlwc19kcmJnX2Nw cm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm91dCkKKysJewor KwkvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8KKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdf RkxBR19URVNUKQorKwkJcmV0dXJuIDE7CisrCS8qIENoZWNrIGJsb2NrIGlzIHZhbGlkOiBzaG91 bGQgbmV2ZXIgaGFwcGVuICovCisrCWlmIChkY3R4LT5sYl92YWxpZCA9PSAwKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNfUl9JTlRFUk5BTF9FUlJP Uik7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJ aWYgKGRyYmdfc3RpY2spCisrCQltZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5n dGgpOworKwkvKiBDaGVjayBhZ2FpbnN0IGxhc3QgYmxvY2s6IGZhaWwgaWYgbWF0Y2ggKi8KKysJ aWYgKCFtZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNfUl9EUkJHX1NUVUNLKTsK KysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCXJldHVybiAwOworKwkJfQorKwkvKiBT YXZlIGxhc3QgYmxvY2sgZm9yIG5leHQgY29tcGFyaXNvbiAqLworKwltZW1jcHkoZGN0eC0+bGIs IG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlyZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDAzNTIz MjkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5j CTIwMTItMDctMTIgMjE6NDk6MjUuMzQwMzUyMzI5ICswMjAwCitAQCAtMCwwICsxLDE3MiBAQAor Ky8qIGZpcHMvcmFuZC9maXBzX2RyYmdfcmFuZC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJv amVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyog TWFwcGluZyBvZiBTUDgwMC05MCBEUkJHcyB0byBPcGVuU1NMIFJBTkRfTUVUSE9EICovCisrCisr LyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBnbG9iYWwgUFJORyB1c2VkIGF0IGFueSB0aW1lIGlu IE9wZW5TU0wgdXNlIGEgZ2xvYmFsCisrICogdmFyaWFibGUgdG8gc3RvcmUgY29udGV4dC4KKysg Ki8KKysKKytzdGF0aWMgRFJCR19DVFggb3NzbF9kY3R4OworKworK0RSQkdfQ1RYICpGSVBTX2dl dF9kZWZhdWx0X2RyYmcodm9pZCkKKysJeworKwlyZXR1cm4gJm9zc2xfZGN0eDsKKysJfQorKwor K3N0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50 KQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaW50IHJ2ID0gMDsKKysJ dW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7CisrCXNpemVfdCBhZGlubGVuID0gMDsKKysJQ1JZ UFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJZG8gCisrCQl7CisrCQlzaXplX3QgcmNu dDsKKysJCWlmIChjb3VudCA+IChpbnQpZGN0eC0+bWF4X3JlcXVlc3QpCisrCQkJcmNudCA9IGRj dHgtPm1heF9yZXF1ZXN0OworKwkJZWxzZQorKwkJCXJjbnQgPSBjb3VudDsKKysJCWlmIChkY3R4 LT5nZXRfYWRpbikKKysJCQl7CisrCQkJYWRpbmxlbiA9IGRjdHgtPmdldF9hZGluKGRjdHgsICZh ZGluKTsKKysJCQlpZiAoYWRpbmxlbiAmJiAhYWRpbikKKysJCQkJeworKwkJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfQllURVMsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxf SU5QVVQpOworKwkJCQlnb3RvIGVycjsKKysJCQkJfQorKwkJCX0KKysJCXJ2ID0gRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwgYWRpbiwgYWRpbmxlbik7CisrCQlpZiAoYWRp bikKKysJCQl7CisrCQkJaWYgKGRjdHgtPmNsZWFudXBfYWRpbikKKysJCQkJZGN0eC0+Y2xlYW51 cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOworKwkJCWFkaW4gPSBOVUxMOworKwkJCX0KKysJ CWlmICghcnYpCisrCQkJZ290byBlcnI7CisrCQlvdXQgKz0gcmNudDsKKysJCWNvdW50IC09IHJj bnQ7CisrCQl9CisrCXdoaWxlIChjb3VudCk7CisrCXJ2ID0gMTsKKysJZXJyOgorKwlDUllQVE9f d191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiBydjsKKysJfQorKworK3N0YXRp YyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKKysJ eworKwlpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwgY291bnQpIDw9IDApCisrCQlyZXR1cm4gLTE7 CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfc3RhdHVzKHZvaWQp CisrCXsKKysJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKwlpbnQgcnY7CisrCUNSWVBU T19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJ2ID0gZGN0eC0+c3RhdHVzID09IERSQkdf U1RBVFVTX1JFQURZID8gMSA6IDA7CisrCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5E KTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19kcmJnX2NsZWFudXAo dm9pZCkKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwor KwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCX0KKysKKytzdGF0aWMgaW50 IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQorKwl7CisrCURS QkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaWYgKGRjdHgtPnJhbmRfc2VlZF9jYikKKysJ CXJldHVybiBkY3R4LT5yYW5kX3NlZWRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbik7CisrCXJldHVy biAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfYWRkKGNvbnN0IHZvaWQgKnNlZWQs IGludCBzZWVkbGVuLAorKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQorKwl7CisrCURSQkdfQ1RY ICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaWYgKGRjdHgtPnJhbmRfYWRkX2NiKQorKwkJcmV0dXJu IGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9lbnRyb3B5KTsKKysJ cmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF9kcmJnX21l dGggPQorKwl7CisrCWZpcHNfZHJiZ19zZWVkLAorKwlmaXBzX2RyYmdfYnl0ZXMsCisrCWZpcHNf ZHJiZ19jbGVhbnVwLAorKwlmaXBzX2RyYmdfYWRkLAorKwlmaXBzX2RyYmdfcHNldWRvLAorKwlm aXBzX2RyYmdfc3RhdHVzCisrCX07CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19t ZXRob2Qodm9pZCkKKysJeworKwlyZXR1cm4gJnJhbmRfZHJiZ19tZXRoOworKwl9CisrCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCistLS0gb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA3 LTEyIDIxOjQ5OjI1LjM0MDM1MjMyOSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQwMzUyMzI5ICsw MjAwCitAQCAtMCwwICsxLDg2MiBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfc2VsZnRlc3Qu YyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrI2luY2x1 ZGUgImZpcHNfbG9jbC5oIgorKworKyNpbmNsdWRlICJmaXBzX2RyYmdfc2VsZnRlc3QuaCIKKysK Kyt0eXBlZGVmIHN0cnVjdCB7CisrCWludCBwb3N0OworKwlpbnQgbmlkOworKwl1bnNpZ25lZCBp bnQgZmxhZ3M7CisrCisrCS8qIEtBVCBkYXRhIGZvciBubyBQUiAqLworKwljb25zdCB1bnNpZ25l ZCBjaGFyICplbnQ7CisrCXNpemVfdCBlbnRsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5v bmNlOworKwlzaXplX3Qgbm9uY2VsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnM7Cisr CXNpemVfdCBwZXJzbGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluOworKwlzaXplX3Qg YWRpbmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50cmVzZWVkOworKwlzaXplX3QgZW50 cmVzZWVkbGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGlucmVzZWVkOworKwlzaXplX3Qg YWRpbnJlc2VlZGxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7CisrCXNpemVfdCBh ZGluMmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0OworKwlzaXplX3Qga2F0bGVuOwor Kwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyOworKwlzaXplX3Qga2F0MmxlbjsKKysKKysJLyog S0FUIGRhdGEgZm9yIFBSICovCisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudF9wcjsKKysJc2l6 ZV90IGVudGxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2VfcHI7CisrCXNpemVf dCBub25jZWxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyc19wcjsKKysJc2l6ZV90 IHBlcnNsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5fcHI7CisrCXNpemVfdCBh ZGlubGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRwcl9wcjsKKysJc2l6ZV90IGVu dHBybGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluZ19wcjsKKysJc2l6ZV90IGFk aW5nbGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOworKwlzaXplX3QgZW50 Z2xlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0X3ByOworKwlzaXplX3Qga2F0bGVu X3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyX3ByOworKwlzaXplX3Qga2F0Mmxlbl9w cjsKKysKKysJfSBEUkJHX1NFTEZURVNUX0RBVEE7CisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVz dF9kYXRhKG5pZCwgZmxhZywgcHIsIHApIHtwLCBuaWQsIGZsYWcgfCBEUkJHX0ZMQUdfVEVTVCwg XAorKwlwciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0KSwgXAorKwlw ciMjX25vbmNlLCBzaXplb2YocHIjI19ub25jZSksIFwKKysJcHIjI19wZXJzb25hbGl6YXRpb25z dHJpbmcsIHNpemVvZihwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKKysJcHIjI19hZGRp dGlvbmFsaW5wdXQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dCksIFwKKysJcHIjI19lbnRy b3B5aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dHJlc2VlZCksIFwKKysJcHIj I19hZGRpdGlvbmFsaW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dHJlc2Vl ZCksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5w dXQyKSwgXAorKwlwciMjX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX2ludF9yZXR1cm5l ZGJpdHMpLCBcCisrCXByIyNfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19yZXR1cm5lZGJpdHMp LCBcCisrCXByIyNfcHJfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXQp LCBcCisrCXByIyNfcHJfbm9uY2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAorKwlwciMjX3By X3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nKSwgXAorKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRp b25hbGlucHV0KSwgXAorKwlwciMjX3ByX2VudHJvcHlpbnB1dHByLCBzaXplb2YocHIjI19wcl9l bnRyb3B5aW5wdXRwciksIFwKKysJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIj I19wcl9hZGRpdGlvbmFsaW5wdXQyKSwgXAorKwlwciMjX3ByX2VudHJvcHlpbnB1dHByMiwgc2l6 ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAorKwlwciMjX3ByX2ludF9yZXR1cm5lZGJp dHMsIHNpemVvZihwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNfcHJfcmV0dXJu ZWRiaXRzLCBzaXplb2YocHIjI19wcl9yZXR1cm5lZGJpdHMpLCBcCisrCX0KKysKKysjZGVmaW5l IG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBwciwgcCkgXAorKwltYWtlX2RyYmdfdGVzdF9k YXRhKG5pZCwgRFJCR19GTEFHX0NUUl9VU0VfREYsIHByLCBwKQorKworKyNkZWZpbmUgbWFrZV9k cmJnX3Rlc3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHByLCBwKSBcCisrCW1ha2VfZHJiZ190ZXN0X2Rh dGEoKGN1cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIsIHApCisrCisrc3RhdGljIERSQkdfU0VMRlRF U1RfREFUQSBkcmJnX3Rlc3RbXSA9IHsKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVz XzEyOF9jdHIsIGFlc18xMjhfdXNlX2RmLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihO SURfYWVzXzE5Ml9jdHIsIGFlc18xOTJfdXNlX2RmLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0 YV9kZihOSURfYWVzXzI1Nl9jdHIsIGFlc18yNTZfdXNlX2RmLCAxKSwKKysJbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfYWVzXzEyOF9jdHIsIDAsIGFlc18xMjhfbm9fZGYsIDApLAorKwltYWtlX2Ry YmdfdGVzdF9kYXRhKE5JRF9hZXNfMTkyX2N0ciwgMCwgYWVzXzE5Ml9ub19kZiwgMCksCisrCW1h a2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18yNTZfY3RyLCAwLCBhZXNfMjU2X25vX2RmLCAxKSwK KysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMSwgMCwgc2hhMSwgMCksCisrCW1ha2VfZHJi Z190ZXN0X2RhdGEoTklEX3NoYTIyNCwgMCwgc2hhMjI0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3Rf ZGF0YShOSURfc2hhMjU2LCAwLCBzaGEyNTYsIDEpLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5J RF9zaGEzODQsIDAsIHNoYTM4NCwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTUx MiwgMCwgc2hhNTEyLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEx LCAwLCBobWFjX3NoYTEsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNI QTIyNCwgMCwgaG1hY19zaGEyMjQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFj V2l0aFNIQTI1NiwgMCwgaG1hY19zaGEyNTYsIDEpLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5J RF9obWFjV2l0aFNIQTM4NCwgMCwgaG1hY19zaGEzODQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9obWFjV2l0aFNIQTUxMiwgMCwgaG1hY19zaGE1MTIsIDApLAorKwl7MCwwLDB9Cisr CX07CisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50 OworKwlzaXplX3QgZW50bGVuOworKwlpbnQgZW50Y250OworKwljb25zdCB1bnNpZ25lZCBjaGFy ICpub25jZTsKKysJc2l6ZV90IG5vbmNlbGVuOworKwlpbnQgbm9uY2VjbnQ7CisrCX0gVEVTVF9F TlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2ln bmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVu dHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwlURVNUX0VOVCAq dCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNo YXIgKil0LT5lbnQ7CisrCXQtPmVudGNudCsrOworKwlyZXR1cm4gdC0+ZW50bGVuOworKwl9Cisr Cisrc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFy ICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBz aXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJVEVTVF9FTlQgKnQgPSBGSVBT X2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ bm9uY2U7CisrCXQtPm5vbmNlY250Kys7CisrCXJldHVybiB0LT5ub25jZWxlbjsKKysJfQorKwor K3N0YXRpYyBpbnQgZmlwc19kcmJnX3NpbmdsZV9rYXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VM RlRFU1RfREFUQSAqdGQsCisrCQkJCQkJCQlpbnQgcXVpY2spCisrCXsKKysJVEVTVF9FTlQgdDsK KysJaW50IHJ2ID0gMDsKKysJc2l6ZV90IGFkaW5sZW47CisrCXVuc2lnbmVkIGNoYXIgcmFuZG91 dFsxMDI0XTsKKysKKysJLyogSW5pdGlhbCB0ZXN0IHdpdGhvdXQgUFIgKi8KKysKKysJLyogSW5z dGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlv bgorKwkgKiBzdHJpbmcuCisrCSAqLworKworKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRk LT5uaWQsIHRkLT5mbGFncykpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFGSVBTX2RyYmdfc2V0X2Nh bGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQorKwkJcmV0 dXJuIDA7CisrCisrCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOworKworKwl0LmVu dCA9IHRkLT5lbnQ7CisrCXQuZW50bGVuID0gdGQtPmVudGxlbjsKKysJdC5ub25jZSA9IHRkLT5u b25jZTsKKysJdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbjsKKysJdC5lbnRjbnQgPSAwOworKwl0 Lm5vbmNlY250ID0gMDsKKysKKysJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQt PnBlcnMsIHRkLT5wZXJzbGVuKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBOb3RlIGZvciBDVFIg d2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwgaW5wdXQgdmFsdWVzCisrCSAqIGlnbm9yZSBieXRl cyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1Y2UgYWRpbmxlbgorKwkgKiB0byBoYWxmIHRv IGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGluLgorKwkgKi8KKysJaWYgKCFmaXBzX3Bvc3Rf Y29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCisrCQlh ZGlubGVuID0gdGQtPmFkaW5sZW4gLyAyOworKwllbHNlCisrCQlhZGlubGVuID0gdGQtPmFkaW5s ZW47CisrCisrCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hl cyBleHBlY3RlZCBkYXRhICovCisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRv dXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCBhZGlubGVuKSkKKysJCWdvdG8gZXJy OworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQsIHRkLT5rYXRsZW4pKQorKwkJewor KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1Qx X0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQorKwkvKiBJZiBhYmJyZXZpYXRlZCBQT1NU IGVuZCBvZiB0ZXN0ICovCisrCWlmIChxdWljaykKKysJCXsKKysJCXJ2ID0gMTsKKysJCWdvdG8g ZXJyOworKwkJfQorKwkvKiBSZXNlZWQgRFJCRyB3aXRoIHRlc3QgZW50cm9weSBhbmQgYWRkaXRp b25hbCBpbnB1dCAqLworKwl0LmVudCA9IHRkLT5lbnRyZXNlZWQ7CisrCXQuZW50bGVuID0gdGQt PmVudHJlc2VlZGxlbjsKKysKKysJaWYgKCFGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlu cmVzZWVkLCB0ZC0+YWRpbnJlc2VlZGxlbikpCisrCQlnb3RvIGVycjsKKysKKysJLyogR2VuZXJh dGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRhdGEgKi8K KysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW4sIDAs CisrCQkJCXRkLT5hZGluMiwgdGQtPmFkaW4ybGVuKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAo bWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+a2F0MmxlbikpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRSk7 CisrCQlnb3RvIGVycjI7CisrCQl9CisrCisrCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgp OworKworKwkvKiBOb3cgdGVzdCB3aXRoIFBSICovCisrCisrCS8qIEluc3RhbnRpYXRlIERSQkcg d2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KKysJICogc3RyaW5n LgorKwkgKi8KKysJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3Mp KQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVz dF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysJCXJldHVybiAwOworKworKwlGSVBT X2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysKKysJdC5lbnQgPSB0ZC0+ZW50X3ByOwor Kwl0LmVudGxlbiA9IHRkLT5lbnRsZW5fcHI7CisrCXQubm9uY2UgPSB0ZC0+bm9uY2VfcHI7Cisr CXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW5fcHI7CisrCXQuZW50Y250ID0gMDsKKysJdC5ub25j ZWNudCA9IDA7CisrCisrCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJz X3ByLCB0ZC0+cGVyc2xlbl9wcikpCisrCQlnb3RvIGVycjsKKysKKysJLyogTm93IGdlbmVyYXRl IHdpdGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJvcHkgYXMgdGhpcyB3aWxsCisrCSAqIHBl cmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2 YWx1ZS4KKysJICovCisrCisrCXQuZW50ID0gdGQtPmVudHByX3ByOworKwl0LmVudGxlbiA9IHRk LT5lbnRwcmxlbl9wcjsKKysKKysJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRp dGlvbmFsIGlucHV0IHZhbHVlcworKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0 aDogc28gcmVkdWNlIGFkaW5sZW4KKysJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRh IGlzIGZlZCBpbi4KKysJICovCisrCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RS QkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVu X3ByIC8gMjsKKysJZWxzZQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOworKwlpZiAoIUZJ UFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3ByLCAxLAorKwkJCQl0 ZC0+YWRpbl9wciwgYWRpbmxlbikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5k b3V0LCB0ZC0+a2F0X3ByLCB0ZC0+a2F0bGVuX3ByKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSk7CisrCQlnb3Rv IGVycjI7CisrCQl9CisrCisrCS8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3aXRoIFBSOiBzdXBwbHkg bmV3IGVudHJvcHkgYWdhaW4uCisrCSAqIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZh bHVlLgorKwkgKi8KKysKKysJdC5lbnQgPSB0ZC0+ZW50Z19wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ ZW50Z2xlbl9wcjsKKysKKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg dGQtPmthdDJsZW5fcHIsIDEsCisrCQkJCXRkLT5hZGluZ19wciwgdGQtPmFkaW5nbGVuX3ByKSkK KysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyX3ByLCB0ZC0+ a2F0Mmxlbl9wcikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tB VCwgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQorKwkvKiBB bGwgT0ssIHRlc3QgY29tcGxldGUgKi8KKysJcnYgPSAxOworKworKwllcnI6CisrCWlmIChydiA9 PSAwKQorKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOworKwllcnIyOgorKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsK KysJCisrCXJldHVybiBydjsKKysKKysJfQorKworKy8qIEluaXRpYWxpc2UgYSBEUkJHIGJhc2Vk IG9uIHNlbGZ0ZXN0IGRhdGEgKi8KKysKKytzdGF0aWMgaW50IGRvX2RyYmdfaW5pdChEUkJHX0NU WCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwgVEVTVF9FTlQgKnQpCisrCXsKKysKKysJ aWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJu IDA7CisrCisrCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5 LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysJCXJldHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0 X2FwcF9kYXRhKGRjdHgsIHQpOworKworKwl0LT5lbnQgPSB0ZC0+ZW50OworKwl0LT5lbnRsZW4g PSB0ZC0+ZW50bGVuOworKwl0LT5ub25jZSA9IHRkLT5ub25jZTsKKysJdC0+bm9uY2VsZW4gPSB0 ZC0+bm9uY2VsZW47CisrCXQtPmVudGNudCA9IDA7CisrCXQtPm5vbmNlY250ID0gMDsKKysJcmV0 dXJuIDE7CisrCX0KKysKKysvKiBJbml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBEUkJHIGJhc2Vk IG9uIHNlbGZ0ZXN0IGRhdGEgKi8KKytzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFudGlhdGUoRFJC R19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCisrCQkJCQkJCQlURVNUX0VOVCAq dCkKKysJeworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgdCkpCisrCQlyZXR1cm4gMDsK KysJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVu KSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4gMTsKKysJfQorKworKy8qIFRoaXMgZnVuY3Rp b24gcGVyZm9ybXMgZXh0ZW5zaXZlIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVkIGJ5IFNQODAw LTkwLgorKyAqIEluZHVjZSBzZXZlcmFsIGZhaWx1cmUgbW9kZXMgYW5kIGNoZWNrIGFuIGVycm9y IGNvbmRpdGlvbiBpcyBzZXQuCisrICogVGhpcyBmdW5jdGlvbiBhbG9uZyB3aXRoIGZpcHNfZHJi Z19zaW5nbGVfa2F0IHBlZm9ybXMgdGhlIGhlYWx0aCBjaGVja2luZworKyAqIG9wZXJhdGlvbi4K KysgKi8KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhEUkJHX0NUWCAqZGN0 eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCkKKysJeworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRb MTAyNF07CisrCVRFU1RfRU5UIHQ7CisrCXNpemVfdCBpOworKwl1bnNpZ25lZCBpbnQgcmVzZWVk X2NvdW50ZXJfdG1wOworKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKilkY3R4 OworKworKwkvKiBJbml0aWFsaXNlIERSQkcgKi8KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBEb24ndCByZXBvcnQgaW5kdWNlZCBl cnJvcnMgKi8KKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJLyogUGVy c29uYWxpc2F0aW9uIHN0cmluZyB0ZXN0cyAqLworKworKwkvKiBUZXN0IGRldGVjdGlvbiBvZiB0 b28gbGFyZ2UgcGVyc29ubGlzYXRpb24gc3RyaW5nICovCisrCisrCWlmIChGSVBTX2RyYmdfaW5z dGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIGRjdHgtPm1heF9wZXJzICsgMSkgPiAwKQorKwkJewor KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUEVSU09OQUxJ U0FUSU9OX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIEVu dHJvcHkgc291cmNlIHRlc3RzICovCisrCisrCS8qIFRlc3QgZW50cm9weSBzb3VyY2UgZmFpbHVy ZSBkZXRlY2lvbjogaS5lLiByZXR1cm5zIG5vIGRhdGEgKi8KKysKKysJdC5lbnRsZW4gPSAwOwor KworKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xl bikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwor KwkvKiBUcnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQgRFJCRyAqLwor KwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisr CQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJ CWdvdG8gZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsK KysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1Ip OworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAm dCkpCisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsK KysKKysJLyogVGVzdCBpbnN1ZmZpY2llbnQgZW50cm9weSAqLworKworKwl0LmVudGxlbiA9IGRj dHgtPm1pbl9lbnRyb3B5IC0gMTsKKysKKysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7 CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0IHRvbyBtdWNoIGVudHJvcHkgKi8K KysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKwor KwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwl0LmVudGxlbiA9IGRjdHgt Pm1heF9lbnRyb3B5ICsgMTsKKysKKysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0 ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQln b3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Cisr CWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBOb25jZSB0ZXN0cyAqLworKworKwkvKiBUZXN0 IHRvbyBzbWFsbCBub25jZSAqLworKworKwlpZiAoZGN0eC0+bWluX25vbmNlKQorKwkJeworKwor KwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysKKysJ CWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCQl0Lm5vbmNlbGVuID0gZGN0 eC0+bWluX25vbmNlIC0gMTsKKysKKysJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwg dGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOworKwkJ CWdvdG8gZXJyOworKwkJCX0KKysKKysJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJS OworKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCQl7CisrCQkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9F UlJPUik7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJfQorKworKwkvKiBUZXN0IHRvbyBs YXJnZSBub25jZSAqLworKworKwlpZiAoZGN0eC0+bWF4X25vbmNlKQorKwkJeworKworKwkJaWYg KCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysKKysJCWRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWF4 X25vbmNlICsgMTsKKysKKysJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBl cnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOworKwkJCWdvdG8g ZXJyOworKwkJCX0KKysKKysJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwkJ aWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCQl7CisrCQkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7 CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJfQorKworKwkvKiBJbnN0YW50aWF0ZSB3aXRo IHZhbGlkIGRhdGEuICovCisrCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQp KQorKwkJCWdvdG8gZXJyOworKworKwkvKiBDaGVjayBnZW5lcmF0aW9uIGlzIG5vdyBPSyAqLwor KwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAor KwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlm bGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCS8qIFJlcXVlc3QgdG9vIG11Y2ggZGF0YSBm b3Igb25lIHJlcXVlc3QgKi8KKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCBkY3R4LT5tYXhfcmVxdWVzdCArIDEsIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9S RVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwor KwkvKiBUcnkgdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysJaWYgKEZJUFNfZHJiZ19n ZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgZGN0 eC0+bWF4X2FkaW4gKyAxKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQln b3RvIGVycjsKKysJCX0KKysKKysJLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVl c3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKKysJICogZmFpbHVyZS4KKysJICovCisrCisrCXQu ZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0 ZC0+a2F0bGVuLCAxLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9V TkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkJCisrCWRjdHgtPmlmbGFncyAmPSB+ RFJCR19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysKKysJLyogSW5zdGFu dGlhdGUgYWdhaW4gd2l0aCB2YWxpZCBkYXRhICovCisrCisrCWlmICghZG9fZHJiZ19pbnN0YW50 aWF0ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOworKwkvKiBUZXN0IHJlc2VlZCBjb3Vu dGVyIHdvcmtzICovCisrCS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKwlyZXNl ZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKKysJLyogU2V0IHJlc2VlZCBj b3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLworKwlkY3R4LT5yZXNlZWRfY291bnRlciA9IGRj dHgtPnJlc2VlZF9pbnRlcnZhbDsKKysKKysJLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBl bnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCisrCXQuZW50Y250ID0gMDsK KysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwK KysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOworKwlpZiAodC5lbnRj bnQgIT0gMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysJCWdvdG8gZXJyOwor KwkJfQorKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLworKwlpZiAo ZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VO VEVSX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRS QkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIENoZWNrIHByZWRp Y3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrCSAqIGZh aWx1cmUuCisrCSAqLworKworKwl0LmVudGxlbiA9IDA7CisrCisrCWRjdHgtPmlmbGFncyB8PSBE UkJHX0ZMQUdfTk9FUlI7CisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg dGQtPmthdGxlbiwgMSwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1Jf VU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysJCQorKwlkY3R4LT5pZmxhZ3MgJj0g fkRSQkdfRkxBR19OT0VSUjsKKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4 KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCisrCWlmICgh ZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOworKwkvKiBU ZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCisrCS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291 bnRlciAqLworKwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKKysJ LyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLworKwlkY3R4LT5yZXNl ZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKKysKKysJLyogR2VuZXJhdGUgb3V0 cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCisr CXQuZW50Y250ID0gMDsKKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg dGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCWdvdG8gZXJy OworKwlpZiAodC5lbnRjbnQgIT0gMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsK KysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiBy ZXNldCAqLworKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1w ICsgMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlkY3R4 LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50 aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisr CS8qIEV4cGxpY2l0IHJlc2VlZCB0ZXN0cyAqLworKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2Vl ZCB3aXRoIHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCisrCWlmICghZG9fZHJiZ19pbml0 KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdf RkxBR19OT0VSUjsKKysKKysJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIGRj dHgtPm1heF9hZGluICsgMSkgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIGVu dHJvcHkgc291cmNlIGZhaWx1cmUgKi8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlpZiAoRklQ U19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJS T1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7Cisr CQl9CisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIG11Y2ggZW50cm9weSAq LworKworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7Cisr CisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCXQuZW50bGVuID0gZGN0 eC0+bWF4X2VudHJvcHkgKyAxOworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+ YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3Rv IGVycjsKKysJCX0KKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIFRlc3QgZXhwbGlj aXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5ICovCisrCisrCWlmICghZG9fZHJiZ19p bml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERS QkdfRkxBR19OT0VSUjsKKysKKysJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7Cisr CisrCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAw KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf RU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAo IUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQln b3RvIGVycjsKKysJCX0KKysKKysJcCA9ICh1bnNpZ25lZCBjaGFyICopJmRjdHgtPmQ7CisrCS8q IFN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0byBjaGVjayB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJv ZXMKKysJICogdGhlIGRhdGEuLi4KKysJICovCisrCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGN0 eC0+ZCk7IGkrKykKKysJCXsKKysJCWlmICgqcCAhPSAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0Vf RVJST1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCXArKzsKKysJCX0KKysKKysJcmV0dXJu IDE7CisrCisrCWVycjoKKysJLyogQSByZWFsIGVycm9yIGFzIG9wcG9zZWQgdG8gYW4gaW5kdWNl ZCBvbmU6IHVuZGVybHlpbmcgZnVuY3Rpb24gd2lsbAorKwkgKiBpbmRpY2F0ZSB0aGUgZXJyb3Iu CisrCSAqLworKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRlVOQ1RJT05fRVJST1Ip OworKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysJcmV0dXJuIDA7CisrCisrCX0K KysKKytpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQg aW50IGZsYWdzKQorKwl7CisrCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7CisrCWZsYWdzIHw9IERS QkdfRkxBR19URVNUOworKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKysp CisrCQl7CisrCQlpZiAodGQtPm5pZCA9PSBuaWQgJiYgdGQtPmZsYWdzID09IGZsYWdzKQorKwkJ CXsKKysJCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKKysJCQkJcmV0 dXJuIDA7CisrCQkJcmV0dXJuIGZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCk7CisrCQkJ fQorKwkJfQorKwlyZXR1cm4gMDsKKysJfQorKworK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNr KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWludCBydjsKKysJRFJCR19DVFggKnRjdHggPSBOVUxM OworKwl0Y3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKKysJZmlwc19wb3N0X3N0YXJ0ZWQoRklQ U19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOworKwlpZiAoIXRjdHgpCisr CQlyZXR1cm4gMDsKKysJcnYgPSBmaXBzX2RyYmdfa2F0KHRjdHgsIGRjdHgtPnR5cGUsIGRjdHgt PnhmbGFncyk7CisrCWlmICh0Y3R4KQorKwkJRklQU19kcmJnX2ZyZWUodGN0eCk7CisrCWlmIChy dikKKysJCWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0 eC0+eGZsYWdzKTsKKysJZWxzZQorKwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywg ZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrCWlmICghcnYpCisrCQlkY3R4LT5zdGF0dXMg PSBEUkJHX1NUQVRVU19FUlJPUjsKKysJZWxzZQorKwkJZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9 IDA7CisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkK KysJeworKwlEUkJHX0NUWCAqZGN0eDsKKysJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysJaW50 IHJ2ID0gMTsKKysJZGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrCWlmICghZGN0eCkKKysJ CXJldHVybiAwOworKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCisr CQl7CisrCQlpZiAodGQtPnBvc3QgIT0gMSkKKysJCQljb250aW51ZTsKKysJCWlmICghZmlwc19w b3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJl dHVybiAxOworKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMSkpCisrCQkJ eworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+Zmxh Z3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfcG9z dF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1 cm4gMDsKKysJCX0KKysJRklQU19kcmJnX2ZyZWUoZGN0eCk7CisrCXJldHVybiBydjsKKysJfQor KworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpCisrCXsKKysJRFJCR19DVFgg KmRjdHg7CisrCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7CisrCWludCBydiA9IDE7CisrCWRjdHgg PSBGSVBTX2RyYmdfbmV3KDAsIDApOworKwlpZiAoIWRjdHgpCisrCQlyZXR1cm4gMDsKKysJZm9y ICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKCFmaXBz X3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCisrCQkJ cmV0dXJuIDE7CisrCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKKysJ CQl7CisrCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5m bGFncyk7CisrCQkJcnYgPSAwOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmICghZmlwc19k cmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKSkKKysJCQl7CisrCQkJZmlwc19wb3N0X2ZhaWxlZChG SVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7CisrCQkJcnYgPSAwOworKwkJCWNv bnRpbnVlOworKwkJCX0KKysJCWlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcs IHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlGSVBTX2RyYmdf ZnJlZShkY3R4KTsKKysJcmV0dXJuIHJ2OworKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MTM1 MjM1MSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxm dGVzdC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzQxMzUyMzUxICswMjAwCitAQCAtMCwwICsxLDIz MzUgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrLyogU2VsZnRlc3QgYW5kIGhlYWx0aCBjaGVj ayBkYXRhIGZvciB0aGUgU1A4MDAtOTAgRFJCRyAqLworKworKyNkZWZpbmUgX19maXBzX2NvbnN0 c2VnCisrCisrLyogQUVTLTEyOCB1c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0W10g PQorKwl7CisrCTB4NjEsMHg1MiwweDdjLDB4ZTMsMHgyMywweDdkLDB4MGEsMHgwNywweDEwLDB4 MGMsMHg1MCwweDMzLAorKwkweGM4LDB4ZGIsMHhmZiwweDEyCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfbm9u Y2VbXSA9CisrCXsKKysJMHg1MSwweDBkLDB4ODUsMHg3NywweGVkLDB4MjIsMHg5NywweDI4Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NTksMHg5 ZiwweGJiLDB4Y2QsMHhkNSwweDI1LDB4NjksMHhiNSwweGNiLDB4YjUsMHgwMywweGZlLAorKwkw eGQ3LDB4ZDcsMHgwMSwweDY3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQor Kwl7CisrCTB4ZWYsMHg4OCwweDc2LDB4MDEsMHhhZiwweDNjLDB4ZmUsMHg4YiwweGFmLDB4MjYs MHgwNiwweDllLAorKwkweDlhLDB4NDcsMHgwOCwweDc2CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9w eWlucHV0cHJbXSA9CisrCXsKKysJMHhlMiwweDc2LDB4ZjksMHhmNiwweDNhLDB4YmEsMHgxMCww eDlmLDB4YmYsMHg0NywweDBlLDB4NTEsCisrCTB4MDksMHhmYiwweGEzLDB4YjYKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3Vz ZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZDQsMHg5OCwweDhhLDB4NDYs MHg4MCwweDRjLDB4ZGIsMHhhMywweDU5LDB4MDIsMHg1NywweDUyLAorKwkweDY2LDB4MWMsMHhl YSwweDViCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDg4 LDB4OGMsMHg5MSwweGQ2LDB4YmUsMHg1NiwweDZlLDB4MDgsMHg5YSwweDYyLDB4MmIsMHgxMSwK KysJMHgzZiwweDVlLDB4MzEsMHgwNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltd ID0KKysJeworKwkweGMwLDB4NWMsMHg2YiwweDk4LDB4MDEsMHgwZCwweDU4LDB4MTgsMHg1MSww eDE4LDB4OTYsMHhhZSwKKysJMHhhNywweGUzLDB4YTgsMHg2NworKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweGNmLDB4MDEsMHhhYywweDIyLDB4MzEsMHgwNiwweDhl LDB4ZmMsMHhjZSwweDU2LDB4ZWEsMHgyNCwKKysJMHgwZiwweDM4LDB4NDMsMHhjNgorKwl9Owor KworKworKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0K KysJeworKwkweDFmLDB4OGUsMHgzNCwweDgyLDB4MGMsMHhiNywweGJlLDB4YzUsMHgwMSwweDNl LDB4ZDAsMHhhMywKKysJMHg5ZCwweDdkLDB4MWMsMHg5YgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX25vbmNlW10g PQorKwl7CisrCTB4ZDUsMHg0ZCwweGJkLDB4NGEsMHg5MywweDdmLDB4YjgsMHg5NgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGFiLDB4ZDYsMHgzZiww eDA0LDB4ZmUsMHgyNywweDZiLDB4MmQsMHhkNywweGMzLDB4MWMsMHhmMywKKysJMHgzOCwweDY2 LDB4YmEsMHgxYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGZl LDB4ZjQsMHgwOSwweGE4LDB4YjcsMHg3MywweDI3LDB4OWMsMHg1ZiwweGE3LDB4ZWEsMHg0NiwK KysJMHhiNSwweGUyLDB4YjIsMHg0MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHg0MiwweGU0LDB4NGUsMHg3YiwweDI3LDB4ZGQsMHhjYiwweGJjLDB4MGEsMHhj ZiwweGE2LDB4NjcsCisrCTB4ZTcsMHg1NywweDExLDB4YjQKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHgxNCwweDI2LDB4NjksMHhkOSwweGYzLDB4NjUsMHgw MywweGQ2LDB4NmIsMHhiOSwweDQ0LDB4MGIsCisrCTB4YzcsMHhjNCwweDllLDB4MzkKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg1NSwweDJlLDB4NjAs MHg5YSwweDA1LDB4NzIsMHg4YSwweGE4LDB4ZWYsMHgyMiwweDgxLDB4NWEsCisrCTB4YzgsMHg5 MywweGZhLDB4ODQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 M2MsMHg0MCwweGM4LDB4YzQsMHgxNiwweDBjLDB4MjEsMHhhNCwweDM3LDB4MmMsMHg4ZiwweGE1 LAorKwkweDA2LDB4MGMsMHgxNSwweDJjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4ZTEsMHgzZSwweDk5LDB4OTgsMHg4NiwweDY3LDB4MGIsMHg2MywweDdiLDB4YmUs MHgzZiwweDg4LAorKwkweDQ2LDB4ODEsMHhjNywweDE5CisrCX07CisrCisrCisrLyogQUVTLTE5 MiB1c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MmIsMHg0 ZSwweDhiLDB4ZTEsMHhmMSwweDM0LDB4ODAsMHg1NiwweDgxLDB4ZjksMHg3NCwweGVjLAorKwkw eDE3LDB4NDQsMHgyYSwweGYxLDB4MTQsMHhiMCwweGJmLDB4OTcsMHgzOSwweGI3LDB4MDQsMHg3 ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4ZDYsMHg5ZCwweGViLDB4MTQs MHg0ZSwweDZjLDB4MzAsMHgxZSwweDM5LDB4NTUsMHg3MywweGQwLAorKwkweGQxLDB4ODAsMHg3 OCwweGZhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7Cisr CTB4ZmMsMHg0MywweDRhLDB4ZjgsMHg5YSwweDU1LDB4YjMsMHg1MywweDgzLDB4ZTIsMHgxOCww eDE2LAorKwkweDBjLDB4ZGMsMHhjZCwweDVlLDB4NGYsMHhhMCwweDAzLDB4MDEsMHgyYiwweDlm LDB4ZTQsMHhkNSwKKysJMHg3ZCwweDQ5LDB4ZjAsMHg0MSwweDllLDB4M2QsMHg5OSwweDA0Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NWUsMHg5ZiwweDQ5 LDB4NmYsMHgyMSwweDhiLDB4MWQsMHgzMiwweGQ1LDB4ODQsMHg1YywweGFjLAorKwkweGFmLDB4 ZGYsMHhlNCwweDc5LDB4OWUsMHhhZiwweGE5LDB4ODIsMHhkMCwweGY4LDB4NGYsMHhjYiwKKysJ MHg2OSwweDEwLDB4MGEsMHg3ZSwweDgxLDB4NTcsMHhiNSwweDM2CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJf ZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhkNCwweDgxLDB4MGMsMHhkNywweDY2LDB4Mzks MHhlYywweDQyLDB4NTMsMHg4NywweDQxLDB4YTUsCisrCTB4MWUsMHg3ZCwweDgwLDB4OTEsMHg4 ZSwweGJiLDB4ZWQsMHhhYywweDE0LDB4MDIsMHgxYSwweGQ1CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfaW50 X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGRmLDB4MWQsMHgzOSwweDQ1LDB4N2MsMHg5Yiww eGM2LDB4MmIsMHg3ZCwweDhjLDB4OTMsMHhlOSwKKysJMHgxOSwweDMwLDB4NmIsMHg2NworKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgwMCwweDcxLDB4Mjcs MHg0ZSwweGQzLDB4MTQsMHhmMSwweDIwLDB4N2YsMHg0YSwweDQxLDB4MzIsCisrCTB4MmEsMHg5 NywweDExLDB4NDMsMHg4ZiwweDRhLDB4MTUsMHg3YiwweDliLDB4NTEsMHg3OSwweGRhLAorKwkw eDQ5LDB4M2QsMHhkZSwweGU4LDB4YmMsMHg5MywweDkxLDB4OTkKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHg5MCwweGVlLDB4NzYsMHhhMSwweDQ1LDB4OGQs MHhiNywweDQwLDB4YjAsMHgxMSwweGJmLDB4ZDAsCisrCTB4NjUsMHhkNywweDNjLDB4N2MsMHg0 ZiwweDIwLDB4M2YsMHg0ZSwweDExLDB4OWQsMHhiMywweDVlCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcmV0 dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MjQsMHgzYiwweDIwLDB4YTQsMHgzNywweDY2LDB4YmEs MHg3MiwweDM5LDB4M2YsMHhjZiwweDNjLAorKwkweDdlLDB4MWEsMHgyYiwweDgzCisrCX07Cisr CisrCisrLyogQUVTLTE5MiB1c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0W10gPQor Kwl7CisrCTB4OGQsMHg3NCwweGE0LDB4NTAsMHgxYSwweDAyLDB4NjgsMHgwYywweDJhLDB4Njks MHhjNCwweDgyLAorKwkweDNiLDB4YmIsMHhkYSwweDBlLDB4N2YsMHg3NywweGEzLDB4MTcsMHg3 OCwweDU3LDB4YjIsMHg3YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX25vbmNlW10gPQorKwl7CisrCTB4NzUsMHhk NSwweDFmLDB4YWMsMHhhNCwweDhkLDB4NDIsMHg3OCwweGQ3LDB4NjksMHg4NiwweDlkLAorKwkw eDc3LDB4ZDcsMHg0MSwweDBlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4NGUsMHgzMywweDQxLDB4M2MsMHg5YywweGMyLDB4ZDIsMHg1MywweGFmLDB4 OTAsMHhlYSwweGNmLAorKwkweDE5LDB4NTAsMHgxZSwweGU2LDB4NmYsMHg2MywweGM4LDB4MzIs MHgyMiwweGRjLDB4MDcsMHg2NSwKKysJMHg5YywweGQzLDB4ZjgsMHgzMCwweDllLDB4ZWQsMHgz NSwweDcwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NWQsMHg4 YiwweDhjLDB4YzEsMHhkZiwweDBlLDB4MDIsMHg3OCwweGZiLDB4MTksMHhiOCwweDY5LAorKwkw eDc4LDB4NGUsMHg5YywweDUyLDB4YmMsMHhjNywweDIwLDB4YzksMHhlNiwweDVlLDB4NzcsMHgy MiwKKysJMHgyOCwweDNkLDB4MGMsMHg5ZSwweDY4LDB4YTgsMHg0NSwweGQ3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGQ1LDB4ZTcsMHgwOCwweGM1LDB4MTks MHg5OSwweGQ1LDB4MzEsMHgwMywweDBhLDB4NzQsMHhiNiwKKysJMHhiNywweGVkLDB4ZTksMHhl YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDljLDB4MjYs MHhkYSwweGYxLDB4YWMsMHhkOSwweDVhLDB4ZDYsMHhhOCwweDY1LDB4ZjUsMHgwMiwKKysJMHg4 ZiwweGRjLDB4YTIsMHgwOSwweDU0LDB4YTYsMHhlMiwweGE0LDB4ZGUsMHgzMiwweGUwLDB4MDEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5YiwweDkw LDB4YjAsMHgzYSwweDBlLDB4M2EsMHg4MCwweDA3LDB4NGEsMHhmNCwweGRhLDB4NzYsCisrCTB4 MjgsMHgzMCwweDNjLDB4ZWUsMHg1NCwweDFiLDB4OTQsMHg1OSwweDUxLDB4NDMsMHg1NiwweDc3 LAorKwkweGFmLDB4ODgsMHhkZCwweDYzLDB4ODksMHg0NywweDA2LDB4NjUKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9k Zl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4M2MsMHgxMSwweDY0LDB4N2EsMHg5Niww eGY1LDB4ZDgsMHhiOCwweGFlLDB4ZDYsMHg3MCwweDRlLAorKwkweDE2LDB4OTYsMHhkZSwweGU5 LDB4NjIsMHhiYywweGVlLDB4MjgsMHgyZiwweDI2LDB4YTYsMHhmMCwKKysJMHg1NiwweGVmLDB4 YTMsMHhmMSwweDZiLDB4YTEsMHhiMSwweDc3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4MGIsMHhlMiwweDU2LDB4MDMsMHgxZSwweGRiLDB4MmMsMHg2ZCwweDdmLDB4 MWIsMHgxNSwweDU4LAorKwkweDFhLDB4ZjksMHgxMywweDI4CisrCX07CisrCisrCisrLyogQUVT LTI1NiB1c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NjEs MHg2OCwweGZjLDB4MWEsMHhmMCwweGI1LDB4OTUsMHg2YiwweDg1LDB4MDksMHg5YiwweDc0LAor KwkweDNmLDB4MTMsMHg3OCwweDQ5LDB4M2IsMHg4NSwweGVjLDB4OTMsMHgxMywweDNiLDB4YTks MHg0ZiwKKysJMHg5NiwweGFiLDB4MmMsMHhlNCwweGM4LDB4OGYsMHhkZCwweDZhCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhhZCwweGQyLDB4YmIsMHhiYSwweGI3LDB4NjUs MHg4OSwweGMzLDB4MjEsMHg2YywweDU1LDB4MzMsCisrCTB4MmIsMHgzNiwweGZmLDB4YTQKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg2ZSwweGNh LDB4ZTcsMHgyMCwweDcyLDB4ZDMsMHg4NCwweDVhLDB4MzIsMHhkMywweDRiLDB4MjQsCisrCTB4 NzIsMHhjNCwweDYzLDB4MmIsMHg5ZCwweDEyLDB4MjQsMHgwYywweDIzLDB4MjYsMHg4ZSwweDgz LAorKwkweDE2LDB4MzcsMHgwYiwweGQxLDB4MDYsMHg0ZiwweDY4LDB4NmQKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9k Zl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg3ZSwweDA4LDB4NGEsMHhiYiwweGUz LDB4MjEsMHg3YywweGM5LDB4MjMsMHhkMiwweGY4LDB4YjAsCisrCTB4NzMsMHg5OCwweGJhLDB4 ODQsMHg3NCwweDIzLDB4YWIsMHgwNiwweDhhLDB4ZTIsMHgyMiwweGQzLAorKwkweDdiLDB4Y2Us MHg5YiwweGQyLDB4NGEsMHg3NiwweGI4LDB4ZGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5w dXRwcltdID0KKysJeworKwkweDBiLDB4MjMsMHhhZiwweGRmLDB4ZjEsMHg2MiwweGQ3LDB4ZDMs MHg0MywweDk3LDB4ZjgsMHg3NywKKysJMHgwNCwweGE4LDB4NDIsMHgyMCwweGJkLDB4ZjYsMHgw ZiwweGMxLDB4MTcsMHgyZiwweDlmLDB4NTQsCisrCTB4YmIsMHg1NiwweDE3LDB4ODYsMHg2OCww eDBlLDB4YmEsMHhhOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHgzMSwweDhlLDB4YWQsMHhhZiwweDQwLDB4ZWIsMHg2YiwweDc0LDB4MzEsMHg0NiwweDgw LDB4YzcsCisrCTB4MTcsMHhhYiwweDNjLDB4N2EKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4OTQsMHg2YiwweGM5LDB4OWYsMHhhYiwweDhkLDB4YzUsMHhl YywweDcxLDB4ODgsMHgxZCwweDAwLAorKwkweDhjLDB4ODksMHg2OCwweGU0LDB4YzgsMHgwNyww eDc3LDB4MzYsMHgxNywweDZkLDB4NzksMHg3OCwKKysJMHhjNywweDA2LDB4NGUsMHg5OSwweDA0 LDB4MjgsMHgyOSwweGMzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7 CisrCTB4YmYsMHg2YywweDU5LDB4MmEsMHgwZCwweDQ0LDB4MGYsMHhhZSwweDlhLDB4NWUsMHgw MywweDczLAorKwkweGQ4LDB4YTYsMHhlMSwweGNmLDB4MjUsMHg2MSwweDM4LDB4MjQsMHg4Niww eDllLDB4NTMsMHhlOCwKKysJMHhhNCwweGRmLDB4NTYsMHhmNCwweDA2LDB4MDcsMHg5YywweDBm CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MjIsMHg0YSwweGI0 LDB4YjgsMHhiNiwweGVlLDB4N2QsMHhiMSwweDllLDB4YzksMHhmOSwweGEwLAorKwkweGQ5LDB4 ZTIsMHg5NywweDAwCisrCX07CisrCisrCisrLyogQUVTLTI1NiB1c2UgZGYgTm8gUFIgICovCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YTUsMHgzZSwweDM3LDB4MTAsMHgxNywweDQz LDB4OTEsMHg5MywweDU5LDB4MWUsMHg0NywweDUwLAorKwkweDg3LDB4YWEsMHhkZCwweGQ1LDB4 YzEsMHhjMywweDg2LDB4Y2QsMHhjYSwweDBkLDB4ZGIsMHg2OCwKKysJMHhlMCwweDAyLDB4ZDgs MHgwZiwweGRjLDB4NDAsMHgxYSwweDQ3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfbm9uY2VbXSA9CisrCXsKKysJ MHhhOSwweDRkLDB4YTUsMHg1YSwweGZkLDB4YzUsMHgwYywweGU1LDB4MWMsMHg5YSwweDNiLDB4 OGEsCisrCTB4NGMsMHg0NCwweDg0LDB4NDAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9CisrCXsKKysJMHg4YiwweDUyLDB4YTIsMHg0YSwweDkzLDB4YzMsMHg0ZSwweGE3 LDB4MWUsMHgxYywweGE3LDB4MDUsCisrCTB4ZWIsMHg4MiwweDliLDB4YTYsMHg1ZCwweGU0LDB4 ZDQsMHhlMCwweDdmLDB4YTMsMHhkOCwweDZiLAorKwkweDM3LDB4ODQsMHg1ZiwweGYxLDB4Yzcs MHhkNSwweGY2LDB4ZDIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHgyMCwweGY0LDB4MjIsMHhlZCwweGY4LDB4NWMsMHhhMSwweDZhLDB4MDEsMHhjZiwweGJlLDB4 NWYsCisrCTB4OGQsMHg2YywweDk0LDB4N2YsMHhhZSwweDEyLDB4YTgsMHg1NywweGRiLDB4MmEs MHhhOSwweGJmLAorKwkweGM3LDB4YjMsMHg2NSwweDgxLDB4ODAsMHg4ZCwweDBkLDB4NDYKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NGUsMHg0NCwweGZkLDB4 ZjMsMHg5ZSwweDI5LDB4YTIsMHhiOCwweDBmLDB4NWQsMHg2YywweGUxLAorKwkweDI4LDB4MGMs MHgzYiwweGMxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 ZGQsMHg0MCwweGU1LDB4OTgsMHg3YiwweDI3LDB4MTYsMHg3MywweDE1LDB4NjgsMHhkMiwweDc2 LAorKwkweGJmLDB4MGMsMHg2NywweDE1LDB4NzUsMHg3OSwweDAzLDB4ZDMsMHhkZSwweGRlLDB4 OTEsMHg0NiwKKysJMHg0MiwweGRkLDB4ZDQsMHg2NywweGM4LDB4NzksMHhjOCwweDFlCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4N2YsMHhkOCwweDFm LDB4YmQsMHgyYSwweGI1LDB4MWMsMHgxMSwweDVkLDB4ODMsMHg0ZSwweDk5LAorKwkweGY2LDB4 NWMsMHhhNSwweDQwLDB4MjAsMHhlZCwweDM4LDB4OGUsMHhkNSwweDllLDB4ZTAsMHg3NSwKKysJ MHg5MywweGZlLDB4MTIsMHg1ZSwweDVkLDB4NzMsMHhmYiwweDc1CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRk aXRpb25hbGlucHV0MltdID0KKysJeworKwkweGNkLDB4MmMsMHhmZiwweDE0LDB4NjksMHgzZSww eDRjLDB4OWUsMHhmZCwweGZlLDB4MjYsMHgwZCwKKysJMHhlOSwweDg2LDB4MDAsMHg0OSwweDMw LDB4YmEsMHhiMSwweGM2LDB4NTAsMHg1NywweDc3LDB4MmEsCisrCTB4NjIsMHgzOSwweDJjLDB4 M2IsMHg3NCwweGViLDB4YzksMHgwZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3JldHVybmVkYml0c1tdID0KKysJ eworKwkweDRmLDB4NzgsMHhiZSwweGI5LDB4NGQsMHg5NywweDhjLDB4ZTksMHhkMCwweDk3LDB4 ZmUsMHhhZCwKKysJMHhmYSwweGZkLDB4MzUsMHg1ZQorKwl9OworKworKworKy8qIEFFUy0xMjgg bm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg5YSwweDI1LDB4 NjUsMHgxMCwweDY3LDB4ZDUsMHhiNiwweDZiLDB4NzAsMHhhMSwweGIzLDB4YTQsCisrCTB4NDMs MHg5NSwweDgwLDB4YzAsMHg4NCwweDBhLDB4NzksMHhiMCwweDg4LDB4NzQsMHhmMiwweGJmLAor KwkweDMxLDB4NmMsMHgzMywweDM4LDB4MGIsMHgwMCwweGIyLDB4NWEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3By X25vbmNlW10gPQorKwl7CisrCTB4NzgsMHg0NywweDZiLDB4ZjcsMHg5MCwweDhlLDB4ODcsMHhm MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4Zjcs MHgyMiwweDFkLDB4M2EsMHhiZSwweDFkLDB4Y2EsMHgzMiwweDFiLDB4YmQsMHg4NywweDBjLAor KwkweDUxLDB4MjQsMHgxOSwweGVlLDB4YTMsMHgyMywweDA5LDB4NjMsMHgzMywweDNkLDB4YTgs MHgwYywKKysJMHgxYywweGZhLDB4NDIsMHg4OSwweGNjLDB4NmYsMHhhMCwweGE4CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhjOSwweGUwLDB4ODAsMHhiZiww eDhjLDB4NDUsMHg1OCwweDM5LDB4ZmYsMHgwMCwweGFiLDB4MDIsCisrCTB4NGMsMHgzZSwweDNh LDB4OTUsMHg5YiwweDgwLDB4YTgsMHgyMSwweDJhLDB4ZWUsMHhiYSwweDczLAorKwkweGIxLDB4 ZDksMHhjZiwweDI4LDB4ZjYsMHg4ZiwweDliLDB4MTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlp bnB1dHByW10gPQorKwl7CisrCTB4NGMsMHhhOCwweGM1LDB4ZjAsMHg1OSwweDllLDB4YTYsMHg4 ZCwweDI2LDB4NTMsMHhkNywweDhhLAorKwkweGE5LDB4ZDgsMHhmNywweGVkLDB4YjIsMHhmOSww eDEyLDB4NDIsMHhlMSwweGU1LDB4YmQsMHhlNywKKysJMHhlNywweDFkLDB4NzQsMHg5OSwweDAw LDB4OWQsMHgzMSwweDNlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4ZTIsMHhhYywweDIwLDB4ZjAsMHg4MCwweGU3LDB4YmMsMHg3ZSwweDljLDB4N2IsMHg2 NSwweDcxLAorKwkweGFmLDB4MTksMHgzMiwweDE2CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4MzIsMHg3ZiwweDM4LDB4OGIsMHg3MywweDBhLDB4NzgsMHg4 MywweGRjLDB4MzAsMHhiZSwweDlmLAorKwkweDEwLDB4MWYsMHhmNSwweDFmLDB4Y2EsMHgwMCww eGI1LDB4MGQsMHhkNiwweDlkLDB4NjAsMHg4MywKKysJMHg1MSwweDU0LDB4N2QsMHgzOCwweDIz LDB4M2EsMHg1MiwweDUwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsK KysJMHgxOCwweDYxLDB4NTMsMHg1NiwweGVkLDB4ZWQsMHhkNywweDIwLDB4ZmIsMHg3MSwweDA0 LDB4N2EsCisrCTB4YjIsMHhhYywweGMxLDB4MjgsMHhjZCwweGYyLDB4YzIsMHhmYywweGFhLDB4 YjEsMHgwNiwweDA3LAorKwkweGU5LDB4NDYsMHg5NSwweDAyLDB4NDgsMHgwMSwweDc4LDB4ZjkK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDI5LDB4YzgsMHgxYiww eDE1LDB4YjEsMHhkMSwweGMyLDB4ZjYsMHg3MSwweDg2LDB4NjgsMHgzMywKKysJMHg1NywweDgy LDB4MzMsMHhhZgorKwl9OworKworKworKy8qIEFFUy0xMjggbm8gZGYgTm8gUFIgICovCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9l bnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhjOSwweGM1LDB4NzksMHhiYywweGU4LDB4YzUsMHgx OSwweGQ4LDB4YmMsMHg2NiwweDczLDB4NjcsCisrCTB4ZjYsMHhkMywweDcyLDB4YWEsMHhhNiww eDE2LDB4YjgsMHg1MCwweGI3LDB4NDcsMHgzYSwweDQyLAorKwkweGFiLDB4ZjQsMHgxNiwweGIy LDB4OTYsMHhkMiwweGI2LDB4NjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX25vbmNlW10gPQorKwl7CisrCTB4NWYs MHhiZiwweDk3LDB4MGMsMHg0YiwweGE0LDB4ODcsMHgxMworKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4Y2UsMHhmYiwweDdiLDB4M2YsMHhkNCwweDZiLDB4 MjksMHgwZCwweDY5LDB4MDYsMHhmZiwweGJiLAorKwkweGYyLDB4ZTUsMHhjNiwweDZjLDB4MGEs MHgxMCwweGEwLDB4Y2YsMHgxYSwweDQ4LDB4YzcsMHg4YiwKKysJMHgzYywweDE2LDB4ODgsMHhl ZCwweDUwLDB4MTMsMHg4MSwweGNlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9Cisr CXsKKysJMHg0YiwweDIyLDB4NDYsMHgxOCwweDAyLDB4N2IsMHhkMiwweDFiLDB4MjIsMHg0Miww eDdjLDB4MzcsCisrCTB4ZDksMHhmNiwweGU4LDB4OWIsMHgxMiwweDMwLDB4NWYsMHhlOSwweDkw LDB4ZTgsMHgwOCwweDI0LAorKwkweDRmLDB4MDYsMHg2NiwweGRiLDB4MTksMHgyYiwweDEzLDB4 OTUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyZSwweDk2LDB4 NzAsMHg2NCwweGZhLDB4ZGYsMHhkZiwweDU3LDB4YjUsMHg4MiwweGVlLDB4ZDYsCisrCTB4ZWQs MHgzZSwweDY1LDB4YzIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJewor KwkweDI2LDB4YzAsMHg3MiwweDE2LDB4M2EsMHg0YiwweGI3LDB4OTksMHhkNCwweDA3LDB4YWYs MHg2NiwKKysJMHg2MiwweDM2LDB4OTYsMHhhNCwweDUxLDB4MTcsMHhmYSwweDA3LDB4OGIsMHgx NywweDVlLDB4YTEsCisrCTB4MmYsMHgzYywweDEwLDB4ZTcsMHg5MCwweGQwLDB4NDYsMHgwMAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4ODMsMHgzOSww eDM3LDB4N2IsMHgwMiwweDA2LDB4ZDIsMHgxMiwweDEzLDB4OGQsMHg4YiwweGYyLAorKwkweGYw LDB4ZjYsMHgyNiwweGViLDB4YTQsMHgyMiwweDdiLDB4YzIsMHhlNywweGJhLDB4NzksMHhlNCwK KysJMHgzYiwweDc3LDB4NWQsMHg0ZCwweDQ3LDB4YjIsMHgyZCwweGI0CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9h ZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MGIsMHhiOSwweDY3LDB4MzcsMHhkYiwweDgz LDB4ZGYsMHhjYSwweDgxLDB4OGIsMHhmOSwweDNmLAorKwkweGYxLDB4MTEsMHgxYiwweDJmLDB4 ZjAsMHg2MSwweGE2LDB4ZGYsMHhiYSwweGEzLDB4YjEsMHhhYywKKysJMHhkMywweGU2LDB4MDks MHhiOCwweDJjLDB4NmEsMHg2NywweGQ2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHgxZSwweGE3LDB4YTQsMHhlNCwweGUxLDB4YTYsMHg3YywweDY5LDB4OWEsMHg0NCww eDZjLDB4MzYsCisrCTB4ODEsMHgzNywweDE5LDB4ZDQKKysJfTsKKysKKysKKysvKiBBRVMtMTky IG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4OWQsMHgyYyww eGQyLDB4NTUsMHg2NiwweGVhLDB4ZTAsMHhiZSwweDE4LDB4YjcsMHg3NiwweGU3LAorKwkweDcz LDB4MzUsMHhkOCwweDFmLDB4YWQsMHgzYSwweGUzLDB4ODEsMHgwZSwweDkyLDB4ZDAsMHg2MSwK KysJMHhjOSwweDEyLDB4MjYsMHhmNiwweDFjLDB4ZGYsMHhmZSwweDQ3LDB4YWEsMHhmZSwweDdk LDB4NWEsCisrCTB4MTcsMHgxZiwweDhkLDB4OWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX25vbmNlW10gPQor Kwl7CisrCTB4NDQsMHg4MiwweGVkLDB4ZTgsMHg0YywweDI4LDB4NWEsMHgxNCwweGZmLDB4ODgs MHg4ZCwweDE5LAorKwkweDYxLDB4NWMsMHhlZSwweDBmCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg0NywweGQ3LDB4OWIsMHg5OSwweGFhLDB4Y2Is MHhlNywweGQyLDB4NTcsMHg2NiwweDJjLDB4ZTEsCisrCTB4NzgsMHhkNiwweDJjLDB4ZWEsMHhh MywweDIzLDB4NWYsMHgyYSwweGMxLDB4M2EsMHhmMCwweGE0LAorKwkweDIwLDB4M2IsMHhmYSww eDA3LDB4ZDUsMHgwNSwweDAyLDB4ZTQsMHg1NywweDAxLDB4YjYsMHgxMCwKKysJMHg1NywweDJl LDB4ZTcsMHg1NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4 NGIsMHg3NCwweDBiLDB4NDAsMHhjZSwweDZiLDB4YzIsMHg2YSwweDI0LDB4YjQsMHhmMywweGFk LAorKwkweDdhLDB4YTUsMHg3YSwweGEyLDB4MTUsMHhlMiwweGM4LDB4NjEsMHgxNSwweGM2LDB4 YjcsMHg4NSwKKysJMHg2OSwweDExLDB4YWQsMHg3YiwweDE0LDB4ZDIsMHhmNiwweDEyLDB4YTEs MHg5NSwweDVkLDB4M2YsCisrCTB4ZTIsMHhkMCwweDBjLDB4MmYKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2Vu dHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4MGMsMHg5YywweGFkLDB4MDUsMHhlZSwweGFlLDB4 NDgsMHgyMywweDg5LDB4NTksMHhhMSwweDk0LAorKwkweGQ3LDB4ZDgsMHg3NSwweGQ1LDB4NTQs MHg5MywweGM3LDB4NGEsMHhkOSwweDI2LDB4ZGUsMHhlYiwKKysJMHhiYSwweGIwLDB4N2UsMHgz MCwweDFkLDB4NWYsMHg2OSwweDQwLDB4OWMsMHgzYiwweDE3LDB4NTgsCisrCTB4MWQsMHgzMCww eGIzLDB4NzgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhm NywweDkzLDB4YjAsMHg2ZCwweDc3LDB4ODMsMHhkNSwweDM4LDB4MDEsMHhlMSwweDUyLDB4NDAs CisrCTB4N2UsMHgzZSwweDBjLDB4MjYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9CisrCXsKKysJMHhiYywweDRiLDB4MzcsMHg0NCwweDFjLDB4YzUsMHg0NSwweDVmLDB4OGYs MHg1MSwweDYyLDB4OGEsCisrCTB4ODUsMHgzMCwweDFkLDB4N2MsMHhlNCwweGNmLDB4ZjcsMHg0 NCwweGNlLDB4MzIsMHgzZSwweDU3LAorKwkweDk1LDB4YTQsMHgyYSwweGRmLDB4ZmQsMHg5ZSww eDM4LDB4NDEsMHhiMywweGY2LDB4YzUsMHhlZSwKKysJMHgwYywweDRiLDB4ZWUsMHg2ZQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZWMsMHhhZiwweGY2LDB4 NGYsMHhiMSwweGEwLDB4NTQsMHhiNSwweDViLDB4ZTMsMHg0NiwweGIwLAorKwkweDc2LDB4NWEs MHg3YywweDNmLDB4N2IsMHg5NCwweDY5LDB4MjEsMHg1MSwweDAyLDB4ZTUsMHg5ZiwKKysJMHgw NCwweDU5LDB4MDIsMHg5OCwweGM2LDB4NDMsMHgyYywweGNjLDB4MjYsMHg0YywweDg3LDB4NmIs CisrCTB4OGUsMHgwYSwweDgzLDB4ZGYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3JldHVybmVkYml0c1tdID0K KysJeworKwkweDc0LDB4NDUsMHhmYiwweDUzLDB4ODQsMHg5NiwweGJlLDB4ZmYsMHgxNSwweGNj LDB4NDEsMHg5MSwKKysJMHhiOSwweGExLDB4MjEsMHg2OAorKwl9OworKworKworKy8qIEFFUy0x OTIgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgzYywweDdk LDB4YjUsMHhlMCwweDU0LDB4ZDksMHg2ZSwweDhjLDB4YTksMHg4NiwweGNlLDB4NGUsCisrCTB4 NmIsMHhhZiwweGViLDB4MmYsMHhlNywweDc1LDB4ZTAsMHg4YiwweGE0LDB4M2IsMHgwNywweGZl LAorKwkweGJlLDB4MzMsMHg3NSwweDkzLDB4ODAsMHgyNywweGI1LDB4MjksMHg0NywweDhiLDB4 YzcsMHgyOCwKKysJMHg5NCwweGMzLDB4NTksMHg2MworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfbm9uY2VbXSA9Cisr CXsKKysJMHg0MywweGYxLDB4N2QsMHhiOCwweGMzLDB4ZmUsMHhkMCwweDIzLDB4NmIsMHhiNCww eDkyLDB4ZGIsCisrCTB4MjksMHhmZCwweDQ1LDB4NzEKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KKysJeworKwkweDlmLDB4MjQsMHgyOSwweDk5LDB4OWUsMHgwMSwweGFi LDB4ZTksMHgxOSwweGQ4LDB4MjMsMHgwOCwKKysJMHhiNywweGQ2LDB4N2UsMHg4YywweGMwLDB4 OWUsMHg3ZiwweDZlLDB4NWIsMHgzMywweDIwLDB4OTYsCisrCTB4MGIsMHgyMywweDJjLDB4YTUs MHg2YSwweGY4LDB4MWIsMHgwNCwweDI2LDB4ZGIsMHgyZSwweDJiLAorKwkweDNiLDB4ODgsMHhj ZSwweDM1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg5NCwweGU5 LDB4N2MsMHgzZCwweGE3LDB4ZGIsMHg2MCwweDgzLDB4MWYsMHg5OCwweDNmLDB4MGIsCisrCTB4 ODgsMHg1OSwweDU3LDB4NTEsMHg4OCwweDlmLDB4NzYsMHg0OSwweDlmLDB4YTYsMHhkYSwweDcx LAorKwkweDFkLDB4MGQsMHg0NywweDE2LDB4NjMsMHhjNSwweDY4LDB4ZTQsMHg1ZCwweDM5LDB4 NjksMHhiMywKKysJMHgzZSwweGJlLDB4ZDQsMHg4ZQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfaW50X3JldHVybmVk Yml0c1tdID0KKysJeworKwkweGY5LDB4ZDcsMHhhZCwweDY5LDB4YWIsMHg4ZiwweDIzLDB4NTYs MHg3MCwweDE3LDB4NGYsMHgyYSwKKysJMHg0NSwweGU3LDB4NGEsMHhjNQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf ZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YTYsMHg3MSwweDZhLDB4M2QsMHhiYSww eGQxLDB4ZTgsMHg2NiwweGE2LDB4ZWYsMHhiMiwweDBlLAorKwkweGE4LDB4OWMsMHhhYSwweDRl LDB4YWYsMHgxNywweDg5LDB4NTAsMHgwMCwweGRhLDB4YTEsMHhiMSwKKysJMHgwYiwweGE0LDB4 ZDksMHgzNSwweDg5LDB4YzgsMHhlNSwweGIwLDB4ZDksMHhiNywweGM0LDB4MzMsCisrCTB4OWIs MHhjYiwweDdlLDB4NzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJ eworKwkweDI3LDB4MjEsMHhmYywweGMyLDB4YmQsMHhmMywweDNjLDB4Y2UsMHhjMywweGNhLDB4 YzEsMHgwMSwKKysJMHhlMCwweGZmLDB4OTMsMHgxMiwweDdkLDB4NTQsMHg0MiwweGUzLDB4OWYs MHgwMywweGRmLDB4MjcsCisrCTB4MDQsMHgwNywweDNjLDB4NTMsMHg3ZiwweGE4LDB4NjYsMHhj OCwweDk3LDB4NGIsMHg2MSwweDQwLAorKwkweDVkLDB4N2EsMHgyNSwweDc5CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MmQsMHg4ZSwweDE2LDB4NWQsMHgwYiww eDlmLDB4ZWIsMHhhYSwweGQ2LDB4ZWMsMHgyOCwweDcxLAorKwkweDdjLDB4MGIsMHhjMSwweDFk LDB4ZDQsMHg0NCwweDE5LDB4NDcsMHhmZCwweDFkLDB4N2MsMHhlNSwKKysJMHhmMywweDI3LDB4 ZTEsMHhiNiwweDcyLDB4MGEsMHhlMCwweGVjLDB4MGUsMHhjZCwweGVmLDB4MWEsCisrCTB4OTEs MHg2YSwweGUzLDB4NWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGU1 LDB4ZGEsMHhiOCwweGUwLDB4NjMsMHg1OSwweDVhLDB4Y2MsMHgzZCwweGRjLDB4OWYsMHhlOCwK KysJMHg2NiwweDY3LDB4MmMsMHg5MgorKwl9OworKworKworKy8qIEFFUy0yNTYgbm8gZGYgUFIg ICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxNSwweGM3LDB4NWQsMHhjYiww eDQxLDB4NGIsMHgxNiwweDAxLDB4M2EsMHhkMSwweDQ0LDB4ZTgsCisrCTB4MjIsMHgzMiwweGM2 LDB4OWMsMHgzZiwweGU3LDB4NDMsMHhmNSwweDlhLDB4ZDMsMHhlYSwweGYyLAorKwkweGQ3LDB4 NGUsMHg2ZSwweDZhLDB4NTUsMHg3MywweDQwLDB4ZWYsMHg4OSwweGFkLDB4MGQsMHgwMywKKysJ MHg5NiwweDdlLDB4NzgsMHg4MSwweDJmLDB4OTEsMHgxYiwweDQ0LDB4YjAsMHgwMiwweGJhLDB4 MWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4ZGMsMHhlNCwweGQ0LDB4Mjcs MHg3YSwweDkwLDB4ZDcsMHg5OSwweDQzLDB4YTEsMHgzYywweDMwLAorKwkweGNjLDB4NGIsMHhl ZSwweDJlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJ MHhlMywweGU2LDB4YjksMHgxMSwweGU0LDB4N2EsMHhhNCwweDQwLDB4NmIsMHhmOCwweDczLDB4 ZjcsCisrCTB4N2UsMHhlYywweGM3LDB4YjksMHg5NywweGJmLDB4ZjgsMHgyNSwweDdiLDB4YmUs MHgxMSwweDliLAorKwkweDViLDB4NmEsMHgwYywweDJlLDB4MmIsMHgwMSwweDUxLDB4Y2QsMHg0 MSwweDRiLDB4NmIsMHhhYywKKysJMHgzMSwweGE4LDB4MGIsMHhmNywweGU2LDB4NTksMHg0Miww eGI4LDB4MDMsMHgwYywweGY4LDB4MDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtd ID0KKysJeworKwkweDZhLDB4OWYsMHgwMCwweDkxLDB4YWUsMHhmZSwweGNmLDB4ODQsMHg5OSww eGNlLDB4YjEsMHg0MCwKKysJMHg2ZCwweDVkLDB4MzMsMHgyOCwweDg0LDB4ZjQsMHg4YywweDYz LDB4NGMsMHg3ZSwweGJkLDB4MmMsCisrCTB4ODAsMHg3NiwweGVlLDB4NWEsMHhhYSwweDE1LDB4 MDcsMHgzMSwweGQ4LDB4YmIsMHg4YywweDY5LAorKwkweDlkLDB4OWQsMHhiYywweDdlLDB4NDks MHhhZSwweGVjLDB4MzksMHg2YiwweGQxLDB4MWYsMHg3ZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9w eWlucHV0cHJbXSA9CisrCXsKKysJMHhmMywweGI5LDB4NzUsMHg5YywweGJkLDB4ODgsMHhlYSww eGEyLDB4NTAsMHhhZCwweGQ2LDB4MTYsCisrCTB4MWEsMHgxMiwweDNjLDB4ODYsMHg2OCwweGFm LDB4NmYsMHhiZSwweDE5LDB4ZjIsMHhlZSwweGNjLAorKwkweGE1LDB4NzAsMHg4NCwweDUzLDB4 NTAsMHhjYiwweDlmLDB4MTQsMHhhOSwweGU1LDB4ZWUsMHhiOSwKKysJMHg0OCwweDQ1LDB4NDAs MHhlMiwweGM3LDB4YzksMHg5YSwweDc0LDB4ZmYsMHg4YywweDk5LDB4MWYKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyZSwweGYyLDB4NDUsMHg0YywweDYy LDB4MmUsMHgwYSwweGI5LDB4NmIsMHhhMiwweGZkLDB4NTYsCisrCTB4NzksMHg2MCwweDkzLDB4 Y2YKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhhZiwweDY5 LDB4MjAsMHhlOSwweDNiLDB4MzcsMHg5ZCwweDNmLDB4YjQsMHg4MCwweDAyLDB4N2EsCisrCTB4 MjUsMHg3ZCwweGI4LDB4ZGUsMHg3MSwweGM1LDB4MDYsMHgwYywweGI0LDB4ZTIsMHg4ZiwweDM1 LAorKwkweGQ4LDB4MTQsMHgwZCwweDdmLDB4NzYsMHg2MywweDRlLDB4YjUsMHhlZSwweGU5LDB4 NmYsMHgzNCwKKysJMHhjNywweDVmLDB4NTYsMHgxNCwweDRhLDB4ZTgsMHg3MywweDk1LDB4NWIs MHgxYywweGI5LDB4Y2IKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJewor KwkweGU1LDB4YjAsMHgyZSwweDdlLDB4NTIsMHgzMCwweGUzLDB4NjMsMHg4MiwweGI2LDB4NDQs MHhkMywKKysJMHgyNSwweDE5LDB4MDUsMHgyNCwweDlhLDB4OWYsMHg1ZiwweDI3LDB4NmEsMHgy OSwweGFiLDB4ZmEsCisrCTB4MDcsMHhhMiwweDQyLDB4MGYsMHhjNSwweGE4LDB4OTQsMHg3Yyww eDE3LDB4N2IsMHg4NSwweDgzLAorKwkweDBjLDB4MjUsMHgwZSwweDYzLDB4MGIsMHhlOSwweDEy LDB4NjAsMHhjZCwweGVmLDB4ODAsMHgwZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4NWUsMHhmMiwweDI2LDB4ZWYsMHg5ZiwweDU4LDB4NWQsMHhkNSwweDRhLDB4 MTAsMHhmZSwweGE3LAorKwkweDJkLDB4NWYsMHg0YSwweDQ2CisrCX07CisrCisrCisrLyogQUVT LTI1NiBubyBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGZiLDB4 Y2YsMHgxYiwweDYxLDB4MTYsMHg4OSwweDc4LDB4MjMsMHhmNSwweGQ4LDB4OTYsMHhlMywKKysJ MHg0ZSwweDY0LDB4MGIsMHgyOSwweDlhLDB4M2YsMHhmOCwweGE1LDB4ZWQsMHhmMiwweGZlLDB4 ZGIsCisrCTB4MTYsMHhjYSwweDdmLDB4MTAsMHhmYSwweDVlLDB4MTgsMHg3NiwweDJjLDB4NjMs MHg1ZSwweDk2LAorKwkweGNmLDB4YjMsMHhkNiwweGZjLDB4YWYsMHg5OSwweDM5LDB4MjgsMHg5 YywweDYxLDB4ZTgsMHhiMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfbm9uY2VbXSA9CisrCXsKKysJMHgxMiwweDk2 LDB4ZjAsMHg1MiwweGYzLDB4OGQsMHg4MSwweGNmLDB4ZGUsMHg4NiwweGYyLDB4OTksCisrCTB4 NDMsMHg5NiwweGI5LDB4ZjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweDYzLDB4MGQsMHg3OCwweGY1LDB4OTAsMHg4ZSwweDMyLDB4NDcsMHhiMCwweDRk LDB4MzcsMHg2MCwKKysJMHgwOSwweDk2LDB4YmMsMHhiZiwweDk3LDB4N2EsMHg2MiwweDE0LDB4 NDUsMHhiZCwweDhkLDB4Y2MsCisrCTB4NjksMHhmYiwweDAzLDB4ZTEsMHg4MCwweDFjLDB4Yzcs MHhlMiwweDJhLDB4ZjksMHgzNywweDNmLAorKwkweDY2LDB4NGQsMHg2MiwweGQ5LDB4MTAsMHhl MCwweGFkLDB4YzgsMHg5YSwweGYwLDB4YTgsMHg2ZAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlu cHV0W10gPQorKwl7CisrCTB4MzYsMHhjNiwweDEzLDB4NjAsMHhiYiwweDE0LDB4YWQsMHgyMiww eGIwLDB4MzgsMHhhYywweGE2LAorKwkweDE4LDB4MTYsMHg5MywweDI1LDB4ODYsMHhiNywweGRj LDB4ZGMsMHgzNiwweDk4LDB4MmIsMHhmOSwKKysJMHg2OCwweDMzLDB4ZDMsMHhjNiwweGZmLDB4 Y2UsMHg4ZCwweDE1LDB4NTksMHg4MiwweDc2LDB4ZWQsCisrCTB4NmYsMHg4ZCwweDQ5LDB4NzQs MHgyZiwweGRhLDB4ZGMsMHgxZiwweDE3LDB4ZDAsMHhkZSwweDE3CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MTYsMHgyZiwweDhlLDB4M2YsMHgyMSwweDdhLDB4 MWMsMHgyMCwweDU2LDB4ZDEsMHg5MiwweGY2LAorKwkweGQyLDB4MjUsMHg3NSwweDBlCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5MSwweDc5LDB4NzYsMHhl ZSwweGUwLDB4Y2YsMHg5ZSwweGMyLDB4ZDUsMHhkNCwweDIzLDB4OWIsCisrCTB4MTIsMHg4Yyww eDdlLDB4MGEsMHhiNywweGQyLDB4OGIsMHhkNiwweDdjLDB4YTMsMHhjNiwweGU1LAorKwkweDBl LDB4YWEsMHhjNywweDZiLDB4YWUsMHgwZCwweGZhLDB4NTMsMHgwNiwweDc5LDB4YTEsMHhlZCwK KysJMHg0ZCwweDZhLDB4MGUsMHhkOCwweDlkLDB4YmUsMHgxYiwweDMxLDB4OTMsMHg3YiwweGVj LDB4ZmIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGQy LDB4NDYsMHg1MCwweDIyLDB4MTAsMHgxNCwweDYzLDB4ZjcsMHhlYSwweDBmLDB4YjksMHg3ZSwK KysJMHgwZCwweGUxLDB4OTQsMHgwNywweGFmLDB4MDksMHg0NCwweDMxLDB4ZWEsMHg2NCwweGE0 LDB4MTgsCisrCTB4NWIsMHhmOSwweGQ4LDB4YzIsMHhmYSwweDAzLDB4NDcsMHhjNSwweDM5LDB4 NDMsMHhkNSwweDNiLAorKwkweDYyLDB4ODYsMHg2NCwweGVhLDB4MmMsMHg3MywweDhjLDB4YWUs MHg5ZCwweDk4LDB4OTgsMHgyOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJ eworKwkweDhjLDB4YWIsMHgxOCwweGY4LDB4YzMsMHhlYywweDE4LDB4NWMsMHhiMywweDFlLDB4 OWQsMHhiZSwKKysJMHgzZiwweDAzLDB4YjQsMHgwMCwweDk4LDB4OWQsMHhhZSwweGViLDB4ZjQs MHg5NCwweGY4LDB4NDIsCisrCTB4OGYsMHhlMywweDM5LDB4MDcsMHhlMSwweGM5LDB4YWQsMHgw YiwweDFmLDB4ZWQsMHhjMCwweGJhLAorKwkweGY2LDB4ZDEsMHhlYywweDI3LDB4ODYsMHg3Yiww eGQ2LDB4NTUsMHg5YiwweDYwLDB4YTUsMHhjNgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4ZWYsMHhkMiwweGQ4LDB4NWMsMHhkYywweDYyLDB4MjUsMHg5ZiwweGFhLDB4 MWUsMHgyYywweDY3LAorKwkweGY2LDB4MDIsMHgzMiwweGUyCisrCX07CisrCisrCisrLyogU0hB LTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhkMiwweDM2LDB4YTUsMHgyNywweDMx LDB4NzMsMHhkZCwweDExLDB4NGYsMHg5MywweGJkLDB4ZTIsCisrCTB4MzEsMHhhNSwweDkxLDB4 MTMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGExX3ByX25vbmNlW10gPQorKwl7CisrCTB4YjUsMHhiMywweDYwLDB4ZWYsMHhmNywweDYz LDB4MzEsMHhmMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZDQs MHhiYiwweDAyLDB4MTAsMHhiMiwweDcxLDB4ZGIsMHg4MSwweGQ2LDB4ZjAsMHg0MiwweDYwLAor KwkweGRhLDB4ZWEsMHg3NywweDUyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHg0ZCwweGQyLDB4NmMsMHg4NywweGZiLDB4MmMsMHg0ZiwweGE2LDB4OGQsMHgxNiwweDYzLDB4 MjIsCisrCTB4NmEsMHg1MSwweGUzLDB4ZjgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7 CisrCTB4YzksMHg4MywweDllLDB4MTYsMHhmNiwweDFjLDB4MGYsMHhiMiwweGVjLDB4NjAsMHgz MSwweGE5LAorKwkweGNiLDB4YTksMHgzNiwweDdhCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4YTgsMHgxMywweDRmLDB4ZjQsMHgzMSwweDAyLDB4NDQsMHhlMywweGQzLDB4 M2QsMHg2MSwweDllLAorKwkweGU1LDB4YzYsMHgzZSwweDg5LDB4YjUsMHg5YiwweDBmLDB4MzUK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhmOSwweGU4LDB4ZDIsMHg3Miww eDEzLDB4MzQsMHg5NSwweDZmLDB4MTUsMHg0OSwweDQ3LDB4OTksCisrCTB4MTYsMHgwMywweDE5 LDB4NDcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDRlLDB4OGMsMHg0OSww eDliLDB4NGEsMHg1YywweDliLDB4OWMsMHgzYSwweGVlLDB4ZmIsMHhkMiwKKysJMHhhZSwweGNk LDB4OGMsMHhjNAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NTAsMHhiNCwweGI0 LDB4Y2QsMHg2OCwweDU3LDB4ZmMsMHgyZSwweGMxLDB4NTIsMHhjYywweGY2LAorKwkweDY4LDB4 YTQsMHg4MSwweGVkLDB4N2UsMHhlNCwweDFkLDB4ODcKKysJfTsKKysKKysKKysvKiBTSEEtMSBO byBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGExX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGE5LDB4NDcsMHgxYiwweDI5LDB4MmQsMHgx YywweDA1LDB4ZGYsMHg3NiwweGQwLDB4NjIsMHhmOSwKKysJMHhlMiwweDdmLDB4NGMsMHg3Ygor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfbm9uY2VbXSA9CisrCXsKKysJMHg1MywweDIzLDB4MjQsMHhlMywweGVjLDB4MGMsMHg1NCww eDE0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg3YSwweDg3LDB4YTEs MHhhYywweDFjLDB4ZmQsMHhhYiwweGFlLDB4ZjcsMHhkNiwweGZiLDB4NzYsCisrCTB4MjgsMHhl YywweDZkLDB4Y2EKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGZjLDB4OTIsMHgz NSwweGQ2LDB4N2UsMHhiNywweDI0LDB4NjUsMHhmZCwweDEyLDB4MjcsMHgzNSwKKysJMHhjMCww eDcyLDB4Y2EsMHgyOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDU3LDB4ODgs MHg4MiwweGU1LDB4MjUsMHhhNSwweDJjLDB4NGEsMHgwNiwweDIwLDB4NmMsMHg3MiwKKysJMHg1 NSwweDYxLDB4ZGQsMHg5MCwweDcxLDB4OWYsMHg5NSwweGVhCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHg2OSwweGE1LDB4NDAsMHg2MiwweDk4LDB4NDcsMHg1NiwweDczLDB4 NGEsMHg4ZiwweDYwLDB4OTYsCisrCTB4ZDYsMHg5OSwweDI3LDB4ZWQKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxp bnB1dHJlc2VlZFtdID0KKysJeworKwkweGU1LDB4NDAsMHg0ZSwweGJkLDB4NTAsMHgwMCwweGY1 LDB4MTUsMHhhNiwweGVlLDB4NDUsMHhkYSwKKysJMHg4NCwweDNkLDB4ZDQsMHhjMAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRk aXRpb25hbGlucHV0MltdID0KKysJeworKwkweDExLDB4NTEsMHgxNCwweGYwLDB4MDksMHgxYiww eDRlLDB4NTYsMHgwZCwweGU5LDB4ZjYsMHgxZSwKKysJMHg1MiwweDY1LDB4Y2QsMHg5NgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTEsMHg5YywweDk0LDB4NmUsMHgyOSwweGUxLDB4 MzMsMHgwZCwweDMyLDB4ZDYsMHhhYSwweGNlLAorKwkweDcxLDB4M2YsMHg1MiwweDcyLDB4OGIs MHg0MiwweGE4LDB4ZDcKKysJfTsKKysKKysKKysvKiBTSEEtMjI0IFBSICAqLworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5w dXRbXSA9CisrCXsKKysJMHgxMiwweDY5LDB4MzIsMHg0ZiwweDgzLDB4YTYsMHhmNSwweDE0LDB4 ZTMsMHg0OSwweDNlLDB4NzUsCisrCTB4M2UsMHhkZSwweGFkLDB4YTEsMHgyOSwweGMzLDB4ZjMs MHgxOSwweDIwLDB4YjUsMHg0YywweGQ5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX25vbmNlW10gPQorKwl7CisrCTB4NmEs MHg3OCwweGQwLDB4ZWIsMHhiYiwweDVhLDB4ZjAsMHhlZSwweGU4LDB4YzMsMHhiYSwweDcxCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGQ1LDB4YjgsMHhiNiww eGJjLDB4YzEsMHg1YiwweDYwLDB4MzEsMHgzYywweGY1LDB4ZTUsMHhjMCwKKysJMHg4ZSwweDUy LDB4N2EsMHhiZCwweGVhLDB4NDcsMHhhOSwweDVmLDB4OGYsMHhmOSwweDhiLDB4YWUKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf cHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MWYsMHg1NSwweGVjLDB4YWUsMHgxNiww eDEyLDB4ODQsMHhiYSwweDg0LDB4MTYsMHgxOSwweDg4LAorKwkweDhlLDB4YjgsMHgzMywweDI1 LDB4NTQsMHhmZiwweGNhLDB4NzksMHhhZiwweDA3LDB4MjUsMHg1MAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5 aW5wdXRwcltdID0KKysJeworKwkweDkyLDB4YTMsMHgzMiwweGE4LDB4OWEsMHgwYSwweDU4LDB4 N2MsMHgxZCwweDVhLDB4N2UsMHhlMSwKKysJMHhiMiwweDczLDB4YWIsMHgwZSwweDE2LDB4Nzks MHgyMywweGQzLDB4MjksMHg4OSwweDgxLDB4ZTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1td ID0KKysJeworKwkweGYzLDB4MzgsMHg5MSwweDQwLDB4MzcsMHg3YSwweDUxLDB4NzIsMHg0Miww eDc0LDB4NzgsMHgwYSwKKysJMHg2OSwweGZkLDB4YTYsMHg0NCwweDQzLDB4NDUsMHg2YywweDBj LDB4NWEsMHgxOSwweGZmLDB4ZjEsCisrCTB4NTQsMHg2MCwweGVlLDB4NmEKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRk aXRpb25hbGlucHV0MltdID0KKysJeworKwkweDc1LDB4ZjMsMHgwNCwweDI1LDB4ZGQsMHgzNiww eGE4LDB4MzcsMHg0NiwweGFlLDB4MGMsMHg1MiwKKysJMHgwNSwweDc5LDB4NGMsMHgyNiwweGRi LDB4ZTksMHg3MSwweDE2LDB4NGMsMHgwYSwweGYyLDB4NjAKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0 cHIyW10gPQorKwl7CisrCTB4ZWEsMHhjNSwweDAzLDB4MGEsMHg0ZiwweGIwLDB4MzgsMHg4ZCww eDIzLDB4ZDQsMHhjOCwweDc3LAorKwkweGUyLDB4NmQsMHg5YywweDBiLDB4NDQsMHhmNywweDJk LDB4NWIsMHhiZiwweDVkLDB4MmEsMHgxMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHg2MCwweDUwLDB4MmIsMHhlNywweDg2LDB4ZDgsMHgyNiwweDczLDB4ZTMsMHgxZCwweDk1 LDB4MjAsCisrCTB4YjMsMHgyYywweDMyLDB4MWMsMHhmNSwweGNlLDB4NTcsMHhhNiwweDY3LDB4 MmIsMHhkYywweDRlLAorKwkweGRkLDB4MTEsMHg0YywweGM0CisrCX07CisrCisrCisrLyogU0hB LTIyNCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YjIsMHgxYywweDc3LDB4NGQs MHhmNiwweGQzLDB4YjYsMHg0MCwweGI3LDB4MzAsMHgzZSwweDI5LAorKwkweGIwLDB4ODUsMHgx YywweGJlLDB4NGEsMHhlYSwweDZiLDB4NWEsMHhiNSwweDhhLDB4OTcsMHhlYgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9ub25j ZVtdID0KKysJeworKwkweDQyLDB4MDIsMHgwYSwweDFjLDB4OTgsMHg5YSwweDc3LDB4OWUsMHg5 ZiwweDgwLDB4YmEsMHhlMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJ MHg5OCwweGI4LDB4MDQsMHg0MSwweGZjLDB4YzEsMHg1ZCwweGM1LDB4ZTksMHhiOSwweDA4LDB4 ZGEsCisrCTB4ZjksMHhmYSwweDBkLDB4OTAsMHhjZSwweGRmLDB4MWQsMHgxMCwweGE5LDB4OGQs MHg1MCwweDBjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDlhLDB4OGQsMHgz OSwweDQ5LDB4NDIsMHhkNSwweDBiLDB4YWUsMHhlMSwweGFmLDB4YjcsMHgwMCwKKysJMHgwMiww eGZhLDB4OTYsMHhiMSwweGE1LDB4MWQsMHgyZCwweDI1LDB4NzgsMHhlZSwweDgzLDB4M2YKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGU0LDB4ZjUsMHg1MywweDc5LDB4NWEs MHg5NywweDU4LDB4MDYsMHgwOCwweGJhLDB4N2IsMHhmYSwKKysJMHhmMCwweDgzLDB4MDUsMHg4 YywweDIyLDB4YzAsMHhjOSwweGRiLDB4MTUsMHhlNywweGRlLDB4MjAsCisrCTB4NTUsMHgyMiww eDlhLDB4YWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NjcsMHgwOSww eDQ4LDB4YWEsMHgwNywweDE2LDB4OTksMHg4OSwweDdmLDB4NmQsMHhhMCwweGU1LAorKwkweDhm LDB4ZGYsMHhiYywweGRiLDB4ZmUsMHhlNSwweDZjLDB4N2EsMHg5NSwweDRhLDB4NjYsMHgxNwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHgwZiwweDRiLDB4MWMsMHg2 ZiwweGI3LDB4ZTMsMHg0NywweGU1LDB4NWQsMHg3ZCwweDM4LDB4ZDYsCisrCTB4MjgsMHg5Yiww eGViLDB4NTUsMHg2MywweDA5LDB4M2UsMHg3YywweDU2LDB4ZWEsMHhmOCwweDE5CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2Fk ZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgyZCwweDI2LDB4N2MsMHgzNywweGU0LDB4N2Es MHgyOCwweDVlLDB4NWEsMHgzYywweGFmLDB4M2QsCisrCTB4NWEsMHg4ZSwweDU1LDB4YTIsMHgx YSwweDZlLDB4YzAsMHhlNSwweGY2LDB4MjEsMHhkMywweGY2CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3JldHVybmVkYml0c1td ID0KKysJeworKwkweDRkLDB4ODMsMHgzNSwweGRmLDB4NjcsMHhhOSwweGZjLDB4MTcsMHhkYSww eDcwLDB4Y2MsMHg4YiwKKysJMHg3ZiwweDc3LDB4YWUsMHhhMiwweDVmLDB4YjksMHg3ZSwweDc0 LDB4NGMsMHgyNiwweGMxLDB4N2EsCisrCTB4M2IsMHhhNywweDVjLDB4OTMKKysJfTsKKysKKysK KysvKiBTSEEtMjU2IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhjZSwweDQ5LDB4 MDAsMHg3YSwweDU2LDB4ZTMsMHg2NywweDhmLDB4ZTEsMHhiNiwweGE3LDB4ZDQsCisrCTB4NGYs MHgwOCwweDdhLDB4MWIsMHgwMSwweGY0LDB4ZmEsMHg2YiwweGVmLDB4YjcsMHhlNSwweGViLAor KwkweDA3LDB4M2QsMHgxMSwweDBkLDB4YzgsMHhlYSwweDJiLDB4ZmUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfbm9uY2Vb XSA9CisrCXsKKysJMHg3MywweDQxLDB4YzgsMHg5MiwweDk0LDB4ZTIsMHhjNSwweDVmLDB4OTMs MHhmZCwweDM5LDB4NWQsCisrCTB4MmIsMHg5MSwweDRkLDB4MzgKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NTAsMHg2ZCwweDAxLDB4MDEsMHgwNywweDVhLDB4 ODAsMHgzNSwweDdhLDB4NTYsMHgxYSwweDU2LAorKwkweDJmLDB4OWEsMHgwYiwweDM1LDB4YjIs MHhiMSwweGM5LDB4ZTUsMHhjYSwweDY5LDB4NjEsMHg0OCwKKysJMHhmZiwweGZiLDB4MGYsMHhk OSwweDRiLDB4NzksMHgxZCwweGJhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweDIwLDB4YjgsMHhkZiwweDQ0LDB4NzcsMHg1YSwweGI4LDB4ZDMsMHhiZiwweGY2LDB4Y2Ys MHhhYywKKysJMHg1ZSwweGE2LDB4OTYsMHg2MiwweDczLDB4NDQsMHg0MCwweDRhLDB4MzAsMHhm YiwweDM4LDB4YTUsCisrCTB4N2IsMHgwZCwweGU0LDB4MGQsMHhjNiwweGU0LDB4OWEsMHgxZgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDA0LDB4YzQsMHg2NSwweGY0LDB4 ZDMsMHhiZiwweDgzLDB4NGIsMHhhYiwweGM4LDB4NDEsMHhhOCwKKysJMHhjMiwweGUwLDB4NDQs MHg2MywweDc3LDB4NGMsMHg2ZiwweDZjLDB4NDksMHg0NiwweGZmLDB4OTQsCisrCTB4MTcsMHhl YSwweGU2LDB4MWEsMHg5ZCwweDVlLDB4NjYsMHg3OAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4MDcsMHg0ZCwweGFjLDB4OWIsMHg4NiwweGNhLDB4NGEsMHhhYSwweDZl LDB4N2EsMHgwMywweGEyLAorKwkweDVkLDB4MTAsMHhlYSwweDBiLDB4ZjksMHg4MywweGNjLDB4 ZDEsMHhmYywweGUyLDB4MDcsMHhjNywKKysJMHgwNiwweDM0LDB4NjAsMHg2ZiwweDgzLDB4OTQs MHg5OSwweDc2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4OSwweDRl LDB4NDUsMHg4YywweDExLDB4ZjksMHhiYywweDViLDB4YWMsMHg3NCwweDhiLDB4NGIsCisrCTB4 NWYsMHhmNywweDE5LDB4ZjMsMHhmNSwweDI0LDB4NTQsMHgxNCwweGQxLDB4MTUsMHhiMSwweDQz LAorKwkweDEyLDB4YTQsMHg1ZiwweGQ0LDB4ZWMsMHhmYywweGNkLDB4MDkKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50 cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4MGUsMHhlYiwweDFmLDB4ZDcsMHhmYywweGQxLDB4 OWQsMHhkNCwweDA1LDB4MzYsMHg4YiwweGIyLAorKwkweGZiLDB4ZTQsMHhmNCwweDUxLDB4MGMs MHg4NywweDliLDB4MDIsMHg0NCwweGQ1LDB4OTIsMHg0ZCwKKysJMHg0NCwweGZlLDB4MWEsMHgw MywweDQzLDB4NTYsMHhiZCwweDg2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkw eDAyLDB4YWEsMHhiNiwweDFkLDB4N2UsMHgyYSwweDQwLDB4MDMsMHg2OSwweDJkLDB4NDksMHhh MywKKysJMHg0MSwweGU3LDB4NDQsMHgwYiwweGFmLDB4N2IsMHg4NSwweGU0LDB4NWYsMHg1Myww eDNiLDB4NjQsCisrCTB4YmMsMHg4OSwweGM4LDB4ODIsMHhkNCwweDc4LDB4MzcsMHhhMgorKwl9 OworKworKworKy8qIFNIQS0yNTYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDVi LDB4MWIsMHhlYywweDRkLDB4YTksMHgzOCwweDc0LDB4NWEsMHgzNCwweDBiLDB4N2IsMHhjNSwK KysJMHhlNSwweGQ3LDB4NjYsMHg3YywweGJjLDB4ODIsMHhiOSwweDBlLDB4MmQsMHgxZiwweDky LDB4ZDcsCisrCTB4YzEsMHhiYywweDY3LDB4NjksMHhlYywweDZiLDB4MDMsMHgzYworKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9u b25jZVtdID0KKysJeworKwkweGE0LDB4MGMsMHhkOCwweDljLDB4NjEsMHhkOCwweGMzLDB4NTQs MHhmZSwweDUzLDB4YzksMHhlNSwKKysJMHg1ZCwweDZmLDB4NmQsMHgzNQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgyMiwweDVlLDB4NjIsMHg5MywweDQyLDB4ODMs MHg3OCwweDI0LDB4ZDgsMHg0MCwweDhjLDB4ZGUsCisrCTB4NmYsMHhmOSwweGE0LDB4N2EsMHhj NSwweGE3LDB4M2IsMHg4OCwweGEzLDB4ZWUsMHg0MiwweDIwLAorKwkweGZkLDB4NjEsMHg1Niww eGM2LDB4NGMsMHgxMywweDQxLDB4OWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7Cisr CTB4YmYsMHg3NCwweDViLDB4ZjYsMHhjNSwweDY0LDB4NWUsMHg5OSwweDM0LDB4OGYsMHhiYyww eGE0LAorKwkweGUyLDB4YmQsMHhkOCwweDg1LDB4MjYsMHgzNywweGVhLDB4YmEsMHg0ZiwweGYy LDB4OWEsMHg5YSwKKysJMHg2NiwweGZjLDB4ZGYsMHg2MywweDI2LDB4MjYsMHgxOSwweDg3Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhiMywweGM2LDB4MDcsMHgwNywweGQ2 LDB4NzUsMHhmNiwweDJiLDB4ZDYsMHgyMSwweDk2LDB4ZjEsCisrCTB4YWUsMHhkYiwweDJiLDB4 YWMsMHgyNSwweDJhLDB4YWUsMHhhZSwweDQxLDB4NzIsMHgwMywweDVlLAorKwkweGJmLDB4ZDMs MHg2NCwweGJjLDB4NTksMHhmOSwweGMwLDB4NzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10g PQorKwl7CisrCTB4YmYsMHgyMCwweDMzLDB4NTYsMHgyOSwweGE4LDB4MzcsMHgwNCwweDFmLDB4 NzgsMHgzNCwweDNkLAorKwkweDgxLDB4MmEsMHhjOSwweDg2LDB4YzYsMHg3YSwweDJmLDB4ODgs MHg1ZSwweGQ1LDB4YmUsMHgzNCwKKysJMHg0NiwweDIwLDB4YTQsMHgzNSwweGViLDB4YzcsMHhl MiwweDlkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDliLDB4YWUs MHgyZCwweDJkLDB4NjEsMHhhNCwweDg5LDB4ZWIsMHg0MywweDQ2LDB4YTcsMHhkYSwKKysJMHhl ZiwweDQwLDB4Y2EsMHg0YSwweDk5LDB4MTEsMHg0MSwweGRjLDB4NWMsMHg5NCwweGU5LDB4YWMs CisrCTB4ZDQsMHhkMCwweGU2LDB4YmQsMHhmYiwweDAzLDB4OWMsMHhhOAorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlv bmFsaW5wdXQyW10gPQorKwl7CisrCTB4MjMsMHhhYSwweDBjLDB4YmQsMHgyOCwweDMzLDB4ZTIs MHg1MSwweGZjLDB4NzEsMHhkMiwweDE1LAorKwkweDFmLDB4NzYsMHhmZCwweDBkLDB4ZTAsMHhi NywweGI1LDB4ODQsMHg3NSwweDViLDB4YmUsMHhmMywKKysJMHg1YywweGNhLDB4YzUsMHgzMCww eGYyLDB4NzUsMHgxZiwweGRhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDkwLDB4 M2MsMHhjMSwweDEwLDB4OGMsMHgxMiwweDAxLDB4YzYsMHhhNiwweDNhLDB4MGYsMHg0ZCwKKysJ MHhiNiwweDNhLDB4NGYsMHg0MSwweDljLDB4NjEsMHg3NSwweDg0LDB4ZTksMHg3NCwweDc1LDB4 ZmQsCisrCTB4ZmUsMHhmMiwweDFmLDB4NDMsMHhkOCwweDVlLDB4MjQsMHhhMworKwl9OworKwor KworKy8qIFNIQS0zODQgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDcxLDB4OWQs MHhiMiwweDVhLDB4NzEsMHg2ZCwweDA0LDB4ZTksMHgxZSwweGM3LDB4OTIsMHgyNCwKKysJMHg2 ZSwweDEyLDB4MzMsMHhhOSwweDUyLDB4NjQsMHgzMSwweGVmLDB4NzEsMHhlYiwweDIyLDB4NTUs CisrCTB4MjgsMHg5NywweDA2LDB4NmEsMHhjMCwweDBjLDB4YTAsMHg3ZQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9ub25j ZVtdID0KKysJeworKwkweGY1LDB4MGQsMHhmYSwweGIwLDB4ZWMsMHg2YSwweDdjLDB4ZDYsMHhi ZCwweDliLDB4MDUsMHhmZCwKKysJMHgzOCwweDNlLDB4MmUsMHg1NgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg3NCwweGFjLDB4N2UsMHg2ZCwweGIxLDB4YTQs MHhlNywweDIxLDB4ZDEsMHgxZSwweDZlLDB4OTYsCisrCTB4NmQsMHg0ZCwweDUzLDB4NDYsMHg4 MiwweDk2LDB4NmUsMHhjZiwweGFhLDB4ODEsMHg4ZCwweDdkLAorKwkweDllLDB4ZTEsMHgwZiww eDE1LDB4ZWEsMHg0MSwweGJmLDB4ZTMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7 CisrCTB4ZGEsMHg5NSwweGQ0LDB4ZDAsMHhiOCwweDExLDB4ZDMsMHg0OSwweDI3LDB4NWQsMHhh OSwweDM5LAorKwkweDY4LDB4ZjMsMHhhOCwweGU5LDB4NWQsMHgxOSwweDhhLDB4MmIsMHg2Niww eGU4LDB4NjksMHgwNiwKKysJMHg3YywweDllLDB4MDMsMHhhMSwweDhiLDB4MjYsMHgyZCwweDZl CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4NDksMHhkZiwweDQ0LDB4MDAs MHhlNCwweDFjLDB4NzUsMHgwYiwweDI2LDB4NWEsMHg1OSwweDY0LAorKwkweDFmLDB4NGUsMHhi MSwweGIyLDB4MTMsMHhmMSwweDIyLDB4NGUsMHhiNCwweDZkLDB4OWEsMHhjYywKKysJMHhhMCww eDQ4LDB4ZTYsMHhjZiwweDFkLDB4ZDEsMHg5MiwweDBkCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHhjOCwweDUyLDB4YWUsMHhiZiwweDA0LDB4M2MsMHgyNywweGI3LDB4 NzgsMHgxOCwweGFhLDB4OGYsCisrCTB4ZmYsMHhjZiwweGE0LDB4ZjEsMHhjYywweGU3LDB4Njgs MHhmYSwweDIyLDB4YTIsMHgxMywweDQ1LAorKwkweGU4LDB4ZGQsMHg4NywweGU2LDB4ZjIsMHg2 ZSwweGRkLDB4YzcsMHg1MiwweDkwLDB4OWYsMHg3YiwKKysJMHhmYSwweDYxLDB4MmQsMHg5ZCww eDllLDB4Y2YsMHg5OCwweGFjLDB4NTIsMHg0MCwweGNlLDB4YWYKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25h bGlucHV0MltdID0KKysJeworKwkweDYxLDB4N2MsMHgwMywweDlhLDB4M2UsMHg1MCwweDU3LDB4 NjAsMHhjNSwweDgzLDB4YzksMHhiMiwKKysJMHhkMSwweDg3LDB4ODUsMHg2NiwweDkyLDB4NWQs MHg4NCwweDBlLDB4NTMsMHhmYiwweDcwLDB4MDMsCisrCTB4NzIsMHhmZCwweGJhLDB4YWUsMHg5 YywweDhmLDB4ZjgsMHgxOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhm OCwweGViLDB4ODksMHhiMSwweDhkLDB4NzgsMHhiZSwweDIxLDB4ZTAsMHhiYiwweDlkLDB4Yjcs CisrCTB4OTUsMHgwZSwweGQ5LDB4NDYsMHgwYywweDhjLDB4ZTIsMHg2MywweGI3LDB4OWQsMHg2 NywweDkwLAorKwkweGJkLDB4YzcsMHgwYiwweGE1LDB4Y2UsMHhiMiwweDY1LDB4ODEKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf cHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTYsMHg5ZiwweGZlLDB4NjgsMHhkNiwweGI1 LDB4NzksMHhmMSwweDA2LDB4NWYsMHhhMywweGJiLAorKwkweDIzLDB4ODUsMHhkOCwweGYwLDB4 MjksMHg1YSwweDY4LDB4OWUsMHhmNSwweGY0LDB4YTYsMHgxMiwKKysJMHhlMCwweDlhLDB4ZTIs MHhhYywweDAwLDB4MWQsMHg5OCwweDI2LDB4ZmMsMHg1MywweDk1LDB4NTMsCisrCTB4ZTQsMHgz ZSwweDE3LDB4ZDUsMHgwOCwweDBiLDB4NzAsMHgzZCwweDY3LDB4OTksMHhhYywweDY2CisrCX07 CisrCisrCisrLyogU0hBLTM4NCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MDcs MHgxNSwweDI3LDB4MmEsMHhhZiwweDc0LDB4MjQsMHgzNywweGJjLDB4ZDUsMHgxNCwweDY5LAor KwkweGNlLDB4MTEsMHhmZiwweGEyLDB4NmIsMHhiOCwweDA1LDB4NjcsMHgzNCwweGY4LDB4YmQs MHg2ZCwKKysJMHg2YSwweGNjLDB4Y2QsMHg2MCwweGEzLDB4NjgsMHhjYSwweGY0CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X25v bmNlW10gPQorKwl7CisrCTB4NzAsMHgxNywweGMyLDB4NWIsMHg1ZCwweDIyLDB4MGIsMHgwNiww eDE1LDB4NTQsMHg3OCwweDc3LAorKwkweDQ0LDB4YWYsMHgyZiwweDA5CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDg5LDB4MzksMHgyOCwweGIwLDB4NjAsMHhlYiww eDNkLDB4ZGMsMHg1NSwweDc1LDB4ODYsMHhlYiwKKysJMHhhZSwweGEyLDB4OGYsMHhiYywweDFi LDB4NzUsMHhkNCwweGUxLDB4MGYsMHhhYSwweDM4LDB4Y2EsCisrCTB4NjIsMHg4YiwweGNiLDB4 MmMsMHgyNiwweGY2LDB4YmMsMHhiMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHgzMCwweDJiLDB4NDIsMHgzNSwweGVmLDB4ZGEsMHg0MCwweDU1LDB4MjgsMHhjNiwweDk1LDB4 ZmIsCisrCTB4NTQsMHgwMSwweDYyLDB4ZDcsMHg4NywweDE0LDB4NDgsMHg2ZCwweDkwLDB4NGMs MHhhOSwweDAyLAorKwkweDU0LDB4NDAsMHgyMiwweGM4LDB4NjYsMHhhNSwweDQ4LDB4NDgKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEz ODRfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDgyLDB4YzQsMHhhMSwweDljLDB4MjEs MHhkMiwweGU3LDB4YTUsMHhhNiwweGY2LDB4NWYsMHgwNCwKKysJMHg1YywweGM3LDB4MzEsMHg5 ZCwweDhkLDB4NTksMHg3NCwweDUwLDB4MTksMHg4OSwweDJmLDB4NjMsCisrCTB4ZDUsMHhiNyww eDdlLDB4ZWIsMHgxNSwweGUzLDB4NzAsMHg4MywweGExLDB4MjQsMHg1OSwweGZhLAorKwkweDJj LDB4NTYsMHhmNiwweDg4LDB4M2EsMHg5MiwweDkzLDB4YTEsMHhmYiwweDc5LDB4YzEsMHg3YQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHgzOSwweGE2LDB4ZTgsMHg1Yyww eDgyLDB4MTcsMHg3MSwweDI2LDB4NTcsMHg0ZiwweDlmLDB4YzIsCisrCTB4NTUsMHhmZiwweDVj LDB4OWIsMHg1MywweDFhLDB4ZDEsMHg1ZiwweGJjLDB4NjIsMHhlNCwweDI3LAorKwkweDJkLDB4 MzIsMHhmMCwweGU0LDB4NTIsMHg4YywweGM1LDB4MGMKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0cmVz ZWVkW10gPQorKwl7CisrCTB4OGQsMHhjYiwweDhkLDB4Y2UsMHgwOCwweGVhLDB4ODAsMHhlOCww eDliLDB4NjEsMHhhOCwweDBmLAorKwkweGFmLDB4NDksMHgyMCwweDllLDB4NzQsMHhjYiwweDU3 LDB4ODAsMHg0MiwweGIwLDB4ODQsMHg1ZSwKKysJMHgzMCwweDJhLDB4NjcsMHgwOCwweGY0LDB4 ZTMsMHg0MCwweDIyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg3YywweDhm LDB4YzIsMHhhZSwweDIyLDB4NGEsMHhkNiwweGY2LDB4MDUsMHhhNCwweDdhLDB4ZWEsCisrCTB4 YmIsMHgyNSwweGQwLDB4YjcsMHg1YSwweGQ2LDB4Y2YsMHg5ZCwweGYzLDB4NmMsMHhlMiwweGIy LAorKwkweDRlLDB4YjQsMHhiZCwweGY0LDB4ZTUsMHg0MCwweDgwLDB4OTQKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4OWUsMHg3ZSwweGZiLDB4NTksMHhiYiwweGFhLDB4M2MsMHhm NywweGUxLDB4ZjgsMHg3NiwweGRkLAorKwkweDYzLDB4NWYsMHhhZiwweDIzLDB4ZDYsMHg2NCww eDYxLDB4YzAsMHg5YSwweDA5LDB4NDcsMHhjOSwKKysJMHgzMywweGRmLDB4NmQsMHg1NSwweDkx LDB4MzQsMHg3OSwweDcwLDB4YzQsMHg5OSwweDZlLDB4NTQsCisrCTB4MDksMHg2NCwweDIxLDB4 MWEsMHhiZCwweDFlLDB4ODAsMHg0MCwweDM0LDB4YWQsMHhmYSwweGQ3CisrCX07CisrCisrCisr LyogU0hBLTUxMiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MTMsMHhmNywweDYx LDB4NzUsMHg2NSwweDI4LDB4YTIsMHg1OSwweDEzLDB4NWEsMHg0YSwweDRmLAorKwkweDU2LDB4 NjAsMHg4YywweDUzLDB4N2QsMHhiMCwweGJkLDB4MDYsMHg0ZiwweGVkLDB4Y2MsMHhkMiwKKysJ MHhhMiwweGI1LDB4ZmQsMHg1YiwweDNhLDB4YWIsMHhlYywweDI4CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX25vbmNlW10g PQorKwl7CisrCTB4YmUsMHhhMywweDkxLDB4OTMsMHgxZCwweGMzLDB4MzEsMHgzYSwweDIzLDB4 MzMsMHg1MCwweDY3LAorKwkweDg4LDB4YzcsMHhhMiwweGM0CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KKysJeworKwkweDFmLDB4NTksMHg0ZCwweDdiLDB4ZTYsMHg0NiwweDkx LDB4NDgsMHhjMSwweDI1LDB4ZmEsMHhmZiwKKysJMHg4OSwweDEyLDB4NzcsMHgzNSwweGRmLDB4 M2UsMHhmNCwweDgwLDB4NWYsMHhkOSwweGIwLDB4MDcsCisrCTB4MjIsMHg0MSwweGRkLDB4NDgs MHg3OCwweDZiLDB4NzcsMHgyYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHgzMCwweGZmLDB4NjMsMHg2ZiwweGFjLDB4ZDksMHg4NCwweDM5LDB4NmYsMHhlNCwweDk5LDB4 Y2UsCisrCTB4OTEsMHg3ZCwweDdlLDB4YzgsMHg1OCwweGYyLDB4MTIsMHhjMywweGI2LDB4YWQs MHhkYSwweDIyLAorKwkweDA0LDB4YTAsMHhkMiwweDIxLDB4ZmUsMHhmMiwweDk1LDB4MWQKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1 MTJfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHg2NCwweDU0LDB4MTMsMHhlYywweDRm LDB4NzcsMHhkYSwweGIyLDB4OTIsMHgyZSwweDUyLDB4ODAsCisrCTB4MTEsMHgxMCwweGMyLDB4 ZjgsMHhlNiwweGE3LDB4Y2QsMHg0YiwweGZjLDB4MzIsMHgyZSwweDllLAorKwkweGViLDB4YmIs MHhiMSwweGJmLDB4MTUsMHg1YywweDczLDB4MDgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1td ID0KKysJeworKwkweGVmLDB4MWUsMHhkYywweDBhLDB4YTQsMHgzNiwweDkxLDB4OWMsMHgzZCww eDI3LDB4OTcsMHg1MCwKKysJMHg4ZCwweDM2LDB4MjksMHg4ZCwweGNlLDB4NmEsMHgwYywweGY3 LDB4MjEsMHhjMCwweDkxLDB4YWUsCisrCTB4MGMsMHg5NiwweDcyLDB4YmQsMHg1MiwweDgxLDB4 NTgsMHhmYywweDZkLDB4ZTUsMHhmNywweGE1LAorKwkweGZkLDB4NWQsMHhhNywweDU4LDB4Njgs MHhjOCwweDk5LDB4NTgsMHg4ZSwweGM4LDB4Y2UsMHg5NSwKKysJMHgwMSwweDdkLDB4ZmYsMHhh NCwweGM4LDB4ZjcsMHg2MywweGZlLDB4NWYsMHg2OSwweDgzLDB4NTMsCisrCTB4ZTIsMHhjNiww eDhiLDB4YzMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGU2LDB4OWIs MHhjNCwweDg4LDB4MzQsMHhjYSwweGVhLDB4MjksMHgyZiwweDk4LDB4MDUsMHhhNCwKKysJMHhk MywweGMwLDB4N2IsMHgxMSwweGU4LDB4YmIsMHg3NSwweGYyLDB4YmQsMHgyOSwweGI3LDB4NDAs CisrCTB4MjUsMHg3ZiwweGMxLDB4YjcsMHhiMSwweGYxLDB4MjUsMHg2MQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgyMywweDZkLDB4ZmYsMHhkZSwweGZiLDB4ZDEsMHhi YSwweDMzLDB4MTgsMHhlNiwweGJlLDB4YjUsCisrCTB4NDgsMHg3NywweDZkLDB4N2YsMHhhNyww eGUxLDB4NGQsMHg0OCwweDFlLDB4M2MsMHhhNywweDM0LAorKwkweDFhLDB4YzgsMHg2MCwweGRi LDB4OGYsMHg5OSwweDE1LDB4OTkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 NzAsMHgyNywweDMxLDB4ZGIsMHg5MiwweDcwLDB4MjEsMHhmZSwweDE2LDB4YjYsMHhjOCwweDUx LAorKwkweDM0LDB4ODcsMHg2NSwweGQwLDB4NGUsMHhmZCwweGZlLDB4NjgsMHhlYywweGFjLDB4 ZGMsMHg5MywKKysJMHg0MSwweDM4LDB4OTIsMHg5MCwweGI0LDB4OTQsMHhmOSwweDBkLDB4YTQs MHhmNywweDRlLDB4ODAsCisrCTB4OTIsMHg2NywweDQ4LDB4NDAsMHhhNywweDA4LDB4YzcsMHhi YywweDY2LDB4MDAsMHhmZCwweGY3LAorKwkweDRjLDB4OGIsMHgxNywweDZlLDB4ZDEsMHg4Ziww eDliLDB4ZjMsMHg2ZiwweGY2LDB4MzQsMHhkZCwKKysJMHg2NywweGY3LDB4NjgsMHhkZAorKwl9 OworKworKworKy8qIFNIQS01MTIgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGI2 LDB4MGIsMHhiNywweGJjLDB4ODQsMHg1NiwweGY2LDB4MTIsMHhhZiwweDQ1LDB4NjcsMHgxNywK KysJMHg3YywweGQxLDB4YjIsMHg3OCwweDJiLDB4YTAsMHhmMiwweGJlLDB4YjYsMHg2ZCwweDhi LDB4NTYsCisrCTB4YzYsMHhiYywweDRkLDB4ZTEsMHhmNywweGJlLDB4Y2UsMHhiZAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9u b25jZVtdID0KKysJeworKwkweDlkLDB4ZWQsMHhjMCwweGU1LDB4NWEsMHg5OCwweDZhLDB4Y2Is MHg1MSwweDdkLDB4NzYsMHgzMSwKKysJMHg1YSwweDY0LDB4ZjAsMHhmNworKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhjMiwweDZkLDB4YTMsMHhjMywweDA2LDB4NzQs MHhlNSwweDAxLDB4NWMsMHgxMCwweDE3LDB4YzcsCisrCTB4YWYsMHg4MywweDlkLDB4NTksMHg4 ZCwweDJkLDB4MjksMHgzOCwweGM1LDB4NTksMHg3MCwweDhiLAorKwkweDQ2LDB4NDgsMHgyZCww eGNmLDB4MzYsMHg3ZCwweDU5LDB4YzAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7Cisr CTB4ZWMsMHg4YywweGQ0LDB4ZjcsMHg2MSwweDZlLDB4MGQsMHg5NSwweDc5LDB4YjcsMHgyOCww eGFkLAorKwkweDVmLDB4NjksMHg3NCwweDVmLDB4MmQsMHgzNiwweDA2LDB4OGEsMHg2YiwweGFj LDB4NTQsMHg5NywKKysJMHhjNCwweGExLDB4MTIsMHg4NSwweDBhLDB4ZGYsMHg0YiwweDM0Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh NTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg4NCwweDJmLDB4MWYsMHg2OCwweDZh LDB4YTMsMHhhZCwweDFlLDB4ZmIsMHhmNCwweDE1LDB4YmQsCisrCTB4ZGUsMHgzOCwweGQ0LDB4 MzAsMHg4MCwweDUxLDB4ZTksMHhkMywweGM3LDB4MjAsMHg4OCwweGU5LAorKwkweGY1LDB4Y2Ms MHhkZiwweDU3LDB4NWMsMHg0NywweDJmLDB4NTcsMHgzYywweDVmLDB4MTMsMHg1NiwKKysJMHhj YywweGM1LDB4NGYsMHg4NCwweGY4LDB4MTAsMHg0MSwweGQ1LDB4N2UsMHg1OCwweDZlLDB4MTks CisrCTB4MTksMHg5ZSwweGFmLDB4YzIsMHgyMiwweDU4LDB4NDEsMHg1MCwweDc5LDB4YzIsMHhk OCwweDA0LAorKwkweDI4LDB4ZDQsMHgzOSwweDlhCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtd ID0KKysJeworKwkweGZhLDB4N2YsMHg0NiwweDUxLDB4ODMsMHg2MiwweDk4LDB4MTYsMHg5YSww eDE5LDB4YTIsMHg0OSwKKysJMHhhOSwweGU2LDB4NGEsMHhkOCwweDg1LDB4ZTcsMHhkNCwweDNi LDB4MmMsMHg4MiwweGM1LDB4ODIsCisrCTB4YmYsMHgxMSwweGY5LDB4OWUsMHhiYywweGQwLDB4 MDEsMHhlZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhiOSwweDEy LDB4ZTAsMHg0ZiwweGY3LDB4YTcsMHhjNCwweGQ4LDB4ZDAsMHg4ZSwweDk5LDB4MjksCisrCTB4 N2MsMHg5YSwweGU5LDB4Y2YsMHhjNCwweDZjLDB4ZjgsMHhjMywweGE3LDB4NDEsMHg4MywweGQ2 LAorKwkweDJlLDB4ZmEsMHhiOCwweDVlLDB4OGUsMHg2YiwweDc4LDB4MjAKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRp b25hbGlucHV0MltdID0KKysJeworKwkweGQ3LDB4MDcsMHg1MiwweGI5LDB4ODMsMHgyYywweDAz LDB4NzEsMHhlZSwweGM5LDB4YzAsMHg4NSwKKysJMHhlMSwweDU3LDB4YjIsMHhjZCwweDNhLDB4 ZjAsMHhjOSwweDM0LDB4MjQsMHg0MSwweDFjLDB4NDIsCisrCTB4OTksMHhiMiwweDg0LDB4ZTks MHgxNywweGQyLDB4NzYsMHg5MgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgzNiww eDE3LDB4NWQsMHg5OCwweDJiLDB4NjUsMHgyNSwweDhlLDB4YzgsMHgyOSwweGRmLDB4MjcsCisr CTB4MDUsMHgzNiwweDI2LDB4MTIsMHg4YSwweDY4LDB4NzQsMHgyNywweDM3LDB4ZDQsMHg3Ziww eDMyLAorKwkweGIxLDB4MTIsMHhkNiwweDg1LDB4ODMsMHhlYiwweDJlLDB4YTAsMHhlZCwweDRi LDB4YjUsMHg3YiwKKysJMHg2ZiwweDM5LDB4M2MsMHg3MSwweDc3LDB4MDIsMHgxMiwweGNjLDB4 MmMsMHgzYSwweDhlLDB4NjMsCisrCTB4ZGYsMHg0YSwweGJkLDB4NmYsMHg2ZSwweDJlLDB4ZWQs MHgwYSwweDg1LDB4YTUsMHgyZiwweGEyLAorKwkweDY4LDB4ZGUsMHg0MiwweGI1CisrCX07Cisr CisrCisrLyogSE1BQyBTSEEtMSBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4 MjYsMHg1ZiwweDM2LDB4MTQsMHhmZiwweDNkLDB4ODMsMHhmYSwweDczLDB4NWUsMHg3NSwweGRj LAorKwkweDJjLDB4MTgsMHgxNywweDFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX25vbmNlW10gPQorKwl7CisrCTB4 YzgsMHhlMywweDU3LDB4YTUsMHg3YiwweDc0LDB4ODYsMHg2ZQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg2ZSwweGRiLDB4MGQsMHhmZSwweDdkLDB4YWMs MHg3OSwweGQwLDB4YTUsMHgzYSwweDQ4LDB4ODUsCisrCTB4ODAsMHhlMiwweDdmLDB4MmEKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MzEsMHhjZCwweDVlLDB4NDMs MHhkYywweGZiLDB4N2EsMHg3OSwweGNhLDB4ODgsMHhkZSwweDFmLAorKwkweGQ3LDB4YmIsMHg0 MiwweDA5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4N2MsMHgyMyww eDk1LDB4MzgsMHgwMCwweDk1LDB4YzEsMHg3OCwweDFmLDB4OGYsMHhkNywweDYzLAorKwkweDIz LDB4ODcsMHgyYSwweGVkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHhiYiwweDM0LDB4ZTcsMHg5MywweGEzLDB4MDIsMHgyYywweDRhLDB4ZDAsMHg4OSwweGRhLDB4 N2YsCisrCTB4ZWQsMHhmNCwweDRjLDB4ZGUsMHgxNywweGVjLDB4ZTUsMHg2YworKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4NDksMHhiYywweDJkLDB4MmMsMHhiNyww eDMyLDB4Y2IsMHgyMCwweGRmLDB4ZjUsMHg3NywweDU4LAorKwkweGEwLDB4NGIsMHg5MywweDZl CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDNjLDB4YWEsMHhiMCww eDIxLDB4NDIsMHhiMCwweGRkLDB4MzQsMHhmMCwweDE2LDB4N2YsMHgwYywKKysJMHgwZiwweGZm LDB4MmUsMHhhZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg4ZSwweGNi LDB4YTMsMHg2NCwweGIyLDB4YjgsMHgzMywweDZjLDB4NjQsMHgzYiwweDc4LDB4MTYsCisrCTB4 OTksMHgzNSwweGM4LDB4MzAsMHhjYiwweDNlLDB4YTAsMHhkOAorKwl9OworKworKworKy8qIEhN QUMgU0hBLTEgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDMyLDB4OWEsMHgy YSwweDg3LDB4N2IsMHg4OSwweDdjLDB4ZjYsMHhjYiwweDk1LDB4ZDUsMHg0MCwKKysJMHgxNyww eGZlLDB4NDcsMHg3MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9ub25jZVtdID0KKysJeworKwkweDE2LDB4ZDgsMHhlMCww eGM3LDB4NTIsMHhjZiwweDRhLDB4MjUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4MzUsMHgzNSwweGE5LDB4YTUsMHg0MCwweGJlLDB4OWIsMHhkMSwweDU2LDB4 ZGQsMHg0NCwweDAwLAorKwkweDcyLDB4ZjcsMHhkMywweDVlCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxp bnB1dFtdID0KKysJeworKwkweDFiLDB4MmMsMHg4NCwweDJkLDB4NGEsMHg4OSwweDhmLDB4Njks MHgxOSwweGYxLDB4ZjMsMHhkYiwKKysJMHhiYiwweGUzLDB4YWEsMHhlYQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4Y2YsMHhmYSwweDdkLDB4NzIsMHgwZiwweGU2LDB4 YzcsMHg5NiwweGEwLDB4NjksMHgzMSwweDExLAorKwkweDliLDB4MGIsMHgxYSwweDIwLDB4MWYs MHgzZiwweGFhLDB4ZDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 OTAsMHg3NSwweDE1LDB4MDQsMHg5NSwweGYxLDB4YmEsMHg4MSwweDBjLDB4MzcsMHg5NCwweDZm LAorKwkweDg2LDB4NTIsMHg2ZCwweDljCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtd ID0KKysJeworKwkweDViLDB4NDAsMHhiYSwweDVmLDB4MTcsMHg3MCwweGYwLDB4NGIsMHhkZiww eGM5LDB4OTcsMHg5MiwKKysJMHg3OSwweGM1LDB4ODIsMHgyOAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4OTcsMHhjOCwweDgwLDB4OTAsMHhiMywweGFhLDB4NmUsMHg2 MCwweGVhLDB4ODMsMHg3YSwweGUzLAorKwkweDhhLDB4Y2EsMHhhNCwweDdmCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweDkwLDB4YmQsMHgwNSwweDU2LDB4NmQsMHhiNSwweDIy LDB4ZDUsMHhiOSwweDVhLDB4MjksMHgyZCwKKysJMHhlOSwweDBiLDB4ZTEsMHhhYywweGRlLDB4 MjcsMHgwYiwweGIwCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMjI0IFBSICAqLworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2Vu dHJvcHlpbnB1dFtdID0KKysJeworKwkweDE3LDB4MzIsMHgyYiwweDJlLDB4NmYsMHgxYiwweDlj LDB4NmQsMHgzMSwweGUwLDB4MzQsMHgwNywKKysJMHhjZiwweGVkLDB4ZjYsMHhiNiwweDVhLDB4 NzYsMHg0YywweGJjLDB4NjIsMHg4NSwweDAxLDB4OTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9ub25jZVtdID0K KysJeworKwkweDM4LDB4YmYsMHg1ZiwweDIwLDB4YjMsMHg2OCwweDJmLDB4NDMsMHg2MSwweDA1 LDB4OGYsMHgyMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJewor KwkweGMwLDB4YzksMHg0NSwweGFjLDB4OGQsMHgyNywweDc3LDB4MDgsMHgwYiwweDE3LDB4NmQs MHhlZCwKKysJMHhjMSwweDdkLDB4ZDUsMHgwNywweDlkLDB4NmUsMHhmOCwweDIzLDB4MmEsMHgy MiwweDEzLDB4YmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhh NCwweDNjLDB4ZTcsMHgzYiwweGVhLDB4MTksMHg0NSwweDMyLDB4YzIsMHg4MywweDZkLDB4MjEs CisrCTB4OGEsMHhjMCwweGVlLDB4NjcsMHg0NSwweGRlLDB4MTMsMHg3ZCwweDlkLDB4NjEsMHgw MCwweDNiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHgxNSwweDA1 LDB4NzQsMHg0YSwweDdmLDB4OGQsMHg1YywweDYwLDB4MTYsMHhlNSwweDdiLDB4YWQsCisrCTB4 ZjUsMHg0MSwweDhmLDB4NTUsMHg2MCwweGM0LDB4MDksMHhlZSwweDFlLDB4MTEsMHg4MSwweGFi CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDZmLDB4ZjUsMHg5 YSwweGUyLDB4NTQsMHg1MywweDMwLDB4M2QsMHg1YSwweDI3LDB4MjksMHgzOCwKKysJMHgyNyww eGYyLDB4MGQsMHgwNSwweGU5LDB4MjYsMHhjYiwweDE2LDB4YzMsMHg1MSwweDVmLDB4MTMsCisr CTB4NDEsMHhmZSwweDk5LDB4ZjIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4NzMsMHg4MSwweDg4LDB4ODQsMHg4ZiwweGVkLDB4NmYsMHgxMCwweDlmLDB4OTMs MHhiZiwweDE3LAorKwkweDM1LDB4N2MsMHhlZiwweGQ1LDB4OGQsMHgyNiwweGE2LDB4N2EsMHhl OCwweDA5LDB4MzYsMHg0ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJewor KwkweGU2LDB4Y2YsMHhjZiwweDdlLDB4MTIsMHhlNSwweDQzLDB4ZDIsMHgzOCwweGQ4LDB4MjQs MHg2ZiwKKysJMHg1YSwweDM3LDB4NjgsMHhiZiwweDRmLDB4YTAsMHhmZiwweGQ1LDB4NjEsMHg4 YSwweDkzLDB4ZTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhhZiww eGY5LDB4ZDgsMHgxOSwweDkxLDB4MzAsMHg4MiwweDZmLDB4YTksMHgxZSwweDlkLDB4ZDcsCisr CTB4ZjMsMHg1MCwweGUwLDB4YzcsMHhkNSwweDY0LDB4OTYsMHg3ZCwweDRjLDB4NGQsMHg3OCww eDAzLAorKwkweDZkLDB4ZDgsMHg5ZSwweDcyCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMjI0 IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDExLDB4ODIsMHhmZCwweGQ5 LDB4NDIsMHhmNCwweGZhLDB4YzgsMHhmMiwweDQxLDB4ZTYsMHg1NCwKKysJMHgwMSwweGFlLDB4 MjIsMHg2ZSwweGM2LDB4YWYsMHhhZiwweGQwLDB4YTYsMHhiMiwweGUyLDB4NmQKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIy NF9ub25jZVtdID0KKysJeworKwkweGE5LDB4NDgsMHhkNywweDkyLDB4MzksMHg3ZSwweDJhLDB4 ZGMsMHgzMCwweDFmLDB4MGUsMHgyYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KKysJeworKwkweDExLDB4ZDUsMHhmNCwweGJkLDB4NjcsMHg4YywweDMxLDB4Y2YsMHhhMyww eDNmLDB4MWUsMHg2YiwKKysJMHhhOCwweDA3LDB4MDIsMHgwYiwweGM4LDB4MmUsMHg2YywweDY0 LDB4NDEsMHg1YiwweGM4LDB4MzcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHg2OCwweDE4LDB4YzIsMHgwNiwweGViLDB4M2UsMHgwNCwweDk1LDB4NDQsMHg1ZSwweGZi LDB4ZTYsCisrCTB4NDEsMHhjMSwweDVjLDB4Y2MsMHg0MCwweDJmLDB4YjcsMHhkMiwweDBmLDB4 ZjMsMHg2YiwweGU3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDdm LDB4NDUsMHhjNywweDVkLDB4MzIsMHhlNiwweDE3LDB4NjAsMHhiYSwweGRjLDB4YjgsMHg0MiwK KysJMHgxYiwweDljLDB4ZjEsMHhmYSwweDNiLDB4NGQsMHgyOSwweDU0LDB4YzYsMHg5MCwweGZm LDB4NWMsCisrCTB4Y2QsMHhkNiwweGE5LDB4Y2MKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHhjNCwweDhlLDB4MzcsMHg5NSwweDY5LDB4NTMsMHgyOCwweGQ3LDB4 MzcsMHhiYiwweDcwLDB4OTUsCisrCTB4MWMsMHgwNywweDFkLDB4ZDksMHhiNywweGU2LDB4MWIs MHhiYiwweGZlLDB4NDEsMHhlYiwweGM5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4NTMsMHgxNywweGExLDB4NmEsMHhmYSwweDc3LDB4NDcsMHhiMCwweDk1 LDB4NTYsMHg5YSwweDIwLAorKwkweDU3LDB4ZGUsMHg1YywweDg5LDB4OWYsMHg3ZiwweGUyLDB4 ZGUsMHgxNywweDNhLDB4NTAsMHgyMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9Cisr CXsKKysJMHgzYSwweDMyLDB4ZjksMHg4NSwweDBjLDB4YzEsMHhlZCwweDc2LDB4MmQsMHhkZiww eDQwLDB4YzMsCisrCTB4MDYsMHgyMiwweDY2LDB4ZDQsMHg5YSwweDlhLDB4ZmYsMHg1YSwweDdl LDB4N2EsMHhmMywweDk2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NDMs MHhiNCwweDU3LDB4NWMsMHgzOCwweDI1LDB4OWQsMHhhZSwweGVjLDB4OTYsMHhkMSwweDg1LAor KwkweDNhLDB4ODQsMHg4ZCwweGZlLDB4NjgsMHhkNSwweDBlLDB4NWMsMHg4ZiwweDY1LDB4YTUs MHg0ZSwKKysJMHg0NSwweDg0LDB4YTgsMHg5NAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTI1 NiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg0ZCwweGIwLDB4NDMsMHhk OCwweDM0LDB4NGIsMHgxMCwweDcwLDB4YjEsMHg4YiwweGVkLDB4ZWEsCisrCTB4MDcsMHg5Miww eDlmLDB4NmMsMHg3OSwweDMxLDB4YWYsMHg4MSwweDI5LDB4ZWIsMHg2ZSwweGNhLAorKwkweDMy LDB4NDgsMHgyOCwweGU3LDB4MDIsMHg1ZCwweGE2LDB4YTYKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9ub25jZVtd ID0KKysJeworKwkweDNhLDB4YWUsMHgxNSwweGE5LDB4OTksMHhkYywweGU0LDB4NjcsMHgzNCww eDNiLDB4NzAsMHgxNSwKKysJMHhhYSwweGQzLDB4MzAsMHg5YQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDEzLDB4MWQsMHgyNCwweDA0LDB4YjAsMHgx OCwweDgxLDB4MTUsMHgyMSwweDUxLDB4MmEsMHgyNCwKKysJMHg1MiwweDYxLDB4YmUsMHg2NCww eDgyLDB4NmIsMHg1NSwweDJmLDB4ZTIsMHhmMSwweDQwLDB4N2QsCisrCTB4NzEsMHhkOCwweDAx LDB4ODYsMHgxNSwweGI3LDB4OGIsMHhiNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtd ID0KKysJeworKwkweDhmLDB4YTYsMHg1NCwweDVmLDB4YjEsMHhkMCwweGQ4LDB4YzMsMHhlNyww eDBjLDB4MTUsMHhhOSwKKysJMHgyMywweDZlLDB4ZmUsMHhmYiwweDkzLDB4ZjcsMHgzYSwweGJk LDB4NTksMHgwMSwweGZhLDB4MTgsCisrCTB4OGUsMHhlOSwweDFhLDB4YTksMHg3OCwweGZjLDB4 NzksMHgwYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4Y2YsMHgy NCwweGI5LDB4ZWIsMHhiMywweGQ0LDB4Y2QsMHgxNywweDM3LDB4MzgsMHg3NSwweDc5LAorKwkw eDE1LDB4Y2IsMHgyZCwweDc1LDB4NTEsMHhmMSwweGNjLDB4YWEsMHgzMiwweGE0LDB4YTcsMHgz NiwKKysJMHg3YywweDVjLDB4ZTQsMHg0NywweGYxLDB4M2UsMHgxZCwweGU1CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZf cHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDUyLDB4NDIsMHhmYSwweGViLDB4ODUs MHhlMCwweDMwLDB4MjIsMHg3OSwweDAwLDB4MTYsMHhiMiwKKysJMHg4OCwweDJmLDB4MTQsMHg2 YSwweGI3LDB4ZmMsMHhiNywweDUzLDB4ZGMsMHg0YSwweDEyLDB4ZWYsCisrCTB4NTQsMHhkNiww eDMzLDB4ZTksMHgyMCwweGQ2LDB4ZmQsMHg1NgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9CisrCXsKKysJMHhmNCwweGY2LDB4NDksMHhhMSwweDJkLDB4NjQsMHgyYiwweDMwLDB4 NTgsMHhmOCwweGJkLDB4YjgsCisrCTB4NzUsMHhlYiwweGJiLDB4NWUsMHgxYywweDliLDB4ODEs MHg2YSwweGRhLDB4MTQsMHg4NiwweDZlLAorKwkweGQwLDB4ZGEsMHgxOCwweGI3LDB4ODgsMHhm YiwweDU5LDB4ZjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgy MSwweGNkLDB4NmUsMHg0NiwweGFkLDB4OTksMHgwNywweDE3LDB4YjQsMHgzZCwweDc2LDB4MGEs CisrCTB4ZmYsMHg1YiwweDUyLDB4NTAsMHg3OCwweGRmLDB4MWYsMHgyNCwweDA2LDB4MGQsMHgz ZiwweDc0LAorKwkweGE5LDB4YzksMHgzNywweGNmLDB4ZDgsMHgyNiwweDI1LDB4OTEKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhhNywweGFmLDB4MmYsMHgyOSwweGUw LDB4M2EsMHg3MiwweDk1LDB4OTYsMHgxYywweGE5LDB4ZjAsCisrCTB4NGEsMHgxNywweDRkLDB4 NjYsMHgwNiwweDEwLDB4YmYsMHgzOSwweDg5LDB4ODgsMHhiOCwweDkxLAorKwkweDM3LDB4MTgs MHg5OSwweGNmLDB4OGMsMHg1MywweDNiLDB4N2UKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0y NTYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4OTYsMHhiNywweDUzLDB4 MjIsMHgxZSwweDUyLDB4MmEsMHg5NiwweGIxLDB4MTUsMHgzYywweDM1LAorKwkweDVhLDB4OGIs MHhkMywweDRhLDB4YTYsMHg2YywweDgzLDB4MGEsMHg3ZCwweGEzLDB4MjMsMHgzZCwKKysJMHg0 MywweGExLDB4MDcsMHgyYywweDJkLDB4ZTMsMHg4MSwweGNjCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfbm9uY2VbXSA9 CisrCXsKKysJMHhmMSwweGFjLDB4OTcsMHhjYiwweDVlLDB4MDYsMHg0OCwweGQyLDB4OTQsMHhi ZSwweDE1LDB4MmUsCisrCTB4YzcsMHhmYywweGMyLDB4MDEKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg5OCwweGM1LDB4MWUsMHgzNSwweDVlLDB4ODksMHgw ZCwweGNlLDB4NjQsMHg2ZCwweDE4LDB4YTcsCisrCTB4NWEsMHhjNiwweGYzLDB4ZTcsMHhkNiww eDllLDB4YzAsMHhlYSwweGI3LDB4M2EsMHg4ZCwweDY1LAorKwkweGI4LDB4ZWIsMHgxMCwweGQ3 LDB4NTcsMHgxOCwweGEwLDB4MzIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHgxYiwweDEwLDB4YWYsMHhhYywweGQwLDB4NjUsMHg5NSwweGFkLDB4MDQsMHhhZCwweDAz LDB4MWMsCisrCTB4ZTAsMHg0MCwweGQ2LDB4M2UsMHgxYywweDQ2LDB4NTMsMHgzOSwweDdjLDB4 ZTIsMHhiYywweGRhLAorKwkweDhjLDB4YTIsMHgzMywweGE3LDB4OWEsMHgyNiwweGQzLDB4MjcK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YmEsMHg2MSwweDBlLDB4 NTUsMHhmZSwweDExLDB4OGEsMHg5ZSwweDBmLDB4ODAsMHhkZiwweDFkLAorKwkweDAzLDB4MGEs MHhmZSwweDE1LDB4OTQsMHgyOCwweDRiLDB4YmEsMHhmNCwweDlmLDB4NTEsMHgyNSwKKysJMHg4 OCwweGU1LDB4NGUsMHhmYiwweGFmLDB4Y2UsMHg2OSwweDkwCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4NjIsMHg3ZiwweDFlLDB4NmIsMHhlOCwweDhlLDB4ZTEs MHgzNSwweDdkLDB4OWIsMHg0ZiwweGM3LAorKwkweGVjLDB4YzgsMHhhYywweGVmLDB4NmIsMHgx MywweDllLDB4MDUsMHg1NiwweGMxLDB4MDgsMHhmOSwKKysJMHgyZiwweDBmLDB4MjcsMHg5Yyww eGQ0LDB4MTUsMHhlZCwweDJkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQor Kwl7CisrCTB4YzcsMHg3NiwweDZlLDB4YTksMHhkMiwweGIyLDB4NzYsMHg0MCwweDgyLDB4MjUs MHgyYywweGIzLAorKwkweDZmLDB4YWMsMHhlOSwweDc0LDB4ZWYsMHg4ZiwweDNjLDB4OGUsMHhj ZCwweGYxLDB4YmYsMHhiMywKKysJMHg0OSwweDc3LDB4MzQsMHg4OCwweDUyLDB4MzYsMHhlNiww eDJlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDhkLDB4YjgsMHgw YywweGQxLDB4YmYsMHg3MCwweGY2LDB4MTksMHhjMywweDQxLDB4ODAsMHg5ZiwKKysJMHhlMSww eGE1LDB4YTQsMHgxZiwweDJjLDB4MjYsMHhiMSwweGU1LDB4ZDgsMHhlYiwweGJlLDB4ZjgsCisr CTB4ZGYsMHg4OCwweDZhLDB4ODksMHhkNiwweDA1LDB4ZDgsMHg5ZAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3JldHVy bmVkYml0c1tdID0KKysJeworKwkweDQzLDB4MTIsMHgyYSwweDJjLDB4NDAsMHg1MywweDJlLDB4 N2MsMHg2NiwweDM0LDB4YWMsMHhjMywKKysJMHg0MywweGUzLDB4ZTAsMHg2YSwweGZjLDB4ZmEs MHhlYSwweDg3LDB4MjEsMHgxZiwweGUyLDB4MjYsCisrCTB4YzQsMHhmOSwweDA5LDB4OWEsMHgw ZCwweDZlLDB4N2YsMHhlMAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTM4NCBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9w cl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2OSwweDgxLDB4OTgsMHg4OCwweDQ0LDB4ZjUs MHhkNiwweDJlLDB4MDAsMHgwOCwweDNiLDB4YzUsCisrCTB4ZmIsMHhkNywweDhlLDB4NmYsMHgy MywweGY4LDB4NmQsMHgwOSwweGQ2LDB4ODUsMHg0OSwweGQxLAorKwkweGY4LDB4NmQsMHhhNCww eDU4LDB4NTQsMHhmZCwweDg4LDB4YTkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9ub25jZVtdID0KKysJeworKwkw eDZlLDB4MzgsMHg4MSwweGNhLDB4YjcsMHhlOCwweDZlLDB4NjYsMHg0OSwweDhhLDB4YjIsMHg1 OSwKKysJMHhlZSwweDE2LDB4YzksMHhkZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KKysJeworKwkweGZlLDB4NGMsMHhkOSwweGY0LDB4NzgsMHgzYiwweDA4LDB4NDEs MHg4ZCwweDhmLDB4NTUsMHhjNCwKKysJMHg0MywweDU2LDB4YjYsMHgxMiwweDM2LDB4NmIsMHgz MCwweGI3LDB4NWUsMHhlMSwweGI5LDB4NDcsCisrCTB4MDQsMHhiMSwweDRlLDB4YTksMHgwMCww eGExLDB4NTIsMHhhMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkw eDg5LDB4ZTksMHhjYywweDhmLDB4MjcsMHgzYywweDI2LDB4ZDEsMHg5NSwweGM4LDB4N2QsMHgw ZiwKKysJMHg1YiwweDFhLDB4ZjAsMHg3OCwweDM5LDB4NTYsMHg2ZiwweGE0LDB4MjMsMHhlNyww eGQxLDB4ZGEsCisrCTB4N2MsMHg2NiwweDMzLDB4YTAsMHg5MCwweGM5LDB4OTIsMHg4OAorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4YmUsMHgzZCwweDdjLDB4MGQs MHhjYSwweGRhLDB4N2MsMHg0OSwweGI4LDB4MTIsMHgzNiwweGMwLAorKwkweGRiLDB4YWQsMHgz NSwweGE4LDB4YzcsMHgwYiwweDJhLDB4MmMsMHg2OSwweDZkLDB4MjUsMHg1NiwKKysJMHg2Myww eDgyLDB4MTEsMHgzZSwweGE3LDB4MzMsMHg3MCwweDcyCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfaW50X3JldHVy bmVkYml0c1tdID0KKysJeworKwkweDgyLDB4M2QsMHhlNiwweDU0LDB4ODAsMHg0MiwweGY4LDB4 YmEsMHg5MCwweDRmLDB4MDYsMHhhNiwKKysJMHhkMiwweDdmLDB4YmYsMHg3OSwweDdjLDB4MTIs MHg3ZCwweGE2LDB4YTIsMHg2NiwweGU4LDB4YTYsCisrCTB4YzAsMHhkNiwweDRhLDB4NTUsMHhi ZiwweGQ4LDB4MGEsMHhjNSwweGY4LDB4MDMsMHg4OCwweGRkLAorKwkweDhlLDB4ODcsMHhkMSww eDVhLDB4NDgsMHgyNiwweDcyLDB4MmEsMHg4ZSwweGNmLDB4ZWUsMHhiYQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3By X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4ZiwweGZmLDB4ZDksMHg4NCwweGJiLDB4 ODUsMHgzYSwweDY2LDB4YTEsMHgyMSwweGNlLDB4YjIsCisrCTB4M2EsMHgzYSwweDE3LDB4MjIs MHgxOSwweGFlLDB4YzcsMHhiNiwweDYzLDB4ODEsMHhkNSwweGZmLAorKwkweDBkLDB4YzgsMHhl MSwweGFmLDB4NTcsMHhkMiwweGNiLDB4NjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJb XSA9CisrCXsKKysJMHhkNywweGZiLDB4YzksMHhlOCwweGUyLDB4ZjIsMHhhYSwweDRjLDB4Yjgs MHg1MSwweDJmLDB4ZTEsCisrCTB4MjIsMHhiYSwweGYzLDB4ZGEsMHgwYSwweDE5LDB4NzYsMHg3 MSwweDU3LDB4YjIsMHgxZCwweDk0LAorKwkweDA5LDB4NjksMHg2YywweGQzLDB4OTcsMHg1MSww eDgxLDB4ODcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNiwweDE5 LDB4MjgsMHhhOCwweDIxLDB4Y2UsMHg1ZSwweGRiLDB4MjQsMHg3OSwweDhjLDB4NzYsCisrCTB4 NWQsMHg3MywweGIyLDB4ZGYsMHhhYywweGVmLDB4ODUsMHhhNywweDNiLDB4MTksMHgwOSwweDhi LAorKwkweDdmLDB4OTgsMHgyOCwweGE5LDB4OTMsMHhkOCwweDdhLDB4YWQsMHg1NSwweDhiLDB4 MjQsMHg5ZCwKKysJMHhlNiwweDk4LDB4ZmUsMHg0NywweGQ1LDB4NDgsMHhjMSwweDIzLDB4ZDgs MHgxZCwweDYyLDB4NzUKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0zODQgTm8gUFIgICovCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf ZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YzMsMHg1NiwweDJiLDB4MWQsMHhjMiwweGJiLDB4 YTgsMHhmMCwweGFlLDB4MWIsMHgwZCwweGQzLAorKwkweDVhLDB4NmMsMHhkYSwweDU3LDB4OGUs MHhhNSwweDhhLDB4MGQsMHg2YywweDRiLDB4MTgsMHhiMSwKKysJMHgwNCwweDNlLDB4YjQsMHg5 OSwweDM1LDB4YzQsMHhjMCwweDVmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfbm9uY2VbXSA9CisrCXsKKysJMHhjNSww eDQ5LDB4MWUsMHg2NiwweDI3LDB4OTIsMHhiZSwweGVjLDB4YjUsMHgxZSwweDRiLDB4YjEsCisr CTB4MzgsMHhlMywweGViLDB4NjIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 CisrCXsKKysJMHhiZSwweGU3LDB4NmIsMHg1NywweGRlLDB4ODgsMHgxMSwweDk2LDB4OWIsMHg2 ZSwweGVhLDB4ZTUsCisrCTB4NjMsMHg4MywweDRjLDB4YjYsMHg4ZCwweDY2LDB4YWEsMHgxZiww eDhiLDB4NTQsMHhlNywweDYyLAorKwkweDZkLDB4NWEsMHhmYywweGJmLDB4OTcsMHhiYSwweGNk LDB4NzcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhlNSwweDI4LDB4 NWYsMHg0MywweGY1LDB4ODMsMHg2ZSwweDBhLDB4ODMsMHg1YywweGUzLDB4ODEsCisrCTB4MDMs MHhmMiwweGY4LDB4NzgsMHgwMCwweDdjLDB4OTUsMHg4NywweDE2LDB4ZDYsMHg2YywweDU4LAor KwkweDMzLDB4NmMsMHg1MywweDM1LDB4MGQsMHg2NiwweGUzLDB4Y2UKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTIsMHgxZiwweGYzLDB4ZGEsMHgwZCwweDE5LDB4 OTksMHg4NywweGM0LDB4OTAsMHhhMiwweDMxLAorKwkweGNhLDB4MmEsMHg4OSwweDU4LDB4NDMs MHg0NCwweGI4LDB4ZGUsMHhjZiwweGE0LDB4YmUsMHgzYiwKKysJMHg1MywweDI2LDB4MjIsMHgz MSwweDc2LDB4NDEsMHgyMiwweGI1LDB4YTgsMHg3MCwweDJmLDB4NGIsCisrCTB4NjQsMHg5NSww eDRkLDB4NDgsMHg5NiwweDM1LDB4ZTYsMHhiZCwweDNjLDB4MzQsMHhkYiwweDFiCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NzcsMHg2MSwweGJhLDB4YmMsMHhm MiwweGMxLDB4ZjMsMHg0YiwweDg2LDB4NjUsMHhmZCwweDQ4LAorKwkweDBlLDB4M2MsMHgwMiww eDVlLDB4YTIsMHg3YSwweDZiLDB4N2MsMHhlZCwweDIxLDB4NWUsMHhmOSwKKysJMHhjZCwweGNk LDB4NzcsMHgwNywweDJiLDB4YmUsMHhjNSwweDVjCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPQorKwl7CisrCTB4MTgsMHgyNCwweDVmLDB4YzYsMHg4NCwweGQxLDB4NjcsMHhj MywweDlhLDB4MTEsMHhhNSwweDhjLAorKwkweDA3LDB4MzksMHgyMSwweDgzLDB4NGQsMHgwNCww eGM0LDB4NmEsMHgyOCwweDE5LDB4Y2YsMHg5MiwKKysJMHgyMSwweGQ5LDB4OWUsMHg0MSwweDcy LDB4NmMsMHg5ZSwweDYzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkw eDk2LDB4NjcsMHg0MSwweDI4LDB4OWIsMHhiNywweDkyLDB4OGQsMHg2NCwweDNiLDB4ZTQsMHhj ZiwKKysJMHg3ZSwweGFhLDB4MWUsMHhiMSwweDRiLDB4MWQsMHgwOSwweDU2LDB4NjcsMHg5Yyww eGM2LDB4NmQsCisrCTB4M2IsMHhlOCwweDkxLDB4OWQsMHhlMSwweDhhLDB4YjcsMHgzMgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMzg0X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGUzLDB4NTksMHg2MSwweDM4LDB4OTIs MHhlYywweGUyLDB4M2MsMHhmZiwweGI3LDB4ZGIsMHgxOSwKKysJMHgwZiwweDViLDB4OTMsMHg2 OCwweDBkLDB4YTQsMHg5NCwweDQwLDB4NzIsMHgwYiwweGUwLDB4ZWQsCisrCTB4NGQsMHhjZCww eDY4LDB4YTAsMHgxZSwweGZlLDB4NjcsMHhiMiwweGZhLDB4MjEsMHg1NiwweDc0LAorKwkweGE0 LDB4YWQsMHhjZiwweGI3LDB4NjAsMHg2NiwweDJlLDB4NDAsMHhkZSwweDgyLDB4Y2EsMHhmYgor Kwl9OworKworKworKy8qIEhNQUMgU0hBLTUxMiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9 CisrCXsKKysJMHhhYSwweDllLDB4NDUsMHg2NywweDBlLDB4MDAsMHgyYSwweDY3LDB4OTgsMHhk NiwweGRhLDB4MGIsCisrCTB4MGYsMHgxNywweDdlLDB4YWMsMHhmZCwweDI3LDB4YzQsMHhjYSww eDg0LDB4ZGYsMHhkZSwweGJhLAorKwkweDg1LDB4ZDksMHhiZSwweDhmLDB4ZjMsMHhmZiwweDkx LDB4NGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTUxMl9wcl9ub25jZVtdID0KKysJeworKwkweDhjLDB4NDksMHgyZiwweDU4 LDB4MWUsMHg3YSwweGRhLDB4NGIsMHg3ZSwweDhhLDB4MzAsMHg3YiwKKysJMHg4NiwweGVhLDB4 YWYsMHhhMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkw eDcxLDB4ZTEsMHhiYiwweGFkLDB4YTcsMHg0YiwweDJlLDB4MzEsMHgzYiwweDBiLDB4ZWMsMHgy NCwKKysJMHg5OSwweDM4LDB4YmMsMHhhYSwweDA1LDB4NGMsMHg0NiwweDQ0LDB4ZmEsMHhhZCww eDhlLDB4MDIsCisrCTB4YzEsMHg3ZSwweGFkLDB4ZWMsMHg1NCwweGE2LDB4ZDAsMHhhZAorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDNkLDB4NmUsMHhhNiwweGE4 LDB4MjksMHgyYSwweGIyLDB4ZjUsMHg5OCwweDQyLDB4ZTQsMHg5MiwKKysJMHg3OCwweDIyLDB4 NjcsMHhmZCwweDFiLDB4MTUsMHgxZSwweDI5LDB4YWEsMHg3MSwweDNjLDB4M2MsCisrCTB4ZTcs MHgwNSwweDIwLDB4YTksMHgyOSwweGM2LDB4NzUsMHg3MQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlp bnB1dHByW10gPQorKwl7CisrCTB4YWIsMHhiOSwweDE2LDB4ZDgsMHg1NSwweDM1LDB4NTQsMHhi NywweDk3LDB4M2YsMHg5NCwweGJjLAorKwkweDJmLDB4N2MsMHg3MCwweGM3LDB4ZDAsMHhlZCww eGI3LDB4NGIsMHhmNywweGY2LDB4NmMsMHgwMywKKysJMHgwYywweGIwLDB4MDMsMHhkOCwweGJi LDB4NzEsMHhkOSwweDEwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweDhlLDB4ZDMsMHhmZCwweDUyLDB4OWUsMHg4MywweDA4LDB4NDksMHgxOCwweDZlLDB4MjMs MHg1NiwKKysJMHg1YywweDQ1LDB4OTMsMHgzNCwweDA1LDB4ZTIsMHg5OCwweDhmLDB4MGMsMHhk NCwweDMyLDB4MGMsCisrCTB4ZmQsMHhkYSwweDVmLDB4OTIsMHgzYSwweDhjLDB4ODEsMHhiZCww eGY2LDB4NmMsMHg1NSwweGZkLAorKwkweGI4LDB4MjAsMHhjZSwweDhkLDB4OTcsMHgyNywweGU4 LDB4ZTgsMHhlMCwweGIzLDB4ODUsMHg1MCwKKysJMHhhMiwweGMyLDB4YjIsMHg5NSwweDFkLDB4 NDgsMHhkMywweDdiLDB4NGIsMHg3OCwweDEzLDB4MzUsCisrCTB4MDUsMHgxNywweGJlLDB4MGQK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4YzMsMHhmYywweDk1 LDB4YWEsMHg2OSwweDA2LDB4YWUsMHg1OSwweDQxLDB4Y2UsMHgyNiwweDA4LAorKwkweDI5LDB4 NmQsMHg0NSwweGRhLDB4ZTgsMHhiMywweDZjLDB4OTUsMHg2MCwweDBmLDB4NzAsMHgyYywKKysJ MHgxMCwweGJhLDB4MzgsMHg4YywweGNmLDB4MjksMHg5OSwweGFhCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50 cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4M2IsMHg5YSwweDI1LDB4Y2UsMHhkNywweGY5LDB4 NWMsMHhkMSwweDNhLDB4M2UsMHhhYSwweDcxLAorKwkweDE0LDB4M2UsMHgxOSwweGU4LDB4Y2Us MHhlNiwweGZlLDB4NTEsMHg4NCwweGU5LDB4MWIsMHhmZSwKKysJMHgzZiwweGE3LDB4ZjIsMHhm ZCwweDc2LDB4NWYsMHg2YSwweGU3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4YjcsMHg4MiwweGE5LDB4NTcsMHg4MSwweDY3LDB4NTMsMHhiNSwweGExLDB4ZTksMHgz ZCwweDM1LAorKwkweGY5LDB4ZTQsMHg5NywweGJlLDB4YTYsMHhjYSwweGYxLDB4MDEsMHgxMyww eDA5LDB4ZTcsMHgyMSwKKysJMHhjMCwweGVkLDB4OTMsMHg1ZCwweDRiLDB4ZjQsMHhlYiwweDhk LDB4NTMsMHgyNSwweDhhLDB4YzQsCisrCTB4YjEsMHg2ZiwweDZlLDB4MzcsMHhjZCwweDJlLDB4 YWMsMHgzOSwweGIyLDB4YjYsMHg5OSwweGEzLAorKwkweDgyLDB4MDAsMHhiMCwweDIxLDB4ZjAs MHhjNywweDJmLDB4NGMsMHg3MywweDkyLDB4ZmQsMHgwMCwKKysJMHhiNiwweGFmLDB4YmMsMHhk MworKwl9OworKworKworKy8qIEhNQUMgU0hBLTUxMiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHg2ZSwweDg1LDB4ZTYsMHgyNSwweDk2LDB4MjksMHhhNywweDUyLDB4NWIs MHg2MCwweGJhLDB4YWEsCisrCTB4ZGUsMHhkYiwweDM2LDB4MGEsMHg1MSwweDlhLDB4MTUsMHhh ZSwweDZlLDB4MTgsMHhkMywweGZlLAorKwkweDM5LDB4YjksMHg0YSwweDk2LDB4ZjgsMHg3Nyww eGNiLDB4OTUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9ub25jZVtdID0KKysJeworKwkweGUwLDB4YTYsMHg1ZCwweDA4 LDB4YzMsMHg3YywweGFlLDB4MjUsMHgyZSwweDgwLDB4ZDEsMHgzZSwKKysJMHhkOSwweGFmLDB4 NDMsMHgzYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDUz LDB4OTksMHg1MiwweDVmLDB4MTEsMHhhOSwweDY0LDB4NjYsMHgyMCwweDVlLDB4MWIsMHg1ZiwK KysJMHg0MiwweGIzLDB4ZjQsMHhkYSwweGVkLDB4YmIsMHg2MywweGMxLDB4MjMsMHhhZiwweGQw LDB4MDEsCisrCTB4OTAsMHgzYiwweGQwLDB4NzgsMHhlNCwweDBiLDB4YTcsMHgyMAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh NTEyX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDg1LDB4OTAsMHg4MCwweGQzLDB4OTgs MHhmMSwweDUzLDB4NmQsMHg2OCwweDE1LDB4OGYsMHhlNSwKKysJMHg2MCwweDNmLDB4MTcsMHgy OSwweDU1LDB4OGQsMHgzMywweGIxLDB4NDUsMHg2NCwweDY0LDB4OGQsCisrCTB4NTAsMHgyMSww eDg5LDB4YWUsMHhmNiwweGZkLDB4MzIsMHg3MworKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHgyOCwweDU2LDB4MzAsMHg2ZiwweGY0LDB4YTEsMHg0OCwweGUwLDB4Yzks MHhmNSwweDc1LDB4OTAsCisrCTB4Y2MsMHhmYiwweGRmLDB4ZGYsMHg3MSwweDNkLDB4MGEsMHg5 YSwweDAzLDB4NjUsMHgzYiwweDE4LAorKwkweDYxLDB4ZTMsMHhkMSwweGRhLDB4Y2MsMHg0YSww eGZlLDB4NTUsMHgzOCwweGY4LDB4MjEsMHg2YiwKKysJMHhmYSwweDE4LDB4MDEsMHg0MiwweDM5 LDB4MmYsMHg5OSwweDUzLDB4MzgsMHgxNSwweDgyLDB4MzQsCisrCTB4YzUsMHg5MywweDkyLDB4 YmMsMHg0ZCwweDc1LDB4MWEsMHg1ZiwweDIxLDB4MjcsMHhjYywweGExLAorKwkweGIxLDB4NTcs MHg2OSwweGU4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OGMs MHg1MiwweDdlLDB4NzcsMHg3MiwweDNmLDB4YTMsMHgwNCwweDk3LDB4MTAsMHg5YiwweDQxLAor KwkweGJkLDB4ZTgsMHhmZiwweDg5LDB4ZWQsMHg4MCwweGUzLDB4YmQsMHhhYSwweDEyLDB4MmQs MHhjYSwKKysJMHg3NSwweDgyLDB4MzYsMHg3NywweDg4LDB4Y2QsMHhhNiwweDczCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4N2UsMHgzMiwweGUzLDB4Njks MHg2OSwweDA3LDB4MzQsMHhhMiwweDE2LDB4YTIsMHg1ZCwweDFhLAorKwkweDEwLDB4OTEsMHhk MywweGUyLDB4MjEsMHhhMiwweGEzLDB4ZGQsMHhjZCwweDBjLDB4MDksMHg4NiwKKysJMHgxMSww eGUxLDB4NTAsMHhmZiwweDVjLDB4YjcsMHhlYiwweDVjCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlu cHV0MltdID0KKysJeworKwkweDdmLDB4NzgsMHg2NiwweGQ4LDB4ZmIsMHg2NywweGNmLDB4OGQs MHg4YywweDA4LDB4MzAsMHhhNSwKKysJMHhmOCwweDdkLDB4Y2YsMHg0NCwweDU5LDB4Y2UsMHhm OCwweGRmLDB4NTgsMHhkMywweDYwLDB4Y2IsCisrCTB4YTgsMHg2MCwweGI5LDB4MDcsMHhjNCww eGIxLDB4OTUsMHg0OAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGRmLDB4 YTcsMHgzNiwweGQ0LDB4ZGMsMHg1ZCwweDRkLDB4MzEsMHhhZCwweDY5LDB4NDYsMHg5ZiwKKysJ MHhmMSwweDdjLDB4ZDcsMHgzYiwweDRmLDB4NTUsMHhmMiwweGQ3LDB4YjksMHg5ZCwweGFkLDB4 N2EsCisrCTB4NzksMHgwOCwweDU5LDB4YTUsMHhkYywweDc0LDB4ZjUsMHg5YiwweDczLDB4ZDIs MHgxMywweDI1LAorKwkweDBiLDB4ODEsMHgwOCwweDA4LDB4MjUsMHhmYiwweDM5LDB4ZjIsMHhm MCwweGEzLDB4YTQsMHg4ZCwKKysJMHhlZiwweDA1LDB4OWUsMHhiOCwweGM3LDB4NTIsMHhlNCww eDBlLDB4NDIsMHhhYSwweDdjLDB4NzksCisrCTB4YzIsMHhkNiwweGZkLDB4YTUKKysJfTsKKysK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCistLS0g b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTIt MDctMTIgMjE6NDk6MjUuMzQyMzUyMzczICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MjM1MjM3MyAr MDIwMAorQEAgLTAsMCArMSwxOTMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAq CisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU CisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK KysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3BbXSA9 IHsKKysJMHhhOCwweDUzLDB4NzgsMHhkOCwweGZkLDB4M2YsMHg4ZCwweDcyLDB4ZWMsMHg3NCww eDE4LDB4MDgsCisrCTB4MGQsMHhhMiwweDEzLDB4MTcsMHhlNCwweDNlLDB4YzQsMHhiNiwweDJi LDB4YTgsMHhjOCwweDYyLAorKwkweDNiLDB4N2UsMHg0ZCwweDA0LDB4NDQsMHgxZCwweGQxLDB4 YTAsMHg2NSwweDg2LDB4NjIsMHg1OSwKKysJMHg2NCwweDkzLDB4Y2EsMHg4ZSwweDllLDB4OGYs MHhiYiwweDdlLDB4MzQsMHhhYSwweGRkLDB4YjYsCisrCTB4MmUsMHg1ZCwweDY3LDB4YjYsMHhk MCwweDlhLDB4NmUsMHg2MSwweGI3LDB4NjksMHhlNywweGMzLAorKwkweDUyLDB4YWEsMHgyYiww eDEwLDB4ZTIsMHgwYywweGEwLDB4NjMsMHg2OSwweDYzLDB4YjUsMHg1MiwKKysJMHgzZSwweDg2 LDB4NDcsMHgwZCwweGVjLDB4YmIsMHhlZCwweGEwLDB4MjcsMHhlNywweDk3LDB4ZTcsCisrCTB4 YjYsMHg3NiwweDM1LDB4ZDQsMHhkNCwweDljLDB4MzAsMHg3MCwweDBlLDB4NzQsMHhhZiwweDhh LAorKwkweDBmLDB4ZjEsMHg1NiwweGE4LDB4MDEsMHhhZiwweDU3LDB4YTIsMHg2ZSwweDcwLDB4 NzgsMHhmMSwKKysJMHhkOCwweDJmLDB4NzQsMHg5MCwweDhlLDB4Y2IsMHg2ZCwweDA3LDB4ZTcs MHgwYiwweDM1LDB4MDMsCisrCTB4ZWUsMHhkOSwweDRmLDB4YTMsMHgyYywweGYxLDB4N2EsMHg3 ZiwweGMzLDB4ZDYsMHhjZiwweDQwLAorKwkweGRjLDB4N2IsMHgwMCwweDgzLDB4MGUsMHg2YSww eDI1LDB4NjYsMHhkYywweDA3LDB4M2UsMHgzNCwKKysJMHgzMywweDEyLDB4NTEsMHg3YywweDZh LDB4YTUsMHgxNSwweDJiLDB4NGIsMHhmZSwweGNkLDB4MmUsCisrCTB4NTUsMHgxZiwweGVlLDB4 MzQsMHg2MywweDE4LDB4YTEsMHg1MywweDQyLDB4M2MsMHg5OSwweDZiLAorKwkweDBkLDB4NWQs MHhjYiwweDkxLDB4MDIsMHhhZSwweGRkLDB4MzgsMHg3OSwweDg2LDB4MTYsMHhmMSwKKysJMHhm MSwweGUwLDB4ZDYsMHhjNCwweDAzLDB4NTIsMHg1YiwweDFmLDB4OWIsMHgzZCwweDRkLDB4Yzcs CisrCTB4NjYsMHhkZSwweDJkLDB4ZmMsMHg0YSwweDU2LDB4ZDcsMHhiOCwweGJhLDB4NTksMHg2 MywweGQ2LAorKwkweDBmLDB4M2UsMHgxNiwweDMxLDB4ODgsMHg3MCwweGFkLDB4NDMsMHg2OSww eDUyLDB4ZTUsMHg1NywKKysJMHg2NSwweDM3LDB4NGUsMHhhYiwweDg1LDB4ZTgsMHhlYywweDE3 LDB4ZDYsMHhiOSwweGE0LDB4NTQsCisrCTB4N2IsMHg5YiwweDVmLDB4MjcsMHg1MiwweGYzLDB4 MTAsMHg1YiwweGU4LDB4MDksMHhiMiwweDNhLAorKwkweDJjLDB4OGQsMHg3NCwweDY5LDB4ZGIs MHgwMiwweGUyLDB4NGQsMHg1OSwweDIzLDB4OTQsMHhhNywKKysJMHhkYiwweGEwLDB4NjksMHhl OQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9xW10g PSB7CisrCTB4ZDIsMHg3NywweDA0LDB4NGUsMHg1MCwweGY1LDB4YTQsMHhlMywweGY1LDB4MTAs MHhhNSwweDBhLAorKwkweDBiLDB4ODQsMHhmZCwweGZmLDB4YmMsMHhhMCwweDQ3LDB4ZWQsMHgy NywweDYwLDB4MjAsMHg1NiwKKysJMHg3NCwweDQxLDB4YTAsMHhhNQorK307CisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9nW10gPSB7CisrCTB4MTMsMHhkNyww eDU0LDB4ZTIsMHgxZiwweGQyLDB4NDEsMHg2NSwweDVkLDB4YTgsMHg5MSwweGM1LAorKwkweDIy LDB4YTYsMHg1YSwweDcyLDB4YTgsMHg5YiwweGRjLDB4NjQsMHhlYywweDliLDB4NTQsMHhhOCwK KysJMHgyMSwweGVkLDB4NGEsMHg4OSwweDhiLDB4NDksMHgwZSwweDBjLDB4NGYsMHhjYiwweDcy LDB4MTksCisrCTB4MmEsMHg0YSwweDIwLDB4ZjUsMHg0MSwweGYzLDB4ZjIsMHg5MiwweDUzLDB4 OTksMHhmMCwweGJhLAorKwkweGVjLDB4ZjksMHgyOSwweGFhLDB4ZmIsMHhmNywweDlkLDB4ZmUs MHg0MywweDMyLDB4MzksMHgzYiwKKysJMHgzMiwweGNkLDB4MmUsMHgyZiwweGNmLDB4MjcsMHgy ZiwweDMyLDB4YTYsMHgyNywweDQzLDB4NGEsCisrCTB4MGQsMHhmMiwweDQyLDB4YjcsMHg1Yiww eDQxLDB4NGQsMHhmMywweDcyLDB4MTIsMHgxZSwweDUzLAorKwkweGE1LDB4NTMsMHhmMiwweDIy LDB4ZjgsMHgzNiwweGIwLDB4MDAsMHhmMCwweDE2LDB4NDgsMHg1YiwKKysJMHg2YiwweGQwLDB4 ODksMHg4NCwweDUxLDB4ODAsMHgxZCwweGNkLDB4OGQsMHhlNiwweDRjLDB4ZDUsCisrCTB4MzYs MHg1NiwweDk2LDB4ZmYsMHhjNSwweDMyLDB4ZDUsMHgyOCwweGM1LDB4MDYsMHg2MiwweDBhLAor KwkweDk0LDB4MmEsMHgwMywweDA1LDB4MDQsMHg2ZCwweDhmLDB4MTgsMHg3NiwweDM0LDB4MWYs MHgxZSwKKysJMHg1NywweDBiLDB4YzMsMHg5NywweDRiLDB4YTYsMHhiOSwweGE0LDB4MzgsMHhl OSwweDcwLDB4MjMsCisrCTB4MDIsMHhhMiwweGU2LDB4ZTYsMHg3YiwweGZkLDB4MDYsMHhkMyww eDJiLDB4YzYsMHg3OSwweDk2LAorKwkweDIyLDB4NzEsMHhkNywweGI0LDB4MGMsMHhkNywweDJm LDB4MzgsMHg2ZSwweDY0LDB4ZTAsMHhkNywKKysJMHhlZiwweDg2LDB4Y2EsMHg4YywweGE1LDB4 ZDEsMHg0MiwweDI4LDB4ZGMsMHgyYSwweDRmLDB4MTYsCisrCTB4ZTMsMHgxOCwweDk4LDB4ODYs MHhiNSwweDk5LDB4MDYsMHg3NCwweGY0LDB4MjAsMHgwZiwweDNhLAorKwkweDRjLDB4ZjYsMHg1 YSwweDNmLDB4MGQsMHhkYiwweGExLDB4ZmEsMHg2NywweDJkLDB4ZmYsMHgyZiwKKysJMHg1ZSww eDE0LDB4M2QsMHgxMCwweGU0LDB4ZTksMHg3YSwweGU4LDB4NGYsMHg2ZCwweGEwLDB4OTUsCisr CTB4MzUsMHhkNSwweGI5LDB4ZGYsMHgyNSwweDkxLDB4ODEsMHhhNywweDliLDB4NjMsMHhiMCww eDY5LAorKwkweGU5LDB4NDksMHg5NywweDJiLDB4MDIsMHhiYSwweDM2LDB4YjMsMHg1OCwweDZh LDB4YWIsMHg3ZSwKKysJMHg0NSwweGYzLDB4MjIsMHhmOCwweDJlLDB4NGUsMHg4NSwweGNhLDB4 M2EsMHhiOCwweDU1LDB4OTEsCisrCTB4YjMsMHhjMiwweGE5LDB4NjYKKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHViX2tleVtdID0geworKwkweDI0 LDB4NTIsMHhmMywweGNjLDB4YmUsMHg5ZSwweGQ1LDB4Y2EsMHg3ZCwweGM3LDB4NGMsMHg2MCwK KysJMHgyYiwweDk5LDB4MjIsMHg2ZSwweDhmLDB4MmYsMHhhYiwweDM4LDB4ZTcsMHhkNywweGRk LDB4ZmIsCisrCTB4NzUsMHg1MywweDliLDB4MTcsMHgxNSwweDVlLDB4OWYsMHhjZiwweGQxLDB4 YWIsMHhhNSwweDY0LAorKwkweGViLDB4ODUsMHgzNSwweGQ4LDB4MTIsMHhjOSwweGMyLDB4ZGMs MHhmOSwweDcyLDB4ODQsMHg0NCwKKysJMHgxYiwweGM0LDB4ODIsMHgyNCwweDM2LDB4MjQsMHhj NywweGY0LDB4NTcsMHg1OCwweDBjLDB4MWMsCisrCTB4MzgsMHhhNSwweDdjLDB4NDYsMHhjNCww eDU3LDB4MzksMHgyNCwweDcwLDB4ZWQsMHhiNSwweDJjLAorKwkweGI1LDB4YTYsMHhlMCwweDNm LDB4ZTYsMHgyOCwweDdiLDB4YjYsMHhmNCwweDlhLDB4NDIsMHhhMiwKKysJMHgwNiwweDVhLDB4 MDUsMHg0ZiwweDAzLDB4MDgsMHgzOSwweGRmLDB4MWYsMHhkMywweDE0LDB4OWMsCisrCTB4NGMs MHhhMCwweDUzLDB4MWQsMHhkOCwweGNhLDB4OGEsMHhhYSwweDljLDB4YzcsMHgzMywweDcxLAor KwkweDkzLDB4MzgsMHg3MywweDQ4LDB4MzMsMHg2MSwweDE4LDB4MjIsMHg0NSwweDQ1LDB4ZTgs MHg4YywKKysJMHg4MCwweGZmLDB4ZDgsMHg3NiwweDVkLDB4NzQsMHgzNiwweDAzLDB4MzMsMHhj YywweGFiLDB4OTksCisrCTB4NzIsMHg3NywweDliLDB4NjUsMHgyNSwweGE2LDB4NWIsMHhkZCww eDBkLDB4MTAsMHhjNiwweDc1LAorKwkweGMxLDB4MDksMHhiYiwweGQzLDB4ZTUsMHhiZSwweDRk LDB4NzIsMHhlZiwweDZlLDB4YmEsMHg2ZSwKKysJMHg0MywweDhkLDB4NTIsMHgyNiwweDIzLDB4 N2QsMHhiOCwweDg4LDB4MzcsMHg5YywweDVmLDB4Y2MsCisrCTB4NDcsMHhhMywweDg0LDB4N2Ys MHhmNiwweDM3LDB4MTEsMHhiYSwweGVkLDB4NmQsMHgwMywweGFmLAorKwkweGU4LDB4MWUsMHg2 OSwweDRhLDB4NDEsMHgzYiwweDY4LDB4MGIsMHhkMywweDhhLDB4YjQsMHg5MCwKKysJMHgzZiww eDgzLDB4NzAsMHhhNywweDA3LDB4ZWYsMHg1NSwweDFkLDB4NDksMHg0MSwweDAyLDB4NmQsCisr CTB4OTUsMHg3OSwweGQ2LDB4OTEsMHhkZSwweDhlLDB4ZGEsMHhhMSwweDYxLDB4MDUsMHhlYiww eDlkLAorKwkweGJhLDB4M2MsMHgyZiwweDRjLDB4MWIsMHhlYywweDUwLDB4ODIsMHg3NSwweGFh LDB4MDIsMHgwNywKKysJMHhlMiwweDUxLDB4YjUsMHhlYywweGNiLDB4MjgsMHg2YSwweDRiLDB4 MDEsMHhkNCwweDQ5LDB4ZDMsCisrCTB4MGEsMHhjYiwweDY3LDB4MzcsMHgxNywweGEwLDB4ZDIs MHhmYiwweDNiLDB4NTAsMHhjOCwweDkzLAorKwkweGY3LDB4ZGEsMHhiMSwweDRmCisrfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3ByaXZfa2V5W10gPSB7 CisrCTB4MGMsMHg0YiwweDMwLDB4ODksMHhkMSwweGI4LDB4NjIsMHhjYiwweDNjLDB4NDMsMHg2 NCwweDkxLAorKwkweGYwLDB4OTEsMHg1NCwweDcwLDB4YzUsMHgyNywweDk2LDB4ZTMsMHhhYyww eGJlLDB4ZTgsMHgwMCwKKysJMHhlYywweDU1LDB4ZjYsMHhjYworK307CisrCisrc3RhdGljIGlu dCBjb3JydXB0X2RzYTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQorKyAgICB7CisrICAg IGNvcnJ1cHRfZHNhID0gMTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCisr CXsKKysJRFNBICpkc2EgPSBOVUxMOworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOworKwlpbnQgcmV0 ID0gMDsKKysKKysJZHNhID0gRFNBX25ldygpOworKworKwlpZihkc2EgPT0gTlVMTCkKKysJCWdv dG8gZXJyOworKworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHAsIGRzYV90ZXN0XzIw NDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHEsIGRzYV90ZXN0XzIwNDgpOwor KwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIGcsIGRzYV90ZXN0XzIwNDgpOworKwlmaXBz X2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHB1Yl9rZXksIGRzYV90ZXN0XzIwNDgpOworKwlmaXBz X2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHByaXZfa2V5LCBkc2FfdGVzdF8yMDQ4KTsKKysKKysJ aWYgKGNvcnJ1cHRfZHNhKQorKwkJQk5fc2V0X2JpdChkc2EtPnB1Yl9rZXksIDIwNDcpOworKwor KwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUVW UF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7CisrCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBOVUxMLCAwLAorKwkJCQkJTlVMTCwgMCwgRVZQX3NoYTI1NigpLCAwLAorKwkJ CQkJIkRTQSBTSEEyNTYiKSkKKysJCWdvdG8gZXJyOworKwlyZXQgPSAxOworKworKwllcnI6Cisr CWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKwllbHNlIGlmIChkc2EpCisrCQlEU0Ff ZnJlZShkc2EpOworKwlyZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2ZpcHMvZmlwc19lbmMuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZW5j LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MjM1MjM3MyArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDIzNTIz NzMgKzAyMDAKK0BAIC0wLDAgKzEsMTkxIEBACisrLyogZmlwZS9ldnAvZmlwc19lbmMuYyAqLwor Ky8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4g U1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNv bmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl IGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9u LCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1 c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0 aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJt cworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFz IHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBi ZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJp YyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9m IHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBm b3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRv Y3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdl LgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBj YW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJl aW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlv dSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVy ZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkg eW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcg YGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisr ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAq IFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2 YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJl IGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFu ZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcg dGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBF VlBfQ0lQSEVSICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKQorKwl7CisrCXN3aXRjaCAo bmlkKQorKwkJeworKwkJY2FzZSBOSURfYWVzXzEyOF9jYmM6CisrCQlyZXR1cm4gRVZQX2Flc18x MjhfY2JjKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NjbToKKysJCXJldHVybiBFVlBfYWVz XzEyOF9jY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfY2ZiMToKKysJCXJldHVybiBFVlBf YWVzXzEyOF9jZmIxKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoKKysJCXJldHVy biBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfY2ZiODoKKysJ CXJldHVybiBFVlBfYWVzXzEyOF9jZmI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoK KysJCXJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfZWNi OgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2VjYigpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9n Y206CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfZ2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4 X29mYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9vZmIoKTsKKysKKysJCWNhc2UgTklEX2Fl c18xMjhfeHRzOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOworKworKwkJY2FzZSBOSURf YWVzXzE5Ml9jYmM6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2JjKCk7CisrCisrCQljYXNlIE5J RF9hZXNfMTkyX2NjbToKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jY20oKTsKKysKKysJCWNhc2Ug TklEX2Flc18xOTJfY2ZiMToKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxKCk7CisrCisrCQlj YXNlIE5JRF9hZXNfMTkyX2NmYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsK KysKKysJCWNhc2UgTklEX2Flc18xOTJfY2ZiODoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmI4 KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9j dHIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfZWNiOgorKwkJcmV0dXJuIEVWUF9hZXNfMTky X2VjYigpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9nY206CisrCQlyZXR1cm4gRVZQX2Flc18x OTJfZ2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKKysJCXJldHVybiBFVlBf YWVzXzE5Ml9vZmIoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY2JjOgorKwkJcmV0dXJuIEVW UF9hZXNfMjU2X2NiYygpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jY206CisrCQlyZXR1cm4g RVZQX2Flc18yNTZfY2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2NmYjE6CisrCQlyZXR1 cm4gRVZQX2Flc18yNTZfY2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmIxMjg6Cisr CQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2Nm Yjg6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiOCgpOworKworKwkJY2FzZSBOSURfYWVzXzI1 Nl9jdHI6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7CisrCisrCQljYXNlIE5JRF9hZXNf MjU2X2VjYjoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9lY2IoKTsKKysKKysJCWNhc2UgTklEX2Fl c18yNTZfZ2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2djbSgpOworKworKwkJY2FzZSBOSURf YWVzXzI1Nl9vZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfb2ZiKCk7CisrCisrCQljYXNl IE5JRF9hZXNfMjU2X3h0czoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl94dHMoKTsKKysKKysJCWNh c2UgTklEX2Rlc19lZGVfZWNiOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlKCk7CisrCisrCQljYXNl IE5JRF9kZXNfZWRlM19lY2I6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzKCk7CisrCisrCQljYXNl IE5JRF9kZXNfZWRlM19jYmM6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NiYygpOworKworKwkJ Y2FzZSBOSURfZGVzX2VkZTNfY2ZiMToKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiMSgpOwor KworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2Nm YjY0KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19jZmI4OgorKwkJcmV0dXJuIEVWUF9kZXNf ZWRlM19jZmI4KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19vZmI2NDoKKysJCXJldHVybiBF VlBfZGVzX2VkZTNfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX2NiYzoKKysJCXJldHVy biBFVlBfZGVzX2VkZV9jYmMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVfY2ZiNjQ6CisrCQly ZXR1cm4gRVZQX2Rlc19lZGVfY2ZiNjQoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVfb2ZiNjQ6 CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfb2ZiKCk7CisrCisrCQlkZWZhdWx0OgorKwkJcmV0dXJu IE5VTEw7CisrCisrCQl9CisrCX0KKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9m aXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHMuaAorLS0tIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUu MzQyMzUyMzczICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwcy5oCTIw MTItMDctMTIgMjE6NDk6MjUuMzQyMzUyMzczICswMjAwCitAQCAtMCwwICsxLDI3OSBAQAorKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu CisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgor KworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vycm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2Vu ZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytl eHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1Y3QgZHNhX3N0OworK3N0cnVjdCByc2Ffc3Q7 Cisrc3RydWN0IGV2cF9wa2V5X3N0OworK3N0cnVjdCBlbnZfbWRfc3Q7Cisrc3RydWN0IGVudl9t ZF9jdHhfc3Q7Cisrc3RydWN0IGV2cF9jaXBoZXJfc3Q7Cisrc3RydWN0IGV2cF9jaXBoZXJfY3R4 X3N0OworK3N0cnVjdCBkaF9tZXRob2Q7Cisrc3RydWN0IENNQUNfQ1RYX3N0OworK3N0cnVjdCBo bWFjX2N0eF9zdDsKKysKKytpbnQgRklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2ZmLCBjb25z dCBjaGFyICphdXRoKTsKKytpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKTsKKytjb25zdCB2b2lk ICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Qodm9pZCk7CisraW50 IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3NoYTEodm9p ZCk7CisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9z aGEyKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lkKTsKKytpbnQgRklQU19zZWxm dGVzdF9hZXNfY2NtKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9pZCk7Cisr aW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXMo dm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0 X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2Nv cnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Cisr dm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXln ZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3Jy dXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpOworK3ZvaWQgRklQU194 OTMxX3N0aWNrKGludCBvbm9mZik7Cisrdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKTsK KytpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfeDkzMSh2 b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9obWFjKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0 X2RyYmcodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCk7CisraW50IEZJ UFNfc2VsZnRlc3RfY21hYyh2b2lkKTsKKysKKyt2b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWdu ZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3RyKTsKKysKKysjZGVmaW5lIEZJUFNfRVJS T1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCisrCQlhbGcg IiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdvcml0aG0gZXJyb3IgaWdub3JlZCIpOworKwor K2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5X3N0ICpwa2V5LAor KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJY29uc3Qgc3RydWN0IGVu dl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCisrCQkJY29uc3QgY2hhciAq ZmFpbF9zdHIpOworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0 eF9zdCAqY3R4LAorKwkJCWNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAor KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBj aGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pOworKworK3ZvaWQgZmlwc19zZXRfc2VsZnRl c3RfZmFpbCh2b2lkKTsKKysKKytjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdl c3RieW5pZChpbnQgbmlkKTsKKysKKytjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19n ZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7CisrCisrCisrLyogQkVHSU4gRVJST1IgQ09ERVMgKi8K KysvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0 IG1rZXJyLnBsLiBBbnkgY2hhbmdlcworKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUg b3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgorKyAqLworK3ZvaWQgRVJS X2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOworKworKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQ UyBmdW5jdGlvbnMuICovCisrCisrLyogRnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBGSVBT X0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJCQkgMTAwCisrI2RlZmluZSBGSVBTX0ZfREhfSU5JVAkJ CQkJIDE0OAorKyNkZWZpbmUgRklQU19GX0RSQkdfUkVTRUVECQkJCSAxNjIKKysjZGVmaW5lIEZJ UFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMDEKKysjZGVmaW5lIEZJUFNfRl9EU0FfQlVJ TFRJTl9QQVJBTUdFTjIJCQkgMTA3CisrI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEw MgorKyNkZWZpbmUgRklQU19GX0RTQV9ET19WRVJJRlkJCQkJIDEwMworKyNkZWZpbmUgRklQU19G X0VDREhfQ09NUFVURV9LRVkJCQkJIDE2MworKyNkZWZpbmUgRklQU19GX0VDRFNBX0RPX1NJR04J CQkJIDE2NAorKyNkZWZpbmUgRklQU19GX0VDRFNBX0RPX1ZFUklGWQkJCQkgMTY1CisrI2RlZmlu ZSBGSVBTX0ZfRUNfS0VZX0dFTkVSQVRFX0tFWQkJCSAxNjYKKysjZGVmaW5lIEZJUFNfRl9FVlBf Q0lQSEVSSU5JVF9FWAkJCSAxMjQKKysjZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWAkJ CSAxMjUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQQkJCQkgMTA0CisrI2RlZmluZSBG SVBTX0ZfRklQU19DSEVDS19EU0FfUFJORwkJCSAxNTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX0VDCQkJCSAxNDIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDX1BSTkcJCQkgMTUy CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJCSAxMDUKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkgMTA2CisrI2RlZmluZSBGSVBTX0ZfRklQ U19DSEVDS19SU0FfUFJORwkJCSAxNTAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUgkJCQkg MTYwCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJJTklUCQkJCSAxNDMKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX0NJUEhFUl9DVFhfQ1RSTAkJCSAxNjEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RJ R0VTVEZJTkFMCQkJCSAxNTgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVElOSVQJCQkJIDEy OAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUVVBEQVRFCQkJIDE1OQorKyNkZWZpbmUgRklQ U19GX0ZJUFNfRFJCR19CWVRFUwkJCQkgMTMxCisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NI RUNLCQkJCSAxNDYKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVAkJCSAxMzIK KysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0sJCQkgMTM2CisrI2RlZmluZSBG SVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFCQkJIDEzNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJC R19JTklUCQkJCSAxMzUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUJCQkg MTM4CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX05FVwkJCQkgMTM5CisrI2RlZmluZSBGSVBT X0ZfRklQU19EUkJHX1JFU0VFRAkJCQkgMTQwCisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJ TkdMRV9LQVQJCQkgMTQxCisrI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sJCS8qIHVudXNl ZCAqLwkgMTA3CisrI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfU0lHTl9ESUdFU1QJCQkgMTU0Cisr I2RlZmluZSBGSVBTX0ZfRklQU19EU0FfVkVSSUZZX0RJR0VTVAkJCSAxNTUKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX0dFVF9FTlRST1BZCQkJCSAxNDcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX01PREVf U0VUCQkvKiB1bnVzZWQgKi8JIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9EVUxFX01PREVf U0VUCQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAx MDkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQURECQkJCSAxMzcKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1JBTkRfQllURVMJCQkJIDEyMgorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9QU0VV RE9fQllURVMJCQkgMTY3CisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFRUQJCQkJIDE2OAor KyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRVRfTUVUSE9ECQkJIDEyNgorKyNkZWZpbmUgRklQ U19GX0ZJUFNfUkFORF9TVEFUVVMJCQkJIDEyNworKyNkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1NJ R05fRElHRVNUCQkJIDE1NgorKyNkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1ZFUklGWV9ESUdFU1QJ CQkgMTU3CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMJCQkgMTEwCisrI2RlZmlu ZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNCQkJIDE0NQorKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfQUVTX0dDTQkJCSAxMjkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNU X0FFU19YVFMJCQkgMTQ0CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9DTUFDCQkJIDEz MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQorKyNkZWZpbmUgRklQ U19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfRUNEU0EJCQkgMTMzCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDCQkJIDEx MworKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HCS8qIHVudXNlZCAqLwkgMTE0Cisr I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExCQkJIDExNQorKyNkZWZpbmUgRklQU19G X0ZJUFNfU0VMRlRFU1RfWDkzMQkJCSAxMTQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFVF9QUk5H X0tFWQkJCSAxNTMKKysjZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMKKysjZGVmaW5l IEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTE2CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VB WV9JTklUCQkJCSAxNDkKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVAkJ CSAxMTcKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAxMTgKKysj ZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJIDExOQorKyNkZWZpbmUgRklQ U19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkgMTIwCisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5 MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEyMQorKyNkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZ VEVTCS8qIHVudXNlZCAqLwkgMTIyCisrCisrLyogUmVhc29uIGNvZGVzLiAqLworKyNkZWZpbmUg RklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRAkgMTUwCisrI2RlZmluZSBG SVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORwkJIDEyNQorKyNkZWZpbmUgRklQU19SX0FM UkVBRFlfSU5TVEFOVElBVEVECQkJIDEzNAorKyNkZWZpbmUgRklQU19SX0FVVEhFTlRJQ0FUSU9O X0ZBSUxVUkUJCQkgMTUxCisrI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFCQkvKiB1bnVz ZWQgKi8JIDEwMworKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QJLyogdW51 c2VkICovCSAxMDQKKysjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDEx NAorKyNkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VECQkJIDE1MgorKyNkZWZpbmUg RklQU19SX0RSQkdfU1RVQ0sJCQkJIDEwMworKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfRVJST1Jf VU5ERVRFQ1RFRAkJCSAxMDQKKysjZGVmaW5lIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURf Rk9SX1JFU0VFRAkJIDEwNQorKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLCQkJ IDE0MgorKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDExNQorKyNk ZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMjcKKysjZGVmaW5lIEZJ UFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxfSU5QVVQJIDEyNAorKyNkZWZpbmUgRklQ U19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWQkJCSAxMjIKKysjZGVmaW5lIEZJUFNfUl9FUlJP Ul9SRVRSSUVWSU5HX05PTkNFCQkJIDE0MAorKyNkZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9F U19OT1RfTUFUQ0ggICAvKiB1bnVzZWQgKi8JIDEwNQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBS SU5UX0RPRVNfTk9UX01BVENICQkgMTEwCisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9F U19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQ UklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDExMgorKyNkZWZpbmUgRklQU19S X0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKKysjZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZU RVNUX0ZBSUxFRAkJCSAxMDYKKysjZGVmaW5lIEZJUFNfUl9GVU5DVElPTl9FUlJPUgkJCQkgMTE2 CisrI2RlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJST1IJCQkJIDEzNworKyNkZWZpbmUgRklQU19S X0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQJCSAxMTgKKysjZGVmaW5lIEZJUFNfUl9JTlNUQU5U SUFURV9FUlJPUgkJCSAxMTkKKysjZGVmaW5lIEZJUFNfUl9JTlNVRkZJQ0lFTlRfU0VDVVJJVFlf U1RSRU5HVEgJCSAxMjAKKysjZGVmaW5lIEZJUFNfUl9JTlRFUk5BTF9FUlJPUgkJCQkgMTIxCisr I2RlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RICQkJIDEwOQorKyNkZWZpbmUgRklQU19S X0lOVkFMSURfUEFSQU1FVEVSUwkJCSAxNDQKKysjZGVmaW5lIEZJUFNfUl9JTl9FUlJPUl9TVEFU RQkJCQkgMTIzCisrI2RlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJCQkgMTA4CisrI2RlZmlu ZSBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRAkJCSAxNDkKKysjZGVmaW5lIEZJUFNfUl9O T05fRklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDFfRkFJTFVS RQkJCSAxNDUKKysjZGVmaW5lIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUJCQkgMTQ2CisrI2Rl ZmluZSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRAkJCQkgMTI2CisrI2RlZmluZSBGSVBTX1JfUEFJ UldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3CisrI2RlZmluZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9O X0VSUk9SX1VOREVURUNURUQJCSAxMjgKKysjZGVmaW5lIEZJUFNfUl9QRVJTT05BTElTQVRJT05f U1RSSU5HX1RPT19MT05HCQkgMTI5CisrI2RlZmluZSBGSVBTX1JfUFJOR19TVFJFTkdUSF9UT09f TE9XCQkJIDE0MworKyNkZWZpbmUgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUJCQkJIDE0NworKyNk ZWZpbmUgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUJCQkJIDE0OAorKyNkZWZpbmUgRklQU19SX1JF UVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQJCSAxMzAKKysjZGVmaW5lIEZJUFNfUl9SRVFV RVNUX1RPT19MQVJHRV9GT1JfRFJCRwkJIDEzMQorKyNkZWZpbmUgRklQU19SX1JFU0VFRF9DT1VO VEVSX0VSUk9SCQkJIDEzMgorKyNkZWZpbmUgRklQU19SX1JFU0VFRF9FUlJPUgkJCQkgMTMzCisr I2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IJLyogdW51c2VkICovCSAxMTUKKysjZGVm aW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNgorKyNkZWZpbmUg RklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCisrI2RlZmluZSBGSVBTX1JfU0VMRlRFU1Rf RkFJTFVSRQkJCQkgMTM1CisrI2RlZmluZSBGSVBTX1JfU1RSRU5HVEhfRVJST1JfVU5ERVRFQ1RF RAkJIDEzNgorKyNkZWZpbmUgRklQU19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3CisrI2RlZmluZSBG SVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUgkJCSAxNDEKKysjZGVmaW5lIEZJUFNfUl9VTklOU1RB TlRJQVRFX1pFUk9JU0VfRVJST1IJCSAxMzgKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9E UkJHX1RZUEUJCQkgMTM5CisrI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0JCQkg MTEzCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIwMTItMDct MTIgMjE6NDk6MjUuMzQyMzUyMzczICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Zp cHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDIzNTIzNzMgKzAy MDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUg PG9wZW5zc2wvaG1hYy5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt0eXBlZGVmIHN0cnVj dCB7CisrCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOworKwljb25zdCBjaGFyICprZXksICpp djsKKysJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOworK30gSE1BQ19LQVQ7 CisrCisrc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0geworKyAgICB7CUVWUF9zaGEx LAorKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMx OTgvZmlwcy0xOThhLnBkZiAqLworKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxl ICMyIiwKKysJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4MTksCisrCSAg MHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAorKwkgIDB4YzYsMHhjNyww eDVkLDB4MjQgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEyMjQsCisrCS8qIGp1c3Qga2VlcCBl eHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJT YW1wbGUgIzIiLAorKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4NTAsMHhmYiwK KysJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCisrCSAgMHgwOCww eGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAorKwkgIDB4OGMsMHg4ZCwweDEyLDB4 YzcgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEyNTYsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFC QyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0MSwweGVhLDB4 NDMsMHgwOSwKKysJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4LDB4MzQsCisr CSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAorKwkgIDB4MGQsMHhj MSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9CisrICAgIH0sCisrICAgIHsJRVZQX3No YTM4NCwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHgw OCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAorKwkgIDB4OWEsMHgxZCwweDZh LDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKKysJICAweGI3LDB4MTgsMHgwNiwweGE1LDB4Nzcs MHhjZCwweDQ5LDB4MDQsCisrCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4NTEsMHg1MSww eDlmLAorKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1MCwKKysJICAw eGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQorKyAgICB9LAorKyAgICB7 CUVWUF9zaGE1MTIsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAor Kwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKKysJICAweDA1LDB4 YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCisrCSAgMHg0NCwweGQ1LDB4YTQsMHhk NSwweGQwLDB4ODksMHgyYiwweGQwLAorKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIsMHhjMCwweDkw LDB4NzcsMHg2OCwKKysJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSwweDJjLDB4MmYs CisrCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAorKwkgIDB4NDcs MHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKKysJICAweGJkLDB4NGYsMHgyNSww eDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQorKyAgICB9LAorK307CisrCisraW50IEZJUFNfc2Vs ZnRlc3RfaG1hYygpCisrICAgIHsKKysgICAgaW50IG47CisrICAgIHVuc2lnbmVkIGludCAgICBv dXRsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAg Y29uc3QgRVZQX01EICAgKm1kOworKyAgICBjb25zdCBITUFDX0tBVCAqdDsKKysKKysgICAgZm9y KG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBdKTsgbisrLHQr KykKKysJeworKwltZCA9ICgqdC0+YWxnKSgpOworKwlITUFDKG1kLHQtPmtleSxzdHJsZW4odC0+ a2V5KSwKKysJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQtPml2KSwKKysJ CW91dCwmb3V0bGVuKTsKKysKKysJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRsZW4pKQorKwkg ICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCX0KKysgICAgcmV0dXJu IDE7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBz L2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgK Ky0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzCTIwMTItMDct MTIgMjE6NDk6MjUuMzQzMzUyMzk1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Zp cHMvZmlwc19sb2NsLmgJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDMzNTIzOTUgKzAyMDAKK0BAIC0w LDAgKzEsNzEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgor KworKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkzMgorKyNkZWZpbmUgZmlwc19s b2FkX2tleV9jb21wb25lbnQoa2V5LCBjb21wLCBwcmUpIFwKKysJa2V5LT5jb21wID0gQk5fYmlu MmJuKHByZSMjXyMjY29tcCwgc2l6ZW9mKHByZSMjXyMjY29tcCksIGtleS0+Y29tcCk7IFwKKysJ aWYgKCFrZXktPmNvbXApIFwKKysJCWdvdG8gZXJyCisrCisrI2RlZmluZSBmaXBzX3Bvc3Rfc3Rh cnRlZChpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3Rfc3VjY2VzcyhpZCwgc3Vi aWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwgZXgpIDEKKysj ZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJpZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNf cG9zdF9zdGF0dXMoKSAxCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBz IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfbWQuYworLS0tIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQzMzUyMzk1 ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19tZC5jCTIwMTItMDct MTIgMjE6NDk6MjUuMzQzMzUyMzk1ICswMjAwCitAQCAtMCwwICsxLDE0NSBAQAorKy8qIGZpcHMv ZXZwL2ZpcHNfbWQuYyAqLworKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcg KGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBU aGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmlj IFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3 cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRo aXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2Ug YXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4g IFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGlu IHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywg ZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9u CisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBz YW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVy aWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhl IGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2Vk IGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysg KiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRo aXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3Rh cnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRl ZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysg KiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkK KysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3Jk ICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUg bGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQg Oi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9y IGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAo YXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0gg REFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9y IGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0 aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5 IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5j ZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRp b24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChl YXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKwor Ky8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZlcnNpb25zIG9mIERpZ2VzdCBvcGVyYXRpb25z ICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBFVlBfTUQgKkZJUFNfZ2V0X2RpZ2VzdGJ5 bmlkKGludCBuaWQpCisrCXsKKysJc3dpdGNoIChuaWQpCisrCQl7CisrCQljYXNlIE5JRF9zaGEx OgorKwkJcmV0dXJuIEVWUF9zaGExKCk7CisrCisrCQljYXNlIE5JRF9zaGEyMjQ6CisrCQlyZXR1 cm4gRVZQX3NoYTIyNCgpOworKworKwkJY2FzZSBOSURfc2hhMjU2OgorKwkJcmV0dXJuIEVWUF9z aGEyNTYoKTsKKysKKysJCWNhc2UgTklEX3NoYTM4NDoKKysJCXJldHVybiBFVlBfc2hhMzg0KCk7 CisrCisrCQljYXNlIE5JRF9zaGE1MTI6CisrCQlyZXR1cm4gRVZQX3NoYTUxMigpOworKworKwkJ ZGVmYXVsdDoKKysJCXJldHVybiBOVUxMOworKwkJfQorKwl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9m aXBzL2ZpcHNfcG9zdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19wb3N0 LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MzM1MjM5NSArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQzMzUy Mzk1ICswMjAwCitAQCAtMCwwICsxLDIwNSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLwor KworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jp by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPGxpbWl0cy5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBQb3dlciBv biBzZWxmIHRlc3QgKFBPU1QpIHN1cHBvcnQgZnVuY3Rpb25zICovCisrCisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysvKiBSdW4gYWxsIHNl bGZ0ZXN0cyAqLworK2ludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpCisrCXsKKysJaW50IHJ2ID0gMTsK KysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3Nl bGZ0ZXN0X3g5MzEoKSkKKysJCXJ2ID0gMDsKKysgICAgCWlmICghRklQU19zZWxmdGVzdF9zaGEx KCkpCisrCQlydiA9IDA7CisrICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMigpKQorKwkJcnYg PSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfaG1hYygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJ UFNfc2VsZnRlc3RfY21hYygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVz KCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9hZXNfY2NtKCkpCisrCQlydiA9 IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9hZXNfZ2NtKCkpCisrCQlydiA9IDA7CisrCWlmICgh RklQU19zZWxmdGVzdF9hZXNfeHRzKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVz dF9kZXMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgpKQorKwkJcnYg PSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfZHNhKCkpCisrCQlydiA9IDA7CisrCXJldHVybiBy djsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBTaWdu cyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKKysgKiBzdXBwbGllZCBpbiB0YnMgdXNpbmcgbWVzYWdl IGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0CisrICogZmxhZ3MgbWRfZmxhZ3Mu IElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAorKyAqIGFkZGl0aW9u YWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5zd2VyIHRlc3QK KysgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmljYXRpb24gcHVy cG9zZXMgaW4gY2FzZQorKyAqIG9mIGZhaWx1cmUuIElmICJwa2V5IiBpcyBOVUxMIGp1c3QgcGVy Zm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgorKyAqLworKworK2ludCBmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJz LCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50 IGthdGxlbiwKKysJCQljb25zdCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdz LAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQorKwl7CQorKwlpbnQgcmV0ID0gMDsKKysJdW5z aWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKKysJdW5zaWduZWQgaW50IHNp Z2xlbjsKKysJRVZQX01EX0NUWCBtY3R4OworKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKwor KwlpZiAoZGlnZXN0ID09IE5VTEwpCisrCQlkaWdlc3QgPSBFVlBfc2hhMjU2KCk7CisrCisrCWlm ICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCisrCQkmJiAoUlNBX3NpemUocGtleS0+cGtl eS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKQorKwkJeworKwkJc2lnID0gT1BFTlNTTF9tYWxsb2Mo UlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKKysJCWlmICghc2lnKQorKwkJCXsKKysJCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUp OworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysKKysJaWYgKHRic2xlbiA9PSAtMSkKKysJ CXRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7CisrCisrCWlmIChtZF9mbGFncykKKysJCUVW UF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFncyk7CisrCisrCWlmICghRVZQX1NpZ25J bml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBf U2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFF VlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4sIHBrZXkpKQorKwkJZ290byBlcnJvcjsK KysKKysJaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywg a2F0bGVuKSkpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZt Y3R4LCBkaWdlc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfVmVyaWZ5VXBk YXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisrCQlnb3RvIGVycm9yOworKwlyZXQgPSBFVlBfVmVy aWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5KTsKKysKKysJZXJyb3I6CisrCWlmIChz aWcgIT0gc2lndG1wKQorKwkJT1BFTlNTTF9mcmVlKHNpZyk7CisrCUVWUF9NRF9DVFhfY2xlYW51 cCgmbWN0eCk7CisrCWlmIChyZXQgIT0gMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf UEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9GQUlMVVJFKTsKKysJCWlmIChmYWlsX3N0 cikKKysJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrLyogR2VuZXJhbGl6ZWQgc3ltbWV0 cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAorKyAq IGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwg cGxhaW50ZXh0LgorKyAqLworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RY ICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFy ICprZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqcGxhaW50ZXh0LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCisr CQkJaW50IGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9U RVNUX1NJWkVdOworKwl1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJ WkVdOworKworKwlPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0la RSk7CisrCW1lbXNldChwbHRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrCW1l bXNldChjaXRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrCisrCWlmIChFVlBf Q2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkKKysJCXJl dHVybiAwOworKwlpZiAoRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbikgPD0g MCkKKysJCXJldHVybiAwOworKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQor KwkJcmV0dXJuIDA7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwg a2V5LCBpdiwgMCkgPD0gMCkKKysJCXJldHVybiAwOworKwlpZiAoRVZQX0NpcGhlcihjdHgsIHBs dG1wLCBjaXRtcCwgbGVuKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCWlmIChtZW1jbXAocGx0bXAs IHBsYWludGV4dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlyZXR1cm4gMTsKKysJfQorKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDMzNTIz OTUgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwkyMDEy LTA3LTEyIDIxOjQ5OjI1LjM0MzM1MjM5NSArMDIwMAorQEAgLTAsMCArMSw0NTcgQEAKKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg 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 SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKgorKyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVk IEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCisrICovCisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBJZiB3ZSBkb24ndCBk ZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKKysgICBi ZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmlj dCBjb21waWxlcnMKKysgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KKysjaWZuZGVm IF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKysjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQg MQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KKysjaWYgIShkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZp bmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpKQorKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjZW5k aWYKKysjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQorKyMgaW5jbHVkZSA8dGltZS5o PgorKyNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJ TjMyCisrIyBpZmRlZiBPUEVOU1NMX1VOSVNURAorKyMgIGluY2x1ZGUgT1BFTlNTTF9VTklTVEQK KysjIGVsc2UKKysjICBpbmNsdWRlIDx1bmlzdGQuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAi Zmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3ZvaWQgKk9QRU5TU0xf c3RkZXJyKHZvaWQpOworKworKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSAkxNgorKworKworKy8q IEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJ eworKwlpbnQgc2VlZGVkOworKwlpbnQga2V5ZWQ7CisrCWludCB0ZXN0X21vZGU7CisrCWludCBz ZWNvbmQ7CisrCWludCBlcnJvcjsKKysJdW5zaWduZWQgbG9uZyBjb3VudGVyOworKwlBRVNfS0VZ IGtzOworKwlpbnQgdnBvczsKKysJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBl cXVhbHMgc2VlZCBsZW5ndGggKi8KKysJdW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19M RU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVk IGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxP Q0tfTEVOR1RIXTsKKysJfSBGSVBTX1BSTkdfQ1RYOworKworK3N0YXRpYyBGSVBTX1BSTkdfQ1RY IHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBT X3g5MzFfc3RpY2soaW50IG9ub2ZmKQorKwl7CisrCWZpcHNfcHJuZ19mYWlsID0gb25vZmY7Cisr CX0KKysKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCisrCXsKKysJRklQU194OTMxX3N0aWNr KDEpOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQU19QUk5H X0NUWCAqY3R4KQorKwl7CisrCWN0eC0+c2VlZGVkID0gMDsKKysJY3R4LT5rZXllZCA9IDA7Cisr CWN0eC0+dGVzdF9tb2RlID0gMDsKKysJY3R4LT5jb3VudGVyID0gMDsKKysJY3R4LT5zZWNvbmQg PSAwOworKwljdHgtPmVycm9yID0gMDsKKysJY3R4LT52cG9zID0gMDsKKysJT1BFTlNTTF9jbGVh bnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmY3R4LT5r cywgc2l6ZW9mKEFFU19LRVkpKTsKKysJfQorKwkKKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3By bmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXks IHVuc2lnbmVkIGludCBrZXlsZW4pCisrCXsKKysJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWSwgRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGtleWxlbiAhPSAxNiAmJiBr ZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQorKwkJeworKwkJLyogZXJyb3I6IGludmFsaWQg a2V5IHNpemUgKi8KKysJCXJldHVybiAwOworKwkJfQorKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtl eSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKKysJaWYgKGtleWxlbiA9PSAxNikKKysJCXsKKysJ CW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOworKwkJY3R4LT5rZXllZCA9IDI7CisrCQl9 CisrCWVsc2UKKysJCWN0eC0+a2V5ZWQgPSAxOworKwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+ c2Vjb25kID0gMDsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3By bmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2Vl ZCwgdW5zaWduZWQgaW50IHNlZWRsZW4pCisrCXsKKysJdW5zaWduZWQgaW50IGk7CisrCWlmICgh Y3R4LT5rZXllZCkKKysJCXJldHVybiAwOworKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0 IHN1cHBsaWVkIGRhdGEgKi8KKysJaWYgKGN0eC0+dGVzdF9tb2RlKQorKwkJeworKwkJaWYgKHNl ZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQlyZXR1cm4gMDsKKysJCW1lbWNweShjdHgt PlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOworKwkJY3R4LT5zZWVkZWQgPSAxOworKwkJcmV0 dXJuIDE7CisrCQl9CisrCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBkYXRhIHdp dGggZXhpc3Rpbmcgc2VlZCAqLworKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsrKQorKwkJ eworKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOworKwkJaWYgKGN0eC0+dnBvcyA9 PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQljdHgtPnZwb3MgPSAwOworKwkJCS8qIFNw ZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscworKyAJCQkgKiBi bG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCisrIAkJCSAqLyAKKysJ CQlpZiAoY3R4LT5rZXllZCA9PSAyKQorKwkJCQl7CisrCQkJCWlmICghbWVtY21wKGN0eC0+dG1w X2tleSwgY3R4LT5WLCAxNikpCisrCQkJCQl7CisrCQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NF VF9QUk5HX1NFRUQsCisrCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkp OworKwkJCQkJcmV0dXJuIDA7CisrCQkJCQl9CisrCQkJCU9QRU5TU0xfY2xlYW5zZShjdHgtPnRt cF9rZXksIDE2KTsKKysJCQkJY3R4LT5rZXllZCA9IDE7CisrCQkJCX0KKysJCQljdHgtPnNlZWRl ZCA9IDE7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlw c19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKKysJeworKwlpZiAoY3R4LT5rZXll ZCkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5EX1JfUFJO R19LRVlFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJY3R4LT50ZXN0X21vZGUgPSAxOworKwly ZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpCisrCXsKKysJ cmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7CisrCX0KKysKKytpbnQgRklQU19yYW5k X3Rlc3RfbW9kZSh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgp OworKwl9CisrCisrCisraW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisr CXsKKysJaWYgKCFzY3R4LnRlc3RfbW9kZSkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNf WDkzMV9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9 CisrCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCXJldHVybiAxOwor Kwl9CisrCisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisrCXsKKysJ aWYgKCFzY3R4LnRlc3RfbW9kZSkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORF9T RVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCW1l bWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCXJldHVybiAxOworKwl9Cisr Cisrdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9u ZyAqcGN0cikKKysJeworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlGSUxFVElNRSBmdDsK KysjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrICAgICAgICBzdHJ1Y3QgdGlt ZXNwZWMgdHM7CisrI2Vsc2UKKysJc3RydWN0IHRpbWV2YWwgdHY7CisrI2VuZGlmCisrCisrI2lm bmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJdW5zaWduZWQgbG9uZyBwaWQ7CisrI2VuZGlm CisrCisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1l KCZmdCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAw eGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4g OCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRp bWUgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGln aERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKGZ0 LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQu ZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikg KChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQg Y2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKyNlbGlmIGRlZmluZWQo T1BFTlNTTF9TWVNfVlhXT1JLUykKKysJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRz KTsKKysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9zZWMgJiAweGZmKTsKKysJYnVm WzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDgpICYgMHhmZik7CisrCWJ1Zlsy XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzNd ID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0g PSAodW5zaWduZWQgY2hhcikgKHRzLnR2X25zZWMgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2ln bmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWdu ZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWdu ZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDI0KSAmIDB4ZmYpOworKyNlbHNlCisrCWdldHRpbWVv ZmRheSgmdHYsTlVMTCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfc2VjICYg MHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAmIDB4 ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYpICYgMHhm Zik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAweGZm KTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhmZik7CisrCWJ1 Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKKysJYnVm WzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKKysJYnVm WzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsKKysjZW5k aWYKKysJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpICgqcGN0ciAmIDB4ZmYpOworKwlidWZbOV0g PSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiA4KSAmIDB4ZmYpOworKwlidWZbMTBdID0gKHVu c2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlsxMV0gPSAodW5zaWdu ZWQgY2hhcikgKCgqcGN0ciA+PiAyNCkgJiAweGZmKTsKKysKKysJKCpwY3RyKSsrOworKworKwor KyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisrCXBpZD0odW5zaWduZWQgbG9uZylnZXRw aWQoKTsKKysJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7CisrCWJ1Zlsx M10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKKysJYnVmWzE0XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZmKTsKKysJYnVmWzE1XSA9ICh1bnNpZ25l ZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysgICAgfQorKworK3N0YXRp YyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQl1bnNpZ25lZCBjaGFyICpv dXQsIHVuc2lnbmVkIGludCBvdXRsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciBSW0FFU19CTE9D S19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIHRtcFtBRVNf QkxPQ0tfTEVOR1RIXTsKKysJaW50IGk7CisrCWlmIChjdHgtPmVycm9yKQorKwkJeworKwkJUkFO RGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VSUk9SKTsKKysJCXJldHVybiAwOwor KwkJfQorKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JB TkQsUkFORF9SX05PX0tFWV9TRVQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghY3R4LT5z ZWVkZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfTk9U X1NFRURFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZm9yICg7OykKKysJCXsKKysJCWlmICgh Y3R4LT50ZXN0X21vZGUpCisrCQkJRklQU19nZXRfdGltZXZlYyhjdHgtPkRULCAmY3R4LT5jb3Vu dGVyKTsKKysJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKKysJCWZvciAoaSA9 IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+ VltpXTsKKysJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOworKwkJZm9yIChpID0gMDsg aSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKKysJCQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysJ CUFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7CisrCQkvKiBDb250aW51b3VzIFBS TkcgdGVzdCAqLworKwkJaWYgKGN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQlpZiAoZmlwc19wcm5n X2ZhaWwpCisrCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJ CWlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCisrCQkJCXsKKysJ ICAgIAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7CisrCQkJ CWN0eC0+ZXJyb3IgPSAxOworKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQkJCXJl dHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NL X0xFTkdUSCk7CisrCQlpZiAoIWN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQljdHgtPnNlY29uZCA9 IDE7CisrCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysJCQkJY29udGludWU7CisrCQkJfQorKwor KwkJaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQltZW1jcHkob3V0 LCBSLCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysKKysJCW1lbWNweShvdXQsIFIsIEFF U19CTE9DS19MRU5HVEgpOworKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7CisrCQlvdXRsZW4g LT0gQUVTX0JMT0NLX0xFTkdUSDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysKKytpbnQg RklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQor Kwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJl dCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7CisrCUNSWVBUT193X3Vu bG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBT X3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qg a2V5bGVuKQorKwl7CisrCXJldHVybiBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Cisr CX0KKysKKytpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4p CisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJ cmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKKysJQ1JZUFRP X3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrCisr aW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKKysJewor KwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBm aXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xP Q0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU194OTMxX3N0YXR1cyh2 b2lkKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 CisrCXJldCA9IHNjdHguc2VlZGVkOworKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKyt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKQor Kwl7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWZpcHNfcmFuZF9wcm5n X3Jlc2V0KCZzY3R4KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9 CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQg c2VlZGxlbikKKysJeworKwlGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKKysJcmV0dXJu IDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2Vl ZCwgaW50IHNlZWRsZW4sCisrCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCisrCXsKKysJRklQU194 OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGNv bnN0IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRoPQorKyAgICB7CisrICAgIGZpcHNfZG9fcmFu ZF9zZWVkLAorKyAgICBGSVBTX3g5MzFfYnl0ZXMsCisrICAgIEZJUFNfeDkzMV9yZXNldCwKKysg ICAgZmlwc19kb19yYW5kX2FkZCwKKysgICAgRklQU194OTMxX2J5dGVzLAorKyAgICBGSVBTX3g5 MzFfc3RhdHVzCisrICAgIH07CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRo b2Qodm9pZCkKKyt7CisrICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOworK30KKysKKysjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQzMzUyMzk1 ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAxMi0w Ny0xMiAyMTo0OToyNS4zNDMzNTIzOTUgKzAyMDAKK0BAIC0wLDAgKzEsMTQ1IEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gKKysjZGVm aW5lIEhFQURFUl9GSVBTX1JBTkRfSAorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRl ZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytpbnQgRklQU194OTMx X3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKTsKKytpbnQgRklQ U194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKKytpbnQgRklQU194OTMxX2J5 dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG91dGxlbik7CisrCisraW50IEZJUFNfeDkzMV90 ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCk7CisraW50IEZJUFNf eDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOworKworK2ludCBGSVBTX3g5MzFfc3RhdHVz KHZvaWQpOworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpOwor KworK3R5cGVkZWYgc3RydWN0IGRyYmdfY3R4X3N0IERSQkdfQ1RYOworKy8qIERSQkcgZXh0ZXJu YWwgZmxhZ3MgKi8KKysvKiBGbGFnIGZvciBDVFIgbW9kZSBvbmx5OiB1c2UgZGVyaXZhdGlvbiBm dW5jdGlvbiBjdHJfZGYgKi8KKysjZGVmaW5lCURSQkdfRkxBR19DVFJfVVNFX0RGCQkweDEKKysv KiBQUk5HIGlzIGluIHRlc3Qgc3RhdGUgKi8KKysjZGVmaW5lCURSQkdfRkxBR19URVNUCQkJMHgy CisrCisrRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFn cyk7CisraW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWdu ZWQgaW50IGZsYWdzKTsKKytpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4 LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7CisraW50 IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFk aW4sIHNpemVfdCBhZGlubGVuKTsKKytpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpk Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJaW50IHByZWRpY3Rp b25fcmVzaXN0YW5jZSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbik7CisrCisraW50IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KTsK Kyt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KTsKKysKKytpbnQgRklQU19kcmJn X3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrCXNpemVfdCAoKmdldF9lbnRyb3B5KShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNp emVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkp KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlzaXpl X3QgZW50cm9weV9ibG9ja2xlbiwKKysJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVu LCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSk7CisrCisraW50IEZJUFNfZHJiZ19z ZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrCXNpemVfdCAoKmdldF9hZGluKShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCisrCXZvaWQgKCpjbGVhbnVwX2Fk aW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlp bnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51 bSksCisrCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB2b2lk ICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSk7CisrCisrdm9pZCAqRklQU19kcmJnX2dl dF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKKyt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEo RFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2RhdGEpOworK3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Js b2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKKytpbnQgRklQU19kcmJnX2dldF9zdHJlbmd0aChE UkJHX0NUWCAqZGN0eCk7Cisrdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdf Q1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOworK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50 ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7CisrCisraW50IEZJUFNfZHJiZ19o ZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgpOworKworK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZh dWx0X2RyYmcodm9pZCk7CisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9p ZCk7CisrCisrCisraW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICpt ZXRoKTsKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCk7Cisr Cisrdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKTsKKysKKytpbnQgRklQU19yYW5k X3N0cmVuZ3RoKHZvaWQpOworKworKy8qIDEuMC4wIGNvbXBhdCBmdW5jdGlvbnMgKi8KKytpbnQg RklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0la RV9UIGtleWxlbik7CisraW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19S QU5EX1NJWkVfVCBudW0pOworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0 LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7CisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9p ZCk7Cisrdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7CisraW50IEZJUFNfcmFuZF9zZXRfZHQo dW5zaWduZWQgY2hhciAqZHQpOworK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOworK2NvbnN0 IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpOworKworKyNpZmRlZiAgX19jcGx1 c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9m aXBzX3JhbmRfbGNsLmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NDM1MjQxOCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAkyMDEyLTA3LTEy IDIxOjQ5OjI1LjM0NDM1MjQxOCArMDIwMAorQEAgLTAsMCArMSwyMTkgQEAKKysvKiBmaXBzL3Jh bmQvZmlwc19yYW5kX2xjbC5oICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8K KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKyt0eXBlZGVmIHN0cnVjdCBk cmJnX2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7CisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19obWFj X2N0eF9zdCBEUkJHX0hNQUNfQ1RYOworK3R5cGVkZWYgc3RydWN0IGRyYmdfY3RyX2N0eF9zdCBE UkJHX0NUUl9DVFg7CisrCisrLyogODg4IGJpdHMgZnJvbSAxMC4xIHRhYmxlIDIgKi8KKysjZGVm aW5lIEhBU0hfUFJOR19NQVhfU0VFRExFTgkxMTEKKysKKytzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9z dAorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQ7CisrCUVWUF9NRF9DVFggbWN0eDsKKysJdW5zaWdu ZWQgY2hhciBWW0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrCXVuc2lnbmVkIGNoYXIgQ1tIQVNI X1BSTkdfTUFYX1NFRURMRU5dOworKwkvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFnZTogc2hvdWxk IGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5ndGggKi8KKysJdW5zaWduZWQgY2hhciB2dG1w W0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrCX07CisrCisrc3RydWN0IGRyYmdfaG1hY19jdHhf c3QKKysJeworKwljb25zdCBFVlBfTUQgKm1kOworKwlITUFDX0NUWCBoY3R4OworKwl1bnNpZ25l ZCBjaGFyIEtbRVZQX01BWF9NRF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBWW0VWUF9NQVhfTURf U0laRV07CisrCX07CisrCisrc3RydWN0IGRyYmdfY3RyX2N0eF9zdAorKwl7CisrCUFFU19LRVkg a3M7CisrCXNpemVfdCBrZXlsZW47CisrCXVuc2lnbmVkIGNoYXIgS1szMl07CisrCXVuc2lnbmVk IGNoYXIgVlsxNl07CisrCS8qIFRlbXAgdmFyaWFibGVzIHVzZWQgYnkgZGVyaXZhdGlvbiBmdW5j dGlvbiAqLworKwlBRVNfS0VZIGRmX2tzOworKwlBRVNfS0VZIGRmX2t4a3M7CisrCS8qIFRlbXBv cmFyeSBibG9jayBzdG9yYWdlIHVzZWQgYnkgY3RyX2RmICovCisrCXVuc2lnbmVkIGNoYXIgYmx0 bXBbMTZdOworKwlzaXplX3QgYmx0bXBfcG9zOworKwl1bnNpZ25lZCBjaGFyIEtYWzQ4XTsKKysJ fTsKKysKKysvKiBEUkJHIGludGVybmFsIGZsYWdzICovCisrCisrLyogRnVuY3Rpb25zIHNob3Vs ZG4ndCBjYWxsIGVyciBsaWJyYXJ5ICovCisrI2RlZmluZQlEUkJHX0ZMQUdfTk9FUlIJCQkweDEK KysvKiBDdXN0b20gcmVzZWVkIGNoZWNraW5nICovCisrI2RlZmluZQlEUkJHX0NVU1RPTV9SRVNF RUQJCTB4MgorKworKy8qIERSQkcgc3RhdHVzIHZhbHVlcyAqLworKy8qIG5vdCBpbml0aWFsaXNl ZCAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRAkwCisrLyogb2sgYW5kIHJl YWR5IHRvIGdlbmVyYXRlIHJhbmRvbSBiaXRzICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19SRUFE WQkJMQorKy8qIHJlc2VlZCByZXF1aXJlZCAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVTRUVE CQkyCisrLyogZmF0YWwgZXJyb3IgY29uZGl0aW9uICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19F UlJPUgkJMworKworKy8qIEEgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aDogbGFyZ2VyIHRoYW4gYW55 IHJlYXNvbmFibGUgdmFsdWUgdXNlZCBpbiBwcmF0aWNlICovCisrCisrI2RlZmluZSBEUkJHX01B WF9MRU5HVEgJCQkweDdmZmZmZmYwCisrLyogTWF4aW11bSBEUkJHIGJsb2NrIGxlbmd0aDogYWxs IG1kIHNpemVzIGFyZSBiaWdnZXIgdGhhbiBjaXBoZXIgYmxvY2tzIHNpemVzCisrICogc28gdXNl IG1heCBkaWdlc3QgbGVuZ3RoLgorKyAqLworKyNkZWZpbmUgRFJCR19NQVhfQkxPQ0sJCQlFVlBf TUFYX01EX1NJWkUKKysKKysjZGVmaW5lIERSQkdfSEVBTFRIX0lOVEVSVkFMCQkoMSA8PCAyNCkK KysKKysvKiBEUkJHIGNvbnRleHQgc3RydWN0dXJlICovCisrCisrc3RydWN0IGRyYmdfY3R4X3N0 CisrCXsKKysJLyogRmlyc3QgdHlwZXMgY29tbW9uIHRvIGFsbCBpbXBsZW1lbnRhdGlvbnMgKi8K KysJLyogRFJCRyB0eXBlOiBhIE5JRCBmb3IgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtICovCisr CWludCB0eXBlOworKwkvKiBWYXJpb3VzIGV4dGVybmFsIGZsYWdzICovCisrCXVuc2lnbmVkIGlu dCB4ZmxhZ3M7CisrCS8qIFZhcmlvdXMgaW50ZXJuYWwgdXNlIG9ubHkgZmxhZ3MgKi8KKysJdW5z aWduZWQgaW50IGlmbGFnczsKKysJLyogVXNlZCBmb3IgcGVyaW9kaWMgaGVhbHRoIGNoZWNrcyAq LworKwlpbnQgaGVhbHRoX2NoZWNrX2NudCwgaGVhbHRoX2NoZWNrX2ludGVydmFsOworKworKwkv KiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHNldHVwIGJ5IG1lY2hhbmlzbSBkcmJnX2lu aXQoKSBjYWxsICovCisrCWludCBzdHJlbmd0aDsKKysJc2l6ZV90IGJsb2NrbGVuZ3RoOworKwlz aXplX3QgbWF4X3JlcXVlc3Q7CisrCisrCXNpemVfdCBtaW5fZW50cm9weSwgbWF4X2VudHJvcHk7 CisrCXNpemVfdCBtaW5fbm9uY2UsIG1heF9ub25jZTsKKysJc2l6ZV90IG1heF9wZXJzLCBtYXhf YWRpbjsKKysJdW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyOworKwl1bnNpZ25lZCBpbnQgcmVz ZWVkX2ludGVydmFsOworKwlzaXplX3Qgc2VlZGxlbjsKKysJaW50IHN0YXR1czsKKysJLyogQXBw bGljYXRpb24gZGF0YTogdHlwaWNhbGx5IHVzZWQgYnkgdGVzdCBnZXRfZW50cm9weSAqLworKwl2 b2lkICphcHBfZGF0YTsKKysJLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3RydWN0dXJlcyAq LworKwl1bmlvbiAKKysJCXsKKysJCURSQkdfSEFTSF9DVFggaGFzaDsKKysJCURSQkdfSE1BQ19D VFggaG1hYzsKKysJCURSQkdfQ1RSX0NUWCAgY3RyOworKwkJfSBkOworKwkvKiBJbml0aWFsaWFz ZSBQUk5HIGFuZCBzZXR1cCBjYWxsYmFja3MgYmVsb3cgKi8KKysJaW50ICgqaW5pdCkoRFJCR19D VFggKmN0eCwgaW50IG5pZCwgaW50IHNlY3VyaXR5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworKwkv KiBJbnRhbnRpYXRlIFBSTkcgKi8KKysJaW50ICgqaW5zdGFudGlhdGUpKERSQkdfQ1RYICpjdHgs CisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKKysJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOworKwkvKiByZXNlZWQgKi8KKysJaW50 ICgqcmVzZWVkKShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQs IHNpemVfdCBlbnRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGlubGVuKTsKKysJLyogZ2VuZXJhdCBvdXRwdXQgKi8KKysJaW50ICgqZ2VuZXJhdGUpKERSQkdf Q1RYICpjdHgsCisrCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOworKwkvKiB1bmluc3Rh bnRpYXRlICovCisrCWludCAoKnVuaW5zdGFudGlhdGUpKERSQkdfQ1RYICpjdHgpOworKworKwkv KiBFbnRyb3B5IHNvdXJjZSBibG9jayBsZW5ndGggKi8KKysJc2l6ZV90IGVudHJvcHlfYmxvY2ts ZW47CisrCisrCS8qIGVudHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCisrCXNpemVfdCAoKmdl dF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50 IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7CisrCS8qIEluZGljYXRl cyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggZW50cm9weSBidWZmZXIgKi8KKysJdm9pZCAoKmNsZWFu dXBfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xl bik7CisrCisrCS8qIG5vbmNlIGdhdGhlcmluZyBmdW5jdGlvbiAqLworKwlzaXplX3QgKCpnZXRf bm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50 cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKKysJLyogSW5kaWNhdGVzIHdl IGhhdmUgZmluaXNoZWQgd2l0aCBub25jZSBidWZmZXIgKi8KKysJdm9pZCAoKmNsZWFudXBfbm9u Y2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOworKwor KwkvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIgdGVzdCB0ZW1wb3JhcnkgYXJlYSAqLworKwkv KiBMYXN0IGJsb2NrICovCQorKwl1bnNpZ25lZCBjaGFyIGxiW0VWUF9NQVhfTURfU0laRV07Cisr CS8qIHNldCBpZiBsYiBpcyB2YWxpZCAqLworKwlpbnQgbGJfdmFsaWQ7CisrCisrCS8qIENhbGxi YWNrcyB1c2VkIHdoZW4gY2FsbGVkIHRocm91Z2ggUkFORCBpbnRlcmZhY2UgKi8KKysJLyogR2V0 IGFueSBhZGRpdGlvbmFsIGlucHV0IGZvciBnZW5lcmF0ZSAqLworKwlzaXplX3QgKCpnZXRfYWRp bikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpOworKwl2b2lkICgqY2xlYW51 cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsK KysJLyogQ2FsbGJhY2sgZm9yIFJBTkRfc2VlZCgpLCBSQU5EX2FkZCgpICovCisrCWludCAoKnJh bmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKKysJ aW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCisrCQkJCWNvbnN0IHZvaWQgKmJ1Ziwg aW50IG51bSwgZG91YmxlIGVudHJvcHkpOworKwl9OworKworKworK2ludCBmaXBzX2RyYmdfY3Ry X2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RY ICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCk7CisraW50 IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFn cyk7CisraW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICpvdXQpOworKworK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2Rp Z2VzdGJ5bmlkKGludCBuaWQpOworKworK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBT X2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKKysKKysjZGVmaW5lIEZJUFNfZGlnZXN0aW5pdCBF VlBfRGlnZXN0SW5pdAorKyNkZWZpbmUgRklQU19kaWdlc3R1cGRhdGUgRVZQX0RpZ2VzdFVwZGF0 ZQorKyNkZWZpbmUgRklQU19kaWdlc3RmaW5hbCBFVlBfRGlnZXN0RmluYWwKKysjZGVmaW5lIE1f RVZQX01EX3NpemUgRVZQX01EX3NpemUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9m aXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNf cmFuZF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIu Yy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ0MzUyNDE4ICswMjAwCisrKysgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ0 MzUyNDE4ICswMjAwCitAQCAtMCwwICsxLDE5MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk 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 LworKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImVfb3MuaCIK KysKKysvKiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNpbWlsYXIgdG8gUkFORCBmdW5jdGlvbmFs aXR5IGJ1dCB3aXRob3V0CisrICogRU5HSU5FIGFuZCBhZGRpdGlvbmFsIGNoZWNraW5nIGZvciBu b24tRklQUyByYW5kIG1ldGhvZHMuCisrICovCisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9E ICpmaXBzX3JhbmRfbWV0aCA9IE5VTEw7Cisrc3RhdGljIGludCBmaXBzX2FwcHJvdmVkX3JhbmRf bWV0aCA9IDA7Cisrc3RhdGljIGludCBmaXBzX3JhbmRfYml0cyA9IDA7CisrCisrLyogQWxsb3dz IGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBvZiBiaXRzIGFuZCB1c2VzIG5vbi1GSVBT IG1ldGhvZHMgKi8KKyt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpCisrCXsKKysJ Zmlwc19yYW5kX2JpdHMgPSBuYml0czsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0X21ldGhv ZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKKysJeworKwlpZiAoIWZpcHNfcmFuZF9iaXRzKQor KwkJeworKwkJaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQorKwkJCWZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoID0gMTsKKysJCWVsc2UgaWYgKG1ldGggPT0gRklQU194OTMxX21ldGhvZCgp KQorKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMjsKKysJCWVsc2UKKysJCQl7CisrCQkJ Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOworKwkJCWlmIChGSVBTX21vZHVsZV9tb2RlKCkp CisrCQkJCXsKKysJCQkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QsCisrCQkJ CQkJRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJ fQorKwkJfQorKwlmaXBzX3JhbmRfbWV0aCA9IG1ldGg7CisrCXJldHVybiAxOworKwl9CisrCisr Y29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpCisrCXsKKysJcmV0 dXJuIGZpcHNfcmFuZF9tZXRoOworKwl9CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFu ZF9tZXRob2Qodm9pZCkKKysJeworKwlyZXR1cm4gRklQU19yYW5kX2dldF9tZXRob2QoKTsKKysJ fQorKworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpCisrCXsKKysJaWYgKGZpcHNfcmFuZF9t ZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQorKwkJZmlwc19yYW5kX21ldGgtPmNsZWFu dXAoKTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNf UkFORF9TSVpFX1QgbnVtKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYg RklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NF RUQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChm aXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c2VlZCkKKysJCWZpcHNfcmFuZF9tZXRo LT5zZWVkKGJ1ZixudW0pOworKwlyZXR1cm4gMTsKKysJfQorKworK3ZvaWQgRklQU19yYW5kX2Fk ZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KQorKwl7CisrCWlmICgh Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19SQU5EX0FERCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Cisr CQlyZXR1cm47CisrCQl9CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+ YWRkKQorKwkJZmlwc19yYW5kX21ldGgtPmFkZChidWYsbnVtLGVudHJvcHkpOworKwl9CisrCisr aW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIEZJUFNfUkFORF9TSVpFX1Qg bnVtKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVf bW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0JZVEVTLCBGSVBTX1Jf Tk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21l dGggJiYgZmlwc19yYW5kX21ldGgtPmJ5dGVzKQorKwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5i eXRlcyhidWYsbnVtKTsKKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3BzZXVk b19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBudW0pCisrCXsKKysJaWYgKCFmaXBzX2Fw cHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsK KysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21l dGgtPnBzZXVkb3JhbmQpCisrCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPnBzZXVkb3JhbmQoYnVm LG51bSk7CisrCXJldHVybiAtMTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQp CisrCXsKKysJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2Rl KCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTLCBGSVBTX1JfTk9O X0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGgg JiYgZmlwc19yYW5kX21ldGgtPnN0YXR1cykKKysJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+c3Rh dHVzKCk7CisrCXJldHVybiAwOworKwl9CisrCisrLyogUmV0dXJuIGluc3RhbnRpYXRlZCBzdHJl bmd0aCBvZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlzIGFuIGludGVybmFsCisrICogcGFyYW1ldGVy LiBGb3IgWDkuMzEgUFJORyBpdCBpcyA4MCBiaXRzIChmcm9tIFNQODAwLTEzMSkuIEFueSBvdGhl cgorKyAqIHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92ZWQgYW5kIHJldHVybnMgMCBpbiBGSVBT IG1vZGUgYW5kIG1heGltdW0KKysgKiAyNTYgb3V0c2lkZSBGSVBTIG1vZGUuCisrICovCisrCisr aW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQorKwl7CisrCWlmIChmaXBzX3JhbmRfYml0cykK KysJCXJldHVybiBmaXBzX3JhbmRfYml0czsKKysJaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRo ID09IDEpCisrCQlyZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dldF9kZWZhdWx0 X2RyYmcoKSk7CisrCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDIpCisrCQly ZXR1cm4gODA7CisrCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDApCisrCQl7 CisrCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQorKwkJCXJldHVybiAwOworKwkJZWxzZQorKwkJ CXJldHVybiAyNTY7CisrCQl9CisrCXJldHVybiAwOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0 NDM1MjQxOCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9z ZWxmdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ0MzUyNDE4ICswMjAwCitAQCAtMCwwICsx LDE4MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu 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 SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFu ZC5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJ dW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJO R19UVjsKKysKKysvKiBUaGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0 bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAqLworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18x Mjhfa2V5WzE2XSA9CisrCQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQy LAorKwkJIDB4ZWQsMHgwNiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07CisrCisrc3Rh dGljIEFFU19QUk5HX1RWIGFlc18xMjhfdHYgPSAKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4 ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0 YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4Zjl9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDU5LDB4NTMsMHgxZSww eGQxLDB4M2IsMHhiMCwweGMwLDB4NTUsCisrCQkgMHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4 MmYsMHg3NiwweDQxfQorKwl9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5 WzI0XSA9CisrCQl7MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSwweDZlLAorKwkJ IDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKKysJCSAweDRhLDB4ZmIs MHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBh ZXNfMTkyX3R2ID0gCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4 LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4Nzgs MHhmMywweDRifSwKKysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgx ZSwweGVmLAorKwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KKysJ fTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQorKwkJezB4NmQs MHgxNCwweDA2LDB4NmMsMHhiNiwweGQ4LDB4MjEsMHgyZCwKKysJCSAweDgyLDB4OGQsMHhmYSww eGYyLDB4N2EsMHgwMywweGI3LDB4OWYsCisrCQkgMHgwYywweGM3LDB4M2UsMHhjZCwweDc2LDB4 ZWIsMHhlZSwweGI1LAorKwkJIDB4MjEsMHgwNSwweDhjLDB4NGYsMHgzMSwweDdhLDB4ODAsMHhi Yn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHYgPQorKwl7CisrCQkJCS8qIERU ICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4 ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCisrCQkJCS8qIFYgKi8KKysJ CXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MzUs MHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywKKysJCSAweDgyLDB4NzksMHg5OSww eGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9CisrCX07CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5n KCkKKysgICAgeworKyAgICBhZXNfMTkyX3R2LlZbMF0rKzsKKysgICAgfQorKworKyNkZWZpbmUg Zmlwc194OTMxX3Rlc3Qoa2V5LCB0dikgXAorKwlkb194OTMxX3Rlc3Qoa2V5LCBzaXplb2Yga2V5 LCAmdHYpCisrCisrc3RhdGljIGludCBkb194OTMxX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBp bnQga2V5bGVuLAorKwkJCUFFU19QUk5HX1RWICp0dikKKysJeworKwl1bnNpZ25lZCBjaGFyIFJb MTZdLCBWWzE2XTsKKysJaW50IHJ2ID0gMTsKKysJbWVtY3B5KFYsIHR2LT5WLCBzaXplb2YoVikp OworKwlpZiAoIUZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKSkKKysJCXJldHVybiAwOwor KwlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQor KwkJcmV0dXJuIDE7CisrCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX1g5MzEsIGtl eWxlbiwgTlVMTCkpCisrCQlWWzBdKys7CisrCUZJUFNfeDkzMV9zZWVkKFYsIDE2KTsKKysJRklQ U194OTMxX3NldF9kdCh0di0+RFQpOworKwlGSVBTX3g5MzFfYnl0ZXMoUiwgMTYpOworKwlpZiAo bWVtY21wKFIsIHR2LT5SLCAxNikpCisrCQl7CisrCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVT VF9YOTMxLCBrZXlsZW4sIE5VTEwpOworKwkJcnYgPSAwOworKwkJfQorKwllbHNlIGlmICghZmlw c19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCisrCQlyZXR1cm4g MDsKKysJcmV0dXJuIHJ2OworKwl9CisrCisraW50IEZJUFNfc2VsZnRlc3RfeDkzMSgpCisrCXsK KysJaW50IHJ2ID0gMTsKKysJRklQU194OTMxX3Jlc2V0KCk7CisrCWlmICghRklQU194OTMxX3Rl c3RfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghZmlwc194 OTMxX3Rlc3QoYWVzXzEyOF9rZXksYWVzXzEyOF90dikpCisrCQlydiA9IDA7CisrCWlmICghZmlw c194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18xOTJfdHYpKQorKwkJcnYgPSAwOworKwlpZiAo IWZpcHNfeDkzMV90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKKysJCXJ2ID0gMDsKKysJ RklQU194OTMxX3Jlc2V0KCk7CisrCWlmICghcnYpCisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX1g5MzEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCXJldHVybiBydjsKKysJfQor KworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKQorKwl7CisrCXJldHVybiBGSVBTX3NlbGZ0 ZXN0X3g5MzEoKTsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5k dGVzdC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDQzNTI0MTggKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxMi0wNy0xMiAyMTo0OToy NS4zNDQzNTI0MTggKzAyMDAKK0BAIC0wLDAgKzEsMjUwIEBACisrLyogQ29weXJpZ2h0IChDKSAx OTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24g d3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUg aW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBl cyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5k IG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRp b25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkg dG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJT QSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBU aGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9u IGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQg dGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICog Q29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0 IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYg dGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBn aXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBs aWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1l c3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5l IG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMg c29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNv bSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0 aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNy eXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRv d3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAg dGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFu IGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICog QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRp c3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IK KysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhp cyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVy IGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNl bmNlLl0KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3Rk aW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NM X0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRm KCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vs c2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5z aWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19N Q1Q7CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9 CisrCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIsMHhmMywweDM0LDB4YjUsCisrCSAweGQ4LDB4 MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9OworKworK3N0YXRpYyBjb25zdCBBRVNf UFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7CisrCQkJLyogRFQgKi8KKysJezB4NjMsMHg3Niww eGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKKysJIDB4NjcsMHhjOSwweDI1LDB4ZmEsMHg3 MCwweDFmLDB4MTEsMHhhY30sCisrCQkJLyogViAqLworKwl7MHg1NywweDJjLDB4OGUsMHg3Niww eDg3LDB4MjYsMHg0NywweDk3LAorKwkgMHg3ZSwweDc0LDB4ZmIsMHhkZCwweGM0LDB4OTUsMHgw MSwweGQxfSwKKysJCQkvKiBSICovCisrCXsweDQ4LDB4ZTksMHhiZCwweDBkLDB4MDYsMHhlZSww eDE4LDB4ZmIsCisrCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4YzMsMHhmYywweDliLDB4NzN9Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX21jdF9rZXlbMjRdID0K KysJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3MywKKysJIDB4NGQsMHg1 YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwKKysJIDB4YmMsMHgzNSwweDUxLDB4MTYs MHg2YiwweGFlLDB4OTMsMHg4YX07CisrCisrc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNf MTkyX21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHg4NCwweGNlLDB4MjIsMHg3ZCwweDkx LDB4NWEsMHhhMywweGM5LAorKwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4NjMsMHgxNSww eDUyfSwKKysJCQkvKiBWICovCisrCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTksMHg5ZSwweDkw LDB4NjQsCisrCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4NmR9LAorKwkJ CS8qIFIgKi8KKysJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYsMHgyMSwKKysJ IDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQorKwl7MHg5YiwweDA1 LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAorKwkgMHhhNiwweDNhLDB4YTgsMHhjYiww eDRlLDB4NzEsMHhiMiwweGUwLAorKwkgMHhiOCwweDdlLDB4ZjEsMHgzNywweGI2LDB4YjQsMHhm NiwweDZkLAorKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSwweDUwfTsKKysK KytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0geworKwkJCS8qIERU ICovCisrCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUsCisrCSAweDYy LDB4NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAorKwkJCS8qIFYgKi8KKysJezB4 NGYsMHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKKysJIDB4M2UsMHgwZSwweDU2 LDB4NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCisrCQkJLyogUiAqLworKwl7MHhjOCwweDg3LDB4 YzIsMHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAorKwkgMHhlNywweGYzLDB4OGIsMHhkNywweDVi LDB4ZDUsMHhmMSwweDhkfQorK307CisrCisrc3RhdGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25l ZCBjaGFyICpiLGludCBuKQorKyAgICB7CisrICAgIHdoaWxlKG4tLSA+IDApCisrCXsKKysJcHJp bnRmKCIgJTAyeCIsKmIrKyk7CisrCX0KKysgICAgfQorKworK3N0YXRpYyB2b2lkIGNvbXBhcmUo Y29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVk LAorKwkJICAgIGludCBuKQorKyAgICB7CisrICAgIGludCBpOworKworKyAgICBmb3IoaT0wIDsg aSA8IG4gOyArK2kpCisrCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKKysJICAgIHsKKysJ ICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOworKwkgICAgZHVtcChyZXN1bHQs bik7CisrCSAgICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOworKwkgICAgZHVt cChleHBlY3RlZCxuKTsKKysJICAgIHB1dGNoYXIoJ1xuJyk7CisrCSAgICBFWElUKDEpOworKwkg ICAgfQorKyAgICB9CisrCisrCisrc3RhdGljIHZvaWQgcnVuX3Rlc3QoY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LCBpbnQga2V5bGVuLAorKwkJCQkJCQljb25zdCBBRVNfUFJOR19NQ1QgKnR2KQor KyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRbMTZdOworKyAgICBpbnQgaSwg ajsKKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIEZJUFNfeDkzMV90ZXN0X21vZGUoKTsK KysgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOworKyAgICBGSVBTX3g5MzFfc2Vl ZCh0di0+ViwgMTYpOworKyAgICBtZW1jcHkoZHQsIHR2LT5EVCwgMTYpOworKyAgICBmb3IgKGkg PSAwOyBpIDwgMTAwMDA7IGkrKykKKysJeworKyAgICAJRklQU194OTMxX3NldF9kdChkdCk7Cisr CUZJUFNfeDkzMV9ieXRlcyhidWYsIDE2KTsKKysJLyogSW5jcmVtZW50IERUICovCisrCWZvciAo aiA9IDE1OyBqID49IDA7IGotLSkKKysJCXsKKysJCWR0W2pdKys7CisrCQlpZiAoZHRbal0pCisr CQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysgICAgY29tcGFyZShidWYsdHYtPlIsIDE2KTsKKysg ICAgfQorKworK2ludCBtYWluKCkKKysJeworKwlydW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2 LCAmYWVzXzEyOF9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7 CisrCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7CisrCXBy aW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsKKysJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rf a2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRv bmVcbiIpOworKwlyZXR1cm4gMDsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDUz NTI0NDEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxm dGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ1MzUyNDQxICswMjAwCitAQCAtMCwwICsxLDQ0 NCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuW10gPQorKyJceDAwXHhCQlx4Rjhc eDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThceDcxIgorKyJc eEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4 NTRceEY1IgorKyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4 NDhceENFXHhFQlx4NkZceENEIgorKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4 NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgorKyJceDdGXHhBRlx4QjhceEUwXHhBM1x4 REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgorKyJceDg0XHhFRVx4 NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5Igor KyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4OUFceDQxXHhG Nlx4QzFceDY4IgorKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhG OFx4RTVceEZEXHgwOVx4MURceEJEIgorKyJceENCIjsKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRf cnNhOworKworK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQorKyAgICB7CisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKKysKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KKysiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4 RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKKysiXHhGOFx4M0ZceDMxXHgyNVx4 MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKKysiXHhCMlx4 OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2 OSIKKysiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgy RVx4QzlceDNFXHhEQSIKKysiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgx MVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKKysiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2 Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKKysiXHg5M1x4OTlceDI2XHhF RFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKKysiXHhB Rlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFD XHhCMyIKKysiXHhDMSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9 CisrIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBc eEExXHhCNVx4NjAiCisrIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNc eEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCisrIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURc eDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCisrIlx4MkRceDVCXHgyNVx4MjFc eDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCisrIlx4OTki OworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQorKyJceDAwXHhDOVx4 N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5Igor KyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgw Mlx4OEJceDlEIgorKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgw RFx4QTNceEI0XHgzMlx4MDRceEI1IgorKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgx Nlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgorKyJceDAzIjsKKysKKysgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KKysiXHg1NFx4NDlceDRDXHhBNlx4M0Vc eEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKKysiXHhFQlx4MDdc eEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIK KysiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4 MkVceDlBXHgyRSIKKysiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4 QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGRtcTFbXSA9CisrIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFc eEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCisrIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlc eDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCisrIlx4RjlceDgwXHgzRlx4OEZc eDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCisrIlx4MUJc eDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4 M0QiOworKyAgICAKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KKysi XHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVc eDk0XHgyMyIKKysiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdc eDdGXHhDRFx4MzlceEUyXHgxMSIKKysiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNc eEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKKysiXHg5RVx4MkVceDBGXHg5Nlx4NTZc eEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKKysiXHhGNyI7Cisr CisrICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKKysgICAg aWYgKGNvcnJ1cHRfcnNhKQorKwlCTl9zZXRfYml0KGtleS0+biwgMTAyNCk7CisrICAgIGtleS0+ ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5LT5lKTsKKysgICAga2V5LT5kID0gQk5f YmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOworKyAgICBrZXktPnAgPSBCTl9iaW4yYm4o cCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7CisrICAgIGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXpl b2YocSktMSwga2V5LT5xKTsKKysgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRtcDEsIHNpemVv ZihkbXAxKS0xLCBrZXktPmRtcDEpOworKyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwg c2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7CisrICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihp cW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0K KysKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfcnNhID0g MTsKKysgICAgfQorKworKy8qIEtub3duIEFuc3dlciBUZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBh Ym92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZworKyAqIGthdF90YnMuCisrICovCisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9wZW5TU0wgRklQUyAxNDAtMiBQ dWJsaWMgS2V5IFJTQSBLQVQiOworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfUFNTX1NIQTFbXSA9IHsKKysgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIs IDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCisrICAweDAxLCAweDFFLCAweDM3 LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAor KyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhFOCwgMHgwQywg MHhCNywgMHhGOCwgMHhEMywKKysgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUs IDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCisrICAweDdGLCAweDQ5LCAweEZC LCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3LAor KyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhFMywgMHg1RSwg MHgzRiwgMHg5QiwgMHhGNSwKKysgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4NzQsIDB4Qzks IDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCisrICAweDBBLCAweEU5LCAweDhF LCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3LCAweDMxLAor KyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhFNiwgMHhEQiwg MHg5RiwgMHhCQSwgMHhFOCwKKysgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4MDgsIDB4RUEs IDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCisrICAweDI2LCAweEM2LCAweDc5 LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKKysgIDB4MzksIDB4NEEsIDB4NkEs IDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgsIDB4QTcsCisr ICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgyLCAweDk4LCAw eDA4LCAweDk1LCAweEZBLAorKyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2MSwgMHg4Nywg MHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKKysgIDB4MzAsIDB4OUQsIDB4MEQs IDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMsIDB4ODksCisr ICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2LCAweENDLCAw eDg2LCAweDA1LCAweEVFLAorKyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwg MHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKKysgIDB4MTUsIDB4NzgsIDB4NkIs IDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIsIDB4RDEsIDB4QjUsCisr ICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQyLCAweEJELCAweEFBLCAw eDM4LCAweDI0LCAweDQ5LAorKyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwg MHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKKysgIDB4QzgsIDB4NTIsIDB4RkEs IDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUsIDB4QzAsIDB4MDAsCisr ICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMwCisrfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKKysg IDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4 MzEsIDB4RTMsIDB4ODksCisrICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAw eEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAorKyAgMHg3QiwgMHhDNSwgMHhBOCwg MHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKKysg IDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4 OTYsIDB4NzMsIDB4NEUsCisrICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAw eDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAorKyAgMHhBQiwgMHhGNSwgMHgwMSwg MHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKKysg IDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4 RjMsIDB4REEsIDB4QjYsCisrICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAw eEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAorKyAgMHgyMSwgMHhCNywgMHg3RSwg MHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKKysg IDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4 NDksIDB4QjksIDB4RjYsCisrICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAw eDJELCAweDFDCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BT U19TSEEzODRbXSA9IHsKKysgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4 NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCisrICAweEVDLCAweDFDLCAweEM0LCAw eEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVFLAorKyAg MHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0 NCwgMHg5QSwgMHhDRCwKKysgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4 NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCisrICAweDZGLCAweDAyLCAweEVGLCAw eEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAweDZDLAorKyAg MHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwgMHhGMywgMHhB QywgMHg0RiwgMHhGQiwKKysgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4 OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCisrICAweDNBLCAweEJFLCAweDg5LCAw eDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAweDg5LAorKyAg MHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywgMHg4NywgMHgx RiwgMHhDQSwgMHg2RiwKKysgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4 QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCisrICAweDQ4LCAweDQ0LCAweEVFLCAw eDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKKysgIDB4MDcsIDB4MUUsIDB4RDgsIDB4 RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMsIDB4OEMsCisrICAw eEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAweDhGLCAweDEy LCAweDUzLCAweDlBLAorKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgy MywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKKysgIDB4NEIsIDB4RjMsIDB4NDYsIDB4 OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4MjMsIDB4MzksCisrICAw eDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAweDY3LCAweDVG LCAweEZFLCAweEQ3LAorKyAgMHg3QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhC QiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKKysgIDB4NTcsIDB4RTMsIDB4MEYsIDB4 RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4ODUsIDB4MTMsCisrICAw eEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAweDlBLCAweDZB LCAweDM5LCAweDYzLAorKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0 OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKKysgIDB4NzYsIDB4RjIsIDB4MzIsIDB4 MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4QzIsIDB4ODgsCisrICAw eDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKKysgIDB4NzEsIDB4 RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIs IDB4NEMsCisrICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZE LCAweDYxLCAweDMzLCAweDhELCAweDlCLAorKyAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4 MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKKysgIDB4REMsIDB4 MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUs IDB4RjgsCisrICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZC LCAweDg4LCAweDhCLCAweDhCLCAweEExLAorKyAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1 QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKKysgIDB4QTksIDB4 OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUs IDB4NEUsCisrICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFE LCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAorKyAgMHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhF RCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKKysgIDB4NzIsIDB4 MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYs IDB4OTUsCisrICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0 CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTIyNFtdID0g eworKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1RiwgMHg4QywgMHhC QiwgMHhCNywgMHgxNSwgMHhGOSwKKysgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4 MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCisrICAweDVCLCAweDU1LCAw eDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAweEM1LCAweDg5 LAorKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgz MCwgMHgyQywgMHg5RSwgMHhDRCwKKysgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEsIDB4NkQsIDB4 NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCisrICAweEVFLCAweDFGLCAw eDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAweEE5LCAweEND LAorKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4 NCwgMHgwMiwgMHhDNiwgMHgzQiwKKysgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4 RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCisrICAweDU4LCAweDJFLCAw eDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAweDY2LCAweEU2LCAweDM1 LAorKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3 NywgMHg4MiwgMHhFNiwgMHhEQywKKysgIDB4NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4 M0UsIDB4MUUsIDB4OEQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfU0hBMjU2W10gPSB7CisrICAweDBELCAweDU1LCAweEUyLCAweEFBLCAweDgxLCAweERCLCAw eDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAorKyAgMHhFNywgMHgzQiwgMHgxRCwg MHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwgMHgyMywKKysg IDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4 QUQsIDB4NkYsIDB4MzUsCisrICAweDk4LCAweDJELCAweDY5LCAweDg0LCAweEJGLCAweEQ5LCAw eDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAorKyAgMHgyQywgMHg0NCwgMHg5Qiwg MHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwgMHgxOCwKKysg IDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4 N0EsIDB4OTEsIDB4MzAsCisrICAweEJFLCAweDIyLCAweEM3LCAweEQzLCAweEVDLCAweEMzLCAw eDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAorKyAgMHg3QywgMHg4NSwgMHhCNCwg MHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKKysg IDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4 RUUsIDB4RDEsIDB4REEsCisrICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFCLCAweEI5LCAw eEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAorKyAgMHhCRCwgMHg0NCwgMHg5Nywg MHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKKysgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQs IDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCisrICAweEQy LCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYzLCAweDU2LCAw eDQ3LCAweEM3LAorKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwg MHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKKysgIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEs IDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCisrICAweDY1 LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAw eEI2LCAweENGLAorKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywg MHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKKysgIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIs IDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMsCisrICAweEZG LCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhGLCAweDhCLCAw eDlDLCAweENELAorKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywg MHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKKysgIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQs IDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQsCisrICAweEJE LCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0geworKyAgMHg2OSwgMHg1 MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwg MHhDRiwKKysgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYs IDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAweDE1LCAweEVBLCAweDVDLCAweEU1LCAweEU2 LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAorKyAgMHgwNCwgMHhD MSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1NCwgMHg5Riwg MHhEOCwKKysgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0Ys IDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAweDgwLCAweEUyLCAweEJDLCAweERELCAweDY3 LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAweDZCLAorKyAgMHhBRiwgMHg2 MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgxRCwgMHg0Nywg MHhFNiwKKysgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4Nzgs IDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCisrICAweDZGLCAweDBFLCAweDJCLCAweDMxLCAweDlE LCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAweDJELAorKyAgMHgzRSwgMHg2 MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwg MHg5MSwKKysgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10g PSB7CisrICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAweDgwLCAweEI2LCAweDdDLCAw eDQyLCAweDQ1LCAweDRELCAweERGLAorKyAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1Riwg MHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKKysgIDB4ODAsIDB4QTQs IDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4 QUMsCisrICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4LCAweDRELCAw eDA0LCAweEVFLCAweEE5LCAweDk3LAorKyAgMHg3MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywg MHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKKysgIDB4NTMsIDB4MTUs IDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4 MTksCisrICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYzLCAweDI5LCAw eDYzLCAweDBDLCAweDU5LCAweEQ3LAorKyAgMHg2RiwgMHg0QywgMHgzQywgMHgzNywgMHg1Qiwg MHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKKysgIDB4NDgsIDB4QUYs IDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4 NzYsCisrICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJBLCAweDMwLCAw eDg0LCAweDFDLCAweEIzLCAweDY3LAorKyAgMHhBMywgMHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwg MHg2OCwgMHg3RCwgMHg0OQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9YOTMxX1NIQTI1NltdID0geworKyAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwg MHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKKysgIDB4RTUsIDB4NTIs IDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4 REQsCisrICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAw eDA1LCAweDk1LCAweDczLCAweENGLAorKyAgMHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwg MHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKKysgIDB4QzYsIDB4NTMs IDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4 NEIsCisrICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAw eEM0LCAweDM4LCAweDBFLCAweDk4LAorKyAgMHhBRCwgMHg0RSwgMHg0OSwgMHgyQywgMHhENywg MHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKKysgIDB4N0UsIDB4NzUs IDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4 OEMsCisrICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAw eDM1LCAweEExLCAweDQyLCAweEJELAorKyAgMHgyMSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywg MHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKKysgIDB4RTMsIDB4RTIs IDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKKyt9OworKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsKKysgIDB4NUMsIDB4N0Qs IDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4 N0IsCisrICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAw eEQ3LCAweDM5LCAweDM3LCAweENCLAorKyAgMHhFNiwgMHg0RiwgMHg1RSwgMHgwQSwgMHgxMywg MHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhFMywKKysgIDB4RUYsIDB4Nzgs IDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4 RjYsCisrICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENGLCAweENBLCAw eDk5LCAweDY2LCAweEVFLCAweDMxLAorKyAgMHhEOCwgMHg2OSwgMHhFOSwgMHhBQiwgMHgxMywg MHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwKKysgIDB4M0UsIDB4OUMs IDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4 NzksCisrICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAw eDM0LCAweEQ1LCAweDdDLCAweEZGLAorKyAgMHgwRSwgMHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwg MHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwKKysgIDB4RUYsIDB4MDEs IDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4 NkQsCisrICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1LCAweDI4Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10g PSB7CisrICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2LCAweENCLCAw eDY0LCAweDNBLCAweEMxLCAweDYzLAorKyAgMHhGQywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5Qiwg MHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKKysgIDB4RTcsIDB4NDcs IDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4 RDcsCisrICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2LCAweDBGLCAw eDVFLCAweEY5LCAweDE0LCAweDI4LAorKyAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwg MHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKKysgIDB4NkUsIDB4MkIs IDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4 QUYsCisrICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0LCAweDcyLCAw eDEwLCAweEUwLCAweEY2LCAweEQwLAorKyAgMHhDRSwgMHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwg MHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKKysgIDB4OUYsIDB4MDks IDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4 N0MsCisrICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDkyLCAweDQyLCAw eDExLCAweDMwLCAweDcxLCAweDFCLAorKyAgMHg2MCwgMHg4MywgMHgxOCwgMHg4OCwgMHhBMywg MHhGNSwgMHg1OSwgMHhDMworK307CisrCisrCisraW50IEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJ eworKwlpbnQgcmV0ID0gMDsKKysJUlNBICprZXk7CisrCUVWUF9QS0VZICpwayA9IE5VTEw7Cisr CisrCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlzZXRyc2Fr ZXkoa2V5KTsKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJy OworKworKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOworKworKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJ a2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEExIFBLQ1MjMSIpKQorKwkJZ290 byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hB MjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJ CQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0 X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyNTYgUEtDUyMxIikpCisr CQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JT QV9TSEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEs CisrCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJ CQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUx MigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTUxMiBQS0NTIzEi KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMSwgc2l6 ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAorKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUywKKysJCQkJIlJTQSBTSEExIFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAor KwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyMjQpLAorKwkJ CQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTIy NCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjU2 LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKKysJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyNTYgUFNTIikpCisrCQlnb3RvIGVycjsK KysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NI QTM4NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJ CSJSU0EgU0hBMzg0IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNB X1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLAorKwkJCQlFVlBfc2hhNTEy KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTUxMiBQU1MiKSkKKysJ CWdvdG8gZXJyOworKworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMSwgc2l6ZW9m KGthdF9SU0FfWDkzMV9TSEExKSwKKysJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1g5MzEsCisrCQkJIlJTQSBTSEExIFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwkvKiBOQjogU0hB MjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMx X1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAorKwkJCUVWUF9zaGEyNTYoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMjU2IFg5MzEiKSkKKysJCWdv dG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMzg0LCBzaXplb2Yoa2F0X1JT QV9YOTMxX1NIQTM4NCksCisrCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEsCisrCQkJIlJTQSBTSEEzODQgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJ CWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEyKSwKKysJCQlF VlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTUxMiBY OTMxIikpCisrCQlnb3RvIGVycjsKKysKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlpZiAo cGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJZWxzZSBpZiAoa2V5KQorKwkJUlNBX2ZyZWUo a2V5KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBT ICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5j LmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYworLS0tIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcwkyMDEyLTA3LTEy IDIxOjQ5OjI1LjM0NTM1MjQ0MSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBz L2ZpcHNfcnNhX3g5MzFnLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDUzNTI0NDEgKzAyMDAKK0BA IC0wLDAgKzEsMjgyIEBACisrLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8KKysvKiBDb3B5cmln aHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1l bnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgor KyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGgg TmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVy Y2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhl IFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wg Y29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0 cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNl cHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysg KiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBD b3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4K KysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hv dWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMg b2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRl eHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9u IChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlw dHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQg b3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFy ZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBh bnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAK KysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGlu Y2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICog CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBB TkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5j ZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVy c2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAg aS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVy IGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVi bGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytleHRlcm4g aW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKTsKKysjZW5kaWYKKysKKysvKiBYOS4zMSBSU0Eg a2V5IGRlcml2YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KKysKKytpbnQgUlNBX1g5MzFfZGVyaXZl X2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0g KnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklH TlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0 IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCisrCXsKKysJ QklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOworKwlCTl9DVFggKmN0 eD1OVUxMLCpjdHgyPU5VTEw7CisrCisrCWlmICghcnNhKSAKKysJCWdvdG8gZXJyOworKworKwlj dHggPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4KSAKKysJCWdvdG8gZXJyOworKwlCTl9DVFhf c3RhcnQoY3R4KTsKKysKKysJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIxID0gQk5fQ1RYX2dl dChjdHgpOworKwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjMgPSBCTl9DVFhfZ2V0KGN0eCk7 CisrCisrCWlmIChyMyA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghcnNhLT5lKQorKwkJ eworKwkJcnNhLT5lID0gQk5fZHVwKGUpOworKwkJaWYgKCFyc2EtPmUpCisrCQkJZ290byBlcnI7 CisrCQl9CisrCWVsc2UKKysJCWUgPSByc2EtPmU7CisrCisrCS8qIElmIG5vdCBhbGwgcGFyYW1l dGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgorKwkgKiBUaGlzIGFsbG93 cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVycy4KKysJICovCisr CisrCWlmIChYcCAmJiAhcnNhLT5wKQorKwkJeworKwkJcnNhLT5wID0gQk5fbmV3KCk7CisrCQlp ZiAoIXJzYS0+cCkKKysJCQlnb3RvIGVycjsKKysKKysJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJp bWVfZXgocnNhLT5wLCBwMSwgcDIsCisrCQkJCQlYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQor KwkJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoWHEgJiYgIXJzYS0+cSkKKysJCXsKKysJCXJz YS0+cSA9IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnEpCisrCQkJZ290byBlcnI7CisrCQlpZiAo IUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAorKwkJCQkJWHEsIFhxMSwg WHEyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFyc2EtPnAg fHwgIXJzYS0+cSkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0 eCk7CisrCQlyZXR1cm4gMjsKKysJCX0KKysKKysJLyogU2luY2UgYm90aCBwcmltZXMgYXJlIHNl dCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVtYWluaW5nIAorKwkgKiBjb21wb25lbnRzLgor KwkgKi8KKysKKysJLyogY2FsY3VsYXRlIG4gKi8KKysJcnNhLT5uPUJOX25ldygpOworKwlpZiAo cnNhLT5uID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tdWwocnNhLT5uLHJzYS0+ cCxyc2EtPnEsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCAqLworKwlp ZiAoIUJOX3N1YihyMSxyc2EtPnAsQk5fdmFsdWVfb25lKCkpKQorKwkJZ290byBlcnI7CS8qIHAt MSAqLworKwlpZiAoIUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKQorKwkJZ290byBl cnI7CS8qIHEtMSAqLworKwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQorKwkJZ290byBlcnI7 CS8qIChwLTEpKHEtMSkgKi8KKysKKysJaWYgKCFCTl9nY2QocjMsIHIxLCByMiwgY3R4KSkKKysJ CWdvdG8gZXJyOworKworKwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBjdHgpKQorKwkJ Z290byBlcnI7CS8qIExDTSgocC0xKShxLTEpKSAqLworKworKwljdHgyID0gQk5fQ1RYX25ldygp OworKwlpZiAoIWN0eDIpCisrCQlnb3RvIGVycjsKKysKKysJcnNhLT5kPUJOX21vZF9pbnZlcnNl KE5VTEwscnNhLT5lLHIwLGN0eDIpOwkvKiBkICovCisrCWlmIChyc2EtPmQgPT0gTlVMTCkKKysJ CWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KKysJcnNhLT5kbXAx PUJOX25ldygpOworKwlpZiAocnNhLT5kbXAxID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYg KCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8q IGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLworKwlyc2EtPmRtcTE9Qk5fbmV3KCk7CisrCWlmIChy c2EtPmRtcTEgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIUJOX21vZChyc2EtPmRtcTEs cnNhLT5kLHIyLGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGludmVyc2Ug b2YgcSBtb2QgcCAqLworKwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPnEscnNh LT5wLGN0eDIpOworKworKwllcnI6CisrCWlmIChjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0 eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKwlpZiAoY3R4MikKKysJCUJOX0NUWF9m cmVlKGN0eDIpOworKwkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLwor KwlpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxMKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVy biAwOworKworKwl9CisrCisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwg aW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCWludCBvayA9 IDA7CisrCUJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOworKwlCTl9DVFggKmN0eCA9IE5V TEw7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShyc2Et PmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmIAorKwkJKGJpdHMgPCBPUEVOU1NM X1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBT X0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJICAg IHJldHVybiAwOworKwkgICAgfQorKworKwlpZiAoYml0cyAmIDB4ZmYpCisrCSAgICB7CisrCSAg ICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0lOVkFMSURf S0VZX0xFTkdUSCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysKKysJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dF TkVSQVRFX0tFWV9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJu IDA7CisrCSAgICB9CisrI2VuZGlmCisrCisrCWN0eCA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFj dHgpCisrCQlnb3RvIGVycm9yOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJWHAgPSBCTl9D VFhfZ2V0KGN0eCk7CisrCVhxID0gQk5fQ1RYX2dldChjdHgpOworKwlpZiAoIUJOX1g5MzFfZ2Vu ZXJhdGVfWHBxKFhwLCBYcSwgYml0cywgY3R4KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCXJzYS0+ cCA9IEJOX25ldygpOworKwlyc2EtPnEgPSBCTl9uZXcoKTsKKysJaWYgKCFyc2EtPnAgfHwgIXJz YS0+cSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8qIEdlbmVyYXRlIHR3byBwcmltZXMgZnJvbSBY cCwgWHEgKi8KKysKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJy b3I7CisrCisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIFhxLAorKwkJCQkJZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9yOwor KworKwkvKiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwg anVzdCBkZXJpdmUKKysJICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgorKwkgKi8KKysKKysJ aWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJ CQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCisrCQlnb3RvIGVy cm9yOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkp CisrCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKworKwlvayA9IDE7CisrCisrCWVycm9yOgor KwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4 KTsKKysJCX0KKysKKysJaWYgKG9rKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworKwor Kwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYwor LS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMuZmlwcwky MDEyLTA3LTEyIDIxOjQ5OjI1LjM0NTM1MjQ0MSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDUzNTI0 NDEgKzAyMDAKK0BAIC0wLDAgKzEsMTQwIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisr CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RbXVs2MF09CisrICAgIHsK KysgICAgIiIsCisrICAgICJhYmMiLAorKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hp amhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCisrICAgIH07CisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hBX0RJR0VTVF9MRU5HVEhdPQorKyAgICB7CisrICAgIHsg MHhkYSwweDM5LDB4YTMsMHhlZSwweDVlLDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1NSwKKysgICAg ICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCisr ICAgIHsgMHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwK KysgICAgICAweDI1LDB4NzEsMHg3OCwweDUwLDB4YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlk IH0sCisrICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEs MHhhZSwKKysgICAgICAweDRhLDB4YTEsMHhmOSwweDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3 MCwweGYxIH0sCisrICAgIH07CisrCisrc3RhdGljIGludCBjb3JydXB0X3NoYTsKKysKKyt2b2lk IEZJUFNfY29ycnVwdF9zaGExKCkKKysgICAgeworKyAgICBjb3JydXB0X3NoYSA9IDE7CisrICAg IH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKKysgICAgeworKyAgICBpbnQgbjsKKysK KysgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsrbikKKysJ eworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysJRVZQX0RpZ2Vz dCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKStjb3JydXB0X3NoYSxtZCwgTlVMTCwgRVZQX3NoYTEo KSwgTlVMTCk7CisrCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkKKysJICAgIHsKKysJ ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwl9CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTI1NltdID0geyAweGZh LCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAweDFmLCAweDMwLAorKwkJCQkJICAgIDB4 ZmMgfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhMjU2W10gPSB7IDB4Zjcs IDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEsIDB4NjgsIDB4NWIsCisrCQkJCQkgICAgMHg5 ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhiYiwgMHg3NSwgMHhiZiwgMHgwMSwKKysJCQkJCSAgICAw eDE3LCAweDBjLCAweDg0LCAweDAwLCAweDAxLCAweDdhLCAweDk0LCAweDgzLAorKwkJCQkJICAg IDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4ODgsIDB4OGEgfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhNTEyW10gPSB7IDB4MzcsIDB4ZDEsIDB4 MzUsIDB4OWQsIDB4MTgsIDB4NDEsIDB4ZTksIDB4YjcsCisrCQkJCQkgICAgMHg2ZCwgMHg5YSwg MHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZCB9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGRpZ19zaGE1MTJbXSA9IHsgMHgxMSwgMHgxMywgMHhjNCwgMHgxOSwgMHhlZCwgMHgyYiwg MHgxZCwgMHgxNiwKKysJCQkJCSAgICAweDExLCAweGViLCAweDliLCAweGJlLCAweGYwLCAweDdm LCAweGNmLCAweDQ0LAorKwkJCQkJICAgIDB4OGIsIDB4ZDcsIDB4NTcsIDB4YmQsIDB4OGQsIDB4 YTksIDB4MjUsIDB4YjAsCisrCQkJCQkgICAgMHg0NywgMHgyNSwgMHhkNiwgMHg2YywgMHg5YSwg MHg1NCwgMHg3ZiwgMHg4ZiwKKysJCQkJCSAgICAweDBiLCAweDUzLCAweDFhLCAweDEwLCAweDY4 LCAweDMyLCAweDAzLCAweDM4LAorKwkJCQkJICAgIDB4ODIsIDB4YzQsIDB4ODcsIDB4YzQsIDB4 ZWEsIDB4MGUsIDB4ZDEsIDB4MDQsCisrCQkJCQkgICAgMHhhOSwgMHg5OCwgMHhjMSwgMHgwNSwg MHhhMywgMHhmMywgMHhmOCwgMHhiMSwKKysJCQkJCSAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4 LCAweDdlLCAweGVlLCAweDNkLCAweDQzIH07CisrCisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2 b2lkKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKwor KwlFVlBfRGlnZXN0KG1zZ19zaGEyNTYsIHNpemVvZihtc2dfc2hhMjU2KSwgbWQsIE5VTEwsIEVW UF9zaGEyNTYoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChkaWdfc2hhMjU2LCBtZCwgc2l6ZW9mKGRp Z19zaGEyNTYpKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCUVWUF9EaWdlc3Qo bXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBO VUxMKTsKKysJaWYobWVtY21wKGRpZ19zaGE1MTIsIG1kLCBzaXplb2YoZGlnX3NoYTUxMikpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJcmV0dXJuIDE7CisrCX0KKysKKysjZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9o bWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1h Yy5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMu Yy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ1MzUyNDQxICswMjAwCisrKysgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwkyMDEyLTA3LTEyIDIxOjQ5 OjI1LjM0NTM1MjQ0MSArMDIwMAorQEAgLTAsMCArMSwxODAgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKwor KyNpZm5kZWYgRklQU0NBTklTVEVSX08KKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQoKSB7IHJl dHVybiAwOyB9Cisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KKyt2b2lkIE9QRU5TU0xf Y2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9CisrI2VuZGlmCisrCisrI2lmCWRlZmluZWQo X19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBc CisrCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisrCWRlZmluZWQoX194ODZfNjQpIHx8IGRlZmlu ZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpCisr CisrdW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKKysjZW5kaWYKKysKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1Nl9DVFggKm1k X2N0eCxTSEEyNTZfQ1RYICpvX2N0eCwKKysJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKKysgICAg eworKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOworKyAgICBpbnQgaTsKKysgICAgdW5zaWdu ZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOworKyAgICB1bnNpZ25lZCBjaGFyIHBh ZFtITUFDX01BWF9NRF9DQkxPQ0tdOworKworKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKKysJ eworKwlTSEEyNTZfSW5pdChtZF9jdHgpOworKwlTSEEyNTZfVXBkYXRlKG1kX2N0eCxrZXksbGVu KTsKKysJU0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7CisrCWxlbj1TSEEyNTZfRElHRVNUX0xF TkdUSDsKKysJfQorKyAgICBlbHNlCisrCW1lbWNweShrZXltZCxrZXksbGVuKTsKKysgICAgbWVt c2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7CisrCisrICAgIGZv cihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQorKwlwYWRbaV09MHgzNl5rZXlt ZFtpXTsKKysgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShtZF9j dHgscGFkLFNIQTI1Nl9DQkxPQ0spOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01E X0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4NWNea2V5bWRbaV07CisrICAgIFNIQTI1Nl9Jbml0 KG9fY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7Cisr ICAgIH0KKysKKytzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNIQTI1 Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKKysgICAgeworKyAgICB1bnNpZ25lZCBj aGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCisrICAgIFNIQTI1Nl9GaW5hbChidWYs bWRfY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7CisrICAg IFNIQTI1Nl9GaW5hbChtZCxvX2N0eCk7CisrICAgIH0KKysKKysjZW5kaWYKKysKKytpbnQgbWFp bihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysg ICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsK KysgICAgaW50IG4sYmluYXJ5PTA7CisrCisrICAgIGlmKGFyZ2MgPCAyKQorKwl7CisrCWZwcmlu dGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysK KysgICAgbj0xOworKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5IikpCisrCXsKKysJ bisrOworKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KKysJfQor KworKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKKysJeworKwlGSUxFICpmPWZvcGVuKGFyZ3Zb bl0sInJiIik7CisrCVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OworKwl1bnNpZ25lZCBjaGFyIG1k W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysJaW50IGk7CisrCisrCWlmKCFmKQorKwkgICAgewor KwkgICAgcGVycm9yKGFyZ3Zbbl0pOworKwkgICAgZXhpdCgyKTsKKysJICAgIH0KKysKKysJaG1h Y19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7CisrCWZvciggOyA7ICkKKysJICAgIHsKKysJICAg IGNoYXIgYnVmWzEwMjRdOworKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1Zixm KTsKKysKKysJICAgIGlmKGwgPT0gMCkKKysJCXsKKysJCWlmKGZlcnJvcihmKSkKKysJCSAgICB7 CisrCQkgICAgcGVycm9yKGFyZ3Zbbl0pOworKwkJICAgIGV4aXQoMyk7CisrCQkgICAgfQorKwkJ ZWxzZQorKwkJICAgIGJyZWFrOworKwkJfQorKwkgICAgU0hBMjU2X1VwZGF0ZSgmbWRfY3R4LGJ1 ZixsKTsKKysJICAgIH0KKysJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7CisrCisrCWlm IChiaW5hcnkpCisrCSAgICB7CisrCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJR0VTVF9MRU5HVEgs MSxzdGRvdXQpOworKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KKysJ ICAgIH0KKysKKysvKglwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7ICovCisrCWZv cihpPTAgOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEggOyArK2kpCisrCSAgICBwcmludGYoIiUw MngiLG1kW2ldKTsKKysJcHJpbnRmKCJcbiIpOworKwl9CisrI2VuZGlmCisrICAgIHJldHVybiAw OworKyAgICB9CisrCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBz X3Rlc3Rfc3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9z dWl0ZS5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMu ZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NjM1MjQ2NCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ2 MzUyNDY0ICswMjAwCitAQCAtMCwwICsxLDU4OCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICoKKysgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZl ciBmb3IgdGhlIEZJUFMtMTQwIHRlc3RpbmcKKysgKiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2 YWxpZGF0aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCisrICogT3BlblNTTCBs aWJyYXJ5IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhpYworKyAq IGZ1bmN0aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxp YmVyYXRlbHkKKysgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFzaAorKyAq CisrICogQ29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCisrICoKKysgKi8KKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9k aC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQ UworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisrICAgIHsKKysgICAgcHJpbnRm KCJObyBGSVBTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrICAgIH0KKysjZWxzZQor KworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysK KysvKiBBRVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2ZXJpZnkgcmVz dWx0IG1hdGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0CisrKi8KKytzdGF0aWMgaW50IEZJUFNfYWVz X3Rlc3Qodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFsx Nl07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOworKwl1bnNpZ25lZCBjaGFyIGtleVsxNl0g PSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKKysJdW5zaWduZWQg Y2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOworKwlFVlBfQ0lQSEVSX0NUWCBj dHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisrCQln b3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7CisrCWlm IChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5V TEwsIDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0 bXAsIDE2KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCisrCQlnb3RvIGVy cjsKKysJcmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwor KwlyZXR1cm4gcmV0OworKwl9CisrCisrc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2b2lkKQor Kwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOworKwl1bnNpZ25l ZCBjaGFyIGNpdG1wWzhdOworKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsgMSwyLDMsNCw1 LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCisrCQkgICAgICAgICAgICAgIDE5 LDIwLDIxLDIyLDIzLDI0fTsKKysgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10gPSB7ICdl JywgJ3QnLCAnYScsICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07CisrCUVWUF9DSVBIRVJfQ1RY IGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0 X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisr CQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4KTsKKysJ aWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXks IE5VTEwsIDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwg Y2l0bXAsIDgpOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQorKwkJZ290byBl cnI7CisrCXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsK KysJcmV0dXJuIHJldDsKKysJfQorKworKy8qCisrICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBz aWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19kc2Ff dGVzdChpbnQgYmFkKQorKyAgICB7CisrICAgIERTQSAqZHNhID0gTlVMTDsKKysgICAgRVZQX1BL RVkgcGs7CisrICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRsYyI7CisrICAg IHVuc2lnbmVkIGNoYXIgYnVmWzYwXTsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIGlu dCByID0gMDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKworKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKKysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAgZHNhID0gRFNBX25ldygpOwor KyAgICBpZiAoIWRzYSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFt ZXRlcnNfZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisrCWdvdG8gZW5kOwor KyAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJZ290byBlbmQ7CisrICAgIGlmIChi YWQpCisrCSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOworKworKyAgICBway50eXBl ID0gRVZQX1BLRVlfRFNBOworKyAgICBway5wa2V5LmRzYSA9IGRzYTsKKysKKysgICAgaWYgKCFF VlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysg ICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisr CWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZw aykpCisrCWdvdG8gZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBF VlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0 ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICByID0g RVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysgICAg RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKGRzYSkKKysgIAkgIERTQV9mcmVl KGRzYSk7CisrICAgIGlmIChyICE9IDEpCisrCXJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysg ICAgfQorKworKy8qCisrICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5w dXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQor KyAgICB7CisrICAgIFJTQSAqa2V5OworKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0ZXh0W10g PSAiZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKysgICAgdW5z aWduZWQgaW50IHNsZW47CisrICAgIEJJR05VTSAqYm47CisrICAgIEVWUF9NRF9DVFggbWN0eDsK KysgICAgRVZQX1BLRVkgcGs7CisrICAgIGludCByID0gMDsKKysKKysgICAgRVJSX2NsZWFyX2Vy cm9yKCk7CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGtleSA9IFJTQV9uZXco KTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFrZXkgfHwgIWJuKQorKwlyZXR1cm4g MDsKKysgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJhdGVf a2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4p OworKyAgICBpZiAoYmFkKQorKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKKysKKysgICAg cGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKKysgICAgcGsucGtleS5yc2EgPSBrZXk7CisrCisrICAg IGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290byBl bmQ7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2Yo aW5wdXRfcHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwo Jm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCisrCWdvdG8gZW5kOworKworKyAgICBpZiAoIUVWUF9W ZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAg IGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9w dGV4dCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgs IGJ1Ziwgc2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1j dHgpOworKyAgICBpZiAoa2V5KQorKyAgCSAgICBSU0FfZnJlZShrZXkpOworKyAgICBpZiAociAh PSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEExOiBn ZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgor KyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTFf dGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5H VEhdID0KKysgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywgMHgxYSwgMHgx ZSwgMHg4ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwgMHgyYywg MHhlOCwgMHhiMywgMHhjNSwgMHgxOCB9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0 YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsK KysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6 ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKKysgICAgewor KyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQorKwl7MHhm NSwgMHg1MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAw eGM5LCAweDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkxLAorKwkgMHg2LCAweGVjLCAweDhlLCAw eDExLCAweDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2LCAweDUw LCAweDRmLCAweDQ3LCAweDU3fTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJp c2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Cisr CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVv ZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKKysgICAgewor KyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0gPQorKwl7MHg5 OSwgMHhjOSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwgMHg4OCwg MHg1ZiwgMHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKKysJIDB4MTYsIDB4MWYsIDB4M2Qs IDB4ZjQsIDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsIDB4ZDAsIDB4 ZTcsIDB4MGIsIDB4OTQsIDB4NGEsCisrCSAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAweDIwLCAw eDA2LCAweGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAweGQ5LCAweDQw LCAweDIyLAorKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgyNywgMHhm ZSwgMHhiZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhM307CisrICAg IHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNo YXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9z aGE1MTIoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXpl b2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKwor Ky8qIEhNQUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRp YyBpbnQgRklQU19obWFjX3NoYTFfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBr ZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0 ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4 NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEsIDB4ZWEs IDB4ZWEsIDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCisrCSAweGIyLCAweGZiLCAweGVj LCAweGM2fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysg ICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAg IGlmICghSE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxv dXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4p KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1B Qy1TSEEyMjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJl IHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50 IEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlb XSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0 IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4NzUs IDB4NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4 YmUsIDB4MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCisrCSAweGU1LCAweDYyLCAweDQ5LCAw eGI2LCAweDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5fTsKKysK KysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQg aW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhF VlBfc2hhMjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVu KSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTI1Njog Z2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24K KysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFj X3NoYTI1Nl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9u cmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1 bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhlOSwgMHgxNywgMHhj MSwgMHg3YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwgMHgwMiwg MHhmNSwgMHg3MiwgMHgzMywgMHg4NywKKysJIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2IsIDB4N2Us IDB4YTgsIDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYsIDB4ZGEsIDB4 MjQsIDB4ZjR9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwor KyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysg ICAgaWYgKCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYp LTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0 bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8q IEhNQUMtU0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29t cGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGlj IGludCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIg a2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUg dGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsw eGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2LCAweDYz LCAweDA4LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAorKwkgMHhlMiwgMHhkZiwgMHhm OCwgMHhmZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgxYiwgMHhhYywg MHhiMCwgMHgwNywgMHgzOSwgMHgwOCwKKysJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYs IDB4ZDYsIDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4YjgsIDB4OWIsIDB4 ODgsIDB4MWN9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwor KyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysg ICAgaWYgKCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYp LTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0 bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8q IEhNQUMtU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29t cGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGlj IGludCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIg a2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUg dGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsw eGNkLCAweDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFm LCAweGYzLCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAorKwkgMHhmNywgMHhkMSwgMHg1 MSwgMHg5NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwgMHhhZCwg MHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKKysJIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUsIDB4ZWEs IDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEsIDB4N2YsIDB4 ZWIsIDB4OWMsCisrCSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAw eGVlLCAweDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUzfTsKKysK KysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQg aW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhF VlBfc2hhNTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVu KSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysKKysvKiBESDogZ2VuZXJh dGUgc2hhcmVkIHBhcmFtZXRlcnMKKysqLworK3N0YXRpYyBpbnQgZGhfdGVzdCgpCisrICAgIHsK KysgICAgREggKmRoOworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgZGggPSBGSVBTX2Ro X25ldygpOworKyAgICBpZiAoIWRoKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKCFESF9nZW5lcmF0 ZV9wYXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEZJ UFNfZGhfZnJlZShkaCk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogWmVyb2l6ZQor KyovCisrc3RhdGljIGludCBaZXJvaXplKCkKKysgICAgeworKyAgICBSU0EgKmtleTsKKysgICAg QklHTlVNICpibjsKKysgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAorKwl7IDB4NDgs IDB4NTAsIDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4 N2YsIDB4ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKKysgICAgaW50IGksIG47CisrCisr ICAgIGtleSA9IEZJUFNfcnNhX25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAgICBpZiAo IWtleSB8fCAhYm4pCisrCXJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOwor KyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1 cm4gMDsKKysgICAgQk5fZnJlZShibik7CisrICAgIAorKyAgICBuID0gQk5fbnVtX2J5dGVzKGtl eS0+ZCk7CisrICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRlIGtleVxu Iiwgbik7CisrICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxuIik7Cisr ICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysgICAgQk5fcmFuZChrZXktPmQsbio4 LC0xLDApOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxuIik7Cisr ICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysKKysgICAgcHJpbnRmKCJcdGNoYXIg YnVmZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IoaSA9IDA7 IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Cisr ICAgICAgICBwcmludGYoIlxuIik7CisrICAgIFJBTkRfYnl0ZXModXNlcmtleSwgc2l6ZW9mIHVz ZXJrZXkpOworKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92ZXJ3cml0aW5n OiBcblx0XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHBy aW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAgICAgcHJpbnRmKCJcbiIpOworKworKyAg ICByZXR1cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBpbnQgRXJyb3I7CisrY29uc3QgY2hhciAq IEZhaWwoY29uc3QgY2hhciAqbXNnKQorKyAgICB7CisrICAgIGRvX3ByaW50X2Vycm9ycygpOwor KyAgICBFcnJvcisrOworKyAgICByZXR1cm4gbXNnOyAKKysgICAgfQorKworK2ludCBtYWluKGlu dCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrCisrICAgIGludCBkb19jb3JydXB0X3JzYV9r ZXlnZW4gPSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOworKyAgICBpbnQgYmFkX3JzYSA9 IDAsIGJhZF9kc2EgPSAwOworKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKKysgICAgaW50IG5v X2V4aXQgPSAwOworKworKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGljYXRpb25c blxuIik7CisrCisrICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUsIGlmIGFu eSAqLworKyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOworKworKyAgICBpZiAoYXJn dlsxXSkgeworKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLworKyAgICAgICAgaWYg KCFzdHJjbXAoYXJndlsxXSwgImFlcyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2Fl cygpOworKyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJkZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKKysgICAgICAg ICAgICBwcmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRl ZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2Ei KSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKKysgICAgICAgICAgICBwcmlu dGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3Jy dXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi cnNhIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7CisrICAgICAgICAgICAg cHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGgg Y29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgInJzYWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24g YW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7CisrCSAg ICBiYWRfcnNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVwdF9yc2Ffa2V5 Z2VuID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXln ZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXki KSkgeworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1 cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAgYmFkX2RzYSA9 IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAiZHNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDE7Cisr CSAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlv biBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsK KysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7CisrICAgICAg ICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKKysgICAgICAgICAgICBwcmludGYoIlNIQS0xIGhh c2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysJfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJybmciKSkgeworKwkgICAgRklQU19jb3JydXB0X3JuZygpOworKwl9IGVsc2UgaWYgKCFz dHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikpIHsKKysJICAgIGRvX3JuZ19zdGljayA9IDE7Cisr CSAgICBub19leGl0ID0gMTsKKysJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250 aW51b3VzIHRlc3QuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmlu dGYoIkJhZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOworKyAgICAgICAgICAgIGV4aXQo MSk7CisrICAgICAgICB9CisrCWlmICghbm9fZXhpdCkgeworKyAgICAgICAgCWlmICghRklQU19t b2RlX3NldCgxKSkgeworKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAgIAkgICAg cHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKKysJCSAgICBleGl0KDEpOwor KwkJfQorKyAgICAgICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIp OworKyAgICAgICAgCWV4aXQoMCk7CisrCX0KKysgICAgfQorKworKyAgICAvKiBOb24tQXBwcm92 ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCIxLiBOb24t QXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7CisrICAgIHByaW50 ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBkaF90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAv KiBQb3dlci11cCBzZWxmIHRlc3QKKysgICAgKi8KKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7Cisr ICAgIHByaW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOworKyAgICBp ZiAoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAg ICBwcmludGYoRmFpbCgiRkFJTEVEIVxuIikpOworKwlleGl0KDEpOworKwl9CisrICAgIHByaW50 Zigic3VjY2Vzc2Z1bFxuIik7CisrICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4pCisrICAg ICAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRf cnNhX2tleWdlbikKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigpOworKyAg ICBpZiAoZG9fcm5nX3N0aWNrKQorKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7CisrCisr ICAgIC8qIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCIz LiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19hZXNf dGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAg LyogUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8K KysgICAgcHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlw dGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBERVMtQ0JDIGVuY3J5 cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlw dGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19kZXMzX3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIERTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRm KCI2LiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7Cisr ICAgIHByaW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS0xIGhhc2gKKysgICAgKi8KKysgICAg cHJpbnRmKCI3YS4gU0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhMV90ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBT SEEtMjU2IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNoLi4uIik7 CisrICAgIHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFp bCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTUxMiBoYXNoCisrICAgICovCisrICAg IHByaW50ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhNTEy X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAg IC8qIEhNQUMtU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdkLiBITUFDLVNIQS0x IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0yMjQg aGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4uLiIpOwor KyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjU2IGhhc2gKKysgICAg Ki8KKysgICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJpbnRm KCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxF RCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCisrICAgICovCisrICAgIHBy aW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFj X3NoYTM4NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwor KworKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdoLiBI TUFDLVNIQS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGE1MTJfdGVz dCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyog Tm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHByaW50 ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwor KyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHBy aW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDogRmFp bCgiZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgLyogWmVyb2l6YXRpb24KKysg ICAgKi8KKysgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOworKyAgICBwcmludGYo IFplcm9pemUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDogRmFpbCgi XHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAgICBwcmludGYoIlxuQWxsIHRlc3Rz IGNvbXBsZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOworKyAgICByZXR1cm4gRXJyb3Ig PyAxIDogMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9NYWtlZmls ZQorLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMJMjAxMi0wNy0x MiAyMTo0OToyNS4zNDYzNTI0NjQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlw cy9NYWtlZmlsZQkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NjM1MjQ2NCArMDIwMAorQEAgLTAsMCAr MSwzNDAgQEAKKysjCisrIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCisrIworKworK0RJ Uj0JZmlwcworK1RPUD0JLi4vLi4KKytDQz0JY2MKKytJTkNMVURFUz0KKytDRkxBRz0tZworK01B S0VGSUxFPQlNYWtlZmlsZQorK0FSPQkJYXIgcgorKworK0NGTEFHUz0gJChJTkNMVURFUykgJChD RkxBRykKKysKKytHRU5FUkFMPU1ha2VmaWxlCisrVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBz X3JhbmR0ZXN0LmMKKytBUFBTPQorKworK1BST0dSQU09IGZpcHNfc3RhbmRhbG9uZV9obWFjCisr RVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQorKworK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKKytM SUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19z ZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKKysgICAgZmlwc19yc2Ffc2VsZnRlc3Qu YyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3Jh bmQuYyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlwc19wb3N0LmMgZmlwc19kcmJnX2N0ci5j IGZpcHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMuYyBcCisrICAgIGZpcHNfZHJiZ19saWIu YyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFuZF9saWIuYyBc CisrICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCisrCisrTElC T0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2htYWNfc2Vs ZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8g Zmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5k Lm8gXAorKyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJiZ19jdHIubyBm aXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAorKyAgICBmaXBzX2RyYmdfbGliLm8g Zmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRfbGliLm8gXAor KyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubworKworK0xJQkNS WVBUTz0tTC4uIC1sY3J5cHRvCisrCisrU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25lX2ht YWMuYworKworK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKKytIRUFERVI9CSQoRVhIRUFE RVIpCisrCisrQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKKysKKyt0b3A6Cisr CShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKKysK KythbGw6CWxpYiBleGUKKysKKytsaWI6CSQoTElCT0JKKQorKwkkKEFSKSAkKExJQikgJChMSUJP QkopCisrCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgorKwlAdG91Y2ggbGli CisrCisrZXhlOgkkKEVYRSkKKysKKytmaWxlczoKKysJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxl cy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KKysKKytsaW5rczoKKysJQCQoUEVSTCkgJChU T1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQorKwlA JChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCisrCUAkKFBF UkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKKysKKytpbnN0YWxs OgorKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2Vm aWxlLi4uCisrCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlz dCA7IFwKKysJZG8gIFwKKysJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkv aW5jbHVkZS9vcGVuc3NsLyQkaTsgXAorKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElO U1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAorKwlkb25lOworKworK3RhZ3M6Cisr CWN0YWdzICQoU1JDKQorKworK3Rlc3RzOgorKworK2xpbnQ6CisrCWxpbnQgLURMSU5UICQoSU5D TFVERVMpICQoU1JDKT5mbHVmZgorKworK2RlcGVuZDoKKysJQFsgLW4gIiQoTUFLRURFUEVORCki IF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCisrCSQoTUFLRURFUEVORCkg LS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykK KysKKytkY2xlYW46CisrCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBM SU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKKysJbXYg LWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCisrCisrY2xlYW46CisrCXJtIC1mICoubyAqLm9i aiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCisrCisrJChFWEUp OiAkKFBST0dSQU0pLm8KKysJRklQU19TSEFfQVNNPSIiOyBmb3IgaSBpbiAkKFNIQTFfQVNNX09C Sikgc2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vc2hhLyQkaSIg OyBkb25lOyBcCisrCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKFBST0dSQU0pLm8gJCRGSVBTX1NI QV9BU00KKysKKysjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVu ZHMgb24gaXQuCisrCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwcy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAor K2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9obWFjLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzLmMgZmlwc19sb2NsLmgKKytmaXBzX2Flc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisr Zmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBz X2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfYWVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2Fl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfYWVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfYWVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19hZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19hZXNfc2VsZnRl c3QuYworK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNr LmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aCBmaXBzX2Rlc19zZWxmdGVzdC5jCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19jdHIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNf ZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX2Ry YmdfY3RyLm86IGZpcHNfZHJiZ19jdHIuYyBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfaGFz aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2Ry YmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2hhc2gu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX2hhc2gubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAor K2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisr Zmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBz X2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCBmaXBzX2RyYmdfaGFzaC5jCisrZmlwc19kcmJnX2hhc2gubzogZmlwc19yYW5kX2xjbC5o CisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2ht YWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAor K2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2Zp cHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2htYWMuYworK2ZpcHNfZHJiZ19obWFjLm86 IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK KytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv aG1hYy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmgKKytmaXBzX2RyYmdfbGliLm86IGZpcHNfZHJiZ19saWIuYyBmaXBzX2xvY2wuaCBmaXBz X3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytm aXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19yYW5kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK KytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJi Z19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJn X3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfcmFu ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcmFuZC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK KytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBz X2RyYmdfcmFuZC5jCisrZmlwc19kcmJnX3JhbmQubzogZmlwc19yYW5kX2xjbC5oCisrZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o CisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisr Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdf c2VsZnRlc3QuYworK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiBmaXBzX2RyYmdfc2VsZnRlc3QuaCBm aXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHNhX3NlbGZ0ZXN0LmMKKytmaXBzX2RzYV9zZWxm dGVzdC5vOiBmaXBzX2xvY2wuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfaG1hY19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2htYWNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2htYWNfc2VsZnRlc3QuYworK2ZpcHNfcG9z dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorK2ZpcHNfcG9zdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlw c19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHNfcmFuZC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFj LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisr Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19w b3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5k LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2Zp cHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaCBm aXBzX3Bvc3QuYworK2ZpcHNfcmFuZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Flcy5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorK2ZpcHNfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o CisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisr Zmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yYW5kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oCisrZmlwc19yYW5kLm86IGZpcHNfbG9jbC5oIGZpcHNfcmFuZC5jCisrZmlwc19yYW5k X2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oCisrZmlwc19y YW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0 by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlw c19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcmFuZF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19yYW5k X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JhbmRfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oCisrZmlwc19yYW5kX2xpYi5vOiBmaXBzX3JhbmRfbGliLmMKKytmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hc24xLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytm aXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisr Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3Jh bmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5oCisr Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IGZpcHNfcmFuZF9zZWxmdGVzdC5jCisrZmlwc19yc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcnNhLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIGZpcHNfcnNhX3NlbGZ0ZXN0LmMKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcnNhX3g5 MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBz X3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNf cnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yc2Ff eDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JzYS5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNr LmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBm aXBzX3JzYV94OTMxZy5jCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3NoYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3NoYV9zZWxmdGVz dC5jCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vaG1hYy9obWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v aG1hYy9obWFjLmMuZmlwcwkyMDExLTA2LTEyIDE3OjA3OjI2LjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9obWFjL2htYWMuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0 NjM1MjQ2NCArMDIwMAorQEAgLTgxLDExICs4MSw2IEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19D VFggKmN0eCwgY29uc3Qgdm8KKyAJCQlFVlBlcnIoRVZQX0ZfSE1BQ19JTklUX0VYLCBFVlBfUl9E SVNBQkxFRF9GT1JfRklQUyk7CisgCQkJcmV0dXJuIDA7CisgCQkJfQorLQkJLyogT3RoZXIgYWxn b3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwKKy0JCSAqIHZp YSBGSVBTX2htYWNfaW5pdF9leCgpLgorLQkJICovCistCQlpZiAoIWltcGwgJiYgIWN0eC0+aV9j dHguZW5naW5lKQorLQkJCXJldHVybiBGSVBTX2htYWNfaW5pdF9leChjdHgsIGtleSwgbGVuLCBt ZCwgTlVMTCk7CisgCQl9CisgI2VuZGlmCisgCitAQCAtOTksNiArOTQsMTMgQEAgaW50IEhNQUNf SW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bworIAorIAlpZiAoa2V5ICE9IE5VTEwpCisg CQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9kZSgpICYmICEobWQtPmZs YWdzICYgRVZQX01EX0ZMQUdfRklQUykKKysJCSYmICghKGN0eC0+bWRfY3R4LmZsYWdzICYgRVZQ X01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJIHx8ICEoY3R4LT5pX2N0eC5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+b19jdHguZmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSkKKysJCQlnb3RvIGVycjsKKysj ZW5kaWYKKyAJCXJlc2V0PTE7CisgCQlqPUVWUF9NRF9ibG9ja19zaXplKG1kKTsKKyAJCU9QRU5T U0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKK0BAIC0xNTUsMTAgKzE1Nyw2 IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAorIAorIGludCBITUFD X1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qg bGVuKQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0 eC0+aV9jdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNfaG1hY191cGRhdGUoY3R4LCBkYXRhLCBs ZW4pOworLSNlbmRpZgorIAlyZXR1cm4gRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5tZF9jdHgsZGF0 YSxsZW4pOworIAl9CisgCitAQCAtMTY2LDEwICsxNjQsNiBAQCBpbnQgSE1BQ19GaW5hbChITUFD X0NUWCAqY3R4LCB1bnNpZ25lZCBjCisgCXsKKyAJdW5zaWduZWQgaW50IGk7CisgCXVuc2lnbmVk IGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAo RklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNfaG1hY19m aW5hbChjdHgsIG1kLCBsZW4pOworLSNlbmRpZgorIAorIAlpZiAoIUVWUF9EaWdlc3RGaW5hbF9l eCgmY3R4LT5tZF9jdHgsYnVmLCZpKSkKKyAJCWdvdG8gZXJyOworQEAgLTIwOSwxMyArMjAzLDYg QEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQworIAorIHZvaWQgSE1B Q19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJeworLQkJRklQU19o bWFjX2N0eF9jbGVhbnVwKGN0eCk7CistCQlyZXR1cm47CistCQl9CistI2VuZGlmCisgCUVWUF9N RF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7CisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5v X2N0eCk7CisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5tZF9jdHgpOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL21kMi9tZDJfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21kMi9tZDJfZGdz dC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDYzNTI0 NjQgKzAyMDAKK0BAIC02Miw2ICs2MiwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAKKyBjb25zdCBjaGFyIE1EMl92 ZXJzaW9uW109Ik1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTExNiw3ICsxMjEs NyBAQCBjb25zdCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQorIAkJcmV0dXJuKCJtZDIoaW50KSIp OworIAl9CisgCistZmlwc19tZF9pbml0KE1EMikKKytub25maXBzX21kX2luaXQoTUQyKQorIAl7 CisgCWMtPm51bT0wOworIAltZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL21kNC9tZDRfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21k NC9tZDRfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0My4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMJMjAxMi0wNy0xMiAyMTo0OToy NS4zNDYzNTI0NjQgKzAyMDAKK0BAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNp b25bXT0iTUQ0IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25n KTB4OThiYWRjZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1 NDc2TAorIAorLWZpcHNfbWRfaW5pdChNRDQpCisrbm9uZmlwc19tZF9pbml0KE1ENCkKKyAJewor IAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1JTklUX0RBVEFfQTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tZDUvbWQ1 X2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ3 MzUyNDg3ICswMjAwCitAQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109 Ik1ENSIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4 YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwK KyAKKy1maXBzX21kX2luaXQoTUQ1KQorK25vbmZpcHNfbWRfaW5pdChNRDUpCisgCXsKKyAJbWVt c2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL21kYzIvbWRjMmRnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tZGMyL21kYzJk Z3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDcz NTI0ODcgKzAyMDAKK0BAIC03Niw3ICs3Niw3IEBACisgCQkJKigoYykrKyk9KHVuc2lnbmVkIGNo YXIpKCgobCk+PjI0TCkmMHhmZikpCisgCisgc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJfQ1RY ICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7CistZmlwc19tZF9pbml0 KE1EQzIpCisrbm9uZmlwc19tZF9pbml0KE1EQzIpCisgCXsKKyAJYy0+bnVtPTA7CisgCWMtPnBh ZF90eXBlPTE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vb19maXBzLmMuZmlwcyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vb19maXBzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v b19maXBzLmMuZmlwcwkyMDEyLTA0LTIwIDE2OjQyOjU0LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9vX2ZpcHMuYwkyMDEyLTA3LTEyIDIwOjM5OjE5LjAwMDAwMDAw MCArMDIwMAorQEAgLTc5LDYgKzc5LDggQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IHIpCisgI2lm bmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNTCisgI2RlZmluZSBGSVBTX0FVVEhfVVNFUl9QQVNTCSJE ZWZhdWx0IEZJUFMgQ3J5cHRvIFVzZXIgUGFzc3dvcmQiCisgI2VuZGlmCisrCWlmIChGSVBTX21v ZHVsZV9tb2RlKCkpIC8qIGNhbiBiZSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IE9QRU5TU0xf aW5pdCgpICovCisrCQlyZXR1cm4gMTsKKyAJaWYgKCFGSVBTX21vZHVsZV9tb2RlX3NldChyLCBG SVBTX0FVVEhfVVNFUl9QQVNTKSkKKyAJCXJldHVybiAwOworIAlpZiAocikKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9v X2luaXQuYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9vX2luaXQuYy5maXBzCTIwMTEtMDUt MjYgMTY6MTk6MTkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL29f aW5pdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ3MzUyNDg3ICswMjAwCitAQCAtNTUsMjggKzU1 LDYzIEBACisgI2luY2x1ZGUgPGVfb3MuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysj aW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysKKysjZGVmaW5lIEZJUFNf TU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiCisrCisrc3Rh dGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKKysJeworKwljaGFyIGJ1ZlsyXSA9ICIwIjsK KysJaW50IGZkOworKwkKKysJaWYgKGdldGVudigiT1BFTlNTTF9GT1JDRV9GSVBTX01PREUiKSAh PSBOVUxMKQorKwkJeworKwkJYnVmWzBdID0gJzEnOworKwkJfQorKwllbHNlIGlmICgoZmQgPSBv cGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+PSAwKQorKwkJeworKwkJd2hp bGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Cisr CQljbG9zZShmZCk7CisrCQl9CisrCS8qIEZhaWx1cmUgcmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3 aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90CisrCSAqIHN3aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4g V2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCisrCSAqIG90aGVyd2lzZS4gCisrCSAqLwor KwkKKysJaWYgKGJ1ZlswXSA9PSAnMScpCisrCQl7CisrCQlGSVBTX21vZGVfc2V0KDEpOworKwkJ fQorKwl9CisgI2VuZGlmCisgCisgLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9wZW5TU0wgaW5p dGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KKyAgKiBDdXJyZW50bHkgb25seSBzZXRzIEZJUFMgY2Fs bGJhY2tzCisgICovCisgCistdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKKyt2b2lkIE9QRU5TU0xf aW5pdF9saWJyYXJ5KHZvaWQpCisgCXsKKyAJc3RhdGljIGludCBkb25lID0gMDsKKyAJaWYgKGRv bmUpCisgCQlyZXR1cm47CisgCWRvbmUgPSAxOworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQ U19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xvY2ssIENSWVBUT19hZGRfbG9jayk7Cist CUZJUFNfc2V0X2Vycm9yX2NhbGxiYWNrcyhFUlJfcHV0X2Vycm9yLCBFUlJfYWRkX2Vycm9yX3Zk YXRhKTsKKy0JRklQU19zZXRfbWFsbG9jX2NhbGxiYWNrcyhDUllQVE9fbWFsbG9jLCBDUllQVE9f ZnJlZSk7CisgCVJBTkRfaW5pdF9maXBzKCk7CisrCWluaXRfZmlwc19tb2RlKCk7CisgI2VuZGlm CisgI2lmIDAKKyAJZnByaW50ZihzdGRlcnIsICJDYWxsZWQgT1BFTlNTTF9pbml0XG4iKTsKKyAj ZW5kaWYKKyAJfQorIAorK3ZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCisrCXsKKysJT1BFTlNTTF9p bml0X2xpYnJhcnkoKTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL29wZW5z c2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgor LS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAwNS0xMi0x NiAxMTozNzoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vb3Bl bnNzbGNvbmYuaC5pbgkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NzM1MjQ4NyArMDIwMAorQEAgLTEs NSArMSwyMCBAQAorIC8qIGNyeXB0by9vcGVuc3NsY29uZi5oLmluICovCisgCisrI2lmZGVmIE9Q RU5TU0xfRE9JTkdfTUFLRURFUEVORAorKworKy8qIEluY2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0 aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQorKyAqIHRo YXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVuZC4KKysgKgorKyAqIFtPdXIgIm1ha2Ug ZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNlIGFjdHVhbCBidWls ZCBzZXR0aW5ncworKyAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92 ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQorKyAqLworKworKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCisrI2RlZmluZSBPUEVOU1NMX0ZJUFMKKysjZW5kaWYKKysKKysj ZW5kaWYKKysKKyAvKiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLworICN1bmRlZiBJMzg2X09OTFkK KyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMKKy0tLSBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzCTIwMDktMDMtMDkgMTQ6MDg6MDQuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMJMjAx Mi0wNy0xMiAyMTo0OToyNS4zNDczNTI0ODcgKzAyMDAKK0BAIC01OSw2ICs1OSwxMCBAQAorICNp bmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxvcGVu c3NsL3BrY3MxMi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisrCisgCisgCisgc3RhdGljIGludCBwa2NzMTJfYWRkX2JhZyhTVEFD S19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtDUzEyX1NBRkVCQUcgKmJhZyk7CitAQCAt OTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3JlYXRlKGNoYXIgKnBhc3MsIGNoYXIgKgor IAorIAkvKiBTZXQgZGVmYXVsdHMgKi8KKyAJaWYgKCFuaWRfY2VydCkKKysJCXsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkpCisrCQkJbmlkX2NlcnQgPSBOSURfcGJl X1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKKysJCWVsc2UKKysjZW5kaWYKKyAJCW5p ZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKKysJCX0KKyAJaWYgKCFu aWRfa2V5KQorIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNf Q0JDOworIAlpZiAoIWl0ZXIpCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcmFuZC9t ZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMKKy0tLSBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDExLTAxLTI2IDE1OjU1 OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yYW5kL21kX3Jh bmQuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NzM1MjQ4NyArMDIwMAorQEAgLTM4OSw3ICszODks MTAgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaAorIAlDUllQVE9f d191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOworIAljcnlwdG9fbG9ja19yYW5kID0gMTsKKyAK Ky0JaWYgKCFpbml0aWFsaXplZCkKKysJLyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFsIGVudHJv cHkgaW4gRklQUyBtb2RlLCBkcmJnIHByb3ZpZGVzIHRoZSAKKysJICogZXhwYW5zaW9uCisrCSAq LworKwlpZiAoIWluaXRpYWxpemVkIHx8IEZJUFNfbW9kdWxlX21vZGUoKSkgCisgCQl7CisgCQlS QU5EX3BvbGwoKTsKKyAJCWluaXRpYWxpemVkID0gMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yYW5kL3JhbmQu aAorLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzCTIwMTItMDctMTIg MjE6NDk6MjQuNzY5MzM5NDgzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JhbmQv cmFuZC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ4MzUyNTA5ICswMjAwCitAQCAtMTMzLDE1ICsx MzMsMzMgQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7CisgLyogRXJyb3IgY29k ZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8K KysjZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4CisrI2RlZmlu ZSBSQU5EX0ZfRklQU19SQU5ECQkJCSAxMDMKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfQllU RVMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEwNgorKyNk ZWZpbmUgUkFORF9GX0ZJUFNfWDkzMV9TRVRfRFQJCQkJIDEwNgorKyNkZWZpbmUgUkFORF9GX0ZJ UFNfU0VUX0RUCQkJCSAxMDQKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQJCQkg MTA3CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEwNQorICNkZWZpbmUg UkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwMQorLSNkZWZpbmUgUkFORF9GX1JBTkRf SU5JVF9GSVBTCQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJCQkgMTA5 CisgI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCisgCisgLyogUmVhc29u IGNvZGVzLiAqLworLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDEw MgorLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMDMKKy0jZGVm aW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTAxCisrI2RlZmluZSBSQU5E X1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTEyCisrI2RlZmluZSBSQU5EX1JfRVJST1Jf SU5TVEFOVElBVElOR19EUkJHCQkJIDExMworKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhP RAkJCQkgMTA1CisrI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2CisrI2Rl ZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDExMQorKyNkZWZpbmUgUkFO RF9SX05PX0tFWV9TRVQJCQkJIDEwNworKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9U T09fTVVDSAkJCSAxMDEKKysjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKKysjZGVm aW5lIFJBTkRfUl9QUk5HX0tFWUVECQkJCSAxMDkKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9S RUtFWUVECQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMK KyAjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAorKyNkZWZpbmUgUkFORF9S X1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkJCSAxMTAKKysjZGVmaW5lIFJBTkRfUl9QUk5H X1NUVUNLCQkJCSAxMDQKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JpcGVt ZC9ybWRfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NC4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxMi0wNy0xMiAyMTo0 OToyNS4zNDgzNTI1MDkgKzAyMDAKK0BAIC03MCw3ICs3MCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYw X3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKKyAgICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVN RDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7CisgIyAgZW5kaWYKKyAK Ky1maXBzX21kX2luaXQoUklQRU1EMTYwKQorK25vbmZpcHNfbWRfaW5pdChSSVBFTUQxNjApCisg CXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9UklQRU1EMTYwX0E7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcyBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNh L3JzYV9jcnB0LmMuZmlwcwkyMDExLTA2LTAyIDIwOjIyOjQyLjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2NycHQuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjM0ODM1MjUwOSArMDIwMAorQEAgLTkwLDEwICs5MCw5IEBAIGludCBSU0FfcHJpdmF0ZV9lbmNy eXB0KGludCBmbGVuLCBjb25zdAorIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJewor ICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5m bGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9G TEFHX05PTl9GSVBTX0FMTE9XKSkKKysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJeworLQkJUlNBZXJyKFJTQV9GX1JTQV9QUklW QVRFX0VOQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKwkJUlNBZXJyKFJTQV9G X1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBT X01PREUpOworIAkJcmV0dXJuIC0xOworIAkJfQorICNlbmRpZgorQEAgLTExOCwxMCArMTE3LDkg QEAgaW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdQorIAkgICAgIFJTQSAq cnNhLCBpbnQgcGFkZGluZykKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNf bW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJ CSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJaWYoRklQU19t b2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJewor LQkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01F VEhPRCk7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9PUEVSQVRJ T05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAjZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMTEtMTAtMTkgMTY6NTg6NTkuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxMi0wNy0xMiAyMTo0 OToyNS4zNDgzNTI1MDkgKzAyMDAKK0BAIC0xMTQsNiArMTE0LDEwIEBACisgI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyAjaWZuZGVmIFJTQV9O VUxMCisgCitAQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9l YXlfbWV0aD17CisgCUJOX21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNob3VsZCBu b3QgdXNlIE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLworIAlSU0FfZWF5X2luaXQsCisgCVJTQV9l YXlfZmluaXNoLAorLQkwLCAvKiBmbGFncyAqLworKwlSU0FfRkxBR19GSVBTX01FVEhPRCwgLyog ZmxhZ3MgKi8KKyAJTlVMTCwKKyAJMCwgLyogcnNhX3NpZ24gKi8KKyAJMCwgLyogcnNhX3Zlcmlm eSAqLworQEAgLTE1OCw2ICsxNjIsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNy eXB0KGludCBmbAorIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVM TDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpKQorKwkJeworKwkJ aWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JT QV9FQVlfUFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQln b3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7Cisr CQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5T U0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9Q VUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTM2MSw2ICszODMs MjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgorIAlCSUdOVU0g KnVuYmxpbmQgPSBOVUxMOworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklW QVRFX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlyZXR1cm4gLTE7 CisrCQkJfQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9X KQorKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9E VUxVU19CSVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNS WVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9Cisr CQl9CisrI2VuZGlmCisrCisgCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBl cnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7CitAQCAt NTA0LDYgKzU0NCwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBm CisgCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5V TEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7Cisr CQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9S U0FfRUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJ CXJldHVybiAtMTsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9Q UklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0x OworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0g TlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0 KGN0eCk7CitAQCAtNjM5LDYgKzY5NywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2Rl Y3J5cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1O VUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJewor KwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0Zf UlNBX0VBWV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJ CWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05f RklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BV QkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsK KysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BF TlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfRUFZ X1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtODQ3LDEyICs5 MjMsMTIgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYworIAlpZiAo IUJOX21vZChyMCxwcjEscnNhLT5wLGN0eCkpIGdvdG8gZXJyOworIAorIAkvKiBJZiBwIDwgcSBp dCBpcyBvY2Nhc2lvbmFsbHkgcG9zc2libGUgZm9yIHRoZSBjb3JyZWN0aW9uIG9mCistICAgICAg ICAgKiBhZGRpbmcgJ3AnIGlmIHIwIGlzIG5lZ2F0aXZlIGFib3ZlIHRvIGxlYXZlIHRoZSByZXN1 bHQgc3RpbGwKKysJICogYWRkaW5nICdwJyBpZiByMCBpcyBuZWdhdGl2ZSBhYm92ZSB0byBsZWF2 ZSB0aGUgcmVzdWx0IHN0aWxsCisgCSAqIG5lZ2F0aXZlLiBUaGlzIGNhbiBicmVhayB0aGUgcHJp dmF0ZSBrZXkgb3BlcmF0aW9uczogdGhlIGZvbGxvd2luZworIAkgKiBzZWNvbmQgY29ycmVjdGlv biBzaG91bGQgKmFsd2F5cyogY29ycmVjdCB0aGlzIHJhcmUgb2NjdXJyZW5jZS4KKyAJICogVGhp cyB3aWxsICpuZXZlciogaGFwcGVuIHdpdGggT3BlblNTTCBnZW5lcmF0ZWQga2V5cyBiZWNhdXNl CistICAgICAgICAgKiB0aGV5IGVuc3VyZSBwID4gcSBbc3RldmVdCistICAgICAgICAgKi8KKysJ ICogdGhleSBlbnN1cmUgcCA+IHEgW3N0ZXZlXQorKwkgKi8KKyAJaWYgKEJOX2lzX25lZ2F0aXZl KHIwKSkKKyAJCWlmICghQk5fYWRkKHIwLHIwLHJzYS0+cCkpIGdvdG8gZXJyOworIAlpZiAoIUJO X211bChyMSxyMCxyc2EtPnEsY3R4KSkgZ290byBlcnI7CitAQCAtODk3LDYgKzk3Myw5IEBAIGVy cjoKKyAKKyBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKKyAJeworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyc2EtPmZs YWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsKKyAJcmV0 dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9lcnIu Yy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2Vyci5jCistLS0gb3BlbnNzbC0x LjAuMWMvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDExLTEwLTEwIDAxOjEzOjUwLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2Vyci5jCTIwMTIt MDctMTIgMjE6NDk6MjUuMzQ4MzUyNTA5ICswMjAwCitAQCAtMTIxLDYgKzEyMSw4IEBAIHN0YXRp YyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoUlNBX0ZfUlNB X1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9wdWJsaWNfZW5jcnlwdCJ9LAorIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhSU0FfRl9S U0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCisre0VSUl9GVU5DKFJT QV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9LAor K3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAorIHtF UlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAorIHtFUlJfRlVOQyhSU0FfRl9S U0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9 LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL3JzYS9yc2FfZ2VuLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9n ZW4uYy5maXBzCTIwMTEtMDYtMDkgMTU6MTg6MDcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDkzNTI1 MzEgKzAyMDAKK0BAIC02OSw2ICs2OSw3OCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgor ICNpZmRlZiBPUEVOU1NMX0ZJUFMKKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrCisrc3RhdGlj IGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9y c2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7CisrCX0K KysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisrCXsKKysJY29uc3QgdW5zaWduZWQg Y2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCXVuc2lnbmVkIGNoYXIg KmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50IGxlbiwgcmV0ID0gMDsKKysJRVZQ X1BLRVkgKnBrOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290 byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOworKworKwkvKiBQZXJmb3Jt IHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCS8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNlIGNvbnNp c3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrCWN0YnVmID0gT1BFTlNTTF9tYWxsb2Mo UlNBX3NpemUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQlnb3RvIGVycjsKKysKKysJbGVuID0g UlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNhLCBSU0Ff UEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gPD0gMCkKKysJCWdvdG8gZXJyOworKwkvKiBDaGVj ayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrCWlmICgobGVuID09IChz aXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCisrCQlnb3RvIGVy cjsKKysJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysKKysJaWYgKCFw dGJ1ZikKKysJCWdvdG8gZXJyOworKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3Ri dWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiAhPSAoc2l6ZW9m KHRicykgLSAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVtY21wKHB0YnVmLCB0YnMsIGxlbikp CisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJaWYgKCFwdGJ1ZikKKysJCWdvdG8g ZXJyOworKwkKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3NldF9zZWxm dGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxGSVBTX1JfUEFJ UldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAoY3RidWYpCisrCQlPUEVOU1NMX2Zy ZWUoY3RidWYpOworKwlpZiAocHRidWYpCisrCQlPUEVOU1NMX2ZyZWUocHRidWYpOworKwlpZiAo cGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorICNlbmRp ZgorIAorIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywg QklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOworQEAgLTgxLDcgKzE1Myw3IEBAIHN0YXRp YyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIGludCBSU0FfZ2VuZXJhdGVfa2V5 X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpCisg CXsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0 aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUo KSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKyAJCQkmJiAh KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CisgCQlSU0FlcnIo UlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CitA QCAtOTAsMTAgKzE2Miw2IEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQg YmkKKyAjZW5kaWYKKyAJaWYocnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKQorIAkJcmV0dXJuIHJzYS0+ bWV0aC0+cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBTX3JzYV9nZW5lcmF0ZV9r ZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2VuZGlmCisgCXJldHVybiByc2FfYnVp bHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CisgCX0KKyAKK0BAIC0xMDUsNiAr MTczLDIzIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIAlpbnQg Yml0c3AsYml0c3Esb2s9IC0xLG49MDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlpZihGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgCXsKKysJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0Ff QlVJTFRJTl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIAlyZXR1 cm4gMDsKKysJICAgIAl9CisrCisrCQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01P RFVMVVNfQklUUykKKysJCSAgICB7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5f S0VZR0VOLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJCSAgICByZXR1cm4gMDsKKysJCSAgICB9 CisrCQl9CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVM TCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworQEAgLTIxNiw2ICszMDEsMTcgQEAg c3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgCQlwID0gcnNhLT5wOwor IAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7 CisrCQlpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKKysJCQlCTl9hZGRfd29yZChyc2EtPm4s IDEpOworKworKwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCQkgICAgZ290byBlcnI7Cisr CQl9CisrI2VuZGlmCisrCisgCW9rPTE7CisgZXJyOgorIAlpZiAob2sgPT0gLTEpCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL3JzYS9yc2EuaAorLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhLmguZmlwcwky MDEyLTA3LTEyIDIxOjQ5OjI1LjA5MzM0Njc3MiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9yc2EvcnNhLmgJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDkzNTI1MzEgKzAyMDAKK0BAIC0x NjQsNiArMTY0LDggQEAgc3RydWN0IHJzYV9zdAorICMgZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9N T0RVTFVTX0JJVFMJMTYzODQKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFMTF9NT0RV TFVTX0JJVFMKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJMzA3Mgor ICNlbmRpZgorQEAgLTI5MCw2ICsyOTIsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tleShpbnQg Yml0cywgdW5zaWduZQorIAorIC8qIE5ldyB2ZXJzaW9uICovCisgaW50CVJTQV9nZW5lcmF0ZV9r ZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisraW50 IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklH TlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVN ICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJ R05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VO Q0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0 cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworIAorIGludAlSU0FfY2hlY2tfa2V5 KGNvbnN0IFJTQSAqKTsKKyAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLworQEAgLTQ4 Nyw3ICs0OTQsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUg UlNBX0ZfUlNBX1BBRERJTkdfQUREX05PTkUJCQkgMTA3CisgI2RlZmluZSBSU0FfRl9SU0FfUEFE RElOR19BRERfUEtDUzFfT0FFUAkJIDEyMQorICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQURE X1BLQ1MxX1BTUwkJCSAxMjUKKy0jZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9Q U1NfTUdGMQkJIDE0OAorKyNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19N R0YxCQkgMTU4CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8xCQkg MTA4CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8yCQkgMTA5Cisg I2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NMVjIzCQkJIDExMAorQEAgLTUwMCwyMCAr NTA3LDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBSU0Ff Rl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAorICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5U CQkJCQkgMTE1CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJIDExNgorLSNkZWZpbmUg UlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAKKy0jZGVmaW5lIFJTQV9GX1JTQV9QUklW QVRFX0VOQ1JZUFQJCQkgMTUxCisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJ IDE1NworKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNDgKKyAjZGVmaW5l IFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9F TkNPREUJCQkJIDEzOAorLSNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE1Mgor KyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQorICNkZWZpbmUgUlNBX0Zf UlNBX1BVQkxJQ19FTkNSWVBUCQkJIDE1MworICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUJ CQkJIDEzOQorICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgorKyNkZWZp bmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKKysjZGVmaW5lIFJTQV9GX1JT QV9TRVRfTUVUSE9ECQkJCSAxNTEKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkgMTE3Cisg I2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAorICNkZWZpbmUg UlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5CisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX0FTTjFf T0NURVRfU1RSSU5HCQkgMTIwCisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTUwkJ CSAxMjYKKy0jZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkgMTQ5Cisr I2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE1MgorIAorIC8qIFJl YXNvbiBjb2Rlcy4gKi8KKyAjZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSAkJCSAxMDAK K0BAIC01NDIsMjEgKzU1MSwyMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwor ICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJCSAxNTYKKyAjZGVmaW5lIFJTQV9SX0lO VkFMSURfUEFERElORwkJCQkgMTM4CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJTkdfTU9E RQkJCSAxNDEKKy0jZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTQ5Cisr I2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE1NworICNkZWZpbmUgUlNB X1JfSU5WQUxJRF9QU1NfU0FMVExFTgkJCSAxNDYKKy0jZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FM VF9MRU5HVEgJCQkgMTUwCisrI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RICQkJIDE1 OAorICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVSCQkJCSAxMzkKKyAjZGVmaW5lIFJTQV9S X0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCisgI2RlZmluZSBSU0FfUl9JUU1QX05PVF9JTlZF UlNFX09GX1EJCQkgMTI2CisgI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTIw CisgI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0CisgI2RlZmluZSBSU0Ff Ul9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1CistI2RlZmluZSBSU0FfUl9OT05fRklQU19SU0Ff TUVUSE9ECQkJIDE1NworKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJCSAxNDkK KysjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTQ5CisgI2RlZmluZSBSU0FfUl9O T19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCisgI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9D S19NSVNTSU5HCQkJIDExMworICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EJCQkg MTI3CisgI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQorLSNkZWZpbmUg UlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTU4CisrI2RlZmluZSBS U0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKKyAjZGVmaW5lIFJT QV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAorICNkZWZp bmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0CisgI2RlZmluZSBSU0FfUl9QX05P VF9QUklNRQkJCQkgMTI4CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9s aWIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2xpYi5jCistLS0gb3BlbnNz bC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDExLTA2LTIwIDIxOjQxOjEzLjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2xpYi5jCTIw MTItMDctMTIgMjE6NDk6MjUuMzQ5MzUyNTMxICswMjAwCitAQCAtODQsNiArODQsMTMgQEAgUlNB ICpSU0FfbmV3KHZvaWQpCisgCisgdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IFJT QV9NRVRIT0QgKm1ldGgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21v ZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJeworKwkJ UlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhP RCk7CisrCQlyZXR1cm47CisrCQl9CisrI2VuZGlmCisgCWRlZmF1bHRfUlNBX21ldGggPSBtZXRo OworIAl9CisgCitAQCAtOTEsMTggKzk4LDExIEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9nZXRf ZGVmYXVsdF9tZXRob2QKKyAJeworIAlpZiAoZGVmYXVsdF9SU0FfbWV0aCA9PSBOVUxMKQorIAkJ eworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1cm4g RklQU19yc2FfcGtjczFfc3NsZWF5KCk7CistCQllbHNlCistCQkJcmV0dXJuIFJTQV9QS0NTMV9T U0xlYXkoKTsKKy0jZWxzZQorICNpZmRlZiBSU0FfTlVMTAorIAkJZGVmYXVsdF9SU0FfbWV0aD1S U0FfbnVsbF9tZXRob2QoKTsKKyAjZWxzZQorIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0FfUEtDUzFf U1NMZWF5KCk7CisgI2VuZGlmCistI2VuZGlmCisgCQl9CisgCisgCXJldHVybiBkZWZhdWx0X1JT QV9tZXRoOworQEAgLTExOCw2ICsxMTgsMTMgQEAgaW50IFJTQV9zZXRfbWV0aG9kKFJTQSAqcnNh LCBjb25zdCBSU0FfTQorIAkvKiBOQjogVGhlIGNhbGxlciBpcyBzcGVjaWZpY2FsbHkgc2V0dGlu ZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8gdXMKKyAJICogdG8gZGVhbCB3aXRoIHdoaWNo IEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLworIAljb25zdCBSU0FfTUVUSE9EICptdG1wOworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBS U0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9NRVRI T0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYK KyAJbXRtcCA9IHJzYS0+bWV0aDsKKyAJaWYgKG10bXAtPmZpbmlzaCkgbXRtcC0+ZmluaXNoKHJz YSk7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorQEAgLTE3MCw2ICsxNzcsMTggQEAgUlNB ICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAJCQl9CisgCQl9CisgI2VuZGlmCisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZs YWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9O RVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKyNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKKysJCWlmIChyZXQtPmVuZ2luZSkKKysJCQlFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5l KTsKKysjZW5kaWYKKysJCU9QRU5TU0xfZnJlZShyZXQpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9 CisrI2VuZGlmCisgCisgCXJldC0+cGFkPTA7CisgCXJldC0+dmVyc2lvbj0wOworQEAgLTE4OCw3 ICsyMDcsNyBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAlyZXQtPmJs aW5kaW5nPU5VTEw7CisgCXJldC0+bXRfYmxpbmRpbmc9TlVMTDsKKyAJcmV0LT5iaWdudW1fZGF0 YT1OVUxMOworLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1c7CisrCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFnczsKKyAJaWYgKCFDUllQVE9f bmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0LCAmcmV0LT5leF9kYXRhKSkKKyAJ CXsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2Ff cG1ldGguYworLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcwky MDEyLTAyLTE1IDE1OjE0OjAxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9yc2EvcnNhX3BtZXRoLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDkzNTI1MzEgKzAyMDAK K0BAIC0yMDYsMjIgKzIwNiw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2Ffc2lnbihFVlBfUEtFWV9D VFggKmMKKyAJCQkJCVJTQV9SX0lOVkFMSURfRElHRVNUX0xFTkdUSCk7CisgCQkJcmV0dXJuIC0x OworIAkJCX0KKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAocmV0ID4gMCkKKy0JCQl7Cist CQkJdW5zaWduZWQgaW50IHNsZW47CistCQkJcmV0ID0gRklQU19yc2Ffc2lnbl9kaWdlc3QocnNh LCB0YnMsIHRic2xlbiwgcmN0eC0+bWQsCistCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAorLQkJCQkJ CQlyY3R4LT5zYWx0bGVuLAorLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCistCQkJCQkJCXNpZywgJnNs ZW4pOworLQkJCWlmIChyZXQgPiAwKQorLQkJCQkqc2lnbGVuID0gc2xlbjsKKy0JCQllbHNlCist CQkJCSpzaWdsZW4gPSAwOworLQkJCXJldHVybiByZXQ7CistCQkJfQorLSNlbmRpZgorIAorIAkJ aWYgKEVWUF9NRF90eXBlKHJjdHgtPm1kKSA9PSBOSURfbWRjMikKKyAJCQl7CitAQCAtMzU0LDE5 ICszMzgsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFgKKyAjZW5k aWYKKyAJaWYgKHJjdHgtPm1kKQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChy diA+IDApCistCQkJeworLQkJCXJldHVybiBGSVBTX3JzYV92ZXJpZnlfZGlnZXN0KHJzYSwKKy0J CQkJCQkJdGJzLCB0YnNsZW4sCistCQkJCQkJCXJjdHgtPm1kLAorLQkJCQkJCQlyY3R4LT5wYWRf bW9kZSwKKy0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKKy0JCQkJCQkJcmN0eC0+bWdmMW1kLAorLQkJ CQkJCQlzaWcsIHNpZ2xlbik7CistCQkJCQkJCQorLQkJCX0KKy0jZW5kaWYKKyAJCWlmIChyY3R4 LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKKyAJCQlyZXR1cm4gUlNBX3ZlcmlmeShF VlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAorIAkJCQkJc2lnLCBzaWdsZW4sIHJz YSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDEyLTAyLTE1IDE1OjAwOjA5LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDEyLTA3LTEy IDIxOjQ5OjI1LjM1MDM1MjU1MyArMDIwMAorQEAgLTEzOCw3ICsxMzgsOCBAQCBpbnQgUlNBX3Np Z24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCisgCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7 CisgCQlzPXRtcHM7CisgCX0KKy0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNh LFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGly ZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLworKwlpID0gcnNhLT5tZXRoLT5yc2FfcHJp dl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFf UEFERElORykgOiAwOworIAlpZiAoaSA8PSAwKQorIAkJcmV0PTA7CisgCWVsc2UKK0BAIC0xNzgs OCArMTc5LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQorIAor IAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBybSkKKyAJCXsKKy0JCWkgPSBSU0FfcHVi bGljX2RlY3J5cHQoKGludClzaWdsZW4sCistCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9Q QURESU5HKTsKKysJCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2Ff cHViX2RlYygoaW50KXNpZ2xlbiwKKysJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpIDogMDsKKyAJCWlmIChpIDw9IDApCisgCQkJcmV0dXJuIDA7CisgCQkqcHJtX2xlbiA9IGk7 CitAQCAtMTk2LDcgKzE5Nyw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0 IHVuc2kKKyAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNT QUdFX0xFTkdUSCk7CisgCQkJZ290byBlcnI7CisgCX0KKy0JaT1SU0FfcHVibGljX2RlY3J5cHQo KGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyogTkI6IGNh bGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwor KwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGlu dClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCisgCWlmIChp IDw9IDApIGdvdG8gZXJyOworIAkvKiBPZGRiYWxsIE1EQzIgY2FzZTogc2lnbmF0dXJlIGNhbiBi ZSBPQ1RFVCBTVFJJTkcuCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYTI1 Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3NoYS9zaGEyNTYuYworLS0tIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhMjU2LmMJMjAxMi0w Ny0xMiAyMTo0OToyNS4zNTAzNTI1NTMgKzAyMDAKK0BAIC0xMiwxMiArMTIsMTkgQEAKKyAKKyAj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgCisgY29uc3QgY2hhciBTSEEyNTZf dmVyc2lvbltdPSJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisgZmlwc19tZF9p bml0X2N0eChTSEEyMjQsIFNIQTI1NikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQ U19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsK KyAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOworIAljLT5oWzJd PTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7CitAQCAtMjksNiArMzYsOSBAQCBm aXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQorIAorIGZpcHNfbWRfaW5pdChTSEEyNTYp CisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysj ZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmhbMF09MHg2YTA5ZTY2N1VM OwljLT5oWzFdPTB4YmI2N2FlODVVTDsKKyAJYy0+aFsyXT0weDNjNmVmMzcyVUw7CWMtPmhbM109 MHhhNTRmZjUzYVVMOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3NoYS9zaGE1MTIu Yy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhNTEyLmMKKy0tLSBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMJMjAxMS0xMS0xNCAyMTo1ODowMS4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMTItMDct MTIgMjE6NDk6MjUuMzUwMzUyNTUzICswMjAwCitAQCAtNSw2ICs1LDEwIEBACisgICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKyAgKi8KKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lm ICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikK KyAvKgorICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgorQEAgLTYxLDYgKzY1LDkgQEAgY29uc3Qg Y2hhciBTSEE1MTJfdmVyc2lvbltdPSJTSEEtNTEyIiBPUAorIAorIGZpcHNfbWRfaW5pdF9jdHgo U0hBMzg0LCBTSEE1MTIpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRl c3RfY2hlY2soKTsKKysjZW5kaWYKKyAJYy0+aFswXT1VNjQoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsK KyAJYy0+aFsxXT1VNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsKKyAJYy0+aFsyXT1VNjQoMHg5MTU5 MDE1YTMwNzBkZDE3KTsKK0BAIC03Nyw2ICs4NCw5IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0 LCBTSEE1MTIpCisgCisgZmlwc19tZF9pbml0KFNIQTUxMikKKyAJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAljLT5oWzBdPVU2NCgw eDZhMDllNjY3ZjNiY2M5MDgpOworIAljLT5oWzFdPVU2NCgweGJiNjdhZTg1ODRjYWE3M2IpOwor IAljLT5oWzJdPVU2NCgweDNjNmVmMzcyZmU5NGY4MmIpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhLmgK Ky0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAxMi0wNy0xMiAyMTo0 OToyNC41ODEzMzUyNTUgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYS5o CTIwMTItMDctMTIgMjE6NDk6MjUuMzUwMzUyNTUzICswMjAwCitAQCAtMTE2LDkgKzExNiw2IEBA IHVuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBjaGFyICoKKyB2b2lkIFNIQV9UcmFu c2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisgI2VuZGlmCisg I2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistaW50IHByaXZh dGVfU0hBMV9Jbml0KFNIQV9DVFggKmMpOworLSNlbmRpZgorIGludCBTSEExX0luaXQoU0hBX0NU WCAqYyk7CisgaW50IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNp emVfdCBsZW4pOworIGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpj KTsKK0BAIC0xNDEsMTAgKzEzOCw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0Cisg CX0gU0hBMjU2X0NUWDsKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CistI2lmZGVmIE9Q RU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworLWlu dCBwcml2YXRlX1NIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpOworLSNlbmRpZgorIGludCBTSEEy MjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKKyBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpj LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBMjI0X0ZpbmFsKHVuc2ln bmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKK0BAIC0xOTIsMTAgKzE4NSw2IEBAIHR5cGVk ZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0CisgI2VuZGlmCisgCisgI2lmbmRlZiBPUEVOU1NMX05P X1NIQTUxMgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEEzODRfSW5pdChT SEE1MTJfQ1RYICpjKTsKKy1pbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsK Ky0jZW5kaWYKKyBpbnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7CisgaW50IFNIQTM4NF9V cGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50 IFNIQTM4NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3No YV9sb2NsLmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI0LjU4NzMzNTM5MCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM1 MDM1MjU1MyArMDIwMAorQEAgLTEyMywxMSArMTIzLDE0IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRh X29yZGVyIChTSEFfQ1RYICpjLAorICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAor IAorICNpZmRlZiBTSEFfMAorLWZpcHNfbWRfaW5pdChTSEEpCisrbm9uZmlwc19tZF9pbml0KFNI QSkKKyAjZWxzZQorIGZpcHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hBKQorICNlbmRpZgorIAl7Cisr I2lmIGRlZmluZWQoU0hBXzEpICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5o MD1JTklUX0RBVEFfaDA7CisgCWMtPmgxPUlOSVRfREFUQV9oMTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFjL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vd2hybHBvb2wvd3BfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3docmxwb29s L3dwX2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDUuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDEyLTA3LTEyIDIxOjQ5 OjI1LjM1MTM1MjU3NSArMDIwMAorQEAgLTU1LDcgKzU1LDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistZmlwc19tZF9pbml0KFdISVJM UE9PTCkKKytub25maXBzX21kX2luaXQoV0hJUkxQT09MKQorIAl7CisgCW1lbXNldCAoYywwLHNp emVvZigqYykpOworIAlyZXR1cm4oMSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9NYWtlZmls ZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4xYy9NYWtlZmlsZS5vcmcKKy0tLSBvcGVuc3NsLTEuMC4x Yy9NYWtlZmlsZS5vcmcuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjI4NTM1MTA5MSArMDIwMAor KysrIG9wZW5zc2wtMS4wLjFjL01ha2VmaWxlLm9yZwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM1MTM1 MjU3NSArMDIwMAorQEAgLTEzNiw2ICsxMzYsOSBAQCBGSVBTQ0FOTElCPQorIAorIEJBU0VBRERS PQorIAorKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAorK0ZJUFM9CisrCisgRElSUz0gICBj cnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCisgRU5HRElSUz0gY2Nnb3N0CisgU0hM SUJESVJTPSBjcnlwdG8gc3NsCitAQCAtMTQ4LDcgKzE1MSw3IEBAIFNESVJTPSAgXAorIAlibiBl YyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCisgCWJ1ZmZlciBiaW8gc3RhY2sg bGhhc2ggcmFuZCBlcnIgXAorIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIg cGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKKy0JY21zIHBxdWV1ZSB0cyBqcGFrZSBz cnAgc3RvcmUgY21hYworKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjIGZpcHMK KyAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29u ZmlndXJlCisgIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgorIAorQEAgLTIzNyw2 ICsyNDAsNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNTCisgCQlG SVBTTElCRElSPScke0ZJUFNMSUJESVJ9JwkJCVwKKyAJCUZJUFNESVI9JyR7RklQU0RJUn0nCQkJ CVwKKyAJCUZJUFNDQU5MSUI9IiQke0ZJUFNDQU5MSUI6LSQoRklQU0NBTkxJQil9IglcCisrCQlG SVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAorIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9 TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KKyAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJl cXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKKyAjIHdoaWNoIGlu IHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAt ZS4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL3NzbC9zc2xfYWxncy5jLmZpcHMgb3BlbnNzbC0x LjAuMWMvc3NsL3NzbF9hbGdzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYy9zc2wvc3NsX2FsZ3MuYy5m aXBzCTIwMTItMDEtMTUgMTQ6NDI6NTAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWMvc3NsL3NzbF9hbGdzLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNTEzNTI1NzUgKzAyMDAKK0BA IC02NCw2ICs2NCwxMiBAQAorIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCisgCXsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmICghRklQ U19tb2RlKCkpCisrCQl7CisrI2VuZGlmCisrCisgI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIAlF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2NiYygpKTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGUzX2NiYygpKTsKK0BAIC0xMzYsNiArMTQyLDUwIEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZv aWQpCisgCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7CisgCUVWUF9hZGRfZGlnZXN0KEVWUF9k c3MoKSk7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJfQorKwllbHNlCisrCQl7 CisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNf Y2JjKCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKKysJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xMjhfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMo KSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKKysJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20o KSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX01ENQorKwkvKiBuZWVkZWQgZXZlbiBp biB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFDICovCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUo KSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwic3NsMi1tZDUiKTsKKysJRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wzLW1kNSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BF TlNTTF9OT19TSEEKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNo YTEgKi8KKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7CisrCUVW UF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJT QSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorKwlFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOworKyNlbmRp ZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4 NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjZW5kaWYKKysjaWYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQorKwlFVlBf YWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGggc2hhMSAqLworKwlFVlBfYWRkX2Rp Z2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKKysJRVZQX2FkZF9k aWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9f RUNEU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOworKyNlbmRpZgorKwkJfQorKyNl bmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCisgCS8qIFRoaXMgd2lsbCBpbml0aWFsaXNl IHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLgorIAkgICBUaGUgdmFsdWUgcmV0 dXJuZWQgaXMgYSBTVEFDS19PRihTU0xfQ09NUCksIGJ1dCB0aGF0IGNhbgoKZGlmZiAtLWdpdCBh L29wZW5zc2wuc3BlYyBiL29wZW5zc2wuc3BlYwppbmRleCA3YWI0NjU1Li5lYTRjOGQwIDEwMDY0 NAotLS0gYS9vcGVuc3NsLnNwZWMKKysrIGIvb3BlbnNzbC5zcGVjCkBAIC0xNiwxMyArMTYsMTMg QEAKIAogIyBBcmNoZXMgb24gd2hpY2ggd2UgbmVlZCB0byBwcmV2ZW50IGFyY2ggY29uZmxpY3Rz IG9uIG9wZW5zc2xjb25mLmgsIG11c3QKICMgYWxzbyBiZSBoYW5kbGVkIGluIG9wZW5zc2xjb25m LW5ldy5oLgotJWRlZmluZSBtdWx0aWxpYl9hcmNoZXMgJXtpeDg2fSBpYTY0IHBwYyBwcGM2NCBz MzkwIHMzOTB4IHNwYXJjdjkgc3BhcmM2NCB4ODZfNjQKKyVkZWZpbmUgbXVsdGlsaWJfYXJjaGVz ICV7aXg4Nn0gaWE2NCBwcGMgJXtwb3dlcjY0fSBzMzkwIHMzOTB4IHNwYXJjdjkgc3BhcmM2NCB4 ODZfNjQKIAogU3VtbWFyeTogVXRpbGl0aWVzIGZyb20gdGhlIGdlbmVyYWwgcHVycG9zZSBjcnlw dG9ncmFwaHkgbGlicmFyeSB3aXRoIFRMUyBpbXBsZW1lbnRhdGlvbgogTmFtZTogb3BlbnNzbAog VmVyc2lvbjogMS4wLjFjCiAjIERvIG5vdCBmb3JnZXQgdG8gYnVtcCBTSExJQl9WRVJTSU9OIG9u IHZlcnNpb24gdXBncmFkZXMKLVJlbGVhc2U6IDIlez9kaXN0fQorUmVsZWFzZTogMyV7P2Rpc3R9 CiBFcG9jaDogMQogIyBXZSBoYXZlIHRvIHJlbW92ZSBjZXJ0YWluIHBhdGVudGVkIGFsZ29yaXRo bXMgZnJvbSB0aGUgb3BlbnNzbCBzb3VyY2UKICMgdGFyYmFsbCB3aXRoIHRoZSBob2JibGUtb3Bl bnNzbCBzY3JpcHQgd2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cuCkBAIC01Miw3ICs1Miw3IEBAIFBh dGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRkLWVuZ2luZXMucGF0Y2gKIFBhdGNoMzY6 IG9wZW5zc2wtMS4wLjBlLWRvYy1ub2VvZi5wYXRjaAogUGF0Y2gzODogb3BlbnNzbC0xLjAuMS1i ZXRhMi1zc2wtb3AtYWxsLnBhdGNoCiBQYXRjaDM5OiBvcGVuc3NsLTEuMC4xYy1pcHY2LWFwcHMu cGF0Y2gKLVBhdGNoNDA6IG9wZW5zc2wtMS4wLjFiLWZpcHMucGF0Y2gKK1BhdGNoNDA6IG9wZW5z c2wtMS4wLjFjLWZpcHMucGF0Y2gKIFBhdGNoNDU6IG9wZW5zc2wtMC45LjhqLWVudi1ub3psaWIu cGF0Y2gKIFBhdGNoNDc6IG9wZW5zc2wtMS4wLjAtYmV0YTUtcmVhZG1lLXdhcm5pbmcucGF0Y2gK IFBhdGNoNDk6IG9wZW5zc2wtMS4wLjFhLWFsZ28tZG9jLnBhdGNoCkBAIC0yMDYsNyArMjA2LDEx IEBAIHNzbGFyY2g9ImxpbnV4NjQtczM5MHgiCiAlaWZhcmNoICV7YXJtfSBzaDMgc2g0CiBzc2xh cmNoPWxpbnV4LWdlbmVyaWMzMgogJWVuZGlmCi0jIGlhNjQsIHg4Nl82NCwgcHBjLCBwcGM2NCBh cmUgT0sgYnkgZGVmYXVsdAorJWlmYXJjaCAle3Bvd2VyNjR9Citzc2xhcmNoPWxpbnV4LXBwYzY0 CislZW5kaWYKKworIyBpYTY0LCB4ODZfNjQsIHBwYyBhcmUgT0sgYnkgZGVmYXVsdAogIyBDb25m aWd1cmUgdGhlIGJ1aWxkIHRyZWUuICBPdmVycmlkZSBPcGVuU1NMIGRlZmF1bHRzIHdpdGgga25v d24tZ29vZCBkZWZhdWx0cwogIyB1c2FibGUgb24gYWxsIHBsYXRmb3Jtcy4gIFRoZSBDb25maWd1 cmUgc2NyaXB0IGFscmVhZHkga25vd3MgdG8gdXNlIC1mUElDIGFuZAogIyBSUE1fT1BUX0ZMQUdT LCBzbyB3ZSBjYW4gc2tpcCBzcGVjaWZpeWluZyB0aGVtIGhlcmUuCkBAIC00MjMsNiArNDI3LDEx IEBAIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvJXtfbGliZGlyfS9maXBzY2FuaXN0ZXIuKgogJXBv c3R1biBsaWJzIC1wIC9zYmluL2xkY29uZmlnCiAKICVjaGFuZ2Vsb2cKKyogVGh1IEp1bCAxMiAy MDEyIFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5jb20+IDEuMC4xYy0zCistIGZpeCBEU0Ega2V5 IGdlbmVyYXRpb24gaW4gRklQUyBtb2RlICgjODMzODY2KQorLSBhbGxvdyBkdXBsaWNhdGUgRklQ U19tb2RlX3NldCgxKQorLSBlbmFibGUgYnVpbGQgb24gcHBjNjQgc3ViYXJjaCAoIzgzNDY1MikK KwogKiBXZWQgSnVsIDExIDIwMTIgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjFj LTIKIC0gZml4IHNfc2VydmVyIHdpdGggbmV3IGdsaWJjIHdoZW4gbm8gZ2xvYmFsIElQdjYgYWRk cmVzcyAoIzgzOTAzMSkKIC0gbWFrZSBpdCBidWlsZCB3aXRoIG5ldyBQZXJsCg==