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: new upstream release fixing multiple security issues Date: Tue, 09 Jun 2026 12:43:27 GMT Message-ID: <178100900749.1.6545703566042819819.rpms-openssl-613f66414168@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 613f66414168c14ec7d71787e8e7b45167c0fb8d QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IDYxM2Y2NjQxNDE2OGMxNGVjN2Q3MTc4N2U4ZTdi NDUxNjdjMGZiOGQKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTQtMTAtMTZUMTM6NTA6MDgrMDI6MDAKU3RhdHMgIDogKzIzODE3Ly0yMzg1 NCBpbiAxMCBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3Jw bXMvb3BlbnNzbC9jLzYxM2Y2NjQxNDE2OGMxNGVjN2Q3MTc4N2U4ZTdiNDUxNjdjMGZiOGQ/YnJh bmNoPXJlYmFzZV80MGJldGEKCkxvZzoKbmV3IHVwc3RyZWFtIHJlbGVhc2UgZml4aW5nIG11bHRp cGxlIHNlY3VyaXR5IGlzc3VlcwoKLS0tCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xZS1lcGhl bWVyYWwta2V5LXNpemUucGF0Y2ggYi9vcGVuc3NsLTEuMC4xZS1lcGhlbWVyYWwta2V5LXNpemUu cGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Zjc5NDAuLjAwMDAwMDAKLS0t IGEvb3BlbnNzbC0xLjAuMWUtZXBoZW1lcmFsLWtleS1zaXplLnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsMTM1ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2FwcHMvc19hcHBzLmgu ZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFlL2FwcHMvc19hcHBzLmgKLS0tLSBvcGVuc3NsLTEuMC4x ZS9hcHBzL3NfYXBwcy5oLmVwaGVtZXJhbAkyMDE0LTAyLTEyIDE0OjQ5OjE0LjMzMzUxMzc1MyAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2FwcHMvc19hcHBzLmgJMjAxNC0wMi0xMiAxNDo0OTox NC40MTc1MTU2MjkgKzAxMDAKLUBAIC0xNTYsNiArMTU2LDcgQEAgaW50IE1TX0NBTExCQUNLIHZl cmlmeV9jYWxsYmFjayhpbnQgb2ssCi0gaW50IHNldF9jZXJ0X3N0dWZmKFNTTF9DVFggKmN0eCwg Y2hhciAqY2VydF9maWxlLCBjaGFyICprZXlfZmlsZSk7Ci0gaW50IHNldF9jZXJ0X2tleV9zdHVm ZihTU0xfQ1RYICpjdHgsIFg1MDkgKmNlcnQsIEVWUF9QS0VZICprZXkpOwotICNlbmRpZgotK2lu dCBzc2xfcHJpbnRfdG1wX2tleShCSU8gKm91dCwgU1NMICpzKTsKLSBpbnQgaW5pdF9jbGllbnQo aW50ICpzb2NrLCBjaGFyICpzZXJ2ZXIsIGNoYXIgKnBvcnQsIGludCB0eXBlKTsKLSBpbnQgc2hv dWxkX3JldHJ5KGludCBpKTsKLSBpbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLGNoYXIg Kipob3N0X3B0cixjaGFyICoqcG9ydF9wdHIpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvYXBw cy9zX2NiLmMuZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFlL2FwcHMvc19jYi5jCi0tLS0gb3BlbnNz bC0xLjAuMWUvYXBwcy9zX2NiLmMuZXBoZW1lcmFsCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvYXBwcy9zX2NiLmMJMjAxNC0wMi0xMiAxNDo1 NjoyNS41ODQxNDI0OTkgKzAxMDAKLUBAIC0zMzgsNiArMzM4LDM4IEBAIHZvaWQgTVNfQ0FMTEJB Q0sgYXBwc19zc2xfaW5mb19jYWxsYmFjaygKLSAJCX0KLSAJfQotIAotK2ludCBzc2xfcHJpbnRf dG1wX2tleShCSU8gKm91dCwgU1NMICpzKQotKwl7Ci0rCUVWUF9QS0VZICprZXk7Ci0rCWlmICgh U1NMX2dldF9zZXJ2ZXJfdG1wX2tleShzLCAma2V5KSkKLSsJCXJldHVybiAxOwotKwlCSU9fcHV0 cyhvdXQsICJTZXJ2ZXIgVGVtcCBLZXk6ICIpOwotKwlzd2l0Y2ggKEVWUF9QS0VZX2lkKGtleSkp Ci0rCQl7Ci0rCWNhc2UgRVZQX1BLRVlfUlNBOgotKwkJQklPX3ByaW50ZihvdXQsICJSU0EsICVk IGJpdHNcbiIsIEVWUF9QS0VZX2JpdHMoa2V5KSk7Ci0rCQlicmVhazsKLSsKLSsJY2FzZSBFVlBf UEtFWV9ESDoKLSsJCUJJT19wcmludGYob3V0LCAiREgsICVkIGJpdHNcbiIsIEVWUF9QS0VZX2Jp dHMoa2V5KSk7Ci0rCQlicmVhazsKLSsKLSsJY2FzZSBFVlBfUEtFWV9FQzoKLSsJCQl7Ci0rCQkJ RUNfS0VZICplYyA9IEVWUF9QS0VZX2dldDFfRUNfS0VZKGtleSk7Ci0rCQkJaW50IG5pZDsKLSsJ CQljb25zdCBjaGFyICpjbmFtZTsKLSsJCQluaWQgPSBFQ19HUk9VUF9nZXRfY3VydmVfbmFtZShF Q19LRVlfZ2V0MF9ncm91cChlYykpOwotKwkJCUVDX0tFWV9mcmVlKGVjKTsKLSsJCQljbmFtZSA9 IE9CSl9uaWQyc24obmlkKTsKLSsJCQlCSU9fcHJpbnRmKG91dCwgIkVDREgsICVzLCAlZCBiaXRz XG4iLAotKwkJCQkJCWNuYW1lLCBFVlBfUEtFWV9iaXRzKGtleSkpOwotKwkJCX0KLSsJCX0KLSsJ RVZQX1BLRVlfZnJlZShrZXkpOwotKwlyZXR1cm4gMTsKLSsJfQotKwkJCi0gCi0gdm9pZCBNU19D QUxMQkFDSyBtc2dfY2IoaW50IHdyaXRlX3AsIGludCB2ZXJzaW9uLCBpbnQgY29udGVudF90eXBl LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIFNTTCAqc3NsLCB2b2lkICphcmcpCi0gCXsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2FwcHMvc19jbGllbnQuYy5lcGhlbWVyYWwgb3BlbnNz bC0xLjAuMWUvYXBwcy9zX2NsaWVudC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvYXBwcy9zX2NsaWVu dC5jLmVwaGVtZXJhbAkyMDE0LTAyLTEyIDE0OjQ5OjE0LjQwNzUxNTQwNiArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjFlL2FwcHMvc19jbGllbnQuYwkyMDE0LTAyLTEyIDE0OjQ5OjE0LjQxODUxNTY1 MiArMDEwMAotQEAgLTIwMzIsNiArMjAzMiw4IEBAIHN0YXRpYyB2b2lkIHByaW50X3N0dWZmKEJJ TyAqYmlvLCBTU0wgKnMKLSAJCQlCSU9fd3JpdGUoYmlvLCJcbiIsMSk7Ci0gCQkJfQotIAotKwkJ c3NsX3ByaW50X3RtcF9rZXkoYmlvLCBzKTsKLSsKLSAJCUJJT19wcmludGYoYmlvLCItLS1cblNT TCBoYW5kc2hha2UgaGFzIHJlYWQgJWxkIGJ5dGVzIGFuZCB3cml0dGVuICVsZCBieXRlc1xuIiwK LSAJCQlCSU9fbnVtYmVyX3JlYWQoU1NMX2dldF9yYmlvKHMpKSwKLSAJCQlCSU9fbnVtYmVyX3dy aXR0ZW4oU1NMX2dldF93YmlvKHMpKSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9zc2wvc3Ns LmguZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFlL3NzbC9zc2wuaAotLS0tIG9wZW5zc2wtMS4wLjFl L3NzbC9zc2wuaC5lcGhlbWVyYWwJMjAxNC0wMi0xMiAxNDo0OToxNC4zOTE1MTUwNDkgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xZS9zc2wvc3NsLmgJMjAxNC0wMi0xMiAxNDo0OToxNC40MTg1MTU2 NTIgKzAxMDAKLUBAIC0xNTYzLDYgKzE1NjMsOCBAQCBERUNMQVJFX1BFTV9ydyhTU0xfU0VTU0lP TiwgU1NMX1NFU1NJT04pCi0gI2RlZmluZSBTU0xfQ1RSTF9HRVRfRVhUUkFfQ0hBSU5fQ0VSVFMJ CTgyCi0gI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9FWFRSQV9DSEFJTl9DRVJUUwk4MwotIAotKyNk ZWZpbmUgU1NMX0NUUkxfR0VUX1NFUlZFUl9UTVBfS0VZCQkxMDkKLSsKLSAjZGVmaW5lIERUTFN2 MV9nZXRfdGltZW91dChzc2wsIGFyZykgXAotIAlTU0xfY3RybChzc2wsRFRMU19DVFJMX0dFVF9U SU1FT1VULDAsICh2b2lkICopYXJnKQotICNkZWZpbmUgRFRMU3YxX2hhbmRsZV90aW1lb3V0KHNz bCkgXAotQEAgLTE2MDQsNiArMTYwNiw5IEBAIERFQ0xBUkVfUEVNX3J3KFNTTF9TRVNTSU9OLCBT U0xfU0VTU0lPTikKLSAjZGVmaW5lIFNTTF9DVFhfY2xlYXJfZXh0cmFfY2hhaW5fY2VydHMoY3R4 KSBcCi0gCVNTTF9DVFhfY3RybChjdHgsU1NMX0NUUkxfQ0xFQVJfRVhUUkFfQ0hBSU5fQ0VSVFMs MCxOVUxMKQotIAotKyNkZWZpbmUgU1NMX2dldF9zZXJ2ZXJfdG1wX2tleShzLCBwaykgXAotKwlT U0xfY3RybChzLFNTTF9DVFJMX0dFVF9TRVJWRVJfVE1QX0tFWSwwLHBrKQotKwotICNpZm5kZWYg T1BFTlNTTF9OT19CSU8KLSBCSU9fTUVUSE9EICpCSU9fZl9zc2wodm9pZCk7Ci0gQklPICpCSU9f bmV3X3NzbChTU0xfQ1RYICpjdHgsaW50IGNsaWVudCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4x ZS9zc2wvczNfbGliLmMuZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFlL3NzbC9zM19saWIuYwotLS0t IG9wZW5zc2wtMS4wLjFlL3NzbC9zM19saWIuYy5lcGhlbWVyYWwJMjAxNC0wMi0xMiAxNDo0OTox NC40MTI1MTU1MTggKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9zc2wvczNfbGliLmMJMjAxNC0w Mi0xMiAxNDo0OToxNC40MTg1MTU2NTIgKzAxMDAKLUBAIC0zMzUwLDYgKzMzNTAsNDQgQEAgbG9u ZyBzc2wzX2N0cmwoU1NMICpzLCBpbnQgY21kLCBsb25nIGxhcgotICNlbmRpZgotIAotICNlbmRp ZiAvKiAhT1BFTlNTTF9OT19UTFNFWFQgKi8KLSsJY2FzZSBTU0xfQ1RSTF9HRVRfU0VSVkVSX1RN UF9LRVk6Ci0rCQlpZiAocy0+c2VydmVyIHx8ICFzLT5zZXNzaW9uIHx8ICFzLT5zZXNzaW9uLT5z ZXNzX2NlcnQpCi0rCQkJcmV0dXJuIDA7Ci0rCQllbHNlCi0rCQkJewotKwkJCVNFU1NfQ0VSVCAq c2M7Ci0rCQkJRVZQX1BLRVkgKnB0bXA7Ci0rCQkJaW50IHJ2ID0gMDsKLSsJCQlzYyA9IHMtPnNl c3Npb24tPnNlc3NfY2VydDsKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19SU0EpICYmICFkZWZp bmVkKE9QRU5TU0xfTk9fREgpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRUMpCi0rCQkJaWYgKCFz Yy0+cGVlcl9yc2FfdG1wICYmICFzYy0+cGVlcl9kaF90bXAKLSsJCQkJCQkJJiYgIXNjLT5wZWVy X2VjZGhfdG1wKQotKwkJCQlyZXR1cm4gMDsKLSsjZW5kaWYKLSsJCQlwdG1wID0gRVZQX1BLRVlf bmV3KCk7Ci0rCQkJaWYgKCFwdG1wKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlpZiAoMCk7Ci0rI2lm bmRlZiBPUEVOU1NMX05PX1JTQQotKwkJCWVsc2UgaWYgKHNjLT5wZWVyX3JzYV90bXApCi0rCQkJ CXJ2ID0gRVZQX1BLRVlfc2V0MV9SU0EocHRtcCwgc2MtPnBlZXJfcnNhX3RtcCk7Ci0rI2VuZGlm Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0RICi0rCQkJZWxzZSBpZiAoc2MtPnBlZXJfZGhfdG1wKQot KwkJCQlydiA9IEVWUF9QS0VZX3NldDFfREgocHRtcCwgc2MtPnBlZXJfZGhfdG1wKTsKLSsjZW5k aWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAotKwkJCWVsc2UgaWYgKHNjLT5wZWVyX2VjZGhf dG1wKQotKwkJCQlydiA9IEVWUF9QS0VZX3NldDFfRUNfS0VZKHB0bXAsIHNjLT5wZWVyX2VjZGhf dG1wKTsKLSsjZW5kaWYKLSsJCQlpZiAocnYpCi0rCQkJCXsKLSsJCQkJKihFVlBfUEtFWSAqKilw YXJnID0gcHRtcDsKLSsJCQkJcmV0dXJuIDE7Ci0rCQkJCX0KLSsJCQlFVlBfUEtFWV9mcmVlKHB0 bXApOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSAJZGVmYXVsdDoKLSAJCWJyZWFrOwotIAkJfQoK ZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFlLWZpcHMtZWMucGF0Y2ggYi9vcGVuc3NsLTEuMC4x ZS1maXBzLWVjLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWY2NDhjLi4w MDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjFlLWZpcHMtZWMucGF0Y2gKKysrIC9kZXYvbnVsbApA QCAtMSwyMDM5ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lY2RoL2Vj ZGguaC5maXBzLWVjIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lY2RoL2VjZGguaAotLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9lY2RoL2VjZGguaC5maXBzLWVjCTIwMTMtMTEtMDggMTc6NTk6NDIu NzU1MDE5MzYzICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjZGgvZWNkaC5oCTIw MTMtMTEtMDggMTc6NTk6NDMuMTQ3MDI4MDAyICswMTAwCi1AQCAtODUsNiArODUsOCBAQAotIGV4 dGVybiAiQyIgewotICNlbmRpZgotIAotKyNkZWZpbmUgRUNfRkxBR19DT0ZBQ1RPUl9FQ0RICTB4 MTAwMAotKwotIGNvbnN0IEVDREhfTUVUSE9EICpFQ0RIX09wZW5TU0wodm9pZCk7Ci0gCi0gdm9p ZAkgIEVDREhfc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IEVDREhfTUVUSE9EICopOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjZGgvZWNkaHRlc3QuYy5maXBzLWVjIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9lY2RoL2VjZGh0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v ZWNkaC9lY2RodGVzdC5jLmZpcHMtZWMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZWNkaC9lY2RodGVzdC5jCTIwMTMtMTEtMDgg MTc6NTk6NTQuNzEyMjgyODYyICswMTAwCi1AQCAtMzIzLDggKzMyMywxMCBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwp IGdvdG8gZXJyOwotIAotIAkvKiBOSVNUIFBSSU1FIENVUlZFUyBURVNUUyAqLwotKyNpZiAwCi0g CWlmICghdGVzdF9lY2RoX2N1cnZlKE5JRF9YOV82Ml9wcmltZTE5MnYxLCAiTklTVCBQcmltZS1D dXJ2ZSBQLTE5MiIsIGN0eCwgb3V0KSkgZ290byBlcnI7Ci0gCWlmICghdGVzdF9lY2RoX2N1cnZl KE5JRF9zZWNwMjI0cjEsICJOSVNUIFByaW1lLUN1cnZlIFAtMjI0IiwgY3R4LCBvdXQpKSBnb3Rv IGVycjsKLSsjZW5kaWYKLSAJaWYgKCF0ZXN0X2VjZGhfY3VydmUoTklEX1g5XzYyX3ByaW1lMjU2 djEsICJOSVNUIFByaW1lLUN1cnZlIFAtMjU2IiwgY3R4LCBvdXQpKSBnb3RvIGVycjsKLSAJaWYg KCF0ZXN0X2VjZGhfY3VydmUoTklEX3NlY3AzODRyMSwgIk5JU1QgUHJpbWUtQ3VydmUgUC0zODQi LCBjdHgsIG91dCkpIGdvdG8gZXJyOwotIAlpZiAoIXRlc3RfZWNkaF9jdXJ2ZShOSURfc2VjcDUy MXIxLCAiTklTVCBQcmltZS1DdXJ2ZSBQLTUyMSIsIGN0eCwgb3V0KSkgZ290byBlcnI7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZWNkaC9lY2hfbGliLmMuZmlwcy1lYyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZWNkaC9lY2hfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v ZWNkaC9lY2hfbGliLmMuZmlwcy1lYwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lY2RoL2VjaF9saWIuYwkyMDEzLTExLTA4IDE3 OjU5OjQzLjE0ODAyODAyNCArMDEwMAotQEAgLTk0LDE0ICs5NCw3IEBAIGNvbnN0IEVDREhfTUVU SE9EICpFQ0RIX2dldF9kZWZhdWx0X21ldGgKLSAJewotIAlpZighZGVmYXVsdF9FQ0RIX21ldGhv ZCkgCi0gCQl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJ CXJldHVybiBGSVBTX2VjZGhfb3BlbnNzbCgpOwotLQkJZWxzZQotLQkJCXJldHVybiBFQ0RIX09w ZW5TU0woKTsKLS0jZWxzZQotIAkJZGVmYXVsdF9FQ0RIX21ldGhvZCA9IEVDREhfT3BlblNTTCgp OwotLSNlbmRpZgotIAkJfQotIAlyZXR1cm4gZGVmYXVsdF9FQ0RIX21ldGhvZDsKLSAJfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjZGgvZWNoX29zc2wuYy5maXBzLWVjIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9lY2RoL2VjaF9vc3NsLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZWNkaC9lY2hfb3NzbC5jLmZpcHMtZWMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZWNkaC9lY2hfb3NzbC5jCTIwMTMtMTEt MDggMTc6NTk6NDMuMTQ4MDI4MDI0ICswMTAwCi1AQCAtNzksNiArNzksMTAgQEAKLSAjaW5jbHVk ZSA8b3BlbnNzbC9vYmpfbWFjLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot IHN0YXRpYyBpbnQgZWNkaF9jb21wdXRlX2tleSh2b2lkICpvdXQsIHNpemVfdCBsZW4sIGNvbnN0 IEVDX1BPSU5UICpwdWJfa2V5LAotIAlFQ19LRVkgKmVjZGgsIAotIAl2b2lkICooKktERikoY29u c3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgdm9pZCAqb3V0LCBzaXplX3QgKm91dGxlbikpOwot QEAgLTkwLDcgKzk0LDcgQEAgc3RhdGljIEVDREhfTUVUSE9EIG9wZW5zc2xfZWNkaF9tZXRoID0g ewotIAlOVUxMLCAvKiBpbml0ICAgICAqLwotIAlOVUxMLCAvKiBmaW5pc2ggICAqLwotICNlbmRp ZgotLQkwLCAgICAvKiBmbGFncyAgICAqLwotKwlFQ0RIX0ZMQUdfRklQU19NRVRIT0QsICAgIC8q IGZsYWdzICAgICovCi0gCU5VTEwgIC8qIGFwcF9kYXRhICovCi0gfTsKLSAKLUBAIC0xMTgsNiAr MTIyLDE0IEBAIHN0YXRpYyBpbnQgZWNkaF9jb21wdXRlX2tleSh2b2lkICpvdXQsIHMKLSAJc2l6 ZV90IGJ1ZmxlbiwgbGVuOwotIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7 Ci0rCQlyZXR1cm4gLTE7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChvdXRsZW4gPiBJTlRfTUFY KQotIAkJewotIAkJRUNESGVycihFQ0RIX0ZfRUNESF9DT01QVVRFX0tFWSxFUlJfUl9NQUxMT0Nf RkFJTFVSRSk7IC8qIHNvcnQgb2YsIGFueXdheSAqLwotQEAgLTEzNyw2ICsxNDksMTggQEAgc3Rh dGljIGludCBlY2RoX2NvbXB1dGVfa2V5KHZvaWQgKm91dCwgcwotIAkJfQotIAotIAlncm91cCA9 IEVDX0tFWV9nZXQwX2dyb3VwKGVjZGgpOwotKwotKwlpZiAoRUNfS0VZX2dldF9mbGFncyhlY2Ro KSAmIEVDX0ZMQUdfQ09GQUNUT1JfRUNESCkKLSsJCXsKLSsJCWlmICghRUNfR1JPVVBfZ2V0X2Nv ZmFjdG9yKGdyb3VwLCB4LCBjdHgpIHx8Ci0rCQkJIUJOX211bCh4LCB4LCBwcml2X2tleSwgY3R4 KSkKLSsJCQl7Ci0rCQkJRUNESGVycihFQ0RIX0ZfRUNESF9DT01QVVRFX0tFWSwgRVJSX1JfTUFM TE9DX0ZBSUxVUkUpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCXByaXZfa2V5ID0geDsKLSsJ CX0KLSsKLSAJaWYgKCh0bXA9RUNfUE9JTlRfbmV3KGdyb3VwKSkgPT0gTlVMTCkKLSAJCXsKLSAJ CUVDREhlcnIoRUNESF9GX0VDREhfQ09NUFVURV9LRVksRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjZHNhL2VjZHNhdGVzdC5jLmZpcHMtZWMg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjZHNhL2VjZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2VjZHNhL2VjZHNhdGVzdC5jLmZpcHMtZWMJMjAxMy0wMi0xMSAxNjoyNjowNC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZWNkc2EvZWNkc2F0ZXN0 LmMJMjAxMy0xMS0wOCAxNzo1OTo0My4xNDgwMjgwMjQgKzAxMDAKLUBAIC0xMzgsMTEgKzEzOCwx NCBAQCBpbnQgcmVzdG9yZV9yYW5kKHZvaWQpCi0gCX0KLSAKLSBzdGF0aWMgaW50IGZieXRlc19j b3VudGVyID0gMDsKLS1zdGF0aWMgY29uc3QgY2hhciAqbnVtYmVyc1s4XSA9IHsKLStzdGF0aWMg Y29uc3QgY2hhciAqbnVtYmVyc1sxMF0gPSB7Ci0rCSI2NTEwNTY3NzA5MDYwMTUwNzYwNTY4MTA3 NjM0NTYzNTg1NjcxOTAxMDAxNTY2OTU2MTU2NjU2NTkiLAotIAkiNjUxMDU2NzcwOTA2MDE1MDc2 MDU2ODEwNzYzNDU2MzU4NTY3MTkwMTAwMTU2Njk1NjE1NjY1NjU5IiwKLSAJIjYxNDA1MDcwNjcw NjUwMDEwNjMwNjUwNjU1NjU2Njc0MDU1NjAwMDYxNjE1NTY1NjU2NjU2NTY2NTQiLAotIAkiODc2 MzAwMTAxNTA3MTA3NTY3NTAxMDY2MTMwNzYxNjcxMDc4MzU3MDEwNjcxMDY3NzgxNzc2NzE2NiIK LSAJIjcxNjc2MTc4NzI2NzE3IiwKLSsJIjg3NjMwMDEwMTUwNzEwNzU2NzUwMTA2NjEzMDc2MTY3 MTA3ODM1NzAxMDY3MTA2Nzc4MTc3NjcxNjYiCi0rCSI3MTY3NjE3ODcyNjcxNyIsCi0gCSI3MDAw MDAwMTc1NjkwNTY2NDY2NTU1MDU3ODE3NTcxNTcxMDc1NzA1MDE1NzU3NzU3MDU3Nzk1NzU1Igot IAkiNTU2NTcxNTY3NTY2NTUiLAotIAkiMTI3NTU1MjE5MTExMzIxMjMwMDAxMjAzMDQzOTE4NzE0 NjE2NDY0NjE0NjY0NjQ2Njc0OTQ5NDc5OSIsCi1AQCAtMTU3LDcgKzE2MCw3IEBAIGludCBmYnl0 ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtKQotIAlpbnQJcmV0OwotIAlCSUdOVU0JKnRt cCA9IE5VTEw7Ci0gCi0tCWlmIChmYnl0ZXNfY291bnRlciA+PSA4KQotKwlpZiAoZmJ5dGVzX2Nv dW50ZXIgPj0gMTApCi0gCQlyZXR1cm4gMDsKLSAJdG1wID0gQk5fbmV3KCk7Ci0gCWlmICghdG1w KQotQEAgLTU1MCw3ICs1NTMsOSBAQCBpbnQgbWFpbih2b2lkKQotIAlSQU5EX3NlZWQocm5kX3Nl ZWQsIHNpemVvZihybmRfc2VlZCkpOwotIAotIAkvKiB0aGUgdGVzdHMgKi8KLSsjaWYgMAotIAlp ZiAoIXg5XzYyX3Rlc3RzKG91dCkpICBnb3RvIGVycjsKLSsjZW5kaWYKLSAJaWYgKCF0ZXN0X2J1 aWx0aW4ob3V0KSkgZ290byBlcnI7Ci0gCQotIAlyZXQgPSAwOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2VjZHNhL2Vjc19saWIuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9lY2RzYS9lY3NfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZWNkc2EvZWNzX2xp Yi5jLmZpcHMtZWMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZWNkc2EvZWNzX2xpYi5jCTIwMTMtMTEtMDggMTc6NTk6NDMuMTQ4 MDI4MDI0ICswMTAwCi1AQCAtODEsMTQgKzgxLDcgQEAgY29uc3QgRUNEU0FfTUVUSE9EICpFQ0RT QV9nZXRfZGVmYXVsdF9tZQotIHsKLSAJaWYoIWRlZmF1bHRfRUNEU0FfbWV0aG9kKSAKLSAJCXsK LS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAoRklQU19tb2RlKCkpCi0tCQkJcmV0dXJuIEZJ UFNfZWNkc2Ffb3BlbnNzbCgpOwotLQkJZWxzZQotLQkJCXJldHVybiBFQ0RTQV9PcGVuU1NMKCk7 Ci0tI2Vsc2UKLSAJCWRlZmF1bHRfRUNEU0FfbWV0aG9kID0gRUNEU0FfT3BlblNTTCgpOwotLSNl bmRpZgotIAkJfQotIAlyZXR1cm4gZGVmYXVsdF9FQ0RTQV9tZXRob2Q7Ci0gfQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjZHNhL2Vjc19vc3NsLmMuZmlwcy1lYyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZWNkc2EvZWNzX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9l Y2RzYS9lY3Nfb3NzbC5jLmZpcHMtZWMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZWNkc2EvZWNzX29zc2wuYwkyMDEzLTExLTA4 IDE3OjU5OjQzLjE0ODAyODAyNCArMDEwMAotQEAgLTYwLDYgKzYwLDkgQEAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmpfbWFjLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBFQ0RTQV9TSUcgKmVjZHNhX2RvX3NpZ24oY29u c3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4sIAotIAkJY29uc3QgQklHTlVNICosIGNv bnN0IEJJR05VTSAqLCBFQ19LRVkgKmVja2V5KTsKLUBAIC03Nyw3ICs4MCw3IEBAIHN0YXRpYyBF Q0RTQV9NRVRIT0Qgb3BlbnNzbF9lY2RzYV9tZXRoID0KLSAJTlVMTCwgLyogaW5pdCAgICAgKi8K LSAJTlVMTCwgLyogZmluaXNoICAgKi8KLSAjZW5kaWYKLS0JMCwgICAgLyogZmxhZ3MgICAgKi8K LSsJRUNEU0FfRkxBR19GSVBTX01FVEhPRCwgICAgLyogZmxhZ3MgICAgKi8KLSAJTlVMTCAgLyog YXBwX2RhdGEgKi8KLSB9OwotIAotQEAgLTIzMSw2ICsyMzQsMTQgQEAgc3RhdGljIEVDRFNBX1NJ RyAqZWNkc2FfZG9fc2lnbihjb25zdCB1bgotIAlFQ0RTQV9EQVRBICplY2RzYTsKLSAJY29uc3Qg QklHTlVNICpwcml2X2tleTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FQ0RTQV9ET19TSUdOLEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5k aWYKLSsKLSAJZWNkc2EgICAgPSBlY2RzYV9jaGVjayhlY2tleSk7Ci0gCWdyb3VwICAgID0gRUNf S0VZX2dldDBfZ3JvdXAoZWNrZXkpOwotIAlwcml2X2tleSA9IEVDX0tFWV9nZXQwX3ByaXZhdGVf a2V5KGVja2V5KTsKLUBAIC0zNjAsNiArMzcxLDE0IEBAIHN0YXRpYyBpbnQgZWNkc2FfZG9fdmVy aWZ5KGNvbnN0IHVuc2lnbmUKLSAJY29uc3QgRUNfR1JPVVAgKmdyb3VwOwotIAljb25zdCBFQ19Q T0lOVCAqcHViX2tleTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FQ0RTQV9ET19WRVJJRlksRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAtMTsKLSsJCX0KLSsjZW5kaWYK LSsKLSAJLyogY2hlY2sgaW5wdXQgdmFsdWVzICovCi0gCWlmIChlY2tleSA9PSBOVUxMIHx8IChn cm91cCA9IEVDX0tFWV9nZXQwX2dyb3VwKGVja2V5KSkgPT0gTlVMTCB8fAotIAkgICAgKHB1Yl9r ZXkgPSBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVja2V5KSkgPT0gTlVMTCB8fCBzaWcgPT0gTlVM TCkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lYy9lY19rZXkuYy5maXBzLWVjIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9lYy9lY19rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9lYy9lY19rZXkuYy5maXBzLWVjCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjL2VjX2tleS5jCTIwMTMtMTEtMDggMTc6NTk6 NDMuMTQ4MDI4MDI0ICswMTAwCi1AQCAtNjQsOSArNjQsNiBAQAotICNpbmNsdWRlIDxzdHJpbmcu aD4KLSAjaW5jbHVkZSAiZWNfbGNsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLSNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLS0jZW5kaWYKLSAK LSBFQ19LRVkgKkVDX0tFWV9uZXcodm9pZCkKLSAJewotQEAgLTIzNCw2ICsyMzEsMzkgQEAgaW50 IEVDX0tFWV91cF9yZWYoRUNfS0VZICpyKQotIAlyZXR1cm4gKChpID4gMSkgPyAxIDogMCk7Ci0g CX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFu ZC5oPgotKwotK3N0YXRpYyBpbnQgZmlwc19jaGVja19lYyhFQ19LRVkgKmtleSkKLSsJewotKwlF VlBfUEtFWSAqcGs7Ci0rCXVuc2lnbmVkIGNoYXIgdGJzW10gPSAiRUNEU0EgUGFpcndpc2UgQ2hl Y2sgRGF0YSI7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9 PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfRUNfS0VZKHBrLCBrZXkp OwotKwotKwlpZiAoZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAw LCBOVUxMLCAwLCBOVUxMKSkKLSsJCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsJaWYgKHJldCA9PSAw KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19FQyxGSVBTX1JfUEFJUldJU0Vf VEVTVF9GQUlMRUQpOwotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJfQotKwlpZiAo cGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRp ZgotKwotIGludCBFQ19LRVlfZ2VuZXJhdGVfa2V5KEVDX0tFWSAqZWNrZXkpCi0gCXsJCi0gCWlu dAlvayA9IDA7Ci1AQCAtMjQyLDggKzI3MiwxMSBAQCBpbnQgRUNfS0VZX2dlbmVyYXRlX2tleShF Q19LRVkgKmVja2V5KQotIAlFQ19QT0lOVCAqcHViX2tleSA9IE5VTEw7Ci0gCi0gI2lmZGVmIE9Q RU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQlyZXR1cm4gRklQU19lY19rZXlfZ2Vu ZXJhdGVfa2V5KGVja2V5KTsKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJ CUZJUFNlcnIoRklQU19GX0VDX0tFWV9HRU5FUkFURV9LRVksRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotICNlbmRpZgotIAotIAlpZiAoIWVja2V5IHx8 ICFlY2tleS0+Z3JvdXApCi1AQCAtMjg3LDYgKzMyMCwxNSBAQCBpbnQgRUNfS0VZX2dlbmVyYXRl X2tleShFQ19LRVkgKmVja2V5KQotIAllY2tleS0+cHJpdl9rZXkgPSBwcml2X2tleTsKLSAJZWNr ZXktPnB1Yl9rZXkgID0gcHViX2tleTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKCFm aXBzX2NoZWNrX2VjKGVja2V5KSkKLSsJCXsKLSsJCWVja2V5LT5wcml2X2tleSA9IE5VTEw7Ci0r CQllY2tleS0+cHViX2tleSAgPSBOVUxMOwotKwkgICAgCWdvdG8gZXJyOwotKwkJfQotKyNlbmRp ZgotKwotIAlvaz0xOwotIAotIGVycjoJCi1AQCAtNDI5LDEwICs0NzEsMTIgQEAgaW50IEVDX0tF WV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbgotIAkJCQkJCQkJdHgsIHR5LCBjdHgpKQot IAkJCWdvdG8gZXJyOwotIAkJfQotLQkvKiBDaGVjayBpZiByZXRyaWV2ZWQgY29vcmRpbmF0ZXMg bWF0Y2ggb3JpZ2luYWxzOiBpZiBub3QgdmFsdWVzCi0tCSAqIGFyZSBvdXQgb2YgcmFuZ2UuCi0r CS8qIENoZWNrIGlmIHJldHJpZXZlZCBjb29yZGluYXRlcyBtYXRjaCBvcmlnaW5hbHMgYW5kIGFy ZSBsZXNzIHRoYW4KLSsJICogZmllbGQgb3JkZXI6IGlmIG5vdCB2YWx1ZXMgYXJlIG91dCBvZiBy YW5nZS4KLSAJICovCi0tCWlmIChCTl9jbXAoeCwgdHgpIHx8IEJOX2NtcCh5LCB0eSkpCi0rCWlm IChCTl9jbXAoeCwgdHgpIHx8IEJOX2NtcCh5LCB0eSkKLSsJCXx8IChCTl9jbXAoeCwgJmtleS0+ Z3JvdXAtPmZpZWxkKSA+PSAwKQotKwkJfHwgKEJOX2NtcCh5LCAma2V5LT5ncm91cC0+ZmllbGQp ID49IDApKQotIAkJewotIAkJRUNlcnIoRUNfRl9FQ19LRVlfU0VUX1BVQkxJQ19LRVlfQUZGSU5F X0NPT1JESU5BVEVTLAotIAkJCUVDX1JfQ09PUkRJTkFURVNfT1VUX09GX1JBTkdFKTsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lYy9lY3BfbW9udC5jLmZpcHMtZWMgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2VjL2VjcF9tb250LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZWMv ZWNwX21vbnQuYy5maXBzLWVjCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjL2VjcF9tb250LmMJMjAxMy0xMS0wOCAxNzo1OTo0 My4xNDkwMjgwNDYgKzAxMDAKLUBAIC02MywxOCArNjMsMTEgQEAKLSAKLSAjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotLSNlbmRpZgotLQotICNpbmNsdWRlICJlY19sY2wuaCIKLSAKLSAKLSBjb25zdCBF Q19NRVRIT0QgKkVDX0dGcF9tb250X21ldGhvZCh2b2lkKQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xf RklQUwotLQlyZXR1cm4gZmlwc19lY19nZnBfbW9udF9tZXRob2QoKTsKLS0jZWxzZQotIAlzdGF0 aWMgY29uc3QgRUNfTUVUSE9EIHJldCA9IHsKLSAJCUVDX0ZMQUdTX0RFRkFVTFRfT0NULAotIAkJ TklEX1g5XzYyX3ByaW1lX2ZpZWxkLAotQEAgLTExNSw3ICsxMDgsNiBAQCBjb25zdCBFQ19NRVRI T0QgKkVDX0dGcF9tb250X21ldGhvZCh2b2lkCi0gCQllY19HRnBfbW9udF9maWVsZF9zZXRfdG9f b25lIH07Ci0gCi0gCXJldHVybiAmcmV0OwotLSNlbmRpZgotIAl9Ci0gCi0gCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZWMvZWNwX25pc3QuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9lYy9lY3BfbmlzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjL2VjcF9u aXN0LmMuZmlwcy1lYwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9lYy9lY3BfbmlzdC5jCTIwMTMtMTEtMDggMTc6NTk6NDMuMTQ5 MDI4MDQ2ICswMTAwCi1AQCAtNjcsMTUgKzY3LDggQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmpf bWFjLmg+Ci0gI2luY2x1ZGUgImVjX2xjbC5oIgotIAotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0j aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0tI2VuZGlmCi0tCi0gY29uc3QgRUNfTUVUSE9EICpF Q19HRnBfbmlzdF9tZXRob2Qodm9pZCkKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0 dXJuIGZpcHNfZWNfZ2ZwX25pc3RfbWV0aG9kKCk7Ci0tI2Vsc2UKLSAJc3RhdGljIGNvbnN0IEVD X01FVEhPRCByZXQgPSB7Ci0gCQlFQ19GTEFHU19ERUZBVUxUX09DVCwKLSAJCU5JRF9YOV82Ml9w cmltZV9maWVsZCwKLUBAIC0xMTYsNyArMTA5LDYgQEAgY29uc3QgRUNfTUVUSE9EICpFQ19HRnBf bmlzdF9tZXRob2Qodm9pZAotIAkJMCAvKiBmaWVsZF9zZXRfdG9fb25lICovIH07Ci0gCi0gCXJl dHVybiAmcmV0OwotLSNlbmRpZgotIAl9Ci0gCi0gaW50IGVjX0dGcF9uaXN0X2dyb3VwX2NvcHko RUNfR1JPVVAgKmRlc3QsIGNvbnN0IEVDX0dST1VQICpzcmMpCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZWMvZWNwX3NtcGwuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9l Yy9lY3Bfc21wbC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VjL2VjcF9zbXBsLmMuZmlw cy1lYwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9lYy9lY3Bfc21wbC5jCTIwMTMtMTEtMDggMTc6NTk6NDMuMTQ5MDI4MDQ2ICsw MTAwCi1AQCAtNjUsMTcgKzY1LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvc3ltaGFja3MuaD4KLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotLSNlbmRpZgotLQotICNpbmNsdWRlICJlY19sY2wuaCIK LSAKLSBjb25zdCBFQ19NRVRIT0QgKkVDX0dGcF9zaW1wbGVfbWV0aG9kKHZvaWQpCi0gCXsKLS0j aWZkZWYgT1BFTlNTTF9GSVBTCi0tCXJldHVybiBmaXBzX2VjX2dmcF9zaW1wbGVfbWV0aG9kKCk7 Ci0tI2Vsc2UKLSAJc3RhdGljIGNvbnN0IEVDX01FVEhPRCByZXQgPSB7Ci0gCQlFQ19GTEFHU19E RUZBVUxUX09DVCwKLSAJCU5JRF9YOV82Ml9wcmltZV9maWVsZCwKLUBAIC0xMTYsNyArMTA5LDYg QEAgY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfc2ltcGxlX21ldGhvZCh2bwotIAkJMCAvKiBmaWVs ZF9zZXRfdG9fb25lICovIH07Ci0gCi0gCXJldHVybiAmcmV0OwotLSNlbmRpZgotIAl9Ci0gCi0g Ci1AQCAtMTg2LDYgKzE3OCwxMiBAQCBpbnQgZWNfR0ZwX3NpbXBsZV9ncm91cF9zZXRfY3VydmUo RUNfR1JPCi0gCQlyZXR1cm4gMDsKLSAJCX0KLSAKLSsJaWYgKEJOX251bV9iaXRzKHApIDwgMjU2 KQotKwkJewotKwkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX0dST1VQX1NFVF9DVVJWRSwgRUNf Ul9VTlNVUFBPUlRFRF9GSUVMRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSAJaWYgKGN0eCA9 PSBOVUxMKQotIAkJewotIAkJY3R4ID0gbmV3X2N0eCA9IEJOX0NUWF9uZXcoKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvbV9lY2RzYS5jLmZpcHMtZWMgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2V2cC9tX2VjZHNhLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21f ZWNkc2EuYy5maXBzLWVjCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9tX2VjZHNhLmMJMjAxMy0xMS0wOCAxNzo1OTo0My4x NDkwMjgwNDYgKzAxMDAKLUBAIC0xMTYsNyArMTE2LDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC94 NTA5Lmg+Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQQotLSNpZm5kZWYgT1BFTlNTTF9GSVBT Ci0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gU0hBMV9J bml0KGN0eC0+bWRfZGF0YSk7IH0KLUBAIC0xMzIsNyArMTMxLDcgQEAgc3RhdGljIGNvbnN0IEVW UF9NRCBlY2RzYV9tZD0KLSAJTklEX2VjZHNhX3dpdGhfU0hBMSwKLSAJTklEX2VjZHNhX3dpdGhf U0hBMSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAot KwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1 cGRhdGUsCi0gCWZpbmFsLAotQEAgLTE0OCw0ICsxNDcsMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9l Y2RzYSh2b2lkKQotIAlyZXR1cm4oJmVjZHNhX21kKTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2VjZGh2cy5jLmZp cHMtZWMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2VjZGh2cy5jCi0tLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2VjZGh2cy5jLmZpcHMtZWMJMjAx My0xMS0wOCAxNzo1OTo0My4xNDkwMjgwNDYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZWNkaHZzLmMJMjAxMy0xMS0wOCAxNzo1OTo0My4xNDkwMjgwNDYg KzAxMDAKLUBAIC0wLDAgKzEsNDk2IEBACi0rLyogZmlwcy9lY2RoL2ZpcHNfZWNkaHZzLmMgKi8K LSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBm b3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqLwotKwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0r ICAgIHByaW50ZigiTm8gRklQUyBFQ0RIIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0r fQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lY2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsj aW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgY29uc3QgRVZQX01EICplcGFyc2VfbWQo Y2hhciAqbGluZSkKLSsJewotKwljaGFyICpwOwotKwlpZiAobGluZVswXSAhPSAnWycgfHwgbGlu ZVsxXSAhPSAnRScpCi0rCQlyZXR1cm4gTlVMTDsKLSsJcCA9IHN0cmNocihsaW5lLCAnLScpOwot KwlpZiAoIXApCi0rCQlyZXR1cm4gTlVMTDsKLSsJbGluZSA9IHAgKyAxOwotKwlwID0gc3RyY2hy KGxpbmUsICddJyk7Ci0rCWlmICghcCkKLSsJCXJldHVybiBOVUxMOwotKwkqcCA9IDA7Ci0rCXAg PSBsaW5lOwotKwl3aGlsZShpc3NwYWNlKCpwKSkKLSsJCXArKzsKLSsJaWYgKCFzdHJjbXAocCwg IlNIQTEiKSkKLSsJCXJldHVybiBFVlBfc2hhMSgpOwotKwllbHNlIGlmICghc3RyY21wKHAsICJT SEEyMjQiKSkKLSsJCXJldHVybiBFVlBfc2hhMjI0KCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAocCwg IlNIQTI1NiIpKQotKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChw LCAiU0hBMzg0IikpCi0rCQlyZXR1cm4gRVZQX3NoYTM4NCgpOwotKwllbHNlIGlmICghc3RyY21w KHAsICJTSEE1MTIiKSkKLSsJCXJldHVybiBFVlBfc2hhNTEyKCk7Ci0rCWVsc2UKLSsJCXJldHVy biBOVUxMOwotKwl9Ci0rCi0rc3RhdGljIGludCBsb29rdXBfY3VydmUyKGNoYXIgKmNuYW1lKQot Kwl7Ci0rCWNoYXIgKnA7Ci0rCXAgPSBzdHJjaHIoY25hbWUsICddJyk7Ci0rCWlmICghcCkKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgZXJyb3I6IG1pc3NpbmcgXVxuIik7Ci0rCQly ZXR1cm4gTklEX3VuZGVmOwotKwkJfQotKwkqcCA9IDA7Ci0rCi0rCWlmICghc3RyY21wKGNuYW1l LCAiQi0xNjMiKSkKLSsJCXJldHVybiBOSURfc2VjdDE2M3IyOwotKwlpZiAoIXN0cmNtcChjbmFt ZSwgIkItMjMzIikpCi0rCQlyZXR1cm4gTklEX3NlY3QyMzNyMTsKLSsJaWYgKCFzdHJjbXAoY25h bWUsICJCLTI4MyIpKQotKwkJcmV0dXJuIE5JRF9zZWN0MjgzcjE7Ci0rCWlmICghc3RyY21wKGNu YW1lLCAiQi00MDkiKSkKLSsJCXJldHVybiBOSURfc2VjdDQwOXIxOwotKwlpZiAoIXN0cmNtcChj bmFtZSwgIkItNTcxIikpCi0rCQlyZXR1cm4gTklEX3NlY3Q1NzFyMTsKLSsJaWYgKCFzdHJjbXAo Y25hbWUsICJLLTE2MyIpKQotKwkJcmV0dXJuIE5JRF9zZWN0MTYzazE7Ci0rCWlmICghc3RyY21w KGNuYW1lLCAiSy0yMzMiKSkKLSsJCXJldHVybiBOSURfc2VjdDIzM2sxOwotKwlpZiAoIXN0cmNt cChjbmFtZSwgIkstMjgzIikpCi0rCQlyZXR1cm4gTklEX3NlY3QyODNrMTsKLSsJaWYgKCFzdHJj bXAoY25hbWUsICJLLTQwOSIpKQotKwkJcmV0dXJuIE5JRF9zZWN0NDA5azE7Ci0rCWlmICghc3Ry Y21wKGNuYW1lLCAiSy01NzEiKSkKLSsJCXJldHVybiBOSURfc2VjdDU3MWsxOwotKwlpZiAoIXN0 cmNtcChjbmFtZSwgIlAtMTkyIikpCi0rCQlyZXR1cm4gTklEX1g5XzYyX3ByaW1lMTkydjE7Ci0r CWlmICghc3RyY21wKGNuYW1lLCAiUC0yMjQiKSkKLSsJCXJldHVybiBOSURfc2VjcDIyNHIxOwot KwlpZiAoIXN0cmNtcChjbmFtZSwgIlAtMjU2IikpCi0rCQlyZXR1cm4gTklEX1g5XzYyX3ByaW1l MjU2djE7Ci0rCWlmICghc3RyY21wKGNuYW1lLCAiUC0zODQiKSkKLSsJCXJldHVybiBOSURfc2Vj cDM4NHIxOwotKwlpZiAoIXN0cmNtcChjbmFtZSwgIlAtNTIxIikpCi0rCQlyZXR1cm4gTklEX3Nl Y3A1MjFyMTsKLSsKLSsJZnByaW50ZihzdGRlcnIsICJVbmtub3duIEN1cnZlIG5hbWUgJXNcbiIs IGNuYW1lKTsKLSsJcmV0dXJuIE5JRF91bmRlZjsKLSsJfQotKwotK3N0YXRpYyBpbnQgbG9va3Vw X2N1cnZlKGNoYXIgKmNuYW1lKQotKwl7Ci0rCWNoYXIgKnA7Ci0rCXAgPSBzdHJjaHIoY25hbWUs ICc6Jyk7Ci0rCWlmICghcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgZXJyb3I6 IG1pc3NpbmcgOlxuIik7Ci0rCQlyZXR1cm4gTklEX3VuZGVmOwotKwkJfQotKwljbmFtZSA9IHAg KyAxOwotKwl3aGlsZShpc3NwYWNlKCpjbmFtZSkpCi0rCQljbmFtZSsrOwotKwlyZXR1cm4gbG9v a3VwX2N1cnZlMihjbmFtZSk7Ci0rCX0KLSsKLStzdGF0aWMgRUNfUE9JTlQgKm1ha2VfcGVlcihF Q19HUk9VUCAqZ3JvdXAsIEJJR05VTSAqeCwgQklHTlVNICp5KQotKwl7Ci0rCUVDX1BPSU5UICpw ZWVyOwotKwlpbnQgcnY7Ci0rCUJOX0NUWCAqYzsKLSsJcGVlciA9IEVDX1BPSU5UX25ldyhncm91 cCk7Ci0rCWlmICghcGVlcikKLSsJCXJldHVybiBOVUxMOwotKwljID0gQk5fQ1RYX25ldygpOwot KwlpZiAoRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKEVDX0dST1VQX21ldGhvZF9vZihncm91cCkp Ci0rCQk9PSBOSURfWDlfNjJfcHJpbWVfZmllbGQpCi0rCQlydiA9IEVDX1BPSU5UX3NldF9hZmZp bmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBwZWVyLCB4LCB5LCBjKTsKLSsJZWxzZQotKyNpZmRl ZiBPUEVOU1NMX05PX0VDMk0KLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6IEdGMm0g bm90IHN1cHBvcnRlZFxuIik7Ci0rCQlleGl0KDEpOwotKwkJfQotKyNlbHNlCi0rCQlydiA9IEVD X1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShncm91cCwgcGVlciwgeCwgeSwgYyk7 Ci0rI2VuZGlmCi0rCi0rCUJOX0NUWF9mcmVlKGMpOwotKwlpZiAocnYpCi0rCQlyZXR1cm4gcGVl cjsKLSsJRUNfUE9JTlRfZnJlZShwZWVyKTsKLSsJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLStzdGF0 aWMgaW50IGVjX3ByaW50X2tleShGSUxFICpvdXQsIEVDX0tFWSAqa2V5LCBpbnQgYWRkX2UsIGlu dCBleG91dCkKLSsJewotKwljb25zdCBFQ19QT0lOVCAqcHQ7Ci0rCWNvbnN0IEVDX0dST1VQICpn cnA7Ci0rCWNvbnN0IEVDX01FVEhPRCAqbWV0aDsKLSsJaW50IHJ2OwotKwlCSUdOVU0gKnR4LCAq dHk7Ci0rCWNvbnN0IEJJR05VTSAqZCA9IE5VTEw7Ci0rCUJOX0NUWCAqY3R4OwotKwljdHggPSBC Tl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KQotKwkJcmV0dXJuIDA7Ci0rCXR4ID0gQk5fQ1RYX2dl dChjdHgpOwotKwl0eSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJaWYgKCF0eCB8fCAhdHkpCi0rCQly ZXR1cm4gMDsKLSsJZ3JwID0gRUNfS0VZX2dldDBfZ3JvdXAoa2V5KTsKLSsJcHQgPSBFQ19LRVlf Z2V0MF9wdWJsaWNfa2V5KGtleSk7Ci0rCWlmIChleG91dCkKLSsJCWQgPSBFQ19LRVlfZ2V0MF9w cml2YXRlX2tleShrZXkpOwotKwltZXRoID0gRUNfR1JPVVBfbWV0aG9kX29mKGdycCk7Ci0rCWlm IChFQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUobWV0aCkgPT0gTklEX1g5XzYyX3ByaW1lX2ZpZWxk KQotKwkJcnYgPSBFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChncnAsIHB0LCB0 eCwgdHksIGN0eCk7Ci0rCWVsc2UKLSsjaWZkZWYgT1BFTlNTTF9OT19FQzJNCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBHRjJtIG5vdCBzdXBwb3J0ZWRcbiIpOwotKwkJZXhpdCgx KTsKLSsJCX0KLSsjZWxzZQotKwkJcnYgPSBFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVz X0dGMm0oZ3JwLCBwdCwgdHgsIHR5LCBjdHgpOwotKyNlbmRpZgotKwotKwlpZiAoYWRkX2UpCi0r CQl7Ci0rCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlFlSVVUeCIsIHR4KTsKLSsJCWRvX2JuX3By aW50X25hbWUob3V0LCAiUWVJVVR5IiwgdHkpOwotKwkJaWYgKGQpCi0rCQkJZG9fYm5fcHJpbnRf bmFtZShvdXQsICJRZUlVVGQiLCBkKTsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJZG9fYm5fcHJp bnRfbmFtZShvdXQsICJRSVVUeCIsIHR4KTsKLSsJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiUUlV VHkiLCB0eSk7Ci0rCQlpZiAoZCkKLSsJCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlFJVVRkIiwg ZCk7Ci0rCQl9Ci0rCi0rCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCi0rCXJldHVybiBydjsKLSsKLSsJ fQotKwotK3N0YXRpYyB2b2lkIGVjX291dHB1dF9aaGFzaChGSUxFICpvdXQsIGludCBleG91dCwg RUNfR1JPVVAgKmdyb3VwLAotKwkJCUJJR05VTSAqaXgsIEJJR05VTSAqaXksIEJJR05VTSAqaWQs IEJJR05VTSAqY3gsCi0rCQkJQklHTlVNICpjeSwgY29uc3QgRVZQX01EICptZCwKLSsJCQkJdW5z aWduZWQgY2hhciAqcmhhc2gsIHNpemVfdCByaGFzaGxlbikKLSsJewotKwlFQ19LRVkgKmVjID0g TlVMTDsKLSsJRUNfUE9JTlQgKnBlZXJrZXkgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpaOwot Kwl1bnNpZ25lZCBjaGFyIGNoYXNoW0VWUF9NQVhfTURfU0laRV07Ci0rCWludCBabGVuOwotKwll YyA9IEVDX0tFWV9uZXcoKTsKLSsJRUNfS0VZX3NldF9mbGFncyhlYywgRUNfRkxBR19DT0ZBQ1RP Ul9FQ0RIKTsKLSsJRUNfS0VZX3NldF9ncm91cChlYywgZ3JvdXApOwotKwlwZWVya2V5ID0gbWFr ZV9wZWVyKGdyb3VwLCBjeCwgY3kpOwotKwlpZiAocmhhc2ggPT0gTlVMTCkKLSsJCXsKLSsJCWlm IChtZCkKLSsJCQlyaGFzaGxlbiA9IE1fRVZQX01EX3NpemUobWQpOwotKwkJRUNfS0VZX2dlbmVy YXRlX2tleShlYyk7Ci0rCQllY19wcmludF9rZXkob3V0LCBlYywgbWQgPyAxIDogMCwgZXhvdXQp OwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlFQ19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nv b3JkaW5hdGVzKGVjLCBpeCwgaXkpOwotKwkJRUNfS0VZX3NldF9wcml2YXRlX2tleShlYywgaWQp OwotKwkJfQotKwlabGVuID0gKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApICsgNykvODsKLSsJ WiA9IE9QRU5TU0xfbWFsbG9jKFpsZW4pOwotKwlpZiAoIVopCi0rCQlleGl0KDEpOwotKwlFQ0RI X2NvbXB1dGVfa2V5KFosIFpsZW4sIHBlZXJrZXksIGVjLCAwKTsKLSsJaWYgKG1kKQotKwkJewot KwkJaWYgKGV4b3V0KQotKwkJCU91dHB1dFZhbHVlKCJaIiwgWiwgWmxlbiwgb3V0LCAwKTsKLSsJ CUZJUFNfZGlnZXN0KFosIFpsZW4sIGNoYXNoLCBOVUxMLCBtZCk7Ci0rCQlPdXRwdXRWYWx1ZShy aGFzaCA/ICJJVVRIYXNoWloiIDogIkhhc2haWiIsCi0rCQkJCQkJY2hhc2gsIHJoYXNobGVuLCBv dXQsIDApOwotKwkJaWYgKHJoYXNoKQotKwkJCXsKLSsJCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9 ICVzXG4iLAotKwkJCQltZW1jbXAoY2hhc2gsIHJoYXNoLCByaGFzaGxlbikgPyAiRiIgOiAiUCIp OwotKwkJCX0KLSsJCX0KLSsJZWxzZQotKwkJT3V0cHV0VmFsdWUoIlpJVVQiLCBaLCBabGVuLCBv dXQsIDApOwotKwlPUEVOU1NMX2NsZWFuc2UoWiwgWmxlbik7Ci0rCU9QRU5TU0xfZnJlZShaKTsK LSsJRUNfS0VZX2ZyZWUoZWMpOwotKwlFQ19QT0lOVF9mcmVlKHBlZXJrZXkpOwotKwl9Ci0rCQkK LSsjaWZkZWYgRklQU19BTEdWUwotK2ludCBmaXBzX2VjZGh2c19tYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKLSsjZWxzZQotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZW5k aWYKLSsJewotKwljaGFyICoqYXJncyA9IGFyZ3YgKyAxOwotKwlpbnQgYXJnbiA9IGFyZ2MgLSAx OwotKwlGSUxFICppbiwgKm91dDsKLSsJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07Ci0rCXVu c2lnbmVkIGNoYXIgKnJoYXNoID0gTlVMTDsKLSsJbG9uZyByaGFzaGxlbjsKLSsJQklHTlVNICpj eCA9IE5VTEwsICpjeSA9IE5VTEw7Ci0rCUJJR05VTSAqaWQgPSBOVUxMLCAqaXggPSBOVUxMLCAq aXkgPSBOVUxMOwotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJRUNfR1JPVVAgKmdyb3Vw ID0gTlVMTDsKLSsJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7Ci0rCWludCBk b192ZXJpZnkgPSAtMSwgZXhvdXQgPSAwOwotKwlpbnQgcnYgPSAxOwotKwotKwlpbnQgY3VydmVf bmlkc1s1XSA9IHswLDAsMCwwLDB9OwotKwlpbnQgcGFyYW1fc2V0ID0gLTE7Ci0rCi0rCWZpcHNf YWxndGVzdF9pbml0KCk7Ci0rCi0rCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJlY2RodmVy IikpCi0rCQl7Ci0rCQlkb192ZXJpZnkgPSAxOwotKwkJYXJncysrOwotKwkJYXJnbi0tOwotKwkJ fQotKwllbHNlIGlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJlY2RoZ2VuIikpCi0rCQl7Ci0r CQlkb192ZXJpZnkgPSAwOwotKwkJYXJncysrOwotKwkJYXJnbi0tOwotKwkJfQotKwotKwlpZiAo YXJnbiAmJiAhc3RyY21wKCphcmdzLCAiLWV4b3V0IikpCi0rCQl7Ci0rCQlleG91dCA9IDE7Ci0r CQlhcmdzKys7Ci0rCQlhcmduLS07Ci0rCQl9Ci0rCi0rCWlmIChkb192ZXJpZnkgPT0gLTEpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiJXMgW2VjZGh2ZXJ8ZWNkaGdlbnxdIFstZXhvdXRdIChp bmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwlpZiAo YXJnbiA9PSAyKQotKwkJewotKwkJaW4gPSBmb3BlbigqYXJncywgInIiKTsKLSsJCWlmICghaW4p Ci0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4i KTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7Ci0r CQlpZiAoIW91dCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91 dHB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJn biA9PSAwKQotKwkJewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJ ZWxzZQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRd IChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwl3 aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0 cyhidWYsIG91dCk7Ci0rCQlpZiAoYnVmWzBdID09ICdbJyAmJiBidWZbMV0gPT0gJ0UnKQotKwkJ CXsKLSsJCQlpbnQgYyA9IGJ1ZlsyXTsKLSsJCQlpZiAoYyA8ICdBJyB8fCBjID4gJ0UnKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCXBhcmFtX3NldCA9IGMgLSAnQSc7Ci0rCQkJLyogSWYg anVzdCBbRT9dIHRoZW4gaW5pdGlhbCBwYXJhbXNldCAqLwotKwkJCWlmIChidWZbM10gPT0gJ10n KQotKwkJCQljb250aW51ZTsKLSsJCQlpZiAoZ3JvdXApCi0rCQkJCUVDX0dST1VQX2ZyZWUoZ3Jv dXApOwotKwkJCWdyb3VwID0gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUoY3VydmVfbmlkc1tj IC0gJ0EnXSk7Ci0rCQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gMTAgJiYgIXN0cm5jbXAoYnVm LCAiW0N1cnZlIiwgNikpCi0rCQkJewotKwkJCWludCBuaWQ7Ci0rCQkJaWYgKHBhcmFtX3NldCA9 PSAtMSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQluaWQgPSBsb29rdXBfY3VydmUoYnVm KTsKLSsJCQlpZiAobmlkID09IE5JRF91bmRlZikKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQljdXJ2ZV9uaWRzW3BhcmFtX3NldF0gPSBuaWQ7Ci0rCQkJfQotKwotKwkJaWYgKHN0cmxlbihi dWYpID4gNCAmJiBidWZbMF0gPT0gJ1snICYmIGJ1ZlsyXSA9PSAnLScpCi0rCQkJewotKwkJCWlu dCBuaWQgPSBsb29rdXBfY3VydmUyKGJ1ZiArIDEpOwotKwkJCWlmIChuaWQgPT0gTklEX3VuZGVm KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChncm91cCkKLSsJCQkJRUNfR1JPVVBf ZnJlZShncm91cCk7Ci0rCQkJZ3JvdXAgPSBFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShuaWQp OwotKwkJCWlmICghZ3JvdXApCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjog dW5zdXBwb3J0ZWQgY3VydmUgJXNcbiIsIGJ1ZiArIDEpOwotKwkJCQlyZXR1cm4gMTsKLSsJCQkJ fQotKwkJCX0KLSsKLSsJCWlmIChzdHJsZW4oYnVmKSA+IDYgJiYgIXN0cm5jbXAoYnVmLCAiW0Ui LCAyKSkKLSsJCQl7Ci0rCQkJbWQgPSBlcGFyc2VfbWQoYnVmKTsKLSsJCQlpZiAobWQgPT0gTlVM TCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsK LSsJCWlmICghc3RyY21wKGtleXdvcmQsICJRZUNBVlN4IikgfHwgIXN0cmNtcChrZXl3b3JkLCAi UUNBVlN4IikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZjeCwgdmFsdWUpKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlFl Q0FWU3kiKSB8fCAhc3RyY21wKGtleXdvcmQsICJRQ0FWU3kiKSkKLSsJCQl7Ci0rCQkJaWYgKCFk b19oZXgyYm4oJmN5LCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKGRv X3ZlcmlmeSA9PSAwKQotKwkJCQllY19vdXRwdXRfWmhhc2gob3V0LCBleG91dCwgZ3JvdXAsCi0r CQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJCQljeCwgY3ksIG1kLCByaGFzaCwgcmhhc2hs ZW4pOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImRlSVVUIikpCi0rCQkJ ewotKwkJCWlmICghZG9faGV4MmJuKCZpZCwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlFlSVVUeCIpKQotKwkJCXsK LSsJCQlpZiAoIWRvX2hleDJibigmaXgsIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJRZUlVVHkiKSkKLSsJCQl7Ci0r CQkJaWYgKCFkb19oZXgyYm4oJml5LCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQotKwkJCXsK LSsJCQlpZiAoIW1kKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCXJoYXNoID0gaGV4MmJp bl9tKHZhbHVlLCAmcmhhc2hsZW4pOwotKwkJCWlmICghcmhhc2ggfHwgcmhhc2hsZW4gIT0gTV9F VlBfTURfc2l6ZShtZCkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJZWNfb3V0cHV0X1po YXNoKG91dCwgZXhvdXQsIGdyb3VwLCBpeCwgaXksIGlkLCBjeCwgY3ksCi0rCQkJCQltZCwgcmhh c2gsIHJoYXNobGVuKTsKLSsJCQl9Ci0rCQl9Ci0rCXJ2ID0gMDsKLSsJcGFyc2VfZXJyb3I6Ci0r CWlmIChpZCkKLSsJCUJOX2ZyZWUoaWQpOwotKwlpZiAoaXgpCi0rCQlCTl9mcmVlKGl4KTsKLSsJ aWYgKGl5KQotKwkJQk5fZnJlZShpeSk7Ci0rCWlmIChjeCkKLSsJCUJOX2ZyZWUoY3gpOwotKwlp ZiAoY3kpCi0rCQlCTl9mcmVlKGN5KTsKLSsJaWYgKGdyb3VwKQotKwkJRUNfR1JPVVBfZnJlZShn cm91cCk7Ci0rCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChv dXQgJiYgb3V0ICE9IHN0ZG91dCkKLSsJCWZjbG9zZShvdXQpOwotKwlpZiAocnYpCi0rCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIFBhcnNpbmcgcmVxdWVzdCBmaWxlXG4iKTsKLSsJcmV0dXJuIHJ2 OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfZWNkc2F2cy5jLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2VjZHNhdnMuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlw c19lY2RzYXZzLmMuZmlwcy1lYwkyMDEzLTExLTA4IDE3OjU5OjQzLjE1MDAyODA2OCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19lY2RzYXZzLmMJMjAxMy0x MS0wOCAxNzo1OTo0My4xNTAwMjgwNjggKzAxMDAKLUBAIC0wLDAgKzEsNTMzIEBACi0rLyogZmlw cy9lY2RzYS9maXBzX2VjZHNhdnMuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2RlZmluZSBPUEVO U1NMX0ZJUFNBUEkKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRl IDxzdGRpby5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIEVDRFNBIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZWNkc2EuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjaW5jbHVkZSA8 b3BlbnNzbC9vYmplY3RzLmg+Ci0rCi0rCi0rc3RhdGljIGludCBlbG9va3VwX2N1cnZlKGNoYXIg KmluLCBjaGFyICpjdXJ2ZV9uYW1lLCBjb25zdCBFVlBfTUQgKipwbWQpCi0rCXsKLSsJY2hhciAq Y25hbWUsICpwOwotKwkvKiBDb3B5IGJ1ZmZlciBhcyB3ZSB3aWxsIGNoYW5nZSBpdCAqLwotKwlz dHJjcHkoY3VydmVfbmFtZSwgaW4pOwotKwljbmFtZSA9IGN1cnZlX25hbWUgKyAxOwotKwlwID0g c3RyY2hyKGNuYW1lLCAnXScpOwotKwlpZiAoIXApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwg IlBhcnNlIGVycm9yOiBtaXNzaW5nIF1cbiIpOwotKwkJcmV0dXJuIE5JRF91bmRlZjsKLSsJCX0K LSsJKnAgPSAwOwotKwlwID0gc3RyY2hyKGNuYW1lLCAnLCcpOwotKwlpZiAocCkKLSsJCXsKLSsJ CWlmICghcG1kKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIGVycm9yOiB1bmV4 cGVjdGVkIGRpZ2VzdFxuIik7Ci0rCQkJcmV0dXJuIE5JRF91bmRlZjsKLSsJCQl9Ci0rCQkqcCA9 IDA7Ci0rCQlwKys7Ci0rCi0rCQlpZiAoIXN0cmNtcChwLCAiU0hBLTEiKSkKLSsJCQkqcG1kID0g RVZQX3NoYTEoKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQS0yMjQiKSkKLSsJCQkqcG1k ID0gRVZQX3NoYTIyNCgpOwotKwkJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBLTI1NiIpKQotKwkJ CSpwbWQgPSBFVlBfc2hhMjU2KCk7Ci0rCQllbHNlIGlmICghc3RyY21wKHAsICJTSEEtMzg0Iikp Ci0rCQkJKnBtZCA9IEVWUF9zaGEzODQoKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQS01 MTIiKSkKLSsJCQkqcG1kID0gRVZQX3NoYTUxMigpOwotKwkJZWxzZQotKwkJCXsKLSsJCQlmcHJp bnRmKHN0ZGVyciwgIlVua25vd24gZGlnZXN0ICVzXG4iLCBwKTsKLSsJCQlyZXR1cm4gTklEX3Vu ZGVmOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZihwbWQpCi0rCQkqcG1kID0gRVZQX3NoYTEoKTsK LSsKLSsJaWYgKCFzdHJjbXAoY25hbWUsICJCLTE2MyIpKQotKwkJcmV0dXJuIE5JRF9zZWN0MTYz cjI7Ci0rCWlmICghc3RyY21wKGNuYW1lLCAiQi0yMzMiKSkKLSsJCXJldHVybiBOSURfc2VjdDIz M3IxOwotKwlpZiAoIXN0cmNtcChjbmFtZSwgIkItMjgzIikpCi0rCQlyZXR1cm4gTklEX3NlY3Qy ODNyMTsKLSsJaWYgKCFzdHJjbXAoY25hbWUsICJCLTQwOSIpKQotKwkJcmV0dXJuIE5JRF9zZWN0 NDA5cjE7Ci0rCWlmICghc3RyY21wKGNuYW1lLCAiQi01NzEiKSkKLSsJCXJldHVybiBOSURfc2Vj dDU3MXIxOwotKwlpZiAoIXN0cmNtcChjbmFtZSwgIkstMTYzIikpCi0rCQlyZXR1cm4gTklEX3Nl Y3QxNjNrMTsKLSsJaWYgKCFzdHJjbXAoY25hbWUsICJLLTIzMyIpKQotKwkJcmV0dXJuIE5JRF9z ZWN0MjMzazE7Ci0rCWlmICghc3RyY21wKGNuYW1lLCAiSy0yODMiKSkKLSsJCXJldHVybiBOSURf c2VjdDI4M2sxOwotKwlpZiAoIXN0cmNtcChjbmFtZSwgIkstNDA5IikpCi0rCQlyZXR1cm4gTklE X3NlY3Q0MDlrMTsKLSsJaWYgKCFzdHJjbXAoY25hbWUsICJLLTU3MSIpKQotKwkJcmV0dXJuIE5J RF9zZWN0NTcxazE7Ci0rCWlmICghc3RyY21wKGNuYW1lLCAiUC0xOTIiKSkKLSsJCXJldHVybiBO SURfWDlfNjJfcHJpbWUxOTJ2MTsKLSsJaWYgKCFzdHJjbXAoY25hbWUsICJQLTIyNCIpKQotKwkJ cmV0dXJuIE5JRF9zZWNwMjI0cjE7Ci0rCWlmICghc3RyY21wKGNuYW1lLCAiUC0yNTYiKSkKLSsJ CXJldHVybiBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKLSsJaWYgKCFzdHJjbXAoY25hbWUsICJQLTM4 NCIpKQotKwkJcmV0dXJuIE5JRF9zZWNwMzg0cjE7Ci0rCWlmICghc3RyY21wKGNuYW1lLCAiUC01 MjEiKSkKLSsJCXJldHVybiBOSURfc2VjcDUyMXIxOwotKwotKwlmcHJpbnRmKHN0ZGVyciwgIlVu a25vd24gQ3VydmUgbmFtZSAlc1xuIiwgY25hbWUpOwotKwlyZXR1cm4gTklEX3VuZGVmOwotKwl9 Ci0rCi0rc3RhdGljIGludCBlY19nZXRfcHVia2V5KEVDX0tFWSAqa2V5LCBCSUdOVU0gKngsIEJJ R05VTSAqeSkKLSsJewotKwljb25zdCBFQ19QT0lOVCAqcHQ7Ci0rCWNvbnN0IEVDX0dST1VQICpn cnA7Ci0rCWNvbnN0IEVDX01FVEhPRCAqbWV0aDsKLSsJaW50IHJ2OwotKwlCTl9DVFggKmN0eDsK LSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkKLSsJCXJldHVybiAwOwotKwlncnAg PSBFQ19LRVlfZ2V0MF9ncm91cChrZXkpOwotKwlwdCA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXko a2V5KTsKLSsJbWV0aCA9IEVDX0dST1VQX21ldGhvZF9vZihncnApOwotKwlpZiAoRUNfTUVUSE9E X2dldF9maWVsZF90eXBlKG1ldGgpID09IE5JRF9YOV82Ml9wcmltZV9maWVsZCkKLSsJCXJ2ID0g RUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3JwLCBwdCwgeCwgeSwgY3R4KTsK LSsJZWxzZQotKyNpZmRlZiBPUEVOU1NMX05PX0VDMk0KLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiRVJST1I6IEdGMm0gbm90IHN1cHBvcnRlZFxuIik7Ci0rCQlleGl0KDEpOwotKwkJfQotKyNl bHNlCi0rCQlydiA9IEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShncnAsIHB0 LCB4LCB5LCBjdHgpOwotKyNlbmRpZgotKwotKwlCTl9DVFhfZnJlZShjdHgpOwotKwotKwlyZXR1 cm4gcnY7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IEtleVBhaXIoRklMRSAqaW4sIEZJTEUgKm91 dCkKLSsJewotKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKwlpbnQgY3VydmVfbmlkID0gTklEX3VuZGVmOwotKwlpbnQgaSwgY291bnQ7Ci0r CUJJR05VTSAqUXggPSBOVUxMLCAqUXkgPSBOVUxMOwotKwljb25zdCBCSUdOVU0gKmQgPSBOVUxM OwotKwlFQ19LRVkgKmtleSA9IE5VTEw7Ci0rCVF4ID0gQk5fbmV3KCk7Ci0rCVF5ID0gQk5fbmV3 KCk7Ci0rCXdoaWxlKGZnZXRzKGJ1Ziwgc2l6ZW9mIGJ1ZiwgaW4pICE9IE5VTEwpCi0rCQl7Ci0r CQlpZiAoKmJ1ZiA9PSAnWycgJiYgYnVmWzJdID09ICctJykKLSsJCQl7Ci0rCQkJaWYgKGJ1Zlsy XSA9PSAnLScpCi0rCQkJY3VydmVfbmlkID0gZWxvb2t1cF9jdXJ2ZShidWYsIGxidWYsIE5VTEwp OwotKwkJCWZwdXRzKGJ1Ziwgb3V0KTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQl7Ci0rCQkJZnB1dHMo YnVmLCBvdXQpOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghc3RyY21wKGtleXdvcmQs ICJOIikpCi0rCQkJewotKwkJCWNvdW50ID0gYXRvaSh2YWx1ZSk7Ci0rCi0rCQkJZm9yIChpID0g MDsgaSA8IGNvdW50OyBpKyspCi0rCQkJCXsKLSsKLSsJCQkJa2V5ID0gRUNfS0VZX25ld19ieV9j dXJ2ZV9uYW1lKGN1cnZlX25pZCk7Ci0rCQkJCWlmICghRUNfS0VZX2dlbmVyYXRlX2tleShrZXkp KQotKwkJCQkJewotKwkJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZW5lcmF0aW5nIGtleVxu Iik7Ci0rCQkJCQlyZXR1cm4gMDsKLSsJCQkJCX0KLSsKLSsJCQkJaWYgKCFlY19nZXRfcHVia2V5 KGtleSwgUXgsIFF5KSkKLSsJCQkJCXsKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0 dGluZyBwdWJsaWMga2V5XG4iKTsKLSsJCQkJCXJldHVybiAwOwotKwkJCQkJfQotKwotKwkJCQlk ID0gRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXkoa2V5KTsKLSsKLSsJCQkJZG9fYm5fcHJpbnRfbmFt ZShvdXQsICJkIiwgZCk7Ci0rCQkJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiUXgiLCBReCk7Ci0r CQkJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiUXkiLCBReSk7Ci0rCQkJCWZwdXRzKFJFU1BfRU9M LCBvdXQpOwotKwkJCQlFQ19LRVlfZnJlZShrZXkpOwotKwotKwkJCQl9Ci0rCi0rCQkJfQotKwot KwkJfQotKwlCTl9mcmVlKFF4KTsKLSsJQk5fZnJlZShReSk7Ci0rCXJldHVybiAxOwotKwl9Ci0r Ci0rc3RhdGljIGludCBQS1YoRklMRSAqaW4sIEZJTEUgKm91dCkKLSsJewotKwotKwljaGFyIGJ1 ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlpbnQgY3Vy dmVfbmlkID0gTklEX3VuZGVmOwotKwlCSUdOVU0gKlF4ID0gTlVMTCwgKlF5ID0gTlVMTDsKLSsJ RUNfS0VZICprZXkgPSBOVUxMOwotKwl3aGlsZShmZ2V0cyhidWYsIHNpemVvZiBidWYsIGluKSAh PSBOVUxMKQotKwkJewotKwkJZnB1dHMoYnVmLCBvdXQpOwotKwkJaWYgKCpidWYgPT0gJ1snICYm IGJ1ZlsyXSA9PSAnLScpCi0rCQkJewotKwkJCWN1cnZlX25pZCA9IGVsb29rdXBfY3VydmUoYnVm LCBsYnVmLCBOVUxMKTsKLSsJCQlpZiAoY3VydmVfbmlkID09IE5JRF91bmRlZikKLSsJCQkJcmV0 dXJuIDA7Ci0rCQkJCQotKwkJCX0KLSsJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlF4 IikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZReCwgdmFsdWUpKQotKwkJCQl7Ci0rCQkJ CWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBReCB2YWx1ZVxuIik7Ci0rCQkJCXJldHVybiAwOwot KwkJCQl9Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlF5IikpCi0rCQkJewotKwkJ CWludCBydjsKLSsJCQlpZiAoIWRvX2hleDJibigmUXksIHZhbHVlKSkKLSsJCQkJewotKwkJCQlm cHJpbnRmKHN0ZGVyciwgIkludmFsaWQgUXkgdmFsdWVcbiIpOwotKwkJCQlyZXR1cm4gMDsKLSsJ CQkJfQotKwkJCWtleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShjdXJ2ZV9uaWQpOwotKwkJ CW5vX2VyciA9IDE7Ci0rCQkJcnYgPSBFQ19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3Jk aW5hdGVzKGtleSwgUXgsIFF5KTsKLSsJCQlub19lcnIgPSAwOwotKwkJCUVDX0tFWV9mcmVlKGtl eSk7Ci0rCQkJZnByaW50ZihvdXQsICJSZXN1bHQgPSAlcyIgUkVTUF9FT0wsIHJ2ID8gIlAiOiJG Iik7Ci0rCQkJfQotKwotKwkJfQotKwlCTl9mcmVlKFF4KTsKLSsJQk5fZnJlZShReSk7Ci0rCXJl dHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBTaWdHZW4oRklMRSAqaW4sIEZJTEUgKm91dCkK LSsJewotKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKLSsJY2hhciAqa2V5d29yZCwgKnZh bHVlOwotKwl1bnNpZ25lZCBjaGFyICptc2c7Ci0rCWludCBjdXJ2ZV9uaWQgPSBOSURfdW5kZWY7 Ci0rCWxvbmcgbWxlbjsKLSsJQklHTlVNICpReCA9IE5VTEwsICpReSA9IE5VTEw7Ci0rCUVDX0tF WSAqa2V5ID0gTlVMTDsKLSsJRUNEU0FfU0lHICpzaWcgPSBOVUxMOwotKwljb25zdCBFVlBfTUQg KmRpZ2VzdCA9IE5VTEw7Ci0rCVF4ID0gQk5fbmV3KCk7Ci0rCVF5ID0gQk5fbmV3KCk7Ci0rCXdo aWxlKGZnZXRzKGJ1Ziwgc2l6ZW9mIGJ1ZiwgaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhi dWYsIG91dCk7Ci0rCQlpZiAoKmJ1ZiA9PSAnWycpCi0rCQkJewotKwkJCWN1cnZlX25pZCA9IGVs b29rdXBfY3VydmUoYnVmLCBsYnVmLCAmZGlnZXN0KTsKLSsJCQlpZiAoY3VydmVfbmlkID09IE5J RF91bmRlZikKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3 b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCQlpZiAoIXN0cmNtcChr ZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCW1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJm1sZW4p OwotKwkJCWlmICghbXNnKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBN ZXNzYWdlXG4iKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsKLSsJCQlrZXkgPSBFQ19LRVlf bmV3X2J5X2N1cnZlX25hbWUoY3VydmVfbmlkKTsKLSsJCQlpZiAoIUVDX0tFWV9nZW5lcmF0ZV9r ZXkoa2V5KSkKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdlbmVyYXRpbmcg a2V5XG4iKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsKLSsJCQlpZiAoIWVjX2dldF9wdWJr ZXkoa2V5LCBReCwgUXkpKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0 dGluZyBwdWJsaWMga2V5XG4iKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsKLSsJICAgIAkJ c2lnID0gRklQU19lY2RzYV9zaWduKGtleSwgbXNnLCBtbGVuLCBkaWdlc3QpOwotKwotKwkJCWlm ICghc2lnKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2lnbmluZyBtZXNz YWdlXG4iKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsKLSsJCQlkb19ibl9wcmludF9uYW1l KG91dCwgIlF4IiwgUXgpOwotKwkJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiUXkiLCBReSk7Ci0r CQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJSIiwgc2lnLT5yKTsKLSsJCQlkb19ibl9wcmludF9u YW1lKG91dCwgIlMiLCBzaWctPnMpOwotKwotKwkJCUVDX0tFWV9mcmVlKGtleSk7Ci0rCQkJT1BF TlNTTF9mcmVlKG1zZyk7Ci0rCQkJRklQU19lY2RzYV9zaWdfZnJlZShzaWcpOwotKwotKwkJCX0K LSsKLSsJCX0KLSsJQk5fZnJlZShReCk7Ci0rCUJOX2ZyZWUoUXkpOwotKwlyZXR1cm4gMTsKLSsJ fQotKwotK3N0YXRpYyBpbnQgU2lnVmVyKEZJTEUgKmluLCBGSUxFICpvdXQpCi0rCXsKLSsJY2hh ciBidWZbMjA0OF0sIGxidWZbMjA0OF07Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJdW5z aWduZWQgY2hhciAqbXNnID0gTlVMTDsKLSsJaW50IGN1cnZlX25pZCA9IE5JRF91bmRlZjsKLSsJ bG9uZyBtbGVuOwotKwlCSUdOVU0gKlF4ID0gTlVMTCwgKlF5ID0gTlVMTDsKLSsJRUNfS0VZICpr ZXkgPSBOVUxMOwotKwlFQ0RTQV9TSUcgc2csICpzaWcgPSAmc2c7Ci0rCWNvbnN0IEVWUF9NRCAq ZGlnZXN0ID0gTlVMTDsKLSsJc2lnLT5yID0gTlVMTDsKLSsJc2lnLT5zID0gTlVMTDsKLSsJd2hp bGUoZmdldHMoYnVmLCBzaXplb2YgYnVmLCBpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWZwdXRzKGJ1 Ziwgb3V0KTsKLSsJCWlmICgqYnVmID09ICdbJykKLSsJCQl7Ci0rCQkJY3VydmVfbmlkID0gZWxv b2t1cF9jdXJ2ZShidWYsIGxidWYsICZkaWdlc3QpOwotKwkJCWlmIChjdXJ2ZV9uaWQgPT0gTklE X3VuZGVmKQotKwkJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsKLSsJCWlmICghc3RyY21wKGtl eXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJbXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmbWxlbik7 Ci0rCQkJaWYgKCFtc2cpCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE1l c3NhZ2VcbiIpOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCQkKLSsJCWlmICgh c3RyY21wKGtleXdvcmQsICJReCIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmUXgsIHZh bHVlKSkKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgUXggdmFsdWVcbiIp OwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCWlmICghc3RyY21wKGtleXdvcmQs ICJReSIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmUXksIHZhbHVlKSkKLSsJCQkJewot KwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgUXkgdmFsdWVcbiIpOwotKwkJCQlyZXR1cm4g MDsKLSsJCQkJfQotKwkJCX0KLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJSIikpCi0rCQkJewot KwkJCWlmICghZG9faGV4MmJuKCZzaWctPnIsIHZhbHVlKSkKLSsJCQkJewotKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQgUiB2YWx1ZVxuIik7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0r CQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlMiKSkKLSsJCQl7Ci0rCQkJaW50IHJ2Owot KwkJCWlmICghZG9faGV4MmJuKCZzaWctPnMsIHZhbHVlKSkKLSsJCQkJewotKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQgUyB2YWx1ZVxuIik7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0r CQkJa2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKGN1cnZlX25pZCk7Ci0rCQkJcnYgPSBF Q19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3JkaW5hdGVzKGtleSwgUXgsIFF5KTsKLSsK LSsJCQlpZiAocnYgIT0gMSkKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNl dHRpbmcgcHVibGljIGtleVxuIik7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCi0rCQkJbm9f ZXJyID0gMTsKLSsJICAgIAkJcnYgPSBGSVBTX2VjZHNhX3ZlcmlmeShrZXksIG1zZywgbWxlbiwg ZGlnZXN0LCBzaWcpOwotKwkJCUVDX0tFWV9mcmVlKGtleSk7Ci0rCQkJaWYgKG1zZykKLSsJCQkJ T1BFTlNTTF9mcmVlKG1zZyk7Ci0rCQkJbm9fZXJyID0gMDsKLSsKLSsJCQlmcHJpbnRmKG91dCwg IlJlc3VsdCA9ICVzIiBSRVNQX0VPTCwgcnYgPyAiUCI6IkYiKTsKLSsJCQl9Ci0rCi0rCQl9Ci0r CWlmIChzaWctPnIpCi0rCQlCTl9mcmVlKHNpZy0+cik7Ci0rCWlmIChzaWctPnMpCi0rCQlCTl9m cmVlKHNpZy0+cyk7Ci0rCWlmIChReCkKLSsJCUJOX2ZyZWUoUXgpOwotKwlpZiAoUXkpCi0rCQlC Tl9mcmVlKFF5KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsjaWZkZWYgRklQU19BTEdWUwotK2ludCBm aXBzX2VjZHNhdnNfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxM LCAqb3V0ID0gTlVMTDsKLSsJY29uc3QgY2hhciAqY21kID0gYXJndlsxXTsKLSsJaW50IHJ2ID0g MDsKLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsKLSsJaWYgKGFyZ2MgPT0gNCkKLSsJCXsKLSsJ CWluID0gZm9wZW4oYXJndlsyXSwgInIiKTsKLSsJCWlmICghaW4pCi0rCQkJewotKwkJCWZwcmlu dGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwot KwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3ZbM10sICJ3Iik7Ci0rCQlpZiAoIW91dCkKLSsJCQl7 Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKLSsJ CQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJnYyA9PSAyKQotKwkJewotKwkJ aW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsKLSsJaWYgKCFjbWQpCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgImZpcHNfZWNkc2F2cyBbS2V5UGFpcnxQS1Z8U2lnR2VufFNp Z1Zlcl1cbiIpOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCWlmICghc3RyY21wKGNtZCwgIktleVBh aXIiKSkKLSsJCXJ2ID0gS2V5UGFpcihpbiwgb3V0KTsKLSsJZWxzZSBpZiAoIXN0cmNtcChjbWQs ICJQS1YiKSkKLSsJCXJ2ID0gUEtWKGluLCBvdXQpOwotKwllbHNlIGlmICghc3RyY21wKGNtZCwg IlNpZ1ZlciIpKQotKwkJcnYgPSBTaWdWZXIoaW4sIG91dCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAo Y21kLCAiU2lnR2VuIikpCi0rCQlydiA9IFNpZ0dlbihpbiwgb3V0KTsKLSsJZWxzZQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGNvbW1hbmQgJXNcbiIsIGNtZCk7Ci0rCQlyZXR1 cm4gMTsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gNCkKLSsJCXsKLSsJCWZjbG9zZShpbik7Ci0r CQlmY2xvc2Uob3V0KTsKLSsJCX0KLSsKLSsJaWYgKHJ2IDw9IDApCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIHJ1bm5pbmcgJXNcbiIsIGNtZCk7Ci0rCQlyZXR1cm4gMTsKLSsJCX0K LSsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfZWNkaF9zZWxmdGVzdC5jLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvZmlwc19lY2RoX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZmlwcy9maXBzX2VjZGhfc2VsZnRlc3QuYy5maXBzLWVjCTIwMTMtMTEtMDggMTc6NTk6NDMu MTUwMDI4MDY4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19lY2Ro X3NlbGZ0ZXN0LmMJMjAxMy0xMS0wOCAxNzo1OTo0My4xNTAwMjgwNjggKzAxMDAKLUBAIC0wLDAg KzEsMjUyIEBACi0rLyogZmlwcy9lY2RoL2ZpcHNfZWNkaF9zZWxmdGVzdC5jICovCi0rLyogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCi0rICogcHJvamVjdCAyMDExLgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09 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 PT09PQotKyAqCi0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lY2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBwMjU2X3FjYXZzeFtdID0gewotKwkweDUyLDB4YzYsMHhhNSwweDc1LDB4ZjMsMHgwNCww eDk4LDB4YjMsMHgyOSwweDY2LDB4MGMsMHg2MiwKLSsJMHgxOCwweDYwLDB4NTUsMHg0MSwweDU5 LDB4ZDQsMHg2MCwweDg1LDB4OTksMHhjMSwweDUxLDB4MTMsCi0rCTB4NmYsMHg5NywweDg1LDB4 OTMsMHgzMywweDM0LDB4MDcsMHg1MAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg cDI1Nl9xY2F2c3lbXSA9IHsKLSsJMHg2ZiwweDY5LDB4MjQsMHhlYiwweGU5LDB4M2IsMHhhNyww eGNjLDB4NDcsMHgxNywweGFhLDB4M2YsCi0rCTB4NzAsMHhmYywweDEwLDB4NzMsMHgwYSwweGNk LDB4MjEsMHhlZSwweDI5LDB4MTksMHgxZiwweGFmLAotKwkweGI0LDB4MWMsMHgxZSwweGMyLDB4 OGUsMHg5NywweDgxLDB4NmUKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZf cWl1dHhbXSA9IHsKLSsJMHg3MSwweDQ2LDB4ODgsMHgwOCwweDkyLDB4MjEsMHgxYiwweDEwLDB4 MjEsMHg3NCwweGZmLDB4MGMsCi0rCTB4OTQsMHhkZSwweDM0LDB4N2MsMHg4NiwweDc0LDB4YmUs MHg2NywweDQxLDB4NjgsMHhkNCwweGMxLAotKwkweGU1LDB4NzUsMHg2MywweDljLDB4YTcsMHg0 NiwweDkzLDB4NmYKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZfcWl1dHlb XSA9IHsKLSsJMHgzMywweDQwLDB4YTksMHg2YSwweGY1LDB4MjAsMHhiNSwweDllLDB4ZmMsMHg2 MCwweDFhLDB4YWUsCi0rCTB4M2QsMHhmOCwweDIxLDB4ZDIsMHhhNywweGNhLDB4NTIsMHgzNCww eGI5LDB4NWYsMHgyNywweDc1LAotKwkweDZjLDB4ODEsMHhiZSwweDMyLDB4NGQsMHhiYSwweGJi LDB4ZjgKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZfcWl1dGRbXSA9IHsK LSsJMHgxYSwweDQ4LDB4NTUsMHg2YiwweDExLDB4YmUsMHg5MiwweGQ0LDB4MWMsMHhkNywweDQ1 LDB4YzMsCi0rCTB4ODIsMHg4MSwweDUxLDB4ZjEsMHgyMywweDQwLDB4YjcsMHg4MywweGZkLDB4 MDEsMHg2ZCwweGJjLAotKwkweGExLDB4NjYsMHhhZiwweDBhLDB4MDMsMHgyMywweGNkLDB4YzgK LSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZfeml1dFtdID0gewotKwkweDc3 LDB4MmEsMHgxZSwweDM3LDB4ZWUsMHhlNiwweDUxLDB4MDIsMHg3MSwweDQwLDB4ZjgsMHg2YSwK LSsJMHgzNiwweGY4LDB4NjUsMHg2MSwweDJiLDB4MTgsMHg3MSwweDgyLDB4MjMsMHhlNiwweGYy LDB4NzcsCi0rCTB4Y2UsMHhlYywweGI4LDB4NDksMHhjNywweGJmLDB4MzYsMHg0ZgotK307Ci0r Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IGN1cnZlOwotKwljb25zdCB1bnNpZ25l ZCBjaGFyICp4MTsKLSsJc2l6ZV90IHgxbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICp5MTsK LSsJc2l6ZV90IHkxbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpkMTsKLSsJc2l6ZV90IGQx bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICp4MjsKLSsJc2l6ZV90IHgybGVuOwotKwljb25z dCB1bnNpZ25lZCBjaGFyICp5MjsKLSsJc2l6ZV90IHkybGVuOwotKwljb25zdCB1bnNpZ25lZCBj aGFyICp6OwotKwlzaXplX3QgemxlbjsKLSsJfSBFQ0RIX1NFTEZURVNUX0RBVEE7Ci0rCi0rI2Rl ZmluZSBtYWtlX2VjZGhfdGVzdChuaWQsIHByKSB7IG5pZCwgXAotKwkJCQlwciMjX3FpdXR4LCBz aXplb2YocHIjI19xaXV0eCksIFwKLSsJCQkJcHIjI19xaXV0eSwgc2l6ZW9mKHByIyNfcWl1dHkp LCBcCi0rCQkJCXByIyNfcWl1dGQsIHNpemVvZihwciMjX3FpdXRkKSwgXAotKwkJCQlwciMjX3Fj YXZzeCwgc2l6ZW9mKHByIyNfcWNhdnN4KSwgXAotKwkJCQlwciMjX3FjYXZzeSwgc2l6ZW9mKHBy IyNfcWNhdnN5KSwgXAotKwkJCQlwciMjX3ppdXQsIHNpemVvZihwciMjX3ppdXQpIH0KLSsKLStz dGF0aWMgRUNESF9TRUxGVEVTVF9EQVRBIHRlc3RfZWNkaF9kYXRhW10gPSAKLSsJewotKwltYWtl X2VjZGhfdGVzdChOSURfWDlfNjJfcHJpbWUyNTZ2MSwgcDI1NiksCi0rCX07Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfZWNkaCh2b2lkKQotKwl7Ci0rCUVDX0tFWSAqZWMxID0gTlVMTCwgKmVjMiA9 IE5VTEw7Ci0rCWNvbnN0IEVDX1BPSU5UICplY3AgPSBOVUxMOwotKwlCSUdOVU0gKnggPSBOVUxM LCAqeSA9IE5VTEwsICpkID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqenRtcCA9IE5VTEw7Ci0r CWludCBydiA9IDE7Ci0rCXNpemVfdCBpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRl c3RfZWNkaF9kYXRhKS9zaXplb2YoRUNESF9TRUxGVEVTVF9EQVRBKTsgaSsrKQotKwkJewotKwkJ RUNESF9TRUxGVEVTVF9EQVRBICplY2QgPSB0ZXN0X2VjZGhfZGF0YSArIGk7Ci0rCQlpZiAoIWZp cHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9FQ0RILCBlY2QtPmN1cnZlLCAwKSkKLSsJCQljb250 aW51ZTsKLSsJCXp0bXAgPSBPUEVOU1NMX21hbGxvYyhlY2QtPnpsZW4pOwotKwotKwkJeCA9IEJO X2JpbjJibihlY2QtPngxLCBlY2QtPngxbGVuLCB4KTsKLSsJCXkgPSBCTl9iaW4yYm4oZWNkLT55 MSwgZWNkLT55MWxlbiwgeSk7Ci0rCQlkID0gQk5fYmluMmJuKGVjZC0+ZDEsIGVjZC0+ZDFsZW4s IGQpOwotKwotKwkJaWYgKCF4IHx8ICF5IHx8ICFkIHx8ICF6dG1wKQotKwkJCXsKLSsJCQlydiA9 IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWVjMSA9IEVDX0tFWV9uZXdfYnlfY3Vy dmVfbmFtZShlY2QtPmN1cnZlKTsKLSsJCWlmICghZWMxKQotKwkJCXsKLSsJCQlydiA9IC0xOwot KwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCUVDX0tFWV9zZXRfZmxhZ3MoZWMxLCBFQ19GTEFHX0NP RkFDVE9SX0VDREgpOwotKwotKwkJaWYgKCFFQ19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nv b3JkaW5hdGVzKGVjMSwgeCwgeSkpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0rCQkJZ290byBlcnI7 Ci0rCQkJfQotKwotKwkJaWYgKCFFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KGVjMSwgZCkpCi0rCQkJ ewotKwkJCXJ2ID0gLTE7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJeCA9IEJOX2JpbjJi bihlY2QtPngyLCBlY2QtPngybGVuLCB4KTsKLSsJCXkgPSBCTl9iaW4yYm4oZWNkLT55MiwgZWNk LT55MmxlbiwgeSk7Ci0rCi0rCQlpZiAoIXggfHwgIXkpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0r CQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJZWMyID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1l KGVjZC0+Y3VydmUpOwotKwkJaWYgKCFlYzIpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0rCQkJZ290 byBlcnI7Ci0rCQkJfQotKwkJRUNfS0VZX3NldF9mbGFncyhlYzEsIEVDX0ZMQUdfQ09GQUNUT1Jf RUNESCk7Ci0rCi0rCQlpZiAoIUVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0 ZXMoZWMyLCB4LCB5KSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9 Ci0rCi0rCQllY3AgPSBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVjMik7Ci0rCQlpZiAoIWVjcCkK LSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoIUVD REhfY29tcHV0ZV9rZXkoenRtcCwgZWNkLT56bGVuLCBlY3AsIGVjMSwgMCkpCi0rCQkJewotKwkJ CXJ2ID0gLTE7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKCFmaXBzX3Bvc3RfY29y cnVwdChGSVBTX1RFU1RfRUNESCwgZWNkLT5jdXJ2ZSwgTlVMTCkpCi0rCQkJenRtcFswXSBePSAw eDE7Ci0rCi0rCQlpZiAobWVtY21wKHp0bXAsIGVjZC0+eiwgZWNkLT56bGVuKSkKLSsJCQl7Ci0r CQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRUNESCwgZWNkLT5jdXJ2ZSwgMCk7Ci0rCQkJ cnYgPSAwOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1Rf RUNESCwgZWNkLT5jdXJ2ZSwgMCkpCi0rCQkJZ290byBlcnI7Ci0rCi0rCQlFQ19LRVlfZnJlZShl YzEpOwotKwkJZWMxID0gTlVMTDsKLSsJCUVDX0tFWV9mcmVlKGVjMik7Ci0rCQllYzIgPSBOVUxM OwotKwkJT1BFTlNTTF9mcmVlKHp0bXApOwotKwkJenRtcCA9IE5VTEw7Ci0rCQl9Ci0rCi0rCWVy cjoKLSsKLSsJaWYgKHgpCi0rCQlCTl9jbGVhcl9mcmVlKHgpOwotKwlpZiAoeSkKLSsJCUJOX2Ns ZWFyX2ZyZWUoeSk7Ci0rCWlmIChkKQotKwkJQk5fY2xlYXJfZnJlZShkKTsKLSsJaWYgKGVjMSkK LSsJCUVDX0tFWV9mcmVlKGVjMSk7Ci0rCWlmIChlYzIpCi0rCQlFQ19LRVlfZnJlZShlYzIpOwot KwlpZiAoenRtcCkKLSsJCU9QRU5TU0xfZnJlZSh6dG1wKTsKLSsKLSsJcmV0dXJuIHJ2OwotKwot Kwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBz X2VjZHNhX3NlbGZ0ZXN0LmMuZmlwcy1lYyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBz X2VjZHNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2Vj ZHNhX3NlbGZ0ZXN0LmMuZmlwcy1lYwkyMDEzLTExLTA4IDE3OjU5OjQzLjE1MDAyODA2OCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYwky MDEzLTExLTA4IDE3OjU5OjQzLjE1MDAyODA2OCArMDEwMAotQEAgLTAsMCArMSwxNjcgQEAKLSsv KiBmaXBzL2VjZHNhL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAq IHByb2plY3QgMjAxMS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgot KyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZWNkc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3Rh dGljIGNvbnN0IGNoYXIgUF8yNTZfbmFtZVtdID0gIkVDRFNBIFAtMjU2IjsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBQXzI1Nl9kW10gPSB7Ci0rCTB4NTEsMHhiZCwweDA2LDB4YTEs MHgxYywweGRhLDB4ZTIsMHgxMiwweDk5LDB4YzksMHg1MiwweDNmLAotKwkweGVhLDB4YTQsMHhk MiwweGQxLDB4ZjQsMHg3ZiwweGQ0LDB4M2UsMHhiZCwweGY4LDB4ZmMsMHg4NywKLSsJMHhkYyww eDgyLDB4NTMsMHgyMSwweGVlLDB4YTAsMHhkYywweDY0Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBQXzI1Nl9xeFtdID0gewotKwkweDIzLDB4ODksMHhlMCwweGY0LDB4NjksMHhl MCwweDQ5LDB4ZTUsMHhjNywweGU1LDB4NDAsMHg2ZSwKLSsJMHg4ZiwweDI1LDB4ZGQsMHhhZCww eDExLDB4MTYsMHgxNCwweDliLDB4YWIsMHg0NCwweDA2LDB4MzEsCi0rCTB4YmYsMHg1ZSwweGE2 LDB4NDQsMHhhYywweDg2LDB4MDAsMHgwNwotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgUF8yNTZfcXlbXSA9IHsKLSsJMHhiMywweDA1LDB4MGQsMHhkMCwweGRjLDB4ZjcsMHg0MCww eGU2LDB4ZjksMHhkOCwweDZkLDB4N2IsCi0rCTB4NjMsMHhjYSwweDk3LDB4ZTYsMHgxMiwweGY5 LDB4ZDQsMHgxOCwweDU5LDB4YmUsMHhiMiwweDVlLAotKwkweDRhLDB4NmEsMHg3NywweDIzLDB4 ZjQsMHgxMSwweDlkLDB4ZWIKLSt9OwotKwotK3R5cGVkZWYgc3RydWN0IAotKwl7Ci0rCWludCBj dXJ2ZTsKLSsJY29uc3QgY2hhciAqbmFtZTsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqeDsKLSsJ c2l6ZV90IHhsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnk7Ci0rCXNpemVfdCB5bGVuOwot Kwljb25zdCB1bnNpZ25lZCBjaGFyICpkOwotKwlzaXplX3QgZGxlbjsKLSsJfSBFQ19TRUxGVEVT VF9EQVRBOwotKwotKyNkZWZpbmUgbWFrZV9lY2RzYV90ZXN0KG5pZCwgcHIpIHsgbmlkLCBwciMj X25hbWUsIFwKLSsJCQkJcHIjI19xeCwgc2l6ZW9mKHByIyNfcXgpLCBcCi0rCQkJCXByIyNfcXks IHNpemVvZihwciMjX3F5KSwgXAotKwkJCQlwciMjX2QsIHNpemVvZihwciMjX2QpfQotKwotK3N0 YXRpYyBFQ19TRUxGVEVTVF9EQVRBIHRlc3RfZWNfZGF0YVtdID0gCi0rCXsKLSsJbWFrZV9lY2Rz YV90ZXN0KE5JRF9YOV82Ml9wcmltZTI1NnYxLCBQXzI1NiksCi0rCX07Ci0rCi0raW50IEZJUFNf c2VsZnRlc3RfZWNkc2EoKQotKwl7Ci0rCUVDX0tFWSAqZWMgPSBOVUxMOwotKwlCSUdOVU0gKngg PSBOVUxMLCAqeSA9IE5VTEwsICpkID0gTlVMTDsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsJ aW50IHJ2ID0gMDsKLSsJc2l6ZV90IGk7Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVz dF9lY19kYXRhKS9zaXplb2YoRUNfU0VMRlRFU1RfREFUQSk7IGkrKykKLSsJCXsKLSsJCUVDX1NF TEZURVNUX0RBVEEgKmVjZCA9IHRlc3RfZWNfZGF0YSArIGk7Ci0rCi0rCQl4ID0gQk5fYmluMmJu KGVjZC0+eCwgZWNkLT54bGVuLCB4KTsKLSsJCXkgPSBCTl9iaW4yYm4oZWNkLT55LCBlY2QtPnls ZW4sIHkpOwotKwkJZCA9IEJOX2JpbjJibihlY2QtPmQsIGVjZC0+ZGxlbiwgZCk7Ci0rCi0rCQlp ZiAoIXggfHwgIXkgfHwgIWQpCi0rCQkJZ290byBlcnI7Ci0rCi0rCQllYyA9IEVDX0tFWV9uZXdf YnlfY3VydmVfbmFtZShlY2QtPmN1cnZlKTsKLSsJCWlmICghZWMpCi0rCQkJZ290byBlcnI7Ci0r Ci0rCQlpZiAoIUVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXMoZWMsIHgs IHkpKQotKwkJCWdvdG8gZXJyOwotKwotKwkJaWYgKCFFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KGVj LCBkKSkKLSsJCQlnb3RvIGVycjsKLSsKLSsJCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5V TEwpCi0rCQkJZ290byBlcnI7Ci0rCi0rCQlFVlBfUEtFWV9hc3NpZ25fRUNfS0VZKHBrLCBlYyk7 Ci0rCi0rCQlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwgMCwKLSsJCQkJ CQlOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAsCi0rCQkJCQkJZWNkLT5uYW1lKSkKLSsJCQlnb3Rv IGVycjsKLSsJCX0KLSsKLSsJcnYgPSAxOwotKwotKwllcnI6Ci0rCi0rCWlmICh4KQotKwkJQk5f Y2xlYXJfZnJlZSh4KTsKLSsJaWYgKHkpCi0rCQlCTl9jbGVhcl9mcmVlKHkpOwotKwlpZiAoZCkK LSsJCUJOX2NsZWFyX2ZyZWUoZCk7Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwot KwllbHNlIGlmIChlYykKLSsJCUVDX0tFWV9mcmVlKGVjKTsKLSsKLSsJcmV0dXJuIHJ2OwotKwot Kwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBz LmguZmlwcy1lYyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzLmgKLS0tLSBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzLmguZmlwcy1lYwkyMDEzLTExLTA4IDE3OjU5OjQzLjEx NjAyNzMxOCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHMuaAkyMDEz LTExLTA4IDE3OjU5OjQzLjE1MDAyODA2OCArMDEwMAotQEAgLTkzLDYgKzkzLDggQEAgaW50IEZJ UFNfc2VsZnRlc3RfcnNhKHZvaWQpOwotIHZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKLSB2 b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotIGludCBGSVBTX3NlbGZ0ZXN0X2Rz YSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9lY2RzYSh2b2lkKTsKLStpbnQgRklQU19zZWxm dGVzdF9lY2RoKHZvaWQpOwotIHZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKLSB2b2lkIEZJ UFNfcm5nX3N0aWNrKHZvaWQpOwotIHZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZik7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzLWVjIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcy1lYwkyMDEzLTExLTA4IDE3OjU5OjQzLjExNzAy NzM0MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIw MTMtMTEtMDggMTc6NTk6NDMuMTUwMDI4MDY4ICswMTAwCi1AQCAtOTUsOCArOTUsMTIgQEAgaW50 IEZJUFNfc2VsZnRlc3Qodm9pZCkKLSAJCXJ2ID0gMDsKLSAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3Jz YSgpKQotIAkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfZWNkc2EoKSkKLSsJCXJ2ID0g MDsKLSAJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQotIAkJcnYgPSAwOwotKwlpZiAoIUZJUFNf c2VsZnRlc3RfZWNkaCgpKQotKwkJcnYgPSAwOwotIAlyZXR1cm4gcnY7Ci0gCX0KLSAKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMtZWMgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9NYWtlZmlsZS5maXBzLWVjCTIwMTMtMTEtMDggMTc6NTk6NDMuMTE5MDI3Mzg0ICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxMy0xMS0wOCAxNzo1OTo0 My4xNTEwMjgwOTAgKzAxMDAKLUBAIC0yNCwxMyArMjQsMTMgQEAgTElCU1JDPWZpcHNfYWVzX3Nl bGZ0ZXN0LmMgZmlwc19kZXNfc2VsZgotICAgICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hh X3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZpcHNfcmFuZC5jIFwKLSAg ICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBmaXBzX2RyYmdfY3RyLmMgZmlwc19kcmJn X2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKLSAgICAgZmlwc19kcmJnX2xpYi5jIGZpcHNfZHJi Z19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX2xpYi5jIFwKLS0gICAgZmlw c19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lbmMuYyBmaXBzX21kLmMKLSsgICAgZmlwc19jbWFjX3Nl bGZ0ZXN0LmMgZmlwc19lY2RoX3NlbGZ0ZXN0LmMgZmlwc19lY2RzYV9zZWxmdGVzdC5jIGZpcHNf ZW5jLmMgZmlwc19tZC5jCi0gCi0gTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNf c2VsZnRlc3QubyBmaXBzX2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0g ICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8gZmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19k c2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8gXAotICAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNf cG9zdC5vIGZpcHNfZHJiZ19jdHIubyBmaXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8g XAotICAgICBmaXBzX2RyYmdfbGliLm8gZmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRl c3QubyBmaXBzX3JhbmRfbGliLm8gXAotLSAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2Vu Yy5vIGZpcHNfbWQubwotKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VjZGhfc2VsZnRl c3QubyBmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm8gZmlwc19lbmMubyBmaXBzX21kLm8KLSAKLSBMSUJD UllQVE89LUwuLiAtbGNyeXB0bwotIAotQEAgLTExOCw2ICsxMTgsMjEgQEAgZmlwc19hZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVucwotIGZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotIGZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0gZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19hZXNfc2VsZnRlc3QuYwotK2ZpcHNfY21hY19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAotK2ZpcHNfY21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y21hYy5oCi0rZmlwc19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAotK2ZpcHNfY21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2NtYWNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStm aXBzX2NtYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBz X2NtYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNf Y21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19j bWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlw c19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlw c19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlw c19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2Zp cHNfY21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNf Y21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Nt YWNfc2VsZnRlc3QuYwotK2ZpcHNfY21hY19zZWxmdGVzdC5vOiBmaXBzX2xvY2wuaAotIGZpcHNf ZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oCi0gZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2NyeXB0by5oCi0gZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi1AQCAtMjMxLDYgKzI0Niw0NiBA QCBmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zCi0gZmlwc19kc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLSBmaXBzX2RzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5j Ci0gZmlwc19kc2Ffc2VsZnRlc3QubzogZmlwc19sb2NsLmgKLStmaXBzX2VjZGhfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmgKLStmaXBzX2VjZGhfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19lY2RoX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0rZmlw c19lY2RoX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19lY2RoX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19lY2RoX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19lY2RoX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2VjZGhfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZWNkaF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZWNkaF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZWNkaF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfZWNkaF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2VjZGhfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2VjZGhfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19lY2RoX3NlbGZ0ZXN0 LmMKLStmaXBzX2VjZGhfc2VsZnRlc3QubzogZmlwc19sb2NsLmgKLStmaXBzX2VjZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCi0rZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4u aAotK2ZpcHNfZWNkc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o Ci0rZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotK2ZpcHNfZWNkc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLStmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX2Vj ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2VjZHNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19lY2RzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19lY2RzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19lY2RzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZWNk c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Vj ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19l Y2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBz X2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19l Y2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Vj ZHNhX3NlbGZ0ZXN0LmMKLStmaXBzX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZW5jLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfZW5j Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmgKLStmaXBzX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19lbmMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2VuYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAot K2ZpcHNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfZW5jLmMKLSBmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBmaXBzX2htYWNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gZmlwc19obWFjX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAotQEAgLTI0NSw2ICszMDAsMTUgQEAgZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbgotIGZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmgKLSBmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmgKLSBmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZmlwc19obWFjX3NlbGZ0ZXN0LmMKLStmaXBzX21kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19t ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmgKLStmaXBzX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX21kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfbWQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmgKLStmaXBzX21kLm86IGZpcHNfbWQuYwotIGZpcHNfcG9zdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIGZpcHNfcG9z dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCi0gZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvdmVyc2lvbi5t YXAuZmlwcy1lYyBvcGVuc3NsLTEuMC4xZS92ZXJzaW9uLm1hcAotLS0tIG9wZW5zc2wtMS4wLjFl L3ZlcnNpb24ubWFwLmZpcHMtZWMJMjAxMy0xMS0wOCAxNzo1OTo0My4xMzEwMjc2NDkgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xZS92ZXJzaW9uLm1hcAkyMDEzLTExLTA4IDE3OjU5OjQzLjE1MTAy ODA5MCArMDEwMAotQEAgLTYsMyArNiw3IEBAIE9QRU5TU0xfMS4wLjEgewotIAkgICAgX29yaWdp bmFsKjsKLSAJICAgIF9jdXJyZW50KjsKLSB9OwotK09QRU5TU0xfMS4wLjFfRUMgewotKyAgICBn bG9iYWw6Ci0rCSAgICBFQyo7Ci0rfTsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xZy1maXBz LnBhdGNoIGIvb3BlbnNzbC0xLjAuMWctZmlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNDQ5Y2ExYy4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xZy1maXBzLnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsMjA0MDAgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWcvYXBwcy9zcGVlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvYXBwcy9zcGVlZC5jCi0tLS0gb3Bl bnNzbC0xLjAuMWcvYXBwcy9zcGVlZC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9hcHBzL3NwZWVkLmMJMjAxNC0wNS0wNiAxNjoy OTo1MC41MzY5MjI5OTMgKzAyMDAKLUBAIC0xOTUsNyArMTk1LDYgQEAKLSAjaWZkZWYgT1BFTlNT TF9ET0lOR19NQUtFREVQRU5ECi0gI3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKLSAjdW5kZWYg QUVTX3NldF9kZWNyeXB0X2tleQotLSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQKLSAjZW5k aWYKLSAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Ci0gI2RlZmluZSBDQVNU X3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKLUBAIC0yMDMsNyArMjAyLDYgQEAKLSAjZGVm aW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQotICNkZWZpbmUgUkMyX3NldF9r ZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRf c2V0X2tleQotLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkCi0gI2RlZmluZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZhdGVfQUVTX3Nl dF9lbmNyeXB0X2tleQotICNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2YXRlX0FFU19z ZXRfZGVjcnlwdF9rZXkKLSAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxp YV9zZXRfa2V5Ci1AQCAtOTQxLDcgKzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotIAkJCWlmIChzdHJjbXAoKmFyZ3YsInJz YSIpID09IDApCi0gCQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQkJaWYgKCFGSVBTX21v ZGUoKSkKLSsjZW5kaWYKLSsJCQkJewotIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09MTsKLSsJCQkJ fQotIAkJCXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7Ci0gCQkJcnNhX2RvaXRbUl9SU0FfMjA0OF09 MTsKLSAJCQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOwotQEAgLTk1MSw3ICs5NTQsMTIgQEAgaW50 IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSAJ CQlpZiAoc3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCQkJCWlmICghRklQU19tb2RlKCkpCi0rI2VuZGlmCi0rCQkJCXsKLSAJCQlkc2FfZG9p dFtSX0RTQV81MTJdPTE7Ci0rCQkJCX0KLSAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0XT0xOwotIAkJ CWRzYV9kb2l0W1JfRFNBXzIwNDhdPTE7Ci0gCQkJfQotQEAgLTExNjIsMTIgKzExNzAsMTggQEAg aW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAkJewotIAkJZm9yIChpPTA7IGk8QUxH T1JfTlVNOyBpKyspCi0gCQkJewotLQkJCWlmIChpICE9IERfRVZQKQotKwkJCWlmIChpICE9IERf RVZQICYmCi0rCQkJICAgICghRklQU19tb2RlKCkgfHwgKGkgIT0gRF9XSElSTFBPT0wgJiYKLSsJ CQkJaSAhPSBEX01EMiAmJiBpICE9IERfTUQ0ICYmCi0rCQkJCWkgIT0gRF9NRDUgJiYgaSAhPSBE X01EQzIgJiYKLSsJCQkJaSAhPSBEX1JNRDE2MCkpKQotIAkJCQlkb2l0W2ldPTE7Ci0gCQkJfQot IAkJZm9yIChpPTA7IGk8UlNBX05VTTsgaSsrKQotKwkJICAgIGlmICghRklQU19tb2RlKCkgfHwg aSAhPSBSX1JTQV81MTIpCi0gCQkJcnNhX2RvaXRbaV09MTsKLSAJCWZvciAoaT0wOyBpPERTQV9O VU07IGkrKykKLSsJCSAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9EU0FfNTEyKQotIAkJ CWRzYV9kb2l0W2ldPTE7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0gCQlmb3IgKGk9MDsg aTxFQ19OVU07IGkrKykKLUBAIC0xMjI2LDMwICsxMjQwLDU0IEBAIGludCBNQUlOKGludCBhcmdj LCBjaGFyICoqYXJndikKLSAJQUVTX3NldF9lbmNyeXB0X2tleShrZXkzMiwyNTYsJmFlc19rczMp OwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQotKwlpZiAoZG9pdFtEX0NC Q18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNfMjU2X0NNTF0p Ci0rCSAgICB7Ci0gCUNhbWVsbGlhX3NldF9rZXkoa2V5MTYsMTI4LCZjYW1lbGxpYV9rczEpOwot IAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwxOTIsJmNhbWVsbGlhX2tzMik7Ci0gCUNhbWVsbGlh X3NldF9rZXkoY2tleTMyLDI1NiwmY2FtZWxsaWFfa3MzKTsKLSsJICAgIH0KLSAjZW5kaWYKLSAj aWZuZGVmIE9QRU5TU0xfTk9fSURFQQotKwlpZiAoZG9pdFtEX0NCQ19JREVBXSkKLSsJICAgIHsK LSAJaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsJmlkZWFfa3MpOwotKwkgICAgfQotICNlbmRp ZgotICNpZm5kZWYgT1BFTlNTTF9OT19TRUVECi0rCWlmIChkb2l0W0RfQ0JDX1NFRURdKQotKwkg ICAgewotIAlTRUVEX3NldF9rZXkoa2V5MTYsJnNlZWRfa3MpOwotKwkgICAgfQotICNlbmRpZgot ICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKLSsJaWYgKGRvaXRbRF9SQzRdKQotKwkgICAgewotIAlS QzRfc2V0X2tleSgmcmM0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fUkMyCi0rCWlmIChkb2l0W0RfQ0JDX1JDMl0pCi0rCSAgICB7Ci0gCVJDMl9z ZXRfa2V5KCZyYzJfa3MsMTYsa2V5MTYsMTI4KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fUkM1Ci0rCWlmIChkb2l0W0RfQ0JDX1JDNV0pCi0rCSAgICB7Ci0gCVJDNV8z Ml9zZXRfa2V5KCZyYzVfa3MsMTYsa2V5MTYsMTIpOwotKwkgICAgfQotICNlbmRpZgotICNpZm5k ZWYgT1BFTlNTTF9OT19CRgotKwlpZiAoZG9pdFtEX0NCQ19CRl0pCi0rCSAgICB7Ci0gCUJGX3Nl dF9rZXkoJmJmX2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fQ0FTVAotKwlpZiAoZG9pdFtEX0NCQ19DQVNUXSkKLSsJICAgIHsKLSAJQ0FTVF9zZXRf a2V5KCZjYXN0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCi0gCW1lbXNldChyc2FfYywwLHNpemVvZihyc2FfYykpOwotQEAgLTE1NjQsNiAr MTYwMiw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCUhNQUNfQ1RYIGhj dHg7Ci0gCi0gCQlITUFDX0NUWF9pbml0KCZoY3R4KTsKLSsJCUhNQUNfQ1RYX3NldF9mbGFncygm aGN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJCUhNQUNfSW5pdF9leCgm aGN0eCwodW5zaWduZWQgY2hhciAqKSJUaGlzIGlzIGEga2V5Li4uIiwKLSAJCQkxNixFVlBfbWQ1 KCksIE5VTEwpOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvQ29uZmlndXJlLmZpcHMgb3Bl bnNzbC0xLjAuMWcvQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMWcvQ29uZmlndXJlLmZpcHMJ MjAxNC0wNS0wNiAxNjoyOTo1MC41MjM5MjI2OTMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9D b25maWd1cmUJMjAxNC0wNS0wNiAxNjoyOTo1MC41MzY5MjI5OTMgKzAyMDAKLUBAIC05OTcsMTEg Kzk5Nyw2IEBAIGlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQKLSAJJGRp c2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKLSAJfQotIAotLWlmICgkZmlwcyAmJiAkZmlwc2xp YmRpciBlcSAiIikKLS0JewotLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsKLS0J fQotLQotICMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2QuCi0g aWYgKCRmaXBzKQotIAl7Ci1AQCAtMTQ3Niw3ICsxNDcxLDYgQEAgJGNmbGFncy49IiAtRE9QRU5T U0xfQk5fQVNNX0dGMm0iIGlmICgkYgotIGlmICgkZmlwcykKLSAJewotIAkkb3BlbnNzbF9vdGhl cl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7Ci0tCSRjZmxhZ3MgLj0gIiAtSVwk KEZJUFNESVIpL2luY2x1ZGUiOwotIAl9Ci0gCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxl c3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKLUBAIC0xNjYzLDkgKzE2NTcsMTIgQEAgd2hpbGUg KDxJTj4pCi0gCi0gCXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87Ci0gCXMvXkZJUFNM SUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87Ci0tCXMvXkZJUFNDQU5MSUI9LiovRklQ U0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOwotIAlzL15CQVNFQUREUj0uKi9CQVNFQUREUj0k YmFzZWFkZHIvOwotIAotKwlpZiAoJGZpcHMpCi0rCQl7Ci0rCQlzL15GSVBTPS4qL0ZJUFM9eWVz LzsKLSsJCX0KLSAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3Rhcmdl dC87Ci0gCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwotIAlzL15T SEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NM KS8gaWYgKCEkbm9fc2hhcmVkKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9hZXMv YWVzX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9hZXMvYWVzX21pc2MuYwotLS0t IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTQtMDMtMTcgMTc6 MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Flcy9hZXNf bWlzYy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM2OTIyOTkzICswMjAwCi1AQCAtNjksMTcgKzY5 LDExIEBAIGNvbnN0IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpIHsKLSBpbnQgQUVTX3NldF9lbmNy eXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAJ CQlBRVNfS0VZICprZXkpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWZpcHNfY2lwaGVy X2Fib3J0KEFFUyk7Ci0tI2VuZGlmCi0gCXJldHVybiBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9r ZXkodXNlcktleSwgYml0cywga2V5KTsKLSAJfQotIAotIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAkJCUFFU19L RVkgKmtleSkKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZmlwc19jaXBoZXJfYWJvcnQo QUVTKTsKLS0jZW5kaWYKLSAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSh1c2Vy S2V5LCBiaXRzLCBrZXkpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vY21h Yy9jbWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vY21hYy9jbWFjLmMKLS0tLSBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9jbWFjL2NtYWMuYwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjUzNzkyMzAxNiArMDIwMAotQEAgLTEwNywxMyArMTA3LDYgQEAgQ01B Q19DVFggKkNNQUNfQ1RYX25ldyh2b2lkKQotIAotIHZvaWQgQ01BQ19DVFhfY2xlYW51cChDTUFD X0NUWCAqY3R4KQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkg JiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tCQl7Ci0tCQlGSVBTX2NtYWNfY3R4X2NsZWFudXAoY3R4 KTsKLS0JCXJldHVybjsKLS0JCX0KLS0jZW5kaWYKLSAJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgm Y3R4LT5jY3R4KTsKLSAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFYX0JMT0NLX0xF TkdUSCk7Ci0gCU9QRU5TU0xfY2xlYW5zZShjdHgtPmsxLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7 Ci1AQCAtMTY0LDExICsxNTcsNiBAQCBpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpjdHgsIGNvbnN0 IHZvaWQKLSAJCQlFVlBlcnIoRVZQX0ZfQ01BQ19JTklULCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQ Uyk7Ci0gCQkJcmV0dXJuIDA7Ci0gCQkJfQotLQkJLyogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5n IHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwKLS0JCSAqIHZpYSBGSVBTX2NpcGhlcmlu aXQoKS4KLS0JCSAqLwotLQkJaWYgKCFpbXBsICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJCXJl dHVybiBGSVBTX2NtYWNfaW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIsIE5VTEwpOwotIAkJ fQotICNlbmRpZgotIAkvKiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLwotQEAgLTIxNiwxMCAr MjA0LDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQotIAl7Ci0g CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBpbjsKLSAJc2l6ZV90IGJsOwotLSNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJ cmV0dXJuIEZJUFNfY21hY191cGRhdGUoY3R4LCBpbiwgZGxlbik7Ci0tI2VuZGlmCi0gCWlmIChj dHgtPm5sYXN0X2Jsb2NrID09IC0xKQotIAkJcmV0dXJuIDA7Ci0gCWlmIChkbGVuID09IDApCi1A QCAtMjYxLDEwICsyNDUsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qg dm9pCi0gaW50IENNQUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBz aXplX3QgKnBvdXRsZW4pCi0gCXsKLSAJaW50IGksIGJsLCBsYjsKLS0jaWZkZWYgT1BFTlNTTF9G SVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0JCXJldHVybiBG SVBTX2NtYWNfZmluYWwoY3R4LCBvdXQsIHBvdXRsZW4pOwotLSNlbmRpZgotIAlpZiAoY3R4LT5u bGFzdF9ibG9jayA9PSAtMSkKLSAJCXJldHVybiAwOwotIAlibCA9IEVWUF9DSVBIRVJfQ1RYX2Js b2NrX3NpemUoJmN0eC0+Y2N0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vY3J5 cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vY3J5cHRvLmgKLS0tLSBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjQxOTkyMDI4OCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9jcnlwdG8uaAkyMDE0LTA1LTA2IDE2OjI5 OjUwLjUzNzkyMzAxNiArMDIwMAotQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBGSVBTX21vZGVf c2V0KGludCByKTsKLSB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKLSAKLSAjZGVmaW5lIGZpcHNf bWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCi0rI2RlZmluZSBub25maXBz X21kX2luaXQoYWxnKSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQotKyNkZWZpbmUgZmlw c19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0rCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQot IAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBj eCkgXAotKyNkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0gCWludCBhbGcj I19Jbml0KGN4IyNfQ1RYICpjKSBcCi0gCXsgXAotIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xE aWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0tCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2Vz dCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCi0rCQkiRGlnZXN0ICIgI2Fs ZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKLSAJcmV0dXJuIHByaXZhdGVfIyNhbGcj I19Jbml0KGMpOyBcCi0gCX0gXAotIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19DVFgg KmMpCi0gCi0gI2RlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKLSAJaWYgKEZJUFNfbW9k ZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLQkJIkxvdyBsZXZlbCBBUEkg Y2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQotKwkJIkNp cGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCi0rLyogZGllIGlmIEZJ UFMgc2VsZnRlc3QgZmFpbGVkICovCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwot IAotICNlbHNlCi0tI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLS0JaW50IGFs ZyMjX0luaXQoY3gjI19DVFggKmMpCi0rI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywg Y3gpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKLSAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0 KGFsZykgd2hpbGUoMCkKLSAjZW5kaWYKLSAKLUBAIC01ODcsNiArNTkyLDkgQEAgaW50IENSWVBU T19tZW1jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3QgdgotICAqLwotIHZvaWQgRVJSX2xvYWRfQ1JZ UFRPX3N0cmluZ3Modm9pZCk7Ci0gCi0rI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkxCi0rdm9p ZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKLSsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhl IENSWVBUTyBmdW5jdGlvbnMuICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMuICovCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGVzL2Rlcy5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2Rlcy9kZXMuaAotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kZXMvZGVzLmguZmlwcwky MDE0LTA1LTA2IDE2OjI5OjUwLjQ0OTkyMDk4MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9kZXMvZGVzLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzc5MjMwMTYgKzAyMDAKLUBAIC0y MjQsOSArMjI0LDYgQEAgaW50IERFU19zZXRfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtleSxERQot IGludCBERVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxl ICpzY2hlZHVsZSk7Ci0gaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9jayAq a2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLSB2b2lkIERFU19zZXRfa2V5X3VuY2hl Y2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS12b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2Vk KGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0tI2Vu ZGlmCi0gdm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAq a2V5KTsKLSB2b2lkIERFU19zdHJpbmdfdG9fMmtleXMoY29uc3QgY2hhciAqc3RyLERFU19jYmxv Y2sgKmtleTEsREVTX2NibG9jayAqa2V5Mik7Ci0gdm9pZCBERVNfY2ZiNjRfZW5jcnlwdChjb25z dCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsbG9uZyBsZW5ndGgsCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9kZXMvc2V0X2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Rlcy9z ZXRfa2V5LmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9kZXMvc2V0X2tleS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM3 OTIzMDE2ICswMjAwCi1AQCAtMzM2LDEzICszMzYsNiBAQCBpbnQgREVTX3NldF9rZXlfY2hlY2tl ZChjb25zdF9ERVNfY2Jsb2NrCi0gCX0KLSAKLSB2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChj b25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKLS0JewotLQlmaXBzX2NpcGhlcl9hYm9ydChERVMpOwotLQlwcml2YXRl X0RFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKLS0JfQotLXZvaWQgcHJpdmF0 ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3Nj aGVkdWxlICpzY2hlZHVsZSkKLS0jZW5kaWYKLSAJewotIAlzdGF0aWMgY29uc3QgaW50IHNoaWZ0 czJbMTZdPXswLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwfTsKLSAJcmVnaXN0ZXIgREVT X0xPTkcgYyxkLHQscyx0MjsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9n ZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9nZW4uYwotLS0tIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RoL2RoX2dlbi5jCTIwMTQtMDUt MDYgMTY6Mjk6NTAuNTM3OTIzMDE2ICswMjAwCi1AQCAtODQsMTEgKzg0LDYgQEAgaW50IERIX2dl bmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwgaQotICNlbmRpZgotIAlpZihyZXQtPm1ldGgt PmdlbmVyYXRlX3BhcmFtcykKLSAJCXJldHVybiByZXQtPm1ldGgtPmdlbmVyYXRlX3BhcmFtcyhy ZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlp ZiAoRklQU19tb2RlKCkpCi0tCQlyZXR1cm4gRklQU19kaF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KHJldCwgcHJpbWVfbGVuLAotLQkJCQkJCQlnZW5lcmF0b3IsIGNiKTsKLS0jZW5kaWYKLSAJcmV0 dXJuIGRoX2J1aWx0aW5fZ2VucGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsK LSAJfQotIAotQEAgLTEyMyw2ICsxMTgsMjAgQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBh cmFtcyhESCAqcmV0LAotIAlpbnQgZyxvaz0gLTE7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYg KHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJ CURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxM KTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAljdHg9Qk5fQ1RYX25ldygpOwot IAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaC5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2RoL2RoLmgKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGgvZGguaC5maXBzCTIwMTQt MDUtMDYgMTY6Mjk6NTAuMzk0OTE5NzEwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2RoL2RoLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzc5MjMwMTYgKzAyMDAKLUBAIC03Nyw2ICs3 Nyw4IEBACi0gIyBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCi0gI2Vu ZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0r Ci0gI2RlZmluZSBESF9GTEFHX0NBQ0hFX01PTlRfUCAgICAgMHgwMQotICNkZWZpbmUgREhfRkxB R19OT19FWFBfQ09OU1RUSU1FIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4g REgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0 aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKLUBAIC0yMTAsNiArMjEyLDcgQEAgaW50CURIX2No ZWNrKGNvbnN0IERIICpkaCxpbnQgKmNvZGVzKTsKLSBpbnQJREhfY2hlY2tfcHViX2tleShjb25z dCBESCAqZGgsY29uc3QgQklHTlVNICpwdWJfa2V5LCBpbnQgKmNvZGVzKTsKLSBpbnQJREhfZ2Vu ZXJhdGVfa2V5KERIICpkaCk7Ci0gaW50CURIX2NvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtl eSxjb25zdCBCSUdOVU0gKnB1Yl9rZXksREggKmRoKTsKLStpbnQJREhfY29tcHV0ZV9rZXlfcGFk ZGVkKHVuc2lnbmVkIGNoYXIgKmtleSxjb25zdCBCSUdOVU0gKnB1Yl9rZXksREggKmRoKTsKLSBE SCAqCWQyaV9ESHBhcmFtcyhESCAqKmEsY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25nIGxl bmd0aCk7Ci0gaW50CWkyZF9ESHBhcmFtcyhjb25zdCBESCAqYSx1bnNpZ25lZCBjaGFyICoqcHAp OwotICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9rZXkuYwot LS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMTQtMDMtMTcgMTc6 MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RoL2RoX2tl eS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM4OTIzMDQwICswMjAwCi1AQCAtNjEsNiArNjEsOSBA QAotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgot ICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShE SCAqZGgpOwotIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LCBjb25z dCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7Ci1AQCAtOTcsNiArMTAwLDIxIEBAIGludCBESF9j b21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGMKLSAJcmV0dXJuIGRoLT5tZXRoLT5jb21w dXRlX2tleShrZXksIHB1Yl9rZXksIGRoKTsKLSAJfQotIAotK2ludCBESF9jb21wdXRlX2tleV9w YWRkZWQodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCkK LSsJewotKwlpbnQgcnYsIHBhZDsKLSsJcnYgPSBESF9jb21wdXRlX2tleShrZXksIHB1Yl9rZXks IGRoKTsKLSsJaWYgKHJ2IDw9IDApCi0rCQlyZXR1cm4gcnY7Ci0rCXBhZCA9IEJOX251bV9ieXRl cyhkaC0+cCkgLSBydjsKLSsJaWYgKHBhZCA+IDApCi0rCQl7Ci0rCQltZW1tb3ZlKGtleSArIHBh ZCwga2V5LCBydik7Ci0rCQltZW1zZXQoa2V5LCAwLCBwYWQpOwotKwkJfQotKwlyZXR1cm4gcnYg KyBwYWQ7Ci0rCX0KLSsKLSBzdGF0aWMgREhfTUVUSE9EIGRoX29zc2wgPSB7Ci0gIk9wZW5TU0wg REggTWV0aG9kIiwKLSBnZW5lcmF0ZV9rZXksCi1AQCAtMTA0LDcgKzEyMiw3IEBAIGNvbXB1dGVf a2V5LAotIGRoX2JuX21vZF9leHAsCi0gZGhfaW5pdCwKLSBkaF9maW5pc2gsCi0tMCwKLStESF9G TEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0gTlVMTAotIH07Ci1AQCAtMTIzLDYgKzE0MSwxNCBA QCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCi0gCUJOX01PTlRfQ1RYICptb250PU5V TEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBP UEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlESGVycihESF9GX0dF TkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIDA7Ci0rCQl9 Ci0rI2VuZGlmCi0rCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBn b3RvIGVycjsKLSAKLUBAIC0yMTMsNiArMjM5LDEzIEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXko dW5zaWduZWQgY2hhciAqa2UKLSAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksREhfUl9NT0RVTFVT X1RPT19MQVJHRSk7Ci0gCQlnb3RvIGVycjsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhf Ul9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0g CWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLUBAIC0y ODAsNiArMzEzLDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0IERIICpkaCwgQgot IAotIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJZGgtPmZsYWdzIHw9IERIX0ZM QUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9kaC9kaF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9s aWIuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9saWIuYy5maXBzCTIwMTQtMDMt MTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Ro L2RoX2xpYi5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM4OTIzMDQwICswMjAwCi1AQCAtODEsMTQg KzgxLDcgQEAgY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2QodgotIAl7Ci0g CWlmKCFkZWZhdWx0X0RIX21ldGhvZCkKLSAJCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlp ZiAoRklQU19tb2RlKCkpCi0tCQkJcmV0dXJuIEZJUFNfZGhfb3BlbnNzbCgpOwotLQkJZWxzZQot LQkJCXJldHVybiBESF9PcGVuU1NMKCk7Ci0tI2Vsc2UKLSAJCWRlZmF1bHRfREhfbWV0aG9kID0g REhfT3BlblNTTCgpOwotLSNlbmRpZgotIAkJfQotIAlyZXR1cm4gZGVmYXVsdF9ESF9tZXRob2Q7 Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfZXJyLmMJMjAxNC0wNS0wNiAx NjoyOTo1MC41Mzg5MjMwNDAgKzAyMDAKLUBAIC03NCw2ICs3NCw4IEBAIHN0YXRpYyBFUlJfU1RS SU5HX0RBVEEgRFNBX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZVTkMoRFNBX0ZfRE9fRFNBX1BSSU5U KSwJIkRPX0RTQV9QUklOVCJ9LAotIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlQpLAki RFNBcGFyYW1zX3ByaW50In0sCi0ge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklOVF9GUCks CSJEU0FwYXJhbXNfcHJpbnRfZnAifSwKLSt7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZ R0VOKSwJImRzYV9idWlsdGluX2tleWdlbiJ9LAotK3tFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJ Tl9QQVJBTUdFTiksCSJkc2FfYnVpbHRpbl9wYXJhbWdlbiJ9LAotIHtFUlJfRlVOQyhEU0FfRl9E U0FfRE9fU0lHTiksCSJEU0FfZG9fc2lnbiJ9LAotIHtFUlJfRlVOQyhEU0FfRl9EU0FfRE9fVkVS SUZZKSwJIkRTQV9kb192ZXJpZnkifSwKLSB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0dFTkVSQVRFX0tF WSksCSJEU0FfZ2VuZXJhdGVfa2V5In0sCi1AQCAtMTA2LDYgKzEwOCw4IEBAIHN0YXRpYyBFUlJf U1RSSU5HX0RBVEEgRFNBX3N0cl9yZWFzb25zW10KLSB7RVJSX1JFQVNPTihEU0FfUl9EQVRBX1RP T19MQVJHRV9GT1JfS0VZX1NJWkUpLCJkYXRhIHRvbyBsYXJnZSBmb3Iga2V5IHNpemUifSwKLSB7 RVJSX1JFQVNPTihEU0FfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0s Ci0ge0VSUl9SRUFTT04oRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSkgICAsImludmFsaWQgZGln ZXN0IHR5cGUifSwKLSt7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9JTlZBTElEKSAgICAgICwi a2V5IHNpemUgaW52YWxpZCJ9LAotK3tFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCkgICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9NSVNTSU5H X1BBUkFNRVRFUlMpICAgICwibWlzc2luZyBwYXJhbWV0ZXJzIn0sCi0ge0VSUl9SRUFTT04oRFNB X1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0ge0VSUl9S RUFTT04oRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTKSAsIm5lZWQgbmV3IHNldHVwIHZhbHVl cyJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9kc2EvZHNhX2dlbi5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDE0LTA1LTA2IDE2 OjI5OjUwLjUzODkyMzA0MCArMDIwMAotQEAgLTg1LDYgKzg1LDE0IEBACi0gI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotICNlbmRpZgotIAotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGlj IGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJpdHMsIHNpemVf dCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsIGlu dCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwgaW50ICpjb3Vu dGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKLStzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX2co Qk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAotKwkJQklHTlVNICoqZ19yZXQsIHVu c2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotKyNlbmRpZgotKwotIGludCBEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMsCi0gCQljb25zdCB1bnNp Z25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCi0gCQlpbnQgKmNvdW50ZXJfcmV0LCB1 bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotQEAgLTEwMCwxNCArMTA4LDYgQEAg aW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LAotIAlpZihyZXQtPm1ldGgt PmRzYV9wYXJhbWdlbikKLSAJCXJldHVybiByZXQtPm1ldGgtPmRzYV9wYXJhbWdlbihyZXQsIGJp dHMsIHNlZWRfaW4sIHNlZWRfbGVuLAotIAkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLS0j aWZkZWYgT1BFTlNTTF9GSVBTCi0tCWVsc2UgaWYgKEZJUFNfbW9kZSgpKQotLQkJewotLQkJcmV0 dXJuIEZJUFNfZHNhX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBiaXRzLCAKLS0JCQkJCQkJ c2VlZF9pbiwgc2VlZF9sZW4sCi0tCQkJCQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotLQkJ fQotLSNlbmRpZgotIAllbHNlCi0gCQl7Ci0gCQljb25zdCBFVlBfTUQgKmV2cG1kOwotQEAgLTEy NSwyNyArMTI1LDExOSBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQs Ci0gCQkJfQotIAotIAkJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJp dHMsIGV2cG1kLAotLQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBOVUxMLCBjb3VudGVyX3JldCwgaF9y ZXQsIGNiKTsKLSsJCQkJc2VlZF9pbiwgc2VlZF9sZW4sIGNvdW50ZXJfcmV0LCBoX3JldCwgY2Ip OwotIAkJfQotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBGSVBTX2RzYV9idWls dGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwljb25z dCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2Vl ZF9sZW4sCi0rCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5D QiAqY2IpCi0rCXsKLSsJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJp dHMsCi0rCQlldnBtZCwgc2VlZF9pbiwgc2VlZF9sZW4sCi0rCQljb3VudGVyX3JldCwgaF9yZXQs IGNiKTsKLSsJfQotKyNlbmRpZgotKwotIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJl dCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSAJY29uc3QgRVZQX01EICpldnBtZCwgY29u c3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAotLQl1bnNpZ25lZCBj aGFyICpzZWVkX291dCwKLSAJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQs IEJOX0dFTkNCICpjYikKLSAJewotIAlpbnQgb2s9MDsKLSAJdW5zaWduZWQgY2hhciBzZWVkW1NI QTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsJQklHTlVNICpnPU5VTEwsKnE9TlVMTCwqcD1OVUxMOwot KwlzaXplX3QgcXNpemUgPSBxYml0cyA+PiAzOwotKwlCTl9DVFggKmN0eD1OVUxMOwotKwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsK LSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsKLSsJ aWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJgotKwkgICAgKGJpdHMgIT0gMTAyNCB8fCBxYml0cyAh PSAxNjApICYmCi0rCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDIyNCkgJiYKLSsJICAg IChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjU2KSAmJgotKwkgICAgKGJpdHMgIT0gMzA3MiB8 fCBxYml0cyAhPSAyNTYpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFN R0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRp ZgotKwlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkpCi0rCQlzZWVk X2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KLSsJaWYg KHNlZWRfbGVuID4gc2l6ZW9mKHNlZWQpKSAKLSsJCXNlZWRfbGVuID0gc2l6ZW9mKHNlZWQpOwkv KiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotKwkJCQkJCSAq IGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAyNTYgYml0cyovCi0r CWlmIChzZWVkX2luICE9IE5VTEwpCi0rCQltZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4p OwotKwllbHNlCi0rCQlzZWVkX2xlbiA9IDA7Ci0rCi0rCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkg PT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsKLSsJaWYg KCFGSVBTX2RzYV9nZW5lcmF0ZV9wcShjdHgsIGJpdHMsIHFiaXRzLCBldnBtZCwKLSsJCXNlZWQs IHNlZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJfcmV0LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJ aWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0eCwgcCwgcSwgJmcsIGhfcmV0LCBjYikpCi0rCQln b3RvIGVycjsKLSsKLSsJb2s9MTsKLStlcnI6Ci0rCWlmIChvaykKLSsJCXsKLSsJCWlmKHJldC0+ cCkKLSsJCQl7Ci0rCQkJQk5fZnJlZShyZXQtPnApOwotKwkJCXJldC0+cCA9IE5VTEw7Ci0rCQkJ fQotKwkJaWYocmV0LT5xKQotKwkJCXsKLSsJCQlCTl9mcmVlKHJldC0+cSk7Ci0rCQkJcmV0LT5x ID0gTlVMTDsKLSsJCQl9Ci0rCQlpZihyZXQtPmcpCi0rCQkJewotKwkJCUJOX2ZyZWUocmV0LT5n KTsKLSsJCQlyZXQtPmcgPSBOVUxMOwotKwkJCX0KLSsJCXJldC0+cD1CTl9kdXAocCk7Ci0rCQly ZXQtPnE9Qk5fZHVwKHEpOwotKwkJcmV0LT5nPUJOX2R1cChnKTsKLSsJCWlmIChyZXQtPnAgPT0g TlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKLSsJCQlvaz0wOwotKwkJ fQotKwlpZihjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShj dHgpOwotKwkJfQotKwlyZXR1cm4gb2s7Ci0rCX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwot K3N0YXRpYwotKyNlbmRpZgotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwg c2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2ln bmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0g KipxX3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCBvaz0w OwotIAl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLS0JdW5zaWduZWQg Y2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5HVEhd OwotKwl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0gCUJJR05VTSAq cjAsKlcsKlgsKmMsKnRlc3Q7Ci0tCUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsKLS0J Qk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLS0JaW50IGksIGssIG49MCwgbT0wLCBxc2l6ZSA9IHFi aXRzID4+IDM7Ci0rCUJJR05VTSAqcT1OVUxMLCpwPU5VTEw7Ci0rCWludCBpLCBrLCBiLCBuPTAs IG09MCwgcXNpemUgPSBxYml0cyA+PiAzOwotIAlpbnQgY291bnRlcj0wOwotIAlpbnQgcj0wOwot LQlCTl9DVFggKmN0eD1OVUxMOwotLQl1bnNpZ25lZCBpbnQgaD0yOwotIAotIAlpZiAocXNpemUg IT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYK LSAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotQEAgLTE1Myw1MSArMjQ1LDQz IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCXJldHVybiAw OwotIAotIAlpZiAoZXZwbWQgPT0gTlVMTCkKLS0JCS8qIHVzZSBTSEExIGFzIGRlZmF1bHQgKi8K LS0JCWV2cG1kID0gRVZQX3NoYTEoKTsKLSsJICAgIHsKLSsJCWlmIChxYml0cyA8PSAxNjApCi0r CQkJZXZwbWQgPSBFVlBfc2hhMSgpOwotKwkJZWxzZSBpZiAocWJpdHMgPD0gMjI0KQotKwkJCWV2 cG1kID0gRVZQX3NoYTIyNCgpOwotKwkJZWxzZQotKwkJCWV2cG1kID0gRVZQX3NoYTI1NigpOwot KwkgICAgfQotIAotIAlpZiAoYml0cyA8IDUxMikKLSAJCWJpdHMgPSA1MTI7Ci0gCi0gCWJpdHMg PSAoYml0cys2MykvNjQqNjQ7Ci0gCi0tCS8qIE5COiBzZWVkX2xlbiA9PSAwIGlzIHNwZWNpYWwg Y2FzZTogY29weSBnZW5lcmF0ZWQgc2VlZCB0bwotLSAJICogc2VlZF9pbiBpZiBpdCBpcyBub3Qg TlVMTC4KLS0gCSAqLwotLQlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6 ZSkpCi0tCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25v cmUgKi8KLS0JaWYgKHNlZWRfbGVuID4gKHNpemVfdClxc2l6ZSkgCi0tCQlzZWVkX2xlbiA9IHFz aXplOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotLQkJ CQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDE2MCBiaXRz Ki8KLS0JaWYgKHNlZWRfaW4gIT0gTlVMTCkKLS0JCW1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVk X2xlbik7Ci0tCi0tCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKLS0JCWdvdG8gZXJy OwotLQotLQlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0tCQlnb3RvIGVy cjsKLS0KLS0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCXIwID0gQk5fQ1RYX2dldChjdHgpOwotLQln ID0gQk5fQ1RYX2dldChjdHgpOwotIAlXID0gQk5fQ1RYX2dldChjdHgpOwotLQlxID0gQk5fQ1RY X2dldChjdHgpOwotKwkqcV9yZXQgPSBxID0gQk5fQ1RYX2dldChjdHgpOwotIAlYID0gQk5fQ1RY X2dldChjdHgpOwotIAljID0gQk5fQ1RYX2dldChjdHgpOwotLQlwID0gQk5fQ1RYX2dldChjdHgp OwotKwkqcF9yZXQgPSBwID0gQk5fQ1RYX2dldChjdHgpOwotIAl0ZXN0ID0gQk5fQ1RYX2dldChj dHgpOwotIAotIAlpZiAoIUJOX2xzaGlmdCh0ZXN0LEJOX3ZhbHVlX29uZSgpLGJpdHMtMSkpCi0g CQlnb3RvIGVycjsKLSAKLSsJLyogc3RlcCAzIG4gPSBcbGNlaWwgYml0cyAvIHFiaXRzIFxyY2Vp bCAtIDEgKi8KLSsJbiA9IChiaXRzK3FiaXRzLTEpL3FiaXRzIC0gMTsKLSsJLyogc3RlcCA0IGIg PSBiaXRzIC0gMSAtIG4gKiBxYml0cyAqLwotKwliID0gYml0cyAtIDEgLSBuKnFiaXRzOwotKwot IAlmb3IgKDs7KQotIAkJewotIAkJZm9yICg7OykgLyogZmluZCBxICovCi0gCQkJewotIAkJCWlu dCBzZWVkX2lzX3JhbmRvbTsKLSAKLS0JCQkvKiBzdGVwIDEgKi8KLSsJCQkvKiBzdGVwIDUgZ2Vu ZXJhdGUgc2VlZCAqLwotIAkJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAwLCBtKyspKQotIAkJCQln b3RvIGVycjsKLSAKLUBAIC0yMTIsMzAgKzI5NiwxOCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCXNlZWRfbGVuPTA7IC8qIHVzZSByYW5kb20gc2VlZCBp ZiAnc2VlZF9pbicgdHVybnMgb3V0IHRvIGJlIGJhZCovCi0gCQkJCX0KLSAJCQltZW1jcHkoYnVm ICwgc2VlZCwgcXNpemUpOwotLQkJCW1lbWNweShidWYyLCBzZWVkLCBxc2l6ZSk7Ci0tCQkJLyog cHJlY29tcHV0ZSAiU0VFRCArIDEiIGZvciBzdGVwIDc6ICovCi0tCQkJZm9yIChpID0gcXNpemUt MTsgaSA+PSAwOyBpLS0pCi0tCQkJCXsKLS0JCQkJYnVmW2ldKys7Ci0tCQkJCWlmIChidWZbaV0g IT0gMCkKLS0JCQkJCWJyZWFrOwotLQkJCQl9Ci0gCi0tCQkJLyogc3RlcCAyICovCi0rCQkJLyog c3RlcCA2IFUgPSBoYXNoKHNlZWQpICovCi0gCQkJaWYgKCFFVlBfRGlnZXN0KHNlZWQsIHFzaXpl LCBtZCwgICBOVUxMLCBldnBtZCwgTlVMTCkpCi0gCQkJCWdvdG8gZXJyOwotLQkJCWlmICghRVZQ X0RpZ2VzdChidWYsICBxc2l6ZSwgYnVmMiwgTlVMTCwgZXZwbWQsIE5VTEwpKQotLQkJCQlnb3Rv IGVycjsKLS0JCQlmb3IgKGkgPSAwOyBpIDwgcXNpemU7IGkrKykKLS0JCQkJbWRbaV1ePWJ1ZjJb aV07Ci0gCi0tCQkJLyogc3RlcCAzICovCi0rCQkJLyogc3RlcCA3IHEgPSAyXihxYml0cy0xKSAr IFUgKyAxIC0gKFUgbW9kIDIpICovCi0gCQkJbWRbMF0gfD0gMHg4MDsKLSAJCQltZFtxc2l6ZS0x XSB8PSAweDAxOwotIAkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcSkpCi0gCQkJCWdvdG8g ZXJyOwotIAotLQkJCS8qIHN0ZXAgNCAqLwotKwkJCS8qIHN0ZXAgOCB0ZXN0IGZvciBwcmltZSAo NjQgcm91bmQgb2YgUmFiaW4tTWlsbGVyKSAqLwotIAkJCXIgPSBCTl9pc19wcmltZV9mYXN0dGVz dF9leChxLCBEU1NfcHJpbWVfY2hlY2tzLCBjdHgsCi0gCQkJCQlzZWVkX2lzX3JhbmRvbSwgY2Ip OwotIAkJCWlmIChyID4gMCkKLUBAIC0yNDMsMjcgKzMxNSwyMiBAQCBpbnQgZHNhX2J1aWx0aW5f cGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJaWYgKHIgIT0gMCkKLSAJCQkJZ290byBlcnI7 Ci0gCi0tCQkJLyogZG8gYSBjYWxsYmFjayBjYWxsICovCi0tCQkJLyogc3RlcCA1ICovCi0gCQkJ fQotIAotIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDApKSBnb3RvIGVycjsKLSAJCWlmKCFC Tl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkgZ290byBlcnI7Ci0gCi0tCQkvKiBzdGVwIDYgKi8KLSsJ CS8qIHN0ZXAgMTEgKi8KLSAJCWNvdW50ZXI9MDsKLS0JCS8qICJvZmZzZXQgPSAyIiAqLwotLQot LQkJbj0oYml0cy0xKS8xNjA7Ci0rCQkvKiAib2Zmc2V0ID0gMSIgKi8KLSAKLSAJCWZvciAoOzsp Ci0gCQkJewotIAkJCWlmICgoY291bnRlciAhPSAwKSAmJiAhQk5fR0VOQ0JfY2FsbChjYiwgMCwg Y291bnRlcikpCi0gCQkJCWdvdG8gZXJyOwotIAotLQkJCS8qIHN0ZXAgNyAqLwotKwkJCS8qIHN0 ZXAgMTEuMSwgMTEuMiBvYnRhaW4gVyAqLwotIAkJCUJOX3plcm8oVyk7Ci0tCQkJLyogbm93ICdi dWYnIGNvbnRhaW5zICJTRUVEICsgb2Zmc2V0IC0gMSIgKi8KLSAJCQlmb3IgKGs9MDsgazw9bjsg aysrKQotIAkJCQl7Ci0gCQkJCS8qIG9idGFpbiAiU0VFRCArIG9mZnNldCArIGsiIGJ5IGluY3Jl bWVudGluZzogKi8KLUBAIC0yNzgsMjggKzM0NSwzMCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCQkJCQkJTlVMTCkpCi0gCQkJCQlnb3RvIGVycjsKLSAK LS0JCQkJLyogc3RlcCA4ICovCi0gCQkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcjApKQot IAkJCQkJZ290byBlcnI7Ci0tCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLChxc2l6ZSA8PCAzKSpr KSkgZ290byBlcnI7Ci0rCQkJCWlmIChrID09IG4pCi0rCQkJCQlCTl9tYXNrX2JpdHMocjAsYik7 Ci0rCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLHFiaXRzKmspKSBnb3RvIGVycjsKLSAJCQkJaWYg KCFCTl9hZGQoVyxXLHIwKSkgZ290byBlcnI7Ci0gCQkJCX0KLSAKLS0JCQkvKiBtb3JlIG9mIHN0 ZXAgOCAqLwotLQkJCWlmICghQk5fbWFza19iaXRzKFcsYml0cy0xKSkgZ290byBlcnI7Ci0rCQkJ Lyogc3RlcCAxMS4zIFggPSBXICsgMl4oTC0xKSAqLwotIAkJCWlmICghQk5fY29weShYLFcpKSBn b3RvIGVycjsKLSAJCQlpZiAoIUJOX2FkZChYLFgsdGVzdCkpIGdvdG8gZXJyOwotIAotLQkJCS8q IHN0ZXAgOSAqLwotKwkJCS8qIHN0ZXAgMTEuNCBjID0gWCBtb2QgMipxICovCi0gCQkJaWYgKCFC Tl9sc2hpZnQxKHIwLHEpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX21vZChjLFgscjAsY3R4KSkg Z290byBlcnI7Ci0rCi0rCQkJLyogc3RlcCAxMS41IHAgPSBYIC0gKGMgLSAxKSAqLwotIAkJCWlm ICghQk5fc3ViKHIwLGMsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX3N1 YihwLFgscjApKSBnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVwIDEwICovCi0rCQkJLyogc3RlcCAx MS42ICovCi0gCQkJaWYgKEJOX2NtcChwLHRlc3QpID49IDApCi0gCQkJCXsKLS0JCQkJLyogc3Rl cCAxMSAqLwotKwkJCQkvKiBzdGVwIDExLjcgKi8KLSAJCQkJciA9IEJOX2lzX3ByaW1lX2Zhc3R0 ZXN0X2V4KHAsIERTU19wcmltZV9jaGVja3MsCi0gCQkJCQkJY3R4LCAxLCBjYik7Ci0gCQkJCWlm IChyID4gMCkKLUBAIC0zMDgsMTkgKzM3Nyw0NSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4o RFNBICpyZXQsIHNpemVfCi0gCQkJCQlnb3RvIGVycjsKLSAJCQkJfQotIAotLQkJCS8qIHN0ZXAg MTMgKi8KLSsJCQkvKiBzdGVwIDExLjkgKi8KLSAJCQljb3VudGVyKys7Ci0gCQkJLyogIm9mZnNl dCA9IG9mZnNldCArIG4gKyAxIiAqLwotIAotLQkJCS8qIHN0ZXAgMTQgKi8KLS0JCQlpZiAoY291 bnRlciA+PSA0MDk2KSBicmVhazsKLSsJCQkvKiBzdGVwIDEyICovCi0rCQkJaWYgKGNvdW50ZXIg Pj0gNCpiaXRzKSBicmVhazsKLSAJCQl9Ci0gCQl9Ci0gZW5kOgotIAlpZighQk5fR0VOQ0JfY2Fs bChjYiwgMiwgMSkpCi0gCQlnb3RvIGVycjsKLSAKLS0JLyogV2Ugbm93IG5lZWQgdG8gZ2VuZXJh dGUgZyAqLwotKwlvaz0xOwotK2VycjoKLSsJaWYgKG9rKQotKwkJewotKwkJaWYgKGNvdW50ZXJf cmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOwotKwkJfQotKwlyZXR1cm4gb2s7Ci0r CX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYwotKyNlbmRpZgotK2ludCBGSVBT X2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJCUJJ R05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0r CWludCBvaz0wOwotKwlCSUdOVU0gKnIwLCAqdGVzdCwgKmcgPSBOVUxMOwotKwlCTl9NT05UX0NU WCAqbW9udDsKLSsJdW5zaWduZWQgaW50IGg9MjsKLSsKLSsJaWYgKChtb250PUJOX01PTlRfQ1RY X25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCXIwID0gQk5fQ1RYX2dldChjdHgp OwotKwkqZ19yZXQgPSBnID0gQk5fQ1RYX2dldChjdHgpOwotKwl0ZXN0ID0gQk5fQ1RYX2dldChj dHgpOwotKwotIAkvKiBTZXQgcjA9KHAtMSkvcSAqLwotIAlpZiAoIUJOX3N1Yih0ZXN0LHAsQk5f dmFsdWVfb25lKCkpKSBnb3RvIGVycjsKLSAJaWYgKCFCTl9kaXYocjAsTlVMTCx0ZXN0LHEsY3R4 KSkgZ290byBlcnI7Ci1AQCAtMzQ0LDI2ICs0MzksNyBAQCBlbmQ6Ci0gZXJyOgotIAlpZiAob2sp Ci0gCQl7Ci0tCQlpZihyZXQtPnApIEJOX2ZyZWUocmV0LT5wKTsKLS0JCWlmKHJldC0+cSkgQk5f ZnJlZShyZXQtPnEpOwotLQkJaWYocmV0LT5nKSBCTl9mcmVlKHJldC0+Zyk7Ci0tCQlyZXQtPnA9 Qk5fZHVwKHApOwotLQkJcmV0LT5xPUJOX2R1cChxKTsKLS0JCXJldC0+Zz1CTl9kdXAoZyk7Ci0t CQlpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5VTEwp Ci0tCQkJewotLQkJCW9rPTA7Ci0tCQkJZ290byBlcnI7Ci0tCQkJfQotLQkJaWYgKGNvdW50ZXJf cmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOwotIAkJaWYgKGhfcmV0ICE9IE5VTEwp ICpoX3JldD1oOwotLQkJaWYgKHNlZWRfb3V0KQotLQkJCW1lbWNweShzZWVkX291dCwgc2VlZCwg cXNpemUpOwotLQkJfQotLQlpZihjdHgpCi0tCQl7Ci0tCQlCTl9DVFhfZW5kKGN0eCk7Ci0tCQlC Tl9DVFhfZnJlZShjdHgpOwotIAkJfQotIAlpZiAobW9udCAhPSBOVUxMKSBCTl9NT05UX0NUWF9m cmVlKG1vbnQpOwotIAlyZXR1cm4gb2s7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v ZHNhL2RzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2EuaAotLS0tIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjMxNjkx NzkwNyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhLmgJMjAxNC0wNS0w NiAxNjoyOTo1MC41Mzg5MjMwNDAgKzAyMDAKLUBAIC04OCw2ICs4OCw4IEBACi0gIyBkZWZpbmUg T1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUg T1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERTQV9G TEFHX0NBQ0hFX01PTlRfUAkweDAxCi0gI2RlZmluZSBEU0FfRkxBR19OT19FWFBfQ09OU1RUSU1F ICAgICAgIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24g bm93IHVzZXMgY29uc3RhbnQgdGltZQotQEAgLTI2NCw2ICsyNjYsMTcgQEAgaW50CURTQV9wcmlu dF9mcChGSUxFICpicCwgY29uc3QgRFNBICp4LAotIERIICpEU0FfZHVwX0RIKGNvbnN0IERTQSAq cik7Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBGSVBTX2RzYV9idWls dGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwljb25z dCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2Vl ZF9sZW4sCi0rCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5D QiAqY2IpOwotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJp dHMsIHNpemVfdCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIg KnNlZWQsIGludCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwg aW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVf ZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCi0rCQlCSUdOVU0gKipnX3JldCwg dW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Ci0rI2VuZGlmCi0rCi0gI2RlZmlu ZSBFVlBfUEtFWV9DVFhfc2V0X2RzYV9wYXJhbWdlbl9iaXRzKGN0eCwgbmJpdHMpIFwKLSAJRVZQ X1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09QX1BBUkFNR0VOLCBc Ci0gCQkJCUVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX0JJVFMsIG5iaXRzLCBOVUxMKQotQEAg LTI4NSwxMCArMjk4LDEzIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7Ci0gI2Rl ZmluZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEwNAotICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1T X1BSSU5UCQkJCSAxMDAKLSAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEK LSsjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQKLSsjZGVmaW5lIERTQV9G X0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMwotICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04J CQkJIDExMgotICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCi0tI2RlZmluZSBE U0FfRl9EU0FfR0VORVJBVEVfS0VZCQkJCSAxMjQKLS0jZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFU RV9QQVJBTUVURVJTX0VYCQkgMTIzCi0rI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZCQkJ CSAxMjYKLSsjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYCQkgMTI3Ci0r I2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkvKiB1bnVzZWQgKi8JIDEyNQot ICNkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMwotICNkZWZpbmUgRFNBX0ZfRFNB X1BBUkFNX0RFQ09ERQkJCQkgMTE5Ci0gI2RlZmluZSBEU0FfRl9EU0FfUFJJTlRfRlAJCQkJIDEw NQotQEAgLTMxNCwxMSArMzMwLDE1IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7 Ci0gI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAKLSAjZGVm aW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0Ci0gI2RlZmluZSBEU0FfUl9JTlZBTElEX0RJ R0VTVF9UWVBFCQkJIDEwNgotKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRAkJCQkgMTEz Ci0rI2RlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTEwCi0gI2RlZmluZSBEU0Ff Ul9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAxCi0gI2RlZmluZSBEU0FfUl9NT0RVTFVTX1RPT19M QVJHRQkJCQkgMTAzCi0tI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJCQkgMTEw Ci0rI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJCQkgMTEyCi0gI2RlZmluZSBE U0FfUl9OT05fRklQU19EU0FfTUVUSE9ECQkJIDExMQotKyNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNf TUVUSE9ECQkJCSAxMTEKLSAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcK LSsjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUgLyogdW51 c2VkICovIDExMgotICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEw NQotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2Ffa2V5LmMK LS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMTQtMDMtMTcg MTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9k c2Ffa2V5LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzk5MjMwNjMgKzAyMDAKLUBAIC02Niw2ICs2 NiwzNSBAQAotIAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0rc3RhdGljIGludCBmaXBzX2NoZWNr X2RzYShEU0EgKmRzYSkKLSsJewotKwlFVlBfUEtFWSAqcGs7Ci0rCXVuc2lnbmVkIGNoYXIgdGJz W10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYg KChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtF WV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywgdGJzLCAtMSwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkpCi0rCQlyZXQgPSAxOwotKwotKwll cnI6Ci0rCWlmIChyZXQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tf RFNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9m YWlsKCk7Ci0rCQl9Ci0rCi0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwotKwly ZXR1cm4gcmV0OwotKwl9Ci0rCi0gI2VuZGlmCi0gCi0gc3RhdGljIGludCBkc2FfYnVpbHRpbl9r ZXlnZW4oRFNBICpkc2EpOwotQEAgLTgyLDEwICsxMTEsNiBAQCBpbnQgRFNBX2dlbmVyYXRlX2tl eShEU0EgKmRzYSkKLSAjZW5kaWYKLSAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKQotIAkJcmV0 dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0J aWYgKEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX2tleShkc2EpOwot LSNlbmRpZgotIAlyZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2VuKGRzYSk7Ci0gCX0KLSAKLUBAIC05 NSw2ICsxMjAsMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCi0g CUJOX0NUWCAqY3R4PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxM OwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5m bGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+ cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNBZXJy KERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09 IE5VTEwpIGdvdG8gZXJyOwotIAotIAlpZiAoZHNhLT5wcml2X2tleSA9PSBOVUxMKQotQEAgLTEz Myw2ICsxNjcsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCi0g Ci0gCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7Ci0gCWRzYS0+cHViX2tleT1wdWJfa2V5OwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkgJiYgIWZpcHNfY2hlY2tfZHNhKGRz YSkpCi0rCQl7Ci0rCQlkc2EtPnB1Yl9rZXkgPSBOVUxMOwotKwkJZHNhLT5wcml2X2tleSA9IE5V TEw7Ci0rCSAgICAJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7Ci0gCi0gZXJyOgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfbGliLmMuZmlwcyBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9k c2EvZHNhX2xpYi5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9saWIuYwkyMDE0LTA1LTA2IDE2OjI5OjUw LjUzOTkyMzA2MyArMDIwMAotQEAgLTg3LDE0ICs4Nyw3IEBAIGNvbnN0IERTQV9NRVRIT0QgKkRT QV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJewotIAlpZighZGVmYXVsdF9EU0FfbWV0aG9kKQotIAkJ ewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkKLS0JCQlyZXR1cm4g RklQU19kc2Ffb3BlbnNzbCgpOwotLQkJZWxzZQotLQkJCXJldHVybiBEU0FfT3BlblNTTCgpOwot LSNlbHNlCi0gCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgpOwotLSNlbmRpZgot IAkJfQotIAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOwotIAl9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v ZHNhL2RzYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9sb2NsLmgu ZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjMxNzkxNzkzMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDE0LTA1LTA2IDE2OjI5OjUwLjUzOTkyMzA2MyAr MDIwMAotQEAgLTU2LDUgKzU2LDQgQEAKLSAKLSBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNB ICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0gCWNvbnN0IEVWUF9NRCAqZXZwbWQs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLS0JdW5zaWdu ZWQgY2hhciAqc2VlZF9vdXQsCi0gCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhf cmV0LCBCTl9HRU5DQiAqY2IpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9k c2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCi0tLS0g b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAxNC0wMy0xNyAxNzox NDoyMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9v c3NsLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzk5MjMwNjMgKzAyMDAKLUBAIC02NSw2ICs2NSw5 IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgotICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBEU0FfU0lHICpkc2Ff ZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOwot IHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdO VU0gKipraW52cCwgQklHTlVNICoqcnApOwotQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwgLyogZHNh X21vZF9leHAsICovCi0gTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCi0gZHNhX2luaXQsCi0g ZHNhX2ZpbmlzaCwKLS0wLAotK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0gTlVMTCwK LSBOVUxMCi1AQCAtMTM4LDYgKzE0MSwyMSBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24o Y29uc3QgdW5zaWduCi0gCURTQV9TSUcgKnJldD1OVUxMOwotIAlpbnQgbm9yZWRvID0gMDsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAg ICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIE5VTEw7Ci0rCSAgICB9Ci0rCi0rCWlmIChGSVBTX21v ZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykgCi0rCQkmJiAo Qk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp Ci0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJQk5faW5pdCgmbSk7 Ci0gCUJOX2luaXQoJnhyKTsKLSAKLUBAIC0zMjUsNiArMzQzLDIxIEBAIHN0YXRpYyBpbnQgZHNh X2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAkJcmV0dXJuIC0xOwotIAkJfQotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVEKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYm ICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKLSsJCSYmIChCTl9udW1f Yml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsK LSsJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OwotKwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMoZHNh LT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlEU0FlcnIoRFNB X0ZfRFNBX0RPX1ZFUklGWSxEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtMzk5LDYgKzQz Miw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAotIHN0YXRp YyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQ U19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlkc2EtPmZsYWdzfD1EU0FfRkxBR19DQUNI RV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfcG1l dGguYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcwkyMDE0 LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9kc2EvZHNhX3BtZXRoLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzk5MjMwNjMgKzAyMDAKLUBA IC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIGludCBwa2V5X2RzYV9wYXJhbWdlbihFVlBfUEtFWV9D VAotIAlpZiAoIWRzYSkKLSAJCXJldHVybiAwOwotIAlyZXQgPSBkc2FfYnVpbHRpbl9wYXJhbWdl bihkc2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1kLAotLQkgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBwY2IpOwotKwkgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBwY2IpOwotIAlpZiAo cmV0KQotIAkJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOwotIAllbHNlCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9kc2EvZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2F0 ZXN0LmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhdGVzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM5OTIz MDYzICswMjAwCi1AQCAtOTYsMzYgKzk2LDQxIEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgZHNh X2NiKGludCBwLCBpbnQKLSAvKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9nIGFyZSB0YWtlbiBm cm9tIHRoZSB1cGRhdGVkIEFwcGVuZGl4IDUgdG8KLSAgKiBGSVBTIFBVQiAxODYgYW5kIGFsc28g YXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2LTEgKi8KLSBzdGF0aWMgdW5zaWdu ZWQgY2hhciBzZWVkWzIwXT17Ci0tCTB4ZDUsMHgwMSwweDRlLDB4NGIsMHg2MCwweGVmLDB4MmIs MHhhOCwweGI2LDB4MjEsMHgxYiwweDQwLAotLQkweDYyLDB4YmEsMHgzMiwweDI0LDB4ZTAsMHg0 MiwweDdkLDB4ZDMsCi0rCTB4MDIsMHg0NywweDExLDB4OTIsMHgxMSwweDg4LDB4QzgsMHhGQiww eEFGLDB4NDgsMHg0QywweDYyLAotKwkweERGLDB4QTUsMHhCRSwweEEwLDB4QTQsMHgzQywweDU2 LDB4RTMsCi0gCX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3BbXT17Ci0tCTB4OGQs MHhmMiwweGE0LDB4OTQsMHg0OSwweDIyLDB4NzYsMHhhYSwKLS0JMHgzZCwweDI1LDB4NzUsMHg5 YiwweGIwLDB4NjgsMHg2OSwweGNiLAotLQkweGVhLDB4YzAsMHhkOCwweDNhLDB4ZmIsMHg4ZCww eDBjLDB4ZjcsCi0tCTB4Y2IsMHhiOCwweDMyLDB4NGYsMHgwZCwweDc4LDB4ODIsMHhlNSwKLS0J MHhkMCwweDc2LDB4MmYsMHhjNSwweGI3LDB4MjEsMHgwZSwweGFmLAotLQkweGMyLDB4ZTksMHhh ZCwweGFjLDB4MzIsMHhhYiwweDdhLDB4YWMsCi0tCTB4NDksMHg2OSwweDNkLDB4ZmIsMHhmOCww eDM3LDB4MjQsMHhjMiwKLS0JMHhlYywweDA3LDB4MzYsMHhlZSwweDMxLDB4YzgsMHgwMiwweDkx LAotKwkweEFDLDB4Q0IsMHgxRSwweDYzLDB4NjAsMHg2OSwweDBDLDB4RkIsMHgwNiwweDE5LDB4 NjgsMHgzRSwKLSsJMHhBNSwweDAxLDB4NUEsMHhBMiwweDE1LDB4NUMsMHhFMiwweDk5LDB4MkQs MHhENSwweDMwLDB4OTksCi0rCTB4N0UsMHg1RiwweDhELDB4RTIsMHhGNywweEM2LDB4MkUsMHg4 RCwweEEzLDB4OUYsMHg1OCwweEFELAotKwkweEQ2LDB4QTksMHg3RCwweDBFLDB4MEQsMHg5NSww eDUzLDB4QTYsMHg3MSwweDNBLDB4REUsMHhBQiwKLSsJMHhBQywweEU5LDB4RjQsMHgzNiwweDU1 LDB4OUUsMHhCOSwweEQ2LDB4OTMsMHhCRiwweEYzLDB4MTgsCi0rCTB4MUMsMHgxNCwweDdCLDB4 QTUsMHg0MiwweDJFLDB4Q0QsMHgwMCwweEVCLDB4MzUsMHgzQiwweDFCLAotKwkweEE4LDB4NTEs MHhCQiwweEUxLDB4NTgsMHg0MiwweDg1LDB4ODQsMHgyMiwweEE3LDB4OTcsMHg1RSwKLSsJMHg5 OSwweDZGLDB4MzgsMHgyMCwweEJELDB4OUQsMHhCNiwweEQ5LDB4MzMsMHgzNywweDJBLDB4RkQs Ci0rCTB4QkIsMHhENCwweEJDLDB4MEMsMHgyQSwweDY3LDB4Q0IsMHg5RiwweEJCLDB4REYsMHhG OSwweDkzLAotKwkweEFBLDB4RDYsMHhGMCwweEQ2LDB4OTUsMHgwQiwweDVELDB4NjUsMHgxNCww eEQwLDB4MTgsMHg5RCwKLSsJMHhDNiwweEFGLDB4RjAsMHhDNiwweDM3LDB4N0MsMHhGMywweDVG LAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9xW109ewotLQkweGM3LDB4NzMs MHgyMSwweDhjLDB4NzMsMHg3ZSwweGM4LDB4ZWUsCi0tCTB4OTksMHgzYiwweDRmLDB4MmQsMHhl ZCwweDMwLDB4ZjQsMHg4ZSwKLS0JMHhkYSwweGNlLDB4OTEsMHg1ZiwKLSsJMHhFMywweDhFLDB4 NUUsMHg2RCwweEJGLDB4MkIsMHg3OSwweEY4LDB4QzUsMHg0QiwweDg5LDB4OEIsCi0rCTB4QkEs MHgyRCwweDkxLDB4QzMsMHg2QywweDgwLDB4QUMsMHg4NywKLSAJfTsKLSAKLSBzdGF0aWMgdW5z aWduZWQgY2hhciBvdXRfZ1tdPXsKLS0JMHg2MiwweDZkLDB4MDIsMHg3OCwweDM5LDB4ZWEsMHgw YSwweDEzLAotLQkweDQxLDB4MzEsMHg2MywweGE1LDB4NWIsMHg0YywweGI1LDB4MDAsCi0tCTB4 MjksMHg5ZCwweDU1LDB4MjIsMHg5NSwweDZjLDB4ZWYsMHhjYiwKLS0JMHgzYiwweGZmLDB4MTAs MHhmMywweDk5LDB4Y2UsMHgyYywweDJlLAotLQkweDcxLDB4Y2IsMHg5ZCwweGU1LDB4ZmEsMHgy NCwweGJhLDB4YmYsCi0tCTB4NTgsMHhlNSwweGI3LDB4OTUsMHgyMSwweDkyLDB4NWMsMHg5YywK LS0JMHhjNCwweDJlLDB4OWYsMHg2ZiwweDQ2LDB4NGIsMHgwOCwweDhjLAotLQkweGM1LDB4NzIs MHhhZiwweDUzLDB4ZTYsMHhkNywweDg4LDB4MDIsCi0rCTB4NDIsMHg0QSwweDA0LDB4NEUsMHg3 OSwweEI0LDB4OTksMHg3RiwweEZELDB4NTgsMHgzNiwweDJDLAotKwkweDFCLDB4NUYsMHgxOCww eDdFLDB4MEQsMHhDQywweEFCLDB4ODEsMHhDOSwweDVELDB4MTAsMHhDRSwKLSsJMHg0RSwweDgw LDB4N0UsMHg1OCwweEI0LDB4MzQsMHgzRiwweEE3LDB4NDUsMHhDNywweEFBLDB4MzYsCi0rCTB4 MjQsMHg0MiwweEE5LDB4M0IsMHhFOCwweDBFLDB4MDQsMHgwMiwweDJELDB4RkIsMHhBNiwweDEz LAotKwkweEI5LDB4QjUsMHgxNSwweEE1LDB4NTYsMHgwNywweDM1LDB4RTQsMHgwMywweEI2LDB4 NzksMHg3QywKLSsJMHg2MiwweERELDB4REYsMHgzRiwweDcxLDB4M0EsMHg5RCwweDhCLDB4QzQs MHhGNiwweEU3LDB4MUQsCi0rCTB4NTIsMHhBOCwweEE5LDB4NDMsMHgxRCwweDMzLDB4NTEsMHg4 OCwweDM5LDB4QkQsMHg3MywweEU5LAotKwkweDVGLDB4QkUsMHg4MiwweDQ5LDB4MjcsMHhFNiww eEI1LDB4NTMsMHhDMSwweDM4LDB4QUMsMHgyRiwKLSsJMHg2RCwweDk3LDB4NkMsMHhFQiwweDY3 LDB4QzEsMHg1RiwweDY3LDB4RjgsMHgzNSwweDA1LDB4NUUsCi0rCTB4RDUsMHg2OCwweDgwLDB4 QUEsMHg5NiwweENBLDB4MEIsMHg4QSwweEU2LDB4RjEsMHhCMSwweDQxLAotKwkweEM2LDB4NzUs MHg5NCwweDBBLDB4MEEsMHgyQSwweEZBLDB4MjksCi0gCX07Ci0gCi0gc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Ci1AQCAtMTU3LDcgKzE2 Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJQklPX3ByaW50ZihiaW9f ZXJyLCJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNBIHBhcmFtZXRlcnNcbiIpOwotIAotIAlCTl9HRU5D Ql9zZXQoJmNiLCBkc2FfY2IsIGJpb19lcnIpOwotLQlpZigoKGRzYSA9IERTQV9uZXcoKSkgPT0g TlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgNTEyLAotKwlpZigoKGRz YSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRz YSwgMTAyNCwKLSAJCQkJc2VlZCwgMjAsICZjb3VudGVyLCAmaCwgJmNiKSkKLSAJCWdvdG8gZW5k OwotIAotQEAgLTE3MCw5ICsxNzUsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Ci0gCUJJT19wcmludGYoYmlvX2VyciwiXG5jb3VudGVyPSVkIGg9JWxkXG4iLGNvdW50ZXIsaCk7 Ci0gCQkKLSAJRFNBX3ByaW50KGJpb19lcnIsZHNhLDApOwotLQlpZiAoY291bnRlciAhPSAxMDUp IAotKwlpZiAoY291bnRlciAhPSAyMzkpIAotIAkJewotLQkJQklPX3ByaW50ZihiaW9fZXJyLCJj b3VudGVyIHNob3VsZCBiZSAxMDVcbiIpOwotKwkJQklPX3ByaW50ZihiaW9fZXJyLCJjb3VudGVy IHNob3VsZCBiZSAyMzlcbiIpOwotIAkJZ290byBlbmQ7Ci0gCQl9Ci0gCWlmIChoICE9IDIpCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCTIwMTQtMDUt MDYgMTY6Mjk6NTAuNTM5OTIzMDYzICswMjAwCi1AQCAtNTgsMTEgKzU4LDI1IEBACi0gCi0gI2lu Y2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgImVuZ19pbnQuaCIKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHZvaWQgRU5H SU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCi0gCXsKLSAJLyogU29tZSBFTkdJTkVzIG5l ZWQgdGhpcyAqLwotIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoRklQU19tb2RlKCkpIHsKLSsJCS8q IFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQotKwkJICAg ZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgotKwkJICAgVXNlciBpcyBkaXNhbGxvd2Vk IHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCi0rCQkgICBieSBzZWN1cml0eSBwb2xpY3ku ICovCi0rCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7Ci0rCQlyZXR1cm47Ci0rCX0KLSsjZW5kaWYK LSAjaWYgMAotIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9wZW5zc2wi IEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCi0gCSAqIGl0IGlzIHRoZSAqb25seSogd2F5IGZvciBz dGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9l dnAvY19hbGxjLmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMJ MjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZXZwL2NfYWxsYy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQwOTIzMDg2ICswMjAwCi1A QCAtNjUsNiArNjUsMTEgQEAKLSB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCi0g CXsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0r CWlmKCFGSVBTX21vZGUoKSkgCi0rCQl7Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RF UwotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYigpKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQ X2Rlc19jZmIxKCkpOwotQEAgLTIyNyw0ICsyMzIsNjAgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxf Y2lwaGVycyh2b2lkKQotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2Jj LCJDQU1FTExJQTI1NiIpOwotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZf Y2JjLCJjYW1lbGxpYTI1NiIpOwotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCX0K LSsJZWxzZQotKwkJewotKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGVfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2ZiKCkp OwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9vZmIoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfZWRlM19vZmIoKSk7Ci0rCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLSsJRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCJERVMzIik7Ci0rCUVWUF9hZGRfY2lwaGVy X2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiZGVzMyIpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBf ZGVzX2VkZSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkpOwotKyNlbmRpZgot KwotKyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhf ZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTI4X2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhf Y2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiOCgpKTsKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF9jdHIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9h ZXNfMTI4X2NiYywiQUVTMTI4Iik7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhf Y2JjLCJhZXMxMjgiKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkpOwotKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTkyX2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiMSgpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiOCgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xOTJfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxp YXMoU05fYWVzXzE5Ml9jYmMsIkFFUzE5MiIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9h ZXNfMTkyX2NiYywiYWVzMTkyIik7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2VjYigp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzI1Nl9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjEo KSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X29mYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY3Ry KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1 Nl9jYmMsIkFFUzI1NiIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywi YWVzMjU2Iik7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZw L2NfYWxsZC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzCTIw MTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2V2cC9jX2FsbGQuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MDkyMzA4NiArMDIwMAotQEAg LTY0LDYgKzY0LDExIEBACi0gCi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQot IAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlp ZiAoIUZJUFNfbW9kZSgpKQotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19NRDQK LSAJRVZQX2FkZF9kaWdlc3QoRVZQX21kNCgpKTsKLSAjZW5kaWYKLUBAIC0xMTEsNCArMTE2LDMy IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fV0hJUkxQT09MCi0gCUVWUF9hZGRfZGlnZXN0KEVWUF93aGlybHBvb2woKSk7Ci0gI2VuZGlm Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJfQotKwllbHNlCi0rCQl7Ci0rI2lmICFkZWZpbmVk KE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCi0rCUVWUF9hZGRf ZGlnZXN0KEVWUF9zaGExKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wz LXNoYTEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9u LFNOX3NoYTFXaXRoUlNBKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0rCUVWUF9hZGRfZGln ZXN0KEVWUF9kc3MxKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxT Tl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEs IkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsK LSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9kaWdlc3QoRVZQ X2VjZHNhKCkpOwotKyNlbmRpZgotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYK LSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3No YTI1NigpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rCUVWUF9hZGRf ZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0r I2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0t LS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTQtMDMtMTcgMTc6 MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9kaWdl c3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MDkyMzA4NiArMDIwMAotQEAgLTE0Miw5ICsxNDIs NTAgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9DVFggKmN0eCwgY29ucwotIAlyZXR1cm4g RVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBOVUxMKTsKLSAJfQotIAotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1z IHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9k ZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBiYWRfaW5pdChF VlBfTURfQ1RYICpjdHgpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgaW5pdCIpOyBy ZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25z dCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2Vz dCB1cGRhdGUiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9D VFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2Vz dCBGaW5hbCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRfbWQgPQot Kwl7Ci0rCTAsCi0rCTAsCi0rCTAsCi0rCTAsCi0rCWJhZF9pbml0LAotKwliYWRfdXBkYXRlLAot KwliYWRfZmluYWwsCi0rCU5VTEwsCi0rCU5VTEwsCi0rCU5VTEwsCi0rCTAsCi0rCXswLDAsMCww fSwKLSsJfTsKLSsKLSsjZW5kaWYKLSsKLSBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NU WCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKLSAJewotIAlFVlBfTURf Q1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2Vy cihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsK LSsJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgot ICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90 LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0aGlz IGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNp bmcKLUBAIC0yMDEsNiArMjQyLDE4IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RY ICpjdHgsIGMKLSAjZW5kaWYKLSAJaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpCi0gCQl7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9kZSgpKQotKwkJCXsKLSsJCQlpZiAoISh0 eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpIAotKwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwkJCQl7Ci0rCQkJCUVWUGVycihFVlBf Rl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKwkJCQljdHgt PmRpZ2VzdCA9ICZiYWRfbWQ7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJfQotKyNlbmRp ZgotIAkJaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKLSAJCQlPUEVO U1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLSAJCWN0eC0+ZGlnZXN0PXR5cGU7Ci1AQCAtMjI5LDI2 ICsyODIsMTUgQEAgc2tpcF90b19pbml0OgotIAkJfQotIAlpZiAoY3R4LT5mbGFncyAmIEVWUF9N RF9DVFhfRkxBR19OT19JTklUKQotIAkJcmV0dXJuIDE7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwot LQlpZiAoRklQU19tb2RlKCkpCi0tCQl7Ci0tCQlpZiAoRklQU19kaWdlc3Rpbml0KGN0eCwgdHlw ZSkpCi0tCQkJcmV0dXJuIDE7Ci0tCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLS0JCWN0 eC0+bWRfZGF0YSA9IE5VTEw7Ci0tCQlyZXR1cm4gMDsKLS0JCX0KLS0jZW5kaWYKLSAJcmV0dXJu IGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7Ci0gCX0KLSAKLSBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShF VlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKLSAJewotICNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJuIEZJUFNfZGlnZXN0dXBkYXRlKGN0eCwgZGF0YSwg Y291bnQpOwotLSNlbHNlCi0tCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7Ci0r CUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSAjZW5kaWYKLSsJcmV0dXJuIGN0eC0+dXBkYXRlKGN0 eCxkYXRhLGNvdW50KTsKLSAJfQotIAotIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRo aXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLwotQEAgLTI2Mywx MSArMzA1LDExIEBAIGludCBFVlBfRGlnZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKLSAv KiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRh IGZyb20gdGhlIGNvbnRleHQgKi8KLSBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqc2l6ZSkKLSAJewotLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJuIEZJUFNfZGlnZXN0ZmluYWwoY3R4LCBtZCwgc2l6ZSk7 Ci0tI2Vsc2UKLSAJaW50IHJldDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1k X3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKLSAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgs bWQpOwotIAlpZiAoc2l6ZSAhPSBOVUxMKQotQEAgLTI3OSw3ICszMjEsNiBAQCBpbnQgRVZQX0Rp Z2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwKLSAJCX0KLSAJbWVtc2V0KGN0eC0+bWRfZGF0 YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Ci0gCXJldHVybiByZXQ7Ci0tI2VuZGlmCi0gCX0K LSAKLSBpbnQgRVZQX01EX0NUWF9jb3B5KEVWUF9NRF9DVFggKm91dCwgY29uc3QgRVZQX01EX0NU WCAqaW4pCi1AQCAtMzc2LDcgKzQxNyw2IEBAIHZvaWQgRVZQX01EX0NUWF9kZXN0cm95KEVWUF9N RF9DVFggKmN0eCkKLSAvKiBUaGlzIGNhbGwgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0 aCB0aGUgY29udGV4dCAqLwotIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4 KQotIAl7Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAJLyogRG9uJ3QgYXNzdW1lIGN0eC0+bWRf ZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBfRGlnZXN0X0ZpbmFsLAotIAkgKiBiZWNhdXNlIHNvbWV0 aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUgY29udGV4dCBhcmUgZXZlciBmaW5hbGlzZWQuCi0gCSAq LwotQEAgLTM4OSw3ICs0MjksNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFgg KmN0eCkKLSAJCU9QRU5TU0xfY2xlYW5zZShjdHgtPm1kX2RhdGEsY3R4LT5kaWdlc3QtPmN0eF9z aXplKTsKLSAJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJfQotLSNlbmRpZgotIAlp ZiAoY3R4LT5wY3R4KQotIAkJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4LT5wY3R4KTsKLSAjaWZuZGVm IE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAtMzk4LDkgKzQzNyw2IEBAIGludCBFVlBfTURfQ1RYX2Ns ZWFudXAoRVZQX01EX0NUWCAqY3R4KQotIAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVs ZCBmb3IgdGhpcyByZWFzb24uICovCi0gCQlFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5lKTsKLSAj ZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCUZJUFNfbWRfY3R4X2NsZWFudXAoY3R4KTsK LS0jZW5kaWYKLSAJbWVtc2V0KGN0eCwnXDAnLHNpemVvZiAqY3R4KTsKLSAKLSAJcmV0dXJuIDE7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZw L2VfYWVzLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZV9hZXMuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MDky MzA4NiArMDIwMAotQEAgLTU2LDcgKzU2LDYgQEAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0gI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0tI2lmbmRlZiBP UEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSAibW9kZXNfbGNsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotIAotQEAgLTcxNiw3ICs3MTUsNyBAQCBzdGF0aWMgaW50IGFlc19nY21fY3RybChF VlBfQ0lQSEVSX0NUWCAqCi0gCQlpZiAoYXJnIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gI2lmZGVm IE9QRU5TU0xfRklQUwotLQkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGMtPmZsYWdzICYg RVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykKLSsJCWlmIChGSVBTX21vZGUoKSAmJiAhKGMt PmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykKLSAJCQkJCQkgJiYgYXJnIDwg MTIpCi0gCQkJcmV0dXJuIDA7Ci0gI2VuZGlmCi1AQCAtMTEzNCw3ICsxMTMzLDcgQEAgc3RhdGlj IGludCBhZXNfeHRzX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAotIAkJcmV0dXJuIDA7Ci0gI2lmZGVm IE9QRU5TU0xfRklQUwotIAkvKiBSZXF1aXJlbWVudCBvZiBTUDgwMC0zOEUgKi8KLS0JaWYgKEZJ UFNfbW9kdWxlX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBT X0FMTE9XKSAmJgotKwlpZiAoRklQU19tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhf RkxBR19OT05fRklQU19BTExPVykgJiYKLSAJCQkobGVuID4gKDFVTDw8MjApKjE2KSkKLSAJCXsK LSAJCUVWUGVycihFVlBfRl9BRVNfWFRTX0NJUEhFUiwgRVZQX1JfVE9PX0xBUkdFKTsKLUBAIC0x MzE3LDQgKzEzMTYsMyBAQCBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMTkyLDEsMTIsY2Nt Ci0gQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDI1NiwxLDEyLGNjbSxDQ00sRVZQX0NJUEhf RkxBR19GSVBTfENVU1RPTV9GTEFHUykKLSAKLSAjZW5kaWYKLS0jZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9lX2RlczMuYy5m aXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MDkyMzA4NiArMDIw MAotQEAgLTY1LDggKzY1LDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSBzdGF0aWMg aW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LAotIAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKLSAK LUBAIC0yMDgsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBf Q0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVks IE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJRVZQ X0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdf RklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5LAot KwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUgZGVzX2Vk ZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE5LDIxICsyMTcsMjEg QEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksCi0gI2RlZmluZSBkZXNf ZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgotIAotIEJMT0NLX0NJUEhFUl9kZWZz KGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCi0tCQkJ RVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKLS0JCQlFVlBfQ0lQ SEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQ SF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEs Ci0rCQkJZGVzX2VkZTNfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVMTCwgTlVMTCwKLSAJCQlkZXMz X2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklE X2Rlc19lZGUzLDI0LDgsMSwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2lu aXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVW UF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFH X0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRf a2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0g QkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0 LDgsOCwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEws Ci0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotKwkJICAg ICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0gc3RhdGljIGludCBk ZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwKLUBAIC0zMTMsNCArMzExLDMgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUz KHZvaWQpCi0gCXJldHVybiAmZGVzX2VkZTNfZWNiOwotIH0KLSAjZW5kaWYKLS0jZW5kaWYKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZXZwL2VfbnVsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9l X251bGwuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9lX251bGwuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MDky MzA4NiArMDIwMAotQEAgLTYxLDggKzYxLDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LS0KLSBzdGF0aWMgaW50IG51bGxfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3Qg dW5zaWduZWQgY2hhciAqa2V5LAotIAljb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsK LSBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwKLUBAIC03MSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lw aGVyPQotIAl7Ci0gCU5JRF91bmRlZiwKLSAJMSwwLDAsCi0tCTAsCi0rCUVWUF9DSVBIX0ZMQUdf RklQUywKLSAJbnVsbF9pbml0X2tleSwKLSAJbnVsbF9jaXBoZXIsCi0gCU5VTEwsCi1AQCAtMTAx LDQgKzk5LDMgQEAgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqYwotIAkJ bWVtY3B5KChjaGFyICopb3V0LChjb25zdCBjaGFyICopaW4saW5sKTsKLSAJcmV0dXJuIDE7Ci0g CX0KLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZXZwX2VuYy5j LmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnBfZW5jLmMKLS0tLSBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAxNC0w NS0wNiAxNjoyOTo1MC41NDE5MjMxMDkgKzAyMDAKLUBAIC02OSwxNyArNjksNTggQEAKLSAjZW5k aWYKLSAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tI2Rl ZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgRklQU19jaXBoZXIoY3R4LCBvdXQs IGluLCBpbmwpCi0tI2Vsc2UKLSAjZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5s KSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQotLSNlbmRpZgotIAot IAotIGNvbnN0IGNoYXIgRVZQX3ZlcnNpb25bXT0iRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlz IHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29y aXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0 aWMgaW50IGJhZF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwKLSsJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKLSsJeyBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciBpbml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50 IGJhZF9kb19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAot KwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKLSsJeyBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciB1cGRhdGUiKTsgcmV0dXJuIDA7fQotKwotKy8qIE5COiBu byBjbGVhbnVwIGJlY2F1c2UgaXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLwotKwot K3N0YXRpYyBpbnQgYmFkX3NldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAq dHlwKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7IHJldHVybiAw O30KLStzdGF0aWMgaW50IGJhZF9nZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZ UEUgKnR5cCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBnZXRfYXNuMSIpOyByZXR1 cm4gMDt9Ci0rc3RhdGljIGludCBiYWRfY3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlw ZSwgaW50IGFyZywgdm9pZCAqcHRyKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0 cmwiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIg PQotKwl7Ci0rCTAsCi0rCTAsCi0rCTAsCi0rCTAsCi0rCTAsCi0rCWJhZF9pbml0LAotKwliYWRf ZG9fY2lwaGVyLAotKwlOVUxMLAotKwkwLAotKwliYWRfc2V0X2FzbjEsCi0rCWJhZF9nZXRfYXNu MSwKLSsJYmFkX2N0cmwsCi0rCU5VTEwKLSsJfTsKLSsKLSsjZW5kaWYKLSsKLSB2b2lkIEVWUF9D SVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCkKLSAJewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQoY3R4LDAs c2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7Ci0gCS8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCi0gCX0K LUBAIC0xMTEsNiArMTUyLDE0IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NU WCAqY3QKLSAJCQllbmMgPSAxOwotIAkJY3R4LT5lbmNyeXB0ID0gZW5jOwotIAkJfQotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJ UFNlcnIoRklQU19GX0VWUF9DSVBIRVJJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxF RCk7Ci0rCQljdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r I2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBXaGV0aGVyIGl0J3Mgbmlj ZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCi0gCSAq IHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lk IHJlbGVhc2luZwotQEAgLTE2OSwxMCArMjE4LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVW UF9DSVBIRVJfQ1RYICpjdAotIAkJCWN0eC0+ZW5naW5lID0gTlVMTDsKLSAjZW5kaWYKLSAKLS0j aWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAoRklQU19tb2RlKCkpCi0tCQkJcmV0dXJuIEZJUFNf Y2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKLS0jZW5kaWYKLSAJCWN0eC0+ Y2lwaGVyPWNpcGhlcjsKLSAJCWlmIChjdHgtPmNpcGhlci0+Y3R4X3NpemUpCi0gCQkJewotQEAg LTIwNiwxMCArMjUxLDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpj dAotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSBza2lwX3RvX2luaXQ6Ci0gI2VuZGlmCi0t I2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQlyZXR1cm4gRklQU19j aXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOwotLSNlbmRpZgotIAkvKiB3ZSBh c3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBkYXRlICovCi0gCU9Q RU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDEKLSAJICAgIHx8IGN0eC0+ Y2lwaGVyLT5ibG9ja19zaXplID09IDgKLUBAIC0yNDksNiArMjkwLDIyIEBAIHNraXBfdG9faW5p dDoKLSAJCX0KLSAJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJLyogQWZ0ZXIgJ2tleScg aXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KLSsJ ICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KLSsJ ICovCi0rCWlmIChrZXkgJiYgRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoIShjdHgtPmNpcGhl ci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQl7Ci0rCQkJRVZQZXJyKEVWUF9GX0VWUF9D SVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJY3R4LT5jaXBoZXIg PSAmYmFkX2NpcGhlcjsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0g CWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5J VCkpIHsKLSAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAw OwotIAl9Ci1AQCAtNTY4LDcgKzYyNSw2IEBAIHZvaWQgRVZQX0NJUEhFUl9DVFhfZnJlZShFVlBf Q0lQSEVSX0NUWAotIAotIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RY ICpjKQotIAl7Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAJaWYgKGMtPmNpcGhlciAhPSBOVUxM KQotIAkJewotIAkJaWYoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAo YykpCi1AQCAtNTc5LDE2ICs2MzUsMTIgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQ X0NJUEhFUl9DVAotIAkJfQotIAlpZiAoYy0+Y2lwaGVyX2RhdGEpCi0gCQlPUEVOU1NMX2ZyZWUo Yy0+Y2lwaGVyX2RhdGEpOwotLSNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJ aWYgKGMtPmVuZ2luZSkKLSAJCS8qIFRoZSBFVlBfQ0lQSEVSIHdlIHVzZWQgYmVsb25ncyB0byBh biBFTkdJTkUsIHJlbGVhc2UgdGhlCi0gCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxk IGZvciB0aGlzIHJlYXNvbi4gKi8KLSAJCUVOR0lORV9maW5pc2goYy0+ZW5naW5lKTsKLSAjZW5k aWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKGMpOwot LSNlbmRpZgotIAltZW1zZXQoYywwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwotIAlyZXR1cm4g MTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v ZXZwL2V2cC5oLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC40MzI5MjA1ODkgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2V2cC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQxOTIz MTA5ICswMjAwCi1AQCAtNzUsNiArNzUsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K LSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotKwotIC8qCi0gI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgotICNk ZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYKLUBAIC0yODIsMTAgKzI4Niw2IEBAIHN0cnVjdCBl bnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVhbmVkICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQotIAkJCQkJCSog aW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGln bm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCi0tICogc28gd2UgZG9uJ3QgYWNj aWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgotLSAqLwotLQot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1 c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJCQkJICogaW4gRklQUyBtb2RlICovCi0gCi1AQCAt Mjk3LDYgKzI5NywxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAotICNkZWZpbmUgRVZQX01EX0NU WF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCi0rI2RlZmluZSBNX0VW UF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsJCSgoY3R4LT5mbGFncz4+MTYpICYweEZG RkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVO CTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwotKyNkZWZpbmUgRVZQX01EX0NU WF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLwot IAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0 aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0zNDgsMTUgKzM1MiwxNSBAQCBzdHJ1Y3QgZXZwX2Np cGhlcl9zdAotIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLwotICNk ZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAotIC8qIGNpcGhlciBoYXMgaXRzIG93biBh ZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KLS0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09Q WQkJMHg0MDAKLSsjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCi0gLyogQWxs b3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxB R19ERUZBVUxUX0FTTjEJMHgxMDAwCi0gLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRl czogQ0ZCMSBtb2RlIG9ubHkgKi8KLSAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRT CTB4MjAwMAotIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KLS0j ZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwMAotKyNkZWZpbmUJCUVWUF9DSVBIX0ZM QUdfRklQUwkJMHg0MDAKLSAvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICov Ci0tI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMDAKLSsjZGVmaW5l CQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCi0gLyogQ2lwaGVyIGhhbmRsZXMg YW55IGFuZCBhbGwgcGFkZGluZyBsb2dpYyBhcyB3ZWxsCi0gICogYXMgZmluYWxpc2F0aW9uLgot ICAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2V2cF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDE0LTA1LTA2IDE2 OjI5OjUwLjU0MTkyMzEwOSArMDIwMAotQEAgLTE5MCw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhF Ul9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCi0gCi0gaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhF Ul9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwg dW5zaWduZWQgaW50IGlubCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxm dGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihj dHgsb3V0LGluLGlubCk7Ci0gCX0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9l dnAvZXZwX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZXZwX2xvY2wuaAot LS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNDI4OTIwNDk2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9l dnBfbG9jbC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQxOTIzMTA5ICswMjAwCi1AQCAtMjU4LDEw ICsyNTgsOSBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMjX2VjYih2b2lkCi0gCUJM T0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3Ry dWN0LGtzY2hlZCkgXAotIAlCTE9DS19DSVBIRVJfZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUs a3N0cnVjdCwgXAotIAkJCSAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgs IGl2X2xlbiwgY2JpdHMsIFwKLS0JCQkgICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBc Ci0tCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LCBcCi0tCQkJICAgICBFVlBfQ0lQSEVS X2dldF9hc24xX2l2LCBcCi0tCQkJICAgICBOVUxMKQotKwkJCSAgICAgRVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEsIFwKLSsJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMKQotKwotIAotIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKLSAJewotQEAgLTM2Nywx MSArMzY2LDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXwotICNk ZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5pdAotICNkZWZpbmUgTURDMl9Jbml0CXByaXZh dGVfTURDMl9Jbml0Ci0gI2RlZmluZSBTSEFfSW5pdAlwcml2YXRlX1NIQV9Jbml0Ci0tI2RlZmlu ZSBTSEExX0luaXQJcHJpdmF0ZV9TSEExX0luaXQKLS0jZGVmaW5lIFNIQTIyNF9Jbml0CXByaXZh dGVfU0hBMjI0X0luaXQKLS0jZGVmaW5lIFNIQTI1Nl9Jbml0CXByaXZhdGVfU0hBMjU2X0luaXQK LS0jZGVmaW5lIFNIQTM4NF9Jbml0CXByaXZhdGVfU0hBMzg0X0luaXQKLS0jZGVmaW5lIFNIQTUx Ml9Jbml0CXByaXZhdGVfU0hBNTEyX0luaXQKLSAKLSAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0 ZV9CRl9zZXRfa2V5Ci0gI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkK LUBAIC0zNzksNyArMzczLDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQ SEVSXwotICNkZWZpbmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5Ci0gI2RlZmlu ZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5Ci0gI2RlZmluZSBSQzRfc2V0X2tleQlw cml2YXRlX1JDNF9zZXRfa2V5Ci0tI2RlZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQJcHJpdmF0 ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQKLSAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0 ZV9DYW1lbGxpYV9zZXRfa2V5Ci0gCi0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZXZwL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9NYWtlZmls ZQotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvTWFrZWZpbGUuZmlwcwkyMDE0LTA0LTA3 IDE4OjU1OjMzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAv TWFrZWZpbGUJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDE5MjMxMDkgKzAyMDAKLUBAIC0yOCw3ICsy OCw3IEBAIExJQlNSQz0gZW5jb2RlLmMgZGlnZXN0LmMgZXZwX2VuYy5jIGV2cF8KLSAJYmlvX21k LmMgYmlvX2I2NC5jIGJpb19lbmMuYyBldnBfZXJyLmMgZV9udWxsLmMgXAotIAljX2FsbC5jIGNf YWxsYy5jIGNfYWxsZC5jIGV2cF9saWIuYyBiaW9fb2suYyBcCi0gCWV2cF9wa2V5LmMgZXZwX3Bi ZS5jIHA1X2NycHQuYyBwNV9jcnB0Mi5jIFwKLS0JZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9m bi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBldnBfZmlwcy5jCVwKLSsJZV9vbGQuYyBwbWV0aF9s aWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBcCi0gCWVfYWVzX2NiY19obWFj X3NoYTEuYyBlX3JjNF9obWFjX21kNS5jCi0gCi0gTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBl dnBfZW5jLm8gZXZwX2tleS5vIGV2cF9hY25mLm8gZXZwX2NuZi5vIFwKLUBAIC00MSw3ICs0MSw3 IEBAIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF8KLSAJYmlvX21kLm8g YmlvX2I2NC5vIGJpb19lbmMubyBldnBfZXJyLm8gZV9udWxsLm8gXAotIAljX2FsbC5vIGNfYWxs Yy5vIGNfYWxsZC5vIGV2cF9saWIubyBiaW9fb2subyBcCi0gCWV2cF9wa2V5Lm8gZXZwX3BiZS5v IHA1X2NycHQubyBwNV9jcnB0Mi5vIFwKLS0JZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5v IHBtZXRoX2duLm8gbV9zaWd2ZXIubyBldnBfZmlwcy5vIFwKLSsJZV9vbGQubyBwbWV0aF9saWIu byBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBcCi0gCWVfYWVzX2NiY19obWFjX3No YTEubyBlX3JjNF9obWFjX21kNS5vCi0gCi0gU1JDPSAkKExJQlNSQykKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9l dnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzCTIw MTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2V2cC9tX2Rzcy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQyOTIzMTMyICswMjAwCi1AQCAt NjYsNyArNjYsNiBAQAotICNlbmRpZgotIAotICNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLS0jaWZu ZGVmIE9QRU5TU0xfRklQUwotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0g CXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci1AQCAtODIsNyArODEsNyBAQCBz dGF0aWMgY29uc3QgRVZQX01EIGRzYV9tZD0KLSAJTklEX2RzYVdpdGhTSEEsCi0gCU5JRF9kc2FX aXRoU0hBLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1Qs Ci0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0g CXVwZGF0ZSwKLSAJZmluYWwsCi1AQCAtOTgsNCArOTcsMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9k c3Modm9pZCkKLSAJcmV0dXJuKCZkc2FfbWQpOwotIAl9Ci0gI2VuZGlmCi0tI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2V2cC9tX2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9k c3MxLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9ldnAvbV9kc3MxLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDI5MjMx MzIgKzAyMDAKLUBAIC02OCw4ICs2OCw2IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0g I2VuZGlmCi0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMgCi0tCi0gc3RhdGljIGludCBpbml0KEVW UF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KLSAK LUBAIC04NCw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KLSAJTklEX2Rz YSwKLSAJTklEX2RzYVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZM QUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJ UFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1AQCAtMTAwLDQgKzk4LDMgQEAgY29u c3QgRVZQX01EICpFVlBfZHNzMSh2b2lkKQotIAlyZXR1cm4oJmRzczFfbWQpOwotIAl9Ci0gI2Vu ZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL21fbWQyLmMu ZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL21fbWQyLmMKLS0tLSBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9tZDIuYwkyMDE0LTA1LTA2IDE2 OjI5OjUwLjU0MjkyMzEzMiArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUg ImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyBy ZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9zaGEx LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxNC0wMy0x NyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZw L21fc2hhMS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQyOTIzMTMyICswMjAwCi1AQCAtNTksOCAr NTksNiBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotIAot LSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0tCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQQotIAotICNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotQEAgLTg1LDcgKzgzLDggQEAgc3RhdGljIGNvbnN0IEVW UF9NRCBzaGExX21kPQotIAlOSURfc2hhMSwKLSAJTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwK LSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9E X1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19G SVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTEyMiw3ICsxMjEsOCBAQCBz dGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZD0KLSAJTklEX3NoYTIyNCwKLSAJTklEX3NoYTIy NFdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEyMjRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyMjQsCi0gCXVwZGF0ZTI1NiwKLSAJ ZmluYWwyNTYsCi1AQCAtMTQxLDcgKzE0MSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2 X21kPQotIAlOSURfc2hhMjU2LAotIAlOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNI QTI1Nl9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQ UywKLSAJaW5pdDI1NiwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNzIsNyArMTcz LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9Ci0gCU5JRF9zaGEzODQsCi0gCU5J RF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMzg0X0RJR0VTVF9MRU5HVEgsCi0tCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdB TEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0Mzg0LAotIAl1cGRhdGU1 MTIsCi0gCWZpbmFsNTEyLAotQEAgLTE5MSw3ICsxOTMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01E IHNoYTUxMl9tZD0KLSAJTklEX3NoYTUxMiwKLSAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9u LAotIAlTSEE1MTJfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9N RVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9G TEFHX0ZJUFMsCi0gCWluaXQ1MTIsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1AQCAtMjA2 LDQgKzIwOSwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTUxMih2b2lkKQotIAl7IHJldHVybigm c2hhNTEyX21kKTsgfQotICNlbmRpZgkvKiBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIgKi8KLSAK LS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvcF9zaWduLmMuZmlw cyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL3Bfc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDE0LTA1LTA2IDE2 OjI5OjUwLjU0MjkyMzEzMiArMDIwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAotICNpZmRlZiB1bmRl ZgotIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQotQEAg LTEwMyw2ICsxMDQsMjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNp ZwotIAkJCWdvdG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBr Y3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdz ICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsK LSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJewotKwkJ CWludCBzYWx0bGVuOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4 LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCXNhbHRs ZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0bGVuID09 IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJCQllbHNl IGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9 IC0yOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2Fs dGxlbikgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJfQotIAkJaWYgKEVWUF9QS0VZX3NpZ24o cGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSAJ CSpzaWdsZW4gPSBzbHRtcDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvcF92 ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvcF92ZXJpZnkuYwotLS0tIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6 MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9wX3Zlcmlm eS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQyOTIzMTMyICswMjAwCi1AQCAtNjEsNiArNjEsNyBA QAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMu aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ Ci0gCi0gaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNpZ2J1ZiwKLSAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtl eSkKLUBAIC04OCw2ICs4OSwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0 eCwgY29uCi0gCQkJZ290byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVf bWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8g ZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKLSsJCQl7 Ci0rCQkJaW50IHNhbHRsZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmco cGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJ c2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYgKHNhbHRs ZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0xOwotKwkJ CWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJCQlzYWx0 bGVuID0gLTI7Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4 LCBzYWx0bGVuKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlpID0gRVZQX1BLRVlf dmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOwotIAkJZXJyOgotIAkJRVZQ X1BLRVlfQ1RYX2ZyZWUocGtjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Flc2F2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Flc2F2cy5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDM5MjMxNTUgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMJMjAxNC0wNS0wNiAx NjoyOTo1MC41NDM5MjMxNTUgKzAyMDAKLUBAIC0wLDAgKzEsOTM5IEBACi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo 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 LgotKyAqCi0rICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSsgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0aW9uIFN1aXRlCi0rICBUZXN0IFBy b2dyYW0KLSsKLSsgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKLSsgIFYtT05FIENvcnBvcmF0aW9u Ci0rICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAotKyAgR2VybWFudG93biwgTUQgMjA4 NzQKLSsgIFUuUy5BLgotKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8YXNz ZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYg T1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0r ICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9 Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZp cHNfdXRsLmgiCi0rCi0rI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgotKwotKyNkZWZpbmUgVkVS Qk9TRSAwCi0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCi0rCi0raW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKLSsJICAgIGNoYXIg KmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKLSsJICAgIHVuc2lnbmVk IGNoYXIgKmlWZWMsIAotKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBo ZXJ0ZXh0LCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9 IE5VTEw7Ci0rCi0rICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKLSsJewot Kwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Fl c18xMjhfY2JjKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQ X2Flc18xOTJfY2JjKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0g RVZQX2Flc18yNTZfY2JjKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsKLSsJfQotKyAgICBlbHNlIGlm IChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikK LSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfZWNiKCk7Ci0rCQli cmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfZWNiKCk7Ci0r CQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfZWNiKCk7 Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAi Q0ZCMTI4IikgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4 OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNh c2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMTI4KCk7Ci0rCQlicmVhazsKLSsK LSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMTI4KCk7Ci0rCQlicmVh azsKLSsJCX0KLSsKLSsJfQotKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIs IDMpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJ CWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1 NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0K LSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwl7Ci0rCXN3aXRjaCAo YWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIx KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJf Y2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNf MjU2X2NmYjEoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2Vj bXAoYW1vZGUsIkNGQjgiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2Ug MTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQlj YXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjgoKTsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmI4KCk7Ci0rCQlicmVhazsK LSsJCX0KLSsJfQotKyAgICBlbHNlCi0rCXsKLSsJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4i LCBhbW9kZSk7Ci0rCXJldHVybiAwOwotKwl9Ci0rICAgIGlmICghY2lwaGVyKQotKwl7Ci0rCXBy aW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7Ci0rCXJldHVybiAwOyAKLSsJ fQotKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlW ZWMsIGRpcikgPD0gMCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJD RkIxIikpCi0rCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19M RU5HVEhfQklUUyk7Ci0rICAgIGlmIChkaXIpCi0rCQlFVlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4 dCwgcGxhaW50ZXh0LCBsZW4pOwotKwllbHNlCi0rCQlFVlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0 LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2NoYXIgKnRfdGFn WzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OwotK2NoYXIgKnRfbW9kZVs2XSA9IHsi Q0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIxMjgifTsKLStlbnVtIE1vZGUge0NC QywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07Ci0rZW51bSBYQ3J5cHQge1hERUNSWVBU LCBYRU5DUllQVH07Ci0rCi0rLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0rLyog IE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCi0rCi0rLyojZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICgoYiklOCkp JjEpKi8KLSsvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8 PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSovCi0rCi0rI2RlZmluZSBnYihhLGIpICgo KGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCi0rI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikv OF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkpfCghISh2KSA8PCAoNy0oYiklOCkpKQot KwotK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAotKwkgICBpbnQgYWtleXN6LCB1bnNpZ25lZCBj aGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCi0rCSAgIGludCBkaXIsIHVuc2lnbmVkIGNo YXIgKnRleHQsIGludCBsZW4sCi0rCSAgIEZJTEUgKnJmcCkKLSsgICAgewotKyAgICBpbnQgcmV0 ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbMTAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNo YXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07Ci0rICAgIHVuc2lnbmVkIGNoYXIgcHRleHRbMTAw MV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOwotKyAgICBpbnQgaSwgaiwgbiwgbjEsIG4yOwotKyAg ICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ovODsKLSsgICAgRVZQX0NJUEhFUl9DVFgg Y3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBpZiAobGVuID4g MzIpCi0rCXsKLSsJcHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8 PDxcblxuIiwgCi0rCSAgICAgICBhbW9kZSwgYWtleXN6KTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0r ICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1vZGUpCi0rCWlmIChzdHJjbXAoYW1v ZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCi0rCSAgICBicmVhazsKLSsgICAgaWYgKGltb2RlID09 IDYpCi0rCXsgCi0rCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0r CXJldHVybiAtMTsKLSsJfQotKwotKyAgICBtZW1jcHkoa2V5WzBdLCBhS2V5LCBua2V5c3opOwot KyAgICBpZiAoaVZlYykKLSsJbWVtY3B5KGl2WzBdLCBpVmVjLCBBRVNfQkxPQ0tfU0laRSk7Ci0r ICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCW1lbWNweShwdGV4dFswXSwgdGV4dCwgbGVuKTsK LSsgICAgZWxzZQotKwltZW1jcHkoY3RleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGZvciAoaSA9 IDA7IGkgPCAxMDA7ICsraSkKLSsJewotKwkvKiBwcmludGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7 ICovCi0rCWlmIChpID4gMCkKLSsJICAgIHsKLSsJICAgIGZwcmludGYocmZwLCJDT1VOVCA9ICVk XG4iLGkpOwotKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5W2ldLG5rZXlzeixyZnAsMCk7Ci0r CSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICovCi0rCQlPdXRwdXRWYWx1ZSgiSVYiLGl2 W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKLSsJICAgIC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwg UGxhaW50ZXh0ICovCi0rCSAgICBPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRb MF0gOiBjdGV4dFswXSxsZW4scmZwLAotKwkJCWltb2RlID09IENGQjEpOwotKwkgICAgfQotKwlm b3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkK LSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7IC8qIHNldCB1 cCBlbmNyeXB0aW9uICovCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6 LCBrZXlbaV0sIE5VTEwsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAg ICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0K LSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0r CQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5 KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJCX0KLSsJCSAgICBlbHNlCi0rCQkJewot KwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNw eShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgfQotKwkJYnJlYWs7 Ci0rCi0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOiAgCi0rCSAgICBjYXNlIENGQjEy ODoKLSsJCWlmIChqID09IDApCi0rCQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwg YW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5 cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJ ICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBs ZW4pOwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgaXZbaV0sIGxlbik7Ci0r CQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQot KwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJ CQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgZWxz ZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsK LSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAg fQotKwkJYnJlYWs7Ci0rCi0rCSAgICBjYXNlIENGQjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAg IHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZb aV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkg IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewot KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtq XSwgcHRleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRl eHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0KLSsJCWlmIChkaXIgPT0gWEVOQ1JZUFQp Ci0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sICZp dltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0 W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGog PCAxNikKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOwotKwkJICAgIGVs c2UKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xNl0sIGxlbik7Ci0rCQkgICAgfQot KwkJYnJlYWs7Ci0rCi0rCSAgICBjYXNlIENGQjE6Ci0rCQlpZihqID09IDApCi0rCQkgICAgewot KyNpZiAwCi0rCQkgICAgLyogY29tcGVuc2F0ZSBmb3Igd3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1 dCBmaWxlICovCi0rCQkgICAgaWYoaSA9PSAwKQotKwkJCXB0ZXh0WzBdWzBdPDw9NzsKLSsjZW5k aWYKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGtleVtpXSxpdltpXSxk aXIsCi0rCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0r CQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJRVZQX0NpcGhlcigmY3R4 LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCUVWUF9DaXBoZXIo JmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwotKwkJICAgIH0KLSsJCWlmKGRpciA9 PSBYRU5DUllQVCkKLSsJCSAgICB7Ci0rCQkgICAgaWYoaiA8IDEyOCkKLSsJCQlzYihwdGV4dFtq KzFdLDAsZ2IoaXZbaV0saikpOwotKwkJICAgIGVsc2UKLSsJCQlzYihwdGV4dFtqKzFdLDAsZ2Io Y3RleHRbai0xMjhdLDApKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlm KGogPCAxMjgpCi0rCQkJc2IoY3RleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAgICBlbHNl Ci0rCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAgfQotKwkJ YnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCS0tajsgLyogcmVzZXQgdG8gbGFzdCBvZiByYW5nZSAq LwotKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwlPdXRwdXRWYWx1ZSh0 X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRbal0sbGVuLHJmcCwKLSsJCSAgICBpbW9k ZSA9PSBDRkIxKTsKLSsJZnByaW50ZihyZnAsICJcbiIpOyAgLyogYWRkIHNlcGFyYXRvciAqLwot KwotKwkvKiBDb21wdXRlIG5leHQgS0VZICovCi0rCWlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCSAg ICB7Ci0rCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKLSsJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBD VFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0x OyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKLSsJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0 W2otbjJdWzBdOwotKwkJfQotKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQotKwkJewotKwkJ Zm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKLSsJCSAgICBz YihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXN3aXRjaCAoYWtleXN6KQotKwkJICAgIHsKLSsJCWNhc2UgMTI4OgotKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAxOTI6Ci0r CQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0rOCwgOCk7Ci0rCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMjU2 OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdLCAxNik7Ci0rCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAg fQotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKLSsJ CXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KLSsJCWZv ciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKLSsJCSAg ICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBdOwotKwkJfQotKwkgICAgZWxzZSBpZihp bW9kZSA9PSBDRkIxKQotKwkJewotKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlz eiA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDAp KTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXN3aXRjaCAoYWtleXN6KQotKwkJICAgIHsKLSsJCWNh c2UgMTI4OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqXSwgMTYpOwotKwkJICAg IGJyZWFrOwotKwkJY2FzZSAxOTI6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2ot MV0rOCwgOCk7Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgcHRleHRbal0sIDE2KTsKLSsJ CSAgICBicmVhazsKLSsJCWNhc2UgMjU2OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4 dFtqLTFdLCAxNik7Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7 Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkgICAgfQotKwkvKiBDb21wdXRlIG5leHQga2V5 OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KLSsJZm9yIChuID0gMDsgbiA8IG5rZXlzejsg KytuKQotKwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1bbl0gXiBjaXBoZXJ0ZXh0W25dOwotKwkK LSsJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICovCi0rCWlmIChkaXIgPT0gWEVOQ1JZUFQp Ci0rCSAgICB7Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQotKwkJewotKwkgICAgY2FzZSBFQ0I6Ci0r CQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsK LSsJICAgIGNhc2UgQ0JDOgotKwkgICAgY2FzZSBPRkI6Ci0rCSAgICBjYXNlIENGQjEyODoKLSsJ CW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJbWVtY3B5KHB0 ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNh c2UgQ0ZCODoKLSsJCS8qIElWW2krMV0gPSBjdCAqLwotKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7 IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBjdGV4dFtqLW4yXVsw XTsKLSsJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAgIGNh c2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQotKwkJ ICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0sMCkpOwotKwkJcHRleHRbMF1bMF09Y3Rl eHRbai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZQotKwkg ICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVt Y3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAg ICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1j cHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNweShjdGV4dFsw XSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENG Qjg6Ci0rCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKLSsJCSAg ICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOwotKwkJY3RleHRbMF1bMF0gPSBwdGV4dFtq LTE2XVswXTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkIxOgotKwkJZm9yKG4xPTAsbjI9MTI3 IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCi0rCQkgICAgc2IoaXZbaSsxXSxuMSxnYihwdGV4dFtq LW4yXSwwKSk7Ci0rCQljdGV4dFswXVswXT1wdGV4dFtqLTEyOF1bMF0mMHg4MDsKLSsJCWJyZWFr OwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIAotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0r Ci0rLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwot Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgIyBDb25maWcgaW5mbyBmb3Igdi1v bmUKLSsgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNCCi0rICAjIFN0YXRlIDogRW5jcnlw dCBhbmQgRGVjcnlwdAotKyAgIyBLZXkgTGVuZ3RoIDogMjU2Ci0rICAjIEZyaSBBdWcgMzAgMDQ6 MDc6MjIgUE0KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBwcm9j X2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQotKyAgICB7Ci0rICAgIGNoYXIgYWZu WzI1Nl0sIHJmblsyNTZdOwotKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKLSsg ICAgY2hhciBpYnVmWzIwNDhdOwotKyAgICBjaGFyIHRidWZbMjA0OF07Ci0rICAgIGludCBpbGVu LCBsZW4sIHJldCA9IDA7Ci0rICAgIGNoYXIgYWxnb1s4XSA9ICIiOwotKyAgICBjaGFyIGFtb2Rl WzhdID0gIiI7Ci0rICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsKLSsgICAgaW50IGFrZXlzeiA9IDA7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOwotKyAgICBpbnQgZGlyID0g LTEsIGVyciA9IDAsIHN0ZXAgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4 XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOwotKyAgICBjaGFyICpycDsK LSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OwotKwotKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQotKwl7Ci0rCXByaW50ZigiTm8g cmVxIGZpbGVcbiIpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgc3RyY3B5KGFmbiwgcnFmaWxl KTsKLSsKLSsgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCi0rCXsKLSsJ cHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgYWZuLCBzdHJl cnJvcihlcnJubykpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgaWYgKCFyc3BmaWxlKQotKwl7 Ci0rCXN0cmNweShyZm4sYWZuKTsKLSsJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOwotKyNpZmRlZiBP UEVOU1NMX1NZU19XSU4zMgotKwlpZiAoIXJwKQotKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwi KTsKLSsjZW5kaWYKLSsJYXNzZXJ0KHJwKTsKLSsJbWVtY3B5KHJwLCJyc3AiLDMpOwotKwlycCA9 IHN0cnN0cihyZm4sICIucmVxIik7Ci0rCW1lbWNweShycCwgIi5yc3AiLCA0KTsKLSsJcnNwZmls ZSA9IHJmbjsKLSsJfQotKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5V TEwpCi0rCXsKLSsJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAg ICAgcmZuLCBzdHJlcnJvcihlcnJubykpOwotKwlmY2xvc2UoYWZwKTsKLSsJYWZwID0gTlVMTDsK LSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXpl b2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCi0rCXsKLSsJdGlkeV9saW5lKHRidWYsIGlidWYpOwot KwlpbGVuID0gc3RybGVuKGlidWYpOwotKwkvKiAgICAgIHByaW50Zigic3RlcD0lZCBpYnVmPSVz IixzdGVwLGlidWYpOyAqLwotKwlzd2l0Y2ggKHN0ZXApCi0rCSAgICB7Ci0rCWNhc2UgMDogIC8q IHJlYWQgcHJlYW1ibGUgKi8KLSsJICAgIGlmIChpYnVmWzBdID09ICdcbicpCi0rCQl7IC8qIGVu ZCBvZiBwcmVhbWJsZSAqLwotKwkJaWYgKCgqYWxnbyA9PSAnXDAnKSB8fAotKwkJICAgICgqYW1v ZGUgPT0gJ1wwJykgfHwKLSsJCSAgICAoYWtleXN6ID09IDApKQotKwkJICAgIHsKLSsJCSAgICBw cmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtleVNpemUgKCVzLyVzLyVkKVxuIiwK LSsJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7Ci0rCQkgICAgZXJyID0gMTsKLSsJCSAgICB9Ci0r CQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgKysgc3Rl cDsKLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKLSsJCXsK LSsJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7Ci0rCQllcnIg PSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCi0rCQlj aGFyICp4cCwgKnBwID0gaWJ1ZisyOwotKwkJaW50IG47Ci0rCQlpZiAoYWtleXN6KQotKwkJICAg IHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9 IHRpbWUoMCk7Ci0rCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJ CSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkg ICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9PSAwKQotKwkJCXsKLSsJCQlzdHJjcHko YWxnbywgIkFFUyIpOwotKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KLSsJCQlwcCArPSA2OwotKwkJ CXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlzdHJuY3B5KGF0ZXN0 LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBtb2RlICovCi0rCQkJ eHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQluID0gc3RybGVuKHhw KzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1vZGVbbl0gPSAnXDAn OwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJp bnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRlc3QsIGFtb2RlKTsKLSsJCQl9Ci0rCQkg ICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkgTGVuZ3RoIDogIiwgMTMpID09IDApCi0r CQkJewotKwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOwotKwkJCWlmIChWRVJCT1NFKQotKwkJCQlw cmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCX0K LSsJICAgIGJyZWFrOwotKwotKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8K LSsJICAgIGlmIChpYnVmWzBdID09ICdbJykKLSsJCXsKLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0r CQkrK3N0ZXA7Ci0rCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDAp Ci0rCQkgICAgZGlyID0gMTsKLSsJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQ VF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDA7Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAg IHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7Ci0rCQkgICAgZXJyID0gMTsK LSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKLSsJ CXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdv cmRcbiIpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIAotKwkJc3RlcCA9IDI7Ci0rCi0r CWNhc2UgMjogLyogS0VZID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAg IGlmKCppYnVmID09ICdcbicpCi0rCQlicmVhazsKLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVm LCJDT1VOVCA9ICIsOCkpCi0rCQlicmVhazsKLSsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiS0VZID0gIiwgNikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwot KwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNo YXIqKWlidWYrNiwgYUtleSk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJp bnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJ ICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7Ci0rCQlpZiAoc3RyY21wKGFt b2RlLCAiRUNCIikgPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVv ZihpVmVjKSk7Ci0rCQkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNC ICovCi0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgICsrc3RlcDsKLSsJCX0KLSsJICAgIGJyZWFr OwotKwotKwljYXNlIDM6IC8qIElWID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK LSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQotKwkJewotKwkJ cHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0r CQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOwotKwkJaWYgKGxlbiA8 IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7Ci0rCQkgICAgZXJy ID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIklWIiwgaVZlYywg bGVuKTsKLSsJCXN0ZXAgPSAoZGlyKT8gNDogNTsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwlj YXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0r CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQotKwkJ ewotKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQot KwkgICAgZWxzZQotKwkJewotKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOwotKwkJaWYoIXN0 cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxh aW50ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQp OwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJ TlRFWFQ6ICVzIiwgaWJ1ZisxMik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJ ICAgIH0KLSsJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCi0rCQkgICAgewotKwkJICAg IHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJQ TEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOwotKwkJaWYgKHN0cmNt cChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewot KwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkgICAgICBk aXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbiwgCi0rCQkJICAgICAgcmZwKSA8IDAp Ci0rCQkJRVhJVCgxKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIHJldCA9 IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAg LyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0 ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxl bixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9 IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4 eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtF WVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaWYoIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVm KzEzKS0xLGNpcGhlcnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1Zisx MyxjaXBoZXJ0ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYo IkludmFsaWQgQ0lQSEVSVEVYVFxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwot KwkJICAgIH0KLSsKLSsJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4p OwotKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0 ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAK LSsJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0r CQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwg aVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJ CSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJ TlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAo YW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVh azsKLSsKLSsJY2FzZSA2OgotKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKLSsJCXsKLSsJCWVy ciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7Ci0rCQl9Ci0rCSAgICBl bHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQotKwkJeyAvKiBNQ1QgYWxyZWFkeSBh ZGRlZCB0ZXJtaW5hdGluZyBubCAqLwotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCX0KLSsJICAg IHN0ZXAgPSAxOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKHJmcCkKLSsJ ZmNsb3NlKHJmcCk7Ci0rICAgIGlmIChhZnApCi0rCWZjbG9zZShhZnApOwotKyAgICByZXR1cm4g ZXJyOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAotKyAg YSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCi0rICBBIHNp bmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQotKyAg QSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54 eHgKLSsgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKLSsgICAgewotKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxl ID0gTlVMTDsKLSsgICAgRklMRSAqZnAgPSBOVUxMOwotKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwg cmZuWzI1Nl0gPSAiIjsKLSsgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOwotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJp bnRfZXJyb3JzKCk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsjZW5kaWYKLSsgICAgaWYgKGFyZ2MgPiAx KQotKwl7Ci0rCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCi0rCSAgICB7Ci0r CSAgICBkX29wdCA9IDE7Ci0rCSAgICB9Ci0rCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwg Ii1mIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGZfb3B0ID0gMTsKLSsJICAgIGRfb3B0ID0gMDsK LSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRl cjogJXNcbiIsIGFyZ3ZbMV0pOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChhcmdj IDwgMykKLSsJICAgIHsKLSsJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOwotKwkg ICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChkX29wdCkKLSsJICAgIHJxbGlzdCA9IGFyZ3Zb Ml07Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN0cmNweShmbiwgYXJndlsyXSk7Ci0rCSAgICBy c3BmaWxlID0gYXJndlszXTsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAoZF9vcHQpCi0rCXsgLyog bGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLwotKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwg InIiKSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVc biIpOwotKwkgICAgcmV0dXJuIC0xOwotKwkgICAgfQotKwl3aGlsZSAoZmdldHMoZm4sIHNpemVv ZihmbiksIGZwKSkKLSsJICAgIHsKLSsJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKLSsJICAgIHN0 cmNweShyZm4sIGZuKTsKLSsJICAgIGlmIChWRVJCT1NFKQotKwkJcHJpbnRmKCJQcm9jZXNzaW5n OiAlc1xuIiwgcmZuKTsKLSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsK LSsJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwot KwkJRVhJVCgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNl IC8qIHNpbmdsZSBmaWxlICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCSAgICBwcmludGYoIlBy b2Nlc3Npbmc6ICVzXG4iLCBmbik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkg ICAgewotKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIs IGZuKTsKLSsJICAgIH0KLSsJfQotKyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAg fQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2NtYWN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf Y21hY3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFj dGVzdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDM5MjMxNTUgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwkyMDE0LTA1LTA2IDE2 OjI5OjUwLjU0MzkyMzE1NSArMDIwMAotQEAgLTAsMCArMSw1MTcgQEAKLSsvKiBmaXBzX2NtYWN0 ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5z c2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs 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 Ci0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5l IE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlw ZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jbWFjLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaWZu ZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0r ewotKyAgICBwcmludGYoIk5vIEZJUFMgQ01BQyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDAp OwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVk ZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVS ICpjaXBoZXIsIEZJTEUgKm91dCwgRklMRSAqaW4sCi0rCWludCBtb2RlLCBpbnQgS2xlbl9jb3Vu dHNfa2V5cywgaW50IGtub3duX2tleWxlbik7Ci0rc3RhdGljIGludCBwcmludF9jbWFjX2dlbihj b25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktl eSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCi0rCQlpbnQg VGxlbik7Ci0rc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBo ZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNp Z25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNYWMsIGludCBN YWNsZW4sCi0rCQlpbnQgVGxlbik7Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMKLStpbnQgZmlwc19j bWFjdGVzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZWxzZQotK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpv dXQgPSBOVUxMOwotKwlpbnQgbW9kZSA9IDA7CQkvKiAwID0+IEdlbmVyYXRlLCAxID0+IFZlcmlm eSAqLwotKwlpbnQgS2xlbl9jb3VudHNfa2V5cyA9IDA7IC8qIDAgPT4gS2xlbiBpcyBzaXplIG9m IG9uZSBrZXkKLSsJCQkJICAgICAxID0+IEtsZW4gaXMgYW1vdW50IG9mIGtleXMKLSsJCQkJICAq LwotKwlpbnQga25vd25fa2V5bGVuID0gMDsJLyogT25seSBzZXQgd2hlbiBLbGVuX2NvdW50c19r ZXlzID0gMSAqLwotKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSAwOwotKwlpbnQgcmV0ID0g MTsKLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsKLSsJd2hpbGUgKGFyZ2MgPiAxICYmIGFyZ3Zb MV1bMF0gPT0gJy0nKQotKwkJewotKwkJc3dpdGNoIChhcmd2WzFdWzFdKQotKwkJCXsKLSsJCWNh c2UgJ2EnOgotKwkJCXsKLSsJCQljaGFyICpwID0gJmFyZ3ZbMV1bMl07Ci0rCQkJaWYgKCpwID09 ICdcMCcpCi0rCQkJCXsKLSsJCQkJaWYgKGFyZ2MgPD0gMikKLSsJCQkJCXsKLSsJCQkJCWZwcmlu dGYoc3RkZXJyLCAiT3B0aW9uICVzIG5lZWRzIGEgdmFsdWVcbiIsIGFyZ3ZbMV0pOwotKwkJCQkJ Z290byBlbmQ7Ci0rCQkJCQl9Ci0rCQkJCWFyZ3YrKzsKLSsJCQkJYXJnYy0tOwotKwkJCQlwID0g JmFyZ3ZbMV1bMF07Ci0rCQkJCX0KLSsJCQlpZiAoIXN0cmNtcChwLCAiYWVzMTI4IikpCi0rCQkJ CWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgImFl czE5MiIpKQotKwkJCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsJCQllbHNlIGlmICgh c3RyY21wKHAsICJhZXMyNTYiKSkKLSsJCQkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7Ci0r CQkJZWxzZSBpZiAoIXN0cmNtcChwLCAidGRlYTMiKSB8fCAhc3RyY21wKHAsICJ0ZGVzMyIpKQot KwkJCQl7Ci0rCQkJCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsJCQkJS2xlbl9jb3Vu dHNfa2V5cyA9IDE7Ci0rCQkJCWtub3duX2tleWxlbiA9IDg7Ci0rCQkJCX0KLSsJCQllbHNlCi0r CQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGFsZ29yaXRobSAlc1xuIiwgcCk7 Ci0rCQkJCWdvdG8gZW5kOwotKwkJCQl9Ci0rCQkJfQotKwkJCWJyZWFrOwotKwkJY2FzZSAnZyc6 Ci0rCQkJbW9kZSA9IDA7Ci0rCQkJYnJlYWs7Ci0rCQljYXNlICd2JzoKLSsJCQltb2RlID0gMTsK LSsJCQlicmVhazsKLSsJCWRlZmF1bHQ6Ci0rCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9w dGlvbiAlc1xuIiwgYXJndlsxXSk7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYXJndisrOwot KwkJYXJnYy0tOwotKwkJfQotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxz ZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlv dXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0r CWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxp emF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9y XG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWNtYWNfdGVzdChjaXBoZXIsIG91 dCwgaW4sIG1vZGUsCi0rCQkJS2xlbl9jb3VudHNfa2V5cywga25vd25fa2V5bGVuKSkKLSsJCXsK LSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgY21hYyBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIp OwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsK LSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYm IChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwot Kwl9Ci0rCi0rI2RlZmluZSBDTUFDX1RFU1RfTUFYTElORUxFTgkxNTAwMDAKLSsKLStpbnQgY21h Y190ZXN0KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKLSsJ aW50IG1vZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKQotKwl7Ci0r CWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFs dWU7Ci0rCXVuc2lnbmVkIGNoYXIgKipLZXlzID0gTlVMTCwgKk1zZyA9IE5VTEwsICpNYWMgPSBO VUxMOwotKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMOwotKwlpbnQgQ291bnQsIEtsZW4sIE1s ZW4sIFRsZW47Ci0rCWxvbmcgS2V5bGVuLCBNc2dsZW4sIE1hY2xlbjsKLSsJaW50IHJldCA9IDA7 Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RF U1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RFU1RfTUFY TElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9y OwotKwotKwlDb3VudCA9IC0xOwotKwlLbGVuID0gLTE7Ci0rCU1sZW4gPSAtMTsKLSsJVGxlbiA9 IC0xOwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIENNQUNfVEVTVF9NQVhMSU5FTEVOLCBp bikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJ a2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0r CQkvKiBTa2lwIGNvbW1lbnRzICovCi0rCQlpZiAoa2V5d29yZFswXSA9PSAnIycpCi0rCQkJewot KwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJ Y29udGludWU7Ci0rCQkJfQotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3Ry Y2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZv ciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChm cHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7 Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl ICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7 Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRp bmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hp bGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9 IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ291bnQiKSkKLSsJCQl7Ci0rCQkJaWYg KENvdW50ICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUNvdW50ID0gYXRvaSh2 YWx1ZSk7Ci0rCQkJaWYgKENvdW50IDwgMCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLbGVuIikpCi0rCQkJewotKwkJCWlmIChL bGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUtsZW4gPSBhdG9pKHZhbHVl KTsKLSsJCQlpZiAoS2xlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKEts ZW5fY291bnRzX2tleXMpCi0rCQkJCXsKLSsJCQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVv ZigqS2V5cykgKiBLbGVuKTsKLSsJCQkJbWVtc2V0KEtleXMsICdcMCcsIHNpemVvZigqS2V5cykg KiBLbGVuKTsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlLZXlzID0gT1BFTlNTTF9t YWxsb2Moc2l6ZW9mKCpLZXlzKSk7Ci0rCQkJCW1lbXNldChLZXlzLCAnXDAnLCBzaXplb2YoKktl eXMpKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1sZW4i KSkKLSsJCQl7Ci0rCQkJaWYgKE1sZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJTWxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChNbGVuIDwgMCkKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJUbGVuIikpCi0r CQkJewotKwkJCWlmIChUbGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVRs ZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoVGxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2V5IikgJiYgIUtsZW5f Y291bnRzX2tleXMpCi0rCQkJewotKwkJCWlmIChLZXlzWzBdKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCUtleXNbMF0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4pOwotKwkJCWlmICgh S2V5c1swXSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry bmNtcChrZXl3b3JkLCAiS2V5IiwgMykgJiYgS2xlbl9jb3VudHNfa2V5cykKLSsJCQl7Ci0rCQkJ aW50IGtleW51bSA9IGF0b2koa2V5d29yZCArIDMpOwotKwkJCWlmICgha2V5bnVtIHx8IGtleW51 bSA+IEtsZW4gfHwgS2V5c1trZXludW0tMV0pCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ S2V5c1trZXludW0tMV0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4pOwotKwkJCWlmICghS2V5 c1trZXludW0tMV0pCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKLSsJCQlp ZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJNYWMiKSkKLSsJCQl7Ci0rCQkJaWYgKG1vZGUgPT0gMCkKLSsJCQkJY29u dGludWU7Ci0rCQkJaWYgKE1hYykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNYWMgPSBo ZXgyYmluX20odmFsdWUsICZNYWNsZW4pOwotKwkJCWlmICghTWFjKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQot KwkJCXsKLSsJCQlpZiAobW9kZSA9PSAxKQotKwkJCQljb250aW51ZTsKLSsJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCX0KLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1 dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAoS2V5cyAmJiBNc2cgJiYgKCFtb2RlIHx8IE1h YykgJiYgKFRsZW4gPiAwKSAmJiAoS2xlbiA+IDApKQotKwkJCXsKLSsJCQlpZiAoS2xlbl9jb3Vu dHNfa2V5cykKLSsJCQkJewotKwkJCQlpbnQgeDsKLSsJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2Mo S2xlbiAqIGtub3duX2tleWxlbik7Ci0rCQkJCWZvciAoeCA9IDA7IHggPCBLbGVuOyB4KyspCi0r CQkJCQl7Ci0rCQkJCQltZW1jcHkoS2V5ICsgeCAqIGtub3duX2tleWxlbiwKLSsJCQkJCQlLZXlz W3hdLCBrbm93bl9rZXlsZW4pOwotKwkJCQkJT1BFTlNTTF9mcmVlKEtleXNbeF0pOwotKwkJCQkJ fQotKwkJCQlLbGVuICo9IGtub3duX2tleWxlbjsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJewot KwkJCQlLZXkgPSBPUEVOU1NMX21hbGxvYyhLbGVuKTsKLSsJCQkJbWVtY3B5KEtleSwgS2V5c1sw XSwgS2xlbik7Ci0rCQkJCU9QRU5TU0xfZnJlZShLZXlzWzBdKTsKLSsJCQkJfQotKwkJCU9QRU5T U0xfZnJlZShLZXlzKTsKLSsKLSsJCQlzd2l0Y2gobW9kZSkKLSsJCQkJewotKwkJCWNhc2UgMDoK LSsJCQkJaWYgKCFwcmludF9jbWFjX2dlbihjaXBoZXIsIG91dCwKLSsJCQkJCQlLZXksIEtsZW4s Ci0rCQkJCQkJTXNnLCBNbGVuLAotKwkJCQkJCVRsZW4pKQotKwkJCQkJZ290byBlcnJvcjsKLSsJ CQkJYnJlYWs7Ci0rCQkJY2FzZSAxOgotKwkJCQlpZiAoIXByaW50X2NtYWNfdmVyKGNpcGhlciwg b3V0LAotKwkJCQkJCUtleSwgS2xlbiwKLSsJCQkJCQlNc2csIE1sZW4sCi0rCQkJCQkJTWFjLCBN YWNsZW4sCi0rCQkJCQkJVGxlbikpCi0rCQkJCQlnb3RvIGVycm9yOwotKwkJCQlicmVhazsKLSsJ CQkJfQotKwotKwkJCU9QRU5TU0xfZnJlZShLZXkpOwotKwkJCUtleSA9IE5VTEw7Ci0rCQkJT1BF TlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlPUEVOU1NMX2ZyZWUoTWFjKTsK LSsJCQlNYWMgPSBOVUxMOwotKwkJCUtsZW4gPSAtMTsKLSsJCQlNbGVuID0gLTE7Ci0rCQkJVGxl biA9IC0xOwotKwkJCUNvdW50ID0gLTE7Ci0rCQkJfQotKwkJfQotKwotKwotKwlyZXQgPSAxOwot KwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5l YnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChL ZXkpCi0rCQlPUEVOU1NMX2ZyZWUoS2V5KTsKLSsJaWYgKE1zZykKLSsJCU9QRU5TU0xfZnJlZShN c2cpOwotKwlpZiAoTWFjKQotKwkJT1BFTlNTTF9mcmVlKE1hYyk7Ci0rCi0rCXJldHVybiByZXQ7 Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVy cm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0r CX0KLSsKLStzdGF0aWMgaW50IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhl ciwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKLSsJCXVuc2ln bmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCi0rCQlpbnQgVGxlbikKLSsJewotKwlpbnQgcmMsIGk7 Ci0rCXNpemVfdCByZXNsZW47Ci0rCXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07Ci0rCUNNQUNfQ1RY ICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygpOwotKwotKwlDTUFDX0luaXQoY21hY19jdHgsIEtl eSwgS2xlbiwgY2lwaGVyLCAwKTsKLSsJQ01BQ19VcGRhdGUoY21hY19jdHgsIE1zZywgTWxlbik7 Ci0rCWlmICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkKLSsJCXsKLSsJCWZw dXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJ fQotKwllbHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCi0rCQl7Ci0rCQlmcHV0cygiUGFyYW1l dGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0r CQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWZwdXRzKCJNYWMgPSAiLCBvdXQpOwotKwkJZm9yIChpID0g MDsgaSA8IFRsZW47IGkrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCByZXNbaV0pOwotKwkJ ZnB1dHMoUkVTUF9FT0wsIG91dCk7Ci0rCQlyYyA9IDE7Ci0rCQl9Ci0rCUNNQUNfQ1RYX2ZyZWUo Y21hY19jdHgpOwotKwlyZXR1cm4gcmM7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X2NtYWNf dmVyKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hh ciAqS2V5LCBpbnQgS2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCi0rCQl1 bnNpZ25lZCBjaGFyICpNYWMsIGludCBNYWNsZW4sCi0rCQlpbnQgVGxlbikKLSsJewotKwlpbnQg cmMgPSAxOwotKwlzaXplX3QgcmVzbGVuOwotKwl1bnNpZ25lZCBjaGFyIHJlc1sxMjhdOwotKwlD TUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsKLSsJQ01BQ19Jbml0KGNtYWNf Y3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7Ci0rCUNNQUNfVXBkYXRlKGNtYWNfY3R4LCBNc2cs IE1sZW4pOwotKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJlc2xlbikpCi0rCQl7 Ci0rCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJyKTsKLSsJCXJjID0g MDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQotKwkJewotKwkJZnB1dHMo IlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRlcnIpOwotKwkJcmMg PSAwOwotKwkJfQotKwllbHNlIGlmIChUbGVuICE9IE1hY2xlbikKLSsJCXsKLSsJCWZwdXRzKCJQ YXJhbWV0ZXIgZXJyb3IsIFRsZW4gIT0gcmVzdWx0aW5nIE1hYyBsZW5ndGhcbiIsIHN0ZGVycik7 Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWlmICghbWVtY21wKE1hYywgcmVz LCBNYWNsZW4pKQotKwkJCWZwdXRzKCJSZXN1bHQgPSBQIiBSRVNQX0VPTCwgb3V0KTsKLSsJCWVs c2UKLSsJCQlmcHV0cygiUmVzdWx0ID0gRiIgUkVTUF9FT0wsIG91dCk7Ci0rCQl9Ci0rCUNNQUNf Q1RYX2ZyZWUoY21hY19jdHgpOwotKwlyZXR1cm4gcmM7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCi0tLS0gb3BlbnNz bC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNTQzOTIzMTU1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rlc21vdnMuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MzkyMzE1NSArMDIwMAot QEAgLTAsMCArMSw3MDIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw NCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl 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 RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBERVMgTW9kZXMg b2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCi0rICBUZXN0IFByb2dyYW0KLSsKLSsgIEJh c2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgotKyAgRG9uYXRlZCB0 byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1cnkgQmx2 ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0rICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5 cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERF UyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjZGVmaW5l IERFU19CTE9DS19TSVpFIDgKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotK2ludCBERVNUZXN0 KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5z aWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGlu dCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNo YXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCi0rICAgIHsKLSsgICAgY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKGFrZXlzeiAhPSAxOTIpCi0r CXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJRVhJVCgx KTsKLSsJfQotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCWNp cGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9k ZSwgIkVDQiIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKLSsgICAgZWxz ZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rl c19lZGUzX2NmYjY0KCk7Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwg MykgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwotKyAgICBlbHNlIGlmKCFz dHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7 Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX2NmYjEoKTsKLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2Rl OiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChFVlBfQ2lwaGVy SW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQotKwlyZXR1 cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQSEVS X0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsgICAgRVZQ X0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVu KQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rICAgIG9s ZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIs IHRhZywgb2xlbiwgb2J1Zik7Ci0rICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hh ciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCi0rICAgIHsKLSsgICAgaW50IG47 Ci0rCi0rICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCi0rICAgIG1lbW1vdmUoZHN0LGRzdCtu Yml0cy84LDMqOC1uYml0cy84KTsKLSsgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCi0rICAgIG1l bWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKLSsgICAgLyogbGVmdCBzaGlm dCB0aGUgYml0cyAqLwotKyAgICBpZihuYml0cyU4KQotKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsr bikKLSsJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5i aXRzJTgpKTsKLSsgICAgfQkKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhF UlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJD RkI4IiwiQ0ZCNjQifTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENG QjY0fTsKLStpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0rdm9pZCBkb19tY3Qo Y2hhciAqYW1vZGUsIAotKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNo YXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKLSsJICAgIGludCBkaXIsIHVuc2lnbmVkIGNo YXIgKnRleHQsIGludCBsZW4sCi0rCSAgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IGks aW1vZGU7Ci0rICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLwot KyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOwotKwotKyAgICBmb3IgKGltb2RlPTAgOyBpbW9k ZSA8IDYgOyArK2ltb2RlKQotKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQotKwkg ICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2du aXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGZvcihp PTAgOyBpIDwgNDAwIDsgKytpKQotKwl7Ci0rCWludCBqOwotKwlpbnQgbjsKLSsJaW50IGtwPWFr ZXlzei82NDsKLSsJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJZnByaW50ZihyZnAsIlxuQ09V TlQgPSAlZFxuIixpKTsKLSsJaWYoa3AgPT0gMSkKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFr ZXksOCxyZnAsMCk7Ci0rCWVsc2UKLSsJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCi0rCQl7 Ci0rCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1ZSgiIixha2V5K24q OCw4LHJmcCwwKTsKLSsJCX0KLSsKLSsJaWYoaW1vZGUgIT0gRUNCKQotKwkgICAgT3V0cHV0VmFs dWUoIklWIixpdmVjLDgscmZwLDApOwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxs ZW4scmZwLGltb2RlID09IENGQjEpOwotKyNpZiAwCi0rCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlh bm5lc3MgKi8KLSsJaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08PD03OwotKyNlbmRp ZgotKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsr aikKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07Ci0rCi0rCSAgICBt ZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJCXsKLSsJCW1lbWNw eShvbGRfaXYsaXZlYyw4KTsKLSsJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVj LGRpcix0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCW1lbWNweShv bGRfaXYsY3R4Lml2LDgpOwotKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOwotKwkJ fQotKwkgICAgaWYoaiA9PSA5OTk5KQotKwkJewotKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0 ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsg Ki8KLSsJCX0KLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLwotKwkg ICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCi0rCSAgICBzaGlm dGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIs bmssMjQpOyovCi0rCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENG QjggfHwgaW1vZGUgPT0gQ0ZCNjQKLSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBP RkIpCi0rCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7Ci0rCi0rCSAgICBpZighZGlyICYmIChpbW9k ZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQotKwkJewotKwkJ LyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3Bl cmF0aW9uCi0rCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAq LwotKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25d OwotKwkJfQotKwkgICAgfQotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5W25d Xj1ua1sxNituXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVs4K25dXj1u a1s4K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5WzE2K25dXj1ua1tu XTsKLSsJaWYobnVta2V5cyA8IDMpCi0rCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOwot KwlpZihudW1rZXlzIDwgMikKLSsJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOwotKwlERVNf c2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKLSsJREVTX3NldF9vZGRfcGFyaXR5 KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxv Y2sgKikoYWtleSsxNikpOwotKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0rCi0rCS8qIHBvaW50 bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQotKwkg ICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hv Ci0rCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KLSsJaWYoaW1vZGUgPT0gT0ZCKQotKwkg ICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07 Ci0rCX0KLSsgICAgfQotKyAgICAKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAq cnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklM RSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1Zlsy MDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbW9kZVs4XSA9 ICIiOwotKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKLSsgICAgaW50IGFrZXlzej0wOwotKyAg ICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBl cnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0r ICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAg IEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgaW50IG51bWtleXM9MTsKLSsgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJ ewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0 cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9 PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJ ICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlm ICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJl cS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0 cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShycCwi cnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIucnNw IiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3Bm aWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7 Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAo ZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGlu ZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyoJcHJpbnRmKCJzdGVw PSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1v ZGUsIkVDQiIpKQotKwkgICAgewotKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7 Ci0rCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJICAg IH0KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxl ICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUg Ki8KLSsJCWlmICgqYW1vZGUgPT0gJ1wwJykKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNz aW5nIE1vZGVcbiIpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQot KwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIklu dmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9 IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYoKmFtb2RlKQotKwkJICAgIHsgLyogaW5zZXJ0IGN1 cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7Ci0rCQkg ICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAgICB9Ci0rCQllbHNl Ci0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgaWYoIXN0cm5jbXAo cHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKLSsJCSAgICAgICB8fCAh c3RybmNtcChwcCwiVERFUyAiLDUpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFU SU9OICIsMTIpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQot KwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJCXsKLSsJCQkvKiBn ZXQgdGVzdCB0eXBlICovCi0rCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQotKwkJCSAgICBw cCs9NDsKLSsJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCi0rCQkJICAgIHBwKz01 OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlzdHJuY3B5 KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBtb2RlICov Ci0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQluID0gc3Ry bGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1vZGVbbl0g PSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9TRSkKLSsJ CQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKLSsJCQl9Ci0rCQkg ICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtE RUNSWVBUXSAqLwotKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBp ZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVw OwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAg IGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkg PT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYo IkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAg fQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQll cnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsK LSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6 IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0rCQl7Ci0rCSAgICAg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAg ICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJewotKwkgICAgICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNh c2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQotKwkJewotKwkJbnVta2V5cz1hdG9pKGlidWYr MTApOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkg ICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCi0rCQl7Ci0rCQlha2V5c3o9NjQ7 Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDAp Ci0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0x OwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxl bik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJL RVlzID0gIiw3KSkKLSsJCXsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhleDJiaW4oaWJ1Zis3 LGFLZXkpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxp ZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCW1l bWNweShhS2V5KzgsYUtleSw4KTsKLSsJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7Ci0rCQlpYnVm WzRdPSdcMCc7Ci0rCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7Ci0rCQkrK3N0ZXA7Ci0r CQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQotKwkJewotKwkJ aW50IG49aWJ1ZlszXS0nMSc7Ci0rCi0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmluKGli dWYrNyxhS2V5K24qOCk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAg fQotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKLSsJCWlm KG4gPT0gMikKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlwcmlu dGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsK LSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAg ICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50 ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewot KwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7 Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0 OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJ CXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAg IGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAo YW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4 dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJ CWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhU OiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9 Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5U RVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRl c3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJ ICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxs ZW4scmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChkaXIg PT0gMSk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBp VmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJ ICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhF UlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsK LSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDU6 IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0rCQl7Ci0r CQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNl Ci0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmlu KGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0rCQkgICAg bGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAgICBlcnIg PTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJCi0rCQlQcmludFZhbHVlKCJDSVBIRVJU RVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09 IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChhbW9k ZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhlcnRleHQs IGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChk aXIgPT0gMCk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJ CQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIlBM QUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJy ZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJewotKwkJ ZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJICAg IGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBhbHJlYWR5 IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJfQotKwkg ICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAocmZwKQot KwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJldHVy biBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCi0r ICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KLSsgIEEg c2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCi0r ICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4eHh4 Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZp bGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9ICIi LCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19w cmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAoYXJnYyA+ IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJICAgIHsK LSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFd LCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9vcHQgPSAw OwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1l dGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGFy Z2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Ci0r CSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0ID0gYXJn dlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJICAg IHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkKLSsJeyAv KiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4ocnFsaXN0 LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmls ZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwgc2l6 ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwotKwkgICAg c3RyY3B5KHJmbiwgZm4pOwotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsK LSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJCXByaW50ZigiPj4+ IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJRVhJVCgxKTsKLSsJ CX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxl ICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBm bik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewotKwkgICAgcHJpbnRm KCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKLSsJICAgIH0KLSsJ fQotKyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYy5maXBzIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMKLS0tLSBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1 MC41NDM5MjMxNTUgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfZGh2cy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQzOTIzMTU1ICswMjAwCi1AQCAtMCwwICsx LDI5MiBAQAotKy8qIGZpcHMvZGgvZmlwc19kaHZzLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBw cm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKwot KyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYu aD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBE SCBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot K3N0YXRpYyBjb25zdCBFVlBfTUQgKnBhcnNlX21kKGNoYXIgKmxpbmUpCi0rCXsKLSsJY2hhciAq cDsKLSsJaWYgKGxpbmVbMF0gIT0gJ1snIHx8IGxpbmVbMV0gIT0gJ0YnKQotKwkJcmV0dXJuIE5V TEw7Ci0rCXAgPSBzdHJjaHIobGluZSwgJy0nKTsKLSsJaWYgKCFwKQotKwkJcmV0dXJuIE5VTEw7 Ci0rCWxpbmUgPSBwICsgMTsKLSsJcCA9IHN0cmNocihsaW5lLCAnXScpOwotKwlpZiAoIXApCi0r CQlyZXR1cm4gTlVMTDsKLSsJKnAgPSAwOwotKwlwID0gbGluZTsKLSsJd2hpbGUoaXNzcGFjZSgq cCkpCi0rCQlwKys7Ci0rCWlmICghc3RyY21wKHAsICJTSEExIikpCi0rCQlyZXR1cm4gRVZQX3No YTEoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMjI0IikpCi0rCQlyZXR1cm4gRVZQX3No YTIyNCgpOwotKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyNTYiKSkKLSsJCXJldHVybiBFVlBf c2hhMjU2KCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTM4NCIpKQotKwkJcmV0dXJuIEVW UF9zaGEzODQoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBNTEyIikpCi0rCQlyZXR1cm4g RVZQX3NoYTUxMigpOwotKwllbHNlCi0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotK3N0YXRpYyB2 b2lkIG91dHB1dF9aaGFzaChGSUxFICpvdXQsIGludCBleG91dCwKLSsJCQkJREggKmRoLCBCSUdO VU0gKnBlZXJrZXksIGNvbnN0IEVWUF9NRCAqbWQsCi0rCQkJCXVuc2lnbmVkIGNoYXIgKnJoYXNo LCBzaXplX3Qgcmhhc2hsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqWjsKLSsJdW5zaWduZWQg Y2hhciBjaGFzaFtFVlBfTUFYX01EX1NJWkVdOwotKwlpbnQgWmxlbjsKLSsJaWYgKHJoYXNoID09 IE5VTEwpCi0rCQl7Ci0rCQlyaGFzaGxlbiA9IE1fRVZQX01EX3NpemUobWQpOwotKwkJaWYgKCFE SF9nZW5lcmF0ZV9rZXkoZGgpKQotKwkJCWV4aXQgKDEpOwotKwkJZG9fYm5fcHJpbnRfbmFtZShv dXQsICJZZXBoZW1JVVQiLCBkaC0+cHViX2tleSk7Ci0rCQlpZiAoZXhvdXQpCi0rCQkJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJYZXBoZW1JVVQiLCBkaC0+cHJpdl9rZXkpOwotKwkJfQotKwlaID0g T1BFTlNTTF9tYWxsb2MoQk5fbnVtX2J5dGVzKGRoLT5wKSk7Ci0rCWlmICghWikKLSsJCWV4aXQo MSk7Ci0rCVpsZW4gPSBESF9jb21wdXRlX2tleV9wYWRkZWQoWiwgcGVlcmtleSwgZGgpOwotKwlp ZiAoZXhvdXQpCi0rCQlPdXRwdXRWYWx1ZSgiWiIsIFosIFpsZW4sIG91dCwgMCk7Ci0rCUZJUFNf ZGlnZXN0KFosIFpsZW4sIGNoYXNoLCBOVUxMLCBtZCk7Ci0rCU91dHB1dFZhbHVlKHJoYXNoID8g IklVVEhhc2haWiIgOiAiSGFzaFpaIiwgY2hhc2gsIHJoYXNobGVuLCBvdXQsIDApOwotKwlpZiAo cmhhc2gpCi0rCQl7Ci0rCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9ICVzXG4iLAotKwkJCQltZW1j bXAoY2hhc2gsIHJoYXNoLCByaGFzaGxlbikgPyAiRiIgOiAiUCIpOwotKwkJfQotKwllbHNlCi0r CQl7Ci0rCQlCTl9jbGVhcl9mcmVlKGRoLT5wcml2X2tleSk7Ci0rCQlCTl9jbGVhcl9mcmVlKGRo LT5wdWJfa2V5KTsKLSsJCWRoLT5wcml2X2tleSA9IE5VTEw7Ci0rCQlkaC0+cHViX2tleSA9IE5V TEw7Ci0rCQl9Ci0rCU9QRU5TU0xfY2xlYW5zZShaLCBabGVuKTsKLSsJT1BFTlNTTF9mcmVlKFop OwotKwl9Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMKLStpbnQgZmlwc19kaHZzX21haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotKyNlbHNlCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQotKyNlbmRpZgotKwl7Ci0rCWNoYXIgKiphcmdzID0gYXJndiArIDE7Ci0rCWludCBhcmduID0g YXJnYyAtIDE7Ci0rCUZJTEUgKmluLCAqb3V0OwotKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4 XTsKLSsJdW5zaWduZWQgY2hhciAqcmhhc2g7Ci0rCWxvbmcgcmhhc2hsZW47Ci0rCURIICpkaCA9 IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwotKwlCSUdOVU0gKnBlZXJrZXkgPSBO VUxMOwotKwljaGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKLSsJaW50IGRvX3Zl cmlmeSA9IC0xLCBleG91dCA9IDA7Ci0rCi0rCWZpcHNfYWxndGVzdF9pbml0KCk7Ci0rCi0rCWlm IChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaHZlciIpKQotKwkJewotKwkJZG9fdmVyaWZ5ID0g MTsKLSsJCWFyZ3MrKzsKLSsJCWFyZ24tLTsKLSsJCX0KLSsJZWxzZSBpZiAoYXJnbiAmJiAhc3Ry Y21wKCphcmdzLCAiZGhnZW4iKSkKLSsJCXsKLSsJCWRvX3ZlcmlmeSA9IDA7Ci0rCQlhcmdzKys7 Ci0rCQlhcmduLS07Ci0rCQl9Ci0rCi0rCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICItZXhv dXQiKSkKLSsJCXsKLSsJCWV4b3V0ID0gMTsKLSsJCWFyZ3MrKzsKLSsJCWFyZ24tLTsKLSsJCX0K LSsKLSsJaWYgKGRvX3ZlcmlmeSA9PSAtMSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCIlcyBb ZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOwotKwkJ ZXhpdCgxKTsKLSsJCX0KLSsKLSsJaWYgKGFyZ24gPT0gMikKLSsJCXsKLSsJCWluID0gZm9wZW4o KmFyZ3MsICJyIik7Ci0rCQlpZiAoIWluKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlvdXQg PSBmb3BlbihhcmdzWzFdLCAidyIpOwotKwkJaWYgKCFvdXQpCi0rCQkJewotKwkJCWZwcmludGYo c3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJ CQl9Ci0rCQl9Ci0rCWVsc2UgaWYgKGFyZ24gPT0gMCkKLSsJCXsKLSsJCWluID0gc3RkaW47Ci0r CQlvdXQgPSBzdGRvdXQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCIl cyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOwot KwkJZXhpdCgxKTsKLSsJCX0KLSsKLSsJZGggPSBGSVBTX2RoX25ldygpOwotKwotKwl3aGlsZSAo ZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYs IG91dCk7Ci0rCQlpZiAoc3RybGVuKGJ1ZikgPiA2ICYmICFzdHJuY21wKGJ1ZiwgIltGIiwgMikp Ci0rCQkJewotKwkJCW1kID0gcGFyc2VfbWQoYnVmKTsKLSsJCQlpZiAobWQgPT0gTlVMTCkKLSsJ CQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoZGgpCi0rCQkJCUZJUFNfZGhfZnJlZShkaCk7 Ci0rCQkJZGggPSBGSVBTX2RoX25ldygpOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwot KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlAiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4o JmRoLT5wLCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiUSIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgt PnEsIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJHIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZkaC0+Zywg dmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlhlcGhlbUlVVCIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgt PnByaXZfa2V5LCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtSVVUIikpCi0rCQkJewotKwkJCWlmICghZG9f aGV4MmJuKCZkaC0+cHViX2tleSwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlllcGhlbUNBVlMiKSkKLSsJCQl7Ci0r CQkJaWYgKCFkb19oZXgyYm4oJnBlZXJrZXksIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQlpZiAoZG9fdmVyaWZ5ID09IDApCi0rCQkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0 LCBkaCwgcGVlcmtleSwgbWQsCi0rCQkJCQkJCU5VTEwsIDApOwotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIkNBVlNIYXNoWloiKSkKLSsJCQl7Ci0rCQkJaWYgKCFtZCkKLSsJ CQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlyaGFzaCA9IGhleDJiaW5fbSh2YWx1ZSwgJnJoYXNo bGVuKTsKLSsJCQlpZiAoIXJoYXNoIHx8IHJoYXNobGVuICE9IE1fRVZQX01EX3NpemUobWQpKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwg cGVlcmtleSwgbWQsCi0rCQkJCQkJCXJoYXNoLCByaGFzaGxlbik7Ci0rCQkJfQotKwkJfQotKwlp ZiAoaW4gJiYgaW4gIT0gc3RkaW4pCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIG91dCAh PSBzdGRvdXQpCi0rCQlmY2xvc2Uob3V0KTsKLSsJcmV0dXJuIDA7Ci0rCXBhcnNlX2Vycm9yOgot KwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIFBhcnNpbmcgcmVxdWVzdCBmaWxlXG4iKTsKLSsJZXhp dCgxKTsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2RyYmd2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2RyYmd2cy5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDQ5MjMxNzggKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMJMjAxNC0wNS0wNiAx NjoyOTo1MC41NDQ5MjMxNzggKzAyMDAKLUBAIC0wLDAgKzEsNDE2IEBACi0rLyogZmlwcy9yYW5k L2ZpcHNfZHJiZ3ZzLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKwotKyNkZWZpbmUgT1BFTlNTTF9G SVBTQVBJCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBEUkJHIHN1cHBvcnRcbiIpOwot KyAgICByZXR1cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRpYyBpbnQg ZHBhcnNlX21kKGNoYXIgKnN0cikKLSsJewotKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKLSsJCXsK LSsJCWNhc2UgMToKLSsJCXJldHVybiBOSURfc2hhMTsKLSsKLSsJCWNhc2UgMjI0OgotKwkJcmV0 dXJuIE5JRF9zaGEyMjQ7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCXJldHVybiBOSURfc2hhMjU2Owot KwotKwkJY2FzZSAzODQ6Ci0rCQlyZXR1cm4gTklEX3NoYTM4NDsKLSsKLSsJCWNhc2UgNTEyOgot KwkJcmV0dXJuIE5JRF9zaGE1MTI7Ci0rCi0rCQl9Ci0rCi0rCXJldHVybiBOSURfdW5kZWY7Ci0r CX0KLSsKLStzdGF0aWMgaW50IHBhcnNlX2VjKGNoYXIgKnN0cikKLSsJewotKwlpbnQgY3VydmVf bmlkLCBtZF9uaWQ7Ci0rCWNoYXIgKm1kOwotKwltZCA9IHN0cmNocihzdHIsICcgJyk7Ci0rCWlm ICghbWQpCi0rCQlyZXR1cm4gTklEX3VuZGVmOwotKwlpZiAoIXN0cm5jbXAoc3RyLCAiW1AtMjU2 IiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKLSsJZWxzZSBpZiAo IXN0cm5jbXAoc3RyLCAiW1AtMzg0IiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDM4NHIx OwotKwllbHNlIGlmICghc3RybmNtcChzdHIsICJbUC01MjEiLCA2KSkKLSsJCWN1cnZlX25pZCA9 IE5JRF9zZWNwNTIxcjE7Ci0rCWVsc2UKLSsJCXJldHVybiBOSURfdW5kZWY7Ci0rCW1kX25pZCA9 IGRwYXJzZV9tZChtZCk7Ci0rCWlmIChtZF9uaWQgPT0gTklEX3VuZGVmKQotKwkJcmV0dXJuIE5J RF91bmRlZjsKLSsJcmV0dXJuIChjdXJ2ZV9uaWQgPDwgMTYpIHwgbWRfbmlkOwotKwl9Ci0rCi0r c3RhdGljIGludCBwYXJzZV9hZXMoY2hhciAqc3RyLCBpbnQgKnBkZikKLSsJewotKwotKwlpZiAo IXN0cm5jbXAoc3RyICsgOSwgIm5vIiwgMikpCi0rCQkqcGRmID0gMDsKLSsJZWxzZQotKwkJKnBk ZiA9IERSQkdfRkxBR19DVFJfVVNFX0RGOwotKwotKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKLSsJ CXsKLSsJCWNhc2UgMTI4OgotKwkJcmV0dXJuIE5JRF9hZXNfMTI4X2N0cjsKLSsKLSsJCWNhc2Ug MTkyOgotKwkJcmV0dXJuIE5JRF9hZXNfMTkyX2N0cjsKLSsKLSsJCWNhc2UgMjU2OgotKwkJcmV0 dXJuIE5JRF9hZXNfMjU2X2N0cjsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gTklEX3VuZGVm OwotKwotKwkJfQotKwl9Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJdW5zaWduZWQgY2hh ciAqZW50OwotKwlzaXplX3QgZW50bGVuOwotKwl1bnNpZ25lZCBjaGFyICpub25jZTsKLSsJc2l6 ZV90IG5vbmNlbGVuOwotKwl9IFRFU1RfRU5UOwotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRy b3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1h eF9sZW4pCi0rCXsKLSsJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgp OwotKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OwotKwlyZXR1cm4gdC0+ZW50bGVu OwotKwl9Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNp Z25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJVEVTVF9FTlQg KnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKwkqcG91dCA9ICh1bnNpZ25lZCBj aGFyICopdC0+bm9uY2U7Ci0rCXJldHVybiB0LT5ub25jZWxlbjsKLSsJfQotKwotKyNpZmRlZiBG SVBTX0FMR1ZTCi0raW50IGZpcHNfZHJiZ3ZzX21haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0r I2Vsc2UKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwlG SUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwlEUkJHX0NUWCAqZGN0eCA9IE5VTEw7Ci0r CVRFU1RfRU5UIHQ7Ci0rCWludCByLCBuaWQgPSAwOwotKwlpbnQgcHIgPSAwOwotKwljaGFyIGJ1 ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKLSsJdW5zaWduZWQgY2hhciByYW5kb3V0WzIwNDhdOwotKwlj aGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKLSsKLSsJdW5zaWduZWQgY2hhciAq ZW50ID0gTlVMTCwgKm5vbmNlID0gTlVMTCwgKnBlcnMgPSBOVUxMLCAqYWRpbiA9IE5VTEw7Ci0r CWxvbmcgZW50bGVuLCBub25jZWxlbiwgcGVyc2xlbiwgYWRpbmxlbjsKLSsJaW50IGRmID0gMDsK LSsKLSsJZW51bSBkdHlwZSB7IERSQkdfTk9ORSwgRFJCR19DVFIsIERSQkdfSEFTSCwgRFJCR19I TUFDLCBEUkJHX0RVQUxfRUMgfQotKwkJZHJiZ190eXBlID0gRFJCR19OT05FOwotKwotKwlpbnQg cmFuZG91dGxlbiA9IDA7Ci0rCi0rCWludCBnZW4gPSAwOwotKwotKwlmaXBzX2FsZ3Rlc3RfaW5p dCgpOwotKwotKwlpZiAoYXJnYyA9PSAzKQotKwkJewotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOwotKwkJaWYgKCFpbikKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVu aW5nIGlucHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJb3V0ID0gZm9wZW4o YXJndlsyXSwgInciKTsKLSsJCWlmICghb3V0KQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJ fQotKwllbHNlIGlmIChhcmdjID09IDEpCi0rCQl7Ci0rCQlpbiA9IHN0ZGluOwotKwkJb3V0ID0g c3Rkb3V0OwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiJXMgKGluZmls ZSBvdXRmaWxlKVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCXdoaWxlIChm Z2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWZwdXRzKGJ1Ziwg b3V0KTsKLSsJCWlmIChkcmJnX3R5cGUgPT0gRFJCR19OT05FKQotKwkJCXsKLSsJCQlpZiAoc3Ry c3RyKGJ1ZiwgIkNUUl9EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfQ1RSOwotKwkJCWVs c2UgaWYgKHN0cnN0cihidWYsICJIYXNoX0RSQkciKSkKLSsJCQkJZHJiZ190eXBlID0gRFJCR19I QVNIOwotKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJITUFDX0RSQkciKSkKLSsJCQkJZHJiZ190 eXBlID0gRFJCR19ITUFDOwotKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJEdWFsX0VDX0RSQkci KSkKLSsJCQkJZHJiZ190eXBlID0gRFJCR19EVUFMX0VDOwotKwkJCWVsc2UKLSsJCQkJY29udGlu dWU7Ci0rCQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gNCAmJiAhc3RybmNtcChidWYsICJbU0hB LSIsIDUpKQotKwkJCXsKLSsJCQluaWQgPSBkcGFyc2VfbWQoYnVmKTsKLSsJCQlpZiAobmlkID09 IE5JRF91bmRlZikKLSsJCQkJZXhpdCgxKTsKLSsJCQlpZiAoZHJiZ190eXBlID09IERSQkdfSE1B QykKLSsJCQkJewotKwkJCQlzd2l0Y2ggKG5pZCkKLSsJCQkJCXsKLSsJCQkJCWNhc2UgTklEX3No YTE6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEExOwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJ CQljYXNlIE5JRF9zaGEyMjQ6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEyMjQ7Ci0rCQkJ CQlicmVhazsKLSsKLSsJCQkJCWNhc2UgTklEX3NoYTI1NjoKLSsJCQkJCW5pZCA9IE5JRF9obWFj V2l0aFNIQTI1NjsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhMzg0OgotKwkJ CQkJbmlkID0gTklEX2htYWNXaXRoU0hBMzg0OwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQljYXNl IE5JRF9zaGE1MTI6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEE1MTI7Ci0rCQkJCQlicmVh azsKLSsKLSsJCQkJCWRlZmF1bHQ6Ci0rCQkJCQlleGl0KDEpOwotKwkJCQkJfQotKwkJCQl9Ci0r CQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW0FFUy0iLCA1 KSkKLSsJCQl7Ci0rCQkJbmlkID0gcGFyc2VfYWVzKGJ1ZiwgJmRmKTsKLSsJCQlpZiAobmlkID09 IE5JRF91bmRlZikKLSsJCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlpZiAoc3RybGVuKGJ1ZikgPiAx MiAmJiAhc3RybmNtcChidWYsICJbUC0iLCAzKSkKLSsJCQl7Ci0rCQkJbmlkID0gcGFyc2VfZWMo YnVmKTsKLSsJCQlpZiAobmlkID09IE5JRF91bmRlZikKLSsJCQkJZXhpdCgxKTsKLSsJCQl9Ci0r CQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250 aW51ZTsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJbUHJlZGljdGlvblJlc2lzdGFuY2Ui KSkKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAodmFsdWUsICJUcnVlXSIpKQotKwkJCQlwciA9IDE7 Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIkZhbHNlXSIpKQotKwkJCQlwciA9IDA7Ci0r CQkJZWxzZQotKwkJCQlleGl0KDEpOwotKwkJCX0KLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQs ICJFbnRyb3B5SW5wdXQiKSkKLSsJCQl7Ci0rCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50 bGVuKTsKLSsJCQl0LmVudCA9IGVudDsKLSsJCQl0LmVudGxlbiA9IGVudGxlbjsKLSsJCQl9Ci0r Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiTm9uY2UiKSkKLSsJCQl7Ci0rCQkJbm9uY2UgPSBo ZXgyYmluX20odmFsdWUsICZub25jZWxlbik7Ci0rCQkJdC5ub25jZSA9IG5vbmNlOwotKwkJCXQu bm9uY2VsZW4gPSBub25jZWxlbjsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAi UGVyc29uYWxpemF0aW9uU3RyaW5nIikpCi0rCQkJewotKwkJCXBlcnMgPSBoZXgyYmluX20odmFs dWUsICZwZXJzbGVuKTsKLSsJCQlpZiAobmlkID09IDApCi0rCQkJCXsKLSsJCQkJZnByaW50Zihz dGRlcnIsICJEUkJHIHR5cGUgbm90IHJlY29nbmlzZWQhXG4iKTsKLSsJCQkJZXhpdCAoMSk7Ci0r CQkJCX0KLSsJCQlkY3R4ID0gRklQU19kcmJnX25ldyhuaWQsIGRmIHwgRFJCR19GTEFHX1RFU1Qp OwotKwkJCWlmICghZGN0eCkKLSsJCQkJZXhpdCAoMSk7Ci0rCQkJRklQU19kcmJnX3NldF9jYWxs YmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLAotKwkJCQkJCQl0ZXN0X25vbmNlLCAwKTsK LSsJCQlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKLSsJCQlyYW5kb3V0bGVuID0g KGludClGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKGRjdHgpOwotKwkJCXIgPSBGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgcGVycywgcGVyc2xlbik7Ci0rCQkJaWYgKCFyKQotKwkJCQl7Ci0r CQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgaW5zdGFudGlhdGluZyBEUkJHXG4iKTsKLSsJCQkJ ZXhpdCgxKTsKLSsJCQkJfQotKwkJCU9QRU5TU0xfZnJlZShwZXJzKTsKLSsJCQlPUEVOU1NMX2Zy ZWUoZW50KTsKLSsJCQlPUEVOU1NMX2ZyZWUobm9uY2UpOwotKwkJCWVudCA9IG5vbmNlID0gcGVy cyA9IE5VTEw7Ci0rCQkJZ2VuID0gMDsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3Jk LCAiQWRkaXRpb25hbElucHV0IikpCi0rCQkJewotKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUs ICZhZGlubGVuKTsKLSsJCQlpZiAocHIpCi0rCQkJCWNvbnRpbnVlOwotKwkJCXIgPSBGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgcmFuZG91dGxlbiwgMCwKLSsJCQkJCQkJCWFkaW4s IGFkaW5sZW4pOwotKwkJCWlmICghcikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJ CWlmICghcikKLSsJCQkJZXhpdCgxKTsKLSsJCQlPUEVOU1NMX2ZyZWUoYWRpbik7Ci0rCQkJYWRp biA9IE5VTEw7Ci0rCQkJZ2VuKys7Ci0rCQkJfQotKwotKwkJaWYgKHByKQotKwkJCXsKLSsJCQlp ZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0UFIiKSkKLSsJCQkJewotKwkJCQllbnQg PSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOwotKwkJCQl0LmVudCA9IGVudDsKLSsJCQkJdC5l bnRsZW4gPSBlbnRsZW47Ci0rCQkJCXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwKLSsJCQkJ CQkJcmFuZG91dCwgcmFuZG91dGxlbiwKLSsJCQkJCQkJMSwgYWRpbiwgYWRpbmxlbik7Ci0rCQkJ CWlmICghcikKLSsJCQkJCXsKLSsJCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJCSJFcnJvciBn ZW5lcmF0aW5nIERSQkcgYml0c1xuIik7Ci0rCQkJCQlleGl0KDEpOwotKwkJCQkJfQotKwkJCQlP UEVOU1NMX2ZyZWUoYWRpbik7Ci0rCQkJCU9QRU5TU0xfZnJlZShlbnQpOwotKwkJCQlhZGluID0g ZW50ID0gTlVMTDsKLSsJCQkJZ2VuKys7Ci0rCQkJCX0KLSsJCQl9Ci0rCQlpZiAoIXN0cmNtcChr ZXl3b3JkLCAiRW50cm9weUlucHV0UmVzZWVkIikpCi0rCQkJewotKwkJCWVudCA9IGhleDJiaW5f bSh2YWx1ZSwgJmVudGxlbik7Ci0rCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJdC5lbnRsZW4gPSBlbnRs ZW47Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dFJlc2Vl ZCIpKQotKwkJCXsKLSsJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7Ci0rCQkJ RklQU19kcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuKTsKLSsJCQlPUEVOU1NMX2ZyZWUo ZW50KTsKLSsJCQlPUEVOU1NMX2ZyZWUoYWRpbik7Ci0rCQkJZW50ID0gYWRpbiA9IE5VTEw7Ci0r CQkJfQotKwkJaWYgKGdlbiA9PSAyKQotKwkJCXsKLSsJCQlPdXRwdXRWYWx1ZSgiUmV0dXJuZWRC aXRzIiwgcmFuZG91dCwgcmFuZG91dGxlbiwKLSsJCQkJCQkJCQlvdXQsIDApOwotKwkJCUZJUFNf ZHJiZ19mcmVlKGRjdHgpOwotKwkJCWRjdHggPSBOVUxMOwotKwkJCWdlbiA9IDA7Ci0rCQkJfQot KwotKwkJfQotKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAo b3V0ICYmIG91dCAhPSBzdGRvdXQpCi0rCQlmY2xvc2Uob3V0KTsKLSsJcmV0dXJuIDA7Ci0rCX0K LSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlw c19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3Zz LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBz CTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ0OTIzMTc4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDQ5MjMx NzggKzAyMDAKLUBAIC0wLDAgKzEsNTM3IEBACi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQ UyBEU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+ Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZvaWQgcGJuKGNvbnN0IGNo YXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hh ciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwl0bXAgPSBPUEVOU1NMX21hbGxv YyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFs bG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwlCTl9ibjJiaW4oYm4sIHRt cCk7Ci0rCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KQotKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKLSsJZnB1dHMoIlxuIiwgc3Rkb3V0KTsKLSsJ T1BFTlNTTF9mcmVlKHRtcCk7Ci0rCXJldHVybjsKLSsJfQotKwotK3ZvaWQgcHJpbWVzKCkKLSsg ICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0MF07Ci0rICAg IGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBi dWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKLSsJICAgIHsKLSsJICAgIEJJR05VTSAqcHA7Ci0r Ci0rCSAgICBwcD1CTl9uZXcoKTsKLSsJICAgIGRvX2hleDJibigmcHAsdmFsdWUpOwotKwkgICAg cHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAotKwkJICAgQk5faXNfcHJpbWVfZXgocHAsMjAsTlVMTCxO VUxMKSA/ICdQJyA6ICdGJyk7Ci0rCSAgICB9CSAgICAKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBw cWcoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07 Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MDsKLSsKLSsgICAg d2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFw YXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhi dWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIltt b2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJOIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJICAgIHByaW50 ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwotKwkgICAgd2hpbGUobi0tKQotKwkJewotKwkJ dW5zaWduZWQgY2hhciBzZWVkWzIwXTsKLSsJCURTQSAqZHNhOwotKwkJaW50IGNvdW50ZXI7Ci0r CQl1bnNpZ25lZCBsb25nIGg7Ci0rCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKLSsKLSsJCWlmICgh RFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291bnRlciwmaCxO VUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9 Ci0rCQlwYm4oIlAiLGRzYS0+cCk7Ci0rCQlwYm4oIlEiLGRzYS0+cSk7Ci0rCQlwYm4oIkciLGRz YS0+Zyk7Ci0rCQlwdigiU2VlZCIsc2VlZCwyMCk7Ci0rCQlwcmludGYoImMgPSAlZFxuIixjb3Vu dGVyKTsKLSsJCXByaW50ZigiSCA9ICVseFxuIixoKTsKLSsJCXB1dGMoJ1xuJyxzdGRvdXQpOwot KwkJfQotKwkgICAgfQotKwllbHNlCi0rCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsKLSsJfQotKyAg ICB9Ci0rCi0rdm9pZCBwcWd2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAg ICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklH TlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7Ci0rICAgIGludCBjb3VudGVyLCBj b3VudGVyMjsKLSsgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKLSsgICAgRFNBICpkc2E9TlVMTDsK LSsgICAgaW50IG5tb2Q9MDsKLSsgICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRdOwotKwotKyAg ICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRz KGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWZwdXRzKGJ1Ziwgc3Rkb3V0KTsK LSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwot KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgcD1oZXgyYm4odmFsdWUpOwot KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgcT1oZXgyYm4odmFsdWUpOwot KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgZz1oZXgyYm4odmFsdWUpOwot KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQotKwkgICAgewotKwkgICAgaW50IHNs ZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKLSsJICAgIGlmIChzbGVuICE9IDIwKQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7Ci0rCQlleGl0 ICgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImMiKSkKLSsJ ICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSCIp KQotKwkgICAgewotKwkgICAgaCA9IGF0b2kodmFsdWUpOwotKwkgICAgaWYgKCFwIHx8ICFxIHx8 ICFnKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7Ci0rCQlleGl0 ICgxKTsKLSsJCX0KLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50ZXIyLCZoMixO VUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9 Ci0rICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChkc2EtPnEsIHEp IHx8IEJOX2NtcChkc2EtPmcsIGcpCi0rCQl8fCAoY291bnRlciAhPSBjb3VudGVyMikgfHwgKGgg IT0gaDIpKQotKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAgICBlbHNlCi0rCSAg ICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCSAgICBCTl9m cmVlKHEpOwotKwkgICAgQk5fZnJlZShnKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgcSA9IE5V TEw7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRz YSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKy8qIEtleXBhaXIgdmVyaWZpY2F0 aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZJUFMxNDAt MgotKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0IHRvIHBlcmZv cm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKLSsgKiBvdXRwdXQgb2YgdGhlIEtleVBhaXIgdGVzdC4K LSsgKi8KLSsKLStzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBCSUdOVU0gKnAs IEJJR05VTSAqcSwgQklHTlVNICpnLAotKwkJCQkJCQlCTl9DVFggKmN0eCkKLSsgICAgewotKyAg ICBCSUdOVU0gKnJlbSA9IE5VTEw7Ci0rICAgIGlmIChCTl9udW1fYml0cyhwKSAhPSBubW9kKQot KwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkKLSsJcmV0dXJuIDA7 Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkg IT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChxLCBCTl9wcmltZV9j aGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJlbSA9IEJOX25ldygp OwotKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pCi0r ICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQotKwl8fCAhQk5fbW9kX2V4 cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQotKwl7Ci0rCUJOX2ZyZWUo cmVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsgICAgLyogVG9kbzogY2hlY2sgZyAqLwotKyAgICBC Tl9mcmVlKHJlbSk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9pZCBrZXl2ZXIoKQot KyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAg IGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxM LCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOwotKyAgICBCSUdOVU0gKlkyOwotKyAg ICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0rICAgIGludCBubW9kPTAsIHBhcmFtY2hlY2sgPSAwOwot KwotKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7Ci0rICAgIFkyID0gQk5fbmV3KCk7Ci0rCi0rICAg IHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMo YnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJb bW9kIikpCi0rCSAgICB7Ci0rCSAgICBpZiAocCkKLSsJCUJOX2ZyZWUocCk7Ci0rCSAgICBwID0g TlVMTDsKLSsJICAgIGlmIChxKQotKwkJQk5fZnJlZShxKTsKLSsJICAgIHEgPSBOVUxMOwotKwkg ICAgaWYgKGcpCi0rCQlCTl9mcmVlKGcpOwotKwkgICAgZyA9IE5VTEw7Ci0rCSAgICBwYXJhbWNo ZWNrID0gMDsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJYIikpCi0rCSAgICBYPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICB7Ci0rCSAgICBZPWhleDJibih2YWx1ZSk7Ci0rCSAg ICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixw KTsKLSsJICAgIHBibigiUSIscSk7Ci0rCSAgICBwYm4oIkciLGcpOwotKwkgICAgcGJuKCJYIixY KTsKLSsJICAgIHBibigiWSIsWSk7Ci0rCSAgICBpZiAoIXBhcmFtY2hlY2spCi0rCQl7Ci0rCQlp ZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKLSsJCQlwYXJhbWNoZWNrID0g MTsKLSsJCWVsc2UKLSsJCQlwYXJhbWNoZWNrID0gLTE7Ci0rCQl9Ci0rCSAgICBpZiAocGFyYW1j aGVjayAhPSAxKQotKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgIGVsc2UKLSsJ CXsKLSsJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9jbXAoWTIsIFkp KQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgICAgIGVsc2UKLSsJICAg IAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJCX0KLSsJICAgIEJOX2ZyZWUoWCk7Ci0rCSAg ICBCTl9mcmVlKFkpOwotKwkgICAgWCA9IE5VTEw7Ci0rCSAgICBZID0gTlVMTDsKLSsJICAgIH0K LSsJfQotKwlpZiAocCkKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCWlmIChxKQotKwkgICAgQk5fZnJl ZShxKTsKLSsJaWYgKGcpCi0rCSAgICBCTl9mcmVlKGcpOwotKwlpZiAoWTIpCi0rCSAgICBCTl9m cmVlKFkyKTsKLSsgICAgfQotKwotK3ZvaWQga2V5cGFpcigpCi0rICAgIHsKLSsgICAgY2hhciBi dWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZh bHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7 Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9pKHZh bHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsKLSsJICAgIERT QSAqZHNhOwotKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBwcmludGYoIlttb2Qg PSAlZF1cblxuIixubW9kKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYg KCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxO VUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJ ICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigi RyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwotKwkgICAgd2hpbGUobi0t KQotKwkJewotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCQkJewotKwkJCWRvX3By aW50X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwotKwkJcGJuKCJYIixkc2EtPnBy aXZfa2V5KTsKLSsJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJCXB1dGMoJ1xuJyxzdGRvdXQp OwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ2dlbigpCi0rICAgIHsK LSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICBEU0EgKmRzYT1OVUxMOwot KwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewot KwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJ CWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5 d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIHBy aW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgaWYgKGRzYSkKLSsJCUZJUFNfZHNh X2ZyZWUoZHNhKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkK LSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBi bigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigiRyIsZHNh LT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiTXNnIikpCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0 XTsKLSsJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBpbnQgc2xl bjsKLSsJICAgIGludCBuOwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICBFVlBfTURfQ1RYIG1j dHg7Ci0rCSAgICBEU0FfU0lHICpzaWc7Ci0rCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwot KwotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNnIixtc2csbik7Ci0r Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vy cm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7 Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsK LSsKLSsJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7Ci0rCSAg ICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKLSsJICAgIEVWUF9TaWduRmluYWwoJm1j dHgsIHNidWYsICZzbGVuLCAmcGspOwotKwotKwkgICAgc2lnID0gRFNBX1NJR19uZXcoKTsKLSsJ ICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKLSsKLSsJICAgIHBibigi UiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRv dXQpOwotKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAo Jm1jdHgpOwotKwkgICAgfQotKwl9Ci0rCWlmIChkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7 Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ3ZlcigpCi0rICAgIHsKLSsgICAgRFNBICpkc2E9TlVMTDsK LSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgdW5zaWdu ZWQgY2hhciBtc2dbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50 IG5tb2Q9MCwgbj0wOwotKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOwotKwotKyAgICBzaWct PnIgPSBOVUxMOwotKyAgICBzaWctPnMgPSBOVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYs c2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJ Y29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewot KwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIGlmKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUo ZHNhKTsKLSsJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIlAiKSkKLSsJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgZHNhLT5xPWhleDJibih2YWx1ZSk7Ci0rCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICB7Ci0rCSAgICBkc2EtPmc9aGV4MmJu KHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAg cGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixk c2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cp OwotKwkgICAgcHYoIk1zZyIsbXNnLG4pOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiWSIpKQotKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJSIikpCi0rCSAgICBzaWctPnI9aGV4MmJuKHZhbHVlKTsKLSsJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKLSsJICAgIHsKLSsJICAgIEVWUF9NRF9DVFggbWN0 eDsKLSsJICAgIEVWUF9QS0VZIHBrOwotKwkgICAgdW5zaWduZWQgY2hhciBzaWdidWZbNjBdOwot KwkgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgcjsKLSsJICAgIEVWUF9NRF9DVFhf aW5pdCgmbWN0eCk7Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOwotKwkgICAgcGsucGtl eS5kc2EgPSBkc2E7Ci0rCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKLSsJCi0rCSAgICBwYm4o IlkiLGRzYS0+cHViX2tleSk7Ci0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0rCSAgICBwYm4oIlMi LHNpZy0+cyk7Ci0rCi0rCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShzaWdidWYsIHNp Zyk7Ci0rCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7Ci0r CSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAgciA9IEVWUF9WZXJp ZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOwotKwkgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKLSsJCi0rCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCByID09IDEgPyAn UCcgOiAnRicpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCX0KLSsgICAg fQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGlmKGFy Z2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xwcWd2ZXJ8a2V5 cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBp ZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgx KTsKLSsJfQotKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCi0rCXByaW1lcygpOwot KyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCi0rCXBxZygpOwotKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCi0rCXBxZ3ZlcigpOwotKyAgICBlbHNlIGlm KCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQotKwlrZXlwYWlyKCk7Ci0rICAgIGVsc2UgaWYo IXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKLSsJa2V5dmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0 cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKLSsJc2lnZ2VuKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNt cChhcmd2WzFdLCJzaWd2ZXIiKSkKLSsJc2lndmVyKCk7Ci0rICAgIGVsc2UKLSsJewotKwlmcHJp bnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwlleGl0KDEp OwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYwotLS0tIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5 OjUwLjU0NDkyMzE3OCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMv Zmlwc19nY210ZXN0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDQ5MjMxNzggKzAyMDAKLUBAIC0w LDAgKzEsNTcxIEBACi0rLyogZmlwcy9hZXMvZmlwc19nY210ZXN0LmMgKi8KLSsvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq LwotKwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3Bl bnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5o PgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50Zigi Tm8gRklQUyBHQ00gc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vsc2UKLSsK LSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0 eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZvaWQgZ2NtdGVz dChGSUxFICppbiwgRklMRSAqb3V0LCBpbnQgZW5jcnlwdCkKLSsJewotKwljaGFyIGJ1ZlsyMDQ4 XTsKLSsJY2hhciBsYnVmWzIwNDhdOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWludCBr ZXlsZW4gPSAtMSwgaXZsZW4gPSAtMSwgYWFkbGVuID0gLTEsIHRhZ2xlbiA9IC0xLCBwdGxlbiA9 IC0xOwotKwlpbnQgcnY7Ci0rCWxvbmcgbDsKLSsJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwg Kml2ID0gTlVMTCwgKmFhZCA9IE5VTEwsICp0YWcgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpj dCA9IE5VTEwsICpwdCA9IE5VTEw7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJY29uc3QgRVZQ X0NJUEhFUiAqZ2NtID0gTlVMTDsKLSsJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7Ci0rCi0r CXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQotKwkJewotKwkJZnB1dHMo YnVmLG91dCk7Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCQljb250aW51ZTsKLSsJCWlmKCFzdHJjbXAoa2V5d29yZCwiW0tleWxlbiIpKQotKwkJ CXsKLSsJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoa2V5bGVuID09IDEyOCkKLSsJ CQkJZ2NtID0gRVZQX2Flc18xMjhfZ2NtKCk7Ci0rCQkJZWxzZSBpZiAoa2V5bGVuID09IDE5MikK LSsJCQkJZ2NtID0gRVZQX2Flc18xOTJfZ2NtKCk7Ci0rCQkJZWxzZSBpZiAoa2V5bGVuID09IDI1 NikKLSsJCQkJZ2NtID0gRVZQX2Flc18yNTZfZ2NtKCk7Ci0rCQkJZWxzZSAKLSsJCQkJewotKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVkIGtleWxlbiAlZFxuIiwKLSsJCQkJCQkJa2V5 bGVuKTsKLSsJCQkJfQotKwkJCWtleWxlbiA+Pj0gMzsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJbSVZsZW4iKSkKLSsJCQlpdmxlbiA9IGF0b2kodmFsdWUpID4+IDM7Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbQUFEbGVuIikpCi0rCQkJYWFkbGVuID0gYXRv aSh2YWx1ZSkgPj4gMzsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltUYWdsZW4iKSkK LSsJCQl0YWdsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiW1BUbGVuIikpCi0rCQkJcHRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkJCXsKLSsJCQlrZXkgPSBoZXgyYmluX20odmFs dWUsICZsKTsKLSsJCQlpZiAobCAhPSBrZXlsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRl cnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0K LSsJCQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSVYiKSkKLSsJCQl7Ci0rCQkJaXYg PSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBpdmxlbikKLSsJCQkJewotKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBJViBsZW5ndGhcbiIpOwotKwkJCQlleGl0 KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlBUIikpCi0r CQkJewotKwkJCXB0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gcHRsZW4p Ci0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgUFQgbGVuZ3RoXG4i KTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJDVCIpKQotKwkJCXsKLSsJCQljdCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlm IChsICE9IHB0bGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50 IENUIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiQUFEIikpCi0rCQkJewotKwkJCWFhZCA9IGhleDJiaW5fbSh2YWx1 ZSwgJmwpOwotKwkJCWlmIChsICE9IGFhZGxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIkluY29uc2lzdGVudCBBQUQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQot KwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJUYWciKSkKLSsJCQl7Ci0rCQkJdGFn ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gdGFnbGVuKQotKwkJCQl7Ci0r CQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFRhZyBsZW5ndGhcbiIpOwotKwkJCQll eGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJaWYgKGVuY3J5cHQgJiYgcHQgJiYgYWFkICYmIChp diB8fCBlbmNyeXB0PT0xKSkKLSsJCQl7Ci0rCQkJdGFnID0gT1BFTlNTTF9tYWxsb2ModGFnbGVu KTsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAxKTsKLSsJCQkv KiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCi0rCQkJTV9FVlBfQ0lQSEVS X0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7Ci0rCQkJ RklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4s IDApOwotKwkJCWlmIChlbmNyeXB0ID09IDEpCi0rCQkJCXsKLSsJCQkJc3RhdGljIHVuc2lnbmVk IGNoYXIgaXZfZml4ZWRbNF0gPSB7MSwyLDMsNH07Ci0rCQkJCWlmICghaXYpCi0rCQkJCQlpdiA9 IE9QRU5TU0xfbWFsbG9jKGl2bGVuKTsKLSsJCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEws IGtleSwgTlVMTCwgMSk7Ci0rCQkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsCi0rCQkJCQkJ RVZQX0NUUkxfR0NNX1NFVF9JVl9GSVhFRCwKLSsJCQkJCQk0LCBpdl9maXhlZCk7Ci0rCQkJCWlm ICghRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKLSsJCQkJCUVWUF9DVFJMX0dDTV9JVl9HRU4s IDAsIGl2KSkKLSsJCQkJCXsKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiSVYgZ2VuIGVycm9yXG4i KTsKLSsJCQkJCWV4aXQoMSk7Ci0rCQkJCQl9Ci0rCQkJCU91dHB1dFZhbHVlKCJJViIsIGl2LCBp dmxlbiwgb3V0LCAwKTsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJRklQU19jaXBoZXJpbml0KCZj dHgsIE5VTEwsIGtleSwgaXYsIDEpOwotKwotKwotKwkJCWlmIChhYWRsZW4pCi0rCQkJCUZJUFNf Y2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKLSsJCQlpZiAocHRsZW4pCi0rCQkJCXsK LSsJCQkJY3QgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7Ci0rCQkJCXJ2ID0gRklQU19jaXBoZXIo JmN0eCwgY3QsIHB0LCBwdGxlbik7Ci0rCQkJCX0KLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxM LCBOVUxMLCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01f R0VUX1RBRywKLSsJCQkJCQkJCXRhZ2xlbiwgdGFnKTsJCi0rCQkJT3V0cHV0VmFsdWUoIkNUIiwg Y3QsIHB0bGVuLCBvdXQsIDApOwotKwkJCU91dHB1dFZhbHVlKCJUYWciLCB0YWcsIHRhZ2xlbiwg b3V0LCAwKTsKLSsJCQlpZiAoaXYpCi0rCQkJCU9QRU5TU0xfZnJlZShpdik7Ci0rCQkJaWYgKGFh ZCkKLSsJCQkJT1BFTlNTTF9mcmVlKGFhZCk7Ci0rCQkJaWYgKGN0KQotKwkJCQlPUEVOU1NMX2Zy ZWUoY3QpOwotKwkJCWlmIChwdCkKLSsJCQkJT1BFTlNTTF9mcmVlKHB0KTsKLSsJCQlpZiAoa2V5 KQotKwkJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJCQlpZiAodGFnKQotKwkJCQlPUEVOU1NMX2Zy ZWUodGFnKTsKLSsJCQlpdiA9IGFhZCA9IGN0ID0gcHQgPSBrZXkgPSB0YWcgPSBOVUxMOwotKwkJ CX0JCi0rCQlpZiAoIWVuY3J5cHQgJiYgdGFnKQotKwkJCXsKLSsJCQlGSVBTX2NpcGhlcmluaXQo JmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAwKTsKLSsJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRz IGZvciB0ZXN0aW5nICovCi0rCQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQ X0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0 eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOwotKwkJCUZJUFNfY2lwaGVyaW5p dCgmY3R4LCBOVUxMLCBrZXksIGl2LCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywgdGFnbGVuLCB0YWcpOwotKwkJCWlmIChhYWRsZW4pCi0r CQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKLSsJCQlpZiAocHRsZW4p Ci0rCQkJCXsKLSsJCQkJcHQgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7Ci0rCQkJCXJ2ID0gRklQ U19jaXBoZXIoJmN0eCwgcHQsIGN0LCBwdGxlbik7Ci0rCQkJCX0KLSsJCQlydiA9IEZJUFNfY2lw aGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOwotKwkJCWlmIChydiA8IDApCi0rCQkJCWZwcmludGYo b3V0LCAiRkFJTCIgUkVTUF9FT0wpOwotKwkJCWVsc2UKLSsJCQkJT3V0cHV0VmFsdWUoIlBUIiwg cHQsIHB0bGVuLCBvdXQsIDApOwotKwkJCWlmIChpdikKLSsJCQkJT1BFTlNTTF9mcmVlKGl2KTsK LSsJCQlpZiAoYWFkKQotKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKLSsJCQlpZiAoY3QpCi0rCQkJ CU9QRU5TU0xfZnJlZShjdCk7Ci0rCQkJaWYgKHB0KQotKwkJCQlPUEVOU1NMX2ZyZWUocHQpOwot KwkJCWlmIChrZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShrZXkpOwotKwkJCWlmICh0YWcpCi0rCQkJ CU9QRU5TU0xfZnJlZSh0YWcpOwotKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9 IE5VTEw7Ci0rCQkJfQotKwkJfQotKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCi0r CX0KLSsKLStzdGF0aWMgdm9pZCB4dHN0ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCi0rCXsKLSsJ Y2hhciBidWZbMjA0ODAwXTsKLSsJY2hhciBsYnVmWzIwNDgwMF07Ci0rCWNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKLSsJaW50IGlubGVuID0gMDsKLSsJaW50IGVuY3J5cHQgPSAwOwotKwlsb25nIGw7 Ci0rCXVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEwsICppdiA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNo YXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsK LSsJY29uc3QgRVZQX0NJUEhFUiAqeHRzID0gTlVMTDsKLSsJRklQU19jaXBoZXJfY3R4X2luaXQo JmN0eCk7Ci0rCi0rCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQotKwkJ ewotKwkJZnB1dHMoYnVmLG91dCk7Ci0rCQlpZiAoYnVmWzBdID09ICdbJyAmJiBzdHJsZW4oYnVm KSA+PSA5KQotKwkJCXsKLSsJCQlpZighc3RybmNtcChidWYsIltFTkNSWVBUXSIsIDkpKQotKwkJ CQllbmNyeXB0ID0gMTsKLSsJCQllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0RFQ1JZUFRdIiwgOSkp Ci0rCQkJCWVuY3J5cHQgPSAwOwotKwkJCX0KLSsJCWlmICAoIXBhcnNlX2xpbmUoJmtleXdvcmQs ICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJLZXkiKSkKLSsJCQl7Ci0rCQkJa2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0r CQkJaWYgKGwgPT0gMzIpCi0rCQkJCXh0cyA9IEVWUF9hZXNfMTI4X3h0cygpOwotKwkJCWVsc2Ug aWYgKGwgPT0gNjQpCi0rCQkJCXh0cyA9IEVWUF9hZXNfMjU2X3h0cygpOwotKwkJCWVsc2UKLSsJ CQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsK LSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJpIikpCi0rCQkJewotKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwg IT0gMTYpCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgaSBsZW5n dGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZihlbmNyeXB0 ICYmICFzdHJjbXAoa2V5d29yZCwiUFQiKSkKLSsJCQl7Ci0rCQkJaW5idWYgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKLSsJCQlpbmxlbiA9IGw7Ci0rCQkJfQotKwkJZWxzZSBpZighZW5jcnlwdCAm JiAhc3RyY21wKGtleXdvcmQsIkNUIikpCi0rCQkJewotKwkJCWluYnVmID0gaGV4MmJpbl9tKHZh bHVlLCAmbCk7Ci0rCQkJaW5sZW4gPSBsOwotKwkJCX0KLSsJCWlmIChpbmJ1ZikKLSsJCQl7Ci0r CQkJRklQU19jaXBoZXJpbml0KCZjdHgsIHh0cywga2V5LCBpdiwgZW5jcnlwdCk7Ci0rCQkJb3V0 YnVmID0gT1BFTlNTTF9tYWxsb2MoaW5sZW4pOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIG91dGJ1 ZiwgaW5idWYsIGlubGVuKTsKLSsJCQlPdXRwdXRWYWx1ZShlbmNyeXB0ID8gIkNUIjoiUFQiLCBv dXRidWYsIGlubGVuLCBvdXQsIDApOwotKwkJCU9QRU5TU0xfZnJlZShpbmJ1Zik7Ci0rCQkJT1BF TlNTTF9mcmVlKG91dGJ1Zik7Ci0rCQkJT1BFTlNTTF9mcmVlKGtleSk7Ci0rCQkJT1BFTlNTTF9m cmVlKGl2KTsKLSsJCQlpdiA9IGtleSA9IGluYnVmID0gb3V0YnVmID0gTlVMTDsKLSsJCQl9CQot KwkJfQotKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCi0rCX0KLSsKLStzdGF0aWMg dm9pZCBjY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCi0rCXsKLSsJY2hhciBidWZbMjAwMDQ4 XTsKLSsJY2hhciBsYnVmWzIwMDA0OF07Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJbG9u ZyBsOwotKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMLCAqTm9uY2UgPSBOVUxMOwotKwl1bnNp Z25lZCBjaGFyICpBZGF0YSA9IE5VTEwsICpQYXlsb2FkID0gTlVMTDsKLSsJdW5zaWduZWQgY2hh ciAqQ1QgPSBOVUxMOwotKwlpbnQgUGxlbiA9IC0xLCBObGVuID0gLTEsIFRsZW4gPSAtMSwgQWxl biA9IC0xOwotKwlpbnQgZGVjciA9IDA7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJY29uc3Qg RVZQX0NJUEhFUiAqY2NtID0gTlVMTDsKLSsJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7Ci0r Ci0rCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQotKwkJewotKwkJY2hh ciAqcDsKLSsJCWZwdXRzKGJ1ZixvdXQpOwotKwkJcmVkbzoKLSsJCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwotKwkJLyogSWYg c3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgemFwIHRoZW0gKi8KLSsJCWlmIChrZXl3b3Jk WzBdID09ICdbJykKLSsJCQl7Ci0rCQkJa2V5d29yZCsrOwotKwkJCXAgPSBzdHJjaHIodmFsdWUs ICddJyk7Ci0rCQkJaWYgKHApCi0rCQkJCSpwID0gMDsKLSsJCQl9Ci0rCQkvKiBTZWUgaWYgd2Ug aGF2ZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMKLSsJCSAqIGlmIHNvIGNv cHkgcmVzdCBvZiBsaW5lIGJhY2sgdG8gYnVmZmVyIGFuZCByZWRvIGxhdGVyLgotKwkJICovCi0r CQlwID0gc3RyY2hyKHZhbHVlLCAnLCcpOwotKwkJaWYgKHApCi0rCQkJewotKwkJCSpwID0gMDsK LSsJCQlzdHJjcHkoYnVmLCBwICsgMSk7Ci0rCQkJc3RyY2F0KGJ1ZiwgIlxuIik7Ci0rCQkJZGVj ciA9IDE7Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiUGxlbiIpKQotKwkJCVBsZW4g PSBhdG9pKHZhbHVlKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiTmxlbiIpKQotKwkJ CU5sZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiVGxlbiIp KQotKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwi QWxlbiIpKQotKwkJCUFsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWlmIChwKQotKwkJCWdvdG8gcmVk bzsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkJCXsKLSsJCQlpZiAoS2V5KQot KwkJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKLSsJCQlLZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsK LSsJCQlpZiAobCA9PSAxNikKLSsJCQkJY2NtID0gRVZQX2Flc18xMjhfY2NtKCk7Ci0rCQkJZWxz ZSBpZiAobCA9PSAyNCkKLSsJCQkJY2NtID0gRVZQX2Flc18xOTJfY2NtKCk7Ci0rCQkJZWxzZSBp ZiAobCA9PSAzMikKLSsJCQkJY2NtID0gRVZQX2Flc18yNTZfY2NtKCk7Ci0rCQkJZWxzZQotKwkJ CQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOwot KwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCJOb25jZSIpKQotKwkJCXsKLSsJCQlpZiAoTm9uY2UpCi0rCQkJCU9QRU5TU0xfZnJlZShOb25j ZSk7Ci0rCQkJTm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBObGVu KQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IG5vbmNlIGxlbmd0 aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsIlBheWxvYWQiKSAmJiAhZGVjcikKLSsJCQl7Ci0rCQkJUGF5bG9hZCA9IGhleDJi aW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChQbGVuICYmIGwgIT0gUGxlbikKLSsJCQkJewotKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxlbmd0aFxuIik7Ci0rCQkJ CWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkFk YXRhIikpCi0rCQkJewotKwkJCWlmIChBZGF0YSkKLSsJCQkJT1BFTlNTTF9mcmVlKEFkYXRhKTsK LSsJCQlBZGF0YSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChBbGVuICYmIGwgIT0g QWxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2Fk IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsIkNUIikgJiYgZGVjcikKLSsJCQl7Ci0rCQkJQ1QgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSAoUGxlbiArIFRsZW4pKQotKwkJCQl7Ci0rCQkJCWZw cmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7 Ci0rCQkJCX0KLSsJCQl9Ci0rCQlpZiAoUGF5bG9hZCkKLSsJCQl7Ci0rCQkJRklQU19jaXBoZXJp bml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwgMSk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwo JmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7Ci0rCQkJRklQU19jaXBoZXJf Y3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIFRsZW4sIDApOwotKwkJCUZJUFNf Y2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAxKTsKLSsKLSsJCQlGSVBTX2NpcGhl cigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBB ZGF0YSwgQWxlbik7Ci0rCQkJQ1QgPSBPUEVOU1NMX21hbGxvYyhQbGVuICsgVGxlbik7Ci0rCQkJ RklQU19jaXBoZXIoJmN0eCwgQ1QsIFBheWxvYWQsIFBsZW4pOwotKwkJCUZJUFNfY2lwaGVyX2N0 eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCBUbGVuLAotKwkJCQkJCUNUICsgUGxl bik7Ci0rCQkJT3V0cHV0VmFsdWUoIkNUIiwgQ1QsIFBsZW4gKyBUbGVuLCBvdXQsIDApOwotKwkJ CU9QRU5TU0xfZnJlZShDVCk7Ci0rCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOwotKwkJCUNUID0g UGF5bG9hZCA9IE5VTEw7Ci0rCQkJfQotKwkJaWYgKENUKQotKwkJCXsKLSsJCQlpbnQgcnY7Ci0r CQkJaW50IGxlbiA9IFBsZW4gPT0gMCA/IDE6IFBsZW47Ci0rCQkJRklQU19jaXBoZXJpbml0KCZj dHgsIGNjbSwgTlVMTCwgTlVMTCwgMCk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwg RVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0 cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsCi0rCQkJCQkJVGxlbiwgQ1QgKyBQbGVuKTsK LSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5LCBOb25jZSwgMCk7Ci0rCQkJRklQ U19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwg TlVMTCwgQWRhdGEsIEFsZW4pOwotKwkJCVBheWxvYWQgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwot KwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgUGF5bG9hZCwgQ1QsIFBsZW4pOwotKwkJCWlmIChy diA+PSAwKQotKwkJCQl7Ci0rCQkJCWlmIChydiA9PSAwKQotKwkJCQkJUGF5bG9hZFswXSA9IDA7 Ci0rCQkJCWZwdXRzKCJSZXN1bHQgPSBQYXNzIiBSRVNQX0VPTCwgb3V0KTsKLSsJCQkJT3V0cHV0 VmFsdWUoIlBheWxvYWQiLCBQYXlsb2FkLCBsZW4sIG91dCwgMCk7Ci0rCQkJCX0KLSsJCQllbHNl Ci0rCQkJCWZwdXRzKCJSZXN1bHQgPSBGYWlsIiBSRVNQX0VPTCwgb3V0KTsKLSsJCQlPUEVOU1NM X2ZyZWUoQ1QpOwotKwkJCU9QRU5TU0xfZnJlZShQYXlsb2FkKTsKLSsJCQlDVCA9IFBheWxvYWQg PSBOVUxMOwotKwkJCX0KLSsJCX0KLSsJaWYgKEtleSkKLSsJCU9QRU5TU0xfZnJlZShLZXkpOwot KwlpZiAoTm9uY2UpCi0rCQlPUEVOU1NMX2ZyZWUoTm9uY2UpOwotKwlpZiAoQWRhdGEpCi0rCQlP UEVOU1NMX2ZyZWUoQWRhdGEpOwotKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsKLSsJ fQotKwotKyNpZmRlZiBGSVBTX0FMR1ZTCi0raW50IGZpcHNfZ2NtdGVzdF9tYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKLSsjZWxzZQotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK LSsjZW5kaWYKLSsJewotKwlpbnQgZW5jcnlwdDsKLSsJaW50IHh0cyA9IDAsIGNjbSA9IDA7Ci0r CUZJTEUgKmluLCAqb3V0OwotKwlpZiAoYXJnYyA9PSA0KQotKwkJewotKwkJaW4gPSBmb3Blbihh cmd2WzJdLCAiciIpOwotKwkJaWYgKCFpbikKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJF cnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJb3V0 ID0gZm9wZW4oYXJndlszXSwgInciKTsKLSsJCWlmICghb3V0KQotKwkJCXsKLSsJCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0r CQkJfQotKwkJfQotKwllbHNlIGlmIChhcmdjID09IDIpCi0rCQl7Ci0rCQlpbiA9IHN0ZGluOwot KwkJb3V0ID0gc3Rkb3V0OwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwi JXMgWy1lbmNyeXB0fC1kZWNyeXB0XVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0r CWZpcHNfYWxndGVzdF9pbml0KCk7Ci0rCWlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHQiKSkK LSsJCWVuY3J5cHQgPSAxOwotKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHRJVmV4 dCIpKQotKwkJZW5jcnlwdCA9IDI7Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZGVjcnlw dCIpKQotKwkJZW5jcnlwdCA9IDA7Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItY2NtIikp Ci0rCQljY20gPSAxOwotKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLXh0cyIpKQotKwkJeHRz ID0gMTsKLSsJZWxzZQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRv ICVzLlxuIixhcmd2WzFdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCWlmIChjY20pCi0rCQlj Y210ZXN0KGluLCBvdXQpOwotKwllbHNlIGlmICh4dHMpCi0rCQl4dHN0ZXN0KGluLCBvdXQpOwot KwllbHNlCi0rCQlnY210ZXN0KGluLCBvdXQsIGVuY3J5cHQpOwotKwotKwlpZiAoYXJnYyA9PSA0 KQotKwkJewotKwkJZmNsb3NlKGluKTsKLSsJCWZjbG9zZShvdXQpOwotKwkJfQotKwotKwlyZXR1 cm4gMDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMv Zmlwc19ybmd2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3Ju Z3ZzLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NDkyMzE3OCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCTIwMTQtMDUtMDYgMTY6Mjk6 NTAuNTQ0OTIzMTc4ICswMjAwCi1AQCAtMCwwICsxLDIzMCBAQAotKy8qCi0rICogQ3J1ZGUgdGVz dCBkcml2ZXIgZm9yIHByb2Nlc3NpbmcgdGhlIFZTVCBhbmQgTUNUIHRlc3R2ZWN0b3IgZmlsZXMK LSsgKiBnZW5lcmF0ZWQgYnkgdGhlIENNVlAgUk5HVlMgcHJvZHVjdC4KLSsgKgotKyAqIE5vdGUg dGhlIGlucHV0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBfdmVyeV8gc3BlY2lmaWMgZm9y bWF0Ci0rICogYXMgZGVzY3JpYmVkIGluIHRoZSBOSVNUIGRvY3VtZW50ICJUaGUgUmFuZG9tIE51 bWJlciBHZW5lcmF0b3IKLSsgKiBWYWxpZGF0aW9uIFN5c3RlbSAoUk5HVlMpIiwgTWF5IDI1LCAy MDA0LgotKyAqCi0rICovCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsj aWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSTkcgc3VwcG9y dFxuIik7Ci0rICAgIHJldHVybiAwOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94 NTA5djMuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0r I2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rdm9pZCB2c3QoKQotKyAgICB7Ci0rICAgIHVuc2ln bmVkIGNoYXIgKmtleSA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOwotKyAg ICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsK LSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKyAgICBsb25nIGksIGtleWxlbjsKLSsKLSsgICAga2V5bGVuID0g MDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0r CXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5 XSIsIDEzKSkKLSsJCWtleWxlbiA9IDE2OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAx OTItS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDI0OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1Ziwi W0FFUyAyNTYtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDMyOwotKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21w KGtleXdvcmQsIktleSIpKQotKwkgICAgewotKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7 Ci0rCSAgICBpZiAoaSAhPSBrZXlsZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJCXJldHVybjsKLSsJ CX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCi0rCSAgICB7Ci0r CSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJ CX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKLSsJICAgIHsKLSsJ ICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJ ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0K LSsKLSsJICAgIGlmICgha2V5IHx8ICFkdCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWlz c2luZyBrZXkgb3IgRFRcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgRklQU194OTMx X3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7Ci0rCSAg ICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKLSsJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2 KSA8PSAwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFs dWVcbiIpOwotKwkgICAgICAgIHJldHVybjsKLSsJICAgICAgICB9Ci0rCi0rCSAgICBwdigiUiIs cmV0LDE2KTsKLSsJICAgIE9QRU5TU0xfZnJlZShrZXkpOwotKwkgICAga2V5ID0gTlVMTDsKLSsJ ICAgIE9QRU5TU0xfZnJlZShkdCk7Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2Zy ZWUodik7Ci0rCSAgICB2ID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBt Y3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7Ci0rICAgIHVuc2ln bmVkIGNoYXIgKnYgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7Ci0rICAg IHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIg bGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBsb25nIGksIGtl eWxlbjsKLSsgICAgaW50IGo7Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1ZixzdGRv dXQpOwotKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0rCQlrZXlsZW4g PSAxNjsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCi0rCQlr ZXlsZW4gPSAyNDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykp Ci0rCQlrZXlsZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxi dWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJ ICAgIHsKLSsJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0ga2V5 bGVuKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVj dGluZyAlbGRcbiIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4MmJpbl9tKHZh bHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJ bnZhbGlkIERUIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJiaW5fbSh2YWx1 ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBWIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBpZiAoIWtleSB8 fCAhZHQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsK LSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVu KTsKLSsJICAgIEZJUFNfeDkzMV9zZWVkKHYsMTYpOwotKwkgICAgZm9yIChpID0gMDsgaSA8IDEw MDAwOyBpKyspCi0rCQl7Ci0rCQkgICAgRklQU194OTMxX3NldF9kdChkdCk7Ci0rCQkgICAgaWYg KEZJUFNfeDkzMV9ieXRlcyhyZXQsMTYpIDw9IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJCSAgICAgICAgcmV0dXJuOwotKwkJ ICAgICAgICB9Ci0rCQkgICAgLyogSW5jcmVtZW50IERUICovCi0rCQkgICAgZm9yIChqID0gMTU7 IGogPj0gMDsgai0tKQotKwkJCXsKLSsJCQlkdFtqXSsrOwotKwkJCWlmIChkdFtqXSkKLSsJCQkJ YnJlYWs7Ci0rCQkJfQotKwkJfQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0rCSAgICBPUEVO U1NMX2ZyZWUoa2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoZHQp OwotKwkgICAgZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkgICAgdiA9IE5V TEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiph cmd2KQotKyAgICB7Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwi JXMgW21jdHx2c3RdXG4iLGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBT X21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9 Ci0rICAgIEZJUFNfeDkzMV9yZXNldCgpOwotKyAgICBpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUo KSkKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcgUFJORyB0ZXN0IG1vZGVc biIpOwotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighc3Ry Y21wKGFyZ3ZbMV0sIm1jdCIpKQotKwltY3QoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sInZzdCIpKQotKwl2c3QoKTsKLSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCJE b24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsg ICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ1OTIzMjAx ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0 LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDU5MjMyMDEgKzAyMDAKLUBAIC0wLDAgKzEsMzkwIEBA Ci0rLyogZmlwc19yc2FndGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVu c29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1 LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhl 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 LSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCByc2FfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBS U0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJ R05VTSAqZSk7Ci0rc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2Es Ci0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpOwotKwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBO VUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7 Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoYXJn YyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91 dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8g ZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRv X3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9z ZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0r Ci0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4J MTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJewotKwljaGFy ICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwot KwlSU0EgKnJzYSA9IE5VTEw7Ci0rCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpY cCA9IE5VTEw7Ci0rCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7 Ci0rCUJJR05VTSAqZSA9IE5VTEw7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0r Ci0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFs aW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhv bGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0r CQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3 aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCB8fCAq a2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQot KwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsK LSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUg PSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsK LSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUg KyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwgInhwMSIpKQotKwkJCXsKLSsJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1 ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAieHAyIikpCi0rCQkJewotKwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZh bHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJYcCIpKQotKwkJCXsKLSsJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFs dWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInhxMSIpKQotKwkJCXsKLSsJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2 YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAieHEyIikpCi0rCQkJewotKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEy LHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJYcSIpKQotKwkJCXsKLSsJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEs dmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1 ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAicDEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgInAyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJw IikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQot KwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKLSsJCQlj b250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKLSsJCQljb250aW51 ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQljb250aW51ZTsKLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UK LSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0r CQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQotKwkJCXsKLSsJCQlyc2EgPSBGSVBTX3JzYV9u ZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAoIXJzYV9wcmlu dGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJ Qk5fZnJlZShYcDEpOwotKwkJCVhwMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcDIpOwotKwkJCVhw MiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcCk7Ci0rCQkJWHAgPSBOVUxMOwotKwkJCUJOX2ZyZWUo ZSk7Ci0rCQkJZSA9IE5VTEw7Ci0rCQkJfQotKwotKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYm IFhxKQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBY cSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcTEpOwotKwkJCVhxMSA9IE5VTEw7 Ci0rCQkJQk5fZnJlZShYcTIpOwotKwkJCVhxMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcSk7Ci0r CQkJWHEgPSBOVUxMOwotKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBOVUxMOwot KwkJCX0KLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1 ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKGxpbmVidWYpOwotKwotKwlpZiAoWHAxKQotKwkJQk5fZnJlZShYcDEpOwotKwlpZiAo WHAyKQotKwkJQk5fZnJlZShYcDIpOwotKwlpZiAoWHApCi0rCQlCTl9mcmVlKFhwKTsKLSsJaWYg KFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJ aWYgKFhxMikKLSsJCUJOX2ZyZWUoWHEyKTsKLSsJaWYgKFhxKQotKwkJQk5fZnJlZShYcSk7Ci0r CWlmIChlKQotKwkJQk5fZnJlZShlKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNh KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsK LSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxF ICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhw LAotKwkJQklHTlVNICplKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnAxID0gTlVM TCwgKnAyID0gTlVMTDsKLSsJcDEgPSBCTl9uZXcoKTsKLSsJcDIgPSBCTl9uZXcoKTsKLSsJaWYg KCFwMSB8fCAhcDIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9l eChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAotKwkJCQkJCU5VTEwsIE5V TEwsIE5VTEwsIGUsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFt ZShvdXQsICJwMSIsIHAxKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKLSsJ ZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJ ZXJyb3I6Ci0rCWlmIChwMSkKLSsJCUJOX2ZyZWUocDEpOwotKwlpZiAocDIpCi0rCQlCTl9mcmVl KHAyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5 MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdO VU0gKlhxKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0g TlVMTDsKLSsJcTEgPSBCTl9uZXcoKTsKLSsJcTIgPSBCTl9uZXcoKTsKLSsJaWYgKCFxMSB8fCAh cTIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5V TEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJCQlYcTEsIFhxMiwgWHEs IE5VTEwsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQs ICJxMSIsIHExKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsKLSsJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJu IiwgcnNhLT5uKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKLSsKLSsJ cmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChxMSkKLSsJCUJOX2ZyZWUocTEpOwotKwlpZiAo cTIpCi0rCQlCTl9mcmVlKHEyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwotLS0t IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NDU5MjMyMDEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NTkyMzIw MSArMDIwMAotQEAgLTAsMCArMSwzNzAgQEAKLSsvKiBmaXBzX3JzYXN0ZXN0LmMgKi8KLSsvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYz Lmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsg ICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgot KwotK3N0YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVu KTsKLStzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBF VlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2Fs dGxlbik7Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUg KmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7 Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNh bHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJ aWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZh bGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7 Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgi LXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJ CWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVs c2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJ b3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwot KwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwg U2FsdGxlbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUg cHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0 ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r Ci0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAm JiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsK LSsJfQotKwotKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2Ff c3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJY2hhciAqbGlu ZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJUlNB ICpyc2EgPSBOVUxMOwotKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOwotKwl1bnNpZ25lZCBj aGFyICpNc2cgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiA9IC0xOwotKwlpbnQga2V5bGVuID0gLTEs IGN1cnJlbnRfa2V5bGVuID0gLTE7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0r Ci0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFs aW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhv bGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0r CQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IGp1c3QgY29weSAq LwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQot KwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsK LSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUg PSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsK LSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUg KyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJLyogTG9vayBmb3IgW21v ZCA9IFhYWF0gZm9yIGtleSBsZW5ndGggKi8KLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJb bW9kIikpCi0rCQkJewotKwkJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwkJCWlm ICgqcCAhPSAnXScpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJKnAgPSAwOwotKwkJCWtl eWxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChrZXlsZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQot KwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKLSsJCQkJZGdzdCA9IEVWUF9z aGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQotKwkJCQlkZ3N0 ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkK LSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBMzg0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigpOwotKwkJCWVsc2UK LSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwKLSsJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQg YWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJCQkJCQkJCXZhbHVlKTsKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIp KQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChz dHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlNc2cgPSBoZXgy YmluX20odmFsdWUsICZNc2dsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCX0KLSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJLyogSWYga2V5 IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUgYW5kIG91dHB1dCBwdWJsaWMKLSsJCSAqIGtl eSBjb21wb25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0ZSBrZXkuCi0rCQkgKi8KLSsKLSsJCWlmIChr ZXlsZW4gIT0gY3VycmVudF9rZXlsZW4pCi0rCQkJewotKwkJCUJJR05VTSAqYm5fZTsKLSsJCQlp ZiAocnNhKQotKwkJCQlGSVBTX3JzYV9mcmVlKHJzYSk7Ci0rCQkJcnNhID0gRklQU19yc2FfbmV3 KCk7Ci0rCQkJaWYgKCFyc2EpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJYm5fZSA9IEJOX25ldygp OwotKwkJCWlmICghYm5fZSB8fCAhQk5fc2V0X3dvcmQoYm5fZSwgMHgxMDAxKSkKLSsJCQkJZ290 byBlcnJvcjsKLSsJCQlpZiAoIVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwg Ym5fZSwgTlVMTCkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShibl9lKTsKLSsJCQlm cHV0cygibiA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPm4pOwotKwkJCWZw dXRzKCJcbmUgPSAiLCBvdXQpOwotKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5lKTsKLSsJCQlm cHV0cygiXG4iLCBvdXQpOwotKwkJCWN1cnJlbnRfa2V5bGVuID0ga2V5bGVuOwotKwkJCX0KLSsK LSsJCWlmIChNc2cgJiYgZGdzdCkKLSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCBy c2EsIGRnc3QsIE1zZywgTXNnbGVuLAotKwkJCQkJCQkJU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJy b3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQl9Ci0rCi0r CQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlP UEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShs aW5lYnVmKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJu IHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFy c2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsK LSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2Es IGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4s IGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyICpzaWdi dWYgPSBOVUxMOwotKwlpbnQgaSwgc2lnbGVuOwotKwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8K LSsJRVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwlway50eXBlID0gRVZQX1BLRVlf UlNBOwotKwlway5wa2V5LnJzYSA9IHJzYTsKLSsKLSsJc2lnbGVuID0gUlNBX3NpemUocnNhKTsK LSsJc2lnYnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVuKTsKLSsJaWYgKCFzaWdidWYpCi0rCQln b3RvIGVycm9yOwotKwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChTYWx0bGVu ID49IDApCi0rCQl7Ci0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCi0rCQkJRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOwotKwkJfQotKwllbHNlIGlmIChT YWx0bGVuID09IC0yKQotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEpOwotKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxM KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2ds ZW4pKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1Ziwg KHVuc2lnbmVkIGludCAqKSZzaWdsZW4sICZwaykpCi0rCQlnb3RvIGVycm9yOwotKwotKwlFVlBf TURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWZwdXRzKCJTID0gIiwgb3V0KTsKLSsKLSsJZm9y IChpID0gMDsgaSA8IHNpZ2xlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVm W2ldKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6 Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ1OTIz MjAxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0 ZXN0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDU5MjMyMDEgKzAyMDAKLUBAIC0wLDAgKzEsMzc3 IEBACi0rLyogZmlwc19yc2F2dGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAy MDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAq ICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlv dW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAq Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKwotKyNpZm5kZWYgT1BFTlNT TF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHBy aW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0r I2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAq b3V0LCBGSUxFICppbiwgaW50IHNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJ TEUgKm91dCwKLSsJCUJJR05VTSAqbiwgQklHTlVNICplLAotKwkJY29uc3QgRVZQX01EICpkZ3N0 LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIg KlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQg cmV0ID0gMTsKLSsJaW50IFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkp Ci0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJ U2FsdGxlbiA9IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdv dG8gZW5kOwotKwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxz ZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJ U2FsdGxlbiA9IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJn YyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91 dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8g ZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBSU0FWVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJl dCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkK LSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3Nl KG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01B WExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50 IFNhbHRsZW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNo YXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKLSsJQklH TlVNICpuID0gTlVMTCwgKmUgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAq UyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuLCBTbGVuOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxu dW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVM RU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0r Ci0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwl3aGls ZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxu dW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1 ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0g c2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBv ciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCi0rCQlp ZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBv dXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlx ID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsK LSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZh bHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZh bHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJ cCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8 fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICgh c3RyY21wKGtleXdvcmQsICJuIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZuLHZhbHVl KSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJlIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZlLHZhbHVlKSkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJT SEFBbGciKSkKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCi0rCQkJCWRn c3QgPSBFVlBfc2hhMSgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkK LSsJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBMjU2IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTM4NCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOwotKwkJCWVsc2Ug aWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsK LSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsCi0rCQkJCQkiRkFUQUw6IHVu c3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCi0rCQkJCQkJCQl2YWx1ZSk7Ci0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJ TXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTIikp Ci0rCQkJewotKwkJCWlmIChTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJs ZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlTID0gaGV4MmJpbl9t KHZhbHVlLCAmU2xlbik7Ci0rCQkJaWYgKCFTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQotKwkJCWNvbnRpbnVl OwotKwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwg b3V0KTsKLSsKLSsJCWlmIChuICYmIGUgJiYgTXNnICYmIFMgJiYgZGdzdCkKLSsJCQl7Ci0rCQkJ aWYgKCFyc2FfcHJpbnR2ZXIob3V0LCBuLCBlLCBkZ3N0LAotKwkJCQkJTXNnLCBNc2dsZW4sIFMs IFNsZW4sIFNhbHRsZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShNc2cp OwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJT1BFTlNTTF9mcmVlKFMpOwotKwkJCVMgPSBOVUxMOwot KwkJCX0KLSsKLSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlm IChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQot KwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAobikKLSsJCUJOX2ZyZWUobik7Ci0rCWlm IChlKQotKwkJQk5fZnJlZShlKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6 Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5l ICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQg cnNhX3ByaW50dmVyKEZJTEUgKm91dCwKLSsJCUJJR05VTSAqbiwgQklHTlVNICplLAotKwkJY29u c3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKLSsJ CXVuc2lnbmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJl dCA9IDAsIHI7Ci0rCS8qIFNldHVwIFJTQSBhbmQgRVZQX1BLRVkgc3RydWN0dXJlcyAqLwotKwlS U0EgKnJzYV9wdWJrZXkgPSBOVUxMOwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7 Ci0rCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7Ci0rCXJzYV9wdWJrZXkgPSBGSVBTX3JzYV9u ZXcoKTsKLSsJaWYgKCFyc2FfcHVia2V5KQotKwkJZ290byBlcnJvcjsKLSsJcnNhX3B1YmtleS0+ biA9IEJOX2R1cChuKTsKLSsJcnNhX3B1YmtleS0+ZSA9IEJOX2R1cChlKTsKLSsJaWYgKCFyc2Ff cHVia2V5LT5uIHx8ICFyc2FfcHVia2V5LT5lKQotKwkJZ290byBlcnJvcjsKLSsJcGsudHlwZSA9 IEVWUF9QS0VZX1JTQTsKLSsJcGsucGtleS5yc2EgPSByc2FfcHVia2V5OwotKwotKwlFVlBfTURf Q1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChTYWx0bGVuID49IDApCi0rCQl7Ci0rCQlNX0VWUF9N RF9DVFhfc2V0X2ZsYWdzKCZjdHgsCi0rCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2Fs dGxlbiA8PCAxNikpOwotKwkJfQotKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQotKwkJTV9FVlBf TURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwotKwlpZiAo IUVWUF9WZXJpZnlJbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJ aWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCXIgPSBFVlBfVmVyaWZ5RmluYWwoJmN0eCwgUywgU2xlbiwgJnBrKTsKLSsKLSsKLSsJ RVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKwlpZiAociA8IDApCi0rCQlnb3RvIGVycm9y OwotKwlFUlJfY2xlYXJfZXJyb3IoKTsKLSsKLSsJaWYgKHIgPT0gMCkKLSsJCWZwdXRzKCJSZXN1 bHQgPSBGXG4iLCBvdXQpOwotKwllbHNlCi0rCQlmcHV0cygiUmVzdWx0ID0gUFxuIiwgb3V0KTsK LSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChyc2FfcHVia2V5KQotKwkJRklQU19y c2FfZnJlZShyc2FfcHVia2V5KTsKLSsJaWYgKGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShidWYpOwot KwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBz L2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NTkyMzIwMSAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMJ MjAxNC0wNS0wNiAxNjoyOTo1MC41NDU5MjMyMDEgKzAyMDAKLUBAIC0wLDAgKzEsMzg4IEBACi0r LyogZmlwc19zaGF0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24g KHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0r ICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wg 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsg KiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQ UwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYo Ik5vIEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNl bHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCBkZ3N0X3Rlc3Qo RklMRSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9N RCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7Ci0r c3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1 bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7Ci0rCi0raW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0r CWludCByZXQgPSAxOwotKwotKwlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3By aW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0r CQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0r CWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4o YXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQg aW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICgh ZGdzdF90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBkaWdl c3QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNl Ci0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJv cnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlp ZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4g cmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKLSsjZGVm aW5lIFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAyKSAr IDEwMCkKLSsKLStpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCi0rCXsKLSsJY29u c3QgRVZQX01EICptZCA9IE5VTEw7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpx OwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEws ICpTZWVkID0gTlVMTDsKLSsJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4gPSAt MTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVO U1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVm KQotKwkJZ290byBlcnJvcjsKLSsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFfVEVT VF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwg b2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3Bh Y2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlr ZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGlu ZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIw XSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCkKLSsJCQl7Ci0rCQkJZnB1dHMob2xpbmVi dWYsIG91dCk7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJ LyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAx OwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxl bih2YWx1ZSkgLSAxOwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJbTCIp ICYmICpwPT0nXScpCi0rCQkJewotKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCi0rCQkJCXsKLSsJ CQkJY2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsKLSsJCQkJY2FzZSAyODogbWQ9RVZQ X3NoYTIyNCgpOyBicmVhazsKLSsJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVhazsK LSsJCQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKLSsJCQkJY2FzZSA2NDogbWQ9 RVZQX3NoYTUxMigpOyBicmVhazsKLSsJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsKLSsJ CQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQotKwkJCXsK LSsJCQlpZiAoTGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUxlbiA9IGF0 b2kodmFsdWUpOwotKwkJCWlmIChMZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CS8qIE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KLSsJCQlpZiAoTGVuICYgMHg3 KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhfQklU UykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNc2dMZW4gPSBMZW4gPj4gMzsKLSsJCQl9 Ci0rCi0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJbG9u ZyB0bXBsZW47Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0g JzAnOwotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNnID0gaGV4 MmJpbl9tKHZhbHVlLCAmdG1wbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCi0rCQkJ ewotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJ CQlpZiAoU2VlZCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlTZWVkID0gaGV4MmJpbl9t KHZhbHVlLCAmU2VlZExlbik7Ci0rCQkJaWYgKCFTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCi0rCQkJY29udGlu dWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5lYnVm LCBvdXQpOwotKwotKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQotKwkJCXsKLSsJ CQlpZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQotKwkJCQlnb3RvIGVycm9y OwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJTXNnTGVuID0g LTE7Ci0rCQkJTGVuID0gLTE7Ci0rCQkJfQotKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAoU2Vl ZExlbiA+IDApKQotKwkJCXsKLSsJCQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQsIFNl ZWRMZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKLSsJCQlT ZWVkID0gTlVMTDsKLSsJCQlTZWVkTGVuID0gLTE7Ci0rCQkJfQotKwkKLSsKLSsJCX0KLSsKLSsK LSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5T U0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVi dWYpOwotKwlpZiAoTXNnKQotKwkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCWlmIChTZWVkKQotKwkJ T1BFTlNTTF9mcmVlKFNlZWQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoK LSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUg JWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBw cmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFy ICpNc2csIGludCBNc2dsZW4pCi0rCXsKLSsJaW50IGksIG1kbGVuOwotKwl1bnNpZ25lZCBjaGFy IG1kW0VWUF9NQVhfTURfU0laRV07Ci0rCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwgbWQs ICh1bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkpCi0rCQl7Ci0rCQlmcHV0cygiRXJy b3IgY2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlm cHV0cygiTUQgPSAiLCBvdXQpOwotKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKLSsJCWZw cmludGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJu IDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJ TEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQotKwl7Ci0rCXVu c2lnbmVkIGludCBpLCBqLCBrOwotKwlpbnQgcmV0ID0gMDsKLSsJRVZQX01EX0NUWCBjdHg7Ci0r CXVuc2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7Ci0rCXVuc2lnbmVkIGludCBtbGVuLCBt MWxlbiwgbTJsZW4sIG0zbGVuOwotKwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlm IChTZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQotKwkJbWxlbiA9IFNlZWRMZW47Ci0rCWVsc2UK LSsJCW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7Ci0rCi0rCW0xID0gT1BFTlNTTF9tYWxsb2MobWxl bik7Ci0rCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0rCW0zID0gT1BFTlNTTF9tYWxsb2Mo bWxlbik7Ci0rCi0rCWlmICghbTEgfHwgIW0yIHx8ICFtMykKLSsJCWdvdG8gbWNfZXJyb3I7Ci0r Ci0rCW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47Ci0rCW1lbWNweShtMSwgU2VlZCwg U2VlZExlbik7Ci0rCW1lbWNweShtMiwgU2VlZCwgU2VlZExlbik7Ci0rCW1lbWNweShtMywgU2Vl ZCwgU2VlZExlbik7Ci0rCi0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCi0rCWZvciAoaiA9IDA7IGog PCAxMDA7IGorKykKLSsJCXsKLSsJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0rCQkJewot KwkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKLSsJCQlFVlBfRGlnZXN0VXBk YXRlKCZjdHgsIG0xLCBtMWxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwgbTJs ZW4pOwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKLSsJCQlwID0gbTE7 Ci0rCQkJbTEgPSBtMjsKLSsJCQltMWxlbiA9IG0ybGVuOwotKwkJCW0yID0gbTM7Ci0rCQkJbTJs ZW4gPSBtM2xlbjsKLSsJCQltMyA9IHA7Ci0rCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG0z LCAmbTNsZW4pOwotKwkJCX0KLSsJCWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7Ci0r CQlmcHV0cygiTUQgPSAiLCBvdXQpOwotKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKyspCi0r CQkJZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOwotKwkJZnB1dHMoIlxuXG4iLCBvdXQpOwot KwkJbWVtY3B5KG0xLCBtMywgbTNsZW4pOwotKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOwotKwkJ bTFsZW4gPSBtMmxlbiA9IG0zbGVuOwotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwltY19lcnJv cjoKLSsJaWYgKG0xKQotKwkJT1BFTlNTTF9mcmVlKG0xKTsKLSsJaWYgKG0yKQotKwkJT1BFTlNT TF9mcmVlKG0yKTsKLSsJaWYgKG0zKQotKwkJT1BFTlNTTF9mcmVlKG0zKTsKLSsKLSsJRVZQX01E X0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgKLS0tLSBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUw LjU0NTkyMzIwMSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlw c191dGwuaAkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NTkyMzIwMSArMDIwMAotQEAgLTAsMCArMSwz NDMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSt2b2lkIGRvX3ByaW50X2Vycm9y cyh2b2lkKQotKwl7Ci0rCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOwotKwlpbnQgbGluZSwgZmxh Z3M7Ci0rCXVuc2lnbmVkIGxvbmcgbDsKLSsJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5l X2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0 ZGVyciwgIkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQiCi0rCQkJCSI6ZmlsZT0l czpsaW5lPSVkOiVzXG4iLAotKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCks IEVSUl9HRVRfUkVBU09OKGwpLAotKwkJCWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJ TkcgPyBkYXRhIDogIiIpOwotKwkJfQotKwl9Ci0rCi0raW50IGhleDJiaW4oY29uc3QgY2hhciAq aW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjEsIG4yOwotKyAgICB1 bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltu MV0gIT0gJ1xuJyA7ICkKLSsJeyAvKiBmaXJzdCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcw JykgJiYgKGluW24xXSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxz ZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5b bjErK10gLSAnQScgKyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0g PD0gJ2YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAg cmV0dXJuIC0xOwotKwlpZighaW5bbjFdKQotKwkgICAgewotKwkgICAgb3V0W24yKytdPWNoOwot KwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCW91dFtuMl0gPSBjaCA8PCA0OwotKwkvKiBzZWNvbmQg Ynl0ZSAqLwotKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKLSsJICAg IGNoID0gaW5bbjErK10gLSAnMCc7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5b bjFdIDw9ICdGJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7Ci0rCWVsc2UgaWYg KChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCi0rCSAgICBjaCA9IGluW24xKytd IC0gJ2EnICsgMTA7Ci0rCWVsc2UKLSsJICAgIHJldHVybiAtMTsKLSsJb3V0W24yKytdIHw9IGNo OwotKwl9Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwotK3Vuc2lnbmVkIGNoYXIgKmhleDJi aW5fbShjb25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICpw OwotKwlwID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8yKTsKLSsJKnBsZW4gPSBo ZXgyYmluKGluLCBwKTsKLSsJcmV0dXJuIHA7Ci0rCX0KLSsKLStpbnQgZG9faGV4MmJuKEJJR05V TSAqKnByLCBjb25zdCBjaGFyICppbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICpwOwotKwlsb25n IHBsZW47Ci0rCWludCByID0gMDsKLSsJcCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOwotKwlpZiAo IXApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCEqcHIpCi0rCQkqcHIgPSBCTl9uZXcoKTsKLSsJaWYg KCEqcHIpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQotKwkJ ciA9IDE7Ci0rCU9QRU5TU0xfZnJlZShwKTsKLSsJcmV0dXJuIHI7Ci0rCX0KLSsKLStpbnQgZG9f Ym5fcHJpbnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCBsZW4sIGk7Ci0rCXVu c2lnbmVkIGNoYXIgKnRtcDsKLSsJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKLSsJaWYgKGxlbiA9 PSAwKQotKwkJewotKwkJZnB1dHMoIjAwIiwgb3V0KTsKLSsJCXJldHVybiAxOwotKwkJfQotKwot Kwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmlu dGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQot KwkJZnByaW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0r CXJldHVybiAxOwotKwl9Ci0rCi0raW50IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25z dCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCByOwotKwlmcHJpbnRmKG91dCwg IiVzID0gIiwgbmFtZSk7Ci0rCXIgPSBkb19ibl9wcmludChvdXQsIGJuKTsKLSsJaWYgKCFyKQot KwkJcmV0dXJuIDA7Ci0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0r aW50IHBhcnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNo YXIgKm9saW5lYnVmKQotKwl7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOwotKwlz dHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJLyogU2tp cCBsZWFkaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3 b3JkKSkKLSsJCWtleXdvcmQrKzsKLSsKLSsJLyogTG9vayBmb3IgPSBzaWduICovCi0rCXAgPSBz dHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyogSWYgbm8gJz0nIGV4aXQgKi8KLSsJaWYgKCFw KQotKwkJcmV0dXJuIDA7Ci0rCi0rCXEgPSBwIC0gMTsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpxLS0g PSAwOwotKwotKwkqcCA9IDA7Ci0rCXZhbHVlID0gcCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBsZWFk aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnZhbHVlKSkKLSsJCXZhbHVlKys7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9t IHZhbHVlICovCi0rCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwl3aGlsZSAo KnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAwOwot KwotKwkqcGt3ID0ga2V5d29yZDsKLSsJKnB2YWwgPSB2YWx1ZTsKLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLStCSUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKLSsgICAgewotKyAgICBCSUdOVU0g KnA9TlVMTDsKLSsKLSsgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkKLSsJcmV0dXJuIE5VTEw7 Ci0rCi0rICAgIHJldHVybiBwOwotKyAgICB9Ci0rCi0raW50IGJpbjJoZXgoY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG4xLCBuMjsK LSsgICAgdW5zaWduZWQgY2hhciBjaDsKLSsKLSsgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxl biA7ICsrbjEpCi0rCXsKLSsJY2g9aW5bbjFdID4+IDQ7Ci0rCWlmIChjaCA8PSAweDA5KQotKwkg ICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsK LSsJY2g9aW5bbjFdICYgMHgwZjsKLSsJaWYoY2ggPD0gMHgwOSkKLSsJICAgIG91dFtuMisrXT1j aCsnMCc7Ci0rCWVsc2UKLSsJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7Ci0rCX0KLSsgICAgb3V0 W24yXT0nXDAnOwotKyAgICByZXR1cm4gbjI7Ci0rICAgIH0KLSsKLSt2b2lkIHB2KGNvbnN0IGNo YXIgKnRhZyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikKLSsgICAgewotKyAgICBj aGFyIG9idWZbMjA0OF07Ci0rCi0rICAgIGJpbjJoZXgodmFsLGxlbixvYnVmKTsKLSsgICAgcHJp bnRmKCIlcyA9ICVzXG4iLHRhZyxvYnVmKTsKLSsgICAgfQotKwotKy8qIFRvIGF2b2lkIGV4dGVu c2l2ZSBjaGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAot KyAqIHRoZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVz IGNvbnZlcnRlZCB0byBmb3JtCi0rICogImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hh dCB3aGl0ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKLSsgKiBqdXN0IGhhdmUgbGVh ZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KLSsgKi8KLSsKLStpbnQgdGlkeV9saW5l KGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQotKwl7Ci0rCWNoYXIgKmtleXdvcmQsICp2 YWx1ZSwgKnAsICpxOwotKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwlrZXl3b3JkID0g bGluZWJ1ZjsKLSsJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCWtleXdvcmQrKzsKLSsJLyogTG9vayBmb3IgPSBz aWduICovCi0rCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyogSWYgbm8gJz0nIGp1 c3QgY2hvcCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLwotKwlpZiAoIXApCi0rCQl7Ci0rCQlwID0g a2V5d29yZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsJCXN0cmNweShvbGlu ZWJ1Ziwga2V5d29yZCk7Ci0rCQlzdHJjYXQob2xpbmVidWYsICJcbiIpOwotKwkJcmV0dXJuIDE7 Ci0rCQl9Ci0rCi0rCXEgPSBwIC0gMTsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICov Ci0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpxLS0gPSAwOwotKwot KwkqcCA9IDA7Ci0rCXZhbHVlID0gcCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkK LSsJCXZhbHVlKys7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICov Ci0rCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwl3aGlsZSAoKnAgPT0gJ1xu JyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAwOwotKwotKwlzdHJj cHkob2xpbmVidWYsIGtleXdvcmQpOwotKwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKLSsJc3Ry Y2F0KG9saW5lYnVmLCB2YWx1ZSk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7Ci0rCi0rCXJl dHVybiAxOwotKwl9Ci0rCi0rLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNf IHJlYWQgKi8KLStpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVk IGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgbWVtc2V0KG91dCwwLGxl bik7Ci0rICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQotKwlpZihpbltuXSA9PSAnMScpCi0r CSAgICBvdXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOwotKyAgICByZXR1cm4gbGVuOwotKyAgICB9 Ci0rCi0raW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAq b3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsr bikKLSsJb3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7Ci0rICAg IHJldHVybiBuOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rdm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWdu ZWQgY2hhciAqdmFsLCBpbnQgbGVuKQotK3sKLSsjaWYgVkVSQk9TRQotKyAgY2hhciBvYnVmWzIw NDhdOwotKyAgaW50IG9sZW47Ci0rICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7Ci0r ICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSt9Ci0r Ci0rdm9pZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxl biwgRklMRSAqcmZwLGludCBiaXRtb2RlKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsK LSsgICAgaW50IG9sZW47Ci0rCi0rICAgIGlmKGJpdG1vZGUpCi0rCW9sZW49YmluMmJpbnQodmFs LGxlbixvYnVmKTsKLSsgICAgZWxzZQotKwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKLSsK LSsgICAgZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rI2lm IFZFUkJPU0UKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0r I2VuZGlmCi0rICAgIH0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2Fl c19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2Vs ZnRlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ2OTIzMjI0ICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDE0LTA1LTA2IDE2 OjI5OjUwLjU0NjkyMzIyNCArMDIwMAotQEAgLTAsMCArMSwzNTkgQEAKLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 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 Ci0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rc3RhdGljIGNvbnN0IHN0cnVjdAotKyAgICB7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIga2V5WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOwotKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOwotKyAgICB9IHRlc3RzW109Ci0r CXsKLSsJewotKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSsJ ICAweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKLSsJeyAweDAwLDB4 MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCi0rCSAgMHg4OCwweDk5LDB4QUEsMHhC QiwweENDLDB4REQsMHhFRSwweEZGIH0sCi0rCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4 N0IsMHgwNCwweDMwLAotKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1 QSB9LAotKwl9LAotKwl9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9hZXM7Ci0rCi0rdm9pZCBG SVBTX2NvcnJ1cHRfYWVzKCkKLSsgICAgewotKyAgICBjb3JydXB0X2FlcyA9IDE7Ci0rICAgIH0K LSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXMoKQotKyAgICB7Ci0rICAgIGludCBuOwotKyAgICBp bnQgcmV0ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NU WF9pbml0KCZjdHgpOwotKwotKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCi0rCXsKLSsJdW5z aWduZWQgY2hhciBrZXlbMTZdOwotKwotKwltZW1jcHkoa2V5LCB0ZXN0c1tuXS5rZXksIHNpemVv ZihrZXkpKTsKLSsJaWYgKGNvcnJ1cHRfYWVzKQotKwkJa2V5WzBdKys7Ci0rCWlmIChmaXBzX2Np cGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAotKwkJCQlrZXksIE5VTEwsCi0rCQkJ CXRlc3RzW25dLnBsYWludGV4dCwKLSsJCQkJdGVzdHNbbl0uY2lwaGVydGV4dCwKLSsJCQkJMTYp IDw9IDApCi0rCQlnb3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAgICBlcnI6Ci0rICAg IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkKLSsJICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQp OwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rCi0rLyogQUVTLUNDTSB0ZXN0IGRhdGEgZnJv bSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBjY21fa2V5W10gPSB7Ci0rCTB4Y2UsMHhiMCwweDA5LDB4YWUsMHhhNCwweDQ1LDB4NDQs MHg1MSwweGZlLDB4YWQsMHhmMCwweGU2LAotKwkweGIzLDB4NmYsMHg0NSwweDU1LDB4NWQsMHhk MCwweDQ3LDB4MjMsMHhiYSwweGE0LDB4NDgsMHhlOAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgY2NtX25vbmNlW10gPSB7Ci0rCTB4NzYsMHg0MCwweDQzLDB4YzQsMHg5NCwweDYw LDB4YjcKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9hZGF0YVtdID0gewot KwkweDZlLDB4ODAsMHhkZCwweDdmLDB4MWIsMHhhZCwweGYzLDB4YTEsMHhjOSwweGFiLDB4MjUs MHhjNywKLSsJMHg1ZiwweDEwLDB4YmQsMHhlNywweDhjLDB4MjMsMHhmYSwweDBlLDB4YjgsMHhm OSwweGFhLDB4YTUsCi0rCTB4M2EsMHhkZSwweGZiLDB4ZjQsMHhjYiwweGY3LDB4OGYsMHhlNAot K307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3B0W10gPSB7Ci0rCTB4YzgsMHhk MiwweDc1LDB4ZjksMHgxOSwweGUxLDB4N2QsMHg3ZiwweGU2LDB4OWMsMHgyYSwweDFmLAotKwkw eDU4LDB4OTMsMHg5ZCwweGZlLDB4NGQsMHg0MCwweDM3LDB4OTEsMHhiNSwweGRmLDB4MTMsMHgx MAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2N0W10gPSB7Ci0rCTB4OGEs MHgwZiwweDNkLDB4ODIsMHgyOSwweGU0LDB4OGUsMHg3NCwweDg3LDB4ZmQsMHg5NSwweGEyLAot KwkweDhhLDB4ZDMsMHg5MiwweGM4LDB4MGIsMHgzNiwweDgxLDB4ZDQsMHhmYiwweGM3LDB4YmIs MHhmZAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0gewotKwkw eDJkLDB4ZDYsMHhlZiwweDFjLDB4NDUsMHhkNCwweGNjLDB4YjcsMHgyMywweGRjLDB4MDcsMHg0 NCwKLSsJMHgxNCwweGRiLDB4NTAsMHg2ZAotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVz X2NjbSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhd LCB0YWdbMTZdOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7Ci0rCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsJaWYgKCFFVlBfQ2lwaGVy SW5pdF9leCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSxOVUxMLCBOVUxMLCBOVUxMLCAxKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NN X1NFVF9JVkxFTiwKLSsJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKLSsJCWdvdG8gZXJy OwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcs Ci0rCQkJCQlzaXplb2YoY2NtX3RhZyksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQ X0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAxKSkK LSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2Yo Y2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBo ZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQotKwkJZ290 byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0 KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFFVlBfQ0lQSEVS X0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8g ZXJyOwotKwlpZiAobWVtY21wKHRhZywgY2NtX3RhZywgc2l6ZW9mKGNjbV90YWcpKQotKwkJfHwg bWVtY21wKG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkpCi0rCQlnb3RvIGVycjsKLSsKLSsJ bWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwotKwotKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4 KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSkKLSsJCWdvdG8g ZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9J VkxFTiwKLSsJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwlp ZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIDE2LCB0 YWcpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwg TlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAwKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0Np cGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9jdCkp Ci0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBz aXplb2YoY2NtX2FkYXRhKSkgPCAwKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZj dHgsIG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCi0rCQln b3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkpKQot KwkJZ290byBlcnI7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhf Y2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0 dXJuIDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsvKiBBRVMt R0NNIHRlc3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9rZXlbXSA9IHsKLSsJMHhlZSwweGJjLDB4MWYsMHg1 NywweDQ4LDB4N2YsMHg1MSwweDkyLDB4MWMsMHgwNCwweDY1LDB4NjYsCi0rCTB4NWYsMHg4YSww eGU2LDB4ZDEsMHg2NSwweDhiLDB4YjIsMHg2ZCwweGU2LDB4ZjgsMHhhMCwweDY5LAotKwkweGEz LDB4NTIsMHgwMiwweDkzLDB4YTUsMHg3MiwweDA3LDB4OGYKLSt9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGdjbV9pdltdID0gewotKwkweDk5LDB4YWEsMHgzZSwweDY4LDB4ZWQsMHg4 MSwweDczLDB4YTAsMHhlZSwweGQwLDB4NjYsMHg4NAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZ2NtX3B0W10gPSB7Ci0rCTB4ZjUsMHg2ZSwweDg3LDB4MDUsMHg1YiwweGMzLDB4 MmQsMHgwZSwweGViLDB4MzEsMHhiMiwweGVhLAotKwkweGNjLDB4MmIsMHhmMiwweGE1Ci0rfTsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fYWFkW10gPSB7Ci0rCTB4NGQsMHgyMyww eGMzLDB4Y2UsMHhjMywweDM0LDB4YjQsMHg5YiwweGRiLDB4MzcsMHgwYywweDQzLAotKwkweDdm LDB4ZWMsMHg3OCwweGRlCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fY3Rb XSA9IHsKLSsJMHhmNywweDI2LDB4NDQsMHgxMywweGE4LDB4NGMsMHgwZSwweDdjLDB4ZDUsMHgz NiwweDg2LDB4N2UsCi0rCTB4YjksMHhmMiwweDE3LDB4MzYKLSt9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGdjbV90YWdbXSA9IHsKLSsJMHg2NywweGJhLDB4MDUsMHgxMCwweDI2LDB4 MmEsMHhlNCwweDg3LDB4ZDcsMHgzNywweGVlLDB4NjIsCi0rCTB4OTgsMHhmNywweDdlLDB4MGMK LSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9pZCkKLSsJewotKwlpbnQgcmV0 ID0gMDsKLSsJdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsJRVZQX0NJUEhFUl9D VFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwltZW1zZXQob3V0LCAwLCBz aXplb2Yob3V0KSk7Ci0rCW1lbXNldCh0YWcsIDAsIHNpemVvZih0YWcpKTsKLSsJaWYgKCFFVlBf Q2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwg MSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9D VFJMX0dDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBnY21fa2V5 LCBnY21faXYsIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEws IGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBf Q2lwaGVyKCZjdHgsIG91dCwgZ2NtX3B0LCBzaXplb2YoZ2NtX3B0KSkgIT0gc2l6ZW9mKGdjbV9j dCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkg PCAwKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBF VlBfQ1RSTF9HQ01fR0VUX1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1l bWNtcCh0YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1jbXAob3V0LCBnY21fY3QsIDE2KSkKLSsJCWdv dG8gZXJyOwotKwotKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rCi0rCWlmICghRVZQ X0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIE5VTEws IDApKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBf Q1RSTF9HQ01fU0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGdjbV9pdiksIE5VTEwpKQotKwkJZ290 byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VU X1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgm Y3R4LCBOVUxMLCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDApKQotKwkJZ290byBlcnI7Ci0rCWlm IChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQot KwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX2N0LCBzaXplb2Yo Z2NtX2N0KSkgIT0gc2l6ZW9mKGdjbV9wdCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBo ZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChtZW1j bXAob3V0LCBnY21fcHQsIDE2KSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotKwll cnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChyZXQgPT0gMCkK LSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSxGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwllbHNlCi0rCQlyZXR1cm4gcmV0 OwotKwotKwl9Ci0rCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9rZXlb XSA9IHsKLSsJMHhhMSwweGI5LDB4MGMsMHhiYSwweDNmLDB4MDYsMHhhYywweDM1LDB4M2IsMHgy YywweDM0LDB4MzgsCi0rCTB4NzYsMHgwOCwweDE3LDB4NjIsMHgwOSwweDA5LDB4MjMsMHgwMiww eDZlLDB4OTEsMHg3NywweDE4LAotKwkweDE1LDB4ZjIsMHg5ZCwweGFiLDB4MDEsMHg5MywweDJm LDB4MmYKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfaVtdID0gewot KwkweDRmLDB4YWUsMHhmNywweDExLDB4N2MsMHhkYSwweDU5LDB4YzYsMHg2ZSwweDRiLDB4OTIs MHgwMSwKLSsJMHgzZSwweDc2LDB4OGEsMHhkNQotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgWFRTXzEyOF9wdFtdID0gewotKwkweGViLDB4YWIsMHhjZSwweDk1LDB4YjEsMHg0ZCww eDNjLDB4OGQsMHg2ZiwweGIzLDB4NTAsMHgzOSwKLSsJMHgwNywweDkwLDB4MzEsMHgxYwotK307 Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0gewotKwkweDc3LDB4 OGEsMHhlOCwweGI0LDB4M2MsMHhiOSwweDhkLDB4NWEsMHg4MiwweDUwLDB4ODEsMHhkNSwKLSsJ MHhiZSwweDQ3LDB4MWMsMHg2MwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg WFRTXzI1Nl9rZXlbXSA9IHsKLSsJMHgxZSwweGE2LDB4NjEsMHhjNSwweDhkLDB4OTQsMHgzYSww eDBlLDB4NDgsMHgwMSwweGU0LDB4MmYsCi0rCTB4NGIsMHgwOSwweDQ3LDB4MTQsMHg5ZSwweDdm LDB4OWYsMHg4ZSwweDNlLDB4NjgsMHhkMCwweGM3LAotKwkweDUwLDB4NTIsMHgxMCwweGJkLDB4 MzEsMHgxYSwweDBlLDB4N2MsMHhkNiwweGUxLDB4M2YsMHhmZCwKLSsJMHhmMiwweDQxLDB4OGQs MHg4ZCwweDE5LDB4MTEsMHhjMCwweDA0LDB4Y2QsMHhhNSwweDhkLDB4YTMsCi0rCTB4ZDYsMHgx OSwweGI3LDB4ZTIsMHhiOSwweDE0LDB4MWUsMHg1OCwweDMxLDB4OGUsMHhlYSwweDM5LAotKwkw eDJjLDB4ZjQsMHgxYiwweDA4Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNf MjU2X2lbXSA9IHsKLSsJMHhhZCwweGY4LDB4ZDksMHgyNiwweDI3LDB4NDYsMHg0YSwweGQyLDB4 ZjAsMHg0MiwweDhlLDB4ODQsCi0rCTB4YTksMHhmOCwweDc1LDB4NjQKLSt9OwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfcHRbXSA9IHsKLSsJMHgyZSwweGVkLDB4ZWEsMHg1 MiwweGNkLDB4ODIsMHgxNSwweGUxLDB4YWMsMHhjNiwweDQ3LDB4ZTgsCi0rCTB4MTAsMHhiYiww eGMzLDB4NjQsMHgyZSwweDg3LDB4MjgsMHg3ZiwweDhkLDB4MmUsMHg1NywweGUzLAotKwkweDZj LDB4MGEsMHgyNCwweGZiLDB4YzEsMHgyYSwweDIwLDB4MmUKLSt9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIFhUU18yNTZfY3RbXSA9IHsKLSsJMHhjYiwweGFhLDB4ZDAsMHhlMiwweGY2 LDB4Y2UsMHhhMywweGY1LDB4MGIsMHgzNywweGY5LDB4MzQsCi0rCTB4ZDQsMHg2YSwweDliLDB4 MTMsMHgwYiwweDlkLDB4NTQsMHhmMCwweDdlLDB4MzQsMHhmMywweDZhLAotKwkweGY3LDB4OTMs MHhlOCwweDZmLDB4NzMsMHhjNiwweGQ3LDB4ZGIKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0 X2Flc194dHMoKQotKwl7Ci0rCWludCByZXQgPSAxOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0r CUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZj dHgsIEVWUF9hZXNfMTI4X3h0cygpLAotKwkJCQlYVFNfMTI4X2tleSwgWFRTXzEyOF9pLCBYVFNf MTI4X3B0LCBYVFNfMTI4X2N0LAotKwkJCQlzaXplb2YoWFRTXzEyOF9wdCkpIDw9IDApCi0rCQly ZXQgPSAwOwotKwotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzI1Nl94dHMo KSwKLSsJCQkJWFRTXzI1Nl9rZXksIFhUU18yNTZfaSwgWFRTXzI1Nl9wdCwgWFRTXzI1Nl9jdCwK LSsJCQkJc2l6ZW9mKFhUU18yNTZfcHQpKSA8PSAwKQotKwkJcmV0ID0gMDsKLSsKLSsJRVZQX0NJ UEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJaWYgKHJldCA9PSAwKQotKwkJRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwlyZXR1 cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzLmMKLS0tLSBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUw LjU0NjkyMzIyNCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHMuYwky MDE0LTA1LTA2IDE2OjMzOjI0LjMwOTg2NTE2MCArMDIwMAotQEAgLTAsMCArMSw0OTEgQEAKLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0 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 U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIF9HTlVfU09VUkNFCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNpbmNsdWRlIDxkbGZjbi5o PgotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSAi Zmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsKLSsjaWZuZGVmIFBBVEhfTUFYCi0rI2RlZmluZSBQQVRIX01BWCAxMDI0 Ci0rI2VuZGlmCi0rCi0rc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOwotK3N0YXRp YyBpbnQgZmlwc19tb2RlID0gMDsKLStzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7Ci0rCi0r c3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCk7Ci0rc3RhdGljIGludCBmaXBz X3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQgZmlwc19jbGVhcl9vd25pbmdf dGhyZWFkKHZvaWQpOwotKwotKyNkZWZpbmUgZmlwc193X2xvY2soKQlDUllQVE9fd19sb2NrKENS WVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3dfdW5sb2NrKCkJQ1JZUFRPX3dfdW5sb2Nr KENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3JfbG9jaygpCUNSWVBUT19yX2xvY2so Q1JZUFRPX0xPQ0tfRklQUykKLSsjZGVmaW5lIGZpcHNfcl91bmxvY2soKQlDUllQVE9fcl91bmxv Y2soQ1JZUFRPX0xPQ0tfRklQUykKLSsKLStzdGF0aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBv bm9mZikKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgp OwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBm aXBzX3dfbG9jaygpOwotKwkJZmlwc19tb2RlID0gb25vZmY7Ci0rCQlpZiAoIW93bmluZ190aHJl YWQpIGZpcHNfd191bmxvY2soKTsKLSsJCX0KLSsJfQotKwotK2ludCBGSVBTX21vZHVsZV9tb2Rl KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19p c19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0ZWQpCi0rCQl7Ci0rCQlpZiAo IW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCQlyZXQgPSBmaXBzX21vZGU7Ci0rCQlp ZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsK LSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQotKyAgICB7Ci0rICAgIGlu dCByZXQgPSAwOwotKyAgICBpZiAoZmlwc19zdGFydGVkKQotKwl7Ci0rCWludCBvd25pbmdfdGhy ZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmICghb3duaW5nX3RocmVhZCkg Zmlwc19yX2xvY2soKTsKLSsJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOwotKwlpZiAoIW93bmlu Z190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJfQotKyAgICByZXR1cm4gcmV0OwotKyAgICB9 Ci0rCi0rLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRoaXMgd2lsbCBi ZSBjYWxsZWQKLSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24uIEl0IGhh cyB0aGUgbWluaW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBiaWcgYSBw ZXJmb3JtYW5jZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQp Ci0rICAgIHsKLSsgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKLSsJewotKwlPcGVuU1NMRGll KF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlMVVJFIik7Ci0rCX0K LSsgICAgfQotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQotKyAgICB7Ci0r ICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgIH0KLSsKLSsvKiB3ZSBpbXBsZW1lbnQg d2hhdCBsaWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8KLSsKLStzdGF0aWMgaW50Ci0rZ2V0 X2xpYnJhcnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1l LCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbikKLSt7Ci0rCURsX2luZm8gaW5mbzsKLSsJdm9p ZCAqZGwsICpzeW07Ci0rCWludCBydiA9IC0xOwotKwotKyAgICAgICAgZGwgPSBkbG9wZW4obGli bmFtZSwgUlRMRF9MQVpZKTsKLSsgICAgICAgIGlmIChkbCA9PSBOVUxMKSB7Ci0rCSAgICAgICAg cmV0dXJuIC0xOwotKyAgICAgICAgfSAgICAgICAKLSsKLSsJc3ltID0gZGxzeW0oZGwsIHN5bWJv bG5hbWUpOwotKwotKwlpZiAoc3ltICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwgJmluZm8pKSB7Ci0r CQlzdHJuY3B5KHBhdGgsIGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuLTEpOwotKwkJcGF0aFtwYXRo bGVuLTFdID0gJ1wwJzsKLSsJCXJ2ID0gMDsKLSsJfQotKwotKwlkbGNsb3NlKGRsKTsJCi0rCQot KwlyZXR1cm4gcnY7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBjaGFyIGNvbnZbXSA9ICIwMTIzNDU2 Nzg5YWJjZGVmIjsKLSsKLStzdGF0aWMgY2hhciAqCi0rYmluMmhleCh2b2lkICpidWYsIHNpemVf dCBsZW4pCi0rewotKwljaGFyICpoZXgsICpwOwotKwl1bnNpZ25lZCBjaGFyICpzcmMgPSBidWY7 Ci0rCQotKwloZXggPSBtYWxsb2MobGVuICogMiArIDEpOwotKwlpZiAoaGV4ID09IE5VTEwpCi0r CQlyZXR1cm4gTlVMTDsKLSsKLSsJcCA9IGhleDsKLSsKLSsJd2hpbGUgKGxlbiA+IDApIHsKLSsJ CXVuc2lnbmVkIGM7Ci0rCi0rCQljID0gKnNyYzsKLSsJCXNyYysrOwotKwotKwkJKnAgPSBjb252 W2MgPj4gNF07Ci0rCQkrK3A7Ci0rCQkqcCA9IGNvbnZbYyAmIDB4MGZdOwotKwkJKytwOwotKwkJ LS1sZW47Ci0rCX0KLSsJKnAgPSAnXDAnOwotKwlyZXR1cm4gaGV4OwotK30KLSsKLSsjZGVmaW5l IEhNQUNfUFJFRklYICIuIiAKLSsjZGVmaW5lIEhNQUNfU1VGRklYICIuaG1hYyIgCi0rI2RlZmlu ZSBSRUFEX0JVRkZFUl9MRU5HVEggMTYzODQKLSsKLStzdGF0aWMgY2hhciAqCi0rbWFrZV9obWFj X3BhdGgoY29uc3QgY2hhciAqb3JpZ3BhdGgpCi0rewotKwljaGFyICpwYXRoLCAqcDsKLSsJY29u c3QgY2hhciAqZm47Ci0rCi0rCXBhdGggPSBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJFRklYKSArIHNp emVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKLSsJaWYocGF0aCA9PSBOVUxM KSB7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlmbiA9IHN0cnJjaHIob3JpZ3BhdGgsICcv Jyk7Ci0rCWlmIChmbiA9PSBOVUxMKSB7Ci0rCQlmbiA9IG9yaWdwYXRoOwotKwl9IGVsc2Ugewot KwkJKytmbjsKLSsJfQotKwotKwlzdHJuY3B5KHBhdGgsIG9yaWdwYXRoLCBmbi1vcmlncGF0aCk7 Ci0rCXAgPSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOwotKwlwID0gc3RwY3B5KHAsIEhNQUNfUFJF RklYKTsKLSsJcCA9IHN0cGNweShwLCBmbik7Ci0rCXAgPSBzdHBjcHkocCwgSE1BQ19TVUZGSVgp OwotKwotKwlyZXR1cm4gcGF0aDsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IGNoYXIgaG1hY2tleVtd ID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKLSsKLStzdGF0aWMgaW50Ci0r Y29tcHV0ZV9maWxlX2htYWMoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmJ1Ziwgc2l6ZV90ICpo bWFjbGVuKQotK3sKLSsJRklMRSAqZiA9IE5VTEw7Ci0rCWludCBydiA9IC0xOwotKwl1bnNpZ25l ZCBjaGFyIHJidWZbUkVBRF9CVUZGRVJfTEVOR1RIXTsKLSsJc2l6ZV90IGxlbjsKLSsJdW5zaWdu ZWQgaW50IGhsZW47Ci0rCUhNQUNfQ1RYIGM7Ci0rCi0rCUhNQUNfQ1RYX2luaXQoJmMpOwotKwot KwlmID0gZm9wZW4ocGF0aCwgInIiKTsKLSsKLSsJaWYgKGYgPT0gTlVMTCkgewotKwkJZ290byBl bmQ7Ci0rCX0KLSsKLSsJSE1BQ19Jbml0KCZjLCBobWFja2V5LCBzaXplb2YoaG1hY2tleSktMSwg RVZQX3NoYTI1NigpKTsKLSsKLSsJd2hpbGUgKChsZW49ZnJlYWQocmJ1ZiwgMSwgc2l6ZW9mKHJi dWYpLCBmKSkgIT0gMCkgewotKwkJSE1BQ19VcGRhdGUoJmMsIHJidWYsIGxlbik7Ci0rCX0KLSsK LSsJbGVuID0gc2l6ZW9mKHJidWYpOwotKwkvKiByZXVzZSByYnVmIGZvciBobWFjICovCi0rCUhN QUNfRmluYWwoJmMsIHJidWYsICZobGVuKTsKLSsKLSsJKmJ1ZiA9IG1hbGxvYyhobGVuKTsKLSsJ aWYgKCpidWYgPT0gTlVMTCkgewotKwkJZ290byBlbmQ7Ci0rCX0KLSsKLSsJKmhtYWNsZW4gPSBo bGVuOwotKwotKwltZW1jcHkoKmJ1ZiwgcmJ1ZiwgaGxlbik7Ci0rCi0rCXJ2ID0gMDsKLStlbmQ6 Ci0rCUhNQUNfQ1RYX2NsZWFudXAoJmMpOwotKwotKwlpZiAoZikKLSsJCWZjbG9zZShmKTsKLSsK LSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgaW50Ci0rRklQU0NIRUNLX3ZlcmlmeShjb25z dCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lKQotK3sKLSsJY2hhciBwYXRo W1BBVEhfTUFYKzFdOwotKwlpbnQgcnY7Ci0rCUZJTEUgKmhmOwotKwljaGFyICpobWFjcGF0aCwg KnA7Ci0rCWNoYXIgKmhtYWMgPSBOVUxMOwotKwlzaXplX3QgbjsKLSsJCi0rCXJ2ID0gZ2V0X2xp YnJhcnlfcGF0aChsaWJuYW1lLCBzeW1ib2xuYW1lLCBwYXRoLCBzaXplb2YocGF0aCkpOwotKwot KwlpZiAocnYgPCAwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWhtYWNwYXRoID0gbWFrZV9obWFjX3Bh dGgocGF0aCk7Ci0rCWlmIChobWFjcGF0aCA9PSBOVUxMKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWhm ID0gZm9wZW4oaG1hY3BhdGgsICJyIik7Ci0rCWlmIChoZiA9PSBOVUxMKSB7Ci0rCQlmcmVlKGht YWNwYXRoKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCWlmIChnZXRsaW5lKCZobWFjLCAmbiwg aGYpID4gMCkgewotKwkJdm9pZCAqYnVmOwotKwkJc2l6ZV90IGhtYWNsZW47Ci0rCQljaGFyICpo ZXg7Ci0rCi0rCQlpZiAoKHA9c3RyY2hyKGhtYWMsICdcbicpKSAhPSBOVUxMKQotKwkJCSpwID0g J1wwJzsKLSsKLSsJCWlmIChjb21wdXRlX2ZpbGVfaG1hYyhwYXRoLCAmYnVmLCAmaG1hY2xlbikg PCAwKSB7Ci0rCQkJcnYgPSAtNDsKLSsJCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJCWlmICgoaGV4 PWJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgewotKwkJCWZyZWUoYnVmKTsKLSsJCQly diA9IC01OwotKwkJCWdvdG8gZW5kOwotKwkJfQotKwotKwkJaWYgKHN0cmNtcChoZXgsIGhtYWMp ICE9IDApIHsKLSsJCQlydiA9IC0xOwotKwkJfQotKwkJZnJlZShidWYpOwotKwkJZnJlZShoZXgp OwotKwl9IGVsc2UgewotKwkJcnYgPSAtMTsKLSsJfQotKwotK2VuZDoKLSsJZnJlZShobWFjKTsK LSsJZnJlZShobWFjcGF0aCk7Ci0rCWZjbG9zZShoZik7Ci0rCi0rCWlmIChydiA8IDApCi0rCQly ZXR1cm4gMDsKLSsKLSsJLyogY2hlY2sgc3VjY2Vzc2Z1bCAqLwotKwlyZXR1cm4gMTsJCi0rfQot KwotK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgp Ci0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0rICAg IGZpcHNfc3RhcnRlZCA9IDE7Ci0rICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsKLSsg ICAgaWYob25vZmYpCi0rCXsKLSsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsJLyog RG9uJ3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdp YwotKwkgICBzZWVkaW5nICovCi0rCWlmKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVf QUxSRUFEWV9TRVQpOwotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9 IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsjaWZkZWYgT1BFTlNTTF9JQTMyX1NT RTIKLSsJewotKwlleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzJdOwotKwlp ZiAoKE9QRU5TU0xfaWEzMmNhcF9QWzBdICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2 KSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJ UFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAx OwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlPUEVOU1NMX2lh MzJjYXBfUFswXSB8PSAoMTw8MjgpOwkvKiBzZXQgInNoYXJlZCBjYWNoZSIJKi8KLSsJT1BFTlNT TF9pYTMyY2FwX1BbMV0gJj0gfigxPDwoNjAtMzIpKTsJLyogY2xlYXIgQVZYCQkqLwotKwl9Ci0r I2VuZGlmCi0rCi0rCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJjcnlwdG8uc28uIiBTSExJQl9W RVJTSU9OX05VTUJFUiwiRklQU19tb2RlX3NldCIpKQotKwkgICAgewotKwkgICAgRklQU2VycihG SVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01B VENIKTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkg ICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rCi0rCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJzc2wu c28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwiU1NMX0NUWF9uZXciKSkKLSsJICAgIHsKLSsJICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSU5HRVJQUklOVF9E T0VTX05PVF9NQVRDSCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0 ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwotKwlpZihGSVBTX3NlbGZ0ZXN0KCkp Ci0rCSAgICBmaXBzX3NldF9tb2RlKG9ub2ZmKTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJ ICAgIH0KLSsJcmV0ID0gMTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsgICAgZmlwc19zZXRfbW9kZSgw KTsKLSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAgcmV0ID0gMTsKLStlbmQ6Ci0r ICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBmaXBzX3dfdW5sb2NrKCk7Ci0r ICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLStzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNf dGhyZWFkOwotK3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKLSsKLStzdGF0aWMgaW50 IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlp ZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBT Mik7Ci0rCQlpZiAoZmlwc190aHJlYWRfc2V0KQotKwkJCXsKLSsJCQlDUllQVE9fVEhSRUFESUQg Y3VyOwotKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOwotKwkJCWlmICghQ1JZUFRP X1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQotKwkJCQlyZXQgPSAxOwotKwkJCX0K LSsJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiBy ZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWlu dCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJQ1JZUFRPX3dfbG9j ayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoIWZpcHNfdGhyZWFkX3NldCkKLSsJCQl7Ci0r CQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFkKTsKLSsJCQlyZXQgPSAxOwot KwkJCWZpcHNfdGhyZWFkX3NldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBU T19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBmaXBzX2Ns ZWFyX293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZp cHNfc3RhcnRlZCkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwot KwkJaWYgKGZpcHNfdGhyZWFkX3NldCkKLSsJCQl7Ci0rCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsK LSsJCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKLSsJCQlpZiAoIUNSWVBUT19USFJF QURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKLSsJCQkJZmlwc190aHJlYWRfc2V0ID0gMDsK LSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJfQotKwly ZXR1cm4gcmV0OwotKwl9Ci0rCi0rCi0rI2lmIDAKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlz IHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgotKyAqIG5h bWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0Ci0rICovCi0rdm9p ZCBoYXNoX2ZpbmFsKHZvaWQpCi0rCXsKLSsJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBT X1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJfQotKyNlbmRpZgotKwotKwotKyNlbmRpZgotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYwotLS0tIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMJMjAxNC0wNS0w NiAxNjoyOTo1MC41NDY5MjMyMjQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9maXBzX2NtYWNfc2VsZnRlc3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NjkyMzIyNCArMDIw MAotQEAgLTAsMCArMSwxNjEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq 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+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KLSsjaW5jbHVkZSAiZmlw c19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsKLSsJ aW50IG5pZDsKLSsJY29uc3QgdW5zaWduZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RIXTsg c2l6ZV90IGtleXNpemU7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnWzY0XTsgc2l6ZV90IG1z Z3NpemU7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMyXTsgc2l6ZV90IG1hY3NpemU7Ci0r fSBDTUFDX0tBVDsKLSsKLSsvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9u cy9uaXN0cHVicy84MDAtMzhCL1NQXzgwMC0zOEIucGRmICovCi0rc3RhdGljIGNvbnN0IENNQUNf S0FUIHZlY3RvcltdID0gewotKyAgICB7CU5JRF9hZXNfMTI4X2NiYywJLyogQ291bnQgPSAzMiBm cm9tIENNQUNHZW5BRVMxMjgudHh0ICovCi0rCXsgMHg3NywweGE3LDB4N2YsMHhhZiwgMHgyOSww eDBjLDB4MWYsMHhhMywKLSsJICAweDBjLDB4NjgsMHgzZCwweGYxLCAweDZiLDB4YTcsMHhhNyww eDdiLCB9LCAxMjgsCi0rCXsgMHgwMiwweDA2LDB4ODMsMHhlMSwgMHhmMCwweDM5LDB4MmYsMHg0 YywKLSsJICAweGFjLDB4NTQsMHgzMSwweDhiLCAweDYwLDB4MjksMHgyNSwweDllLAotKwkgIDB4 OWMsMHg1NSwweDNkLDB4YmMsIDB4NGIsMHg2YSwweGQ5LDB4OTgsCi0rCSAgMHhlNiwweDRkLDB4 NTgsMHhlNCwgMHhlNywweGRjLDB4MmUsMHgxMywgfSwgMjU2LAotKwl7IDB4ZmIsMHhmZSwweGE0 LDB4MWIsIH0sIDMyCi0rICAgIH0sCi0rICAgIHsJTklEX2Flc18xOTJfY2JjLAkvKiBDb3VudCA9 IDIzIGZyb20gQ01BQ0dlbkFFUzE5Mi50eHQgKi8KLSsJeyAweDdiLDB4MzIsMHgzOSwweDEzLCAw eDY5LDB4YWEsMHg0YywweGE5LAotKwkgIDB4NzUsMHg1OCwweDA5LDB4NWIsIDB4ZTMsMHhjMyww eGVjLDB4ODYsCi0rCSAgMHgyYiwweGQwLDB4NTcsMHhjZSwgMHhmMSwweGUzLDB4MmQsMHg2Miwg fSwgMTkyLAotKwl7IDB4MCB9LCAwLAotKwl7IDB4ZTQsMHhkOSwweDM0LDB4MGIsIDB4MDMsMHhl NiwweDdkLDB4ZWYsCi0rCSAgMHhkNCwweDk2LDB4OWMsMHhjMSwgMHhlZCwweDM3LDB4MzUsMHhl NiwgfSwgMTI4LAotKyAgICB9LAotKyAgICB7CU5JRF9hZXNfMjU2X2NiYywJLyogQ291bnQgPSAz MyBmcm9tIENNQUNHZW5BRVMyNTYudHh0ICovCi0rCXsgMHgwYiwweDEyLDB4MmEsMHhjOCwgMHhm MywweDRlLDB4ZDEsMHhmZSwKLSsJICAweDA4LDB4MmEsMHgzNiwweDI1LCAweGQxLDB4NTcsMHg1 NiwweDE0LAotKwkgIDB4NTQsMHgxNiwweDdhLDB4YzEsIDB4NDUsMHhhMSwweDBiLDB4YmYsCi0r CSAgMHg3NywweGM2LDB4YTcsMHgwNSwgMHg5NiwweGQ1LDB4NzQsMHhmMSwgfSwgMjU2LAotKwl7 IDB4NDksMHg4YiwweDUzLDB4ZmQsIDB4ZWMsMHg4NywweGVkLDB4Y2IsCi0rCSAgMHhmMCwweDcw LDB4OTcsMHhkYywgMHhjZCwweGU5LDB4M2EsMHgwOCwKLSsJICAweDRiLDB4YWQsMHg3NSwweDAx LCAweGEyLDB4MjQsMHhlMywweDg4LAotKwkgIDB4ZGYsMHgzNCwweDljLDB4ZTEsIDB4ODksMHg1 OSwweGZlLDB4ODQsCi0rCSAgMHg4NSwweGY4LDB4YWQsMHgxNSwgMHgzNywweGYwLDB4ZDgsMHg5 NiwKLSsJICAweGVhLDB4NzMsMHhiZSwweGRjLCAweDcyLDB4MTQsMHg3MSwweDNmLCB9LCAzODQs Ci0rCXsgMHhmNiwweDJjLDB4NDYsMHgzMiwgMHg5YiwgfSwgNDAsCi0rICAgIH0sCi0rICAgIHsJ TklEX2Rlc19lZGUzX2NiYywJLyogQ291bnQgPSA0MSBmcm9tIENNQUNHZW5UREVTMy5yZXEgKi8K LSsJeyAweDg5LDB4YmMsMHhkOSwweDUyLCAweGE4LDB4YzgsMHhhYiwweDM3LAotKwkgIDB4MWEs MHhmNCwweDhhLDB4YzcsIDB4ZDAsMHg3MCwweDg1LDB4ZDUsCi0rCSAgMHhlZiwweGY3LDB4MDIs MHhlNiwgMHhkNiwweDJjLDB4ZGMsMHgyMywgfSwgMTkyLAotKwl7IDB4ZmEsMHg2MiwweDBjLDB4 MWIsIDB4YmUsMHg5NywweDMxLDB4OWUsCi0rCSAgMHg5YSwweDBjLDB4ZjAsMHg0OSwgMHgyMSww eDIxLDB4ZjcsMHhhMiwKLSsJICAweDBlLDB4YjAsMHg4YSwweDZhLCAweDcwLDB4OWQsMHhjYiww eGQwLAotKwkgIDB4MGEsMHhhZiwweDM4LDB4ZTQsIDB4ZjksMHg5ZSwweDc1LDB4NGUsIH0sIDI1 NiwKLSsJeyAweDhmLDB4NDksMHhhMSwweGI3LCAweGQ2LDB4YWEsMHgyMiwweDU4LCB9LCA2NCwK LSsgICAgfSwKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWMoKQotKwl7Ci0rCXNpemVf dCBuLCBvdXRsZW47Ci0rCXVuc2lnbmVkIGNoYXIgICAgb3V0WzMyXTsKLSsJY29uc3QgRVZQX0NJ UEhFUiAqY2lwaGVyOwotKwlDTUFDX0NUWCAqY3R4ID0gQ01BQ19DVFhfbmV3KCk7Ci0rCWNvbnN0 IENNQUNfS0FUICp0OwotKwlpbnQgcnYgPSAxOwotKwotKwlmb3Iobj0wLHQ9dmVjdG9yOyBuPHNp emVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQotKwkJewotKwkJY2lwaGVy ID0gRklQU19nZXRfY2lwaGVyYnluaWQodC0+bmlkKTsKLSsJCWlmICghY2lwaGVyKQotKwkJCXsK LSsJCQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCWlmICghQ01BQ19Jbml0KGN0 eCwgdC0+a2V5LCB0LT5rZXlzaXplLzgsIGNpcGhlciwgMCkpCi0rCQkJewotKwkJCXJ2ID0gLTE7 Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJaWYgKCFDTUFDX1VwZGF0ZShjdHgsIHQtPm1zZywg dC0+bXNnc2l6ZS84KSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9 Ci0rCQkJCi0rCQlpZiAoIUNNQUNfRmluYWwoY3R4LCBvdXQsICZvdXRsZW4pKQotKwkJCXsKLSsJ CQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCUNNQUNfQ1RYX2NsZWFudXAoY3R4 KTsKLSsKLSsJCWlmKG91dGxlbiA8IHQtPm1hY3NpemUvOCB8fCBtZW1jbXAob3V0LHQtPm1hYyx0 LT5tYWNzaXplLzgpKQotKwkJCXsKLSsJCSAgICAJcnYgPSAwOwotKwkJICAgIAl9Ci0rCQl9Ci0r Ci0rCWVycjoKLSsJQ01BQ19DVFhfZnJlZShjdHgpOwotKwotKwlpZiAocnYgPT0gLTEpCi0rCQl7 Ci0rCQlydiA9IDA7Ci0rCQl9Ci0rCWlmICghcnYpCi0rCQkgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0NNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCi0rCXJldHVybiBydjsK LSsJfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19k ZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZGVzX3Nl bGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVz dC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDY5MjMyMjQgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6 NTAuNTQ2OTIzMjI0ICswMjAwCi1AQCAtMCwwICsxLDE0NyBAQAotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoK LSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNl bmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBjb25zdCBzdHJ1 Y3QKLSsgICAgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNp cGhlcnRleHRbOF07Ci0rICAgIH0gdGVzdHMyW109Ci0rCXsKLSsJewotKwl7IDB4N2MsMHg0Ziww eDZlLDB4ZjcsMHhhMiwweDA0LDB4MTYsMHhlYywKLSsJICAweDBiLDB4NmIsMHg3YywweDllLDB4 NWUsMHgxOSwweGE3LDB4YzQgfSwKLSsJeyAweDA2LDB4YTcsMHhkOCwweDc5LDB4YWEsMHhjZSww eDY5LDB4ZWYgfSwKLSsJeyAweDRjLDB4MTEsMHgxNywweDU1LDB4YmYsMHhjNCwweDRlLDB4ZmQg fQotKwl9LAotKwl7Ci0rCXsgMHg1ZCwweDllLDB4MDEsMHhkMywweDI1LDB4YzcsMHgzZSwweDM0 LAotKwkgIDB4MDEsMHgxNiwweDdjLDB4ODUsMHgyMywweGRmLDB4ZTAsMHg2OCB9LAotKwl7IDB4 OWMsMHg1MCwweDA5LDB4MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9LAotKwl7IDB4ZDIsMHgwYiww eDE4LDB4ZGYsMHhkOSwweDBkLDB4OWUsMHhmZiB9LAotKwl9Ci0rCX07Ci0rCi0rc3RhdGljIGNv bnN0IHN0cnVjdAotKyAgICB7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKLSsg ICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgY2lwaGVydGV4dFs4XTsKLSsgICAgfSB0ZXN0czNbXT0KLSsJewotKwl7Ci0rCXsgMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkgIDB4RkUsMHhEQywweEJB LDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwKLSsJICAweDEyLDB4MzQsMHg1NiwweDc4LDB4OWEs MHhiYywweGRlLDB4ZjAgfSwKLSsJeyAweDhmLDB4OGYsMHhiZiwweDliLDB4NWQsMHg0OCwweGI0 LDB4MWMgfSwKLSsJeyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMsMHhhMiwweGVhLDB4MWIgfSwK LSsJfSwKLSsJewotKwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsMHhGRSwK LSsJICAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYsCi0rCSAgMHhFRCww eDM5LDB4RDksMHg1MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCi0rCXsgMHgwMSwweDIzLDB4NDUs MHg2NywweDg5LDB4QUIsMHhDRCwweEVGIH0sCi0rCXsgMHgxMSwweDI1LDB4YjAsMHgzNSwweGJl LDB4YTAsMHg4MiwweDg2IH0sCi0rCX0sCi0rCX07Ci0rCi0rCi0rc3RhdGljIGludCBjb3JydXB0 X2RlczsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9kZXMoKQotKyAgICB7Ci0rICAgIGNvcnJ1cHRf ZGVzID0gMTsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0rICAgIHsKLSsg ICAgaW50IG4sIHJldCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJ UEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkg M0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAgIGZvcihuPTAgOyBuIDwg MiA7ICsrbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsKLSsJbWVtY3B5 KHBsYWludGV4dCwgdGVzdHMyW25dLnBsYWludGV4dCwgc2l6ZW9mKHBsYWludGV4dCkpOwotKwlp ZiAoY29ycnVwdF9kZXMpCi0rCQlwbGFpbnRleHRbMF0rKzsKLSsJaWYgKCFmaXBzX2NpcGhlcl90 ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAotKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxMLAot KwkJCQlwbGFpbnRleHQsIHRlc3RzMltuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwot Kwl9Ci0rCi0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8g a25vd24gYW5zd2VycyAqLwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJaWYg KCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSwKLSsJCQkJdGVzdHMz W25dLmtleSwgTlVMTCwKLSsJCQkJdGVzdHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhl cnRleHQsIDgpKQotKwkJZ290byBlcnI7Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgot KyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0r CSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKLSsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDY5MjMyMjQg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NDY5MjMyMjQgKzAyMDAKLUBAIC0wLDAgKzEsNDM2IEBACi0rLyog Zmlwcy9yYW5kL2ZpcHNfZHJiZ19jdHIuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3Qu Ci0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUg PHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLStzdGF0aWMgdm9pZCBp bmNfMTI4KERSQkdfQ1RSX0NUWCAqY2N0eCkKLSsJewotKwlpbnQgaTsKLSsJdW5zaWduZWQgY2hh ciBjOwotKwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1OwotKwlmb3IgKGkgPSAwOyBp IDwgMTY7IGkrKykKLSsJCXsKLSsJCWMgPSAqcDsKLSsJCWMrKzsKLSsJCSpwID0gYzsKLSsJCWlm IChjKQotKwkJCXJldHVybjsKLSsJCXAtLTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyB2b2lkIGN0 cl9YT1IoRFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90 IGlubGVuKQotKwl7Ci0rCXNpemVfdCBpLCBuOwotKwkvKiBBbnkgemVybyBwYWRkaW5nIHdpbGwg aGF2ZSBubyBlZmZlY3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQotKwkgKiBhcmUgWE9SaW5nLiBTbyBq dXN0IHByb2Nlc3MgaG93ZXZlciBtdWNoIGlucHV0IHdlIGhhdmUuCi0rCSAqLwotKwotKwlpZiAo IWluIHx8ICFpbmxlbikKLSsJCXJldHVybjsKLSsKLSsJaWYgKGlubGVuIDwgY2N0eC0+a2V5bGVu KQotKwkJbiA9IGlubGVuOwotKwllbHNlCi0rCQluID0gY2N0eC0+a2V5bGVuOwotKwotKwlmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKQotKwkJY2N0eC0+S1tpXSBePSBpbltpXTsKLSsJaWYgKGlubGVu IDw9IGNjdHgtPmtleWxlbikKLSsJCXJldHVybjsKLSsKLSsJbiA9IGlubGVuIC0gY2N0eC0+a2V5 bGVuOwotKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCi0rCWlmIChuID4gMTYpCi0rCQluID0g MTY7Ci0rCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKwkJY2N0eC0+VltpXSBePSBpbltpICsg Y2N0eC0+a2V5bGVuXTsKLSsJfQotKwotKy8qIFByb2Nlc3MgYSBjb21wbGV0ZSBibG9jayB1c2lu ZyBCQ0MgYWxnb3JpdGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4zICovCi0rCi0rc3RhdGljIHZvaWQg Y3RyX0JDQ19ibG9jayhEUkJHX0NUUl9DVFggKmNjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4pCi0rCXsKLSsJaW50IGk7Ci0rCWZvciAoaSA9IDA7 IGkgPCAxNjsgaSsrKQotKwkJb3V0W2ldIF49IGluW2ldOwotKwlBRVNfZW5jcnlwdChvdXQsIG91 dCwgJmNjdHgtPmRmX2tzKTsKLSsjaWYgMAotK2ZwcmludGYoc3RkZXJyLCAiQkNDIGluK291dFxu Iik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOwotK0JJT19kdW1wX2ZwKHN0ZGVyciwg b3V0LCAxNik7Ci0rI2VuZGlmCi0rCX0KLSsKLSsvKiBIYW5kbGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0 aW9ucyBmb3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9yIEsgYW5kIFggKi8KLStzdGF0aWMg dm9pZCBjdHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmluKQotKwl7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGluKTsKLSsJY3Ry X0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBpbik7Ci0rCWlmIChjY3R4LT5rZXlsZW4g IT0gMTYpCi0rCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGluKTsKLSsJfQot Ky8qIEluaXRpYWxpc2UgQkNDIGJsb2NrczogdGhlc2UgaGF2ZSB0aGUgdmFsdWUgMCwxLDIgaW4g bGVmdG1vc3QgcG9zaXRpb25zOgotKyAqIHNlZSAxMC40LjIgc3RhZ2UgNy4KLSsgKi8KLStzdGF0 aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJCR19DVFJfQ1RYICpjY3R4KQotKwl7Ci0rCW1lbXNldChj Y3R4LT5LWCwgMCwgNDgpOwotKwltZW1zZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsKLSsJY3RyX0JD Q19ibG9jayhjY3R4LCBjY3R4LT5LWCwgY2N0eC0+Ymx0bXApOwotKwljY3R4LT5ibHRtcFszXSA9 IDE7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOwot KwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJewotKwkJY2N0eC0+Ymx0bXBbM10gPSAyOwot KwkJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBjY3R4LT5ibHRtcCk7Ci0rCQl9 Ci0rCX0KLSsKLSsvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRobSwg c29tZSBwb3NzaWJseSBwYXJ0aWFsICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUoRFJC R19DVFJfQ1RYICpjY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlu bGVuKQotKwl7Ci0rCWlmICghaW4gfHwgIWlubGVuKQotKwkJcmV0dXJuOwotKwkvKiBJZiB3ZSBo YXZlIHBhcnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0ICovCi0rCWlmIChjY3R4LT5ibHRtcF9w b3MpCi0rCQl7Ci0rCQlzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9zOwotKwkJLyog SWYgd2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNzIGl0ICovCi0rCQlpZiAoaW5s ZW4gPj0gbGVmdCkKLSsJCQl7Ci0rCQkJbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBf cG9zLCBpbiwgbGVmdCk7Ci0rCQkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwot KwkJCWNjdHgtPmJsdG1wX3BvcyA9IDA7Ci0rCQkJaW5sZW4gLT0gbGVmdDsKLSsJCQlpbiArPSBs ZWZ0OwotKwkJCX0KLSsJCX0KLSsJLyogUHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxv Y2tzICovCi0rCXdoaWxlIChpbmxlbiA+PSAxNikKLSsJCXsKLSsJCWN0cl9CQ0NfYmxvY2tzKGNj dHgsIGluKTsKLSsJCWluICs9IDE2OwotKwkJaW5sZW4gLT0gMTY7Ci0rCQl9Ci0rCS8qIENvcHkg YW55IHJlbWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0r CWlmIChpbmxlbiA+IDApCi0rCQl7Ci0rCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRt cF9wb3MsIGluLCBpbmxlbik7Ci0rCQljY3R4LT5ibHRtcF9wb3MgKz0gaW5sZW47Ci0rCQl9Ci0r CX0KLSsKLStzdGF0aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAqY2N0eCkKLSsJ ewotKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQotKwkJewotKwkJbWVtc2V0KGNjdHgtPmJsdG1wICsg Y2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1wX3Bvcyk7Ci0rCQljdHJfQkNDX2Js b2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBjdHJf ZGYoRFJCR19DVFJfQ1RYICpjY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6 ZV90IGluMWxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4s Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQotKwl7Ci0rCXNp emVfdCBpbmxlbjsKLSsJdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPmJsdG1wOwotKwlzdGF0aWMg dW5zaWduZWQgY2hhciBjODAgPSAweDgwOwotKwotKwljdHJfQkNDX2luaXQoY2N0eCk7Ci0rCWlm ICghaW4xKQotKwkJaW4xbGVuID0gMDsKLSsJaWYgKCFpbjIpCi0rCQlpbjJsZW4gPSAwOwotKwlp ZiAoIWluMykKLSsJCWluM2xlbiA9IDA7Ci0rCWlubGVuID0gaW4xbGVuICsgaW4ybGVuICsgaW4z bGVuOwotKwkvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICovCi0rCSpwKysg PSAoaW5sZW4gPj4gMjQpICYgMHhmZjsKLSsJKnArKyA9IChpbmxlbiA+PiAxNikgJiAweGZmOwot KwkqcCsrID0gKGlubGVuID4+IDgpICYgMHhmZjsKLSsJKnArKyA9IGlubGVuICYgMHhmZjsKLSsJ LyogTkIga2V5bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KLSsJKnArKyA9IDA7Ci0rCSpwKysg PSAwOwotKwkqcCsrID0gMDsKLSsJKnAgPSAodW5zaWduZWQgY2hhcikoKGNjdHgtPmtleWxlbiAr IDE2KSAmIDB4ZmYpOwotKwljY3R4LT5ibHRtcF9wb3MgPSA4OwotKwljdHJfQkNDX3VwZGF0ZShj Y3R4LCBpbjEsIGluMWxlbik7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwgaW4ybGVuKTsK LSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOwotKwljdHJfQkNDX3VwZGF0ZShj Y3R4LCAmYzgwLCAxKTsKLSsJY3RyX0JDQ19maW5hbChjY3R4KTsKLSsJLyogU2V0IHVwIGtleSBL ICovCi0rCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNjdHgtPmtleWxlbiAqIDgsICZj Y3R4LT5kZl9reGtzKTsKLSsJLyogWCBmb2xsb3dzIGtleSBLICovCi0rCUFFU19lbmNyeXB0KGNj dHgtPktYICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNjdHgtPmRmX2t4a3MpOwotKwlBRVNf ZW5jcnlwdChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3MpOwotKwlpZiAo Y2N0eC0+a2V5bGVuICE9IDE2KQotKwkJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAxNiwgY2N0eC0+ S1ggKyAzMiwgJmNjdHgtPmRmX2t4a3MpOwotKyNpZiAwCi0rZnByaW50ZihzdGRlcnIsICJPdXRw dXQgb2YgY3RyX2RmOlxuIik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LWCwgY2N0eC0+ a2V5bGVuICsgMTYpOwotKyNlbmRpZgotKwl9Ci0rCi0rLyogTkIgdGhlIG5vLWRmICBVcGRhdGUg aW4gU1A4MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5wdXQgbGVuZ3RoCi0rICogb2Ygc2Vl ZGxlbiwgaG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxnb3JpdGhtIHBhZCB0aGUgaW5wdXQg d2l0aAotKyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhhdmUgdXAgdG8gdHdvIHBhcmFtZXRl cnMgWE9SZWQgdG9nZXRoZXIsCi0rICogaGFuZGxlIGJvdGggY2FzZXMgaW4gdGhpcyBmdW5jdGlv biBpbnN0ZWFkLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0cl9VcGRhdGUoRFJCR19DVFggKmRj dHgsCi0rCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQljb25z dCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQljb25zdCB1bnNpZ25lZCBj aGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuKQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9 ICZkY3R4LT5kLmN0cjsKLSsJLyoga3MgaXMgYWxyZWFkeSBzZXR1cCBmb3IgY29ycmVjdCBrZXkg Ki8KLSsJaW5jXzEyOChjY3R4KTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNj dHgtPmtzKTsKLSsJLyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEyOCBiaXRzIG5lZWQgZXh0cmEg ZW5jcnlwdCAqLwotKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJewotKwkJaW5jXzEyOChj Y3R4KTsKLSsJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNjdHgtPmtzKTsK LSsJCX0KLSsJaW5jXzEyOChjY3R4KTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+Viwg JmNjdHgtPmtzKTsKLSsJLyogSWYgMTkyIGJpdCBrZXkgcGFydCBvZiBWIGlzIG9uIGVuZCBvZiBL ICovCi0rCWlmIChjY3R4LT5rZXlsZW4gPT0gMjQpCi0rCQl7Ci0rCQltZW1jcHkoY2N0eC0+ViAr IDgsIGNjdHgtPlYsIDgpOwotKwkJbWVtY3B5KGNjdHgtPlYsIGNjdHgtPksgKyAyNCwgOCk7Ci0r CQl9Ci0rCi0rCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKLSsJCXsK LSsJCS8qIElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5nIGRlcml2ZWQgdmFsdWUgKi8KLSsJCWlm IChpbjEgfHwgbm9uY2UgfHwgaW4yKQotKwkJCWN0cl9kZihjY3R4LCBpbjEsIGluMWxlbiwgbm9u Y2UsIG5vbmNlbGVuLCBpbjIsIGluMmxlbik7Ci0rCQkvKiBJZiB0aGlzIGEgcmV1c2UgaW5wdXQg aW4xbGVuICE9IDAgKi8KLSsJCWlmIChpbjFsZW4pCi0rCQkJY3RyX1hPUihjY3R4LCBjY3R4LT5L WCwgZGN0eC0+c2VlZGxlbik7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWN0cl9YT1IoY2N0eCwg aW4xLCBpbjFsZW4pOwotKwkJY3RyX1hPUihjY3R4LCBpbjIsIGluMmxlbik7Ci0rCQl9Ci0rCi0r CUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7 Ci0rI2lmIDAKLStmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciB1cGRhdGUgaXM6XG4iKTsKLStC SU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxlbik7Ci0rQklPX2R1bXBfZnAo c3RkZXJyLCBjY3R4LT5WLCAxNik7Ci0rI2VuZGlmCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdf Y3RyX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmVudCwgc2l6ZV90IGVudGxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6 ZV90IG5vbmNlbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJz bGVuKQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsJbWVtc2V0 KGNjdHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7Ci0rCW1lbXNldChjY3R4LT5WLCAwLCBzaXpl b2YoY2N0eC0+VikpOwotKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRjdHgtPnN0cmVu Z3RoLCAmY2N0eC0+a3MpOwotKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBwZXJzLCBw ZXJzbGVuLCBub25jZSwgbm9uY2VsZW4pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBp bnQgZHJiZ19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCAKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4pCi0rCXsKLSsJY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgYWRp biwgYWRpbmxlbiwgTlVMTCwgMCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBk cmJnX2N0cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQl1bnNpZ25lZCBjaGFyICpvdXQs IHNpemVfdCBvdXRsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFk aW5sZW4pCi0rCXsKLSsJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKwlpZiAo YWRpbiAmJiBhZGlubGVuKQotKwkJewotKwkJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVu LCBOVUxMLCAwLCBOVUxMLCAwKTsKLSsJCS8qIFRoaXMgbWVhbnMgd2UgcmV1c2UgZGVyaXZlZCB2 YWx1ZSAqLwotKwkJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQotKwkJ CXsKLSsJCQlhZGluID0gTlVMTDsKLSsJCQlhZGlubGVuID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCWVs c2UKLSsJCWFkaW5sZW4gPSAwOwotKwotKwlmb3IgKDs7KQotKwkJewotKwkJaW5jXzEyOChjY3R4 KTsKLSsJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJf dmFsaWQpCi0rCQkJewotKwkJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGRjdHgtPmxiLCAmY2N0eC0+ a3MpOwotKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlp ZiAob3V0bGVuIDwgMTYpCi0rCQkJewotKwkJCS8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQg d2lsbCBiZSB1cGRhdGVkICovCi0rCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNj dHgtPmtzKTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNjdHgtPkspKQot KwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBjY3R4LT5LLCBvdXRsZW4pOwotKwkJCWJy ZWFrOwotKwkJCX0KLSsJCUFFU19lbmNyeXB0KGNjdHgtPlYsIG91dCwgJmNjdHgtPmtzKTsKLSsJ CWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsJCQlyZXR1cm4gMDsKLSsJ CW91dCArPSAxNjsKLSsJCW91dGxlbiAtPSAxNjsKLSsJCWlmIChvdXRsZW4gPT0gMCkKLSsJCQli cmVhazsKLSsJCX0KLSsKLSsJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAw LCBOVUxMLCAwKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdf Y3RyX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJbWVtc2V0KCZkY3R4LT5k LmN0ciwgMCwgc2l6ZW9mKERSQkdfQ1RSX0NUWCkpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2lu dCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJRFJCR19DVFJfQ1RY ICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKwotKwlzaXplX3Qga2V5bGVuOwotKwotKwlzd2l0Y2gg KGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKLSsJCWtleWxlbiA9 IDE2OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKLSsJCWtleWxlbiA9 IDI0OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2N0cjoKLSsJCWtleWxlbiA9 IDMyOwotKwkJYnJlYWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJcmV0dXJuIC0yOwotKwkJfQotKwot KwlkY3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRpYXRlOwotKwlkY3R4LT5yZXNl ZWQgPSBkcmJnX2N0cl9yZXNlZWQ7Ci0rCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJh dGU7Ci0rCWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOwotKwot KwljY3R4LT5rZXlsZW4gPSBrZXlsZW47Ci0rCWRjdHgtPnN0cmVuZ3RoID0ga2V5bGVuICogODsK LSsJZGN0eC0+YmxvY2tsZW5ndGggPSAxNjsKLSsJZGN0eC0+c2VlZGxlbiA9IGtleWxlbiArIDE2 OwotKwotKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCi0rCQl7Ci0r CQkvKiBkZiBpbml0aWFsaXNhdGlvbiAqLwotKwkJc3RhdGljIHVuc2lnbmVkIGNoYXIgZGZfa2V5 WzMyXSA9Ci0rCQkJewotKwkJCTB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgw NywKLSsJCQkweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsCi0rCQkJMHgx MCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAotKwkJCTB4MTgsMHgxOSwweDFh LDB4MWIsMHgxYywweDFkLDB4MWUsMHgxZiAKLSsJCQl9OwotKwkJLyogU2V0IGtleSBzY2hlZHVs ZSBmb3IgZGZfa2V5ICovCi0rCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGRmX2tleSwgZGN0eC0+c3Ry ZW5ndGgsICZjY3R4LT5kZl9rcyk7Ci0rCi0rCQlkY3R4LT5taW5fZW50cm9weSA9IGNjdHgtPmtl eWxlbjsKLSsJCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwkJZGN0eC0+ bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKwkJZGN0eC0+bWF4X25vbmNlID0g RFJCR19NQVhfTEVOR1RIOwotKwkJZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0r CQlkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCX0KLSsJZWxzZQotKwkJewot KwkJZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOwotKwkJZGN0eC0+bWF4X2VudHJv cHkgPSBkY3R4LT5zZWVkbGVuOwotKwkJLyogTm9uY2Ugbm90IHVzZWQgKi8KLSsJCWRjdHgtPm1p bl9ub25jZSA9IDA7Ci0rCQlkY3R4LT5tYXhfbm9uY2UgPSAwOwotKwkJZGN0eC0+bWF4X3BlcnMg PSBkY3R4LT5zZWVkbGVuOwotKwkJZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOwotKwkJ fQotKwotKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OwotKwlkY3R4LT5yZXNlZWRfaW50ZXJ2 YWwgPSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfaGFzaC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX2hhc2guYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ3OTIzMjQ4ICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwkyMDE0LTA1LTA2 IDE2OjI5OjUwLjU0NzkyMzI0OCArMDIwMAotQEAgLTAsMCArMSwzNzggQEAKLSsvKiBmaXBzL3Jh bmQvZmlwc19kcmJnX2hhc2guYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NM X0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xj bC5oIgotKwotKy8qIFRoaXMgaXMgSGFzaF9kZiBmcm9tIFNQIDgwMC05MCAxMC40LjEgKi8KLSsK LStzdGF0aWMgaW50IGhhc2hfZGYoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwK LSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmluMywgc2l6ZV90IGluM2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjQsIHNp emVfdCBpbjRsZW4pCi0rCXsKLSsJRVZQX01EX0NUWCAqbWN0eCA9ICZkY3R4LT5kLmhhc2gubWN0 eDsKLSsJdW5zaWduZWQgY2hhciAqdnRtcCA9IGRjdHgtPmQuaGFzaC52dG1wOwotKwl1bnNpZ25l ZCBjaGFyIHRtcFs2XTsKLSsJLyogU3RhbmRhcmQgb25seSBldmVyIG5lZWRzIHNlZWRsZW4gYnl0 ZXMgd2hpY2ggaXMgYWx3YXlzIGxlc3MgdGhhbgotKwkgKiBtYXhpbXVtIHBlcm1pdHRlZCBzbyBu byBuZWVkIHRvIGNoZWNrIGxlbmd0aC4KLSsJICovCi0rCXNpemVfdCBvdXRsZW4gPSBkY3R4LT5z ZWVkbGVuOwotKwl0bXBbMF0gPSAxOwotKwl0bXBbMV0gPSAoKG91dGxlbiAqIDgpID4+IDI0KSAm IDB4ZmY7Ci0rCXRtcFsyXSA9ICgob3V0bGVuICogOCkgPj4gMTYpICYgMHhmZjsKLSsJdG1wWzNd ID0gKChvdXRsZW4gKiA4KSA+PiA4KSAmIDB4ZmY7Ci0rCXRtcFs0XSA9IChvdXRsZW4gKiA4KSAm IDB4ZmY7Ci0rCWlmICghaW4xKQotKwkJewotKwkJdG1wWzVdID0gKHVuc2lnbmVkIGNoYXIpaW4x bGVuOwotKwkJaW4xID0gdG1wICsgNTsKLSsJCWluMWxlbiA9IDE7Ci0rCQl9Ci0rCWZvciAoOzsp Ci0rCQl7Ci0rCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBkY3R4LT5kLmhhc2gubWQpKQot KwkJCXJldHVybiAwOwotKwkJaWYgKCFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCB0bXAsIDUpKQot KwkJCXJldHVybiAwOwotKwkJaWYgKGluMSAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4x LCBpbjFsZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKGluMiAmJiAhRklQU19kaWdlc3R1cGRh dGUobWN0eCwgaW4yLCBpbjJsZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKGluMyAmJiAhRklQ U19kaWdlc3R1cGRhdGUobWN0eCwgaW4zLCBpbjNsZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYg KGluNCAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW40LCBpbjRsZW4pKQotKwkJCXJldHVy biAwOwotKwkJaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJCXsKLSsJCQlpZiAo IUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCi0rCQkJCXJldHVybiAwOwotKwkJ CW1lbWNweShvdXQsIHZ0bXAsIG91dGxlbik7Ci0rCQkJT1BFTlNTTF9jbGVhbnNlKHZ0bXAsIGRj dHgtPmJsb2NrbGVuZ3RoKTsKLSsJCQlyZXR1cm4gMTsKLSsJCQl9Ci0rCQllbHNlIGlmKCFGSVBT X2RpZ2VzdGZpbmFsKG1jdHgsIG91dCwgTlVMTCkpCi0rCQkJcmV0dXJuIDA7Ci0rCi0rCQlvdXRs ZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQlpZiAob3V0bGVuID09IDApCi0rCQkJcmV0dXJu IDE7Ci0rCQl0bXBbMF0rKzsKLSsJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCX0KLSsJ fQotKwotKwotKy8qIEFkZCBhbiB1bnNpZ25lZCBidWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwgc3Rv cmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4gRm9yCi0rICogdGhpcyBhbGdvcml0aG0gdGhlIGxlbmd0 aCBvZiBpbnB1dCBuZXZlciBleGNlZWRzIHRoZSBzZWVkIGxlbmd0aC4KLSsgKi8KLSsKLStzdGF0 aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqYnVmLAot KwkJCQl1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQotKwl7Ci0rCXNpemVfdCBpID0g aW5sZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnE7Ci0rCXVuc2lnbmVkIGNoYXIgYywgKnA7 Ci0rCXAgPSBidWYgKyBkY3R4LT5zZWVkbGVuOwotKwlxID0gaW4gKyBpbmxlbjsKLSsKLSsJT1BF TlNTTF9hc3NlcnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKLSsKLSsJLyogU3BlY2lhbCBjYXNlOiB6 ZXJvIGxlbmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICovCi0rCWlmIChpKQotKwkJYyA9IDA7 Ci0rCWVsc2UgCi0rCQljID0gMTsKLSsKLSsJd2hpbGUgKGkpCi0rCQl7Ci0rCQlpbnQgcjsKLSsJ CXAtLTsKLSsJCXEtLTsKLSsJCXIgPSAqcCArICpxICsgYzsKLSsJCS8qIENhcnJ5ICovCi0rCQlp ZiAociA+IDB4ZmYpCi0rCQkJYyA9IDE7Ci0rCQllbHNlCi0rCQkJYyA9IDA7Ci0rCQkqcCA9IHIg JiAweGZmOwotKwkJaS0tOwotKwkJfQotKwotKwlpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVuOwot KwotKwkvKiBJZiBub3QgYWRkaW5nIHdob2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2FycmllcyAq LwotKwlpZiAoYyAmJiBpKQotKwkJewotKwkJZG8KLSsJCQl7Ci0rCQkJcC0tOwotKwkJCWMgPSAq cDsKLSsJCQljKys7Ci0rCQkJKnAgPSBjOwotKwkJCWlmKGMpCi0rCQkJCXJldHVybjsKLSsJCQl9 IHdoaWxlKGktLSk7Ci0rCQl9Ci0rCX0KLSsKLSsvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2ggdG8g ViAqLwotKwkKLStzdGF0aWMgaW50IGN0eF9hZGRfbWQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJ aWYgKCFGSVBTX2RpZ2VzdGZpbmFsKCZkY3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ZC5oYXNoLnZ0 bXAsIE5VTEwpKQotKwkJCXJldHVybiAwOwotKwljdHhfYWRkX2J1ZihkY3R4LCBkY3R4LT5kLmhh c2guViwgZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJcmV0dXJuIDE7 Ci0rCX0KLSsKLStzdGF0aWMgaW50IGhhc2hfZ2VuKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvdXRsZW4pCi0rCXsKLSsJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZk Y3R4LT5kLmhhc2g7Ci0rCWlmIChvdXRsZW4gPT0gMCkKLSsJCXJldHVybiAxOwotKwltZW1jcHko aGN0eC0+dnRtcCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWZvcig7OykKLSsJCXsKLSsJ CUZJUFNfZGlnZXN0aW5pdCgmaGN0eC0+bWN0eCwgaGN0eC0+bWQpOwotKwkJRklQU19kaWdlc3R1 cGRhdGUoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgtPnNlZWRsZW4pOwotKwkJaWYgKCEo ZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKLSsJCQl7 Ci0rCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgZGN0eC0+bGIsIE5VTEwpOwotKwkJ CWRjdHgtPmxiX3ZhbGlkID0gMTsKLSsJCQl9Ci0rCQllbHNlIGlmIChvdXRsZW4gPCBkY3R4LT5i bG9ja2xlbmd0aCkKLSsJCQl7Ci0rCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgaGN0 eC0+dnRtcCwgTlVMTCk7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBoY3R4 LT52dG1wKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5KG91dCwgaGN0eC0+dnRtcCwgb3V0 bGVuKTsKLSsJCQlyZXR1cm4gMTsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJewotKwkJCUZJUFNfZGln ZXN0ZmluYWwoJmhjdHgtPm1jdHgsIG91dCwgTlVMTCk7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfY3By bmdfdGVzdChkY3R4LCBvdXQpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlvdXRsZW4gLT0gZGN0eC0+ YmxvY2tsZW5ndGg7Ci0rCQkJaWYgKG91dGxlbiA9PSAwKQotKwkJCQlyZXR1cm4gMTsKLSsJCQlv dXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQkJfQotKwkJY3R4X2FkZF9idWYoZGN0eCwgaGN0 eC0+dnRtcCwgTlVMTCwgMCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaGFzaF9p bnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50 LCBzaXplX3QgZW50X2xlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVf dCBub25jZV9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3Ry X2xlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJaWYg KCFoYXNoX2RmKGRjdHgsIGhjdHgtPlYsIAotKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNl X2xlbiwgcHN0ciwgcHN0cl9sZW4sCi0rCQkJTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYg KCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIAotKwkJCU5VTEwsIDAsIGhjdHgtPlYsIGRjdHgtPnNl ZWRsZW4sCi0rCQkJTlVMTCwgMCwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsjaWZkZWYg SEFTSF9EUkJHX1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGluc3RhbnRpYXRl OlxuIik7Ci0rCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWhl eHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rI2VuZGlmCi0rCXJldHVy biAxOwotKwl9Ci0rCi0rCQotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3Jlc2VlZChEUkJHX0NUWCAq ZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKLSsJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0rCURS QkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwkvKiBWIGFib3V0IHRvIGJlIHVw ZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KLSsJaWYgKCFoYXNoX2RmKGRjdHgs IGhjdHgtPkMsCi0rCQkJTlVMTCwgMSwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKLSsJCQllbnQs IGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuKSkKLSsJCXJldHVybiAwOwotKwltZW1jcHkoaGN0eC0+ ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5D LCBOVUxMLCAwLAotKwkJCWhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sIE5VTEwsIDAsIE5VTEwsIDAp KQotKwkJcmV0dXJuIDA7Ci0rI2lmZGVmIEhBU0hfRFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVy ciwgIlYrQyBhZnRlciByZXNlZWQ6XG4iKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBk Y3R4LT5zZWVkbGVuKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVu KTsKLSsjZW5kaWYKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaGFzaF9n ZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qg b3V0bGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4p Ci0rCXsKLSsJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCUVWUF9NRF9D VFggKm1jdHggPSAmaGN0eC0+bWN0eDsKLSsJdW5zaWduZWQgY2hhciB0bXBbNF07Ci0rCWlmIChh ZGluICYmIGFkaW5fbGVuKQotKwkJewotKwkJdG1wWzBdID0gMjsKLSsJCWlmICghRklQU19kaWdl c3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghRVZQX0RpZ2Vz dFVwZGF0ZShtY3R4LCB0bXAsIDEpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFFVlBfRGlnZXN0 VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKwkJCXJldHVybiAwOwotKwkJ aWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGFkaW4sIGFkaW5fbGVuKSkKLSsJCQlyZXR1cm4g MDsKLSsJCWlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsJCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYg KCFoYXNoX2dlbihkY3R4LCBvdXQsIG91dGxlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJdG1wWzBd ID0gMzsKLSsJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQotKwkJcmV0dXJu IDA7Ci0rCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQotKwkJcmV0dXJuIDA7 Ci0rCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkK LSsJCXJldHVybiAwOwotKwotKwlpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCi0rCQlyZXR1cm4gMDsK LSsKLSsJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7 Ci0rCi0rCXRtcFswXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZmOwotKwl0 bXBbMV0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYgMHhmZjsKLSsJdG1wWzJdID0g KGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKLSsJdG1wWzNdID0gZGN0eC0+cmVz ZWVkX2NvdW50ZXIgJiAweGZmOwotKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCB0bXAsIDQp OwotKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKLSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIg Z2VuZXJhdGU6XG4iKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVu KTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaGFzaF91bmluc3RhbnRpYXRl KERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmZGN0eC0+ZC5oYXNo Lm1jdHgpOwotKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaGFzaCwgc2l6ZW9mKERSQkdfSEFT SF9DVFgpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChE UkJHX0NUWCAqZGN0eCkKLSsJewotKwljb25zdCBFVlBfTUQgKm1kOwotKwlEUkJHX0hBU0hfQ1RY ICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJbWQgPSBGSVBTX2dldF9kaWdlc3RieW5pZChkY3R4 LT50eXBlKTsKLSsJaWYgKCFtZCkKLSsJCXJldHVybiAtMjsKLSsJc3dpdGNoIChkY3R4LT50eXBl KQotKwkJewotKwkJY2FzZSBOSURfc2hhMToKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTI4OwotKwkJ YnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9zaGEyMjQ6Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsK LSsJCWJyZWFrOwotKwotKwkJZGVmYXVsdDoKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMjU2OwotKwkJ YnJlYWs7Ci0rCQl9Ci0rCi0rCWRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3RhbnRp YXRlOwotKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVkOwotKwlkY3R4LT5nZW5lcmF0 ZSA9IGRyYmdfaGFzaF9nZW5lcmF0ZTsKLSsJZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFz aF91bmluc3RhbnRpYXRlOwotKwotKwlkY3R4LT5kLmhhc2gubWQgPSBtZDsKLSsJRVZQX01EX0NU WF9pbml0KCZoY3R4LT5tY3R4KTsKLSsKLSsJLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1AgODAw LTkwIDEwLjEgdGFibGUgMiAqLwotKwotKwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3Np emUobWQpOwotKwlpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKLSsJCWRjdHgtPnNlZWRsZW4g PSAxMTE7Ci0rCWVsc2UKLSsJCWRjdHgtPnNlZWRsZW4gPSA1NTsKLSsKLSsKLSsJZGN0eC0+bWlu X2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7Ci0rCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJC R19NQVhfTEVOR1RIOwotKwotKwlkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAv IDI7Ci0rCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsJZGN0eC0+bWF4 X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCWRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVO R1RIOwotKwotKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OwotKwlkY3R4LT5yZXNlZWRfaW50 ZXJ2YWwgPSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2htYWMuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ3OTIzMjQ4ICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDE0LTA1 LTA2IDE2OjI5OjUwLjU0NzkyMzI0OCArMDIwMAotQEAgLTAsMCArMSwyODEgQEAKLSsvKiBmaXBz L3JhbmQvZmlwc19kcmJnX2htYWMuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl 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 aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNs LmgiCi0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqaW4zLCBzaXplX3QgaW4zbGVuCi0rCQkJKQotKwl7Ci0rCXN0YXRpYyB1bnNpZ25lZCBjaGFy IGMwID0gMCwgYzEgPSAxOwotKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsK LSsJSE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKLSsKLSsJaWYgKCFITUFDX0luaXRfZXgo aGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJl dHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVu Z3RoKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMCwgMSkpCi0r CQlyZXR1cm4gMDsKLSsJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFs ZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGlu MiwgaW4ybGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZSho Y3R4LCBpbjMsIGluM2xlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0ZpbmFsKGhj dHgsIGhtYWMtPkssIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4 KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQly ZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xl bmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYs IE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghaW4xbGVuICYmICFpbjJsZW4gJiYgIWlu M2xlbikKLSsJCXJldHVybiAxOwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5L LCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlm ICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0 dXJuIDA7Ci0rCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMxLCAxKSkKLSsJCXJldHVybiAwOwot KwlpZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCi0rCQlyZXR1 cm4gMDsKLSsJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQot KwkJcmV0dXJuIDA7Ci0rCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4z bGVuKSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+Sywg TlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+ SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCXJl dHVybiAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rCQly ZXR1cm4gMDsKLSsKLSsJcmV0dXJuIDE7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaG1h Y19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAq ZW50LCBzaXplX3QgZW50X2xlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNp emVfdCBub25jZV9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBw c3RyX2xlbikKLSsJewotKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKLSsJ bWVtc2V0KGhtYWMtPkssIDAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJbWVtc2V0KGhtYWMtPlYs IDEsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCi0r CQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbikpCi0rCQly ZXR1cm4gMDsKLSsKLSsjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAi SytWIGFmdGVyIGluc3RhbnRpYXRlOlxuIik7Ci0rCWhleHByaW50KHN0ZGVyciwgaG1hYy0+Sywg aG1hYy0+YmxvY2tsZW5ndGgpOwotKwloZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJs b2NrbGVuZ3RoKTsKLSsjZW5kaWYKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRy YmdfaG1hY19yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmVudCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNp emVfdCBhZGluX2xlbikKLSsJewotKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKLSsJCQll bnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwot KyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UKLSsJewotKwkJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZk Y3R4LT5kLmhtYWM7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciByZXNlZWQ6XG4iKTsK LSsJCWhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOwotKwkJaGV4 cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rCX0KLSsjZW5kaWYK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfaG1hY19nZW5lcmF0ZShEUkJH X0NUWCAqZGN0eCwKLSsJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJRFJC R19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCUhNQUNfQ1RYICpoY3R4ID0gJmht YWMtPmhjdHg7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKlZ0bXAgPSBobWFjLT5WOwotKwlpZiAo YWRpbl9sZW4gJiYgIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sCi0rCQkJ CQkJTlVMTCwgMCwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsJZm9yICg7OykKLSsJCXsKLSsJ CWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLAotKwkJ CQkJCQlobWFjLT5tZCwgTlVMTCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUhNQUNfVXBkYXRl KGhjdHgsIFZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICgh KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCi0rCQkJ ewotKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBkY3R4LT5sYiwgTlVMTCkpCi0rCQkJCXJldHVy biAwOwotKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKLSsJCQlWdG1wID0gZGN0eC0+bGI7Ci0rCQkJ Y29udGludWU7Ci0rCQkJfQotKwkJZWxzZSBpZiAob3V0bGVuID4gZGN0eC0+YmxvY2tsZW5ndGgp Ci0rCQkJewotKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBvdXQsIE5VTEwpKQotKwkJCQlyZXR1 cm4gMDsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCi0rCQkJCXJl dHVybiAwOwotKwkJCVZ0bXAgPSBvdXQ7Ci0rCQkJfQotKwkJZWxzZQotKwkJCXsKLSsJCQlpZiAo IUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rCQkJCXJldHVybiAwOwotKwkJCWlm ICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaG1hYy0+VikpCi0rCQkJCXJldHVybiAwOwot KwkJCW1lbWNweShvdXQsIGhtYWMtPlYsIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwkJ b3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKwkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3Ro OwotKwkJfQotKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5V TEwsIDAsIE5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0r c3RhdGljIGludCBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSsJewot KwlITUFDX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhtYWMuaGN0eCk7Ci0rCU9QRU5TU0xfY2xlYW5z ZSgmZGN0eC0+ZC5obWFjLCBzaXplb2YoRFJCR19ITUFDX0NUWCkpOwotKwlyZXR1cm4gMTsKLSsJ fQotKwotK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWNv bnN0IEVWUF9NRCAqbWQgPSBOVUxMOwotKwlEUkJHX0hNQUNfQ1RYICpoY3R4ID0gJmRjdHgtPmQu aG1hYzsKLSsJZGN0eC0+c3RyZW5ndGggPSAyNTY7Ci0rCXN3aXRjaCAoZGN0eC0+dHlwZSkKLSsJ CXsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMToKLSsJCW1kID0gRVZQX3NoYTEoKTsKLSsJCWRj dHgtPnN0cmVuZ3RoID0gMTI4OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9obWFjV2l0aFNI QTIyNDoKLSsJCW1kID0gRVZQX3NoYTIyNCgpOwotKwkJZGN0eC0+c3RyZW5ndGggPSAxOTI7Ci0r CQlicmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMjU2OgotKwkJbWQgPSBFVlBfc2hh MjU2KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMzg0OgotKwkJbWQg PSBFVlBfc2hhMzg0KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBNTEy OgotKwkJbWQgPSBFVlBfc2hhNTEyKCk7Ci0rCQlicmVhazsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlk Y3R4LT5zdHJlbmd0aCA9IDA7Ci0rCQlyZXR1cm4gLTI7Ci0rCQl9Ci0rICAgICAgICBkY3R4LT5p bnN0YW50aWF0ZSA9IGRyYmdfaG1hY19pbnN0YW50aWF0ZTsKLSsgICAgICAgIGRjdHgtPnJlc2Vl ZCA9IGRyYmdfaG1hY19yZXNlZWQ7Ci0rICAgICAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1h Y19nZW5lcmF0ZTsKLSsgICAgICAgIGRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2htYWNfdW5p bnN0YW50aWF0ZTsKLSsJSE1BQ19DVFhfaW5pdCgmaGN0eC0+aGN0eCk7Ci0rCWhjdHgtPm1kID0g bWQ7Ci0rCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rCWRjdHgtPnNl ZWRsZW4gPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsKLSsgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5 ID0gZGN0eC0+c3RyZW5ndGggLyA4OwotKyAgICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJH X01BWF9MRU5HVEg7Ci0rCi0rICAgICAgICBkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50 cm9weSAvIDI7Ci0rICAgICAgICBkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7Ci0r Ci0rICAgICAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKLSsgICAgICAgIGRj dHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAgZGN0eC0+bWF4X3Jl cXVlc3QgPSAxPDwxNjsKLSsgICAgICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0Owot KwotKwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZp cHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDc5MjMyNDggKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDc5MjMy NDggKzAyMDAKLUBAIC0wLDAgKzEsNTc4IEBACi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4K LSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgot KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS Ci0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZp cHNfbG9jbC5oIgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyogU3VwcG9ydCBm cmFtZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICovCi0rCi0raW50IEZJUFNfZHJiZ19pbml0KERS QkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQotKwl7Ci0rCWludCBy djsKLSsJbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOwotKwlkY3R4LT5zdGF0dXMg PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKwlkY3R4LT54ZmxhZ3MgPSBmbGFnczsKLSsJ ZGN0eC0+dHlwZSA9IHR5cGU7Ci0rCi0rCWRjdHgtPmlmbGFncyA9IDA7Ci0rCWRjdHgtPmVudHJv cHlfYmxvY2tsZW4gPSAwOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKLSsJZGN0eC0+ aGVhbHRoX2NoZWNrX2ludGVydmFsID0gRFJCR19IRUFMVEhfSU5URVJWQUw7Ci0rCi0rCXJ2ID0g Zmlwc19kcmJnX2hhc2hfaW5pdChkY3R4KTsKLSsKLSsJaWYgKHJ2ID09IC0yKQotKwkJcnYgPSBm aXBzX2RyYmdfY3RyX2luaXQoZGN0eCk7Ci0rCWlmIChydiA9PSAtMikKLSsJCXJ2ID0gZmlwc19k cmJnX2htYWNfaW5pdChkY3R4KTsKLSsKLSsJaWYgKHJ2IDw9IDApCi0rCQl7Ci0rCQlpZiAocnYg PT0gLTIpCi0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9VTlNVUFBP UlRFRF9EUkJHX1RZUEUpOwotKwkJZWxzZQotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19J TklULCBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcpOwotKwkJfQotKwotKwkvKiBJZiBu b3QgaW4gdGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICov Ci0rCi0rCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkKLSsJCXsKLSsJCWlm ICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKLSsJCQlyZXR1cm4g MDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCXJldHVybiBydjsKLSsJfQotKwotK0RSQkdfQ1RYICpGSVBT X2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rCXsKLSsJRFJCR19DVFgg KmRjdHg7Ci0rCWRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRFJCR19DVFgpKTsKLSsJaWYg KCFkY3R4KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX05FVywgRVJSX1JfTUFM TE9DX0ZBSUxVUkUpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCi0rCWlmICh0eXBlID09IDAp Ci0rCQl7Ci0rCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCQlkY3R4LT50 eXBlID0gMDsKLSsJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0r CQlyZXR1cm4gZGN0eDsKLSsJCX0KLSsKLSsJaWYgKEZJUFNfZHJiZ19pbml0KGRjdHgsIHR5cGUs IGZsYWdzKSA8PSAwKQotKwkJewotKwkJT1BFTlNTTF9mcmVlKGRjdHgpOwotKwkJcmV0dXJuIE5V TEw7Ci0rCQl9Ci0rCQkKLSsJcmV0dXJuIGRjdHg7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19m cmVlKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmIChkY3R4LT51bmluc3RhbnRpYXRlKQotKwkJ ZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJLyogRG9uJ3QgZnJlZSB1cCBkZWZhdWx0IERS QkcgKi8KLSsJaWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpCi0rCQl7Ci0rCQlt ZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCQlkY3R4LT50eXBlID0gMDsKLSsJ CWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCQl9Ci0rCWVsc2UK LSsJCXsKLSsJCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsJ CU9QRU5TU0xfZnJlZShkY3R4KTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyBzaXplX3QgZmlwc19n ZXRfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWlu dCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJdW5zaWdu ZWQgY2hhciAqdG91dCwgKnA7Ci0rCXNpemVfdCBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4s IHJ2OwotKwlpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQotKwkJcmV0dXJuIDA7Ci0rCWlmIChkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCi0rCQlyZXR1cm4gZGN0eC0+Z2V0X2Vu dHJvcHkoZGN0eCwgcG91dCwgZW50cm9weSwgbWluX2xlbiwgbWF4X2xlbik7Ci0rCXJ2ID0gZGN0 eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRvdXQsIGVudHJvcHkgKyBibCwKLSsJCQkJbWluX2xlbiAr IGJsLCBtYXhfbGVuICsgYmwpOwotKwlpZiAodG91dCA9PSBOVUxMKQotKwkJcmV0dXJuIDA7Ci0r CSpwb3V0ID0gdG91dCArIGJsOwotKwlpZiAocnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBi bCkpCi0rCQlyZXR1cm4gMDsKLSsJLyogQ29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNv bnRpbnVvdXMgUFJORyB0ZXN0ICovCi0rCWZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBi bDsgcCArPSBibCkKLSsJCXsKLSsJCWlmICghbWVtY21wKHAsIHAgKyBibCwgYmwpKQotKwkJCXsK LSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VS Q0VfU1RVQ0spOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsJcnYgLT0gYmw7Ci0rCWlm IChydiA+IG1heF9sZW4pCi0rCQlyZXR1cm4gbWF4X2xlbjsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0r Ci0rc3RhdGljIHZvaWQgZmlwc19jbGVhbnVwX2VudHJvcHkoRFJCR19DVFggKmRjdHgsCi0rCQkJ CQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKQotKwl7Ci0rCXNpemVfdCBibDsKLSsJ aWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKwkJYmwgPSAwOwotKwllbHNlCi0r CQlibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW47Ci0rCS8qIENhbGwgY2xlYW51cCB3aXRoIG9y aWdpbmFsIGFyZ3VtZW50cyAqLwotKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkoZGN0eCwgb3V0IC0g YmwsIG9sZW4gKyBibCk7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERS QkdfQ1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVy c2xlbikKLSsJewotKwlzaXplX3QgZW50bGVuID0gMCwgbm9uY2VsZW4gPSAwOwotKwl1bnNpZ25l ZCBjaGFyICpub25jZSA9IE5VTEwsICplbnRyb3B5ID0gTlVMTDsKLSsKLSsjaWYgMAotKwkvKiBQ dXQgaGVyZSBzbyBlcnJvciBzY3JpcHQgcGlja3MgdGhlbSB1cCAqLwotKwlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsCi0rCQkJCUZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RS SU5HX1RPT19MT05HKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBG SVBTX1JfSU5fRVJST1JfU1RBVEUpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFO VElBVEUsIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCk7Ci0rCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSk7Ci0r CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJ RVZJTkdfTk9OQ0UpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJ UFNfUl9JTlNUQU5USUFURV9FUlJPUik7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNU QU5USUFURSwgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEKTsKLSsjZW5kaWYKLSsKLSsJaW50 IHIgPSAwOwotKwotKwlpZiAocGVyc2xlbiA+IGRjdHgtPm1heF9wZXJzKQotKwkJewotKwkJciA9 IEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCi0rCWlmICghZGN0eC0+aW5zdGFudGlhdGUpCi0rCQl7Ci0rCQlyID0gRklQU19SX0RS QkdfTk9UX0lOSVRJQUxJU0VEOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChkY3R4LT5z dGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXsKLSsJCWlmIChkY3R4LT5z dGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFU RTsKLSsJCWVsc2UKLSsJCQlyID0gRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwot KwllbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0 aCwKLSsJCQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKLSsKLSsJaWYg KGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5 KQotKwkJewotKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKGRjdHgtPm1heF9ub25jZSA+IDAgJiYgZGN0eC0+Z2V0X25v bmNlKQotKwkJewotKwkJbm9uY2VsZW4gPSBkY3R4LT5nZXRfbm9uY2UoZGN0eCwgJm5vbmNlLAot KwkJCQkJZGN0eC0+c3RyZW5ndGggLyAyLAotKwkJCQkJZGN0eC0+bWluX25vbmNlLCBkY3R4LT5t YXhfbm9uY2UpOwotKwotKwkJaWYgKG5vbmNlbGVuIDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNl bGVuID4gZGN0eC0+bWF4X25vbmNlKQotKwkJCXsKLSsJCQlyID0gRklQU19SX0VSUk9SX1JFVFJJ RVZJTkdfTk9OQ0U7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwotKwkJfQotKwotKwlpZiAoIWRj dHgtPmluc3RhbnRpYXRlKGRjdHgsIAotKwkJCQllbnRyb3B5LCBlbnRsZW4sCi0rCQkJCW5vbmNl LCBub25jZWxlbiwKLSsJCQkJcGVycywgcGVyc2xlbikpCi0rCQl7Ci0rCQlyID0gRklQU19SX0VS Uk9SX0lOU1RBTlRJQVRJTkdfRFJCRzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwotKwlkY3R4 LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKLSsJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJC R19DVVNUT01fUkVTRUVEKSkKLSsJCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKLSsKLSsJZW5k OgotKwotKwlpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCi0rCQlmaXBzX2Ns ZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOwotKwotKwlpZiAobm9uY2UgJiYg ZGN0eC0+Y2xlYW51cF9ub25jZSkKLSsJCWRjdHgtPmNsZWFudXBfbm9uY2UoZGN0eCwgbm9uY2Us IG5vbmNlbGVuKTsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkK LSsJCXJldHVybiAxOwotKwotKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19O T0VSUikpCi0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIHIpOwotKwot KwlyZXR1cm4gMDsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJCR19DVFgg KmRjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4sIGlu dCBoY2hlY2spCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqZW50cm9weSA9IE5VTEw7Ci0rCXNpemVf dCBlbnRsZW4gPSAwOwotKwlpbnQgciA9IDA7Ci0rCi0rI2lmIDAKLSsJRklQU2VycihGSVBTX0Zf RFJCR19SRVNFRUQsIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEKTsKLSsJRklQU2VycihGSVBTX0Zf RFJCR19SRVNFRUQsIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HKTsKLSsjZW5kaWYK LSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQotKwkJJiYgZGN0eC0+c3Rh dHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKLSsJCXsKLSsJCWlmIChkY3R4LT5zdGF0dXMgPT0g RFJCR19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsJCWVs c2UgaWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQkJciA9 IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICgh YWRpbikKLSsJCWFkaW5sZW4gPSAwOwotKwllbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2Fk aW4pCi0rCQl7Ci0rCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7Ci0rCQln b3RvIGVuZDsKLSsJCX0KLSsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0r CS8qIFBlZm9ybSBoZWFsdGggY2hlY2sgb24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5vdCBh IHByZWRpY3Rpb24KLSsJICogcmVzaXN0YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVzdCBtb2Rl LgotKwkgKi8KLSsJaWYgKGhjaGVjayAmJiAhKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNU KSkKLSsJCXsKLSsJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0r CQkJciA9IEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJ CX0KLSsKLSsJZW50bGVuID0gZmlwc19nZXRfZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+ c3RyZW5ndGgsCi0rCQkJCWRjdHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0r Ci0rCWlmIChlbnRsZW4gPCBkY3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhf ZW50cm9weSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOwot KwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghZGN0eC0+cmVzZWVkKGRjdHgsIGVudHJvcHks IGVudGxlbiwgYWRpbiwgYWRpbmxlbikpCi0rCQlnb3RvIGVuZDsKLSsKLSsJZGN0eC0+c3RhdHVz ID0gRFJCR19TVEFUVVNfUkVBRFk7Ci0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9N X1JFU0VFRCkpCi0rCQlkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7Ci0rCWVuZDoKLSsKLSsJaWYg KGVudHJvcHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQotKwkJZmlwc19jbGVhbnVwX2VudHJv cHkoZGN0eCwgZW50cm9weSwgZW50bGVuKTsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJH X1NUQVRVU19SRUFEWSkKLSsJCXJldHVybiAxOwotKwotKwlpZiAociAmJiAhKGRjdHgtPmlmbGFn cyAmIERSQkdfRkxBR19OT0VSUikpCi0rCQlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgcik7 Ci0rCi0rCXJldHVybiAwOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFgg KmRjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0r CXsKLSsJcmV0dXJuIGRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIDEpOwotKwl9Ci0r Ci0rc3RhdGljIGludCBmaXBzX2RyYmdfY2hlY2soRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaWYg KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKwkJcmV0dXJuIDE7Ci0rCWRjdHgtPmhl YWx0aF9jaGVja19jbnQrKzsKLSsJaWYgKGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPj0gZGN0eC0+ aGVhbHRoX2NoZWNrX2ludGVydmFsKQotKwkJewotKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2No ZWNrKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJ UFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCXJl dHVybiAxOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwg dW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJCWludCBwcmVkaWN0aW9uX3Jl c2lzdGFuY2UsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4p Ci0rCXsKLSsJaW50IHIgPSAwOwotKwotKwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNU X0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJaWYgKCFmaXBzX2RyYmdfY2hlY2so ZGN0eCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRV U19SRUFEWQotKwkJJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKLSsJCXsK LSsJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNf Ul9JTl9FUlJPUl9TVEFURTsKLSsJCWVsc2UgaWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVT X1VOSU5JVElBTElTRUQpCi0rCQkJciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChvdXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVzdCkKLSsJCXsK LSsJCXIgPSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkc7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsKLSsJaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikKLSsJCXsKLSsJCXIgPSBG SVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwot KwlpZiAoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKQotKwkJZGN0eC0+Z2VuZXJh dGUoZGN0eCwgTlVMTCwgb3V0bGVuLCBOVUxMLCAwKTsKLSsJZWxzZSBpZiAoZGN0eC0+cmVzZWVk X2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQotKwkJZGN0eC0+c3RhdHVzID0gRFJC R19TVEFUVVNfUkVTRUVEOwotKwotKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JF U0VFRCB8fCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UpCi0rCQl7Ci0rCQkvKiBJZiBwcmVkaWN0aW9u IHJlc2lzdGFuY2UgcmVxdWVzdCBkb24ndCBkbyBoZWFsdGggY2hlY2sgKi8KLSsJCWludCBoY2hl Y2sgPSBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UgPyAwIDogMTsKLSsJCQotKwkJaWYgKCFkcmJnX3Jl c2VlZChkY3R4LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKQotKwkJCXsKLSsJCQlyID0gRklQU19S X1JFU0VFRF9FUlJPUjsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhZGluID0gTlVMTDsKLSsJ CWFkaW5sZW4gPSAwOwotKwkJfQotKwotKwlpZiAoIWRjdHgtPmdlbmVyYXRlKGRjdHgsIG91dCwg b3V0bGVuLCBhZGluLCBhZGlubGVuKSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfR0VORVJBVEVfRVJS T1I7Ci0rCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQotKwkJewot KwkJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCkKLSsJ CQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7Ci0rCQllbHNlCi0rCQkJZGN0eC0+ cmVzZWVkX2NvdW50ZXIrKzsKLSsJCX0KLSsKLSsJZW5kOgotKwlpZiAocikKLSsJCXsKLSsJCWlm ICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rCQkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0dFTkVSQVRFLCByKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlyZXR1cm4g MTsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkK LSsJewotKwlpbnQgcnY7Ci0rCWlmICghZGN0eC0+dW5pbnN0YW50aWF0ZSkKLSsJCXJ2ID0gMTsK LSsJZWxzZQotKwkJcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOwotKwkvKiBBbHRob3Vn aCB3ZSdkIGxpa2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJlY2F1c2Ugd2UgaGF2ZSB0bwot KwkgKiB0ZXN0IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMgdGhlIGRhdGEuCi0rCSAq LwotKwltZW1zZXQoJmRjdHgtPmQsIDAsIHNpemVvZihkY3R4LT5kKSk7Ci0rCWRjdHgtPnN0YXR1 cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCS8qIElmIG1ldGhvZCBoYXMgcHJvYmxl bXMgdW5pbnN0YW50aWF0aW5nLCByZXR1cm4gZXJyb3IgKi8KLSsJcmV0dXJuIHJ2OwotKwl9Ci0r Ci0raW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlzaXplX3Qg KCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJ CWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgq Y2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvbGVuKSwKLSsJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCi0rCXNpemVfdCAoKmdldF9ub25j ZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5 LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xlYW51cF9ub25j ZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpCi0rCXsK LSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJcmV0 dXJuIDA7Ci0rCWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRyb3B5X2Jsb2NrbGVuOwotKwlk Y3R4LT5nZXRfZW50cm9weSA9IGdldF9lbnRyb3B5OwotKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkg PSBjbGVhbnVwX2VudHJvcHk7Ci0rCWRjdHgtPmdldF9ub25jZSA9IGdldF9ub25jZTsKLSsJZGN0 eC0+Y2xlYW51cF9ub25jZSA9IGNsZWFudXBfbm9uY2U7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0r aW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVf dCAoKmdldF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCi0rCXZv aWQgKCpjbGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG9sZW4pLAotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZv aWQgKmJ1ZiwgaW50IG51bSksCi0rCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAot KwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSkKLSsJewotKwlp ZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQlyZXR1cm4g MDsKLSsJZGN0eC0+Z2V0X2FkaW4gPSBnZXRfYWRpbjsKLSsJZGN0eC0+Y2xlYW51cF9hZGluID0g Y2xlYW51cF9hZGluOwotKwlkY3R4LT5yYW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7Ci0rCWRj dHgtPnJhbmRfYWRkX2NiID0gcmFuZF9hZGRfY2I7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rdm9p ZCAqRklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlyZXR1cm4g ZGN0eC0+YXBwX2RhdGE7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJC R19DVFggKmRjdHgsIHZvaWQgKmFwcF9kYXRhKQotKwl7Ci0rCWRjdHgtPmFwcF9kYXRhID0gYXBw X2RhdGE7Ci0rCX0KLSsKLStzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NU WCAqZGN0eCkKLSsJewotKwlyZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCX0KLSsKLStpbnQg RklQU19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlyZXR1cm4gZGN0 eC0+c3RyZW5ndGg7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwo RFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKLSsJewotKwlkY3R4LT5oZWFsdGhfY2hlY2tf aW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSsJfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRf aW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKLSsJewotKwlkY3R4LT5yZXNl ZWRfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19zdGljayA9 IDA7Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKQotKwl7Ci0rCWRyYmdfc3Rp Y2sgPSBvbm9mZjsKLSsJfQotKwotKy8qIENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0aW9u ICovCi0raW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICpvdXQpCi0rCXsKLSsJLyogTm8gQ1BSTkcgaW4gdGVzdCBtb2RlICovCi0rCWlm IChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKLSsJCXJldHVybiAxOwotKwkvKiBDaGVj ayBibG9jayBpcyB2YWxpZDogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotKwlpZiAoZGN0eC0+bGJf dmFsaWQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNU LCBGSVBTX1JfSU5URVJOQUxfRVJST1IpOwotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChkcmJnX3N0aWNrKQotKwkJbWVtY3B5KGRjdHgtPmxi LCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2Nr OiBmYWlsIGlmIG1hdGNoICovCi0rCWlmICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJs b2NrbGVuZ3RoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNU LCBGSVBTX1JfRFJCR19TVFVDSyk7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQly ZXR1cm4gMDsKLSsJCX0KLSsJLyogU2F2ZSBsYXN0IGJsb2NrIGZvciBuZXh0IGNvbXBhcmlzb24g Ki8KLSsJbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJcmV0dXJu IDE7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19y YW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCi0t LS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTQ3OTIzMjQ4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX3JhbmQuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NzkyMzI0OCArMDIw MAotQEAgLTAsMCArMSwxNzIgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3JhbmQuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlw c19yYW5kX2xjbC5oIgotKwotKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAgRFJCR3MgdG8gT3BlblNT TCBSQU5EX01FVEhPRCAqLwotKwotKy8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgZ2xvYmFsIFBS TkcgdXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2JhbAotKyAqIHZhcmlhYmxl IHRvIHN0b3JlIGNvbnRleHQuCi0rICovCi0rCi0rc3RhdGljIERSQkdfQ1RYIG9zc2xfZGN0eDsK LSsKLStEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpCi0rCXsKLSsJcmV0dXJu ICZvc3NsX2RjdHg7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19ieXRlcyh1bnNpZ25l ZCBjaGFyICpvdXQsIGludCBjb3VudCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2Rj dHg7Ci0rCWludCBydiA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKmFkaW4gPSBOVUxMOwotKwlzaXpl X3QgYWRpbmxlbiA9IDA7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWRv IAotKwkJewotKwkJc2l6ZV90IHJjbnQ7Ci0rCQlpZiAoY291bnQgPiAoaW50KWRjdHgtPm1heF9y ZXF1ZXN0KQotKwkJCXJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsKLSsJCWVsc2UKLSsJCQlyY250 ID0gY291bnQ7Ci0rCQlpZiAoZGN0eC0+Z2V0X2FkaW4pCi0rCQkJewotKwkJCWFkaW5sZW4gPSBk Y3R4LT5nZXRfYWRpbihkY3R4LCAmYWRpbik7Ci0rCQkJaWYgKGFkaW5sZW4gJiYgIWFkaW4pCi0r CQkJCXsKLSsJCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0JZVEVTLCBGSVBTX1JfRVJST1Jf UkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUKTsKLSsJCQkJZ290byBlcnI7Ci0rCQkJCX0KLSsJ CQl9Ci0rCQlydiA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBvdXQsIHJjbnQsIDAsIGFkaW4s IGFkaW5sZW4pOwotKwkJaWYgKGFkaW4pCi0rCQkJewotKwkJCWlmIChkY3R4LT5jbGVhbnVwX2Fk aW4pCi0rCQkJCWRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKLSsJCQlh ZGluID0gTlVMTDsKLSsJCQl9Ci0rCQlpZiAoIXJ2KQotKwkJCWdvdG8gZXJyOwotKwkJb3V0ICs9 IHJjbnQ7Ci0rCQljb3VudCAtPSByY250OwotKwkJfQotKwl3aGlsZSAoY291bnQpOwotKwlydiA9 IDE7Ci0rCWVycjoKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1 cm4gcnY7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hh ciAqb3V0LCBpbnQgY291bnQpCi0rCXsKLSsJaWYgKGZpcHNfZHJiZ19ieXRlcyhvdXQsIGNvdW50 KSA8PSAwKQotKwkJcmV0dXJuIC0xOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQg Zmlwc19kcmJnX3N0YXR1cyh2b2lkKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0 eDsKLSsJaW50IHJ2OwotKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlydiA9 IGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEgOiAwOwotKwlDUllQVE9fcl91 bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK3N0YXRpYyB2 b2lkIGZpcHNfZHJiZ19jbGVhbnVwKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHggPSAmb3Nz bF9kY3R4OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfc2VlZChjb25zdCB2b2lkICpzZWVkLCBp bnQgc2VlZGxlbikKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCWlmIChk Y3R4LT5yYW5kX3NlZWRfY2IpCi0rCQlyZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNl ZWQsIHNlZWRsZW4pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJn X2FkZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbiwKLSsJCQkJCWRvdWJsZSBhZGRfZW50 cm9weSkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCWlmIChkY3R4LT5y YW5kX2FkZF9jYikKLSsJCXJldHVybiBkY3R4LT5yYW5kX2FkZF9jYihkY3R4LCBzZWVkLCBzZWVk bGVuLCBhZGRfZW50cm9weSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGNvbnN0IFJB TkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRoID0KLSsJewotKwlmaXBzX2RyYmdfc2VlZCwKLSsJZmlw c19kcmJnX2J5dGVzLAotKwlmaXBzX2RyYmdfY2xlYW51cCwKLSsJZmlwc19kcmJnX2FkZCwKLSsJ Zmlwc19kcmJnX3BzZXVkbywKLSsJZmlwc19kcmJnX3N0YXR1cwotKwl9OwotKwotK2NvbnN0IFJB TkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZyYW5kX2Ry YmdfbWV0aDsKLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2Ry Ymdfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19z ZWxmdGVzdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDg5MjMyNzEgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYwkyMDE0LTA1LTA2 IDE2OjI5OjUwLjU0ODkyMzI3MSArMDIwMAotQEAgLTAsMCArMSw4NjIgQEAKLSsvKiBmaXBzL3Jh bmQvZmlwc19kcmJnX3NlbGZ0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBI ZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0Lgot KyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxz dHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlw c19yYW5kX2xjbC5oIgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaW5jbHVkZSAiZmlw c19kcmJnX3NlbGZ0ZXN0LmgiCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwlpbnQgcG9zdDsKLSsJ aW50IG5pZDsKLSsJdW5zaWduZWQgaW50IGZsYWdzOwotKwotKwkvKiBLQVQgZGF0YSBmb3Igbm8g UFIgKi8KLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50OwotKwlzaXplX3QgZW50bGVuOwotKwlj b25zdCB1bnNpZ25lZCBjaGFyICpub25jZTsKLSsJc2l6ZV90IG5vbmNlbGVuOwotKwljb25zdCB1 bnNpZ25lZCBjaGFyICpwZXJzOwotKwlzaXplX3QgcGVyc2xlbjsKLSsJY29uc3QgdW5zaWduZWQg Y2hhciAqYWRpbjsKLSsJc2l6ZV90IGFkaW5sZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVu dHJlc2VlZDsKLSsJc2l6ZV90IGVudHJlc2VlZGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbnJlc2VlZDsKLSsJc2l6ZV90IGFkaW5yZXNlZWRsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4yOwotKwlzaXplX3QgYWRpbjJsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmth dDsKLSsJc2l6ZV90IGthdGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0MjsKLSsJc2l6 ZV90IGthdDJsZW47Ci0rCi0rCS8qIEtBVCBkYXRhIGZvciBQUiAqLwotKwljb25zdCB1bnNpZ25l ZCBjaGFyICplbnRfcHI7Ci0rCXNpemVfdCBlbnRsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNo YXIgKm5vbmNlX3ByOwotKwlzaXplX3Qgbm9uY2VsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnBlcnNfcHI7Ci0rCXNpemVfdCBwZXJzbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFy ICphZGluX3ByOwotKwlzaXplX3QgYWRpbmxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAq ZW50cHJfcHI7Ci0rCXNpemVfdCBlbnRwcmxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbmdfcHI7Ci0rCXNpemVfdCBhZGluZ2xlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAq ZW50Z19wcjsKLSsJc2l6ZV90IGVudGdsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmth dF9wcjsKLSsJc2l6ZV90IGthdGxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0Ml9w cjsKLSsJc2l6ZV90IGthdDJsZW5fcHI7Ci0rCi0rCX0gRFJCR19TRUxGVEVTVF9EQVRBOwotKwot KyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcsIHByLCBwKSB7cCwgbmlkLCBm bGFnIHwgRFJCR19GTEFHX1RFU1QsIFwKLSsJcHIjI19lbnRyb3B5aW5wdXQsIHNpemVvZihwciMj X2VudHJvcHlpbnB1dCksIFwKLSsJcHIjI19ub25jZSwgc2l6ZW9mKHByIyNfbm9uY2UpLCBcCi0r CXByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wZXJzb25hbGl6YXRpb25z dHJpbmcpLCBcCi0rCXByIyNfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19hZGRpdGlvbmFs aW5wdXQpLCBcCi0rCXByIyNfZW50cm9weWlucHV0cmVzZWVkLCBzaXplb2YocHIjI19lbnRyb3B5 aW5wdXRyZXNlZWQpLCBcCi0rCXByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIj I19hZGRpdGlvbmFsaW5wdXRyZXNlZWQpLCBcCi0rCXByIyNfYWRkaXRpb25hbGlucHV0Miwgc2l6 ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0MiksIFwKLSsJcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBz aXplb2YocHIjI19pbnRfcmV0dXJuZWRiaXRzKSwgXAotKwlwciMjX3JldHVybmVkYml0cywgc2l6 ZW9mKHByIyNfcmV0dXJuZWRiaXRzKSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1dCwgc2l6ZW9m KHByIyNfcHJfZW50cm9weWlucHV0KSwgXAotKwlwciMjX3ByX25vbmNlLCBzaXplb2YocHIjI19w cl9ub25jZSksIFwKLSsJcHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMj X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKLSsJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQs IHNpemVvZihwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCksIFwKLSsJcHIjI19wcl9lbnRyb3B5aW5w dXRwciwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIpLCBcCi0rCXByIyNfcHJfYWRkaXRp b25hbGlucHV0Miwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0MiksIFwKLSsJcHIjI19w cl9lbnRyb3B5aW5wdXRwcjIsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dHByMiksIFwKLSsJ cHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJuZWRiaXRz KSwgXAotKwlwciMjX3ByX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcHJfcmV0dXJuZWRiaXRz KSwgXAotKwl9Ci0rCi0rI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKG5pZCwgcHIsIHAp IFwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIERSQkdfRkxBR19DVFJfVVNFX0RGLCBwciwg cCkKLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZWMoY3VydmUsIG1kLCBwciwgcCkg XAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKChjdXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQot KwotK3N0YXRpYyBEUkJHX1NFTEZURVNUX0RBVEEgZHJiZ190ZXN0W10gPSB7Ci0rCW1ha2VfZHJi Z190ZXN0X2RhdGFfZGYoTklEX2Flc18xMjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCi0rCW1h a2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCks Ci0rCW1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9k ZiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNfMTI4 X25vX2RmLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIsIDAsIGFl c18xOTJfbm9fZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMjU2X2N0ciwg MCwgYWVzXzI1Nl9ub19kZiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTEsIDAs IHNoYTEsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyMjQsIDAsIHNoYTIyNCwg MCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1NiwgMCwgc2hhMjU2LCAxKSwKLSsJ bWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBzaGEzODQsIDApLAotKwltYWtlX2Ry YmdfdGVzdF9kYXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUxMiwgMCksCi0rCW1ha2VfZHJiZ190ZXN0 X2RhdGEoTklEX2htYWNXaXRoU0hBMSwgMCwgaG1hY19zaGExLCAwKSwKLSsJbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfaG1hY1dpdGhTSEEyMjQsIDAsIGhtYWNfc2hhMjI0LCAwKSwKLSsJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyNTYsIDAsIGhtYWNfc2hhMjU2LCAxKSwKLSsJ bWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEzODQsIDAsIGhtYWNfc2hhMzg0LCAw KSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEE1MTIsIDAsIGhtYWNfc2hh NTEyLCAwKSwKLSsJezAsMCwwfQotKwl9OwotKwotK3R5cGVkZWYgc3RydWN0IAotKwl7Ci0rCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJaW50IGVudGNudDsK LSsJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJaW50 IG5vbmNlY250OwotKwl9IFRFU1RfRU5UOwotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5 KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9s ZW4pCi0rCXsKLSsJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwot KwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OwotKwl0LT5lbnRjbnQrKzsKLSsJcmV0 dXJuIHQtPmVudGxlbjsKLSsJfQotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NU WCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7 Ci0rCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQg PSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOwotKwl0LT5ub25jZWNudCsrOwotKwlyZXR1cm4g dC0+bm9uY2VsZW47Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zaW5nbGVfa2F0KERS QkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAotKwkJCQkJCQkJaW50IHF1aWNr KQotKwl7Ci0rCVRFU1RfRU5UIHQ7Ci0rCWludCBydiA9IDA7Ci0rCXNpemVfdCBhZGlubGVuOwot Kwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07Ci0rCi0rCS8qIEluaXRpYWwgdGVzdCB3aXRo b3V0IFBSICovCi0rCi0rCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5v bmNlIGFuZCBwZXJzb25hbGlzYXRpb24KLSsJICogc3RyaW5nLgotKwkgKi8KLSsKLSsJaWYgKCFG SVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKwkJcmV0dXJuIDA7Ci0r CWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0 ZXN0X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRh KGRjdHgsICZ0KTsKLSsKLSsJdC5lbnQgPSB0ZC0+ZW50OwotKwl0LmVudGxlbiA9IHRkLT5lbnRs ZW47Ci0rCXQubm9uY2UgPSB0ZC0+bm9uY2U7Ci0rCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47 Ci0rCXQuZW50Y250ID0gMDsKLSsJdC5ub25jZWNudCA9IDA7Ci0rCi0rCWlmICghRklQU19kcmJn X2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCi0rCQlnb3RvIGVycjsK LSsKLSsJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZh bHVlcwotKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFk aW5sZW4KLSsJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KLSsJ ICovCi0rCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUs ICZkY3R4LT5pZmxhZ3MpKQotKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuIC8gMjsKLSsJZWxzZQot KwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuOwotKwotKwkvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFu ZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLwotKwlpZiAoIUZJUFNfZHJi Z19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwg YWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0 LCB0ZC0+a2F0bGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVf S0FULCBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFKTsKLSsJCWdvdG8gZXJyMjsKLSsJCX0KLSsJ LyogSWYgYWJicmV2aWF0ZWQgUE9TVCBlbmQgb2YgdGVzdCAqLwotKwlpZiAocXVpY2spCi0rCQl7 Ci0rCQlydiA9IDE7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJLyogUmVzZWVkIERSQkcgd2l0aCB0 ZXN0IGVudHJvcHkgYW5kIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJdC5lbnQgPSB0ZC0+ZW50cmVz ZWVkOwotKwl0LmVudGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47Ci0rCi0rCWlmICghRklQU19kcmJn X3Jlc2VlZChkY3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4pKQotKwkJZ290 byBlcnI7Ci0rCi0rCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0 Y2hlcyBleHBlY3RlZCBkYXRhICovCi0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJh bmRvdXQsIHRkLT5rYXQybGVuLCAwLAotKwkJCQl0ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCi0r CQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJs ZW4pKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNf Ul9OT1BSX1RFU1QyX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwotKwlGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsKLSsJLyogTm93IHRlc3Qgd2l0aCBQUiAqLwotKwot KwkvKiBJbnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29u YWxpc2F0aW9uCi0rCSAqIHN0cmluZy4KLSsJICovCi0rCWlmICghRklQU19kcmJnX2luaXQoZGN0 eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUZJUFNfZHJiZ19z ZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0r CQlyZXR1cm4gMDsKLSsKLSsJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Ci0rCi0r CXQuZW50ID0gdGQtPmVudF9wcjsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuX3ByOwotKwl0Lm5v bmNlID0gdGQtPm5vbmNlX3ByOwotKwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuX3ByOwotKwl0 LmVudGNudCA9IDA7Ci0rCXQubm9uY2VjbnQgPSAwOwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbnN0 YW50aWF0ZShkY3R4LCB0ZC0+cGVyc19wciwgdGQtPnBlcnNsZW5fcHIpKQotKwkJZ290byBlcnI7 Ci0rCi0rCS8qIE5vdyBnZW5lcmF0ZSB3aXRoIFBSOiB3ZSBuZWVkIHRvIHN1cHBseSBlbnRyb3B5 IGFzIHRoaXMgd2lsbAotKwkgKiBwZXJmb3JtIGEgcmVzZWVkIG9wZXJhdGlvbi4gQ2hlY2sgb3V0 cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuCi0rCSAqLwotKwotKwl0LmVudCA9IHRkLT5lbnRw cl9wcjsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50cHJsZW5fcHI7Ci0rCi0rCS8qIE5vdGUgZm9yIENU UiB3aXRob3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKLSsJICogaWdub3JlIGJ5 dGVzIGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCi0rCSAqIHRvIGhhbGYg dG8gZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCi0rCSAqLwotKwlpZiAoIWZpcHNfcG9z dF9jb3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKLSsJ CWFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9wciAvIDI7Ci0rCWVsc2UKLSsJCWFkaW5sZW4gPSB0ZC0+ YWRpbmxlbl9wcjsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQt PmthdGxlbl9wciwgMSwKLSsJCQkJdGQtPmFkaW5fcHIsIGFkaW5sZW4pKQotKwkJZ290byBlcnI7 Ci0rCi0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdF9wciwgdGQtPmthdGxlbl9wcikpCi0r CQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RF U1QxX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwotKwkvKiBOb3cgZ2VuZXJhdGUg YWdhaW4gd2l0aCBQUjogc3VwcGx5IG5ldyBlbnRyb3B5IGFnYWluLgotKwkgKiBDaGVjayBvdXRw dXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KLSsJICovCi0rCi0rCXQuZW50ID0gdGQtPmVudGdf cHI7Ci0rCXQuZW50bGVuID0gdGQtPmVudGdsZW5fcHI7Ci0rCi0rCWlmICghRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuX3ByLCAxLAotKwkJCQl0ZC0+YWRpbmdf cHIsIHRkLT5hZGluZ2xlbl9wcikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChyYW5k b3V0LCB0ZC0+a2F0Ml9wciwgdGQtPmthdDJsZW5fcHIpKQotKwkJewotKwkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFKTsKLSsJCWdv dG8gZXJyMjsKLSsJCX0KLSsJLyogQWxsIE9LLCB0ZXN0IGNvbXBsZXRlICovCi0rCXJ2ID0gMTsK LSsKLSsJZXJyOgotKwlpZiAocnYgPT0gMCkKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19T SU5HTEVfS0FULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJZXJyMjoKLSsJRklQU19kcmJn X3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0rCQotKwlyZXR1cm4gcnY7Ci0rCi0rCX0KLSsKLSsvKiBJ bml0aWFsaXNlIGEgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCi0rCi0rc3RhdGljIGlu dCBkb19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsIFRF U1RfRU5UICp0KQotKwl7Ci0rCi0rCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwg dGQtPmZsYWdzKSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJh Y2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rCQlyZXR1cm4g MDsKLSsKLSsJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCB0KTsKLSsKLSsJdC0+ZW50ID0g dGQtPmVudDsKLSsJdC0+ZW50bGVuID0gdGQtPmVudGxlbjsKLSsJdC0+bm9uY2UgPSB0ZC0+bm9u Y2U7Ci0rCXQtPm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOwotKwl0LT5lbnRjbnQgPSAwOwotKwl0 LT5ub25jZWNudCA9IDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogSW5pdGlhbGlzZSBhbmQg aW5zdGFudGlhdGUgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCi0rc3RhdGljIGludCBk b19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRk LAotKwkJCQkJCQkJVEVTVF9FTlQgKnQpCi0rCXsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwg dGQsIHQpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgs IHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJcmV0dXJuIDE7Ci0r CX0KLSsKLSsvKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGV4dGVuc2l2ZSBlcnJvciBjaGVja2lu ZyBhcyByZXF1aXJlZCBieSBTUDgwMC05MC4KLSsgKiBJbmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1v ZGVzIGFuZCBjaGVjayBhbiBlcnJvciBjb25kaXRpb24gaXMgc2V0LgotKyAqIFRoaXMgZnVuY3Rp b24gYWxvbmcgd2l0aCBmaXBzX2RyYmdfc2luZ2xlX2thdCBwZWZvcm1zIHRoZSBoZWFsdGggY2hl Y2tpbmcKLSsgKiBvcGVyYXRpb24uCi0rICovCi0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfZXJy b3JfY2hlY2soRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQpCi0rCXsKLSsJ dW5zaWduZWQgY2hhciByYW5kb3V0WzEwMjRdOwotKwlURVNUX0VOVCB0OwotKwlzaXplX3QgaTsK LSsJdW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyX3RtcDsKLSsJdW5zaWduZWQgY2hhciAqcCA9 ICh1bnNpZ25lZCBjaGFyICopZGN0eDsKLSsKLSsJLyogSW5pdGlhbGlzZSBEUkJHICovCi0rCi0r CWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyog RG9uJ3QgcmVwb3J0IGluZHVjZWQgZXJyb3JzICovCi0rCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZM QUdfTk9FUlI7Ci0rCi0rCS8qIFBlcnNvbmFsaXNhdGlvbiBzdHJpbmcgdGVzdHMgKi8KLSsKLSsJ LyogVGVzdCBkZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBlcnNvbmxpc2F0aW9uIHN0cmluZyAqLwot KwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCBkY3R4LT5tYXhf cGVycyArIDEpID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwkvKiBFbnRyb3B5IHNvdXJjZSB0ZXN0cyAqLwotKwotKwkvKiBUZXN0 IGVudHJvcHkgc291cmNlIGZhaWx1cmUgZGV0ZWNpb246IGkuZS4gcmV0dXJucyBubyBkYXRhICov Ci0rCi0rCXQuZW50bGVuID0gMDsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0r CQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVHJ5IHRvIGdlbmVyYXRlIG91dHB1dCBmcm9tIHVu aW5zdGFudGlhdGVkIERSQkcgKi8KLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5k b3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfR0VORVJBVEVf RVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdz ICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0 eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIWRv X2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWRjdHgtPmlmbGFn cyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCS8qIFRlc3QgaW5zdWZmaWNpZW50IGVudHJvcHkg Ki8KLSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7Ci0rCi0rCWlmIChGSVBT X2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZ X0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFn cyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVGVz dCB0b28gbXVjaCBlbnRyb3B5ICovCi0rCi0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAm dCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsK LSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7Ci0rCi0rCWlmIChGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VS Uk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAm PSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgp KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf VU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogTm9uY2Ug dGVzdHMgKi8KLSsKLSsJLyogVGVzdCB0b28gc21hbGwgbm9uY2UgKi8KLSsKLSsJaWYgKGRjdHgt Pm1pbl9ub25jZSkKLSsJCXsKLSsKLSsJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkp Ci0rCQkJZ290byBlcnI7Ci0rCi0rCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwot KwotKwkJdC5ub25jZWxlbiA9IGRjdHgtPm1pbl9ub25jZSAtIDE7Ci0rCi0rCQlpZiAoRklQU19k cmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJCXsK LSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9F UlJPUl9VTkRFVEVDVEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlkY3R4LT5pZmxh Z3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUo ZGN0eCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJ CX0KLSsKLSsJLyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KLSsKLSsJaWYgKGRjdHgtPm1heF9u b25jZSkKLSsJCXsKLSsKLSsJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQkJ Z290byBlcnI7Ci0rCi0rCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwkJ dC5ub25jZWxlbiA9IGRjdHgtPm1heF9ub25jZSArIDE7Ci0rCi0rCQlpZiAoRklQU19kcmJnX2lu c3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJCXsKLSsJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9V TkRFVEVDVEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlkY3R4LT5pZmxhZ3MgJj0g fkRSQkdfRkxBR19OT0VSUjsKLSsJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkp Ci0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCX0KLSsK LSsJLyogSW5zdGFudGlhdGUgd2l0aCB2YWxpZCBkYXRhLiAqLwotKwlpZiAoIWRvX2RyYmdfaW5z dGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsKLSsKLSsJLyogQ2hlY2sgZ2Vu ZXJhdGlvbiBpcyBub3cgT0sgKi8KLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCWdv dG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwkvKiBS ZXF1ZXN0IHRvbyBtdWNoIGRhdGEgZm9yIG9uZSByZXF1ZXN0ICovCi0rCWlmIChGSVBTX2RyYmdf Z2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgZGN0eC0+bWF4X3JlcXVlc3QgKyAxLCAwLAotKwkJCQl0 ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCk7Ci0r CQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVHJ5IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0 ICovCi0rCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwg MCwKLSsJCQkJdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkpCi0rCQl7Ci0rCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VS Uk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIENoZWNrIHByZWRp Y3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCi0rCSAqIGZh aWx1cmUuCi0rCSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWlmIChGSVBTX2RyYmdfZ2Vu ZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKLSsJCQkJdGQtPmFkaW4sIHRkLT5h ZGlubGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJ CQotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0r CQl9Ci0rCi0rCi0rCS8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGggdmFsaWQgZGF0YSAqLwotKwot KwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsK LSsJLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLwotKwkvKiBTYXZlIGluaXRpYWwgcmVz ZWVkIGNvdW50ZXIgKi8KLSsJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50 ZXI7Ci0rCS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KLSsJZGN0 eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7Ci0rCi0rCS8qIEdlbmVy YXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2Vl ZCAqLwotKwl0LmVudGNudCA9IDA7Ci0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJh bmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQln b3RvIGVycjsKLSsJaWYgKHQuZW50Y250ICE9IDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JF U0VFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFz IGJlZW4gcmVzZXQgKi8KLSsJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3Vu dGVyX3RtcCArIDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsK LSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJ fQotKwotKwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBl bnRyb3B5IHNvdXJjZQotKwkgKiBmYWlsdXJlLgotKwkgKi8KLSsKLSsJdC5lbnRsZW4gPSAwOwot KwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwlpZiAoRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCi0rCQkJCXRkLT5hZGluLCB0ZC0+ YWRpbmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r CQkKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCWlmICghRklQU19k cmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJy OwotKwkJfQotKwotKwotKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkK LSsJCQlnb3RvIGVycjsKLSsJLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLwotKwkvKiBT YXZlIGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KLSsJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0 eC0+cmVzZWVkX2NvdW50ZXI7Ci0rCS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50 ZXJ2YWwgKi8KLSsJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7 Ci0rCi0rCS8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1 ZXN0ZWQgZm9yIHJlc2VlZCAqLwotKwl0LmVudGNudCA9IDA7Ci0rCWlmICghRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+ YWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKHQuZW50Y250ICE9IDEpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9S RVFVRVNURURfRk9SX1JFU0VFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJLyogQ2hlY2sgcmVz ZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KLSsJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVy ICE9IHJlc2VlZF9jb3VudGVyX3RtcCArIDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7Ci0rCQlnb3Rv IGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBFeHBsaWNpdCByZXNlZWQgdGVzdHMgKi8KLSsKLSsJ LyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAq LwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0r CWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCWlmIChGSVBTX2RyYmdfcmVz ZWVkKGRjdHgsIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEpID4gMCkKLSsJCXsKLSsJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5Q VVRfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVGVzdCBl eHBsaWNpdCByZXNlZWQgd2l0aCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlICovCi0rCi0rCXQuZW50 bGVuID0gMDsKLSsKLSsJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5h ZGlubGVuKSA+IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9 Ci0rCi0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VS Uk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3 aXRoIHRvbyBtdWNoIGVudHJvcHkgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQs ICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJS OwotKwotKwl0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKLSsKLSsJaWYgKEZJUFNf ZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9S X1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJ fQotKwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsaXR0bGUgZW50cm9weSAq LwotKwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0r Ci0rCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50bGVuID0gZGN0 eC0+bWluX2VudHJvcHkgLSAxOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+ YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3Rv IGVycjsKLSsJCX0KLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCXAgPSAodW5zaWduZWQg Y2hhciAqKSZkY3R4LT5kOwotKwkvKiBTdGFuZGFyZCBzYXlzIHdlIGhhdmUgdG8gY2hlY2sgdW5p bnN0YW50aWF0ZSByZWFsbHkgemVyb2VzCi0rCSAqIHRoZSBkYXRhLi4uCi0rCSAqLwotKwlmb3Ig KGkgPSAwOyBpIDwgc2l6ZW9mKGRjdHgtPmQpOyBpKyspCi0rCQl7Ci0rCQlpZiAoKnAgIT0gMCkK LSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf VU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCQlw Kys7Ci0rCQl9Ci0rCi0rCXJldHVybiAxOwotKwotKwllcnI6Ci0rCS8qIEEgcmVhbCBlcnJvciBh cyBvcHBvc2VkIHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5nIGZ1bmN0aW9uIHdpbGwKLSsJ ICogaW5kaWNhdGUgdGhlIGVycm9yLgotKwkgKi8KLSsJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJC R19GTEFHX05PRVJSKSkKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX0ZVTkNUSU9OX0VSUk9SKTsKLSsJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7 Ci0rCXJldHVybiAwOwotKwotKwl9Ci0rCi0raW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRj dHgsIGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncykKLSsJewotKwlEUkJHX1NFTEZURVNUX0RB VEEgKnRkOwotKwlmbGFncyB8PSBEUkJHX0ZMQUdfVEVTVDsKLSsJZm9yICh0ZCA9IGRyYmdfdGVz dDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQotKwkJewotKwkJaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRk LT5mbGFncyA9PSBmbGFncykKLSsJCQl7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChk Y3R4LCB0ZCwgMCkpCi0rCQkJCXJldHVybiAwOwotKwkJCXJldHVybiBmaXBzX2RyYmdfZXJyb3Jf Y2hlY2soZGN0eCwgdGQpOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLStpbnQg RklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlpbnQgcnY7Ci0r CURSQkdfQ1RYICp0Y3R4ID0gTlVMTDsKLSsJdGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0r CWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZs YWdzKTsKLSsJaWYgKCF0Y3R4KQotKwkJcmV0dXJuIDA7Ci0rCXJ2ID0gZmlwc19kcmJnX2thdCh0 Y3R4LCBkY3R4LT50eXBlLCBkY3R4LT54ZmxhZ3MpOwotKwlpZiAodGN0eCkKLSsJCUZJUFNfZHJi Z19mcmVlKHRjdHgpOwotKwlpZiAocnYpCi0rCQlmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1Rf RFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWVsc2UKLSsJCWZpcHNfcG9zdF9m YWlsZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOwotKwlpZiAo IXJ2KQotKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCWVsc2UKLSsJCWRj dHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQ U19zZWxmdGVzdF9kcmJnKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHg7Ci0rCURSQkdfU0VM RlRFU1RfREFUQSAqdGQ7Ci0rCWludCBydiA9IDE7Ci0rCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAs IDApOwotKwlpZiAoIWRjdHgpCi0rCQlyZXR1cm4gMDsKLSsJZm9yICh0ZCA9IGRyYmdfdGVzdDsg dGQtPm5pZCAhPSAwOyB0ZCsrKQotKwkJewotKwkJaWYgKHRkLT5wb3N0ICE9IDEpCi0rCQkJY29u dGludWU7Ci0rCQlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlk LCAmdGQtPmZsYWdzKSkKLSsJCQlyZXR1cm4gMTsKLSsJCWlmICghZmlwc19kcmJnX3NpbmdsZV9r YXQoZGN0eCwgdGQsIDEpKQotKwkJCXsKLSsJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9E UkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsJCQlydiA9IDA7Ci0rCQkJY29udGludWU7Ci0r CQkJfQotKwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwg JnRkLT5mbGFncykpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfZHJiZ19mcmVlKGRjdHgp OwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2 b2lkKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4OwotKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwot KwlpbnQgcnYgPSAxOwotKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJaWYgKCFkY3R4 KQotKwkJcmV0dXJuIDA7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQr KykKLSsJCXsKLSsJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5u aWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAxOwotKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xl X2thdChkY3R4LCB0ZCwgMCkpCi0rCQkJewotKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNU X0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwotKwkJCXJ2ID0gMDsKLSsJCQljb250aW51ZTsK LSsJCQl9Ci0rCQlpZiAoIWZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCkpCi0rCQkJewot KwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3Mp OwotKwkJCXJ2ID0gMDsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoIWZpcHNfcG9zdF9z dWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsJCQlyZXR1cm4g MDsKLSsJCX0KLSsJRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0Lmgu ZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAotLS0t IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NDg5MjMyNzEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0ODkyMzI3 MSArMDIwMAotQEAgLTAsMCArMSwyMzM1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZS5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKy8qIFNl bGZ0ZXN0IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBmb3IgdGhlIFNQODAwLTkwIERSQkcgKi8KLSsK LSsjZGVmaW5lIF9fZmlwc19jb25zdHNlZwotKwotKy8qIEFFUy0xMjggdXNlIGRmIFBSICAqLwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDYxLDB4NTIsMHg3YywweGUzLDB4MjMs MHg3ZCwweDBhLDB4MDcsMHgxMCwweDBjLDB4NTAsMHgzMywKLSsJMHhjOCwweGRiLDB4ZmYsMHgx MgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NTEsMHgwZCwweDg1LDB4Nzcs MHhlZCwweDIyLDB4OTcsMHgyOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0KLSsJewotKwkweDU5LDB4OWYsMHhiYiwweGNkLDB4ZDUsMHgyNSwweDY5LDB4YjUsMHhj YiwweGI1LDB4MDMsMHhmZSwKLSsJMHhkNywweGQ3LDB4MDEsMHg2NwotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3By X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGVmLDB4ODgsMHg3NiwweDAxLDB4YWYsMHgz YywweGZlLDB4OGIsMHhhZiwweDI2LDB4MDYsMHg5ZSwKLSsJMHg5YSwweDQ3LDB4MDgsMHg3Ngot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZTIsMHg3NiwweGY5 LDB4ZjYsMHgzYSwweGJhLDB4MTAsMHg5ZiwweGJmLDB4NDcsMHgwZSwweDUxLAotKwkweDA5LDB4 ZmIsMHhhMywweGI2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewot KwkweGQ0LDB4OTgsMHg4YSwweDQ2LDB4ODAsMHg0YywweGRiLDB4YTMsMHg1OSwweDAyLDB4NTcs MHg1MiwKLSsJMHg2NiwweDFjLDB4ZWEsMHg1YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9Ci0rCXsKLSsJMHg4OCwweDhjLDB4OTEsMHhkNiwweGJlLDB4NTYsMHg2ZSwweDA4 LDB4OWEsMHg2MiwweDJiLDB4MTEsCi0rCTB4M2YsMHg1ZSwweDMxLDB4MDYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9k Zl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhjMCwweDVjLDB4NmIsMHg5OCwweDAx LDB4MGQsMHg1OCwweDE4LDB4NTEsMHgxOCwweDk2LDB4YWUsCi0rCTB4YTcsMHhlMywweGE4LDB4 NjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjZiwweDAxLDB4 YWMsMHgyMiwweDMxLDB4MDYsMHg4ZSwweGZjLDB4Y2UsMHg1NiwweGVhLDB4MjQsCi0rCTB4MGYs MHgzOCwweDQzLDB4YzYKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBObyBQUiAgKi8K LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3Vz ZV9kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxZiwweDhlLDB4MzQsMHg4MiwweDBjLDB4 YjcsMHhiZSwweGM1LDB4MDEsMHgzZSwweGQwLDB4YTMsCi0rCTB4OWQsMHg3ZCwweDFjLDB4OWIK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9ub25jZVtdID0KLSsJewotKwkweGQ1LDB4NGQsMHhiZCwweDRhLDB4OTMs MHg3ZiwweGI4LDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0r CXsKLSsJMHhhYiwweGQ2LDB4M2YsMHgwNCwweGZlLDB4MjcsMHg2YiwweDJkLDB4ZDcsMHhjMyww eDFjLDB4ZjMsCi0rCTB4MzgsMHg2NiwweGJhLDB4MWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFs aW5wdXRbXSA9Ci0rCXsKLSsJMHhmZSwweGY0LDB4MDksMHhhOCwweGI3LDB4NzMsMHgyNywweDlj LDB4NWYsMHhhNywweGVhLDB4NDYsCi0rCTB4YjUsMHhlMiwweGIyLDB4NDEKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9k Zl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NDIsMHhlNCwweDRlLDB4N2IsMHgyNyww eGRkLDB4Y2IsMHhiYywweDBhLDB4Y2YsMHhhNiwweDY3LAotKwkweGU3LDB4NTcsMHgxMSwweGI0 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4MTQsMHgyNiww eDY5LDB4ZDksMHhmMywweDY1LDB4MDMsMHhkNiwweDZiLDB4YjksMHg0NCwweDBiLAotKwkweGM3 LDB4YzQsMHg5ZSwweDM5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4NTUsMHgyZSwweDYwLDB4OWEsMHgwNSwweDcyLDB4OGEsMHhhOCwweGVmLDB4MjIs MHg4MSwweDVhLAotKwkweGM4LDB4OTMsMHhmYSwweDg0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25h bGlucHV0MltdID0KLSsJewotKwkweDNjLDB4NDAsMHhjOCwweGM0LDB4MTYsMHgwYywweDIxLDB4 YTQsMHgzNywweDJjLDB4OGYsMHhhNSwKLSsJMHgwNiwweDBjLDB4MTUsMHgyYwotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUxLDB4M2UsMHg5OSwweDk4LDB4ODYsMHg2 NywweDBiLDB4NjMsMHg3YiwweGJlLDB4M2YsMHg4OCwKLSsJMHg0NiwweDgxLDB4YzcsMHgxOQot Kwl9OwotKwotKwotKy8qIEFFUy0xOTIgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1 dFtdID0KLSsJewotKwkweDJiLDB4NGUsMHg4YiwweGUxLDB4ZjEsMHgzNCwweDgwLDB4NTYsMHg4 MSwweGY5LDB4NzQsMHhlYywKLSsJMHgxNywweDQ0LDB4MmEsMHhmMSwweDE0LDB4YjAsMHhiZiww eDk3LDB4MzksMHhiNywweDA0LDB4N2QKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9ub25jZVtdID0KLSsJewot KwkweGQ2LDB4OWQsMHhlYiwweDE0LDB4NGUsMHg2YywweDMwLDB4MWUsMHgzOSwweDU1LDB4NzMs MHhkMCwKLSsJMHhkMSwweDgwLDB4NzgsMHhmYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweGZjLDB4NDMsMHg0YSwweGY4LDB4OWEsMHg1NSwweGIz LDB4NTMsMHg4MywweGUyLDB4MTgsMHgxNiwKLSsJMHgwYywweGRjLDB4Y2QsMHg1ZSwweDRmLDB4 YTAsMHgwMywweDAxLDB4MmIsMHg5ZiwweGU0LDB4ZDUsCi0rCTB4N2QsMHg0OSwweGYwLDB4NDEs MHg5ZSwweDNkLDB4OTksMHgwNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0K LSsJewotKwkweDVlLDB4OWYsMHg0OSwweDZmLDB4MjEsMHg4YiwweDFkLDB4MzIsMHhkNSwweDg0 LDB4NWMsMHhhYywKLSsJMHhhZiwweGRmLDB4ZTQsMHg3OSwweDllLDB4YWYsMHhhOSwweDgyLDB4 ZDAsMHhmOCwweDRmLDB4Y2IsCi0rCTB4NjksMHgxMCwweDBhLDB4N2UsMHg4MSwweDU3LDB4YjUs MHgzNgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZDQsMHg4 MSwweDBjLDB4ZDcsMHg2NiwweDM5LDB4ZWMsMHg0MiwweDUzLDB4ODcsMHg0MSwweGE1LAotKwkw eDFlLDB4N2QsMHg4MCwweDkxLDB4OGUsMHhiYiwweGVkLDB4YWMsMHgxNCwweDAyLDB4MWEsMHhk NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkZiwweDFk LDB4MzksMHg0NSwweDdjLDB4OWIsMHhjNiwweDJiLDB4N2QsMHg4YywweDkzLDB4ZTksCi0rCTB4 MTksMHgzMCwweDZiLDB4NjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQot Kwl7Ci0rCTB4MDAsMHg3MSwweDI3LDB4NGUsMHhkMywweDE0LDB4ZjEsMHgyMCwweDdmLDB4NGEs MHg0MSwweDMyLAotKwkweDJhLDB4OTcsMHgxMSwweDQzLDB4OGYsMHg0YSwweDE1LDB4N2IsMHg5 YiwweDUxLDB4NzksMHhkYSwKLSsJMHg0OSwweDNkLDB4ZGUsMHhlOCwweGJjLDB4OTMsMHg5MSww eDk5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4OTAsMHhl ZSwweDc2LDB4YTEsMHg0NSwweDhkLDB4YjcsMHg0MCwweGIwLDB4MTEsMHhiZiwweGQwLAotKwkw eDY1LDB4ZDcsMHgzYywweDdjLDB4NGYsMHgyMCwweDNmLDB4NGUsMHgxMSwweDlkLDB4YjMsMHg1 ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDI0LDB4M2IsMHgy MCwweGE0LDB4MzcsMHg2NiwweGJhLDB4NzIsMHgzOSwweDNmLDB4Y2YsMHgzYywKLSsJMHg3ZSww eDFhLDB4MmIsMHg4MwotKwl9OwotKwotKwotKy8qIEFFUy0xOTIgdXNlIGRmIE5vIFBSICAqLwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDhkLDB4NzQsMHhhNCwweDUwLDB4MWEsMHgw MiwweDY4LDB4MGMsMHgyYSwweDY5LDB4YzQsMHg4MiwKLSsJMHgzYiwweGJiLDB4ZGEsMHgwZSww eDdmLDB4NzcsMHhhMywweDE3LDB4NzgsMHg1NywweGIyLDB4N2IKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25j ZVtdID0KLSsJewotKwkweDc1LDB4ZDUsMHgxZiwweGFjLDB4YTQsMHg4ZCwweDQyLDB4NzgsMHhk NywweDY5LDB4ODYsMHg5ZCwKLSsJMHg3NywweGQ3LDB4NDEsMHgwZQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDRlLDB4MzMsMHg0MSwweDNjLDB4OWMs MHhjMiwweGQyLDB4NTMsMHhhZiwweDkwLDB4ZWEsMHhjZiwKLSsJMHgxOSwweDUwLDB4MWUsMHhl NiwweDZmLDB4NjMsMHhjOCwweDMyLDB4MjIsMHhkYywweDA3LDB4NjUsCi0rCTB4OWMsMHhkMyww eGY4LDB4MzAsMHg5ZSwweGVkLDB4MzUsMHg3MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1 dFtdID0KLSsJewotKwkweDVkLDB4OGIsMHg4YywweGMxLDB4ZGYsMHgwZSwweDAyLDB4NzgsMHhm YiwweDE5LDB4YjgsMHg2OSwKLSsJMHg3OCwweDRlLDB4OWMsMHg1MiwweGJjLDB4YzcsMHgyMCww eGM5LDB4ZTYsMHg1ZSwweDc3LDB4MjIsCi0rCTB4MjgsMHgzZCwweDBjLDB4OWUsMHg2OCwweGE4 LDB4NDUsMHhkNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhk NSwweGU3LDB4MDgsMHhjNSwweDE5LDB4OTksMHhkNSwweDMxLDB4MDMsMHgwYSwweDc0LDB4YjYs Ci0rCTB4YjcsMHhlZCwweGU5LDB4ZWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9Ci0rCXsKLSsJMHg5YywweDI2LDB4ZGEsMHhmMSwweGFjLDB4ZDksMHg1YSwweGQ2LDB4YTgs MHg2NSwweGY1LDB4MDIsCi0rCTB4OGYsMHhkYywweGEyLDB4MDksMHg1NCwweGE2LDB4ZTIsMHhh NCwweGRlLDB4MzIsMHhlMCwweDAxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQotKwl7Ci0rCTB4OWIsMHg5MCwweGIwLDB4M2EsMHgwZSwweDNhLDB4ODAsMHgwNywweDRh LDB4ZjQsMHhkYSwweDc2LAotKwkweDI4LDB4MzAsMHgzYywweGVlLDB4NTQsMHgxYiwweDk0LDB4 NTksMHg1MSwweDQzLDB4NTYsMHg3NywKLSsJMHhhZiwweDg4LDB4ZGQsMHg2MywweDg5LDB4NDcs MHgwNiwweDY1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDNj LDB4MTEsMHg2NCwweDdhLDB4OTYsMHhmNSwweGQ4LDB4YjgsMHhhZSwweGQ2LDB4NzAsMHg0ZSwK LSsJMHgxNiwweDk2LDB4ZGUsMHhlOSwweDYyLDB4YmMsMHhlZSwweDI4LDB4MmYsMHgyNiwweGE2 LDB4ZjAsCi0rCTB4NTYsMHhlZiwweGEzLDB4ZjEsMHg2YiwweGExLDB4YjEsMHg3NwotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf dXNlX2RmX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDBiLDB4ZTIsMHg1NiwweDAzLDB4MWUs MHhkYiwweDJjLDB4NmQsMHg3ZiwweDFiLDB4MTUsMHg1OCwKLSsJMHgxYSwweGY5LDB4MTMsMHgy OAotKwl9OwotKwotKwotKy8qIEFFUy0yNTYgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlp bnB1dFtdID0KLSsJewotKwkweDYxLDB4NjgsMHhmYywweDFhLDB4ZjAsMHhiNSwweDk1LDB4NmIs MHg4NSwweDA5LDB4OWIsMHg3NCwKLSsJMHgzZiwweDEzLDB4NzgsMHg0OSwweDNiLDB4ODUsMHhl YywweDkzLDB4MTMsMHgzYiwweGE5LDB4NGYsCi0rCTB4OTYsMHhhYiwweDJjLDB4ZTQsMHhjOCww eDhmLDB4ZGQsMHg2YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4YWQsMHhk MiwweGJiLDB4YmEsMHhiNywweDY1LDB4ODksMHhjMywweDIxLDB4NmMsMHg1NSwweDMzLAotKwkw eDJiLDB4MzYsMHhmZiwweGE0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5n W10gPQotKwl7Ci0rCTB4NmUsMHhjYSwweGU3LDB4MjAsMHg3MiwweGQzLDB4ODQsMHg1YSwweDMy LDB4ZDMsMHg0YiwweDI0LAotKwkweDcyLDB4YzQsMHg2MywweDJiLDB4OWQsMHgxMiwweDI0LDB4 MGMsMHgyMywweDI2LDB4OGUsMHg4MywKLSsJMHgxNiwweDM3LDB4MGIsMHhkMSwweDA2LDB4NGYs MHg2OCwweDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4 N2UsMHgwOCwweDRhLDB4YmIsMHhlMywweDIxLDB4N2MsMHhjOSwweDIzLDB4ZDIsMHhmOCwweGIw LAotKwkweDczLDB4OTgsMHhiYSwweDg0LDB4NzQsMHgyMywweGFiLDB4MDYsMHg4YSwweGUyLDB4 MjIsMHhkMywKLSsJMHg3YiwweGNlLDB4OWIsMHhkMiwweDRhLDB4NzYsMHhiOCwweGRlCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgwYiwweDIzLDB4YWYsMHhk ZiwweGYxLDB4NjIsMHhkNywweGQzLDB4NDMsMHg5NywweGY4LDB4NzcsCi0rCTB4MDQsMHhhOCww eDQyLDB4MjAsMHhiZCwweGY2LDB4MGYsMHhjMSwweDE3LDB4MmYsMHg5ZiwweDU0LAotKwkweGJi LDB4NTYsMHgxNywweDg2LDB4NjgsMHgwZSwweGJhLDB4YTkKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9pbnRf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MzEsMHg4ZSwweGFkLDB4YWYsMHg0MCwweGViLDB4 NmIsMHg3NCwweDMxLDB4NDYsMHg4MCwweGM3LAotKwkweDE3LDB4YWIsMHgzYywweDdhCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDk0LDB4NmIsMHhjOSww eDlmLDB4YWIsMHg4ZCwweGM1LDB4ZWMsMHg3MSwweDg4LDB4MWQsMHgwMCwKLSsJMHg4YywweDg5 LDB4NjgsMHhlNCwweGM4LDB4MDcsMHg3NywweDM2LDB4MTcsMHg2ZCwweDc5LDB4NzgsCi0rCTB4 YzcsMHgwNiwweDRlLDB4OTksMHgwNCwweDI4LDB4MjksMHhjMwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2Vu dHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweGJmLDB4NmMsMHg1OSwweDJhLDB4MGQsMHg0NCww eDBmLDB4YWUsMHg5YSwweDVlLDB4MDMsMHg3MywKLSsJMHhkOCwweGE2LDB4ZTEsMHhjZiwweDI1 LDB4NjEsMHgzOCwweDI0LDB4ODYsMHg5ZSwweDUzLDB4ZTgsCi0rCTB4YTQsMHhkZiwweDU2LDB4 ZjQsMHgwNiwweDA3LDB4OWMsMHgwZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0K LSsJewotKwkweDIyLDB4NGEsMHhiNCwweGI4LDB4YjYsMHhlZSwweDdkLDB4YjEsMHg5ZSwweGM5 LDB4ZjksMHhhMCwKLSsJMHhkOSwweGUyLDB4OTcsMHgwMAotKwl9OwotKwotKwotKy8qIEFFUy0y NTYgdXNlIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGE1LDB4 M2UsMHgzNywweDEwLDB4MTcsMHg0MywweDkxLDB4OTMsMHg1OSwweDFlLDB4NDcsMHg1MCwKLSsJ MHg4NywweGFhLDB4ZGQsMHhkNSwweGMxLDB4YzMsMHg4NiwweGNkLDB4Y2EsMHgwZCwweGRiLDB4 NjgsCi0rCTB4ZTAsMHgwMiwweGQ4LDB4MGYsMHhkYywweDQwLDB4MWEsMHg0NwotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX25vbmNlW10gPQotKwl7Ci0rCTB4YTksMHg0ZCwweGE1LDB4NWEsMHhmZCwweGM1LDB4MGMs MHhlNSwweDFjLDB4OWEsMHgzYiwweDhhLAotKwkweDRjLDB4NDQsMHg4NCwweDQwCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OGIsMHg1MiwweGEyLDB4 NGEsMHg5MywweGMzLDB4NGUsMHhhNywweDFlLDB4MWMsMHhhNywweDA1LAotKwkweGViLDB4ODIs MHg5YiwweGE2LDB4NWQsMHhlNCwweGQ0LDB4ZTAsMHg3ZiwweGEzLDB4ZDgsMHg2YiwKLSsJMHgz NywweDg0LDB4NWYsMHhmMSwweGM3LDB4ZDUsMHhmNiwweGQyCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4MjAsMHhmNCwweDIyLDB4ZWQsMHhmOCwweDVjLDB4YTEs MHg2YSwweDAxLDB4Y2YsMHhiZSwweDVmLAotKwkweDhkLDB4NmMsMHg5NCwweDdmLDB4YWUsMHgx MiwweGE4LDB4NTcsMHhkYiwweDJhLDB4YTksMHhiZiwKLSsJMHhjNywweGIzLDB4NjUsMHg4MSww eDgwLDB4OGQsMHgwZCwweDQ2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDRlLDB4NDQsMHhmZCwweGYzLDB4OWUsMHgyOSwweGEyLDB4YjgsMHgwZiwweDVkLDB4 NmMsMHhlMSwKLSsJMHgyOCwweDBjLDB4M2IsMHhjMQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1 dHJlc2VlZFtdID0KLSsJewotKwkweGRkLDB4NDAsMHhlNSwweDk4LDB4N2IsMHgyNywweDE2LDB4 NzMsMHgxNSwweDY4LDB4ZDIsMHg3NiwKLSsJMHhiZiwweDBjLDB4NjcsMHgxNSwweDc1LDB4Nzks MHgwMywweGQzLDB4ZGUsMHhkZSwweDkxLDB4NDYsCi0rCTB4NDIsMHhkZCwweGQ0LDB4NjcsMHhj OCwweDc5LDB4YzgsMHgxZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0K LSsJewotKwkweDdmLDB4ZDgsMHgxZiwweGJkLDB4MmEsMHhiNSwweDFjLDB4MTEsMHg1ZCwweDgz LDB4NGUsMHg5OSwKLSsJMHhmNiwweDVjLDB4YTUsMHg0MCwweDIwLDB4ZWQsMHgzOCwweDhlLDB4 ZDUsMHg5ZSwweGUwLDB4NzUsCi0rCTB4OTMsMHhmZSwweDEyLDB4NWUsMHg1ZCwweDczLDB4ZmIs MHg3NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhjZCwweDJj LDB4ZmYsMHgxNCwweDY5LDB4M2UsMHg0YywweDllLDB4ZmQsMHhmZSwweDI2LDB4MGQsCi0rCTB4 ZTksMHg4NiwweDAwLDB4NDksMHgzMCwweGJhLDB4YjEsMHhjNiwweDUwLDB4NTcsMHg3NywweDJh LAotKwkweDYyLDB4MzksMHgyYywweDNiLDB4NzQsMHhlYiwweGM5LDB4MGQKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9k Zl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZiwweDc4LDB4YmUsMHhiOSwweDRkLDB4OTcs MHg4YywweGU5LDB4ZDAsMHg5NywweGZlLDB4YWQsCi0rCTB4ZmEsMHhmZCwweDM1LDB4NWUKLSsJ fTsKLSsKLSsKLSsvKiBBRVMtMTI4IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0W10g PQotKwl7Ci0rCTB4OWEsMHgyNSwweDY1LDB4MTAsMHg2NywweGQ1LDB4YjYsMHg2YiwweDcwLDB4 YTEsMHhiMywweGE0LAotKwkweDQzLDB4OTUsMHg4MCwweGMwLDB4ODQsMHgwYSwweDc5LDB4YjAs MHg4OCwweDc0LDB4ZjIsMHhiZiwKLSsJMHgzMSwweDZjLDB4MzMsMHgzOCwweDBiLDB4MDAsMHhi MiwweDVhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9ub19kZl9wcl9ub25jZVtdID0KLSsJewotKwkweDc4LDB4NDcsMHg2Yiww eGY3LDB4OTAsMHg4ZSwweDg3LDB4ZjEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KLSsJewotKwkweGY3LDB4MjIsMHgxZCwweDNhLDB4YmUsMHgxZCwweGNhLDB4MzIs MHgxYiwweGJkLDB4ODcsMHgwYywKLSsJMHg1MSwweDI0LDB4MTksMHhlZSwweGEzLDB4MjMsMHgw OSwweDYzLDB4MzMsMHgzZCwweGE4LDB4MGMsCi0rCTB4MWMsMHhmYSwweDQyLDB4ODksMHhjYyww eDZmLDB4YTAsMHhhOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0r CTB4YzksMHhlMCwweDgwLDB4YmYsMHg4YywweDQ1LDB4NTgsMHgzOSwweGZmLDB4MDAsMHhhYiww eDAyLAotKwkweDRjLDB4M2UsMHgzYSwweDk1LDB4OWIsMHg4MCwweGE4LDB4MjEsMHgyYSwweGVl LDB4YmEsMHg3MywKLSsJMHhiMSwweGQ5LDB4Y2YsMHgyOCwweGY2LDB4OGYsMHg5YiwweDEyCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDRjLDB4YTgsMHhjNSww eGYwLDB4NTksMHg5ZSwweGE2LDB4OGQsMHgyNiwweDUzLDB4ZDcsMHg4YSwKLSsJMHhhOSwweGQ4 LDB4ZjcsMHhlZCwweGIyLDB4ZjksMHgxMiwweDQyLDB4ZTEsMHhlNSwweGJkLDB4ZTcsCi0rCTB4 ZTcsMHgxZCwweDc0LDB4OTksMHgwMCwweDlkLDB4MzEsMHgzZQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfaW50 X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUyLDB4YWMsMHgyMCwweGYwLDB4ODAsMHhlNyww eGJjLDB4N2UsMHg5YywweDdiLDB4NjUsMHg3MSwKLSsJMHhhZiwweDE5LDB4MzIsMHgxNgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x Mjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDMyLDB4N2YsMHgzOCww eDhiLDB4NzMsMHgwYSwweDc4LDB4ODMsMHhkYywweDMwLDB4YmUsMHg5ZiwKLSsJMHgxMCwweDFm LDB4ZjUsMHgxZiwweGNhLDB4MDAsMHhiNSwweDBkLDB4ZDYsMHg5ZCwweDYwLDB4ODMsCi0rCTB4 NTEsMHg1NCwweDdkLDB4MzgsMHgyMywweDNhLDB4NTIsMHg1MAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50 cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4MTgsMHg2MSwweDUzLDB4NTYsMHhlZCwweGVkLDB4 ZDcsMHgyMCwweGZiLDB4NzEsMHgwNCwweDdhLAotKwkweGIyLDB4YWMsMHhjMSwweDI4LDB4Y2Qs MHhmMiwweGMyLDB4ZmMsMHhhYSwweGIxLDB4MDYsMHgwNywKLSsJMHhlOSwweDQ2LDB4OTUsMHgw MiwweDQ4LDB4MDEsMHg3OCwweGY5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHgyOSwweGM4LDB4MWIsMHgxNSwweGIxLDB4ZDEsMHhjMiwweGY2LDB4NzEsMHg4Niww eDY4LDB4MzMsCi0rCTB4NTcsMHg4MiwweDMzLDB4YWYKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTI4 IG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YzksMHhjNSww eDc5LDB4YmMsMHhlOCwweGM1LDB4MTksMHhkOCwweGJjLDB4NjYsMHg3MywweDY3LAotKwkweGY2 LDB4ZDMsMHg3MiwweGFhLDB4YTYsMHgxNiwweGI4LDB4NTAsMHhiNywweDQ3LDB4M2EsMHg0MiwK LSsJMHhhYiwweGY0LDB4MTYsMHhiMiwweDk2LDB4ZDIsMHhiNiwweDYwCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9u b25jZVtdID0KLSsJewotKwkweDVmLDB4YmYsMHg5NywweDBjLDB4NGIsMHhhNCwweDg3LDB4MTMK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGNlLDB4ZmIs MHg3YiwweDNmLDB4ZDQsMHg2YiwweDI5LDB4MGQsMHg2OSwweDA2LDB4ZmYsMHhiYiwKLSsJMHhm MiwweGU1LDB4YzYsMHg2YywweDBhLDB4MTAsMHhhMCwweGNmLDB4MWEsMHg0OCwweGM3LDB4OGIs Ci0rCTB4M2MsMHgxNiwweDg4LDB4ZWQsMHg1MCwweDEzLDB4ODEsMHhjZQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZf YWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4NGIsMHgyMiwweDQ2LDB4MTgsMHgwMiwweDdi LDB4ZDIsMHgxYiwweDIyLDB4NDIsMHg3YywweDM3LAotKwkweGQ5LDB4ZjYsMHhlOCwweDliLDB4 MTIsMHgzMCwweDVmLDB4ZTksMHg5MCwweGU4LDB4MDgsMHgyNCwKLSsJMHg0ZiwweDA2LDB4NjYs MHhkYiwweDE5LDB4MmIsMHgxMywweDk1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4MmUsMHg5NiwweDcwLDB4NjQsMHhmYSwweGRmLDB4ZGYsMHg1NywweGI1LDB4 ODIsMHhlZSwweGQ2LAotKwkweGVkLDB4M2UsMHg2NSwweGMyCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgyNiwweGMwLDB4NzIsMHgxNiwweDNhLDB4NGIsMHhi NywweDk5LDB4ZDQsMHgwNywweGFmLDB4NjYsCi0rCTB4NjIsMHgzNiwweDk2LDB4YTQsMHg1MSww eDE3LDB4ZmEsMHgwNywweDhiLDB4MTcsMHg1ZSwweGExLAotKwkweDJmLDB4M2MsMHgxMCwweGU3 LDB4OTAsMHhkMCwweDQ2LDB4MDAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtd ID0KLSsJewotKwkweDgzLDB4MzksMHgzNywweDdiLDB4MDIsMHgwNiwweGQyLDB4MTIsMHgxMyww eDhkLDB4OGIsMHhmMiwKLSsJMHhmMCwweGY2LDB4MjYsMHhlYiwweGE0LDB4MjIsMHg3YiwweGMy LDB4ZTcsMHhiYSwweDc5LDB4ZTQsCi0rCTB4M2IsMHg3NywweDVkLDB4NGQsMHg0NywweGIyLDB4 MmQsMHhiNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDBiLDB4 YjksMHg2NywweDM3LDB4ZGIsMHg4MywweGRmLDB4Y2EsMHg4MSwweDhiLDB4ZjksMHgzZiwKLSsJ MHhmMSwweDExLDB4MWIsMHgyZiwweGYwLDB4NjEsMHhhNiwweGRmLDB4YmEsMHhhMywweGIxLDB4 YWMsCi0rCTB4ZDMsMHhlNiwweDA5LDB4YjgsMHgyYywweDZhLDB4NjcsMHhkNgotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MWUsMHhhNywweGE0LDB4ZTQsMHhlMSwweGE2 LDB4N2MsMHg2OSwweDlhLDB4NDQsMHg2YywweDM2LAotKwkweDgxLDB4MzcsMHgxOSwweGQ0Ci0r CX07Ci0rCi0rCi0rLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dFtd ID0KLSsJewotKwkweDlkLDB4MmMsMHhkMiwweDU1LDB4NjYsMHhlYSwweGUwLDB4YmUsMHgxOCww eGI3LDB4NzYsMHhlNywKLSsJMHg3MywweDM1LDB4ZDgsMHgxZiwweGFkLDB4M2EsMHhlMywweDgx LDB4MGUsMHg5MiwweGQwLDB4NjEsCi0rCTB4YzksMHgxMiwweDI2LDB4ZjYsMHgxYywweGRmLDB4 ZmUsMHg0NywweGFhLDB4ZmUsMHg3ZCwweDVhLAotKwkweDE3LDB4MWYsMHg4ZCwweDlhCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9wcl9ub25jZVtdID0KLSsJewotKwkweDQ0LDB4ODIsMHhlZCwweGU4LDB4NGMsMHgy OCwweDVhLDB4MTQsMHhmZiwweDg4LDB4OGQsMHgxOSwKLSsJMHg2MSwweDVjLDB4ZWUsMHgwZgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NDcsMHhk NywweDliLDB4OTksMHhhYSwweGNiLDB4ZTcsMHhkMiwweDU3LDB4NjYsMHgyYywweGUxLAotKwkw eDc4LDB4ZDYsMHgyYywweGVhLDB4YTMsMHgyMywweDVmLDB4MmEsMHhjMSwweDNhLDB4ZjAsMHhh NCwKLSsJMHgyMCwweDNiLDB4ZmEsMHgwNywweGQ1LDB4MDUsMHgwMiwweGU0LDB4NTcsMHgwMSww eGI2LDB4MTAsCi0rCTB4NTcsMHgyZSwweGU3LDB4NTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9u YWxpbnB1dFtdID0KLSsJewotKwkweDRiLDB4NzQsMHgwYiwweDQwLDB4Y2UsMHg2YiwweGMyLDB4 NmEsMHgyNCwweGI0LDB4ZjMsMHhhZCwKLSsJMHg3YSwweGE1LDB4N2EsMHhhMiwweDE1LDB4ZTIs MHhjOCwweDYxLDB4MTUsMHhjNiwweGI3LDB4ODUsCi0rCTB4NjksMHgxMSwweGFkLDB4N2IsMHgx NCwweGQyLDB4ZjYsMHgxMiwweGExLDB4OTUsMHg1ZCwweDNmLAotKwkweGUyLDB4ZDAsMHgwYyww eDJmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDBjLDB4OWMs MHhhZCwweDA1LDB4ZWUsMHhhZSwweDQ4LDB4MjMsMHg4OSwweDU5LDB4YTEsMHg5NCwKLSsJMHhk NywweGQ4LDB4NzUsMHhkNSwweDU0LDB4OTMsMHhjNywweDRhLDB4ZDksMHgyNiwweGRlLDB4ZWIs Ci0rCTB4YmEsMHhiMCwweDdlLDB4MzAsMHgxZCwweDVmLDB4NjksMHg0MCwweDljLDB4M2IsMHgx NywweDU4LAotKwkweDFkLDB4MzAsMHhiMywweDc4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4ZjcsMHg5MywweGIwLDB4NmQsMHg3NywweDgzLDB4ZDUsMHgz OCwweDAxLDB4ZTEsMHg1MiwweDQwLAotKwkweDdlLDB4M2UsMHgwYywweDI2Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4YmMsMHg0YiwweDM3LDB4NDQsMHgx YywweGM1LDB4NDUsMHg1ZiwweDhmLDB4NTEsMHg2MiwweDhhLAotKwkweDg1LDB4MzAsMHgxZCww eDdjLDB4ZTQsMHhjZiwweGY3LDB4NDQsMHhjZSwweDMyLDB4M2UsMHg1NywKLSsJMHg5NSwweGE0 LDB4MmEsMHhkZiwweGZkLDB4OWUsMHgzOCwweDQxLDB4YjMsMHhmNiwweGM1LDB4ZWUsCi0rCTB4 MGMsMHg0YiwweGVlLDB4NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJ ewotKwkweGVjLDB4YWYsMHhmNiwweDRmLDB4YjEsMHhhMCwweDU0LDB4YjUsMHg1YiwweGUzLDB4 NDYsMHhiMCwKLSsJMHg3NiwweDVhLDB4N2MsMHgzZiwweDdiLDB4OTQsMHg2OSwweDIxLDB4NTEs MHgwMiwweGU1LDB4OWYsCi0rCTB4MDQsMHg1OSwweDAyLDB4OTgsMHhjNiwweDQzLDB4MmMsMHhj YywweDI2LDB4NGMsMHg4NywweDZiLAotKwkweDhlLDB4MGEsMHg4MywweGRmCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg3NCwweDQ1LDB4ZmIsMHg1MywweDg0LDB4 OTYsMHhiZSwweGZmLDB4MTUsMHhjYywweDQxLDB4OTEsCi0rCTB4YjksMHhhMSwweDIxLDB4NjgK LSsJfTsKLSsKLSsKLSsvKiBBRVMtMTkyIG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0 W10gPQotKwl7Ci0rCTB4M2MsMHg3ZCwweGI1LDB4ZTAsMHg1NCwweGQ5LDB4NmUsMHg4YywweGE5 LDB4ODYsMHhjZSwweDRlLAotKwkweDZiLDB4YWYsMHhlYiwweDJmLDB4ZTcsMHg3NSwweGUwLDB4 OGIsMHhhNCwweDNiLDB4MDcsMHhmZSwKLSsJMHhiZSwweDMzLDB4NzUsMHg5MywweDgwLDB4Mjcs MHhiNSwweDI5LDB4NDcsMHg4YiwweGM3LDB4MjgsCi0rCTB4OTQsMHhjMywweDU5LDB4NjMKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX25vX2RmX25vbmNlW10gPQotKwl7Ci0rCTB4NDMsMHhmMSwweDdkLDB4YjgsMHhjMywweGZl LDB4ZDAsMHgyMywweDZiLDB4YjQsMHg5MiwweGRiLAotKwkweDI5LDB4ZmQsMHg0NSwweDcxCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg5ZiwweDI0LDB4 MjksMHg5OSwweDllLDB4MDEsMHhhYiwweGU5LDB4MTksMHhkOCwweDIzLDB4MDgsCi0rCTB4Yjcs MHhkNiwweDdlLDB4OGMsMHhjMCwweDllLDB4N2YsMHg2ZSwweDViLDB4MzMsMHgyMCwweDk2LAot KwkweDBiLDB4MjMsMHgyYywweGE1LDB4NmEsMHhmOCwweDFiLDB4MDQsMHgyNiwweGRiLDB4MmUs MHgyYiwKLSsJMHgzYiwweDg4LDB4Y2UsMHgzNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4OTQsMHhlOSwweDdjLDB4M2QsMHhhNywweGRiLDB4NjAsMHg4MywweDFm LDB4OTgsMHgzZiwweDBiLAotKwkweDg4LDB4NTksMHg1NywweDUxLDB4ODgsMHg5ZiwweDc2LDB4 NDksMHg5ZiwweGE2LDB4ZGEsMHg3MSwKLSsJMHgxZCwweDBkLDB4NDcsMHgxNiwweDYzLDB4YzUs MHg2OCwweGU0LDB4NWQsMHgzOSwweDY5LDB4YjMsCi0rCTB4M2UsMHhiZSwweGQ0LDB4OGUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhmOSwweGQ3LDB4YWQsMHg2 OSwweGFiLDB4OGYsMHgyMywweDU2LDB4NzAsMHgxNywweDRmLDB4MmEsCi0rCTB4NDUsMHhlNyww eDRhLDB4YzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGE2 LDB4NzEsMHg2YSwweDNkLDB4YmEsMHhkMSwweGU4LDB4NjYsMHhhNiwweGVmLDB4YjIsMHgwZSwK LSsJMHhhOCwweDljLDB4YWEsMHg0ZSwweGFmLDB4MTcsMHg4OSwweDUwLDB4MDAsMHhkYSwweGEx LDB4YjEsCi0rCTB4MGIsMHhhNCwweGQ5LDB4MzUsMHg4OSwweGM4LDB4ZTUsMHhiMCwweGQ5LDB4 YjcsMHhjNCwweDMzLAotKwkweDliLDB4Y2IsMHg3ZSwweDc1Ci0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlv bmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgyNywweDIxLDB4ZmMsMHhjMiwweGJkLDB4ZjMs MHgzYywweGNlLDB4YzMsMHhjYSwweGMxLDB4MDEsCi0rCTB4ZTAsMHhmZiwweDkzLDB4MTIsMHg3 ZCwweDU0LDB4NDIsMHhlMywweDlmLDB4MDMsMHhkZiwweDI3LAotKwkweDA0LDB4MDcsMHgzYyww eDUzLDB4N2YsMHhhOCwweDY2LDB4YzgsMHg5NywweDRiLDB4NjEsMHg0MCwKLSsJMHg1ZCwweDdh LDB4MjUsMHg3OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDJk LDB4OGUsMHgxNiwweDVkLDB4MGIsMHg5ZiwweGViLDB4YWEsMHhkNiwweGVjLDB4MjgsMHg3MSwK LSsJMHg3YywweDBiLDB4YzEsMHgxZCwweGQ0LDB4NDQsMHgxOSwweDQ3LDB4ZmQsMHgxZCwweDdj LDB4ZTUsCi0rCTB4ZjMsMHgyNywweGUxLDB4YjYsMHg3MiwweDBhLDB4ZTAsMHhlYywweDBlLDB4 Y2QsMHhlZiwweDFhLAotKwkweDkxLDB4NmEsMHhlMywweDVmCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHhlNSwweGRhLDB4YjgsMHhlMCwweDYzLDB4NTksMHg1YSwweGNj LDB4M2QsMHhkYywweDlmLDB4ZTgsCi0rCTB4NjYsMHg2NywweDJjLDB4OTIKLSsJfTsKLSsKLSsK LSsvKiBBRVMtMjU2IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0r CTB4MTUsMHhjNywweDVkLDB4Y2IsMHg0MSwweDRiLDB4MTYsMHgwMSwweDNhLDB4ZDEsMHg0NCww eGU4LAotKwkweDIyLDB4MzIsMHhjNiwweDljLDB4M2YsMHhlNywweDQzLDB4ZjUsMHg5YSwweGQz LDB4ZWEsMHhmMiwKLSsJMHhkNywweDRlLDB4NmUsMHg2YSwweDU1LDB4NzMsMHg0MCwweGVmLDB4 ODksMHhhZCwweDBkLDB4MDMsCi0rCTB4OTYsMHg3ZSwweDc4LDB4ODEsMHgyZiwweDkxLDB4MWIs MHg0NCwweGIwLDB4MDIsMHhiYSwweDFjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0KLSsJewot KwkweGRjLDB4ZTQsMHhkNCwweDI3LDB4N2EsMHg5MCwweGQ3LDB4OTksMHg0MywweGExLDB4M2Ms MHgzMCwKLSsJMHhjYywweDRiLDB4ZWUsMHgyZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4ZTMsMHhlNiwweGI5LDB4MTEsMHhlNCwweDdhLDB4YTQs MHg0MCwweDZiLDB4ZjgsMHg3MywweGY3LAotKwkweDdlLDB4ZWMsMHhjNywweGI5LDB4OTcsMHhi ZiwweGY4LDB4MjUsMHg3YiwweGJlLDB4MTEsMHg5YiwKLSsJMHg1YiwweDZhLDB4MGMsMHgyZSww eDJiLDB4MDEsMHg1MSwweGNkLDB4NDEsMHg0YiwweDZiLDB4YWMsCi0rCTB4MzEsMHhhOCwweDBi LDB4ZjcsMHhlNiwweDU5LDB4NDIsMHhiOCwweDAzLDB4MGMsMHhmOCwweDA2Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19k Zl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg2YSwweDlmLDB4MDAsMHg5MSwweGFl LDB4ZmUsMHhjZiwweDg0LDB4OTksMHhjZSwweGIxLDB4NDAsCi0rCTB4NmQsMHg1ZCwweDMzLDB4 MjgsMHg4NCwweGY0LDB4OGMsMHg2MywweDRjLDB4N2UsMHhiZCwweDJjLAotKwkweDgwLDB4NzYs MHhlZSwweDVhLDB4YWEsMHgxNSwweDA3LDB4MzEsMHhkOCwweGJiLDB4OGMsMHg2OSwKLSsJMHg5 ZCwweDlkLDB4YmMsMHg3ZSwweDQ5LDB4YWUsMHhlYywweDM5LDB4NmIsMHhkMSwweDFmLDB4N2UK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZjMsMHhiOSwweDc1 LDB4OWMsMHhiZCwweDg4LDB4ZWEsMHhhMiwweDUwLDB4YWQsMHhkNiwweDE2LAotKwkweDFhLDB4 MTIsMHgzYywweDg2LDB4NjgsMHhhZiwweDZmLDB4YmUsMHgxOSwweGYyLDB4ZWUsMHhjYywKLSsJ MHhhNSwweDcwLDB4ODQsMHg1MywweDUwLDB4Y2IsMHg5ZiwweDE0LDB4YTksMHhlNSwweGVlLDB4 YjksCi0rCTB4NDgsMHg0NSwweDQwLDB4ZTIsMHhjNywweGM5LDB4OWEsMHg3NCwweGZmLDB4OGMs MHg5OSwweDFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 MmUsMHhmMiwweDQ1LDB4NGMsMHg2MiwweDJlLDB4MGEsMHhiOSwweDZiLDB4YTIsMHhmZCwweDU2 LAotKwkweDc5LDB4NjAsMHg5MywweGNmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPQotKwl7Ci0rCTB4YWYsMHg2OSwweDIwLDB4ZTksMHgzYiwweDM3LDB4OWQsMHgzZiwweGI0 LDB4ODAsMHgwMiwweDdhLAotKwkweDI1LDB4N2QsMHhiOCwweGRlLDB4NzEsMHhjNSwweDA2LDB4 MGMsMHhiNCwweGUyLDB4OGYsMHgzNSwKLSsJMHhkOCwweDE0LDB4MGQsMHg3ZiwweDc2LDB4NjMs MHg0ZSwweGI1LDB4ZWUsMHhlOSwweDZmLDB4MzQsCi0rCTB4YzcsMHg1ZiwweDU2LDB4MTQsMHg0 YSwweGU4LDB4NzMsMHg5NSwweDViLDB4MWMsMHhiOSwweGNiCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhlNSwweGIwLDB4MmUsMHg3ZSwweDUyLDB4MzAsMHhl MywweDYzLDB4ODIsMHhiNiwweDQ0LDB4ZDMsCi0rCTB4MjUsMHgxOSwweDA1LDB4MjQsMHg5YSww eDlmLDB4NWYsMHgyNywweDZhLDB4MjksMHhhYiwweGZhLAotKwkweDA3LDB4YTIsMHg0MiwweDBm LDB4YzUsMHhhOCwweDk0LDB4N2MsMHgxNywweDdiLDB4ODUsMHg4MywKLSsJMHgwYywweDI1LDB4 MGUsMHg2MywweDBiLDB4ZTksMHgxMiwweDYwLDB4Y2QsMHhlZiwweDgwLDB4MGYKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDVlLDB4ZjIsMHgyNiwweGVmLDB4OWYs MHg1OCwweDVkLDB4ZDUsMHg0YSwweDEwLDB4ZmUsMHhhNywKLSsJMHgyZCwweDVmLDB4NGEsMHg0 NgotKwl9OwotKwotKwotKy8qIEFFUy0yNTYgbm8gZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5w dXRbXSA9Ci0rCXsKLSsJMHhmYiwweGNmLDB4MWIsMHg2MSwweDE2LDB4ODksMHg3OCwweDIzLDB4 ZjUsMHhkOCwweDk2LDB4ZTMsCi0rCTB4NGUsMHg2NCwweDBiLDB4MjksMHg5YSwweDNmLDB4Zjgs MHhhNSwweGVkLDB4ZjIsMHhmZSwweGRiLAotKwkweDE2LDB4Y2EsMHg3ZiwweDEwLDB4ZmEsMHg1 ZSwweDE4LDB4NzYsMHgyYywweDYzLDB4NWUsMHg5NiwKLSsJMHhjZiwweGIzLDB4ZDYsMHhmYyww eGFmLDB4OTksMHgzOSwweDI4LDB4OWMsMHg2MSwweGU4LDB4YjMKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX25vbmNl W10gPQotKwl7Ci0rCTB4MTIsMHg5NiwweGYwLDB4NTIsMHhmMywweDhkLDB4ODEsMHhjZiwweGRl LDB4ODYsMHhmMiwweDk5LAotKwkweDQzLDB4OTYsMHhiOSwweGYwCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg2MywweDBkLDB4NzgsMHhmNSwweDkwLDB4 OGUsMHgzMiwweDQ3LDB4YjAsMHg0ZCwweDM3LDB4NjAsCi0rCTB4MDksMHg5NiwweGJjLDB4YmYs MHg5NywweDdhLDB4NjIsMHgxNCwweDQ1LDB4YmQsMHg4ZCwweGNjLAotKwkweDY5LDB4ZmIsMHgw MywweGUxLDB4ODAsMHgxYywweGM3LDB4ZTIsMHgyYSwweGY5LDB4MzcsMHgzZiwKLSsJMHg2Niww eDRkLDB4NjIsMHhkOSwweDEwLDB4ZTAsMHhhZCwweGM4LDB4OWEsMHhmMCwweGE4LDB4NmQKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDM2LDB4YzYsMHgxMywweDYw LDB4YmIsMHgxNCwweGFkLDB4MjIsMHhiMCwweDM4LDB4YWMsMHhhNiwKLSsJMHgxOCwweDE2LDB4 OTMsMHgyNSwweDg2LDB4YjcsMHhkYywweGRjLDB4MzYsMHg5OCwweDJiLDB4ZjksCi0rCTB4Njgs MHgzMywweGQzLDB4YzYsMHhmZiwweGNlLDB4OGQsMHgxNSwweDU5LDB4ODIsMHg3NiwweGVkLAot KwkweDZmLDB4OGQsMHg0OSwweDc0LDB4MmYsMHhkYSwweGRjLDB4MWYsMHgxNywweGQwLDB4ZGUs MHgxNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDE2LDB4MmYs MHg4ZSwweDNmLDB4MjEsMHg3YSwweDFjLDB4MjAsMHg1NiwweGQxLDB4OTIsMHhmNiwKLSsJMHhk MiwweDI1LDB4NzUsMHgwZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4OTEsMHg3OSwweDc2LDB4ZWUsMHhlMCwweGNmLDB4OWUsMHhjMiwweGQ1LDB4ZDQsMHgy MywweDliLAotKwkweDEyLDB4OGMsMHg3ZSwweDBhLDB4YjcsMHhkMiwweDhiLDB4ZDYsMHg3Yyww eGEzLDB4YzYsMHhlNSwKLSsJMHgwZSwweGFhLDB4YzcsMHg2YiwweGFlLDB4MGQsMHhmYSwweDUz LDB4MDYsMHg3OSwweGExLDB4ZWQsCi0rCTB4NGQsMHg2YSwweDBlLDB4ZDgsMHg5ZCwweGJlLDB4 MWIsMHgzMSwweDkzLDB4N2IsMHhlYywweGZiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRy ZXNlZWRbXSA9Ci0rCXsKLSsJMHhkMiwweDQ2LDB4NTAsMHgyMiwweDEwLDB4MTQsMHg2MywweGY3 LDB4ZWEsMHgwZiwweGI5LDB4N2UsCi0rCTB4MGQsMHhlMSwweDk0LDB4MDcsMHhhZiwweDA5LDB4 NDQsMHgzMSwweGVhLDB4NjQsMHhhNCwweDE4LAotKwkweDViLDB4ZjksMHhkOCwweGMyLDB4ZmEs MHgwMywweDQ3LDB4YzUsMHgzOSwweDQzLDB4ZDUsMHgzYiwKLSsJMHg2MiwweDg2LDB4NjQsMHhl YSwweDJjLDB4NzMsMHg4YywweGFlLDB4OWQsMHg5OCwweDk4LDB4MjkKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg4YywweGFiLDB4MTgsMHhmOCwweGMzLDB4ZWMs MHgxOCwweDVjLDB4YjMsMHgxZSwweDlkLDB4YmUsCi0rCTB4M2YsMHgwMywweGI0LDB4MDAsMHg5 OCwweDlkLDB4YWUsMHhlYiwweGY0LDB4OTQsMHhmOCwweDQyLAotKwkweDhmLDB4ZTMsMHgzOSww eDA3LDB4ZTEsMHhjOSwweGFkLDB4MGIsMHgxZiwweGVkLDB4YzAsMHhiYSwKLSsJMHhmNiwweGQx LDB4ZWMsMHgyNywweDg2LDB4N2IsMHhkNiwweDU1LDB4OWIsMHg2MCwweGE1LDB4YzYKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X25vX2RmX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGVmLDB4ZDIsMHhkOCwweDVjLDB4ZGMs MHg2MiwweDI1LDB4OWYsMHhhYSwweDFlLDB4MmMsMHg2NywKLSsJMHhmNiwweDAyLDB4MzIsMHhl MgotKwl9OwotKwotKwotKy8qIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4 ZDIsMHgzNiwweGE1LDB4MjcsMHgzMSwweDczLDB4ZGQsMHgxMSwweDRmLDB4OTMsMHhiZCwweGUy LAotKwkweDMxLDB4YTUsMHg5MSwweDEzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtdID0KLSsJewotKwkweGI1LDB4 YjMsMHg2MCwweGVmLDB4ZjcsMHg2MywweDMxLDB4ZjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KLSsJewotKwkweGQ0LDB4YmIsMHgwMiwweDEwLDB4YjIsMHg3MSwweGRiLDB4ODEs MHhkNiwweGYwLDB4NDIsMHg2MCwKLSsJMHhkYSwweGVhLDB4NzcsMHg1MgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4NGQsMHhkMiwweDZjLDB4ODcsMHhmYiwweDJjLDB4NGYs MHhhNiwweDhkLDB4MTYsMHg2MywweDIyLAotKwkweDZhLDB4NTEsMHhlMywweGY4Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9l bnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGM5LDB4ODMsMHg5ZSwweDE2LDB4ZjYsMHgxYyww eDBmLDB4YjIsMHhlYywweDYwLDB4MzEsMHhhOSwKLSsJMHhjYiwweGE5LDB4MzYsMHg3YQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf cHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGE4LDB4MTMsMHg0ZiwweGY0LDB4MzEs MHgwMiwweDQ0LDB4ZTMsMHhkMywweDNkLDB4NjEsMHg5ZSwKLSsJMHhlNSwweGM2LDB4M2UsMHg4 OSwweGI1LDB4OWIsMHgwZiwweDM1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0r CTB4ZjksMHhlOCwweGQyLDB4NzIsMHgxMywweDM0LDB4OTUsMHg2ZiwweDE1LDB4NDksMHg0Nyww eDk5LAotKwkweDE2LDB4MDMsMHgxOSwweDQ3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0r CXsKLSsJMHg0ZSwweDhjLDB4NDksMHg5YiwweDRhLDB4NWMsMHg5YiwweDljLDB4M2EsMHhlZSww eGZiLDB4ZDIsCi0rCTB4YWUsMHhjZCwweDhjLDB4YzQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3JldHVybmVkYml0c1tdID0K LSsJewotKwkweDUwLDB4YjQsMHhiNCwweGNkLDB4NjgsMHg1NywweGZjLDB4MmUsMHhjMSwweDUy LDB4Y2MsMHhmNiwKLSsJMHg2OCwweGE0LDB4ODEsMHhlZCwweDdlLDB4ZTQsMHgxZCwweDg3Ci0r CX07Ci0rCi0rCi0rLyogU0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhhOSww eDQ3LDB4MWIsMHgyOSwweDJkLDB4MWMsMHgwNSwweGRmLDB4NzYsMHhkMCwweDYyLDB4ZjksCi0r CTB4ZTIsMHg3ZiwweDRjLDB4N2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGExX25vbmNlW10gPQotKwl7Ci0rCTB4NTMsMHgyMywweDI0 LDB4ZTMsMHhlYywweDBjLDB4NTQsMHgxNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQot Kwl7Ci0rCTB4N2EsMHg4NywweGExLDB4YWMsMHgxYywweGZkLDB4YWIsMHhhZSwweGY3LDB4ZDYs MHhmYiwweDc2LAotKwkweDI4LDB4ZWMsMHg2ZCwweGNhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHhmYywweDkyLDB4MzUsMHhkNiwweDdlLDB4YjcsMHgyNCwweDY1LDB4ZmQsMHgx MiwweDI3LDB4MzUsCi0rCTB4YzAsMHg3MiwweGNhLDB4MjgKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHg1NywweDg4LDB4ODIsMHhlNSwweDI1LDB4YTUsMHgyYywweDRhLDB4MDYs MHgyMCwweDZjLDB4NzIsCi0rCTB4NTUsMHg2MSwweGRkLDB4OTAsMHg3MSwweDlmLDB4OTUsMHhl YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NjksMHhhNSwweDQwLDB4NjIs MHg5OCwweDQ3LDB4NTYsMHg3MywweDRhLDB4OGYsMHg2MCwweDk2LAotKwkweGQ2LDB4OTksMHgy NywweGVkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhlNSwweDQwLDB4 NGUsMHhiZCwweDUwLDB4MDAsMHhmNSwweDE1LDB4YTYsMHhlZSwweDQ1LDB4ZGEsCi0rCTB4ODQs MHgzZCwweGQ0LDB4YzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgxMSwweDUx LDB4MTQsMHhmMCwweDA5LDB4MWIsMHg0ZSwweDU2LDB4MGQsMHhlOSwweGY2LDB4MWUsCi0rCTB4 NTIsMHg2NSwweGNkLDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGExLDB4OWMs MHg5NCwweDZlLDB4MjksMHhlMSwweDMzLDB4MGQsMHgzMiwweGQ2LDB4YWEsMHhjZSwKLSsJMHg3 MSwweDNmLDB4NTIsMHg3MiwweDhiLDB4NDIsMHhhOCwweGQ3Ci0rCX07Ci0rCi0rCi0rLyogU0hB LTIyNCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyMjRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTIsMHg2OSwweDMyLDB4NGYs MHg4MywweGE2LDB4ZjUsMHgxNCwweGUzLDB4NDksMHgzZSwweDc1LAotKwkweDNlLDB4ZGUsMHhh ZCwweGExLDB4MjksMHhjMywweGYzLDB4MTksMHgyMCwweGI1LDB4NGMsMHhkOQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9u b25jZVtdID0KLSsJewotKwkweDZhLDB4NzgsMHhkMCwweGViLDB4YmIsMHg1YSwweGYwLDB4ZWUs MHhlOCwweGMzLDB4YmEsMHg3MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0r CXsKLSsJMHhkNSwweGI4LDB4YjYsMHhiYywweGMxLDB4NWIsMHg2MCwweDMxLDB4M2MsMHhmNSww eGU1LDB4YzAsCi0rCTB4OGUsMHg1MiwweDdhLDB4YmQsMHhlYSwweDQ3LDB4YTksMHg1ZiwweDhm LDB4ZjksMHg4YiwweGFlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDFm LDB4NTUsMHhlYywweGFlLDB4MTYsMHgxMiwweDg0LDB4YmEsMHg4NCwweDE2LDB4MTksMHg4OCwK LSsJMHg4ZSwweGI4LDB4MzMsMHgyNSwweDU0LDB4ZmYsMHhjYSwweDc5LDB4YWYsMHgwNywweDI1 LDB4NTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg5MiwweGEzLDB4MzIs MHhhOCwweDlhLDB4MGEsMHg1OCwweDdjLDB4MWQsMHg1YSwweDdlLDB4ZTEsCi0rCTB4YjIsMHg3 MywweGFiLDB4MGUsMHgxNiwweDc5LDB4MjMsMHhkMywweDI5LDB4ODksMHg4MSwweGUxCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhmMywweDM4LDB4OTEsMHg0MCwweDM3 LDB4N2EsMHg1MSwweDcyLDB4NDIsMHg3NCwweDc4LDB4MGEsCi0rCTB4NjksMHhmZCwweGE2LDB4 NDQsMHg0MywweDQ1LDB4NmMsMHgwYywweDVhLDB4MTksMHhmZiwweGYxLAotKwkweDU0LDB4NjAs MHhlZSwweDZhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3NSwweGYz LDB4MDQsMHgyNSwweGRkLDB4MzYsMHhhOCwweDM3LDB4NDYsMHhhZSwweDBjLDB4NTIsCi0rCTB4 MDUsMHg3OSwweDRjLDB4MjYsMHhkYiwweGU5LDB4NzEsMHgxNiwweDRjLDB4MGEsMHhmMiwweDYw Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweGVhLDB4YzUsMHgwMywweDBh LDB4NGYsMHhiMCwweDM4LDB4OGQsMHgyMywweGQ0LDB4YzgsMHg3NywKLSsJMHhlMiwweDZkLDB4 OWMsMHgwYiwweDQ0LDB4ZjcsMHgyZCwweDViLDB4YmYsMHg1ZCwweDJhLDB4MTEKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NjAsMHg1MCwweDJiLDB4ZTcsMHg4NiwweGQ4LDB4 MjYsMHg3MywweGUzLDB4MWQsMHg5NSwweDIwLAotKwkweGIzLDB4MmMsMHgzMiwweDFjLDB4ZjUs MHhjZSwweDU3LDB4YTYsMHg2NywweDJiLDB4ZGMsMHg0ZSwKLSsJMHhkZCwweDExLDB4NGMsMHhj NAotKwl9OwotKwotKwotKy8qIFNIQS0yMjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweGIyLDB4MWMsMHg3NywweDRkLDB4ZjYsMHhkMywweGI2LDB4NDAsMHhiNywweDMwLDB4M2Us MHgyOSwKLSsJMHhiMCwweDg1LDB4MWMsMHhiZSwweDRhLDB4ZWEsMHg2YiwweDVhLDB4YjUsMHg4 YSwweDk3LDB4ZWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfbm9uY2VbXSA9Ci0rCXsKLSsJMHg0MiwweDAyLDB4MGEsMHgxYyww eDk4LDB4OWEsMHg3NywweDllLDB4OWYsMHg4MCwweGJhLDB4ZTAKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OTgsMHhiOCwweDA0LDB4NDEsMHhmYywweGMxLDB4NWQs MHhjNSwweGU5LDB4YjksMHgwOCwweGRhLAotKwkweGY5LDB4ZmEsMHgwZCwweDkwLDB4Y2UsMHhk ZiwweDFkLDB4MTAsMHhhOSwweDhkLDB4NTAsMHgwYwotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHg5YSwweDhkLDB4MzksMHg0OSwweDQyLDB4ZDUsMHgwYiwweGFlLDB4ZTEsMHhh ZiwweGI3LDB4MDAsCi0rCTB4MDIsMHhmYSwweDk2LDB4YjEsMHhhNSwweDFkLDB4MmQsMHgyNSww eDc4LDB4ZWUsMHg4MywweDNmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhl NCwweGY1LDB4NTMsMHg3OSwweDVhLDB4OTcsMHg1OCwweDA2LDB4MDgsMHhiYSwweDdiLDB4ZmEs Ci0rCTB4ZjAsMHg4MywweDA1LDB4OGMsMHgyMiwweGMwLDB4YzksMHhkYiwweDE1LDB4ZTcsMHhk ZSwweDIwLAotKwkweDU1LDB4MjIsMHg5YSwweGFkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtd ID0KLSsJewotKwkweDY3LDB4MDksMHg0OCwweGFhLDB4MDcsMHgxNiwweDk5LDB4ODksMHg3Ziww eDZkLDB4YTAsMHhlNSwKLSsJMHg4ZiwweGRmLDB4YmMsMHhkYiwweGZlLDB4ZTUsMHg2YywweDdh LDB4OTUsMHg0YSwweDY2LDB4MTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4MGYsMHg0YiwweDFjLDB4NmYsMHhiNywweGUzLDB4NDcsMHhlNSwweDVkLDB4N2QsMHgz OCwweGQ2LAotKwkweDI4LDB4OWIsMHhlYiwweDU1LDB4NjMsMHgwOSwweDNlLDB4N2MsMHg1Niww eGVhLDB4ZjgsMHgxOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MmQsMHgy NiwweDdjLDB4MzcsMHhlNCwweDdhLDB4MjgsMHg1ZSwweDVhLDB4M2MsMHhhZiwweDNkLAotKwkw eDVhLDB4OGUsMHg1NSwweGEyLDB4MWEsMHg2ZSwweGMwLDB4ZTUsMHhmNiwweDIxLDB4ZDMsMHhm NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZCwweDgzLDB4MzUsMHhkZiwweDY3 LDB4YTksMHhmYywweDE3LDB4ZGEsMHg3MCwweGNjLDB4OGIsCi0rCTB4N2YsMHg3NywweGFlLDB4 YTIsMHg1ZiwweGI5LDB4N2UsMHg3NCwweDRjLDB4MjYsMHhjMSwweDdhLAotKwkweDNiLDB4YTcs MHg1YywweDkzCi0rCX07Ci0rCi0rCi0rLyogU0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0W10g PQotKwl7Ci0rCTB4Y2UsMHg0OSwweDAwLDB4N2EsMHg1NiwweGUzLDB4NjcsMHg4ZiwweGUxLDB4 YjYsMHhhNywweGQ0LAotKwkweDRmLDB4MDgsMHg3YSwweDFiLDB4MDEsMHhmNCwweGZhLDB4NmIs MHhlZiwweGI3LDB4ZTUsMHhlYiwKLSsJMHgwNywweDNkLDB4MTEsMHgwZCwweGM4LDB4ZWEsMHgy YiwweGZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NzMsMHg0MSwweGM4LDB4OTIsMHg5 NCwweGUyLDB4YzUsMHg1ZiwweDkzLDB4ZmQsMHgzOSwweDVkLAotKwkweDJiLDB4OTEsMHg0ZCww eDM4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDUwLDB4NmQs MHgwMSwweDAxLDB4MDcsMHg1YSwweDgwLDB4MzUsMHg3YSwweDU2LDB4MWEsMHg1NiwKLSsJMHgy ZiwweDlhLDB4MGIsMHgzNSwweGIyLDB4YjEsMHhjOSwweGU1LDB4Y2EsMHg2OSwweDYxLDB4NDgs Ci0rCTB4ZmYsMHhmYiwweDBmLDB4ZDksMHg0YiwweDc5LDB4MWQsMHhiYQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRp dGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgyMCwweGI4LDB4ZGYsMHg0NCwweDc3LDB4NWEsMHhi OCwweGQzLDB4YmYsMHhmNiwweGNmLDB4YWMsCi0rCTB4NWUsMHhhNiwweDk2LDB4NjIsMHg3Myww eDQ0LDB4NDAsMHg0YSwweDMwLDB4ZmIsMHgzOCwweGE1LAotKwkweDdiLDB4MGQsMHhlNCwweDBk LDB4YzYsMHhlNCwweDlhLDB4MWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJ MHgwNCwweGM0LDB4NjUsMHhmNCwweGQzLDB4YmYsMHg4MywweDRiLDB4YWIsMHhjOCwweDQxLDB4 YTgsCi0rCTB4YzIsMHhlMCwweDQ0LDB4NjMsMHg3NywweDRjLDB4NmYsMHg2YywweDQ5LDB4NDYs MHhmZiwweDk0LAotKwkweDE3LDB4ZWEsMHhlNiwweDFhLDB4OWQsMHg1ZSwweDY2LDB4NzgKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDA3LDB4NGQsMHhhYywweDliLDB4 ODYsMHhjYSwweDRhLDB4YWEsMHg2ZSwweDdhLDB4MDMsMHhhMiwKLSsJMHg1ZCwweDEwLDB4ZWEs MHgwYiwweGY5LDB4ODMsMHhjYywweGQxLDB4ZmMsMHhlMiwweDA3LDB4YzcsCi0rCTB4MDYsMHgz NCwweDYwLDB4NmYsMHg4MywweDk0LDB4OTksMHg3NgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPQotKwl7Ci0rCTB4ODksMHg0ZSwweDQ1LDB4OGMsMHgxMSwweGY5LDB4YmMsMHg1YiwweGFj LDB4NzQsMHg4YiwweDRiLAotKwkweDVmLDB4ZjcsMHgxOSwweGYzLDB4ZjUsMHgyNCwweDU0LDB4 MTQsMHhkMSwweDE1LDB4YjEsMHg0MywKLSsJMHgxMiwweGE0LDB4NWYsMHhkNCwweGVjLDB4ZmMs MHhjZCwweDA5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDBlLDB4ZWIs MHgxZiwweGQ3LDB4ZmMsMHhkMSwweDlkLDB4ZDQsMHgwNSwweDM2LDB4OGIsMHhiMiwKLSsJMHhm YiwweGU0LDB4ZjQsMHg1MSwweDBjLDB4ODcsMHg5YiwweDAyLDB4NDQsMHhkNSwweDkyLDB4NGQs Ci0rCTB4NDQsMHhmZSwweDFhLDB4MDMsMHg0MywweDU2LDB4YmQsMHg4NgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgwMiwweGFhLDB4YjYsMHgxZCwweDdlLDB4MmEsMHg0MCww eDAzLDB4NjksMHgyZCwweDQ5LDB4YTMsCi0rCTB4NDEsMHhlNywweDQ0LDB4MGIsMHhhZiwweDdi LDB4ODUsMHhlNCwweDVmLDB4NTMsMHgzYiwweDY0LAotKwkweGJjLDB4ODksMHhjOCwweDgyLDB4 ZDQsMHg3OCwweDM3LDB4YTIKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMjU2IE5vIFBSICAqLwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5 aW5wdXRbXSA9Ci0rCXsKLSsJMHg1YiwweDFiLDB4ZWMsMHg0ZCwweGE5LDB4MzgsMHg3NCwweDVh LDB4MzQsMHgwYiwweDdiLDB4YzUsCi0rCTB4ZTUsMHhkNywweDY2LDB4N2MsMHhiYywweDgyLDB4 YjksMHgwZSwweDJkLDB4MWYsMHg5MiwweGQ3LAotKwkweGMxLDB4YmMsMHg2NywweDY5LDB4ZWMs MHg2YiwweDAzLDB4M2MKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhNCwweDBjLDB4ZDgsMHg5 YywweDYxLDB4ZDgsMHhjMywweDU0LDB4ZmUsMHg1MywweGM5LDB4ZTUsCi0rCTB4NWQsMHg2Ziww eDZkLDB4MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MjIsMHg1 ZSwweDYyLDB4OTMsMHg0MiwweDgzLDB4NzgsMHgyNCwweGQ4LDB4NDAsMHg4YywweGRlLAotKwkw eDZmLDB4ZjksMHhhNCwweDdhLDB4YzUsMHhhNywweDNiLDB4ODgsMHhhMywweGVlLDB4NDIsMHgy MCwKLSsJMHhmZCwweDYxLDB4NTYsMHhjNiwweDRjLDB4MTMsMHg0MSwweDljCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0 aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGJmLDB4NzQsMHg1YiwweGY2LDB4YzUsMHg2NCwweDVl LDB4OTksMHgzNCwweDhmLDB4YmMsMHhhNCwKLSsJMHhlMiwweGJkLDB4ZDgsMHg4NSwweDI2LDB4 MzcsMHhlYSwweGJhLDB4NGYsMHhmMiwweDlhLDB4OWEsCi0rCTB4NjYsMHhmYywweGRmLDB4NjMs MHgyNiwweDI2LDB4MTksMHg4NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 YjMsMHhjNiwweDA3LDB4MDcsMHhkNiwweDc1LDB4ZjYsMHgyYiwweGQ2LDB4MjEsMHg5NiwweGYx LAotKwkweGFlLDB4ZGIsMHgyYiwweGFjLDB4MjUsMHgyYSwweGFlLDB4YWUsMHg0MSwweDcyLDB4 MDMsMHg1ZSwKLSsJMHhiZiwweGQzLDB4NjQsMHhiYywweDU5LDB4ZjksMHhjMCwweDc2Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2 X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGJmLDB4MjAsMHgzMywweDU2LDB4Mjks MHhhOCwweDM3LDB4MDQsMHgxZiwweDc4LDB4MzQsMHgzZCwKLSsJMHg4MSwweDJhLDB4YzksMHg4 NiwweGM2LDB4N2EsMHgyZiwweDg4LDB4NWUsMHhkNSwweGJlLDB4MzQsCi0rCTB4NDYsMHgyMCww eGE0LDB4MzUsMHhlYiwweGM3LDB4ZTIsMHg5ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9Ci0rCXsKLSsJMHg5YiwweGFlLDB4MmQsMHgyZCwweDYxLDB4YTQsMHg4OSwweGViLDB4NDMs MHg0NiwweGE3LDB4ZGEsCi0rCTB4ZWYsMHg0MCwweGNhLDB4NGEsMHg5OSwweDExLDB4NDEsMHhk YywweDVjLDB4OTQsMHhlOSwweGFjLAotKwkweGQ0LDB4ZDAsMHhlNiwweGJkLDB4ZmIsMHgwMyww eDljLDB4YTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDIzLDB4YWEsMHgw YywweGJkLDB4MjgsMHgzMywweGUyLDB4NTEsMHhmYywweDcxLDB4ZDIsMHgxNSwKLSsJMHgxZiww eDc2LDB4ZmQsMHgwZCwweGUwLDB4YjcsMHhiNSwweDg0LDB4NzUsMHg1YiwweGJlLDB4ZjMsCi0r CTB4NWMsMHhjYSwweGM1LDB4MzAsMHhmMiwweDc1LDB4MWYsMHhkYQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHg5MCwweDNjLDB4YzEsMHgxMCwweDhjLDB4MTIsMHgwMSwweGM2LDB4 YTYsMHgzYSwweDBmLDB4NGQsCi0rCTB4YjYsMHgzYSwweDRmLDB4NDEsMHg5YywweDYxLDB4NzUs MHg4NCwweGU5LDB4NzQsMHg3NSwweGZkLAotKwkweGZlLDB4ZjIsMHgxZiwweDQzLDB4ZDgsMHg1 ZSwweDI0LDB4YTMKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMzg0IFBSICAqLwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRb XSA9Ci0rCXsKLSsJMHg3MSwweDlkLDB4YjIsMHg1YSwweDcxLDB4NmQsMHgwNCwweGU5LDB4MWUs MHhjNywweDkyLDB4MjQsCi0rCTB4NmUsMHgxMiwweDMzLDB4YTksMHg1MiwweDY0LDB4MzEsMHhl ZiwweDcxLDB4ZWIsMHgyMiwweDU1LAotKwkweDI4LDB4OTcsMHgwNiwweDZhLDB4YzAsMHgwYyww eGEwLDB4N2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhmNSwweDBkLDB4ZmEsMHhiMCww eGVjLDB4NmEsMHg3YywweGQ2LDB4YmQsMHg5YiwweDA1LDB4ZmQsCi0rCTB4MzgsMHgzZSwweDJl LDB4NTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NzQsMHhh YywweDdlLDB4NmQsMHhiMSwweGE0LDB4ZTcsMHgyMSwweGQxLDB4MWUsMHg2ZSwweDk2LAotKwkw eDZkLDB4NGQsMHg1MywweDQ2LDB4ODIsMHg5NiwweDZlLDB4Y2YsMHhhYSwweDgxLDB4OGQsMHg3 ZCwKLSsJMHg5ZSwweGUxLDB4MGYsMHgxNSwweGVhLDB4NDEsMHhiZiwweGUzCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGRhLDB4OTUsMHhkNCwweGQwLDB4YjgsMHgxMSww eGQzLDB4NDksMHgyNywweDVkLDB4YTksMHgzOSwKLSsJMHg2OCwweGYzLDB4YTgsMHhlOSwweDVk LDB4MTksMHg4YSwweDJiLDB4NjYsMHhlOCwweDY5LDB4MDYsCi0rCTB4N2MsMHg5ZSwweDAzLDB4 YTEsMHg4YiwweDI2LDB4MmQsMHg2ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewot KwkweDQ5LDB4ZGYsMHg0NCwweDAwLDB4ZTQsMHgxYywweDc1LDB4MGIsMHgyNiwweDVhLDB4NTks MHg2NCwKLSsJMHgxZiwweDRlLDB4YjEsMHhiMiwweDEzLDB4ZjEsMHgyMiwweDRlLDB4YjQsMHg2 ZCwweDlhLDB4Y2MsCi0rCTB4YTAsMHg0OCwweGU2LDB4Y2YsMHgxZCwweGQxLDB4OTIsMHgwZAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTM4NF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YzgsMHg1MiwweGFlLDB4YmYs MHgwNCwweDNjLDB4MjcsMHhiNywweDc4LDB4MTgsMHhhYSwweDhmLAotKwkweGZmLDB4Y2YsMHhh NCwweGYxLDB4Y2MsMHhlNywweDY4LDB4ZmEsMHgyMiwweGEyLDB4MTMsMHg0NSwKLSsJMHhlOCww eGRkLDB4ODcsMHhlNiwweGYyLDB4NmUsMHhkZCwweGM3LDB4NTIsMHg5MCwweDlmLDB4N2IsCi0r CTB4ZmEsMHg2MSwweDJkLDB4OWQsMHg5ZSwweGNmLDB4OTgsMHhhYywweDUyLDB4NDAsMHhjZSww eGFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg2MSwweDdjLDB4MDMs MHg5YSwweDNlLDB4NTAsMHg1NywweDYwLDB4YzUsMHg4MywweGM5LDB4YjIsCi0rCTB4ZDEsMHg4 NywweDg1LDB4NjYsMHg5MiwweDVkLDB4ODQsMHgwZSwweDUzLDB4ZmIsMHg3MCwweDAzLAotKwkw eDcyLDB4ZmQsMHhiYSwweGFlLDB4OWMsMHg4ZiwweGY4LDB4MTgKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlu cHV0cHIyW10gPQotKwl7Ci0rCTB4ZjgsMHhlYiwweDg5LDB4YjEsMHg4ZCwweDc4LDB4YmUsMHgy MSwweGUwLDB4YmIsMHg5ZCwweGI3LAotKwkweDk1LDB4MGUsMHhkOSwweDQ2LDB4MGMsMHg4Yyww eGUyLDB4NjMsMHhiNywweDlkLDB4NjcsMHg5MCwKLSsJMHhiZCwweGM3LDB4MGIsMHhhNSwweGNl LDB4YjIsMHg2NSwweDgxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGU2LDB4 OWYsMHhmZSwweDY4LDB4ZDYsMHhiNSwweDc5LDB4ZjEsMHgwNiwweDVmLDB4YTMsMHhiYiwKLSsJ MHgyMywweDg1LDB4ZDgsMHhmMCwweDI5LDB4NWEsMHg2OCwweDllLDB4ZjUsMHhmNCwweGE2LDB4 MTIsCi0rCTB4ZTAsMHg5YSwweGUyLDB4YWMsMHgwMCwweDFkLDB4OTgsMHgyNiwweGZjLDB4NTMs MHg5NSwweDUzLAotKwkweGU0LDB4M2UsMHgxNywweGQ1LDB4MDgsMHgwYiwweDcwLDB4M2QsMHg2 NywweDk5LDB4YWMsMHg2NgotKwl9OwotKwotKwotKy8qIFNIQS0zODQgTm8gUFIgICovCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlp bnB1dFtdID0KLSsJewotKwkweDA3LDB4MTUsMHgyNywweDJhLDB4YWYsMHg3NCwweDI0LDB4Mzcs MHhiYywweGQ1LDB4MTQsMHg2OSwKLSsJMHhjZSwweDExLDB4ZmYsMHhhMiwweDZiLDB4YjgsMHgw NSwweDY3LDB4MzQsMHhmOCwweGJkLDB4NmQsCi0rCTB4NmEsMHhjYywweGNkLDB4NjAsMHhhMyww eDY4LDB4Y2EsMHhmNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTM4NF9ub25jZVtdID0KLSsJewotKwkweDcwLDB4MTcsMHhjMiwweDVi LDB4NWQsMHgyMiwweDBiLDB4MDYsMHgxNSwweDU0LDB4NzgsMHg3NywKLSsJMHg0NCwweGFmLDB4 MmYsMHgwOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg4OSwweDM5 LDB4MjgsMHhiMCwweDYwLDB4ZWIsMHgzZCwweGRjLDB4NTUsMHg3NSwweDg2LDB4ZWIsCi0rCTB4 YWUsMHhhMiwweDhmLDB4YmMsMHgxYiwweDc1LDB4ZDQsMHhlMSwweDBmLDB4YWEsMHgzOCwweGNh LAotKwkweDYyLDB4OGIsMHhjYiwweDJjLDB4MjYsMHhmNiwweGJjLDB4YjEKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4MzAsMHgyYiwweDQyLDB4MzUsMHhlZiwweGRhLDB4NDAs MHg1NSwweDI4LDB4YzYsMHg5NSwweGZiLAotKwkweDU0LDB4MDEsMHg2MiwweGQ3LDB4ODcsMHgx NCwweDQ4LDB4NmQsMHg5MCwweDRjLDB4YTksMHgwMiwKLSsJMHg1NCwweDQwLDB4MjIsMHhjOCww eDY2LDB4YTUsMHg0OCwweDQ4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4 MiwweGM0LDB4YTEsMHg5YywweDIxLDB4ZDIsMHhlNywweGE1LDB4YTYsMHhmNiwweDVmLDB4MDQs Ci0rCTB4NWMsMHhjNywweDMxLDB4OWQsMHg4ZCwweDU5LDB4NzQsMHg1MCwweDE5LDB4ODksMHgy ZiwweDYzLAotKwkweGQ1LDB4YjcsMHg3ZSwweGViLDB4MTUsMHhlMywweDcwLDB4ODMsMHhhMSww eDI0LDB4NTksMHhmYSwKLSsJMHgyYywweDU2LDB4ZjYsMHg4OCwweDNhLDB4OTIsMHg5MywweGEx LDB4ZmIsMHg3OSwweGMxLDB4N2EKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0r CTB4MzksMHhhNiwweGU4LDB4NWMsMHg4MiwweDE3LDB4NzEsMHgyNiwweDU3LDB4NGYsMHg5Ziww eGMyLAotKwkweDU1LDB4ZmYsMHg1YywweDliLDB4NTMsMHgxYSwweGQxLDB4NWYsMHhiYywweDYy LDB4ZTQsMHgyNywKLSsJMHgyZCwweDMyLDB4ZjAsMHhlNCwweDUyLDB4OGMsMHhjNSwweDBjCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDhkLDB4Y2IsMHg4ZCwweGNl LDB4MDgsMHhlYSwweDgwLDB4ZTgsMHg5YiwweDYxLDB4YTgsMHgwZiwKLSsJMHhhZiwweDQ5LDB4 MjAsMHg5ZSwweDc0LDB4Y2IsMHg1NywweDgwLDB4NDIsMHhiMCwweDg0LDB4NWUsCi0rCTB4MzAs MHgyYSwweDY3LDB4MDgsMHhmNCwweGUzLDB4NDAsMHgyMgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXQy W10gPQotKwl7Ci0rCTB4N2MsMHg4ZiwweGMyLDB4YWUsMHgyMiwweDRhLDB4ZDYsMHhmNiwweDA1 LDB4YTQsMHg3YSwweGVhLAotKwkweGJiLDB4MjUsMHhkMCwweGI3LDB4NWEsMHhkNiwweGNmLDB4 OWQsMHhmMywweDZjLDB4ZTIsMHhiMiwKLSsJMHg0ZSwweGI0LDB4YmQsMHhmNCwweGU1LDB4NDAs MHg4MCwweDk0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDllLDB4N2UsMHhmYiww eDU5LDB4YmIsMHhhYSwweDNjLDB4ZjcsMHhlMSwweGY4LDB4NzYsMHhkZCwKLSsJMHg2MywweDVm LDB4YWYsMHgyMywweGQ2LDB4NjQsMHg2MSwweGMwLDB4OWEsMHgwOSwweDQ3LDB4YzksCi0rCTB4 MzMsMHhkZiwweDZkLDB4NTUsMHg5MSwweDM0LDB4NzksMHg3MCwweGM0LDB4OTksMHg2ZSwweDU0 LAotKwkweDA5LDB4NjQsMHgyMSwweDFhLDB4YmQsMHgxZSwweDgwLDB4NDAsMHgzNCwweGFkLDB4 ZmEsMHhkNwotKwl9OwotKwotKwotKy8qIFNIQS01MTIgUFIgICovCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0K LSsJewotKwkweDEzLDB4ZjcsMHg2MSwweDc1LDB4NjUsMHgyOCwweGEyLDB4NTksMHgxMywweDVh LDB4NGEsMHg0ZiwKLSsJMHg1NiwweDYwLDB4OGMsMHg1MywweDdkLDB4YjAsMHhiZCwweDA2LDB4 NGYsMHhlZCwweGNjLDB4ZDIsCi0rCTB4YTIsMHhiNSwweGZkLDB4NWIsMHgzYSwweGFiLDB4ZWMs MHgyOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTUxMl9wcl9ub25jZVtdID0KLSsJewotKwkweGJlLDB4YTMsMHg5MSwweDkzLDB4MWQs MHhjMywweDMxLDB4M2EsMHgyMywweDMzLDB4NTAsMHg2NywKLSsJMHg4OCwweGM3LDB4YTIsMHhj NAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxZiwweDU5LDB4 NGQsMHg3YiwweGU2LDB4NDYsMHg5MSwweDQ4LDB4YzEsMHgyNSwweGZhLDB4ZmYsCi0rCTB4ODks MHgxMiwweDc3LDB4MzUsMHhkZiwweDNlLDB4ZjQsMHg4MCwweDVmLDB4ZDksMHhiMCwweDA3LAot KwkweDIyLDB4NDEsMHhkZCwweDQ4LDB4NzgsMHg2YiwweDc3LDB4MmIKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4MzAsMHhmZiwweDYzLDB4NmYsMHhhYywweGQ5LDB4ODQs MHgzOSwweDZmLDB4ZTQsMHg5OSwweGNlLAotKwkweDkxLDB4N2QsMHg3ZSwweGM4LDB4NTgsMHhm MiwweDEyLDB4YzMsMHhiNiwweGFkLDB4ZGEsMHgyMiwKLSsJMHgwNCwweGEwLDB4ZDIsMHgyMSww eGZlLDB4ZjIsMHg5NSwweDFkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4 NjQsMHg1NCwweDEzLDB4ZWMsMHg0ZiwweDc3LDB4ZGEsMHhiMiwweDkyLDB4MmUsMHg1MiwweDgw LAotKwkweDExLDB4MTAsMHhjMiwweGY4LDB4ZTYsMHhhNywweGNkLDB4NGIsMHhmYywweDMyLDB4 MmUsMHg5ZSwKLSsJMHhlYiwweGJiLDB4YjEsMHhiZiwweDE1LDB4NWMsMHg3MywweDA4Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlZiwweDFlLDB4ZGMsMHgwYSwweGE0 LDB4MzYsMHg5MSwweDljLDB4M2QsMHgyNywweDk3LDB4NTAsCi0rCTB4OGQsMHgzNiwweDI5LDB4 OGQsMHhjZSwweDZhLDB4MGMsMHhmNywweDIxLDB4YzAsMHg5MSwweGFlLAotKwkweDBjLDB4OTYs MHg3MiwweGJkLDB4NTIsMHg4MSwweDU4LDB4ZmMsMHg2ZCwweGU1LDB4ZjcsMHhhNSwKLSsJMHhm ZCwweDVkLDB4YTcsMHg1OCwweDY4LDB4YzgsMHg5OSwweDU4LDB4OGUsMHhjOCwweGNlLDB4OTUs Ci0rCTB4MDEsMHg3ZCwweGZmLDB4YTQsMHhjOCwweGY3LDB4NjMsMHhmZSwweDVmLDB4NjksMHg4 MywweDUzLAotKwkweGUyLDB4YzYsMHg4YiwweGMzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9Ci0rCXsKLSsJMHhlNiwweDliLDB4YzQsMHg4OCwweDM0LDB4Y2EsMHhlYSwweDI5LDB4MmYs MHg5OCwweDA1LDB4YTQsCi0rCTB4ZDMsMHhjMCwweDdiLDB4MTEsMHhlOCwweGJiLDB4NzUsMHhm MiwweGJkLDB4MjksMHhiNywweDQwLAotKwkweDI1LDB4N2YsMHhjMSwweGI3LDB4YjEsMHhmMSww eDI1LDB4NjEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4MjMsMHg2ZCww eGZmLDB4ZGUsMHhmYiwweGQxLDB4YmEsMHgzMywweDE4LDB4ZTYsMHhiZSwweGI1LAotKwkweDQ4 LDB4NzcsMHg2ZCwweDdmLDB4YTcsMHhlMSwweDRkLDB4NDgsMHgxZSwweDNjLDB4YTcsMHgzNCwK LSsJMHgxYSwweGM4LDB4NjAsMHhkYiwweDhmLDB4OTksMHgxNSwweDk5Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3JldHVy bmVkYml0c1tdID0KLSsJewotKwkweDcwLDB4MjcsMHgzMSwweGRiLDB4OTIsMHg3MCwweDIxLDB4 ZmUsMHgxNiwweGI2LDB4YzgsMHg1MSwKLSsJMHgzNCwweDg3LDB4NjUsMHhkMCwweDRlLDB4ZmQs MHhmZSwweDY4LDB4ZWMsMHhhYywweGRjLDB4OTMsCi0rCTB4NDEsMHgzOCwweDkyLDB4OTAsMHhi NCwweDk0LDB4ZjksMHgwZCwweGE0LDB4ZjcsMHg0ZSwweDgwLAotKwkweDkyLDB4NjcsMHg0OCww eDQwLDB4YTcsMHgwOCwweGM3LDB4YmMsMHg2NiwweDAwLDB4ZmQsMHhmNywKLSsJMHg0YywweDhi LDB4MTcsMHg2ZSwweGQxLDB4OGYsMHg5YiwweGYzLDB4NmYsMHhmNiwweDM0LDB4ZGQsCi0rCTB4 NjcsMHhmNywweDY4LDB4ZGQKLSsJfTsKLSsKLSsKLSsvKiBTSEEtNTEyIE5vIFBSICAqLwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5 aW5wdXRbXSA9Ci0rCXsKLSsJMHhiNiwweDBiLDB4YjcsMHhiYywweDg0LDB4NTYsMHhmNiwweDEy LDB4YWYsMHg0NSwweDY3LDB4MTcsCi0rCTB4N2MsMHhkMSwweGIyLDB4NzgsMHgyYiwweGEwLDB4 ZjIsMHhiZSwweGI2LDB4NmQsMHg4YiwweDU2LAotKwkweGM2LDB4YmMsMHg0ZCwweGUxLDB4Zjcs MHhiZSwweGNlLDB4YmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg5ZCwweGVkLDB4YzAsMHhl NSwweDVhLDB4OTgsMHg2YSwweGNiLDB4NTEsMHg3ZCwweDc2LDB4MzEsCi0rCTB4NWEsMHg2NCww eGYwLDB4ZjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YzIsMHg2 ZCwweGEzLDB4YzMsMHgwNiwweDc0LDB4ZTUsMHgwMSwweDVjLDB4MTAsMHgxNywweGM3LAotKwkw eGFmLDB4ODMsMHg5ZCwweDU5LDB4OGQsMHgyZCwweDI5LDB4MzgsMHhjNSwweDU5LDB4NzAsMHg4 YiwKLSsJMHg0NiwweDQ4LDB4MmQsMHhjZiwweDM2LDB4N2QsMHg1OSwweGMwCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0 aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGVjLDB4OGMsMHhkNCwweGY3LDB4NjEsMHg2ZSwweDBk LDB4OTUsMHg3OSwweGI3LDB4MjgsMHhhZCwKLSsJMHg1ZiwweDY5LDB4NzQsMHg1ZiwweDJkLDB4 MzYsMHgwNiwweDhhLDB4NmIsMHhhYywweDU0LDB4OTcsCi0rCTB4YzQsMHhhMSwweDEyLDB4ODUs MHgwYSwweGRmLDB4NGIsMHgzNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 ODQsMHgyZiwweDFmLDB4NjgsMHg2YSwweGEzLDB4YWQsMHgxZSwweGZiLDB4ZjQsMHgxNSwweGJk LAotKwkweGRlLDB4MzgsMHhkNCwweDMwLDB4ODAsMHg1MSwweGU5LDB4ZDMsMHhjNywweDIwLDB4 ODgsMHhlOSwKLSsJMHhmNSwweGNjLDB4ZGYsMHg1NywweDVjLDB4NDcsMHgyZiwweDU3LDB4M2Ms MHg1ZiwweDEzLDB4NTYsCi0rCTB4Y2MsMHhjNSwweDRmLDB4ODQsMHhmOCwweDEwLDB4NDEsMHhk NSwweDdlLDB4NTgsMHg2ZSwweDE5LAotKwkweDE5LDB4OWUsMHhhZiwweGMyLDB4MjIsMHg1OCww eDQxLDB4NTAsMHg3OSwweGMyLDB4ZDgsMHgwNCwKLSsJMHgyOCwweGQ0LDB4MzksMHg5YQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhmYSwweDdmLDB4NDYsMHg1MSwweDgz LDB4NjIsMHg5OCwweDE2LDB4OWEsMHgxOSwweGEyLDB4NDksCi0rCTB4YTksMHhlNiwweDRhLDB4 ZDgsMHg4NSwweGU3LDB4ZDQsMHgzYiwweDJjLDB4ODIsMHhjNSwweDgyLAotKwkweGJmLDB4MTEs MHhmOSwweDllLDB4YmMsMHhkMCwweDAxLDB4ZWUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQotKwl7Ci0rCTB4YjksMHgxMiwweGUwLDB4NGYsMHhmNywweGE3LDB4YzQsMHhkOCwweGQw LDB4OGUsMHg5OSwweDI5LAotKwkweDdjLDB4OWEsMHhlOSwweGNmLDB4YzQsMHg2YywweGY4LDB4 YzMsMHhhNywweDQxLDB4ODMsMHhkNiwKLSsJMHgyZSwweGZhLDB4YjgsMHg1ZSwweDhlLDB4NmIs MHg3OCwweDIwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhkNywweDA3LDB4 NTIsMHhiOSwweDgzLDB4MmMsMHgwMywweDcxLDB4ZWUsMHhjOSwweGMwLDB4ODUsCi0rCTB4ZTEs MHg1NywweGIyLDB4Y2QsMHgzYSwweGYwLDB4YzksMHgzNCwweDI0LDB4NDEsMHgxYywweDQyLAot KwkweDk5LDB4YjIsMHg4NCwweGU5LDB4MTcsMHhkMiwweDc2LDB4OTIKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4MzYsMHgxNywweDVkLDB4OTgsMHgyYiwweDY1LDB4MjUsMHg4ZSww eGM4LDB4MjksMHhkZiwweDI3LAotKwkweDA1LDB4MzYsMHgyNiwweDEyLDB4OGEsMHg2OCwweDc0 LDB4MjcsMHgzNywweGQ0LDB4N2YsMHgzMiwKLSsJMHhiMSwweDEyLDB4ZDYsMHg4NSwweDgzLDB4 ZWIsMHgyZSwweGEwLDB4ZWQsMHg0YiwweGI1LDB4N2IsCi0rCTB4NmYsMHgzOSwweDNjLDB4NzEs MHg3NywweDAyLDB4MTIsMHhjYywweDJjLDB4M2EsMHg4ZSwweDYzLAotKwkweGRmLDB4NGEsMHhi ZCwweDZmLDB4NmUsMHgyZSwweGVkLDB4MGEsMHg4NSwweGE1LDB4MmYsMHhhMiwKLSsJMHg2OCww eGRlLDB4NDIsMHhiNQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTEgUFIgICovCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJv cHlpbnB1dFtdID0KLSsJewotKwkweDI2LDB4NWYsMHgzNiwweDE0LDB4ZmYsMHgzZCwweDgzLDB4 ZmEsMHg3MywweDVlLDB4NzUsMHhkYywKLSsJMHgyYywweDE4LDB4MTcsMHgxYgotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9w cl9ub25jZVtdID0KLSsJewotKwkweGM4LDB4ZTMsMHg1NywweGE1LDB4N2IsMHg3NCwweDg2LDB4 NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NmUsMHhk YiwweDBkLDB4ZmUsMHg3ZCwweGFjLDB4NzksMHhkMCwweGE1LDB4M2EsMHg0OCwweDg1LAotKwkw eDgwLDB4ZTIsMHg3ZiwweDJhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweDMxLDB4Y2QsMHg1ZSwweDQzLDB4ZGMsMHhmYiwweDdhLDB4NzksMHhjYSwweDg4LDB4ZGUs MHgxZiwKLSsJMHhkNywweGJiLDB4NDIsMHgwOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltd ID0KLSsJewotKwkweDdjLDB4MjMsMHg5NSwweDM4LDB4MDAsMHg5NSwweGMxLDB4NzgsMHgxZiww eDhmLDB4ZDcsMHg2MywKLSsJMHgyMywweDg3LDB4MmEsMHhlZAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9pbnRfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YmIsMHgzNCwweGU3LDB4OTMsMHhhMywweDAyLDB4MmMs MHg0YSwweGQwLDB4ODksMHhkYSwweDdmLAotKwkweGVkLDB4ZjQsMHg0YywweGRlLDB4MTcsMHhl YywweGU1LDB4NmMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDQ5 LDB4YmMsMHgyZCwweDJjLDB4YjcsMHgzMiwweGNiLDB4MjAsMHhkZiwweGY1LDB4NzcsMHg1OCwK LSsJMHhhMCwweDRiLDB4OTMsMHg2ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0r CXsKLSsJMHgzYywweGFhLDB4YjAsMHgyMSwweDQyLDB4YjAsMHhkZCwweDM0LDB4ZjAsMHgxNiww eDdmLDB4MGMsCi0rCTB4MGYsMHhmZiwweDJlLDB4YWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4OGUsMHhjYiwweGEzLDB4NjQsMHhiMiwweGI4LDB4MzMsMHg2YywweDY0 LDB4M2IsMHg3OCwweDE2LAotKwkweDk5LDB4MzUsMHhjOCwweDMwLDB4Y2IsMHgzZSwweGEwLDB4 ZDgKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0xIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRbXSA9 Ci0rCXsKLSsJMHgzMiwweDlhLDB4MmEsMHg4NywweDdiLDB4ODksMHg3YywweGY2LDB4Y2IsMHg5 NSwweGQ1LDB4NDAsCi0rCTB4MTcsMHhmZSwweDQ3LDB4NzAKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfbm9uY2VbXSA9Ci0r CXsKLSsJMHgxNiwweGQ4LDB4ZTAsMHhjNywweDUyLDB4Y2YsMHg0YSwweDI1Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDM1LDB4MzUsMHhhOSwweGE1LDB4NDAs MHhiZSwweDliLDB4ZDEsMHg1NiwweGRkLDB4NDQsMHgwMCwKLSsJMHg3MiwweGY3LDB4ZDMsMHg1 ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgxYiwweDJjLDB4ODQsMHgy ZCwweDRhLDB4ODksMHg4ZiwweDY5LDB4MTksMHhmMSwweGYzLDB4ZGIsCi0rCTB4YmIsMHhlMyww eGFhLDB4ZWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGNmLDB4ZmEs MHg3ZCwweDcyLDB4MGYsMHhlNiwweGM3LDB4OTYsMHhhMCwweDY5LDB4MzEsMHgxMSwKLSsJMHg5 YiwweDBiLDB4MWEsMHgyMCwweDFmLDB4M2YsMHhhYSwweGQxCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1 dHJlc2VlZFtdID0KLSsJewotKwkweDkwLDB4NzUsMHgxNSwweDA0LDB4OTUsMHhmMSwweGJhLDB4 ODEsMHgwYywweDM3LDB4OTQsMHg2ZiwKLSsJMHg4NiwweDUyLDB4NmQsMHg5YwotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9h ZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg1YiwweDQwLDB4YmEsMHg1ZiwweDE3 LDB4NzAsMHhmMCwweDRiLDB4ZGYsMHhjOSwweDk3LDB4OTIsCi0rCTB4NzksMHhjNSwweDgyLDB4 MjgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDk3LDB4YzgsMHg4MCww eDkwLDB4YjMsMHhhYSwweDZlLDB4NjAsMHhlYSwweDgzLDB4N2EsMHhlMywKLSsJMHg4YSwweGNh LDB4YTQsMHg3ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg5MCwweGJkLDB4 MDUsMHg1NiwweDZkLDB4YjUsMHgyMiwweGQ1LDB4YjksMHg1YSwweDI5LDB4MmQsCi0rCTB4ZTks MHgwYiwweGUxLDB4YWMsMHhkZSwweDI3LDB4MGIsMHhiMAotKwl9OwotKwotKwotKy8qIEhNQUMg U0hBLTIyNCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxNywweDMyLDB4 MmIsMHgyZSwweDZmLDB4MWIsMHg5YywweDZkLDB4MzEsMHhlMCwweDM0LDB4MDcsCi0rCTB4Y2Ys MHhlZCwweGY2LDB4YjYsMHg1YSwweDc2LDB4NGMsMHhiYywweDYyLDB4ODUsMHgwMSwweDkwCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHgzOCwweGJmLDB4NWYsMHgyMCwweGIzLDB4 NjgsMHgyZiwweDQzLDB4NjEsMHgwNSwweDhmLDB4MjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhjMCwweGM5LDB4NDUsMHhhYywweDhkLDB4MjcsMHg3 NywweDA4LDB4MGIsMHgxNywweDZkLDB4ZWQsCi0rCTB4YzEsMHg3ZCwweGQ1LDB4MDcsMHg5ZCww eDZlLDB4ZjgsMHgyMywweDJhLDB4MjIsMHgxMywweGJkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4YTQsMHgzYywweGU3LDB4M2IsMHhlYSwweDE5LDB4NDUsMHgz MiwweGMyLDB4ODMsMHg2ZCwweDIxLAotKwkweDhhLDB4YzAsMHhlZSwweDY3LDB4NDUsMHhkZSww eDEzLDB4N2QsMHg5ZCwweDYxLDB4MDAsMHgzYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHBy W10gPQotKwl7Ci0rCTB4MTUsMHgwNSwweDc0LDB4NGEsMHg3ZiwweDhkLDB4NWMsMHg2MCwweDE2 LDB4ZTUsMHg3YiwweGFkLAotKwkweGY1LDB4NDEsMHg4ZiwweDU1LDB4NjAsMHhjNCwweDA5LDB4 ZWUsMHgxZSwweDExLDB4ODEsMHhhYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHg2ZiwweGY1LDB4OWEsMHhlMiwweDU0LDB4NTMsMHgzMCwweDNkLDB4NWEsMHgy NywweDI5LDB4MzgsCi0rCTB4MjcsMHhmMiwweDBkLDB4MDUsMHhlOSwweDI2LDB4Y2IsMHgxNiww eGMzLDB4NTEsMHg1ZiwweDEzLAotKwkweDQxLDB4ZmUsMHg5OSwweGYyCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJf YWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDczLDB4ODEsMHg4OCwweDg0LDB4OGYsMHhl ZCwweDZmLDB4MTAsMHg5ZiwweDkzLDB4YmYsMHgxNywKLSsJMHgzNSwweDdjLDB4ZWYsMHhkNSww eDhkLDB4MjYsMHhhNiwweDdhLDB4ZTgsMHgwOSwweDM2LDB4NGYKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhlNiwweGNmLDB4Y2YsMHg3ZSwweDEyLDB4ZTUsMHg0 MywweGQyLDB4MzgsMHhkOCwweDI0LDB4NmYsCi0rCTB4NWEsMHgzNywweDY4LDB4YmYsMHg0Ziww eGEwLDB4ZmYsMHhkNSwweDYxLDB4OGEsMHg5MywweGUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4YWYsMHhmOSwweGQ4LDB4MTksMHg5MSwweDMwLDB4ODIsMHg2Ziww eGE5LDB4MWUsMHg5ZCwweGQ3LAotKwkweGYzLDB4NTAsMHhlMCwweGM3LDB4ZDUsMHg2NCwweDk2 LDB4N2QsMHg0YywweDRkLDB4NzgsMHgwMywKLSsJMHg2ZCwweGQ4LDB4OWUsMHg3MgotKwl9Owot KwotKwotKy8qIEhNQUMgU0hBLTIyNCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsK LSsJMHgxMSwweDgyLDB4ZmQsMHhkOSwweDQyLDB4ZjQsMHhmYSwweGM4LDB4ZjIsMHg0MSwweGU2 LDB4NTQsCi0rCTB4MDEsMHhhZSwweDIyLDB4NmUsMHhjNiwweGFmLDB4YWYsMHhkMCwweGE2LDB4 YjIsMHhlMiwweDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhOSwweDQ4LDB4ZDcs MHg5MiwweDM5LDB4N2UsMHgyYSwweGRjLDB4MzAsMHgxZiwweDBlLDB4MmIKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxMSwweGQ1LDB4ZjQsMHhiZCwweDY3 LDB4OGMsMHgzMSwweGNmLDB4YTMsMHgzZiwweDFlLDB4NmIsCi0rCTB4YTgsMHgwNywweDAyLDB4 MGIsMHhjOCwweDJlLDB4NmMsMHg2NCwweDQxLDB4NWIsMHhjOCwweDM3Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRk aXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4NjgsMHgxOCwweGMyLDB4MDYsMHhlYiwweDNlLDB4 MDQsMHg5NSwweDQ0LDB4NWUsMHhmYiwweGU2LAotKwkweDQxLDB4YzEsMHg1YywweGNjLDB4NDAs MHgyZiwweGI3LDB4ZDIsMHgwZiwweGYzLDB4NmIsMHhlNwotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2ludF9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHg3ZiwweDQ1LDB4YzcsMHg1ZCwweDMyLDB4ZTYsMHgxNywweDYw LDB4YmEsMHhkYywweGI4LDB4NDIsCi0rCTB4MWIsMHg5YywweGYxLDB4ZmEsMHgzYiwweDRkLDB4 MjksMHg1NCwweGM2LDB4OTAsMHhmZiwweDVjLAotKwkweGNkLDB4ZDYsMHhhOSwweGNjCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4YzQsMHg4ZSwweDM3LDB4OTUs MHg2OSwweDUzLDB4MjgsMHhkNywweDM3LDB4YmIsMHg3MCwweDk1LAotKwkweDFjLDB4MDcsMHgx ZCwweGQ5LDB4YjcsMHhlNiwweDFiLDB4YmIsMHhmZSwweDQxLDB4ZWIsMHhjOQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDUzLDB4MTcsMHhhMSwweDZhLDB4 ZmEsMHg3NywweDQ3LDB4YjAsMHg5NSwweDU2LDB4OWEsMHgyMCwKLSsJMHg1NywweGRlLDB4NWMs MHg4OSwweDlmLDB4N2YsMHhlMiwweGRlLDB4MTcsMHgzYSwweDUwLDB4MjMKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4M2EsMHgzMiwweGY5LDB4ODUsMHgwYywweGMx LDB4ZWQsMHg3NiwweDJkLDB4ZGYsMHg0MCwweGMzLAotKwkweDA2LDB4MjIsMHg2NiwweGQ0LDB4 OWEsMHg5YSwweGZmLDB4NWEsMHg3ZSwweDdhLDB4ZjMsMHg5NgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweDQzLDB4YjQsMHg1NywweDVjLDB4MzgsMHgyNSwweDlkLDB4YWUs MHhlYywweDk2LDB4ZDEsMHg4NSwKLSsJMHgzYSwweDg0LDB4OGQsMHhmZSwweDY4LDB4ZDUsMHgw ZSwweDVjLDB4OGYsMHg2NSwweGE1LDB4NGUsCi0rCTB4NDUsMHg4NCwweGE4LDB4OTQKLSsJfTsK LSsKLSsKLSsvKiBITUFDIFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4NGQsMHhiMCwweDQzLDB4ZDgsMHgzNCwweDRiLDB4MTAsMHg3MCwweGIxLDB4OGIsMHhl ZCwweGVhLAotKwkweDA3LDB4OTIsMHg5ZiwweDZjLDB4NzksMHgzMSwweGFmLDB4ODEsMHgyOSww eGViLDB4NmUsMHhjYSwKLSsJMHgzMiwweDQ4LDB4MjgsMHhlNywweDAyLDB4NWQsMHhhNiwweGE2 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyNTZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHgzYSwweGFlLDB4MTUsMHhhOSwweDk5 LDB4ZGMsMHhlNCwweDY3LDB4MzQsMHgzYiwweDcwLDB4MTUsCi0rCTB4YWEsMHhkMywweDMwLDB4 OWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxMyww eDFkLDB4MjQsMHgwNCwweGIwLDB4MTgsMHg4MSwweDE1LDB4MjEsMHg1MSwweDJhLDB4MjQsCi0r CTB4NTIsMHg2MSwweGJlLDB4NjQsMHg4MiwweDZiLDB4NTUsMHgyZiwweGUyLDB4ZjEsMHg0MCww eDdkLAotKwkweDcxLDB4ZDgsMHgwMSwweDg2LDB4MTUsMHhiNywweDhiLDB4YjUKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg4ZiwweGE2LDB4NTQsMHg1ZiwweGIx LDB4ZDAsMHhkOCwweGMzLDB4ZTcsMHgwYywweDE1LDB4YTksCi0rCTB4MjMsMHg2ZSwweGZlLDB4 ZmIsMHg5MywweGY3LDB4M2EsMHhiZCwweDU5LDB4MDEsMHhmYSwweDE4LAotKwkweDhlLDB4ZTks MHgxYSwweGE5LDB4NzgsMHhmYywweDc5LDB4MGIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRw cltdID0KLSsJewotKwkweGNmLDB4MjQsMHhiOSwweGViLDB4YjMsMHhkNCwweGNkLDB4MTcsMHgz NywweDM4LDB4NzUsMHg3OSwKLSsJMHgxNSwweGNiLDB4MmQsMHg3NSwweDUxLDB4ZjEsMHhjYyww eGFhLDB4MzIsMHhhNCwweGE3LDB4MzYsCi0rCTB4N2MsMHg1YywweGU0LDB4NDcsMHhmMSwweDNl LDB4MWQsMHhlNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg1 MiwweDQyLDB4ZmEsMHhlYiwweDg1LDB4ZTAsMHgzMCwweDIyLDB4NzksMHgwMCwweDE2LDB4YjIs Ci0rCTB4ODgsMHgyZiwweDE0LDB4NmEsMHhiNywweGZjLDB4YjcsMHg1MywweGRjLDB4NGEsMHgx MiwweGVmLAotKwkweDU0LDB4ZDYsMHgzMywweGU5LDB4MjAsMHhkNiwweGZkLDB4NTYKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ZjQsMHhmNiwweDQ5LDB4YTEs MHgyZCwweDY0LDB4MmIsMHgzMCwweDU4LDB4ZjgsMHhiZCwweGI4LAotKwkweDc1LDB4ZWIsMHhi YiwweDVlLDB4MWMsMHg5YiwweDgxLDB4NmEsMHhkYSwweDE0LDB4ODYsMHg2ZSwKLSsJMHhkMCww eGRhLDB4MTgsMHhiNywweDg4LDB4ZmIsMHg1OSwweGYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlu cHV0cHIyW10gPQotKwl7Ci0rCTB4MjEsMHhjZCwweDZlLDB4NDYsMHhhZCwweDk5LDB4MDcsMHgx NywweGI0LDB4M2QsMHg3NiwweDBhLAotKwkweGZmLDB4NWIsMHg1MiwweDUwLDB4NzgsMHhkZiww eDFmLDB4MjQsMHgwNiwweDBkLDB4M2YsMHg3NCwKLSsJMHhhOSwweGM5LDB4MzcsMHhjZiwweGQ4 LDB4MjYsMHgyNSwweDkxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 YTcsMHhhZiwweDJmLDB4MjksMHhlMCwweDNhLDB4NzIsMHg5NSwweDk2LDB4MWMsMHhhOSwweGYw LAotKwkweDRhLDB4MTcsMHg0ZCwweDY2LDB4MDYsMHgxMCwweGJmLDB4MzksMHg4OSwweDg4LDB4 YjgsMHg5MSwKLSsJMHgzNywweDE4LDB4OTksMHhjZiwweDhjLDB4NTMsMHgzYiwweDdlCi0rCX07 Ci0rCi0rCi0rLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KLSsJ ewotKwkweDk2LDB4YjcsMHg1MywweDIyLDB4MWUsMHg1MiwweDJhLDB4OTYsMHhiMSwweDE1LDB4 M2MsMHgzNSwKLSsJMHg1YSwweDhiLDB4ZDMsMHg0YSwweGE2LDB4NmMsMHg4MywweDBhLDB4N2Qs MHhhMywweDIzLDB4M2QsCi0rCTB4NDMsMHhhMSwweDA3LDB4MmMsMHgyZCwweGUzLDB4ODEsMHhj YwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X25vbmNlW10gPQotKwl7Ci0rCTB4ZjEsMHhhYywweDk3LDB4Y2IsMHg1ZSww eDA2LDB4NDgsMHhkMiwweDk0LDB4YmUsMHgxNSwweDJlLAotKwkweGM3LDB4ZmMsMHhjMiwweDAx Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OTgsMHhjNSww eDFlLDB4MzUsMHg1ZSwweDg5LDB4MGQsMHhjZSwweDY0LDB4NmQsMHgxOCwweGE3LAotKwkweDVh LDB4YzYsMHhmMywweGU3LDB4ZDYsMHg5ZSwweGMwLDB4ZWEsMHhiNywweDNhLDB4OGQsMHg2NSwK LSsJMHhiOCwweGViLDB4MTAsMHhkNywweDU3LDB4MTgsMHhhMCwweDMyCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRk aXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4MWIsMHgxMCwweGFmLDB4YWMsMHhkMCwweDY1LDB4 OTUsMHhhZCwweDA0LDB4YWQsMHgwMywweDFjLAotKwkweGUwLDB4NDAsMHhkNiwweDNlLDB4MWMs MHg0NiwweDUzLDB4MzksMHg3YywweGUyLDB4YmMsMHhkYSwKLSsJMHg4YywweGEyLDB4MzMsMHhh NywweDlhLDB4MjYsMHhkMywweDI3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweGJhLDB4NjEsMHgwZSwweDU1LDB4ZmUsMHgxMSwweDhhLDB4OWUsMHgwZiwweDgwLDB4 ZGYsMHgxZCwKLSsJMHgwMywweDBhLDB4ZmUsMHgxNSwweDk0LDB4MjgsMHg0YiwweGJhLDB4ZjQs MHg5ZiwweDUxLDB4MjUsCi0rCTB4ODgsMHhlNSwweDRlLDB4ZmIsMHhhZiwweGNlLDB4NjksMHg5 MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDYyLDB4N2YsMHgx ZSwweDZiLDB4ZTgsMHg4ZSwweGUxLDB4MzUsMHg3ZCwweDliLDB4NGYsMHhjNywKLSsJMHhlYyww eGM4LDB4YWMsMHhlZiwweDZiLDB4MTMsMHg5ZSwweDA1LDB4NTYsMHhjMSwweDA4LDB4ZjksCi0r CTB4MmYsMHgwZiwweDI3LDB4OWMsMHhkNCwweDE1LDB4ZWQsMHgyZAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGM3LDB4NzYsMHg2ZSwweGE5LDB4ZDIsMHhi MiwweDc2LDB4NDAsMHg4MiwweDI1LDB4MmMsMHhiMywKLSsJMHg2ZiwweGFjLDB4ZTksMHg3NCww eGVmLDB4OGYsMHgzYywweDhlLDB4Y2QsMHhmMSwweGJmLDB4YjMsCi0rCTB4NDksMHg3NywweDM0 LDB4ODgsMHg1MiwweDM2LDB4ZTYsMHgyZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9 Ci0rCXsKLSsJMHg4ZCwweGI4LDB4MGMsMHhkMSwweGJmLDB4NzAsMHhmNiwweDE5LDB4YzMsMHg0 MSwweDgwLDB4OWYsCi0rCTB4ZTEsMHhhNSwweGE0LDB4MWYsMHgyYywweDI2LDB4YjEsMHhlNSww eGQ4LDB4ZWIsMHhiZSwweGY4LAotKwkweGRmLDB4ODgsMHg2YSwweDg5LDB4ZDYsMHgwNSwweGQ4 LDB4OWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0MywweDEyLDB4MmEs MHgyYywweDQwLDB4NTMsMHgyZSwweDdjLDB4NjYsMHgzNCwweGFjLDB4YzMsCi0rCTB4NDMsMHhl MywweGUwLDB4NmEsMHhmYywweGZhLDB4ZWEsMHg4NywweDIxLDB4MWYsMHhlMiwweDI2LAotKwkw eGM0LDB4ZjksMHgwOSwweDlhLDB4MGQsMHg2ZSwweDdmLDB4ZTAKLSsJfTsKLSsKLSsKLSsvKiBI TUFDIFNIQS0zODQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NjksMHg4 MSwweDk4LDB4ODgsMHg0NCwweGY1LDB4ZDYsMHgyZSwweDAwLDB4MDgsMHgzYiwweGM1LAotKwkw eGZiLDB4ZDcsMHg4ZSwweDZmLDB4MjMsMHhmOCwweDZkLDB4MDksMHhkNiwweDg1LDB4NDksMHhk MSwKLSsJMHhmOCwweDZkLDB4YTQsMHg1OCwweDU0LDB4ZmQsMHg4OCwweGE5Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg2ZSwweDM4LDB4ODEsMHhjYSwweGI3LDB4ZTgsMHg2ZSww eDY2LDB4NDksMHg4YSwweGIyLDB4NTksCi0rCTB4ZWUsMHgxNiwweGM5LDB4ZGUKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhmZSwweDRjLDB4ZDksMHhm NCwweDc4LDB4M2IsMHgwOCwweDQxLDB4OGQsMHg4ZiwweDU1LDB4YzQsCi0rCTB4NDMsMHg1Niww eGI2LDB4MTIsMHgzNiwweDZiLDB4MzAsMHhiNywweDVlLDB4ZTEsMHhiOSwweDQ3LAotKwkweDA0 LDB4YjEsMHg0ZSwweGE5LDB4MDAsMHhhMSwweDUyLDB4YTEKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlv bmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg4OSwweGU5LDB4Y2MsMHg4ZiwweDI3LDB4M2MsMHgyNiww eGQxLDB4OTUsMHhjOCwweDdkLDB4MGYsCi0rCTB4NWIsMHgxYSwweGYwLDB4NzgsMHgzOSwweDU2 LDB4NmYsMHhhNCwweDIzLDB4ZTcsMHhkMSwweGRhLAotKwkweDdjLDB4NjYsMHgzMywweGEwLDB4 OTAsMHhjOSwweDkyLDB4ODgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewot KwkweGJlLDB4M2QsMHg3YywweDBkLDB4Y2EsMHhkYSwweDdjLDB4NDksMHhiOCwweDEyLDB4MzYs MHhjMCwKLSsJMHhkYiwweGFkLDB4MzUsMHhhOCwweGM3LDB4MGIsMHgyYSwweDJjLDB4NjksMHg2 ZCwweDI1LDB4NTYsCi0rCTB4NjMsMHg4MiwweDExLDB4M2UsMHhhNywweDMzLDB4NzAsMHg3Mgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4MiwweDNkLDB4ZTYs MHg1NCwweDgwLDB4NDIsMHhmOCwweGJhLDB4OTAsMHg0ZiwweDA2LDB4YTYsCi0rCTB4ZDIsMHg3 ZiwweGJmLDB4NzksMHg3YywweDEyLDB4N2QsMHhhNiwweGEyLDB4NjYsMHhlOCwweGE2LAotKwkw eGMwLDB4ZDYsMHg0YSwweDU1LDB4YmYsMHhkOCwweDBhLDB4YzUsMHhmOCwweDAzLDB4ODgsMHhk ZCwKLSsJMHg4ZSwweDg3LDB4ZDEsMHg1YSwweDQ4LDB4MjYsMHg3MiwweDJhLDB4OGUsMHhjZiww eGVlLDB4YmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OGYs MHhmZiwweGQ5LDB4ODQsMHhiYiwweDg1LDB4M2EsMHg2NiwweGExLDB4MjEsMHhjZSwweGIyLAot KwkweDNhLDB4M2EsMHgxNywweDIyLDB4MTksMHhhZSwweGM3LDB4YjYsMHg2MywweDgxLDB4ZDUs MHhmZiwKLSsJMHgwZCwweGM4LDB4ZTEsMHhhZiwweDU3LDB4ZDIsMHhjYiwweDYwCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4ZDcsMHhmYiwweGM5LDB4ZTgsMHhl MiwweGYyLDB4YWEsMHg0YywweGI4LDB4NTEsMHgyZiwweGUxLAotKwkweDIyLDB4YmEsMHhmMyww eGRhLDB4MGEsMHgxOSwweDc2LDB4NzEsMHg1NywweGIyLDB4MWQsMHg5NCwKLSsJMHgwOSwweDY5 LDB4NmMsMHhkMywweDk3LDB4NTEsMHg4MSwweDg3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4ZTYsMHgxOSwweDI4LDB4YTgsMHgyMSwweGNlLDB4NWUsMHhkYiwweDI0 LDB4NzksMHg4YywweDc2LAotKwkweDVkLDB4NzMsMHhiMiwweGRmLDB4YWMsMHhlZiwweDg1LDB4 YTcsMHgzYiwweDE5LDB4MDksMHg4YiwKLSsJMHg3ZiwweDk4LDB4MjgsMHhhOSwweDkzLDB4ZDgs MHg3YSwweGFkLDB4NTUsMHg4YiwweDI0LDB4OWQsCi0rCTB4ZTYsMHg5OCwweGZlLDB4NDcsMHhk NSwweDQ4LDB4YzEsMHgyMywweGQ4LDB4MWQsMHg2MiwweDc1Ci0rCX07Ci0rCi0rCi0rLyogSE1B QyBTSEEtMzg0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGMzLDB4NTYs MHgyYiwweDFkLDB4YzIsMHhiYiwweGE4LDB4ZjAsMHhhZSwweDFiLDB4MGQsMHhkMywKLSsJMHg1 YSwweDZjLDB4ZGEsMHg1NywweDhlLDB4YTUsMHg4YSwweDBkLDB4NmMsMHg0YiwweDE4LDB4YjEs Ci0rCTB4MDQsMHgzZSwweGI0LDB4OTksMHgzNSwweGM0LDB4YzAsMHg1ZgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X25v bmNlW10gPQotKwl7Ci0rCTB4YzUsMHg0OSwweDFlLDB4NjYsMHgyNywweDkyLDB4YmUsMHhlYyww eGI1LDB4MWUsMHg0YiwweGIxLAotKwkweDM4LDB4ZTMsMHhlYiwweDYyCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YmUsMHhlNywweDZiLDB4NTcsMHhkZSww eDg4LDB4MTEsMHg5NiwweDliLDB4NmUsMHhlYSwweGU1LAotKwkweDYzLDB4ODMsMHg0YywweGI2 LDB4OGQsMHg2NiwweGFhLDB4MWYsMHg4YiwweDU0LDB4ZTcsMHg2MiwKLSsJMHg2ZCwweDVhLDB4 ZmMsMHhiZiwweDk3LDB4YmEsMHhjZCwweDc3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0W10g PQotKwl7Ci0rCTB4ZTUsMHgyOCwweDVmLDB4NDMsMHhmNSwweDgzLDB4NmUsMHgwYSwweDgzLDB4 NWMsMHhlMywweDgxLAotKwkweDAzLDB4ZjIsMHhmOCwweDc4LDB4MDAsMHg3YywweDk1LDB4ODcs MHgxNiwweGQ2LDB4NmMsMHg1OCwKLSsJMHgzMywweDZjLDB4NTMsMHgzNSwweDBkLDB4NjYsMHhl MywweGNlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUyLDB4MWYs MHhmMywweGRhLDB4MGQsMHgxOSwweDk5LDB4ODcsMHhjNCwweDkwLDB4YTIsMHgzMSwKLSsJMHhj YSwweDJhLDB4ODksMHg1OCwweDQzLDB4NDQsMHhiOCwweGRlLDB4Y2YsMHhhNCwweGJlLDB4M2Is Ci0rCTB4NTMsMHgyNiwweDIyLDB4MzEsMHg3NiwweDQxLDB4MjIsMHhiNSwweGE4LDB4NzAsMHgy ZiwweDRiLAotKwkweDY0LDB4OTUsMHg0ZCwweDQ4LDB4OTYsMHgzNSwweGU2LDB4YmQsMHgzYyww eDM0LDB4ZGIsMHgxYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkw eDc3LDB4NjEsMHhiYSwweGJjLDB4ZjIsMHhjMSwweGYzLDB4NGIsMHg4NiwweDY1LDB4ZmQsMHg0 OCwKLSsJMHgwZSwweDNjLDB4MDIsMHg1ZSwweGEyLDB4N2EsMHg2YiwweDdjLDB4ZWQsMHgyMSww eDVlLDB4ZjksCi0rCTB4Y2QsMHhjZCwweDc3LDB4MDcsMHgyYiwweGJlLDB4YzUsMHg1YwotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMzg0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDE4LDB4MjQsMHg1Ziww eGM2LDB4ODQsMHhkMSwweDY3LDB4YzMsMHg5YSwweDExLDB4YTUsMHg4YywKLSsJMHgwNywweDM5 LDB4MjEsMHg4MywweDRkLDB4MDQsMHhjNCwweDZhLDB4MjgsMHgxOSwweGNmLDB4OTIsCi0rCTB4 MjEsMHhkOSwweDllLDB4NDEsMHg3MiwweDZjLDB4OWUsMHg2MwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg5NiwweDY3LDB4NDEsMHgyOCwweDliLDB4YjcsMHg5Miww eDhkLDB4NjQsMHgzYiwweGU0LDB4Y2YsCi0rCTB4N2UsMHhhYSwweDFlLDB4YjEsMHg0YiwweDFk LDB4MDksMHg1NiwweDY3LDB4OWMsMHhjNiwweDZkLAotKwkweDNiLDB4ZTgsMHg5MSwweDlkLDB4 ZTEsMHg4YSwweGI3LDB4MzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhl MywweDU5LDB4NjEsMHgzOCwweDkyLDB4ZWMsMHhlMiwweDNjLDB4ZmYsMHhiNywweGRiLDB4MTks Ci0rCTB4MGYsMHg1YiwweDkzLDB4NjgsMHgwZCwweGE0LDB4OTQsMHg0MCwweDcyLDB4MGIsMHhl MCwweGVkLAotKwkweDRkLDB4Y2QsMHg2OCwweGEwLDB4MWUsMHhmZSwweDY3LDB4YjIsMHhmYSww eDIxLDB4NTYsMHg3NCwKLSsJMHhhNCwweGFkLDB4Y2YsMHhiNywweDYwLDB4NjYsMHgyZSwweDQw LDB4ZGUsMHg4MiwweGNhLDB4ZmIKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS01MTIgUFIgICov Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YWEsMHg5ZSwweDQ1LDB4NjcsMHgwZSww eDAwLDB4MmEsMHg2NywweDk4LDB4ZDYsMHhkYSwweDBiLAotKwkweDBmLDB4MTcsMHg3ZSwweGFj LDB4ZmQsMHgyNywweGM0LDB4Y2EsMHg4NCwweGRmLDB4ZGUsMHhiYSwKLSsJMHg4NSwweGQ5LDB4 YmUsMHg4ZiwweGYzLDB4ZmYsMHg5MSwweDRkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfbm9uY2VbXSA9Ci0rCXsK LSsJMHg4YywweDQ5LDB4MmYsMHg1OCwweDFlLDB4N2EsMHhkYSwweDRiLDB4N2UsMHg4YSwweDMw LDB4N2IsCi0rCTB4ODYsMHhlYSwweGFmLDB4YTIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg3MSwweGUxLDB4YmIsMHhhZCwweGE3LDB4NGIsMHgyZSww eDMxLDB4M2IsMHgwYiwweGVjLDB4MjQsCi0rCTB4OTksMHgzOCwweGJjLDB4YWEsMHgwNSwweDRj LDB4NDYsMHg0NCwweGZhLDB4YWQsMHg4ZSwweDAyLAotKwkweGMxLDB4N2UsMHhhZCwweGVjLDB4 NTQsMHhhNiwweGQwLDB4YWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsK LSsJMHgzZCwweDZlLDB4YTYsMHhhOCwweDI5LDB4MmEsMHhiMiwweGY1LDB4OTgsMHg0MiwweGU0 LDB4OTIsCi0rCTB4NzgsMHgyMiwweDY3LDB4ZmQsMHgxYiwweDE1LDB4MWUsMHgyOSwweGFhLDB4 NzEsMHgzYywweDNjLAotKwkweGU3LDB4MDUsMHgyMCwweGE5LDB4MjksMHhjNiwweDc1LDB4NzEK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGFiLDB4YjksMHgxNiww eGQ4LDB4NTUsMHgzNSwweDU0LDB4YjcsMHg5NywweDNmLDB4OTQsMHhiYywKLSsJMHgyZiwweDdj LDB4NzAsMHhjNywweGQwLDB4ZWQsMHhiNywweDRiLDB4ZjcsMHhmNiwweDZjLDB4MDMsCi0rCTB4 MGMsMHhiMCwweDAzLDB4ZDgsMHhiYiwweDcxLDB4ZDksMHgxMAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4ZSwweGQzLDB4ZmQsMHg1MiwweDllLDB4ODMsMHgw OCwweDQ5LDB4MTgsMHg2ZSwweDIzLDB4NTYsCi0rCTB4NWMsMHg0NSwweDkzLDB4MzQsMHgwNSww eGUyLDB4OTgsMHg4ZiwweDBjLDB4ZDQsMHgzMiwweDBjLAotKwkweGZkLDB4ZGEsMHg1ZiwweDky LDB4M2EsMHg4YywweDgxLDB4YmQsMHhmNiwweDZjLDB4NTUsMHhmZCwKLSsJMHhiOCwweDIwLDB4 Y2UsMHg4ZCwweDk3LDB4MjcsMHhlOCwweGU4LDB4ZTAsMHhiMywweDg1LDB4NTAsCi0rCTB4YTIs MHhjMiwweGIyLDB4OTUsMHgxZCwweDQ4LDB4ZDMsMHg3YiwweDRiLDB4NzgsMHgxMywweDM1LAot KwkweDA1LDB4MTcsMHhiZSwweDBkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0K LSsJewotKwkweGMzLDB4ZmMsMHg5NSwweGFhLDB4NjksMHgwNiwweGFlLDB4NTksMHg0MSwweGNl LDB4MjYsMHgwOCwKLSsJMHgyOSwweDZkLDB4NDUsMHhkYSwweGU4LDB4YjMsMHg2YywweDk1LDB4 NjAsMHgwZiwweDcwLDB4MmMsCi0rCTB4MTAsMHhiYSwweDM4LDB4OGMsMHhjZiwweDI5LDB4OTks MHhhYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDNiLDB4OWEs MHgyNSwweGNlLDB4ZDcsMHhmOSwweDVjLDB4ZDEsMHgzYSwweDNlLDB4YWEsMHg3MSwKLSsJMHgx NCwweDNlLDB4MTksMHhlOCwweGNlLDB4ZTYsMHhmZSwweDUxLDB4ODQsMHhlOSwweDFiLDB4ZmUs Ci0rCTB4M2YsMHhhNywweGYyLDB4ZmQsMHg3NiwweDVmLDB4NmEsMHhlNwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3By X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGI3LDB4ODIsMHhhOSwweDU3LDB4ODEsMHg2Nyww eDUzLDB4YjUsMHhhMSwweGU5LDB4M2QsMHgzNSwKLSsJMHhmOSwweGU0LDB4OTcsMHhiZSwweGE2 LDB4Y2EsMHhmMSwweDAxLDB4MTMsMHgwOSwweGU3LDB4MjEsCi0rCTB4YzAsMHhlZCwweDkzLDB4 NWQsMHg0YiwweGY0LDB4ZWIsMHg4ZCwweDUzLDB4MjUsMHg4YSwweGM0LAotKwkweGIxLDB4NmYs MHg2ZSwweDM3LDB4Y2QsMHgyZSwweGFjLDB4MzksMHhiMiwweGI2LDB4OTksMHhhMywKLSsJMHg4 MiwweDAwLDB4YjAsMHgyMSwweGYwLDB4YzcsMHgyZiwweDRjLDB4NzMsMHg5MiwweGZkLDB4MDAs Ci0rCTB4YjYsMHhhZiwweGJjLDB4ZDMKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS01MTIgTm8g UFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NmUsMHg4NSwweGU2LDB4MjUsMHg5 NiwweDI5LDB4YTcsMHg1MiwweDViLDB4NjAsMHhiYSwweGFhLAotKwkweGRlLDB4ZGIsMHgzNiww eDBhLDB4NTEsMHg5YSwweDE1LDB4YWUsMHg2ZSwweDE4LDB4ZDMsMHhmZSwKLSsJMHgzOSwweGI5 LDB4NGEsMHg5NiwweGY4LDB4NzcsMHhjYiwweDk1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfbm9uY2VbXSA9Ci0rCXsK LSsJMHhlMCwweGE2LDB4NWQsMHgwOCwweGMzLDB4N2MsMHhhZSwweDI1LDB4MmUsMHg4MCwweGQx LDB4M2UsCi0rCTB4ZDksMHhhZiwweDQzLDB4M2MKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9Ci0rCXsKLSsJMHg1MywweDk5LDB4NTIsMHg1ZiwweDExLDB4YTksMHg2NCwweDY2 LDB4MjAsMHg1ZSwweDFiLDB4NWYsCi0rCTB4NDIsMHhiMywweGY0LDB4ZGEsMHhlZCwweGJiLDB4 NjMsMHhjMSwweDIzLDB4YWYsMHhkMCwweDAxLAotKwkweDkwLDB4M2IsMHhkMCwweDc4LDB4ZTQs MHgwYiwweGE3LDB4MjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg4 NSwweDkwLDB4ODAsMHhkMywweDk4LDB4ZjEsMHg1MywweDZkLDB4NjgsMHgxNSwweDhmLDB4ZTUs Ci0rCTB4NjAsMHgzZiwweDE3LDB4MjksMHg1NSwweDhkLDB4MzMsMHhiMSwweDQ1LDB4NjQsMHg2 NCwweDhkLAotKwkweDUwLDB4MjEsMHg4OSwweGFlLDB4ZjYsMHhmZCwweDMyLDB4NzMKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjgsMHg1NiwweDMwLDB4NmYsMHhm NCwweGExLDB4NDgsMHhlMCwweGM5LDB4ZjUsMHg3NSwweDkwLAotKwkweGNjLDB4ZmIsMHhkZiww eGRmLDB4NzEsMHgzZCwweDBhLDB4OWEsMHgwMywweDY1LDB4M2IsMHgxOCwKLSsJMHg2MSwweGUz LDB4ZDEsMHhkYSwweGNjLDB4NGEsMHhmZSwweDU1LDB4MzgsMHhmOCwweDIxLDB4NmIsCi0rCTB4 ZmEsMHgxOCwweDAxLDB4NDIsMHgzOSwweDJmLDB4OTksMHg1MywweDM4LDB4MTUsMHg4MiwweDM0 LAotKwkweGM1LDB4OTMsMHg5MiwweGJjLDB4NGQsMHg3NSwweDFhLDB4NWYsMHgyMSwweDI3LDB4 Y2MsMHhhMSwKLSsJMHhiMSwweDU3LDB4NjksMHhlOAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KLSsJewotKwkweDhjLDB4NTIsMHg3ZSwweDc3LDB4NzIsMHgzZiwweGEzLDB4MDQs MHg5NywweDEwLDB4OWIsMHg0MSwKLSsJMHhiZCwweGU4LDB4ZmYsMHg4OSwweGVkLDB4ODAsMHhl MywweGJkLDB4YWEsMHgxMiwweDJkLDB4Y2EsCi0rCTB4NzUsMHg4MiwweDM2LDB4NzcsMHg4OCww eGNkLDB4YTYsMHg3MwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewot KwkweDdlLDB4MzIsMHhlMywweDY5LDB4NjksMHgwNywweDM0LDB4YTIsMHgxNiwweGEyLDB4NWQs MHgxYSwKLSsJMHgxMCwweDkxLDB4ZDMsMHhlMiwweDIxLDB4YTIsMHhhMywweGRkLDB4Y2QsMHgw YywweDA5LDB4ODYsCi0rCTB4MTEsMHhlMSwweDUwLDB4ZmYsMHg1YywweGI3LDB4ZWIsMHg1Ywot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3ZiwweDc4LDB4NjYsMHhk OCwweGZiLDB4NjcsMHhjZiwweDhkLDB4OGMsMHgwOCwweDMwLDB4YTUsCi0rCTB4ZjgsMHg3ZCww eGNmLDB4NDQsMHg1OSwweGNlLDB4ZjgsMHhkZiwweDU4LDB4ZDMsMHg2MCwweGNiLAotKwkweGE4 LDB4NjAsMHhiOSwweDA3LDB4YzQsMHhiMSwweDk1LDB4NDgKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHhkZiwweGE3LDB4MzYsMHhkNCwweGRjLDB4NWQsMHg0ZCwweDMxLDB4 YWQsMHg2OSwweDQ2LDB4OWYsCi0rCTB4ZjEsMHg3YywweGQ3LDB4M2IsMHg0ZiwweDU1LDB4ZjIs MHhkNywweGI5LDB4OWQsMHhhZCwweDdhLAotKwkweDc5LDB4MDgsMHg1OSwweGE1LDB4ZGMsMHg3 NCwweGY1LDB4OWIsMHg3MywweGQyLDB4MTMsMHgyNSwKLSsJMHgwYiwweDgxLDB4MDgsMHgwOCww eDI1LDB4ZmIsMHgzOSwweGYyLDB4ZjAsMHhhMywweGE0LDB4OGQsCi0rCTB4ZWYsMHgwNSwweDll LDB4YjgsMHhjNywweDUyLDB4ZTQsMHgwZSwweDQyLDB4YWEsMHg3YywweDc5LAotKwkweGMyLDB4 ZDYsMHhmZCwweGE1Ci0rCX07Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlw c19kc2Ffc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHNh X3NlbGZ0ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxNC0wNS0w NiAxNjoyOTo1MC41NDg5MjMyNzEgKzAyMDAKLUBAIC0wLDAgKzEsMTkzIEBACi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wu aCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7Ci0rCTB4YTgsMHg1MywweDc4LDB4ZDgsMHhmZCwweDNm LDB4OGQsMHg3MiwweGVjLDB4NzQsMHgxOCwweDA4LAotKwkweDBkLDB4YTIsMHgxMywweDE3LDB4 ZTQsMHgzZSwweGM0LDB4YjYsMHgyYiwweGE4LDB4YzgsMHg2MiwKLSsJMHgzYiwweDdlLDB4NGQs MHgwNCwweDQ0LDB4MWQsMHhkMSwweGEwLDB4NjUsMHg4NiwweDYyLDB4NTksCi0rCTB4NjQsMHg5 MywweGNhLDB4OGUsMHg5ZSwweDhmLDB4YmIsMHg3ZSwweDM0LDB4YWEsMHhkZCwweGI2LAotKwkw eDJlLDB4NWQsMHg2NywweGI2LDB4ZDAsMHg5YSwweDZlLDB4NjEsMHhiNywweDY5LDB4ZTcsMHhj MywKLSsJMHg1MiwweGFhLDB4MmIsMHgxMCwweGUyLDB4MGMsMHhhMCwweDYzLDB4NjksMHg2Myww eGI1LDB4NTIsCi0rCTB4M2UsMHg4NiwweDQ3LDB4MGQsMHhlYywweGJiLDB4ZWQsMHhhMCwweDI3 LDB4ZTcsMHg5NywweGU3LAotKwkweGI2LDB4NzYsMHgzNSwweGQ0LDB4ZDQsMHg5YywweDMwLDB4 NzAsMHgwZSwweDc0LDB4YWYsMHg4YSwKLSsJMHgwZiwweGYxLDB4NTYsMHhhOCwweDAxLDB4YWYs MHg1NywweGEyLDB4NmUsMHg3MCwweDc4LDB4ZjEsCi0rCTB4ZDgsMHgyZiwweDc0LDB4OTAsMHg4 ZSwweGNiLDB4NmQsMHgwNywweGU3LDB4MGIsMHgzNSwweDAzLAotKwkweGVlLDB4ZDksMHg0Ziww eGEzLDB4MmMsMHhmMSwweDdhLDB4N2YsMHhjMywweGQ2LDB4Y2YsMHg0MCwKLSsJMHhkYywweDdi LDB4MDAsMHg4MywweDBlLDB4NmEsMHgyNSwweDY2LDB4ZGMsMHgwNywweDNlLDB4MzQsCi0rCTB4 MzMsMHgxMiwweDUxLDB4N2MsMHg2YSwweGE1LDB4MTUsMHgyYiwweDRiLDB4ZmUsMHhjZCwweDJl LAotKwkweDU1LDB4MWYsMHhlZSwweDM0LDB4NjMsMHgxOCwweGExLDB4NTMsMHg0MiwweDNjLDB4 OTksMHg2YiwKLSsJMHgwZCwweDVkLDB4Y2IsMHg5MSwweDAyLDB4YWUsMHhkZCwweDM4LDB4Nzks MHg4NiwweDE2LDB4ZjEsCi0rCTB4ZjEsMHhlMCwweGQ2LDB4YzQsMHgwMywweDUyLDB4NWIsMHgx ZiwweDliLDB4M2QsMHg0ZCwweGM3LAotKwkweDY2LDB4ZGUsMHgyZCwweGZjLDB4NGEsMHg1Niww eGQ3LDB4YjgsMHhiYSwweDU5LDB4NjMsMHhkNiwKLSsJMHgwZiwweDNlLDB4MTYsMHgzMSwweDg4 LDB4NzAsMHhhZCwweDQzLDB4NjksMHg1MiwweGU1LDB4NTcsCi0rCTB4NjUsMHgzNywweDRlLDB4 YWIsMHg4NSwweGU4LDB4ZWMsMHgxNywweGQ2LDB4YjksMHhhNCwweDU0LAotKwkweDdiLDB4OWIs MHg1ZiwweDI3LDB4NTIsMHhmMywweDEwLDB4NWIsMHhlOCwweDA5LDB4YjIsMHgzYSwKLSsJMHgy YywweDhkLDB4NzQsMHg2OSwweGRiLDB4MDIsMHhlMiwweDRkLDB4NTksMHgyMywweDk0LDB4YTcs Ci0rCTB4ZGIsMHhhMCwweDY5LDB4ZTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGRzYV90ZXN0XzIwNDhfcVtdID0gewotKwkweGQyLDB4NzcsMHgwNCwweDRlLDB4NTAsMHhm NSwweGE0LDB4ZTMsMHhmNSwweDEwLDB4YTUsMHgwYSwKLSsJMHgwYiwweDg0LDB4ZmQsMHhmZiww eGJjLDB4YTAsMHg0NywweGVkLDB4MjcsMHg2MCwweDIwLDB4NTYsCi0rCTB4NzQsMHg0MSwweGEw LDB4YTUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhf Z1tdID0gewotKwkweDEzLDB4ZDcsMHg1NCwweGUyLDB4MWYsMHhkMiwweDQxLDB4NjUsMHg1ZCww eGE4LDB4OTEsMHhjNSwKLSsJMHgyMiwweGE2LDB4NWEsMHg3MiwweGE4LDB4OWIsMHhkYywweDY0 LDB4ZWMsMHg5YiwweDU0LDB4YTgsCi0rCTB4MjEsMHhlZCwweDRhLDB4ODksMHg4YiwweDQ5LDB4 MGUsMHgwYywweDRmLDB4Y2IsMHg3MiwweDE5LAotKwkweDJhLDB4NGEsMHgyMCwweGY1LDB4NDEs MHhmMywweGYyLDB4OTIsMHg1MywweDk5LDB4ZjAsMHhiYSwKLSsJMHhlYywweGY5LDB4MjksMHhh YSwweGZiLDB4ZjcsMHg5ZCwweGZlLDB4NDMsMHgzMiwweDM5LDB4M2IsCi0rCTB4MzIsMHhjZCww eDJlLDB4MmYsMHhjZiwweDI3LDB4MmYsMHgzMiwweGE2LDB4MjcsMHg0MywweDRhLAotKwkweDBk LDB4ZjIsMHg0MiwweGI3LDB4NWIsMHg0MSwweDRkLDB4ZjMsMHg3MiwweDEyLDB4MWUsMHg1MywK LSsJMHhhNSwweDUzLDB4ZjIsMHgyMiwweGY4LDB4MzYsMHhiMCwweDAwLDB4ZjAsMHgxNiwweDQ4 LDB4NWIsCi0rCTB4NmIsMHhkMCwweDg5LDB4ODQsMHg1MSwweDgwLDB4MWQsMHhjZCwweDhkLDB4 ZTYsMHg0YywweGQ1LAotKwkweDM2LDB4NTYsMHg5NiwweGZmLDB4YzUsMHgzMiwweGQ1LDB4Mjgs MHhjNSwweDA2LDB4NjIsMHgwYSwKLSsJMHg5NCwweDJhLDB4MDMsMHgwNSwweDA0LDB4NmQsMHg4 ZiwweDE4LDB4NzYsMHgzNCwweDFmLDB4MWUsCi0rCTB4NTcsMHgwYiwweGMzLDB4OTcsMHg0Yiww eGE2LDB4YjksMHhhNCwweDM4LDB4ZTksMHg3MCwweDIzLAotKwkweDAyLDB4YTIsMHhlNiwweGU2 LDB4N2IsMHhmZCwweDA2LDB4ZDMsMHgyYiwweGM2LDB4NzksMHg5NiwKLSsJMHgyMiwweDcxLDB4 ZDcsMHhiNCwweDBjLDB4ZDcsMHgyZiwweDM4LDB4NmUsMHg2NCwweGUwLDB4ZDcsCi0rCTB4ZWYs MHg4NiwweGNhLDB4OGMsMHhhNSwweGQxLDB4NDIsMHgyOCwweGRjLDB4MmEsMHg0ZiwweDE2LAot KwkweGUzLDB4MTgsMHg5OCwweDg2LDB4YjUsMHg5OSwweDA2LDB4NzQsMHhmNCwweDIwLDB4MGYs MHgzYSwKLSsJMHg0YywweGY2LDB4NWEsMHgzZiwweDBkLDB4ZGIsMHhhMSwweGZhLDB4NjcsMHgy ZCwweGZmLDB4MmYsCi0rCTB4NWUsMHgxNCwweDNkLDB4MTAsMHhlNCwweGU5LDB4N2EsMHhlOCww eDRmLDB4NmQsMHhhMCwweDk1LAotKwkweDM1LDB4ZDUsMHhiOSwweGRmLDB4MjUsMHg5MSwweDgx LDB4YTcsMHg5YiwweDYzLDB4YjAsMHg2OSwKLSsJMHhlOSwweDQ5LDB4OTcsMHgyYiwweDAyLDB4 YmEsMHgzNiwweGIzLDB4NTgsMHg2YSwweGFiLDB4N2UsCi0rCTB4NDUsMHhmMywweDIyLDB4Zjgs MHgyZSwweDRlLDB4ODUsMHhjYSwweDNhLDB4YjgsMHg1NSwweDkxLAotKwkweGIzLDB4YzIsMHhh OSwweDY2Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4 X3B1Yl9rZXlbXSA9IHsKLSsJMHgyNCwweDUyLDB4ZjMsMHhjYywweGJlLDB4OWUsMHhkNSwweGNh LDB4N2QsMHhjNywweDRjLDB4NjAsCi0rCTB4MmIsMHg5OSwweDIyLDB4NmUsMHg4ZiwweDJmLDB4 YWIsMHgzOCwweGU3LDB4ZDcsMHhkZCwweGZiLAotKwkweDc1LDB4NTMsMHg5YiwweDE3LDB4MTUs MHg1ZSwweDlmLDB4Y2YsMHhkMSwweGFiLDB4YTUsMHg2NCwKLSsJMHhlYiwweDg1LDB4MzUsMHhk OCwweDEyLDB4YzksMHhjMiwweGRjLDB4ZjksMHg3MiwweDg0LDB4NDQsCi0rCTB4MWIsMHhjNCww eDgyLDB4MjQsMHgzNiwweDI0LDB4YzcsMHhmNCwweDU3LDB4NTgsMHgwYywweDFjLAotKwkweDM4 LDB4YTUsMHg3YywweDQ2LDB4YzQsMHg1NywweDM5LDB4MjQsMHg3MCwweGVkLDB4YjUsMHgyYywK LSsJMHhiNSwweGE2LDB4ZTAsMHgzZiwweGU2LDB4MjgsMHg3YiwweGI2LDB4ZjQsMHg5YSwweDQy LDB4YTIsCi0rCTB4MDYsMHg1YSwweDA1LDB4NGYsMHgwMywweDA4LDB4MzksMHhkZiwweDFmLDB4 ZDMsMHgxNCwweDljLAotKwkweDRjLDB4YTAsMHg1MywweDFkLDB4ZDgsMHhjYSwweDhhLDB4YWEs MHg5YywweGM3LDB4MzMsMHg3MSwKLSsJMHg5MywweDM4LDB4NzMsMHg0OCwweDMzLDB4NjEsMHgx OCwweDIyLDB4NDUsMHg0NSwweGU4LDB4OGMsCi0rCTB4ODAsMHhmZiwweGQ4LDB4NzYsMHg1ZCww eDc0LDB4MzYsMHgwMywweDMzLDB4Y2MsMHhhYiwweDk5LAotKwkweDcyLDB4NzcsMHg5YiwweDY1 LDB4MjUsMHhhNiwweDViLDB4ZGQsMHgwZCwweDEwLDB4YzYsMHg3NSwKLSsJMHhjMSwweDA5LDB4 YmIsMHhkMywweGU1LDB4YmUsMHg0ZCwweDcyLDB4ZWYsMHg2ZSwweGJhLDB4NmUsCi0rCTB4NDMs MHg4ZCwweDUyLDB4MjYsMHgyMywweDdkLDB4YjgsMHg4OCwweDM3LDB4OWMsMHg1ZiwweGNjLAot KwkweDQ3LDB4YTMsMHg4NCwweDdmLDB4ZjYsMHgzNywweDExLDB4YmEsMHhlZCwweDZkLDB4MDMs MHhhZiwKLSsJMHhlOCwweDFlLDB4NjksMHg0YSwweDQxLDB4M2IsMHg2OCwweDBiLDB4ZDMsMHg4 YSwweGI0LDB4OTAsCi0rCTB4M2YsMHg4MywweDcwLDB4YTcsMHgwNywweGVmLDB4NTUsMHgxZCww eDQ5LDB4NDEsMHgwMiwweDZkLAotKwkweDk1LDB4NzksMHhkNiwweDkxLDB4ZGUsMHg4ZSwweGRh LDB4YTEsMHg2MSwweDA1LDB4ZWIsMHg5ZCwKLSsJMHhiYSwweDNjLDB4MmYsMHg0YywweDFiLDB4 ZWMsMHg1MCwweDgyLDB4NzUsMHhhYSwweDAyLDB4MDcsCi0rCTB4ZTIsMHg1MSwweGI1LDB4ZWMs MHhjYiwweDI4LDB4NmEsMHg0YiwweDAxLDB4ZDQsMHg0OSwweGQzLAotKwkweDBhLDB4Y2IsMHg2 NywweDM3LDB4MTcsMHhhMCwweGQyLDB4ZmIsMHgzYiwweDUwLDB4YzgsMHg5MywKLSsJMHhmNyww eGRhLDB4YjEsMHg0ZgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rl c3RfMjA0OF9wcml2X2tleVtdID0gewotKwkweDBjLDB4NGIsMHgzMCwweDg5LDB4ZDEsMHhiOCww eDYyLDB4Y2IsMHgzYywweDQzLDB4NjQsMHg5MSwKLSsJMHhmMCwweDkxLDB4NTQsMHg3MCwweGM1 LDB4MjcsMHg5NiwweGUzLDB4YWMsMHhiZSwweGU4LDB4MDAsCi0rCTB4ZWMsMHg1NSwweGY2LDB4 Y2MKLSt9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9kc2E7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1 cHRfZHNhKCkKLSsgICAgewotKyAgICBjb3JydXB0X2RzYSA9IDE7Ci0rICAgIH0KLSsKLStpbnQg RklQU19zZWxmdGVzdF9kc2EoKQotKwl7Ci0rCURTQSAqZHNhID0gTlVMTDsKLSsJRVZQX1BLRVkg KnBrID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWRzYSA9IERTQV9uZXcoKTsKLSsKLSsJ aWYoZHNhID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJZmlwc19sb2FkX2tleV9jb21wb25l bnQoZHNhLCBwLCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNh LCBxLCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBk c2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBk c2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwg ZHNhX3Rlc3RfMjA0OCk7Ci0rCi0rCWlmIChjb3JydXB0X2RzYSkKLSsJCUJOX3NldF9iaXQoZHNh LT5wdWJfa2V5LCAyMDQ3KTsKLSsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkK LSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOwotKwotKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwgMCwKLSsJCQkJCU5VTEwsIDAs IEVWUF9zaGEyNTYoKSwgMCwKLSsJCQkJCSJEU0EgU0hBMjU2IikpCi0rCQlnb3RvIGVycjsKLSsJ cmV0ID0gMTsKLSsKLSsJZXJyOgotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsJ ZWxzZSBpZiAoZHNhKQotKwkJRFNBX2ZyZWUoZHNhKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDk5MjMy OTQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCi1AQCAtMCwwICsxLDE5MSBAQAotKy8qIGZp cGUvZXZwL2ZpcHNfZW5jLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlv dW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkg RXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3 YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsg KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwg dXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQg dG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3Vu ZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBE RVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRh dGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0 aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRp bSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlu cyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAq IHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMg dXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9u Ci0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsg KiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFt IHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJv dmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJl Ci0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVu IGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUg d29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20g dGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxh dGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2Rl IChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3Rv cnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0g SHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBT VUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1z IGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUg b2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNp bXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxp Y2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rCi0rY29uc3QgRVZQX0NJUEhFUiAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50 IG5pZCkKLSsJewotKwlzd2l0Y2ggKG5pZCkKLSsJCXsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2Jj OgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2NiYygpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9j Y206Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4 X2NmYjE6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwotKwkJY2FzZSBOSURfYWVz XzEyOF9jZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMTI4KCk7Ci0rCi0rCQljYXNl IE5JRF9hZXNfMTI4X2NmYjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOwotKwotKwkJ Y2FzZSBOSURfYWVzXzEyOF9jdHI6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7Ci0rCi0r CQljYXNlIE5JRF9hZXNfMTI4X2VjYjoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9lY2IoKTsKLSsK LSsJCWNhc2UgTklEX2Flc18xMjhfZ2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2djbSgpOwot KwotKwkJY2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfb2Zi KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X3h0czoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF94 dHMoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY2JjOgotKwkJcmV0dXJuIEVWUF9hZXNfMTky X2NiYygpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jY206Ci0rCQlyZXR1cm4gRVZQX2Flc18x OTJfY2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2NmYjE6Ci0rCQlyZXR1cm4gRVZQX2Fl c18xOTJfY2ZiMSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jZmIxMjg6Ci0rCQlyZXR1cm4g RVZQX2Flc18xOTJfY2ZiMTI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2NmYjg6Ci0rCQly ZXR1cm4gRVZQX2Flc18xOTJfY2ZiOCgpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jdHI6Ci0r CQlyZXR1cm4gRVZQX2Flc18xOTJfY3RyKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2VjYjoK LSsJCXJldHVybiBFVlBfYWVzXzE5Ml9lY2IoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfZ2Nt OgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2djbSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9v ZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJfb2ZiKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MjU2X2NiYzoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Fl c18yNTZfY2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgpOwotKwotKwkJY2FzZSBOSURf YWVzXzI1Nl9jZmIxOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEoKTsKLSsKLSsJCWNhc2Ug TklEX2Flc18yNTZfY2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwot KwkJY2FzZSBOSURfYWVzXzI1Nl9jZmI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjgoKTsK LSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY3RyOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2N0cigp OwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfZWNi KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2djbToKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9n Y20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfb2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNf MjU2X29mYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl94dHM6Ci0rCQlyZXR1cm4gRVZQX2Fl c18yNTZfeHRzKCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlX2VjYjoKLSsJCXJldHVybiBFVlBf ZGVzX2VkZSgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfZWNiOgotKwkJcmV0dXJuIEVWUF9k ZXNfZWRlMygpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2JjOgotKwkJcmV0dXJuIEVWUF9k ZXNfZWRlM19jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjE6Ci0rCQlyZXR1cm4g RVZQX2Rlc19lZGUzX2NmYjEoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjY0OgotKwkJ cmV0dXJuIEVWUF9kZXNfZWRlM19jZmI2NCgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2Zi ODoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOwotKwotKwkJY2FzZSBOSURfZGVzX2Vk ZTNfb2ZiNjQ6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzX29mYigpOwotKwotKwkJY2FzZSBOSURf ZGVzX2VkZV9jYmM6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2JjKCk7Ci0rCi0rCQljYXNlIE5J RF9kZXNfZWRlX2NmYjY0OgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlX2NmYjY0KCk7Ci0rCi0rCQlj YXNlIE5JRF9kZXNfZWRlX29mYjY0OgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlX29mYigpOwotKwot KwkJZGVmYXVsdDoKLSsJCXJldHVybiBOVUxMOwotKwotKwkJfQotKwl9Ci0rCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzLmgKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzLmguZmlw cwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2ZpcHMuaAkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAot QEAgLTAsMCArMSwyNzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw MyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl 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 ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgot KyNpbmNsdWRlIDxzdGRhcmcuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNlcnJvciBG SVBTIGlzIGRpc2FibGVkLgotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsj aWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0rc3RydWN0IGRz YV9zdDsKLStzdHJ1Y3QgcnNhX3N0OwotK3N0cnVjdCBldnBfcGtleV9zdDsKLStzdHJ1Y3QgZW52 X21kX3N0OwotK3N0cnVjdCBlbnZfbWRfY3R4X3N0OwotK3N0cnVjdCBldnBfY2lwaGVyX3N0Owot K3N0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKLStzdHJ1Y3QgZGhfbWV0aG9kOwotK3N0cnVjdCBD TUFDX0NUWF9zdDsKLStzdHJ1Y3QgaG1hY19jdHhfc3Q7Ci0rCi0raW50IEZJUFNfbW9kdWxlX21v ZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCk7Ci0raW50IEZJUFNfbW9kdWxlX21v ZGUodm9pZCk7Ci0rY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOwotK2ludCBGSVBT X3NlbGZ0ZXN0KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKLSt2b2lk IEZJUFNfY29ycnVwdF9zaGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7 Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9hZXMo dm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lkKTsKLStpbnQgRklQU19zZWxm dGVzdF9hZXNfZ2NtKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHModm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lk KTsKLStpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNh KHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7Ci0raW50IEZJUFNf c2VsZnRlc3RfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKLSt2b2lk IEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2 b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0rdm9pZCBGSVBTX3JuZ19zdGlj ayh2b2lkKTsKLSt2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpOwotK3ZvaWQgRklQU19k cmJnX3N0aWNrKGludCBvbm9mZik7Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOwotK2lu dCBGSVBTX3NlbGZ0ZXN0X3g5MzEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lk KTsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Ry YmdfYWxsKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWModm9pZCk7Ci0rCi0rdm9pZCBG SVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7 Ci0rCi0rI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9f LCBfX0xJTkVfXywgXAotKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGht IGVycm9yIGlnbm9yZWQiKTsKLSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVj dCBldnBfcGtleV9zdCAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0 YnNsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVu LAotKwkJCWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2Zs YWdzLAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLStpbnQgZmlwc19jaXBoZXJfdGVz dChzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKLSsJCQljb25zdCBzdHJ1Y3QgZXZwX2Np cGhlcl9zdCAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCQljb25z dCB1bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQs Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJCQlpbnQgbGVuKTsKLSsK LSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGVu dl9tZF9zdCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7Ci0rCi0rY29uc3Qgc3RydWN0 IGV2cF9jaXBoZXJfc3QgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotKwotKy8q IEJFR0lOIEVSUk9SIENPREVTICovCi0rLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBn ZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSsgKiBtYWRlIGFm dGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0 IHJ1bi4KLSsgKi8KLSt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKLSsKLSsvKiBF cnJvciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLwotKwotKy8qIEZ1bmN0aW9uIGNv ZGVzLiAqLwotKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAotKyNk ZWZpbmUgRklQU19GX0RIX0lOSVQJCQkJCSAxNDgKLSsjZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VF RAkJCQkgMTYyCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAxCi0r I2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yCQkJIDEwNwotKyNkZWZpbmUgRklQ U19GX0RTQV9ET19TSUdOCQkJCSAxMDIKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJ CSAxMDMKLSsjZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZCQkJCSAxNjMKLSsjZGVmaW5l IEZJUFNfRl9FQ0RTQV9ET19TSUdOCQkJCSAxNjQKLSsjZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19W RVJJRlkJCQkJIDE2NQotKyNkZWZpbmUgRklQU19GX0VDX0tFWV9HRU5FUkFURV9LRVkJCQkgMTY2 Ci0rI2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkgMTI0Ci0rI2RlZmluZSBGSVBT X0ZfRVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19E U0EJCQkJIDEwNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBX1BSTkcJCQkgMTUxCi0r I2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQwkJCQkgMTQyCi0rI2RlZmluZSBGSVBTX0ZfRklQ U19DSEVDS19FQ19QUk5HCQkJIDE1MgotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JF X0ZJTkdFUlBSSU5UCQkgMTA1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJCQkJIDEw NgotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBX1BSTkcJCQkgMTUwCi0rI2RlZmluZSBG SVBTX0ZfRklQU19DSVBIRVIJCQkJIDE2MAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSSU5J VAkJCQkgMTQzCi0rI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJfQ1RYX0NUUkwJCQkgMTYxCi0r I2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RGSU5BTAkJCQkgMTU4Ci0rI2RlZmluZSBGSVBTX0Zf RklQU19ESUdFU1RJTklUCQkJCSAxMjgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFU RQkJCSAxNTkKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllURVMJCQkJIDEzMQotKyNkZWZp bmUgRklQU19GX0ZJUFNfRFJCR19DSEVDSwkJCQkgMTQ2Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19E UkJHX0NQUk5HX1RFU1QJCQkgMTMyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLCQkJIDEzNgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURQkJCSAxMzQKLSsj ZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5JVAkJCQkgMTM1Ci0rI2RlZmluZSBGSVBTX0ZfRklQ U19EUkJHX0lOU1RBTlRJQVRFCQkJIDEzOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcJ CQkJIDEzOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNFRUQJCQkJIDE0MAotKyNkZWZp bmUgRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUCQkJIDE0MQotKyNkZWZpbmUgRklQU19GX0ZJ UFNfRFNBX0NIRUNLCQkvKiB1bnVzZWQgKi8JIDEwNwotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNB X1NJR05fRElHRVNUCQkJIDE1NAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1ZFUklGWV9ESUdF U1QJCQkgMTU1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19HRVRfRU5UUk9QWQkJCQkgMTQ3Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJLyogdW51c2VkICovCSAxMDgKLSsjZGVmaW5lIEZJ UFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVAkJCSAxMDgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1BL RVlfU0lHTkFUVVJFX1RFU1QJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0FERAkJ CQkgMTM3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMjIKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTCQkJIDE2NwotKyNkZWZpbmUgRklQU19GX0ZJ UFNfUkFORF9TRUVECQkJCSAxNjgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhP RAkJCSAxMjYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTCQkJCSAxMjcKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVAkJCSAxNTYKLSsjZGVmaW5lIEZJUFNfRl9G SVBTX1JTQV9WRVJJRllfRElHRVNUCQkJIDE1NwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfQUVTCQkJIDExMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTQkJCSAx NDUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19HQ00JCQkgMTI5Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTCQkJIDE0NAotKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfQ01BQwkJCSAxMzAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RF UwkJCSAxMTEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBCQkJIDEzMwotKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JO RwkvKiB1bnVzZWQgKi8JIDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJ CSAxMTUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEJCQkgMTE0Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19TRVRfUFJOR19LRVkJCQkgMTUzCi0rI2RlZmluZSBGSVBTX0ZfSEFTSF9G SU5BTAkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOCQkJIDExNgot KyNkZWZpbmUgRklQU19GX1JTQV9FQVlfSU5JVAkJCQkgMTQ5Ci0rI2RlZmluZSBGSVBTX0ZfUlNB X0VBWV9QUklWQVRFX0RFQ1JZUFQJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklW QVRFX0VOQ1JZUFQJCQkgMTE4Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQ VAkJCSAxMTkKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAot KyNkZWZpbmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKLSsjZGVmaW5l IEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUwkvKiB1bnVzZWQgKi8JIDEyMgotKwotKy8qIFJlYXNv biBjb2Rlcy4gKi8KLSsjZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVU RUNURUQJIDE1MAotKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcJCSAx MjUKLSsjZGVmaW5lIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRAkJCSAxMzQKLSsjZGVmaW5l IEZJUFNfUl9BVVRIRU5USUNBVElPTl9GQUlMVVJFCQkJIDE1MQotKyNkZWZpbmUgRklQU19SX0NB Tk5PVF9SRUFEX0VYRQkJLyogdW51c2VkICovCSAxMDMKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1Rf UkVBRF9FWEVfRElHRVNUCS8qIHVudXNlZCAqLwkgMTA0Ci0rI2RlZmluZSBGSVBTX1JfQ09OVFJB RElDVElOR19FVklERU5DRQkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfUl9EUkJHX05PVF9JTklUSUFM SVNFRAkJCSAxNTIKLSsjZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNLCQkJCSAxMDMKLSsjZGVmaW5l IEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQJCQkgMTA0Ci0rI2RlZmluZSBGSVBTX1Jf RU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQJCSAxMDUKLSsjZGVmaW5lIEZJUFNfUl9F TlRST1BZX1NPVVJDRV9TVFVDSwkJCSAxNDIKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTklUSUFM SVNJTkdfRFJCRwkJCSAxMTUKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RS QkcJCQkgMTI3Ci0rI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lO UFVUCSAxMjQKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkJCQkgMTIy Ci0rI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRQkJCSAxNDAKLSsjZGVmaW5l IEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIICAgLyogdW51c2VkICovCSAxMDUKLSsj ZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUg RklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0r I2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lO RyAxMTIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2Rl ZmluZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1Jf RlVOQ1RJT05fRVJST1IJCQkJIDExNgotKyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SCQkJ CSAxMzcKLSsjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVECQkgMTE4Ci0r I2RlZmluZSBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IJCQkgMTE5Ci0rI2RlZmluZSBGSVBTX1Jf SU5TVUZGSUNJRU5UX1NFQ1VSSVRZX1NUUkVOR1RICQkgMTIwCi0rI2RlZmluZSBGSVBTX1JfSU5U RVJOQUxfRVJST1IJCQkJIDEyMQotKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJ CSAxMDkKLSsjZGVmaW5lIEZJUFNfUl9JTlZBTElEX1BBUkFNRVRFUlMJCQkgMTQ0Ci0rI2RlZmlu ZSBGSVBTX1JfSU5fRVJST1JfU1RBVEUJCQkJIDEyMwotKyNkZWZpbmUgRklQU19SX0tFWV9UT09f U0hPUlQJCQkJIDEwOAotKyNkZWZpbmUgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQJCQkg MTQ5Ci0rI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKLSsjZGVmaW5lIEZJ UFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUJCQkgMTQ1Ci0rI2RlZmluZSBGSVBTX1JfTk9QUl9URVNU Ml9GQUlMVVJFCQkJIDE0NgotKyNkZWZpbmUgRklQU19SX05PVF9JTlNUQU5USUFURUQJCQkJIDEy NgotKyNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNwotKyNkZWZpbmUg RklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVECQkgMTI4Ci0rI2RlZmluZSBG SVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORwkJIDEyOQotKyNkZWZpbmUgRklQ U19SX1BSTkdfU1RSRU5HVEhfVE9PX0xPVwkJCSAxNDMKLSsjZGVmaW5lIEZJUFNfUl9QUl9URVNU MV9GQUlMVVJFCQkJCSAxNDcKLSsjZGVmaW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFCQkJCSAx NDgKLSsjZGVmaW5lIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVECQkgMTMw Ci0rI2RlZmluZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkcJCSAxMzEKLSsjZGVm aW5lIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUgkJCSAxMzIKLSsjZGVmaW5lIEZJUFNfUl9S RVNFRURfRVJST1IJCQkJIDEzMwotKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCS8q IHVudXNlZCAqLwkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJLyogdW51 c2VkICovCSAxMTYKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQotKyNk ZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUJCQkJIDEzNQotKyNkZWZpbmUgRklQU19SX1NU UkVOR1RIX0VSUk9SX1VOREVURUNURUQJCSAxMzYKLSsjZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxV UkUJCQkJIDExNwotKyNkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IJCQkgMTQxCi0r I2RlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SCQkgMTM4Ci0rI2RlZmlu ZSBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFCQkJIDEzOQotKyNkZWZpbmUgRklQU19SX1VO U1VQUE9SVEVEX1BMQVRGT1JNCQkJIDExMwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0r I2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBz X2htYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfaG1h Y19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3Nl bGZ0ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCi1AQCAtMCwwICsxLDEzNyBAQAotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgot KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwot KyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgot KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwljb25zdCBFVlBfTUQgKigqYWxnKSh2b2lkKTsK LSsJY29uc3QgY2hhciAqa2V5LCAqaXY7Ci0rCXVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9N RF9TSVpFXTsKLSt9IEhNQUNfS0FUOwotKwotK3N0YXRpYyBjb25zdCBITUFDX0tBVCB2ZWN0b3Jb XSA9IHsKLSsgICAgewlFVlBfc2hhMSwKLSsJLyogZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9w dWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8KLSsJIjAxMjM0NTY3ODk6 Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHgwOSwweDIyLDB4ZDMsMHg0MCwweDVm LDB4YWEsMHgzZCwweDE5LAotKwkgIDB4NGYsMHg4MiwweGE0LDB4NTgsMHgzMCwweDczLDB4N2Qs MHg1YywKLSsJICAweGM2LDB4YzcsMHg1ZCwweDI0IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hh MjI0LAotKwkvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92ZS4uLiAqLwotKwkiMDEyMzQ1 Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweGRkLDB4ZWYsMHgwYSwweDQw LDB4Y2IsMHg3ZCwweDUwLDB4ZmIsCi0rCSAgMHg2ZSwweGU2LDB4Y2UsMHhhMSwweDIwLDB4YmEs MHgyNiwweGFhLAotKwkgIDB4MDgsMHhmMywweDA3LDB4NzUsMHg4NywweGI4LDB4YWQsMHgxYiwK LSsJICAweDhjLDB4OGQsMHgxMiwweGM3IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhMjU2LAot KwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweGI4LDB4ZjIs MHgwZCwweGI1LDB4NDEsMHhlYSwweDQzLDB4MDksCi0rCSAgMHhjYSwweDRlLDB4YTksMHgzOCww eDBjLDB4ZDAsMHhlOCwweDM0LAotKwkgIDB4ZjcsMHgxZiwweGJlLDB4OTEsMHg3NCwweGEyLDB4 NjEsMHgzOCwKLSsJICAweDBkLDB4YzEsMHg3ZSwweGFlLDB4NmEsMHgzNCwweDUxLDB4ZDkgfQot KyAgICB9LAotKyAgICB7CUVWUF9zaGEzODQsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0r CSJTYW1wbGUgIzIiLAotKwl7IDB4MDgsMHhiYywweGIwLDB4ZGEsMHg0OSwweDFlLDB4ODcsMHhh ZCwKLSsJICAweDlhLDB4MWQsMHg2YSwweGNlLDB4MjMsMHhjNSwweDBiLDB4ZjYsCi0rCSAgMHhi NywweDE4LDB4MDYsMHhhNSwweDc3LDB4Y2QsMHg0OSwweDA0LAotKwkgIDB4ODksMHhmMSwweGU2 LDB4MjMsMHg0NCwweDUxLDB4NTEsMHg5ZiwKLSsJICAweDg1LDB4NTYsMHg4MCwweDc5LDB4MGMs MHhiZCwweDRkLDB4NTAsCi0rCSAgMHhhNCwweDVmLDB4MjksMHhlMywweDkzLDB4ZjAsMHhlOCww eDdmIH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhNTEyLAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BB QkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDgwLDB4OWQsMHg0NCwweDA1LDB4N2MsMHg1Yiww eDk1LDB4NDEsCi0rCSAgMHgwNSwweGJkLDB4MDQsMHgxMywweDE2LDB4ZGIsMHgwZiwweGFjLAot KwkgIDB4NDQsMHhkNSwweGE0LDB4ZDUsMHhkMCwweDg5LDB4MmIsMHhkMCwKLSsJICAweDRlLDB4 ODYsMHg2NCwweDEyLDB4YzAsMHg5MCwweDc3LDB4NjgsCi0rCSAgMHhmMSwweDg3LDB4YjcsMHg3 YywweDRmLDB4YWUsMHgyYywweDJmLAotKwkgIDB4MjEsMHhhNSwweGI1LDB4NjUsMHg5YSwweDRm LDB4NGIsMHhhNywKLSsJICAweDQ3LDB4MDIsMHhhMywweGRlLDB4OWIsMHg1MSwweGYxLDB4NDUs Ci0rCSAgMHhiZCwweDRmLDB4MjUsMHgyNywweDQyLDB4OTgsMHg5OSwweDA1IH0KLSsgICAgfSwK LSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQotKyAgICB7Ci0rICAgIGludCBuOwot KyAgICB1bnNpZ25lZCBpbnQgICAgb3V0bGVuOwotKyAgICB1bnNpZ25lZCBjaGFyICAgb3V0W0VW UF9NQVhfTURfU0laRV07Ci0rICAgIGNvbnN0IEVWUF9NRCAgICptZDsKLSsgICAgY29uc3QgSE1B Q19LQVQgKnQ7Ci0rCi0rICAgIGZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6 ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCi0rCXsKLSsJbWQgPSAoKnQtPmFsZykoKTsKLSsJSE1B QyhtZCx0LT5rZXksc3RybGVuKHQtPmtleSksCi0rCQkoY29uc3QgdW5zaWduZWQgY2hhciAqKXQt Pml2LHN0cmxlbih0LT5pdiksCi0rCQlvdXQsJm91dGxlbik7Ci0rCi0rCWlmKG1lbWNtcChvdXQs dC0+a2F2YWwsb3V0bGVuKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VM RlRFU1RfSE1BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkg ICAgfQotKwl9Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2ZpcHNfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlw c19sb2NsLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAu NTQ5OTIzMjk0ICswMjAwCi1AQCAtMCwwICsxLDcxIEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLStl eHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLSsjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJ WkUJMzIKLSsjZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGtleSwgY29tcCwgcHJlKSBc Ci0rCWtleS0+Y29tcCA9IEJOX2JpbjJibihwcmUjI18jI2NvbXAsIHNpemVvZihwcmUjI18jI2Nv bXApLCBrZXktPmNvbXApOyBcCi0rCWlmICgha2V5LT5jb21wKSBcCi0rCQlnb3RvIGVycgotKwot KyNkZWZpbmUgZmlwc19wb3N0X3N0YXJ0ZWQoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZpbmUgZmlw c19wb3N0X3N1Y2Nlc3MoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZpbmUgZmlwc19wb3N0X2ZhaWxl ZChpZCwgc3ViaWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQs IGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQotKwotKyNpZmRlZiAgX19jcGx1 c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX21kLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX21k LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcwkyMDE0LTA1 LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2ZpcHNfbWQuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAotQEAgLTAs MCArMSwxNDUgQEAKLSsvKiBmaXBzL2V2cC9maXBzX21kLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMp IDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlv biB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRo ZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2Nh cGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBh bmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBs eSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwg UlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4g IFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRp b24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhh dCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsg KiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmln aHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJ ZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJl IGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhl IGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwg bWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxp bmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlm IHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3Qg Y3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2lu ZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAg ICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUg YW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsg KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF Ci0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQg ZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBv cgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0 aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3Ro ZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExp Y2VuY2UuXQotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAxOTk4LTIw MDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS 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 T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoK LSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVu IGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsvKiBNaW5pbWFsIHN0YW5kYWxvbmUgRklQUyB2ZXJzaW9u cyBvZiBEaWdlc3Qgb3BlcmF0aW9ucyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0r Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL29iamVjdHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rY29uc3QgRVZQ X01EICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKQotKwl7Ci0rCXN3aXRjaCAobmlkKQot KwkJewotKwkJY2FzZSBOSURfc2hhMToKLSsJCXJldHVybiBFVlBfc2hhMSgpOwotKwotKwkJY2Fz ZSBOSURfc2hhMjI0OgotKwkJcmV0dXJuIEVWUF9zaGEyMjQoKTsKLSsKLSsJCWNhc2UgTklEX3No YTI1NjoKLSsJCXJldHVybiBFVlBfc2hhMjU2KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEzODQ6Ci0r CQlyZXR1cm4gRVZQX3NoYTM4NCgpOwotKwotKwkJY2FzZSBOSURfc2hhNTEyOgotKwkJcmV0dXJu IEVWUF9zaGE1MTIoKTsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsJ fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDk5MjMy OTQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjU0OTkyMzI5NCArMDIwMAotQEAgLTAsMCArMSwyMDUgQEAKLSsvKiA9 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 SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxsaW1pdHMuaD4KLSsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCi0rLyogUG93ZXIgb24gc2VsZiB0ZXN0IChQT1NUKSBzdXBwb3J0IGZ1bmN0aW9u cyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2Ns LmgiCi0rCi0rLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KLStpbnQgRklQU19zZWxmdGVzdCh2b2lk KQotKwl7Ci0rCWludCBydiA9IDE7Ci0rCWlmICghRklQU19zZWxmdGVzdF9kcmJnKCkpCi0rCQly diA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF94OTMxKCkpCi0rCQlydiA9IDA7Ci0rICAgIAlp ZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQotKwkJcnYgPSAwOwotKyAgICAJaWYgKCFGSVBTX3Nl bGZ0ZXN0X3NoYTIoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2htYWMoKSkK LSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2NtYWMoKSkKLSsJCXJ2ID0gMDsKLSsJ aWYgKCFGSVBTX3NlbGZ0ZXN0X2FlcygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRl c3RfYWVzX2NjbSgpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2djbSgp KQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX3h0cygpKQotKwkJcnYgPSAw OwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19z ZWxmdGVzdF9yc2EoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQot KwkJcnYgPSAwOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLSsvKiBHZW5lcmFsaXplZCBwdWJsaWMg a2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCi0rICogc3VwcGxp ZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2Vz dAotKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxM IGl0IHdpbGwKLSsgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0 OiBhIGtub3duIGFuc3dlciB0ZXN0Ci0rICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQg Zm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKLSsgKiBvZiBmYWlsdXJlLiBJZiAi cGtleSIgaXMgTlVMTCBqdXN0IHBlcmZvcm0gYSBtZXNzYWdlIGRpZ2VzdCBjaGVjay4KLSsgKi8K LSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29uc3QgRVZQX01EICpkaWdlc3Qs IHVuc2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cikKLSsJewkK LSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0 bXA7Ci0rCXVuc2lnbmVkIGludCBzaWdsZW47Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJRVZQX01E X0NUWF9pbml0KCZtY3R4KTsKLSsKLSsJaWYgKGRpZ2VzdCA9PSBOVUxMKQotKwkJZGlnZXN0ID0g RVZQX3NoYTI1NigpOwotKwotKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQotKwkJ JiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKLSsJCXsKLSsJ CXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7Ci0rCQlpZiAo IXNpZykKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNU LEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCi0r CWlmICh0YnNsZW4gPT0gLTEpCi0rCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOwotKwot KwlpZiAobWRfZmxhZ3MpCi0rCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxhZ3Mp OwotKwotKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKLSsJCWdv dG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsJ CWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVuLCBw a2V5KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0bGVu KSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYg KCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQotKwkJZ290byBl cnJvcjsKLSsJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtleSk7 Ci0rCi0rCWVycm9yOgotKwlpZiAoc2lnICE9IHNpZ3RtcCkKLSsJCU9QRU5TU0xfZnJlZShzaWcp OwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwlpZiAocmV0ICE9IDEpCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1RfRkFJ TFVSRSk7Ci0rCQlpZiAoZmFpbF9zdHIpCi0rCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUeXBl PSIsIGZhaWxfc3RyKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwot Ky8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0IGRh dGEsIHZlcmlmeSByZXN1bHQKLSsgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBhbmQg Y29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KLSsgKi8KLSsKLStpbnQgZmlwc19jaXBo ZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2 LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKLSsJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpjaXBoZXJ0ZXh0LAotKwkJCWludCBsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBw bHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFtG SVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsKLSsJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJ UFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOwotKwltZW1zZXQocGx0bXAsIDAsIEZJUFNfTUFYX0NJ UEhFUl9URVNUX1NJWkUpOwotKwltZW1zZXQoY2l0bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9URVNU X1NJWkUpOwotKwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtl eSwgaXYsIDEpIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKEVWUF9DaXBoZXIoY3R4LCBjaXRt cCwgcGxhaW50ZXh0LCBsZW4pIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKG1lbWNtcChjaXRt cCwgY2lwaGVydGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlckluaXRf ZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJ aWYgKEVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbikgPD0gMCkKLSsJCXJldHVybiAw OwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikpCi0rCQlyZXR1cm4gMDsKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2ZpcHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5k LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTUwOTIzMzE3ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTA5MjMzMTcgKzAyMDAKLUBA IC0wLDAgKzEsNDU3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDcg 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 VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rLyoKLSsgKiBU aGlzIGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEuMi40 LgotKyAqLwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlICJlX29zLmgi Ci0rCi0rLyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVj dCB0aW1ldmFsIHdvbid0Ci0rICAgYmUgZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3Qg YmUgZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCi0rICAgbGlrZSBERUMgQyBpbiBBTlNJ IEMgbW9kZS4gICovCi0rI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECi0rI2RlZmluZSBf WE9QRU5fU09VUkNFX0VYVEVOREVEIDEKLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2lmICEoZGVmaW5lZChPUEVO U1NMX1NZU19XSU4zMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSkKLSsjIGluY2x1 ZGUgPHN5cy90aW1lLmg+Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JL UykKLSsjIGluY2x1ZGUgPHRpbWUuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0r I2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKLSsjICBp bmNsdWRlIE9QRU5TU0xfVU5JU1RECi0rIyBlbHNlCi0rIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0r IyBlbmRpZgotKyNlbmRpZgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsKLSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKLSsKLSsjZGVmaW5lIEFFU19CTE9D S19MRU5HVEgJMTYKLSsKLSsKLSsvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCi0r Ci0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IHNlZWRlZDsKLSsJaW50IGtleWVkOwotKwlp bnQgdGVzdF9tb2RlOwotKwlpbnQgc2Vjb25kOwotKwlpbnQgZXJyb3I7Ci0rCXVuc2lnbmVkIGxv bmcgY291bnRlcjsKLSsJQUVTX0tFWSBrczsKLSsJaW50IHZwb3M7Ci0rCS8qIFRlbXBvcmFyeSBz dG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCi0rCXVuc2lnbmVkIGNo YXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBWW0FFU19CTE9D S19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNp Z25lZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCX0gRklQU19QUk5HX0NUWDsKLSsK LStzdGF0aWMgRklQU19QUk5HX0NUWCBzY3R4OwotKwotK3N0YXRpYyBpbnQgZmlwc19wcm5nX2Zh aWwgPSAwOwotKwotK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZikKLSsJewotKwlmaXBz X3BybmdfZmFpbCA9IG9ub2ZmOwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQot Kwl7Ci0rCUZJUFNfeDkzMV9zdGljaygxKTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfcmFu ZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwljdHgtPnNlZWRlZCA9IDA7 Ci0rCWN0eC0+a2V5ZWQgPSAwOwotKwljdHgtPnRlc3RfbW9kZSA9IDA7Ci0rCWN0eC0+Y291bnRl ciA9IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJY3R4LT5lcnJvciA9IDA7Ci0rCWN0eC0+dnBv cyA9IDA7Ci0rCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOwotKwlP UEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7Ci0rCX0KLSsJCi0rCi0r c3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQotKwl7Ci0rCWlmIChG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRVRf UFJOR19LRVksIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CWlmIChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKLSsJCXsK LSsJCS8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCi0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJ QUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7Ci0rCWlmIChr ZXlsZW4gPT0gMTYpCi0rCQl7Ci0rCQltZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKLSsJ CWN0eC0+a2V5ZWQgPSAyOwotKwkJfQotKwllbHNlCi0rCQljdHgtPmtleWVkID0gMTsKLSsJY3R4 LT5zZWVkZWQgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0r c3RhdGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGludCBzZWVkbGVuKQotKwl7Ci0rCXVu c2lnbmVkIGludCBpOwotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQlyZXR1cm4gMDsKLSsJLyogSW4g dGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCi0rCWlmIChjdHgtPnRlc3Rf bW9kZSkKLSsJCXsKLSsJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJcmV0 dXJuIDA7Ci0rCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCWN0 eC0+c2VlZGVkID0gMTsKLSsJCXJldHVybiAxOwotKwkJfQotKwkvKiBPdXRzaWRlIHRlc3QgbW9k ZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KLSsJZm9yIChpID0gMDsg aSA8IHNlZWRsZW47IGkrKykKLSsJCXsKLSsJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtp XTsKLSsJCWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQl7Ci0rCQkJY3R4 LT52cG9zID0gMDsKLSsJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxl bmd0aCBlcXVhbHMKLSsgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90 IG1hdGNoLgotKyAJCQkgKi8gCi0rCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKLSsJCQkJewotKwkJ CQlpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQotKwkJCQkJewotKwkJCQkJ UkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAotKwkJCQkJCVJBTkRfUl9QUk5HX1NF RURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKLSsJCQkJCXJldHVybiAwOwotKwkJCQkJfQotKwkJCQlP UEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7Ci0rCQkJCWN0eC0+a2V5ZWQgPSAxOwot KwkJCQl9Ci0rCQkJY3R4LT5zZWVkZWQgPSAxOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJuIDE7Ci0r CX0KLSsKLStzdGF0aWMgaW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgp Ci0rCXsKLSsJaWYgKGN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NF VF9URVNUX01PREUsUkFORF9SX1BSTkdfS0VZRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWN0 eC0+dGVzdF9tb2RlID0gMTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU194OTMxX3Rl c3RfbW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOwot Kwl9Ci0rCi0raW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKLSsJewotKwlyZXR1cm4gZmlw c19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSsJfQotKwotKwotK2ludCBGSVBTX3g5MzFfc2V0X2R0 KHVuc2lnbmVkIGNoYXIgKmR0KQotKwl7Ci0rCWlmICghc2N0eC50ZXN0X21vZGUpCi0rCQl7Ci0r CQlSQU5EZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RF KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19M RU5HVEgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2ln bmVkIGNoYXIgKmR0KQotKwl7Ci0rCWlmICghc2N0eC50ZXN0X21vZGUpCi0rCQl7Ci0rCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKLSsJ CXJldHVybiAwOwotKwkJfQotKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgp OwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBj aGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpCi0rCXsKLSsjaWZkZWYgT1BFTlNTTF9TWVNf V0lOMzIKLSsJRklMRVRJTUUgZnQ7Ci0rI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktT KQotKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOwotKyNlbHNlCi0rCXN0cnVjdCB0aW1ldmFs IHR2OwotKyNlbmRpZgotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXVuc2ln bmVkIGxvbmcgcGlkOwotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlH ZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikg KGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAo KGZ0LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBj aGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5z aWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsJYnVmWzRd ID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7Ci0rCWJ1Zls1XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsJYnVm WzZdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsK LSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAw eGZmKTsKLSsjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rCWNsb2NrX2dldHRp bWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHMu dHZfc2VjICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+ PiA4KSAmIDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4g MTYpICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAy NCkgJiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9uc2VjICYgMHhm Zik7Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZm KTsKLSsJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAxNikgJiAweGZm KTsKLSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAyNCkgJiAweGZm KTsKLSsjZWxzZQotKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOwotKwlidWZbMF0gPSAodW5zaWdu ZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikg KCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgo dHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0 di50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYu dHZfdXNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2Vj ID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMg Pj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMg Pj4gMjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoKnBj dHIgJiAweGZmKTsKLSsJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gOCkgJiAw eGZmKTsKLSsJYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDE2KSAmIDB4ZmYp OwotKwlidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMjQpICYgMHhmZik7Ci0r Ci0rCSgqcGN0cikrKzsKLSsKLSsKLSsjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwlw aWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7Ci0rCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikg KHBpZCAmIDB4ZmYpOwotKwlidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYg MHhmZik7Ci0rCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7 Ci0rCWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7Ci0rI2Vu ZGlmCi0rICAgIH0KLSsKLStzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgs Ci0rCQkJdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBpbnQgb3V0bGVuKQotKwl7Ci0rCXVu c2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJ dW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCWludCBpOwotKwlpZiAoY3R4 LT5lcnJvcikKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19F UlJPUik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPmtleWVkKQotKwkJewotKwkJ UkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKLSsJCXJldHVybiAw OwotKwkJfQotKwlpZiAoIWN0eC0+c2VlZGVkKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQ U19SQU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWZv ciAoOzspCi0rCQl7Ci0rCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCUZJUFNfZ2V0X3RpbWV2 ZWMoY3R4LT5EVCwgJmN0eC0+Y291bnRlcik7Ci0rCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAm Y3R4LT5rcyk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJ CXRtcFtpXSA9IElbaV0gXiBjdHgtPlZbaV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgt PmtzKTsKLSsJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1w W2ldID0gUltpXSBeIElbaV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3Mp OwotKwkJLyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KLSsJCWlmIChjdHgtPnNlY29uZCkKLSsJ CQl7Ci0rCQkJaWYgKGZpcHNfcHJuZ19mYWlsKQotKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBB RVNfQkxPQ0tfTEVOR1RIKTsKLSsJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9D S19MRU5HVEgpKQotKwkJCQl7Ci0rCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFO RF9SX1BSTkdfU1RVQ0spOwotKwkJCQljdHgtPmVycm9yID0gMTsKLSsJCQkJZmlwc19zZXRfc2Vs ZnRlc3RfZmFpbCgpOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCW1lbWNweShj dHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJaWYgKCFjdHgtPnNlY29uZCkKLSsJ CQl7Ci0rCQkJY3R4LT5zZWNvbmQgPSAxOwotKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJ CWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkK LSsJCQl7Ci0rCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0r Ci0rCQltZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCW91dCArPSBBRVNfQkxP Q0tfTEVOR1RIOwotKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7Ci0rCQl9Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0rCi0raW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwgaW50IGtleWxlbikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENS WVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBr ZXlsZW4pOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiBy ZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq a2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKLSsJewotKwlyZXR1cm4gRklQU194OTMxX3Nl dF9rZXkoa2V5LCBrZXlsZW4pOwotKwl9Ci0rCi0raW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZv aWQgKnNlZWQsIGludCBzZWVkbGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2so Q1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2Vl ZCwgc2VlZGxlbik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0 dXJuIHJldDsKLSsJfQotKwotKwotK2ludCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAq b3V0LCBpbnQgY291bnQpCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKLSsJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r aW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fcl9s b2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBzY3R4LnNlZWRlZDsKLSsJQ1JZUFRPX3Jf dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rdm9pZCBG SVBTX3g5MzFfcmVzZXQodm9pZCkKLSsJewotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JB TkQpOwotKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7Ci0rCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19SQU5EKTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX3NlZWQo Y29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCi0rCXsKLSsJRklQU194OTMxX3NlZWQoc2Vl ZCwgc2VlZGxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RvX3Jh bmRfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAotKwkJCQkJZG91YmxlIGFkZF9l bnRyb3B5KQotKwl7Ci0rCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwlyZXR1cm4g MTsKLSsJfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aD0KLSsg ICAgewotKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKLSsgICAgRklQU194OTMxX2J5dGVzLAotKyAg ICBGSVBTX3g5MzFfcmVzZXQsCi0rICAgIGZpcHNfZG9fcmFuZF9hZGQsCi0rICAgIEZJUFNfeDkz MV9ieXRlcywKLSsgICAgRklQU194OTMxX3N0YXR1cwotKyAgICB9OwotKwotK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpCi0rewotKyAgcmV0dXJuICZyYW5kX3g5MzFf bWV0aDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9maXBzX3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5o Ci0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDE0LTA1 LTA2IDE2OjI5OjUwLjU1MDkyMzMxNyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2ZpcHNfcmFuZC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUwOTIzMzE3ICswMjAwCi1AQCAt MCwwICsxLDE0NSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZm5kZWYgSEVB REVSX0ZJUFNfUkFORF9ICi0rI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKLSsKLSsjaW5jbHVk ZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2Vu ZGlmCi0rCi0raW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwg aW50IGtleWxlbik7Ci0raW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51 bSk7Ci0raW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRsZW4p OwotKwotK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU194OTMxX3Jl c2V0KHZvaWQpOwotK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLSsK LStpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQ U194OTMxX21ldGhvZCh2b2lkKTsKLSsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0eF9zdCBEUkJH X0NUWDsKLSsvKiBEUkJHIGV4dGVybmFsIGZsYWdzICovCi0rLyogRmxhZyBmb3IgQ1RSIG1vZGUg b25seTogdXNlIGRlcml2YXRpb24gZnVuY3Rpb24gY3RyX2RmICovCi0rI2RlZmluZQlEUkJHX0ZM QUdfQ1RSX1VTRV9ERgkJMHgxCi0rLyogUFJORyBpcyBpbiB0ZXN0IHN0YXRlICovCi0rI2RlZmlu ZQlEUkJHX0ZMQUdfVEVTVAkJCTB4MgotKwotK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0 eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAq ZGN0eCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0raW50IEZJUFNfZHJiZ19pbnN0 YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywg c2l6ZV90IHBlcnNsZW4pOwotK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCBj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0raW50IEZJUFNfZHJi Z19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0 bGVuLAotKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKwotK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50 aWF0ZShEUkJHX0NUWCAqZGN0eCk7Ci0rdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0 eCk7Ci0rCi0raW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlz aXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQs Ci0rCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2 b2lkICgqY2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs IHNpemVfdCBvbGVuKSwKLSsJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCi0rCXNpemVfdCAoKmdl dF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xlYW51 cF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikp OwotKwotK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAot KwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQp LAotKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCBvbGVuKSwKLSsJaW50ICgqcmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBj b25zdCB2b2lkICpidWYsIGludCBudW0pLAotKwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFgg KmN0eCwKLSsJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkpOwot KwotK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCk7Ci0rdm9pZCBG SVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsKLStz aXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IEZJ UFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpOwotK3ZvaWQgRklQU19kcmJnX3Nl dF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKLSt2b2lkIEZJ UFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwp OwotKwotK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KTsKLSsKLStE UkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpOwotK2NvbnN0IFJBTkRfTUVUSE9E ICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpOwotKwotKwotK2ludCBGSVBTX3JhbmRfc2V0X21ldGhv ZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCk7Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFu ZF9nZXRfbWV0aG9kKHZvaWQpOwotKwotK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0 cyk7Ci0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKTsKLSsKLSsvKiAxLjAuMCBjb21w YXQgZnVuY3Rpb25zICovCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOwotK2ludCBGSVBTX3JhbmRfc2VlZChj b25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLStpbnQgRklQU19yYW5kX2J5 dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwotK2ludCBG SVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOwot K2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLStpbnQgRklQU19yYW5k X3N0YXR1cyh2b2lkKTsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lk KTsKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZp cHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCi0tLS0gb3BlbnNz bC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMJMjAxNC0wNS0wNiAxNjoy OTo1MC41NTA5MjMzMTcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBz X3JhbmRfbGNsLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTA5MjMzMTcgKzAyMDAKLUBAIC0wLDAg KzEsMjE5IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9sY2wuaCAqLwotKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICov Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCBEUkJHX0hBU0hfQ1RYOwotK3R5 cGVkZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19ITUFDX0NUWDsKLSt0eXBlZGVmIHN0 cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOwotKwotKy8qIDg4OCBiaXRzIGZyb20g MTAuMSB0YWJsZSAyICovCi0rI2RlZmluZSBIQVNIX1BSTkdfTUFYX1NFRURMRU4JMTExCi0rCi0r c3RydWN0IGRyYmdfaGFzaF9jdHhfc3QKLSsJewotKwljb25zdCBFVlBfTUQgKm1kOwotKwlFVlBf TURfQ1RYIG1jdHg7Ci0rCXVuc2lnbmVkIGNoYXIgVltIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwot Kwl1bnNpZ25lZCBjaGFyIENbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKLSsJLyogVGVtcG9yYXJ5 IHZhbHVlIHN0b3JhZ2U6IHNob3VsZCBhbHdheXMgZXhjZWVkIG1heCBkaWdlc3QgbGVuZ3RoICov Ci0rCXVuc2lnbmVkIGNoYXIgdnRtcFtIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwotKwl9OwotKwot K3N0cnVjdCBkcmJnX2htYWNfY3R4X3N0Ci0rCXsKLSsJY29uc3QgRVZQX01EICptZDsKLSsJSE1B Q19DVFggaGN0eDsKLSsJdW5zaWduZWQgY2hhciBLW0VWUF9NQVhfTURfU0laRV07Ci0rCXVuc2ln bmVkIGNoYXIgVltFVlBfTUFYX01EX1NJWkVdOwotKwl9OwotKwotK3N0cnVjdCBkcmJnX2N0cl9j dHhfc3QKLSsJewotKwlBRVNfS0VZIGtzOwotKwlzaXplX3Qga2V5bGVuOwotKwl1bnNpZ25lZCBj aGFyIEtbMzJdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwkvKiBUZW1wIHZhcmlhYmxlcyB1 c2VkIGJ5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KLSsJQUVTX0tFWSBkZl9rczsKLSsJQUVTX0tF WSBkZl9reGtzOwotKwkvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFnZSB1c2VkIGJ5IGN0cl9kZiAq LwotKwl1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKLSsJc2l6ZV90IGJsdG1wX3BvczsKLSsJdW5z aWduZWQgY2hhciBLWFs0OF07Ci0rCX07Ci0rCi0rLyogRFJCRyBpbnRlcm5hbCBmbGFncyAqLwot KwotKy8qIEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIgbGlicmFyeSAqLwotKyNkZWZpbmUJ RFJCR19GTEFHX05PRVJSCQkJMHgxCi0rLyogQ3VzdG9tIHJlc2VlZCBjaGVja2luZyAqLwotKyNk ZWZpbmUJRFJCR19DVVNUT01fUkVTRUVECQkweDIKLSsKLSsvKiBEUkJHIHN0YXR1cyB2YWx1ZXMg Ki8KLSsvKiBub3QgaW5pdGlhbGlzZWQgKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQJMAotKy8qIG9rIGFuZCByZWFkeSB0byBnZW5lcmF0ZSByYW5kb20gYml0cyAqLwotKyNk ZWZpbmUgRFJCR19TVEFUVVNfUkVBRFkJCTEKLSsvKiByZXNlZWQgcmVxdWlyZWQgKi8KLSsjZGVm aW5lIERSQkdfU1RBVFVTX1JFU0VFRAkJMgotKy8qIGZhdGFsIGVycm9yIGNvbmRpdGlvbiAqLwot KyNkZWZpbmUgRFJCR19TVEFUVVNfRVJST1IJCTMKLSsKLSsvKiBBIGRlZmF1bHQgbWF4aW11bSBs ZW5ndGg6IGxhcmdlciB0aGFuIGFueSByZWFzb25hYmxlIHZhbHVlIHVzZWQgaW4gcHJhdGljZSAq LwotKwotKyNkZWZpbmUgRFJCR19NQVhfTEVOR1RICQkJMHg3ZmZmZmZmMAotKy8qIE1heGltdW0g RFJCRyBibG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBhcmUgYmlnZ2VyIHRoYW4gY2lwaGVyIGJs b2NrcyBzaXplcwotKyAqIHNvIHVzZSBtYXggZGlnZXN0IGxlbmd0aC4KLSsgKi8KLSsjZGVmaW5l IERSQkdfTUFYX0JMT0NLCQkJRVZQX01BWF9NRF9TSVpFCi0rCi0rI2RlZmluZSBEUkJHX0hFQUxU SF9JTlRFUlZBTAkJKDEgPDwgMjQpCi0rCi0rLyogRFJCRyBjb250ZXh0IHN0cnVjdHVyZSAqLwot KwotK3N0cnVjdCBkcmJnX2N0eF9zdAotKwl7Ci0rCS8qIEZpcnN0IHR5cGVzIGNvbW1vbiB0byBh bGwgaW1wbGVtZW50YXRpb25zICovCi0rCS8qIERSQkcgdHlwZTogYSBOSUQgZm9yIHRoZSB1bmRl cmx5aW5nIGFsZ29yaXRobSAqLwotKwlpbnQgdHlwZTsKLSsJLyogVmFyaW91cyBleHRlcm5hbCBm bGFncyAqLwotKwl1bnNpZ25lZCBpbnQgeGZsYWdzOwotKwkvKiBWYXJpb3VzIGludGVybmFsIHVz ZSBvbmx5IGZsYWdzICovCi0rCXVuc2lnbmVkIGludCBpZmxhZ3M7Ci0rCS8qIFVzZWQgZm9yIHBl cmlvZGljIGhlYWx0aCBjaGVja3MgKi8KLSsJaW50IGhlYWx0aF9jaGVja19jbnQsIGhlYWx0aF9j aGVja19pbnRlcnZhbDsKLSsKLSsJLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzZXR1 cCBieSBtZWNoYW5pc20gZHJiZ19pbml0KCkgY2FsbCAqLwotKwlpbnQgc3RyZW5ndGg7Ci0rCXNp emVfdCBibG9ja2xlbmd0aDsKLSsJc2l6ZV90IG1heF9yZXF1ZXN0OwotKwotKwlzaXplX3QgbWlu X2VudHJvcHksIG1heF9lbnRyb3B5OwotKwlzaXplX3QgbWluX25vbmNlLCBtYXhfbm9uY2U7Ci0r CXNpemVfdCBtYXhfcGVycywgbWF4X2FkaW47Ci0rCXVuc2lnbmVkIGludCByZXNlZWRfY291bnRl cjsKLSsJdW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKLSsJc2l6ZV90IHNlZWRsZW47Ci0r CWludCBzdGF0dXM7Ci0rCS8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5cGljYWxseSB1c2VkIGJ5IHRl c3QgZ2V0X2VudHJvcHkgKi8KLSsJdm9pZCAqYXBwX2RhdGE7Ci0rCS8qIEltcGxlbWVudGF0aW9u IHNwZWNpZmljIHN0cnVjdHVyZXMgKi8KLSsJdW5pb24gCi0rCQl7Ci0rCQlEUkJHX0hBU0hfQ1RY IGhhc2g7Ci0rCQlEUkJHX0hNQUNfQ1RYIGhtYWM7Ci0rCQlEUkJHX0NUUl9DVFggIGN0cjsKLSsJ CX0gZDsKLSsJLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0dXAgY2FsbGJhY2tzIGJlbG93ICov Ci0rCWludCAoKmluaXQpKERSQkdfQ1RYICpjdHgsIGludCBuaWQsIGludCBzZWN1cml0eSwgdW5z aWduZWQgaW50IGZsYWdzKTsKLSsJLyogSW50YW50aWF0ZSBQUk5HICovCi0rCWludCAoKmluc3Rh bnRpYXRlKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNp emVfdCBlbnRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9u Y2VsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsK LSsJLyogcmVzZWVkICovCi0rCWludCAoKnJlc2VlZCkoRFJCR19DVFggKmN0eCwKLSsJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAotKwkJCQljb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rCS8qIGdlbmVyYXQgb3V0cHV0ICovCi0r CWludCAoKmdlbmVyYXRlKShEUkJHX0NUWCAqY3R4LAotKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQs IHNpemVfdCBvdXRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGlubGVuKTsKLSsJLyogdW5pbnN0YW50aWF0ZSAqLwotKwlpbnQgKCp1bmluc3RhbnRpYXRlKShE UkJHX0NUWCAqY3R4KTsKLSsKLSsJLyogRW50cm9weSBzb3VyY2UgYmxvY2sgbGVuZ3RoICovCi0r CXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuOwotKwotKwkvKiBlbnRyb3B5IGdhdGhlcmluZyBmdW5j dGlvbiAqLwotKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQg Y2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1h eF9sZW4pOwotKwkvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIGVudHJvcHkgYnVm ZmVyICovCi0rCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOwotKwotKwkvKiBub25jZSBnYXRoZXJpbmcgZnVuY3Rp b24gKi8KLSsJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xl bik7Ci0rCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggbm9uY2UgYnVmZmVyICov Ci0rCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCBvbGVuKTsKLSsKLSsJLyogQ29udGludW91cyByYW5kb20gbnVtYmVyIHRlc3Qg dGVtcG9yYXJ5IGFyZWEgKi8KLSsJLyogTGFzdCBibG9jayAqLwkKLSsJdW5zaWduZWQgY2hhciBs YltFVlBfTUFYX01EX1NJWkVdOwotKwkvKiBzZXQgaWYgbGIgaXMgdmFsaWQgKi8KLSsJaW50IGxi X3ZhbGlkOwotKwotKwkvKiBDYWxsYmFja3MgdXNlZCB3aGVuIGNhbGxlZCB0aHJvdWdoIFJBTkQg aW50ZXJmYWNlICovCi0rCS8qIEdldCBhbnkgYWRkaXRpb25hbCBpbnB1dCBmb3IgZ2VuZXJhdGUg Ki8KLSsJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipw b3V0KTsKLSsJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0rCS8qIENhbGxiYWNrIGZvciBSQU5EX3NlZWQoKSwgUkFO RF9hZGQoKSAqLwotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZv aWQgKmJ1ZiwgaW50IG51bSk7Ci0rCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAot KwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KTsKLSsJfTsKLSsK LSsKLStpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KTsKLStpbnQgZmlwc19k cmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19obWFjX2luaXQo RFJCR19DVFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQg bmlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotK2ludCBmaXBzX2RyYmdfY3BybmdfdGVzdChEUkJH X0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KTsKLSsKLStjb25zdCBzdHJ1Y3Qg ZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKLSsKLStjb25zdCBzdHJ1 Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7Ci0rCi0rI2Rl ZmluZSBGSVBTX2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKLSsjZGVmaW5lIEZJUFNfZGlnZXN0 dXBkYXRlIEVWUF9EaWdlc3RVcGRhdGUKLSsjZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0Rp Z2VzdEZpbmFsCi0rI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9zaXplCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MDkyMzMx NyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYwky MDE0LTA1LTA2IDE2OjI5OjUwLjU1MDkyMzMxNyArMDIwMAotQEAgLTAsMCArMSwxOTEgQEAKLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0 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 U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1p bGFyIHRvIFJBTkQgZnVuY3Rpb25hbGl0eSBidXQgd2l0aG91dAotKyAqIEVOR0lORSBhbmQgYWRk aXRpb25hbCBjaGVja2luZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRob2RzLgotKyAqLwotKwotK3N0 YXRpYyBjb25zdCBSQU5EX01FVEhPRCAqZmlwc19yYW5kX21ldGggPSBOVUxMOwotK3N0YXRpYyBp bnQgZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOwotK3N0YXRpYyBpbnQgZmlwc19yYW5kX2Jp dHMgPSAwOwotKwotKy8qIEFsbG93cyBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2Yg Yml0cyBhbmQgdXNlcyBub24tRklQUyBtZXRob2RzICovCi0rdm9pZCBGSVBTX3JhbmRfc2V0X2Jp dHMoaW50IG5iaXRzKQotKwl7Ci0rCWZpcHNfcmFuZF9iaXRzID0gbmJpdHM7Ci0rCX0KLSsKLStp bnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpCi0rCXsKLSsJ aWYgKCFmaXBzX3JhbmRfYml0cykKLSsJCXsKLSsJCWlmIChtZXRoID09IEZJUFNfZHJiZ19tZXRo b2QoKSkKLSsJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDE7Ci0rCQllbHNlIGlmIChtZXRo ID09IEZJUFNfeDkzMV9tZXRob2QoKSkKLSsJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDI7 Ci0rCQllbHNlCi0rCQkJewotKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMDsKLSsJCQlp ZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKwkJCQl7Ci0rCQkJCUZJUFNlcnIoRklQU19GX0ZJUFNf UkFORF9TRVRfTUVUSE9ELAotKwkJCQkJCUZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJCQly ZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCX0KLSsJZmlwc19yYW5kX21ldGggPSBtZXRoOwot KwlyZXR1cm4gMTsKLSsJfQotKwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21l dGhvZCh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3JhbmRfbWV0aDsKLSsJfQotKwotK2NvbnN0 IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCi0rCXsKLSsJcmV0dXJuIEZJUFNf cmFuZF9nZXRfbWV0aG9kKCk7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQot Kwl7Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCkKLSsJ CWZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKCk7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3NlZWQo Y29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKLSsJewotKwlpZiAoIWZpcHNf YXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfUkFORF9TRUVELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnNl ZWQpCi0rCQlmaXBzX3JhbmRfbWV0aC0+c2VlZChidWYsbnVtKTsKLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLSt2b2lkIEZJUFNfcmFuZF9hZGQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUg ZW50cm9weSkKLSsJewotKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9k dWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9BREQsIEZJUFNf Ul9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuOwotKwkJfQotKwlpZiAoZmlwc19yYW5kX21l dGggJiYgZmlwc19yYW5kX21ldGgtPmFkZCkKLSsJCWZpcHNfcmFuZF9tZXRoLT5hZGQoYnVmLG51 bSxlbnRyb3B5KTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAq YnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKLSsJewotKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJ UFNfUkFORF9CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJ CX0KLSsJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5ieXRlcykKLSsJCXJl dHVybiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMoYnVmLG51bSk7Ci0rCXJldHVybiAwOwotKwl9Ci0r Ci0raW50IEZJUFNfcmFuZF9wc2V1ZG9fYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVt KQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9k ZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1BTRVVET19CWVRFUywgRklQ U19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKGZpcHNfcmFu ZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKQotKwkJcmV0dXJuIGZpcHNfcmFu ZF9tZXRoLT5wc2V1ZG9yYW5kKGJ1ZixudW0pOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLStpbnQg RklQU19yYW5kX3N0YXR1cyh2b2lkKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21l dGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19S QU5EX1NUQVRVUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0K LSsJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMpCi0rCQlyZXR1 cm4gZmlwc19yYW5kX21ldGgtPnN0YXR1cygpOwotKwlyZXR1cm4gMDsKLSsJfQotKwotKy8qIFJl dHVybiBpbnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJORy4gRm9yIERSQkcgdGhpcyBpcyBhbiBp bnRlcm5hbAotKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMxIFBSTkcgaXQgaXMgODAgYml0cyAoZnJv bSBTUDgwMC0xMzEpLiBBbnkgb3RoZXIKLSsgKiB0eXBlIG9mIFBSTkcgaXMgbm90IGFwcHJvdmVk IGFuZCByZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBtYXhpbXVtCi0rICogMjU2IG91dHNpZGUg RklQUyBtb2RlLgotKyAqLwotKwotK2ludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCkKLSsJewot KwlpZiAoZmlwc19yYW5kX2JpdHMpCi0rCQlyZXR1cm4gZmlwc19yYW5kX2JpdHM7Ci0rCWlmIChm aXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAxKQotKwkJcmV0dXJuIEZJUFNfZHJiZ19nZXRfc3Ry ZW5ndGgoRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpOwotKwllbHNlIGlmIChmaXBzX2FwcHJvdmVk X3JhbmRfbWV0aCA9PSAyKQotKwkJcmV0dXJuIDgwOwotKwllbHNlIGlmIChmaXBzX2FwcHJvdmVk X3JhbmRfbWV0aCA9PSAwKQotKwkJewotKwkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCQly ZXR1cm4gMDsKLSsJCWVsc2UKLSsJCQlyZXR1cm4gMjU2OwotKwkJfQotKwlyZXR1cm4gMDsKLSsJ fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwot LS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMJ MjAxNC0wNS0wNiAxNjoyOTo1MC41NTA5MjMzMTcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MDky MzMxNyArMDIwMAotQEAgLTAsMCArMSwxODMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5z aWduZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNo YXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZl Y3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsKLStzdGF0 aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSwweDY2LDB4 NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhk NCwweDYyLDB4MDJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2ID0gCi0rCXsK LSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4 NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKLSsJCQkJ LyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJ CSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICov Ci0rCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAotKwkJIDB4ODQs MHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfTsKLSsKLStzdGF0aWMgdW5z aWduZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPQotKwkJezB4MTUsMHhkOCwweDc4LDB4MGQsMHg2 MiwweGQzLDB4MjUsMHg2ZSwKLSsJCSAweDQ0LDB4NjQsMHgxMCwweDEzLDB4NjAsMHgyYiwweGE5 LDB4YmMsCi0rCQkgMHg0YSwweGZiLDB4Y2EsMHhlYiwweDRjLDB4OGIsMHg5OSwweDNifTsKLSsK LStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90diA9IAotKwl7Ci0rCQkJCS8qIERUICovCi0r CQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5 OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Yn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTcsMHgwNyww eGQ1LDB4MjgsMHgxOSwweDc5LDB4MWUsMHhlZiwKLSsJCSAweGE1LDB4MGMsMHhiZiwweDI1LDB4 ZTUsMHg1NiwweGI0LDB4OTN9Ci0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9rZXlbMzJdID0KLSsJCXsweDZkLDB4MTQsMHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQs Ci0rCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiwweDdhLDB4MDMsMHhiNywweDlmLAotKwkJIDB4MGMs MHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUsMHhiNSwKLSsJCSAweDIxLDB4MDUsMHg4Yyww eDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2 X3R2ID0KLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCww eGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4 ODh9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0r CQkJCS8qIFIgKi8KLSsJCXsweDM1LDB4YzcsMHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5LDB4YmMs Ci0rCQkgMHg4MiwweDc5LDB4OTksMHhmYiwweGQwLDB4YjMsMHgzYiwweDcyfQotKwl9OwotKwot K3ZvaWQgRklQU19jb3JydXB0X3JuZygpCi0rICAgIHsKLSsgICAgYWVzXzE5Ml90di5WWzBdKys7 Ci0rICAgIH0KLSsKLSsjZGVmaW5lIGZpcHNfeDkzMV90ZXN0KGtleSwgdHYpIFwKLSsJZG9feDkz MV90ZXN0KGtleSwgc2l6ZW9mIGtleSwgJnR2KQotKwotK3N0YXRpYyBpbnQgZG9feDkzMV90ZXN0 KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKLSsJCQlBRVNfUFJOR19UViAqdHYpCi0r CXsKLSsJdW5zaWduZWQgY2hhciBSWzE2XSwgVlsxNl07Ci0rCWludCBydiA9IDE7Ci0rCW1lbWNw eShWLCB0di0+Viwgc2l6ZW9mKFYpKTsKLSsJaWYgKCFGSVBTX3g5MzFfc2V0X2tleShrZXksIGtl eWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1Rf WDkzMSwga2V5bGVuLCBOVUxMKSkKLSsJCXJldHVybiAxOwotKwlpZiAoIWZpcHNfcG9zdF9jb3Jy dXB0KEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQotKwkJVlswXSsrOwotKwlGSVBTX3g5 MzFfc2VlZChWLCAxNik7Ci0rCUZJUFNfeDkzMV9zZXRfZHQodHYtPkRUKTsKLSsJRklQU194OTMx X2J5dGVzKFIsIDE2KTsKLSsJaWYgKG1lbWNtcChSLCB0di0+UiwgMTYpKQotKwkJewotKwkJZmlw c19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKTsKLSsJCXJ2ID0gMDsK LSsJCX0KLSsJZWxzZSBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9YOTMxLCBrZXls ZW4sIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBT X3NlbGZ0ZXN0X3g5MzEoKQotKwl7Ci0rCWludCBydiA9IDE7Ci0rCUZJUFNfeDkzMV9yZXNldCgp OwotKwlpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfU0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAw OwotKwkJfQotKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpKQot KwkJcnYgPSAwOwotKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2 KSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMjU2X2tleSwgYWVzXzI1 Nl90dikpCi0rCQlydiA9IDA7Ci0rCUZJUFNfeDkzMV9yZXNldCgpOwotKwlpZiAoIXJ2KQotKwkJ RklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQp OwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCkKLSsJ ewotKwlyZXR1cm4gRklQU19zZWxmdGVzdF94OTMxKCk7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUx OTIzMzQwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVz dC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUxOTIzMzQwICswMjAwCi1AQCAtMCwwICsxLDI1MCBA QAotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMg YW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5 cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRv IGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBm cmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAq IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0 aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90 IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQg d2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0 ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0 c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5k IGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0 byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwg RXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9y IG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRo ZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGlu IGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNr YWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0r ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGlj JyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAg IGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElm IHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0 aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29k ZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9V TkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF Ci0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMg KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAot KyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5 IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90 IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVk IGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRp bmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNs dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSAiZV9vcy5o IgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOwotKyAgICBy ZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWdu ZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIg UlsxNl07Ci0rCX0gQUVTX1BSTkdfTUNUOwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbWN0X2tleVsxNl0gPQotKwl7MHg5ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMs MHgzNCwweGI1LAotKwkgMHhkOCwweDJiLDB4ZTgsMHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsK LSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2ID0gewotKwkJCS8q IERUICovCi0rCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4MjksMHgwMiwweGJhLDB4M2IsCi0rCSAw eDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4YWN9LAotKwkJCS8qIFYgKi8KLSsJ ezB4NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcsMHg5NywKLSsJIDB4N2UsMHg3NCww eGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCi0rCQkJLyogUiAqLwotKwl7MHg0OCwweGU5 LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAotKwkgMHhlNCwweDU3LDB4OTAsMHhkNSww eGMzLDB4ZmMsMHg5YiwweDczfQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml9tY3Rfa2V5WzI0XSA9Ci0rCXsweGI3LDB4NmMsMHgzNCwweGQxLDB4MDksMHg2Nyww eGFiLDB4NzMsCi0rCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgsMHgxNiwweDBiLDB4OTEsCi0r CSAweGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4OGF9OwotKwotK3N0YXRpYyBj b25zdCBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4 ODQsMHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwKLSsJIDB4ODQsMHgzYywweDBh LDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCi0rCQkJLyogViAqLwotKwl7MHhiNiwweGFmLDB4 ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAotKwkgMHhkZCwweGM3LDB4N2EsMHhjMSwweGJi LDB4OTAsMHgzYSwweDZkfSwKLSsJCQkvKiBSICovCi0rCXsweGZjLDB4ODUsMHg2MCwweDlhLDB4 MjksMHg2ZiwweGVmLDB4MjEsCi0rCSAweGRkLDB4ODYsMHgyMCwweDMyLDB4OGEsMHgyOSwweDZm LDB4NDd9Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9r ZXlbMzJdID0KLSsJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgzYSwKLSsJ IDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKLSsJIDB4YjgsMHg3ZSww eGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKLSsJIDB4ODYsMHgzMiwweGZjLDB4MWYsMHg1 ZSwweDFkLDB4MWUsMHg1MH07Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMjU2 X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHgzMSwweDZlLDB4MzUsMHg5YSwweGIxLDB4 NDQsMHhmMCwweGVlLAotKwkgMHg2MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5MiwweDRj fSwKLSsJCQkvKiBWICovCi0rCXsweDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiwweDRkLDB4 YTEsCi0rCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAotKwkJCS8q IFIgKi8KLSsJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwKLSsJIDB4 ZTcsMHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0KLSt9OwotKwotK3N0YXRpYyB2 b2lkIGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikKLSsgICAgewotKyAgICB3aGls ZShuLS0gPiAwKQotKwl7Ci0rCXByaW50ZigiICUwMngiLCpiKyspOwotKwl9Ci0rICAgIH0KLSsK LStzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1 bnNpZ25lZCBjaGFyICpleHBlY3RlZCwKLSsJCSAgICBpbnQgbikKLSsgICAgewotKyAgICBpbnQg aTsKLSsKLSsgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQotKwlpZihyZXN1bHRbaV0gIT0gZXhw ZWN0ZWRbaV0pCi0rCSAgICB7Ci0rCSAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoi KTsKLSsJICAgIGR1bXAocmVzdWx0LG4pOwotKwkgICAgcHV0cygiXG4gICAgICAgICAgICAgICBl eHBlY3RlZDoiKTsKLSsJICAgIGR1bXAoZXhwZWN0ZWQsbik7Ci0rCSAgICBwdXRjaGFyKCdcbicp OwotKwkgICAgRVhJVCgxKTsKLSsJICAgIH0KLSsgICAgfQotKwotKwotK3N0YXRpYyB2b2lkIHJ1 bl90ZXN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKLSsJCQkJCQkJY29u c3QgQUVTX1BSTkdfTUNUICp0dikKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0s IGR0WzE2XTsKLSsgICAgaW50IGksIGo7Ci0rICAgIEZJUFNfeDkzMV9yZXNldCgpOwotKyAgICBG SVBTX3g5MzFfdGVzdF9tb2RlKCk7Ci0rICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVu KTsKLSsgICAgRklQU194OTMxX3NlZWQodHYtPlYsIDE2KTsKLSsgICAgbWVtY3B5KGR0LCB0di0+ RFQsIDE2KTsKLSsgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCi0rCXsKLSsgICAgCUZJ UFNfeDkzMV9zZXRfZHQoZHQpOwotKwlGSVBTX3g5MzFfYnl0ZXMoYnVmLCAxNik7Ci0rCS8qIElu Y3JlbWVudCBEVCAqLwotKwlmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCi0rCQl7Ci0rCQlkdFtq XSsrOwotKwkJaWYgKGR0W2pdKQotKwkJCWJyZWFrOwotKwkJfQotKwl9Ci0rCi0rICAgIGNvbXBh cmUoYnVmLHR2LT5SLCAxNik7Ci0rICAgIH0KLSsKLStpbnQgbWFpbigpCi0rCXsKLSsJcnVuX3Rl c3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBT IFBSTkcgdGVzdCAxIGRvbmVcbiIpOwotKwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAm YWVzXzE5Ml9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7Ci0r CXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7Ci0rCXByaW50 ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCi0t LS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIw MTQtMDUtMDYgMTY6Mjk6NTAuNTUxOTIzMzQwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MTkyMzM0 MCArMDIwMAotQEAgLTAsMCArMSw0NDQgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot KyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg bltdID0KLSsiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4MzhceEFD XHgyQlx4OURceEE4XHg3MSIKLSsiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4NDNceEE0 XHg0MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKLSsiXHgxRlx4QjhceERGXHhCQVx4QUZceDAz XHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKLSsiXHg0OFx4NzZceEVE XHg1Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIKLSsi XHg3Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhCN1x4RDlc eDNBXHgyNSIKLSsiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRc eEIyXHg0NVx4NDVceDk4XHgzOSIKLSsiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVc eDFGXHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKLSsiXHg3Rlx4RTJceDUzXHg3Mlx4OThc eENBXHgyQVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKLSsiXHhDQiI7Ci0r Ci0rc3RhdGljIGludCBjb3JydXB0X3JzYTsKLSsKLStzdGF0aWMgaW50IHNldHJzYWtleShSU0Eg KmtleSkKLSsgICAgewotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgx MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9Ci0rIlx4MDBceEE1 XHhEQVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0Qi Ci0rIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFc eDU3XHg5Nlx4NDEiCi0rIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVc eDc0XHg1RVx4NUNceDM5XHgyNlx4NjkiCi0rIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlc eDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCi0rIlx4QzlceDdGXHhGM1x4QURc eDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCi0rIlx4NDRc eEU1XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1XHhEMlx4 MEEiCi0rIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4 Q0VceENDXHg0OFx4OTQiCi0rIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4 NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCi0rIlx4QzEiOwotKwotKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBwW10gPQotKyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhC M1x4QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgotKyJceDAxXHg5OVx4RUJceDlGXHg0 NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgotKyJceDMyXHgx Mlx4NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4MDRceDBB IgotKyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJB XHg1OFx4RkJceDY1IgotKyJceDk5IjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgcVtdID0KLSsiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJc eDMzXHhFQVx4QUFceEQxXHhEOSIKLSsiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFc eEQwXHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKLSsiXHg4Nlx4OThceDQwXHhCNFx4MTZc eDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKLSsiXHhDRlx4Q0Vc eDMzXHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgxNSIK LSsiXHgwMyI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9Ci0r Ilx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2 XHg5QVx4NUEiCi0rIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0 XHhCMFx4NTFceEYyXHhCMVx4M0UiCi0rIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0 XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCi0rIlx4MjBceDJCXHgzOFx4RkNceDkx XHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOwotKwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQotKyJceDQ3XHgxRVx4MDJceDkwXHhG Rlx4MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgotKyJceDYxXHhB RFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3 IgotKyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0 XHg3QVx4MjJceDBEIgotKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5 XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKLSsgICAgCi0rICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGlxbXBbXSA9Ci0rIlx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgx OVx4OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCi0rIlx4QjNceDgwXHhGMlx4NzFceEY3XHgz NFx4NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCi0rIlx4OUZceEM5XHg4 Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCi0r Ilx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5 XHg4MFx4MzkiCi0rIlx4RjciOwotKwotKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9m KG4pLTEsIGtleS0+bik7Ci0rICAgIGlmIChjb3JydXB0X3JzYSkKLSsJQk5fc2V0X2JpdChrZXkt Pm4sIDEwMjQpOwotKyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ ZSk7Ci0rICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKLSsg ICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBrZXktPnApOwotKyAgICBrZXkt PnEgPSBCTl9iaW4yYm4ocSwgc2l6ZW9mKHEpLTEsIGtleS0+cSk7Ci0rICAgIGtleS0+ZG1wMSA9 IEJOX2JpbjJibihkbXAxLCBzaXplb2YoZG1wMSktMSwga2V5LT5kbXAxKTsKLSsgICAga2V5LT5k bXExID0gQk5fYmluMmJuKGRtcTEsIHNpemVvZihkbXExKS0xLCBrZXktPmRtcTEpOwotKyAgICBr ZXktPmlxbXAgPSBCTl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFtcCk7Ci0r ICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKLSsgICAg ewotKyAgICBjb3JydXB0X3JzYSA9IDE7Ci0rICAgIH0KLSsKLSsvKiBLbm93biBBbnN3ZXIgVGVz dCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcKLSsgKiBr YXRfdGJzLgotKyAqLwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9 ICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FUIjsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7Ci0rICAweDJELCAweEFGLCAw eDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAweEExLCAweEI5LCAweDQ2LCAweERBLCAweDBG LAotKyAgMHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhDMiwgMHg1NSwgMHgyNywgMHhFNCwgMHgx RCwgMHhEMiwgMHg5MCwgMHhCQiwKLSsgIDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4 NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4RjgsIDB4RDMsCi0rICAweEQxLCAweERGLCAw eEU3LCAweEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRD LAotKyAgMHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1 MSwgMHg2MCwgMHhEMCwgMHhBNywKLSsgIDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4 RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4RjUsCi0rICAweEI2LCAweEYzLCAw eEYyLCAweDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1 LAotKyAgMHgwQSwgMHhFOSwgMHg4RSwgMHgzOCwgMHhENywgMHgxOCwgMHhDNiwgMHgyQSwgMHgw RiwgMHhGOCwgMHhCNywgMHgzMSwKLSsgIDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4 ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEsIDB4RTgsCi0rICAweDIzLCAweEI1LCAw eDdGLCAweERDLCAweDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0 LAotKyAgMHgyNiwgMHhDNiwgMHg3OSwgMHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhBOQotK307 Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7 Ci0rICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVG LCAweEM1LCAweDU4LCAweEE3LAotKyAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5 QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKLSsgIDB4QjEsIDB4OUUsIDB4 RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcs Ci0rICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1 LCAweDU0LCAweDFDLCAweDg5LAotKyAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5 MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKLSsgIDB4QjEsIDB4RTYsIDB4 N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIs Ci0rICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0 LCAweDYyLCAweEQxLCAweEI1LAotKyAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhG OSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKLSsgIDB4NTgsIDB4RDIsIDB4 NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQs Ci0rICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFG LCAweDk1LCAweEMwLCAweDAwLAotKyAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhC MiwgMHhFRSwgMHhDMAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JT QV9QU1NfU0hBMjU2W10gPSB7Ci0rICAweDZELCAweDNELCAweEJFLCAweDhGLCAweDYwLCAweDZE LCAweDI1LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAweDg5LAotKyAgMHgwMCwgMHg5NywgMHhG QSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywgMHg4RiwK LSsgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIsIDB4OEQs IDB4N0QsIDB4NzMsIDB4MjgsCi0rICAweEMxLCAweDc3LCAweEM2LCAweDI3LCAweDk3LCAweDAw LCAweDhCLCAweDAwLCAweEEzLCAweDk2LCAweDczLCAweDRFLAotKyAgMHg3RCwgMHgyRSwgMHgy QywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0NywgMHgwNSwK LSsgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQs IDB4NkQsIDB4MjYsIDB4QkEsCi0rICAweDJGLCAweDdBLCAweDU0LCAweDUzLCAweDRFLCAweEVE LCAweDcxLCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAweEI2LAotKyAgMHgwQiwgMHg0NywgMHgz NCwgMHhBRiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwK LSsgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcs IDB4MTIsIDB4RTQsIDB4NkQsCi0rICAweDVGLCAweEI3LCAweDAxLCAweERGLCAweEMzLCAweDEx LCAweDZDLCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAweEY2LAotKyAgMHg3MiwgMHhGNCwgMHhG NiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7Ci0rICAweDQwLCAweEZCLCAweEEx LCAweDIxLCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAot KyAgMHhFQywgMHgxQywgMHhDNCwgMHhDOCwgMHg3QywgMHgyMiwgMHg2NSwgMHg5QywgMHg1Nywg MHg0NSwgMHhDRCwgMHg1RSwKLSsgIDB4ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4NzgsIDB4REUs IDB4REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4Q0QsCi0rICAweEFBLCAweDI1LCAweEY0 LCAweEIyLCAweEZDLCAweEYwLCAweDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAot KyAgMHg2RiwgMHgwMiwgMHhFRiwgMHhDMSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwg MHhEQywgMHg0MiwgMHg2QywKLSsgIDB4QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIs IDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4RkIsCi0rICAweDkxLCAweENBLCAweEY1 LCAweDcwLCAweEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAot KyAgMHgzQSwgMHhCRSwgMHg4OSwgMHgzOCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwg MHhBRCwgMHg0MiwgMHg4OSwKLSsgIDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4RkMs IDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4NkYsCi0rICAweDQ4LCAweEY2LCAweEFF LCAweEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAot KyAgMHg0OCwgMHg0NCwgMHhFRSwgMHgxRiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQotK307Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7Ci0r ICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAw eEFFLCAweDYzLCAweDhDLAotKyAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwg MHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKLSsgIDB4OUIsIDB4NTQsIDB4OUUs IDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCi0r ICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAw eDc5LCAweDIzLCAweDM5LAotKyAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwg MHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKLSsgIDB4N0MsIDB4RTMsIDB4N0Ys IDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCi0r ICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAw eEIwLCAweDg1LCAweDEzLAotKyAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwg MHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKLSsgIDB4MkQsIDB4NjAsIDB4RjUs IDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4RkUsCi0r ICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAweDdGLCAw eDgwLCAweEMyLCAweDg4LAotKyAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwg MHgxNCwgMHg4QgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9T SEExW10gPSB7Ci0rICAweDcxLCAweEVFLCAweDFBLCAweEMwLCAweEZFLCAweDAxLCAweDkzLCAw eDU0LCAweDc5LCAweDVDLCAweEYyLCAweDRDLAotKyAgMHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwg MHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKLSsgIDB4RTcs IDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4 OTAsIDB4Q0YsCi0rICAweERDLCAweDIyLCAweDM3LCAweDhFLCAweEQwLCAweEUxLCAweEFFLCAw eDA5LCAweEUzLCAweDNELCAweDFFLCAweEY4LAotKyAgMHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwg MHhFQywgMHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKLSsgIDB4MjAs IDB4MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4 MzAsIDB4QkEsCi0rICAweEE5LCAweDlFLCAweEU4LCAweEIxLCAweDhBLCAweDYyLCAweDE2LCAw eEJGLCAweDRFLCAweENBLCAweDJFLCAweDRFLAotKyAgMHhCQywgMHgyOSwgMHhBOCwgMHg2Nywg MHgxMywgMHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKLSsgIDB4MzUs IDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4 NDgsIDB4MUYsCi0rICAweDcyLCAweDA1LCAweERFLCAweEU2LCAweEU4LCAweDdGLCAweDMzLCAw eDhBLCAweDc2LCAweDRCLCAweDJGLCAweDk1LAotKyAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwg MHg4MCwgMHhEOSwgMHg0NiwgMHhCNAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKLSsgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgs IDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4RjksCi0rICAweDI1LCAweEJC LCAweEZBLCAweEQ0LCAweDNBLCAweDM0LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAweDE4LCAw eDhELAotKyAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwg MHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwKLSsgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIs IDB4NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCi0rICAweEE0LCAweDAy LCAweEFELCAweEIxLCAweDZELCAweDQ0LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAweDQxLCAw eEU1LAotKyAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwg MHg1RSwgMHgwQiwgMHhBOSwgMHhDQywKLSsgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDks IDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCi0rICAweDBCLCAweDQ0 LCAweDRDLCAweDQ2LCAweDk1LCAweEY0LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAweDNFLCAw eEIyLAotKyAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwg MHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwKLSsgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcsIDB4NUUs IDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCi0rICAweDQwLCAweDIx LCAweDg5LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAweDhECi0rfTsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0gewotKyAgMHgwRCwgMHg1NSwgMHhF MiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywK LSsgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAs IDB4N0IsIDB4QUEsIDB4MjMsCi0rICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1 LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAotKyAgMHg5OCwgMHgyRCwgMHg2 OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwK LSsgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEs IDB4OTAsIDB4MkQsIDB4MTgsCi0rICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5 LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAotKyAgMHhCRSwgMHgyMiwgMHhD NywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwK LSsgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUs IDB4ODEsIDB4QTYsIDB4MzgsCi0rICAweEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlE LCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAotKyAgMHgyNywgMHg0OCwgMHgy QiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwK LSsgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7Ci0rICAw eDFELCAweEUzLCAweDZBLCAweERELCAweDI3LCAweDRDLCAweEMwLCAweEE1LCAweDI3LCAweEVG LCAweEU2LCAweDFGLAotKyAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhC RCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywKLSsgIDB4NkYsIDB4MjIsIDB4MTYsIDB4 NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCi0rICAw eEE3LCAweDY1LCAweDUyLCAweDhBLCAweEM4LCAweDQ0LCAweDdFLCAweDg2LCAweDVELCAweEE5 LCAweEE2LCAweDU1LAotKyAgMHg2NSwgMHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhB OCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwKLSsgIDB4ODIsIDB4REQsIDB4N0UsIDB4 NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCi0rICAw eDFCLCAweDJCLCAweEIwLCAweDgyLCAweDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUyLCAweDdE LCAweEVCLCAweDhDLAotKyAgMHhGRiwgMHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0 RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwKLSsgIDB4RUEsIDB4ODUsIDB4RUUsIDB4 MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCi0rICAw eDE2LCAweDI4LCAweDI0LCAweDY0LCAweDA0LCAweDM5LCAweDJELCAweDU4LCAweDFFLCAweDM3 LCAweERDLCAweDA0LAotKyAgMHhCRCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1 NiwgMHhCRgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1 MTJbXSA9IHsKLSsgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4 OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCi0rICAweDQ5LCAweDI1LCAweDRBLCAweEExLCAw eDZBLCAweDc3LCAweDRDLCAweDM2LCAweDQwLCAweEY4LCAweEIyLCAweDlBLAotKyAgMHgxNSwg MHhFQSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgz MiwgMHhGMSwKLSsgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4 QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCi0rICAweDhELCAweENDLCAweEFDLCAweDhBLCAw eEJCLCAweDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUzLCAweDYyLCAweEI1LAotKyAgMHg4MCwg MHhFMiwgMHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5 MiwgMHg2QiwKLSsgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4 REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCi0rICAweDU5LCAweDU2LCAweEE1LCAweEI5LCAw eDVDLCAweEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYzLCAweDg0LCAweDA1LAotKyAgMHg2Riwg MHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhF MCwgMHgyRCwKLSsgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4 MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCi0rICAweERGLCAweDcwLCAweDE0LCAweEE1LCAw eDNGLCAweDM2LCAweEFCLCAweDg0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBrYXRfUlNBX1g5MzFfU0hBMVtdID0gewotKyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhE MSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKLSsgIDB4RTksIDB4 MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIs IDB4NzUsCi0rICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEyLCAweDFF LCAweDFFLCAweDE0LCAweEI4LCAweEFDLAotKyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1 QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKLSsgIDB4NzAsIDB4 RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUs IDB4RDYsCi0rICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3LCAweEI0LCAweDBFLCAweEND LCAweEIxLCAweDFBLCAweDExLCAweDE5LAotKyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhE RCwgMHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhENywKLSsgIDB4NkYsIDB4 NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMs IDB4OTksCi0rICAweDQ4LCAweEFGLCAweDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlCLCAweEIy LCAweERCLCAweEVBLCAweEVELCAweDc2LAotKyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0 RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2NywKLSsgIDB4QTMsIDB4 MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKLSsgIDB4N0UsIDB4 QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQsIDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQs IDB4ODksCi0rICAweEU1LCAweDUyLCAweDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2 LCAweDU4LCAweDkyLCAweDFDLCAweERELAotKyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhE MSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKLSsgIDB4MTYsIDB4 NzYsIDB4NjgsIDB4RjYsIDB4QzYsIDB4NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0IsIDB4Qzgs IDB4OUIsCi0rICAweEM2LCAweDUzLCAweDg4LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2 LCAweDEzLCAweEI4LCAweEYwLCAweDRCLAotKyAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgw NywgMHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKLSsgIDB4QUQsIDB4 NEUsIDB4NDksIDB4MkMsIDB4RDcsIDB4NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTksIDB4MDEs IDB4RUMsCi0rICAweDdFLCAweDc1LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2LCAweDg1 LCAweDQ2LCAweDhELCAweEEwLCAweDhDLAotKyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgw MywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKLSsgIDB4MjEsIDB4 RUQsIDB4OEQsIDB4QkMsIDB4QkMsIDB4REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIs IDB4REMsCi0rICAweEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0LCAweDgw Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0 W10gPSB7Ci0rICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDExLCAweDM4 LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAotKyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhC RCwgMHhFRiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwgMHgzNywgMHhDQiwKLSsgIDB4RTYsIDB4 NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUsIDB4MkUs IDB4RTMsCi0rICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlDLCAweDhF LCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAotKyAgMHg1NywgMHhDMiwgMHhCMCwgMHgwOCwgMHg1 MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2NiwgMHhFRSwgMHgzMSwKLSsgIDB4RDgsIDB4 NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQs IDB4RjEsCi0rICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4LCAweERELCAweDJCLCAweEQ1 LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAotKyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhCNywgMHhC RiwgMHg0NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwgMHg3QywgMHhGRiwKLSsgIDB4MEUsIDB4 MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIsIDB4NDQs IDB4MzUsCi0rICAweEVGLCAweDAxLCAweEU2LCAweDVFLCAweDM5LCAweDMxLCAweDJELCAweDcx LCAweEE1LCAweERDLCAweEM2LCAweDZELAotKyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhEQiwgMHg3 MywgMHg4MiwgMHg2NSwgMHgyOAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2F0X1JTQV9YOTMxX1NIQTUxMltdID0gewotKyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0 RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKLSsgIDB4RkMsIDB4 QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEs IDB4QUMsCi0rICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFB LCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAotKyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgw OSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKLSsgIDB4QTAsIDB4 OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4Rjgs IDB4QzUsCi0rICAweDZFLCAweDJCLCAweDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEw LCAweDM0LCAweDUzLCAweEQyLCAweEFGLAotKyAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3 OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKLSsgIDB4Q0UsIDB4 OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYs IDB4MDksCi0rICAweDlGLCAweDA5LCAweENBLCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVE LCAweDA0LCAweDJELCAweEZCLCAweDdDLAotKyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhD MywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKLSsgIDB4NjAsIDB4 ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKLSt9OwotKwotKwotK2ludCBG SVBTX3NlbGZ0ZXN0X3JzYSgpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCVJTQSAqa2V5OwotKwlF VlBfUEtFWSAqcGsgPSBOVUxMOwotKwotKwlpZiAoKGtleT1SU0FfbmV3KCkpID09IE5VTEwpCi0r CQlnb3RvIGVycjsKLSsJc2V0cnNha2V5KGtleSk7Ci0rCWlmICgocGs9RVZQX1BLRVlfbmV3KCkp ID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJRVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5 KTsKLSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVv ZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSks Ci0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0Eg U0hBMSBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEy MjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NU WF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEyMjQgUEtDUyMxIikpCi0rCQlnb3RvIGVy cjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYp LAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJS U0EgU0hBMjU2IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNB X1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkKLSsJCWdv dG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NI QTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJ CQkJIlJTQSBTSEE1MTIgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJ CWthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKLSsJCQkJRVZQX3No YTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMSBQU1MiKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywg c2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMjI0LCBzaXplb2Yoa2F0 X1JTQV9QU1NfU0hBMjI0KSwKLSsJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BTUywKLSsJCQkJIlJTQSBTSEEyMjQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0r CQkJCWthdF9SU0FfUFNTX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksCi0rCQkJ CUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjU2 IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEzODQs IHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQpLAotKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9D VFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTM4NCBQU1MiKSkKLSsJCWdvdG8gZXJyOwot KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90 YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hB NTEyKSwKLSsJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJ IlJTQSBTSEE1MTIgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsKLSsKLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0 X1JTQV9YOTMxX1NIQTEsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMSksCi0rCQkJRVZQX3NoYTEo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBMSBYOTMxIikpCi0rCQln b3RvIGVycjsKLSsJLyogTkI6IFNIQTIyNCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCi0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2 KSwKLSsJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNB IFNIQTI1NiBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMx X1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQpLAotKwkJCUVWUF9zaGEzODQoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkKLSsJCWdv dG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yoa2F0X1JT QV9YOTMxX1NIQTUxMiksCi0rCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEsCi0rCQkJIlJTQSBTSEE1MTIgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCi0rCi0rCXJldCA9 IDE7Ci0rCi0rCWVycjoKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCWVsc2Ug aWYgKGtleSkKLSsJCVJTQV9mcmVlKGtleSk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5k aWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2Zp cHNfcnNhX3g5MzFnLmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JzYV94 OTMxZy5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTE5MjMzNDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMTQtMDUtMDYgMTY6Mjk6 NTAuNTUxOTIzMzQwICswMjAwCi1AQCAtMCwwICsxLDI4MiBAQAotKy8qIGNyeXB0by9yc2EvcnNh X2dlbi5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNy eXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFj a2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcg KGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4g c28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJy YXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25n IGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBk aXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBj b2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBp bmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29w eXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3Vu ZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBh cmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBw cm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRo ZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4g YmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9y Ci0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGgg dGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAg ICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0 b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5 Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0r ICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJp dmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNh dGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg RVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICog REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAot KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0Uu Ci0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1 YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29k ZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsg KiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICog W2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8 c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHRpbWUuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rCi0rZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7Ci0rI2Vu ZGlmCi0rCi0rLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCi0r Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpw MiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNv bnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fR0VOQ0IgKmNiKQotKwl7Ci0rCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwq cjM9TlVMTDsKLSsJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxMOwotKwotKwlpZiAoIXJzYSkg Ci0rCQlnb3RvIGVycjsKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkgCi0r CQlnb3RvIGVycjsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCi0rCXIwID0gQk5fQ1RYX2dldChj dHgpOwotKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0r CXIzID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAocjMgPT0gTlVMTCkKLSsJCWdvdG8gZXJy OwotKwlpZiAoIXJzYS0+ZSkKLSsJCXsKLSsJCXJzYS0+ZSA9IEJOX2R1cChlKTsKLSsJCWlmICgh cnNhLT5lKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwllbHNlCi0rCQllID0gcnNhLT5lOwotKwot KwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdl IGNhbi4KLSsJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZl IHBhcmFtZXRlcnMuCi0rCSAqLwotKwotKwlpZiAoWHAgJiYgIXJzYS0+cCkKLSsJCXsKLSsJCXJz YS0+cCA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnApCi0rCQkJZ290byBlcnI7Ci0rCi0rCQlp ZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAotKwkJCQkJWHAsIFhw MSwgWHAyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKFhxICYm ICFyc2EtPnEpCi0rCQl7Ci0rCQlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJCWlmICghcnNhLT5xKQot KwkJCWdvdG8gZXJyOwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHEx LCBxMiwKLSsJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7Ci0r CQl9Ci0rCi0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0 eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJcmV0dXJuIDI7Ci0rCQl9Ci0rCi0rCS8qIFNp bmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmlu ZyAKLSsJICogY29tcG9uZW50cy4KLSsJICovCi0rCi0rCS8qIGNhbGN1bGF0ZSBuICovCi0rCXJz YS0+bj1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+biA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlm ICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJ LyogY2FsY3VsYXRlIGQgKi8KLSsJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgp KSkKLSsJCWdvdG8gZXJyOwkvKiBwLTEgKi8KLSsJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3Zh bHVlX29uZSgpKSkKLSsJCWdvdG8gZXJyOwkvKiBxLTEgKi8KLSsJaWYgKCFCTl9tdWwocjAscjEs cjIsY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCi0rCi0rCWlmICghQk5fZ2Nk KHIzLCByMSwgcjIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9kaXYocjAsIE5V TEwsIHIwLCByMywgY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KLSsK LSsJY3R4MiA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgyKQotKwkJZ290byBlcnI7Ci0rCi0r CXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLwotKwlp ZiAocnNhLT5kID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgbW9k IChwLTEpICovCi0rCXJzYS0+ZG1wMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1wMSA9PSBOVUxM KQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkK LSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KLSsJcnNhLT5k bXExPUJOX25ldygpOwotKwlpZiAocnNhLT5kbXExID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0r CS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KLSsJcnNhLT5pcW1wPUJOX21vZF9p bnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKLSsKLSsJZXJyOgotKwlpZiAoY3R4KQot KwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsJ aWYgKGN0eDIpCi0rCQlCTl9DVFhfZnJlZShjdHgyKTsKLSsJLyogSWYgdGhpcyBpcyBzZXQgYWxs IGNhbGxzIHN1Y2Nlc3NmdWwgKi8KLSsJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKLSsJ CXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwotK2ludCBSU0FfWDkzMV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNC ICpjYikKLSsJewotKwlpbnQgb2sgPSAwOwotKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVM TDsKLSsJQk5fQ1RYICpjdHggPSBOVUxMOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYg KEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAm JiAKLSsJCShiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1Jf S0VZX1RPT19TSE9SVCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYgKGJpdHMg JiAweGZmKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVf S0VZX0VYLEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAg ICB9Ci0rCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBT ZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKyNlbmRpZgotKwotKwljdHggPSBC Tl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KQotKwkJZ290byBlcnJvcjsKLSsKLSsJQk5fQ1RYX3N0 YXJ0KGN0eCk7Ci0rCVhwID0gQk5fQ1RYX2dldChjdHgpOwotKwlYcSA9IEJOX0NUWF9nZXQoY3R4 KTsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0eCkpCi0rCQln b3RvIGVycm9yOwotKwotKwlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJcnNhLT5xID0gQk5fbmV3KCk7 Ci0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQlnb3RvIGVycm9yOwotKwotKwkvKiBHZW5l cmF0ZSB0d28gcHJpbWVzIGZyb20gWHAsIFhxICovCi0rCi0rCWlmICghQk5fWDkzMV9nZW5lcmF0 ZV9wcmltZV9leChyc2EtPnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhwLAotKwkJCQkJZSwg Y3R4LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJp bWVfZXgocnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcSwKLSsJCQkJCWUsIGN0eCwg Y2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogU2luY2UgcnNhLT5wIGFuZCByc2EtPnEgYXJl IHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCi0rCSAqIHJlbWFpbmluZyBSU0EgY29t cG9uZW50cy4KLSsJICovCi0rCi0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgZSwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm KCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKwkgICAgZ290byBlcnJvcjsKLSsjZW5kaWYKLSsKLSsJ b2sgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4 KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCi0rCWlmIChvaykKLSsJCXJldHVybiAx OwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBz L2ZpcHNfc2hhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBz X3NoYV9zZWxmdGVzdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTE5MjMzNDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTUxOTIzMzQwICswMjAwCi1AQCAtMCwwICsxLDE0MCBAQAotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3NoYS5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgY29uc3QgY2hh ciB0ZXN0W11bNjBdPQotKyAgICB7Ci0rICAgICIiLAotKyAgICAiYWJjIiwKLSsgICAgImFiY2Ri Y2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgotKyAg ICB9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVO R1RIXT0KLSsgICAgewotKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4ZWUsMHg1ZSwweDZiLDB4NGIs MHgwZCwweDMyLDB4NTUsCi0rICAgICAgMHhiZiwweGVmLDB4OTUsMHg2MCwweDE4LDB4OTAsMHhh ZiwweGQ4LDB4MDcsMHgwOSB9LAotKyAgICB7IDB4YTksMHg5OSwweDNlLDB4MzYsMHg0NywweDA2 LDB4ODEsMHg2YSwweGJhLDB4M2UsCi0rICAgICAgMHgyNSwweDcxLDB4NzgsMHg1MCwweGMyLDB4 NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9LAotKyAgICB7IDB4ODQsMHg5OCwweDNlLDB4NDQsMHgx YywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCi0rICAgICAgMHg0YSwweGExLDB4ZjksMHg1MSww eDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAotKyAgICB9OwotKwotK3N0YXRpYyBpbnQg Y29ycnVwdF9zaGE7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCi0rICAgIHsKLSsgICAg Y29ycnVwdF9zaGEgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCi0r ICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXpl b2YodGVzdFswXSkgOyArK24pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xF TkdUSF07Ci0rCi0rCUVWUF9EaWdlc3QodGVzdFtuXSxzdHJsZW4odGVzdFtuXSkrY29ycnVwdF9z aGEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOwotKwlpZihtZW1jbXAobWQscmV0W25dLHNp emVvZiBtZCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NI QTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJ fQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IG1zZ19zaGEyNTZbXSA9IHsgMHhmYSwgMHg0OCwgMHg1OSwgMHgyYSwgMHhlMSwgMHhhZSwgMHgx ZiwgMHgzMCwKLSsJCQkJCSAgICAweGZjIH07Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZGlnX3NoYTI1NltdID0geyAweGY3LCAweDI2LCAweGQ4LCAweDk4LCAweDQ3LCAweDkxLCAweDY4 LCAweDViLAotKwkJCQkJICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUsIDB4 YmYsIDB4MDEsCi0rCQkJCQkgICAgMHgxNywgMHgwYywgMHg4NCwgMHgwMCwgMHgwMSwgMHg3YSwg MHg5NCwgMHg4MywKLSsJCQkJCSAgICAweGYzLCAweDBiLCAweDE1LCAweDg0LCAweDRiLCAweDY5 LCAweDg4LCAweDhhIH07Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTUx MltdID0geyAweDM3LCAweGQxLCAweDM1LCAweDlkLCAweDE4LCAweDQxLCAweGU5LCAweGI3LAot KwkJCQkJICAgIDB4NmQsIDB4OWEsIDB4MTMsIDB4ZGEsIDB4NWYsIDB4ZjMsIDB4YmQgfTsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhNTEyW10gPSB7IDB4MTEsIDB4MTMsIDB4 YzQsIDB4MTksIDB4ZWQsIDB4MmIsIDB4MWQsIDB4MTYsCi0rCQkJCQkgICAgMHgxMSwgMHhlYiwg MHg5YiwgMHhiZSwgMHhmMCwgMHg3ZiwgMHhjZiwgMHg0NCwKLSsJCQkJCSAgICAweDhiLCAweGQ3 LCAweDU3LCAweGJkLCAweDhkLCAweGE5LCAweDI1LCAweGIwLAotKwkJCQkJICAgIDB4NDcsIDB4 MjUsIDB4ZDYsIDB4NmMsIDB4OWEsIDB4NTQsIDB4N2YsIDB4OGYsCi0rCQkJCQkgICAgMHgwYiwg MHg1MywgMHgxYSwgMHgxMCwgMHg2OCwgMHgzMiwgMHgwMywgMHgzOCwKLSsJCQkJCSAgICAweDgy LCAweGM0LCAweDg3LCAweGM0LCAweGVhLCAweDBlLCAweGQxLCAweDA0LAotKwkJCQkJICAgIDB4 YTksIDB4OTgsIDB4YzEsIDB4MDUsIDB4YTMsIDB4ZjMsIDB4ZjgsIDB4YjEsCi0rCQkJCQkgICAg MHhhZiwgMHhiYywgMHhkOSwgMHg3OCwgMHg3ZSwgMHhlZSwgMHgzZCwgMHg0MyB9OwotKwotK2lu dCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCkKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTUx Ml9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQX0RpZ2VzdChtc2dfc2hhMjU2LCBzaXplb2YobXNn X3NoYTI1NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpOwotKwlpZihtZW1jbXAoZGln X3NoYTI1NiwgbWQsIHNpemVvZihkaWdfc2hhMjU2KSkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwot KwkJfQotKwotKwlFVlBfRGlnZXN0KG1zZ19zaGE1MTIsIHNpemVvZihtc2dfc2hhNTEyKSwgbWQs IE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChkaWdfc2hhNTEyLCBtZCwg c2l6ZW9mKGRpZ19zaGE1MTIpKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9T RVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCXJl dHVybiAxOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Zp cHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBz L2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MTkyMzM0 MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9o bWFjLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTE5MjMzNDAgKzAyMDAKLUBAIC0wLDAgKzEsMjM2 IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0r I2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2htYWMuaD4KLSsKLSsjaWZuZGVmIEZJUFNDQU5JU1RFUl9PCi0raW50IEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkgeyByZXR1cm4gMDsgfQotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVj aygpIHt9Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBibl9tdWxfbW9u dF9mcHU2NChCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcg KmJwLCBjb25zdCBCTl9VTE9ORyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkgeyBy ZXR1cm4gMDsgfTsKLStpbnQgYm5fbXVsX21vbnRfaW50KEJOX1VMT05HICpycCwgY29uc3QgQk5f VUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsIGNvbnN0IEJOX1VMT05HICpucCwgY29uc3Qg Qk5fVUxPTkcgKm4wLCBpbnQgbnVtKSB7IHJldHVybiAwOyB9OwotKwotKyNpZglkZWZpbmVkKF9f aTM4NikgICB8fCBkZWZpbmVkKF9faTM4Nl9fKSAgIHx8IGRlZmluZWQoX01fSVg4NikgfHwgXAot KwlkZWZpbmVkKF9fSU5URUxfXykgfHwgXAotKwlkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVk KF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQotKwot K3Vuc2lnbmVkIGludCAgT1BFTlNTTF9pYTMyY2FwX1BbMl07Ci0rdW5zaWduZWQgbG9uZyAqT1BF TlNTTF9pYTMyY2FwX2xvYyh2b2lkKQotK3sgICBpZiAoc2l6ZW9mKGxvbmcpPT00KQotKwkvKgot KwkgKiBJZiAzMi1iaXQgYXBwbGljYXRpb24gcHVsbHMgYWRkcmVzcyBvZiBPUEVOU1NMX2lhMzJj YXBfUFswXQotKwkgKiBjbGVhciBzZWNvbmQgZWxlbWVudCB0byBtYWludGFpbiB0aGUgaWxsdXNp b24gdGhhdCB2ZWN0b3IKLSsJICogaXMgMzItYml0LgotKwkgKi8KLSsJT1BFTlNTTF9pYTMyY2Fw X1BbMV09MDsKLSsgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nICopT1BFTlNTTF9pYTMyY2FwX1A7 Ci0rfQotKwotKyNpZiBkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKSAmJiAhZGVmaW5lZChPUEVO U1NMX05PX0FTTSkgJiYgIWRlZmluZWQoSTM4Nl9PTkxZKQotKyNkZWZpbmUgT1BFTlNTTF9DUFVJ RF9TRVRVUAotKyNpZiBkZWZpbmVkKF9XSU4zMikKLSt0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQg SUEzMkNBUDsKLSsjZWxzZQotK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElBMzJDQVA7Ci0r I2VuZGlmCi0rdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCi0reyBzdGF0aWMgaW50IHRy aWdnZXI9MDsKLSsgIElBMzJDQVAgT1BFTlNTTF9pYTMyX2NwdWlkKHZvaWQpOwotKyAgSUEzMkNB UCB2ZWM7Ci0rICBjaGFyICplbnY7Ci0rCi0rICAgIGlmICh0cmlnZ2VyKQlyZXR1cm47Ci0rCi0r ICAgIHRyaWdnZXI9MTsKLSsgICAgaWYgKChlbnY9Z2V0ZW52KCJPUEVOU1NMX2lhMzJjYXAiKSkp IHsKLSsJaW50IG9mZiA9IChlbnZbMF09PSd+Jyk/MTowOwotKyNpZiBkZWZpbmVkKF9XSU4zMikK LSsJaWYgKCFzc2NhbmYoZW52K29mZiwiJUk2NGkiLCZ2ZWMpKSB2ZWMgPSBzdHJ0b3VsKGVuditv ZmYsTlVMTCwwKTsKLSsjZWxzZQotKwlpZiAoIXNzY2FuZihlbnYrb2ZmLCIlbGxpIiwobG9uZyBs b25nICopJnZlYykpIHZlYyA9IHN0cnRvdWwoZW52K29mZixOVUxMLDApOwotKyNlbmRpZgotKwlp ZiAob2ZmKSB2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoKSZ+dmVjOwotKyAgICB9Ci0rICAgIGVs c2UKLSsJdmVjID0gT1BFTlNTTF9pYTMyX2NwdWlkKCk7Ci0rCi0rICAgIC8qCi0rICAgICAqIHwo MTw8MTApIHNldHMgYSByZXNlcnZlZCBiaXQgdG8gc2lnbmFsIHRoYXQgdmFyaWFibGUKLSsgICAg ICogd2FzIGluaXRpYWxpemVkIGFscmVhZHkuLi4gVGhpcyBpcyB0byBhdm9pZCBpbnRlcmZlcmVu Y2UKLSsgICAgICogd2l0aCBjcHVpZCBzbmlwcGV0cyBpbiBFTEYgLmluaXQgc2VnbWVudC4KLSsg ICAgICovCi0rICAgIE9QRU5TU0xfaWEzMmNhcF9QWzBdID0gKHVuc2lnbmVkIGludCl2ZWN8KDE8 PDEwKTsKLSsgICAgT1BFTlNTTF9pYTMyY2FwX1BbMV0gPSAodW5zaWduZWQgaW50KSh2ZWM+PjMy KTsKLSt9Ci0rI2VuZGlmCi0rCi0rI2Vsc2UKLSt1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJj YXBfbG9jKHZvaWQpIHsgcmV0dXJuIE5VTEw7IH0KLSsjZW5kaWYKLStpbnQgT1BFTlNTTF9OT05Q SUNfcmVsb2NhdGVkID0gMDsKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9DUFVJRF9TRVRVUCkgJiYg IWRlZmluZWQoT1BFTlNTTF9DUFVJRF9PQkopCi0rdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZv aWQpIHt9Ci0rI2VuZGlmCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1Nl9DVFggKm1k X2N0eCxTSEEyNTZfQ1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAg ewotKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWdu ZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBh ZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJ ewotKwlTSEEyNTZfSW5pdChtZF9jdHgpOwotKwlTSEEyNTZfVXBkYXRlKG1kX2N0eCxrZXksbGVu KTsKLSsJU0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0rCWxlbj1TSEEyNTZfRElHRVNUX0xF TkdUSDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXltZCxrZXksbGVuKTsKLSsgICAgbWVt c2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7Ci0rCi0rICAgIGZv cihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHgzNl5rZXlt ZFtpXTsKLSsgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShtZF9j dHgscGFkLFNIQTI1Nl9DQkxPQ0spOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01E X0NCTE9DSyA7IGkrKykKLSsJcGFkW2ldPTB4NWNea2V5bWRbaV07Ci0rICAgIFNIQTI1Nl9Jbml0 KG9fY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7Ci0r ICAgIH0KLSsKLStzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNIQTI1 Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBj aGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIFNIQTI1Nl9GaW5hbChidWYs bWRfY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7Ci0rICAg IFNIQTI1Nl9GaW5hbChtZCxvX2N0eCk7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLSsKLStpbnQgbWFp bihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsK LSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2MgPCAyKQotKwl7Ci0rCWZwcmlu dGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsK LSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5IikpCi0rCXsKLSsJ bisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KLSsJfQot KwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlGSUxFICpmPWZvcGVuKGFyZ3Zb bl0sInJiIik7Ci0rCVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNpZ25lZCBjaGFyIG1k W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkgICAgewot KwkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsKLSsJaG1h Y19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsKLSsJICAg IGNoYXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1Zixm KTsKLSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJCSAgICB7 Ci0rCQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMjU2X1VwZGF0ZSgmbWRfY3R4LGJ1 ZixsKTsKLSsJICAgIH0KLSsJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7Ci0rCi0rCWlm IChiaW5hcnkpCi0rCSAgICB7Ci0rCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJR0VTVF9MRU5HVEgs MSxzdGRvdXQpOwotKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KLSsJ ICAgIH0KLSsKLSsvKglwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7ICovCi0rCWZv cihpPTAgOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEggOyArK2kpCi0rCSAgICBwcmludGYoIiUw MngiLG1kW2ldKTsKLSsJcHJpbnRmKCJcbiIpOwotKwl9Ci0rI2VuZGlmCi0rICAgIHJldHVybiAw OwotKyAgICB9Ci0rCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBz X3Rlc3Rfc3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9z dWl0ZS5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMu ZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MjkyMzM2MyArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUy OTIzMzYzICswMjAwCi1AQCAtMCwwICsxLDU4OCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICoKLSsgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZl ciBmb3IgdGhlIEZJUFMtMTQwIHRlc3RpbmcKLSsgKiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2 YWxpZGF0aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCi0rICogT3BlblNTTCBs aWJyYXJ5IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhpYwotKyAq IGZ1bmN0aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxp YmVyYXRlbHkKLSsgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFzaAotKyAq Ci0rICogQ29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCi0rICoKLSsgKi8KLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0r I2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9k aC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQ UwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rICAgIHsKLSsgICAgcHJpbnRm KCJObyBGSVBTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rICAgIH0KLSsjZWxzZQot KwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsK LSsvKiBBRVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2ZXJpZnkgcmVz dWx0IG1hdGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0Ci0rKi8KLStzdGF0aWMgaW50IEZJUFNfYWVz X3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBwbHRtcFsx Nl07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGtleVsxNl0g PSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKLSsJdW5zaWduZWQg Y2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOwotKwlFVlBfQ0lQSEVSX0NUWCBj dHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCi0rCQln b3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7Ci0rCWlm IChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5V TEwsIDApIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0 bXAsIDE2KTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCi0rCQlnb3RvIGVy cjsKLSsJcmV0ID0gMTsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwot KwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2b2lkKQot Kwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOwotKwl1bnNpZ25l ZCBjaGFyIGNpdG1wWzhdOwotKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsgMSwyLDMsNCw1 LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCi0rCQkgICAgICAgICAgICAgIDE5 LDIwLDIxLDIyLDIzLDI0fTsKLSsgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10gPSB7ICdl JywgJ3QnLCAnYScsICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07Ci0rCUVWUF9DSVBIRVJfQ1RY IGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0 X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCi0r CQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4KTsKLSsJ aWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXks IE5VTEwsIDApIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwg Y2l0bXAsIDgpOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQotKwkJZ290byBl cnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsK LSsJcmV0dXJuIHJldDsKLSsJfQotKwotKy8qCi0rICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBz aWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19kc2Ff dGVzdChpbnQgYmFkKQotKyAgICB7Ci0rICAgIERTQSAqZHNhID0gTlVMTDsKLSsgICAgRVZQX1BL RVkgcGs7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAg IHVuc2lnbmVkIGNoYXIgYnVmWzYwXTsKLSsgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rICAgIGlu dCByID0gMDsKLSsgICAgRVZQX01EX0NUWCBtY3R4OwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAgZHNhID0gRFNBX25ldygpOwot KyAgICBpZiAoIWRzYSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFt ZXRlcnNfZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCWdvdG8gZW5kOwot KyAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmIChi YWQpCi0rCSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwotKyAgICBway50eXBl ID0gRVZQX1BLRVlfRFNBOwotKyAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsKLSsgICAgaWYgKCFF VlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsg ICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCi0r CWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZw aykpCi0rCWdvdG8gZW5kOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBF VlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0 ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICByID0g RVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVuZDoKLSsgICAg RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGRzYSkKLSsgIAkgIERTQV9mcmVl KGRzYSk7Ci0rICAgIGlmIChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsg ICAgfQotKwotKy8qCi0rICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5w dXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQot KyAgICB7Ci0rICAgIFJTQSAqa2V5OwotKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0ZXh0W10g PSAiZXRhb25yaXNoZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKLSsgICAgdW5z aWduZWQgaW50IHNsZW47Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsK LSsgICAgRVZQX1BLRVkgcGs7Ci0rICAgIGludCByID0gMDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vy cm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAgIGtleSA9IFJTQV9uZXco KTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1cm4g MDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVf a2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4p OwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKLSsKLSsgICAg cGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsgICAgcGsucGtleS5yc2EgPSBrZXk7Ci0rCi0rICAg IGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsJZ290byBl bmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2Yo aW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduRmluYWwo Jm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCi0rCWdvdG8gZW5kOwotKwotKyAgICBpZiAoIUVWUF9W ZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAg IGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9w dGV4dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgs IGJ1Ziwgc2xlbiwgJnBrKTsKLSsgICAgZW5kOgotKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1j dHgpOwotKyAgICBpZiAoa2V5KQotKyAgCSAgICBSU0FfZnJlZShrZXkpOwotKyAgICBpZiAociAh PSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEExOiBn ZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgot KyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTFf dGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5H VEhdID0KLSsgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywgMHgxYSwgMHgx ZSwgMHg4ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwgMHgyYywg MHhlOCwgMHhiMywgMHhjNSwgMHgxOCB9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0 YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsK LSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6 ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAg IGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKLSsgICAgewot KyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQotKwl7MHhm NSwgMHg1MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAw eGM5LCAweDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkxLAotKwkgMHg2LCAweGVjLCAweDhlLCAw eDExLCAweDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2LCAweDUw LCAweDRmLCAweDQ3LCAweDU3fTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJp c2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0r Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVv ZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAg IGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKLSsgICAgewot KyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0gPQotKwl7MHg5 OSwgMHhjOSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwgMHg4OCwg MHg1ZiwgMHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKLSsJIDB4MTYsIDB4MWYsIDB4M2Qs IDB4ZjQsIDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsIDB4ZDAsIDB4 ZTcsIDB4MGIsIDB4OTQsIDB4NGEsCi0rCSAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAweDIwLCAw eDA2LCAweGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAweGQ5LCAweDQw LCAweDIyLAotKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgyNywgMHhm ZSwgMHhiZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhM307Ci0rICAg IHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNo YXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK LSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9z aGE1MTIoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXpl b2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot Ky8qIEhNQUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRp YyBpbnQgRklQU19obWFjX3NoYTFfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBr ZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0 ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4 NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEsIDB4ZWEs IDB4ZWEsIDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCi0rCSAweGIyLCAweGZiLCAweGVj LCAweGM2fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsg ICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAg IGlmICghSE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxv dXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4p KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1B Qy1TSEEyMjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJl IHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50 IEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlb XSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0 IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4NzUs IDB4NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4 YmUsIDB4MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCi0rCSAweGU1LCAweDYyLCAweDQ5LCAw eGI2LCAweDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5fTsKLSsK LSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQg aW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhF VlBfc2hhMjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVu KSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAg ICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTI1Njog Z2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24K LSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFj X3NoYTI1Nl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9u cmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1 bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhlOSwgMHgxNywgMHhj MSwgMHg3YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwgMHgwMiwg MHhmNSwgMHg3MiwgMHgzMywgMHg4NywKLSsJIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2IsIDB4N2Us IDB4YTgsIDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYsIDB4ZGEsIDB4 MjQsIDB4ZjR9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwot KyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsg ICAgaWYgKCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYp LTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0 bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8q IEhNQUMtU0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29t cGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGlj IGludCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIg a2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUg dGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsw eGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2LCAweDYz LCAweDA4LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAotKwkgMHhlMiwgMHhkZiwgMHhm OCwgMHhmZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgxYiwgMHhhYywg MHhiMCwgMHgwNywgMHgzOSwgMHgwOCwKLSsJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYs IDB4ZDYsIDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4YjgsIDB4OWIsIDB4 ODgsIDB4MWN9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwot KyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsg ICAgaWYgKCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYp LTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0 bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8q IEhNQUMtU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29t cGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGlj IGludCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIg a2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUg dGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsw eGNkLCAweDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFm LCAweGYzLCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAotKwkgMHhmNywgMHhkMSwgMHg1 MSwgMHg5NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwgMHhhZCwg MHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKLSsJIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUsIDB4ZWEs IDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEsIDB4N2YsIDB4 ZWIsIDB4OWMsCi0rCSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAw eGVlLCAweDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUzfTsKLSsK LSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQg aW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhF VlBfc2hhNTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVu KSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAg ICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsKLSsvKiBESDogZ2VuZXJh dGUgc2hhcmVkIHBhcmFtZXRlcnMKLSsqLwotK3N0YXRpYyBpbnQgZGhfdGVzdCgpCi0rICAgIHsK LSsgICAgREggKmRoOwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgZGggPSBGSVBTX2Ro X25ldygpOwotKyAgICBpZiAoIWRoKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKCFESF9nZW5lcmF0 ZV9wYXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEZJ UFNfZGhfZnJlZShkaCk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogWmVyb2l6ZQot KyovCi0rc3RhdGljIGludCBaZXJvaXplKCkKLSsgICAgewotKyAgICBSU0EgKmtleTsKLSsgICAg QklHTlVNICpibjsKLSsgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAotKwl7IDB4NDgs IDB4NTAsIDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4 N2YsIDB4ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKLSsgICAgaW50IGksIG47Ci0rCi0r ICAgIGtleSA9IEZJUFNfcnNhX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAgICBpZiAo IWtleSB8fCAhYm4pCi0rCXJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOwot KyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQotKwlyZXR1 cm4gMDsKLSsgICAgQk5fZnJlZShibik7Ci0rICAgIAotKyAgICBuID0gQk5fbnVtX2J5dGVzKGtl eS0+ZCk7Ci0rICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRlIGtleVxu Iiwgbik7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxuIik7Ci0r ICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsgICAgQk5fcmFuZChrZXktPmQsbio4 LC0xLDApOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxuIik7Ci0r ICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsKLSsgICAgcHJpbnRmKCJcdGNoYXIg YnVmZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IoaSA9IDA7 IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0r ICAgICAgICBwcmludGYoIlxuIik7Ci0rICAgIFJBTkRfYnl0ZXModXNlcmtleSwgc2l6ZW9mIHVz ZXJrZXkpOwotKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92ZXJ3cml0aW5n OiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHBy aW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwotKwotKyAg ICByZXR1cm4gMTsKLSsgICAgfQotKwotK3N0YXRpYyBpbnQgRXJyb3I7Ci0rY29uc3QgY2hhciAq IEZhaWwoY29uc3QgY2hhciAqbXNnKQotKyAgICB7Ci0rICAgIGRvX3ByaW50X2Vycm9ycygpOwot KyAgICBFcnJvcisrOwotKyAgICByZXR1cm4gbXNnOyAKLSsgICAgfQotKwotK2ludCBtYWluKGlu dCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rCi0rICAgIGludCBkb19jb3JydXB0X3JzYV9r ZXlnZW4gPSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOwotKyAgICBpbnQgYmFkX3JzYSA9 IDAsIGJhZF9kc2EgPSAwOwotKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKLSsgICAgaW50IG5v X2V4aXQgPSAwOwotKwotKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGljYXRpb25c blxuIik7Ci0rCi0rICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUsIGlmIGFu eSAqLwotKyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOwotKwotKyAgICBpZiAoYXJn dlsxXSkgewotKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLwotKyAgICAgICAgaWYg KCFzdHJjbXAoYXJndlsxXSwgImFlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2Fl cygpOwotKyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJkZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKLSsgICAgICAg ICAgICBwcmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRl ZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2Ei KSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKLSsgICAgICAgICAgICBwcmlu dGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3Jy dXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi cnNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7Ci0rICAgICAgICAgICAg cHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGgg Y29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgInJzYWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24g YW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Ci0rCSAg ICBiYWRfcnNhID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgewotKwkgICAgZG9fY29ycnVwdF9yc2Ffa2V5 Z2VuID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXln ZW4uLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXki KSkgewotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1 cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAgYmFkX2RzYSA9 IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAiZHNha2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDE7Ci0r CSAgICBub19leGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlv biBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsK LSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7Ci0rICAgICAg ICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKLSsgICAgICAgICAgICBwcmludGYoIlNIQS0xIGhh c2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsJfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJybmciKSkgewotKwkgICAgRklQU19jb3JydXB0X3JuZygpOwotKwl9IGVsc2UgaWYgKCFz dHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikpIHsKLSsJICAgIGRvX3JuZ19zdGljayA9IDE7Ci0r CSAgICBub19leGl0ID0gMTsKLSsJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250 aW51b3VzIHRlc3QuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBwcmlu dGYoIkJhZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOwotKyAgICAgICAgICAgIGV4aXQo MSk7Ci0rICAgICAgICB9Ci0rCWlmICghbm9fZXhpdCkgewotKyAgICAgICAgCWlmICghRklQU19t b2RlX3NldCgxKSkgewotKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgICAgIAkgICAg cHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKLSsJCSAgICBleGl0KDEpOwot KwkJfQotKyAgICAgICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIp OwotKyAgICAgICAgCWV4aXQoMCk7Ci0rCX0KLSsgICAgfQotKwotKyAgICAvKiBOb24tQXBwcm92 ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCIxLiBOb24t QXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Ci0rICAgIHByaW50 ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsgICAgcHJpbnRmKCBkaF90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAv KiBQb3dlci11cCBzZWxmIHRlc3QKLSsgICAgKi8KLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0r ICAgIHByaW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOwotKyAgICBp ZiAoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAg ICBwcmludGYoRmFpbCgiRkFJTEVEIVxuIikpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIHByaW50 Zigic3VjY2Vzc2Z1bFxuIik7Ci0rICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4pCi0rICAg ICAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX2NvcnJ1cHRf cnNhX2tleWdlbikKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigpOwotKyAg ICBpZiAoZG9fcm5nX3N0aWNrKQotKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7Ci0rCi0r ICAgIC8qIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCIz LiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19hZXNf dGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAg LyogUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8K LSsgICAgcHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlw dGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBERVMtQ0JDIGVuY3J5 cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlw dGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19kZXMzX3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIERTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRm KCI2LiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7Ci0r ICAgIHByaW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS0xIGhhc2gKLSsgICAgKi8KLSsgICAg cHJpbnRmKCI3YS4gU0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhMV90ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBT SEEtMjU2IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNoLi4uIik7 Ci0rICAgIHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFp bCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTUxMiBoYXNoCi0rICAgICovCi0rICAg IHByaW50ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhNTEy X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAg IC8qIEhNQUMtU0hBLTEgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdkLiBITUFDLVNIQS0x IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0yMjQg aGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4uLiIpOwot KyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjU2IGhhc2gKLSsgICAg Ki8KLSsgICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKLSsgICAgcHJpbnRm KCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxF RCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCi0rICAgICovCi0rICAgIHBy aW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFj X3NoYTM4NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdoLiBI TUFDLVNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGE1MTJfdGVz dCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyog Tm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0rICAgIHByaW50 ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwot KyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHBy aW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJICAgIDogRmFp bCgiZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAgLyogWmVyb2l6YXRpb24KLSsg ICAgKi8KLSsgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOwotKyAgICBwcmludGYo IFplcm9pemUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJICAgIDogRmFpbCgi XHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOwotKwotKyAgICBwcmludGYoIlxuQWxsIHRlc3Rz IGNvbXBsZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOwotKyAgICByZXR1cm4gRXJyb3Ig PyAxIDogMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9NYWtlZmls ZQotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMJMjAxNC0wNS0w NiAxNjoyOTo1MC41NTI5MjMzNjMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9NYWtlZmlsZQkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MjkyMzM2MyArMDIwMAotQEAgLTAsMCAr MSwzNDEgQEAKLSsjCi0rIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0rIwotKwotK0RJ Uj0JZmlwcwotK1RPUD0JLi4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxBRz0tZwotK01B S0VGSUxFPQlNYWtlZmlsZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNMVURFUykgJChD RkxBRykKLSsKLStHRU5FUkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBz X3JhbmR0ZXN0LmMKLStBUFBTPQotKwotK1BST0dSQU09IGZpcHNfc3RhbmRhbG9uZV9obWFjCi0r RVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQotKwotK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKLStM SUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19z ZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3Qu YyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3Jh bmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlwc19wb3N0LmMgZmlwc19kcmJnX2N0ci5j IGZpcHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMuYyBcCi0rICAgIGZpcHNfZHJiZ19saWIu YyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFuZF9saWIuYyBc Ci0rICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCi0rCi0rTElC T0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2htYWNfc2Vs ZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8g Zmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5k Lm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJiZ19jdHIubyBm aXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAotKyAgICBmaXBzX2RyYmdfbGliLm8g Zmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRfbGliLm8gXAot KyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubwotKwotK0xJQkNS WVBUTz0tTC4uIC1sY3J5cHRvCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25lX2ht YWMuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFERVI9CSQoRVhIRUFE RVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSsKLSt0b3A6Ci0r CShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLSsK LSthbGw6CWxpYiBleGUKLSsKLStsaWI6CSQoTElCT0JKKQotKwkkKEFSKSAkKExJQikgJChMSUJP QkopCi0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotKwlAdG91Y2ggbGli Ci0rCi0rZXhlOgkkKEVYRSkKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxl cy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVSTCkgJChU T1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotKwlA JChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0rCUAkKFBF UkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStpbnN0YWxs OgotKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2Vm aWxlLi4uCi0rCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlz dCA7IFwKLSsJZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkv aW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElO U1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3RhZ3M6Ci0r CWN0YWdzICQoU1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5UICQoSU5D TFVERVMpICQoU1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURFUEVORCki IF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURFUEVORCkg LS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykK LSsKLStkY2xlYW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBM SU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLSsJbXYg LWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICoubyAqLm9i aiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0rJChFWEUp OiAkKFBST0dSQU0pLm8KLSsJRklQU19TSEFfQVNNPSIiOyBmb3IgaSBpbiAkKFNIQTFfQVNNX09C Sikgc2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vc2hhLyQkaSIg OyBkb25lOyBcCi0rCWZvciBpIGluICQoQ1BVSURfT0JKKTsgZG8gRklQU19TSEFfQVNNPSIkJEZJ UFNfU0hBX0FTTSAuLi8kJGkiIDsgZG9uZTsgXAotKwkkKENDKSAtbyAkQCAkKENGTEFHUykgJChQ 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 LmggZmlwc19zaGFfc2VsZnRlc3QuYwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ht YWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2htYWMvaG1hYy5jCi0tLS0gb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vaG1hYy9obWFjLmMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NTI5MjMzNjMgKzAyMDAKLUBAIC04MSwxMSArODEsNiBAQCBpbnQg 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 Y3R4KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlw cyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MWcvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjU1MjkyMzM2MyArMDIwMAotQEAgLTc2LDcgKzc2LDcgQEAKLSAJCQkq KChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMgdm9p ZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3Qg bGVuKTsKLS1maXBzX21kX2luaXQoTURDMikKLStub25maXBzX21kX2luaXQoTURDMikKLSAJewot IAljLT5udW09MDsKLSAJYy0+cGFkX3R5cGU9MTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tZDIvbWQyX2Rn c3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzCTIwMTQt MDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L21kMi9tZDJfZGdzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUyOTIzMzYzICswMjAwCi1AQCAt NjIsNiArNjIsMTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KLSAjaW5jbHVkZSA8b3Bl bnNzbC9vcGVuc3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gCi0gY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIi IE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hh ciAqTUQyX29wdGlvbnModm9pZCkKLSAJCXJldHVybigibWQyKGludCkiKTsKLSAJfQotIAotLWZp cHNfbWRfaW5pdChNRDIpCi0rbm9uZmlwc19tZF9pbml0KE1EMikKLSAJewotIAljLT5udW09MDsK LSAJbWVtc2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9t ZDQvbWQ0X2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5m aXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUyOTIzMzYzICsw MjAwCi1AQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BF TlNTTF9WCi0gI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAot ICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1maXBz X21kX2luaXQoTUQ0KQotK25vbmZpcHNfbWRfaW5pdChNRDQpCi0gCXsKLSAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vbWQ1L21k NV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwky MDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MzkyMzM4NiArMDIwMAot QEAgLTcxLDcgKzcxLDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xf VgotICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVm aW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0tZmlwc19tZF9p bml0KE1ENSkKLStub25maXBzX21kX2luaXQoTUQ1KQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVv ZigqYykpOwotIAljLT5BPUlOSVRfREFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL29fZmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL29fZmlwcy5jCi0tLS0gb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL29fZmlwcy5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vb19maXBzLmMJMjAxNC0wNS0w NiAxNjoyOTo1MC41NTM5MjMzODYgKzAyMDAKLUBAIC03OSw2ICs3OSw4IEBAIGludCBGSVBTX21v ZGVfc2V0KGludCByKQotICNpZm5kZWYgRklQU19BVVRIX1VTRVJfUEFTUwotICNkZWZpbmUgRklQ U19BVVRIX1VTRVJfUEFTUwkiRGVmYXVsdCBGSVBTIENyeXB0byBVc2VyIFBhc3N3b3JkIgotICNl bmRpZgotKwlpZiAociAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIC8qIGNhbiBiZSBpbXBsaWNpdGx5 IGluaXRpYWxpemVkIGJ5IE9QRU5TU0xfaW5pdCgpICovCi0rCQlyZXR1cm4gMTsKLSAJaWYgKCFG SVBTX21vZHVsZV9tb2RlX3NldChyLCBGSVBTX0FVVEhfVVNFUl9QQVNTKSkKLSAJCXJldHVybiAw OwotIAlpZiAocikKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9vX2luaXQuYy5maXBz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9vX2luaXQuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL29faW5pdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUzOTIz Mzg2ICswMjAwCi1AQCAtNTUsMjggKzU1LDY4IEBACi0gI2luY2x1ZGUgPGVfb3MuaD4KLSAjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgotKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgotKyNpbmNsdWRlIDxmY250bC5oPgot KyNpbmNsdWRlIDx1bmlzdGQuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8c3Rk bGliLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsKLSsjZGVmaW5lIEZJUFNfTU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0 by9maXBzX2VuYWJsZWQiCi0rCi0rc3RhdGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKLSsJ ewotKwljaGFyIGJ1ZlsyXSA9ICIwIjsKLSsJaW50IGZkOwotKwkKLSsJaWYgKGdldGVudigiT1BF TlNTTF9GT1JDRV9GSVBTX01PREUiKSAhPSBOVUxMKQotKwkJewotKwkJYnVmWzBdID0gJzEnOwot KwkJfQotKwllbHNlIGlmICgoZmQgPSBvcGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9O TFkpKSA+PSAwKQotKwkJewotKwkJd2hpbGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwg MCAmJiBlcnJubyA9PSBFSU5UUik7Ci0rCQljbG9zZShmZCk7Ci0rCQl9Ci0rCS8qIEZhaWx1cmUg cmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90Ci0rCSAqIHN3 aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4gV2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCi0r CSAqIG90aGVyd2lzZS4gCi0rCSAqLwotKwkKLSsJaWYgKGJ1ZlswXSA9PSAnMScpCi0rCQl7Ci0r CQlGSVBTX21vZGVfc2V0KDEpOwotKwkJfQotKwl9Ci0gI2VuZGlmCi0gCi0gLyogUGVyZm9ybSBh bnkgZXNzZW50aWFsIE9wZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSAgKiBDdXJy ZW50bHkgb25seSBzZXRzIEZJUFMgY2FsbGJhY2tzCi0gICovCi0gCi0tdm9pZCBPUEVOU1NMX2lu aXQodm9pZCkKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0gCXsKLSAJc3RhdGlj IGludCBkb25lID0gMDsKLSAJaWYgKGRvbmUpCi0gCQlyZXR1cm47Ci0gCWRvbmUgPSAxOwotICNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0JRklQU19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xv Y2ssIENSWVBUT19hZGRfbG9jayk7Ci0tCUZJUFNfc2V0X2Vycm9yX2NhbGxiYWNrcyhFUlJfcHV0 X2Vycm9yLCBFUlJfYWRkX2Vycm9yX3ZkYXRhKTsKLS0JRklQU19zZXRfbWFsbG9jX2NhbGxiYWNr cyhDUllQVE9fbWFsbG9jLCBDUllQVE9fZnJlZSk7Ci0gCVJBTkRfaW5pdF9maXBzKCk7Ci0rCWlu aXRfZmlwc19tb2RlKCk7Ci0rCWlmICghRklQU19tb2RlKCkpCi0rCQl7Ci0rCQkvKiBDbGVhbiB1 cCBwcmVtYXR1cmVseSBzZXQgZGVmYXVsdCByYW5kIG1ldGhvZCAqLwotKwkJUkFORF9zZXRfcmFu ZF9tZXRob2QoTlVMTCk7Ci0rCQl9Ci0gI2VuZGlmCi0gI2lmIDAKLSAJZnByaW50ZihzdGRlcnIs ICJDYWxsZWQgT1BFTlNTTF9pbml0XG4iKTsKLSAjZW5kaWYKLSAJfQotIAotK3ZvaWQgT1BFTlNT TF9pbml0KHZvaWQpCi0rCXsKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJfQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9v cGVuc3NsY29uZi5oLmluLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgkyMDE0LTA1LTA2IDE2 OjI5OjUwLjU1MzkyMzM4NiArMDIwMAotQEAgLTEsNSArMSwyMCBAQAotIC8qIGNyeXB0by9vcGVu c3NsY29uZi5oLmluICovCi0gCi0rI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAotKwot Ky8qIEluY2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBz ZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQotKyAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFr ZWRlcGVuZC4KLSsgKgotKyAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxv b2sgYXQgdGhpcywgd2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncwotKyAqIGluc3RlYWQ7IHdl IHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2Fi bGVkIGFsZ29yaXRobXMuXQotKyAqLwotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmlu ZSBPUEVOU1NMX0ZJUFMKLSsjZW5kaWYKLSsKLSsjZW5kaWYKLSsKLSAvKiBHZW5lcmF0ZSA4MDM4 NiBjb2RlPyAqLwotICN1bmRlZiBJMzg2X09OTFkKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yYW5kL21k X3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzCTIw MTQtMDQtMDcgMTg6NTQ6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUzOTIzMzg2ICswMjAwCi1A QCAtMzk1LDcgKzM5NSwxMCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVk IGNoCi0gCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0gCWNyeXB0b19sb2Nr X3JhbmQgPSAxOwotIAotLQlpZiAoIWluaXRpYWxpemVkKQotKwkvKiBhbHdheXMgcG9sbCBmb3Ig ZXh0ZXJuYWwgZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAotKwkgKiBl eHBhbnNpb24KLSsJICovCi0rCWlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgp KSAKLSAJCXsKLSAJCVJBTkRfcG9sbCgpOwotIAkJaW5pdGlhbGl6ZWQgPSAxOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL3JhbmQvcmFuZC5oCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JhbmQvcmFuZC5oLmZp cHMJMjAxNC0wNS0wNiAxNjoyOTo1MC4zMDM5MTc2MDYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTM5MjMzODYgKzAyMDAK LUBAIC0xMzMsMTYgKzEzMywzNCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsK LSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0 aW9uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJ CSAxMDgKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMwotKyNkZWZpbmUgUkFORF9G X0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCi0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9E VAkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19YOTMxX1NFVF9EVAkJCQkgMTA2Ci0rI2Rl ZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VU X1BSTkdfU0VFRAkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkg MTA1Ci0gI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCi0tI2RlZmlu ZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9GX1JBTkRfSU5J VF9GSVBTCQkJCSAxMDkKLSAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAK LSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0tI2RlZmluZSBSQU5EX1JfRFVBTF9FQ19EUkJHX0RJ U0FCTEVECQkJIDEwNAotLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJ IDEwMgotLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMDMKLS0j ZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTAxCi0rI2RlZmluZSBS QU5EX1JfRFVBTF9FQ19EUkJHX0RJU0FCTEVECQkJIDExNAotKyNkZWZpbmUgUkFORF9SX0VSUk9S X0lOSVRJQUxJU0lOR19EUkJHCQkJIDExMgotKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJ QVRJTkdfRFJCRwkJCSAxMTMKLSsjZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QJCQkJIDEw NQotKyNkZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgotKyNkZWZpbmUgUkFO RF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMTEKLSsjZGVmaW5lIFJBTkRfUl9OT19L RVlfU0VUCQkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJ CQkgMTAxCi0rI2RlZmluZSBSQU5EX1JfUFJOR19FUlJPUgkJCQkgMTA4Ci0rI2RlZmluZSBSQU5E X1JfUFJOR19LRVlFRAkJCQkgMTA5Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJ CQkgMTAyCi0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQJCQkgMTAzCi0gI2RlZmlu ZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NF RURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0rI2RlZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJ CQkgMTA0Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9y aXBlbWQvcm1kX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yaXBlbWQvcm1kX2Rn c3QuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUz OTIzMzg2ICswMjAwCi1AQCAtNzAsNyArNzAsNyBAQCBjb25zdCBjaGFyIFJNRDE2MF92ZXJzaW9u W109IlJJUEUtTUQxNjAiCi0gICAgICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQxNjBfQ1RY ICpjLCB1bnNpZ25lZCBsb25nICpwLHNpemVfdCBudW0pOwotICMgIGVuZGlmCi0gCi0tZmlwc19t ZF9pbml0KFJJUEVNRDE2MCkKLStub25maXBzX21kX2luaXQoUklQRU1EMTYwKQotIAl7Ci0gCW1l bXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5BPVJJUEVNRDE2MF9BOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfY3JwdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL3JzYS9yc2FfY3JwdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfY3Jw dC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTQ5MjM0 MDkgKzAyMDAKLUBAIC05MCwxMCArOTAsOSBAQCBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQg ZmxlbiwgY29uc3QKLSAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0gCXsKLSAjaWZkZWYg T1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBS U0FfRkxBR19GSVBTX01FVEhPRCkKLS0JCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05f RklQU19BTExPVykpCi0rCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFH X05PTl9GSVBTX0FMTE9XKSkKLSAJCXsKLS0JCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNS WVBULCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLSsJCVJTQWVycihSU0FfRl9SU0FfUFJJ VkFURV9FTkNSWVBULCBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsK LSAJCXJldHVybiAtMTsKLSAJCX0KLSAjZW5kaWYKLUBAIC0xMTgsMTAgKzExNyw5IEBAIGludCBS U0FfcHVibGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKLSAJICAgICBSU0EgKnJzYSwgaW50 IHBhZGRpbmcpCi0gCXsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAm JiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKLS0JCQkmJiAhKHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0rCWlmKEZJUFNfbW9kZSgpICYm ICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSAJCXsKLS0JCVJTQWVy cihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwot KwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9B TExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0gCQlyZXR1cm4gLTE7Ci0gCQl9Ci0gI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9yc2EvcnNhX2VheS5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9y c2FfZWF5LmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU0 OTIzNDA5ICswMjAwCi1AQCAtMTE0LDYgKzExNCwxMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gI2lmbmRlZiBSU0FfTlVMTAotIAot QEAgLTEzOCw3ICsxNDIsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9 ewotIAlCTl9tb2RfZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBN b250Z29tZXJ5IGlmICBlID09IDMgKi8KLSAJUlNBX2VheV9pbml0LAotIAlSU0FfZWF5X2Zpbmlz aCwKLS0JMCwgLyogZmxhZ3MgKi8KLSsJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICov Ci0gCU5VTEwsCi0gCTAsIC8qIHJzYV9zaWduICovCi0gCTAsIC8qIHJzYV92ZXJpZnkgKi8KLUBA IC0xNTgsNiArMTYyLDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQg ZmwKLSAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmIChGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BV QkxJQ19FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7 Ci0rCQkJfQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9X KQotKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9E VUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZ UFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJ CX0KLSsjZW5kaWYKLSsKLSAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9N QVhfTU9EVUxVU19CSVRTKQotIAkJewotIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VO Q1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLUBAIC0zNjEsNiArMzgzLDI0IEBAIHN0 YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKLSAJQklHTlVNICp1bmJsaW5k ID0gTlVMTDsKLSAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNS WVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0K LSsKLSsJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkm JiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCwgUlNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNl bmRpZgotKwotIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAlC Tl9DVFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwotQEAgLTUwNCw2ICs1 NDQsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgotIAlCSUdO VU0gKnVuYmxpbmQgPSBOVUxMOwotIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9Q UklWQVRFX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlyZXR1cm4g LTE7Ci0rCQkJfQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FM TE9XKQotKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9E RUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9 Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdv dG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwot QEAgLTYzOSw2ICs2OTcsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGlu dCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlf UFVCTElDX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVy cjsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVD UllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQot KwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf REVDUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTg5Nyw2ICs5NzMsOSBAQCBl cnI6Ci0gCi0gc3RhdGljIGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCi0gCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcnNhLT5m bGFnc3w9UlNBX0ZMQUdfQ0FDSEVfUFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7Ci0gCXJl dHVybigxKTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfZXJy LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9lcnIuYwotLS0tIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjU1NDkyMzQwOSArMDIwMAotQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0 aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKFJTQV9GX1JT QV9QVUJMSUNfRU5DUllQVCksCSJSU0FfcHVibGljX2VuY3J5cHQifSwKLSB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKLSB7RVJSX0ZVTkMoUlNBX0Zf UlNBX1NFVFVQX0JMSU5ESU5HKSwJIlJTQV9zZXR1cF9ibGluZGluZyJ9LAotK3tFUlJfRlVOQyhS U0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwJIlJTQV9zZXRfZGVmYXVsdF9tZXRob2QifSwK LSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0QpLAkiUlNBX3NldF9tZXRob2QifSwKLSB7 RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLAkiUlNBX3NpZ24ifSwKLSB7RVJSX0ZVTkMoUlNBX0Zf UlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcpLAkiUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkci fSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWSksCSJSU0FfdmVyaWZ5In0sCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9yc2EvcnNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2Ff Z2VuLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2dlbi5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU0OTIz NDA5ICswMjAwCi1AQCAtNjksNiArNjksNzggQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4K LSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0gI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotK3N0YXRp YyBpbnQgZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRf cnNhX2tleWdlbih2b2lkKQotKwl7Ci0rCWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9 Ci0rCi0raW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQotKwl7Ci0rCWNvbnN0IHVuc2lnbmVk IGNoYXIgdGJzW10gPSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKwl1bnNpZ25lZCBjaGFy ICpjdGJ1ZiA9IE5VTEwsICpwdGJ1ZiA9IE5VTEw7Ci0rCWludCBsZW4sIHJldCA9IDA7Ci0rCUVW UF9QS0VZICpwazsKLSsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdv dG8gZXJyOwotKwotKwlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKLSsKLSsJLyogUGVyZm9y bSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLwotKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLCBOVUxMKQotKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEsIE5VTEwpCi0rCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURf UFNTLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25z aXN0ZW5jeSBlbmNyeXB0L2RlY3J5cHQgdGVzdCAqLwotKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9j KFJTQV9zaXplKHJzYSkpOwotKwlpZiAoIWN0YnVmKQotKwkJZ290byBlcnI7Ci0rCi0rCWxlbiA9 IFJTQV9wdWJsaWNfZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNB X1BLQ1MxX1BBRERJTkcpOwotKwlpZiAobGVuIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJLyogQ2hl Y2sgY2lwaGVydGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLwotKwlpZiAoKGxlbiA9PSAo c2l6ZW9mKHRicykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQotKwkJZ290byBl cnI7Ci0rCXB0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCi0rCWlmICgh cHRidWYpCi0rCQlnb3RvIGVycjsKLSsJbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0 YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gIT0gKHNpemVv Zih0YnMpIC0gMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4p KQotKwkJZ290byBlcnI7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWlmICghcHRidWYpCi0rCQlnb3Rv IGVycjsKLSsJCi0rCWVycjoKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2Vs ZnRlc3RfZmFpbCgpOwotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BB SVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJCX0KLSsKLSsJaWYgKGN0YnVmKQotKwkJT1BFTlNTTF9m cmVlKGN0YnVmKTsKLSsJaWYgKHB0YnVmKQotKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKLSsJaWYg KHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSAjZW5k aWYKLSAKLSBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMs IEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKTsKLUBAIC04MSw3ICsxNTMsNyBAQCBzdGF0 aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKLSBpbnQgUlNBX2dlbmVyYXRlX2tl eV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKQot IAl7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1l dGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0rCWlmIChGSVBTX21vZHVsZV9tb2Rl KCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0gCQkJJiYg IShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotIAkJewotIAkJUlNBZXJy KFJTQV9GX1JTQV9HRU5FUkFURV9LRVlfRVgsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwot QEAgLTkwLDEwICsxNjIsNiBAQCBpbnQgUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50 IGJpCi0gI2VuZGlmCi0gCWlmKHJzYS0+bWV0aC0+cnNhX2tleWdlbikKLSAJCXJldHVybiByc2Et Pm1ldGgtPnJzYV9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQlyZXR1cm4gRklQU19yc2FfZ2VuZXJhdGVf a2V5X2V4KHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOwotLSNlbmRpZgotIAlyZXR1cm4gcnNhX2J1 aWx0aW5fa2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOwotIAl9Ci0gCi1AQCAtMTA1LDYg KzE3MywyMyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKLSAJaW50 IGJpdHNwLGJpdHNxLG9rPSAtMSxuPTA7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIAl7Ci0rCQkgICAgRklQU2VycihGSVBTX0ZfUlNB X0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICAJcmV0 dXJuIDA7Ci0rCSAgICAJfQotKwotKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpCi0rCQkgICAgewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElO X0tFWUdFTixGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rCQkgICAgcmV0dXJuIDA7Ci0rCQkgICAg fQotKwkJfQotKyNlbmRpZgotKwotIAljdHg9Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5V TEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLUBAIC0yMTYsNiArMzAxLDE3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAotIAkJcCA9IHJzYS0+cDsK LSAJaWYgKCFCTl9tb2RfaW52ZXJzZShyc2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBlcnI7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKwkJ ewotKwkJaWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwpCi0rCQkJQk5fYWRkX3dvcmQocnNhLT5u LCAxKTsKLSsKLSsJCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKwkJICAgIGdvdG8gZXJyOwot KwkJfQotKyNlbmRpZgotKwotIAlvaz0xOwotIGVycjoKLSAJaWYgKG9rID09IC0xKQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2EuaC5maXBzIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9yc2EvcnNhLmgKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJ MjAxNC0wNS0wNiAxNjoyOTo1MC40MzY5MjA2ODEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vcnNhL3JzYS5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU0OTIzNDA5ICswMjAwCi1AQCAt MTY0LDYgKzE2NCw4IEBAIHN0cnVjdCByc2Ffc3QKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhf TU9EVUxVU19CSVRTCTE2Mzg0Ci0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9E VUxVU19CSVRTCi0gIyBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIK LSAjZW5kaWYKLUBAIC0yOTAsNiArMjkyLDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50 IGJpdHMsIHVuc2lnbmUKLSAKLSAvKiBOZXcgdmVyc2lvbiAqLwotIGludAlSU0FfZ2VuZXJhdGVf a2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2lu dCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJ R05VTSAqcTEsIEJJR05VTSAqcTIsCi0rCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05V TSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBC SUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dF TkNCICpjYik7Ci0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJp dHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLSAKLSBpbnQJUlNBX2NoZWNrX2tl eShjb25zdCBSU0EgKik7Ci0gCS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KLUBAIC00 ODcsNyArNDk0LDcgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5l IFJTQV9GX1JTQV9QQURESU5HX0FERF9OT05FCQkJIDEwNwotICNkZWZpbmUgUlNBX0ZfUlNBX1BB RERJTkdfQUREX1BLQ1MxX09BRVAJCSAxMjEKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FE RF9QS0NTMV9QU1MJCQkgMTI1Ci0tI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFf UFNTX01HRjEJCSAxNDgKLSsjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1Nf TUdGMQkJIDE1OAotICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMQkJ IDEwOAotICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMgkJIDEwOQot ICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1NTTFYyMwkJCSAxMTAKLUBAIC01MDAsMjAg KzUwNywyMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNB X0ZfUlNBX1BBRERJTkdfQ0hFQ0tfWDkzMQkJCSAxMjgKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklO VAkJCQkJIDExNQotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKLS0jZGVmaW5l IFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQJCQkgMTUwCi0tI2RlZmluZSBSU0FfRl9SU0FfUFJJ VkFURV9FTkNSWVBUCQkJIDE1MQotKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJ CSAxNTcKLSsjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4Ci0gI2RlZmlu ZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNwotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZf RU5DT0RFCQkJCSAxMzgKLS0jZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNTIK LSsjZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNDkKLSAjZGVmaW5lIFJTQV9G X1JTQV9QVUJMSUNfRU5DUllQVAkJCSAxNTMKLSAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RF CQkJCSAxMzkKLSAjZGVmaW5lIFJTQV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYKLSsjZGVm aW5lIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJCQkgMTUwCi0rI2RlZmluZSBSU0FfRl9S U0FfU0VUX01FVEhPRAkJCQkgMTUxCi0gI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNwot ICNkZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKLSAjZGVmaW5l IFJTQV9GX1JTQV9WRVJJRlkJCQkJIDExOQotICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9BU04x X09DVEVUX1NUUklORwkJIDEyMAotICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1MJ CQkgMTI2Ci0tI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE0OQot KyNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNTIKLSAKLSAvKiBS ZWFzb24gY29kZXMuICovCi0gI2RlZmluZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0gJCQkgMTAw Ci1AQCAtNTQyLDIxICs1NTEsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsK LSAjZGVmaW5lIFJTQV9SX0lOVkFMSURfTUdGMV9NRAkJCQkgMTU2Ci0gI2RlZmluZSBSU0FfUl9J TlZBTElEX1BBRERJTkcJCQkJIDEzOAotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HX01P REUJCQkgMTQxCi0tI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE0OQot KyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNTcKLSAjZGVmaW5lIFJT QV9SX0lOVkFMSURfUFNTX1NBTFRMRU4JCQkgMTQ2Ci0tI2RlZmluZSBSU0FfUl9JTlZBTElEX1NB TFRfTEVOR1RICQkJIDE1MAotKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAx NTgKLSAjZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUgkJCQkgMTM5Ci0gI2RlZmluZSBSU0Ff Ul9JTlZBTElEX1g5MzFfRElHRVNUCQkJIDE0MgotICNkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5W RVJTRV9PRl9RCQkJIDEyNgotICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEy MAotICNkZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAotICNkZWZpbmUgUlNB X1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwNQotLSNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNB X01FVEhPRAkJCSAxNTcKLSsjZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTQ5 Ci0rI2RlZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDE0OQotICNkZWZpbmUgUlNBX1Jf Tk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0MAotICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVfQkxP Q0tfTUlTU0lORwkJCSAxMTMKLSAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RCQkJ IDEyNwotICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKLS0jZGVmaW5l IFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1OAotKyNkZWZpbmUg UlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTUwCi0gI2RlZmluZSBS U0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFCSAxNDgKLSAjZGVm aW5lIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJIDExNAotICNkZWZpbmUgUlNBX1JfUF9O T1RfUFJJTUUJCQkJIDEyOAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2Ff bGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9saWIuYwotLS0tIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9saWIuYwky MDE0LTA1LTA2IDE2OjI5OjUwLjU1NDkyMzQwOSArMDIwMAotQEAgLTg0LDYgKzg0LDEzIEBAIFJT QSAqUlNBX25ldyh2b2lkKQotIAotIHZvaWQgUlNBX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBS U0FfTUVUSE9EICptZXRoKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19t b2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJ CVJTQWVycihSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRI T0QpOwotKwkJcmV0dXJuOwotKwkJfQotKyNlbmRpZgotIAlkZWZhdWx0X1JTQV9tZXRoID0gbWV0 aDsKLSAJfQotIAotQEAgLTkxLDE4ICs5OCwxMSBAQCBjb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0 X2RlZmF1bHRfbWV0aG9kCi0gCXsKLSAJaWYgKGRlZmF1bHRfUlNBX21ldGggPT0gTlVMTCkKLSAJ CXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAoRklQU19tb2RlKCkpCi0tCQkJcmV0dXJu IEZJUFNfcnNhX3BrY3MxX3NzbGVheSgpOwotLQkJZWxzZQotLQkJCXJldHVybiBSU0FfUEtDUzFf U1NMZWF5KCk7Ci0tI2Vsc2UKLSAjaWZkZWYgUlNBX05VTEwKLSAJCWRlZmF1bHRfUlNBX21ldGg9 UlNBX251bGxfbWV0aG9kKCk7Ci0gI2Vsc2UKLSAJCWRlZmF1bHRfUlNBX21ldGg9UlNBX1BLQ1Mx X1NTTGVheSgpOwotICNlbmRpZgotLSNlbmRpZgotIAkJfQotIAotIAlyZXR1cm4gZGVmYXVsdF9S U0FfbWV0aDsKLUBAIC0xMTgsNiArMTE4LDEzIEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJz YSwgY29uc3QgUlNBX00KLSAJLyogTkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRp bmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCi0gCSAqIHRvIGRlYWwgd2l0aCB3aGlj aCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8KLSAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYg UlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVU SE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlm Ci0gCW10bXAgPSByc2EtPm1ldGg7Ci0gCWlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChy c2EpOwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLUBAIC0xNzAsNiArMTc3LDE4IEBAIFJT QSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCi0gCQkJfQotIAkJfQotICNlbmRpZgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5m bGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0Ff TkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCi0rCQlpZiAocmV0LT5lbmdpbmUpCi0rCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2lu ZSk7Ci0rI2VuZGlmCi0rCQlPUEVOU1NMX2ZyZWUocmV0KTsKLSsJCXJldHVybiBOVUxMOwotKwkJ fQotKyNlbmRpZgotIAotIAlyZXQtPnBhZD0wOwotIAlyZXQtPnZlcnNpb249MDsKLUBAIC0xODgs NyArMjA3LDcgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKLSAJcmV0LT5i bGluZGluZz1OVUxMOwotIAlyZXQtPm10X2JsaW5kaW5nPU5VTEw7Ci0gCXJldC0+YmlnbnVtX2Rh dGE9TlVMTDsKLS0JcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzICYgflJTQV9GTEFHX05PTl9G SVBTX0FMTE9XOwotKwlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3M7Ci0gCWlmICghQ1JZUFRP X25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSkpCi0g CQl7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNh X3BtZXRoLmMKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMJ MjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vcnNhL3JzYV9wbWV0aC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU1OTIzNDMyICswMjAw Ci1AQCAtMjA2LDIyICsyMDYsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3NpZ24oRVZQX1BLRVlf Q1RYICpjCi0gCQkJCQlSU0FfUl9JTlZBTElEX0RJR0VTVF9MRU5HVEgpOwotIAkJCXJldHVybiAt MTsKLSAJCQl9Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKHJldCA+IDApCi0tCQkJewot LQkJCXVuc2lnbmVkIGludCBzbGVuOwotLQkJCXJldCA9IEZJUFNfcnNhX3NpZ25fZGlnZXN0KHJz YSwgdGJzLCB0YnNsZW4sIHJjdHgtPm1kLAotLQkJCQkJCQlyY3R4LT5wYWRfbW9kZSwKLS0JCQkJ CQkJcmN0eC0+c2FsdGxlbiwKLS0JCQkJCQkJcmN0eC0+bWdmMW1kLAotLQkJCQkJCQlzaWcsICZz bGVuKTsKLS0JCQlpZiAocmV0ID4gMCkKLS0JCQkJKnNpZ2xlbiA9IHNsZW47Ci0tCQkJZWxzZQot LQkJCQkqc2lnbGVuID0gMDsKLS0JCQlyZXR1cm4gcmV0OwotLQkJCX0KLS0jZW5kaWYKLSAKLSAJ CWlmIChFVlBfTURfdHlwZShyY3R4LT5tZCkgPT0gTklEX21kYzIpCi0gCQkJewotQEAgLTM1NCwx OSArMzM4LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV92ZXJpZnkoRVZQX1BLRVlfQ1RYCi0gI2Vu ZGlmCi0gCWlmIChyY3R4LT5tZCkKLSAJCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAo cnYgPiAwKQotLQkJCXsKLS0JCQlyZXR1cm4gRklQU19yc2FfdmVyaWZ5X2RpZ2VzdChyc2EsCi0t CQkJCQkJCXRicywgdGJzbGVuLAotLQkJCQkJCQlyY3R4LT5tZCwKLS0JCQkJCQkJcmN0eC0+cGFk X21vZGUsCi0tCQkJCQkJCXJjdHgtPnNhbHRsZW4sCi0tCQkJCQkJCXJjdHgtPm1nZjFtZCwKLS0J CQkJCQkJc2lnLCBzaWdsZW4pOwotLQkJCQkJCQkKLS0JCQl9Ci0tI2VuZGlmCi0gCQlpZiAocmN0 eC0+cGFkX21vZGUgPT0gUlNBX1BLQ1MxX1BBRERJTkcpCi0gCQkJcmV0dXJuIFJTQV92ZXJpZnko RVZQX01EX3R5cGUocmN0eC0+bWQpLCB0YnMsIHRic2xlbiwKLSAJCQkJCXNpZywgc2lnbGVuLCBy c2EpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9zaWduLmMJMjAxNC0wNS0w NiAxNjoyOTo1MC41NTU5MjM0MzIgKzAyMDAKLUBAIC0xMzgsNyArMTM4LDggQEAgaW50IFJTQV9z aWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaAotIAkJaTJkX1g1MDlfU0lHKCZzaWcsJnAp OwotIAkJcz10bXBzOwotIAl9Ci0tCWk9UlNBX3ByaXZhdGVfZW5jcnlwdChpLHMsc2lncmV0LHJz YSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCS8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRp cmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3By aXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1Mx X1BBRERJTkcpIDogMDsKLSAJaWYgKGkgPD0gMCkKLSAJCXJldD0wOwotIAllbHNlCi1AQCAtMTc4 LDggKzE3OSw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAK LSAJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pCi0gCQl7Ci0tCQlpID0gUlNBX3B1 YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAotLQkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFf UEFERElORyk7Ci0rCQlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNh X3B1Yl9kZWMoKGludClzaWdsZW4sCi0rCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURE SU5HKSA6IDA7Ci0gCQlpZiAoaSA8PSAwKQotIAkJCXJldHVybiAwOwotIAkJKnBybV9sZW4gPSBp OwotQEAgLTE5Niw3ICsxOTcsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25z dCB1bnNpCi0gCQkJUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLFJTQV9SX0lOVkFMSURfTUVT U0FHRV9MRU5HVEgpOwotIAkJCWdvdG8gZXJyOwotIAl9Ci0tCWk9UlNBX3B1YmxpY19kZWNyeXB0 KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCS8qIE5COiBj YWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8K LSsJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChp bnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwotIAotIAlpZiAo aSA8PSAwKSBnb3RvIGVycjsKLSAJLyogT2RkYmFsbCBNREMyIGNhc2U6IHNpZ25hdHVyZSBjYW4g YmUgT0NURVQgU1RSSU5HLgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3NoYS9zaGEu aC5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9zaGEvc2hhLmgKLS0tLSBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC4yMjQ5MTU3ODAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3NoYS5oCTIwMTQtMDUtMDYgMTY6Mjk6 NTAuNTU1OTIzNDMyICswMjAwCi1AQCAtMTE2LDkgKzExNiw2IEBAIHVuc2lnbmVkIGNoYXIgKlNI QShjb25zdCB1bnNpZ25lZCBjaGFyICoKLSB2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05P X1NIQTEKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50IHByaXZhdGVfU0hBMV9Jbml0KFNIQV9D VFggKmMpOwotLSNlbmRpZgotIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7Ci0gaW50IFNIQTFf VXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBT SEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKLUBAIC0xNDEsMTAgKzEz OCw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0Ci0gCX0gU0hBMjU2X0NUWDsKLSAK LSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLWludCBw cml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOwotLWludCBwcml2YXRlX1NIQTI1Nl9J bml0KFNIQTI1Nl9DVFggKmMpOwotLSNlbmRpZgotIGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RY ICpjKTsKLSBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRh LCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEy NTZfQ1RYICpjKTsKLUBAIC0xOTIsMTAgKzE4NSw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTUxMnN0 YXRlX3N0Ci0gI2VuZGlmCi0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotLSNpZmRlZiBP UEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKLS1p bnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKLS0jZW5kaWYKLSBpbnQgU0hB Mzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7Ci0gaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAq YywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQTM4NF9GaW5hbCh1bnNp Z25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3NoYV9s b2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjIyNjkxNTgyNiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9zaGEvc2hhX2xvY2wuaAkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1NTkyMzQzMiArMDIwMAotQEAg LTEyMywxMSArMTIzLDE0IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRhX29yZGVyIChTSEFfQ1RYICpj LAotICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAotIAotICNpZmRlZiBTSEFfMAot LWZpcHNfbWRfaW5pdChTSEEpCi0rbm9uZmlwc19tZF9pbml0KFNIQSkKLSAjZWxzZQotIGZpcHNf bWRfaW5pdF9jdHgoU0hBMSwgU0hBKQotICNlbmRpZgotIAl7Ci0rI2lmIGRlZmluZWQoU0hBXzEp ICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2Vu ZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5oMD1JTklUX0RBVEFfaDA7Ci0g CWMtPmgxPUlOSVRfREFUQV9oMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9zaGEv c2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3NoYTI1Ni5jCi0tLS0gb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3NoYS9zaGEyNTYuYwky MDE0LTA1LTA2IDE2OjI5OjUwLjU1NTkyMzQzMiArMDIwMAotQEAgLTEyLDEyICsxMiwxOSBAQAot IAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAKLSBjb25zdCBjaGFyIFNI QTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSBmaXBz X21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigq YykpOwotIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7Ci0gCWMt PmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsKLUBAIC0yOSw2ICszNiw5 IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCi0gCi0gZmlwc19tZF9pbml0KFNI QTI1NikKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygp OwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weDZhMDll NjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOwotIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+ aFszXT0weGE1NGZmNTNhVUw7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3No YTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3NoYS9zaGE1MTIuYwotLS0tIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NTU5MjM0MzIgKzAyMDAKLUBAIC01LDYgKzUsMTAgQEAKLSAgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotICAqLwotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsK LSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB NTEyKQotIC8qCi0gICogSU1QTEVNRU5UQVRJT04gTk9URVMuCi1AQCAtNjEsNiArNjUsOSBAQCBj b25zdCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNIQS01MTIiIE9QCi0gCi0gZmlwc19tZF9pbml0 X2N0eChTSEEzODQsIFNIQTUxMikKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19z ZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAljLT5oWzBdPVU2NCgweGNiYmI5ZDVkYzEwNTll ZDgpOwotIAljLT5oWzFdPVU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOwotIAljLT5oWzJdPVU2NCgw eDkxNTkwMTVhMzA3MGRkMTcpOwotQEAgLTc3LDYgKzg0LDkgQEAgZmlwc19tZF9pbml0X2N0eChT SEEzODQsIFNIQTUxMikKLSAKLSBmaXBzX21kX2luaXQoU0hBNTEyKQotIAl7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWMtPmhbMF09 VTY0KDB4NmEwOWU2NjdmM2JjYzkwOCk7Ci0gCWMtPmhbMV09VTY0KDB4YmI2N2FlODU4NGNhYTcz Yik7Ci0gCWMtPmhbMl09VTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL3docmxwb29sL3dwX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by93aHJscG9v bC93cF9kZ3N0LmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMJMjAxNC0wNS0wNiAxNjoy OTo1MC41NTU5MjM0MzIgKzAyMDAKLUBAIC01NSw3ICs1NSw3IEBACi0gI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAotLWZpcHNfbWRfaW5pdChXSElS TFBPT0wpCi0rbm9uZmlwc19tZF9pbml0KFdISVJMUE9PTCkKLSAJewotIAltZW1zZXQgKGMsMCxz aXplb2YoKmMpKTsKLSAJcmV0dXJuKDEpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvTWFrZWZp bGUub3JnLmZpcHMgb3BlbnNzbC0xLjAuMWcvTWFrZWZpbGUub3JnCi0tLS0gb3BlbnNzbC0xLjAu MWcvTWFrZWZpbGUub3JnLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41MTk5MjI2MDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xZy9NYWtlZmlsZS5vcmcJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTY5 MjM0NTYgKzAyMDAKLUBAIC0xMzYsNiArMTM2LDkgQEAgRklQU0NBTkxJQj0KLSAKLSBCQVNFQURE Uj0KLSAKLSsjIE5vbi1lbXB0eSBpZiBGSVBTIGVuYWJsZWQKLStGSVBTPQotKwotIERJUlM9ICAg Y3J5cHRvIHNzbCBlbmdpbmVzIGFwcHMgdGVzdCB0b29scwotIEVOR0RJUlM9IGNjZ29zdAotIFNI TElCRElSUz0gY3J5cHRvIHNzbAotQEAgLTE0OCw3ICsxNTEsNyBAQCBTRElSUz0gIFwKLSAJYm4g ZWMgcnNhIGRzYSBlY2RzYSBkaCBlY2RoIGRzbyBlbmdpbmUgXAotIAlidWZmZXIgYmlvIHN0YWNr IGxoYXNoIHJhbmQgZXJyIFwKLSAJZXZwIGFzbjEgcGVtIHg1MDkgeDUwOXYzIGNvbmYgdHh0X2Ri IHBrY3M3IHBrY3MxMiBjb21wIG9jc3AgdWkga3JiNSBcCi0tCWNtcyBwcXVldWUgdHMganBha2Ug c3JwIHN0b3JlIGNtYWMKLSsJY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYyBmaXBz Ci0gIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYWJvdmUgbGlzdCBpcyBhZGp1c3RlZCBieSAuL0Nv bmZpZ3VyZQotICMgYWNjb3JkaW5nIHRvIG5vLXh4eCBhcmd1bWVudHMuLi4KLSAKLUBAIC0yMzcs NiArMjQwLDcgQEAgQlVJTERFTlY9CVBMQVRGT1JNPSckKFBMQVRGT1JNKScgUFJPQ0VTUwotIAkJ RklQU0xJQkRJUj0nJHtGSVBTTElCRElSfScJCQlcCi0gCQlGSVBTRElSPScke0ZJUFNESVJ9JwkJ CQlcCi0gCQlGSVBTQ0FOTElCPSIkJHtGSVBTQ0FOTElCOi0kKEZJUFNDQU5MSUIpfSIJXAotKwkJ RklQUz0iJCR7RklQUzotJChGSVBTKX0iCVwKLSAJCVRISVM9JCR7VEhJUzotJEB9IE1BS0VGSUxF PU1ha2VmaWxlIE1BS0VPVkVSUklERVM9Ci0gIyBNQUtFT1ZFUlJJREVTPSBlZmZlY3RpdmVseSAi ZXF1YWxpemVzIiBHTlUtaXNoIGFuZCBTeXNWLWlzaCBtYWtlIGZsYXZvcnMsCi0gIyB3aGljaCBp biB0dXJuIGVsaW1pbmF0ZXMgYW1iaWd1aXRpZXMgaW4gdmFyaWFibGUgdHJlYXRtZW50IHdpdGgg LWUuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9zc2wvZDFfc3J2ci5jLmZpcHMgb3BlbnNzbC0x LjAuMWcvc3NsL2QxX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjFnL3NzbC9kMV9zcnZyLmMuZmlw cwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFn L3NzbC9kMV9zcnZyLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTY5MjM0NTYgKzAyMDAKLUBAIC0x MzgzLDYgKzEzODMsOCBAQCBpbnQgZHRsczFfc2VuZF9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKFNTTCAq Ci0gCQkJCWo9MDsKLSAJCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCi0gCQkJCQl7Ci0r CQkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAotKwkJCQkJCQkJRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51 bSA9PSAyKQotIAkJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwotIAkJCQkJ RVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNf UkFORE9NX1NJWkUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvc3NsL3NzbF9hbGdzLmMuZmlw cyBvcGVuc3NsLTEuMC4xZy9zc2wvc3NsX2FsZ3MuYwotLS0tIG9wZW5zc2wtMS4wLjFnL3NzbC9z c2xfYWxncy5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4xZy9zc2wvc3NsX2FsZ3MuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1NjkyMzQ1 NiArMDIwMAotQEAgLTY0LDYgKzY0LDEyIEBACi0gaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkK LSAJewotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsK LSsJaWYgKCFGSVBTX21vZGUoKSkKLSsJCXsKLSsjZW5kaWYKLSsKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fREVTCi0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2JjKCkpOwotIAlFVlBfYWRkX2NpcGhl cihFVlBfZGVzX2VkZTNfY2JjKCkpOwotQEAgLTEzNyw2ICsxNDMsNTAgQEAgaW50IFNTTF9saWJy YXJ5X2luaXQodm9pZCkKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKLSAJRVZQX2FkZF9k aWdlc3QoRVZQX2RzcygpKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0r CWVsc2UKLSsJCXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lwaGVyKEVW UF9kZXNfZWRlM19jYmMoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTkyX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMjU2X2djbSgpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1Ci0rCS8qIG5l ZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBNQUMgKi8KLSsJRVZQX2FkZF9kaWdl c3QoRVZQX21kNSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wyLW1kNSIp OwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDMtbWQ1Iik7Ci0rI2VuZGlmCi0r I2lmbmRlZiBPUEVOU1NMX05PX1NIQQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyog UlNBIHdpdGggc2hhMSAqLwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNo YTEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNO X3NoYTFXaXRoUlNBKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0rCUVW UF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYo KSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotKwlFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhMzg0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyNlbmRp ZgotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19E U0EpCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0aCBzaGExICovCi0r CUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOwot KwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOwotKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOwotKyNlbmRpZgotKyNpZm5kZWYg T1BFTlNTTF9OT19FQ0RTQQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7Ci0rI2VuZGlm Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKLSAJLyogVGhpcyB3aWxs IGluaXRpYWxpc2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuCi0gCSAgIFRo ZSB2YWx1ZSByZXR1cm5lZCBpcyBhIFNUQUNLX09GKFNTTF9DT01QKSwgYnV0IHRoYXQgY2FuCgpk aWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWktY29weS1hbGdvLnBhdGNoIGIvb3BlbnNzbC0xLjAu MWktY29weS1hbGdvLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjdjNTg0 Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjFpLWNvcHktYWxnby5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDMzICswLDAgQEAKLWRpZmYgLS1naXQgYS9zc2wvc3NsX2xpYi5jIGIvc3NsL3Nz bF9saWIuYwotaW5kZXggNmEzM2I5ZC4uNzZhNWY5ZSAxMDA2NDQKLS0tLSBhL3NzbC9zc2xfbGli LmMKLSsrKyBiL3NzbC9zc2xfbGliLmMKLUBAIC0zMTc3LDE1ICszMTc3LDI2IEBAIFNTTF9DVFgg KlNTTF9nZXRfU1NMX0NUWChjb25zdCBTU0wgKnNzbCkKLSAKLSBTU0xfQ1RYICpTU0xfc2V0X1NT TF9DVFgoU1NMICpzc2wsIFNTTF9DVFgqIGN0eCkKLSAJewotKwlDRVJUICpvY2VydCA9IHNzbC0+ Y2VydDsKLSAJaWYgKHNzbC0+Y3R4ID09IGN0eCkKLSAJCXJldHVybiBzc2wtPmN0eDsKLSAjaWZu ZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0gCWlmIChjdHggPT0gTlVMTCkKLSAJCWN0eCA9IHNzbC0+ aW5pdGlhbF9jdHg7Ci0gI2VuZGlmCi0tCWlmIChzc2wtPmNlcnQgIT0gTlVMTCkKLS0JCXNzbF9j ZXJ0X2ZyZWUoc3NsLT5jZXJ0KTsKLSAJc3NsLT5jZXJ0ID0gc3NsX2NlcnRfZHVwKGN0eC0+Y2Vy dCk7Ci0rCWlmIChvY2VydCkKLSsJCXsKLSsJCWludCBpOwotKwkJLyogQ29weSBuZWdvdGlhdGVk IGRpZ2VzdHMgZnJvbSBvcmlnaW5hbCAqLwotKwkJZm9yIChpID0gMDsgaSA8IFNTTF9QS0VZX05V TTsgaSsrKQotKwkJCXsKLSsJCQlDRVJUX1BLRVkgKmNwayA9IG9jZXJ0LT5wa2V5cyArIGk7Ci0r CQkJQ0VSVF9QS0VZICpycGsgPSBzc2wtPmNlcnQtPnBrZXlzICsgaTsKLSsJCQlycGstPmRpZ2Vz dCA9IGNway0+ZGlnZXN0OwotKwkJCX0KLSsJCXNzbF9jZXJ0X2ZyZWUob2NlcnQpOwotKwkJfQot IAlDUllQVE9fYWRkKCZjdHgtPnJlZmVyZW5jZXMsMSxDUllQVE9fTE9DS19TU0xfQ1RYKTsKLSAJ aWYgKHNzbC0+Y3R4ICE9IE5VTEwpCi0gCQlTU0xfQ1RYX2ZyZWUoc3NsLT5jdHgpOyAvKiBkZWNy ZW1lbnQgcmVmZXJlbmNlIGNvdW50ICovCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWktZXZw LXdyYXAucGF0Y2ggYi9vcGVuc3NsLTEuMC4xaS1ldnAtd3JhcC5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMmFmZmVmNS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xaS1l dnAtd3JhcC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMzkgKzAsMCBAQAotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWkvY3J5cHRvL2Flcy9hZXNfd3JhcC5jLndyYXAgb3BlbnNzbC0xLjAuMWkv Y3J5cHRvL2Flcy9hZXNfd3JhcC5jCi0tLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2Flcy9hZXNf d3JhcC5jLndyYXAJMjAxNC0wOC0wNiAyMzoxMDo1Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xaS9jcnlwdG8vYWVzL2Flc193cmFwLmMJMjAxNC0wOS0wOCAxNTowNzoyNy4zMzE5 OTQ0OTAgKzAyMDAKLUBAIC01MywyMDcgKzUzLDE4IEBACi0gCi0gI2luY2x1ZGUgImNyeXB0bGli LmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0tI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ Ci0tCi0tc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9pdltdID0gewotLSAgMHhB NiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwKLS19OwotKyNpbmNs dWRlIDxvcGVuc3NsL21vZGVzLmg+Ci0gCi0gaW50IEFFU193cmFwX2tleShBRVNfS0VZICprZXks IGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAotIAkJdW5zaWduZWQgY2hhciAqb3V0LAotIAkJY29u c3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbikKLSAJewotLQl1bnNpZ25l ZCBjaGFyICpBLCBCWzE2XSwgKlI7Ci0tCXVuc2lnbmVkIGludCBpLCBqLCB0OwotLQlpZiAoKGlu bGVuICYgMHg3KSB8fCAoaW5sZW4gPCA4KSkKLS0JCXJldHVybiAtMTsKLS0JQSA9IEI7Ci0tCXQg PSAxOwotLQltZW1jcHkob3V0ICsgOCwgaW4sIGlubGVuKTsKLS0JaWYgKCFpdikKLS0JCWl2ID0g ZGVmYXVsdF9pdjsKLS0KLS0JbWVtY3B5KEEsIGl2LCA4KTsKLS0KLS0JZm9yIChqID0gMDsgaiA8 IDY7IGorKykKLS0JCXsKLS0JCVIgPSBvdXQgKyA4OwotLQkJZm9yIChpID0gMDsgaSA8IGlubGVu OyBpICs9IDgsIHQrKywgUiArPSA4KQotLQkJCXsKLS0JCQltZW1jcHkoQiArIDgsIFIsIDgpOwot LQkJCUFFU19lbmNyeXB0KEIsIEIsIGtleSk7Ci0tCQkJQVs3XSBePSAodW5zaWduZWQgY2hhciko dCAmIDB4ZmYpOwotLQkJCWlmICh0ID4gMHhmZikJCi0tCQkJCXsKLS0JCQkJQVs2XSBePSAodW5z aWduZWQgY2hhcikoKHQgPj4gOCkgJiAweGZmKTsKLS0JCQkJQVs1XSBePSAodW5zaWduZWQgY2hh cikoKHQgPj4gMTYpICYgMHhmZik7Ci0tCQkJCUFbNF0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+ IDI0KSAmIDB4ZmYpOwotLQkJCQl9Ci0tCQkJbWVtY3B5KFIsIEIgKyA4LCA4KTsKLS0JCQl9Ci0t CQl9Ci0tCW1lbWNweShvdXQsIEEsIDgpOwotLQlyZXR1cm4gaW5sZW4gKyA4OwotKwlyZXR1cm4g Q1JZUFRPXzEyOF93cmFwKGtleSwgaXYsIG91dCwgaW4sIGlubGVuLCAoYmxvY2sxMjhfZilBRVNf ZW5jcnlwdCk7Ci0gCX0KLSAKLSBpbnQgQUVTX3Vud3JhcF9rZXkoQUVTX0tFWSAqa2V5LCBjb25z dCB1bnNpZ25lZCBjaGFyICppdiwKLSAJCXVuc2lnbmVkIGNoYXIgKm91dCwKLSAJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4pCi0gCXsKLS0JdW5zaWduZWQgY2hh ciAqQSwgQlsxNl0sICpSOwotLQl1bnNpZ25lZCBpbnQgaSwgaiwgdDsKLS0JaW5sZW4gLT0gODsK LS0JaWYgKGlubGVuICYgMHg3KQotLQkJcmV0dXJuIC0xOwotLQlpZiAoaW5sZW4gPCA4KQotLQkJ cmV0dXJuIC0xOwotLQlBID0gQjsKLS0JdCA9ICA2ICogKGlubGVuID4+IDMpOwotLQltZW1jcHko QSwgaW4sIDgpOwotLQltZW1jcHkob3V0LCBpbiArIDgsIGlubGVuKTsKLS0JZm9yIChqID0gMDsg aiA8IDY7IGorKykKLS0JCXsKLS0JCVIgPSBvdXQgKyBpbmxlbiAtIDg7Ci0tCQlmb3IgKGkgPSAw OyBpIDwgaW5sZW47IGkgKz0gOCwgdC0tLCBSIC09IDgpCi0tCQkJewotLQkJCUFbN10gXj0gKHVu c2lnbmVkIGNoYXIpKHQgJiAweGZmKTsKLS0JCQlpZiAodCA+IDB4ZmYpCQotLQkJCQl7Ci0tCQkJ CUFbNl0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDgpICYgMHhmZik7Ci0tCQkJCUFbNV0gXj0g KHVuc2lnbmVkIGNoYXIpKCh0ID4+IDE2KSAmIDB4ZmYpOwotLQkJCQlBWzRdIF49ICh1bnNpZ25l ZCBjaGFyKSgodCA+PiAyNCkgJiAweGZmKTsKLS0JCQkJfQotLQkJCW1lbWNweShCICsgOCwgUiwg OCk7Ci0tCQkJQUVTX2RlY3J5cHQoQiwgQiwga2V5KTsKLS0JCQltZW1jcHkoUiwgQiArIDgsIDgp OwotLQkJCX0KLS0JCX0KLS0JaWYgKCFpdikKLS0JCWl2ID0gZGVmYXVsdF9pdjsKLS0JaWYgKG1l bWNtcChBLCBpdiwgOCkpCi0tCQl7Ci0tCQlPUEVOU1NMX2NsZWFuc2Uob3V0LCBpbmxlbik7Ci0t CQlyZXR1cm4gMDsKLS0JCX0KLS0JcmV0dXJuIGlubGVuOwotLQl9Ci0tCi0tI2lmZGVmIEFFU19X UkFQX1RFU1QKLS0KLS1pbnQgQUVTX3dyYXBfdW53cmFwX3Rlc3QoY29uc3QgdW5zaWduZWQgY2hh ciAqa2VrLCBpbnQga2V5Yml0cywKLS0JCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0tCQkJ IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVvdXQsCi0tCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgaW50IGtleWxlbikKLS0JewotLQl1bnNpZ25lZCBjaGFyICpvdG1wID0gTlVMTCwgKnB0bXAg PSBOVUxMOwotLQlpbnQgciwgcmV0ID0gMDsKLS0JQUVTX0tFWSB3Y3R4OwotLQlvdG1wID0gT1BF TlNTTF9tYWxsb2Moa2V5bGVuICsgOCk7Ci0tCXB0bXAgPSBPUEVOU1NMX21hbGxvYyhrZXlsZW4p OwotLQlpZiAoIW90bXAgfHwgIXB0bXApCi0tCQlyZXR1cm4gMDsKLS0JaWYgKEFFU19zZXRfZW5j cnlwdF9rZXkoa2VrLCBrZXliaXRzLCAmd2N0eCkpCi0tCQlnb3RvIGVycjsKLS0JciA9IEFFU193 cmFwX2tleSgmd2N0eCwgaXYsIG90bXAsIGtleSwga2V5bGVuKTsKLS0JaWYgKHIgPD0gMCkKLS0J CWdvdG8gZXJyOwotLQotLQlpZiAoZW91dCAmJiBtZW1jbXAoZW91dCwgb3RtcCwga2V5bGVuKSkK LS0JCWdvdG8gZXJyOwotLQkJCi0tCWlmIChBRVNfc2V0X2RlY3J5cHRfa2V5KGtlaywga2V5Yml0 cywgJndjdHgpKQotLQkJZ290byBlcnI7Ci0tCXIgPSBBRVNfdW53cmFwX2tleSgmd2N0eCwgaXYs IHB0bXAsIG90bXAsIHIpOwotLQotLQlpZiAobWVtY21wKGtleSwgcHRtcCwga2V5bGVuKSkKLS0J CWdvdG8gZXJyOwotLQotLQlyZXQgPSAxOwotLQotLQllcnI6Ci0tCWlmIChvdG1wKQotLQkJT1BF TlNTTF9mcmVlKG90bXApOwotLQlpZiAocHRtcCkKLS0JCU9QRU5TU0xfZnJlZShwdG1wKTsKLS0K LS0JcmV0dXJuIHJldDsKLS0KLSsJcmV0dXJuIENSWVBUT18xMjhfdW53cmFwKGtleSwgaXYsIG91 dCwgaW4sIGlubGVuLCAoYmxvY2sxMjhfZilBRVNfZGVjcnlwdCk7Ci0gCX0KLS0KLS0KLS0KLS1p bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0tewotLQotLXN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGtla1tdID0gewotLSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgw NSwgMHgwNiwgMHgwNywKLS0gIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4 MGUsIDB4MGYsCi0tICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAw eDE3LAotLSAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZgot LX07Ci0tCi0tc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W10gPSB7Ci0tICAweDAwLCAw eDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAotLSAgMHg4OCwgMHg5OSwg MHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZiwKLS0gIDB4MDAsIDB4MDEsIDB4MDIs IDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0tICAweDA4LCAweDA5LCAweDBhLCAweDBi LCAweDBjLCAweDBkLCAweDBlLCAweDBmCi0tfTsKLS0KLS1zdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBlMVtdID0gewotLSAgMHgxZiwgMHhhNiwgMHg4YiwgMHgwYSwgMHg4MSwgMHgxMiwgMHhi NCwgMHg0NywKLS0gIDB4YWUsIDB4ZjMsIDB4NGIsIDB4ZDgsIDB4ZmIsIDB4NWEsIDB4N2IsIDB4 ODIsCi0tICAweDlkLCAweDNlLCAweDg2LCAweDIzLCAweDcxLCAweGQyLCAweGNmLCAweGU1Ci0t fTsKLS0KLS1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlMltdID0gewotLSAgMHg5NiwgMHg3 NywgMHg4YiwgMHgyNSwgMHhhZSwgMHg2YywgMHhhNCwgMHgzNSwKLS0gIDB4ZjksIDB4MmIsIDB4 NWIsIDB4OTcsIDB4YzAsIDB4NTAsIDB4YWUsIDB4ZDIsCi0tICAweDQ2LCAweDhhLCAweGI4LCAw eGExLCAweDdhLCAweGQ4LCAweDRlLCAweDVkCi0tfTsKLS0KLS1zdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBlM1tdID0gewotLSAgMHg2NCwgMHhlOCwgMHhjMywgMHhmOSwgMHhjZSwgMHgwZiwg MHg1YiwgMHhhMiwKLS0gIDB4NjMsIDB4ZTksIDB4NzcsIDB4NzksIDB4MDUsIDB4ODEsIDB4OGEs IDB4MmEsCi0tICAweDkzLCAweGM4LCAweDE5LCAweDFlLCAweDdkLCAweDZlLCAweDhhLCAweGU3 Ci0tfTsKLS0KLS1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlNFtdID0gewotLSAgMHgwMywg MHgxZCwgMHgzMywgMHgyNiwgMHg0ZSwgMHgxNSwgMHhkMywgMHgzMiwKLS0gIDB4NjgsIDB4ZjIs IDB4NGUsIDB4YzIsIDB4NjAsIDB4NzQsIDB4M2UsIDB4ZGMsCi0tICAweGUxLCAweGM2LCAweGM3 LCAweGRkLCAweGVlLCAweDcyLCAweDVhLCAweDkzLAotLSAgMHg2YiwgMHhhOCwgMHgxNCwgMHg5 MSwgMHg1YywgMHg2NywgMHg2MiwgMHhkMgotLX07Ci0tCi0tc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgZTVbXSA9IHsKLS0gIDB4YTgsIDB4ZjksIDB4YmMsIDB4MTYsIDB4MTIsIDB4YzYsIDB4 OGIsIDB4M2YsCi0tICAweGY2LCAweGU2LCAweGY0LCAweGZiLCAweGUzLCAweDBlLCAweDcxLCAw eGU0LAotLSAgMHg3NiwgMHg5YywgMHg4YiwgMHg4MCwgMHhhMywgMHgyYywgMHhiOCwgMHg5NSwK LS0gIDB4OGMsIDB4ZDUsIDB4ZDEsIDB4N2QsIDB4NmIsIDB4MjUsIDB4NGQsIDB4YTEKLS19Owot LQotLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGU2W10gPSB7Ci0tICAweDI4LCAweGM5LCAw eGY0LCAweDA0LCAweGM0LCAweGI4LCAweDEwLCAweGY0LAotLSAgMHhjYiwgMHhjYywgMHhiMywg MHg1YywgMHhmYiwgMHg4NywgMHhmOCwgMHgyNiwKLS0gIDB4M2YsIDB4NTcsIDB4ODYsIDB4ZTIs IDB4ZDgsIDB4MGUsIDB4ZDMsIDB4MjYsCi0tICAweGNiLCAweGM3LCAweGYwLCAweGU3LCAweDFh LCAweDk5LCAweGY0LCAweDNiLAotLSAgMHhmYiwgMHg5OCwgMHg4YiwgMHg5YiwgMHg3YSwgMHgw MiwgMHhkZCwgMHgyMQotLX07Ci0tCi0tCUFFU19LRVkgd2N0eCwgeGN0eDsKLS0JaW50IHJldDsK LS0JcmV0ID0gQUVTX3dyYXBfdW53cmFwX3Rlc3Qoa2VrLCAxMjgsIE5VTEwsIGUxLCBrZXksIDE2 KTsKLS0JZnByaW50ZihzdGRlcnIsICJLZXkgdGVzdCByZXN1bHQgJWRcbiIsIHJldCk7Ci0tCXJl dCA9IEFFU193cmFwX3Vud3JhcF90ZXN0KGtlaywgMTkyLCBOVUxMLCBlMiwga2V5LCAxNik7Ci0t CWZwcmludGYoc3RkZXJyLCAiS2V5IHRlc3QgcmVzdWx0ICVkXG4iLCByZXQpOwotLQlyZXQgPSBB RVNfd3JhcF91bndyYXBfdGVzdChrZWssIDI1NiwgTlVMTCwgZTMsIGtleSwgMTYpOwotLQlmcHJp bnRmKHN0ZGVyciwgIktleSB0ZXN0IHJlc3VsdCAlZFxuIiwgcmV0KTsKLS0JcmV0ID0gQUVTX3dy YXBfdW53cmFwX3Rlc3Qoa2VrLCAxOTIsIE5VTEwsIGU0LCBrZXksIDI0KTsKLS0JZnByaW50Zihz dGRlcnIsICJLZXkgdGVzdCByZXN1bHQgJWRcbiIsIHJldCk7Ci0tCXJldCA9IEFFU193cmFwX3Vu d3JhcF90ZXN0KGtlaywgMjU2LCBOVUxMLCBlNSwga2V5LCAyNCk7Ci0tCWZwcmludGYoc3RkZXJy LCAiS2V5IHRlc3QgcmVzdWx0ICVkXG4iLCByZXQpOwotLQlyZXQgPSBBRVNfd3JhcF91bndyYXBf dGVzdChrZWssIDI1NiwgTlVMTCwgZTYsIGtleSwgMzIpOwotLQlmcHJpbnRmKHN0ZGVyciwgIktl eSB0ZXN0IHJlc3VsdCAlZFxuIiwgcmV0KTsKLS19Ci0tCQotLQkKLS0jZW5kaWYKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvY19hbGxjLmMud3JhcCBvcGVuc3NsLTEuMC4xaS9j cnlwdG8vZXZwL2NfYWxsYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9jX2FsbGMu Yy53cmFwCTIwMTQtMDktMDggMTU6MDc6MjcuMjU0OTkyNzE3ICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWkvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDE0LTA5LTA4IDE1OjA3OjI3LjMzMTk5NDQ5MCAr MDIwMAotQEAgLTk4LDYgKzk4LDcgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lk KQotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VjYigpKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQ X2Rlc19lZGUoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19lZGUzX3dyYXAoKSk7Ci0gI2VuZGlmCi0gCi0gI2lmbmRlZiBPUEVO U1NMX05PX1JDNAotQEAgLTE3Nyw2ICsxNzgsOCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBo ZXJzKHZvaWQpCi0gCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2N0cigpKTsKLSAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOwotIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF94dHMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXAoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXBfcGFkKCkpOwotIAlFVlBfYWRkX2NpcGhlcl9hbGlh cyhTTl9hZXNfMTI4X2NiYywiQUVTMTI4Iik7Ci0gCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Fl c18xMjhfY2JjLCJhZXMxMjgiKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkp OwotQEAgLTE4Nyw2ICsxOTAsOCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQp Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsKLSAJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY3RyKCkpOwotIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7 Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXAoKSk7Ci0rCUVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTkyX3dyYXBfcGFkKCkpOwotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNf MTkyX2NiYywiQUVTMTkyIik7Ci0gCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2Jj LCJhZXMxOTIiKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOwotQEAgLTE5 OCw2ICsyMDMsOCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCi0gCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfZ2NtKCkpOwotIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dyYXAoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MjU2X3dyYXBfcGFkKCkpOwotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywi QUVTMjU2Iik7Ci0gCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJhZXMyNTYi KTsKLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBMSkKLUBAIC0yNTAsNiArMjU3LDcgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2 b2lkKQotIAotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZSgpKTsKLSAJRVZQX2FkZF9jaXBo ZXIoRVZQX2Rlc19lZGUzKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfd3JhcCgp KTsKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi1AQCAtMjYyLDYgKzI3MCw4 IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKLSAJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfY3RyKCkpOwotIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7 Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfd3JhcCgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfd3JhcF9w YWQoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJBRVMxMjgiKTsK LSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsImFlczEyOCIpOwotIAlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Ci1AQCAtMjcyLDYgKzI4Miw4IEBAIHZvaWQg T3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x OTJfb2ZiKCkpOwotIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIoKSk7Ci0gCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x OTJfd3JhcCgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfd3JhcF9wYWQoKSk7Ci0g CUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJBRVMxOTIiKTsKLSAJRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsImFlczE5MiIpOwotIAlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzI1Nl9lY2IoKSk7Ci1AQCAtMjgzLDYgKzI5NSw4IEBAIHZvaWQgT3BlblNTTF9h ZGRfYWxsX2NpcGhlcnModm9pZCkKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY3RyKCkp OwotIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7Ci0gCUVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMjU2X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcCgp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcF9wYWQoKSk7Ci0gCUVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsKLSAJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzI1Nl9jYmMsImFlczI1NiIpOwotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWkvY3J5cHRvL2V2cC9lX2Flcy5jLndyYXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2 cC9lX2Flcy5jCi0tLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9lX2Flcy5jLndyYXAJMjAx NC0wOS0wOCAxNTowNzoyNy4yNTU5OTI3NDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xaS9jcnlw dG8vZXZwL2VfYWVzLmMJMjAxNC0wOS0wOCAxNTowNzoyNy4zMzE5OTQ0OTAgKzAyMDAKLUBAIC0x LDUgKzEsNSBAQAotIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTEg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICogQ29weXJpZ2h0 IChjKSAyMDAxLTIwMTQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gICoKLSAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLUBAIC0xMzg0LDQgKzEzODQsMTgw IEBAIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywxMjgsMSwxMixjY20KLSBCTE9DS19DSVBI RVJfY3VzdG9tKE5JRF9hZXMsMTkyLDEsMTIsY2NtLENDTSxFVlBfQ0lQSF9GTEFHX0ZJUFN8Q1VT VE9NX0ZMQUdTKQotIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20sQ0NN LEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCi0gCi0rdHlwZWRlZiBzdHJ1Y3QKLSsJ ewotKwl1bmlvbiB7IGRvdWJsZSBhbGlnbjsgQUVTX0tFWSBrczsgfSBrczsKLSsJLyogSW5kaWNh dGVzIGlmIElWIGhhcyBiZWVuIHNldCAqLwotKwl1bnNpZ25lZCBjaGFyICppdjsKLSsJfSBFVlBf QUVTX1dSQVBfQ1RYOwotKwotK3N0YXRpYyBpbnQgYWVzX3dyYXBfaW5pdF9rZXkoRVZQX0NJUEhF Ul9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotKwl7Ci0rCUVWUF9BRVNf V1JBUF9DVFggKndjdHggPSBjdHgtPmNpcGhlcl9kYXRhOwotKwlpZiAoIWl2ICYmICFrZXkpCi0r CQlyZXR1cm4gMTsKLSsJaWYgKGtleSkKLSsJCXsKLSsJCWlmIChjdHgtPmVuY3J5cHQpCi0rCQkJ QUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgsICZ3Y3R4LT5rcy5rcyk7 Ci0rCQllbHNlCi0rCQkJQUVTX3NldF9kZWNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgs ICZ3Y3R4LT5rcy5rcyk7Ci0rCQlpZiAoIWl2KQotKwkJCXdjdHgtPml2ID0gTlVMTDsKLSsJCX0K LSsJaWYgKGl2KQotKwkJewotKwkJbWVtY3B5KGN0eC0+aXYsIGl2LCBFVlBfQ0lQSEVSX0NUWF9p dl9sZW5ndGgoY3R4KSk7Ci0rCQl3Y3R4LT5pdiA9IGN0eC0+aXY7Ci0rCQl9Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0rc3RhdGljIGludCBhZXNfd3JhcF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0 eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVf dCBpbmxlbikKLSsJewotKwlFVlBfQUVTX1dSQVBfQ1RYICp3Y3R4ID0gY3R4LT5jaXBoZXJfZGF0 YTsKLSsJc2l6ZV90IHJ2OwotKwkvKiBBRVMgd3JhcCB3aXRoIHBhZGRpbmcgaGFzIElWIGxlbmd0 aCBvZiA0LCB3aXRob3V0IHBhZGRpbmcgOCAqLwotKwlpbnQgcGFkID0gRVZQX0NJUEhFUl9DVFhf aXZfbGVuZ3RoKGN0eCkgPT0gNDsKLSsJLyogTm8gZmluYWwgb3BlcmF0aW9uIHNvIGFsd2F5cyBy ZXR1cm4gemVybyBsZW5ndGggKi8KLSsJaWYgKCFpbikKLSsJCXJldHVybiAwOwotKwkvKiBJbnB1 dCBsZW5ndGggbXVzdCBhbHdheXMgYmUgbm9uLXplcm8gKi8KLSsJaWYgKCFpbmxlbikKLSsJCXJl dHVybiAtMTsKLSsJLyogSWYgZGVjcnlwdGluZyBuZWVkIGF0IGxlYXN0IDE2IGJ5dGVzIGFuZCBt dWx0aXBsZSBvZiA4ICovCi0rCWlmICghY3R4LT5lbmNyeXB0ICYmIChpbmxlbiA8IDE2IHx8IGlu bGVuICYgMHg3KSkKLSsJCXJldHVybiAtMTsKLSsJLyogSWYgbm90IHBhZGRpbmcgaW5wdXQgbXVz dCBiZSBtdWx0aXBsZSBvZiA4ICovCi0rCWlmICghcGFkICYmIGlubGVuICYgMHg3KQotKwkJcmV0 dXJuIC0xOwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWlmIChjdHgtPmVuY3J5cHQpCi0rCQkJewot KwkJCS8qIElmIHBhZGRpbmcgcm91bmQgdXAgdG8gbXVsdGlwbGUgb2YgOCAqLwotKwkJCWlmIChw YWQpCi0rCQkJCWlubGVuID0gKGlubGVuICsgNykvOCAqIDg7Ci0rCQkJLyogOCBieXRlIHByZWZp eCAqLwotKwkJCXJldHVybiBpbmxlbiArIDg7Ci0rCQkJfQotKwkJZWxzZQotKwkJCXsKLSsJCQkv KiBJZiBub3QgcGFkZGluZyBvdXRwdXQgd2lsbCBiZSBleGFjdGx5IDggYnl0ZXMKLSsJCQkgKiBz bWFsbGVyIHRoYW4gaW5wdXQuIElmIHBhZGRpbmcgaXQgd2lsbCBiZSBhdAotKwkJCSAqIGxlYXN0 IDggYnl0ZXMgc21hbGxlciBidXQgd2UgZG9uJ3Qga25vdyBob3cKLSsJCQkgKiBtdWNoLgotKwkJ CSAqLwotKwkJCXJldHVybiBpbmxlbiAtIDg7Ci0rCQkJfQotKwkJfQotKwlpZiAocGFkKQotKwkJ ewotKwkJaWYgKGN0eC0+ZW5jcnlwdCkKLSsJCQlydiA9IENSWVBUT18xMjhfd3JhcF9wYWQoJndj dHgtPmtzLmtzLCB3Y3R4LT5pdiwKLSsJCQkJCQlvdXQsIGluLCBpbmxlbiwKLSsJCQkJCQkoYmxv Y2sxMjhfZilBRVNfZW5jcnlwdCk7Ci0rCQllbHNlCi0rCQkJcnYgPSBDUllQVE9fMTI4X3Vud3Jh cF9wYWQoJndjdHgtPmtzLmtzLCB3Y3R4LT5pdiwKLSsJCQkJCQlvdXQsIGluLCBpbmxlbiwKLSsJ CQkJCQkoYmxvY2sxMjhfZilBRVNfZGVjcnlwdCk7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWlm IChjdHgtPmVuY3J5cHQpCi0rCQkJcnYgPSBDUllQVE9fMTI4X3dyYXAoJndjdHgtPmtzLmtzLCB3 Y3R4LT5pdiwKLSsJCQkJCQlvdXQsIGluLCBpbmxlbiwKLSsJCQkJCQkoYmxvY2sxMjhfZilBRVNf ZW5jcnlwdCk7Ci0rCQllbHNlCi0rCQkJcnYgPSBDUllQVE9fMTI4X3Vud3JhcCgmd2N0eC0+a3Mu a3MsIHdjdHgtPml2LAotKwkJCQkJCW91dCwgaW4sIGlubGVuLAotKwkJCQkJCShibG9jazEyOF9m KUFFU19kZWNyeXB0KTsKLSsJCX0KLSsJcmV0dXJuIHJ2ID8gKGludClydiA6IC0xOwotKwl9Ci0r Ci0rI2RlZmluZSBXUkFQX0ZMQUdTCShFVlBfQ0lQSF9XUkFQX01PREUgfCBFVlBfQ0lQSF9GTEFH X0ZJUFMgXAotKwkJfCBFVlBfQ0lQSF9DVVNUT01fSVYgfCBFVlBfQ0lQSF9GTEFHX0NVU1RPTV9D SVBIRVIgXAotKwkJfCBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklUIHwgRVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEpCi0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYWVzXzEyOF93cmFwID0g ewotKwlOSURfaWRfYWVzMTI4X3dyYXAsCi0rCTgsIDE2LCA4LCBXUkFQX0ZMQUdTLAotKwlhZXNf d3JhcF9pbml0X2tleSwgYWVzX3dyYXBfY2lwaGVyLAotKwlOVUxMLAotKwlzaXplb2YoRVZQX0FF U19XUkFQX0NUWCksCi0rCU5VTEwsTlVMTCxOVUxMLE5VTEwgfTsKLSsKLStjb25zdCBFVlBfQ0lQ SEVSICpFVlBfYWVzXzEyOF93cmFwKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZhZXNfMTI4X3dyYXA7 Ci0rCX0KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfMTkyX3dyYXAgPSB7Ci0rCU5J RF9pZF9hZXMxOTJfd3JhcCwKLSsJOCwgMjQsIDgsIFdSQVBfRkxBR1MsCi0rCWFlc193cmFwX2lu aXRfa2V5LCBhZXNfd3JhcF9jaXBoZXIsCi0rCU5VTEwsCi0rCXNpemVvZihFVlBfQUVTX1dSQVBf Q1RYKSwKLSsJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OwotKwotK2NvbnN0IEVWUF9DSVBIRVIgKkVW UF9hZXNfMTkyX3dyYXAodm9pZCkKLSsJewotKwlyZXR1cm4gJmFlc18xOTJfd3JhcDsKLSsJfQot KwotK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGFlc18yNTZfd3JhcCA9IHsKLSsJTklEX2lkX2Fl czI1Nl93cmFwLAotKwk4LCAzMiwgOCwgV1JBUF9GTEFHUywKLSsJYWVzX3dyYXBfaW5pdF9rZXks IGFlc193cmFwX2NpcGhlciwKLSsJTlVMTCwKLSsJc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAot KwlOVUxMLE5VTEwsTlVMTCxOVUxMIH07Ci0rCi0rY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18y NTZfd3JhcCh2b2lkKQotKwl7Ci0rCXJldHVybiAmYWVzXzI1Nl93cmFwOwotKwl9Ci0rCi0rc3Rh dGljIGNvbnN0IEVWUF9DSVBIRVIgYWVzXzEyOF93cmFwX3BhZCA9IHsKLSsJTklEX2lkX2FlczEy OF93cmFwX3BhZCwKLSsJOCwgMTYsIDQsIFdSQVBfRkxBR1MsCi0rCWFlc193cmFwX2luaXRfa2V5 LCBhZXNfd3JhcF9jaXBoZXIsCi0rCU5VTEwsCi0rCXNpemVvZihFVlBfQUVTX1dSQVBfQ1RYKSwK LSsJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OwotKwotK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNf MTI4X3dyYXBfcGFkKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZhZXNfMTI4X3dyYXBfcGFkOwotKwl9 Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYWVzXzE5Ml93cmFwX3BhZCA9IHsKLSsJTklE X2lkX2FlczE5Ml93cmFwX3BhZCwKLSsJOCwgMjQsIDQsIFdSQVBfRkxBR1MsCi0rCWFlc193cmFw X2luaXRfa2V5LCBhZXNfd3JhcF9jaXBoZXIsCi0rCU5VTEwsCi0rCXNpemVvZihFVlBfQUVTX1dS QVBfQ1RYKSwKLSsJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OwotKwotK2NvbnN0IEVWUF9DSVBIRVIg KkVWUF9hZXNfMTkyX3dyYXBfcGFkKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZhZXNfMTkyX3dyYXBf cGFkOwotKwl9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYWVzXzI1Nl93cmFwX3BhZCA9 IHsKLSsJTklEX2lkX2FlczI1Nl93cmFwX3BhZCwKLSsJOCwgMzIsIDQsIFdSQVBfRkxBR1MsCi0r CWFlc193cmFwX2luaXRfa2V5LCBhZXNfd3JhcF9jaXBoZXIsCi0rCU5VTEwsCi0rCXNpemVvZihF VlBfQUVTX1dSQVBfQ1RYKSwKLSsJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OwotKwotK2NvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXBfcGFkKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZhZXNf MjU2X3dyYXBfcGFkOwotKwl9Ci0rCi0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9j cnlwdG8vZXZwL2VfZGVzMy5jLndyYXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9lX2RlczMu YwotLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZV9kZXMzLmMud3JhcAkyMDE0LTA5LTA4 IDE1OjA3OjI3LjI1NTk5Mjc0MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAv ZV9kZXMzLmMJMjAxNC0wOS0wOCAxNTowNzoyNy4zMzI5OTQ1MTMgKzAyMDAKLUBAIC0zMTAsNCAr MzEwLDExMiBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTModm9pZCkKLSB7Ci0gCXJl dHVybiAmZGVzX2VkZTNfZWNiOwotIH0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCi0rCi0r I2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg d3JhcF9pdls4XSA9IHsweDRhLDB4ZGQsMHhhMiwweDJjLDB4NzksMHhlOCwweDIxLDB4MDV9Owot KwotK3N0YXRpYyBpbnQgZGVzX2VkZTNfdW53cmFwKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwp Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBpY3ZbOF0sIGl2WzhdLCBzaGExdG1wW1NIQV9ESUdFU1Rf TEVOR1RIXTsKLSsJaW50IHJ2ID0gLTE7Ci0rCWlmIChpbmwgPCAyNCkKLSsJCXJldHVybiAtMTsK LSsJaWYgKCFvdXQpCi0rCQlyZXR1cm4gaW5sIC0gMTY7Ci0rCW1lbWNweShjdHgtPml2LCB3cmFw X2l2LCA4KTsKLSsJLyogRGVjcnlwdCBmaXJzdCBibG9jayB3aGljaCB3aWxsIGVuZCB1cCBhcyBp Y3YgKi8KLSsJZGVzX2VkZV9jYmNfY2lwaGVyKGN0eCwgaWN2LCBpbiwgOCk7Ci0rCS8qIERlY3J5 cHQgY2VudHJhbCBibG9ja3MgKi8KLSsJLyogSWYgZGVjcnlwdGluZyBpbiBwbGFjZSBtb3ZlIHdo b2xlIG91dHB1dCBhbG9uZyBhIGJsb2NrCi0rCSAqIHNvIHRoZSBuZXh0IGRlc19lZGVfY2JjX2Np cGhlciBpcyBpbiBwbGFjZS4KLSsJICovCi0rCWlmIChvdXQgPT0gaW4pCi0rCQl7Ci0rCQltZW1t b3ZlKG91dCwgb3V0ICsgOCwgaW5sIC0gOCk7Ci0rCQlpbiAtPSA4OwotKwkJfQotKwlkZXNfZWRl X2NiY19jaXBoZXIoY3R4LCBvdXQsIGluICsgOCwgaW5sIC0gMTYpOwotKwkvKiBEZWNyeXB0IGZp bmFsIGJsb2NrIHdoaWNoIHdpbGwgYmUgSVYgKi8KLSsJZGVzX2VkZV9jYmNfY2lwaGVyKGN0eCwg aXYsIGluICsgaW5sIC0gOCwgOCk7Ci0rCS8qIFJldmVyc2Ugb3JkZXIgb2YgZXZlcnl0aGluZyAq LwotKwlCVUZfcmV2ZXJzZShpY3YsIE5VTEwsIDgpOwotKwlCVUZfcmV2ZXJzZShvdXQsIE5VTEws IGlubCAtIDE2KTsKLSsJQlVGX3JldmVyc2UoY3R4LT5pdiwgaXYsIDgpOwotKwkvKiBEZWNyeXB0 IGFnYWluIHVzaW5nIG5ldyBJViAqLwotKwlkZXNfZWRlX2NiY19jaXBoZXIoY3R4LCBvdXQsIG91 dCwgaW5sIC0gMTYpOwotKwlkZXNfZWRlX2NiY19jaXBoZXIoY3R4LCBpY3YsIGljdiwgOCk7Ci0r CS8qIFdvcmsgb3V0IFNIQTEgaGFzaCBvZiBmaXJzdCBwb3J0aW9uICovCi0rCVNIQTEob3V0LCBp bmwgLSAxNiwgc2hhMXRtcCk7Ci0rCi0rCWlmICghQ1JZUFRPX21lbWNtcChzaGExdG1wLCBpY3Ys IDgpKQotKwkJcnYgPSBpbmwgLSAxNjsKLSsJT1BFTlNTTF9jbGVhbnNlKGljdiwgOCk7Ci0rCU9Q RU5TU0xfY2xlYW5zZShzaGExdG1wLCBTSEFfRElHRVNUX0xFTkdUSCk7Ci0rCU9QRU5TU0xfY2xl YW5zZShpdiwgOCk7Ci0rCU9QRU5TU0xfY2xlYW5zZShjdHgtPml2LCA4KTsKLSsJaWYgKHJ2ID09 IC0xKQotKwkJT1BFTlNTTF9jbGVhbnNlKG91dCwgaW5sIC0gMTYpOwotKwkKLSsJcmV0dXJuIHJ2 OwotKwl9Ci0rCi0rc3RhdGljIGludCBkZXNfZWRlM193cmFwKEVWUF9DSVBIRVJfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVf dCBpbmwpCi0rCXsKLSsJdW5zaWduZWQgY2hhciBzaGExdG1wW1NIQV9ESUdFU1RfTEVOR1RIXTsK LSsJaWYgKCFvdXQpCi0rCQlyZXR1cm4gaW5sICsgMTY7Ci0rCS8qIENvcHkgaW5wdXQgdG8gb3V0 cHV0IGJ1ZmZlciArIDggc28gd2UgaGF2ZSBzcGFjZSBmb3IgSVYgKi8KLSsJbWVtbW92ZShvdXQg KyA4LCBpbiwgaW5sKTsKLSsJLyogV29yayBvdXQgSUNWICovCi0rCVNIQTEoaW4sIGlubCwgc2hh MXRtcCk7Ci0rCW1lbWNweShvdXQgKyBpbmwgKyA4LCBzaGExdG1wLCA4KTsKLSsJT1BFTlNTTF9j bGVhbnNlKHNoYTF0bXAsIFNIQV9ESUdFU1RfTEVOR1RIKTsKLSsJLyogR2VuZXJhdGUgcmFuZG9t IElWICovCi0rCVJBTkRfYnl0ZXMoY3R4LT5pdiwgOCk7Ci0rCW1lbWNweShvdXQsIGN0eC0+aXYs IDgpOwotKwkvKiBFbmNyeXB0IGV2ZXJ5dGhpbmcgYWZ0ZXIgSVYgaW4gcGxhY2UgKi8KLSsJZGVz X2VkZV9jYmNfY2lwaGVyKGN0eCwgb3V0ICsgOCwgb3V0ICsgOCwgaW5sICsgOCk7Ci0rCUJVRl9y ZXZlcnNlKG91dCwgTlVMTCwgaW5sICsgMTYpOwotKwltZW1jcHkoY3R4LT5pdiwgd3JhcF9pdiwg OCk7Ci0rCWRlc19lZGVfY2JjX2NpcGhlcihjdHgsIG91dCwgb3V0LCBpbmwgKyAxNik7Ci0rCXJl dHVybiBpbmwgKyAxNjsKLSsJfQotKwotK3N0YXRpYyBpbnQgZGVzX2VkZTNfd3JhcF9jaXBoZXIo RVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkKLSsJewotKwkvKiBTYW5pdHkgY2hlY2sgaW5wdXQg bGVuZ3RoOiB3ZSB0eXBpY2FsbHkgb25seSB3cmFwIGtleXMKLSsJICogc28gRVZQX01BWENIVU5L IGlzIG1vcmUgdGhhbiB3aWxsIGV2ZXIgYmUgbmVlZGVkLiBBbHNvCi0rCSAqIGlucHV0IGxlbmd0 aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBiaXRzLgotKwkgKi8KLSsJaWYgKGlubCA+PSBFVlBf TUFYQ0hVTksgfHwgaW5sICUgOCkKLSsJCXJldHVybiAtMTsKLSsJaWYgKGN0eC0+ZW5jcnlwdCkK LSsJCXJldHVybiBkZXNfZWRlM193cmFwKGN0eCwgb3V0LCBpbiwgaW5sKTsKLSsJZWxzZQotKwkJ cmV0dXJuIGRlc19lZGUzX3Vud3JhcChjdHgsIG91dCwgaW4sIGlubCk7Ci0rCX0KLSsKLStzdGF0 aWMgY29uc3QgRVZQX0NJUEhFUiBkZXMzX3dyYXAgPSB7Ci0rCU5JRF9pZF9zbWltZV9hbGdfQ01T M0RFU3dyYXAsCi0rCTgsIDI0LCAwLAotKwlFVlBfQ0lQSF9XUkFQX01PREV8RVZQX0NJUEhfQ1VT VE9NX0lWfEVWUF9DSVBIX0ZMQUdfQ1VTVE9NX0NJUEhFUgotKwkJfEVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xfEVWUF9DSVBIX0ZMQUdfRklQUywKLSsJZGVzX2VkZTNfaW5pdF9rZXksIGRlc19l ZGUzX3dyYXBfY2lwaGVyLAotKwlOVUxMLAkKLSsJc2l6ZW9mKERFU19FREVfS0VZKSwKLSsJTlVM TCxOVUxMLE5VTEwsTlVMTCB9OwotKwotKwotK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRl M193cmFwKHZvaWQpCi0rCXsKLSsJcmV0dXJuICZkZXMzX3dyYXA7Ci0rCX0KLSsKLSsjIGVuZGlm Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cF9lbmMuYy53 cmFwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAu MWkvY3J5cHRvL2V2cC9ldnBfZW5jLmMud3JhcAkyMDE0LTA5LTA4IDE1OjA3OjI3LjI1NTk5Mjc0 MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTQtMDkt MDggMTU6MDc6MjcuMzMyOTk0NTEzICswMjAwCi1AQCAtMjMzLDcgKzIzMyw4IEBAIGludCBFVlBf Q2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAJCQljdHgtPmNpcGhlcl9kYXRhID0g TlVMTDsKLSAJCQl9Ci0gCQljdHgtPmtleV9sZW4gPSBjaXBoZXItPmtleV9sZW47Ci0tCQljdHgt PmZsYWdzID0gMDsKLSsJCS8qIFByZXNlcnZlIHdyYXAgZW5hYmxlIGZsYWcsIHplcm8gZXZlcnl0 aGluZyBlbHNlICovCi0rCQljdHgtPmZsYWdzICY9IEVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9B TExPVzsKLSAJCWlmKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0NUUkxfSU5JVCkKLSAJ CQl7Ci0gCQkJaWYoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBfQ1RSTF9JTklULCAwLCBO VUxMKSkKLUBAIC0yNTYsNiArMjU3LDEzIEBAIHNraXBfdG9faW5pdDoKLSAJICAgIHx8IGN0eC0+ Y2lwaGVyLT5ibG9ja19zaXplID09IDgKLSAJICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXpl ID09IDE2KTsKLSAKLSsJaWYoIShjdHgtPmZsYWdzICYgRVZQX0NJUEhFUl9DVFhfRkxBR19XUkFQ X0FMTE9XKQotKwkJJiYgRVZQX0NJUEhFUl9DVFhfbW9kZShjdHgpID09IEVWUF9DSVBIX1dSQVBf TU9ERSkKLSsJCXsKLSsJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfV1JB UF9NT0RFX05PVF9BTExPV0VEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotIAlpZighKEVWUF9D SVBIRVJfQ1RYX2ZsYWdzKGN0eCkgJiBFVlBfQ0lQSF9DVVNUT01fSVYpKSB7Ci0gCQlzd2l0Y2go RVZQX0NJUEhFUl9DVFhfbW9kZShjdHgpKSB7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9j cnlwdG8vZXZwL2V2cF9lcnIuYy53cmFwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwX2Vy ci5jCi0tLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnBfZXJyLmMud3JhcAkyMDE0LTA4 LTA2IDIzOjEwOjU2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9l dnAvZXZwX2Vyci5jCTIwMTQtMDktMDggMTU6MDc6MjcuMzMyOTk0NTEzICswMjAwCi1AQCAtMSw2 ICsxLDYgQEAKLSAvKiBjcnlwdG8vZXZwL2V2cF9lcnIuYyAqLwotIC8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t ICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLUBAIC0yMjAsNiArMjIwLDcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFVlBfc3Ry X3JlYXNvbnNbXQotIHtFUlJfUkVBU09OKEVWUF9SX1VOU1VQUE9SVEVEX1BSRikgICAgICAgLCJ1 bnN1cHBvcnRlZCBwcmYifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9VTlNVUFBPUlRFRF9QUklWQVRF X0tFWV9BTEdPUklUSE0pLCJ1bnN1cHBvcnRlZCBwcml2YXRlIGtleSBhbGdvcml0aG0ifSwKLSB7 RVJSX1JFQVNPTihFVlBfUl9VTlNVUFBPUlRFRF9TQUxUX1RZUEUpICwidW5zdXBwb3J0ZWQgc2Fs dCB0eXBlIn0sCi0re0VSUl9SRUFTT04oRVZQX1JfV1JBUF9NT0RFX05PVF9BTExPV0VEKSAsIndy YXAgbW9kZSBub3QgYWxsb3dlZCJ9LAotIHtFUlJfUkVBU09OKEVWUF9SX1dST05HX0ZJTkFMX0JM T0NLX0xFTkdUSCksIndyb25nIGZpbmFsIGJsb2NrIGxlbmd0aCJ9LAotIHtFUlJfUkVBU09OKEVW UF9SX1dST05HX1BVQkxJQ19LRVlfVFlQRSkgLCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUifSwKLSB7 MCxOVUxMfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnAuaC53cmFwIG9w ZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4xaS9jcnlwdG8v ZXZwL2V2cC5oLndyYXAJMjAxNC0wOS0wOCAxNTowNzoyNy4yNTY5OTI3NjMgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cC5oCTIwMTQtMDktMDggMTU6MDc6MjcuMzMyOTk0 NTEzICswMjAwCi1AQCAtMzM2LDYgKzMzNiw3IEBAIHN0cnVjdCBldnBfY2lwaGVyX3N0Ci0gI2Rl ZmluZQkJRVZQX0NJUEhfR0NNX01PREUJCTB4NgotICNkZWZpbmUJCUVWUF9DSVBIX0NDTV9NT0RF CQkweDcKLSAjZGVmaW5lCQlFVlBfQ0lQSF9YVFNfTU9ERQkJMHgxMDAwMQotKyNkZWZpbmUJCUVW UF9DSVBIX1dSQVBfTU9ERQkJMHgxMDAwMgotICNkZWZpbmUgCUVWUF9DSVBIX01PREUJCQkweEYw MDA3Ci0gLyogU2V0IGlmIHZhcmlhYmxlIGxlbmd0aCBjaXBoZXIgKi8KLSAjZGVmaW5lIAlFVlBf Q0lQSF9WQVJJQUJMRV9MRU5HVEgJMHg4Ci1AQCAtMzY3LDYgKzM2OCwxMyBAQCBzdHJ1Y3QgZXZw X2NpcGhlcl9zdAotICNkZWZpbmUgCUVWUF9DSVBIX0ZMQUdfQ1VTVE9NX0NJUEhFUgkweDEwMDAw MAotICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIJMHgyMDAwMDAKLSAKLSsvKiBD aXBoZXIgY29udGV4dCBmbGFnIHRvIGluZGljYXRlIHdlIGNhbiBoYW5kbGUKLSsgKiB3cmFwIG1v ZGU6IGlmIGFsbG93ZWQgaW4gb2xkZXIgYXBwbGljYXRpb25zIGl0IGNvdWxkCi0rICogb3ZlcmZs b3cgYnVmZmVycy4KLSsgKi8KLSsKLSsjZGVmaW5lIAlFVlBfQ0lQSEVSX0NUWF9GTEFHX1dSQVBf QUxMT1cJMHgxCi0rCi0gLyogY3RybCgpIHZhbHVlcyAqLwotIAotICNkZWZpbmUJCUVWUF9DVFJM X0lOSVQJCQkweDAKLUBAIC03MjksNiArNzM3LDcgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rl c19jYmModm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGVfY2JjKHZvaWQpOwot IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jYmModm9pZCk7Ci0gY29uc3QgRVZQX0NJ UEhFUiAqRVZQX2Rlc3hfY2JjKHZvaWQpOwotK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRl M193cmFwKHZvaWQpOwotIC8qIFRoaXMgc2hvdWxkIG5vdyBiZSBzdXBwb3J0ZWQgdGhyb3VnaCB0 aGUgZGV2X2NyeXB0byBFTkdJTkUuIEJ1dCBhbHNvLCB3aHkgYXJlCi0gICogcmM0IGFuZCBtZDUg ZGVjbGFyYXRpb25zIG1hZGUgaGVyZSBpbnNpZGUgYSAiTk9fREVTIiBwcmVjb21waWxlciBicmFu Y2g/ICovCi0gI2lmIDAKLUBAIC03ODgsNiArNzk3LDggQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQ X2Flc18xMjhfY3RyKHZvaWQpOwotIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NjbSh2 b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9nY20odm9pZCk7Ci0gY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfeHRzKHZvaWQpOwotK2NvbnN0IEVWUF9DSVBIRVIgKkVW UF9hZXNfMTI4X3dyYXAodm9pZCk7Ci0rY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfd3Jh cF9wYWQodm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfZWNiKHZvaWQpOwot IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NiYyh2b2lkKTsKLSBjb25zdCBFVlBfQ0lQ SEVSICpFVlBfYWVzXzE5Ml9jZmIxKHZvaWQpOwotQEAgLTc5OCw2ICs4MDksOCBAQCBjb25zdCBF VlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9vZmIodm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQ X2Flc18xOTJfY3RyKHZvaWQpOwotIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NjbSh2 b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9nY20odm9pZCk7Ci0rY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfd3JhcCh2b2lkKTsKLStjb25zdCBFVlBfQ0lQSEVSICpF VlBfYWVzXzE5Ml93cmFwX3BhZCh2b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1 Nl9lY2Iodm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2JjKHZvaWQpOwot IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEodm9pZCk7Ci1AQCAtODA5LDYgKzgy Miw4IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2N0cih2b2lkKTsKLSBjb25zdCBF VlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jY20odm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQ X2Flc18yNTZfZ2NtKHZvaWQpOwotIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3h0cyh2 b2lkKTsKLStjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl93cmFwKHZvaWQpOwotK2NvbnN0 IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXBfcGFkKHZvaWQpOwotICNpZiAhZGVmaW5lZChP UEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQotIGNvbnN0IEVWUF9D SVBIRVIgKkVWUF9hZXNfMTI4X2NiY19obWFjX3NoYTEodm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMSh2b2lkKTsKLUBAIC0xMzk3LDYgKzE0MTIsNyBA QCB2b2lkIEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRVZQX1JfVU5TVVBQ T1JURURfUFJGCQkJCSAxMjUKLSAjZGVmaW5lIEVWUF9SX1VOU1VQUE9SVEVEX1BSSVZBVEVfS0VZ X0FMR09SSVRITQkJIDExOAotICNkZWZpbmUgRVZQX1JfVU5TVVBQT1JURURfU0FMVF9UWVBFCQkJ IDEyNgotKyNkZWZpbmUgRVZQX1JfV1JBUF9NT0RFX05PVF9BTExPV0VECQkJIDE3MAotICNkZWZp bmUgRVZQX1JfV1JPTkdfRklOQUxfQkxPQ0tfTEVOR1RICQkJIDEwOQotICNkZWZpbmUgRVZQX1Jf V1JPTkdfUFVCTElDX0tFWV9UWVBFCQkJIDExMAotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkv Y3J5cHRvL2V2cC9ldnBfbGliLmMud3JhcCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cF9s aWIuYwotLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwX2xpYi5jLndyYXAJMjAxNC0w OS0wOCAxNTowNzoyNy4yNTY5OTI3NjMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xaS9jcnlwdG8v ZXZwL2V2cF9saWIuYwkyMDE0LTA5LTA4IDE1OjA3OjI3LjMzMjk5NDUxMyArMDIwMAotQEAgLTY4 LDcgKzY4LDE1IEBAIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8KLSAJ aWYgKGMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMtPmNp cGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotIAllbHNlIGlmIChjLT5jaXBoZXIt PmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0tCQlyZXQ9RVZQX0NJUEhFUl9z ZXRfYXNuMV9pdihjLCB0eXBlKTsKLSsJCXsKLSsJCWlmIChFVlBfQ0lQSEVSX0NUWF9tb2RlKGMp ID09IEVWUF9DSVBIX1dSQVBfTU9ERSkKLSsJCQl7Ci0rCQkJQVNOMV9UWVBFX3NldCh0eXBlLCBW X0FTTjFfTlVMTCwgTlVMTCk7Ci0rCQkJcmV0ID0gMTsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJcmV0 PUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYoYywgdHlwZSk7Ci0rCQl9Ci0gCWVsc2UKLSAJCXJldD0t MTsKLSAJcmV0dXJuKHJldCk7Ci1AQCAtODEsNyArODksMTEgQEAgaW50IEVWUF9DSVBIRVJfYXNu MV90b19wYXJhbShFVlBfQ0lQSEVSXwotIAlpZiAoYy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0 ZXJzICE9IE5VTEwpCi0gCQlyZXQ9Yy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlw ZSk7Ci0gCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRf QVNOMSkKLSsJCXsKLSsJCWlmIChFVlBfQ0lQSEVSX0NUWF9tb2RlKGMpID09IEVWUF9DSVBIX1dS QVBfTU9ERSkKLSsJCQlyZXR1cm4gMTsKLSAJCXJldD1FVlBfQ0lQSEVSX2dldF9hc24xX2l2KGMs IHR5cGUpOwotKwkJfQotIAllbHNlCi0gCQlyZXQ9LTE7Ci0gCXJldHVybihyZXQpOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnBfdGVzdC5jLndyYXAgb3BlbnNzbC0xLjAu MWkvY3J5cHRvL2V2cC9ldnBfdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9l dnBfdGVzdC5jLndyYXAJMjAxNC0wOC0wNiAyMzoxMDo1Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cF90ZXN0LmMJMjAxNC0wOS0wOCAxNTowNzoyNy4z MzM5OTQ1MzYgKzAyMDAKLUBAIC0xNDEsNyArMTQxLDcgQEAgc3RhdGljIHZvaWQgdGVzdDEoY29u c3QgRVZQX0NJUEhFUiAqYyxjbwotICAgICB7Ci0gICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSAg ICAgdW5zaWduZWQgY2hhciBvdXRbNDA5Nl07Ci0tICAgIGludCBvdXRsLG91dGwyOwotKyAgICBp bnQgb3V0bCxvdXRsMixtb2RlOwotIAotICAgICBwcmludGYoIlRlc3RpbmcgY2lwaGVyICVzJXNc biIsRVZQX0NJUEhFUl9uYW1lKGMpLAotIAkgICAoZW5jZGVjID09IDEgPyAiKGVuY3J5cHQpIiA6 IChlbmNkZWMgPT0gMCA/ICIoZGVjcnlwdCkiIDogIihlbmNyeXB0L2RlY3J5cHQpIikpKTsKLUBA IC0xNTEsNiArMTUxLDcgQEAgc3RhdGljIHZvaWQgdGVzdDEoY29uc3QgRVZQX0NJUEhFUiAqYyxj bwotICAgICBoZXhkdW1wKHN0ZG91dCwiUGxhaW50ZXh0IixwbGFpbnRleHQscG4pOwotICAgICBo ZXhkdW1wKHN0ZG91dCwiQ2lwaGVydGV4dCIsY2lwaGVydGV4dCxjbik7Ci0gICAgIAotKyAgICBt b2RlID0gRVZQX0NJUEhFUl9tb2RlKGMpOyAKLSAgICAgaWYoa24gIT0gYy0+a2V5X2xlbikKLSAJ ewotIAlmcHJpbnRmKHN0ZGVyciwiS2V5IGxlbmd0aCBkb2Vzbid0IG1hdGNoLCBnb3QgJWQgZXhw ZWN0ZWQgJWx1XG4iLGtuLAotQEAgLTE1OCw5ICsxNTksMTkgQEAgc3RhdGljIHZvaWQgdGVzdDEo Y29uc3QgRVZQX0NJUEhFUiAqYyxjbwotIAl0ZXN0MV9leGl0KDUpOwotIAl9Ci0gICAgIEVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4 LEVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9BTExPVyk7Ci0gICAgIGlmIChlbmNkZWMgIT0gMCkK LSAgICAgICAgIHsKLS0JaWYoIUVWUF9FbmNyeXB0SW5pdF9leCgmY3R4LGMsTlVMTCxrZXksaXYp KQotKwlpZiAobW9kZSA9PSBFVlBfQ0lQSF9XUkFQX01PREUpCi0rCSAgICB7Ci0rCSAgICBpZigh RVZQX0VuY3J5cHRJbml0X2V4KCZjdHgsYyxOVUxMLGtleSxpbiA/IGl2IDogTlVMTCkpCi0rCSAg ICAgICAgewotKwkJZnByaW50ZihzdGRlcnIsIkVuY3J5cHRJbml0IGZhaWxlZFxuIik7Ci0rCQlF UlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7Ci0rCQl0ZXN0MV9leGl0KDEwKTsKLSsJCX0KLSsJ ICAgIH0KLSsJZWxzZSBpZighRVZQX0VuY3J5cHRJbml0X2V4KCZjdHgsYyxOVUxMLGtleSxpdikp Ci0gCSAgICB7Ci0gCSAgICBmcHJpbnRmKHN0ZGVyciwiRW5jcnlwdEluaXQgZmFpbGVkXG4iKTsK LSAJICAgIEVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKLUBAIC0xOTksNyArMjEwLDE2IEBA IHN0YXRpYyB2b2lkIHRlc3QxKGNvbnN0IEVWUF9DSVBIRVIgKmMsY28KLSAKLSAgICAgaWYgKGVu Y2RlYyA8PSAwKQotICAgICAgICAgewotLQlpZighRVZQX0RlY3J5cHRJbml0X2V4KCZjdHgsYyxO VUxMLGtleSxpdikpCi0rCWlmIChtb2RlID09IEVWUF9DSVBIX1dSQVBfTU9ERSkKLSsJICAgIHsK LSsJICAgIGlmKCFFVlBfRGVjcnlwdEluaXRfZXgoJmN0eCxjLE5VTEwsa2V5LGluID8gaXYgOiBO VUxMKSkKLSsJICAgICAgICB7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiRW5jcnlwdEluaXQgZmFpbGVk XG4iKTsKLSsJCUVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKLSsJCXRlc3QxX2V4aXQoMTAp OwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFFVlBfRGVjcnlwdEluaXRfZXgoJmN0eCxjLE5V TEwsa2V5LGl2KSkKLSAJICAgIHsKLSAJICAgIGZwcmludGYoc3RkZXJyLCJEZWNyeXB0SW5pdCBm YWlsZWRcbiIpOwotIAkgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotQEAgLTMzOSw3 ICszNTksNyBAQCBpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSAJcGVycm9yKHN6VGVz dEZpbGUpOwotIAlFWElUKDIpOwotIAl9Ci0tCi0rICAgIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdz KCk7Ci0gICAgIC8qIExvYWQgdXAgdGhlIHNvZnR3YXJlIEVWUF9DSVBIRVIgYW5kIEVWUF9NRCBk ZWZpbml0aW9ucyAqLwotICAgICBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycygpOwotICAgICBPcGVu U1NMX2FkZF9hbGxfZGlnZXN0cygpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2 cC9ldnB0ZXN0cy50eHQud3JhcCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cHRlc3RzLnR4 dAotLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwdGVzdHMudHh0LndyYXAJMjAxNC0w OC0wNiAyMzoxMDo1Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xaS9jcnlwdG8v ZXZwL2V2cHRlc3RzLnR4dAkyMDE0LTA5LTA4IDE1OjA3OjI3LjMzMzk5NDUzNiArMDIwMAotQEAg LTMzMiwzICszMzIsMTUgQEAgU0VFRC1FQ0I6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MAotIFNFRUQtRUNCOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGOjowMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDpDMTFGMjJGMjAxNDA1MDUwODQ0ODM1OTdFNDM3MEY0Mzox Ci0gU0VFRC1FQ0I6NDcwNjQ4MDg1MUU2MUJFODVENzRCRkIzRkQ5NTYxODU6OjgzQTJGOEEyODg2 NDFGQjlBNEU5QTVDQzJGMTMxQzdEOkVFNTREMTNFQkNBRTcwNkQyMjZCQzMxNDJDRDQwRDRBOjEK LSBTRUVELUVDQjoyOERCQzNCQzQ5RkZEODdEQ0ZBNTA5QjExRDQyMkJFNzo6QjQxRTZCRTJFQkE4 NEExNDhFMkVFRDg0NTkzQzVFQzc6OUI5QjdCRkNEMTgxM0NCOTVEMEIzNjE4RjQwRjUxMjI6MQot KwotKyMgQUVTIHdyYXAgdGVzdHMgZnJvbSBSRkMzMzk0Ci0raWQtYWVzMTI4LXdyYXA6MDAwMTAy MDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEY6OjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERF RUZGOjFGQTY4QjBBODExMkI0NDdBRUYzNEJEOEZCNUE3QjgyOUQzRTg2MjM3MUQyQ0ZFNQotK2lk LWFlczE5Mi13cmFwOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1 MTYxNzo6MDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkY6OTY3NzhCMjVBRTZDQTQzNUY5 MkI1Qjk3QzA1MEFFRDI0NjhBQjhBMTdBRDg0RTVECi0raWQtYWVzMjU2LXdyYXA6MDAwMTAyMDMw NDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjo6 MDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkY6NjRFOEMzRjlDRTBGNUJBMjYzRTk3Nzc5 MDU4MThBMkE5M0M4MTkxRTdENkU4QUU3Ci0raWQtYWVzMTkyLXdyYXA6MDAwMTAyMDMwNDA1MDYw NzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3OjowMDExMjIzMzQ0NTU2Njc3ODg5OUFB QkJDQ0RERUVGRjAwMDEwMjAzMDQwNTA2MDc6MDMxRDMzMjY0RTE1RDMzMjY4RjI0RUMyNjA3NDNF RENFMUM2QzdEREVFNzI1QTkzNkJBODE0OTE1QzY3NjJEMgotK2lkLWFlczI1Ni13cmFwOjAwMDEw MjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFF MUY6OjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGMDAwMTAyMDMwNDA1MDYwNzpBOEY5 QkMxNjEyQzY4QjNGRjZFNkY0RkJFMzBFNzFFNDc2OUM4QjgwQTMyQ0I4OTU4Q0Q1RDE3RDZCMjU0 REExCi0raWQtYWVzMjU2LXdyYXA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDEx MTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjo6MDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NE REVFRkYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjoyOEM5RjQwNEM0QjgxMEY0Q0JD Q0IzNUNGQjg3RjgyNjNGNTc4NkUyRDgwRUQzMjZDQkM3RjBFNzFBOTlGNDNCRkI5ODhCOUI3QTAy REQyMQotKyMgQUVTIHdyYXAgdGVzdHMgZnJvbSBSRkM1NjQ5Ci0raWQtYWVzMTkyLXdyYXAtcGFk OjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDViZjE2ZWExYWU4MzM4ZjRkY2MxNzZhODo6YzM3Yjdl NjQ5MjU4NDM0MGJlZDEyMjA3ODA4OTQxMTU1MDY4ZjczODoxMzhiZGVhYTliOGZhN2ZjNjFmOTc3 NDJlNzIyNDhlZTVhZTZhZTUzNjBkMWFlNmE1ZjU0ZjM3M2ZhNTQzYjZhCi0raWQtYWVzMTkyLXdy YXAtcGFkOjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDViZjE2ZWExYWU4MzM4ZjRkY2MxNzZhODo6 NDY2ZjcyNTA2MTczNjk6YWZiZWIwZjA3ZGZiZjU0MTkyMDBmMmNjYjUwYmIyNGYKLSsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rlcy9NYWtlZmlsZS53cmFwIG9wZW5zc2wtMS4w LjFpL2NyeXB0by9tb2Rlcy9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rl cy9NYWtlZmlsZS53cmFwCTIwMTQtMDktMDggMTU6MDc6MjcuMjMzOTkyMjMzICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWkvY3J5cHRvL21vZGVzL01ha2VmaWxlCTIwMTQtMDktMDggMTU6MDc6Mjcu MzMzOTk0NTM2ICswMjAwCi1AQCAtMjIsOSArMjIsOSBAQCBBUFBTPQotIAotIExJQj0kKFRPUCkv bGliY3J5cHRvLmEKLSBMSUJTUkM9IGNiYzEyOC5jIGN0cjEyOC5jIGN0czEyOC5jIGNmYjEyOC5j IG9mYjEyOC5jIGdjbTEyOC5jIFwKLS0JY2NtMTI4LmMgeHRzMTI4LmMKLSsJY2NtMTI4LmMgeHRz MTI4LmMgd3JhcDEyOC5jCi0gTElCT0JKPSBjYmMxMjgubyBjdHIxMjgubyBjdHMxMjgubyBjZmIx MjgubyBvZmIxMjgubyBnY20xMjgubyBcCi0tCWNjbTEyOC5vIHh0czEyOC5vICQoTU9ERVNfQVNN X09CSikKLSsJY2NtMTI4Lm8geHRzMTI4Lm8gd3JhcDEyOC5vICQoTU9ERVNfQVNNX09CSikKLSAK LSBTUkM9ICQoTElCU1JDKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL21vZGVz L21vZGVzLmgud3JhcCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vbW9kZXMvbW9kZXMuaAotLS0tIG9w ZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rlcy9tb2Rlcy5oLndyYXAJMjAxNC0wOS0wOCAxNTowNzoy Ni44NjU5ODM3NTcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vbW9kZXMvbW9kZXMu aAkyMDE0LTA5LTA4IDE1OjA3OjI3LjMzMzk5NDUzNiArMDIwMAotQEAgLTEzMywzICsxMzMsMTcg QEAgdHlwZWRlZiBzdHJ1Y3QgeHRzMTI4X2NvbnRleHQgWFRTMTI4X0NPTgotIAotIGludCBDUllQ VE9feHRzMTI4X2VuY3J5cHQoY29uc3QgWFRTMTI4X0NPTlRFWFQgKmN0eCwgY29uc3QgdW5zaWdu ZWQgY2hhciBpdlsxNl0sCi0gCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucCwgdW5zaWduZWQgY2hh ciAqb3V0LCBzaXplX3QgbGVuLCBpbnQgZW5jKTsKLSsKLStzaXplX3QgQ1JZUFRPXzEyOF93cmFw KHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQl1bnNpZ25lZCBjaGFyICpv dXQsCi0rCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLCBibG9jazEyOF9m IGJsb2NrKTsKLSsKLStzaXplX3QgQ1JZUFRPXzEyOF91bndyYXAodm9pZCAqa2V5LCBjb25zdCB1 bnNpZ25lZCBjaGFyICppdiwKLSsJCXVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spOwotK3NpemVfdCBD UllQVE9fMTI4X3dyYXBfcGFkKHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaWN2LAot KwkJdW5zaWduZWQgY2hhciAqb3V0LAotKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVf dCBpbmxlbiwgYmxvY2sxMjhfZiBibG9jayk7Ci0rc2l6ZV90IENSWVBUT18xMjhfdW53cmFwX3Bh ZCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwKLSsJCXVuc2lnbmVkIGNoYXIg Km91dCwKLSsJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sIGJsb2NrMTI4 X2YgYmxvY2spOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL21vZGVzL3dyYXAxMjgu Yy53cmFwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rlcy93cmFwMTI4LmMKLS0tLSBvcGVuc3Ns LTEuMC4xaS9jcnlwdG8vbW9kZXMvd3JhcDEyOC5jLndyYXAJMjAxNC0wOS0wOCAxNTowNzoyNy4z MzM5OTQ1MzYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vbW9kZXMvd3JhcDEyOC5j CTIwMTQtMDktMDggMTU6MDc6MjcuMzMzOTk0NTM2ICswMjAwCi1AQCAtMCwwICsxLDM3MiBAQAot Ky8qIGNyeXB0by9tb2Rlcy93cmFwMTI4LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0 LgotKyAqIE1vZGUgd2l0aCBwYWRkaW5nIGNvbnRyaWJ1dGVkIGJ5IFBldHIgU3BhY2VrIChwc3Bh Y2VrQHJlZGhhdC5jb20pLgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDEzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq LwotKwotKy8qKiAgQmV3YXJlIQotKyAqCi0rICogIEZvbGxvd2luZyB3cmFwcGluZyBtb2RlcyB3 ZXJlIGRlc2lnbmVkIGZvciBBRVMgYnV0IHRoaXMgaW1wbGVtZW50YXRpb24KLSsgKiAgYWxsb3dz IHlvdSB0byB1c2UgdGhlbSBmb3IgYW55IDEyOCBiaXQgYmxvY2sgY2lwaGVyLgotKyAqLwotKwot KyNpbmNsdWRlICJjcnlwdGxpYi5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL21vZGVzLmg+Ci0rCi0r LyoqIFJGQyAzMzk0IHNlY3Rpb24gMi4yLjMuMSBEZWZhdWx0IEluaXRpYWwgVmFsdWUgKi8KLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZWZhdWx0X2l2W10gPSB7Ci0rICAweEE2LCAweEE2 LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LAotK307Ci0rCi0rLyoqIFJGQyA1 NjQ5IHNlY3Rpb24gMyBBbHRlcm5hdGl2ZSBJbml0aWFsIFZhbHVlIDMyLWJpdCBjb25zdGFudCAq LwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlZmF1bHRfYWl2W10gPSB7Ci0rICAweEE2 LCAweDU5LCAweDU5LCAweEE2Ci0rfTsKLSsKLSsvKiogSW5wdXQgc2l6ZSBsaW1pdDogbG93ZXIg dGhhbiBtYXhpbXVtIG9mIHN0YW5kYXJkcyBidXQgZmFyIGxhcmdlciB0aGFuCi0rICogIGFueXRo aW5nIHRoYXQgd2lsbCBiZSB1c2VkIGluIHByYWN0aWNlLgotKyAqLwotKyNkZWZpbmUgQ1JZUFRP MTI4X1dSQVBfTUFYICgxVUwgPDwgMzEpCi0rCi0rLyoqIFdyYXBwaW5nIGFjY29yZGluZyB0byBS RkMgMzM5NCBzZWN0aW9uIDIuMi4xLgotKyAqCi0rICogIEBwYXJhbVtpbl0gIGtleSAgICBLZXkg dmFsdWUuIAotKyAqICBAcGFyYW1baW5dICBpdiAgICAgSVYgdmFsdWUuIExlbmd0aCA9IDggYnl0 ZXMuIE5VTEwgPSB1c2UgZGVmYXVsdF9pdi4KLSsgKiAgQHBhcmFtW2luXSAgaW4gICAgIFBsYWlu IHRleHQgYXMgbiA2NC1iaXQgYmxvY2tzLCBuID49IDIuCi0rICogIEBwYXJhbVtpbl0gIGlubGVu ICBMZW5ndGggb2YgaW4uCi0rICogIEBwYXJhbVtvdXRdIG91dCAgICBDaXBoZXIgdGV4dC4gTWlu aW1hbCBidWZmZXIgbGVuZ3RoID0gKGlubGVuICsgOCkgYnl0ZXMuCi0rICogICAgICAgICAgICAg ICAgICAgICBJbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgY2FuIG92ZXJsYXAgaWYgYmxvY2sgZnVu Y3Rpb24KLSsgKiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHRoYXQuCi0rICogIEBwYXJh bVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotKyAqICBAcmV0dXJuICAg ICAgICAgICAgMCBpZiBpbmxlbiBkb2VzIG5vdCBjb25zaXN0IG9mIG4gNjQtYml0IGJsb2Nrcywg biA+PSAyLgotKyAqICAgICAgICAgICAgICAgICAgICAgb3IgaWYgaW5sZW4gPiBDUllQVE8xMjhf V1JBUF9NQVguCi0rICogICAgICAgICAgICAgICAgICAgICBPdXRwdXQgbGVuZ3RoIGlmIHdyYXBw aW5nIHN1Y2NlZWRlZC4KLSsgKi8KLStzaXplX3QgQ1JZUFRPXzEyOF93cmFwKHZvaWQgKmtleSwg Y29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQl1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQljb25z dCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLCBibG9jazEyOF9mIGJsb2NrKQotKwl7 Ci0rCXVuc2lnbmVkIGNoYXIgKkEsIEJbMTZdLCAqUjsKLSsJc2l6ZV90IGksIGosIHQ7Ci0rCWlm ICgoaW5sZW4gJiAweDcpIHx8IChpbmxlbiA8IDE2KSB8fCAoaW5sZW4gPiBDUllQVE8xMjhfV1JB UF9NQVgpKQotKwkJcmV0dXJuIDA7Ci0rCUEgPSBCOwotKwl0ID0gMTsKLSsJbWVtbW92ZShvdXQg KyA4LCBpbiwgaW5sZW4pOwotKwlpZiAoIWl2KQotKwkJaXYgPSBkZWZhdWx0X2l2OwotKwotKwlt ZW1jcHkoQSwgaXYsIDgpOwotKwotKwlmb3IgKGogPSAwOyBqIDwgNjsgaisrKQotKwkJewotKwkJ UiA9IG91dCArIDg7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkgKz0gOCwgdCsrLCBSICs9 IDgpCi0rCQkJewotKwkJCW1lbWNweShCICsgOCwgUiwgOCk7Ci0rCQkJYmxvY2soQiwgQiwga2V5 KTsKLSsJCQlBWzddIF49ICh1bnNpZ25lZCBjaGFyKSh0ICYgMHhmZik7Ci0rCQkJaWYgKHQgPiAw eGZmKQkKLSsJCQkJewotKwkJCQlBWzZdIF49ICh1bnNpZ25lZCBjaGFyKSgodCA+PiA4KSAmIDB4 ZmYpOwotKwkJCQlBWzVdIF49ICh1bnNpZ25lZCBjaGFyKSgodCA+PiAxNikgJiAweGZmKTsKLSsJ CQkJQVs0XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gMjQpICYgMHhmZik7Ci0rCQkJCX0KLSsJ CQltZW1jcHkoUiwgQiArIDgsIDgpOwotKwkJCX0KLSsJCX0KLSsJbWVtY3B5KG91dCwgQSwgOCk7 Ci0rCXJldHVybiBpbmxlbiArIDg7Ci0rCX0KLSsKLSsKLSsvKiogVW53cmFwcGluZyBhY2NvcmRp bmcgdG8gUkZDIDMzOTQgc2VjdGlvbiAyLjIuMiBzdGVwcyAxLTIuCi0rICogIElWIGNoZWNrIChz dGVwIDMpIGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIuCi0rICoKLSsgKiAgQHBhcmFt W2luXSAga2V5ICAgIEtleSB2YWx1ZS4gCi0rICogIEBwYXJhbVtvdXRdIGl2ICAgICBVbmNoZWNr ZWQgSVYgdmFsdWUuIE1pbmltYWwgYnVmZmVyIGxlbmd0aCA9IDggYnl0ZXMuCi0rICogIEBwYXJh bVtvdXRdIG91dCAgICBQbGFpbiB0ZXh0IHdpdGhvdXQgSVYuCi0rICogICAgICAgICAgICAgICAg ICAgICBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSAoaW5sZW4gLSA4KSBieXRlcy4KLSsgKiAgICAg ICAgICAgICAgICAgICAgIElucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBjYW4gb3ZlcmxhcCBpZiBi bG9jayBmdW5jdGlvbgotKyAqICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgdGhhdC4KLSsg KiAgQHBhcmFtW2luXSAgaW4gICAgIENpcGhlcnRleHQgdGV4dCBhcyBuIDY0LWJpdCBibG9ja3MK LSsgKiAgQHBhcmFtW2luXSAgaW5sZW4gIExlbmd0aCBvZiBpbi4KLSsgKiAgQHBhcmFtW2luXSAg YmxvY2sgIEJsb2NrIHByb2Nlc3NpbmcgZnVuY3Rpb24uCi0rICogIEByZXR1cm4gICAgICAgICAg ICAwIGlmIGlubGVuIGlzIG91dCBvZiByYW5nZSBbMjQsIENSWVBUTzEyOF9XUkFQX01BWF0KLSsg KiAgICAgICAgICAgICAgICAgICAgIG9yIGlmIGlubGVuIGlzIG5vdCBtdWx0aXBseSBvZiA4Lgot KyAqICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IGxlbmd0aCBvdGhlcndpc2UuCi0rICovCi0r c3RhdGljIHNpemVfdCBjcnlwdG9fMTI4X3Vud3JhcF9yYXcodm9pZCAqa2V5LCB1bnNpZ25lZCBj aGFyICppdiwKLSsJCXVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4s Ci0rCQlzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spCi0rCXsKLSsJdW5zaWduZWQgY2hh ciAqQSwgQlsxNl0sICpSOwotKwlzaXplX3QgaSwgaiwgdDsKLSsJaW5sZW4gLT0gODsKLSsJaWYg KChpbmxlbiAmIDB4NykgfHwgKGlubGVuIDwgMTYpIHx8IChpbmxlbiA+IENSWVBUTzEyOF9XUkFQ X01BWCkpCi0rCQlyZXR1cm4gMDsKLSsJQSA9IEI7Ci0rCXQgPSAgNiAqIChpbmxlbiA+PiAzKTsK LSsJbWVtY3B5KEEsIGluLCA4KTsKLSsJbWVtbW92ZShvdXQsIGluICsgOCwgaW5sZW4pOwotKwlm b3IgKGogPSAwOyBqIDwgNjsgaisrKQotKwkJewotKwkJUiA9IG91dCArIGlubGVuIC0gODsKLSsJ CWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSArPSA4LCB0LS0sIFIgLT0gOCkKLSsJCQl7Ci0rCQkJ QVs3XSBePSAodW5zaWduZWQgY2hhcikodCAmIDB4ZmYpOwotKwkJCWlmICh0ID4gMHhmZikJCi0r CQkJCXsKLSsJCQkJQVs2XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gOCkgJiAweGZmKTsKLSsJ CQkJQVs1XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gMTYpICYgMHhmZik7Ci0rCQkJCUFbNF0g Xj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDI0KSAmIDB4ZmYpOwotKwkJCQl9Ci0rCQkJbWVtY3B5 KEIgKyA4LCBSLCA4KTsKLSsJCQlibG9jayhCLCBCLCBrZXkpOwotKwkJCW1lbWNweShSLCBCICsg OCwgOCk7Ci0rCQkJfQotKwkJfQotKwltZW1jcHkoaXYsIEEsIDgpOwotKwlyZXR1cm4gaW5sZW47 Ci0rCX0KLSsKLSsvKiogVW53cmFwcGluZyBhY2NvcmRpbmcgdG8gUkZDIDMzOTQgc2VjdGlvbiAy LjIuMiBpbmNsdWRpbmcgSVYgY2hlY2suCi0rICogIEZpcnN0IGJsb2NrIG9mIHBsYWluIHRleHQg aGF2ZSB0byBtYXRjaCBzdXBwbGllZCBJViBvdGhlcndpc2UgYW4gZXJyb3IgaXMKLSsgKiAgcmV0 dXJuZWQuCi0rICoKLSsgKiAgQHBhcmFtW2luXSAga2V5ICAgIEtleSB2YWx1ZS4gCi0rICogIEBw YXJhbVtvdXRdIGl2ICAgICBVbmNoZWNrZWQgSVYgdmFsdWUuIE1pbmltYWwgYnVmZmVyIGxlbmd0 aCA9IDggYnl0ZXMuCi0rICogIEBwYXJhbVtvdXRdIG91dCAgICBQbGFpbiB0ZXh0IHdpdGhvdXQg SVYuCi0rICogICAgICAgICAgICAgICAgICAgICBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSAoaW5s ZW4gLSA4KSBieXRlcy4KLSsgKiAgICAgICAgICAgICAgICAgICAgIElucHV0IGFuZCBvdXRwdXQg YnVmZmVycyBjYW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgotKyAqICAgICAgICAgICAgICAg ICAgICAgc3VwcG9ydHMgdGhhdC4KLSsgKiAgQHBhcmFtW2luXSAgaW4gICAgIENpcGhlcnRleHQg dGV4dCBhcyBuIDY0LWJpdCBibG9ja3MKLSsgKiAgQHBhcmFtW2luXSAgaW5sZW4gIExlbmd0aCBv ZiBpbi4KLSsgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2NrIHByb2Nlc3NpbmcgZnVuY3Rpb24u Ci0rICogIEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVuIGlzIG91dCBvZiByYW5nZSBbMjQs IENSWVBUTzEyOF9XUkFQX01BWF0KLSsgKiAgICAgICAgICAgICAgICAgICAgIG9yIGlmIGlubGVu IGlzIG5vdCBtdWx0aXBseSBvZiA4Ci0rICogICAgICAgICAgICAgICAgICAgICBvciBpZiBJViBk b2Vzbid0IG1hdGNoIGV4cGVjdGVkIHZhbHVlLgotKyAqICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0IGxlbmd0aCBvdGhlcndpc2UuCi0rICovCi0rc2l6ZV90IENSWVBUT18xMjhfdW53cmFwKHZv aWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQl1bnNpZ25lZCBjaGFyICpvdXQs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sCi0rCQlibG9jazEyOF9mIGJs b2NrKQotKwl7Ci0rCXNpemVfdCByZXQ7Ci0rCXVuc2lnbmVkIGNoYXIgZ290X2l2WzhdOwotKwot KwlyZXQgPSBjcnlwdG9fMTI4X3Vud3JhcF9yYXcoa2V5LCBnb3RfaXYsIG91dCwgaW4sIGlubGVu LCBibG9jayk7Ci0rCWlmIChyZXQgIT0gaW5sZW4pCi0rCQlyZXR1cm4gcmV0OwotKwotKwlpZiAo IWl2KQotKwkJaXYgPSBkZWZhdWx0X2l2OwotKwlpZiAoQ1JZUFRPX21lbWNtcChvdXQsIGl2LCA4 KSkKLSsJCXsKLSsJCU9QRU5TU0xfY2xlYW5zZShvdXQsIGlubGVuKTsKLSsJCXJldHVybiAwOwot KwkJfQotKwlyZXR1cm4gaW5sZW47Ci0rCX0KLSsKLSsvKiogV3JhcHBpbmcgYWNjb3JkaW5nIHRv IFJGQyA1NjQ5IHNlY3Rpb24gNC4xLgotKyAqCi0rICogIEBwYXJhbVtpbl0gIGtleSAgICBLZXkg dmFsdWUuIAotKyAqICBAcGFyYW1baW5dICBpY3YgICAgKE5vbi1zdGFuZGFyZCkgSVYsIDQgYnl0 ZXMuIE5VTEwgPSB1c2UgZGVmYXVsdF9haXYuCi0rICogIEBwYXJhbVtvdXRdIG91dCAgICBDaXBo ZXIgdGV4dC4gTWluaW1hbCBidWZmZXIgbGVuZ3RoID0gKGlubGVuICsgMTUpIGJ5dGVzLgotKyAq ICAgICAgICAgICAgICAgICAgICAgSW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGNhbiBvdmVybGFw IGlmIGJsb2NrIGZ1bmN0aW9uCi0rICogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyB0aGF0 LgotKyAqICBAcGFyYW1baW5dICBpbiAgICAgUGxhaW4gdGV4dCBhcyBuIDY0LWJpdCBibG9ja3Ms IG4gPj0gMi4KLSsgKiAgQHBhcmFtW2luXSAgaW5sZW4gIExlbmd0aCBvZiBpbi4KLSsgKiAgQHBh cmFtW2luXSAgYmxvY2sgIEJsb2NrIHByb2Nlc3NpbmcgZnVuY3Rpb24uCi0rICogIEByZXR1cm4g ICAgICAgICAgICAwIGlmIGlubGVuIGlzIG91dCBvZiByYW5nZSBbMSwgQ1JZUFRPMTI4X1dSQVBf TUFYXS4KLSsgKiAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBsZW5ndGggaWYgd3JhcHBpbmcg c3VjY2VlZGVkLgotKyAqLwotK3NpemVfdCBDUllQVE9fMTI4X3dyYXBfcGFkKHZvaWQgKmtleSwg Y29uc3QgdW5zaWduZWQgY2hhciAqaWN2LAotKwkJdW5zaWduZWQgY2hhciAqb3V0LAotKwkJY29u c3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbiwgYmxvY2sxMjhfZiBibG9jaykKLSsJ ewotKwkvKiBuOiBudW1iZXIgb2YgNjQtYml0IGJsb2NrcyBpbiB0aGUgcGFkZGVkIGtleSBkYXRh ICovCi0rCWNvbnN0IHNpemVfdCBibG9ja3NfcGFkZGVkID0gKGlubGVuICsgOCkgLyA4OwotKwlj b25zdCBzaXplX3QgcGFkZGVkX2xlbiA9IGJsb2Nrc19wYWRkZWQgKiA4OwotKwljb25zdCBzaXpl X3QgcGFkZGluZ19sZW4gPSBwYWRkZWRfbGVuIC0gaW5sZW47Ci0rCS8qIFJGQyA1NjQ5IHNlY3Rp b24gMzogQWx0ZXJuYXRpdmUgSW5pdGlhbCBWYWx1ZSAqLwotKwl1bnNpZ25lZCBjaGFyIGFpdls4 XTsKLSsJaW50IHJldDsKLSsKLSsJLyogU2VjdGlvbiAxOiB1c2UgMzItYml0IGZpeGVkIGZpZWxk IGZvciBwbGFpbnRleHQgb2N0ZXQgbGVuZ3RoICovCi0rCWlmIChpbmxlbiA9PSAwIHx8IGlubGVu ID49IENSWVBUTzEyOF9XUkFQX01BWCkKLSsJCXJldHVybiAwOwotKwotKwkvKiBTZWN0aW9uIDM6 IEFsdGVybmF0aXZlIEluaXRpYWwgVmFsdWUgKi8KLSsJaWYgKCFpY3YpCi0rCQltZW1jcHkoYWl2 LCBkZWZhdWx0X2FpdiwgNCk7Ci0rCWVsc2UKLSsJCW1lbWNweShhaXYsIGljdiwgNCk7IC8qIFN0 YW5kYXJkIGRvZXNuJ3QgbWVudGlvbiB0aGlzLiAqLwotKwotKwlhaXZbNF0gPSAoaW5sZW4gPj4g MjQpICYgMHhGRjsKLSsJYWl2WzVdID0gKGlubGVuID4+IDE2KSAmIDB4RkY7Ci0rCWFpdls2XSA9 IChpbmxlbiA+PiA4KSAmIDB4RkY7Ci0rCWFpdls3XSA9IGlubGVuICYgMHhGRjsKLSsKLSsJaWYg KHBhZGRlZF9sZW4gPT0gOCkKLSsJCXsKLSsJCS8qIFNlY3Rpb24gNC4xIC0gc3BlY2lhbCBjYXNl IGluIHN0ZXAgMjoKLSsJCSAqIElmIHRoZSBwYWRkZWQgcGxhaW50ZXh0IGNvbnRhaW5zIGV4YWN0 bHkgZWlnaHQgb2N0ZXRzLCB0aGVuCi0rCQkgKiBwcmVwZW5kIHRoZSBBSVYgYW5kIGVuY3J5cHQg dGhlIHJlc3VsdGluZyAxMjgtYml0IGJsb2NrCi0rCQkgKiB1c2luZyBBRVMgaW4gRUNCIG1vZGUu ICovCi0rCQltZW1tb3ZlKG91dCArIDgsIGluLCBpbmxlbik7Ci0rCQltZW1jcHkob3V0LCBhaXYs IDgpOwotKwkJbWVtc2V0KG91dCArIDggKyBpbmxlbiwgMCwgcGFkZGluZ19sZW4pOwotKwkJYmxv Y2sob3V0LCBvdXQsIGtleSk7Ci0rCQlyZXQgPSAxNjsgLyogQUlWICsgcGFkZGVkIGlucHV0ICov Ci0rCQl9Ci0rCQllbHNlCi0rCQl7Ci0rCQltZW1tb3ZlKG91dCwgaW4sIGlubGVuKTsKLSsJCW1l bXNldChvdXQgKyBpbmxlbiwgMCwgcGFkZGluZ19sZW4pOyAvKiBTZWN0aW9uIDQuMSBzdGVwIDEg Ki8KLSsJCXJldCA9IENSWVBUT18xMjhfd3JhcChrZXksIGFpdiwgb3V0LCBvdXQsIHBhZGRlZF9s ZW4sIGJsb2NrKTsKLSsJCX0KLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKy8qKiBVbndyYXBw aW5nIGFjY29yZGluZyB0byBSRkMgNTY0OSBzZWN0aW9uIDQuMi4KLSsgKgotKyAqICBAcGFyYW1b aW5dICBrZXkgICAgS2V5IHZhbHVlLiAKLSsgKiAgQHBhcmFtW2luXSAgaWN2ICAgIChOb24tc3Rh bmRhcmQpIElWLCA0IGJ5dGVzLiBOVUxMID0gdXNlIGRlZmF1bHRfYWl2LgotKyAqICBAcGFyYW1b b3V0XSBvdXQgICAgUGxhaW4gdGV4dC4gTWluaW1hbCBidWZmZXIgbGVuZ3RoID0gaW5sZW4gYnl0 ZXMuCi0rICogICAgICAgICAgICAgICAgICAgICBJbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgY2Fu IG92ZXJsYXAgaWYgYmxvY2sgZnVuY3Rpb24KLSsgKiAgICAgICAgICAgICAgICAgICAgIHN1cHBv cnRzIHRoYXQuCi0rICogIEBwYXJhbVtpbl0gIGluICAgICBDaXBoZXJ0ZXh0IHRleHQgYXMgbiA2 NC1iaXQgYmxvY2tzCi0rICogIEBwYXJhbVtpbl0gIGlubGVuICBMZW5ndGggb2YgaW4uCi0rICog IEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotKyAqICBAcmV0 dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBpcyBvdXQgb2YgcmFuZ2UgWzE2LCBDUllQVE8xMjhf V1JBUF9NQVhdLAotKyAqICAgICAgICAgICAgICAgICAgICAgb3IgaWYgaW5sZW4gaXMgbm90IG11 bHRpcGx5IG9mIDgKLSsgKiAgICAgICAgICAgICAgICAgICAgIG9yIGlmIElWIGFuZCBtZXNzYWdl IGxlbmd0aCBpbmRpY2F0b3IgZG9lc24ndCBtYXRjaC4KLSsgKiAgICAgICAgICAgICAgICAgICAg IE91dHB1dCBsZW5ndGggaWYgdW53cmFwcGluZyBzdWNjZWVkZWQgYW5kIElWIG1hdGNoZXMuCi0r ICovCi0rc2l6ZV90IENSWVBUT18xMjhfdW53cmFwX3BhZCh2b2lkICprZXksIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmljdiwKLSsJCXVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluLCBzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spCi0rCXsKLSsJLyogbjog bnVtYmVyIG9mIDY0LWJpdCBibG9ja3MgaW4gdGhlIHBhZGRlZCBrZXkgZGF0YSAqLwotKwlzaXpl X3QgbiA9IGlubGVuIC8gOCAtIDE7Ci0rCXNpemVfdCBwYWRkZWRfbGVuOwotKwlzaXplX3QgcGFk ZGluZ19sZW47Ci0rCXNpemVfdCBwdGV4dF9sZW47Ci0rCS8qIFJGQyA1NjQ5IHNlY3Rpb24gMzog QWx0ZXJuYXRpdmUgSW5pdGlhbCBWYWx1ZSAqLwotKwl1bnNpZ25lZCBjaGFyIGFpdls4XTsKLSsJ c3RhdGljIHVuc2lnbmVkIGNoYXIgemVyb3NbOF0gPSB7MHgwfTsKLSsJc2l6ZV90IHJldDsKLSsK LSsJLyogU2VjdGlvbiA0LjI6IENpcGhlciB0ZXh0IGxlbmd0aCBoYXMgdG8gYmUgKG4rMSkgNjQt Yml0IGJsb2Nrcy4gKi8KLSsJaWYgKChpbmxlbiAmIDB4NykgIT0gMCB8fCBpbmxlbiA8IDE2IHx8 IGlubGVuID49IENSWVBUTzEyOF9XUkFQX01BWCkKLSsJCXJldHVybiAwOwotKwotKwltZW1tb3Zl KG91dCwgaW4sIGlubGVuKTsKLSsJaWYgKGlubGVuID09IDE2KQotKwkJewotKwkJLyogU2VjdGlv biA0LjIgLSBzcGVjaWFsIGNhc2UgaW4gc3RlcCAxOgotKwkJICogV2hlbiBuPTEsIHRoZSBjaXBo ZXJ0ZXh0IGNvbnRhaW5zIGV4YWN0bHkgdHdvIDY0LWJpdAotKwkJICogYmxvY2tzIGFuZCB0aGV5 IGFyZSBkZWNyeXB0ZWQgYXMgYSBzaW5nbGUgQUVTCi0rCQkgKiBibG9jayB1c2luZyBBRVMgaW4g RUNCIG1vZGU6Ci0rCQkgKiBBSVYgfCBQWzFdID0gREVDKEssIENbMF0gfCBDWzFdKQotKwkJICov Ci0rCQlibG9jayhvdXQsIG91dCwga2V5KTsKLSsJCW1lbWNweShhaXYsIG91dCwgOCk7Ci0rCQkv KiBSZW1vdmUgQUlWICovCi0rCQltZW1tb3ZlKG91dCwgb3V0ICsgOCwgOCk7Ci0rCQlwYWRkZWRf bGVuID0gODsKLSsJCX0KLSsJCWVsc2UKLSsJCXsKLSsJCXBhZGRlZF9sZW4gPSBpbmxlbiAtIDg7 Ci0rCQlyZXQgPSBjcnlwdG9fMTI4X3Vud3JhcF9yYXcoa2V5LCBhaXYsIG91dCwgb3V0LCBpbmxl biwgYmxvY2spOwotKwkJaWYgKHBhZGRlZF9sZW4gIT0gcmV0KQotKwkJCXsKLSsJCQlPUEVOU1NM X2NsZWFuc2Uob3V0LCBpbmxlbik7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwotKwkv KiBTZWN0aW9uIDM6IEFJViBjaGVja3M6IENoZWNrIHRoYXQgTVNCKDMyLEEpID0gQTY1OTU5QTYu Ci0rCSAqIE9wdGlvbmFsbHkgYSB1c2VyLXN1cHBsaWVkIHZhbHVlIGNhbiBiZSB1c2VkCi0rCSAq IChldmVuIGlmIHN0YW5kYXJkIGRvZXNuJ3QgbWVudGlvbiB0aGlzKS4gKi8KLSsJaWYgKCghaWN2 ICYmIENSWVBUT19tZW1jbXAoYWl2LCBkZWZhdWx0X2FpdiwgNCkpCi0rCQl8fCAoaWN2ICYmIENS WVBUT19tZW1jbXAoYWl2LCBpY3YsIDQpKSkKLSsJCXsKLSsJCU9QRU5TU0xfY2xlYW5zZShvdXQs IGlubGVuKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwkvKiBDaGVjayB0aGF0IDgqKG4tMSkg PCBMU0IoMzIsQUlWKSA8PSA4Km4uCi0rCSAqIElmIHNvLCBsZXQgcHRleHRfbGVuID0gTFNCKDMy LEFJVikuICovCi0rCi0rCXB0ZXh0X2xlbiA9IChhaXZbNF0gPDwgMjQpIHwgKGFpdls1XSA8PCAx NikgfCAoYWl2WzZdIDw8IDgpIHwgYWl2WzddOwotKwlpZiAoOCoobi0xKSA+PSBwdGV4dF9sZW4g fHwgcHRleHRfbGVuID4gOCpuKQotKwkJewotKwkJT1BFTlNTTF9jbGVhbnNlKG91dCwgaW5sZW4p OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCS8qIENoZWNrIHRoYXQgdGhlIHJpZ2h0bW9zdCBw YWRkaW5nX2xlbiBvY3RldHMgb2YgdGhlIG91dHB1dCBkYXRhCi0rCSAqIGFyZSB6ZXJvLiAqLwot KwlwYWRkaW5nX2xlbiA9IHBhZGRlZF9sZW4gLSBwdGV4dF9sZW47Ci0rCWlmIChDUllQVE9fbWVt Y21wKG91dCArIHB0ZXh0X2xlbiwgemVyb3MsIHBhZGRpbmdfbGVuKSAhPSAwKQotKwkJewotKwkJ T1BFTlNTTF9jbGVhbnNlKG91dCwgaW5sZW4pOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCS8q IFNlY3Rpb24gNC4yIHN0ZXAgMzogUmVtb3ZlIHBhZGRpbmcgKi8KLSsJcmV0dXJuIHB0ZXh0X2xl bjsKLSsJfQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFqLWVwaGVtZXJhbC1rZXktc2l6ZS5w YXRjaCBiL29wZW5zc2wtMS4wLjFqLWVwaGVtZXJhbC1rZXktc2l6ZS5wYXRjaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGU4ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvb3Bl bnNzbC0xLjAuMWotZXBoZW1lcmFsLWtleS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitk aWZmIC11cCBvcGVuc3NsLTEuMC4xai9hcHBzL3NfYXBwcy5oLmVwaGVtZXJhbCBvcGVuc3NsLTEu MC4xai9hcHBzL3NfYXBwcy5oCistLS0gb3BlbnNzbC0xLjAuMWovYXBwcy9zX2FwcHMuaC5lcGhl bWVyYWwJMjAxNC0xMC0xNiAxMzozMjozMC43NzI4MTc1OTEgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xai9hcHBzL3NfYXBwcy5oCTIwMTQtMTAtMTYgMTM6MzI6MzAuODY1ODE5NjkxICswMjAwCitA QCAtMTU2LDYgKzE1Niw3IEBAIGludCBNU19DQUxMQkFDSyB2ZXJpZnlfY2FsbGJhY2soaW50IG9r LAorIGludCBzZXRfY2VydF9zdHVmZihTU0xfQ1RYICpjdHgsIGNoYXIgKmNlcnRfZmlsZSwgY2hh ciAqa2V5X2ZpbGUpOworIGludCBzZXRfY2VydF9rZXlfc3R1ZmYoU1NMX0NUWCAqY3R4LCBYNTA5 ICpjZXJ0LCBFVlBfUEtFWSAqa2V5KTsKKyAjZW5kaWYKKytpbnQgc3NsX3ByaW50X3RtcF9rZXko QklPICpvdXQsIFNTTCAqcyk7CisgaW50IGluaXRfY2xpZW50KGludCAqc29jaywgY2hhciAqc2Vy dmVyLCBjaGFyICpwb3J0LCBpbnQgdHlwZSk7CisgaW50IHNob3VsZF9yZXRyeShpbnQgaSk7Cisg aW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0cixjaGFyICoqaG9zdF9wdHIsY2hhciAqKnBv cnRfcHRyKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19jYi5jLmVwaGVtZXJhbCBv cGVuc3NsLTEuMC4xai9hcHBzL3NfY2IuYworLS0tIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19jYi5j LmVwaGVtZXJhbAkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFqL2FwcHMvc19jYi5jCTIwMTQtMTAtMTYgMTM6MzI6MzAuODY1ODE5NjkxICswMjAw CitAQCAtMzM4LDYgKzMzOCwzOCBAQCB2b2lkIE1TX0NBTExCQUNLIGFwcHNfc3NsX2luZm9fY2Fs bGJhY2soCisgCQl9CisgCX0KKyAKKytpbnQgc3NsX3ByaW50X3RtcF9rZXkoQklPICpvdXQsIFNT TCAqcykKKysJeworKwlFVlBfUEtFWSAqa2V5OworKwlpZiAoIVNTTF9nZXRfc2VydmVyX3RtcF9r ZXkocywgJmtleSkpCisrCQlyZXR1cm4gMTsKKysJQklPX3B1dHMob3V0LCAiU2VydmVyIFRlbXAg S2V5OiAiKTsKKysJc3dpdGNoIChFVlBfUEtFWV9pZChrZXkpKQorKwkJeworKwljYXNlIEVWUF9Q S0VZX1JTQToKKysJCUJJT19wcmludGYob3V0LCAiUlNBLCAlZCBiaXRzXG4iLCBFVlBfUEtFWV9i aXRzKGtleSkpOworKwkJYnJlYWs7CisrCisrCWNhc2UgRVZQX1BLRVlfREg6CisrCQlCSU9fcHJp bnRmKG91dCwgIkRILCAlZCBiaXRzXG4iLCBFVlBfUEtFWV9iaXRzKGtleSkpOworKwkJYnJlYWs7 CisrCisrCWNhc2UgRVZQX1BLRVlfRUM6CisrCQkJeworKwkJCUVDX0tFWSAqZWMgPSBFVlBfUEtF WV9nZXQxX0VDX0tFWShrZXkpOworKwkJCWludCBuaWQ7CisrCQkJY29uc3QgY2hhciAqY25hbWU7 CisrCQkJbmlkID0gRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWUoRUNfS0VZX2dldDBfZ3JvdXAoZWMp KTsKKysJCQlFQ19LRVlfZnJlZShlYyk7CisrCQkJY25hbWUgPSBPQkpfbmlkMnNuKG5pZCk7Cisr CQkJQklPX3ByaW50ZihvdXQsICJFQ0RILCAlcywgJWQgYml0c1xuIiwKKysJCQkJCQljbmFtZSwg RVZQX1BLRVlfYml0cyhrZXkpKTsKKysJCQl9CisrCQl9CisrCUVWUF9QS0VZX2ZyZWUoa2V5KTsK KysJcmV0dXJuIDE7CisrCX0KKysJCQorIAorIHZvaWQgTVNfQ0FMTEJBQ0sgbXNnX2NiKGludCB3 cml0ZV9wLCBpbnQgdmVyc2lvbiwgaW50IGNvbnRlbnRfdHlwZSwgY29uc3Qgdm9pZCAqYnVmLCBz aXplX3QgbGVuLCBTU0wgKnNzbCwgdm9pZCAqYXJnKQorIAl7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xai9hcHBzL3NfY2xpZW50LmMuZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19jbGll bnQuYworLS0tIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19jbGllbnQuYy5lcGhlbWVyYWwJMjAxNC0x MC0xNiAxMzozMjozMC44NjA4MTk1NzggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9hcHBzL3Nf Y2xpZW50LmMJMjAxNC0xMC0xNiAxMzozMjozMC44NjU4MTk2OTEgKzAyMDAKK0BAIC0yMDQ0LDYg KzIwNDQsOCBAQCBzdGF0aWMgdm9pZCBwcmludF9zdHVmZihCSU8gKmJpbywgU1NMICpzCisgCQkJ QklPX3dyaXRlKGJpbywiXG4iLDEpOworIAkJCX0KKyAKKysJCXNzbF9wcmludF90bXBfa2V5KGJp bywgcyk7CisrCisgCQlCSU9fcHJpbnRmKGJpbywiLS0tXG5TU0wgaGFuZHNoYWtlIGhhcyByZWFk ICVsZCBieXRlcyBhbmQgd3JpdHRlbiAlbGQgYnl0ZXNcbiIsCisgCQkJQklPX251bWJlcl9yZWFk KFNTTF9nZXRfcmJpbyhzKSksCisgCQkJQklPX251bWJlcl93cml0dGVuKFNTTF9nZXRfd2Jpbyhz KSkpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovc3NsL3NzbC5oLmVwaGVtZXJhbCBvcGVuc3Ns LTEuMC4xai9zc2wvc3NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xai9zc2wvc3NsLmguZXBoZW1lcmFs CTIwMTQtMTAtMTYgMTM6MzI6MzAuODUxODE5Mzc1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWov c3NsL3NzbC5oCTIwMTQtMTAtMTYgMTM6MzM6MjMuMjMzMDAxOTAzICswMjAwCitAQCAtMTU4NSw2 ICsxNTg1LDcgQEAgREVDTEFSRV9QRU1fcncoU1NMX1NFU1NJT04sIFNTTF9TRVNTSU9OKQorICNk ZWZpbmUgU1NMX0NUUkxfR0VUX0VYVFJBX0NIQUlOX0NFUlRTCQk4MgorICNkZWZpbmUgU1NMX0NU UkxfQ0xFQVJfRVhUUkFfQ0hBSU5fQ0VSVFMJODMKKyAKKysjZGVmaW5lIFNTTF9DVFJMX0dFVF9T RVJWRVJfVE1QX0tFWQkJMTA5CisgI2RlZmluZSBTU0xfQ1RSTF9DSEVDS19QUk9UT19WRVJTSU9O CQkxMTkKKyAKKyAjZGVmaW5lIERUTFN2MV9nZXRfdGltZW91dChzc2wsIGFyZykgXAorQEAgLTE2 MjgsNiArMTYyOSw5IEBAIERFQ0xBUkVfUEVNX3J3KFNTTF9TRVNTSU9OLCBTU0xfU0VTU0lPTikK KyAjZGVmaW5lIFNTTF9DVFhfY2xlYXJfZXh0cmFfY2hhaW5fY2VydHMoY3R4KSBcCisgCVNTTF9D VFhfY3RybChjdHgsU1NMX0NUUkxfQ0xFQVJfRVhUUkFfQ0hBSU5fQ0VSVFMsMCxOVUxMKQorIAor KyNkZWZpbmUgU1NMX2dldF9zZXJ2ZXJfdG1wX2tleShzLCBwaykgXAorKwlTU0xfY3RybChzLFNT TF9DVFJMX0dFVF9TRVJWRVJfVE1QX0tFWSwwLHBrKQorKworICNpZm5kZWYgT1BFTlNTTF9OT19C SU8KKyBCSU9fTUVUSE9EICpCSU9fZl9zc2wodm9pZCk7CisgQklPICpCSU9fbmV3X3NzbChTU0xf Q1RYICpjdHgsaW50IGNsaWVudCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9zc2wvczNfbGli LmMuZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFqL3NzbC9zM19saWIuYworLS0tIG9wZW5zc2wtMS4w LjFqL3NzbC9zM19saWIuYy5lcGhlbWVyYWwJMjAxNC0xMC0xNiAxMzozMjozMC44NjY4MTk3MTMg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9zc2wvczNfbGliLmMJMjAxNC0xMC0xNiAxMzozNDow OC45MTgwMzMyNjIgKzAyMDAKK0BAIC0zMzU2LDYgKzMzNTYsNDUgQEAgbG9uZyBzc2wzX2N0cmwo U1NMICpzLCBpbnQgY21kLCBsb25nIGxhcgorIAorICNlbmRpZiAvKiAhT1BFTlNTTF9OT19UTFNF WFQgKi8KKyAKKysJY2FzZSBTU0xfQ1RSTF9HRVRfU0VSVkVSX1RNUF9LRVk6CisrCQlpZiAocy0+ c2VydmVyIHx8ICFzLT5zZXNzaW9uIHx8ICFzLT5zZXNzaW9uLT5zZXNzX2NlcnQpCisrCQkJcmV0 dXJuIDA7CisrCQllbHNlCisrCQkJeworKwkJCVNFU1NfQ0VSVCAqc2M7CisrCQkJRVZQX1BLRVkg KnB0bXA7CisrCQkJaW50IHJ2ID0gMDsKKysJCQlzYyA9IHMtPnNlc3Npb24tPnNlc3NfY2VydDsK KysjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19SU0EpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fREgp ICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRUMpCisrCQkJaWYgKCFzYy0+cGVlcl9yc2FfdG1wICYm ICFzYy0+cGVlcl9kaF90bXAKKysJCQkJCQkJJiYgIXNjLT5wZWVyX2VjZGhfdG1wKQorKwkJCQly ZXR1cm4gMDsKKysjZW5kaWYKKysJCQlwdG1wID0gRVZQX1BLRVlfbmV3KCk7CisrCQkJaWYgKCFw dG1wKQorKwkJCQlyZXR1cm4gMDsKKysJCQlpZiAoMCk7CisrI2lmbmRlZiBPUEVOU1NMX05PX1JT QQorKwkJCWVsc2UgaWYgKHNjLT5wZWVyX3JzYV90bXApCisrCQkJCXJ2ID0gRVZQX1BLRVlfc2V0 MV9SU0EocHRtcCwgc2MtPnBlZXJfcnNhX3RtcCk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NM X05PX0RICisrCQkJZWxzZSBpZiAoc2MtPnBlZXJfZGhfdG1wKQorKwkJCQlydiA9IEVWUF9QS0VZ X3NldDFfREgocHRtcCwgc2MtPnBlZXJfZGhfdG1wKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5T U0xfTk9fRUNESAorKwkJCWVsc2UgaWYgKHNjLT5wZWVyX2VjZGhfdG1wKQorKwkJCQlydiA9IEVW UF9QS0VZX3NldDFfRUNfS0VZKHB0bXAsIHNjLT5wZWVyX2VjZGhfdG1wKTsKKysjZW5kaWYKKysJ CQlpZiAocnYpCisrCQkJCXsKKysJCQkJKihFVlBfUEtFWSAqKilwYXJnID0gcHRtcDsKKysJCQkJ cmV0dXJuIDE7CisrCQkJCX0KKysJCQlFVlBfUEtFWV9mcmVlKHB0bXApOworKwkJCXJldHVybiAw OworKwkJCX0KKysKKyAJY2FzZSBTU0xfQ1RSTF9DSEVDS19QUk9UT19WRVJTSU9OOgorIAkJLyog Rm9yIGxpYnJhcnktaW50ZXJuYWwgdXNlOyBjaGVja3MgdGhhdCB0aGUgY3VycmVudCBwcm90b2Nv bAorIAkJICogaXMgdGhlIGhpZ2hlc3QgZW5hYmxlZCB2ZXJzaW9uIChhY2NvcmRpbmcgdG8gcy0+ Y3R4LT5tZXRob2QsCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWotZXZwLXdyYXAucGF0Y2gg Yi9vcGVuc3NsLTEuMC4xai1ldnAtd3JhcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi41ZTYwZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMWotZXZw LXdyYXAucGF0Y2gKQEAgLTAsMCArMSwxMjQyIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9j cnlwdG8vYWVzL2Flc193cmFwLmMud3JhcCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vYWVzL2Flc193 cmFwLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vYWVzL2Flc193cmFwLmMud3JhcAkyMDE0 LTEwLTE1IDEzOjE1OjI5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9hZXMvYWVzX3dyYXAuYwkyMDE0LTEwLTE2IDEzOjMwOjEwLjY3OTY1NDkyNyArMDIwMAorQEAg LTUzLDIwNyArNTMsMTggQEAKKyAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KKy0jaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKy0KKy1zdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBkZWZhdWx0X2l2W10gPSB7CistICAweEE2LCAweEE2LCAweEE2LCAw eEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LAorLX07CisrI2luY2x1ZGUgPG9wZW5zc2wvbW9k ZXMuaD4KKyAKKyBpbnQgQUVTX3dyYXBfa2V5KEFFU19LRVkgKmtleSwgY29uc3QgdW5zaWduZWQg Y2hhciAqaXYsCisgCQl1bnNpZ25lZCBjaGFyICpvdXQsCisgCQljb25zdCB1bnNpZ25lZCBjaGFy ICppbiwgdW5zaWduZWQgaW50IGlubGVuKQorIAl7CistCXVuc2lnbmVkIGNoYXIgKkEsIEJbMTZd LCAqUjsKKy0JdW5zaWduZWQgaW50IGksIGosIHQ7CistCWlmICgoaW5sZW4gJiAweDcpIHx8IChp bmxlbiA8IDgpKQorLQkJcmV0dXJuIC0xOworLQlBID0gQjsKKy0JdCA9IDE7CistCW1lbWNweShv dXQgKyA4LCBpbiwgaW5sZW4pOworLQlpZiAoIWl2KQorLQkJaXYgPSBkZWZhdWx0X2l2OworLQor LQltZW1jcHkoQSwgaXYsIDgpOworLQorLQlmb3IgKGogPSAwOyBqIDwgNjsgaisrKQorLQkJewor LQkJUiA9IG91dCArIDg7CistCQlmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkgKz0gOCwgdCsrLCBS ICs9IDgpCistCQkJeworLQkJCW1lbWNweShCICsgOCwgUiwgOCk7CistCQkJQUVTX2VuY3J5cHQo QiwgQiwga2V5KTsKKy0JCQlBWzddIF49ICh1bnNpZ25lZCBjaGFyKSh0ICYgMHhmZik7CistCQkJ aWYgKHQgPiAweGZmKQkKKy0JCQkJeworLQkJCQlBWzZdIF49ICh1bnNpZ25lZCBjaGFyKSgodCA+ PiA4KSAmIDB4ZmYpOworLQkJCQlBWzVdIF49ICh1bnNpZ25lZCBjaGFyKSgodCA+PiAxNikgJiAw eGZmKTsKKy0JCQkJQVs0XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gMjQpICYgMHhmZik7Cist CQkJCX0KKy0JCQltZW1jcHkoUiwgQiArIDgsIDgpOworLQkJCX0KKy0JCX0KKy0JbWVtY3B5KG91 dCwgQSwgOCk7CistCXJldHVybiBpbmxlbiArIDg7CisrCXJldHVybiBDUllQVE9fMTI4X3dyYXAo a2V5LCBpdiwgb3V0LCBpbiwgaW5sZW4sIChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKKyAJfQor IAorIGludCBBRVNfdW53cmFwX2tleShBRVNfS0VZICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIg Kml2LAorIAkJdW5zaWduZWQgY2hhciAqb3V0LAorIAkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4s IHVuc2lnbmVkIGludCBpbmxlbikKKyAJeworLQl1bnNpZ25lZCBjaGFyICpBLCBCWzE2XSwgKlI7 CistCXVuc2lnbmVkIGludCBpLCBqLCB0OworLQlpbmxlbiAtPSA4OworLQlpZiAoaW5sZW4gJiAw eDcpCistCQlyZXR1cm4gLTE7CistCWlmIChpbmxlbiA8IDgpCistCQlyZXR1cm4gLTE7CistCUEg PSBCOworLQl0ID0gIDYgKiAoaW5sZW4gPj4gMyk7CistCW1lbWNweShBLCBpbiwgOCk7CistCW1l bWNweShvdXQsIGluICsgOCwgaW5sZW4pOworLQlmb3IgKGogPSAwOyBqIDwgNjsgaisrKQorLQkJ eworLQkJUiA9IG91dCArIGlubGVuIC0gODsKKy0JCWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSAr PSA4LCB0LS0sIFIgLT0gOCkKKy0JCQl7CistCQkJQVs3XSBePSAodW5zaWduZWQgY2hhcikodCAm IDB4ZmYpOworLQkJCWlmICh0ID4gMHhmZikJCistCQkJCXsKKy0JCQkJQVs2XSBePSAodW5zaWdu ZWQgY2hhcikoKHQgPj4gOCkgJiAweGZmKTsKKy0JCQkJQVs1XSBePSAodW5zaWduZWQgY2hhciko KHQgPj4gMTYpICYgMHhmZik7CistCQkJCUFbNF0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDI0 KSAmIDB4ZmYpOworLQkJCQl9CistCQkJbWVtY3B5KEIgKyA4LCBSLCA4KTsKKy0JCQlBRVNfZGVj cnlwdChCLCBCLCBrZXkpOworLQkJCW1lbWNweShSLCBCICsgOCwgOCk7CistCQkJfQorLQkJfQor LQlpZiAoIWl2KQorLQkJaXYgPSBkZWZhdWx0X2l2OworLQlpZiAobWVtY21wKEEsIGl2LCA4KSkK Ky0JCXsKKy0JCU9QRU5TU0xfY2xlYW5zZShvdXQsIGlubGVuKTsKKy0JCXJldHVybiAwOworLQkJ fQorLQlyZXR1cm4gaW5sZW47CistCX0KKy0KKy0jaWZkZWYgQUVTX1dSQVBfVEVTVAorLQorLWlu dCBBRVNfd3JhcF91bndyYXBfdGVzdChjb25zdCB1bnNpZ25lZCBjaGFyICprZWssIGludCBrZXli aXRzLAorLQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKy0JCQkgY29uc3QgdW5zaWduZWQg Y2hhciAqZW91dCwKKy0JCQkgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQor LQl7CistCXVuc2lnbmVkIGNoYXIgKm90bXAgPSBOVUxMLCAqcHRtcCA9IE5VTEw7CistCWludCBy LCByZXQgPSAwOworLQlBRVNfS0VZIHdjdHg7CistCW90bXAgPSBPUEVOU1NMX21hbGxvYyhrZXls ZW4gKyA4KTsKKy0JcHRtcCA9IE9QRU5TU0xfbWFsbG9jKGtleWxlbik7CistCWlmICghb3RtcCB8 fCAhcHRtcCkKKy0JCXJldHVybiAwOworLQlpZiAoQUVTX3NldF9lbmNyeXB0X2tleShrZWssIGtl eWJpdHMsICZ3Y3R4KSkKKy0JCWdvdG8gZXJyOworLQlyID0gQUVTX3dyYXBfa2V5KCZ3Y3R4LCBp diwgb3RtcCwga2V5LCBrZXlsZW4pOworLQlpZiAociA8PSAwKQorLQkJZ290byBlcnI7CistCist CWlmIChlb3V0ICYmIG1lbWNtcChlb3V0LCBvdG1wLCBrZXlsZW4pKQorLQkJZ290byBlcnI7Cist CQkKKy0JaWYgKEFFU19zZXRfZGVjcnlwdF9rZXkoa2VrLCBrZXliaXRzLCAmd2N0eCkpCistCQln b3RvIGVycjsKKy0JciA9IEFFU191bndyYXBfa2V5KCZ3Y3R4LCBpdiwgcHRtcCwgb3RtcCwgcik7 CistCistCWlmIChtZW1jbXAoa2V5LCBwdG1wLCBrZXlsZW4pKQorLQkJZ290byBlcnI7CistCist CXJldCA9IDE7CistCistCWVycjoKKy0JaWYgKG90bXApCistCQlPUEVOU1NMX2ZyZWUob3RtcCk7 CistCWlmIChwdG1wKQorLQkJT1BFTlNTTF9mcmVlKHB0bXApOworLQorLQlyZXR1cm4gcmV0Owor LQorKwlyZXR1cm4gQ1JZUFRPXzEyOF91bndyYXAoa2V5LCBpdiwgb3V0LCBpbiwgaW5sZW4sIChi bG9jazEyOF9mKUFFU19kZWNyeXB0KTsKKyAJfQorLQorLQorLQorLWludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKKy17CistCistc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2VrW10g PSB7CistICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAor LSAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKy0gIDB4 MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCistICAweDE4LCAw eDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmCistfTsKKy0KKy1zdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrZXlbXSA9IHsKKy0gIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMs IDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCistICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNj LCAweGRkLCAweGVlLCAweGZmLAorLSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgw NSwgMHgwNiwgMHgwNywKKy0gIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4 MGUsIDB4MGYKKy19OworLQorLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGUxW10gPSB7Cist ICAweDFmLCAweGE2LCAweDhiLCAweDBhLCAweDgxLCAweDEyLCAweGI0LCAweDQ3LAorLSAgMHhh ZSwgMHhmMywgMHg0YiwgMHhkOCwgMHhmYiwgMHg1YSwgMHg3YiwgMHg4MiwKKy0gIDB4OWQsIDB4 M2UsIDB4ODYsIDB4MjMsIDB4NzEsIDB4ZDIsIDB4Y2YsIDB4ZTUKKy19OworLQorLXN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGUyW10gPSB7CistICAweDk2LCAweDc3LCAweDhiLCAweDI1LCAw eGFlLCAweDZjLCAweGE0LCAweDM1LAorLSAgMHhmOSwgMHgyYiwgMHg1YiwgMHg5NywgMHhjMCwg MHg1MCwgMHhhZSwgMHhkMiwKKy0gIDB4NDYsIDB4OGEsIDB4YjgsIDB4YTEsIDB4N2EsIDB4ZDgs IDB4NGUsIDB4NWQKKy19OworLQorLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGUzW10gPSB7 CistICAweDY0LCAweGU4LCAweGMzLCAweGY5LCAweGNlLCAweDBmLCAweDViLCAweGEyLAorLSAg MHg2MywgMHhlOSwgMHg3NywgMHg3OSwgMHgwNSwgMHg4MSwgMHg4YSwgMHgyYSwKKy0gIDB4OTMs IDB4YzgsIDB4MTksIDB4MWUsIDB4N2QsIDB4NmUsIDB4OGEsIDB4ZTcKKy19OworLQorLXN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGU0W10gPSB7CistICAweDAzLCAweDFkLCAweDMzLCAweDI2 LCAweDRlLCAweDE1LCAweGQzLCAweDMyLAorLSAgMHg2OCwgMHhmMiwgMHg0ZSwgMHhjMiwgMHg2 MCwgMHg3NCwgMHgzZSwgMHhkYywKKy0gIDB4ZTEsIDB4YzYsIDB4YzcsIDB4ZGQsIDB4ZWUsIDB4 NzIsIDB4NWEsIDB4OTMsCistICAweDZiLCAweGE4LCAweDE0LCAweDkxLCAweDVjLCAweDY3LCAw eDYyLCAweGQyCistfTsKKy0KKy1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlNVtdID0gewor LSAgMHhhOCwgMHhmOSwgMHhiYywgMHgxNiwgMHgxMiwgMHhjNiwgMHg4YiwgMHgzZiwKKy0gIDB4 ZjYsIDB4ZTYsIDB4ZjQsIDB4ZmIsIDB4ZTMsIDB4MGUsIDB4NzEsIDB4ZTQsCistICAweDc2LCAw eDljLCAweDhiLCAweDgwLCAweGEzLCAweDJjLCAweGI4LCAweDk1LAorLSAgMHg4YywgMHhkNSwg MHhkMSwgMHg3ZCwgMHg2YiwgMHgyNSwgMHg0ZCwgMHhhMQorLX07CistCistc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZTZbXSA9IHsKKy0gIDB4MjgsIDB4YzksIDB4ZjQsIDB4MDQsIDB4YzQs IDB4YjgsIDB4MTAsIDB4ZjQsCistICAweGNiLCAweGNjLCAweGIzLCAweDVjLCAweGZiLCAweDg3 LCAweGY4LCAweDI2LAorLSAgMHgzZiwgMHg1NywgMHg4NiwgMHhlMiwgMHhkOCwgMHgwZSwgMHhk MywgMHgyNiwKKy0gIDB4Y2IsIDB4YzcsIDB4ZjAsIDB4ZTcsIDB4MWEsIDB4OTksIDB4ZjQsIDB4 M2IsCistICAweGZiLCAweDk4LCAweDhiLCAweDliLCAweDdhLCAweDAyLCAweGRkLCAweDIxCist fTsKKy0KKy0JQUVTX0tFWSB3Y3R4LCB4Y3R4OworLQlpbnQgcmV0OworLQlyZXQgPSBBRVNfd3Jh cF91bndyYXBfdGVzdChrZWssIDEyOCwgTlVMTCwgZTEsIGtleSwgMTYpOworLQlmcHJpbnRmKHN0 ZGVyciwgIktleSB0ZXN0IHJlc3VsdCAlZFxuIiwgcmV0KTsKKy0JcmV0ID0gQUVTX3dyYXBfdW53 cmFwX3Rlc3Qoa2VrLCAxOTIsIE5VTEwsIGUyLCBrZXksIDE2KTsKKy0JZnByaW50ZihzdGRlcnIs ICJLZXkgdGVzdCByZXN1bHQgJWRcbiIsIHJldCk7CistCXJldCA9IEFFU193cmFwX3Vud3JhcF90 ZXN0KGtlaywgMjU2LCBOVUxMLCBlMywga2V5LCAxNik7CistCWZwcmludGYoc3RkZXJyLCAiS2V5 IHRlc3QgcmVzdWx0ICVkXG4iLCByZXQpOworLQlyZXQgPSBBRVNfd3JhcF91bndyYXBfdGVzdChr ZWssIDE5MiwgTlVMTCwgZTQsIGtleSwgMjQpOworLQlmcHJpbnRmKHN0ZGVyciwgIktleSB0ZXN0 IHJlc3VsdCAlZFxuIiwgcmV0KTsKKy0JcmV0ID0gQUVTX3dyYXBfdW53cmFwX3Rlc3Qoa2VrLCAy NTYsIE5VTEwsIGU1LCBrZXksIDI0KTsKKy0JZnByaW50ZihzdGRlcnIsICJLZXkgdGVzdCByZXN1 bHQgJWRcbiIsIHJldCk7CistCXJldCA9IEFFU193cmFwX3Vud3JhcF90ZXN0KGtlaywgMjU2LCBO VUxMLCBlNiwga2V5LCAzMik7CistCWZwcmludGYoc3RkZXJyLCAiS2V5IHRlc3QgcmVzdWx0ICVk XG4iLCByZXQpOworLX0KKy0JCistCQorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL2V2cC9jX2FsbGMuYy53cmFwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvY19hbGxj LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2NfYWxsYy5jLndyYXAJMjAxNC0xMC0x NiAxMzozMDoxMC41ODM2NTI3NjAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZw L2NfYWxsYy5jCTIwMTQtMTAtMTYgMTM6MzA6MTAuNjc5NjU0OTI3ICswMjAwCitAQCAtOTgsNiAr OTgsNyBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfZWNiKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZSgpKTsKKyAJ RVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfd3JhcCgpKTsKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0CitAQCAt MTc3LDYgKzE3OCw4IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY3RyKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9nY20oKSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfd3JhcCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xMjhfd3JhcF9wYWQoKSk7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2Jj LCJBRVMxMjgiKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsImFlczEy OCIpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7CitAQCAtMTg3LDYgKzE5 MCw4IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfb2ZiKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIo KSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKKysJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfd3JhcCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfd3Jh cF9wYWQoKSk7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJBRVMxOTIi KTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsImFlczE5MiIpOworIAlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7CitAQCAtMTk4LDYgKzIwMyw4IEBAIHZv aWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18yNTZfY3RyKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7CisgCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3h0cygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18yNTZfd3JhcCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcF9wYWQoKSk7 CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsKKyAJRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsImFlczI1NiIpOworICNpZiAhZGVmaW5l ZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQorQEAgLTI1MCw2 ICsyNTcsNyBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgCisgCUVWUF9h ZGRfY2lwaGVyKEVWUF9kZXNfZWRlKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTMo KSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM193cmFwKCkpOworICNlbmRpZgorIAor ICNpZm5kZWYgT1BFTlNTTF9OT19BRVMKK0BAIC0yNjIsNiArMjcwLDggQEAgdm9pZCBPcGVuU1NM X2FkZF9hbGxfY2lwaGVycyh2b2lkKQorIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIo KSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKKyAJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xMjhfeHRzKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF93cmFw KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF93cmFwX3BhZCgpKTsKKyAJRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsIkFFUzEyOCIpOworIAlFVlBfYWRkX2NpcGhl cl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiYWVzMTI4Iik7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTkyX2VjYigpKTsKK0BAIC0yNzIsNiArMjgyLDggQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxf Y2lwaGVycyh2b2lkKQorIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9vZmIoKSk7CisgCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2N0cigpKTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xOTJfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml93cmFwKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml93cmFwX3BhZCgpKTsKKyAJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzE5Ml9jYmMsIkFFUzE5MiIpOworIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhT Tl9hZXNfMTkyX2NiYywiYWVzMTkyIik7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2Vj YigpKTsKK0BAIC0yODMsNiArMjk1LDggQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2 b2lkKQorIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jdHIoKSk7CisgCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfeHRz KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl93cmFwKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl93cmFwX3BhZCgpKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05f YWVzXzI1Nl9jYmMsIkFFUzI1NiIpOworIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2 X2NiYywiYWVzMjU2Iik7CisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8v ZXZwL2VfYWVzLmMud3JhcCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfYWVzLmMKKy0tLSBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfYWVzLmMud3JhcAkyMDE0LTEwLTE2IDEzOjMwOjEw LjU4NDY1Mjc4MiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9hZXMuYwky MDE0LTEwLTE2IDEzOjMwOjEwLjY3OTY1NDkyNyArMDIwMAorQEAgLTEsNSArMSw1IEBACisgLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNCBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworQEAgLTEzODQsNCArMTM4NCwxODAgQEAgQkxPQ0tfQ0lQSEVS X2N1c3RvbShOSURfYWVzLDEyOCwxLDEyLGNjbQorIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2Fl cywxOTIsMSwxMixjY20sQ0NNLEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCisgQkxP Q0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDI1NiwxLDEyLGNjbSxDQ00sRVZQX0NJUEhfRkxBR19G SVBTfENVU1RPTV9GTEFHUykKKyAKKyt0eXBlZGVmIHN0cnVjdAorKwl7CisrCXVuaW9uIHsgZG91 YmxlIGFsaWduOyBBRVNfS0VZIGtzOyB9IGtzOworKwkvKiBJbmRpY2F0ZXMgaWYgSVYgaGFzIGJl ZW4gc2V0ICovCisrCXVuc2lnbmVkIGNoYXIgKml2OworKwl9IEVWUF9BRVNfV1JBUF9DVFg7Cisr Cisrc3RhdGljIGludCBhZXNfd3JhcF9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25z dCB1bnNpZ25lZCBjaGFyICprZXksCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqaXYsIGludCBlbmMpCisrCXsKKysJRVZQX0FFU19XUkFQX0NUWCAqd2N0eCA9 IGN0eC0+Y2lwaGVyX2RhdGE7CisrCWlmICghaXYgJiYgIWtleSkKKysJCXJldHVybiAxOworKwlp ZiAoa2V5KQorKwkJeworKwkJaWYgKGN0eC0+ZW5jcnlwdCkKKysJCQlBRVNfc2V0X2VuY3J5cHRf a2V5KGtleSwgY3R4LT5rZXlfbGVuICogOCwgJndjdHgtPmtzLmtzKTsKKysJCWVsc2UKKysJCQlB RVNfc2V0X2RlY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogOCwgJndjdHgtPmtzLmtzKTsK KysJCWlmICghaXYpCisrCQkJd2N0eC0+aXYgPSBOVUxMOworKwkJfQorKwlpZiAoaXYpCisrCQl7 CisrCQltZW1jcHkoY3R4LT5pdiwgaXYsIEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aChjdHgpKTsK KysJCXdjdHgtPml2ID0gY3R4LT5pdjsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0 aWMgaW50IGFlc193cmFwX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorKwl7Cisr CUVWUF9BRVNfV1JBUF9DVFggKndjdHggPSBjdHgtPmNpcGhlcl9kYXRhOworKwlzaXplX3QgcnY7 CisrCS8qIEFFUyB3cmFwIHdpdGggcGFkZGluZyBoYXMgSVYgbGVuZ3RoIG9mIDQsIHdpdGhvdXQg cGFkZGluZyA4ICovCisrCWludCBwYWQgPSBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY3R4KSA9 PSA0OworKwkvKiBObyBmaW5hbCBvcGVyYXRpb24gc28gYWx3YXlzIHJldHVybiB6ZXJvIGxlbmd0 aCAqLworKwlpZiAoIWluKQorKwkJcmV0dXJuIDA7CisrCS8qIElucHV0IGxlbmd0aCBtdXN0IGFs d2F5cyBiZSBub24temVybyAqLworKwlpZiAoIWlubGVuKQorKwkJcmV0dXJuIC0xOworKwkvKiBJ ZiBkZWNyeXB0aW5nIG5lZWQgYXQgbGVhc3QgMTYgYnl0ZXMgYW5kIG11bHRpcGxlIG9mIDggKi8K KysJaWYgKCFjdHgtPmVuY3J5cHQgJiYgKGlubGVuIDwgMTYgfHwgaW5sZW4gJiAweDcpKQorKwkJ cmV0dXJuIC0xOworKwkvKiBJZiBub3QgcGFkZGluZyBpbnB1dCBtdXN0IGJlIG11bHRpcGxlIG9m IDggKi8KKysJaWYgKCFwYWQgJiYgaW5sZW4gJiAweDcpCisrCQlyZXR1cm4gLTE7CisrCWlmICgh b3V0KQorKwkJeworKwkJaWYgKGN0eC0+ZW5jcnlwdCkKKysJCQl7CisrCQkJLyogSWYgcGFkZGlu ZyByb3VuZCB1cCB0byBtdWx0aXBsZSBvZiA4ICovCisrCQkJaWYgKHBhZCkKKysJCQkJaW5sZW4g PSAoaW5sZW4gKyA3KS84ICogODsKKysJCQkvKiA4IGJ5dGUgcHJlZml4ICovCisrCQkJcmV0dXJu IGlubGVuICsgODsKKysJCQl9CisrCQllbHNlCisrCQkJeworKwkJCS8qIElmIG5vdCBwYWRkaW5n IG91dHB1dCB3aWxsIGJlIGV4YWN0bHkgOCBieXRlcworKwkJCSAqIHNtYWxsZXIgdGhhbiBpbnB1 dC4gSWYgcGFkZGluZyBpdCB3aWxsIGJlIGF0CisrCQkJICogbGVhc3QgOCBieXRlcyBzbWFsbGVy IGJ1dCB3ZSBkb24ndCBrbm93IGhvdworKwkJCSAqIG11Y2guCisrCQkJICovCisrCQkJcmV0dXJu IGlubGVuIC0gODsKKysJCQl9CisrCQl9CisrCWlmIChwYWQpCisrCQl7CisrCQlpZiAoY3R4LT5l bmNyeXB0KQorKwkJCXJ2ID0gQ1JZUFRPXzEyOF93cmFwX3BhZCgmd2N0eC0+a3Mua3MsIHdjdHgt Pml2LAorKwkJCQkJCW91dCwgaW4sIGlubGVuLAorKwkJCQkJCShibG9jazEyOF9mKUFFU19lbmNy eXB0KTsKKysJCWVsc2UKKysJCQlydiA9IENSWVBUT18xMjhfdW53cmFwX3BhZCgmd2N0eC0+a3Mu a3MsIHdjdHgtPml2LAorKwkJCQkJCW91dCwgaW4sIGlubGVuLAorKwkJCQkJCShibG9jazEyOF9m KUFFU19kZWNyeXB0KTsKKysJCX0KKysJZWxzZQorKwkJeworKwkJaWYgKGN0eC0+ZW5jcnlwdCkK KysJCQlydiA9IENSWVBUT18xMjhfd3JhcCgmd2N0eC0+a3Mua3MsIHdjdHgtPml2LAorKwkJCQkJ CW91dCwgaW4sIGlubGVuLAorKwkJCQkJCShibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKKysJCWVs c2UKKysJCQlydiA9IENSWVBUT18xMjhfdW53cmFwKCZ3Y3R4LT5rcy5rcywgd2N0eC0+aXYsCisr CQkJCQkJb3V0LCBpbiwgaW5sZW4sCisrCQkJCQkJKGJsb2NrMTI4X2YpQUVTX2RlY3J5cHQpOwor KwkJfQorKwlyZXR1cm4gcnYgPyAoaW50KXJ2IDogLTE7CisrCX0KKysKKysjZGVmaW5lIFdSQVBf RkxBR1MJKEVWUF9DSVBIX1dSQVBfTU9ERSB8IEVWUF9DSVBIX0ZMQUdfRklQUyBcCisrCQl8IEVW UF9DSVBIX0NVU1RPTV9JViB8IEVWUF9DSVBIX0ZMQUdfQ1VTVE9NX0NJUEhFUiBcCisrCQl8IEVW UF9DSVBIX0FMV0FZU19DQUxMX0lOSVQgfCBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysK KytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfMTI4X3dyYXAgPSB7CisrCU5JRF9pZF9hZXMx Mjhfd3JhcCwKKysJOCwgMTYsIDgsIFdSQVBfRkxBR1MsCisrCWFlc193cmFwX2luaXRfa2V5LCBh ZXNfd3JhcF9jaXBoZXIsCisrCU5VTEwsCisrCXNpemVvZihFVlBfQUVTX1dSQVBfQ1RYKSwKKysJ TlVMTCxOVUxMLE5VTEwsTlVMTCB9OworKworK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4 X3dyYXAodm9pZCkKKysJeworKwlyZXR1cm4gJmFlc18xMjhfd3JhcDsKKysJfQorKworK3N0YXRp YyBjb25zdCBFVlBfQ0lQSEVSIGFlc18xOTJfd3JhcCA9IHsKKysJTklEX2lkX2FlczE5Ml93cmFw LAorKwk4LCAyNCwgOCwgV1JBUF9GTEFHUywKKysJYWVzX3dyYXBfaW5pdF9rZXksIGFlc193cmFw X2NpcGhlciwKKysJTlVMTCwKKysJc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAorKwlOVUxMLE5V TEwsTlVMTCxOVUxMIH07CisrCisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfd3JhcCh2 b2lkKQorKwl7CisrCXJldHVybiAmYWVzXzE5Ml93cmFwOworKwl9CisrCisrc3RhdGljIGNvbnN0 IEVWUF9DSVBIRVIgYWVzXzI1Nl93cmFwID0geworKwlOSURfaWRfYWVzMjU2X3dyYXAsCisrCTgs IDMyLCA4LCBXUkFQX0ZMQUdTLAorKwlhZXNfd3JhcF9pbml0X2tleSwgYWVzX3dyYXBfY2lwaGVy LAorKwlOVUxMLAorKwlzaXplb2YoRVZQX0FFU19XUkFQX0NUWCksCisrCU5VTEwsTlVMTCxOVUxM LE5VTEwgfTsKKysKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl93cmFwKHZvaWQpCisr CXsKKysJcmV0dXJuICZhZXNfMjU2X3dyYXA7CisrCX0KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBhZXNfMTI4X3dyYXBfcGFkID0geworKwlOSURfaWRfYWVzMTI4X3dyYXBfcGFkLAorKwk4 LCAxNiwgNCwgV1JBUF9GTEFHUywKKysJYWVzX3dyYXBfaW5pdF9rZXksIGFlc193cmFwX2NpcGhl ciwKKysJTlVMTCwKKysJc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAorKwlOVUxMLE5VTEwsTlVM TCxOVUxMIH07CisrCisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfd3JhcF9wYWQodm9p ZCkKKysJeworKwlyZXR1cm4gJmFlc18xMjhfd3JhcF9wYWQ7CisrCX0KKysKKytzdGF0aWMgY29u c3QgRVZQX0NJUEhFUiBhZXNfMTkyX3dyYXBfcGFkID0geworKwlOSURfaWRfYWVzMTkyX3dyYXBf cGFkLAorKwk4LCAyNCwgNCwgV1JBUF9GTEFHUywKKysJYWVzX3dyYXBfaW5pdF9rZXksIGFlc193 cmFwX2NpcGhlciwKKysJTlVMTCwKKysJc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAorKwlOVUxM LE5VTEwsTlVMTCxOVUxMIH07CisrCisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfd3Jh cF9wYWQodm9pZCkKKysJeworKwlyZXR1cm4gJmFlc18xOTJfd3JhcF9wYWQ7CisrCX0KKysKKytz dGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfMjU2X3dyYXBfcGFkID0geworKwlOSURfaWRfYWVz MjU2X3dyYXBfcGFkLAorKwk4LCAzMiwgNCwgV1JBUF9GTEFHUywKKysJYWVzX3dyYXBfaW5pdF9r ZXksIGFlc193cmFwX2NpcGhlciwKKysJTlVMTCwKKysJc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgp LAorKwlOVUxMLE5VTEwsTlVMTCxOVUxMIH07CisrCisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Fl c18yNTZfd3JhcF9wYWQodm9pZCkKKysJeworKwlyZXR1cm4gJmFlc18yNTZfd3JhcF9wYWQ7Cisr CX0KKysKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9kZXMz LmMud3JhcCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0x LjAuMWovY3J5cHRvL2V2cC9lX2RlczMuYy53cmFwCTIwMTQtMTAtMTYgMTM6MzA6MTAuNTg0NjUy NzgyICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9lX2RlczMuYwkyMDE0LTEw LTE2IDEzOjMwOjEwLjY3OTY1NDkyNyArMDIwMAorQEAgLTMxMCw0ICszMTAsMTEyIEBAIGNvbnN0 IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlMyh2b2lkKQorIHsKKyAJcmV0dXJuICZkZXNfZWRlM19l Y2I7CisgfQorKworKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKysKKysjaW5jbHVkZSA8b3BlbnNz bC9zaGEuaD4KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB3cmFwX2l2WzhdID0gezB4 NGEsMHhkZCwweGEyLDB4MmMsMHg3OSwweGU4LDB4MjEsMHgwNX07CisrCisrc3RhdGljIGludCBk ZXNfZWRlM191bndyYXAoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkKKysJeworKwl1bnNpZ25l ZCBjaGFyIGljdls4XSwgaXZbOF0sIHNoYTF0bXBbU0hBX0RJR0VTVF9MRU5HVEhdOworKwlpbnQg cnYgPSAtMTsKKysJaWYgKGlubCA8IDI0KQorKwkJcmV0dXJuIC0xOworKwlpZiAoIW91dCkKKysJ CXJldHVybiBpbmwgLSAxNjsKKysJbWVtY3B5KGN0eC0+aXYsIHdyYXBfaXYsIDgpOworKwkvKiBE ZWNyeXB0IGZpcnN0IGJsb2NrIHdoaWNoIHdpbGwgZW5kIHVwIGFzIGljdiAqLworKwlkZXNfZWRl X2NiY19jaXBoZXIoY3R4LCBpY3YsIGluLCA4KTsKKysJLyogRGVjcnlwdCBjZW50cmFsIGJsb2Nr cyAqLworKwkvKiBJZiBkZWNyeXB0aW5nIGluIHBsYWNlIG1vdmUgd2hvbGUgb3V0cHV0IGFsb25n IGEgYmxvY2sKKysJICogc28gdGhlIG5leHQgZGVzX2VkZV9jYmNfY2lwaGVyIGlzIGluIHBsYWNl LgorKwkgKi8KKysJaWYgKG91dCA9PSBpbikKKysJCXsKKysJCW1lbW1vdmUob3V0LCBvdXQgKyA4 LCBpbmwgLSA4KTsKKysJCWluIC09IDg7CisrCQl9CisrCWRlc19lZGVfY2JjX2NpcGhlcihjdHgs IG91dCwgaW4gKyA4LCBpbmwgLSAxNik7CisrCS8qIERlY3J5cHQgZmluYWwgYmxvY2sgd2hpY2gg d2lsbCBiZSBJViAqLworKwlkZXNfZWRlX2NiY19jaXBoZXIoY3R4LCBpdiwgaW4gKyBpbmwgLSA4 LCA4KTsKKysJLyogUmV2ZXJzZSBvcmRlciBvZiBldmVyeXRoaW5nICovCisrCUJVRl9yZXZlcnNl KGljdiwgTlVMTCwgOCk7CisrCUJVRl9yZXZlcnNlKG91dCwgTlVMTCwgaW5sIC0gMTYpOworKwlC VUZfcmV2ZXJzZShjdHgtPml2LCBpdiwgOCk7CisrCS8qIERlY3J5cHQgYWdhaW4gdXNpbmcgbmV3 IElWICovCisrCWRlc19lZGVfY2JjX2NpcGhlcihjdHgsIG91dCwgb3V0LCBpbmwgLSAxNik7Cisr CWRlc19lZGVfY2JjX2NpcGhlcihjdHgsIGljdiwgaWN2LCA4KTsKKysJLyogV29yayBvdXQgU0hB MSBoYXNoIG9mIGZpcnN0IHBvcnRpb24gKi8KKysJU0hBMShvdXQsIGlubCAtIDE2LCBzaGExdG1w KTsKKysKKysJaWYgKCFDUllQVE9fbWVtY21wKHNoYTF0bXAsIGljdiwgOCkpCisrCQlydiA9IGlu bCAtIDE2OworKwlPUEVOU1NMX2NsZWFuc2UoaWN2LCA4KTsKKysJT1BFTlNTTF9jbGVhbnNlKHNo YTF0bXAsIFNIQV9ESUdFU1RfTEVOR1RIKTsKKysJT1BFTlNTTF9jbGVhbnNlKGl2LCA4KTsKKysJ T1BFTlNTTF9jbGVhbnNlKGN0eC0+aXYsIDgpOworKwlpZiAocnYgPT0gLTEpCisrCQlPUEVOU1NM X2NsZWFuc2Uob3V0LCBpbmwgLSAxNik7CisrCQorKwlyZXR1cm4gcnY7CisrCX0KKysKKytzdGF0 aWMgaW50IGRlc19lZGUzX3dyYXAoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkKKysJeworKwl1 bnNpZ25lZCBjaGFyIHNoYTF0bXBbU0hBX0RJR0VTVF9MRU5HVEhdOworKwlpZiAoIW91dCkKKysJ CXJldHVybiBpbmwgKyAxNjsKKysJLyogQ29weSBpbnB1dCB0byBvdXRwdXQgYnVmZmVyICsgOCBz byB3ZSBoYXZlIHNwYWNlIGZvciBJViAqLworKwltZW1tb3ZlKG91dCArIDgsIGluLCBpbmwpOwor KwkvKiBXb3JrIG91dCBJQ1YgKi8KKysJU0hBMShpbiwgaW5sLCBzaGExdG1wKTsKKysJbWVtY3B5 KG91dCArIGlubCArIDgsIHNoYTF0bXAsIDgpOworKwlPUEVOU1NMX2NsZWFuc2Uoc2hhMXRtcCwg U0hBX0RJR0VTVF9MRU5HVEgpOworKwkvKiBHZW5lcmF0ZSByYW5kb20gSVYgKi8KKysJUkFORF9i eXRlcyhjdHgtPml2LCA4KTsKKysJbWVtY3B5KG91dCwgY3R4LT5pdiwgOCk7CisrCS8qIEVuY3J5 cHQgZXZlcnl0aGluZyBhZnRlciBJViBpbiBwbGFjZSAqLworKwlkZXNfZWRlX2NiY19jaXBoZXIo Y3R4LCBvdXQgKyA4LCBvdXQgKyA4LCBpbmwgKyA4KTsKKysJQlVGX3JldmVyc2Uob3V0LCBOVUxM LCBpbmwgKyAxNik7CisrCW1lbWNweShjdHgtPml2LCB3cmFwX2l2LCA4KTsKKysJZGVzX2VkZV9j YmNfY2lwaGVyKGN0eCwgb3V0LCBvdXQsIGlubCArIDE2KTsKKysJcmV0dXJuIGlubCArIDE2Owor Kwl9CisrCisrc3RhdGljIGludCBkZXNfZWRlM193cmFwX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgaW5sKQorKwl7CisrCS8qIFNhbml0eSBjaGVjayBpbnB1dCBsZW5ndGg6IHdlIHR5cGlj YWxseSBvbmx5IHdyYXAga2V5cworKwkgKiBzbyBFVlBfTUFYQ0hVTksgaXMgbW9yZSB0aGFuIHdp bGwgZXZlciBiZSBuZWVkZWQuIEFsc28KKysJICogaW5wdXQgbGVuZ3RoIG11c3QgYmUgYSBtdWx0 aXBsZSBvZiA4IGJpdHMuCisrCSAqLworKwlpZiAoaW5sID49IEVWUF9NQVhDSFVOSyB8fCBpbmwg JSA4KQorKwkJcmV0dXJuIC0xOworKwlpZiAoY3R4LT5lbmNyeXB0KQorKwkJcmV0dXJuIGRlc19l ZGUzX3dyYXAoY3R4LCBvdXQsIGluLCBpbmwpOworKwllbHNlCisrCQlyZXR1cm4gZGVzX2VkZTNf dW53cmFwKGN0eCwgb3V0LCBpbiwgaW5sKTsKKysJfQorKworK3N0YXRpYyBjb25zdCBFVlBfQ0lQ SEVSIGRlczNfd3JhcCA9IHsKKysJTklEX2lkX3NtaW1lX2FsZ19DTVMzREVTd3JhcCwKKysJOCwg MjQsIDAsCisrCUVWUF9DSVBIX1dSQVBfTU9ERXxFVlBfQ0lQSF9DVVNUT01fSVZ8RVZQX0NJUEhf RkxBR19DVVNUT01fQ0lQSEVSCisrCQl8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjF8RVZQX0NJ UEhfRkxBR19GSVBTLAorKwlkZXNfZWRlM19pbml0X2tleSwgZGVzX2VkZTNfd3JhcF9jaXBoZXIs CisrCU5VTEwsCQorKwlzaXplb2YoREVTX0VERV9LRVkpLAorKwlOVUxMLE5VTEwsTlVMTCxOVUxM IH07CisrCisrCisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzX3dyYXAodm9pZCkKKysJ eworKwlyZXR1cm4gJmRlczNfd3JhcDsKKysJfQorKworKyMgZW5kaWYKKyAjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2VuYy5jLndyYXAgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2V2cC9ldnBfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2 cF9lbmMuYy53cmFwCTIwMTQtMTAtMTYgMTM6MzA6MTAuNTg0NjUyNzgyICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAxNC0xMC0xNiAxMzozMDoxMC42ODA2 NTQ5NDkgKzAyMDAKK0BAIC0yMzQsNyArMjM0LDggQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVW UF9DSVBIRVJfQ1RYICpjdAorIAkJCWN0eC0+Y2lwaGVyX2RhdGEgPSBOVUxMOworIAkJCX0KKyAJ CWN0eC0+a2V5X2xlbiA9IGNpcGhlci0+a2V5X2xlbjsKKy0JCWN0eC0+ZmxhZ3MgPSAwOworKwkJ LyogUHJlc2VydmUgd3JhcCBlbmFibGUgZmxhZywgemVybyBldmVyeXRoaW5nIGVsc2UgKi8KKysJ CWN0eC0+ZmxhZ3MgJj0gRVZQX0NJUEhFUl9DVFhfRkxBR19XUkFQX0FMTE9XOworIAkJaWYoY3R4 LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQ1RSTF9JTklUKQorIAkJCXsKKyAJCQlpZighRVZQ X0NJUEhFUl9DVFhfY3RybChjdHgsIEVWUF9DVFJMX0lOSVQsIDAsIE5VTEwpKQorQEAgLTI1Nyw2 ICsyNTgsMTMgQEAgc2tpcF90b19pbml0OgorIAkgICAgfHwgY3R4LT5jaXBoZXItPmJsb2NrX3Np emUgPT0gOAorIAkgICAgfHwgY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gMTYpOworIAorKwlp ZighKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSEVSX0NUWF9GTEFHX1dSQVBfQUxMT1cpCisrCQkmJiBF VlBfQ0lQSEVSX0NUWF9tb2RlKGN0eCkgPT0gRVZQX0NJUEhfV1JBUF9NT0RFKQorKwkJeworKwkJ RVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9XUkFQX01PREVfTk9UX0FMTE9X RUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisgCWlmKCEoRVZQX0NJUEhFUl9DVFhfZmxhZ3Mo Y3R4KSAmIEVWUF9DSVBIX0NVU1RPTV9JVikpIHsKKyAJCXN3aXRjaChFVlBfQ0lQSEVSX0NUWF9t b2RlKGN0eCkpIHsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2Vy ci5jLndyYXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfZXJyLmMKKy0tLSBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZXZwL2V2cF9lcnIuYy53cmFwCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfZXJyLmMJMjAx NC0xMC0xNiAxMzozMDoxMC42ODA2NTQ5NDkgKzAyMDAKK0BAIC0xLDYgKzEsNiBAQAorIC8qIGNy eXB0by9ldnAvZXZwX2Vyci5jICovCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gKiBDb3B5cmlnaHQgKGMp IDE5OTktMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAgKgorICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworQEAgLTIyMCw2 ICsyMjAsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfcmVhc29uc1tdCisge0VS Ul9SRUFTT04oRVZQX1JfVU5TVVBQT1JURURfUFJGKSAgICAgICAsInVuc3VwcG9ydGVkIHByZiJ9 LAorIHtFUlJfUkVBU09OKEVWUF9SX1VOU1VQUE9SVEVEX1BSSVZBVEVfS0VZX0FMR09SSVRITSks InVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZ29yaXRobSJ9LAorIHtFUlJfUkVBU09OKEVWUF9S X1VOU1VQUE9SVEVEX1NBTFRfVFlQRSkgLCJ1bnN1cHBvcnRlZCBzYWx0IHR5cGUifSwKKyt7RVJS X1JFQVNPTihFVlBfUl9XUkFQX01PREVfTk9UX0FMTE9XRUQpICwid3JhcCBtb2RlIG5vdCBhbGxv d2VkIn0sCisge0VSUl9SRUFTT04oRVZQX1JfV1JPTkdfRklOQUxfQkxPQ0tfTEVOR1RIKSwid3Jv bmcgZmluYWwgYmxvY2sgbGVuZ3RoIn0sCisge0VSUl9SRUFTT04oRVZQX1JfV1JPTkdfUFVCTElD X0tFWV9UWVBFKSAsIndyb25nIHB1YmxpYyBrZXkgdHlwZSJ9LAorIHswLE5VTEx9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cC5oLndyYXAgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwLmgud3JhcAky MDE0LTEwLTE2IDEzOjMwOjEwLjU4NTY1MjgwNSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9ldnAvZXZwLmgJMjAxNC0xMC0xNiAxMzozMDoxMC42ODA2NTQ5NDkgKzAyMDAKK0BAIC0z MzYsNiArMzM2LDcgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QKKyAjZGVmaW5lCQlFVlBfQ0lQSF9H Q01fTU9ERQkJMHg2CisgI2RlZmluZQkJRVZQX0NJUEhfQ0NNX01PREUJCTB4NworICNkZWZpbmUJ CUVWUF9DSVBIX1hUU19NT0RFCQkweDEwMDAxCisrI2RlZmluZQkJRVZQX0NJUEhfV1JBUF9NT0RF CQkweDEwMDAyCisgI2RlZmluZSAJRVZQX0NJUEhfTU9ERQkJCTB4RjAwMDcKKyAvKiBTZXQgaWYg dmFyaWFibGUgbGVuZ3RoIGNpcGhlciAqLworICNkZWZpbmUgCUVWUF9DSVBIX1ZBUklBQkxFX0xF TkdUSAkweDgKK0BAIC0zNjcsNiArMzY4LDEzIEBAIHN0cnVjdCBldnBfY2lwaGVyX3N0CisgI2Rl ZmluZSAJRVZQX0NJUEhfRkxBR19DVVNUT01fQ0lQSEVSCTB4MTAwMDAwCisgI2RlZmluZQkJRVZQ X0NJUEhfRkxBR19BRUFEX0NJUEhFUgkweDIwMDAwMAorIAorKy8qIENpcGhlciBjb250ZXh0IGZs YWcgdG8gaW5kaWNhdGUgd2UgY2FuIGhhbmRsZQorKyAqIHdyYXAgbW9kZTogaWYgYWxsb3dlZCBp biBvbGRlciBhcHBsaWNhdGlvbnMgaXQgY291bGQKKysgKiBvdmVyZmxvdyBidWZmZXJzLgorKyAq LworKworKyNkZWZpbmUgCUVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9BTExPVwkweDEKKysKKyAv KiBjdHJsKCkgdmFsdWVzICovCisgCisgI2RlZmluZQkJRVZQX0NUUkxfSU5JVAkJCTB4MAorQEAg LTcyOSw2ICs3MzcsNyBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2NiYyh2b2lkKTsKKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZV9jYmModm9pZCk7CisgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Rlc19lZGUzX2NiYyh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzeF9j YmModm9pZCk7CisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzX3dyYXAodm9pZCk7Cisg LyogVGhpcyBzaG91bGQgbm93IGJlIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBkZXZfY3J5cHRvIEVO R0lORS4gQnV0IGFsc28sIHdoeSBhcmUKKyAgKiByYzQgYW5kIG1kNSBkZWNsYXJhdGlvbnMgbWFk ZSBoZXJlIGluc2lkZSBhICJOT19ERVMiIHByZWNvbXBpbGVyIGJyYW5jaD8gKi8KKyAjaWYgMAor QEAgLTc4OCw2ICs3OTcsOCBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jdHIodm9p ZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2NtKHZvaWQpOworIGNvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMTI4X2djbSh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBf YWVzXzEyOF94dHModm9pZCk7CisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfd3JhcCh2 b2lkKTsKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF93cmFwX3BhZCh2b2lkKTsKKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9lY2Iodm9pZCk7CisgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Flc18xOTJfY2JjKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTky X2NmYjEodm9pZCk7CitAQCAtNzk4LDYgKzgwOSw4IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9h ZXNfMTkyX29mYih2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jdHIodm9p ZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2NtKHZvaWQpOworIGNvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMTkyX2djbSh2b2lkKTsKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBf YWVzXzE5Ml93cmFwKHZvaWQpOworK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX3dyYXBf cGFkKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2VjYih2b2lkKTsKKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jYmModm9pZCk7CisgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Flc18yNTZfY2ZiMSh2b2lkKTsKK0BAIC04MDksNiArODIyLDggQEAgY29uc3QgRVZQ X0NJUEhFUiAqRVZQX2Flc18yNTZfY3RyKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9h ZXNfMjU2X2NjbSh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9nY20odm9p ZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfeHRzKHZvaWQpOworK2NvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXAodm9pZCk7CisrY29uc3QgRVZQX0NJUEhFUiAqRVZQ X2Flc18yNTZfd3JhcF9wYWQodm9pZCk7CisgI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAm JiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18x MjhfY2JjX2htYWNfc2hhMSh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9j YmNfaG1hY19zaGExKHZvaWQpOworQEAgLTEzOTcsNiArMTQxMiw3IEBAIHZvaWQgRVJSX2xvYWRf RVZQX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBFVlBfUl9VTlNVUFBPUlRFRF9QUkYJCQkJIDEy NQorICNkZWZpbmUgRVZQX1JfVU5TVVBQT1JURURfUFJJVkFURV9LRVlfQUxHT1JJVEhNCQkgMTE4 CisgI2RlZmluZSBFVlBfUl9VTlNVUFBPUlRFRF9TQUxUX1RZUEUJCQkgMTI2CisrI2RlZmluZSBF VlBfUl9XUkFQX01PREVfTk9UX0FMTE9XRUQJCQkgMTcwCisgI2RlZmluZSBFVlBfUl9XUk9OR19G SU5BTF9CTE9DS19MRU5HVEgJCQkgMTA5CisgI2RlZmluZSBFVlBfUl9XUk9OR19QVUJMSUNfS0VZ X1RZUEUJCQkgMTEwCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cF9s aWIuYy53cmFwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2xpYi5jCistLS0gb3BlbnNz bC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfbGliLmMud3JhcAkyMDE0LTEwLTE2IDEzOjMwOjEwLjU4 NTY1MjgwNSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2xpYi5jCTIw MTQtMTAtMTYgMTM6MzA6MTAuNjgwNjU0OTQ5ICswMjAwCitAQCAtNjgsNyArNjgsMTUgQEAgaW50 IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVSXworIAlpZiAoYy0+Y2lwaGVyLT5z ZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNuMV9w YXJhbWV0ZXJzKGMsdHlwZSk7CisgCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQ SF9GTEFHX0RFRkFVTFRfQVNOMSkKKy0JCXJldD1FVlBfQ0lQSEVSX3NldF9hc24xX2l2KGMsIHR5 cGUpOworKwkJeworKwkJaWYgKEVWUF9DSVBIRVJfQ1RYX21vZGUoYykgPT0gRVZQX0NJUEhfV1JB UF9NT0RFKQorKwkJCXsKKysJCQlBU04xX1RZUEVfc2V0KHR5cGUsIFZfQVNOMV9OVUxMLCBOVUxM KTsKKysJCQlyZXQgPSAxOworKwkJCX0KKysJCWVsc2UKKysJCQlyZXQ9RVZQX0NJUEhFUl9zZXRf YXNuMV9pdihjLCB0eXBlKTsKKysJCX0KKyAJZWxzZQorIAkJcmV0PS0xOworIAlyZXR1cm4ocmV0 KTsKK0BAIC04MSw3ICs4OSwxMSBAQCBpbnQgRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtKEVWUF9D SVBIRVJfCisgCWlmIChjLT5jaXBoZXItPmdldF9hc24xX3BhcmFtZXRlcnMgIT0gTlVMTCkKKyAJ CXJldD1jLT5jaXBoZXItPmdldF9hc24xX3BhcmFtZXRlcnMoYyx0eXBlKTsKKyAJZWxzZSBpZiAo Yy0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xKQorKwkJeworKwkJ aWYgKEVWUF9DSVBIRVJfQ1RYX21vZGUoYykgPT0gRVZQX0NJUEhfV1JBUF9NT0RFKQorKwkJCXJl dHVybiAxOworIAkJcmV0PUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYoYywgdHlwZSk7CisrCQl9Cisg CWVsc2UKKyAJCXJldD0tMTsKKyAJcmV0dXJuKHJldCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZXZwL2V2cF90ZXN0LmMud3JhcCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2 cF90ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cF90ZXN0LmMud3JhcAky MDE0LTEwLTE1IDE0OjUxOjA2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9ldnAvZXZwX3Rlc3QuYwkyMDE0LTEwLTE2IDEzOjMwOjEwLjY4MDY1NDk0OSArMDIwMAor QEAgLTE0MSw3ICsxNDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0MShjb25zdCBFVlBfQ0lQSEVSICpj LGNvCisgICAgIHsKKyAgICAgRVZQX0NJUEhFUl9DVFggY3R4OworICAgICB1bnNpZ25lZCBjaGFy IG91dFs0MDk2XTsKKy0gICAgaW50IG91dGwsb3V0bDI7CisrICAgIGludCBvdXRsLG91dGwyLG1v ZGU7CisgCisgICAgIHByaW50ZigiVGVzdGluZyBjaXBoZXIgJXMlc1xuIixFVlBfQ0lQSEVSX25h bWUoYyksCisgCSAgIChlbmNkZWMgPT0gMSA/ICIoZW5jcnlwdCkiIDogKGVuY2RlYyA9PSAwID8g IihkZWNyeXB0KSIgOiAiKGVuY3J5cHQvZGVjcnlwdCkiKSkpOworQEAgLTE1MSw2ICsxNTEsNyBA QCBzdGF0aWMgdm9pZCB0ZXN0MShjb25zdCBFVlBfQ0lQSEVSICpjLGNvCisgICAgIGhleGR1bXAo c3Rkb3V0LCJQbGFpbnRleHQiLHBsYWludGV4dCxwbik7CisgICAgIGhleGR1bXAoc3Rkb3V0LCJD aXBoZXJ0ZXh0IixjaXBoZXJ0ZXh0LGNuKTsKKyAgICAgCisrICAgIG1vZGUgPSBFVlBfQ0lQSEVS X21vZGUoYyk7IAorICAgICBpZihrbiAhPSBjLT5rZXlfbGVuKQorIAl7CisgCWZwcmludGYoc3Rk ZXJyLCJLZXkgbGVuZ3RoIGRvZXNuJ3QgbWF0Y2gsIGdvdCAlZCBleHBlY3RlZCAlbHVcbiIsa24s CitAQCAtMTU4LDkgKzE1OSwxOSBAQCBzdGF0aWMgdm9pZCB0ZXN0MShjb25zdCBFVlBfQ0lQSEVS ICpjLGNvCisgCXRlc3QxX2V4aXQoNSk7CisgCX0KKyAgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKKysgICAgRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKCZjdHgsRVZQX0NJUEhFUl9DVFhf RkxBR19XUkFQX0FMTE9XKTsKKyAgICAgaWYgKGVuY2RlYyAhPSAwKQorICAgICAgICAgeworLQlp ZighRVZQX0VuY3J5cHRJbml0X2V4KCZjdHgsYyxOVUxMLGtleSxpdikpCisrCWlmIChtb2RlID09 IEVWUF9DSVBIX1dSQVBfTU9ERSkKKysJICAgIHsKKysJICAgIGlmKCFFVlBfRW5jcnlwdEluaXRf ZXgoJmN0eCxjLE5VTEwsa2V5LGluID8gaXYgOiBOVUxMKSkKKysJICAgICAgICB7CisrCQlmcHJp bnRmKHN0ZGVyciwiRW5jcnlwdEluaXQgZmFpbGVkXG4iKTsKKysJCUVSUl9wcmludF9lcnJvcnNf ZnAoc3RkZXJyKTsKKysJCXRlc3QxX2V4aXQoMTApOworKwkJfQorKwkgICAgfQorKwllbHNlIGlm KCFFVlBfRW5jcnlwdEluaXRfZXgoJmN0eCxjLE5VTEwsa2V5LGl2KSkKKyAJICAgIHsKKyAJICAg IGZwcmludGYoc3RkZXJyLCJFbmNyeXB0SW5pdCBmYWlsZWRcbiIpOworIAkgICAgRVJSX3ByaW50 X2Vycm9yc19mcChzdGRlcnIpOworQEAgLTE5OSw3ICsyMTAsMTYgQEAgc3RhdGljIHZvaWQgdGVz dDEoY29uc3QgRVZQX0NJUEhFUiAqYyxjbworIAorICAgICBpZiAoZW5jZGVjIDw9IDApCisgICAg ICAgICB7CistCWlmKCFFVlBfRGVjcnlwdEluaXRfZXgoJmN0eCxjLE5VTEwsa2V5LGl2KSkKKysJ aWYgKG1vZGUgPT0gRVZQX0NJUEhfV1JBUF9NT0RFKQorKwkgICAgeworKwkgICAgaWYoIUVWUF9E ZWNyeXB0SW5pdF9leCgmY3R4LGMsTlVMTCxrZXksaW4gPyBpdiA6IE5VTEwpKQorKwkgICAgICAg IHsKKysJCWZwcmludGYoc3RkZXJyLCJFbmNyeXB0SW5pdCBmYWlsZWRcbiIpOworKwkJRVJSX3By aW50X2Vycm9yc19mcChzdGRlcnIpOworKwkJdGVzdDFfZXhpdCgxMCk7CisrCQl9CisrCSAgICB9 CisrCWVsc2UgaWYoIUVWUF9EZWNyeXB0SW5pdF9leCgmY3R4LGMsTlVMTCxrZXksaXYpKQorIAkg ICAgeworIAkgICAgZnByaW50ZihzdGRlcnIsIkRlY3J5cHRJbml0IGZhaWxlZFxuIik7CisgCSAg ICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CitAQCAtMzM5LDcgKzM1OSw3IEBAIGludCBt YWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorIAlwZXJyb3Ioc3pUZXN0RmlsZSk7CisgCUVYSVQo Mik7CisgCX0KKy0KKysgICAgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKKyAgICAgLyogTG9h ZCB1cCB0aGUgc29mdHdhcmUgRVZQX0NJUEhFUiBhbmQgRVZQX01EIGRlZmluaXRpb25zICovCisg ICAgIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKCk7CisgICAgIE9wZW5TU0xfYWRkX2FsbF9kaWdl c3RzKCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cHRlc3RzLnR4dC53 cmFwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwdGVzdHMudHh0CistLS0gb3BlbnNzbC0x LjAuMWovY3J5cHRvL2V2cC9ldnB0ZXN0cy50eHQud3JhcAkyMDE0LTEwLTE1IDE0OjUzOjM5LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwdGVzdHMudHh0 CTIwMTQtMTAtMTYgMTM6MzA6MTAuNjgxNjU0OTcyICswMjAwCitAQCAtMzMyLDMgKzMzMiwxNSBA QCBTRUVELUVDQjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisgU0VFRC1FQ0I6MDAw MTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEY6OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwOkMxMUYyMkYyMDE0MDUwNTA4NDQ4MzU5N0U0MzcwRjQzOjEKKyBTRUVELUVDQjo0NzA2 NDgwODUxRTYxQkU4NUQ3NEJGQjNGRDk1NjE4NTo6ODNBMkY4QTI4ODY0MUZCOUE0RTlBNUNDMkYx MzFDN0Q6RUU1NEQxM0VCQ0FFNzA2RDIyNkJDMzE0MkNENDBENEE6MQorIFNFRUQtRUNCOjI4REJD M0JDNDlGRkQ4N0RDRkE1MDlCMTFENDIyQkU3OjpCNDFFNkJFMkVCQTg0QTE0OEUyRUVEODQ1OTND NUVDNzo5QjlCN0JGQ0QxODEzQ0I5NUQwQjM2MThGNDBGNTEyMjoxCisrCisrIyBBRVMgd3JhcCB0 ZXN0cyBmcm9tIFJGQzMzOTQKKytpZC1hZXMxMjgtd3JhcDowMDAxMDIwMzA0MDUwNjA3MDgwOTBB MEIwQzBEMEUwRjo6MDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkY6MUZBNjhCMEE4MTEy QjQ0N0FFRjM0QkQ4RkI1QTdCODI5RDNFODYyMzcxRDJDRkU1CisraWQtYWVzMTkyLXdyYXA6MDAw MTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3OjowMDExMjIzMzQ0 NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjo5Njc3OEIyNUFFNkNBNDM1RjkyQjVCOTdDMDUwQUVEMjQ2 OEFCOEExN0FEODRFNUQKKytpZC1hZXMyNTYtd3JhcDowMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIw QzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGOjowMDExMjIzMzQ0NTU2Njc3 ODg5OUFBQkJDQ0RERUVGRjo2NEU4QzNGOUNFMEY1QkEyNjNFOTc3NzkwNTgxOEEyQTkzQzgxOTFF N0Q2RThBRTcKKytpZC1hZXMxOTItd3JhcDowMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUw RjEwMTExMjEzMTQxNTE2MTc6OjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGMDAwMTAy MDMwNDA1MDYwNzowMzFEMzMyNjRFMTVEMzMyNjhGMjRFQzI2MDc0M0VEQ0UxQzZDN0RERUU3MjVB OTM2QkE4MTQ5MTVDNjc2MkQyCisraWQtYWVzMjU2LXdyYXA6MDAwMTAyMDMwNDA1MDYwNzA4MDkw QTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjo6MDAxMTIyMzM0NDU1 NjY3Nzg4OTlBQUJCQ0NEREVFRkYwMDAxMDIwMzA0MDUwNjA3OkE4RjlCQzE2MTJDNjhCM0ZGNkU2 RjRGQkUzMEU3MUU0NzY5QzhCODBBMzJDQjg5NThDRDVEMTdENkIyNTREQTEKKytpZC1hZXMyNTYt d3JhcDowMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5 MUExQjFDMUQxRTFGOjowMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjAwMDEwMjAzMDQw NTA2MDcwODA5MEEwQjBDMEQwRTBGOjI4QzlGNDA0QzRCODEwRjRDQkNDQjM1Q0ZCODdGODI2M0Y1 Nzg2RTJEODBFRDMyNkNCQzdGMEU3MUE5OUY0M0JGQjk4OEI5QjdBMDJERDIxCisrIyBBRVMgd3Jh cCB0ZXN0cyBmcm9tIFJGQzU2NDkKKytpZC1hZXMxOTItd3JhcC1wYWQ6NTg0MGRmNmUyOWIwMmFm MWFiNDkzYjcwNWJmMTZlYTFhZTgzMzhmNGRjYzE3NmE4OjpjMzdiN2U2NDkyNTg0MzQwYmVkMTIy MDc4MDg5NDExNTUwNjhmNzM4OjEzOGJkZWFhOWI4ZmE3ZmM2MWY5Nzc0MmU3MjI0OGVlNWFlNmFl NTM2MGQxYWU2YTVmNTRmMzczZmE1NDNiNmEKKytpZC1hZXMxOTItd3JhcC1wYWQ6NTg0MGRmNmUy OWIwMmFmMWFiNDkzYjcwNWJmMTZlYTFhZTgzMzhmNGRjYzE3NmE4Ojo0NjZmNzI1MDYxNzM2OTph ZmJlYjBmMDdkZmJmNTQxOTIwMGYyY2NiNTBiYjI0ZgorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWovY3J5cHRvL21vZGVzL01ha2VmaWxlLndyYXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL21vZGVz L01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL21vZGVzL01ha2VmaWxlLndyYXAJ MjAxNC0xMC0xNiAxMzozMDoxMC41NjA2NTIyNDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vbW9kZXMvTWFrZWZpbGUJMjAxNC0xMC0xNiAxMzozMDoxMC42ODE2NTQ5NzIgKzAyMDAK K0BAIC0yMiw5ICsyMiw5IEBAIEFQUFM9CisgCisgTElCPSQoVE9QKS9saWJjcnlwdG8uYQorIExJ QlNSQz0gY2JjMTI4LmMgY3RyMTI4LmMgY3RzMTI4LmMgY2ZiMTI4LmMgb2ZiMTI4LmMgZ2NtMTI4 LmMgXAorLQljY20xMjguYyB4dHMxMjguYworKwljY20xMjguYyB4dHMxMjguYyB3cmFwMTI4LmMK KyBMSUJPQko9IGNiYzEyOC5vIGN0cjEyOC5vIGN0czEyOC5vIGNmYjEyOC5vIG9mYjEyOC5vIGdj bTEyOC5vIFwKKy0JY2NtMTI4Lm8geHRzMTI4Lm8gJChNT0RFU19BU01fT0JKKQorKwljY20xMjgu byB4dHMxMjgubyB3cmFwMTI4Lm8gJChNT0RFU19BU01fT0JKKQorIAorIFNSQz0gJChMSUJTUkMp CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbW9kZXMvbW9kZXMuaC53cmFwIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9tb2Rlcy9tb2Rlcy5oCistLS0gb3BlbnNzbC0xLjAuMWovY3J5 cHRvL21vZGVzL21vZGVzLmgud3JhcAkyMDE0LTEwLTE2IDEzOjMwOjEwLjY4MTY1NDk3MiArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tb2Rlcy9tb2Rlcy5oCTIwMTQtMTAtMTYgMTM6 MzE6MDEuMjMyNzk2MTg2ICswMjAwCitAQCAtMTM2LDYgKzEzNiwyMCBAQCB0eXBlZGVmIHN0cnVj dCB4dHMxMjhfY29udGV4dCBYVFMxMjhfQ09OCisgCisgaW50IENSWVBUT194dHMxMjhfZW5jcnlw dChjb25zdCBYVFMxMjhfQ09OVEVYVCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGl2WzE2XSwK KyAJY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBs ZW4sIGludCBlbmMpOworKworK3NpemVfdCBDUllQVE9fMTI4X3dyYXAodm9pZCAqa2V5LCBjb25z dCB1bnNpZ25lZCBjaGFyICppdiwKKysJCXVuc2lnbmVkIGNoYXIgKm91dCwKKysJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spOworKworK3Np emVfdCBDUllQVE9fMTI4X3Vud3JhcCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2 LAorKwkJdW5zaWduZWQgY2hhciAqb3V0LAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNp emVfdCBpbmxlbiwgYmxvY2sxMjhfZiBibG9jayk7Cisrc2l6ZV90IENSWVBUT18xMjhfd3JhcF9w YWQodm9pZCAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppY3YsCisrCQl1bnNpZ25lZCBjaGFy ICpvdXQsCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLCBibG9jazEy OF9mIGJsb2NrKTsKKytzaXplX3QgQ1JZUFRPXzEyOF91bndyYXBfcGFkKHZvaWQgKmtleSwgY29u c3QgdW5zaWduZWQgY2hhciAqaWN2LAorKwkJdW5zaWduZWQgY2hhciAqb3V0LAorKwkJY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbiwgYmxvY2sxMjhfZiBibG9jayk7CisgI2lm ZGVmICBfX2NwbHVzcGx1cworIH0KKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9tb2Rlcy93cmFwMTI4LmMud3JhcCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbW9kZXMvd3Jh cDEyOC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL21vZGVzL3dyYXAxMjguYy53cmFwCTIw MTQtMTAtMTYgMTM6MzA6MTAuNjgxNjU0OTcyICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL21vZGVzL3dyYXAxMjguYwkyMDE0LTEwLTE2IDEzOjMwOjEwLjY4MTY1NDk3MiArMDIwMAor QEAgLTAsMCArMSwzNzIgQEAKKysvKiBjcnlwdG8vbW9kZXMvd3JhcDEyOC5jICovCisrLyogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCisrICogcHJvamVjdC4KKysgKiBNb2RlIHdpdGggcGFkZGluZyBjb250cmlidXRlZCBi eSBQZXRyIFNwYWNlayAocHNwYWNla0ByZWRoYXQuY29tKS4KKysgKi8KKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAxMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 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 PT09PT09PT09PT09PT0KKysgKi8KKysKKysvKiogIEJld2FyZSEKKysgKgorKyAqICBGb2xsb3dp bmcgd3JhcHBpbmcgbW9kZXMgd2VyZSBkZXNpZ25lZCBmb3IgQUVTIGJ1dCB0aGlzIGltcGxlbWVu dGF0aW9uCisrICogIGFsbG93cyB5b3UgdG8gdXNlIHRoZW0gZm9yIGFueSAxMjggYml0IGJsb2Nr IGNpcGhlci4KKysgKi8KKysKKysjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKysjaW5jbHVkZSA8b3Bl bnNzbC9tb2Rlcy5oPgorKworKy8qKiBSRkMgMzM5NCBzZWN0aW9uIDIuMi4zLjEgRGVmYXVsdCBJ bml0aWFsIFZhbHVlICovCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9pdltd ID0geworKyAgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwK Kyt9OworKworKy8qKiBSRkMgNTY0OSBzZWN0aW9uIDMgQWx0ZXJuYXRpdmUgSW5pdGlhbCBWYWx1 ZSAzMi1iaXQgY29uc3RhbnQgKi8KKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZWZhdWx0 X2FpdltdID0geworKyAgMHhBNiwgMHg1OSwgMHg1OSwgMHhBNgorK307CisrCisrLyoqIElucHV0 IHNpemUgbGltaXQ6IGxvd2VyIHRoYW4gbWF4aW11bSBvZiBzdGFuZGFyZHMgYnV0IGZhciBsYXJn ZXIgdGhhbgorKyAqICBhbnl0aGluZyB0aGF0IHdpbGwgYmUgdXNlZCBpbiBwcmFjdGljZS4KKysg Ki8KKysjZGVmaW5lIENSWVBUTzEyOF9XUkFQX01BWCAoMVVMIDw8IDMxKQorKworKy8qKiBXcmFw cGluZyBhY2NvcmRpbmcgdG8gUkZDIDMzOTQgc2VjdGlvbiAyLjIuMS4KKysgKgorKyAqICBAcGFy YW1baW5dICBrZXkgICAgS2V5IHZhbHVlLiAKKysgKiAgQHBhcmFtW2luXSAgaXYgICAgIElWIHZh bHVlLiBMZW5ndGggPSA4IGJ5dGVzLiBOVUxMID0gdXNlIGRlZmF1bHRfaXYuCisrICogIEBwYXJh bVtpbl0gIGluICAgICBQbGFpbiB0ZXh0IGFzIG4gNjQtYml0IGJsb2NrcywgbiA+PSAyLgorKyAq ICBAcGFyYW1baW5dICBpbmxlbiAgTGVuZ3RoIG9mIGluLgorKyAqICBAcGFyYW1bb3V0XSBvdXQg ICAgQ2lwaGVyIHRleHQuIE1pbmltYWwgYnVmZmVyIGxlbmd0aCA9IChpbmxlbiArIDgpIGJ5dGVz LgorKyAqICAgICAgICAgICAgICAgICAgICAgSW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGNhbiBv dmVybGFwIGlmIGJsb2NrIGZ1bmN0aW9uCisrICogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0 cyB0aGF0LgorKyAqICBAcGFyYW1baW5dICBibG9jayAgQmxvY2sgcHJvY2Vzc2luZyBmdW5jdGlv bi4KKysgKiAgQHJldHVybiAgICAgICAgICAgIDAgaWYgaW5sZW4gZG9lcyBub3QgY29uc2lzdCBv ZiBuIDY0LWJpdCBibG9ja3MsIG4gPj0gMi4KKysgKiAgICAgICAgICAgICAgICAgICAgIG9yIGlm IGlubGVuID4gQ1JZUFRPMTI4X1dSQVBfTUFYLgorKyAqICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0IGxlbmd0aCBpZiB3cmFwcGluZyBzdWNjZWVkZWQuCisrICovCisrc2l6ZV90IENSWVBUT18x Mjhfd3JhcCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJdW5zaWduZWQg Y2hhciAqb3V0LAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbiwgYmxv Y2sxMjhfZiBibG9jaykKKysJeworKwl1bnNpZ25lZCBjaGFyICpBLCBCWzE2XSwgKlI7CisrCXNp emVfdCBpLCBqLCB0OworKwlpZiAoKGlubGVuICYgMHg3KSB8fCAoaW5sZW4gPCAxNikgfHwgKGlu bGVuID4gQ1JZUFRPMTI4X1dSQVBfTUFYKSkKKysJCXJldHVybiAwOworKwlBID0gQjsKKysJdCA9 IDE7CisrCW1lbW1vdmUob3V0ICsgOCwgaW4sIGlubGVuKTsKKysJaWYgKCFpdikKKysJCWl2ID0g ZGVmYXVsdF9pdjsKKysKKysJbWVtY3B5KEEsIGl2LCA4KTsKKysKKysJZm9yIChqID0gMDsgaiA8 IDY7IGorKykKKysJCXsKKysJCVIgPSBvdXQgKyA4OworKwkJZm9yIChpID0gMDsgaSA8IGlubGVu OyBpICs9IDgsIHQrKywgUiArPSA4KQorKwkJCXsKKysJCQltZW1jcHkoQiArIDgsIFIsIDgpOwor KwkJCWJsb2NrKEIsIEIsIGtleSk7CisrCQkJQVs3XSBePSAodW5zaWduZWQgY2hhcikodCAmIDB4 ZmYpOworKwkJCWlmICh0ID4gMHhmZikJCisrCQkJCXsKKysJCQkJQVs2XSBePSAodW5zaWduZWQg Y2hhcikoKHQgPj4gOCkgJiAweGZmKTsKKysJCQkJQVs1XSBePSAodW5zaWduZWQgY2hhcikoKHQg Pj4gMTYpICYgMHhmZik7CisrCQkJCUFbNF0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDI0KSAm IDB4ZmYpOworKwkJCQl9CisrCQkJbWVtY3B5KFIsIEIgKyA4LCA4KTsKKysJCQl9CisrCQl9Cisr CW1lbWNweShvdXQsIEEsIDgpOworKwlyZXR1cm4gaW5sZW4gKyA4OworKwl9CisrCisrCisrLyoq IFVud3JhcHBpbmcgYWNjb3JkaW5nIHRvIFJGQyAzMzk0IHNlY3Rpb24gMi4yLjIgc3RlcHMgMS0y LgorKyAqICBJViBjaGVjayAoc3RlcCAzKSBpcyByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVy LgorKyAqCisrICogIEBwYXJhbVtpbl0gIGtleSAgICBLZXkgdmFsdWUuIAorKyAqICBAcGFyYW1b b3V0XSBpdiAgICAgVW5jaGVja2VkIElWIHZhbHVlLiBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSA4 IGJ5dGVzLgorKyAqICBAcGFyYW1bb3V0XSBvdXQgICAgUGxhaW4gdGV4dCB3aXRob3V0IElWLgor KyAqICAgICAgICAgICAgICAgICAgICAgTWluaW1hbCBidWZmZXIgbGVuZ3RoID0gKGlubGVuIC0g OCkgYnl0ZXMuCisrICogICAgICAgICAgICAgICAgICAgICBJbnB1dCBhbmQgb3V0cHV0IGJ1ZmZl cnMgY2FuIG92ZXJsYXAgaWYgYmxvY2sgZnVuY3Rpb24KKysgKiAgICAgICAgICAgICAgICAgICAg IHN1cHBvcnRzIHRoYXQuCisrICogIEBwYXJhbVtpbl0gIGluICAgICBDaXBoZXJ0ZXh0IHRleHQg YXMgbiA2NC1iaXQgYmxvY2tzCisrICogIEBwYXJhbVtpbl0gIGlubGVuICBMZW5ndGggb2YgaW4u CisrICogIEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9uLgorKyAq ICBAcmV0dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBpcyBvdXQgb2YgcmFuZ2UgWzI0LCBDUllQ VE8xMjhfV1JBUF9NQVhdCisrICogICAgICAgICAgICAgICAgICAgICBvciBpZiBpbmxlbiBpcyBu b3QgbXVsdGlwbHkgb2YgOC4KKysgKiAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBsZW5ndGgg b3RoZXJ3aXNlLgorKyAqLworK3N0YXRpYyBzaXplX3QgY3J5cHRvXzEyOF91bndyYXBfcmF3KHZv aWQgKmtleSwgdW5zaWduZWQgY2hhciAqaXYsCisrCQl1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluLAorKwkJc2l6ZV90IGlubGVuLCBibG9jazEyOF9mIGJsb2NrKQor Kwl7CisrCXVuc2lnbmVkIGNoYXIgKkEsIEJbMTZdLCAqUjsKKysJc2l6ZV90IGksIGosIHQ7Cisr CWlubGVuIC09IDg7CisrCWlmICgoaW5sZW4gJiAweDcpIHx8IChpbmxlbiA8IDE2KSB8fCAoaW5s ZW4gPiBDUllQVE8xMjhfV1JBUF9NQVgpKQorKwkJcmV0dXJuIDA7CisrCUEgPSBCOworKwl0ID0g IDYgKiAoaW5sZW4gPj4gMyk7CisrCW1lbWNweShBLCBpbiwgOCk7CisrCW1lbW1vdmUob3V0LCBp biArIDgsIGlubGVuKTsKKysJZm9yIChqID0gMDsgaiA8IDY7IGorKykKKysJCXsKKysJCVIgPSBv dXQgKyBpbmxlbiAtIDg7CisrCQlmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkgKz0gOCwgdC0tLCBS IC09IDgpCisrCQkJeworKwkJCUFbN10gXj0gKHVuc2lnbmVkIGNoYXIpKHQgJiAweGZmKTsKKysJ CQlpZiAodCA+IDB4ZmYpCQorKwkJCQl7CisrCQkJCUFbNl0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0 ID4+IDgpICYgMHhmZik7CisrCQkJCUFbNV0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDE2KSAm IDB4ZmYpOworKwkJCQlBWzRdIF49ICh1bnNpZ25lZCBjaGFyKSgodCA+PiAyNCkgJiAweGZmKTsK KysJCQkJfQorKwkJCW1lbWNweShCICsgOCwgUiwgOCk7CisrCQkJYmxvY2soQiwgQiwga2V5KTsK KysJCQltZW1jcHkoUiwgQiArIDgsIDgpOworKwkJCX0KKysJCX0KKysJbWVtY3B5KGl2LCBBLCA4 KTsKKysJcmV0dXJuIGlubGVuOworKwl9CisrCisrLyoqIFVud3JhcHBpbmcgYWNjb3JkaW5nIHRv IFJGQyAzMzk0IHNlY3Rpb24gMi4yLjIgaW5jbHVkaW5nIElWIGNoZWNrLgorKyAqICBGaXJzdCBi bG9jayBvZiBwbGFpbiB0ZXh0IGhhdmUgdG8gbWF0Y2ggc3VwcGxpZWQgSVYgb3RoZXJ3aXNlIGFu IGVycm9yIGlzCisrICogIHJldHVybmVkLgorKyAqCisrICogIEBwYXJhbVtpbl0gIGtleSAgICBL ZXkgdmFsdWUuIAorKyAqICBAcGFyYW1bb3V0XSBpdiAgICAgVW5jaGVja2VkIElWIHZhbHVlLiBN aW5pbWFsIGJ1ZmZlciBsZW5ndGggPSA4IGJ5dGVzLgorKyAqICBAcGFyYW1bb3V0XSBvdXQgICAg UGxhaW4gdGV4dCB3aXRob3V0IElWLgorKyAqICAgICAgICAgICAgICAgICAgICAgTWluaW1hbCBi dWZmZXIgbGVuZ3RoID0gKGlubGVuIC0gOCkgYnl0ZXMuCisrICogICAgICAgICAgICAgICAgICAg ICBJbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgY2FuIG92ZXJsYXAgaWYgYmxvY2sgZnVuY3Rpb24K KysgKiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHRoYXQuCisrICogIEBwYXJhbVtpbl0g IGluICAgICBDaXBoZXJ0ZXh0IHRleHQgYXMgbiA2NC1iaXQgYmxvY2tzCisrICogIEBwYXJhbVtp bl0gIGlubGVuICBMZW5ndGggb2YgaW4uCisrICogIEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBw cm9jZXNzaW5nIGZ1bmN0aW9uLgorKyAqICBAcmV0dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBp cyBvdXQgb2YgcmFuZ2UgWzI0LCBDUllQVE8xMjhfV1JBUF9NQVhdCisrICogICAgICAgICAgICAg ICAgICAgICBvciBpZiBpbmxlbiBpcyBub3QgbXVsdGlwbHkgb2YgOAorKyAqICAgICAgICAgICAg ICAgICAgICAgb3IgaWYgSVYgZG9lc24ndCBtYXRjaCBleHBlY3RlZCB2YWx1ZS4KKysgKiAgICAg ICAgICAgICAgICAgICAgIE91dHB1dCBsZW5ndGggb3RoZXJ3aXNlLgorKyAqLworK3NpemVfdCBD UllQVE9fMTI4X3Vud3JhcCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJ dW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVu LAorKwkJYmxvY2sxMjhfZiBibG9jaykKKysJeworKwlzaXplX3QgcmV0OworKwl1bnNpZ25lZCBj aGFyIGdvdF9pdls4XTsKKysKKysJcmV0ID0gY3J5cHRvXzEyOF91bndyYXBfcmF3KGtleSwgZ290 X2l2LCBvdXQsIGluLCBpbmxlbiwgYmxvY2spOworKwlpZiAocmV0ICE9IGlubGVuKQorKwkJcmV0 dXJuIHJldDsKKysKKysJaWYgKCFpdikKKysJCWl2ID0gZGVmYXVsdF9pdjsKKysJaWYgKENSWVBU T19tZW1jbXAob3V0LCBpdiwgOCkpCisrCQl7CisrCQlPUEVOU1NMX2NsZWFuc2Uob3V0LCBpbmxl bik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJcmV0dXJuIGlubGVuOworKwl9CisrCisrLyoqIFdy YXBwaW5nIGFjY29yZGluZyB0byBSRkMgNTY0OSBzZWN0aW9uIDQuMS4KKysgKgorKyAqICBAcGFy YW1baW5dICBrZXkgICAgS2V5IHZhbHVlLiAKKysgKiAgQHBhcmFtW2luXSAgaWN2ICAgIChOb24t c3RhbmRhcmQpIElWLCA0IGJ5dGVzLiBOVUxMID0gdXNlIGRlZmF1bHRfYWl2LgorKyAqICBAcGFy YW1bb3V0XSBvdXQgICAgQ2lwaGVyIHRleHQuIE1pbmltYWwgYnVmZmVyIGxlbmd0aCA9IChpbmxl biArIDE1KSBieXRlcy4KKysgKiAgICAgICAgICAgICAgICAgICAgIElucHV0IGFuZCBvdXRwdXQg YnVmZmVycyBjYW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgorKyAqICAgICAgICAgICAgICAg ICAgICAgc3VwcG9ydHMgdGhhdC4KKysgKiAgQHBhcmFtW2luXSAgaW4gICAgIFBsYWluIHRleHQg YXMgbiA2NC1iaXQgYmxvY2tzLCBuID49IDIuCisrICogIEBwYXJhbVtpbl0gIGlubGVuICBMZW5n dGggb2YgaW4uCisrICogIEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1bmN0 aW9uLgorKyAqICBAcmV0dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBpcyBvdXQgb2YgcmFuZ2Ug WzEsIENSWVBUTzEyOF9XUkFQX01BWF0uCisrICogICAgICAgICAgICAgICAgICAgICBPdXRwdXQg bGVuZ3RoIGlmIHdyYXBwaW5nIHN1Y2NlZWRlZC4KKysgKi8KKytzaXplX3QgQ1JZUFRPXzEyOF93 cmFwX3BhZCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwKKysJCXVuc2lnbmVk IGNoYXIgKm91dCwKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sIGJs b2NrMTI4X2YgYmxvY2spCisrCXsKKysJLyogbjogbnVtYmVyIG9mIDY0LWJpdCBibG9ja3MgaW4g dGhlIHBhZGRlZCBrZXkgZGF0YSAqLworKwljb25zdCBzaXplX3QgYmxvY2tzX3BhZGRlZCA9IChp bmxlbiArIDgpIC8gODsKKysJY29uc3Qgc2l6ZV90IHBhZGRlZF9sZW4gPSBibG9ja3NfcGFkZGVk ICogODsKKysJY29uc3Qgc2l6ZV90IHBhZGRpbmdfbGVuID0gcGFkZGVkX2xlbiAtIGlubGVuOwor KwkvKiBSRkMgNTY0OSBzZWN0aW9uIDM6IEFsdGVybmF0aXZlIEluaXRpYWwgVmFsdWUgKi8KKysJ dW5zaWduZWQgY2hhciBhaXZbOF07CisrCWludCByZXQ7CisrCisrCS8qIFNlY3Rpb24gMTogdXNl IDMyLWJpdCBmaXhlZCBmaWVsZCBmb3IgcGxhaW50ZXh0IG9jdGV0IGxlbmd0aCAqLworKwlpZiAo aW5sZW4gPT0gMCB8fCBpbmxlbiA+PSBDUllQVE8xMjhfV1JBUF9NQVgpCisrCQlyZXR1cm4gMDsK KysKKysJLyogU2VjdGlvbiAzOiBBbHRlcm5hdGl2ZSBJbml0aWFsIFZhbHVlICovCisrCWlmICgh aWN2KQorKwkJbWVtY3B5KGFpdiwgZGVmYXVsdF9haXYsIDQpOworKwllbHNlCisrCQltZW1jcHko YWl2LCBpY3YsIDQpOyAvKiBTdGFuZGFyZCBkb2Vzbid0IG1lbnRpb24gdGhpcy4gKi8KKysKKysJ YWl2WzRdID0gKGlubGVuID4+IDI0KSAmIDB4RkY7CisrCWFpdls1XSA9IChpbmxlbiA+PiAxNikg JiAweEZGOworKwlhaXZbNl0gPSAoaW5sZW4gPj4gOCkgJiAweEZGOworKwlhaXZbN10gPSBpbmxl biAmIDB4RkY7CisrCisrCWlmIChwYWRkZWRfbGVuID09IDgpCisrCQl7CisrCQkvKiBTZWN0aW9u IDQuMSAtIHNwZWNpYWwgY2FzZSBpbiBzdGVwIDI6CisrCQkgKiBJZiB0aGUgcGFkZGVkIHBsYWlu dGV4dCBjb250YWlucyBleGFjdGx5IGVpZ2h0IG9jdGV0cywgdGhlbgorKwkJICogcHJlcGVuZCB0 aGUgQUlWIGFuZCBlbmNyeXB0IHRoZSByZXN1bHRpbmcgMTI4LWJpdCBibG9jaworKwkJICogdXNp bmcgQUVTIGluIEVDQiBtb2RlLiAqLworKwkJbWVtbW92ZShvdXQgKyA4LCBpbiwgaW5sZW4pOwor KwkJbWVtY3B5KG91dCwgYWl2LCA4KTsKKysJCW1lbXNldChvdXQgKyA4ICsgaW5sZW4sIDAsIHBh ZGRpbmdfbGVuKTsKKysJCWJsb2NrKG91dCwgb3V0LCBrZXkpOworKwkJcmV0ID0gMTY7IC8qIEFJ ViArIHBhZGRlZCBpbnB1dCAqLworKwkJfQorKwkJZWxzZQorKwkJeworKwkJbWVtbW92ZShvdXQs IGluLCBpbmxlbik7CisrCQltZW1zZXQob3V0ICsgaW5sZW4sIDAsIHBhZGRpbmdfbGVuKTsgLyog U2VjdGlvbiA0LjEgc3RlcCAxICovCisrCQlyZXQgPSBDUllQVE9fMTI4X3dyYXAoa2V5LCBhaXYs IG91dCwgb3V0LCBwYWRkZWRfbGVuLCBibG9jayk7CisrCQl9CisrCisrCXJldHVybiByZXQ7Cisr CX0KKysKKysvKiogVW53cmFwcGluZyBhY2NvcmRpbmcgdG8gUkZDIDU2NDkgc2VjdGlvbiA0LjIu CisrICoKKysgKiAgQHBhcmFtW2luXSAga2V5ICAgIEtleSB2YWx1ZS4gCisrICogIEBwYXJhbVtp bl0gIGljdiAgICAoTm9uLXN0YW5kYXJkKSBJViwgNCBieXRlcy4gTlVMTCA9IHVzZSBkZWZhdWx0 X2Fpdi4KKysgKiAgQHBhcmFtW291dF0gb3V0ICAgIFBsYWluIHRleHQuIE1pbmltYWwgYnVmZmVy IGxlbmd0aCA9IGlubGVuIGJ5dGVzLgorKyAqICAgICAgICAgICAgICAgICAgICAgSW5wdXQgYW5k IG91dHB1dCBidWZmZXJzIGNhbiBvdmVybGFwIGlmIGJsb2NrIGZ1bmN0aW9uCisrICogICAgICAg ICAgICAgICAgICAgICBzdXBwb3J0cyB0aGF0LgorKyAqICBAcGFyYW1baW5dICBpbiAgICAgQ2lw aGVydGV4dCB0ZXh0IGFzIG4gNjQtYml0IGJsb2NrcworKyAqICBAcGFyYW1baW5dICBpbmxlbiAg TGVuZ3RoIG9mIGluLgorKyAqICBAcGFyYW1baW5dICBibG9jayAgQmxvY2sgcHJvY2Vzc2luZyBm dW5jdGlvbi4KKysgKiAgQHJldHVybiAgICAgICAgICAgIDAgaWYgaW5sZW4gaXMgb3V0IG9mIHJh bmdlIFsxNiwgQ1JZUFRPMTI4X1dSQVBfTUFYXSwKKysgKiAgICAgICAgICAgICAgICAgICAgIG9y IGlmIGlubGVuIGlzIG5vdCBtdWx0aXBseSBvZiA4CisrICogICAgICAgICAgICAgICAgICAgICBv ciBpZiBJViBhbmQgbWVzc2FnZSBsZW5ndGggaW5kaWNhdG9yIGRvZXNuJ3QgbWF0Y2guCisrICog ICAgICAgICAgICAgICAgICAgICBPdXRwdXQgbGVuZ3RoIGlmIHVud3JhcHBpbmcgc3VjY2VlZGVk IGFuZCBJViBtYXRjaGVzLgorKyAqLworK3NpemVfdCBDUllQVE9fMTI4X3Vud3JhcF9wYWQodm9p ZCAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppY3YsCisrCQl1bnNpZ25lZCBjaGFyICpvdXQs CisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLCBibG9jazEyOF9mIGJs b2NrKQorKwl7CisrCS8qIG46IG51bWJlciBvZiA2NC1iaXQgYmxvY2tzIGluIHRoZSBwYWRkZWQg a2V5IGRhdGEgKi8KKysJc2l6ZV90IG4gPSBpbmxlbiAvIDggLSAxOworKwlzaXplX3QgcGFkZGVk X2xlbjsKKysJc2l6ZV90IHBhZGRpbmdfbGVuOworKwlzaXplX3QgcHRleHRfbGVuOworKwkvKiBS RkMgNTY0OSBzZWN0aW9uIDM6IEFsdGVybmF0aXZlIEluaXRpYWwgVmFsdWUgKi8KKysJdW5zaWdu ZWQgY2hhciBhaXZbOF07CisrCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHplcm9zWzhdID0gezB4MH07 CisrCXNpemVfdCByZXQ7CisrCisrCS8qIFNlY3Rpb24gNC4yOiBDaXBoZXIgdGV4dCBsZW5ndGgg aGFzIHRvIGJlIChuKzEpIDY0LWJpdCBibG9ja3MuICovCisrCWlmICgoaW5sZW4gJiAweDcpICE9 IDAgfHwgaW5sZW4gPCAxNiB8fCBpbmxlbiA+PSBDUllQVE8xMjhfV1JBUF9NQVgpCisrCQlyZXR1 cm4gMDsKKysKKysJbWVtbW92ZShvdXQsIGluLCBpbmxlbik7CisrCWlmIChpbmxlbiA9PSAxNikK KysJCXsKKysJCS8qIFNlY3Rpb24gNC4yIC0gc3BlY2lhbCBjYXNlIGluIHN0ZXAgMToKKysJCSAq IFdoZW4gbj0xLCB0aGUgY2lwaGVydGV4dCBjb250YWlucyBleGFjdGx5IHR3byA2NC1iaXQKKysJ CSAqIGJsb2NrcyBhbmQgdGhleSBhcmUgZGVjcnlwdGVkIGFzIGEgc2luZ2xlIEFFUworKwkJICog YmxvY2sgdXNpbmcgQUVTIGluIEVDQiBtb2RlOgorKwkJICogQUlWIHwgUFsxXSA9IERFQyhLLCBD WzBdIHwgQ1sxXSkKKysJCSAqLworKwkJYmxvY2sob3V0LCBvdXQsIGtleSk7CisrCQltZW1jcHko YWl2LCBvdXQsIDgpOworKwkJLyogUmVtb3ZlIEFJViAqLworKwkJbWVtbW92ZShvdXQsIG91dCAr IDgsIDgpOworKwkJcGFkZGVkX2xlbiA9IDg7CisrCQl9CisrCQllbHNlCisrCQl7CisrCQlwYWRk ZWRfbGVuID0gaW5sZW4gLSA4OworKwkJcmV0ID0gY3J5cHRvXzEyOF91bndyYXBfcmF3KGtleSwg YWl2LCBvdXQsIG91dCwgaW5sZW4sIGJsb2NrKTsKKysJCWlmIChwYWRkZWRfbGVuICE9IHJldCkK KysJCQl7CisrCQkJT1BFTlNTTF9jbGVhbnNlKG91dCwgaW5sZW4pOworKwkJCXJldHVybiAwOwor KwkJCX0KKysJCX0KKysKKysJLyogU2VjdGlvbiAzOiBBSVYgY2hlY2tzOiBDaGVjayB0aGF0IE1T QigzMixBKSA9IEE2NTk1OUE2LgorKwkgKiBPcHRpb25hbGx5IGEgdXNlci1zdXBwbGllZCB2YWx1 ZSBjYW4gYmUgdXNlZAorKwkgKiAoZXZlbiBpZiBzdGFuZGFyZCBkb2Vzbid0IG1lbnRpb24gdGhp cykuICovCisrCWlmICgoIWljdiAmJiBDUllQVE9fbWVtY21wKGFpdiwgZGVmYXVsdF9haXYsIDQp KQorKwkJfHwgKGljdiAmJiBDUllQVE9fbWVtY21wKGFpdiwgaWN2LCA0KSkpCisrCQl7CisrCQlP UEVOU1NMX2NsZWFuc2Uob3V0LCBpbmxlbik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJLyog Q2hlY2sgdGhhdCA4KihuLTEpIDwgTFNCKDMyLEFJVikgPD0gOCpuLgorKwkgKiBJZiBzbywgbGV0 IHB0ZXh0X2xlbiA9IExTQigzMixBSVYpLiAqLworKworKwlwdGV4dF9sZW4gPSAoYWl2WzRdIDw8 IDI0KSB8IChhaXZbNV0gPDwgMTYpIHwgKGFpdls2XSA8PCA4KSB8IGFpdls3XTsKKysJaWYgKDgq KG4tMSkgPj0gcHRleHRfbGVuIHx8IHB0ZXh0X2xlbiA+IDgqbikKKysJCXsKKysJCU9QRU5TU0xf Y2xlYW5zZShvdXQsIGlubGVuKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwkvKiBDaGVjayB0 aGF0IHRoZSByaWdodG1vc3QgcGFkZGluZ19sZW4gb2N0ZXRzIG9mIHRoZSBvdXRwdXQgZGF0YQor KwkgKiBhcmUgemVyby4gKi8KKysJcGFkZGluZ19sZW4gPSBwYWRkZWRfbGVuIC0gcHRleHRfbGVu OworKwlpZiAoQ1JZUFRPX21lbWNtcChvdXQgKyBwdGV4dF9sZW4sIHplcm9zLCBwYWRkaW5nX2xl bikgIT0gMCkKKysJCXsKKysJCU9QRU5TU0xfY2xlYW5zZShvdXQsIGlubGVuKTsKKysJCXJldHVy biAwOworKwkJfQorKworKwkvKiBTZWN0aW9uIDQuMiBzdGVwIDM6IFJlbW92ZSBwYWRkaW5nICov CisrCXJldHVybiBwdGV4dF9sZW47CisrCX0KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xai1m aXBzLWVjLnBhdGNoIGIvb3BlbnNzbC0xLjAuMWotZmlwcy1lYy5wYXRjaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA4YTlkCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNz bC0xLjAuMWotZmlwcy1lYy5wYXRjaApAQCAtMCwwICsxLDIwMzEgQEAKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9lY2RoL2VjZGguaC5maXBzLWVjIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9lY2RoL2VjZGguaAorLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lY2RoL2VjZGguaC5maXBz LWVjCTIwMTQtMTAtMTYgMTM6MjU6MjAuMjQ4MDk4MzA4ICswMjAwCisrKysgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2VjZGgvZWNkaC5oCTIwMTQtMTAtMTYgMTM6MjU6MjAuNzMwMTA5MTkwICswMjAw CitAQCAtODUsNiArODUsOCBAQAorIGV4dGVybiAiQyIgeworICNlbmRpZgorIAorKyNkZWZpbmUg RUNfRkxBR19DT0ZBQ1RPUl9FQ0RICTB4MTAwMAorKworIGNvbnN0IEVDREhfTUVUSE9EICpFQ0RI X09wZW5TU0wodm9pZCk7CisgCisgdm9pZAkgIEVDREhfc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0 IEVDREhfTUVUSE9EICopOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjZGgvZWNk aHRlc3QuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lY2RoL2VjZGh0ZXN0LmMKKy0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNkaC9lY2RodGVzdC5jLmZpcHMtZWMJMjAxNC0xMC0x NSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNk aC9lY2RodGVzdC5jCTIwMTQtMTAtMTYgMTM6MjU6MjAuNzMwMTA5MTkwICswMjAwCitAQCAtMzIz LDggKzMyMywxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlpZiAoKGN0 eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAorIAkvKiBOSVNUIFBSSU1FIENV UlZFUyBURVNUUyAqLworKyNpZiAwCisgCWlmICghdGVzdF9lY2RoX2N1cnZlKE5JRF9YOV82Ml9w cmltZTE5MnYxLCAiTklTVCBQcmltZS1DdXJ2ZSBQLTE5MiIsIGN0eCwgb3V0KSkgZ290byBlcnI7 CisgCWlmICghdGVzdF9lY2RoX2N1cnZlKE5JRF9zZWNwMjI0cjEsICJOSVNUIFByaW1lLUN1cnZl IFAtMjI0IiwgY3R4LCBvdXQpKSBnb3RvIGVycjsKKysjZW5kaWYKKyAJaWYgKCF0ZXN0X2VjZGhf Y3VydmUoTklEX1g5XzYyX3ByaW1lMjU2djEsICJOSVNUIFByaW1lLUN1cnZlIFAtMjU2IiwgY3R4 LCBvdXQpKSBnb3RvIGVycjsKKyAJaWYgKCF0ZXN0X2VjZGhfY3VydmUoTklEX3NlY3AzODRyMSwg Ik5JU1QgUHJpbWUtQ3VydmUgUC0zODQiLCBjdHgsIG91dCkpIGdvdG8gZXJyOworIAlpZiAoIXRl c3RfZWNkaF9jdXJ2ZShOSURfc2VjcDUyMXIxLCAiTklTVCBQcmltZS1DdXJ2ZSBQLTUyMSIsIGN0 eCwgb3V0KSkgZ290byBlcnI7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNkaC9l Y2hfbGliLmMuZmlwcy1lYyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNkaC9lY2hfbGliLmMKKy0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNkaC9lY2hfbGliLmMuZmlwcy1lYwkyMDE0LTEwLTE1 IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lY2Ro L2VjaF9saWIuYwkyMDE0LTEwLTE2IDEzOjI1OjIwLjczMDEwOTE5MCArMDIwMAorQEAgLTk0LDE0 ICs5NCw3IEBAIGNvbnN0IEVDREhfTUVUSE9EICpFQ0RIX2dldF9kZWZhdWx0X21ldGgKKyAJewor IAlpZighZGVmYXVsdF9FQ0RIX21ldGhvZCkgCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJldHVybiBGSVBTX2VjZGhfb3BlbnNzbCgpOworLQkJ ZWxzZQorLQkJCXJldHVybiBFQ0RIX09wZW5TU0woKTsKKy0jZWxzZQorIAkJZGVmYXVsdF9FQ0RI X21ldGhvZCA9IEVDREhfT3BlblNTTCgpOworLSNlbmRpZgorIAkJfQorIAlyZXR1cm4gZGVmYXVs dF9FQ0RIX21ldGhvZDsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjZGgv ZWNoX29zc2wuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lY2RoL2VjaF9vc3NsLmMK Ky0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNkaC9lY2hfb3NzbC5jLmZpcHMtZWMJMjAxNC0x MC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8v ZWNkaC9lY2hfb3NzbC5jCTIwMTQtMTAtMTYgMTM6MjU6MjAuNzMwMTA5MTkwICswMjAwCitAQCAt NzksNiArNzksMTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmpfbWFjLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorKworIHN0YXRpYyBpbnQgZWNkaF9jb21wdXRlX2tleSh2b2lk ICpvdXQsIHNpemVfdCBsZW4sIGNvbnN0IEVDX1BPSU5UICpwdWJfa2V5LAorIAlFQ19LRVkgKmVj ZGgsIAorIAl2b2lkICooKktERikoY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgdm9pZCAq b3V0LCBzaXplX3QgKm91dGxlbikpOworQEAgLTkwLDcgKzk0LDcgQEAgc3RhdGljIEVDREhfTUVU SE9EIG9wZW5zc2xfZWNkaF9tZXRoID0geworIAlOVUxMLCAvKiBpbml0ICAgICAqLworIAlOVUxM LCAvKiBmaW5pc2ggICAqLworICNlbmRpZgorLQkwLCAgICAvKiBmbGFncyAgICAqLworKwlFQ0RI X0ZMQUdfRklQU19NRVRIT0QsICAgIC8qIGZsYWdzICAgICovCisgCU5VTEwgIC8qIGFwcF9kYXRh ICovCisgfTsKKyAKK0BAIC0xMTgsNiArMTIyLDE0IEBAIHN0YXRpYyBpbnQgZWNkaF9jb21wdXRl X2tleSh2b2lkICpvdXQsIHMKKyAJc2l6ZV90IGJ1ZmxlbiwgbGVuOworIAl1bnNpZ25lZCBjaGFy ICpidWY9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZLEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gLTE7CisrCQl9CisrI2VuZGlmCisr CisgCWlmIChvdXRsZW4gPiBJTlRfTUFYKQorIAkJeworIAkJRUNESGVycihFQ0RIX0ZfRUNESF9D T01QVVRFX0tFWSxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7IC8qIHNvcnQgb2YsIGFueXdheSAqLwor QEAgLTEzNyw2ICsxNDksMTggQEAgc3RhdGljIGludCBlY2RoX2NvbXB1dGVfa2V5KHZvaWQgKm91 dCwgcworIAkJfQorIAorIAlncm91cCA9IEVDX0tFWV9nZXQwX2dyb3VwKGVjZGgpOworKworKwlp ZiAoRUNfS0VZX2dldF9mbGFncyhlY2RoKSAmIEVDX0ZMQUdfQ09GQUNUT1JfRUNESCkKKysJCXsK KysJCWlmICghRUNfR1JPVVBfZ2V0X2NvZmFjdG9yKGdyb3VwLCB4LCBjdHgpIHx8CisrCQkJIUJO X211bCh4LCB4LCBwcml2X2tleSwgY3R4KSkKKysJCQl7CisrCQkJRUNESGVycihFQ0RIX0ZfRUNE SF9DT01QVVRFX0tFWSwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKwkJCWdvdG8gZXJyOworKwkJ CX0KKysJCXByaXZfa2V5ID0geDsKKysJCX0KKysKKyAJaWYgKCh0bXA9RUNfUE9JTlRfbmV3KGdy b3VwKSkgPT0gTlVMTCkKKyAJCXsKKyAJCUVDREhlcnIoRUNESF9GX0VDREhfQ09NUFVURV9LRVks RVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Vj ZHNhL2VjZHNhdGVzdC5jLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjZHNhL2VjZHNh dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjZHNhL2VjZHNhdGVzdC5jLmZpcHMt ZWMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZWNkc2EvZWNkc2F0ZXN0LmMJMjAxNC0xMC0xNiAxMzoyNToyMC43MzExMDkyMTIg KzAyMDAKK0BAIC0xMzgsMTEgKzEzOCwxNCBAQCBpbnQgcmVzdG9yZV9yYW5kKHZvaWQpCisgCX0K KyAKKyBzdGF0aWMgaW50IGZieXRlc19jb3VudGVyID0gMDsKKy1zdGF0aWMgY29uc3QgY2hhciAq bnVtYmVyc1s4XSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqbnVtYmVyc1sxMF0gPSB7CisrCSI2 NTEwNTY3NzA5MDYwMTUwNzYwNTY4MTA3NjM0NTYzNTg1NjcxOTAxMDAxNTY2OTU2MTU2NjU2NTki LAorIAkiNjUxMDU2NzcwOTA2MDE1MDc2MDU2ODEwNzYzNDU2MzU4NTY3MTkwMTAwMTU2Njk1NjE1 NjY1NjU5IiwKKyAJIjYxNDA1MDcwNjcwNjUwMDEwNjMwNjUwNjU1NjU2Njc0MDU1NjAwMDYxNjE1 NTY1NjU2NjU2NTY2NTQiLAorIAkiODc2MzAwMTAxNTA3MTA3NTY3NTAxMDY2MTMwNzYxNjcxMDc4 MzU3MDEwNjcxMDY3NzgxNzc2NzE2NiIKKyAJIjcxNjc2MTc4NzI2NzE3IiwKKysJIjg3NjMwMDEw MTUwNzEwNzU2NzUwMTA2NjEzMDc2MTY3MTA3ODM1NzAxMDY3MTA2Nzc4MTc3NjcxNjYiCisrCSI3 MTY3NjE3ODcyNjcxNyIsCisgCSI3MDAwMDAwMTc1NjkwNTY2NDY2NTU1MDU3ODE3NTcxNTcxMDc1 NzA1MDE1NzU3NzU3MDU3Nzk1NzU1IgorIAkiNTU2NTcxNTY3NTY2NTUiLAorIAkiMTI3NTU1MjE5 MTExMzIxMjMwMDAxMjAzMDQzOTE4NzE0NjE2NDY0NjE0NjY0NjQ2Njc0OTQ5NDc5OSIsCitAQCAt MTU3LDcgKzE2MCw3IEBAIGludCBmYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtKQor IAlpbnQJcmV0OworIAlCSUdOVU0JKnRtcCA9IE5VTEw7CisgCistCWlmIChmYnl0ZXNfY291bnRl ciA+PSA4KQorKwlpZiAoZmJ5dGVzX2NvdW50ZXIgPj0gMTApCisgCQlyZXR1cm4gMDsKKyAJdG1w ID0gQk5fbmV3KCk7CisgCWlmICghdG1wKQorQEAgLTU1MCw3ICs1NTMsOSBAQCBpbnQgbWFpbih2 b2lkKQorIAlSQU5EX3NlZWQocm5kX3NlZWQsIHNpemVvZihybmRfc2VlZCkpOworIAorIAkvKiB0 aGUgdGVzdHMgKi8KKysjaWYgMAorIAlpZiAoIXg5XzYyX3Rlc3RzKG91dCkpICBnb3RvIGVycjsK KysjZW5kaWYKKyAJaWYgKCF0ZXN0X2J1aWx0aW4ob3V0KSkgZ290byBlcnI7CisgCQorIAlyZXQg PSAwOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjZHNhL2Vjc19saWIuYy5maXBz LWVjIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lY2RzYS9lY3NfbGliLmMKKy0tLSBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZWNkc2EvZWNzX2xpYi5jLmZpcHMtZWMJMjAxNC0xMC0xNSAxNDo1MzozOS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNkc2EvZWNzX2xpYi5j CTIwMTQtMTAtMTYgMTM6MjU6MjAuNzMxMTA5MjEyICswMjAwCitAQCAtODEsMTQgKzgxLDcgQEAg Y29uc3QgRUNEU0FfTUVUSE9EICpFQ0RTQV9nZXRfZGVmYXVsdF9tZQorIHsKKyAJaWYoIWRlZmF1 bHRfRUNEU0FfbWV0aG9kKSAKKyAJCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAoRklQ U19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfZWNkc2Ffb3BlbnNzbCgpOworLQkJZWxzZQorLQkJ CXJldHVybiBFQ0RTQV9PcGVuU1NMKCk7CistI2Vsc2UKKyAJCWRlZmF1bHRfRUNEU0FfbWV0aG9k ID0gRUNEU0FfT3BlblNTTCgpOworLSNlbmRpZgorIAkJfQorIAlyZXR1cm4gZGVmYXVsdF9FQ0RT QV9tZXRob2Q7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjZHNhL2Vjc19v c3NsLmMuZmlwcy1lYyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNkc2EvZWNzX29zc2wuYworLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lY2RzYS9lY3Nfb3NzbC5jLmZpcHMtZWMJMjAxNC0xMC0x NSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZWNk c2EvZWNzX29zc2wuYwkyMDE0LTEwLTE2IDEzOjI1OjIwLjczMTEwOTIxMiArMDIwMAorQEAgLTYw LDYgKzYwLDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9vYmpfbWFjLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBFQ0RT QV9TSUcgKmVjZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4s IAorIAkJY29uc3QgQklHTlVNICosIGNvbnN0IEJJR05VTSAqLCBFQ19LRVkgKmVja2V5KTsKK0BA IC03Nyw3ICs4MCw3IEBAIHN0YXRpYyBFQ0RTQV9NRVRIT0Qgb3BlbnNzbF9lY2RzYV9tZXRoID0K KyAJTlVMTCwgLyogaW5pdCAgICAgKi8KKyAJTlVMTCwgLyogZmluaXNoICAgKi8KKyAjZW5kaWYK Ky0JMCwgICAgLyogZmxhZ3MgICAgKi8KKysJRUNEU0FfRkxBR19GSVBTX01FVEhPRCwgICAgLyog ZmxhZ3MgICAgKi8KKyAJTlVMTCAgLyogYXBwX2RhdGEgKi8KKyB9OworIAorQEAgLTIzMSw2ICsy MzQsMTQgQEAgc3RhdGljIEVDRFNBX1NJRyAqZWNkc2FfZG9fc2lnbihjb25zdCB1bgorIAlFQ0RT QV9EQVRBICplY2RzYTsKKyAJY29uc3QgQklHTlVNICpwcml2X2tleTsKKyAKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9FQ0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQly ZXR1cm4gTlVMTDsKKysJCX0KKysjZW5kaWYKKysKKyAJZWNkc2EgICAgPSBlY2RzYV9jaGVjayhl Y2tleSk7CisgCWdyb3VwICAgID0gRUNfS0VZX2dldDBfZ3JvdXAoZWNrZXkpOworIAlwcml2X2tl eSA9IEVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5KGVja2V5KTsKK0BAIC0zNjAsNiArMzcxLDE0IEBA IHN0YXRpYyBpbnQgZWNkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmUKKyAJY29uc3QgRUNfR1JP VVAgKmdyb3VwOworIAljb25zdCBFQ19QT0lOVCAqcHViX2tleTsKKyAKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9FQ0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJl dHVybiAtMTsKKysJCX0KKysjZW5kaWYKKysKKyAJLyogY2hlY2sgaW5wdXQgdmFsdWVzICovCisg CWlmIChlY2tleSA9PSBOVUxMIHx8IChncm91cCA9IEVDX0tFWV9nZXQwX2dyb3VwKGVja2V5KSkg PT0gTlVMTCB8fAorIAkgICAgKHB1Yl9rZXkgPSBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVja2V5 KSkgPT0gTlVMTCB8fCBzaWcgPT0gTlVMTCkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9lYy9lY19rZXkuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lYy9lY19rZXkuYwor LS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lYy9lY19rZXkuYy5maXBzLWVjCTIwMTQtMTAtMTUg MTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjL2Vj X2tleS5jCTIwMTQtMTAtMTYgMTM6MjU6MjAuNzMxMTA5MjEyICswMjAwCitAQCAtNjQsOSArNjQs NiBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSAiZWNfbGNsLmgiCisgI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CistI2lmZGVmIE9QRU5TU0xfRklQUworLSNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKy0jZW5kaWYKKyAKKyBFQ19LRVkgKkVDX0tFWV9uZXcodm9pZCkKKyAJewor QEAgLTIzNCw2ICsyMzEsMzkgQEAgaW50IEVDX0tFWV91cF9yZWYoRUNfS0VZICpyKQorIAlyZXR1 cm4gKChpID4gMSkgPyAxIDogMCk7CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKworK3N0YXRpYyBpbnQgZmlwc19jaGVja19l YyhFQ19LRVkgKmtleSkKKysJeworKwlFVlBfUEtFWSAqcGs7CisrCXVuc2lnbmVkIGNoYXIgdGJz W10gPSAiRUNEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCWludCByZXQgPSAwOworKworKwlp ZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUVWUF9Q S0VZX3NldDFfRUNfS0VZKHBrLCBrZXkpOworKworKwlpZiAoZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKSkKKysJCXJldCA9IDE7Cisr CisrCWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19D SEVDS19FQyxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJZmlwc19zZXRfc2VsZnRl c3RfZmFpbCgpOworKwkJfQorKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJcmV0 dXJuIHJldDsKKysJfQorKworKyNlbmRpZgorKworIGludCBFQ19LRVlfZ2VuZXJhdGVfa2V5KEVD X0tFWSAqZWNrZXkpCisgCXsJCisgCWludAlvayA9IDA7CitAQCAtMjQyLDggKzI3MiwxMSBAQCBp bnQgRUNfS0VZX2dlbmVyYXRlX2tleShFQ19LRVkgKmVja2V5KQorIAlFQ19QT0lOVCAqcHViX2tl eSA9IE5VTEw7CisgCisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkpCist CQlyZXR1cm4gRklQU19lY19rZXlfZ2VuZXJhdGVfa2V5KGVja2V5KTsKKysJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VDX0tFWV9HRU5FUkFURV9L RVksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorICNl bmRpZgorIAorIAlpZiAoIWVja2V5IHx8ICFlY2tleS0+Z3JvdXApCitAQCAtMjg3LDYgKzMyMCwx NSBAQCBpbnQgRUNfS0VZX2dlbmVyYXRlX2tleShFQ19LRVkgKmVja2V5KQorIAllY2tleS0+cHJp dl9rZXkgPSBwcml2X2tleTsKKyAJZWNrZXktPnB1Yl9rZXkgID0gcHViX2tleTsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmKCFmaXBzX2NoZWNrX2VjKGVja2V5KSkKKysJCXsKKysJCWVj a2V5LT5wcml2X2tleSA9IE5VTEw7CisrCQllY2tleS0+cHViX2tleSAgPSBOVUxMOworKwkgICAg CWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlvaz0xOworIAorIGVycjoJCitAQCAtNDI5 LDEwICs0NzEsMTIgQEAgaW50IEVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbgor IAkJCQkJCQkJdHgsIHR5LCBjdHgpKQorIAkJCWdvdG8gZXJyOworIAkJfQorLQkvKiBDaGVjayBp ZiByZXRyaWV2ZWQgY29vcmRpbmF0ZXMgbWF0Y2ggb3JpZ2luYWxzOiBpZiBub3QgdmFsdWVzCist CSAqIGFyZSBvdXQgb2YgcmFuZ2UuCisrCS8qIENoZWNrIGlmIHJldHJpZXZlZCBjb29yZGluYXRl cyBtYXRjaCBvcmlnaW5hbHMgYW5kIGFyZSBsZXNzIHRoYW4KKysJICogZmllbGQgb3JkZXI6IGlm IG5vdCB2YWx1ZXMgYXJlIG91dCBvZiByYW5nZS4KKyAJICovCistCWlmIChCTl9jbXAoeCwgdHgp IHx8IEJOX2NtcCh5LCB0eSkpCisrCWlmIChCTl9jbXAoeCwgdHgpIHx8IEJOX2NtcCh5LCB0eSkK KysJCXx8IChCTl9jbXAoeCwgJmtleS0+Z3JvdXAtPmZpZWxkKSA+PSAwKQorKwkJfHwgKEJOX2Nt cCh5LCAma2V5LT5ncm91cC0+ZmllbGQpID49IDApKQorIAkJeworIAkJRUNlcnIoRUNfRl9FQ19L RVlfU0VUX1BVQkxJQ19LRVlfQUZGSU5FX0NPT1JESU5BVEVTLAorIAkJCUVDX1JfQ09PUkRJTkFU RVNfT1VUX09GX1JBTkdFKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lYy9lY3Bf bW9udC5jLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjL2VjcF9tb250LmMKKy0tLSBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZWMvZWNwX21vbnQuYy5maXBzLWVjCTIwMTQtMTAtMTYgMTM6 MjU6MjAuNzMxMTA5MjEyICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjL2VjcF9t b250LmMJMjAxNC0xMC0xNiAxMzoyNzozNC4xNTYxMjEzNDAgKzAyMDAKK0BAIC02MywxMCArNjMs NiBAQAorIAorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorIAorLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKKy0jaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CistI2VuZGlmCistCisgI2luY2x1ZGUgImVj X2xjbC5oIgorIAorIAorQEAgLTExMSwxMSArMTA3LDYgQEAgY29uc3QgRUNfTUVUSE9EICpFQ19H RnBfbW9udF9tZXRob2Qodm9pZAorIAkJZWNfR0ZwX21vbnRfZmllbGRfZGVjb2RlLAorIAkJZWNf R0ZwX21vbnRfZmllbGRfc2V0X3RvX29uZSB9OworIAorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0J aWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIGZpcHNfZWNfZ2ZwX21vbnRfbWV0aG9kKCk7Cist I2VuZGlmCistCisgCXJldHVybiAmcmV0OworIAl9CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZWMvZWNwX25pc3QuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lYy9l Y3BfbmlzdC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjL2VjcF9uaXN0LmMuZmlwcy1l YwkyMDE0LTEwLTE2IDEzOjI1OjIwLjczMjEwOTIzNSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9lYy9lY3BfbmlzdC5jCTIwMTQtMTAtMTYgMTM6Mjc6NTMuMTYzNTUwNDQxICswMjAw CitAQCAtNjcsMTAgKzY3LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmpfbWFjLmg+CisgI2lu Y2x1ZGUgImVjX2xjbC5oIgorIAorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0jaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CistI2VuZGlmCistCisgY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfbmlzdF9t ZXRob2Qodm9pZCkKKyAJeworIAlzdGF0aWMgY29uc3QgRUNfTUVUSE9EIHJldCA9IHsKK0BAIC0x MTIsMTEgKzEwOCw2IEBAIGNvbnN0IEVDX01FVEhPRCAqRUNfR0ZwX25pc3RfbWV0aG9kKHZvaWQK KyAJCTAgLyogZmllbGRfZGVjb2RlICovLAorIAkJMCAvKiBmaWVsZF9zZXRfdG9fb25lICovIH07 CisgCistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4g Zmlwc19lY19nZnBfbmlzdF9tZXRob2QoKTsKKy0jZW5kaWYKKy0KKyAJcmV0dXJuICZyZXQ7Cisg CX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lYy9lY3Bfc21wbC5jLmZpcHMt ZWMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjL2VjcF9zbXBsLmMKKy0tLSBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZWMvZWNwX3NtcGwuYy5maXBzLWVjCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VjL2VjcF9zbXBsLmMJMjAxNC0x MC0xNiAxMzoyODozOS4zODY1OTM5NDYgKzAyMDAKK0BAIC02NSwxMCArNjUsNiBAQAorICNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3N5bWhhY2tzLmg+CisgCist I2lmZGVmIE9QRU5TU0xfRklQUworLSNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKy0jZW5kaWYK Ky0KKyAjaW5jbHVkZSAiZWNfbGNsLmgiCisgCisgY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfc2lt cGxlX21ldGhvZCh2b2lkKQorQEAgLTExMiwxMSArMTA4LDYgQEAgY29uc3QgRUNfTUVUSE9EICpF Q19HRnBfc2ltcGxlX21ldGhvZCh2bworIAkJMCAvKiBmaWVsZF9kZWNvZGUgKi8sCisgCQkwIC8q IGZpZWxkX3NldF90b19vbmUgKi8gfTsKKyAKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChG SVBTX21vZGUoKSkKKy0JCXJldHVybiBmaXBzX2VjX2dmcF9zaW1wbGVfbWV0aG9kKCk7CistI2Vu ZGlmCistCisgCXJldHVybiAmcmV0OworIAl9CisgCitAQCAtMTg3LDYgKzE3OCwxMiBAQCBpbnQg ZWNfR0ZwX3NpbXBsZV9ncm91cF9zZXRfY3VydmUoRUNfR1JPCisgCQlyZXR1cm4gMDsKKyAJCX0K KyAKKysJaWYgKEJOX251bV9iaXRzKHApIDwgMjU2KQorKwkJeworKwkJRUNlcnIoRUNfRl9FQ19H RlBfU0lNUExFX0dST1VQX1NFVF9DVVJWRSwgRUNfUl9VTlNVUFBPUlRFRF9GSUVMRCk7CisrCQly ZXR1cm4gMDsKKysJCX0KKysKKyAJaWYgKGN0eCA9PSBOVUxMKQorIAkJeworIAkJY3R4ID0gbmV3 X2N0eCA9IEJOX0NUWF9uZXcoKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAv bV9lY2RzYS5jLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9tX2VjZHNhLmMKKy0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fZWNkc2EuYy5maXBzLWVjCTIwMTQtMTAtMTUg MTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9t X2VjZHNhLmMJMjAxNC0xMC0xNiAxMzoyNToyMC43MzIxMDkyMzUgKzAyMDAKK0BAIC0xMTYsNyAr MTE2LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisgCisgI2lmbmRlZiBPUEVOU1NM X05PX1NIQQorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgCisgc3RhdGljIGludCBpbml0KEVWUF9N RF9DVFggKmN0eCkKKyAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK0BAIC0x MzIsNyArMTMxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBlY2RzYV9tZD0KKyAJTklEX2VjZHNh X3dpdGhfU0hBMSwKKyAJTklEX2VjZHNhX3dpdGhfU0hBMSwKKyAJU0hBX0RJR0VTVF9MRU5HVEgs CistCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxF VlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorQEAgLTE0OCw0 ICsxNDcsMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9lY2RzYSh2b2lkKQorIAlyZXR1cm4oJmVjZHNh X21kKTsKKyAJfQorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2VjZGh2cy5jLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2VjZGh2cy5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2VjZGh2cy5jLmZpcHMtZWMJMjAxNC0xMC0xNiAxMzoyNToyMC43MzIxMDkyMzUg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZWNkaHZzLmMJ MjAxNC0xMC0xNiAxMzoyNToyMC43MzIxMDkyMzUgKzAyMDAKK0BAIC0wLDAgKzEsNDk2IEBACisr LyogZmlwcy9lY2RoL2ZpcHNfZWNkaHZzLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0 LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNkZWZp bmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBFQ0RIIHN1 cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lY2RoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytz dGF0aWMgY29uc3QgRVZQX01EICplcGFyc2VfbWQoY2hhciAqbGluZSkKKysJeworKwljaGFyICpw OworKwlpZiAobGluZVswXSAhPSAnWycgfHwgbGluZVsxXSAhPSAnRScpCisrCQlyZXR1cm4gTlVM TDsKKysJcCA9IHN0cmNocihsaW5lLCAnLScpOworKwlpZiAoIXApCisrCQlyZXR1cm4gTlVMTDsK KysJbGluZSA9IHAgKyAxOworKwlwID0gc3RyY2hyKGxpbmUsICddJyk7CisrCWlmICghcCkKKysJ CXJldHVybiBOVUxMOworKwkqcCA9IDA7CisrCXAgPSBsaW5lOworKwl3aGlsZShpc3NwYWNlKCpw KSkKKysJCXArKzsKKysJaWYgKCFzdHJjbXAocCwgIlNIQTEiKSkKKysJCXJldHVybiBFVlBfc2hh MSgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyMjQiKSkKKysJCXJldHVybiBFVlBfc2hh MjI0KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTI1NiIpKQorKwkJcmV0dXJuIEVWUF9z aGEyNTYoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMzg0IikpCisrCQlyZXR1cm4gRVZQ X3NoYTM4NCgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEE1MTIiKSkKKysJCXJldHVybiBF VlBfc2hhNTEyKCk7CisrCWVsc2UKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrc3RhdGljIGlu dCBsb29rdXBfY3VydmUyKGNoYXIgKmNuYW1lKQorKwl7CisrCWNoYXIgKnA7CisrCXAgPSBzdHJj aHIoY25hbWUsICddJyk7CisrCWlmICghcCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiUGFy c2UgZXJyb3I6IG1pc3NpbmcgXVxuIik7CisrCQlyZXR1cm4gTklEX3VuZGVmOworKwkJfQorKwkq cCA9IDA7CisrCisrCWlmICghc3RyY21wKGNuYW1lLCAiQi0xNjMiKSkKKysJCXJldHVybiBOSURf c2VjdDE2M3IyOworKwlpZiAoIXN0cmNtcChjbmFtZSwgIkItMjMzIikpCisrCQlyZXR1cm4gTklE X3NlY3QyMzNyMTsKKysJaWYgKCFzdHJjbXAoY25hbWUsICJCLTI4MyIpKQorKwkJcmV0dXJuIE5J RF9zZWN0MjgzcjE7CisrCWlmICghc3RyY21wKGNuYW1lLCAiQi00MDkiKSkKKysJCXJldHVybiBO SURfc2VjdDQwOXIxOworKwlpZiAoIXN0cmNtcChjbmFtZSwgIkItNTcxIikpCisrCQlyZXR1cm4g TklEX3NlY3Q1NzFyMTsKKysJaWYgKCFzdHJjbXAoY25hbWUsICJLLTE2MyIpKQorKwkJcmV0dXJu IE5JRF9zZWN0MTYzazE7CisrCWlmICghc3RyY21wKGNuYW1lLCAiSy0yMzMiKSkKKysJCXJldHVy biBOSURfc2VjdDIzM2sxOworKwlpZiAoIXN0cmNtcChjbmFtZSwgIkstMjgzIikpCisrCQlyZXR1 cm4gTklEX3NlY3QyODNrMTsKKysJaWYgKCFzdHJjbXAoY25hbWUsICJLLTQwOSIpKQorKwkJcmV0 dXJuIE5JRF9zZWN0NDA5azE7CisrCWlmICghc3RyY21wKGNuYW1lLCAiSy01NzEiKSkKKysJCXJl dHVybiBOSURfc2VjdDU3MWsxOworKwlpZiAoIXN0cmNtcChjbmFtZSwgIlAtMTkyIikpCisrCQly ZXR1cm4gTklEX1g5XzYyX3ByaW1lMTkydjE7CisrCWlmICghc3RyY21wKGNuYW1lLCAiUC0yMjQi KSkKKysJCXJldHVybiBOSURfc2VjcDIyNHIxOworKwlpZiAoIXN0cmNtcChjbmFtZSwgIlAtMjU2 IikpCisrCQlyZXR1cm4gTklEX1g5XzYyX3ByaW1lMjU2djE7CisrCWlmICghc3RyY21wKGNuYW1l LCAiUC0zODQiKSkKKysJCXJldHVybiBOSURfc2VjcDM4NHIxOworKwlpZiAoIXN0cmNtcChjbmFt ZSwgIlAtNTIxIikpCisrCQlyZXR1cm4gTklEX3NlY3A1MjFyMTsKKysKKysJZnByaW50ZihzdGRl cnIsICJVbmtub3duIEN1cnZlIG5hbWUgJXNcbiIsIGNuYW1lKTsKKysJcmV0dXJuIE5JRF91bmRl ZjsKKysJfQorKworK3N0YXRpYyBpbnQgbG9va3VwX2N1cnZlKGNoYXIgKmNuYW1lKQorKwl7Cisr CWNoYXIgKnA7CisrCXAgPSBzdHJjaHIoY25hbWUsICc6Jyk7CisrCWlmICghcCkKKysJCXsKKysJ CWZwcmludGYoc3RkZXJyLCAiUGFyc2UgZXJyb3I6IG1pc3NpbmcgOlxuIik7CisrCQlyZXR1cm4g TklEX3VuZGVmOworKwkJfQorKwljbmFtZSA9IHAgKyAxOworKwl3aGlsZShpc3NwYWNlKCpjbmFt ZSkpCisrCQljbmFtZSsrOworKwlyZXR1cm4gbG9va3VwX2N1cnZlMihjbmFtZSk7CisrCX0KKysK KytzdGF0aWMgRUNfUE9JTlQgKm1ha2VfcGVlcihFQ19HUk9VUCAqZ3JvdXAsIEJJR05VTSAqeCwg QklHTlVNICp5KQorKwl7CisrCUVDX1BPSU5UICpwZWVyOworKwlpbnQgcnY7CisrCUJOX0NUWCAq YzsKKysJcGVlciA9IEVDX1BPSU5UX25ldyhncm91cCk7CisrCWlmICghcGVlcikKKysJCXJldHVy biBOVUxMOworKwljID0gQk5fQ1RYX25ldygpOworKwlpZiAoRUNfTUVUSE9EX2dldF9maWVsZF90 eXBlKEVDX0dST1VQX21ldGhvZF9vZihncm91cCkpCisrCQk9PSBOSURfWDlfNjJfcHJpbWVfZmll bGQpCisrCQlydiA9IEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBw ZWVyLCB4LCB5LCBjKTsKKysJZWxzZQorKyNpZmRlZiBPUEVOU1NMX05PX0VDMk0KKysJCXsKKysJ CWZwcmludGYoc3RkZXJyLCAiRVJST1I6IEdGMm0gbm90IHN1cHBvcnRlZFxuIik7CisrCQlleGl0 KDEpOworKwkJfQorKyNlbHNlCisrCQlydiA9IEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0 ZXNfR0YybShncm91cCwgcGVlciwgeCwgeSwgYyk7CisrI2VuZGlmCisrCisrCUJOX0NUWF9mcmVl KGMpOworKwlpZiAocnYpCisrCQlyZXR1cm4gcGVlcjsKKysJRUNfUE9JTlRfZnJlZShwZWVyKTsK KysJcmV0dXJuIE5VTEw7CisrCX0KKysKKytzdGF0aWMgaW50IGVjX3ByaW50X2tleShGSUxFICpv dXQsIEVDX0tFWSAqa2V5LCBpbnQgYWRkX2UsIGludCBleG91dCkKKysJeworKwljb25zdCBFQ19Q T0lOVCAqcHQ7CisrCWNvbnN0IEVDX0dST1VQICpncnA7CisrCWNvbnN0IEVDX01FVEhPRCAqbWV0 aDsKKysJaW50IHJ2OworKwlCSUdOVU0gKnR4LCAqdHk7CisrCWNvbnN0IEJJR05VTSAqZCA9IE5V TEw7CisrCUJOX0NUWCAqY3R4OworKwljdHggPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4KQor KwkJcmV0dXJuIDA7CisrCXR4ID0gQk5fQ1RYX2dldChjdHgpOworKwl0eSA9IEJOX0NUWF9nZXQo Y3R4KTsKKysJaWYgKCF0eCB8fCAhdHkpCisrCQlyZXR1cm4gMDsKKysJZ3JwID0gRUNfS0VZX2dl dDBfZ3JvdXAoa2V5KTsKKysJcHQgPSBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGtleSk7CisrCWlm IChleG91dCkKKysJCWQgPSBFQ19LRVlfZ2V0MF9wcml2YXRlX2tleShrZXkpOworKwltZXRoID0g RUNfR1JPVVBfbWV0aG9kX29mKGdycCk7CisrCWlmIChFQ19NRVRIT0RfZ2V0X2ZpZWxkX3R5cGUo bWV0aCkgPT0gTklEX1g5XzYyX3ByaW1lX2ZpZWxkKQorKwkJcnYgPSBFQ19QT0lOVF9nZXRfYWZm aW5lX2Nvb3JkaW5hdGVzX0dGcChncnAsIHB0LCB0eCwgdHksIGN0eCk7CisrCWVsc2UKKysjaWZk ZWYgT1BFTlNTTF9OT19FQzJNCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBHRjJt IG5vdCBzdXBwb3J0ZWRcbiIpOworKwkJZXhpdCgxKTsKKysJCX0KKysjZWxzZQorKwkJcnYgPSBF Q19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oZ3JwLCBwdCwgdHgsIHR5LCBjdHgp OworKyNlbmRpZgorKworKwlpZiAoYWRkX2UpCisrCQl7CisrCQlkb19ibl9wcmludF9uYW1lKG91 dCwgIlFlSVVUeCIsIHR4KTsKKysJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiUWVJVVR5IiwgdHkp OworKwkJaWYgKGQpCisrCQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJRZUlVVGQiLCBkKTsKKysJ CX0KKysJZWxzZQorKwkJeworKwkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJRSVVUeCIsIHR4KTsK KysJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiUUlVVHkiLCB0eSk7CisrCQlpZiAoZCkKKysJCQlk b19ibl9wcmludF9uYW1lKG91dCwgIlFJVVRkIiwgZCk7CisrCQl9CisrCisrCUJOX0NUWF9mcmVl KGN0eCk7CisrCisrCXJldHVybiBydjsKKysKKysJfQorKworK3N0YXRpYyB2b2lkIGVjX291dHB1 dF9aaGFzaChGSUxFICpvdXQsIGludCBleG91dCwgRUNfR1JPVVAgKmdyb3VwLAorKwkJCUJJR05V TSAqaXgsIEJJR05VTSAqaXksIEJJR05VTSAqaWQsIEJJR05VTSAqY3gsCisrCQkJQklHTlVNICpj eSwgY29uc3QgRVZQX01EICptZCwKKysJCQkJdW5zaWduZWQgY2hhciAqcmhhc2gsIHNpemVfdCBy aGFzaGxlbikKKysJeworKwlFQ19LRVkgKmVjID0gTlVMTDsKKysJRUNfUE9JTlQgKnBlZXJrZXkg PSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpaOworKwl1bnNpZ25lZCBjaGFyIGNoYXNoW0VWUF9N QVhfTURfU0laRV07CisrCWludCBabGVuOworKwllYyA9IEVDX0tFWV9uZXcoKTsKKysJRUNfS0VZ X3NldF9mbGFncyhlYywgRUNfRkxBR19DT0ZBQ1RPUl9FQ0RIKTsKKysJRUNfS0VZX3NldF9ncm91 cChlYywgZ3JvdXApOworKwlwZWVya2V5ID0gbWFrZV9wZWVyKGdyb3VwLCBjeCwgY3kpOworKwlp ZiAocmhhc2ggPT0gTlVMTCkKKysJCXsKKysJCWlmIChtZCkKKysJCQlyaGFzaGxlbiA9IE1fRVZQ X01EX3NpemUobWQpOworKwkJRUNfS0VZX2dlbmVyYXRlX2tleShlYyk7CisrCQllY19wcmludF9r ZXkob3V0LCBlYywgbWQgPyAxIDogMCwgZXhvdXQpOworKwkJfQorKwllbHNlCisrCQl7CisrCQlF Q19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3JkaW5hdGVzKGVjLCBpeCwgaXkpOworKwkJ RUNfS0VZX3NldF9wcml2YXRlX2tleShlYywgaWQpOworKwkJfQorKwlabGVuID0gKEVDX0dST1VQ X2dldF9kZWdyZWUoZ3JvdXApICsgNykvODsKKysJWiA9IE9QRU5TU0xfbWFsbG9jKFpsZW4pOwor KwlpZiAoIVopCisrCQlleGl0KDEpOworKwlFQ0RIX2NvbXB1dGVfa2V5KFosIFpsZW4sIHBlZXJr ZXksIGVjLCAwKTsKKysJaWYgKG1kKQorKwkJeworKwkJaWYgKGV4b3V0KQorKwkJCU91dHB1dFZh bHVlKCJaIiwgWiwgWmxlbiwgb3V0LCAwKTsKKysJCUZJUFNfZGlnZXN0KFosIFpsZW4sIGNoYXNo LCBOVUxMLCBtZCk7CisrCQlPdXRwdXRWYWx1ZShyaGFzaCA/ICJJVVRIYXNoWloiIDogIkhhc2ha WiIsCisrCQkJCQkJY2hhc2gsIHJoYXNobGVuLCBvdXQsIDApOworKwkJaWYgKHJoYXNoKQorKwkJ CXsKKysJCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9ICVzXG4iLAorKwkJCQltZW1jbXAoY2hhc2gs IHJoYXNoLCByaGFzaGxlbikgPyAiRiIgOiAiUCIpOworKwkJCX0KKysJCX0KKysJZWxzZQorKwkJ T3V0cHV0VmFsdWUoIlpJVVQiLCBaLCBabGVuLCBvdXQsIDApOworKwlPUEVOU1NMX2NsZWFuc2Uo WiwgWmxlbik7CisrCU9QRU5TU0xfZnJlZShaKTsKKysJRUNfS0VZX2ZyZWUoZWMpOworKwlFQ19Q T0lOVF9mcmVlKHBlZXJrZXkpOworKwl9CisrCQkKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBm aXBzX2VjZGh2c19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZWxzZQorK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwljaGFyICoqYXJncyA9IGFy Z3YgKyAxOworKwlpbnQgYXJnbiA9IGFyZ2MgLSAxOworKwlGSUxFICppbiwgKm91dDsKKysJY2hh ciBidWZbMjA0OF0sIGxidWZbMjA0OF07CisrCXVuc2lnbmVkIGNoYXIgKnJoYXNoID0gTlVMTDsK KysJbG9uZyByaGFzaGxlbjsKKysJQklHTlVNICpjeCA9IE5VTEwsICpjeSA9IE5VTEw7CisrCUJJ R05VTSAqaWQgPSBOVUxMLCAqaXggPSBOVUxMLCAqaXkgPSBOVUxMOworKwljb25zdCBFVlBfTUQg Km1kID0gTlVMTDsKKysJRUNfR1JPVVAgKmdyb3VwID0gTlVMTDsKKysJY2hhciAqa2V5d29yZCA9 IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisrCWludCBkb192ZXJpZnkgPSAtMSwgZXhvdXQgPSAwOwor KwlpbnQgcnYgPSAxOworKworKwlpbnQgY3VydmVfbmlkc1s1XSA9IHswLDAsMCwwLDB9OworKwlp bnQgcGFyYW1fc2V0ID0gLTE7CisrCisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCisrCWlmIChh cmduICYmICFzdHJjbXAoKmFyZ3MsICJlY2RodmVyIikpCisrCQl7CisrCQlkb192ZXJpZnkgPSAx OworKwkJYXJncysrOworKwkJYXJnbi0tOworKwkJfQorKwllbHNlIGlmIChhcmduICYmICFzdHJj bXAoKmFyZ3MsICJlY2RoZ2VuIikpCisrCQl7CisrCQlkb192ZXJpZnkgPSAwOworKwkJYXJncysr OworKwkJYXJnbi0tOworKwkJfQorKworKwlpZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAiLWV4 b3V0IikpCisrCQl7CisrCQlleG91dCA9IDE7CisrCQlhcmdzKys7CisrCQlhcmduLS07CisrCQl9 CisrCisrCWlmIChkb192ZXJpZnkgPT0gLTEpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiJXMg W2VjZGh2ZXJ8ZWNkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7 CisrCQlleGl0KDEpOworKwkJfQorKworKwlpZiAoYXJnbiA9PSAyKQorKwkJeworKwkJaW4gPSBm b3BlbigqYXJncywgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysJ CW91dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7CisrCQkJZnBy aW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEp OworKwkJCX0KKysJCX0KKysJZWxzZSBpZiAoYXJnbiA9PSAwKQorKwkJeworKwkJaW4gPSBzdGRp bjsKKysJCW91dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRl cnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlsw XSk7CisrCQlleGl0KDEpOworKwkJfQorKworKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVm KSwgaW4pICE9IE5VTEwpCisrCQl7CisrCQlmcHV0cyhidWYsIG91dCk7CisrCQlpZiAoYnVmWzBd ID09ICdbJyAmJiBidWZbMV0gPT0gJ0UnKQorKwkJCXsKKysJCQlpbnQgYyA9IGJ1ZlsyXTsKKysJ CQlpZiAoYyA8ICdBJyB8fCBjID4gJ0UnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCXBh cmFtX3NldCA9IGMgLSAnQSc7CisrCQkJLyogSWYganVzdCBbRT9dIHRoZW4gaW5pdGlhbCBwYXJh bXNldCAqLworKwkJCWlmIChidWZbM10gPT0gJ10nKQorKwkJCQljb250aW51ZTsKKysJCQlpZiAo Z3JvdXApCisrCQkJCUVDX0dST1VQX2ZyZWUoZ3JvdXApOworKwkJCWdyb3VwID0gRUNfR1JPVVBf bmV3X2J5X2N1cnZlX25hbWUoY3VydmVfbmlkc1tjIC0gJ0EnXSk7CisrCQkJfQorKwkJaWYgKHN0 cmxlbihidWYpID4gMTAgJiYgIXN0cm5jbXAoYnVmLCAiW0N1cnZlIiwgNikpCisrCQkJeworKwkJ CWludCBuaWQ7CisrCQkJaWYgKHBhcmFtX3NldCA9PSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQluaWQgPSBsb29rdXBfY3VydmUoYnVmKTsKKysJCQlpZiAobmlkID09IE5JRF91bmRl ZikKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQljdXJ2ZV9uaWRzW3BhcmFtX3NldF0gPSBu aWQ7CisrCQkJfQorKworKwkJaWYgKHN0cmxlbihidWYpID4gNCAmJiBidWZbMF0gPT0gJ1snICYm IGJ1ZlsyXSA9PSAnLScpCisrCQkJeworKwkJCWludCBuaWQgPSBsb29rdXBfY3VydmUyKGJ1ZiAr IDEpOworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCWlmIChncm91cCkKKysJCQkJRUNfR1JPVVBfZnJlZShncm91cCk7CisrCQkJZ3JvdXAgPSBF Q19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShuaWQpOworKwkJCWlmICghZ3JvdXApCisrCQkJCXsK KysJCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5zdXBwb3J0ZWQgY3VydmUgJXNcbiIsIGJ1 ZiArIDEpOworKwkJCQlyZXR1cm4gMTsKKysJCQkJfQorKwkJCX0KKysKKysJCWlmIChzdHJsZW4o YnVmKSA+IDYgJiYgIXN0cm5jbXAoYnVmLCAiW0UiLCAyKSkKKysJCQl7CisrCQkJbWQgPSBlcGFy c2VfbWQoYnVmKTsKKysJCQlpZiAobWQgPT0gTlVMTCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJR ZUNBVlN4IikgfHwgIXN0cmNtcChrZXl3b3JkLCAiUUNBVlN4IikpCisrCQkJeworKwkJCWlmICgh ZG9faGV4MmJuKCZjeCwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlFlQ0FWU3kiKSB8fCAhc3RyY21wKGtleXdvcmQs ICJRQ0FWU3kiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmN5LCB2YWx1ZSkpCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKGRvX3ZlcmlmeSA9PSAwKQorKwkJCQllY19vdXRw dXRfWmhhc2gob3V0LCBleG91dCwgZ3JvdXAsCisrCQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwKKysJ CQkJCQljeCwgY3ksIG1kLCByaGFzaCwgcmhhc2hsZW4pOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgImRlSVVUIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZpZCwg dmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlFlSVVUeCIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmaXgsIHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJRZUlVVHkiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJml5LCB2YWx1 ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQorKwkJCXsKKysJCQlpZiAoIW1kKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCXJoYXNoID0gaGV4MmJpbl9tKHZhbHVlLCAmcmhhc2hsZW4pOworKwkJ CWlmICghcmhhc2ggfHwgcmhhc2hsZW4gIT0gTV9FVlBfTURfc2l6ZShtZCkpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJZWNfb3V0cHV0X1poYXNoKG91dCwgZXhvdXQsIGdyb3VwLCBpeCwg aXksIGlkLCBjeCwgY3ksCisrCQkJCQltZCwgcmhhc2gsIHJoYXNobGVuKTsKKysJCQl9CisrCQl9 CisrCXJ2ID0gMDsKKysJcGFyc2VfZXJyb3I6CisrCWlmIChpZCkKKysJCUJOX2ZyZWUoaWQpOwor KwlpZiAoaXgpCisrCQlCTl9mcmVlKGl4KTsKKysJaWYgKGl5KQorKwkJQk5fZnJlZShpeSk7Cisr CWlmIChjeCkKKysJCUJOX2ZyZWUoY3gpOworKwlpZiAoY3kpCisrCQlCTl9mcmVlKGN5KTsKKysJ aWYgKGdyb3VwKQorKwkJRUNfR1JPVVBfZnJlZShncm91cCk7CisrCWlmIChpbiAmJiBpbiAhPSBz dGRpbikKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKKysJCWZj bG9zZShvdXQpOworKwlpZiAocnYpCisrCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIFBhcnNpbmcg cmVxdWVzdCBmaWxlXG4iKTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZWNkc2F2cy5jLmZpcHMtZWMg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2VjZHNhdnMuYworLS0tIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19lY2RzYXZzLmMuZmlwcy1lYwkyMDE0LTEw LTE2IDEzOjI1OjIwLjczMzEwOTI1NyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2NhdnMvZmlwc19lY2RzYXZzLmMJMjAxNC0xMC0xNiAxMzoyNToyMC43MzMxMDkyNTcgKzAy MDAKK0BAIC0wLDAgKzEsNTMzIEBACisrLyogZmlwcy9lY2RzYS9maXBzX2VjZHNhdnMuYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3Bl bnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZm5kZWYgT1BF TlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAg cHJpbnRmKCJObyBGSVBTIEVDRFNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQor KyNlbHNlCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZWNkc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVk ZSAiZmlwc191dGwuaCIKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisrCisrCisr c3RhdGljIGludCBlbG9va3VwX2N1cnZlKGNoYXIgKmluLCBjaGFyICpjdXJ2ZV9uYW1lLCBjb25z dCBFVlBfTUQgKipwbWQpCisrCXsKKysJY2hhciAqY25hbWUsICpwOworKwkvKiBDb3B5IGJ1ZmZl ciBhcyB3ZSB3aWxsIGNoYW5nZSBpdCAqLworKwlzdHJjcHkoY3VydmVfbmFtZSwgaW4pOworKwlj bmFtZSA9IGN1cnZlX25hbWUgKyAxOworKwlwID0gc3RyY2hyKGNuYW1lLCAnXScpOworKwlpZiAo IXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIGVycm9yOiBtaXNzaW5nIF1cbiIp OworKwkJcmV0dXJuIE5JRF91bmRlZjsKKysJCX0KKysJKnAgPSAwOworKwlwID0gc3RyY2hyKGNu YW1lLCAnLCcpOworKwlpZiAocCkKKysJCXsKKysJCWlmICghcG1kKQorKwkJCXsKKysJCQlmcHJp bnRmKHN0ZGVyciwgIlBhcnNlIGVycm9yOiB1bmV4cGVjdGVkIGRpZ2VzdFxuIik7CisrCQkJcmV0 dXJuIE5JRF91bmRlZjsKKysJCQl9CisrCQkqcCA9IDA7CisrCQlwKys7CisrCisrCQlpZiAoIXN0 cmNtcChwLCAiU0hBLTEiKSkKKysJCQkqcG1kID0gRVZQX3NoYTEoKTsKKysJCWVsc2UgaWYgKCFz dHJjbXAocCwgIlNIQS0yMjQiKSkKKysJCQkqcG1kID0gRVZQX3NoYTIyNCgpOworKwkJZWxzZSBp ZiAoIXN0cmNtcChwLCAiU0hBLTI1NiIpKQorKwkJCSpwbWQgPSBFVlBfc2hhMjU2KCk7CisrCQll bHNlIGlmICghc3RyY21wKHAsICJTSEEtMzg0IikpCisrCQkJKnBtZCA9IEVWUF9zaGEzODQoKTsK KysJCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQS01MTIiKSkKKysJCQkqcG1kID0gRVZQX3NoYTUx MigpOworKwkJZWxzZQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZGlnZXN0 ICVzXG4iLCBwKTsKKysJCQlyZXR1cm4gTklEX3VuZGVmOworKwkJCX0KKysJCX0KKysJZWxzZSBp ZihwbWQpCisrCQkqcG1kID0gRVZQX3NoYTEoKTsKKysKKysJaWYgKCFzdHJjbXAoY25hbWUsICJC LTE2MyIpKQorKwkJcmV0dXJuIE5JRF9zZWN0MTYzcjI7CisrCWlmICghc3RyY21wKGNuYW1lLCAi Qi0yMzMiKSkKKysJCXJldHVybiBOSURfc2VjdDIzM3IxOworKwlpZiAoIXN0cmNtcChjbmFtZSwg IkItMjgzIikpCisrCQlyZXR1cm4gTklEX3NlY3QyODNyMTsKKysJaWYgKCFzdHJjbXAoY25hbWUs ICJCLTQwOSIpKQorKwkJcmV0dXJuIE5JRF9zZWN0NDA5cjE7CisrCWlmICghc3RyY21wKGNuYW1l LCAiQi01NzEiKSkKKysJCXJldHVybiBOSURfc2VjdDU3MXIxOworKwlpZiAoIXN0cmNtcChjbmFt ZSwgIkstMTYzIikpCisrCQlyZXR1cm4gTklEX3NlY3QxNjNrMTsKKysJaWYgKCFzdHJjbXAoY25h bWUsICJLLTIzMyIpKQorKwkJcmV0dXJuIE5JRF9zZWN0MjMzazE7CisrCWlmICghc3RyY21wKGNu YW1lLCAiSy0yODMiKSkKKysJCXJldHVybiBOSURfc2VjdDI4M2sxOworKwlpZiAoIXN0cmNtcChj bmFtZSwgIkstNDA5IikpCisrCQlyZXR1cm4gTklEX3NlY3Q0MDlrMTsKKysJaWYgKCFzdHJjbXAo Y25hbWUsICJLLTU3MSIpKQorKwkJcmV0dXJuIE5JRF9zZWN0NTcxazE7CisrCWlmICghc3RyY21w KGNuYW1lLCAiUC0xOTIiKSkKKysJCXJldHVybiBOSURfWDlfNjJfcHJpbWUxOTJ2MTsKKysJaWYg KCFzdHJjbXAoY25hbWUsICJQLTIyNCIpKQorKwkJcmV0dXJuIE5JRF9zZWNwMjI0cjE7CisrCWlm ICghc3RyY21wKGNuYW1lLCAiUC0yNTYiKSkKKysJCXJldHVybiBOSURfWDlfNjJfcHJpbWUyNTZ2 MTsKKysJaWYgKCFzdHJjbXAoY25hbWUsICJQLTM4NCIpKQorKwkJcmV0dXJuIE5JRF9zZWNwMzg0 cjE7CisrCWlmICghc3RyY21wKGNuYW1lLCAiUC01MjEiKSkKKysJCXJldHVybiBOSURfc2VjcDUy MXIxOworKworKwlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gQ3VydmUgbmFtZSAlc1xuIiwgY25h bWUpOworKwlyZXR1cm4gTklEX3VuZGVmOworKwl9CisrCisrc3RhdGljIGludCBlY19nZXRfcHVi a2V5KEVDX0tFWSAqa2V5LCBCSUdOVU0gKngsIEJJR05VTSAqeSkKKysJeworKwljb25zdCBFQ19Q T0lOVCAqcHQ7CisrCWNvbnN0IEVDX0dST1VQICpncnA7CisrCWNvbnN0IEVDX01FVEhPRCAqbWV0 aDsKKysJaW50IHJ2OworKwlCTl9DVFggKmN0eDsKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlp ZiAoIWN0eCkKKysJCXJldHVybiAwOworKwlncnAgPSBFQ19LRVlfZ2V0MF9ncm91cChrZXkpOwor KwlwdCA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXkoa2V5KTsKKysJbWV0aCA9IEVDX0dST1VQX21l dGhvZF9vZihncnApOworKwlpZiAoRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKG1ldGgpID09IE5J RF9YOV82Ml9wcmltZV9maWVsZCkKKysJCXJ2ID0gRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGlu YXRlc19HRnAoZ3JwLCBwdCwgeCwgeSwgY3R4KTsKKysJZWxzZQorKyNpZmRlZiBPUEVOU1NMX05P X0VDMk0KKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6IEdGMm0gbm90IHN1cHBvcnRl ZFxuIik7CisrCQlleGl0KDEpOworKwkJfQorKyNlbHNlCisrCQlydiA9IEVDX1BPSU5UX2dldF9h ZmZpbmVfY29vcmRpbmF0ZXNfR0YybShncnAsIHB0LCB4LCB5LCBjdHgpOworKyNlbmRpZgorKwor KwlCTl9DVFhfZnJlZShjdHgpOworKworKwlyZXR1cm4gcnY7CisrCisrCX0KKysKKytzdGF0aWMg aW50IEtleVBhaXIoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJeworKwljaGFyIGJ1ZlsyMDQ4XSwg bGJ1ZlsyMDQ4XTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlpbnQgY3VydmVfbmlkID0g TklEX3VuZGVmOworKwlpbnQgaSwgY291bnQ7CisrCUJJR05VTSAqUXggPSBOVUxMLCAqUXkgPSBO VUxMOworKwljb25zdCBCSUdOVU0gKmQgPSBOVUxMOworKwlFQ19LRVkgKmtleSA9IE5VTEw7Cisr CVF4ID0gQk5fbmV3KCk7CisrCVF5ID0gQk5fbmV3KCk7CisrCXdoaWxlKGZnZXRzKGJ1Ziwgc2l6 ZW9mIGJ1ZiwgaW4pICE9IE5VTEwpCisrCQl7CisrCQlpZiAoKmJ1ZiA9PSAnWycgJiYgYnVmWzJd ID09ICctJykKKysJCQl7CisrCQkJaWYgKGJ1ZlsyXSA9PSAnLScpCisrCQkJY3VydmVfbmlkID0g ZWxvb2t1cF9jdXJ2ZShidWYsIGxidWYsIE5VTEwpOworKwkJCWZwdXRzKGJ1Ziwgb3V0KTsKKysJ CQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwg bGJ1ZiwgYnVmKSkKKysJCQl7CisrCQkJZnB1dHMoYnVmLCBvdXQpOworKwkJCWNvbnRpbnVlOwor KwkJCX0KKysJCWlmICghc3RyY21wKGtleXdvcmQsICJOIikpCisrCQkJeworKwkJCWNvdW50ID0g YXRvaSh2YWx1ZSk7CisrCisrCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisrCQkJCXsK KysKKysJCQkJa2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKGN1cnZlX25pZCk7CisrCQkJ CWlmICghRUNfS0VZX2dlbmVyYXRlX2tleShrZXkpKQorKwkJCQkJeworKwkJCQkJZnByaW50Zihz dGRlcnIsICJFcnJvciBnZW5lcmF0aW5nIGtleVxuIik7CisrCQkJCQlyZXR1cm4gMDsKKysJCQkJ CX0KKysKKysJCQkJaWYgKCFlY19nZXRfcHVia2V5KGtleSwgUXgsIFF5KSkKKysJCQkJCXsKKysJ CQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBwdWJsaWMga2V5XG4iKTsKKysJCQkJ CXJldHVybiAwOworKwkJCQkJfQorKworKwkJCQlkID0gRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXko a2V5KTsKKysKKysJCQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgZCk7CisrCQkJCWRvX2Ju X3ByaW50X25hbWUob3V0LCAiUXgiLCBReCk7CisrCQkJCWRvX2JuX3ByaW50X25hbWUob3V0LCAi UXkiLCBReSk7CisrCQkJCWZwdXRzKFJFU1BfRU9MLCBvdXQpOworKwkJCQlFQ19LRVlfZnJlZShr ZXkpOworKworKwkJCQl9CisrCisrCQkJfQorKworKwkJfQorKwlCTl9mcmVlKFF4KTsKKysJQk5f ZnJlZShReSk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBQS1YoRklMRSAqaW4s IEZJTEUgKm91dCkKKysJeworKworKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKKysJY2hh ciAqa2V5d29yZCwgKnZhbHVlOworKwlpbnQgY3VydmVfbmlkID0gTklEX3VuZGVmOworKwlCSUdO VU0gKlF4ID0gTlVMTCwgKlF5ID0gTlVMTDsKKysJRUNfS0VZICprZXkgPSBOVUxMOworKwl3aGls ZShmZ2V0cyhidWYsIHNpemVvZiBidWYsIGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMoYnVm LCBvdXQpOworKwkJaWYgKCpidWYgPT0gJ1snICYmIGJ1ZlsyXSA9PSAnLScpCisrCQkJeworKwkJ CWN1cnZlX25pZCA9IGVsb29rdXBfY3VydmUoYnVmLCBsYnVmLCBOVUxMKTsKKysJCQlpZiAoY3Vy dmVfbmlkID09IE5JRF91bmRlZikKKysJCQkJcmV0dXJuIDA7CisrCQkJCQorKwkJCX0KKysJCWlm ICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVl OworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlF4IikpCisrCQkJeworKwkJCWlmICghZG9faGV4 MmJuKCZReCwgdmFsdWUpKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBR eCB2YWx1ZVxuIik7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwgIlF5IikpCisrCQkJeworKwkJCWludCBydjsKKysJCQlpZiAoIWRvX2hleDJi bigmUXksIHZhbHVlKSkKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgUXkg dmFsdWVcbiIpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCWtleSA9IEVDX0tFWV9uZXdf YnlfY3VydmVfbmFtZShjdXJ2ZV9uaWQpOworKwkJCW5vX2VyciA9IDE7CisrCQkJcnYgPSBFQ19L RVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3JkaW5hdGVzKGtleSwgUXgsIFF5KTsKKysJCQlu b19lcnIgPSAwOworKwkJCUVDX0tFWV9mcmVlKGtleSk7CisrCQkJZnByaW50ZihvdXQsICJSZXN1 bHQgPSAlcyIgUkVTUF9FT0wsIHJ2ID8gIlAiOiJGIik7CisrCQkJfQorKworKwkJfQorKwlCTl9m cmVlKFF4KTsKKysJQk5fZnJlZShReSk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGlu dCBTaWdHZW4oRklMRSAqaW4sIEZJTEUgKm91dCkKKysJeworKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1 ZlsyMDQ4XTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwl1bnNpZ25lZCBjaGFyICptc2c7 CisrCWludCBjdXJ2ZV9uaWQgPSBOSURfdW5kZWY7CisrCWxvbmcgbWxlbjsKKysJQklHTlVNICpR eCA9IE5VTEwsICpReSA9IE5VTEw7CisrCUVDX0tFWSAqa2V5ID0gTlVMTDsKKysJRUNEU0FfU0lH ICpzaWcgPSBOVUxMOworKwljb25zdCBFVlBfTUQgKmRpZ2VzdCA9IE5VTEw7CisrCVF4ID0gQk5f bmV3KCk7CisrCVF5ID0gQk5fbmV3KCk7CisrCXdoaWxlKGZnZXRzKGJ1Ziwgc2l6ZW9mIGJ1Ziwg aW4pICE9IE5VTEwpCisrCQl7CisrCQlmcHV0cyhidWYsIG91dCk7CisrCQlpZiAoKmJ1ZiA9PSAn WycpCisrCQkJeworKwkJCWN1cnZlX25pZCA9IGVsb29rdXBfY3VydmUoYnVmLCBsYnVmLCAmZGln ZXN0KTsKKysJCQlpZiAoY3VydmVfbmlkID09IE5JRF91bmRlZikKKysJCQkJcmV0dXJuIDA7Cisr CQkJfQorKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisr CQkJY29udGludWU7CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJ CW1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJm1sZW4pOworKwkJCWlmICghbXNnKQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBNZXNzYWdlXG4iKTsKKysJCQkJcmV0dXJuIDA7 CisrCQkJCX0KKysKKysJCQlrZXkgPSBFQ19LRVlfbmV3X2J5X2N1cnZlX25hbWUoY3VydmVfbmlk KTsKKysJCQlpZiAoIUVDX0tFWV9nZW5lcmF0ZV9rZXkoa2V5KSkKKysJCQkJeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIGdlbmVyYXRpbmcga2V5XG4iKTsKKysJCQkJcmV0dXJuIDA7Cisr CQkJCX0KKysKKysJCQlpZiAoIWVjX2dldF9wdWJrZXkoa2V5LCBReCwgUXkpKQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBwdWJsaWMga2V5XG4iKTsKKysJCQkJ cmV0dXJuIDA7CisrCQkJCX0KKysKKysJICAgIAkJc2lnID0gRklQU19lY2RzYV9zaWduKGtleSwg bXNnLCBtbGVuLCBkaWdlc3QpOworKworKwkJCWlmICghc2lnKQorKwkJCQl7CisrCQkJCWZwcmlu dGYoc3RkZXJyLCAiRXJyb3Igc2lnbmluZyBtZXNzYWdlXG4iKTsKKysJCQkJcmV0dXJuIDA7Cisr CQkJCX0KKysKKysJCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlF4IiwgUXgpOworKwkJCWRvX2Ju X3ByaW50X25hbWUob3V0LCAiUXkiLCBReSk7CisrCQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJS Iiwgc2lnLT5yKTsKKysJCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlMiLCBzaWctPnMpOworKwor KwkJCUVDX0tFWV9mcmVlKGtleSk7CisrCQkJT1BFTlNTTF9mcmVlKG1zZyk7CisrCQkJRklQU19l Y2RzYV9zaWdfZnJlZShzaWcpOworKworKwkJCX0KKysKKysJCX0KKysJQk5fZnJlZShReCk7Cisr CUJOX2ZyZWUoUXkpOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgU2lnVmVyKEZJ TEUgKmluLCBGSUxFICpvdXQpCisrCXsKKysJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07Cisr CWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJdW5zaWduZWQgY2hhciAqbXNnID0gTlVMTDsKKysJ aW50IGN1cnZlX25pZCA9IE5JRF91bmRlZjsKKysJbG9uZyBtbGVuOworKwlCSUdOVU0gKlF4ID0g TlVMTCwgKlF5ID0gTlVMTDsKKysJRUNfS0VZICprZXkgPSBOVUxMOworKwlFQ0RTQV9TSUcgc2cs ICpzaWcgPSAmc2c7CisrCWNvbnN0IEVWUF9NRCAqZGlnZXN0ID0gTlVMTDsKKysJc2lnLT5yID0g TlVMTDsKKysJc2lnLT5zID0gTlVMTDsKKysJd2hpbGUoZmdldHMoYnVmLCBzaXplb2YgYnVmLCBp bikgIT0gTlVMTCkKKysJCXsKKysJCWZwdXRzKGJ1Ziwgb3V0KTsKKysJCWlmICgqYnVmID09ICdb JykKKysJCQl7CisrCQkJY3VydmVfbmlkID0gZWxvb2t1cF9jdXJ2ZShidWYsIGxidWYsICZkaWdl c3QpOworKwkJCWlmIChjdXJ2ZV9uaWQgPT0gTklEX3VuZGVmKQorKwkJCQlyZXR1cm4gMDsKKysJ CQl9CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJ CQljb250aW51ZTsKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJ bXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmbWxlbik7CisrCQkJaWYgKCFtc2cpCisrCQkJCXsKKysJ CQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE1lc3NhZ2VcbiIpOworKwkJCQlyZXR1cm4gMDsK KysJCQkJfQorKwkJCX0KKysJCQkKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJReCIpKQorKwkJ CXsKKysJCQlpZiAoIWRvX2hleDJibigmUXgsIHZhbHVlKSkKKysJCQkJeworKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQgUXggdmFsdWVcbiIpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQor KwkJCX0KKysJCWlmICghc3RyY21wKGtleXdvcmQsICJReSIpKQorKwkJCXsKKysJCQlpZiAoIWRv X2hleDJibigmUXksIHZhbHVlKSkKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQgUXkgdmFsdWVcbiIpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCWlmICgh c3RyY21wKGtleXdvcmQsICJSIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZzaWctPnIs IHZhbHVlKSkKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgUiB2YWx1ZVxu Iik7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlMiKSkKKysJCQl7CisrCQkJaW50IHJ2OworKwkJCWlmICghZG9faGV4MmJuKCZzaWctPnMs IHZhbHVlKSkKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgUyB2YWx1ZVxu Iik7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJa2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2 ZV9uYW1lKGN1cnZlX25pZCk7CisrCQkJcnYgPSBFQ19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5l X2Nvb3JkaW5hdGVzKGtleSwgUXgsIFF5KTsKKysKKysJCQlpZiAocnYgIT0gMSkKKysJCQkJewor KwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcgcHVibGljIGtleVxuIik7CisrCQkJ CXJldHVybiAwOworKwkJCQl9CisrCisrCQkJbm9fZXJyID0gMTsKKysJICAgIAkJcnYgPSBGSVBT X2VjZHNhX3ZlcmlmeShrZXksIG1zZywgbWxlbiwgZGlnZXN0LCBzaWcpOworKwkJCUVDX0tFWV9m cmVlKGtleSk7CisrCQkJaWYgKG1zZykKKysJCQkJT1BFTlNTTF9mcmVlKG1zZyk7CisrCQkJbm9f ZXJyID0gMDsKKysKKysJCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9ICVzIiBSRVNQX0VPTCwgcnYg PyAiUCI6IkYiKTsKKysJCQl9CisrCisrCQl9CisrCWlmIChzaWctPnIpCisrCQlCTl9mcmVlKHNp Zy0+cik7CisrCWlmIChzaWctPnMpCisrCQlCTl9mcmVlKHNpZy0+cyk7CisrCWlmIChReCkKKysJ CUJOX2ZyZWUoUXgpOworKwlpZiAoUXkpCisrCQlCTl9mcmVlKFF5KTsKKysJcmV0dXJuIDE7Cisr CX0KKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2VjZHNhdnNfbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCisrI2Vsc2UKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisr I2VuZGlmCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysJY29uc3QgY2hh ciAqY21kID0gYXJndlsxXTsKKysJaW50IHJ2ID0gMDsKKysJZmlwc19hbGd0ZXN0X2luaXQoKTsK KysKKysJaWYgKGFyZ2MgPT0gNCkKKysJCXsKKysJCWluID0gZm9wZW4oYXJndlsyXSwgInIiKTsK KysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBp bnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysJCW91dCA9IGZvcGVuKGFyZ3Zb M10sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJv ciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysJCX0KKysJ ZWxzZSBpZiAoYXJnYyA9PSAyKQorKwkJeworKwkJaW4gPSBzdGRpbjsKKysJCW91dCA9IHN0ZG91 dDsKKysJCX0KKysKKysJaWYgKCFjbWQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgImZpcHNf ZWNkc2F2cyBbS2V5UGFpcnxQS1Z8U2lnR2VufFNpZ1Zlcl1cbiIpOworKwkJcmV0dXJuIDE7Cisr CQl9CisrCWlmICghc3RyY21wKGNtZCwgIktleVBhaXIiKSkKKysJCXJ2ID0gS2V5UGFpcihpbiwg b3V0KTsKKysJZWxzZSBpZiAoIXN0cmNtcChjbWQsICJQS1YiKSkKKysJCXJ2ID0gUEtWKGluLCBv dXQpOworKwllbHNlIGlmICghc3RyY21wKGNtZCwgIlNpZ1ZlciIpKQorKwkJcnYgPSBTaWdWZXIo aW4sIG91dCk7CisrCWVsc2UgaWYgKCFzdHJjbXAoY21kLCAiU2lnR2VuIikpCisrCQlydiA9IFNp Z0dlbihpbiwgb3V0KTsKKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJVbmtub3du IGNvbW1hbmQgJXNcbiIsIGNtZCk7CisrCQlyZXR1cm4gMTsKKysJCX0KKysKKysJaWYgKGFyZ2Mg PT0gNCkKKysJCXsKKysJCWZjbG9zZShpbik7CisrCQlmY2xvc2Uob3V0KTsKKysJCX0KKysKKysJ aWYgKHJ2IDw9IDApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHJ1bm5pbmcgJXNc biIsIGNtZCk7CisrCQlyZXR1cm4gMTsKKysJCX0KKysKKysJcmV0dXJuIDA7CisrCX0KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZWNkaF9zZWxm dGVzdC5jLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19lY2RoX3NlbGZ0 ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2VjZGhfc2VsZnRlc3Qu Yy5maXBzLWVjCTIwMTQtMTAtMTYgMTM6MjU6MjAuNzMzMTA5MjU3ICswMjAwCisrKysgb3BlbnNz bC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19lY2RoX3NlbGZ0ZXN0LmMJMjAxNC0xMC0xNiAxMzoy NToyMC43MzMxMDkyNTcgKzAyMDAKK0BAIC0wLDAgKzEsMjUyIEBACisrLyogZmlwcy9lY2RoL2Zp cHNfZWNkaF9zZWxmdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDExLgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICovCisrCisrI2RlZmlu ZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZWMuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lY2RoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNsdWRlICJmaXBzX2xvY2wu aCIKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwMjU2X3FjYXZzeFtdID0geworKwkw eDUyLDB4YzYsMHhhNSwweDc1LDB4ZjMsMHgwNCwweDk4LDB4YjMsMHgyOSwweDY2LDB4MGMsMHg2 MiwKKysJMHgxOCwweDYwLDB4NTUsMHg0MSwweDU5LDB4ZDQsMHg2MCwweDg1LDB4OTksMHhjMSww eDUxLDB4MTMsCisrCTB4NmYsMHg5NywweDg1LDB4OTMsMHgzMywweDM0LDB4MDcsMHg1MAorK307 Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcDI1Nl9xY2F2c3lbXSA9IHsKKysJMHg2Ziww eDY5LDB4MjQsMHhlYiwweGU5LDB4M2IsMHhhNywweGNjLDB4NDcsMHgxNywweGFhLDB4M2YsCisr CTB4NzAsMHhmYywweDEwLDB4NzMsMHgwYSwweGNkLDB4MjEsMHhlZSwweDI5LDB4MTksMHgxZiww eGFmLAorKwkweGI0LDB4MWMsMHgxZSwweGMyLDB4OGUsMHg5NywweDgxLDB4NmUKKyt9OworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZfcWl1dHhbXSA9IHsKKysJMHg3MSwweDQ2LDB4 ODgsMHgwOCwweDkyLDB4MjEsMHgxYiwweDEwLDB4MjEsMHg3NCwweGZmLDB4MGMsCisrCTB4OTQs MHhkZSwweDM0LDB4N2MsMHg4NiwweDc0LDB4YmUsMHg2NywweDQxLDB4NjgsMHhkNCwweGMxLAor KwkweGU1LDB4NzUsMHg2MywweDljLDB4YTcsMHg0NiwweDkzLDB4NmYKKyt9OworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHAyNTZfcWl1dHlbXSA9IHsKKysJMHgzMywweDQwLDB4YTksMHg2 YSwweGY1LDB4MjAsMHhiNSwweDllLDB4ZmMsMHg2MCwweDFhLDB4YWUsCisrCTB4M2QsMHhmOCww eDIxLDB4ZDIsMHhhNywweGNhLDB4NTIsMHgzNCwweGI5LDB4NWYsMHgyNywweDc1LAorKwkweDZj LDB4ODEsMHhiZSwweDMyLDB4NGQsMHhiYSwweGJiLDB4ZjgKKyt9OworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHAyNTZfcWl1dGRbXSA9IHsKKysJMHgxYSwweDQ4LDB4NTUsMHg2YiwweDEx LDB4YmUsMHg5MiwweGQ0LDB4MWMsMHhkNywweDQ1LDB4YzMsCisrCTB4ODIsMHg4MSwweDUxLDB4 ZjEsMHgyMywweDQwLDB4YjcsMHg4MywweGZkLDB4MDEsMHg2ZCwweGJjLAorKwkweGExLDB4NjYs MHhhZiwweDBhLDB4MDMsMHgyMywweGNkLDB4YzgKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHAyNTZfeml1dFtdID0geworKwkweDc3LDB4MmEsMHgxZSwweDM3LDB4ZWUsMHhlNiww eDUxLDB4MDIsMHg3MSwweDQwLDB4ZjgsMHg2YSwKKysJMHgzNiwweGY4LDB4NjUsMHg2MSwweDJi LDB4MTgsMHg3MSwweDgyLDB4MjMsMHhlNiwweGYyLDB4NzcsCisrCTB4Y2UsMHhlYywweGI4LDB4 NDksMHhjNywweGJmLDB4MzYsMHg0ZgorK307CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsK KysJaW50IGN1cnZlOworKwljb25zdCB1bnNpZ25lZCBjaGFyICp4MTsKKysJc2l6ZV90IHgxbGVu OworKwljb25zdCB1bnNpZ25lZCBjaGFyICp5MTsKKysJc2l6ZV90IHkxbGVuOworKwljb25zdCB1 bnNpZ25lZCBjaGFyICpkMTsKKysJc2l6ZV90IGQxbGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFy ICp4MjsKKysJc2l6ZV90IHgybGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICp5MjsKKysJc2l6 ZV90IHkybGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICp6OworKwlzaXplX3QgemxlbjsKKysJ fSBFQ0RIX1NFTEZURVNUX0RBVEE7CisrCisrI2RlZmluZSBtYWtlX2VjZGhfdGVzdChuaWQsIHBy KSB7IG5pZCwgXAorKwkJCQlwciMjX3FpdXR4LCBzaXplb2YocHIjI19xaXV0eCksIFwKKysJCQkJ cHIjI19xaXV0eSwgc2l6ZW9mKHByIyNfcWl1dHkpLCBcCisrCQkJCXByIyNfcWl1dGQsIHNpemVv ZihwciMjX3FpdXRkKSwgXAorKwkJCQlwciMjX3FjYXZzeCwgc2l6ZW9mKHByIyNfcWNhdnN4KSwg XAorKwkJCQlwciMjX3FjYXZzeSwgc2l6ZW9mKHByIyNfcWNhdnN5KSwgXAorKwkJCQlwciMjX3pp dXQsIHNpemVvZihwciMjX3ppdXQpIH0KKysKKytzdGF0aWMgRUNESF9TRUxGVEVTVF9EQVRBIHRl c3RfZWNkaF9kYXRhW10gPSAKKysJeworKwltYWtlX2VjZGhfdGVzdChOSURfWDlfNjJfcHJpbWUy NTZ2MSwgcDI1NiksCisrCX07CisrCisraW50IEZJUFNfc2VsZnRlc3RfZWNkaCh2b2lkKQorKwl7 CisrCUVDX0tFWSAqZWMxID0gTlVMTCwgKmVjMiA9IE5VTEw7CisrCWNvbnN0IEVDX1BPSU5UICpl Y3AgPSBOVUxMOworKwlCSUdOVU0gKnggPSBOVUxMLCAqeSA9IE5VTEwsICpkID0gTlVMTDsKKysJ dW5zaWduZWQgY2hhciAqenRtcCA9IE5VTEw7CisrCWludCBydiA9IDE7CisrCXNpemVfdCBpOwor KworKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3RfZWNkaF9kYXRhKS9zaXplb2YoRUNESF9T RUxGVEVTVF9EQVRBKTsgaSsrKQorKwkJeworKwkJRUNESF9TRUxGVEVTVF9EQVRBICplY2QgPSB0 ZXN0X2VjZGhfZGF0YSArIGk7CisrCQlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9F Q0RILCBlY2QtPmN1cnZlLCAwKSkKKysJCQljb250aW51ZTsKKysJCXp0bXAgPSBPUEVOU1NMX21h bGxvYyhlY2QtPnpsZW4pOworKworKwkJeCA9IEJOX2JpbjJibihlY2QtPngxLCBlY2QtPngxbGVu LCB4KTsKKysJCXkgPSBCTl9iaW4yYm4oZWNkLT55MSwgZWNkLT55MWxlbiwgeSk7CisrCQlkID0g Qk5fYmluMmJuKGVjZC0+ZDEsIGVjZC0+ZDFsZW4sIGQpOworKworKwkJaWYgKCF4IHx8ICF5IHx8 ICFkIHx8ICF6dG1wKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0K KysKKysJCWVjMSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShlY2QtPmN1cnZlKTsKKysJCWlm ICghZWMxKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCUVD X0tFWV9zZXRfZmxhZ3MoZWMxLCBFQ19GTEFHX0NPRkFDVE9SX0VDREgpOworKworKwkJaWYgKCFF Q19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3JkaW5hdGVzKGVjMSwgeCwgeSkpCisrCQkJ eworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKCFFQ19LRVlf c2V0X3ByaXZhdGVfa2V5KGVjMSwgZCkpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBl cnI7CisrCQkJfQorKworKwkJeCA9IEJOX2JpbjJibihlY2QtPngyLCBlY2QtPngybGVuLCB4KTsK KysJCXkgPSBCTl9iaW4yYm4oZWNkLT55MiwgZWNkLT55MmxlbiwgeSk7CisrCisrCQlpZiAoIXgg fHwgIXkpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJ ZWMyID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKGVjZC0+Y3VydmUpOworKwkJaWYgKCFlYzIp CisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJRUNfS0VZX3Nl dF9mbGFncyhlYzEsIEVDX0ZMQUdfQ09GQUNUT1JfRUNESCk7CisrCisrCQlpZiAoIUVDX0tFWV9z ZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXMoZWMyLCB4LCB5KSkKKysJCQl7CisrCQkJ cnYgPSAtMTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQllY3AgPSBFQ19LRVlfZ2V0MF9w dWJsaWNfa2V5KGVjMik7CisrCQlpZiAoIWVjcCkKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJCQln b3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoIUVDREhfY29tcHV0ZV9rZXkoenRtcCwgZWNkLT56 bGVuLCBlY3AsIGVjMSwgMCkpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7Cisr CQkJfQorKworKwkJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRUNESCwgZWNkLT5j dXJ2ZSwgTlVMTCkpCisrCQkJenRtcFswXSBePSAweDE7CisrCisrCQlpZiAobWVtY21wKHp0bXAs IGVjZC0+eiwgZWNkLT56bGVuKSkKKysJCQl7CisrCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RF U1RfRUNESCwgZWNkLT5jdXJ2ZSwgMCk7CisrCQkJcnYgPSAwOworKwkJCX0KKysJCWVsc2UgaWYg KCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRUNESCwgZWNkLT5jdXJ2ZSwgMCkpCisrCQkJ Z290byBlcnI7CisrCisrCQlFQ19LRVlfZnJlZShlYzEpOworKwkJZWMxID0gTlVMTDsKKysJCUVD X0tFWV9mcmVlKGVjMik7CisrCQllYzIgPSBOVUxMOworKwkJT1BFTlNTTF9mcmVlKHp0bXApOwor KwkJenRtcCA9IE5VTEw7CisrCQl9CisrCisrCWVycjoKKysKKysJaWYgKHgpCisrCQlCTl9jbGVh cl9mcmVlKHgpOworKwlpZiAoeSkKKysJCUJOX2NsZWFyX2ZyZWUoeSk7CisrCWlmIChkKQorKwkJ Qk5fY2xlYXJfZnJlZShkKTsKKysJaWYgKGVjMSkKKysJCUVDX0tFWV9mcmVlKGVjMSk7CisrCWlm IChlYzIpCisrCQlFQ19LRVlfZnJlZShlYzIpOworKwlpZiAoenRtcCkKKysJCU9QRU5TU0xfZnJl ZSh6dG1wKTsKKysKKysJcmV0dXJuIHJ2OworKworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2VjZHNhX3NlbGZ0ZXN0LmMuZmlwcy1lYyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2VjZHNhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2VjZHNhX3NlbGZ0ZXN0LmMuZmlwcy1lYwkyMDE0 LTEwLTE2IDEzOjI1OjIwLjczMzEwOTI1NyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjI1OjIwLjczMzEwOTI1 NyArMDIwMAorQEAgLTAsMCArMSwxNjcgQEAKKysvKiBmaXBzL2VjZHNhL2ZpcHNfZWNkc2Ffc2Vs ZnRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAxMS4KKysgKi8KKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg 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 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9G SVBTQVBJCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZWNkc2Eu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IGNoYXIgUF8yNTZfbmFtZVtd ID0gIkVDRFNBIFAtMjU2IjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBQXzI1Nl9k W10gPSB7CisrCTB4NTEsMHhiZCwweDA2LDB4YTEsMHgxYywweGRhLDB4ZTIsMHgxMiwweDk5LDB4 YzksMHg1MiwweDNmLAorKwkweGVhLDB4YTQsMHhkMiwweGQxLDB4ZjQsMHg3ZiwweGQ0LDB4M2Us MHhiZCwweGY4LDB4ZmMsMHg4NywKKysJMHhkYywweDgyLDB4NTMsMHgyMSwweGVlLDB4YTAsMHhk YywweDY0CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBQXzI1Nl9xeFtdID0gewor KwkweDIzLDB4ODksMHhlMCwweGY0LDB4NjksMHhlMCwweDQ5LDB4ZTUsMHhjNywweGU1LDB4NDAs MHg2ZSwKKysJMHg4ZiwweDI1LDB4ZGQsMHhhZCwweDExLDB4MTYsMHgxNCwweDliLDB4YWIsMHg0 NCwweDA2LDB4MzEsCisrCTB4YmYsMHg1ZSwweGE2LDB4NDQsMHhhYywweDg2LDB4MDAsMHgwNwor K307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgUF8yNTZfcXlbXSA9IHsKKysJMHhiMyww eDA1LDB4MGQsMHhkMCwweGRjLDB4ZjcsMHg0MCwweGU2LDB4ZjksMHhkOCwweDZkLDB4N2IsCisr CTB4NjMsMHhjYSwweDk3LDB4ZTYsMHgxMiwweGY5LDB4ZDQsMHgxOCwweDU5LDB4YmUsMHhiMiww eDVlLAorKwkweDRhLDB4NmEsMHg3NywweDIzLDB4ZjQsMHgxMSwweDlkLDB4ZWIKKyt9OworKwor K3R5cGVkZWYgc3RydWN0IAorKwl7CisrCWludCBjdXJ2ZTsKKysJY29uc3QgY2hhciAqbmFtZTsK KysJY29uc3QgdW5zaWduZWQgY2hhciAqeDsKKysJc2l6ZV90IHhsZW47CisrCWNvbnN0IHVuc2ln bmVkIGNoYXIgKnk7CisrCXNpemVfdCB5bGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpkOwor KwlzaXplX3QgZGxlbjsKKysJfSBFQ19TRUxGVEVTVF9EQVRBOworKworKyNkZWZpbmUgbWFrZV9l Y2RzYV90ZXN0KG5pZCwgcHIpIHsgbmlkLCBwciMjX25hbWUsIFwKKysJCQkJcHIjI19xeCwgc2l6 ZW9mKHByIyNfcXgpLCBcCisrCQkJCXByIyNfcXksIHNpemVvZihwciMjX3F5KSwgXAorKwkJCQlw ciMjX2QsIHNpemVvZihwciMjX2QpfQorKworK3N0YXRpYyBFQ19TRUxGVEVTVF9EQVRBIHRlc3Rf ZWNfZGF0YVtdID0gCisrCXsKKysJbWFrZV9lY2RzYV90ZXN0KE5JRF9YOV82Ml9wcmltZTI1NnYx LCBQXzI1NiksCisrCX07CisrCisraW50IEZJUFNfc2VsZnRlc3RfZWNkc2EoKQorKwl7CisrCUVD X0tFWSAqZWMgPSBOVUxMOworKwlCSUdOVU0gKnggPSBOVUxMLCAqeSA9IE5VTEwsICpkID0gTlVM TDsKKysJRVZQX1BLRVkgKnBrID0gTlVMTDsKKysJaW50IHJ2ID0gMDsKKysJc2l6ZV90IGk7Cisr CisrCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdF9lY19kYXRhKS9zaXplb2YoRUNfU0VMRlRF U1RfREFUQSk7IGkrKykKKysJCXsKKysJCUVDX1NFTEZURVNUX0RBVEEgKmVjZCA9IHRlc3RfZWNf ZGF0YSArIGk7CisrCisrCQl4ID0gQk5fYmluMmJuKGVjZC0+eCwgZWNkLT54bGVuLCB4KTsKKysJ CXkgPSBCTl9iaW4yYm4oZWNkLT55LCBlY2QtPnlsZW4sIHkpOworKwkJZCA9IEJOX2JpbjJibihl Y2QtPmQsIGVjZC0+ZGxlbiwgZCk7CisrCisrCQlpZiAoIXggfHwgIXkgfHwgIWQpCisrCQkJZ290 byBlcnI7CisrCisrCQllYyA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShlY2QtPmN1cnZlKTsK KysJCWlmICghZWMpCisrCQkJZ290byBlcnI7CisrCisrCQlpZiAoIUVDX0tFWV9zZXRfcHVibGlj X2tleV9hZmZpbmVfY29vcmRpbmF0ZXMoZWMsIHgsIHkpKQorKwkJCWdvdG8gZXJyOworKworKwkJ aWYgKCFFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KGVjLCBkKSkKKysJCQlnb3RvIGVycjsKKysKKysJ CWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQkJZ290byBlcnI7CisrCisrCQlF VlBfUEtFWV9hc3NpZ25fRUNfS0VZKHBrLCBlYyk7CisrCisrCQlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywgTlVMTCwgMCwKKysJCQkJCQlOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAs CisrCQkJCQkJZWNkLT5uYW1lKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJcnYgPSAxOwor KworKwllcnI6CisrCisrCWlmICh4KQorKwkJQk5fY2xlYXJfZnJlZSh4KTsKKysJaWYgKHkpCisr CQlCTl9jbGVhcl9mcmVlKHkpOworKwlpZiAoZCkKKysJCUJOX2NsZWFyX2ZyZWUoZCk7CisrCWlm IChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKwllbHNlIGlmIChlYykKKysJCUVDX0tFWV9m cmVlKGVjKTsKKysKKysJcmV0dXJuIHJ2OworKworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmguZmlwcy1lYyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZmlwcy9maXBzLmgKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmgu Zmlwcy1lYwkyMDE0LTEwLTE2IDEzOjI1OjIwLjcwMTEwODUzNSArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2ZpcHMuaAkyMDE0LTEwLTE2IDEzOjI1OjIwLjczMzEwOTI1NyAr MDIwMAorQEAgLTkzLDYgKzkzLDggQEAgaW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOworIHZv aWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKKyB2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2Vu KHZvaWQpOworIGludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVz dF9lY2RzYSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9lY2RoKHZvaWQpOworIHZvaWQgRklQ U19jb3JydXB0X3JuZyh2b2lkKTsKKyB2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpOworIHZvaWQg RklQU194OTMxX3N0aWNrKGludCBvbm9mZik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzLWVjIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2Zp cHNfcG9zdC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlw cy1lYwkyMDE0LTEwLTE2IDEzOjI1OjIwLjcwMjEwODU1NyArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIwMTQtMTAtMTYgMTM6MjU6MjAuNzMzMTA5MjU3 ICswMjAwCitAQCAtOTUsOCArOTUsMTIgQEAgaW50IEZJUFNfc2VsZnRlc3Qodm9pZCkKKyAJCXJ2 ID0gMDsKKyAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgpKQorIAkJcnYgPSAwOworKwlpZiAoIUZJ UFNfc2VsZnRlc3RfZWNkc2EoKSkKKysJCXJ2ID0gMDsKKyAJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Rz YSgpKQorIAkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfZWNkaCgpKQorKwkJcnYgPSAw OworIAlyZXR1cm4gcnY7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL01ha2VmaWxlLmZpcHMtZWMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvTWFrZWZpbGUK Ky0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzLWVjCTIwMTQtMTAt MTYgMTM6MjU6MjAuNzA0MTA4NjAzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Zp cHMvTWFrZWZpbGUJMjAxNC0xMC0xNiAxMzoyNToyMC43MzQxMDkyODAgKzAyMDAKK0BAIC0yNCwx MyArMjQsMTMgQEAgTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZgorICAg ICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNh X3NlbGZ0ZXN0LmMgIGZpcHNfcmFuZC5jIFwKKyAgICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bv c3QuYyBmaXBzX2RyYmdfY3RyLmMgZmlwc19kcmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwK KyAgICAgZmlwc19kcmJnX2xpYi5jIGZpcHNfZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0 LmMgZmlwc19yYW5kX2xpYi5jIFwKKy0gICAgZmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lbmMu YyBmaXBzX21kLmMKKysgICAgZmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lY2RoX3NlbGZ0ZXN0 LmMgZmlwc19lY2RzYV9zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCisgCisgTElCT0JK PWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2htYWNfc2VsZnRl c3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCisgICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8gZmlw c19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8g XAorICAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJiZ19jdHIubyBmaXBz X2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAorICAgICBmaXBzX2RyYmdfbGliLm8gZmlw c19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRfbGliLm8gXAorLSAg ICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubworKyAgICBmaXBzX2Nt YWNfc2VsZnRlc3QubyBmaXBzX2VjZGhfc2VsZnRlc3QubyBmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm8g Zmlwc19lbmMubyBmaXBzX21kLm8KKyAKKyBMSUJDUllQVE89LUwuLiAtbGNyeXB0bworIAorQEAg LTExOSw2ICsxMTksMjEgQEAgZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu cworIGZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAorIGZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisg Zmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlw c19hZXNfc2VsZnRlc3QuYworK2ZpcHNfY21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfY21hY19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY21hYy5oCisrZmlwc19jbWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfY21hY19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKKytmaXBzX2NtYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2NtYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2NtYWNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfY21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19jbWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfY21hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfY21hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2NtYWNfc2VsZnRlc3QuYworK2ZpcHNfY21hY19z ZWxmdGVzdC5vOiBmaXBzX2xvY2wuaAorIGZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZmlwc19kZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisgZmlwc19kZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCitAQCAtMjMyLDYgKzI0Nyw0NiBAQCBmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zCisgZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKKyBmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5jCisgZmlwc19kc2Ffc2VsZnRlc3QubzogZmlw c19sb2NsLmgKKytmaXBzX2VjZGhfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2VjZGhfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o CisrZmlwc19lY2RoX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCisrZmlwc19lY2RoX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19l Y2RoX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oCisrZmlwc19lY2RoX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCisrZmlwc19lY2RoX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKKytmaXBzX2VjZGhfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAorK2ZpcHNfZWNkaF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAorK2ZpcHNfZWNkaF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAorK2ZpcHNfZWNkaF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorK2ZpcHNfZWNkaF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKKytmaXBzX2VjZGhfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKKytmaXBzX2VjZGhfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmggZmlwc19lY2RoX3NlbGZ0ZXN0LmMKKytmaXBzX2VjZGhfc2VsZnRlc3Qubzog Zmlwc19sb2NsLmgKKytmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19lY2RzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAorK2ZpcHNfZWNkc2Ffc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAor K2ZpcHNfZWNkc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKytm aXBzX2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCisrZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisrZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCisrZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZWNkc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2VjZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19lY2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2VjZHNhX3NlbGZ0ZXN0LmMKKytmaXBzX2VuYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAorK2ZpcHNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaAorK2ZpcHNfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2VuYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZW5jLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNf ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZW5jLmMKKyBmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmgKKyBmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCisgZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorQEAgLTI0Niw2ICszMDEs MTUgQEAgZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbgorIGZpcHNfaG1h Y19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKyBmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBmaXBzX2htYWNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19obWFjX3Nl bGZ0ZXN0LmMKKytmaXBzX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX21kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBz X21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKKytmaXBzX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfbWQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytm aXBzX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX21kLm86IGZpcHNf bWQuYworIGZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaAorIGZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisgZmlwc19wb3N0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovdmVyc2lvbi5tYXAuZmlwcy1lYyBvcGVuc3NsLTEuMC4xai92 ZXJzaW9uLm1hcAorLS0tIG9wZW5zc2wtMS4wLjFqL3ZlcnNpb24ubWFwLmZpcHMtZWMJMjAxNC0x MC0xNiAxMzoyNToyMC43MTYxMDg4NzMgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai92ZXJzaW9u Lm1hcAkyMDE0LTEwLTE2IDEzOjI1OjIwLjczNDEwOTI4MCArMDIwMAorQEAgLTYsMyArNiw3IEBA IE9QRU5TU0xfMS4wLjEgeworIAkgICAgX29yaWdpbmFsKjsKKyAJICAgIF9jdXJyZW50KjsKKyB9 OworK09QRU5TU0xfMS4wLjFfRUMgeworKyAgICBnbG9iYWw6CisrCSAgICBFQyo7CisrfTsKCmRp ZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xai1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMWotZmlw cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmY2YWNhCi0tLSAv ZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMWotZmlwcy5wYXRjaApAQCAtMCwwICsxLDIwNDAw IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9hcHBzL3NwZWVkLmMuZmlwcyBvcGVuc3NsLTEu MC4xai9hcHBzL3NwZWVkLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9hcHBzL3NwZWVkLmMuZmlwcwky MDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2Fw cHMvc3BlZWQuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4NDMwNjA4NSArMDIwMAorQEAgLTE5NSw3 ICsxOTUsNiBAQAorICNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKyAjdW5kZWYgQUVT X3NldF9lbmNyeXB0X2tleQorICN1bmRlZiBBRVNfc2V0X2RlY3J5cHRfa2V5CistI3VuZGVmIERF U19zZXRfa2V5X3VuY2hlY2tlZAorICNlbmRpZgorICNkZWZpbmUgQkZfc2V0X2tleQlwcml2YXRl X0JGX3NldF9rZXkKKyAjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQor QEAgLTIwMyw3ICsyMDIsNiBAQAorICNkZWZpbmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9z ZXRfa2V5CisgI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5CisgI2RlZmlu ZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5CistI2RlZmluZSBERVNfc2V0X2tleV91 bmNoZWNrZWQJcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQKKyAjZGVmaW5lIEFFU19zZXRf ZW5jcnlwdF9rZXkJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisgI2RlZmluZSBBRVNfc2V0 X2RlY3J5cHRfa2V5CXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleQorICNkZWZpbmUgQ2FtZWxs aWFfc2V0X2tleQlwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkKK0BAIC05NDEsNyArOTM5LDEyIEBA IGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNB CisgCQkJaWYgKHN0cmNtcCgqYXJndiwicnNhIikgPT0gMCkKKyAJCQl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwkJCQlpZiAoIUZJUFNfbW9kZSgpKQorKyNlbmRpZgorKwkJCQl7CisgCQkJcnNh X2RvaXRbUl9SU0FfNTEyXT0xOworKwkJCQl9CisgCQkJcnNhX2RvaXRbUl9SU0FfMTAyNF09MTsK KyAJCQlyc2FfZG9pdFtSX1JTQV8yMDQ4XT0xOworIAkJCXJzYV9kb2l0W1JfUlNBXzQwOTZdPTE7 CitAQCAtOTUxLDcgKzk1NCwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisg I2lmbmRlZiBPUEVOU1NMX05PX0RTQQorIAkJCWlmIChzdHJjbXAoKmFyZ3YsImRzYSIpID09IDAp CisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkJaWYgKCFGSVBTX21vZGUoKSkKKysj ZW5kaWYKKysJCQkJeworIAkJCWRzYV9kb2l0W1JfRFNBXzUxMl09MTsKKysJCQkJfQorIAkJCWRz YV9kb2l0W1JfRFNBXzEwMjRdPTE7CisgCQkJZHNhX2RvaXRbUl9EU0FfMjA0OF09MTsKKyAJCQl9 CitAQCAtMTE2MiwxMiArMTE3MCwxOCBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CisgCQl7CisgCQlmb3IgKGk9MDsgaTxBTEdPUl9OVU07IGkrKykKKyAJCQl7CistCQkJaWYgKGkg IT0gRF9FVlApCisrCQkJaWYgKGkgIT0gRF9FVlAgJiYKKysJCQkgICAgKCFGSVBTX21vZGUoKSB8 fCAoaSAhPSBEX1dISVJMUE9PTCAmJgorKwkJCQlpICE9IERfTUQyICYmIGkgIT0gRF9NRDQgJiYK KysJCQkJaSAhPSBEX01ENSAmJiBpICE9IERfTURDMiAmJgorKwkJCQlpICE9IERfUk1EMTYwKSkp CisgCQkJCWRvaXRbaV09MTsKKyAJCQl9CisgCQlmb3IgKGk9MDsgaTxSU0FfTlVNOyBpKyspCisr CQkgICAgaWYgKCFGSVBTX21vZGUoKSB8fCBpICE9IFJfUlNBXzUxMikKKyAJCQlyc2FfZG9pdFtp XT0xOworIAkJZm9yIChpPTA7IGk8RFNBX05VTTsgaSsrKQorKwkJICAgIGlmICghRklQU19tb2Rl KCkgfHwgaSAhPSBSX0RTQV81MTIpCisgCQkJZHNhX2RvaXRbaV09MTsKKyAjaWZuZGVmIE9QRU5T U0xfTk9fRUNEU0EKKyAJCWZvciAoaT0wOyBpPEVDX05VTTsgaSsrKQorQEAgLTEyMjYsMzAgKzEy NDAsNTQgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlBRVNfc2V0X2VuY3J5 cHRfa2V5KGtleTMyLDI1NiwmYWVzX2tzMyk7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05P X0NBTUVMTElBCisrCWlmIChkb2l0W0RfQ0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NN TF0gfHwgZG9pdFtEX0NCQ18yNTZfQ01MXSkKKysJICAgIHsKKyAJQ2FtZWxsaWFfc2V0X2tleShr ZXkxNiwxMjgsJmNhbWVsbGlhX2tzMSk7CisgCUNhbWVsbGlhX3NldF9rZXkoY2tleTI0LDE5Miwm Y2FtZWxsaWFfa3MyKTsKKyAJQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsMjU2LCZjYW1lbGxpYV9r czMpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCisrCWlmIChk b2l0W0RfQ0JDX0lERUFdKQorKwkgICAgeworIAlpZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwm aWRlYV9rcyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKKysJ aWYgKGRvaXRbRF9DQkNfU0VFRF0pCisrCSAgICB7CisgCVNFRURfc2V0X2tleShrZXkxNiwmc2Vl ZF9rcyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1JDNAorKwlpZiAo ZG9pdFtEX1JDNF0pCisrCSAgICB7CisgCVJDNF9zZXRfa2V5KCZyYzRfa3MsMTYsa2V5MTYpOwor KwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzIKKysJaWYgKGRvaXRbRF9D QkNfUkMyXSkKKysJICAgIHsKKyAJUkMyX3NldF9rZXkoJnJjMl9rcywxNixrZXkxNiwxMjgpOwor KwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzUKKysJaWYgKGRvaXRbRF9D QkNfUkM1XSkKKysJICAgIHsKKyAJUkM1XzMyX3NldF9rZXkoJnJjNV9rcywxNixrZXkxNiwxMik7 CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0JGCisrCWlmIChkb2l0W0Rf Q0JDX0JGXSkKKysJICAgIHsKKyAJQkZfc2V0X2tleSgmYmZfa3MsMTYsa2V5MTYpOworKwkgICAg fQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DQVNUCisrCWlmIChkb2l0W0RfQ0JDX0NB U1RdKQorKwkgICAgeworIAlDQVNUX3NldF9rZXkoJmNhc3Rfa3MsMTYsa2V5MTYpOworKwkgICAg fQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAJbWVtc2V0KHJzYV9jLDAsc2l6 ZW9mKHJzYV9jKSk7CitAQCAtMTU2NCw2ICsxNjAyLDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorIAkJSE1BQ19DVFggaGN0eDsKKyAKKyAJCUhNQUNfQ1RYX2luaXQoJmhjdHgp OworKwkJSE1BQ19DVFhfc2V0X2ZsYWdzKCZoY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpOworIAkJSE1BQ19Jbml0X2V4KCZoY3R4LCh1bnNpZ25lZCBjaGFyICopIlRoaXMgaXMg YSBrZXkuLi4iLAorIAkJCTE2LEVWUF9tZDUoKSwgTlVMTCk7CisgCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xai9Db25maWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4xai9Db25maWd1cmUKKy0tLSBvcGVu c3NsLTEuMC4xai9Db25maWd1cmUuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA1NjMwNTQ1MiAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL0NvbmZpZ3VyZQkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4 NDMwNjA4NSArMDIwMAorQEAgLTk5OCwxMSArOTk4LDYgQEAgaWYgKGRlZmluZWQoJGRpc2FibGVk eyJtZDUifSkgfHwgZGVmaW5lZAorIAkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOworIAl9 CisgCistaWYgKCRmaXBzICYmICRmaXBzbGliZGlyIGVxICIiKQorLQl7CistCSRmaXBzbGliZGly ID0gJGZpcHNkaXIgLiAiL2xpYi8iOworLQl9CistCisgIyBSU0FYIEVOR0lORSBzZXRzIGRlZmF1 bHQgbm9uLUZJUFMgUlNBIG1ldGhvZC4KKyBpZiAoJGZpcHMpCisgCXsKK0BAIC0xNDc3LDcgKzE0 NzIsNiBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fR0YybSIgaWYgKCRiCisgaWYgKCRm aXBzKQorIAl7CisgCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQ U1xuIjsKKy0JJGNmbGFncyAuPSAiIC1JXCQoRklQU0RJUikvaW5jbHVkZSI7CisgCX0KKyAKKyAk Y3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOworQEAg LTE2NjQsOSArMTY1OCwxMiBAQCB3aGlsZSAoPElOPikKKyAKKyAJcy9eRklQU0RJUj0uKi9GSVBT RElSPSRmaXBzZGlyLzsKKyAJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGly LzsKKy0Jcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmNyeXB0by8gaWYgJGZpcHM7Cisg CXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRiYXNlYWRkci87CisgCisrCWlmICgkZmlwcykKKysJ CXsKKysJCXMvXkZJUFM9LiovRklQUz15ZXMvOworKwkJfQorIAlzL15TSExJQl9UQVJHRVQ9Liov U0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKKyAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9N QVJLPSRzaGFyZWRfbWFyay87CisgCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNI QVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL2Flcy9hZXNfbWlzYy5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Flcy9hZXNf bWlzYy5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vYWVzL2Flc19taXNjLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODUz MDYxMDcgKzAyMDAKK0BAIC02OSwxNyArNjksMTEgQEAgY29uc3QgY2hhciAqQUVTX29wdGlvbnMo dm9pZCkgeworIGludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVz ZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAkJCUFFU19LRVkgKmtleSkKKyAJeworLSNpZmRlZiBP UEVOU1NMX0ZJUFMKKy0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKKy0jZW5kaWYKKyAJcmV0dXJu IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworIAl9Cisg CisgaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwg Y29uc3QgaW50IGJpdHMsCisgCQkJQUVTX0tFWSAqa2V5KQorIAl7CistI2lmZGVmIE9QRU5TU0xf RklQUworLQlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOworLSNlbmRpZgorIAlyZXR1cm4gcHJpdmF0 ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisgCX0KK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9jbWFjL2NtYWMuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9jbWFjL2NtYWMuYy5m aXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2NtYWMvY21hYy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg1MzA2MTA3ICswMjAw 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 IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9jcnlwdG8uaAorLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTQt MTAtMTYgMTM6MTk6MzQuOTE4MzAyMzM3ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2NyeXB0by5oCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg1MzA2MTA3ICswMjAwCitAQCAtNTUzLDI0 ICs1NTMsMjkgQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IHIpOworIHZvaWQgT1BFTlNTTF9pbml0 KHZvaWQpOworIAorICNkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9pbml0X2N0eChh bGcsIGFsZykKKysjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdChhbGcpIG5vbmZpcHNfbWRfaW5pdF9j dHgoYWxnLCBhbGcpCisrI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKysJaW50 IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCisgCisgI2lmZGVmIE9QRU5TU0xfRklQUworLSNkZWZp bmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisrI2RlZmluZSBub25maXBzX21kX2luaXRf Y3R4KGFsZywgY3gpIFwKKyAJaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpIFwKKyAJeyBcCisg CWlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKy0JCSJM b3cgbGV2ZWwgQVBJIGNhbGwgdG8gZGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1v ZGUhIik7IFwKKysJCSJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKTsg XAorIAlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKyAJfSBcCisgCWludCBwcml2 YXRlXyMjYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKyAKKyAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fi b3J0KGFsZykgXAorIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElO RV9fLCBcCistCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGNpcGhlciAiICNhbGcgIiBmb3JiaWRk ZW4gaW4gRklQUyBtb2RlISIpCisrCQkiQ2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBT IG1vZGUhIikKKysKKysvKiBkaWUgaWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KKyt2b2lkIEZJ UFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7CisgCisgI2Vsc2UKKy0jZGVmaW5lIGZpcHNfbWRfaW5p dF9jdHgoYWxnLCBjeCkgXAorLQlpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKysjZGVmaW5l IG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KQor ICNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSB3aGlsZSgwKQorICNlbmRpZgorIAorQEAg LTU4Nyw2ICs1OTIsOSBAQCBpbnQgQ1JZUFRPX21lbWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2 CisgICovCisgdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKKyAKKysjZGVmaW5l IE9QRU5TU0xfSEFWRV9JTklUCTEKKyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpOwor KworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBG dW5jdGlvbiBjb2Rlcy4gKi8KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kZXMvZGVz LmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZGVzL2Rlcy5oCistLS0gb3BlbnNzbC0xLjAu MWovY3J5cHRvL2Rlcy9kZXMuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzQuOTY3MzAzNDQzICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Rlcy9kZXMuaAkyMDE0LTEwLTE2IDEzOjE5 OjM1LjA4NTMwNjEwNyArMDIwMAorQEAgLTIyNCw5ICsyMjQsNiBAQCBpbnQgREVTX3NldF9rZXko Y29uc3RfREVTX2NibG9jayAqa2V5LERFCisgaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2Ni bG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyBpbnQgREVTX3NldF9rZXlf Y2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUp OworIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNf a2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7CistI2lmZGVmIE9QRU5TU0xfRklQUworLXZvaWQgcHJp dmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlf c2NoZWR1bGUgKnNjaGVkdWxlKTsKKy0jZW5kaWYKKyB2b2lkIERFU19zdHJpbmdfdG9fa2V5KGNv bnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkpOworIHZvaWQgREVTX3N0cmluZ190b18ya2V5 cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsKKyB2 b2lkIERFU19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNo YXIgKm91dCxsb25nIGxlbmd0aCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kZXMv c2V0X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Rlcy9zZXRfa2V5LmMKKy0tLSBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6 MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Rlcy9zZXRfa2V5 LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODUzMDYxMDcgKzAyMDAKK0BAIC0zMzYsMTMgKzMzNiw2 IEBAIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sKKyAJfQorIAorIHZv aWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9z Y2hlZHVsZSAqc2NoZWR1bGUpCistI2lmZGVmIE9QRU5TU0xfRklQUworLQl7CistCWZpcHNfY2lw aGVyX2Fib3J0KERFUyk7CistCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGtleSwgc2No ZWR1bGUpOworLQl9Cistdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9E RVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorLSNlbmRpZgorIAl7 CisgCXN0YXRpYyBjb25zdCBpbnQgc2hpZnRzMlsxNl09ezAsMCwxLDEsMSwxLDEsMSwwLDEsMSwx LDEsMSwxLDB9OworIAlyZWdpc3RlciBERVNfTE9ORyBjLGQsdCxzLHQyOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJ MjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZGgvZGhfZ2VuLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODUzMDYxMDcgKzAyMDAKK0BA IC04NCwxMSArODQsNiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0LCBp CisgI2VuZGlmCisgCWlmKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQorIAkJcmV0dXJuIHJl dC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsK Ky0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBT X2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sCistCQkJCQkJCWdlbmVy YXRvciwgY2IpOworLSNlbmRpZgorIAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0LCBw cmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOworIAl9CisgCitAQCAtMTIzLDYgKzExOCwyMCBAQCBz dGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCisgCWludCBnLG9rPSAtMTsK KyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dF TlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9 CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFN UywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlm CisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Cisg CUJOX0NUWF9zdGFydChjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RoL2Ro LmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZGgvZGguaAorLS0tIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNC44ODczMDE2MzcgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZGgvZGguaAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4 NjMwNjEzMCArMDIwMAorQEAgLTc3LDYgKzc3LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RIX01B WF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfREhfRklQ U19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9Q ICAgICAweDAxCisgI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBuZXcg d2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQorQEAg LTIxMCw2ICsyMTIsNyBAQCBpbnQJREhfY2hlY2soY29uc3QgREggKmRoLGludCAqY29kZXMpOwor IGludAlESF9jaGVja19wdWJfa2V5KGNvbnN0IERIICpkaCxjb25zdCBCSUdOVU0gKnB1Yl9rZXks IGludCAqY29kZXMpOworIGludAlESF9nZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBpbnQJREhfY29t cHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LGNvbnN0IEJJR05VTSAqcHViX2tleSxESCAqZGgp OworK2ludAlESF9jb21wdXRlX2tleV9wYWRkZWQodW5zaWduZWQgY2hhciAqa2V5LGNvbnN0IEJJ R05VTSAqcHViX2tleSxESCAqZGgpOworIERIICoJZDJpX0RIcGFyYW1zKERIICoqYSxjb25zdCB1 bnNpZ25lZCBjaGFyICoqcHAsIGxvbmcgbGVuZ3RoKTsKKyBpbnQJaTJkX0RIcGFyYW1zKGNvbnN0 IERIICphLHVuc2lnbmVkIGNoYXIgKipwcCk7CisgI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMWovY3J5cHRvL2RoL2RoX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RoL2Ro X2tleS5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODYzMDYx MzAgKzAyMDAKK0BAIC02MSw2ICs2MSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAor IHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Cisgc3RhdGljIGludCBjb21wdXRlX2tl eSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKK0BA IC05Nyw2ICsxMDAsMjEgQEAgaW50IERIX2NvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwg YworIAlyZXR1cm4gZGgtPm1ldGgtPmNvbXB1dGVfa2V5KGtleSwgcHViX2tleSwgZGgpOworIAl9 CisgCisraW50IERIX2NvbXB1dGVfa2V5X3BhZGRlZCh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0 IEJJR05VTSAqcHViX2tleSwgREggKmRoKQorKwl7CisrCWludCBydiwgcGFkOworKwlydiA9IERI X2NvbXB1dGVfa2V5KGtleSwgcHViX2tleSwgZGgpOworKwlpZiAocnYgPD0gMCkKKysJCXJldHVy biBydjsKKysJcGFkID0gQk5fbnVtX2J5dGVzKGRoLT5wKSAtIHJ2OworKwlpZiAocGFkID4gMCkK KysJCXsKKysJCW1lbW1vdmUoa2V5ICsgcGFkLCBrZXksIHJ2KTsKKysJCW1lbXNldChrZXksIDAs IHBhZCk7CisrCQl9CisrCXJldHVybiBydiArIHBhZDsKKysJfQorKworIHN0YXRpYyBESF9NRVRI T0QgZGhfb3NzbCA9IHsKKyAiT3BlblNTTCBESCBNZXRob2QiLAorIGdlbmVyYXRlX2tleSwKK0BA IC0xMDQsNyArMTIyLDcgQEAgY29tcHV0ZV9rZXksCisgZGhfYm5fbW9kX2V4cCwKKyBkaF9pbml0 LAorIGRoX2ZpbmlzaCwKKy0wLAorK0RIX0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwKKyBOVUxM CisgfTsKK0BAIC0xMjMsNiArMTQxLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpk aCkKKyAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKKyAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnBy aXZfa2V5PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkg JiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRT KSkKKysJCXsKKysJCURIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19T TUFMTCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKysKKyAJY3R4ID0gQk5fQ1RYX25l dygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOworIAorQEAgLTIxMyw2ICsyMzksMTMg QEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQorIAkJREhlcnIoREhf Rl9DT01QVVRFX0tFWSxESF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKKyAJCWdvdG8gZXJyOworIAkJ fQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlE SGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3Rv IGVycjsKKysJCX0KKysjZW5kaWYKKyAKKyAJY3R4ID0gQk5fQ1RYX25ldygpOworIAlpZiAoY3R4 ID09IE5VTEwpIGdvdG8gZXJyOworQEAgLTI4MCw2ICszMTMsOSBAQCBzdGF0aWMgaW50IGRoX2Ju X21vZF9leHAoY29uc3QgREggKmRoLCBCCisgCisgc3RhdGljIGludCBkaF9pbml0KERIICpkaCkK KyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNl bmRpZgorIAlkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7CisgCXJldHVybigxKTsK KyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2RoL2RoX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRv L2RoL2RoX2xpYi5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZGgvZGhfbGliLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4w ODYzMDYxMzAgKzAyMDAKK0BAIC04MSwxNCArODEsNyBAQCBjb25zdCBESF9NRVRIT0QgKkRIX2dl dF9kZWZhdWx0X21ldGhvZCh2CisgCXsKKyAJaWYoIWRlZmF1bHRfREhfbWV0aG9kKQorIAkJewor LSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1cm4gRklQ U19kaF9vcGVuc3NsKCk7CistCQllbHNlCistCQkJcmV0dXJuIERIX09wZW5TU0woKTsKKy0jZWxz ZQorIAkJZGVmYXVsdF9ESF9tZXRob2QgPSBESF9PcGVuU1NMKCk7CistI2VuZGlmCisgCQl9Cisg CXJldHVybiBkZWZhdWx0X0RIX21ldGhvZDsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9l cnIuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAxNC0x MC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8v ZHNhL2RzYV9lcnIuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4NjMwNjEzMCArMDIwMAorQEAgLTc0 LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1tdPQorIHtF UlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLAkiRE9fRFNBX1BSSU5UIn0sCisge0VSUl9GVU5D KERTQV9GX0RTQVBBUkFNU19QUklOVCksCSJEU0FwYXJhbXNfcHJpbnQifSwKKyB7RVJSX0ZVTkMo RFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQKSwJIkRTQXBhcmFtc19wcmludF9mcCJ9LAorK3tFUlJf RlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLAkiZHNhX2J1aWx0aW5fa2V5Z2VuIn0sCisr e0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJImRzYV9idWlsdGluX3BhcmFt Z2VuIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCisg e0VSUl9GVU5DKERTQV9GX0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAorIHtFUlJf RlVOQyhEU0FfRl9EU0FfR0VORVJBVEVfS0VZKSwJIkRTQV9nZW5lcmF0ZV9rZXkifSwKK0BAIC0x MDYsNiArMTA4LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNbXQor IHtFUlJfUkVBU09OKERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSksImRhdGEgdG9v IGxhcmdlIGZvciBrZXkgc2l6ZSJ9LAorIHtFUlJfUkVBU09OKERTQV9SX0RFQ09ERV9FUlJPUikg ICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJ R0VTVF9UWVBFKSAgICwiaW52YWxpZCBkaWdlc3QgdHlwZSJ9LAorK3tFUlJfUkVBU09OKERTQV9S X0tFWV9TSVpFX0lOVkFMSUQpICAgICAgLCJrZXkgc2l6ZSBpbnZhbGlkIn0sCisre0VSUl9SRUFT T04oRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAor IHtFUlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUykgICAgLCJtaXNzaW5nIHBhcmFt ZXRlcnMifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9k dWx1cyB0b28gbGFyZ2UifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxV RVMpICwibmVlZCBuZXcgc2V0dXAgdmFsdWVzIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX2dl bi5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDE0LTEw LTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9k c2EvZHNhX2dlbi5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg2MzA2MTMwICswMjAwCitAQCAtODUs NiArODUsMTQgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2VuZGlmCisgCisrI2lm bmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NU WCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBt ZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQs IEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOworK3N0YXRp YyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0g KnEsCisrCQlCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpj Yik7CisrI2VuZGlmCisrCisgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0 LCBpbnQgYml0cywKKyAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVkX2xl biwKKyAJCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAq Y2IpCitAQCAtMTAwLDE0ICsxMDgsNiBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgo RFNBICpyZXQsCisgCWlmKHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQorIAkJcmV0dXJuIHJldC0+ bWV0aC0+ZHNhX3BhcmFtZ2VuKHJldCwgYml0cywgc2VlZF9pbiwgc2VlZF9sZW4sCisgCQkJCWNv dW50ZXJfcmV0LCBoX3JldCwgY2IpOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZWxzZSBpZiAo RklQU19tb2RlKCkpCistCQl7CistCQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChyZXQsIGJpdHMsIAorLQkJCQkJCQlzZWVkX2luLCBzZWVkX2xlbiwKKy0JCQkJCQkJY291 bnRlcl9yZXQsIGhfcmV0LCBjYik7CistCQl9CistI2VuZGlmCisgCWVsc2UKKyAJCXsKKyAJCWNv bnN0IEVWUF9NRCAqZXZwbWQ7CitAQCAtMTI1LDI3ICsxMjUsMTE5IEBAIGludCBEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKKyAJCQl9CisgCisgCQlyZXR1cm4gZHNhX2J1aWx0 aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywgZXZwbWQsCistCQkJc2VlZF9pbiwgc2VlZF9s ZW4sIE5VTEwsIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworKwkJCQlzZWVkX2luLCBzZWVkX2xl biwgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CisgCQl9CisgCX0KKyAKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisraW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCisrCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKysJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKKysJeworKwlyZXR1cm4gZHNhX2J1aWx0 aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywKKysJCWV2cG1kLCBzZWVkX2luLCBzZWVkX2xl biwKKysJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworKwl9CisrI2VuZGlmCisrCisgaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAor IAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXpl X3Qgc2VlZF9sZW4sCistCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAorIAlpbnQgKmNvdW50ZXJf cmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQorIAl7CisgCWludCBvaz0w OworIAl1bnNpZ25lZCBjaGFyIHNlZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKwlCSUdOVU0g Kmc9TlVMTCwqcT1OVUxMLCpwPU5VTEw7CisrCXNpemVfdCBxc2l6ZSA9IHFiaXRzID4+IDM7Cisr CUJOX0NUWCAqY3R4PU5VTEw7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4sCisrCQkgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAg IGdvdG8gZXJyOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmCisrCSAg ICAoYml0cyAhPSAxMDI0IHx8IHFiaXRzICE9IDE2MCkgJiYKKysJICAgIChiaXRzICE9IDIwNDgg fHwgcWJpdHMgIT0gMjI0KSAmJgorKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYp ICYmCisrCSAgICAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9IDI1NikpCisrCQl7CisrCQlEU0Fl cnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpOwor KwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4g PCAoc2l6ZV90KXFzaXplKSkKKysJCXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9v IHNtYWxsIC0tIGlnbm9yZSAqLworKwlpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpIAorKwkJ c2VlZF9sZW4gPSBzaXplb2Yoc2VlZCk7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxv d3MgbGFyZ2VyIFNFRUQsCisrCQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSBy ZXN0cmljdGVkIHRvIDI1NiBiaXRzKi8KKysJaWYgKHNlZWRfaW4gIT0gTlVMTCkKKysJCW1lbWNw eShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7CisrCWVsc2UKKysJCXNlZWRfbGVuID0gMDsKKysK KysJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUJO X0NUWF9zdGFydChjdHgpOworKworKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0 cywgcWJpdHMsIGV2cG1kLAorKwkJc2VlZCwgc2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQs IGNiKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2coY3R4LCBw LCBxLCAmZywgaF9yZXQsIGNiKSkKKysJCWdvdG8gZXJyOworKworKwlvaz0xOworK2VycjoKKysJ aWYgKG9rKQorKwkJeworKwkJaWYocmV0LT5wKQorKwkJCXsKKysJCQlCTl9mcmVlKHJldC0+cCk7 CisrCQkJcmV0LT5wID0gTlVMTDsKKysJCQl9CisrCQlpZihyZXQtPnEpCisrCQkJeworKwkJCUJO X2ZyZWUocmV0LT5xKTsKKysJCQlyZXQtPnEgPSBOVUxMOworKwkJCX0KKysJCWlmKHJldC0+ZykK KysJCQl7CisrCQkJQk5fZnJlZShyZXQtPmcpOworKwkJCXJldC0+ZyA9IE5VTEw7CisrCQkJfQor KwkJcmV0LT5wPUJOX2R1cChwKTsKKysJCXJldC0+cT1CTl9kdXAocSk7CisrCQlyZXQtPmc9Qk5f ZHVwKGcpOworKwkJaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ ZyA9PSBOVUxMKQorKwkJCW9rPTA7CisrCQl9CisrCWlmKGN0eCkKKysJCXsKKysJCUJOX0NUWF9l bmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCXJldHVybiBvazsKKysJfQor KworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljCisrI2VuZGlmCisraW50IEZJUFNfZHNh X2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwkJ Y29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAor KwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9H RU5DQiAqY2IpCisrCXsKKysJaW50IG9rPTA7CisgCXVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJ R0VTVF9MRU5HVEhdOworLQl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF0s YnVmMltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9E SUdFU1RfTEVOR1RIXTsKKyAJQklHTlVNICpyMCwqVywqWCwqYywqdGVzdDsKKy0JQklHTlVNICpn PU5VTEwsKnE9TlVMTCwqcD1OVUxMOworLQlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworLQlpbnQg aSwgaywgbj0wLCBtPTAsIHFzaXplID0gcWJpdHMgPj4gMzsKKysJQklHTlVNICpxPU5VTEwsKnA9 TlVMTDsKKysJaW50IGksIGssIGIsIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7CisgCWlu dCBjb3VudGVyPTA7CisgCWludCByPTA7CistCUJOX0NUWCAqY3R4PU5VTEw7CistCXVuc2lnbmVk IGludCBoPTI7CisgCisgCWlmIChxc2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAh PSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgorIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9M RU5HVEgpCitAQCAtMTUzLDUxICsyNDUsNDMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERT QSAqcmV0LCBzaXplXworIAkJcmV0dXJuIDA7CisgCisgCWlmIChldnBtZCA9PSBOVUxMKQorLQkJ LyogdXNlIFNIQTEgYXMgZGVmYXVsdCAqLworLQkJZXZwbWQgPSBFVlBfc2hhMSgpOworKwkgICAg eworKwkJaWYgKHFiaXRzIDw9IDE2MCkKKysJCQlldnBtZCA9IEVWUF9zaGExKCk7CisrCQllbHNl IGlmIChxYml0cyA8PSAyMjQpCisrCQkJZXZwbWQgPSBFVlBfc2hhMjI0KCk7CisrCQllbHNlCisr CQkJZXZwbWQgPSBFVlBfc2hhMjU2KCk7CisrCSAgICB9CisgCisgCWlmIChiaXRzIDwgNTEyKQor IAkJYml0cyA9IDUxMjsKKyAKKyAJYml0cyA9IChiaXRzKzYzKS82NCo2NDsKKyAKKy0JLyogTkI6 IHNlZWRfbGVuID09IDAgaXMgc3BlY2lhbCBjYXNlOiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvCist IAkgKiBzZWVkX2luIGlmIGl0IGlzIG5vdCBOVUxMLgorLSAJICovCistCWlmIChzZWVkX2xlbiAm JiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKKy0JCXNlZWRfaW4gPSBOVUxMOwkJLyogc2Vl ZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLworLQlpZiAoc2VlZF9sZW4gPiAoc2l6ZV90 KXFzaXplKSAKKy0JCXNlZWRfbGVuID0gcXNpemU7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4 NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCistCQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMg YXJlIHJlc3RyaWN0ZWQgdG8gMTYwIGJpdHMqLworLQlpZiAoc2VlZF9pbiAhPSBOVUxMKQorLQkJ bWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKKy0KKy0JaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKQorLQkJZ290byBlcnI7CistCistCWlmICgobW9udD1CTl9NT05UX0NUWF9u ZXcoKSkgPT0gTlVMTCkKKy0JCWdvdG8gZXJyOworLQorLQlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJ cjAgPSBCTl9DVFhfZ2V0KGN0eCk7CistCWcgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCVcgPSBCTl9D VFhfZ2V0KGN0eCk7CistCXEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCSpxX3JldCA9IHEgPSBCTl9D VFhfZ2V0KGN0eCk7CisgCVggPSBCTl9DVFhfZ2V0KGN0eCk7CisgCWMgPSBCTl9DVFhfZ2V0KGN0 eCk7CistCXAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCSpwX3JldCA9IHAgPSBCTl9DVFhfZ2V0KGN0 eCk7CisgCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCisgCWlmICghQk5fbHNoaWZ0KHRlc3Qs Qk5fdmFsdWVfb25lKCksYml0cy0xKSkKKyAJCWdvdG8gZXJyOworIAorKwkvKiBzdGVwIDMgbiA9 IFxsY2VpbCBiaXRzIC8gcWJpdHMgXHJjZWlsIC0gMSAqLworKwluID0gKGJpdHMrcWJpdHMtMSkv cWJpdHMgLSAxOworKwkvKiBzdGVwIDQgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzICovCisrCWIg PSBiaXRzIC0gMSAtIG4qcWJpdHM7CisrCisgCWZvciAoOzspCisgCQl7CisgCQlmb3IgKDs7KSAv KiBmaW5kIHEgKi8KKyAJCQl7CisgCQkJaW50IHNlZWRfaXNfcmFuZG9tOworIAorLQkJCS8qIHN0 ZXAgMSAqLworKwkJCS8qIHN0ZXAgNSBnZW5lcmF0ZSBzZWVkICovCisgCQkJaWYoIUJOX0dFTkNC X2NhbGwoY2IsIDAsIG0rKykpCisgCQkJCWdvdG8gZXJyOworIAorQEAgLTIxMiwzMCArMjk2LDE4 IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJc2VlZF9s ZW49MDsgLyogdXNlIHJhbmRvbSBzZWVkIGlmICdzZWVkX2luJyB0dXJucyBvdXQgdG8gYmUgYmFk Ki8KKyAJCQkJfQorIAkJCW1lbWNweShidWYgLCBzZWVkLCBxc2l6ZSk7CistCQkJbWVtY3B5KGJ1 ZjIsIHNlZWQsIHFzaXplKTsKKy0JCQkvKiBwcmVjb21wdXRlICJTRUVEICsgMSIgZm9yIHN0ZXAg NzogKi8KKy0JCQlmb3IgKGkgPSBxc2l6ZS0xOyBpID49IDA7IGktLSkKKy0JCQkJeworLQkJCQli dWZbaV0rKzsKKy0JCQkJaWYgKGJ1ZltpXSAhPSAwKQorLQkJCQkJYnJlYWs7CistCQkJCX0KKyAK Ky0JCQkvKiBzdGVwIDIgKi8KKysJCQkvKiBzdGVwIDYgVSA9IGhhc2goc2VlZCkgKi8KKyAJCQlp ZiAoIUVWUF9EaWdlc3Qoc2VlZCwgcXNpemUsIG1kLCAgIE5VTEwsIGV2cG1kLCBOVUxMKSkKKyAJ CQkJZ290byBlcnI7CistCQkJaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgIHFzaXplLCBidWYyLCBOVUxM LCBldnBtZCwgTlVMTCkpCistCQkJCWdvdG8gZXJyOworLQkJCWZvciAoaSA9IDA7IGkgPCBxc2l6 ZTsgaSsrKQorLQkJCQltZFtpXV49YnVmMltpXTsKKyAKKy0JCQkvKiBzdGVwIDMgKi8KKysJCQkv KiBzdGVwIDcgcSA9IDJeKHFiaXRzLTEpICsgVSArIDEgLSAoVSBtb2QgMikgKi8KKyAJCQltZFsw XSB8PSAweDgwOworIAkJCW1kW3FzaXplLTFdIHw9IDB4MDE7CisgCQkJaWYgKCFCTl9iaW4yYm4o bWQsIHFzaXplLCBxKSkKKyAJCQkJZ290byBlcnI7CisgCistCQkJLyogc3RlcCA0ICovCisrCQkJ Lyogc3RlcCA4IHRlc3QgZm9yIHByaW1lICg2NCByb3VuZCBvZiBSYWJpbi1NaWxsZXIpICovCisg CQkJciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHEsIERTU19wcmltZV9jaGVja3MsIGN0eCwK KyAJCQkJCXNlZWRfaXNfcmFuZG9tLCBjYik7CisgCQkJaWYgKHIgPiAwKQorQEAgLTI0MywyNyAr MzE1LDIyIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQlp ZiAociAhPSAwKQorIAkJCQlnb3RvIGVycjsKKyAKKy0JCQkvKiBkbyBhIGNhbGxiYWNrIGNhbGwg Ki8KKy0JCQkvKiBzdGVwIDUgKi8KKyAJCQl9CisgCisgCQlpZighQk5fR0VOQ0JfY2FsbChjYiwg MiwgMCkpIGdvdG8gZXJyOworIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDMsIDApKSBnb3RvIGVy cjsKKyAKKy0JCS8qIHN0ZXAgNiAqLworKwkJLyogc3RlcCAxMSAqLworIAkJY291bnRlcj0wOwor LQkJLyogIm9mZnNldCA9IDIiICovCistCistCQluPShiaXRzLTEpLzE2MDsKKysJCS8qICJvZmZz ZXQgPSAxIiAqLworIAorIAkJZm9yICg7OykKKyAJCQl7CisgCQkJaWYgKChjb3VudGVyICE9IDAp ICYmICFCTl9HRU5DQl9jYWxsKGNiLCAwLCBjb3VudGVyKSkKKyAJCQkJZ290byBlcnI7CisgCist CQkJLyogc3RlcCA3ICovCisrCQkJLyogc3RlcCAxMS4xLCAxMS4yIG9idGFpbiBXICovCisgCQkJ Qk5femVybyhXKTsKKy0JCQkvKiBub3cgJ2J1ZicgY29udGFpbnMgIlNFRUQgKyBvZmZzZXQgLSAx IiAqLworIAkJCWZvciAoaz0wOyBrPD1uOyBrKyspCisgCQkJCXsKKyAJCQkJLyogb2J0YWluICJT RUVEICsgb2Zmc2V0ICsgayIgYnkgaW5jcmVtZW50aW5nOiAqLworQEAgLTI3OCwyOCArMzQ1LDMw IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJCQkJCQlO VUxMKSkKKyAJCQkJCWdvdG8gZXJyOworIAorLQkJCQkvKiBzdGVwIDggKi8KKyAJCQkJaWYgKCFC Tl9iaW4yYm4obWQsIHFzaXplLCByMCkpCisgCQkJCQlnb3RvIGVycjsKKy0JCQkJaWYgKCFCTl9s c2hpZnQocjAscjAsKHFzaXplIDw8IDMpKmspKSBnb3RvIGVycjsKKysJCQkJaWYgKGsgPT0gbikK KysJCQkJCUJOX21hc2tfYml0cyhyMCxiKTsKKysJCQkJaWYgKCFCTl9sc2hpZnQocjAscjAscWJp dHMqaykpIGdvdG8gZXJyOworIAkJCQlpZiAoIUJOX2FkZChXLFcscjApKSBnb3RvIGVycjsKKyAJ CQkJfQorIAorLQkJCS8qIG1vcmUgb2Ygc3RlcCA4ICovCistCQkJaWYgKCFCTl9tYXNrX2JpdHMo VyxiaXRzLTEpKSBnb3RvIGVycjsKKysJCQkvKiBzdGVwIDExLjMgWCA9IFcgKyAyXihMLTEpICov CisgCQkJaWYgKCFCTl9jb3B5KFgsVykpIGdvdG8gZXJyOworIAkJCWlmICghQk5fYWRkKFgsWCx0 ZXN0KSkgZ290byBlcnI7CisgCistCQkJLyogc3RlcCA5ICovCisrCQkJLyogc3RlcCAxMS40IGMg PSBYIG1vZCAyKnEgKi8KKyAJCQlpZiAoIUJOX2xzaGlmdDEocjAscSkpIGdvdG8gZXJyOworIAkJ CWlmICghQk5fbW9kKGMsWCxyMCxjdHgpKSBnb3RvIGVycjsKKysKKysJCQkvKiBzdGVwIDExLjUg cCA9IFggLSAoYyAtIDEpICovCisgCQkJaWYgKCFCTl9zdWIocjAsYyxCTl92YWx1ZV9vbmUoKSkp IGdvdG8gZXJyOworIAkJCWlmICghQk5fc3ViKHAsWCxyMCkpIGdvdG8gZXJyOworIAorLQkJCS8q IHN0ZXAgMTAgKi8KKysJCQkvKiBzdGVwIDExLjYgKi8KKyAJCQlpZiAoQk5fY21wKHAsdGVzdCkg Pj0gMCkKKyAJCQkJeworLQkJCQkvKiBzdGVwIDExICovCisrCQkJCS8qIHN0ZXAgMTEuNyAqLwor IAkJCQlyID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocCwgRFNTX3ByaW1lX2NoZWNrcywKKyAJ CQkJCQljdHgsIDEsIGNiKTsKKyAJCQkJaWYgKHIgPiAwKQorQEAgLTMwOCwxOSArMzc3LDQ1IEBA IGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJCWdvdG8gZXJy OworIAkJCQl9CisgCistCQkJLyogc3RlcCAxMyAqLworKwkJCS8qIHN0ZXAgMTEuOSAqLworIAkJ CWNvdW50ZXIrKzsKKyAJCQkvKiAib2Zmc2V0ID0gb2Zmc2V0ICsgbiArIDEiICovCisgCistCQkJ Lyogc3RlcCAxNCAqLworLQkJCWlmIChjb3VudGVyID49IDQwOTYpIGJyZWFrOworKwkJCS8qIHN0 ZXAgMTIgKi8KKysJCQlpZiAoY291bnRlciA+PSA0KmJpdHMpIGJyZWFrOworIAkJCX0KKyAJCX0K KyBlbmQ6CisgCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAxKSkKKyAJCWdvdG8gZXJyOworIAor LQkvKiBXZSBub3cgbmVlZCB0byBnZW5lcmF0ZSBnICovCisrCW9rPTE7CisrZXJyOgorKwlpZiAo b2spCisrCQl7CisrCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50 ZXI7CisrCQl9CisrCXJldHVybiBvazsKKysJfQorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisr c3RhdGljCisrI2VuZGlmCisraW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJ R05VTSAqcCwgQklHTlVNICpxLAorKwkJQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhf cmV0LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IG9rPTA7CisrCUJJR05VTSAqcjAsICp0ZXN0 LCAqZyA9IE5VTEw7CisrCUJOX01PTlRfQ1RYICptb250OworKwl1bnNpZ25lZCBpbnQgaD0yOwor KworKwlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsK KysKKysJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCSpnX3JldCA9IGcgPSBCTl9DVFhfZ2V0KGN0 eCk7CisrCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisgCS8qIFNldCByMD0ocC0xKS9xICov CisgCWlmICghQk5fc3ViKHRlc3QscCxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOworIAlpZiAo IUJOX2RpdihyMCxOVUxMLHRlc3QscSxjdHgpKSBnb3RvIGVycjsKK0BAIC0zNDQsMjYgKzQzOSw3 IEBAIGVuZDoKKyBlcnI6CisgCWlmIChvaykKKyAJCXsKKy0JCWlmKHJldC0+cCkgQk5fZnJlZShy ZXQtPnApOworLQkJaWYocmV0LT5xKSBCTl9mcmVlKHJldC0+cSk7CistCQlpZihyZXQtPmcpIEJO X2ZyZWUocmV0LT5nKTsKKy0JCXJldC0+cD1CTl9kdXAocCk7CistCQlyZXQtPnE9Qk5fZHVwKHEp OworLQkJcmV0LT5nPUJOX2R1cChnKTsKKy0JCWlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEg PT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKKy0JCQl7CistCQkJb2s9MDsKKy0JCQlnb3RvIGVy cjsKKy0JCQl9CistCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50 ZXI7CisgCQlpZiAoaF9yZXQgIT0gTlVMTCkgKmhfcmV0PWg7CistCQlpZiAoc2VlZF9vdXQpCist CQkJbWVtY3B5KHNlZWRfb3V0LCBzZWVkLCBxc2l6ZSk7CistCQl9CistCWlmKGN0eCkKKy0JCXsK Ky0JCUJOX0NUWF9lbmQoY3R4KTsKKy0JCUJOX0NUWF9mcmVlKGN0eCk7CisgCQl9CisgCWlmICht b250ICE9IE5VTEwpIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7CisgCXJldHVybiBvazsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZHNhL2RzYS5oCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2EuaC5maXBz CTIwMTQtMTAtMTYgMTM6MTk6MzQuNzkxMjk5NDcwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL2RzYS9kc2EuaAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4NzMwNjE1MiArMDIwMAorQEAg LTg4LDYgKzg4LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEw MDAwCisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMgMTAyNAorKworICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKKyAjZGVmaW5l IERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7 IHRoZSBidWlsdC1pbiBEU0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtMjY0 LDYgKzI2NiwxNyBAQCBpbnQJRFNBX3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCisg REggKkRTQV9kdXBfREgoY29uc3QgRFNBICpyKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisraW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCisrCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKysJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisraW50IEZJUFNfZHNhX2dlbmVyYXRl X3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQ X01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVN ICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2Ip OworK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05V TSAqcSwKKysJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0Ig KmNiKTsKKysjZW5kaWYKKysKKyAjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2Vu X2JpdHMoY3R4LCBuYml0cykgXAorIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RT QSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKKyAJCQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1H RU5fQklUUywgbmJpdHMsIE5VTEwpCitAQCAtMjg1LDEwICsyOTgsMTMgQEAgdm9pZCBFUlJfbG9h ZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0 CisgI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJCQkJIDEwMAorICNkZWZpbmUgRFNBX0Zf RFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQorKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZ R0VOCQkJIDEyNAorKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCisg I2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCisgI2RlZmluZSBEU0FfRl9EU0FfRE9f VkVSSUZZCQkJCSAxMTMKKy0jZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNAor LSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjMKKysjZGVmaW5l IERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNgorKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVS QVRFX1BBUkFNRVRFUlNfRVgJCSAxMjcKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJB TUVURVJTCS8qIHVudXNlZCAqLwkgMTI1CisgI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJ CQkgMTAzCisgI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKKyAjZGVmaW5l IERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1CitAQCAtMzE0LDExICszMzAsMTUgQEAgdm9pZCBF UlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdF X0ZPUl9LRVlfU0laRQkJIDEwMAorICNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQK KyAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2CisrI2RlZmluZSBEU0Ff Ul9LRVlfU0laRV9JTlZBTElECQkJCSAxMTMKKysjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTAkJCSAxMTAKKyAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKKyAj ZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKKy0jZGVmaW5lIERTQV9SX05F RURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTAKKysjZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQ X1ZBTFVFUwkJCSAxMTIKKyAjZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QJCQkgMTEx CisrI2RlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDExMQorICNkZWZpbmUgRFNBX1Jf Tk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNworKyNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9B TExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8gMTEyCisgI2RlZmluZSBEU0FfUl9QQVJB TUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZHNhL2RzYV9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2Ev ZHNhX2tleS5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9rZXkuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4 NzMwNjE1MiArMDIwMAorQEAgLTY2LDYgKzY2LDM1IEBACisgCisgI2lmZGVmIE9QRU5TU0xfRklQ UworICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K KysKKytzdGF0aWMgaW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQorKwl7CisrCUVWUF9QS0VZ ICpwazsKKysJdW5zaWduZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7 CisrCWludCByZXQgPSAwOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQor KwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOworKworKwlpZiAo Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAwLCBOVUxMLCAwLCBO VUxMKSkKKysJCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVE KTsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCX0KKysKKysJaWYgKHBrKQorKwkJ RVZQX1BLRVlfZnJlZShwayk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKyAjZW5kaWYKKyAK KyBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSk7CitAQCAtODIsMTAgKzEx MSw2IEBAIGludCBEU0FfZ2VuZXJhdGVfa2V5KERTQSAqZHNhKQorICNlbmRpZgorIAlpZihkc2Et Pm1ldGgtPmRzYV9rZXlnZW4pCisgCQlyZXR1cm4gZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKGRzYSk7 CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4gRklQ U19kc2FfZ2VuZXJhdGVfa2V5KGRzYSk7CistI2VuZGlmCisgCXJldHVybiBkc2FfYnVpbHRpbl9r ZXlnZW4oZHNhKTsKKyAJfQorIAorQEAgLTk1LDYgKzEyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9i dWlsdGluX2tleWdlbihEU0EgKmRzYSkKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAJQklHTlVNICpw dWJfa2V5PU5VTEwsKnByaXZfa2V5PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp CisrCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVM VVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBEU0Ff Ul9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisg CWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7CisgCisgCWlmIChkc2Et PnByaXZfa2V5ID09IE5VTEwpCitAQCAtMTMzLDYgKzE2NywxNCBAQCBzdGF0aWMgaW50IGRzYV9i dWlsdGluX2tleWdlbihEU0EgKmRzYSkKKyAKKyAJZHNhLT5wcml2X2tleT1wcml2X2tleTsKKyAJ ZHNhLT5wdWJfa2V5PXB1Yl9rZXk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX21v ZGUoKSAmJiAhZmlwc19jaGVja19kc2EoZHNhKSkKKysJCXsKKysJCWRzYS0+cHViX2tleSA9IE5V TEw7CisrCQlkc2EtPnByaXZfa2V5ID0gTlVMTDsKKysJICAgIAlnb3RvIGVycjsKKysJCX0KKysj ZW5kaWYKKyAJb2s9MTsKKyAKKyBlcnI6CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8v ZHNhL2RzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX2xpYi5jCist LS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfbGliLmMuZmlwcwkyMDE0LTEwLTE1IDE0 OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNh X2xpYi5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg3MzA2MTUyICswMjAwCitAQCAtODcsMTQgKzg3 LDcgQEAgY29uc3QgRFNBX01FVEhPRCAqRFNBX2dldF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlm KCFkZWZhdWx0X0RTQV9tZXRob2QpCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYg KEZJUFNfbW9kZSgpKQorLQkJCXJldHVybiBGSVBTX2RzYV9vcGVuc3NsKCk7CistCQllbHNlCist CQkJcmV0dXJuIERTQV9PcGVuU1NMKCk7CistI2Vsc2UKKyAJCWRlZmF1bHRfRFNBX21ldGhvZCA9 IERTQV9PcGVuU1NMKCk7CistI2VuZGlmCisgCQl9CisgCXJldHVybiBkZWZhdWx0X0RTQV9tZXRo b2Q7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5m aXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzQuNzkyMjk5 NDkzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfbG9jbC5oCTIwMTQt MTAtMTYgMTM6MTk6MzUuMDg3MzA2MTUyICswMjAwCitAQCAtNTYsNSArNTYsNCBAQAorIAorIGlu dCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0 cywKKyAJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwg c2l6ZV90IHNlZWRfbGVuLAorLQl1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKKyAJaW50ICpjb3Vu dGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZHNhL2RzYV9vc3NsLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9v c3NsLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX29zc2wuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4NzMw NjE1MiArMDIwMAorQEAgLTY1LDYgKzY1LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlm CisgCisgc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRn c3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Cisgc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0Eg KmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCk7CitAQCAt ODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2FfbW9kX2V4cCwgKi8KKyBOVUxMLCAvKiBkc2FfYm5f bW9kX2V4cCwgKi8KKyBkc2FfaW5pdCwKKyBkc2FfZmluaXNoLAorLTAsCisrRFNBX0ZMQUdfRklQ U19NRVRIT0QsCisgTlVMTCwKKyBOVUxMLAorIE5VTEwKK0BAIC0xMzgsNiArMTQxLDIxIEBAIHN0 YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24KKyAJRFNBX1NJRyAqcmV0PU5V TEw7CisgCWludCBub3JlZG8gPSAwOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9E T19TSUdOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gTlVMTDsK KysJICAgIH0KKysKKysJaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFH X05PTl9GSVBTX0FMTE9XKSAKKysJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9E U0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9f U0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiBOVUxMOworKwkJfQor KyNlbmRpZgorKworIAlCTl9pbml0KCZtKTsKKyAJQk5faW5pdCgmeHIpOworIAorQEAgLTMyNSw2 ICszNDMsMjEgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCisgCQly ZXR1cm4gLTE7CisgCQl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1ZFUklG WSxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAg fQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpIAorKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlks IERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gLTE7CisrCQl9CisrI2VuZGlm CisrCisgCWlmIChCTl9udW1fYml0cyhkc2EtPnApID4gT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNf QklUUykKKyAJCXsKKyAJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLERTQV9SX01PRFVMVVNf VE9PX0xBUkdFKTsKK0BAIC0zOTksNiArNDMyLDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5 KGNvbnN0IHVuc2lnbmVkCisgCisgc3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKKyB7Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisg CWRzYS0+ZmxhZ3N8PURTQV9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIH0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRv L2RzYS9kc2FfcG1ldGguYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDE0LTEwLTE2IDEz OjE5OjM1LjA4NzMwNjE1MiArMDIwMAorQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgaW50IHBr ZXlfZHNhX3BhcmFtZ2VuKEVWUF9QS0VZX0NUCisgCWlmICghZHNhKQorIAkJcmV0dXJuIDA7Cisg CXJldCA9IGRzYV9idWlsdGluX3BhcmFtZ2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRz LCBkY3R4LT5wbWQsCistCSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEws IE5VTEwsIE5VTEwsIHBjYik7CisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAs IE5VTEwsIE5VTEwsIHBjYik7CisgCWlmIChyZXQpCisgCQlFVlBfUEtFWV9hc3NpZ25fRFNBKHBr ZXksIGRzYSk7CisgCWVsc2UKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNh dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2F0ZXN0LmMKKy0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTE6MDYu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2F0ZXN0LmMJ MjAxNC0xMC0xNiAxMzoxOTozNS4wODgzMDYxNzUgKzAyMDAKK0BAIC05NiwzNiArOTYsNDEgQEAg c3RhdGljIGludCBNU19DQUxMQkFDSyBkc2FfY2IoaW50IHAsIGludAorIC8qIHNlZWQsIG91dF9w LCBvdXRfcSwgb3V0X2cgYXJlIHRha2VuIGZyb20gdGhlIHVwZGF0ZWQgQXBwZW5kaXggNSB0bwor ICAqIEZJUFMgUFVCIDE4NiBhbmQgYWxzbyBhcHBlYXIgaW4gQXBwZW5kaXggNSB0byBGSVBTIFBJ QiAxODYtMSAqLworIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdPXsKKy0JMHhkNSwweDAx LDB4NGUsMHg0YiwweDYwLDB4ZWYsMHgyYiwweGE4LDB4YjYsMHgyMSwweDFiLDB4NDAsCistCTB4 NjIsMHhiYSwweDMyLDB4MjQsMHhlMCwweDQyLDB4N2QsMHhkMywKKysJMHgwMiwweDQ3LDB4MTEs MHg5MiwweDExLDB4ODgsMHhDOCwweEZCLDB4QUYsMHg0OCwweDRDLDB4NjIsCisrCTB4REYsMHhB NSwweEJFLDB4QTAsMHhBNCwweDNDLDB4NTYsMHhFMywKKyAJfTsKKyAKKyBzdGF0aWMgdW5zaWdu ZWQgY2hhciBvdXRfcFtdPXsKKy0JMHg4ZCwweGYyLDB4YTQsMHg5NCwweDQ5LDB4MjIsMHg3Niww eGFhLAorLQkweDNkLDB4MjUsMHg3NSwweDliLDB4YjAsMHg2OCwweDY5LDB4Y2IsCistCTB4ZWEs MHhjMCwweGQ4LDB4M2EsMHhmYiwweDhkLDB4MGMsMHhmNywKKy0JMHhjYiwweGI4LDB4MzIsMHg0 ZiwweDBkLDB4NzgsMHg4MiwweGU1LAorLQkweGQwLDB4NzYsMHgyZiwweGM1LDB4YjcsMHgyMSww eDBlLDB4YWYsCistCTB4YzIsMHhlOSwweGFkLDB4YWMsMHgzMiwweGFiLDB4N2EsMHhhYywKKy0J MHg0OSwweDY5LDB4M2QsMHhmYiwweGY4LDB4MzcsMHgyNCwweGMyLAorLQkweGVjLDB4MDcsMHgz NiwweGVlLDB4MzEsMHhjOCwweDAyLDB4OTEsCisrCTB4QUMsMHhDQiwweDFFLDB4NjMsMHg2MCww eDY5LDB4MEMsMHhGQiwweDA2LDB4MTksMHg2OCwweDNFLAorKwkweEE1LDB4MDEsMHg1QSwweEEy LDB4MTUsMHg1QywweEUyLDB4OTksMHgyRCwweEQ1LDB4MzAsMHg5OSwKKysJMHg3RSwweDVGLDB4 OEQsMHhFMiwweEY3LDB4QzYsMHgyRSwweDhELDB4QTMsMHg5RiwweDU4LDB4QUQsCisrCTB4RDYs MHhBOSwweDdELDB4MEUsMHgwRCwweDk1LDB4NTMsMHhBNiwweDcxLDB4M0EsMHhERSwweEFCLAor KwkweEFDLDB4RTksMHhGNCwweDM2LDB4NTUsMHg5RSwweEI5LDB4RDYsMHg5MywweEJGLDB4RjMs MHgxOCwKKysJMHgxQywweDE0LDB4N0IsMHhBNSwweDQyLDB4MkUsMHhDRCwweDAwLDB4RUIsMHgz NSwweDNCLDB4MUIsCisrCTB4QTgsMHg1MSwweEJCLDB4RTEsMHg1OCwweDQyLDB4ODUsMHg4NCww eDIyLDB4QTcsMHg5NywweDVFLAorKwkweDk5LDB4NkYsMHgzOCwweDIwLDB4QkQsMHg5RCwweEI2 LDB4RDksMHgzMywweDM3LDB4MkEsMHhGRCwKKysJMHhCQiwweEQ0LDB4QkMsMHgwQywweDJBLDB4 NjcsMHhDQiwweDlGLDB4QkIsMHhERiwweEY5LDB4OTMsCisrCTB4QUEsMHhENiwweEYwLDB4RDYs MHg5NSwweDBCLDB4NUQsMHg2NSwweDE0LDB4RDAsMHgxOCwweDlELAorKwkweEM2LDB4QUYsMHhG MCwweEM2LDB4MzcsMHg3QywweEYzLDB4NUYsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNo YXIgb3V0X3FbXT17CistCTB4YzcsMHg3MywweDIxLDB4OGMsMHg3MywweDdlLDB4YzgsMHhlZSwK Ky0JMHg5OSwweDNiLDB4NGYsMHgyZCwweGVkLDB4MzAsMHhmNCwweDhlLAorLQkweGRhLDB4Y2Us MHg5MSwweDVmLAorKwkweEUzLDB4OEUsMHg1RSwweDZELDB4QkYsMHgyQiwweDc5LDB4RjgsMHhD NSwweDRCLDB4ODksMHg4QiwKKysJMHhCQSwweDJELDB4OTEsMHhDMywweDZDLDB4ODAsMHhBQyww eDg3LAorIAl9OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9nW109eworLQkweDYyLDB4 NmQsMHgwMiwweDc4LDB4MzksMHhlYSwweDBhLDB4MTMsCistCTB4NDEsMHgzMSwweDYzLDB4YTUs MHg1YiwweDRjLDB4YjUsMHgwMCwKKy0JMHgyOSwweDlkLDB4NTUsMHgyMiwweDk1LDB4NmMsMHhl ZiwweGNiLAorLQkweDNiLDB4ZmYsMHgxMCwweGYzLDB4OTksMHhjZSwweDJjLDB4MmUsCistCTB4 NzEsMHhjYiwweDlkLDB4ZTUsMHhmYSwweDI0LDB4YmEsMHhiZiwKKy0JMHg1OCwweGU1LDB4Yjcs MHg5NSwweDIxLDB4OTIsMHg1YywweDljLAorLQkweGM0LDB4MmUsMHg5ZiwweDZmLDB4NDYsMHg0 YiwweDA4LDB4OGMsCistCTB4YzUsMHg3MiwweGFmLDB4NTMsMHhlNiwweGQ3LDB4ODgsMHgwMiwK KysJMHg0MiwweDRBLDB4MDQsMHg0RSwweDc5LDB4QjQsMHg5OSwweDdGLDB4RkQsMHg1OCwweDM2 LDB4MkMsCisrCTB4MUIsMHg1RiwweDE4LDB4N0UsMHgwRCwweENDLDB4QUIsMHg4MSwweEM5LDB4 NUQsMHgxMCwweENFLAorKwkweDRFLDB4ODAsMHg3RSwweDU4LDB4QjQsMHgzNCwweDNGLDB4QTcs MHg0NSwweEM3LDB4QUEsMHgzNiwKKysJMHgyNCwweDQyLDB4QTksMHgzQiwweEU4LDB4MEUsMHgw NCwweDAyLDB4MkQsMHhGQiwweEE2LDB4MTMsCisrCTB4QjksMHhCNSwweDE1LDB4QTUsMHg1Niww eDA3LDB4MzUsMHhFNCwweDAzLDB4QjYsMHg3OSwweDdDLAorKwkweDYyLDB4REQsMHhERiwweDNG LDB4NzEsMHgzQSwweDlELDB4OEIsMHhDNCwweEY2LDB4RTcsMHgxRCwKKysJMHg1MiwweEE4LDB4 QTksMHg0MywweDFELDB4MzMsMHg1MSwweDg4LDB4MzksMHhCRCwweDczLDB4RTksCisrCTB4NUYs MHhCRSwweDgyLDB4NDksMHgyNywweEU2LDB4QjUsMHg1MywweEMxLDB4MzgsMHhBQywweDJGLAor KwkweDZELDB4OTcsMHg2QywweEVCLDB4NjcsMHhDMSwweDVGLDB4NjcsMHhGOCwweDM1LDB4MDUs MHg1RSwKKysJMHhENSwweDY4LDB4ODAsMHhBQSwweDk2LDB4Q0EsMHgwQiwweDhBLDB4RTYsMHhG MSwweEIxLDB4NDEsCisrCTB4QzYsMHg3NSwweDk0LDB4MEEsMHgwQSwweDJBLDB4RkEsMHgyOSwK KyAJfTsKKyAKKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAx MjM0NTY3ODkwIjsKK0BAIC0xNTcsNyArMTYyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorIAlCSU9fcHJpbnRmKGJpb19lcnIsInRlc3QgZ2VuZXJhdGlvbiBvZiBEU0EgcGFy YW1ldGVyc1xuIik7CisgCisgCUJOX0dFTkNCX3NldCgmY2IsIGRzYV9jYiwgYmlvX2Vycik7Cist CWlmKCgoZHNhID0gRFNBX25ldygpKSA9PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRl cnNfZXgoZHNhLCA1MTIsCisrCWlmKCgoZHNhID0gRFNBX25ldygpKSA9PSBOVUxMKSB8fCAhRFNB X2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LAorIAkJCQlzZWVkLCAyMCwgJmNvdW50 ZXIsICZoLCAmY2IpKQorIAkJZ290byBlbmQ7CisgCitAQCAtMTcwLDkgKzE3NSw5IEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJQklPX3ByaW50ZihiaW9fZXJyLCJcbmNvdW50 ZXI9JWQgaD0lbGRcbiIsY291bnRlcixoKTsKKyAJCQorIAlEU0FfcHJpbnQoYmlvX2Vycixkc2Es MCk7CistCWlmIChjb3VudGVyICE9IDEwNSkgCisrCWlmIChjb3VudGVyICE9IDIzOSkgCisgCQl7 CistCQlCSU9fcHJpbnRmKGJpb19lcnIsImNvdW50ZXIgc2hvdWxkIGJlIDEwNVxuIik7CisrCQlC SU9fcHJpbnRmKGJpb19lcnIsImNvdW50ZXIgc2hvdWxkIGJlIDIzOVxuIik7CisgCQlnb3RvIGVu ZDsKKyAJCX0KKyAJaWYgKGggIT0gMikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9l bmdpbmUvZW5nX2FsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2VuZ2luZS9lbmdfYWxs LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzCTIwMTQt MTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2VuZ2luZS9lbmdfYWxsLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODgzMDYxNzUgKzAyMDAKK0BA IC01OCwxMSArNTgsMjUgQEAKKyAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSAi ZW5nX2ludC5oIgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2VuZGlmCisgCisgdm9pZCBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXModm9pZCkK KyAJeworIAkvKiBTb21lIEVOR0lORXMgbmVlZCB0aGlzICovCisgCU9QRU5TU0xfY3B1aWRfc2V0 dXAoKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Cisr CWlmIChGSVBTX21vZGUoKSkgeworKwkJLyogV2UgYWxsb3cgbG9hZGluZyBkeW5hbWljIGVuZ2lu ZSBhcyBhIHRoaXJkIHBhcnR5CisrCQkgICBlbmdpbmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQu CisrCQkgICBVc2VyIGlzIGRpc2FsbG93ZWQgdG8gbG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMK KysJCSAgIGJ5IHNlY3VyaXR5IHBvbGljeS4gKi8KKysJCUVOR0lORV9sb2FkX2R5bmFtaWMoKTsK KysJCXJldHVybjsKKysJfQorKyNlbmRpZgorICNpZiAwCisgCS8qIFRoZXJlJ3Mgbm8gbG9uZ2Vy IGFueSBuZWVkIGZvciBhbiAib3BlbnNzbCIgRU5HSU5FIHVubGVzcywgb25lIGRheSwKKyAJICog aXQgaXMgdGhlICpvbmx5KiB3YXkgZm9yIHN0YW5kYXJkIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25z IHRvIGJlIGJlCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2NfYWxsYy5jLmZp cHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9jX2FsbGMuYworLS0tIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvY19hbGxjLmMJMjAxNC0xMC0xNiAx MzoxOTozNS4wODgzMDYxNzUgKzAyMDAKK0BAIC02NSw2ICs2NSwxMSBAQAorIHZvaWQgT3BlblNT TF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJeworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ T1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysJaWYoIUZJUFNfbW9kZSgpKSAKKysJCXsKKysjZW5k aWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2Zi KCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYjEoKSk7CitAQCAtMjI3LDQgKzIzMiw2 MCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgCUVWUF9hZGRfY2lwaGVy X2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsIkNBTUVMTElBMjU2Iik7CisgCUVWUF9hZGRfY2lw aGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsImNhbWVsbGlhMjU2Iik7CisgI2VuZGlmCisr I2lmZGVmIE9QRU5TU0xfRklQUworKwkJfQorKwllbHNlCisrCQl7CisrI2lmbmRlZiBPUEVOU1NM X05PX0RFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jZmIoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfZWRlM19jZmIoKSk7CisrCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf ZWRlX29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX29mYigpKTsKKysKKysJ RVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBf ZGVzX2VkZTNfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMs IkRFUzMiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCJkZXMzIik7 CisrCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlKCkpOworKwlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZTMoKSk7CisrI2VuZGlmCisrCisrI2lmbmRlZiBPUEVOU1NMX05PX0FFUworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jZmI4KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9vZmIoKSk7Cisr CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xMjhfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF94dHMoKSk7Cisr CUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKKysJRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsImFlczEyOCIpOworKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzE5Ml9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygp KTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzE5Ml9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4 KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9vZmIoKSk7CisrCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTkyX2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZ2Nt KCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiQUVTMTkyIik7Cisr CUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJhZXMxOTIiKTsKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1 Nl9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigpKTsKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY2ZiOCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOworKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jdHIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MjU2X2djbSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfeHRzKCkpOworKwlFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiQUVTMjU2Iik7CisrCUVWUF9hZGRfY2lw aGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJhZXMyNTYiKTsKKysjZW5kaWYKKysJCX0KKysjZW5k aWYKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBz IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvY19hbGxkLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MTowNi4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2NfYWxsZC5jCTIwMTQtMTAtMTYgMTM6 MTk6MzUuMDg4MzA2MTc1ICswMjAwCitAQCAtNjQsNiArNjQsMTEgQEAKKyAKKyB2b2lkIE9wZW5T U0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9Q RU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmICghRklQU19tb2RlKCkpCisrCQl7CisrI2VuZGlm CisgI2lmbmRlZiBPUEVOU1NMX05PX01ENAorIAlFVlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOwor ICNlbmRpZgorQEAgLTExMSw0ICsxMTYsMzIgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0 cyh2b2lkKQorICNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKKyAJRVZQX2FkZF9kaWdlc3Qo RVZQX3doaXJscG9vbCgpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9Cisr CWVsc2UKKysJCXsKKysjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9Q RU5TU0xfTk9fU0hBMSkKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7CisrCUVWUF9hZGRf ZGlnZXN0X2FsaWFzKFNOX3NoYTEsInNzbDMtc2hhMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlh cyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24sU05fc2hhMVdpdGhSU0EpOworKyNpZm5kZWYgT1BF TlNTTF9OT19EU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7CisrCUVWUF9hZGRfZGln ZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOworKwlFVlBfYWRkX2Rp Z2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlh cyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19F Q0RTQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7CisrI2VuZGlmCisrI2VuZGlmCisr I2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkp OworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BF TlNTTF9OT19TSEE1MTIKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKKysJRVZQX2Fk ZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjZW5kaWYKKysJCX0KKysjZW5kaWYKKyAJfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9ldnAvZGlnZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2Rp Z2VzdC5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg4MzA2 MTc1ICswMjAwCitAQCAtMTQyLDkgKzE0Miw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01E X0NUWCAqY3R4LCBjb25zCisgCXJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5V TEwpOworIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9m IHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwor KyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8K KysKKytzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKKysJeyBGSVBTX0VSUk9S X0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF91 cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQorKwl7 IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9CisrCisrc3Rh dGljIGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQorKwl7 IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KKysKKytzdGF0 aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9CisrCXsKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJ YmFkX2luaXQsCisrCWJhZF91cGRhdGUsCisrCWJhZF9maW5hbCwKKysJTlVMTCwKKysJTlVMTCwK KysJTlVMTCwKKysJMCwKKysJezAsMCwwLDB9LAorKwl9OworKworKyNlbmRpZgorKworIGludCBF VlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5H SU5FICppbXBsKQorIAl7CisgCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhf RkxBR19DTEVBTkVEKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOworKwkJ cmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorIAkv KiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFs IidkIGNvbnRleHRzCisgCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVO R0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworQEAgLTIwMSw2ICsyNDIsMTggQEAgaW50IEVW UF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYworICNlbmRpZgorIAlpZiAoY3R4LT5k aWdlc3QgIT0gdHlwZSkKKyAJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19t b2RlKCkpCisrCQkJeworKwkJCWlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykg CisrCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykp CisrCQkJCXsKKysJCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNB QkxFRF9GT1JfRklQUyk7CisrCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKKysJCQkJcmV0dXJu IDA7CisrCQkJCX0KKysJCQl9CisrI2VuZGlmCisgCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5k aWdlc3QtPmN0eF9zaXplKQorIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworIAkJY3R4 LT5kaWdlc3Q9dHlwZTsKK0BAIC0yMjksMjYgKzI4MiwxNSBAQCBza2lwX3RvX2luaXQ6CisgCQl9 CisgCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQpCisgCQlyZXR1cm4g MTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXsKKy0JCWlm IChGSVBTX2RpZ2VzdGluaXQoY3R4LCB0eXBlKSkKKy0JCQlyZXR1cm4gMTsKKy0JCU9QRU5TU0xf ZnJlZShjdHgtPm1kX2RhdGEpOworLQkJY3R4LT5tZF9kYXRhID0gTlVMTDsKKy0JCXJldHVybiAw OworLQkJfQorLSNlbmRpZgorIAlyZXR1cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKKyAJfQor IAorIGludCBFVlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGNvdW50KQorIAl7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlyZXR1cm4gRklQ U19kaWdlc3R1cGRhdGUoY3R4LCBkYXRhLCBjb3VudCk7CistI2Vsc2UKKy0JcmV0dXJuIGN0eC0+ dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworICNlbmRp ZgorKwlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEsY291bnQpOworIAl9CisgCisgLyogVGhl IGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9t IHRoZSBjb250ZXh0ICovCitAQCAtMjYzLDExICszMDUsMTEgQEAgaW50IEVWUF9EaWdlc3RGaW5h bChFVlBfTURfQ1RYICpjdHgsIHVucworIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRo aXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLworIGludCBFVlBf RGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWdu ZWQgaW50ICpzaXplKQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlyZXR1cm4gRklQU19k aWdlc3RmaW5hbChjdHgsIG1kLCBzaXplKTsKKy0jZWxzZQorIAlpbnQgcmV0OworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlPUEVO U1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8PSBFVlBfTUFYX01EX1NJWkUpOworIAly ZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7CisgCWlmIChzaXplICE9IE5VTEwpCitAQCAt Mjc5LDcgKzMyMSw2IEBAIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LAor IAkJfQorIAltZW1zZXQoY3R4LT5tZF9kYXRhLDAsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAJ cmV0dXJuIHJldDsKKy0jZW5kaWYKKyAJfQorIAorIGludCBFVlBfTURfQ1RYX2NvcHkoRVZQX01E X0NUWCAqb3V0LCBjb25zdCBFVlBfTURfQ1RYICppbikKK0BAIC0zNzYsNyArNDE3LDYgQEAgdm9p ZCBFVlBfTURfQ1RYX2Rlc3Ryb3koRVZQX01EX0NUWCAqY3R4KQorIC8qIFRoaXMgY2FsbCBmcmVl cyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0ICovCisgaW50IEVWUF9NRF9D VFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCisgCXsKKy0jaWZuZGVmIE9QRU5TU0xfRklQUwor IAkvKiBEb24ndCBhc3N1bWUgY3R4LT5tZF9kYXRhIHdhcyBjbGVhbmVkIGluIEVWUF9EaWdlc3Rf RmluYWwsCisgCSAqIGJlY2F1c2Ugc29tZXRpbWVzIG9ubHkgY29waWVzIG9mIHRoZSBjb250ZXh0 IGFyZSBldmVyIGZpbmFsaXNlZC4KKyAJICovCitAQCAtMzg5LDcgKzQyOSw2IEBAIGludCBFVlBf TURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorIAkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ bWRfZGF0YSxjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpOworIAkJT1BFTlNTTF9mcmVlKGN0eC0+bWRf ZGF0YSk7CisgCQl9CistI2VuZGlmCisgCWlmIChjdHgtPnBjdHgpCisgCQlFVlBfUEtFWV9DVFhf ZnJlZShjdHgtPnBjdHgpOworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK0BAIC0zOTgsOSAr NDM3LDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCisgCQkgKiBm dW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KKyAJCUVOR0lO RV9maW5pc2goY3R4LT5lbmdpbmUpOworICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0J RklQU19tZF9jdHhfY2xlYW51cChjdHgpOworLSNlbmRpZgorIAltZW1zZXQoY3R4LCdcMCcsc2l6 ZW9mICpjdHgpOworIAorIAlyZXR1cm4gMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9hZXMuYworLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6 MzUuMDQ4MzA1MjcyICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9lX2Flcy5j CTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg5MzA2MTk4ICswMjAwCitAQCAtNTYsNyArNTYsNiBAQAor ICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKyAjaW5jbHVk ZSAiZXZwX2xvY2wuaCIKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlICJtb2Rlc19s Y2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgCitAQCAtNzMwLDcgKzcyOSw3IEBA IHN0YXRpYyBpbnQgYWVzX2djbV9jdHJsKEVWUF9DSVBIRVJfQ1RYICoKKyAJCWlmIChhcmcgPD0g MCkKKyAJCQlyZXR1cm4gMDsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAoRklQU19tb2R1 bGVfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQor KwkJaWYgKEZJUFNfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBT X0FMTE9XKQorIAkJCQkJCSAmJiBhcmcgPCAxMikKKyAJCQlyZXR1cm4gMDsKKyAjZW5kaWYKK0BA IC0xMTg5LDcgKzExODgsNyBAQCBzdGF0aWMgaW50IGFlc194dHNfY2lwaGVyKEVWUF9DSVBIRVJf Q1RYCisgCQlyZXR1cm4gMDsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisgCS8qIFJlcXVpcmVtZW50 IG9mIFNQODAwLTM4RSAqLworLQlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoY3R4LT5mbGFn cyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCisrCWlmIChGSVBTX21vZGUoKSAm JiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgorIAkJCShs ZW4gPiAoMVVMPDwyMCkqMTYpKQorIAkJeworIAkJRVZQZXJyKEVWUF9GX0FFU19YVFNfQ0lQSEVS LCBFVlBfUl9UT09fTEFSR0UpOworQEAgLTEzODYsNCArMTM4NSwzIEBAIEJMT0NLX0NJUEhFUl9j dXN0b20oTklEX2FlcywxOTIsMSwxMixjY20KKyBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMs MjU2LDEsMTIsY2NtLENDTSxFVlBfQ0lQSF9GTEFHX0ZJUFN8Q1VTVE9NX0ZMQUdTKQorIAorICNl bmRpZgorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9lX2RlczMu Yy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9kZXMzLmMKKy0tLSBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMTQtMTAt MTYgMTM6MTk6MzUuMDg5MzA2MTk4ICswMjAwCitAQCAtNjUsOCArNjUsNiBAQAorICNpbmNsdWRl IDxvcGVuc3NsL2Rlcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAKKy0jaWZuZGVm IE9QRU5TU0xfRklQUworLQorIHN0YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVS X0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgCQkJICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKml2LGludCBlbmMpOworIAorQEAgLTIwOCw5ICsyMDYsOSBAQCBzdGF0aWMgaW50 IGRlc19lZGUzX2NmYjhfY2lwaGVyKEVWUF9DSVBICisgICAgIH0KKyAKKyBCTE9DS19DSVBIRVJf ZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKKy0J CQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZV9pbml0X2tleSwgTlVMTCwgCistCQkJRVZQX0NJ UEhFUl9zZXRfYXNuMV9pdiwKKy0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJ UEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04x LAorKwkJCWRlc19lZGVfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMz X2N0cmwpCisgCisgI2RlZmluZSBkZXNfZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9j aXBoZXIKK0BAIC0yMTksMjEgKzIxNywyMSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBE RVNfRURFX0tFWSwKKyAjZGVmaW5lIGRlc19lZGUzX2VjYl9jaXBoZXIgZGVzX2VkZV9lY2JfY2lw aGVyCisgCisgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVz X2VkZTMsIDgsIDI0LCA4LCA2NCwKKy0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5p dF9rZXksIE5VTEwsIAorLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xF VlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCQlkZXNfZWRlM19pbml0X2tleSwKKysJCQlO VUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2Nm YihkZXNfZWRlMyxERVNfRURFX0tFWSxOSURfZGVzX2VkZTMsMjQsOCwxLAorLQkJICAgICBFVlBf Q0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhF Ul9zZXRfYXNuMV9pdiwKKy0JCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9D SVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNO MSwKKysJCSAgICAgZGVzX2VkZTNfaW5pdF9rZXksCisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEws CisgCQkgICAgIGRlczNfY3RybCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxE RVNfRURFX0tFWSxOSURfZGVzX2VkZTMsMjQsOCw4LAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tF WSwgZGVzX2VkZTNfaW5pdF9rZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9p diwKKy0JCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZ fEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAg ZGVzX2VkZTNfaW5pdF9rZXksCisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRl czNfY3RybCkKKyAKKyBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFgg KmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorQEAgLTMxMyw0ICszMTEsMyBAQCBjb25z dCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTModm9pZCkKKyAJcmV0dXJuICZkZXNfZWRlM19lY2I7 CisgfQorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2 cC9lX251bGwuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9udWxsLmMKKy0tLSBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1Mzoz OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfbnVsbC5j CTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg5MzA2MTk4ICswMjAwCitAQCAtNjEsOCArNjEsNiBAQAor ICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4K KyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworLQorIHN0YXRpYyBpbnQgbnVsbF9pbml0X2tleShF VlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgCWNvbnN0IHVu c2lnbmVkIGNoYXIgKml2LGludCBlbmMpOworIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJ UEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorQEAgLTcxLDcgKzY5LDcgQEAgc3Rh dGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9CisgCXsKKyAJTklEX3VuZGVmLAorIAkxLDAs MCwKKy0JMCwKKysJRVZQX0NJUEhfRkxBR19GSVBTLAorIAludWxsX2luaXRfa2V5LAorIAludWxs X2NpcGhlciwKKyAJTlVMTCwKK0BAIC0xMDEsNCArOTksMyBAQCBzdGF0aWMgaW50IG51bGxfY2lw aGVyKEVWUF9DSVBIRVJfQ1RYICpjCisgCQltZW1jcHkoKGNoYXIgKilvdXQsKGNvbnN0IGNoYXIg KilpbixpbmwpOworIAlyZXR1cm4gMTsKKyAJfQorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWovY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZw L2V2cF9lbmMuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJ MjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZXZwL2V2cF9lbmMuYwkyMDE0LTEwLTE2IDEzOjIxOjU3LjA2NDUxMTM1MCArMDIwMAor QEAgLTcwLDE3ICs3MCw1OCBAQAorICNpbmNsdWRlICJjb25zdGFudF90aW1lX2xvY2wuaCIKKyAj aW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistI2RlZmluZSBN X2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgRklQU19jaXBoZXIoY3R4LCBvdXQsIGluLCBp bmwpCistI2Vsc2UKKyAjZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgt PmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQorLSNlbmRpZgorIAorIAorIGNv bnN0IGNoYXIgRVZQX3ZlcnNpb25bXT0iRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisr I2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRy YXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMg aW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50 IGJhZF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwK KysJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKysJeyBGSVBTX0VSUk9S X0lHTk9SRUQoIkNpcGhlciBpbml0Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9k b19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCSBj b25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKysJeyBGSVBTX0VSUk9S X0lHTk9SRUQoIkNpcGhlciB1cGRhdGUiKTsgcmV0dXJuIDA7fQorKworKy8qIE5COiBubyBjbGVh bnVwIGJlY2F1c2UgaXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLworKworK3N0YXRp YyBpbnQgYmFkX3NldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQor Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7IHJldHVybiAwO30KKytz dGF0aWMgaW50IGJhZF9nZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5 cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBnZXRfYXNuMSIpOyByZXR1cm4gMDt9 Cisrc3RhdGljIGludCBiYWRfY3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50 IGFyZywgdm9pZCAqcHRyKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsg cmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQorKwl7 CisrCTAsCisrCTAsCisrCTAsCisrCTAsCisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfZG9fY2lw aGVyLAorKwlOVUxMLAorKwkwLAorKwliYWRfc2V0X2FzbjEsCisrCWJhZF9nZXRfYXNuMSwKKysJ YmFkX2N0cmwsCisrCU5VTEwKKysJfTsKKysKKysjZW5kaWYKKysKKyB2b2lkIEVWUF9DSVBIRVJf Q1RYX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQoY3R4LDAsc2l6ZW9m KEVWUF9DSVBIRVJfQ1RYKSk7CisgCS8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCisgCX0KK0BAIC0x MTIsNiArMTUzLDE0IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QK KyAJCQllbmMgPSAxOworIAkJY3R4LT5lbmNyeXB0ID0gZW5jOworIAkJfQorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIo RklQU19GX0VWUF9DSVBIRVJJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Cisr CQljdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlm CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBu b3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRo aXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVh c2luZworQEAgLTE3MCwxMCArMjE5LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBI RVJfQ1RYICpjdAorIAkJCWN0eC0+ZW5naW5lID0gTlVMTDsKKyAjZW5kaWYKKyAKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistCQlpZiAoRklQU19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfY2lwaGVy aW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKKy0jZW5kaWYKKyAJCWN0eC0+Y2lwaGVy PWNpcGhlcjsKKyAJCWlmIChjdHgtPmNpcGhlci0+Y3R4X3NpemUpCisgCQkJeworQEAgLTIwNywx MCArMjUyLDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorICNp Zm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyBza2lwX3RvX2luaXQ6CisgI2VuZGlmCistI2lmZGVm IE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4gRklQU19jaXBoZXJp bml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOworLSNlbmRpZgorIAkvKiB3ZSBhc3N1bWUg YmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBkYXRlICovCisgCU9QRU5TU0xf YXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDEKKyAJICAgIHx8IGN0eC0+Y2lwaGVy LT5ibG9ja19zaXplID09IDgKK0BAIC0yNTAsNiArMjkxLDIyIEBAIHNraXBfdG9faW5pdDoKKyAJ CX0KKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJLyogQWZ0ZXIgJ2tleScgaXMgc2V0 IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KKysJICogU28g b25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KKysJICovCisr CWlmIChrZXkgJiYgRklQU19tb2RlKCkpCisrCQl7CisrCQlpZiAoIShjdHgtPmNpcGhlci0+Zmxh Z3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9G TEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQl7CisrCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJ TklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrCQkJY3R4LT5jaXBoZXIgPSAmYmFk X2NpcGhlcjsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKGtl eSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsK KyAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOworIAl9 CitAQCAtNTc1LDcgKzYzMiw2IEBAIHZvaWQgRVZQX0NJUEhFUl9DVFhfZnJlZShFVlBfQ0lQSEVS X0NUWAorIAorIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQor IAl7CistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAJaWYgKGMtPmNpcGhlciAhPSBOVUxMKQorIAkJ eworIAkJaWYoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAoYykpCitA QCAtNTg2LDE2ICs2NDIsMTIgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhF Ul9DVAorIAkJfQorIAlpZiAoYy0+Y2lwaGVyX2RhdGEpCisgCQlPUEVOU1NMX2ZyZWUoYy0+Y2lw aGVyX2RhdGEpOworLSNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJaWYgKGMt PmVuZ2luZSkKKyAJCS8qIFRoZSBFVlBfQ0lQSEVSIHdlIHVzZWQgYmVsb25ncyB0byBhbiBFTkdJ TkUsIHJlbGVhc2UgdGhlCisgCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0 aGlzIHJlYXNvbi4gKi8KKyAJCUVOR0lORV9maW5pc2goYy0+ZW5naW5lKTsKKyAjZW5kaWYKKy0j aWZkZWYgT1BFTlNTTF9GSVBTCistCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKGMpOworLSNlbmRp ZgorIAltZW1zZXQoYywwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAlyZXR1cm4gMTsKKyAJ fQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9ldnAvZXZwLmgKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2 cC5oLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNC45NDAzMDI4MzQgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZXZwL2V2cC5oCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkwMzA2MjIwICsw MjAwCitAQCAtNzUsNiArNzUsMTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyAjZW5k aWYKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorKworIC8qCisgI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgorICNkZWZpbmUg RVZQX1JDNF9LRVlfU0laRQkJMTYKK0BAIC0yODIsMTAgKzI4Niw2IEBAIHN0cnVjdCBlbnZfbWRf Y3R4X3N0CisgCQkJCQkJKiBjbGVhbmVkICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVV U0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQorIAkJCQkJCSogaW4gRVZQ X01EX0NUWF9jbGVhbnVwICovCistLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQg aW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCistICogc28gd2UgZG9uJ3QgYWNjaWRlbnRh bGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgorLSAqLworLQorICNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Yg bm9uIEZJUFMgZGlnZXN0CisgCQkJCQkJICogaW4gRklQUyBtb2RlICovCisgCitAQCAtMjk3LDYg KzI5NywxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorICNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9D VFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9D VFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCisrI2RlZmluZSBNX0VWUF9NRF9D VFhfRkxBR19QU1NfU0FMVChjdHgpIFwKKysJCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8q IHNlZWQgbGVuZ3RoICovCisrI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZG RgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLworIAorICNk ZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0aWFsaXpl IG1kX2RhdGEgKi8KKyAKK0BAIC0zNDgsMTUgKzM1MiwxNSBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9z dAorIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUg CUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAorIC8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlv bmFsIGNvcHlpbmcgbG9naWMgKi8KKy0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0 MDAKKysjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCisgLyogQWxsb3cgdXNl IGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEJMHgxMDAwCisgLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZC MSBtb2RlIG9ubHkgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAw MAorIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KKy0jZGVmaW5l CQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwMAorKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQ UwkJMHg0MDAKKyAvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCistI2Rl ZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMDAKKysjZGVmaW5lCQlFVlBf Q0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCisgLyogQ2lwaGVyIGhhbmRsZXMgYW55IGFu ZCBhbGwgcGFkZGluZyBsb2dpYyBhcyB3ZWxsCisgICogYXMgZmluYWxpc2F0aW9uLgorICAqLwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZXZwL2V2cF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9l dnAvZXZwX2xpYi5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDE0LTEwLTE2IDEzOjE5OjM1 LjA5MDMwNjIyMCArMDIwMAorQEAgLTE5MCw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhf YmxvY2tfc2l6ZShjb25zdCBFVlBfCisgCisgaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWdu ZWQgaW50IGlubCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9j aGVjaygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0 LGluLGlubCk7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZw X2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6 MzQuOTMzMzAyNjc2ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfbG9j bC5oCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkwMzA2MjIwICswMjAwCitAQCAtMjU4LDEwICsyNTgs OSBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMjX2VjYih2b2lkCisgCUJMT0NLX0NJ UEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtz Y2hlZCkgXAorIAlCTE9DS19DSVBIRVJfZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVj dCwgXAorIAkJCSAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xl biwgY2JpdHMsIFwKKy0JCQkgICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCistCQkJ ICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LCBcCistCQkJICAgICBFVlBfQ0lQSEVSX2dldF9h c24xX2l2LCBcCistCQkJICAgICBOVUxMKQorKwkJCSAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEsIFwKKysJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKQorKworIAorIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKKyAJeworQEAgLTM2NywxMSArMzY2 LDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXworICNkZWZpbmUg TUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5pdAorICNkZWZpbmUgTURDMl9Jbml0CXByaXZhdGVfTURD Ml9Jbml0CisgI2RlZmluZSBTSEFfSW5pdAlwcml2YXRlX1NIQV9Jbml0CistI2RlZmluZSBTSEEx X0luaXQJcHJpdmF0ZV9TSEExX0luaXQKKy0jZGVmaW5lIFNIQTIyNF9Jbml0CXByaXZhdGVfU0hB MjI0X0luaXQKKy0jZGVmaW5lIFNIQTI1Nl9Jbml0CXByaXZhdGVfU0hBMjU2X0luaXQKKy0jZGVm aW5lIFNIQTM4NF9Jbml0CXByaXZhdGVfU0hBMzg0X0luaXQKKy0jZGVmaW5lIFNIQTUxMl9Jbml0 CXByaXZhdGVfU0hBNTEyX0luaXQKKyAKKyAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9z ZXRfa2V5CisgI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0z NzksNyArMzczLDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXwor ICNkZWZpbmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5CisgI2RlZmluZSBSQzJf c2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5CisgI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRl X1JDNF9zZXRfa2V5CistI2RlZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQJcHJpdmF0ZV9ERVNf c2V0X2tleV91bmNoZWNrZWQKKyAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1l bGxpYV9zZXRfa2V5CisgCisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8v ZXZwL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9NYWtlZmlsZQorLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvTWFrZWZpbGUuZmlwcwkyMDE0LTEwLTE1IDE0OjU0 OjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvTWFrZWZp bGUJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTAzMDYyMjAgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBA IExJQlNSQz0gZW5jb2RlLmMgZGlnZXN0LmMgZXZwX2VuYy5jIGV2cF8KKyAJYmlvX21kLmMgYmlv X2I2NC5jIGJpb19lbmMuYyBldnBfZXJyLmMgZV9udWxsLmMgXAorIAljX2FsbC5jIGNfYWxsYy5j IGNfYWxsZC5jIGV2cF9saWIuYyBiaW9fb2suYyBcCisgCWV2cF9wa2V5LmMgZXZwX3BiZS5jIHA1 X2NycHQuYyBwNV9jcnB0Mi5jIFwKKy0JZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBt ZXRoX2duLmMgbV9zaWd2ZXIuYyBldnBfZmlwcy5jCVwKKysJZV9vbGQuYyBwbWV0aF9saWIuYyBw bWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBcCisgCWVfYWVzX2NiY19obWFjX3NoYTEu YyBlX3JjNF9obWFjX21kNS5jCisgCisgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5j Lm8gZXZwX2tleS5vIGV2cF9hY25mLm8gZXZwX2NuZi5vIFwKK0BAIC00MSw3ICs0MSw3IEBAIExJ Qk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF8KKyAJYmlvX21kLm8gYmlvX2I2 NC5vIGJpb19lbmMubyBldnBfZXJyLm8gZV9udWxsLm8gXAorIAljX2FsbC5vIGNfYWxsYy5vIGNf YWxsZC5vIGV2cF9saWIubyBiaW9fb2subyBcCisgCWV2cF9wa2V5Lm8gZXZwX3BiZS5vIHA1X2Ny cHQubyBwNV9jcnB0Mi5vIFwKKy0JZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRo X2duLm8gbV9zaWd2ZXIubyBldnBfZmlwcy5vIFwKKysJZV9vbGQubyBwbWV0aF9saWIubyBwbWV0 aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBcCisgCWVfYWVzX2NiY19obWFjX3NoYTEubyBl X3JjNF9obWFjX21kNS5vCisgCisgU1JDPSAkKExJQlNSQykKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9k c3MuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzCTIwMTQtMTAt MTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2 cC9tX2Rzcy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkwMzA2MjIwICswMjAwCitAQCAtNjYsNyAr NjYsNiBAQAorICNlbmRpZgorIAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKy0jaWZuZGVmIE9Q RU5TU0xfRklQUworIAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0 dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitAQCAtODIsNyArODEsNyBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIGRzYV9tZD0KKyAJTklEX2RzYVdpdGhTSEEsCisgCU5JRF9kc2FXaXRoU0hB LAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCisrCUVW UF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQsCisgCXVwZGF0 ZSwKKyAJZmluYWwsCitAQCAtOTgsNCArOTcsMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9kc3Modm9p ZCkKKyAJcmV0dXJuKCZkc2FfbWQpOworIAl9CisgI2VuZGlmCistI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2V2cC9tX2RzczEuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9kc3MxLmMu ZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9ldnAvbV9kc3MxLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTEzMDYyNDMgKzAy MDAKK0BAIC02OCw4ICs2OCw2IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2VuZGlm CisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMgCistCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9D VFggKmN0eCkKKyAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KKyAKK0BAIC04 NCw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KKyAJTklEX2RzYSwKKyAJ TklEX2RzYVdpdGhTSEExLAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtF WV9ESUdFU1QsCisrCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCisg CWluaXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAtMTAwLDQgKzk4LDMgQEAgY29uc3QgRVZQ X01EICpFVlBfZHNzMSh2b2lkKQorIAlyZXR1cm4oJmRzczFfbWQpOworIAl9CisgI2VuZGlmCist I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fbWQyLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZXZwL21fbWQyLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUxOjA2LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9tZDIuYwkyMDE0LTEwLTE2IDEzOjE5OjM1 LjA5MTMwNjI0MyArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5TU0xfTk9f UlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgImV2cF9s b2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4g TUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9zaGExLmMKKy0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1 MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fc2hh MS5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkxMzA2MjQzICswMjAwCitAQCAtNTksOCArNTksNiBA QAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorIAorLSNpZm5k ZWYgT1BFTlNTTF9GSVBTCistCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorIAorICNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorQEAgLTg1LDcgKzgzLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBz aGExX21kPQorIAlOSURfc2hhMSwKKyAJTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hB X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBf TURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05B VFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAor IAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorQEAgLTEyMiw3ICsxMjEsOCBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIHNoYTIyNF9tZD0KKyAJTklEX3NoYTIyNCwKKyAJTklEX3NoYTIyNFdpdGhS U0FFbmNyeXB0aW9uLAorIAlTSEEyMjRfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtF WV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwK KysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyMjQsCisgCXVwZGF0ZTI1NiwKKyAJZmluYWwy NTYsCitAQCAtMTQxLDcgKzE0MSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2X21kPQor IAlOSURfc2hhMjU2LAorIAlOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTI1Nl9E SUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01E X0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJ aW5pdDI1NiwKKyAJdXBkYXRlMjU2LAorIAlmaW5hbDI1NiwKK0BAIC0xNzIsNyArMTczLDggQEAg c3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9CisgCU5JRF9zaGEzODQsCisgCU5JRF9zaGEz ODRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMzg0X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisr CUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0Mzg0LAorIAl1cGRhdGU1MTIsCisg CWZpbmFsNTEyLAorQEAgLTE5MSw3ICsxOTMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUx Ml9tZD0KKyAJTklEX3NoYTUxMiwKKyAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAorIAlT SEE1MTJfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF fEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0Rf U0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJ UFMsCisgCWluaXQ1MTIsCisgCXVwZGF0ZTUxMiwKKyAJZmluYWw1MTIsCitAQCAtMjA2LDQgKzIw OSwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTUxMih2b2lkKQorIAl7IHJldHVybigmc2hhNTEy X21kKTsgfQorICNlbmRpZgkvKiBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIgKi8KKyAKKy0jZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZXZwL3Bfc2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRv L2V2cC9wX3NpZ24uYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDE0LTEwLTE2IDEzOjE5OjM1 LjA5MTMwNjI0MyArMDIwMAorQEAgLTYxLDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv eDUwOS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorIAorICNpZmRlZiB1bmRlZgorIHZv aWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQorQEAgLTEwMyw2 ICsxMDQsMjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZworIAkJ CWdvdG8gZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBj dHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQ X01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRk aW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCWlm IChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJCWludCBz YWx0bGVuOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0Ff UEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRsZW4gPSBN X0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJCWlmIChzYWx0bGVuID09IEVWUF9N RF9DVFhfRkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNlIGlmIChz YWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9IC0yOwor KwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikg PD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgs IHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKKyAJCQlnb3RvIGVycjsKKyAJCSpzaWds ZW4gPSBzbHRtcDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvcF92ZXJpZnku Yy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvcF92ZXJpZnkuYworLS0tIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCTIw MTQtMTAtMTYgMTM6MTk6MzUuMDkxMzA2MjQzICswMjAwCitAQCAtNjEsNiArNjEsNyBAQAorICNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisg aW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KnNpZ2J1ZiwKKyAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKK0BA IC04OCw2ICs4OSwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29u CisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtj dHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3Mg JiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNh X3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOwor KwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7CisrCQkJ aW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgs IFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJc2FsdGxl biA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4gPT0g RVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVsc2Ug aWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVuID0g LTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0 bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlpID0gRVZQX1BLRVlfdmVyaWZ5 KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOworIAkJZXJyOgorIAkJRVZQX1BLRVlf Q1RYX2ZyZWUocGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Flc2F2cy5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2 cy5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTIzMDYyNjUgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMJMjAxNC0xMC0xNiAxMzoxOToz NS4wOTIzMDYyNjUgKzAyMDAKK0BAIC0wLDAgKzEsOTM5IEBACisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq CisrICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KysgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0aW9uIFN1aXRlCisrICBUZXN0IFByb2dyYW0K KysKKysgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYtT05FIENvcnBvcmF0aW9uCisrICAy MDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2VybWFudG93biwgTUQgMjA4NzQKKysg IFUuUy5BLgorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+ CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNT TF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHBy aW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisr I2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRs LmgiCisrCisrI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgorKworKyNkZWZpbmUgVkVSQk9TRSAw CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov CisrCisraW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2Rl LCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIg KmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwor KwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0 LCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7 CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJeworKwlzd2l0 Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhf Y2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18x OTJfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Fl c18yNTZfY2JjKCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJj YXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsK KysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfZWNiKCk7CisrCQlicmVhazsK KysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfZWNiKCk7CisrCQlicmVh azsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfZWNiKCk7CisrCQli cmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCMTI4 IikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJ Y2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTky OgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNh c2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMTI4KCk7CisrCQlicmVhazsKKysJ CX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09 IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhl ciA9IEVWUF9hZXNfMTI4X29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNp cGhlciA9IEVWUF9hZXNfMTkyX29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJ CWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAg ZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6 KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxKCk7Cisr CQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMSgp OworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Nm YjEoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1v ZGUsIkNGQjgiKSkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4Ogor KwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiOCgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5 MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjgoKTsKKysJCWJyZWFrOworKworKwkJY2Fz ZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmI4KCk7CisrCQlicmVhazsKKysJCX0K KysJfQorKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9k ZSk7CisrCXJldHVybiAwOworKwl9CisrICAgIGlmICghY2lwaGVyKQorKwl7CisrCXByaW50Zigi SW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7CisrCXJldHVybiAwOyAKKysJfQorKyAg ICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRp cikgPD0gMCkKKysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikp CisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhf QklUUyk7CisrICAgIGlmIChkaXIpCisrCQlFVlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4dCwgcGxh aW50ZXh0LCBsZW4pOworKwllbHNlCisrCQlFVlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0LCBjaXBo ZXJ0ZXh0LCBsZW4pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0g eyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwi RUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIxMjgifTsKKytlbnVtIE1vZGUge0NCQywgRUNC LCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07CisrZW51bSBYQ3J5cHQge1hERUNSWVBULCBYRU5D UllQVH07CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisrLyogIE1vbnRl IENhcmxvIFRlc3RzICAgICAgICAgICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrCisrLyojZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICgoYiklOCkpJjEpKi8K KysvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoKGIp JTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSovCisrCisrI2RlZmluZSBnYihhLGIpICgoKGEpWyhi KS84XSA+PiAoNy0oYiklOCkpJjEpCisrI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChh KVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkpfCghISh2KSA8PCAoNy0oYiklOCkpKQorKworK2lu dCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkgICBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICph S2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCisrCSAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRl eHQsIGludCBsZW4sCisrCSAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsK KysgICAgdW5zaWduZWQgY2hhciBrZXlbMTAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgaXZb MTAxXVtBRVNfQkxPQ0tfU0laRV07CisrICAgIHVuc2lnbmVkIGNoYXIgcHRleHRbMTAwMV1bMzJd OworKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEwMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hh ciBjaXBoZXJ0ZXh0WzY0KzRdOworKyAgICBpbnQgaSwgaiwgbiwgbjEsIG4yOworKyAgICBpbnQg aW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ovODsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4Owor KyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAobGVuID4gMzIpCisr CXsKKysJcHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8PDxcblxu IiwgCisrCSAgICAgICBhbW9kZSwgYWtleXN6KTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGZv ciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1vZGUpCisrCWlmIChzdHJjbXAoYW1vZGUsIHRf bW9kZVtpbW9kZV0pID09IDApCisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisr CXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVy biAtMTsKKysJfQorKworKyAgICBtZW1jcHkoa2V5WzBdLCBhS2V5LCBua2V5c3opOworKyAgICBp ZiAoaVZlYykKKysJbWVtY3B5KGl2WzBdLCBpVmVjLCBBRVNfQkxPQ0tfU0laRSk7CisrICAgIGlm IChkaXIgPT0gWEVOQ1JZUFQpCisrCW1lbWNweShwdGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAg ZWxzZQorKwltZW1jcHkoY3RleHRbMF0sIHRleHQsIGxlbik7CisrICAgIGZvciAoaSA9IDA7IGkg PCAxMDA7ICsraSkKKysJeworKwkvKiBwcmludGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7ICovCisr CWlmIChpID4gMCkKKysJICAgIHsKKysJICAgIGZwcmludGYocmZwLCJDT1VOVCA9ICVkXG4iLGkp OworKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5W2ldLG5rZXlzeixyZnAsMCk7CisrCSAgICBp ZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICovCisrCQlPdXRwdXRWYWx1ZSgiSVYiLGl2W2ldLEFF U19CTE9DS19TSVpFLHJmcCwwKTsKKysJICAgIC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50 ZXh0ICovCisrCSAgICBPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRbMF0gOiBj dGV4dFswXSxsZW4scmZwLAorKwkJCWltb2RlID09IENGQjEpOworKwkgICAgfQorKwlmb3IgKGog PSAwOyBqIDwgMTAwMDsgKytqKQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsK KysJICAgIGNhc2UgRUNCOgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7IC8qIHNldCB1cCBlbmNy eXB0aW9uICovCisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlb aV0sIE5VTEwsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwor KwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBpZiAoZGlyID09IFhFTkNS WVBUKQorKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNl CisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQl7CisrCQkJRVZQ X0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkJbWVtY3B5KHB0ZXh0 W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVW UF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4 dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisr CSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOiAgCisrCSAgICBjYXNlIENGQjEyODoKKysJ CWlmIChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUs IGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEg PSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlm IChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwor KwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAg fQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsK KysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1j cHkocHRleHRbaisxXSwgY3RleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAgZWxzZQorKwkJ CXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCQlt ZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJ YnJlYWs7CisrCisrCSAgICBjYXNlIENGQjg6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsKKysJ CSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAor KwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0 W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAg IGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRl eHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0s IGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkg ICAgeworKwkJICAgIGlmIChqIDwgMTYpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sICZpdltpXVtq XSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMTZd LCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikK KysJCQltZW1jcHkoY3RleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJ CQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJYnJl YWs7CisrCisrCSAgICBjYXNlIENGQjE6CisrCQlpZihqID09IDApCisrCQkgICAgeworKyNpZiAw CisrCQkgICAgLyogY29tcGVuc2F0ZSBmb3Igd3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1dCBmaWxl ICovCisrCQkgICAgaWYoaSA9PSAwKQorKwkJCXB0ZXh0WzBdWzBdPDw9NzsKKysjZW5kaWYKKysJ CSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGtleVtpXSxpdltpXSxkaXIsCisr CQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAg eworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4 dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwg cHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKworKwkJICAgIH0KKysJCWlmKGRpciA9PSBYRU5D UllQVCkKKysJCSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihwdGV4dFtqKzFdLDAs Z2IoaXZbaV0saikpOworKwkJICAgIGVsc2UKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoY3RleHRb ai0xMjhdLDApKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmKGogPCAx MjgpCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKKysJCSAgICBlbHNlCisrCQkJ c2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4XSwwKSk7CisrCQkgICAgfQorKwkJYnJlYWs7 CisrCQl9CisrCSAgICB9CisrCS0tajsgLyogcmVzZXQgdG8gbGFzdCBvZiByYW5nZSAqLworKwkv KiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tk aXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRbal0sbGVuLHJmcCwKKysJCSAgICBpbW9kZSA9PSBD RkIxKTsKKysJZnByaW50ZihyZnAsICJcbiIpOyAgLyogYWRkIHNlcGFyYXRvciAqLworKworKwkv KiBDb21wdXRlIG5leHQgS0VZICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7Cisr CSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0 XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8 IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0W2otbjJd WzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4x PTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBo ZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRj aCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0 ZXh0LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAg bWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhl cnRleHQrOCwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNp cGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkg ICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyog Y3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEg PSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBo ZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9 PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsr bjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJ CX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4 OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFr OworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0rOCwg OCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgcHRleHRbal0sIDE2KTsKKysJCSAgICBi cmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFd LCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7CisrCQkg ICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwkvKiBDb21wdXRlIG5leHQga2V5OiBLZXlb aSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KKysJZm9yIChuID0gMDsgbiA8IG5rZXlzejsgKytuKQor KwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1bbl0gXiBjaXBoZXJ0ZXh0W25dOworKwkKKysJLyog Q29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAg ICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQltZW1j cHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAg IGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJCW1lbWNw eShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KHB0ZXh0WzBd LCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZC ODoKKysJCS8qIElWW2krMV0gPSBjdCAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwg MTY7ICsrbjEsIC0tbjIpCisrCQkgICAgaXZbaSsxXVtuMV0gPSBjdGV4dFtqLW4yXVswXTsKKysJ CXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1bMF07CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZC MToKKysJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQorKwkJICAgIHNi KGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJcHRleHRbMF1bMF09Y3RleHRbai0x MjhdWzBdJjB4ODA7CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgewor KwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJbWVtY3B5KGN0 ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNl IENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkgICAgY2FzZSBDRkIxMjg6CisrCQltZW1jcHkoaXZb aSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCW1lbWNweShjdGV4dFswXSwgcHRl eHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjg6Cisr CQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltp KzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJY3RleHRbMF1bMF0gPSBwdGV4dFtqLTE2XVsw XTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEg PCAxMjggOyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihwdGV4dFtqLW4yXSww KSk7CisrCQljdGV4dFswXVswXT1wdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJ fQorKwkgICAgfQorKwl9CisrICAgIAorKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisrLyo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgIyBDb25maWcgaW5mbyBmb3Igdi1vbmUKKysg ICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNCCisrICAjIFN0YXRlIDogRW5jcnlwdCBhbmQg RGVjcnlwdAorKyAgIyBLZXkgTGVuZ3RoIDogMjU2CisrICAjIEZyaSBBdWcgMzAgMDQ6MDc6MjIg UE0KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK2ludCBwcm9jX2ZpbGUo Y2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0s IHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hh ciBpYnVmWzIwNDhdOworKyAgICBjaGFyIHRidWZbMjA0OF07CisrICAgIGludCBpbGVuLCBsZW4s IHJldCA9IDA7CisrICAgIGNoYXIgYWxnb1s4XSA9ICIiOworKyAgICBjaGFyIGFtb2RlWzhdID0g IiI7CisrICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsKKysgICAgaW50IGFrZXlzeiA9IDA7CisrICAg IHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVy ciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysg ICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsKKysgICAg RVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwor KyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZp bGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysK KysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRm KCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihl cnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0 cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NM X1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysj ZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0 cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJm bjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisr CXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZu LCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0 dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1 ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVu ID0gc3RybGVuKGlidWYpOworKwkvKiAgICAgIHByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVw LGlidWYpOyAqLworKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQg cHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBw cmVhbWJsZSAqLworKwkJaWYgKCgqYWxnbyA9PSAnXDAnKSB8fAorKwkJICAgICgqYW1vZGUgPT0g J1wwJykgfHwKKysJCSAgICAoYWtleXN6ID09IDApKQorKwkJICAgIHsKKysJCSAgICBwcmludGYo Ik1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtleVNpemUgKCVzLyVzLyVkKVxuIiwKKysJCQkg ICBhbGdvLGFtb2RlLGFrZXlzeik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNl CisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJ CSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXBy aW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOwor KwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4 cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZiAoYWtleXN6KQorKwkJICAgIHsgLyog aW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUo MCk7CisrCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9 CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYg KHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9PSAwKQorKwkJCXsKKysJCQlzdHJjcHkoYWxnbywg IkFFUyIpOworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlwcCArPSA2OworKwkJCXhwID0g c3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0LCBwcCwg bik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICovCisrCQkJeHAgPSBz dHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3RybGVuKHhwKzEpLTE7 CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0gPSAnXDAnOworKwkJ CS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJU ZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRlc3QsIGFtb2RlKTsKKysJCQl9CisrCQkgICAgZWxz ZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkgTGVuZ3RoIDogIiwgMTMpID09IDApCisrCQkJewor KwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYo IktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7CisrCQkJfQorKwkJICAgIH0KKysJCX0KKysJICAg IGJyZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KKysJICAg IGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0 ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkg ICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5 KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAg ICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJ CWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIp OworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2Ug MjogLyogS0VZID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmKCpp YnVmID09ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VO VCA9ICIsOCkpCisrCQlicmVhazsKKysKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiS0VZ ID0gIiwgNikgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJy ID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWli dWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJ bnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0K KysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7CisrCQlpZiAoc3RyY21wKGFtb2RlLCAi RUNCIikgPT0gMCkKKysJCSAgICB7CisrCQkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVj KSk7CisrCQkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCisr CQkgICAgfQorKwkJZWxzZQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGJyZWFrOworKwor KwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAg IGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRm KCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7Cisr CQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisr CQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0xOwor KwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsK KysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDQ6 IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBp ZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJ cHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAg ZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChh bW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0 KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJ aWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6 ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0K KysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRF WFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVz dCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAg IGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICAgICBkaXIsICh1 bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbiwgCisrCQkJICAgICAgcmZwKSA8IDApCisrCQkJ RVhJVCgxKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rl c3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9 IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBs ZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAs CisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7Cisr CQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLwor KwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQ SEVSVEVYVCA9ICIsIDEzKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7 CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNtcChhbW9k ZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0x LGNpcGhlcnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBo ZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFs aWQgQ0lQSEVSVEVYVFxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAg IH0KKysKKysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJ aWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisr CQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkg ICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAg eworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywg CisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxh aW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQi LCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUs IkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysK KysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKKysJCXsKKysJCWVyciA9IDE7 CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7CisrCQl9CisrCSAgICBlbHNlIGlm IChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQorKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0 ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCX0KKysJICAgIHN0ZXAg PSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgaWYgKHJmcCkKKysJZmNsb3Nl KHJmcCk7CisrICAgIGlmIChhZnApCisrCWZjbG9zZShhZnApOworKyAgICByZXR1cm4gZXJyOwor KyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAorKyAgYSBzZXQg b2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCisrICBBIHNpbmdsZSBm aWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQorKyAgQSBzZXQg b2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKKysg IFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKKysgICAgeworKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVM TDsKKysgICAgRklMRSAqZnAgPSBOVUxMOworKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1 Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOworKworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJy b3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysjZW5kaWYKKysgICAgaWYgKGFyZ2MgPiAxKQorKwl7 CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCisrCSAgICB7CisrCSAgICBk X29wdCA9IDE7CisrCSAgICB9CisrCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikg PT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0ID0gMTsKKysJICAgIGRfb3B0ID0gMDsKKysJICAg IH0KKysJZWxzZQorKwkgICAgeworKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNc biIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChhcmdjIDwgMykK KysJICAgIHsKKysJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOworKwkgICAgcmV0 dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29wdCkKKysJICAgIHJxbGlzdCA9IGFyZ3ZbMl07Cisr CWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNweShmbiwgYXJndlsyXSk7CisrCSAgICByc3BmaWxl ID0gYXJndlszXTsKKysJICAgIH0KKysJfQorKyAgICBpZiAoZF9vcHQpCisrCXsgLyogbGlzdCBv ZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkp CisrCSAgICB7CisrCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOwor KwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiks IGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKKysJICAgIHN0cmNweShy Zm4sIGZuKTsKKysJICAgIGlmIChWRVJCT1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xu IiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXBy aW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJ VCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNp bmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisrCSAgICBwcmludGYoIlByb2Nlc3Np bmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAgewor KwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsK KysJICAgIH0KKysJfQorKyAgICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAgfQorKwor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Nt YWN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rl c3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5j LmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTIzMDYyNjUgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1 LjA5MjMwNjI2NSArMDIwMAorQEAgLTAsMCArMSw1MTcgQEAKKysvKiBmaXBzX2NtYWN0ZXN0LmMg Ki8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn KSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BP cGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3Jh cGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5j b20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICog SHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjZGVmaW5lIE9QRU5T U0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jbWFjLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaWZuZGVmIE9Q RU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAg ICBwcmludGYoIk5vIEZJUFMgQ01BQyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30K KysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlw c191dGwuaCIKKysKKytzdGF0aWMgaW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVSICpjaXBo ZXIsIEZJTEUgKm91dCwgRklMRSAqaW4sCisrCWludCBtb2RlLCBpbnQgS2xlbl9jb3VudHNfa2V5 cywgaW50IGtub3duX2tleWxlbik7Cisrc3RhdGljIGludCBwcmludF9jbWFjX2dlbihjb25zdCBF VlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50 IEtsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCisrCQlpbnQgVGxlbik7 Cisrc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJ TEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCisrCQl1bnNpZ25lZCBj aGFyICpNc2csIGludCBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNYWMsIGludCBNYWNsZW4s CisrCQlpbnQgVGxlbik7CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19jbWFjdGVz dF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZWxzZQorK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBO VUxMOworKwlpbnQgbW9kZSA9IDA7CQkvKiAwID0+IEdlbmVyYXRlLCAxID0+IFZlcmlmeSAqLwor KwlpbnQgS2xlbl9jb3VudHNfa2V5cyA9IDA7IC8qIDAgPT4gS2xlbiBpcyBzaXplIG9mIG9uZSBr ZXkKKysJCQkJICAgICAxID0+IEtsZW4gaXMgYW1vdW50IG9mIGtleXMKKysJCQkJICAqLworKwlp bnQga25vd25fa2V5bGVuID0gMDsJLyogT25seSBzZXQgd2hlbiBLbGVuX2NvdW50c19rZXlzID0g MSAqLworKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSAwOworKwlpbnQgcmV0ID0gMTsKKysJ Zmlwc19hbGd0ZXN0X2luaXQoKTsKKysKKysJd2hpbGUgKGFyZ2MgPiAxICYmIGFyZ3ZbMV1bMF0g PT0gJy0nKQorKwkJeworKwkJc3dpdGNoIChhcmd2WzFdWzFdKQorKwkJCXsKKysJCWNhc2UgJ2En OgorKwkJCXsKKysJCQljaGFyICpwID0gJmFyZ3ZbMV1bMl07CisrCQkJaWYgKCpwID09ICdcMCcp CisrCQkJCXsKKysJCQkJaWYgKGFyZ2MgPD0gMikKKysJCQkJCXsKKysJCQkJCWZwcmludGYoc3Rk ZXJyLCAiT3B0aW9uICVzIG5lZWRzIGEgdmFsdWVcbiIsIGFyZ3ZbMV0pOworKwkJCQkJZ290byBl bmQ7CisrCQkJCQl9CisrCQkJCWFyZ3YrKzsKKysJCQkJYXJnYy0tOworKwkJCQlwID0gJmFyZ3Zb MV1bMF07CisrCQkJCX0KKysJCQlpZiAoIXN0cmNtcChwLCAiYWVzMTI4IikpCisrCQkJCWNpcGhl ciA9IEVWUF9hZXNfMTI4X2NiYygpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgImFlczE5MiIp KQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKKysJCQllbHNlIGlmICghc3RyY21w KHAsICJhZXMyNTYiKSkKKysJCQkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7CisrCQkJZWxz ZSBpZiAoIXN0cmNtcChwLCAidGRlYTMiKSB8fCAhc3RyY21wKHAsICJ0ZGVzMyIpKQorKwkJCQl7 CisrCQkJCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKKysJCQkJS2xlbl9jb3VudHNfa2V5 cyA9IDE7CisrCQkJCWtub3duX2tleWxlbiA9IDg7CisrCQkJCX0KKysJCQllbHNlCisrCQkJCXsK KysJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGFsZ29yaXRobSAlc1xuIiwgcCk7CisrCQkJ CWdvdG8gZW5kOworKwkJCQl9CisrCQkJfQorKwkJCWJyZWFrOworKwkJY2FzZSAnZyc6CisrCQkJ bW9kZSA9IDA7CisrCQkJYnJlYWs7CisrCQljYXNlICd2JzoKKysJCQltb2RlID0gMTsKKysJCQli cmVhazsKKysJCWRlZmF1bHQ6CisrCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiAl c1xuIiwgYXJndlsxXSk7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJYXJndisrOworKwkJYXJn Yy0tOworKwkJfQorKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJ aW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBz dGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICgh aW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9u IGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsK KysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWNtYWNfdGVzdChjaXBoZXIsIG91dCwgaW4s IG1vZGUsCisrCQkJS2xlbl9jb3VudHNfa2V5cywga25vd25fa2V5bGVuKSkKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgY21hYyBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYg KGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQg IT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9Cisr CisrI2RlZmluZSBDTUFDX1RFU1RfTUFYTElORUxFTgkxNTAwMDAKKysKKytpbnQgY21hY190ZXN0 KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKKysJaW50IG1v ZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKQorKwl7CisrCWNoYXIg KmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Cisr CXVuc2lnbmVkIGNoYXIgKipLZXlzID0gTlVMTCwgKk1zZyA9IE5VTEwsICpNYWMgPSBOVUxMOwor Kwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMOworKwlpbnQgQ291bnQsIEtsZW4sIE1sZW4sIFRs ZW47CisrCWxvbmcgS2V5bGVuLCBNc2dsZW4sIE1hY2xlbjsKKysJaW50IHJldCA9IDA7CisrCWlu dCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RFU1RfTUFY TElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RFU1RfTUFYTElORUxF Tik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKwor KwlDb3VudCA9IC0xOworKwlLbGVuID0gLTE7CisrCU1sZW4gPSAtMTsKKysJVGxlbiA9IC0xOwor KworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIENNQUNfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisr CQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29y ZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBT a2lwIGNvbW1lbnRzICovCisrCQlpZiAoa2V5d29yZFswXSA9PSAnIycpCisrCQkJeworKwkJCWlm IChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGlu dWU7CisrCQkJfQorKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxp bmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbTD0y MF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWlmIChmcHV0cyhv bGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJ fQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisr CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisr CQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVl KSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpw ID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7Cisr CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ291bnQiKSkKKysJCQl7CisrCQkJaWYgKENvdW50 ICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUNvdW50ID0gYXRvaSh2YWx1ZSk7 CisrCQkJaWYgKENvdW50IDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLbGVuIikpCisrCQkJeworKwkJCWlmIChLbGVuICE9 IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUtsZW4gPSBhdG9pKHZhbHVlKTsKKysJ CQlpZiAoS2xlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKEtsZW5fY291 bnRzX2tleXMpCisrCQkJCXsKKysJCQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqS2V5 cykgKiBLbGVuKTsKKysJCQkJbWVtc2V0KEtleXMsICdcMCcsIHNpemVvZigqS2V5cykgKiBLbGVu KTsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJeworKwkJCQlLZXlzID0gT1BFTlNTTF9tYWxsb2Mo c2l6ZW9mKCpLZXlzKSk7CisrCQkJCW1lbXNldChLZXlzLCAnXDAnLCBzaXplb2YoKktleXMpKTsK KysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1sZW4iKSkKKysJ CQl7CisrCQkJaWYgKE1sZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTWxl biA9IGF0b2kodmFsdWUpOworKwkJCWlmIChNbGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJUbGVuIikpCisrCQkJewor KwkJCWlmIChUbGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCVRsZW4gPSBh dG9pKHZhbHVlKTsKKysJCQlpZiAoVGxlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2V5IikgJiYgIUtsZW5fY291bnRz X2tleXMpCisrCQkJeworKwkJCWlmIChLZXlzWzBdKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCUtleXNbMF0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4pOworKwkJCWlmICghS2V5c1sw XSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RybmNtcChr ZXl3b3JkLCAiS2V5IiwgMykgJiYgS2xlbl9jb3VudHNfa2V5cykKKysJCQl7CisrCQkJaW50IGtl eW51bSA9IGF0b2koa2V5d29yZCArIDMpOworKwkJCWlmICgha2V5bnVtIHx8IGtleW51bSA+IEts ZW4gfHwgS2V5c1trZXludW0tMV0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJS2V5c1tr ZXludW0tMV0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4pOworKwkJCWlmICghS2V5c1trZXlu dW0tMV0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAoIU1z ZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJNYWMiKSkKKysJCQl7CisrCQkJaWYgKG1vZGUgPT0gMCkKKysJCQkJY29udGludWU7 CisrCQkJaWYgKE1hYykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNYWMgPSBoZXgyYmlu X20odmFsdWUsICZNYWNsZW4pOworKwkJCWlmICghTWFjKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQorKwkJCXsK KysJCQlpZiAobW9kZSA9PSAxKQorKwkJCQljb250aW51ZTsKKysJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMob2xp bmVidWYsIG91dCk7CisrCisrCQlpZiAoS2V5cyAmJiBNc2cgJiYgKCFtb2RlIHx8IE1hYykgJiYg KFRsZW4gPiAwKSAmJiAoS2xlbiA+IDApKQorKwkJCXsKKysJCQlpZiAoS2xlbl9jb3VudHNfa2V5 cykKKysJCQkJeworKwkJCQlpbnQgeDsKKysJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2MoS2xlbiAq IGtub3duX2tleWxlbik7CisrCQkJCWZvciAoeCA9IDA7IHggPCBLbGVuOyB4KyspCisrCQkJCQl7 CisrCQkJCQltZW1jcHkoS2V5ICsgeCAqIGtub3duX2tleWxlbiwKKysJCQkJCQlLZXlzW3hdLCBr bm93bl9rZXlsZW4pOworKwkJCQkJT1BFTlNTTF9mcmVlKEtleXNbeF0pOworKwkJCQkJfQorKwkJ CQlLbGVuICo9IGtub3duX2tleWxlbjsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJeworKwkJCQlL ZXkgPSBPUEVOU1NMX21hbGxvYyhLbGVuKTsKKysJCQkJbWVtY3B5KEtleSwgS2V5c1swXSwgS2xl bik7CisrCQkJCU9QRU5TU0xfZnJlZShLZXlzWzBdKTsKKysJCQkJfQorKwkJCU9QRU5TU0xfZnJl ZShLZXlzKTsKKysKKysJCQlzd2l0Y2gobW9kZSkKKysJCQkJeworKwkJCWNhc2UgMDoKKysJCQkJ aWYgKCFwcmludF9jbWFjX2dlbihjaXBoZXIsIG91dCwKKysJCQkJCQlLZXksIEtsZW4sCisrCQkJ CQkJTXNnLCBNbGVuLAorKwkJCQkJCVRsZW4pKQorKwkJCQkJZ290byBlcnJvcjsKKysJCQkJYnJl YWs7CisrCQkJY2FzZSAxOgorKwkJCQlpZiAoIXByaW50X2NtYWNfdmVyKGNpcGhlciwgb3V0LAor KwkJCQkJCUtleSwgS2xlbiwKKysJCQkJCQlNc2csIE1sZW4sCisrCQkJCQkJTWFjLCBNYWNsZW4s CisrCQkJCQkJVGxlbikpCisrCQkJCQlnb3RvIGVycm9yOworKwkJCQlicmVhazsKKysJCQkJfQor KworKwkJCU9QRU5TU0xfZnJlZShLZXkpOworKwkJCUtleSA9IE5VTEw7CisrCQkJT1BFTlNTTF9m cmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoTWFjKTsKKysJCQlN YWMgPSBOVUxMOworKwkJCUtsZW4gPSAtMTsKKysJCQlNbGVuID0gLTE7CisrCQkJVGxlbiA9IC0x OworKwkJCUNvdW50ID0gLTE7CisrCQkJfQorKwkJfQorKworKworKwlyZXQgPSAxOworKworKwor KwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsK KysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChLZXkpCisr CQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xfZnJlZShNc2cpOwor KwlpZiAoTWFjKQorKwkJT1BFTlNTTF9mcmVlKE1hYyk7CisrCisrCXJldHVybiByZXQ7CisrCisr CXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHBy b2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysK KytzdGF0aWMgaW50IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklM RSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNo YXIgKk1zZywgaW50IE1sZW4sCisrCQlpbnQgVGxlbikKKysJeworKwlpbnQgcmMsIGk7CisrCXNp emVfdCByZXNsZW47CisrCXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07CisrCUNNQUNfQ1RYICpjbWFj X2N0eCA9IENNQUNfQ1RYX25ldygpOworKworKwlDTUFDX0luaXQoY21hY19jdHgsIEtleSwgS2xl biwgY2lwaGVyLCAwKTsKKysJQ01BQ19VcGRhdGUoY21hY19jdHgsIE1zZywgTWxlbik7CisrCWlm ICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkKKysJCXsKKysJCWZwdXRzKCJF cnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOworKwkJcmMgPSAwOworKwkJfQorKwll bHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCisrCQl7CisrCQlmcHV0cygiUGFyYW1ldGVyIGVy cm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7CisrCQlyYyA9IDA7CisrCQl9Cisr CWVsc2UKKysJCXsKKysJCWZwdXRzKCJNYWMgPSAiLCBvdXQpOworKwkJZm9yIChpID0gMDsgaSA8 IFRsZW47IGkrKykKKysJCQlmcHJpbnRmKG91dCwgIiUwMngiLCByZXNbaV0pOworKwkJZnB1dHMo UkVTUF9FT0wsIG91dCk7CisrCQlyYyA9IDE7CisrCQl9CisrCUNNQUNfQ1RYX2ZyZWUoY21hY19j dHgpOworKwlyZXR1cm4gcmM7CisrCX0KKysKKytzdGF0aWMgaW50IHByaW50X2NtYWNfdmVyKGNv bnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5 LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCisrCQl1bnNpZ25l ZCBjaGFyICpNYWMsIGludCBNYWNsZW4sCisrCQlpbnQgVGxlbikKKysJeworKwlpbnQgcmMgPSAx OworKwlzaXplX3QgcmVzbGVuOworKwl1bnNpZ25lZCBjaGFyIHJlc1sxMjhdOworKwlDTUFDX0NU WCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKKysKKysJQ01BQ19Jbml0KGNtYWNfY3R4LCBL ZXksIEtsZW4sIGNpcGhlciwgMCk7CisrCUNNQUNfVXBkYXRlKGNtYWNfY3R4LCBNc2csIE1sZW4p OworKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJlc2xlbikpCisrCQl7CisrCQlm cHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJyKTsKKysJCXJjID0gMDsKKysJ CX0KKysJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQorKwkJeworKwkJZnB1dHMoIlBhcmFt ZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRlcnIpOworKwkJcmMgPSAwOwor KwkJfQorKwllbHNlIGlmIChUbGVuICE9IE1hY2xlbikKKysJCXsKKysJCWZwdXRzKCJQYXJhbWV0 ZXIgZXJyb3IsIFRsZW4gIT0gcmVzdWx0aW5nIE1hYyBsZW5ndGhcbiIsIHN0ZGVycik7CisrCQly YyA9IDA7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWlmICghbWVtY21wKE1hYywgcmVzLCBNYWNs ZW4pKQorKwkJCWZwdXRzKCJSZXN1bHQgPSBQIiBSRVNQX0VPTCwgb3V0KTsKKysJCWVsc2UKKysJ CQlmcHV0cygiUmVzdWx0ID0gRiIgUkVTUF9FT0wsIG91dCk7CisrCQl9CisrCUNNQUNfQ1RYX2Zy ZWUoY21hY19jdHgpOworKwlyZXR1cm4gcmM7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCistLS0gb3BlbnNzbC0xLjAu MWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6 MzUuMDkyMzA2MjY1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2Rlc21vdnMuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5MjMwNjI2NSArMDIwMAorQEAgLTAs MCArMSw3MDIgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUg 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 UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgTklTVCBERVMgTW9kZXMgb2YgT3Bl cmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCisrICBUZXN0IFByb2dyYW0KKysKKysgIEJhc2VkIG9u IHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgorKyAgRG9uYXRlZCB0byBPcGVu U1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3Vp dGUgMzAwCisrICBHZXJtYW50b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVkZSA8c3Rk aW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERFUyBzdXBw b3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5lIERFU19C TE9DS19TSVpFIDgKKysKKysjZGVmaW5lIFZFUkJPU0UgMAorKworK2ludCBERVNUZXN0KEVWUF9D SVBIRVJfQ1RYICpjdHgsCisrCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQg Y2hhciAqYUtleSwgCisrCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKKysJICAgIGludCBkaXIs ICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJICAgIHVuc2lnbmVkIGNoYXIgKm91 dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQX0NJ UEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKGFrZXlzeiAhPSAxOTIpCisrCXsKKysJ cHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKKysJRVhJVCgxKTsKKysJ fQorKworKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCisrCWNpcGhlciA9 IEVWUF9kZXNfZWRlM19jYmMoKTsKKysgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVD QiIpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKKysgICAgZWxzZSBpZiAo c3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUz X2NmYjY0KCk7CisrICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0g MCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOworKyAgICBlbHNlIGlmKCFzdHJjYXNl Y21wKGFtb2RlLCJDRkI4IikpCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7CisrICAg IGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJY2lwaGVyID0gRVZQX2Rlc19l ZGUzX2NmYjEoKTsKKysgICAgZWxzZQorKwl7CisrCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xu IiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9l eChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1cm4gMDsK KysgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVSX0NUWF9z ZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgRVZQX0NpcGhl cihjdHgsIG91dCwgaW4sIGxlbik7CisrCisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9p ZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQorKyAg ICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrICAgIG9sZW4gPSBi aW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywg b2xlbiwgb2J1Zik7CisrICAgIH0KKysKKyt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hhciAqZHN0 LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCisrICAgIHsKKysgICAgaW50IG47CisrCisr ICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCisrICAgIG1lbW1vdmUoZHN0LGRzdCtuYml0cy84 LDMqOC1uYml0cy84KTsKKysgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCisrICAgIG1lbWNweShk c3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKKysgICAgLyogbGVmdCBzaGlmdCB0aGUg Yml0cyAqLworKyAgICBpZihuYml0cyU4KQorKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsrbikKKysJ ICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5iaXRzJTgp KTsKKysgICAgfQkKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKytjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQi fTsKKytjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4Iiwi Q0ZCNjQifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjY0fTsK KytpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07CisrCisrdm9pZCBkb19tY3QoY2hhciAq YW1vZGUsIAorKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNoYXIgKmFr ZXksdW5zaWduZWQgY2hhciAqaXZlYywKKysJICAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRl eHQsIGludCBsZW4sCisrCSAgICBGSUxFICpyZnApCisrICAgIHsKKysgICAgaW50IGksaW1vZGU7 CisrICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLworKyAgICB1 bnNpZ25lZCBjaGFyIHRleHQwWzhdOworKworKyAgICBmb3IgKGltb2RlPTAgOyBpbW9kZSA8IDYg OyArK2ltb2RlKQorKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQorKwkgICAgYnJl YWs7CisrICAgIGlmIChpbW9kZSA9PSA2KQorKwl7IAorKwlwcmludGYoIlVucmVjb2duaXplZCBt b2RlOiAlc1xuIiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGZvcihpPTAgOyBp IDwgNDAwIDsgKytpKQorKwl7CisrCWludCBqOworKwlpbnQgbjsKKysJaW50IGtwPWFrZXlzei82 NDsKKysJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJ RVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJZnByaW50ZihyZnAsIlxuQ09VTlQgPSAl ZFxuIixpKTsKKysJaWYoa3AgPT0gMSkKKysJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFrZXksOCxy ZnAsMCk7CisrCWVsc2UKKysJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCisrCQl7CisrCQlm cHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7CisrCQlPdXRwdXRWYWx1ZSgiIixha2V5K24qOCw4LHJm cCwwKTsKKysJCX0KKysKKysJaWYoaW1vZGUgIT0gRUNCKQorKwkgICAgT3V0cHV0VmFsdWUoIklW IixpdmVjLDgscmZwLDApOworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxsZW4scmZw LGltb2RlID09IENGQjEpOworKyNpZiAwCisrCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlhbm5lc3Mg Ki8KKysJaWYoaW1vZGUgPT0gQ0ZCMSkKKysJICAgIHRleHRbMF08PD03OworKyNlbmRpZgorKwlt ZW1jcHkodGV4dDAsdGV4dCw4KTsKKysKKysJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsraikKKysJ ICAgIHsKKysJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07CisrCisrCSAgICBtZW1jcHko b2xkX3RleHQsdGV4dCw4KTsKKysJICAgIGlmKGogPT0gMCkKKysJCXsKKysJCW1lbWNweShvbGRf aXYsaXZlYyw4KTsKKysJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVjLGRpcix0 ZXh0LHRleHQsbGVuKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCW1lbWNweShvbGRfaXYs Y3R4Lml2LDgpOworKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOworKwkJfQorKwkg ICAgaWYoaiA9PSA5OTk5KQorKwkJeworKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0ZXh0LGxl bixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsgKi8KKysJ CX0KKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLworKwkgICAgLyog YWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCisrCSAgICBzaGlmdGluKG5r LHRleHQsU2l6ZXNbaW1vZGVdKTsKKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIsbmssMjQp OyovCisrCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwg aW1vZGUgPT0gQ0ZCNjQKKysJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBPRkIpCisr CQltZW1jcHkodGV4dCxvbGRfaXYsOCk7CisrCisrCSAgICBpZighZGlyICYmIChpbW9kZSA9PSBD RkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQorKwkJeworKwkJLyogdGhl IHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3BlcmF0aW9u CisrCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAqLworKwkJ Zm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25dOworKwkJ fQorKwkgICAgfQorKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5W25dXj1ua1sx NituXTsKKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVs4K25dXj1ua1s4K25d OworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5WzE2K25dXj1ua1tuXTsKKysJ aWYobnVta2V5cyA8IDMpCisrCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOworKwlpZihu dW1rZXlzIDwgMikKKysJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOworKwlERVNfc2V0X29k ZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKKysJREVTX3NldF9vZGRfcGFyaXR5KChERVNf Y2Jsb2NrICopKGFrZXkrOCkpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKiko YWtleSsxNikpOworKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7CisrCisrCS8qIHBvaW50bGVzcyBl eGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQorKwkgICBpbml0 aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hvCisrCSAg IGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KKysJaWYoaW1vZGUgPT0gT0ZCKQorKwkgICAgZm9y KG49MCA7IG4gPCA4IDsgKytuKQorKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07CisrCX0K KysgICAgfQorKyAgICAKKytpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmls ZSkKKysgICAgeworKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKKysgICAgRklMRSAqYWZw ID0gTlVMTCwgKnJmcCA9IE5VTEw7CisrICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1ZlsyMDQ4XTsK KysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbW9kZVs4XSA9ICIiOwor KyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKKysgICAgaW50IGFrZXlzej0wOworKyAgICB1bnNp Z25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKKysgICAgaW50IGRpciA9IC0xLCBlcnIgPSAw LCBzdGVwID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07CisrICAgIHVu c2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKKysgICAgY2hhciAqcnA7CisrICAgIEVWUF9D SVBIRVJfQ1RYIGN0eDsKKysgICAgaW50IG51bWtleXM9MTsKKysgICAgRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKKysKKysgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKKysJeworKwlw cmludGYoIk5vIHJlcSBmaWxlXG4iKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHN0cmNweShh Zm4sIHJxZmlsZSk7CisrCisrICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxM KQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKKysJICAgICAg IGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGlmICghcnNw ZmlsZSkKKysJeworKwlzdHJjcHkocmZuLGFmbik7CisrCXJwPXN0cnN0cihyZm4sInJlcS8iKTsK KysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJaWYgKCFycCkKKysJICAgIHJwPXN0cnN0cihy Zm4sInJlcVxcIik7CisrI2VuZGlmCisrCWFzc2VydChycCk7CisrCW1lbWNweShycCwicnNwIiwz KTsKKysJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOworKwltZW1jcHkocnAsICIucnNwIiwgNCk7 CisrCXJzcGZpbGUgPSByZm47CisrCX0KKysgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAi dyIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4i LCAKKysJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJZmNsb3NlKGFmcCk7CisrCWFm cCA9IE5VTEw7CisrCXJldHVybiAtMTsKKysJfQorKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMo aWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQorKwl7CisrCXRpZHlfbGluZSh0YnVm LCBpYnVmKTsKKysJaWxlbiA9IHN0cmxlbihpYnVmKTsKKysJLyoJcHJpbnRmKCJzdGVwPSVkIGli dWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KKysJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1vZGUsIkVD QiIpKQorKwkgICAgeworKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7CisrCSAg ICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KKysJICAgIH0KKysJ c3dpdGNoIChzdGVwKQorKwkgICAgeworKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCisr CSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQorKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KKysJ CWlmICgqYW1vZGUgPT0gJ1wwJykKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJNaXNzaW5nIE1v ZGVcbiIpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJ CSAgICBmcHV0cyhpYnVmLCByZnApOworKwkJICAgICsrIHN0ZXA7CisrCQkgICAgfQorKwkJfQor KwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCisrCQl7CisrCQlwcmludGYoIkludmFsaWQg cHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVs c2UKKysJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLworKwkJY2hhciAqeHAsICpwcCA9IGlidWYr MjsKKysJCWludCBuOworKwkJaWYoKmFtb2RlKQorKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQg dGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkgICAgZnBy aW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkg ICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYoIXN0cm5jbXAocHAsIklO VkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKKysJCSAgICAgICB8fCAhc3RybmNt cChwcCwiVERFUyAiLDUpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFUSU9OICIs MTIpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQorKwkJICAg ICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQorKwkJCXsKKysJCQkvKiBnZXQgdGVz dCB0eXBlICovCisrCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQorKwkJCSAgICBwcCs9NDsK KysJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCisrCQkJICAgIHBwKz01OworKwkJ CXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0 LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICovCisrCQkJ eHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3RybGVuKHhw KzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0gPSAnXDAn OworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJCQkJcHJp bnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKKysJCQl9CisrCQkgICAgfQor KwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBU XSAqLworKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQorKwkJYnJlYWs7CisrCSAgICBpZiAoaWJ1 ZlswXSA9PSAnWycpCisrCQl7CisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJKytzdGVwOworKwkJ aWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9 IDE7CisrCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkK KysJCSAgICBkaXIgPSAwOworKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFs aWQga2V5d29yZDogJXNcbiIsIGlidWYpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAgfQorKwkJ YnJlYWs7CisrCQl9CisrCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCisrCQl7CisrCQllcnIgPSAx OworKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKKysJCWJy ZWFrOworKwkJfQorKwkgICAgZWxzZSAKKysJCXN0ZXAgPSAyOworKworKwljYXNlIDI6IC8qIEtF WSA9IHh4eHggKi8KKysJICAgIGlmKCppYnVmID09ICdcbicpCisrCQl7CisrCSAgICAgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZigh c3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQorKwkJeworKwkgICAgICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgaWYoIXN0cm5j YXNlY21wKGlidWYsIkNPVU5UPSIsNikpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAo aWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQorKwkJeworKwkJbnVta2V5cz1hdG9pKGlidWYrMTApOwor KwkJYnJlYWs7CisrCQl9CisrCSAgCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCisrCQl7CisrCQlha2V5c3o9NjQ7CisrCQls ZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOworKwkJaWYgKGxlbiA8IDApCisrCQkg ICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0xOworKwkJ ICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7Cisr CQkrK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVlzID0g Iiw3KSkKKysJCXsKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkp OworKwkJaWYobGVuICE9IDgpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlc biIpOworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCW1lbWNweShh S2V5KzgsYUtleSw4KTsKKysJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7CisrCQlpYnVmWzRdPSdc MCc7CisrCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7CisrCQkrK3N0ZXA7CisrCQl9Cisr CSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQorKwkJeworKwkJaW50IG49 aWJ1ZlszXS0nMSc7CisrCisrCQlha2V5c3o9NjQqMzsKKysJCWxlbj1oZXgyYmluKGlidWYrNyxh S2V5K24qOCk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZh bGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJ aWJ1Zls0XT0nXDAnOworKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKKysJCWlmKG4gPT0g MikKKysJCSAgICArK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlwcmludGYoIk1p c3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2Fz ZSAzOiAvKiBJViA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAo c3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlz c2luZyBJVlxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbGVu ID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAg IHsKKysJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7CisrCQlz dGVwID0gKGRpcik/IDQ6IDU7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA0OiAvKiBQ TEFJTlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0 cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKKysJCXsKKysJCXByaW50 ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UK KysJCXsKKysJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKKysJCWlmKCFzdHJjbXAoYW1vZGUs IkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Cisr CQllbHNlCisrCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKKysJCWlmIChs ZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIs IGlidWYrMTIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlp ZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkJ1 ZmZlciBvdmVyZmxvd1xuIik7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwg KHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJN b250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRv X21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxsZW4scmZw KTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChkaXIgPT0gMSk7 CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAK KysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBjaXBo ZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQi LGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAg ICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8qIENJ UEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0 cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlwcmlu dGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7 CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYr MTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuID0g aGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgewor KwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJCisrCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwg Y2lwaGVydGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAv KiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSwgYWtl eXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwg cmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChkaXIgPT0g MCk7CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVj LCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBw bGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVY VCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9k ZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOwor KworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJeworKwkJZXJyID0g MTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJICAgIGVsc2Ug aWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVk IHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQorKwkgICAgc3Rl cCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZwKQorKwlmY2xv c2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJldHVybiBlcnI7 CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCisrICBhIHNl dCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysgIEEgc2luZ2xl IGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCisrICBBIHNl dCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAor KyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBO VUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5b MjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9l cnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJnYyA+IDEpCisr CXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAgIHsKKysJICAg IGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYi KSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQgPSAwOworKwkg ICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAl c1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGFyZ2MgPCAz KQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7CisrCSAgICBy ZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0gYXJndlsyXTsK KysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJICAgIHJzcGZp bGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJeyAvKiBsaXN0 IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIp KSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7 CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZu KSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkgICAgc3RyY3B5 KHJmbiwgZm4pOworKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKKysJICAg IGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+IFByb2Nl c3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJCX0KKysJ ICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCisr CXsKKysJaWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7Cisr CWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCI+Pj4g UHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJfQorKyAg ICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYy5maXBzIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTMz MDYyODggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2 cy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkzMzA2Mjg4ICswMjAwCitAQCAtMCwwICsxLDI5MiBA QAorKy8qIGZpcHMvZGgvZmlwc19kaHZzLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0 LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNkZWZp bmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBESCBzdXBw b3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRp YyBjb25zdCBFVlBfTUQgKnBhcnNlX21kKGNoYXIgKmxpbmUpCisrCXsKKysJY2hhciAqcDsKKysJ aWYgKGxpbmVbMF0gIT0gJ1snIHx8IGxpbmVbMV0gIT0gJ0YnKQorKwkJcmV0dXJuIE5VTEw7Cisr CXAgPSBzdHJjaHIobGluZSwgJy0nKTsKKysJaWYgKCFwKQorKwkJcmV0dXJuIE5VTEw7CisrCWxp bmUgPSBwICsgMTsKKysJcCA9IHN0cmNocihsaW5lLCAnXScpOworKwlpZiAoIXApCisrCQlyZXR1 cm4gTlVMTDsKKysJKnAgPSAwOworKwlwID0gbGluZTsKKysJd2hpbGUoaXNzcGFjZSgqcCkpCisr CQlwKys7CisrCWlmICghc3RyY21wKHAsICJTSEExIikpCisrCQlyZXR1cm4gRVZQX3NoYTEoKTsK KysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMjI0IikpCisrCQlyZXR1cm4gRVZQX3NoYTIyNCgp OworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyNTYiKSkKKysJCXJldHVybiBFVlBfc2hhMjU2 KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTM4NCIpKQorKwkJcmV0dXJuIEVWUF9zaGEz ODQoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBNTEyIikpCisrCQlyZXR1cm4gRVZQX3No YTUxMigpOworKwllbHNlCisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworK3N0YXRpYyB2b2lkIG91 dHB1dF9aaGFzaChGSUxFICpvdXQsIGludCBleG91dCwKKysJCQkJREggKmRoLCBCSUdOVU0gKnBl ZXJrZXksIGNvbnN0IEVWUF9NRCAqbWQsCisrCQkJCXVuc2lnbmVkIGNoYXIgKnJoYXNoLCBzaXpl X3Qgcmhhc2hsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqWjsKKysJdW5zaWduZWQgY2hhciBj aGFzaFtFVlBfTUFYX01EX1NJWkVdOworKwlpbnQgWmxlbjsKKysJaWYgKHJoYXNoID09IE5VTEwp CisrCQl7CisrCQlyaGFzaGxlbiA9IE1fRVZQX01EX3NpemUobWQpOworKwkJaWYgKCFESF9nZW5l cmF0ZV9rZXkoZGgpKQorKwkJCWV4aXQgKDEpOworKwkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJZ ZXBoZW1JVVQiLCBkaC0+cHViX2tleSk7CisrCQlpZiAoZXhvdXQpCisrCQkJZG9fYm5fcHJpbnRf bmFtZShvdXQsICJYZXBoZW1JVVQiLCBkaC0+cHJpdl9rZXkpOworKwkJfQorKwlaID0gT1BFTlNT TF9tYWxsb2MoQk5fbnVtX2J5dGVzKGRoLT5wKSk7CisrCWlmICghWikKKysJCWV4aXQoMSk7Cisr CVpsZW4gPSBESF9jb21wdXRlX2tleV9wYWRkZWQoWiwgcGVlcmtleSwgZGgpOworKwlpZiAoZXhv dXQpCisrCQlPdXRwdXRWYWx1ZSgiWiIsIFosIFpsZW4sIG91dCwgMCk7CisrCUZJUFNfZGlnZXN0 KFosIFpsZW4sIGNoYXNoLCBOVUxMLCBtZCk7CisrCU91dHB1dFZhbHVlKHJoYXNoID8gIklVVEhh c2haWiIgOiAiSGFzaFpaIiwgY2hhc2gsIHJoYXNobGVuLCBvdXQsIDApOworKwlpZiAocmhhc2gp CisrCQl7CisrCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9ICVzXG4iLAorKwkJCQltZW1jbXAoY2hh c2gsIHJoYXNoLCByaGFzaGxlbikgPyAiRiIgOiAiUCIpOworKwkJfQorKwllbHNlCisrCQl7Cisr CQlCTl9jbGVhcl9mcmVlKGRoLT5wcml2X2tleSk7CisrCQlCTl9jbGVhcl9mcmVlKGRoLT5wdWJf a2V5KTsKKysJCWRoLT5wcml2X2tleSA9IE5VTEw7CisrCQlkaC0+cHViX2tleSA9IE5VTEw7Cisr CQl9CisrCU9QRU5TU0xfY2xlYW5zZShaLCBabGVuKTsKKysJT1BFTlNTTF9mcmVlKFopOworKwl9 CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19kaHZzX21haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNl bmRpZgorKwl7CisrCWNoYXIgKiphcmdzID0gYXJndiArIDE7CisrCWludCBhcmduID0gYXJnYyAt IDE7CisrCUZJTEUgKmluLCAqb3V0OworKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKKysJ dW5zaWduZWQgY2hhciAqcmhhc2g7CisrCWxvbmcgcmhhc2hsZW47CisrCURIICpkaCA9IE5VTEw7 CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwlCSUdOVU0gKnBlZXJrZXkgPSBOVUxMOwor KwljaGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKKysJaW50IGRvX3ZlcmlmeSA9 IC0xLCBleG91dCA9IDA7CisrCisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCisrCWlmIChhcmdu ICYmICFzdHJjbXAoKmFyZ3MsICJkaHZlciIpKQorKwkJeworKwkJZG9fdmVyaWZ5ID0gMTsKKysJ CWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJCX0KKysJZWxzZSBpZiAoYXJnbiAmJiAhc3RyY21wKCph cmdzLCAiZGhnZW4iKSkKKysJCXsKKysJCWRvX3ZlcmlmeSA9IDA7CisrCQlhcmdzKys7CisrCQlh cmduLS07CisrCQl9CisrCisrCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICItZXhvdXQiKSkK KysJCXsKKysJCWV4b3V0ID0gMTsKKysJCWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJCX0KKysKKysJ aWYgKGRvX3ZlcmlmeSA9PSAtMSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyBbZGh2ZXJ8 ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgx KTsKKysJCX0KKysKKysJaWYgKGFyZ24gPT0gMikKKysJCXsKKysJCWluID0gZm9wZW4oKmFyZ3Ms ICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9w ZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlvdXQgPSBmb3Bl bihhcmdzWzFdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9Cisr CQl9CisrCWVsc2UgaWYgKGFyZ24gPT0gMCkKKysJCXsKKysJCWluID0gc3RkaW47CisrCQlvdXQg PSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyBbZGh2 ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJZXhp dCgxKTsKKysJCX0KKysKKysJZGggPSBGSVBTX2RoX25ldygpOworKworKwl3aGlsZSAoZmdldHMo YnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCisrCQl7CisrCQlmcHV0cyhidWYsIG91dCk7 CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA2ICYmICFzdHJuY21wKGJ1ZiwgIltGIiwgMikpCisrCQkJ eworKwkJCW1kID0gcGFyc2VfbWQoYnVmKTsKKysJCQlpZiAobWQgPT0gTlVMTCkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoZGgpCisrCQkJCUZJUFNfZGhfZnJlZShkaCk7CisrCQkJ ZGggPSBGSVBTX2RoX25ldygpOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmICghcGFyc2Vf bGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIlAiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5w LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiUSIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmZGgtPnEsIHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJHIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZkaC0+ZywgdmFsdWUp KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIlhlcGhlbUlVVCIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmZGgtPnByaXZf a2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtSVVUIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJu KCZkaC0+cHViX2tleSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlllcGhlbUNBVlMiKSkKKysJCQl7CisrCQkJaWYg KCFkb19oZXgyYm4oJnBlZXJrZXksIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJ CQlpZiAoZG9fdmVyaWZ5ID09IDApCisrCQkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwg cGVlcmtleSwgbWQsCisrCQkJCQkJCU5VTEwsIDApOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIkNBVlNIYXNoWloiKSkKKysJCQl7CisrCQkJaWYgKCFtZCkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlyaGFzaCA9IGhleDJiaW5fbSh2YWx1ZSwgJnJoYXNobGVuKTsK KysJCQlpZiAoIXJoYXNoIHx8IHJoYXNobGVuICE9IE1fRVZQX01EX3NpemUobWQpKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwgcGVlcmtl eSwgbWQsCisrCQkJCQkJCXJoYXNoLCByaGFzaGxlbik7CisrCQkJfQorKwkJfQorKwlpZiAoaW4g JiYgaW4gIT0gc3RkaW4pCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIG91dCAhPSBzdGRv dXQpCisrCQlmY2xvc2Uob3V0KTsKKysJcmV0dXJuIDA7CisrCXBhcnNlX2Vycm9yOgorKwlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIFBhcnNpbmcgcmVxdWVzdCBmaWxlXG4iKTsKKysJZXhpdCgxKTsK KysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2RyYmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2RyYmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2 cy5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTMzMDYyODggKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMJMjAxNC0xMC0xNiAxMzoxOToz NS4wOTMzMDYyODggKzAyMDAKK0BAIC0wLDAgKzEsNDE2IEBACisrLyogZmlwcy9yYW5kL2ZpcHNf ZHJiZ3ZzLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9w ZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNp bmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwor KyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgor KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJ CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBEUkJHIHN1cHBvcnRcbiIpOworKyAgICBy ZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxj dHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgZHBhcnNl X21kKGNoYXIgKnN0cikKKysJeworKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKKysJCXsKKysJCWNh c2UgMToKKysJCXJldHVybiBOSURfc2hhMTsKKysKKysJCWNhc2UgMjI0OgorKwkJcmV0dXJuIE5J RF9zaGEyMjQ7CisrCisrCQljYXNlIDI1NjoKKysJCXJldHVybiBOSURfc2hhMjU2OworKworKwkJ Y2FzZSAzODQ6CisrCQlyZXR1cm4gTklEX3NoYTM4NDsKKysKKysJCWNhc2UgNTEyOgorKwkJcmV0 dXJuIE5JRF9zaGE1MTI7CisrCisrCQl9CisrCisrCXJldHVybiBOSURfdW5kZWY7CisrCX0KKysK KytzdGF0aWMgaW50IHBhcnNlX2VjKGNoYXIgKnN0cikKKysJeworKwlpbnQgY3VydmVfbmlkLCBt ZF9uaWQ7CisrCWNoYXIgKm1kOworKwltZCA9IHN0cmNocihzdHIsICcgJyk7CisrCWlmICghbWQp CisrCQlyZXR1cm4gTklEX3VuZGVmOworKwlpZiAoIXN0cm5jbXAoc3RyLCAiW1AtMjU2IiwgNikp CisrCQljdXJ2ZV9uaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKKysJZWxzZSBpZiAoIXN0cm5j bXAoc3RyLCAiW1AtMzg0IiwgNikpCisrCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDM4NHIxOworKwll bHNlIGlmICghc3RybmNtcChzdHIsICJbUC01MjEiLCA2KSkKKysJCWN1cnZlX25pZCA9IE5JRF9z ZWNwNTIxcjE7CisrCWVsc2UKKysJCXJldHVybiBOSURfdW5kZWY7CisrCW1kX25pZCA9IGRwYXJz ZV9tZChtZCk7CisrCWlmIChtZF9uaWQgPT0gTklEX3VuZGVmKQorKwkJcmV0dXJuIE5JRF91bmRl ZjsKKysJcmV0dXJuIChjdXJ2ZV9uaWQgPDwgMTYpIHwgbWRfbmlkOworKwl9CisrCisrc3RhdGlj IGludCBwYXJzZV9hZXMoY2hhciAqc3RyLCBpbnQgKnBkZikKKysJeworKworKwlpZiAoIXN0cm5j bXAoc3RyICsgOSwgIm5vIiwgMikpCisrCQkqcGRmID0gMDsKKysJZWxzZQorKwkJKnBkZiA9IERS QkdfRkxBR19DVFJfVVNFX0RGOworKworKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKKysJCXsKKysJ CWNhc2UgMTI4OgorKwkJcmV0dXJuIE5JRF9hZXNfMTI4X2N0cjsKKysKKysJCWNhc2UgMTkyOgor KwkJcmV0dXJuIE5JRF9hZXNfMTkyX2N0cjsKKysKKysJCWNhc2UgMjU2OgorKwkJcmV0dXJuIE5J RF9hZXNfMjU2X2N0cjsKKysKKysJCWRlZmF1bHQ6CisrCQlyZXR1cm4gTklEX3VuZGVmOworKwor KwkJfQorKwl9CisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsKKysJdW5zaWduZWQgY2hhciAqZW50 OworKwlzaXplX3QgZW50bGVuOworKwl1bnNpZ25lZCBjaGFyICpub25jZTsKKysJc2l6ZV90IG5v bmNlbGVuOworKwl9IFRFU1RfRU5UOworKworK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERS QkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4p CisrCXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkq cG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OworKwlyZXR1cm4gdC0+ZW50bGVuOworKwl9 CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBj aGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5 LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJVEVTVF9FTlQgKnQgPSBG SVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICop dC0+bm9uY2U7CisrCXJldHVybiB0LT5ub25jZWxlbjsKKysJfQorKworKyNpZmRlZiBGSVBTX0FM R1ZTCisraW50IGZpcHNfZHJiZ3ZzX21haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrI2Vsc2UK KytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwlGSUxFICpp biA9IE5VTEwsICpvdXQgPSBOVUxMOworKwlEUkJHX0NUWCAqZGN0eCA9IE5VTEw7CisrCVRFU1Rf RU5UIHQ7CisrCWludCByLCBuaWQgPSAwOworKwlpbnQgcHIgPSAwOworKwljaGFyIGJ1ZlsyMDQ4 XSwgbGJ1ZlsyMDQ4XTsKKysJdW5zaWduZWQgY2hhciByYW5kb3V0WzIwNDhdOworKwljaGFyICpr ZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKKysKKysJdW5zaWduZWQgY2hhciAqZW50ID0g TlVMTCwgKm5vbmNlID0gTlVMTCwgKnBlcnMgPSBOVUxMLCAqYWRpbiA9IE5VTEw7CisrCWxvbmcg ZW50bGVuLCBub25jZWxlbiwgcGVyc2xlbiwgYWRpbmxlbjsKKysJaW50IGRmID0gMDsKKysKKysJ ZW51bSBkdHlwZSB7IERSQkdfTk9ORSwgRFJCR19DVFIsIERSQkdfSEFTSCwgRFJCR19ITUFDLCBE UkJHX0RVQUxfRUMgfQorKwkJZHJiZ190eXBlID0gRFJCR19OT05FOworKworKwlpbnQgcmFuZG91 dGxlbiA9IDA7CisrCisrCWludCBnZW4gPSAwOworKworKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOwor KworKwlpZiAoYXJnYyA9PSAzKQorKwkJeworKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwor KwkJaWYgKCFpbikKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlu cHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJb3V0ID0gZm9wZW4oYXJndlsy XSwgInciKTsKKysJCWlmICghb3V0KQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9y IG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJfQorKwll bHNlIGlmIChhcmdjID09IDEpCisrCQl7CisrCQlpbiA9IHN0ZGluOworKwkJb3V0ID0gc3Rkb3V0 OworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiJXMgKGluZmlsZSBvdXRm aWxlKVxuIixhcmd2WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCisrCXdoaWxlIChmZ2V0cyhi dWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKKysJCXsKKysJCWZwdXRzKGJ1Ziwgb3V0KTsK KysJCWlmIChkcmJnX3R5cGUgPT0gRFJCR19OT05FKQorKwkJCXsKKysJCQlpZiAoc3Ryc3RyKGJ1 ZiwgIkNUUl9EUkJHIikpCisrCQkJCWRyYmdfdHlwZSA9IERSQkdfQ1RSOworKwkJCWVsc2UgaWYg KHN0cnN0cihidWYsICJIYXNoX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19IQVNIOwor KwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJITUFDX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0g RFJCR19ITUFDOworKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJEdWFsX0VDX0RSQkciKSkKKysJ CQkJZHJiZ190eXBlID0gRFJCR19EVUFMX0VDOworKwkJCWVsc2UKKysJCQkJY29udGludWU7Cisr CQkJfQorKwkJaWYgKHN0cmxlbihidWYpID4gNCAmJiAhc3RybmNtcChidWYsICJbU0hBLSIsIDUp KQorKwkJCXsKKysJCQluaWQgPSBkcGFyc2VfbWQoYnVmKTsKKysJCQlpZiAobmlkID09IE5JRF91 bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQlpZiAoZHJiZ190eXBlID09IERSQkdfSE1BQykKKysJ CQkJeworKwkJCQlzd2l0Y2ggKG5pZCkKKysJCQkJCXsKKysJCQkJCWNhc2UgTklEX3NoYTE6Cisr CQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEExOworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNl IE5JRF9zaGEyMjQ6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEyMjQ7CisrCQkJCQlicmVh azsKKysKKysJCQkJCWNhc2UgTklEX3NoYTI1NjoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNI QTI1NjsKKysJCQkJCWJyZWFrOworKworKwkJCQkJY2FzZSBOSURfc2hhMzg0OgorKwkJCQkJbmlk ID0gTklEX2htYWNXaXRoU0hBMzg0OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNlIE5JRF9z aGE1MTI6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEE1MTI7CisrCQkJCQlicmVhazsKKysK KysJCQkJCWRlZmF1bHQ6CisrCQkJCQlleGl0KDEpOworKwkJCQkJfQorKwkJCQl9CisrCQkJfQor KwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW0FFUy0iLCA1KSkKKysJ CQl7CisrCQkJbmlkID0gcGFyc2VfYWVzKGJ1ZiwgJmRmKTsKKysJCQlpZiAobmlkID09IE5JRF91 bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiAxMiAmJiAh c3RybmNtcChidWYsICJbUC0iLCAzKSkKKysJCQl7CisrCQkJbmlkID0gcGFyc2VfZWMoYnVmKTsK KysJCQlpZiAobmlkID09IE5JRF91bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQl9CisrCQlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsK KysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJbUHJlZGljdGlvblJlc2lzdGFuY2UiKSkKKysJ CQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJUcnVlXSIpKQorKwkJCQlwciA9IDE7CisrCQkJ ZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIkZhbHNlXSIpKQorKwkJCQlwciA9IDA7CisrCQkJZWxz ZQorKwkJCQlleGl0KDEpOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJFbnRy b3B5SW5wdXQiKSkKKysJCQl7CisrCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsK KysJCQl0LmVudCA9IGVudDsKKysJCQl0LmVudGxlbiA9IGVudGxlbjsKKysJCQl9CisrCisrCQlp ZiAoIXN0cmNtcChrZXl3b3JkLCAiTm9uY2UiKSkKKysJCQl7CisrCQkJbm9uY2UgPSBoZXgyYmlu X20odmFsdWUsICZub25jZWxlbik7CisrCQkJdC5ub25jZSA9IG5vbmNlOworKwkJCXQubm9uY2Vs ZW4gPSBub25jZWxlbjsKKysJCQl9CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiUGVyc29u YWxpemF0aW9uU3RyaW5nIikpCisrCQkJeworKwkJCXBlcnMgPSBoZXgyYmluX20odmFsdWUsICZw ZXJzbGVuKTsKKysJCQlpZiAobmlkID09IDApCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIs ICJEUkJHIHR5cGUgbm90IHJlY29nbmlzZWQhXG4iKTsKKysJCQkJZXhpdCAoMSk7CisrCQkJCX0K KysJCQlkY3R4ID0gRklQU19kcmJnX25ldyhuaWQsIGRmIHwgRFJCR19GTEFHX1RFU1QpOworKwkJ CWlmICghZGN0eCkKKysJCQkJZXhpdCAoMSk7CisrCQkJRklQU19kcmJnX3NldF9jYWxsYmFja3Mo ZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLAorKwkJCQkJCQl0ZXN0X25vbmNlLCAwKTsKKysJCQlG SVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysJCQlyYW5kb3V0bGVuID0gKGludClG SVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKGRjdHgpOworKwkJCXIgPSBGSVBTX2RyYmdfaW5zdGFu dGlhdGUoZGN0eCwgcGVycywgcGVyc2xlbik7CisrCQkJaWYgKCFyKQorKwkJCQl7CisrCQkJCWZw cmludGYoc3RkZXJyLCAiRXJyb3IgaW5zdGFudGlhdGluZyBEUkJHXG4iKTsKKysJCQkJZXhpdCgx KTsKKysJCQkJfQorKwkJCU9QRU5TU0xfZnJlZShwZXJzKTsKKysJCQlPUEVOU1NMX2ZyZWUoZW50 KTsKKysJCQlPUEVOU1NMX2ZyZWUobm9uY2UpOworKwkJCWVudCA9IG5vbmNlID0gcGVycyA9IE5V TEw7CisrCQkJZ2VuID0gMDsKKysJCQl9CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQWRk aXRpb25hbElucHV0IikpCisrCQkJeworKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUsICZhZGlu bGVuKTsKKysJCQlpZiAocHIpCisrCQkJCWNvbnRpbnVlOworKwkJCXIgPSBGSVBTX2RyYmdfZ2Vu ZXJhdGUoZGN0eCwgcmFuZG91dCwgcmFuZG91dGxlbiwgMCwKKysJCQkJCQkJCWFkaW4sIGFkaW5s ZW4pOworKwkJCWlmICghcikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdl bmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCWlmICgh cikKKysJCQkJZXhpdCgxKTsKKysJCQlPUEVOU1NMX2ZyZWUoYWRpbik7CisrCQkJYWRpbiA9IE5V TEw7CisrCQkJZ2VuKys7CisrCQkJfQorKworKwkJaWYgKHByKQorKwkJCXsKKysJCQlpZiAoIXN0 cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0UFIiKSkKKysJCQkJeworKwkJCQllbnQgPSBoZXgy YmluX20odmFsdWUsICZlbnRsZW4pOworKwkJCQl0LmVudCA9IGVudDsKKysJCQkJdC5lbnRsZW4g PSBlbnRsZW47CisrCQkJCXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwKKysJCQkJCQkJcmFu ZG91dCwgcmFuZG91dGxlbiwKKysJCQkJCQkJMSwgYWRpbiwgYWRpbmxlbik7CisrCQkJCWlmICgh cikKKysJCQkJCXsKKysJCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJCSJFcnJvciBnZW5lcmF0 aW5nIERSQkcgYml0c1xuIik7CisrCQkJCQlleGl0KDEpOworKwkJCQkJfQorKwkJCQlPUEVOU1NM X2ZyZWUoYWRpbik7CisrCQkJCU9QRU5TU0xfZnJlZShlbnQpOworKwkJCQlhZGluID0gZW50ID0g TlVMTDsKKysJCQkJZ2VuKys7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3Jk LCAiRW50cm9weUlucHV0UmVzZWVkIikpCisrCQkJeworKwkJCWVudCA9IGhleDJiaW5fbSh2YWx1 ZSwgJmVudGxlbik7CisrCQkJdC5lbnQgPSBlbnQ7CisrCQkJdC5lbnRsZW4gPSBlbnRsZW47Cisr CQkJfQorKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dFJlc2VlZCIpKQor KwkJCXsKKysJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7CisrCQkJRklQU19k cmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuKTsKKysJCQlPUEVOU1NMX2ZyZWUoZW50KTsK KysJCQlPUEVOU1NMX2ZyZWUoYWRpbik7CisrCQkJZW50ID0gYWRpbiA9IE5VTEw7CisrCQkJfQor KwkJaWYgKGdlbiA9PSAyKQorKwkJCXsKKysJCQlPdXRwdXRWYWx1ZSgiUmV0dXJuZWRCaXRzIiwg cmFuZG91dCwgcmFuZG91dGxlbiwKKysJCQkJCQkJCQlvdXQsIDApOworKwkJCUZJUFNfZHJiZ19m cmVlKGRjdHgpOworKwkJCWRjdHggPSBOVUxMOworKwkJCWdlbiA9IDA7CisrCQkJfQorKworKwkJ fQorKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYm IG91dCAhPSBzdGRvdXQpCisrCQlmY2xvc2Uob3V0KTsKKysJcmV0dXJuIDA7CisrCX0KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2 cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMKKy0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBzCTIwMTQt MTAtMTYgMTM6MTk6MzUuMDkzMzA2Mjg4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTMzMDYyODggKzAy MDAKK0BAIC0wLDAgKzEsNTM3IEBACisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K KysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBEU0Eg c3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisr I2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZvaWQgcGJuKGNvbnN0IGNoYXIgKm5h bWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsKKysJdW5zaWduZWQgY2hhciAqdG1w OworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4p OworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRp b24gZXJyb3JcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRtcCk7Cisr CXByaW50ZigiJXMgPSAiLCBuYW1lKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJ cHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKKysJZnB1dHMoIlxuIiwgc3Rkb3V0KTsKKysJT1BFTlNT TF9mcmVlKHRtcCk7CisrCXJldHVybjsKKysJfQorKworK3ZvaWQgcHJpbWVzKCkKKysgICAgewor KyAgICBjaGFyIGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0MF07CisrICAgIGNoYXIg KmtleXdvcmQsICp2YWx1ZTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3Rk aW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJj bXAoa2V5d29yZCwiUHJpbWUiKSkKKysJICAgIHsKKysJICAgIEJJR05VTSAqcHA7CisrCisrCSAg ICBwcD1CTl9uZXcoKTsKKysJICAgIGRvX2hleDJibigmcHAsdmFsdWUpOworKwkgICAgcHJpbnRm KCJyZXN1bHQ9ICVjXG4iLAorKwkJICAgQk5faXNfcHJpbWVfZXgocHAsMjAsTlVMTCxOVUxMKSA/ ICdQJyA6ICdGJyk7CisrCSAgICB9CSAgICAKKysJfQorKyAgICB9CisrCisrdm9pZCBwcWcoKQor KyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAg IGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUo ZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9s aW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rk b3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkK KysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikp CisrCSAgICB7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21v ZCA9ICVkXVxuXG4iLG5tb2QpOworKworKwkgICAgd2hpbGUobi0tKQorKwkJeworKwkJdW5zaWdu ZWQgY2hhciBzZWVkWzIwXTsKKysJCURTQSAqZHNhOworKwkJaW50IGNvdW50ZXI7CisrCQl1bnNp Z25lZCBsb25nIGg7CisrCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysKKysJCWlmICghRFNBX2dl bmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291bnRlciwmaCxOVUxMKSkK KysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlw Ym4oIlAiLGRzYS0+cCk7CisrCQlwYm4oIlEiLGRzYS0+cSk7CisrCQlwYm4oIkciLGRzYS0+Zyk7 CisrCQlwdigiU2VlZCIsc2VlZCwyMCk7CisrCQlwcmludGYoImMgPSAlZFxuIixjb3VudGVyKTsK KysJCXByaW50ZigiSCA9ICVseFxuIixoKTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQpOworKwkJfQor KwkgICAgfQorKwllbHNlCisrCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsKKysJfQorKyAgICB9Cisr Cisrdm9pZCBwcWd2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFy IGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpw ID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7CisrICAgIGludCBjb3VudGVyLCBjb3VudGVy MjsKKysgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKKysgICAgRFNBICpkc2E9TlVMTDsKKysgICAg aW50IG5tb2Q9MDsKKysgICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRdOworKworKyAgICB3aGls ZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNl X2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1Zixz dGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWZwdXRzKGJ1Ziwgc3Rkb3V0KTsKKysJaWYo IXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQorKwkgICAgeworKwkgICAgaW50IHNsZW4gPSBo ZXgyYmluKHZhbHVlLCBzZWVkKTsKKysJICAgIGlmIChzbGVuICE9IDIwKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7CisrCQlleGl0ICgxKTsK KysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImMiKSkKKysJICAgIGNv dW50ZXIgPWF0b2koYnVmKzQpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSCIpKQorKwkg ICAgeworKwkgICAgaCA9IGF0b2kodmFsdWUpOworKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnKQor KwkJeworKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsK KysJCX0KKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50ZXIyLCZoMixOVUxMKSkK KysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrICAg ICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChkc2EtPnEsIHEpIHx8IEJO X2NtcChkc2EtPmcsIGcpCisrCQl8fCAoY291bnRlciAhPSBjb3VudGVyMikgfHwgKGggIT0gaDIp KQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNlCisrCSAgICAJcHJp bnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJICAgIEJOX2ZyZWUocCk7CisrCSAgICBCTl9mcmVlKHEp OworKwkgICAgQk5fZnJlZShnKTsKKysJICAgIHAgPSBOVUxMOworKwkgICAgcSA9IE5VTEw7Cisr CSAgICBnID0gTlVMTDsKKysJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYSA9IE5V TEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKy8qIEtleXBhaXIgdmVyaWZpY2F0aW9uIHJv dXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZJUFMxNDAtMgorKyAq IGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0IHRvIHBlcmZvcm0gc2Fu aXR5IGNoZWNrcyBvbiB0aGUKKysgKiBvdXRwdXQgb2YgdGhlIEtleVBhaXIgdGVzdC4KKysgKi8K KysKKytzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBCSUdOVU0gKnAsIEJJR05V TSAqcSwgQklHTlVNICpnLAorKwkJCQkJCQlCTl9DVFggKmN0eCkKKysgICAgeworKyAgICBCSUdO VU0gKnJlbSA9IE5VTEw7CisrICAgIGlmIChCTl9udW1fYml0cyhwKSAhPSBubW9kKQorKwlyZXR1 cm4gMDsKKysgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkKKysJcmV0dXJuIDA7CisrICAg IGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkK KysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9leChxLCBCTl9wcmltZV9jaGVja3Ms IGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJlbSA9IEJOX25ldygpOworKyAg ICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pCisrICAgIAl8 fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQorKwl8fCAhQk5fbW9kX2V4cChyZW0s IGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQorKwl7CisrCUJOX2ZyZWUocmVtKTsK KysJcmV0dXJuIDA7CisrCX0KKysgICAgLyogVG9kbzogY2hlY2sgZyAqLworKyAgICBCTl9mcmVl KHJlbSk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBrZXl2ZXIoKQorKyAgICB7 CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIg KmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9 IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOworKyAgICBCSUdOVU0gKlkyOworKyAgICBCTl9D VFggKmN0eCA9IE5VTEw7CisrICAgIGludCBubW9kPTAsIHBhcmFtY2hlY2sgPSAwOworKworKyAg ICBjdHggPSBCTl9DVFhfbmV3KCk7CisrICAgIFkyID0gQk5fbmV3KCk7CisrCisrICAgIHdoaWxl KGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2Vf bGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0 ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikp CisrCSAgICB7CisrCSAgICBpZiAocCkKKysJCUJOX2ZyZWUocCk7CisrCSAgICBwID0gTlVMTDsK KysJICAgIGlmIChxKQorKwkJQk5fZnJlZShxKTsKKysJICAgIHEgPSBOVUxMOworKwkgICAgaWYg KGcpCisrCQlCTl9mcmVlKGcpOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBwYXJhbWNoZWNrID0g MDsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJYIikpCisrCSAgICBYPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJZIikpCisrCSAgICB7CisrCSAgICBZPWhleDJibih2YWx1ZSk7CisrCSAgICBpZiAo IXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBh cnNlIEVycm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgcGJuKCJQIixwKTsKKysJ ICAgIHBibigiUSIscSk7CisrCSAgICBwYm4oIkciLGcpOworKwkgICAgcGJuKCJYIixYKTsKKysJ ICAgIHBibigiWSIsWSk7CisrCSAgICBpZiAoIXBhcmFtY2hlY2spCisrCQl7CisrCQlpZiAoZHNz X3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKKysJCQlwYXJhbWNoZWNrID0gMTsKKysJ CWVsc2UKKysJCQlwYXJhbWNoZWNrID0gLTE7CisrCQl9CisrCSAgICBpZiAocGFyYW1jaGVjayAh PSAxKQorKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgIGVsc2UKKysJCXsKKysJ CWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9jbXAoWTIsIFkpKQorKwkg ICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgICAgIGVsc2UKKysJICAgIAkJcHJp bnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJCX0KKysJICAgIEJOX2ZyZWUoWCk7CisrCSAgICBCTl9m cmVlKFkpOworKwkgICAgWCA9IE5VTEw7CisrCSAgICBZID0gTlVMTDsKKysJICAgIH0KKysJfQor KwlpZiAocCkKKysJICAgIEJOX2ZyZWUocCk7CisrCWlmIChxKQorKwkgICAgQk5fZnJlZShxKTsK KysJaWYgKGcpCisrCSAgICBCTl9mcmVlKGcpOworKwlpZiAoWTIpCisrCSAgICBCTl9mcmVlKFky KTsKKysgICAgfQorKworK3ZvaWQga2V5cGFpcigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAy NF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwor KyAgICBpbnQgbm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRp bikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1 ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9 CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsK KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJICAgIHsKKysJICAgIERTQSAqZHNh OworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1c blxuIixubW9kKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkK KysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBi bigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNh LT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKworKwkgICAgd2hpbGUobi0tKQorKwkJ eworKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vy cm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJcGJuKCJYIixkc2EtPnByaXZfa2V5 KTsKKysJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQpOworKwkJ fQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIHNpZ2dlbigpCisrICAgIHsKKysgICAg Y2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29y ZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKyAgICBEU0EgKmRzYT1OVUxMOworKworKyAg ICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRz KGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwi W21vZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIHByaW50Zigi W21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgaWYgKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUo ZHNhKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJCXsK KysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBibigiUCIs ZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsK KysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKKysJ ICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07CisrCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysJ ICAgIGludCBuOworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICBFVlBfTURfQ1RYIG1jdHg7Cisr CSAgICBEU0FfU0lHICpzaWc7CisrCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKwkg ICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigiTXNnIixtc2csbik7CisrCisrCSAg ICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygp OworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrCSAg ICBway5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysKKysJ ICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7CisrCSAgICBFVlBf U2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIEVWUF9TaWduRmluYWwoJm1jdHgsIHNi dWYsICZzbGVuLCAmcGspOworKworKwkgICAgc2lnID0gRFNBX1NJR19uZXcoKTsKKysJICAgIEZJ UFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKKysKKysJICAgIHBibigiUiIsc2ln LT5yKTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwor KwkgICAgRFNBX1NJR19mcmVlKHNpZyk7CisrCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgp OworKwkgICAgfQorKwl9CisrCWlmIChkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRzYSk7CisrICAg IH0KKysKKyt2b2lkIHNpZ3ZlcigpCisrICAgIHsKKysgICAgRFNBICpkc2E9TlVMTDsKKysgICAg Y2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgdW5zaWduZWQgY2hh ciBtc2dbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9 MCwgbj0wOworKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOworKworKyAgICBzaWctPnIgPSBO VUxMOworKyAgICBzaWctPnMgPSBOVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9m IGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2 YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGlu dWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAg bm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIGlmKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNhKTsK KysJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIlAiKSkKKysJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiUSIpKQorKwkgICAgZHNhLT5xPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICB7CisrCSAgICBkc2EtPmc9aGV4MmJuKHZhbHVl KTsKKysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgcGJuKCJQ Iixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAgcGJuKCJHIixkc2EtPmcp OworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkg ICAgcHYoIk1zZyIsbXNnLG4pOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi WSIpKQorKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJSIikpCisrCSAgICBzaWctPnI9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIlMiKSkKKysJICAgIHsKKysJICAgIEVWUF9NRF9DVFggbWN0eDsKKysJ ICAgIEVWUF9QS0VZIHBrOworKwkgICAgdW5zaWduZWQgY2hhciBzaWdidWZbNjBdOworKwkgICAg dW5zaWduZWQgaW50IHNsZW47CisrCSAgICBpbnQgcjsKKysJICAgIEVWUF9NRF9DVFhfaW5pdCgm bWN0eCk7CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKwkgICAgcGsucGtleS5kc2Eg PSBkc2E7CisrCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKKysJCisrCSAgICBwYm4oIlkiLGRz YS0+cHViX2tleSk7CisrCSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMiLHNpZy0+ cyk7CisrCisrCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShzaWdidWYsIHNpZyk7Cisr CSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7CisrCSAgICBF VlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAgciA9IEVWUF9WZXJpZnlGaW5h bCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOworKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZt Y3R4KTsKKysJCisrCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCByID09IDEgPyAnUCcgOiAn RicpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKwor K2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGlmKGFyZ2MgIT0g MikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xwcWd2ZXJ8a2V5cGFpcnxz aWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighRklQ U19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJ fQorKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCisrCXByaW1lcygpOworKyAgICBl bHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCisrCXBxZygpOworKyAgICBlbHNlIGlmKCFz dHJjbXAoYXJndlsxXSwicHFndmVyIikpCisrCXBxZ3ZlcigpOworKyAgICBlbHNlIGlmKCFzdHJj bXAoYXJndlsxXSwia2V5cGFpciIpKQorKwlrZXlwYWlyKCk7CisrICAgIGVsc2UgaWYoIXN0cmNt cChhcmd2WzFdLCJrZXl2ZXIiKSkKKysJa2V5dmVyKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCJzaWdnZW4iKSkKKysJc2lnZ2VuKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCJzaWd2ZXIiKSkKKysJc2lndmVyKCk7CisrICAgIGVsc2UKKysJeworKwlmcHJpbnRmKHN0 ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwlleGl0KDEpOworKwl9 CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5 NDMwNjMxMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19n Y210ZXN0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTMzMDYyODggKzAyMDAKK0BAIC0wLDAgKzEs NTcxIEBACisrLyogZmlwcy9hZXMvZmlwc19nY210ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERy IFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysg KiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDEx IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKwor KworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKwor K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQ UyBHQ00gc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+ CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZvaWQgZ2NtdGVzdChGSUxF ICppbiwgRklMRSAqb3V0LCBpbnQgZW5jcnlwdCkKKysJeworKwljaGFyIGJ1ZlsyMDQ4XTsKKysJ Y2hhciBsYnVmWzIwNDhdOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWludCBrZXlsZW4g PSAtMSwgaXZsZW4gPSAtMSwgYWFkbGVuID0gLTEsIHRhZ2xlbiA9IC0xLCBwdGxlbiA9IC0xOwor KwlpbnQgcnY7CisrCWxvbmcgbDsKKysJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0g TlVMTCwgKmFhZCA9IE5VTEwsICp0YWcgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpjdCA9IE5V TEwsICpwdCA9IE5VTEw7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJY29uc3QgRVZQX0NJUEhF UiAqZ2NtID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7CisrCisrCXdoaWxl KGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMoYnVmLG91 dCk7CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJ CQljb250aW51ZTsKKysJCWlmKCFzdHJjbXAoa2V5d29yZCwiW0tleWxlbiIpKQorKwkJCXsKKysJ CQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoa2V5bGVuID09IDEyOCkKKysJCQkJZ2Nt ID0gRVZQX2Flc18xMjhfZ2NtKCk7CisrCQkJZWxzZSBpZiAoa2V5bGVuID09IDE5MikKKysJCQkJ Z2NtID0gRVZQX2Flc18xOTJfZ2NtKCk7CisrCQkJZWxzZSBpZiAoa2V5bGVuID09IDI1NikKKysJ CQkJZ2NtID0gRVZQX2Flc18yNTZfZ2NtKCk7CisrCQkJZWxzZSAKKysJCQkJeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVkIGtleWxlbiAlZFxuIiwKKysJCQkJCQkJa2V5bGVuKTsK KysJCQkJfQorKwkJCWtleWxlbiA+Pj0gMzsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJbSVZsZW4iKSkKKysJCQlpdmxlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJbQUFEbGVuIikpCisrCQkJYWFkbGVuID0gYXRvaSh2YWx1 ZSkgPj4gMzsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltUYWdsZW4iKSkKKysJCQl0 YWdsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi W1BUbGVuIikpCisrCQkJcHRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlrZXkgPSBoZXgyYmluX20odmFsdWUsICZs KTsKKysJCQlpZiAobCAhPSBrZXlsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJ bmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9 CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSVYiKSkKKysJCQl7CisrCQkJaXYgPSBoZXgy YmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBpdmxlbikKKysJCQkJeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBJViBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOwor KwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlBUIikpCisrCQkJewor KwkJCXB0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gcHRsZW4pCisrCQkJ CXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgUFQgbGVuZ3RoXG4iKTsKKysJ CQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJD VCIpKQorKwkJCXsKKysJCQljdCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9 IHB0bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxl bmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiQUFEIikpCisrCQkJeworKwkJCWFhZCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwp OworKwkJCWlmIChsICE9IGFhZGxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklu Y29uc2lzdGVudCBBQUQgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0K KysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJUYWciKSkKKysJCQl7CisrCQkJdGFnID0gaGV4 MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gdGFnbGVuKQorKwkJCQl7CisrCQkJCWZw cmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFRhZyBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEp OworKwkJCQl9CisrCQkJfQorKwkJaWYgKGVuY3J5cHQgJiYgcHQgJiYgYWFkICYmIChpdiB8fCBl bmNyeXB0PT0xKSkKKysJCQl7CisrCQkJdGFnID0gT1BFTlNTTF9tYWxsb2ModGFnbGVuKTsKKysJ CQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAxKTsKKysJCQkvKiBSZWxh eCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCisrCQkJTV9FVlBfQ0lQSEVSX0NUWF9z ZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7CisrCQkJRklQU19j aXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOwor KwkJCWlmIChlbmNyeXB0ID09IDEpCisrCQkJCXsKKysJCQkJc3RhdGljIHVuc2lnbmVkIGNoYXIg aXZfZml4ZWRbNF0gPSB7MSwyLDMsNH07CisrCQkJCWlmICghaXYpCisrCQkJCQlpdiA9IE9QRU5T U0xfbWFsbG9jKGl2bGVuKTsKKysJCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwg TlVMTCwgMSk7CisrCQkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsCisrCQkJCQkJRVZQX0NU UkxfR0NNX1NFVF9JVl9GSVhFRCwKKysJCQkJCQk0LCBpdl9maXhlZCk7CisrCQkJCWlmICghRklQ U19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKKysJCQkJCUVWUF9DVFJMX0dDTV9JVl9HRU4sIDAsIGl2 KSkKKysJCQkJCXsKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiSVYgZ2VuIGVycm9yXG4iKTsKKysJ CQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJCU91dHB1dFZhbHVlKCJJViIsIGl2LCBpdmxlbiwg b3V0LCAwKTsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5V TEwsIGtleSwgaXYsIDEpOworKworKworKwkJCWlmIChhYWRsZW4pCisrCQkJCUZJUFNfY2lwaGVy KCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKKysJCQlpZiAocHRsZW4pCisrCQkJCXsKKysJCQkJ Y3QgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7CisrCQkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwg Y3QsIHB0LCBwdGxlbik7CisrCQkJCX0KKysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxM LCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RB RywKKysJCQkJCQkJCXRhZ2xlbiwgdGFnKTsJCisrCQkJT3V0cHV0VmFsdWUoIkNUIiwgY3QsIHB0 bGVuLCBvdXQsIDApOworKwkJCU91dHB1dFZhbHVlKCJUYWciLCB0YWcsIHRhZ2xlbiwgb3V0LCAw KTsKKysJCQlpZiAoaXYpCisrCQkJCU9QRU5TU0xfZnJlZShpdik7CisrCQkJaWYgKGFhZCkKKysJ CQkJT1BFTlNTTF9mcmVlKGFhZCk7CisrCQkJaWYgKGN0KQorKwkJCQlPUEVOU1NMX2ZyZWUoY3Qp OworKwkJCWlmIChwdCkKKysJCQkJT1BFTlNTTF9mcmVlKHB0KTsKKysJCQlpZiAoa2V5KQorKwkJ CQlPUEVOU1NMX2ZyZWUoa2V5KTsKKysJCQlpZiAodGFnKQorKwkJCQlPUEVOU1NMX2ZyZWUodGFn KTsKKysJCQlpdiA9IGFhZCA9IGN0ID0gcHQgPSBrZXkgPSB0YWcgPSBOVUxMOworKwkJCX0JCisr CQlpZiAoIWVuY3J5cHQgJiYgdGFnKQorKwkJCXsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwg Z2NtLCBOVUxMLCBOVUxMLCAwKTsKKysJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0 ZXN0aW5nICovCisrCQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhf RkxBR19OT05fRklQU19BTExPVyk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQ X0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4 LCBOVUxMLCBrZXksIGl2LCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBf Q1RSTF9HQ01fU0VUX1RBRywgdGFnbGVuLCB0YWcpOworKwkJCWlmIChhYWRsZW4pCisrCQkJCUZJ UFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKKysJCQlpZiAocHRsZW4pCisrCQkJ CXsKKysJCQkJcHQgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7CisrCQkJCXJ2ID0gRklQU19jaXBo ZXIoJmN0eCwgcHQsIGN0LCBwdGxlbik7CisrCQkJCX0KKysJCQlydiA9IEZJUFNfY2lwaGVyKCZj dHgsIE5VTEwsIE5VTEwsIDApOworKwkJCWlmIChydiA8IDApCisrCQkJCWZwcmludGYob3V0LCAi RkFJTCIgUkVTUF9FT0wpOworKwkJCWVsc2UKKysJCQkJT3V0cHV0VmFsdWUoIlBUIiwgcHQsIHB0 bGVuLCBvdXQsIDApOworKwkJCWlmIChpdikKKysJCQkJT1BFTlNTTF9mcmVlKGl2KTsKKysJCQlp ZiAoYWFkKQorKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKKysJCQlpZiAoY3QpCisrCQkJCU9QRU5T U0xfZnJlZShjdCk7CisrCQkJaWYgKHB0KQorKwkJCQlPUEVOU1NMX2ZyZWUocHQpOworKwkJCWlm IChrZXkpCisrCQkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJCWlmICh0YWcpCisrCQkJCU9QRU5T U0xfZnJlZSh0YWcpOworKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9IE5VTEw7 CisrCQkJfQorKwkJfQorKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCisrCX0KKysK KytzdGF0aWMgdm9pZCB4dHN0ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCisrCXsKKysJY2hhciBi dWZbMjA0ODAwXTsKKysJY2hhciBsYnVmWzIwNDgwMF07CisrCWNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKKysJaW50IGlubGVuID0gMDsKKysJaW50IGVuY3J5cHQgPSAwOworKwlsb25nIGw7CisrCXVu c2lnbmVkIGNoYXIgKmtleSA9IE5VTEwsICppdiA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKmlu YnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJY29u c3QgRVZQX0NJUEhFUiAqeHRzID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7 CisrCisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQorKwkJeworKwkJ ZnB1dHMoYnVmLG91dCk7CisrCQlpZiAoYnVmWzBdID09ICdbJyAmJiBzdHJsZW4oYnVmKSA+PSA5 KQorKwkJCXsKKysJCQlpZighc3RybmNtcChidWYsIltFTkNSWVBUXSIsIDkpKQorKwkJCQllbmNy eXB0ID0gMTsKKysJCQllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0RFQ1JZUFRdIiwgOSkpCisrCQkJ CWVuY3J5cHQgPSAwOworKwkJCX0KKysJCWlmICAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJLZXkiKSkKKysJCQl7CisrCQkJa2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYg KGwgPT0gMzIpCisrCQkJCXh0cyA9IEVWUF9hZXNfMTI4X3h0cygpOworKwkJCWVsc2UgaWYgKGwg PT0gNjQpCisrCQkJCXh0cyA9IEVWUF9hZXNfMjU2X3h0cygpOworKwkJCWVsc2UKKysJCQkJewor KwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKKysJCQkJ ZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJpIikp CisrCQkJeworKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gMTYp CisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgaSBsZW5ndGhcbiIp OworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZihlbmNyeXB0ICYmICFz dHJjbXAoa2V5d29yZCwiUFQiKSkKKysJCQl7CisrCQkJaW5idWYgPSBoZXgyYmluX20odmFsdWUs ICZsKTsKKysJCQlpbmxlbiA9IGw7CisrCQkJfQorKwkJZWxzZSBpZighZW5jcnlwdCAmJiAhc3Ry Y21wKGtleXdvcmQsIkNUIikpCisrCQkJeworKwkJCWluYnVmID0gaGV4MmJpbl9tKHZhbHVlLCAm bCk7CisrCQkJaW5sZW4gPSBsOworKwkJCX0KKysJCWlmIChpbmJ1ZikKKysJCQl7CisrCQkJRklQ U19jaXBoZXJpbml0KCZjdHgsIHh0cywga2V5LCBpdiwgZW5jcnlwdCk7CisrCQkJb3V0YnVmID0g T1BFTlNTTF9tYWxsb2MoaW5sZW4pOworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIG91dGJ1ZiwgaW5i dWYsIGlubGVuKTsKKysJCQlPdXRwdXRWYWx1ZShlbmNyeXB0ID8gIkNUIjoiUFQiLCBvdXRidWYs IGlubGVuLCBvdXQsIDApOworKwkJCU9QRU5TU0xfZnJlZShpbmJ1Zik7CisrCQkJT1BFTlNTTF9m cmVlKG91dGJ1Zik7CisrCQkJT1BFTlNTTF9mcmVlKGtleSk7CisrCQkJT1BFTlNTTF9mcmVlKGl2 KTsKKysJCQlpdiA9IGtleSA9IGluYnVmID0gb3V0YnVmID0gTlVMTDsKKysJCQl9CQorKwkJfQor KwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCisrCX0KKysKKytzdGF0aWMgdm9pZCBj Y210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCisrCXsKKysJY2hhciBidWZbMjAwMDQ4XTsKKysJ Y2hhciBsYnVmWzIwMDA0OF07CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJbG9uZyBsOwor Kwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMLCAqTm9uY2UgPSBOVUxMOworKwl1bnNpZ25lZCBj aGFyICpBZGF0YSA9IE5VTEwsICpQYXlsb2FkID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqQ1Qg PSBOVUxMOworKwlpbnQgUGxlbiA9IC0xLCBObGVuID0gLTEsIFRsZW4gPSAtMSwgQWxlbiA9IC0x OworKwlpbnQgZGVjciA9IDA7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJY29uc3QgRVZQX0NJ UEhFUiAqY2NtID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7CisrCisrCXdo aWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQorKwkJeworKwkJY2hhciAqcDsK KysJCWZwdXRzKGJ1ZixvdXQpOworKwkJcmVkbzoKKysJCWlmICghcGFyc2VfbGluZSgma2V5d29y ZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKworKwkJLyogSWYgc3Vycm91 bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgemFwIHRoZW0gKi8KKysJCWlmIChrZXl3b3JkWzBdID09 ICdbJykKKysJCQl7CisrCQkJa2V5d29yZCsrOworKwkJCXAgPSBzdHJjaHIodmFsdWUsICddJyk7 CisrCQkJaWYgKHApCisrCQkJCSpwID0gMDsKKysJCQl9CisrCQkvKiBTZWUgaWYgd2UgaGF2ZSBh IGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMKKysJCSAqIGlmIHNvIGNvcHkgcmVz dCBvZiBsaW5lIGJhY2sgdG8gYnVmZmVyIGFuZCByZWRvIGxhdGVyLgorKwkJICovCisrCQlwID0g c3RyY2hyKHZhbHVlLCAnLCcpOworKwkJaWYgKHApCisrCQkJeworKwkJCSpwID0gMDsKKysJCQlz dHJjcHkoYnVmLCBwICsgMSk7CisrCQkJc3RyY2F0KGJ1ZiwgIlxuIik7CisrCQkJZGVjciA9IDE7 CisrCQkJfQorKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiUGxlbiIpKQorKwkJCVBsZW4gPSBhdG9p KHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiTmxlbiIpKQorKwkJCU5sZW4g PSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiVGxlbiIpKQorKwkJ CVRsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQWxlbiIp KQorKwkJCUFsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWlmIChwKQorKwkJCWdvdG8gcmVkbzsKKysJ CWlmICghc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlpZiAoS2V5KQorKwkJCQlP UEVOU1NMX2ZyZWUoS2V5KTsKKysJCQlLZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlp ZiAobCA9PSAxNikKKysJCQkJY2NtID0gRVZQX2Flc18xMjhfY2NtKCk7CisrCQkJZWxzZSBpZiAo bCA9PSAyNCkKKysJCQkJY2NtID0gRVZQX2Flc18xOTJfY2NtKCk7CisrCQkJZWxzZSBpZiAobCA9 PSAzMikKKysJCQkJY2NtID0gRVZQX2Flc18yNTZfY2NtKCk7CisrCQkJZWxzZQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOworKwkJCQll eGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJOb25j ZSIpKQorKwkJCXsKKysJCQlpZiAoTm9uY2UpCisrCQkJCU9QRU5TU0xfZnJlZShOb25jZSk7Cisr CQkJTm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBObGVuKQorKwkJ CQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IG5vbmNlIGxlbmd0aFxuIik7 CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsIlBheWxvYWQiKSAmJiAhZGVjcikKKysJCQl7CisrCQkJUGF5bG9hZCA9IGhleDJiaW5fbSh2 YWx1ZSwgJmwpOworKwkJCWlmIChQbGVuICYmIGwgIT0gUGxlbikKKysJCQkJeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxlbmd0aFxuIik7CisrCQkJCWV4aXQo MSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkFkYXRhIikp CisrCQkJeworKwkJCWlmIChBZGF0YSkKKysJCQkJT1BFTlNTTF9mcmVlKEFkYXRhKTsKKysJCQlB ZGF0YSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChBbGVuICYmIGwgIT0gQWxlbikK KysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxlbmd0 aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsIkNUIikgJiYgZGVjcikKKysJCQl7CisrCQkJQ1QgPSBoZXgyYmluX20odmFsdWUs ICZsKTsKKysJCQlpZiAobCAhPSAoUGxlbiArIFRsZW4pKQorKwkJCQl7CisrCQkJCWZwcmludGYo c3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJ CX0KKysJCQl9CisrCQlpZiAoUGF5bG9hZCkKKysJCQl7CisrCQkJRklQU19jaXBoZXJpbml0KCZj dHgsIGNjbSwgTlVMTCwgTlVMTCwgMSk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwg RVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0 cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIFRsZW4sIDApOworKwkJCUZJUFNfY2lwaGVy aW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAxKTsKKysKKysJCQlGSVBTX2NpcGhlcigmY3R4 LCBOVUxMLCBOVUxMLCBQbGVuKTsKKysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBBZGF0YSwg QWxlbik7CisrCQkJQ1QgPSBPUEVOU1NMX21hbGxvYyhQbGVuICsgVGxlbik7CisrCQkJRklQU19j aXBoZXIoJmN0eCwgQ1QsIFBheWxvYWQsIFBsZW4pOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJs KCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCBUbGVuLAorKwkJCQkJCUNUICsgUGxlbik7Cisr CQkJT3V0cHV0VmFsdWUoIkNUIiwgQ1QsIFBsZW4gKyBUbGVuLCBvdXQsIDApOworKwkJCU9QRU5T U0xfZnJlZShDVCk7CisrCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOworKwkJCUNUID0gUGF5bG9h ZCA9IE5VTEw7CisrCQkJfQorKwkJaWYgKENUKQorKwkJCXsKKysJCQlpbnQgcnY7CisrCQkJaW50 IGxlbiA9IFBsZW4gPT0gMCA/IDE6IFBsZW47CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGNj bSwgTlVMTCwgTlVMTCwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NU UkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0 eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsCisrCQkJCQkJVGxlbiwgQ1QgKyBQbGVuKTsKKysJCQlG SVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5LCBOb25jZSwgMCk7CisrCQkJRklQU19jaXBo ZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwg QWRhdGEsIEFsZW4pOworKwkJCVBheWxvYWQgPSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwkJCXJ2 ID0gRklQU19jaXBoZXIoJmN0eCwgUGF5bG9hZCwgQ1QsIFBsZW4pOworKwkJCWlmIChydiA+PSAw KQorKwkJCQl7CisrCQkJCWlmIChydiA9PSAwKQorKwkJCQkJUGF5bG9hZFswXSA9IDA7CisrCQkJ CWZwdXRzKCJSZXN1bHQgPSBQYXNzIiBSRVNQX0VPTCwgb3V0KTsKKysJCQkJT3V0cHV0VmFsdWUo IlBheWxvYWQiLCBQYXlsb2FkLCBsZW4sIG91dCwgMCk7CisrCQkJCX0KKysJCQllbHNlCisrCQkJ CWZwdXRzKCJSZXN1bHQgPSBGYWlsIiBSRVNQX0VPTCwgb3V0KTsKKysJCQlPUEVOU1NMX2ZyZWUo Q1QpOworKwkJCU9QRU5TU0xfZnJlZShQYXlsb2FkKTsKKysJCQlDVCA9IFBheWxvYWQgPSBOVUxM OworKwkJCX0KKysJCX0KKysJaWYgKEtleSkKKysJCU9QRU5TU0xfZnJlZShLZXkpOworKwlpZiAo Tm9uY2UpCisrCQlPUEVOU1NMX2ZyZWUoTm9uY2UpOworKwlpZiAoQWRhdGEpCisrCQlPUEVOU1NM X2ZyZWUoQWRhdGEpOworKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsKKysJfQorKwor KyNpZmRlZiBGSVBTX0FMR1ZTCisraW50IGZpcHNfZ2NtdGVzdF9tYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKKysjZWxzZQorK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZW5k aWYKKysJeworKwlpbnQgZW5jcnlwdDsKKysJaW50IHh0cyA9IDAsIGNjbSA9IDA7CisrCUZJTEUg KmluLCAqb3V0OworKwlpZiAoYXJnYyA9PSA0KQorKwkJeworKwkJaW4gPSBmb3Blbihhcmd2WzJd LCAiciIpOworKwkJaWYgKCFpbikKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBv cGVuaW5nIGlucHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJb3V0ID0gZm9w ZW4oYXJndlszXSwgInciKTsKKysJCWlmICghb3V0KQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVy ciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQor KwkJfQorKwllbHNlIGlmIChhcmdjID09IDIpCisrCQl7CisrCQlpbiA9IHN0ZGluOworKwkJb3V0 ID0gc3Rkb3V0OworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiJXMgWy1l bmNyeXB0fC1kZWNyeXB0XVxuIixhcmd2WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCWZpcHNf YWxndGVzdF9pbml0KCk7CisrCWlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHQiKSkKKysJCWVu Y3J5cHQgPSAxOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHRJVmV4dCIpKQor KwkJZW5jcnlwdCA9IDI7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZGVjcnlwdCIpKQor KwkJZW5jcnlwdCA9IDA7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItY2NtIikpCisrCQlj Y20gPSAxOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLXh0cyIpKQorKwkJeHRzID0gMTsK KysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxu Iixhcmd2WzFdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCisrCWlmIChjY20pCisrCQljY210ZXN0 KGluLCBvdXQpOworKwllbHNlIGlmICh4dHMpCisrCQl4dHN0ZXN0KGluLCBvdXQpOworKwllbHNl CisrCQlnY210ZXN0KGluLCBvdXQsIGVuY3J5cHQpOworKworKwlpZiAoYXJnYyA9PSA0KQorKwkJ eworKwkJZmNsb3NlKGluKTsKKysJCWZjbG9zZShvdXQpOworKwkJfQorKworKwlyZXR1cm4gMDsK Kyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcm5ndnMuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19y bmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMu ZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NDMwNjMxMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk0 MzA2MzEwICswMjAwCitAQCAtMCwwICsxLDIzMCBAQAorKy8qCisrICogQ3J1ZGUgdGVzdCBkcml2 ZXIgZm9yIHByb2Nlc3NpbmcgdGhlIFZTVCBhbmQgTUNUIHRlc3R2ZWN0b3IgZmlsZXMKKysgKiBn ZW5lcmF0ZWQgYnkgdGhlIENNVlAgUk5HVlMgcHJvZHVjdC4KKysgKgorKyAqIE5vdGUgdGhlIGlu cHV0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBfdmVyeV8gc3BlY2lmaWMgZm9ybWF0Cisr ICogYXMgZGVzY3JpYmVkIGluIHRoZSBOSVNUIGRvY3VtZW50ICJUaGUgUmFuZG9tIE51bWJlciBH ZW5lcmF0b3IKKysgKiBWYWxpZGF0aW9uIFN5c3RlbSAoUk5HVlMpIiwgTWF5IDI1LCAyMDA0Lgor KyAqCisrICovCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVm IE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSTkcgc3VwcG9ydFxuIik7 CisrICAgIHJldHVybiAwOworK30KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMu aD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1 ZGUgImZpcHNfdXRsLmgiCisrCisrdm9pZCB2c3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNo YXIgKmtleSA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOworKyAgICB1bnNp Z25lZCBjaGFyICpkdCA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKKysgICAg Y2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29y ZCwgKnZhbHVlOworKyAgICBsb25nIGksIGtleWxlbjsKKysKKysgICAga2V5bGVuID0gMDsKKysK KysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJ ZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEz KSkKKysJCWtleWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5 XSIsIDEzKSkKKysJCWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAy NTYtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtleXdv cmQsIktleSIpKQorKwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAg ICBpZiAoaSAhPSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5 IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJCX0KKysJ ICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7CisrCSAgICBk dD1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJ ICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJICAgIHY9 aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJ ICAgIGlmICgha2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBr ZXkgb3IgRFRcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU194OTMxX3NldF9r ZXkoa2V5LCBrZXlsZW4pOworKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7CisrCSAgICBGSVBT X3g5MzFfc2V0X2R0KGR0KTsKKysJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2KSA8PSAw KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIp OworKwkgICAgICAgIHJldHVybjsKKysJICAgICAgICB9CisrCisrCSAgICBwdigiUiIscmV0LDE2 KTsKKysJICAgIE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJICAgIE9Q RU5TU0xfZnJlZShkdCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUodik7 CisrCSAgICB2ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBtY3QoKQor KyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNo YXIgKnYgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7CisrICAgIHVuc2ln bmVkIGNoYXIgcmV0WzE2XTsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1Zlsx MDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBsb25nIGksIGtleWxlbjsK KysgICAgaW50IGo7CisrCisrICAgIGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOwor KwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAxNjsK KysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlrZXlsZW4g PSAyNDsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCisrCQlr ZXlsZW4gPSAzMjsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1 ZikpCisrCQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJICAgIHsK KysJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5bGVuKQor KwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAl bGRcbiIsIGtleWxlbik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJEVCIpKQorKwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZp KTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlk IERUIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJWIikpCisrCSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7 CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBW IGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8fCAhZHQp CisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKKysJCXJl dHVybjsKKysJCX0KKysKKysJICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysJ ICAgIEZJUFNfeDkzMV9zZWVkKHYsMTYpOworKwkgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBp KyspCisrCQl7CisrCQkgICAgRklQU194OTMxX3NldF9kdChkdCk7CisrCQkgICAgaWYgKEZJUFNf eDkzMV9ieXRlcyhyZXQsMTYpIDw9IDApCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJy b3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJCSAgICAgICAgcmV0dXJuOworKwkJICAgICAg ICB9CisrCQkgICAgLyogSW5jcmVtZW50IERUICovCisrCQkgICAgZm9yIChqID0gMTU7IGogPj0g MDsgai0tKQorKwkJCXsKKysJCQlkdFtqXSsrOworKwkJCWlmIChkdFtqXSkKKysJCQkJYnJlYWs7 CisrCQkJfQorKwkJfQorKworKwkgICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVOU1NMX2Zy ZWUoa2V5KTsKKysJICAgIGtleSA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQpOworKwkg ICAgZHQgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5VTEw7Cisr CSAgICB9CisrCX0KKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQor KyAgICB7CisrICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW21j dHx2c3RdXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFGSVBTX21vZGVf c2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAg IEZJUFNfeDkzMV9yZXNldCgpOworKyAgICBpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUoKSkKKysJ eworKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcgUFJORyB0ZXN0IG1vZGVcbiIpOwor Kwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighc3RyY21wKGFy Z3ZbMV0sIm1jdCIpKQorKwltY3QoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInZz dCIpKQorKwl2c3QoKTsKKysgICAgZWxzZQorKwl7CisrCWZwcmludGYoc3RkZXJyLCJEb24ndCBr bm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7CisrCWV4aXQoMSk7CisrCX0KKysKKysgICAgcmV0 dXJuIDA7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JzYWd0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhZ3Rlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk0MzA2MzEwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAx NC0xMC0xNiAxMzoxOTozNS4wOTQzMDYzMTAgKzAyMDAKK0BAIC0wLDAgKzEsMzkwIEBACisrLyog Zmlwc19yc2FndGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAq LworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcK KysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysg Ki8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRm KCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxz ZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQs IEZJTEUgKmluKTsKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJz YSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAq ZSk7Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlC SUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpOworKworK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwor KworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlk b19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAx KQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwor KworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZv cGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOwor KwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0 cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoIXJzYV90ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBS U0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50 X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7 CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJl dHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAK KysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKKysJeworKwljaGFyICpsaW5l YnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlSU0Eg KnJzYSA9IE5VTEw7CisrCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpYcCA9IE5V TEw7CisrCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7CisrCUJJ R05VTSAqZSA9IE5VTEw7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9s aW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYg PSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVm IHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1 ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5 KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBs ZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29y ZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0g c3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsg KGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCB8fCAqa2V5d29y ZD09J1snKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQln b3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJ CS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsg MTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJs ZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwg InhwMSIpKQorKwkJCXsKKysJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1ZSkpCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAieHAyIikpCisrCQkJeworKwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZhbHVlKSkK KysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJYcCIpKQorKwkJCXsKKysJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFsdWUpKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgInhxMSIpKQorKwkJCXsKKysJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAieHEyIikpCisrCQkJeworKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEyLHZhbHVl KSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJYcSIpKQorKwkJCXsKKysJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEsdmFsdWUp KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1ZSkpCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAicDEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAy IikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwIikpCisr CQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQorKwkJCWNv bnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKKysJCQljb250aW51 ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKKysJCQljb250aW51ZTsKKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQljb250aW51ZTsKKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQln b3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAo ZSAmJiBYcDEgJiYgWHAyICYmIFhwKQorKwkJCXsKKysJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsK KysJCQlpZiAoIXJzYSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAoIXJzYV9wcmludGtleTEo b3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJl ZShYcDEpOworKwkJCVhwMSA9IE5VTEw7CisrCQkJQk5fZnJlZShYcDIpOworKwkJCVhwMiA9IE5V TEw7CisrCQkJQk5fZnJlZShYcCk7CisrCQkJWHAgPSBOVUxMOworKwkJCUJOX2ZyZWUoZSk7Cisr CQkJZSA9IE5VTEw7CisrCQkJfQorKworKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYmIFhxKQor KwkJCXsKKysJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBYcSkpCisr CQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShYcTEpOworKwkJCVhxMSA9IE5VTEw7CisrCQkJ Qk5fZnJlZShYcTIpOworKwkJCVhxMiA9IE5VTEw7CisrCQkJQk5fZnJlZShYcSk7CisrCQkJWHEg PSBOVUxMOworKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJCQlyc2EgPSBOVUxMOworKwkJCX0K KysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJ CU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVl KGxpbmVidWYpOworKworKwlpZiAoWHAxKQorKwkJQk5fZnJlZShYcDEpOworKwlpZiAoWHAyKQor KwkJQk5fZnJlZShYcDIpOworKwlpZiAoWHApCisrCQlCTl9mcmVlKFhwKTsKKysJaWYgKFhxMSkK KysJCUJOX2ZyZWUoWHExKTsKKysJaWYgKFhxMSkKKysJCUJOX2ZyZWUoWHExKTsKKysJaWYgKFhx MikKKysJCUJOX2ZyZWUoWHEyKTsKKysJaWYgKFhxKQorKwkJQk5fZnJlZShYcSk7CisrCWlmIChl KQorKwkJQk5fZnJlZShlKTsKKysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysK KysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290 byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQs IFJTQSAqcnNhLAorKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAorKwkJ QklHTlVNICplKQorKwl7CisrCWludCByZXQgPSAwOworKwlCSUdOVU0gKnAxID0gTlVMTCwgKnAy ID0gTlVMTDsKKysJcDEgPSBCTl9uZXcoKTsKKysJcDIgPSBCTl9uZXcoKTsKKysJaWYgKCFwMSB8 fCAhcDIpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2Es IHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAorKwkJCQkJCU5VTEwsIE5VTEwsIE5V TEwsIGUsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQs ICJwMSIsIHAxKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKKysJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6 CisrCWlmIChwMSkKKysJCUJOX2ZyZWUocDEpOworKwlpZiAocDIpCisrCQlCTl9mcmVlKHAyKTsK KysKKysJcmV0dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxF ICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhx KQorKwl7CisrCWludCByZXQgPSAwOworKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0gTlVMTDsK KysJcTEgPSBCTl9uZXcoKTsKKysJcTIgPSBCTl9uZXcoKTsKKysJaWYgKCFxMSB8fCAhcTIpCisr CQlnb3RvIGVycm9yOworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5V TEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKKysJCQkJCQlYcTEsIFhxMiwgWHEsIE5VTEws IE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMSIs IHExKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsKKysJZG9fYm5fcHJpbnRf bmFtZShvdXQsICJxIiwgcnNhLT5xKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJuIiwgcnNh LT5uKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKKysKKysJcmV0ID0g MTsKKysKKysJZXJyb3I6CisrCWlmIChxMSkKKysJCUJOX2ZyZWUocTEpOworKwlpZiAocTIpCisr CQlCTl9mcmVlKHEyKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYworLS0tIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMJMjAxNC0xMC0x NiAxMzoxOTozNS4wOTQzMDYzMTAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NDMwNjMxMCArMDIw MAorQEAgLTAsMCArMSwzNzAgQEAKKysvKiBmaXBzX3JzYXN0ZXN0LmMgKi8KKysvKiBXcml0dGVu 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 PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Cisr CisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0 dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0 YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKTsKKytz dGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQg KmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7 CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0g TlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7CisrCisr CWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4i LCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNh bHRsZW4gPCAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNh bHQgbGVuZ3RoXG4iKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlh cmd2ICs9IDI7CisrCQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEi LCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3Yr KzsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJ CWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0g c3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAo IWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlv biBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxl bikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vz c2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsK KysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlm IChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0 ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQor KworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2Ffc3Rlc3Qo RklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1Ziwg Km9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2Eg PSBOVUxMOworKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpN c2cgPSBOVUxMOworKwlsb25nIE1zZ2xlbiA9IC0xOworKwlpbnQga2V5bGVuID0gLTEsIGN1cnJl bnRfa2V5bGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9s aW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYg PSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVm IHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1 ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5 KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBs ZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29y ZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0g c3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IGp1c3QgY29weSAqLworKwkJ aWYgKCFwKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQln b3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJ CS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsg MTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJs ZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJLyogTG9vayBmb3IgW21vZCA9IFhY WF0gZm9yIGtleSBsZW5ndGggKi8KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJbbW9kIikp CisrCQkJeworKwkJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKwkJCWlmICgqcCAh PSAnXScpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJKnAgPSAwOworKwkJCWtleWxlbiA9 IGF0b2kodmFsdWUpOworKwkJCWlmIChrZXlsZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsK KysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7 CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQ X3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJ ZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0 IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJ eworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3Jp dGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJ CXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4o dmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20o dmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCX0KKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJLyogSWYga2V5IGxlbmd0 aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUgYW5kIG91dHB1dCBwdWJsaWMKKysJCSAqIGtleSBjb21w b25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0ZSBrZXkuCisrCQkgKi8KKysKKysJCWlmIChrZXlsZW4g IT0gY3VycmVudF9rZXlsZW4pCisrCQkJeworKwkJCUJJR05VTSAqYm5fZTsKKysJCQlpZiAocnNh KQorKwkJCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJcnNhID0gRklQU19yc2FfbmV3KCk7Cisr CQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJYm5fZSA9IEJOX25ldygpOworKwkJ CWlmICghYm5fZSB8fCAhQk5fc2V0X3dvcmQoYm5fZSwgMHgxMDAxKSkKKysJCQkJZ290byBlcnJv cjsKKysJCQlpZiAoIVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwg TlVMTCkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShibl9lKTsKKysJCQlmcHV0cygi biA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPm4pOworKwkJCWZwdXRzKCJc bmUgPSAiLCBvdXQpOworKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5lKTsKKysJCQlmcHV0cygi XG4iLCBvdXQpOworKwkJCWN1cnJlbnRfa2V5bGVuID0ga2V5bGVuOworKwkJCX0KKysKKysJCWlm IChNc2cgJiYgZGdzdCkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRn c3QsIE1zZywgTXNnbGVuLAorKwkJCQkJCQkJU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7Cisr CQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQl9CisrCisrCQl9Cisr CisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NM X2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVm KTsKKysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJuIHJldDsK KysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJy b3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJ fQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0 IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBT YWx0bGVuKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBO VUxMOworKwlpbnQgaSwgc2lnbGVuOworKwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8KKysJRVZQ X1BLRVkgcGs7CisrCUVWUF9NRF9DVFggY3R4OworKwlway50eXBlID0gRVZQX1BLRVlfUlNBOwor Kwlway5wa2V5LnJzYSA9IHJzYTsKKysKKysJc2lnbGVuID0gUlNBX3NpemUocnNhKTsKKysJc2ln YnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVuKTsKKysJaWYgKCFzaWdidWYpCisrCQlnb3RvIGVy cm9yOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDAp CisrCQl7CisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVu ID09IC0yKQorKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEpOworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJ CWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQor KwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2ln bmVkIGludCAqKSZzaWdsZW4sICZwaykpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURfQ1RY X2NsZWFudXAoJmN0eCk7CisrCisrCWZwdXRzKCJTID0gIiwgb3V0KTsKKysKKysJZm9yIChpID0g MDsgaSA8IHNpZ2xlbjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsK KysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisr CXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk0MzA2MzEwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMJ MjAxNC0xMC0xNiAxMzoxOTozNS4wOTQzMDYzMTAgKzAyMDAKK0BAIC0wLDAgKzEsMzc3IEBACisr LyogZmlwc19yc2F2dGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1Lgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisr ICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICov CisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50Zigi Tm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UK KysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBG SUxFICppbiwgaW50IHNhbHRsZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJTEUgKm91 dCwKKysJCUJJR05VTSAqbiwgQklHTlVNICplLAorKwkJY29uc3QgRVZQX01EICpkZ3N0LAorKwkJ dW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKlMsIGxv bmcgU2xlbiwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0g MTsKKysJaW50IFNhbHRsZW4gPSAtMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7 CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoKGFy Z2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxl biA9IGF0b2koYXJndlsyXSk7CisrCQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdvdG8gZW5k OworKwkJCX0KKysJCWFyZ2MgLT0gMjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxzZSBpZiAo KGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxl biA9IC0yOworKwkJYXJnYy0tOworKwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAx KQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwor KworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZv cGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOwor KwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0 cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoIXJzYV90ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBSU0FWVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7 CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJ CWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZj bG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7 CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVM RU4JMTAyNDAKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRs ZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKKysJQklHTlVNICpu ID0gTlVMTCwgKmUgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAqUyA9IE5V TEw7CisrCWxvbmcgTXNnbGVuLCBTbGVuOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAw OworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwor KwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlm ICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGlsZSAoZmdl dHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsK KysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJ CS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAq LworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFy dHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXAg fHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwg MCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAt IDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZh bHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICov CisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7 CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZh bHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21w KGtleXdvcmQsICJuIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZuLHZhbHVlKSkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJlIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZlLHZhbHVlKSkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTSEFBbGci KSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCisrCQkJCWRnc3QgPSBF VlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkKKysJCQkJ ZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2 IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOworKwkJCWVsc2UgaWYgKCFz dHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsKKysJCQll bHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkiRkFUQUw6IHVuc3VwcG9y dGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJCQl2YWx1ZSk7CisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJN c2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlp ZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJTXNnID0g aGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTIikpCisrCQkJ eworKwkJCWlmIChTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFs dWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlTID0gaGV4MmJpbl9tKHZhbHVl LCAmU2xlbik7CisrCQkJaWYgKCFTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQorKwkJCWNvbnRpbnVlOworKwkJ ZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsK KysKKysJCWlmIChuICYmIGUgJiYgTXNnICYmIFMgJiYgZGdzdCkKKysJCQl7CisrCQkJaWYgKCFy c2FfcHJpbnR2ZXIob3V0LCBuLCBlLCBkZ3N0LAorKwkJCQkJTXNnLCBNc2dsZW4sIFMsIFNsZW4s IFNhbHRsZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJ CU1zZyA9IE5VTEw7CisrCQkJT1BFTlNTTF9mcmVlKFMpOworKwkJCVMgPSBOVUxMOworKwkJCX0K KysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGlu ZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BF TlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAobikKKysJCUJOX2ZyZWUobik7CisrCWlmIChlKQor KwkJQk5fZnJlZShlKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisr CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4i LCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3By aW50dmVyKEZJTEUgKm91dCwKKysJCUJJR05VTSAqbiwgQklHTlVNICplLAorKwkJY29uc3QgRVZQ X01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKKysJCXVuc2ln bmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJldCA9IDAs IHI7CisrCS8qIFNldHVwIFJTQSBhbmQgRVZQX1BLRVkgc3RydWN0dXJlcyAqLworKwlSU0EgKnJz YV9wdWJrZXkgPSBOVUxMOworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NUWCBjdHg7CisrCXVu c2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisrCXJzYV9wdWJrZXkgPSBGSVBTX3JzYV9uZXcoKTsK KysJaWYgKCFyc2FfcHVia2V5KQorKwkJZ290byBlcnJvcjsKKysJcnNhX3B1YmtleS0+biA9IEJO X2R1cChuKTsKKysJcnNhX3B1YmtleS0+ZSA9IEJOX2R1cChlKTsKKysJaWYgKCFyc2FfcHVia2V5 LT5uIHx8ICFyc2FfcHVia2V5LT5lKQorKwkJZ290byBlcnJvcjsKKysJcGsudHlwZSA9IEVWUF9Q S0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2FfcHVia2V5OworKworKwlFVlBfTURfQ1RYX2lu aXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlNX0VWUF9NRF9DVFhf c2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8 PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJTV9FVlBfTURfQ1RY X3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOworKwlpZiAoIUVWUF9W ZXJpZnlJbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFF VlBfVmVyaWZ5VXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCisr CXIgPSBFVlBfVmVyaWZ5RmluYWwoJmN0eCwgUywgU2xlbiwgJnBrKTsKKysKKysKKysJRVZQX01E X0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAociA8IDApCisrCQlnb3RvIGVycm9yOworKwlF UlJfY2xlYXJfZXJyb3IoKTsKKysKKysJaWYgKHIgPT0gMCkKKysJCWZwdXRzKCJSZXN1bHQgPSBG XG4iLCBvdXQpOworKwllbHNlCisrCQlmcHV0cygiUmVzdWx0ID0gUFxuIiwgb3V0KTsKKysKKysJ cmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChyc2FfcHVia2V5KQorKwkJRklQU19yc2FfZnJl ZShyc2FfcHVia2V5KTsKKysJaWYgKGJ1ZikKKysJCU9QRU5TU0xfZnJlZShidWYpOworKworKwly ZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3NoYXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMv Zmlwc19zaGF0ZXN0LmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NTMwNjMzMyArMDIwMAor KysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMJMjAxNC0x MC0xNiAxMzoxOTozNS4wOTUzMDYzMzMgKzAyMDAKK0BAIC0wLDAgKzEsMzg4IEBACisrLyogZmlw c19zaGF0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5 QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4g YnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysj aW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKwor K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJ UFMgU0hBWFhYIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisr CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBkZ3N0X3Rlc3QoRklMRSAq b3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqbWQs IEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7Cisrc3RhdGlj IGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25l ZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCBy ZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vy cm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9 IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChh cmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsy XSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwg aW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisr CWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlh bGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghZGdzdF90 ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBkaWdlc3QgZmls ZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQly ZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsK KysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0 ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0Owor KworKwl9CisrCisrI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKKysjZGVmaW5lIFNI QV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAyKSArIDEwMCkK KysKKytpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY29uc3QgRVZQ X01EICptZCA9IE5VTEw7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwlj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTZWVk ID0gTlVMTDsKKysJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4gPSAtMTsKKysJ aW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21h bGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNI QV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJ Z290byBlcnJvcjsKKysKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFfVEVTVF9NQVhM SU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVi dWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8K KysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3Jk Kys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1Ziwg Jz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5l KSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJZnB1dHMob2xpbmVidWYsIG91 dCk7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKwor KwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3Zl IHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1 ZSkgLSAxOworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJbTCIpICYmICpw PT0nXScpCisrCQkJeworKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCisrCQkJCXsKKysJCQkJY2Fz ZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsKKysJCQkJY2FzZSAyODogbWQ9RVZQX3NoYTIy NCgpOyBicmVhazsKKysJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVhazsKKysJCQkJ Y2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKKysJCQkJY2FzZSA2NDogbWQ9RVZQX3No YTUxMigpOyBicmVhazsKKysJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQor KwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQorKwkJCXsKKysJCQlp ZiAoTGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUxlbiA9IGF0b2kodmFs dWUpOworKwkJCWlmIChMZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCS8qIE9u bHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KKysJCQlpZiAoTGVuICYgMHg3KQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhfQklUUykKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2dMZW4gPSBMZW4gPj4gMzsKKysJCQl9CisrCisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJbG9uZyB0bXBs ZW47CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOwor KwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnID0gaGV4MmJpbl9t KHZhbHVlLCAmdG1wbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCisrCQkJeworKwkJ CWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAo U2VlZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlTZWVkID0gaGV4MmJpbl9tKHZhbHVl LCAmU2VlZExlbik7CisrCQkJaWYgKCFTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCisrCQkJY29udGludWU7Cisr CQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQp OworKworKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQorKwkJCXsKKysJCQlpZiAo IXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJ CU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJTXNnTGVuID0gLTE7Cisr CQkJTGVuID0gLTE7CisrCQkJfQorKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAoU2VlZExlbiA+ IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQsIFNlZWRMZW4p KQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysJCQlTZWVkID0g TlVMTDsKKysJCQlTZWVkTGVuID0gLTE7CisrCQkJfQorKwkKKysKKysJCX0KKysKKysKKysJcmV0 ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJl ZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwor KwlpZiAoTXNnKQorKwkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCWlmIChTZWVkKQorKwkJT1BFTlNT TF9mcmVlKFNlZWQpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIs IGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCBwcmludF9k Z3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2cs IGludCBNc2dsZW4pCisrCXsKKysJaW50IGksIG1kbGVuOworKwl1bnNpZ25lZCBjaGFyIG1kW0VW UF9NQVhfTURfU0laRV07CisrCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwgbWQsICh1bnNp Z25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkpCisrCQl7CisrCQlmcHV0cygiRXJyb3IgY2Fs Y3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlmcHV0cygi TUQgPSAiLCBvdXQpOworKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKysJCWZwcmludGYo b3V0LCAiJTAyeCIsIG1kW2ldKTsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0dXJuIDE7Cisr CX0KKysKKytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91 dCwKKysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQorKwl7CisrCXVuc2lnbmVk IGludCBpLCBqLCBrOworKwlpbnQgcmV0ID0gMDsKKysJRVZQX01EX0NUWCBjdHg7CisrCXVuc2ln bmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7CisrCXVuc2lnbmVkIGludCBtbGVuLCBtMWxlbiwg bTJsZW4sIG0zbGVuOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTZWVk TGVuID4gRVZQX01BWF9NRF9TSVpFKQorKwkJbWxlbiA9IFNlZWRMZW47CisrCWVsc2UKKysJCW1s ZW4gPSBFVlBfTUFYX01EX1NJWkU7CisrCisrCW0xID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Cisr CW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCW0zID0gT1BFTlNTTF9tYWxsb2MobWxlbik7 CisrCisrCWlmICghbTEgfHwgIW0yIHx8ICFtMykKKysJCWdvdG8gbWNfZXJyb3I7CisrCisrCW0x bGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47CisrCW1lbWNweShtMSwgU2VlZCwgU2VlZExl bik7CisrCW1lbWNweShtMiwgU2VlZCwgU2VlZExlbik7CisrCW1lbWNweShtMywgU2VlZCwgU2Vl ZExlbik7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCWZvciAoaiA9IDA7IGogPCAxMDA7 IGorKykKKysJCXsKKysJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisrCQkJeworKwkJCUVW UF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZj dHgsIG0xLCBtMWxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwgbTJsZW4pOwor KwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKKysJCQlwID0gbTE7CisrCQkJ bTEgPSBtMjsKKysJCQltMWxlbiA9IG0ybGVuOworKwkJCW0yID0gbTM7CisrCQkJbTJsZW4gPSBt M2xlbjsKKysJCQltMyA9IHA7CisrCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG0zLCAmbTNs ZW4pOworKwkJCX0KKysJCWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7CisrCQlmcHV0 cygiTUQgPSAiLCBvdXQpOworKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKyspCisrCQkJZnBy aW50ZihvdXQsICIlMDJ4IiwgbTNba10pOworKwkJZnB1dHMoIlxuXG4iLCBvdXQpOworKwkJbWVt Y3B5KG0xLCBtMywgbTNsZW4pOworKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOworKwkJbTFsZW4g PSBtMmxlbiA9IG0zbGVuOworKwkJfQorKworKwlyZXQgPSAxOworKworKwltY19lcnJvcjoKKysJ aWYgKG0xKQorKwkJT1BFTlNTTF9mcmVlKG0xKTsKKysJaWYgKG0yKQorKwkJT1BFTlNTTF9mcmVl KG0yKTsKKysJaWYgKG0zKQorKwkJT1BFTlNTTF9mcmVlKG0zKTsKKysKKysJRVZQX01EX0NUWF9j bGVhbnVwKCZjdHgpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgKKy0tLSBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NTMw NjMzMyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwu aAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NTMwNjMzMyArMDIwMAorQEAgLTAsMCArMSwzNDMgQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9q 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 T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKyt2b2lkIGRvX3ByaW50X2Vycm9ycyh2b2lk KQorKwl7CisrCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOworKwlpbnQgbGluZSwgZmxhZ3M7Cisr CXVuc2lnbmVkIGxvbmcgbDsKKysJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5lX2RhdGEo JmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQiCisrCQkJCSI6ZmlsZT0lczpsaW5l PSVkOiVzXG4iLAorKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCksIEVSUl9H RVRfUkVBU09OKGwpLAorKwkJCWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJTkcgPyBk YXRhIDogIiIpOworKwkJfQorKwl9CisrCisraW50IGhleDJiaW4oY29uc3QgY2hhciAqaW4sIHVu c2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjEsIG4yOworKyAgICB1bnNpZ25l ZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltuMV0gIT0g J1xuJyA7ICkKKysJeyAvKiBmaXJzdCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYg KGluW24xXSA8PSAnOScpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAo KGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10g LSAnQScgKyAxMDsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2Yn KSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJu IC0xOworKwlpZighaW5bbjFdKQorKwkgICAgeworKwkgICAgb3V0W24yKytdPWNoOworKwkgICAg YnJlYWs7CisrCSAgICB9CisrCW91dFtuMl0gPSBjaCA8PCA0OworKwkvKiBzZWNvbmQgYnl0ZSAq LworKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAgIGNoID0g aW5bbjErK10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9 ICdGJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYgKChpbltu MV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ2En ICsgMTA7CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJb3V0W24yKytdIHw9IGNoOworKwl9 CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3Vuc2lnbmVkIGNoYXIgKmhleDJiaW5fbShj b25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlw ID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8yKTsKKysJKnBsZW4gPSBoZXgyYmlu KGluLCBwKTsKKysJcmV0dXJuIHA7CisrCX0KKysKKytpbnQgZG9faGV4MmJuKEJJR05VTSAqKnBy LCBjb25zdCBjaGFyICppbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlsb25nIHBsZW47 CisrCWludCByID0gMDsKKysJcCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOworKwlpZiAoIXApCisr CQlyZXR1cm4gMDsKKysJaWYgKCEqcHIpCisrCQkqcHIgPSBCTl9uZXcoKTsKKysJaWYgKCEqcHIp CisrCQlyZXR1cm4gMDsKKysJaWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQorKwkJciA9IDE7 CisrCU9QRU5TU0xfZnJlZShwKTsKKysJcmV0dXJuIHI7CisrCX0KKysKKytpbnQgZG9fYm5fcHJp bnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVk IGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJaWYgKGxlbiA9PSAwKQor KwkJeworKwkJZnB1dHMoIjAwIiwgb3V0KTsKKysJCXJldHVybiAxOworKwkJfQorKworKwl0bXAg PSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuIDA7CisrCQl9Cisr CUJOX2JuMmJpbihibiwgdG1wKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJZnBy aW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVy biAxOworKwl9CisrCisraW50IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25zdCBjaGFy ICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCByOworKwlmcHJpbnRmKG91dCwgIiVzID0g IiwgbmFtZSk7CisrCXIgPSBkb19ibl9wcmludChvdXQsIGJuKTsKKysJaWYgKCFyKQorKwkJcmV0 dXJuIDA7CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IHBh cnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNoYXIgKm9s aW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJjcHko bGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBsZWFk aW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkK KysJCWtleXdvcmQrKzsKKysKKysJLyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIo bGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGV4aXQgKi8KKysJaWYgKCFwKQorKwkJ cmV0dXJuIDA7CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl ICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOwor KworKwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVl KSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVl ICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0g J1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwkq cGt3ID0ga2V5d29yZDsKKysJKnB2YWwgPSB2YWx1ZTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytC SUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKKysgICAgeworKyAgICBCSUdOVU0gKnA9TlVM TDsKKysKKysgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkKKysJcmV0dXJuIE5VTEw7CisrCisr ICAgIHJldHVybiBwOworKyAgICB9CisrCisraW50IGJpbjJoZXgoY29uc3QgdW5zaWduZWQgY2hh ciAqaW4saW50IGxlbixjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG4xLCBuMjsKKysgICAg dW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxlbiA7ICsr bjEpCisrCXsKKysJY2g9aW5bbjFdID4+IDQ7CisrCWlmIChjaCA8PSAweDA5KQorKwkgICAgb3V0 W24yKytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKKysJY2g9 aW5bbjFdICYgMHgwZjsKKysJaWYoY2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7 CisrCWVsc2UKKysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7CisrCX0KKysgICAgb3V0W24yXT0n XDAnOworKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt2b2lkIHB2KGNvbnN0IGNoYXIgKnRh Zyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikKKysgICAgeworKyAgICBjaGFyIG9i dWZbMjA0OF07CisrCisrICAgIGJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysgICAgcHJpbnRmKCIl cyA9ICVzXG4iLHRhZyxvYnVmKTsKKysgICAgfQorKworKy8qIFRvIGF2b2lkIGV4dGVuc2l2ZSBj aGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAorKyAqIHRo ZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVzIGNvbnZl cnRlZCB0byBmb3JtCisrICogImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hhdCB3aGl0 ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKKysgKiBqdXN0IGhhdmUgbGVhZGluZyBh bmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KKysgKi8KKysKKytpbnQgdGlkeV9saW5lKGNoYXIg KmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwg KnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGluZWJ1 ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysJLyogTG9vayBmb3IgPSBzaWduICov CisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGp1c3QgY2hv cCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLworKwlpZiAoIXApCisrCQl7CisrCQlwID0ga2V5d29y ZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysJCXN0cmNweShvbGluZWJ1Ziwg a2V5d29yZCk7CisrCQlzdHJjYXQob2xpbmVidWYsICJcbiIpOworKwkJcmV0dXJuIDE7CisrCQl9 CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9 IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZh bHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwlzdHJjcHkob2xp bmVidWYsIGtleXdvcmQpOworKwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKKysJc3RyY2F0KG9s aW5lYnVmLCB2YWx1ZSk7CisrCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCisrCXJldHVybiAx OworKwl9CisrCisrLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNfIHJlYWQg Ki8KKytpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVkIGNoYXIg Km91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgbWVtc2V0KG91dCwwLGxlbik7Cisr ICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQorKwlpZihpbltuXSA9PSAnMScpCisrCSAgICBv dXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOworKyAgICByZXR1cm4gbGVuOworKyAgICB9CisrCisr aW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQor KyAgICB7CisrICAgIGludCBuOworKworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKKysJ b3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7CisrICAgIHJldHVy biBuOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCisrCisrdm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hh ciAqdmFsLCBpbnQgbGVuKQorK3sKKysjaWYgVkVSQk9TRQorKyAgY2hhciBvYnVmWzIwNDhdOwor KyAgaW50IG9sZW47CisrICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7CisrICBwcmlu dGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysjZW5kaWYKKyt9CisrCisrdm9p ZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbiwgRklM RSAqcmZwLGludCBiaXRtb2RlKQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAg aW50IG9sZW47CisrCisrICAgIGlmKGJpdG1vZGUpCisrCW9sZW49YmluMmJpbnQodmFsLGxlbixv YnVmKTsKKysgICAgZWxzZQorKwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysKKysgICAg ZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2lmIFZFUkJP U0UKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2VuZGlm CisrICAgIH0KKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfYWVz X3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu Yy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk1MzA2MzMzICswMjAwCisrKysgb3BlbnNzbC0x LjAuMWovY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1 LjA5NTMwNjMzMyArMDIwMAorQEAgLTAsMCArMSwzNTkgQEAKKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoK KysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5k aWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr c3RhdGljIGNvbnN0IHN0cnVjdAorKyAgICB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5 WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworKyAgICB9IHRlc3RzW109CisrCXsKKysJ eworKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKysJICAweDA4 LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKKysJeyAweDAwLDB4MTEsMHgy MiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCisrCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweEND LDB4REQsMHhFRSwweEZGIH0sCisrCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgw NCwweDMwLAorKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAor Kwl9LAorKwl9OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9hZXM7CisrCisrdm9pZCBGSVBTX2Nv cnJ1cHRfYWVzKCkKKysgICAgeworKyAgICBjb3JydXB0X2FlcyA9IDE7CisrICAgIH0KKysKKytp bnQgRklQU19zZWxmdGVzdF9hZXMoKQorKyAgICB7CisrICAgIGludCBuOworKyAgICBpbnQgcmV0 ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOworKworKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCisrCXsKKysJdW5zaWduZWQg Y2hhciBrZXlbMTZdOworKworKwltZW1jcHkoa2V5LCB0ZXN0c1tuXS5rZXksIHNpemVvZihrZXkp KTsKKysJaWYgKGNvcnJ1cHRfYWVzKQorKwkJa2V5WzBdKys7CisrCWlmIChmaXBzX2NpcGhlcl90 ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAorKwkJCQlrZXksIE5VTEwsCisrCQkJCXRlc3Rz W25dLnBsYWludGV4dCwKKysJCQkJdGVzdHNbbl0uY2lwaGVydGV4dCwKKysJCQkJMTYpIDw9IDAp CisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6CisrICAgIEVWUF9D SVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAg ICByZXR1cm4gcmV0OworKyAgICB9CisrCisrLyogQUVTLUNDTSB0ZXN0IGRhdGEgZnJvbSBOSVNU IHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBj Y21fa2V5W10gPSB7CisrCTB4Y2UsMHhiMCwweDA5LDB4YWUsMHhhNCwweDQ1LDB4NDQsMHg1MSww eGZlLDB4YWQsMHhmMCwweGU2LAorKwkweGIzLDB4NmYsMHg0NSwweDU1LDB4NWQsMHhkMCwweDQ3 LDB4MjMsMHhiYSwweGE0LDB4NDgsMHhlOAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgY2NtX25vbmNlW10gPSB7CisrCTB4NzYsMHg0MCwweDQzLDB4YzQsMHg5NCwweDYwLDB4YjcK Kyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9hZGF0YVtdID0geworKwkweDZl LDB4ODAsMHhkZCwweDdmLDB4MWIsMHhhZCwweGYzLDB4YTEsMHhjOSwweGFiLDB4MjUsMHhjNywK KysJMHg1ZiwweDEwLDB4YmQsMHhlNywweDhjLDB4MjMsMHhmYSwweDBlLDB4YjgsMHhmOSwweGFh LDB4YTUsCisrCTB4M2EsMHhkZSwweGZiLDB4ZjQsMHhjYiwweGY3LDB4OGYsMHhlNAorK307Cisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3B0W10gPSB7CisrCTB4YzgsMHhkMiwweDc1 LDB4ZjksMHgxOSwweGUxLDB4N2QsMHg3ZiwweGU2LDB4OWMsMHgyYSwweDFmLAorKwkweDU4LDB4 OTMsMHg5ZCwweGZlLDB4NGQsMHg0MCwweDM3LDB4OTEsMHhiNSwweGRmLDB4MTMsMHgxMAorK307 Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2N0W10gPSB7CisrCTB4OGEsMHgwZiww eDNkLDB4ODIsMHgyOSwweGU0LDB4OGUsMHg3NCwweDg3LDB4ZmQsMHg5NSwweGEyLAorKwkweDhh LDB4ZDMsMHg5MiwweGM4LDB4MGIsMHgzNiwweDgxLDB4ZDQsMHhmYiwweGM3LDB4YmIsMHhmZAor K307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0geworKwkweDJkLDB4 ZDYsMHhlZiwweDFjLDB4NDUsMHhkNCwweGNjLDB4YjcsMHgyMywweGRjLDB4MDcsMHg0NCwKKysJ MHgxNCwweGRiLDB4NTAsMHg2ZAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2 b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdb MTZdOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7 CisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSxOVUxMLCBOVUxMLCBOVUxMLCAxKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9J VkxFTiwKKysJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlp ZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsCisrCQkJ CQlzaXplb2YoY2NtX3RhZyksIE5VTEwpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NpcGhl ckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAxKSkKKysJCWdv dG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX3B0 KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0 eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQorKwkJZ290byBlcnI7 CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkgIT0g c2l6ZW9mKGNjbV9jdCkpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9j dHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOwor KwlpZiAobWVtY21wKHRhZywgY2NtX3RhZywgc2l6ZW9mKGNjbV90YWcpKQorKwkJfHwgbWVtY21w KG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkpCisrCQlnb3RvIGVycjsKKysKKysJbWVtc2V0 KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKworKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgs IEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSkKKysJCWdvdG8gZXJyOwor KwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwK KysJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVW UF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIDE2LCB0YWcpKQor KwkJZ290byBlcnI7CisrCWlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwg Y2NtX2tleSwgY2NtX25vbmNlLCAwKSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigm Y3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCisrCQln b3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2Yo Y2NtX2FkYXRhKSkgPCAwKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91 dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCisrCQlnb3RvIGVy cjsKKysKKysJaWYgKG1lbWNtcChvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkpKQorKwkJZ290 byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51 cCgmY3R4KTsKKysKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQ U19TRUxGVEVTVF9BRVNfQ0NNLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7 CisrCQl9CisrCWVsc2UKKysJCXJldHVybiByZXQ7CisrCisrCX0KKysKKysvKiBBRVMtR0NNIHRl c3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGdjbV9rZXlbXSA9IHsKKysJMHhlZSwweGJjLDB4MWYsMHg1NywweDQ4 LDB4N2YsMHg1MSwweDkyLDB4MWMsMHgwNCwweDY1LDB4NjYsCisrCTB4NWYsMHg4YSwweGU2LDB4 ZDEsMHg2NSwweDhiLDB4YjIsMHg2ZCwweGU2LDB4ZjgsMHhhMCwweDY5LAorKwkweGEzLDB4NTIs MHgwMiwweDkzLDB4YTUsMHg3MiwweDA3LDB4OGYKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGdjbV9pdltdID0geworKwkweDk5LDB4YWEsMHgzZSwweDY4LDB4ZWQsMHg4MSwweDcz LDB4YTAsMHhlZSwweGQwLDB4NjYsMHg4NAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZ2NtX3B0W10gPSB7CisrCTB4ZjUsMHg2ZSwweDg3LDB4MDUsMHg1YiwweGMzLDB4MmQsMHgw ZSwweGViLDB4MzEsMHhiMiwweGVhLAorKwkweGNjLDB4MmIsMHhmMiwweGE1CisrfTsKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fYWFkW10gPSB7CisrCTB4NGQsMHgyMywweGMzLDB4 Y2UsMHhjMywweDM0LDB4YjQsMHg5YiwweGRiLDB4MzcsMHgwYywweDQzLAorKwkweDdmLDB4ZWMs MHg3OCwweGRlCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fY3RbXSA9IHsK KysJMHhmNywweDI2LDB4NDQsMHgxMywweGE4LDB4NGMsMHgwZSwweDdjLDB4ZDUsMHgzNiwweDg2 LDB4N2UsCisrCTB4YjksMHhmMiwweDE3LDB4MzYKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGdjbV90YWdbXSA9IHsKKysJMHg2NywweGJhLDB4MDUsMHgxMCwweDI2LDB4MmEsMHhl NCwweDg3LDB4ZDcsMHgzNywweGVlLDB4NjIsCisrCTB4OTgsMHhmNywweDdlLDB4MGMKKyt9Owor KworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsK KysJdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4 OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yo b3V0KSk7CisrCW1lbXNldCh0YWcsIDAsIHNpemVvZih0YWcpKTsKKysJaWYgKCFFVlBfQ2lwaGVy SW5pdF9leCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMSkpCisr CQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dD TV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCisrCQlnb3RvIGVycjsK KysJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBnY21fa2V5LCBnY21f aXYsIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9h YWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVy KCZjdHgsIG91dCwgZ2NtX3B0LCBzaXplb2YoZ2NtX3B0KSkgIT0gc2l6ZW9mKGdjbV9jdCkpCisr CQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQor KwkJZ290byBlcnI7CisrCisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RS TF9HQ01fR0VUX1RBRywgMTYsIHRhZykpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcCh0 YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1jbXAob3V0LCBnY21fY3QsIDE2KSkKKysJCWdvdG8gZXJy OworKworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrCWlmICghRVZQX0NpcGhl ckluaXRfZXgoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQor KwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9H Q01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGdjbV9pdiksIE5VTEwpKQorKwkJZ290byBlcnI7 CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywg MTYsIHRhZykpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBO VUxMLCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDApKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBf Q2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQorKwkJZ290 byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX2N0LCBzaXplb2YoZ2NtX2N0 KSkgIT0gc2l6ZW9mKGdjbV9wdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0 eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQorKwkJZ290byBlcnI7CisrCisrCWlmIChtZW1jbXAob3V0 LCBnY21fcHQsIDE2KSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKworKwllcnI6Cisr CUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyZXQgPT0gMCkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSxGSVBTX1JfU0VMRlRFU1Rf RkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwllbHNlCisrCQlyZXR1cm4gcmV0OworKwor Kwl9CisrCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9rZXlbXSA9IHsK KysJMHhhMSwweGI5LDB4MGMsMHhiYSwweDNmLDB4MDYsMHhhYywweDM1LDB4M2IsMHgyYywweDM0 LDB4MzgsCisrCTB4NzYsMHgwOCwweDE3LDB4NjIsMHgwOSwweDA5LDB4MjMsMHgwMiwweDZlLDB4 OTEsMHg3NywweDE4LAorKwkweDE1LDB4ZjIsMHg5ZCwweGFiLDB4MDEsMHg5MywweDJmLDB4MmYK Kyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfaVtdID0geworKwkweDRm LDB4YWUsMHhmNywweDExLDB4N2MsMHhkYSwweDU5LDB4YzYsMHg2ZSwweDRiLDB4OTIsMHgwMSwK KysJMHgzZSwweDc2LDB4OGEsMHhkNQorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg WFRTXzEyOF9wdFtdID0geworKwkweGViLDB4YWIsMHhjZSwweDk1LDB4YjEsMHg0ZCwweDNjLDB4 OGQsMHg2ZiwweGIzLDB4NTAsMHgzOSwKKysJMHgwNywweDkwLDB4MzEsMHgxYworK307Cisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0geworKwkweDc3LDB4OGEsMHhl OCwweGI0LDB4M2MsMHhiOSwweDhkLDB4NWEsMHg4MiwweDUwLDB4ODEsMHhkNSwKKysJMHhiZSww eDQ3LDB4MWMsMHg2MworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1 Nl9rZXlbXSA9IHsKKysJMHgxZSwweGE2LDB4NjEsMHhjNSwweDhkLDB4OTQsMHgzYSwweDBlLDB4 NDgsMHgwMSwweGU0LDB4MmYsCisrCTB4NGIsMHgwOSwweDQ3LDB4MTQsMHg5ZSwweDdmLDB4OWYs MHg4ZSwweDNlLDB4NjgsMHhkMCwweGM3LAorKwkweDUwLDB4NTIsMHgxMCwweGJkLDB4MzEsMHgx YSwweDBlLDB4N2MsMHhkNiwweGUxLDB4M2YsMHhmZCwKKysJMHhmMiwweDQxLDB4OGQsMHg4ZCww eDE5LDB4MTEsMHhjMCwweDA0LDB4Y2QsMHhhNSwweDhkLDB4YTMsCisrCTB4ZDYsMHgxOSwweGI3 LDB4ZTIsMHhiOSwweDE0LDB4MWUsMHg1OCwweDMxLDB4OGUsMHhlYSwweDM5LAorKwkweDJjLDB4 ZjQsMHgxYiwweDA4CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2lb XSA9IHsKKysJMHhhZCwweGY4LDB4ZDksMHgyNiwweDI3LDB4NDYsMHg0YSwweGQyLDB4ZjAsMHg0 MiwweDhlLDB4ODQsCisrCTB4YTksMHhmOCwweDc1LDB4NjQKKyt9OworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIFhUU18yNTZfcHRbXSA9IHsKKysJMHgyZSwweGVkLDB4ZWEsMHg1MiwweGNk LDB4ODIsMHgxNSwweGUxLDB4YWMsMHhjNiwweDQ3LDB4ZTgsCisrCTB4MTAsMHhiYiwweGMzLDB4 NjQsMHgyZSwweDg3LDB4MjgsMHg3ZiwweDhkLDB4MmUsMHg1NywweGUzLAorKwkweDZjLDB4MGEs MHgyNCwweGZiLDB4YzEsMHgyYSwweDIwLDB4MmUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIFhUU18yNTZfY3RbXSA9IHsKKysJMHhjYiwweGFhLDB4ZDAsMHhlMiwweGY2LDB4Y2Us MHhhMywweGY1LDB4MGIsMHgzNywweGY5LDB4MzQsCisrCTB4ZDQsMHg2YSwweDliLDB4MTMsMHgw YiwweDlkLDB4NTQsMHhmMCwweDdlLDB4MzQsMHhmMywweDZhLAorKwkweGY3LDB4OTMsMHhlOCww eDZmLDB4NzMsMHhjNiwweGQ3LDB4ZGIKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194 dHMoKQorKwl7CisrCWludCByZXQgPSAxOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVW UF9hZXNfMTI4X3h0cygpLAorKwkJCQlYVFNfMTI4X2tleSwgWFRTXzEyOF9pLCBYVFNfMTI4X3B0 LCBYVFNfMTI4X2N0LAorKwkJCQlzaXplb2YoWFRTXzEyOF9wdCkpIDw9IDApCisrCQlyZXQgPSAw OworKworKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzI1Nl94dHMoKSwKKysJ CQkJWFRTXzI1Nl9rZXksIFhUU18yNTZfaSwgWFRTXzI1Nl9wdCwgWFRTXzI1Nl9jdCwKKysJCQkJ c2l6ZW9mKFhUU18yNTZfcHQpKSA8PSAwKQorKwkJcmV0ID0gMDsKKysKKysJRVZQX0NJUEhFUl9D VFhfY2xlYW51cCgmY3R4KTsKKysJaWYgKHJldCA9PSAwKQorKwkJRklQU2VycihGSVBTX0ZfRklQ U19TRUxGVEVTVF9BRVNfWFRTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwlyZXR1cm4gcmV0 OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9m aXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmMKKy0tLSBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NTMw NjMzMyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHMuYwkyMDE0LTEw LTE2IDEzOjE5OjM1LjA5NTMwNjMzMyArMDIwMAorQEAgLTAsMCArMSw0OTEgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisr ICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxkbGZjbi5oPgorKyNp bmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSAiZmlwc19s b2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysKKysjaWZuZGVmIFBBVEhfTUFYCisrI2RlZmluZSBQQVRIX01BWCAxMDI0CisrI2Vu ZGlmCisrCisrc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworK3N0YXRpYyBpbnQg Zmlwc19tb2RlID0gMDsKKytzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7CisrCisrc3RhdGlj IGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCk7Cisrc3RhdGljIGludCBmaXBzX3NldF9v d25pbmdfdGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFk KHZvaWQpOworKworKyNkZWZpbmUgZmlwc193X2xvY2soKQlDUllQVE9fd19sb2NrKENSWVBUT19M T0NLX0ZJUFMpCisrI2RlZmluZSBmaXBzX3dfdW5sb2NrKCkJQ1JZUFRPX3dfdW5sb2NrKENSWVBU T19MT0NLX0ZJUFMpCisrI2RlZmluZSBmaXBzX3JfbG9jaygpCUNSWVBUT19yX2xvY2soQ1JZUFRP X0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfcl91bmxvY2soKQlDUllQVE9fcl91bmxvY2soQ1JZ UFRPX0xPQ0tfRklQUykKKysKKytzdGF0aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBvbm9mZikK KysJeworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKwor KwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3df bG9jaygpOworKwkJZmlwc19tb2RlID0gb25vZmY7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZp cHNfd191bmxvY2soKTsKKysJCX0KKysJfQorKworK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQp CisrCXsKKysJaW50IHJldCA9IDA7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25p bmdfdGhyZWFkKCk7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlpZiAoIW93bmlu Z190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCQlyZXQgPSBmaXBzX21vZGU7CisrCQlpZiAoIW93 bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQor KworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQorKyAgICB7CisrICAgIGludCByZXQg PSAwOworKyAgICBpZiAoZmlwc19zdGFydGVkKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0g Zmlwc19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19y X2xvY2soKTsKKysJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOworKwlpZiAoIW93bmluZ190aHJl YWQpIGZpcHNfcl91bmxvY2soKTsKKysJfQorKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisr LyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRoaXMgd2lsbCBiZSBjYWxs ZWQKKysgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24uIEl0IGhhcyB0aGUg bWluaW11bQorKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBiaWcgYSBwZXJmb3Jt YW5jZSBoaXQuCisrICovCisrCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpCisrICAg IHsKKysgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKKysJeworKwlPcGVuU1NMRGllKF9fRklM RV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlMVVJFIik7CisrCX0KKysgICAg fQorKworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQorKyAgICB7CisrICAgIGZp cHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrICAgIH0KKysKKysvKiB3ZSBpbXBsZW1lbnQgd2hhdCBs aWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8KKysKKytzdGF0aWMgaW50CisrZ2V0X2xpYnJh cnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lLCBjaGFy ICpwYXRoLCBzaXplX3QgcGF0aGxlbikKKyt7CisrCURsX2luZm8gaW5mbzsKKysJdm9pZCAqZGws ICpzeW07CisrCWludCBydiA9IC0xOworKworKyAgICAgICAgZGwgPSBkbG9wZW4obGlibmFtZSwg UlRMRF9MQVpZKTsKKysgICAgICAgIGlmIChkbCA9PSBOVUxMKSB7CisrCSAgICAgICAgcmV0dXJu IC0xOworKyAgICAgICAgfSAgICAgICAKKysKKysJc3ltID0gZGxzeW0oZGwsIHN5bWJvbG5hbWUp OworKworKwlpZiAoc3ltICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwgJmluZm8pKSB7CisrCQlzdHJu Y3B5KHBhdGgsIGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuLTEpOworKwkJcGF0aFtwYXRobGVuLTFd ID0gJ1wwJzsKKysJCXJ2ID0gMDsKKysJfQorKworKwlkbGNsb3NlKGRsKTsJCisrCQorKwlyZXR1 cm4gcnY7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyIGNvbnZbXSA9ICIwMTIzNDU2Nzg5YWJj ZGVmIjsKKysKKytzdGF0aWMgY2hhciAqCisrYmluMmhleCh2b2lkICpidWYsIHNpemVfdCBsZW4p CisreworKwljaGFyICpoZXgsICpwOworKwl1bnNpZ25lZCBjaGFyICpzcmMgPSBidWY7CisrCQor KwloZXggPSBtYWxsb2MobGVuICogMiArIDEpOworKwlpZiAoaGV4ID09IE5VTEwpCisrCQlyZXR1 cm4gTlVMTDsKKysKKysJcCA9IGhleDsKKysKKysJd2hpbGUgKGxlbiA+IDApIHsKKysJCXVuc2ln bmVkIGM7CisrCisrCQljID0gKnNyYzsKKysJCXNyYysrOworKworKwkJKnAgPSBjb252W2MgPj4g NF07CisrCQkrK3A7CisrCQkqcCA9IGNvbnZbYyAmIDB4MGZdOworKwkJKytwOworKwkJLS1sZW47 CisrCX0KKysJKnAgPSAnXDAnOworKwlyZXR1cm4gaGV4OworK30KKysKKysjZGVmaW5lIEhNQUNf UFJFRklYICIuIiAKKysjZGVmaW5lIEhNQUNfU1VGRklYICIuaG1hYyIgCisrI2RlZmluZSBSRUFE X0JVRkZFUl9MRU5HVEggMTYzODQKKysKKytzdGF0aWMgY2hhciAqCisrbWFrZV9obWFjX3BhdGgo Y29uc3QgY2hhciAqb3JpZ3BhdGgpCisreworKwljaGFyICpwYXRoLCAqcDsKKysJY29uc3QgY2hh ciAqZm47CisrCisrCXBhdGggPSBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJFRklYKSArIHNpemVvZihI TUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKKysJaWYocGF0aCA9PSBOVUxMKSB7Cisr CQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlmbiA9IHN0cnJjaHIob3JpZ3BhdGgsICcvJyk7Cisr CWlmIChmbiA9PSBOVUxMKSB7CisrCQlmbiA9IG9yaWdwYXRoOworKwl9IGVsc2UgeworKwkJKytm bjsKKysJfQorKworKwlzdHJuY3B5KHBhdGgsIG9yaWdwYXRoLCBmbi1vcmlncGF0aCk7CisrCXAg PSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOworKwlwID0gc3RwY3B5KHAsIEhNQUNfUFJFRklYKTsK KysJcCA9IHN0cGNweShwLCBmbik7CisrCXAgPSBzdHBjcHkocCwgSE1BQ19TVUZGSVgpOworKwor KwlyZXR1cm4gcGF0aDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgaG1hY2tleVtdID0gIm9y Ym9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysKKytzdGF0aWMgaW50CisrY29tcHV0 ZV9maWxlX2htYWMoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmJ1Ziwgc2l6ZV90ICpobWFjbGVu KQorK3sKKysJRklMRSAqZiA9IE5VTEw7CisrCWludCBydiA9IC0xOworKwl1bnNpZ25lZCBjaGFy IHJidWZbUkVBRF9CVUZGRVJfTEVOR1RIXTsKKysJc2l6ZV90IGxlbjsKKysJdW5zaWduZWQgaW50 IGhsZW47CisrCUhNQUNfQ1RYIGM7CisrCisrCUhNQUNfQ1RYX2luaXQoJmMpOworKworKwlmID0g Zm9wZW4ocGF0aCwgInIiKTsKKysKKysJaWYgKGYgPT0gTlVMTCkgeworKwkJZ290byBlbmQ7Cisr CX0KKysKKysJSE1BQ19Jbml0KCZjLCBobWFja2V5LCBzaXplb2YoaG1hY2tleSktMSwgRVZQX3No YTI1NigpKTsKKysKKysJd2hpbGUgKChsZW49ZnJlYWQocmJ1ZiwgMSwgc2l6ZW9mKHJidWYpLCBm KSkgIT0gMCkgeworKwkJSE1BQ19VcGRhdGUoJmMsIHJidWYsIGxlbik7CisrCX0KKysKKysJbGVu ID0gc2l6ZW9mKHJidWYpOworKwkvKiByZXVzZSByYnVmIGZvciBobWFjICovCisrCUhNQUNfRmlu YWwoJmMsIHJidWYsICZobGVuKTsKKysKKysJKmJ1ZiA9IG1hbGxvYyhobGVuKTsKKysJaWYgKCpi dWYgPT0gTlVMTCkgeworKwkJZ290byBlbmQ7CisrCX0KKysKKysJKmhtYWNsZW4gPSBobGVuOwor KworKwltZW1jcHkoKmJ1ZiwgcmJ1ZiwgaGxlbik7CisrCisrCXJ2ID0gMDsKKytlbmQ6CisrCUhN QUNfQ1RYX2NsZWFudXAoJmMpOworKworKwlpZiAoZikKKysJCWZjbG9zZShmKTsKKysKKysJcmV0 dXJuIHJ2OworK30KKysKKytzdGF0aWMgaW50CisrRklQU0NIRUNLX3ZlcmlmeShjb25zdCBjaGFy ICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lKQorK3sKKysJY2hhciBwYXRoW1BBVEhf TUFYKzFdOworKwlpbnQgcnY7CisrCUZJTEUgKmhmOworKwljaGFyICpobWFjcGF0aCwgKnA7Cisr CWNoYXIgKmhtYWMgPSBOVUxMOworKwlzaXplX3QgbjsKKysJCisrCXJ2ID0gZ2V0X2xpYnJhcnlf cGF0aChsaWJuYW1lLCBzeW1ib2xuYW1lLCBwYXRoLCBzaXplb2YocGF0aCkpOworKworKwlpZiAo cnYgPCAwKQorKwkJcmV0dXJuIDA7CisrCisrCWhtYWNwYXRoID0gbWFrZV9obWFjX3BhdGgocGF0 aCk7CisrCWlmIChobWFjcGF0aCA9PSBOVUxMKQorKwkJcmV0dXJuIDA7CisrCisrCWhmID0gZm9w ZW4oaG1hY3BhdGgsICJyIik7CisrCWlmIChoZiA9PSBOVUxMKSB7CisrCQlmcmVlKGhtYWNwYXRo KTsKKysJCXJldHVybiAwOworKwl9CisrCisrCWlmIChnZXRsaW5lKCZobWFjLCAmbiwgaGYpID4g MCkgeworKwkJdm9pZCAqYnVmOworKwkJc2l6ZV90IGhtYWNsZW47CisrCQljaGFyICpoZXg7Cisr CisrCQlpZiAoKHA9c3RyY2hyKGhtYWMsICdcbicpKSAhPSBOVUxMKQorKwkJCSpwID0gJ1wwJzsK KysKKysJCWlmIChjb21wdXRlX2ZpbGVfaG1hYyhwYXRoLCAmYnVmLCAmaG1hY2xlbikgPCAwKSB7 CisrCQkJcnYgPSAtNDsKKysJCQlnb3RvIGVuZDsKKysJCX0KKysKKysJCWlmICgoaGV4PWJpbjJo ZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgeworKwkJCWZyZWUoYnVmKTsKKysJCQlydiA9IC01 OworKwkJCWdvdG8gZW5kOworKwkJfQorKworKwkJaWYgKHN0cmNtcChoZXgsIGhtYWMpICE9IDAp IHsKKysJCQlydiA9IC0xOworKwkJfQorKwkJZnJlZShidWYpOworKwkJZnJlZShoZXgpOworKwl9 IGVsc2UgeworKwkJcnYgPSAtMTsKKysJfQorKworK2VuZDoKKysJZnJlZShobWFjKTsKKysJZnJl ZShobWFjcGF0aCk7CisrCWZjbG9zZShoZik7CisrCisrCWlmIChydiA8IDApCisrCQlyZXR1cm4g MDsKKysKKysJLyogY2hlY2sgc3VjY2Vzc2Z1bCAqLworKwlyZXR1cm4gMTsJCisrfQorKworK2lu dCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgpCisrICAg IHsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGZpcHNfd19sb2NrKCk7CisrICAgIGZpcHNf c3RhcnRlZCA9IDE7CisrICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYo b25vZmYpCisrCXsKKysKKysJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysKKysJLyogRG9uJ3Qg Z28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYworKwkg ICBzZWVkaW5nICovCisrCWlmKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJICAgIHsKKysJICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxSRUFE WV9TRVQpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7Cisr CSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIKKysJ eworKwlleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzJdOworKwlpZiAoKE9Q RU5TU0xfaWEzMmNhcF9QWzBdICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKKysJ ICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9V TlNVUFBPUlRFRF9QTEFURk9STSk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkg ICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKwlPUEVOU1NMX2lhMzJjYXBf UFswXSB8PSAoMTw8MjgpOwkvKiBzZXQgInNoYXJlZCBjYWNoZSIJKi8KKysJT1BFTlNTTF9pYTMy Y2FwX1BbMV0gJj0gfigxPDwoNjAtMzIpKTsJLyogY2xlYXIgQVZYCQkqLworKwl9CisrI2VuZGlm CisrCisrCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJjcnlwdG8uc28uIiBTSExJQl9WRVJTSU9O X05VTUJFUiwiRklQU19tb2RlX3NldCIpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0Zf RklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsK KysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290 byBlbmQ7CisrCSAgICB9CisrCisrCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJzc2wuc28uIiBT SExJQl9WRVJTSU9OX05VTUJFUiwiU1NMX0NUWF9uZXciKSkKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05P VF9NQVRDSCk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsK KysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCisrCSAg ICBmaXBzX3NldF9tb2RlKG9ub2ZmKTsKKysJZWxzZQorKwkgICAgeworKwkgICAgZmlwc19zZWxm dGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0K KysJcmV0ID0gMTsKKysJZ290byBlbmQ7CisrCX0KKysgICAgZmlwc19zZXRfbW9kZSgwKTsKKysg ICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysgICAgcmV0ID0gMTsKKytlbmQ6CisrICAgIGZp cHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOworKyAgICBmaXBzX3dfdW5sb2NrKCk7CisrICAgIHJl dHVybiByZXQ7CisrICAgIH0KKysKKytzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNfdGhyZWFk OworK3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKKysKKytzdGF0aWMgaW50IGZpcHNf aXNfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlw c19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Cisr CQlpZiAoZmlwc190aHJlYWRfc2V0KQorKwkJCXsKKysJCQlDUllQVE9fVEhSRUFESUQgY3VyOwor KwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOworKwkJCWlmICghQ1JZUFRPX1RIUkVB RElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQorKwkJCQlyZXQgPSAxOworKwkJCX0KKysJCUNS WVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiByZXQ7Cisr CX0KKysKKytpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQg PSAwOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19GSVBTMik7CisrCQlpZiAoIWZpcHNfdGhyZWFkX3NldCkKKysJCQl7CisrCQkJQ1JZ UFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFkKTsKKysJCQlyZXQgPSAxOworKwkJCWZp cHNfdGhyZWFkX3NldCA9IDE7CisrCQkJfQorKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBmaXBzX2NsZWFyX293 bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfc3Rh cnRlZCkKKysJCXsKKysJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYg KGZpcHNfdGhyZWFkX3NldCkKKysJCQl7CisrCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKKysJCQlD UllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKKysJCQlpZiAoIUNSWVBUT19USFJFQURJRF9j bXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKKysJCQkJZmlwc190aHJlYWRfc2V0ID0gMDsKKysJCQl9 CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4g cmV0OworKwl9CisrCisrCisrI2lmIDAKKysvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVu c3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgorKyAqIG5hbWUgaXMg dG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0CisrICovCisrdm9pZCBoYXNo X2ZpbmFsKHZvaWQpCisrCXsKKysJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9O X0ZJUFNfTUVUSE9EKTsKKysJfQorKyNlbmRpZgorKworKworKyNlbmRpZgorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMJMjAxNC0xMC0xNiAxMzox OTozNS4wOTYzMDYzNTYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBz X2NtYWNfc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NjMwNjM1NiArMDIwMAorQEAg LTAsMCArMSwxNjEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2Ns LmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysJaW50IG5p ZDsKKysJY29uc3QgdW5zaWduZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RIXTsgc2l6ZV90 IGtleXNpemU7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnWzY0XTsgc2l6ZV90IG1zZ3NpemU7 CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMyXTsgc2l6ZV90IG1hY3NpemU7CisrfSBDTUFD X0tBVDsKKysKKysvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0 cHVicy84MDAtMzhCL1NQXzgwMC0zOEIucGRmICovCisrc3RhdGljIGNvbnN0IENNQUNfS0FUIHZl Y3RvcltdID0geworKyAgICB7CU5JRF9hZXNfMTI4X2NiYywJLyogQ291bnQgPSAzMiBmcm9tIENN QUNHZW5BRVMxMjgudHh0ICovCisrCXsgMHg3NywweGE3LDB4N2YsMHhhZiwgMHgyOSwweDBjLDB4 MWYsMHhhMywKKysJICAweDBjLDB4NjgsMHgzZCwweGYxLCAweDZiLDB4YTcsMHhhNywweDdiLCB9 LCAxMjgsCisrCXsgMHgwMiwweDA2LDB4ODMsMHhlMSwgMHhmMCwweDM5LDB4MmYsMHg0YywKKysJ ICAweGFjLDB4NTQsMHgzMSwweDhiLCAweDYwLDB4MjksMHgyNSwweDllLAorKwkgIDB4OWMsMHg1 NSwweDNkLDB4YmMsIDB4NGIsMHg2YSwweGQ5LDB4OTgsCisrCSAgMHhlNiwweDRkLDB4NTgsMHhl NCwgMHhlNywweGRjLDB4MmUsMHgxMywgfSwgMjU2LAorKwl7IDB4ZmIsMHhmZSwweGE0LDB4MWIs IH0sIDMyCisrICAgIH0sCisrICAgIHsJTklEX2Flc18xOTJfY2JjLAkvKiBDb3VudCA9IDIzIGZy b20gQ01BQ0dlbkFFUzE5Mi50eHQgKi8KKysJeyAweDdiLDB4MzIsMHgzOSwweDEzLCAweDY5LDB4 YWEsMHg0YywweGE5LAorKwkgIDB4NzUsMHg1OCwweDA5LDB4NWIsIDB4ZTMsMHhjMywweGVjLDB4 ODYsCisrCSAgMHgyYiwweGQwLDB4NTcsMHhjZSwgMHhmMSwweGUzLDB4MmQsMHg2MiwgfSwgMTky LAorKwl7IDB4MCB9LCAwLAorKwl7IDB4ZTQsMHhkOSwweDM0LDB4MGIsIDB4MDMsMHhlNiwweDdk LDB4ZWYsCisrCSAgMHhkNCwweDk2LDB4OWMsMHhjMSwgMHhlZCwweDM3LDB4MzUsMHhlNiwgfSwg MTI4LAorKyAgICB9LAorKyAgICB7CU5JRF9hZXNfMjU2X2NiYywJLyogQ291bnQgPSAzMyBmcm9t IENNQUNHZW5BRVMyNTYudHh0ICovCisrCXsgMHgwYiwweDEyLDB4MmEsMHhjOCwgMHhmMywweDRl LDB4ZDEsMHhmZSwKKysJICAweDA4LDB4MmEsMHgzNiwweDI1LCAweGQxLDB4NTcsMHg1NiwweDE0 LAorKwkgIDB4NTQsMHgxNiwweDdhLDB4YzEsIDB4NDUsMHhhMSwweDBiLDB4YmYsCisrCSAgMHg3 NywweGM2LDB4YTcsMHgwNSwgMHg5NiwweGQ1LDB4NzQsMHhmMSwgfSwgMjU2LAorKwl7IDB4NDks MHg4YiwweDUzLDB4ZmQsIDB4ZWMsMHg4NywweGVkLDB4Y2IsCisrCSAgMHhmMCwweDcwLDB4OTcs MHhkYywgMHhjZCwweGU5LDB4M2EsMHgwOCwKKysJICAweDRiLDB4YWQsMHg3NSwweDAxLCAweGEy LDB4MjQsMHhlMywweDg4LAorKwkgIDB4ZGYsMHgzNCwweDljLDB4ZTEsIDB4ODksMHg1OSwweGZl LDB4ODQsCisrCSAgMHg4NSwweGY4LDB4YWQsMHgxNSwgMHgzNywweGYwLDB4ZDgsMHg5NiwKKysJ ICAweGVhLDB4NzMsMHhiZSwweGRjLCAweDcyLDB4MTQsMHg3MSwweDNmLCB9LCAzODQsCisrCXsg MHhmNiwweDJjLDB4NDYsMHgzMiwgMHg5YiwgfSwgNDAsCisrICAgIH0sCisrICAgIHsJTklEX2Rl c19lZGUzX2NiYywJLyogQ291bnQgPSA0MSBmcm9tIENNQUNHZW5UREVTMy5yZXEgKi8KKysJeyAw eDg5LDB4YmMsMHhkOSwweDUyLCAweGE4LDB4YzgsMHhhYiwweDM3LAorKwkgIDB4MWEsMHhmNCww eDhhLDB4YzcsIDB4ZDAsMHg3MCwweDg1LDB4ZDUsCisrCSAgMHhlZiwweGY3LDB4MDIsMHhlNiwg MHhkNiwweDJjLDB4ZGMsMHgyMywgfSwgMTkyLAorKwl7IDB4ZmEsMHg2MiwweDBjLDB4MWIsIDB4 YmUsMHg5NywweDMxLDB4OWUsCisrCSAgMHg5YSwweDBjLDB4ZjAsMHg0OSwgMHgyMSwweDIxLDB4 ZjcsMHhhMiwKKysJICAweDBlLDB4YjAsMHg4YSwweDZhLCAweDcwLDB4OWQsMHhjYiwweGQwLAor KwkgIDB4MGEsMHhhZiwweDM4LDB4ZTQsIDB4ZjksMHg5ZSwweDc1LDB4NGUsIH0sIDI1NiwKKysJ eyAweDhmLDB4NDksMHhhMSwweGI3LCAweGQ2LDB4YWEsMHgyMiwweDU4LCB9LCA2NCwKKysgICAg fSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWMoKQorKwl7CisrCXNpemVfdCBuLCBv dXRsZW47CisrCXVuc2lnbmVkIGNoYXIgICAgb3V0WzMyXTsKKysJY29uc3QgRVZQX0NJUEhFUiAq Y2lwaGVyOworKwlDTUFDX0NUWCAqY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCWNvbnN0IENNQUNf S0FUICp0OworKwlpbnQgcnYgPSAxOworKworKwlmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2 ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQorKwkJeworKwkJY2lwaGVyID0gRklQ U19nZXRfY2lwaGVyYnluaWQodC0+bmlkKTsKKysJCWlmICghY2lwaGVyKQorKwkJCXsKKysJCQly diA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCWlmICghQ01BQ19Jbml0KGN0eCwgdC0+ a2V5LCB0LT5rZXlzaXplLzgsIGNpcGhlciwgMCkpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJ Z290byBlcnI7CisrCQkJfQorKwkJaWYgKCFDTUFDX1VwZGF0ZShjdHgsIHQtPm1zZywgdC0+bXNn c2l6ZS84KSkKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQkJ CisrCQlpZiAoIUNNQUNfRmluYWwoY3R4LCBvdXQsICZvdXRsZW4pKQorKwkJCXsKKysJCQlydiA9 IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCUNNQUNfQ1RYX2NsZWFudXAoY3R4KTsKKysK KysJCWlmKG91dGxlbiA8IHQtPm1hY3NpemUvOCB8fCBtZW1jbXAob3V0LHQtPm1hYyx0LT5tYWNz aXplLzgpKQorKwkJCXsKKysJCSAgICAJcnYgPSAwOworKwkJICAgIAl9CisrCQl9CisrCisrCWVy cjoKKysJQ01BQ19DVFhfZnJlZShjdHgpOworKworKwlpZiAocnYgPT0gLTEpCisrCQl7CisrCQly diA9IDA7CisrCQl9CisrCWlmICghcnYpCisrCQkgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZU RVNUX0NNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCisrCXJldHVybiBydjsKKysJfQor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2Vs ZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0 LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jLmZp cHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTYzMDYzNTYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk2 MzA2MzU2ICswMjAwCitAQCAtMCwwICsxLDE0NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QKKysg ICAgeworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRl eHRbOF07CisrICAgIH0gdGVzdHMyW109CisrCXsKKysJeworKwl7IDB4N2MsMHg0ZiwweDZlLDB4 ZjcsMHhhMiwweDA0LDB4MTYsMHhlYywKKysJICAweDBiLDB4NmIsMHg3YywweDllLDB4NWUsMHgx OSwweGE3LDB4YzQgfSwKKysJeyAweDA2LDB4YTcsMHhkOCwweDc5LDB4YWEsMHhjZSwweDY5LDB4 ZWYgfSwKKysJeyAweDRjLDB4MTEsMHgxNywweDU1LDB4YmYsMHhjNCwweDRlLDB4ZmQgfQorKwl9 LAorKwl7CisrCXsgMHg1ZCwweDllLDB4MDEsMHhkMywweDI1LDB4YzcsMHgzZSwweDM0LAorKwkg IDB4MDEsMHgxNiwweDdjLDB4ODUsMHgyMywweGRmLDB4ZTAsMHg2OCB9LAorKwl7IDB4OWMsMHg1 MCwweDA5LDB4MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9LAorKwl7IDB4ZDIsMHgwYiwweDE4LDB4 ZGYsMHhkOSwweDBkLDB4OWUsMHhmZiB9LAorKwl9CisrCX07CisrCisrc3RhdGljIGNvbnN0IHN0 cnVjdAorKyAgICB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKKysgICAgY29u c3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg Y2lwaGVydGV4dFs4XTsKKysgICAgfSB0ZXN0czNbXT0KKysJeworKwl7CisrCXsgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkgIDB4RkUsMHhEQywweEJBLDB4OTgs MHg3NiwweDU0LDB4MzIsMHgxMCwKKysJICAweDEyLDB4MzQsMHg1NiwweDc4LDB4OWEsMHhiYyww eGRlLDB4ZjAgfSwKKysJeyAweDhmLDB4OGYsMHhiZiwweDliLDB4NWQsMHg0OCwweGI0LDB4MWMg fSwKKysJeyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMsMHhhMiwweGVhLDB4MWIgfSwKKysJfSwK KysJeworKwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsMHhGRSwKKysJICAw eDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYsCisrCSAgMHhFRCwweDM5LDB4 RDksMHg1MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCisrCXsgMHgwMSwweDIzLDB4NDUsMHg2Nyww eDg5LDB4QUIsMHhDRCwweEVGIH0sCisrCXsgMHgxMSwweDI1LDB4YjAsMHgzNSwweGJlLDB4YTAs MHg4MiwweDg2IH0sCisrCX0sCisrCX07CisrCisrCisrc3RhdGljIGludCBjb3JydXB0X2RlczsK KysKKyt2b2lkIEZJUFNfY29ycnVwdF9kZXMoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfZGVzID0g MTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCisrICAgIHsKKysgICAgaW50 IG4sIHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9D VFhfaW5pdCgmY3R4KTsKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBh bmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsr bikKKysJeworKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysKKysJbWVtY3B5KHBsYWlu dGV4dCwgdGVzdHMyW25dLnBsYWludGV4dCwgc2l6ZW9mKHBsYWludGV4dCkpOworKwlpZiAoY29y cnVwdF9kZXMpCisrCQlwbGFpbnRleHRbMF0rKzsKKysJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZj dHgsIEVWUF9kZXNfZWRlX2VjYigpLAorKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxMLAorKwkJCQlw bGFpbnRleHQsIHRlc3RzMltuXS5jaXBoZXJ0ZXh0LCA4KSkKKysJCWdvdG8gZXJyOworKwl9Cisr CisrICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24g YW5zd2VycyAqLworKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCisrCXsKKysJaWYgKCFmaXBz X2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSwKKysJCQkJdGVzdHMzW25dLmtl eSwgTlVMTCwKKysJCQkJdGVzdHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQs IDgpKQorKwkJZ290byBlcnI7CisrCX0KKysgICAgcmV0ID0gMTsKKysgICAgZXJyOgorKyAgICBF VlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAgICBpZiAocmV0ID09IDApCisrCSAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK KysKKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2N0ci5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTYzMDYzNTYgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMJMjAxNC0xMC0x NiAxMzoxOTozNS4wOTYzMDYzNTYgKzAyMDAKK0BAIC0wLDAgKzEsNDM2IEBACisrLyogZmlwcy9y YW5kL2ZpcHNfZHJiZ19jdHIuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICov CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxp Yi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKytzdGF0aWMgdm9pZCBpbmNfMTI4 KERSQkdfQ1RSX0NUWCAqY2N0eCkKKysJeworKwlpbnQgaTsKKysJdW5zaWduZWQgY2hhciBjOwor Kwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1OworKwlmb3IgKGkgPSAwOyBpIDwgMTY7 IGkrKykKKysJCXsKKysJCWMgPSAqcDsKKysJCWMrKzsKKysJCSpwID0gYzsKKysJCWlmIChjKQor KwkJCXJldHVybjsKKysJCXAtLTsKKysJCX0KKysJfQorKworK3N0YXRpYyB2b2lkIGN0cl9YT1Io RFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVu KQorKwl7CisrCXNpemVfdCBpLCBuOworKwkvKiBBbnkgemVybyBwYWRkaW5nIHdpbGwgaGF2ZSBu byBlZmZlY3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQorKwkgKiBhcmUgWE9SaW5nLiBTbyBqdXN0IHBy b2Nlc3MgaG93ZXZlciBtdWNoIGlucHV0IHdlIGhhdmUuCisrCSAqLworKworKwlpZiAoIWluIHx8 ICFpbmxlbikKKysJCXJldHVybjsKKysKKysJaWYgKGlubGVuIDwgY2N0eC0+a2V5bGVuKQorKwkJ biA9IGlubGVuOworKwllbHNlCisrCQluID0gY2N0eC0+a2V5bGVuOworKworKwlmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKQorKwkJY2N0eC0+S1tpXSBePSBpbltpXTsKKysJaWYgKGlubGVuIDw9IGNj dHgtPmtleWxlbikKKysJCXJldHVybjsKKysKKysJbiA9IGlubGVuIC0gY2N0eC0+a2V5bGVuOwor KwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisrCWlmIChuID4gMTYpCisrCQluID0gMTY7Cisr CWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKwkJY2N0eC0+VltpXSBePSBpbltpICsgY2N0eC0+ a2V5bGVuXTsKKysJfQorKworKy8qIFByb2Nlc3MgYSBjb21wbGV0ZSBibG9jayB1c2luZyBCQ0Mg YWxnb3JpdGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4zICovCisrCisrc3RhdGljIHZvaWQgY3RyX0JD Q19ibG9jayhEUkJHX0NUUl9DVFggKmNjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqaW4pCisrCXsKKysJaW50IGk7CisrCWZvciAoaSA9IDA7IGkgPCAx NjsgaSsrKQorKwkJb3V0W2ldIF49IGluW2ldOworKwlBRVNfZW5jcnlwdChvdXQsIG91dCwgJmNj dHgtPmRmX2tzKTsKKysjaWYgMAorK2ZwcmludGYoc3RkZXJyLCAiQkNDIGluK291dFxuIik7Cisr QklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOworK0JJT19kdW1wX2ZwKHN0ZGVyciwgb3V0LCAx Nik7CisrI2VuZGlmCisrCX0KKysKKysvKiBIYW5kbGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9ucyBm b3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9yIEsgYW5kIFggKi8KKytzdGF0aWMgdm9pZCBj dHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu KQorKwl7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGluKTsKKysJY3RyX0JDQ19i bG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBpbik7CisrCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYp CisrCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGluKTsKKysJfQorKy8qIElu aXRpYWxpc2UgQkNDIGJsb2NrczogdGhlc2UgaGF2ZSB0aGUgdmFsdWUgMCwxLDIgaW4gbGVmdG1v c3QgcG9zaXRpb25zOgorKyAqIHNlZSAxMC40LjIgc3RhZ2UgNy4KKysgKi8KKytzdGF0aWMgdm9p ZCBjdHJfQkNDX2luaXQoRFJCR19DVFJfQ1RYICpjY3R4KQorKwl7CisrCW1lbXNldChjY3R4LT5L WCwgMCwgNDgpOworKwltZW1zZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsKKysJY3RyX0JDQ19ibG9j ayhjY3R4LCBjY3R4LT5LWCwgY2N0eC0+Ymx0bXApOworKwljY3R4LT5ibHRtcFszXSA9IDE7Cisr CWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOworKwlpZiAo Y2N0eC0+a2V5bGVuICE9IDE2KQorKwkJeworKwkJY2N0eC0+Ymx0bXBbM10gPSAyOworKwkJY3Ry X0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBjY3R4LT5ibHRtcCk7CisrCQl9CisrCX0K KysKKysvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRobSwgc29tZSBw b3NzaWJseSBwYXJ0aWFsICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUoRFJCR19DVFJf Q1RYICpjY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQor Kwl7CisrCWlmICghaW4gfHwgIWlubGVuKQorKwkJcmV0dXJuOworKwkvKiBJZiB3ZSBoYXZlIHBh cnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0ICovCisrCWlmIChjY3R4LT5ibHRtcF9wb3MpCisr CQl7CisrCQlzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9zOworKwkJLyogSWYgd2Ug bm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNzIGl0ICovCisrCQlpZiAoaW5sZW4gPj0g bGVmdCkKKysJCQl7CisrCQkJbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBp biwgbGVmdCk7CisrCQkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOworKwkJCWNj dHgtPmJsdG1wX3BvcyA9IDA7CisrCQkJaW5sZW4gLT0gbGVmdDsKKysJCQlpbiArPSBsZWZ0Owor KwkJCX0KKysJCX0KKysJLyogUHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxvY2tzICov CisrCXdoaWxlIChpbmxlbiA+PSAxNikKKysJCXsKKysJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGlu KTsKKysJCWluICs9IDE2OworKwkJaW5sZW4gLT0gMTY7CisrCQl9CisrCS8qIENvcHkgYW55IHJl bWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCisrCWlmIChp bmxlbiA+IDApCisrCQl7CisrCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3Ms IGluLCBpbmxlbik7CisrCQljY3R4LT5ibHRtcF9wb3MgKz0gaW5sZW47CisrCQl9CisrCX0KKysK KytzdGF0aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAqY2N0eCkKKysJeworKwlp ZiAoY2N0eC0+Ymx0bXBfcG9zKQorKwkJeworKwkJbWVtc2V0KGNjdHgtPmJsdG1wICsgY2N0eC0+ Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1wX3Bvcyk7CisrCQljdHJfQkNDX2Jsb2Nrcyhj Y3R4LCBjY3R4LT5ibHRtcCk7CisrCQl9CisrCX0KKysKKytzdGF0aWMgdm9pZCBjdHJfZGYoRFJC R19DVFJfQ1RYICpjY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGlu MWxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQorKwl7CisrCXNpemVfdCBp bmxlbjsKKysJdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPmJsdG1wOworKwlzdGF0aWMgdW5zaWdu ZWQgY2hhciBjODAgPSAweDgwOworKworKwljdHJfQkNDX2luaXQoY2N0eCk7CisrCWlmICghaW4x KQorKwkJaW4xbGVuID0gMDsKKysJaWYgKCFpbjIpCisrCQlpbjJsZW4gPSAwOworKwlpZiAoIWlu MykKKysJCWluM2xlbiA9IDA7CisrCWlubGVuID0gaW4xbGVuICsgaW4ybGVuICsgaW4zbGVuOwor KwkvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICovCisrCSpwKysgPSAoaW5s ZW4gPj4gMjQpICYgMHhmZjsKKysJKnArKyA9IChpbmxlbiA+PiAxNikgJiAweGZmOworKwkqcCsr ID0gKGlubGVuID4+IDgpICYgMHhmZjsKKysJKnArKyA9IGlubGVuICYgMHhmZjsKKysJLyogTkIg a2V5bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KKysJKnArKyA9IDA7CisrCSpwKysgPSAwOwor KwkqcCsrID0gMDsKKysJKnAgPSAodW5zaWduZWQgY2hhcikoKGNjdHgtPmtleWxlbiArIDE2KSAm IDB4ZmYpOworKwljY3R4LT5ibHRtcF9wb3MgPSA4OworKwljdHJfQkNDX3VwZGF0ZShjY3R4LCBp bjEsIGluMWxlbik7CisrCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwgaW4ybGVuKTsKKysJY3Ry X0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOworKwljdHJfQkNDX3VwZGF0ZShjY3R4LCAm YzgwLCAxKTsKKysJY3RyX0JDQ19maW5hbChjY3R4KTsKKysJLyogU2V0IHVwIGtleSBLICovCisr CUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNjdHgtPmtleWxlbiAqIDgsICZjY3R4LT5k Zl9reGtzKTsKKysJLyogWCBmb2xsb3dzIGtleSBLICovCisrCUFFU19lbmNyeXB0KGNjdHgtPktY ICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNjdHgtPmRmX2t4a3MpOworKwlBRVNfZW5jcnlw dChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3MpOworKwlpZiAoY2N0eC0+ a2V5bGVuICE9IDE2KQorKwkJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAxNiwgY2N0eC0+S1ggKyAz MiwgJmNjdHgtPmRmX2t4a3MpOworKyNpZiAwCisrZnByaW50ZihzdGRlcnIsICJPdXRwdXQgb2Yg Y3RyX2RmOlxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVu ICsgMTYpOworKyNlbmRpZgorKwl9CisrCisrLyogTkIgdGhlIG5vLWRmICBVcGRhdGUgaW4gU1A4 MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5wdXQgbGVuZ3RoCisrICogb2Ygc2VlZGxlbiwg aG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxnb3JpdGhtIHBhZCB0aGUgaW5wdXQgd2l0aAor KyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhhdmUgdXAgdG8gdHdvIHBhcmFtZXRlcnMgWE9S ZWQgdG9nZXRoZXIsCisrICogaGFuZGxlIGJvdGggY2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBpbnN0 ZWFkLgorKyAqLworKworK3N0YXRpYyB2b2lkIGN0cl9VcGRhdGUoRFJCR19DVFggKmRjdHgsCisr CQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQljb25zdCB1bnNp Z25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICpu b25jZSwgc2l6ZV90IG5vbmNlbGVuKQorKwl7CisrCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4 LT5kLmN0cjsKKysJLyoga3MgaXMgYWxyZWFkeSBzZXR1cCBmb3IgY29ycmVjdCBrZXkgKi8KKysJ aW5jXzEyOChjY3R4KTsKKysJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtz KTsKKysJLyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEyOCBiaXRzIG5lZWQgZXh0cmEgZW5jcnlw dCAqLworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJeworKwkJaW5jXzEyOChjY3R4KTsK KysJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNjdHgtPmtzKTsKKysJCX0K KysJaW5jXzEyOChjY3R4KTsKKysJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+ViwgJmNjdHgt PmtzKTsKKysJLyogSWYgMTkyIGJpdCBrZXkgcGFydCBvZiBWIGlzIG9uIGVuZCBvZiBLICovCisr CWlmIChjY3R4LT5rZXlsZW4gPT0gMjQpCisrCQl7CisrCQltZW1jcHkoY2N0eC0+ViArIDgsIGNj dHgtPlYsIDgpOworKwkJbWVtY3B5KGNjdHgtPlYsIGNjdHgtPksgKyAyNCwgOCk7CisrCQl9Cisr CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKKysJCXsKKysJCS8q IElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5nIGRlcml2ZWQgdmFsdWUgKi8KKysJCWlmIChpbjEg fHwgbm9uY2UgfHwgaW4yKQorKwkJCWN0cl9kZihjY3R4LCBpbjEsIGluMWxlbiwgbm9uY2UsIG5v bmNlbGVuLCBpbjIsIGluMmxlbik7CisrCQkvKiBJZiB0aGlzIGEgcmV1c2UgaW5wdXQgaW4xbGVu ICE9IDAgKi8KKysJCWlmIChpbjFsZW4pCisrCQkJY3RyX1hPUihjY3R4LCBjY3R4LT5LWCwgZGN0 eC0+c2VlZGxlbik7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWN0cl9YT1IoY2N0eCwgaW4xLCBp bjFsZW4pOworKwkJY3RyX1hPUihjY3R4LCBpbjIsIGluMmxlbik7CisrCQl9CisrCisrCUFFU19z ZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7CisrI2lm IDAKKytmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciB1cGRhdGUgaXM6XG4iKTsKKytCSU9fZHVt cF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxlbik7CisrQklPX2R1bXBfZnAoc3RkZXJy LCBjY3R4LT5WLCAxNik7CisrI2VuZGlmCisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX2lu c3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwg c2l6ZV90IGVudGxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5v bmNlbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQor Kwl7CisrCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysJbWVtc2V0KGNjdHgt PkssIDAsIHNpemVvZihjY3R4LT5LKSk7CisrCW1lbXNldChjY3R4LT5WLCAwLCBzaXplb2YoY2N0 eC0+VikpOworKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAm Y2N0eC0+a3MpOworKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBwZXJzLCBwZXJzbGVu LCBub25jZSwgbm9uY2VsZW4pOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJi Z19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCAKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpl bnQsIHNpemVfdCBlbnRsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90 IGFkaW5sZW4pCisrCXsKKysJY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgYWRpbiwgYWRp bmxlbiwgTlVMTCwgMCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2N0 cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvdXRsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4p CisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKwlpZiAoYWRpbiAm JiBhZGlubGVuKQorKwkJeworKwkJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxM LCAwLCBOVUxMLCAwKTsKKysJCS8qIFRoaXMgbWVhbnMgd2UgcmV1c2UgZGVyaXZlZCB2YWx1ZSAq LworKwkJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQorKwkJCXsKKysJ CQlhZGluID0gTlVMTDsKKysJCQlhZGlubGVuID0gMTsKKysJCQl9CisrCQl9CisrCWVsc2UKKysJ CWFkaW5sZW4gPSAwOworKworKwlmb3IgKDs7KQorKwkJeworKwkJaW5jXzEyOChjY3R4KTsKKysJ CWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQp CisrCQkJeworKwkJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGRjdHgtPmxiLCAmY2N0eC0+a3MpOwor KwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAob3V0 bGVuIDwgMTYpCisrCQkJeworKwkJCS8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBi ZSB1cGRhdGVkICovCisrCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtz KTsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNjdHgtPkspKQorKwkJCQly ZXR1cm4gMDsKKysJCQltZW1jcHkob3V0LCBjY3R4LT5LLCBvdXRsZW4pOworKwkJCWJyZWFrOwor KwkJCX0KKysJCUFFU19lbmNyeXB0KGNjdHgtPlYsIG91dCwgJmNjdHgtPmtzKTsKKysJCWlmICgh Zmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKKysJCQlyZXR1cm4gMDsKKysJCW91dCAr PSAxNjsKKysJCW91dGxlbiAtPSAxNjsKKysJCWlmIChvdXRsZW4gPT0gMCkKKysJCQlicmVhazsK KysJCX0KKysKKysJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxM LCAwKTsKKysKKysJcmV0dXJuIDE7CisrCisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX3Vu aW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJbWVtc2V0KCZkY3R4LT5kLmN0ciwg MCwgc2l6ZW9mKERSQkdfQ1RSX0NUWCkpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBz X2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4 ID0gJmRjdHgtPmQuY3RyOworKworKwlzaXplX3Qga2V5bGVuOworKworKwlzd2l0Y2ggKGRjdHgt PnR5cGUpCisrCQl7CisrCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKKysJCWtleWxlbiA9IDE2Owor KwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKKysJCWtleWxlbiA9IDI0Owor KwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2N0cjoKKysJCWtleWxlbiA9IDMyOwor KwkJYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJcmV0dXJuIC0yOworKwkJfQorKworKwlkY3R4 LT5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRpYXRlOworKwlkY3R4LT5yZXNlZWQgPSBk cmJnX2N0cl9yZXNlZWQ7CisrCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJhdGU7Cisr CWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOworKworKwljY3R4 LT5rZXlsZW4gPSBrZXlsZW47CisrCWRjdHgtPnN0cmVuZ3RoID0ga2V5bGVuICogODsKKysJZGN0 eC0+YmxvY2tsZW5ndGggPSAxNjsKKysJZGN0eC0+c2VlZGxlbiA9IGtleWxlbiArIDE2OworKwor KwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCisrCQl7CisrCQkvKiBk ZiBpbml0aWFsaXNhdGlvbiAqLworKwkJc3RhdGljIHVuc2lnbmVkIGNoYXIgZGZfa2V5WzMyXSA9 CisrCQkJeworKwkJCTB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKysJ CQkweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsCisrCQkJMHgxMCwweDEx LDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAorKwkJCTB4MTgsMHgxOSwweDFhLDB4MWIs MHgxYywweDFkLDB4MWUsMHgxZiAKKysJCQl9OworKwkJLyogU2V0IGtleSBzY2hlZHVsZSBmb3Ig ZGZfa2V5ICovCisrCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGRmX2tleSwgZGN0eC0+c3RyZW5ndGgs ICZjY3R4LT5kZl9rcyk7CisrCisrCQlkY3R4LT5taW5fZW50cm9weSA9IGNjdHgtPmtleWxlbjsK KysJCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOworKwkJZGN0eC0+bWluX25v bmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOworKwkJZGN0eC0+bWF4X25vbmNlID0gRFJCR19N QVhfTEVOR1RIOworKwkJZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7CisrCQlkY3R4 LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZGN0 eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKwkJZGN0eC0+bWF4X2VudHJvcHkgPSBk Y3R4LT5zZWVkbGVuOworKwkJLyogTm9uY2Ugbm90IHVzZWQgKi8KKysJCWRjdHgtPm1pbl9ub25j ZSA9IDA7CisrCQlkY3R4LT5tYXhfbm9uY2UgPSAwOworKwkJZGN0eC0+bWF4X3BlcnMgPSBkY3R4 LT5zZWVkbGVuOworKwkJZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOworKwkJfQorKwor KwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OworKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAx PDwyNDsKKysKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfaGFzaC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2hhc2guYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk2MzA2MzU2ICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwkyMDE0LTEwLTE2IDEzOjE5 OjM1LjA5NjMwNjM1NiArMDIwMAorQEAgLTAsMCArMSwzNzggQEAKKysvKiBmaXBzL3JhbmQvZmlw c19kcmJnX2hhc2guYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3Rl dmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxp Y2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNB UEkKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgor KworKy8qIFRoaXMgaXMgSGFzaF9kZiBmcm9tIFNQIDgwMC05MCAxMC40LjEgKi8KKysKKytzdGF0 aWMgaW50IGhhc2hfZGYoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQlj b25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu Mywgc2l6ZV90IGluM2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjQsIHNpemVfdCBp bjRsZW4pCisrCXsKKysJRVZQX01EX0NUWCAqbWN0eCA9ICZkY3R4LT5kLmhhc2gubWN0eDsKKysJ dW5zaWduZWQgY2hhciAqdnRtcCA9IGRjdHgtPmQuaGFzaC52dG1wOworKwl1bnNpZ25lZCBjaGFy IHRtcFs2XTsKKysJLyogU3RhbmRhcmQgb25seSBldmVyIG5lZWRzIHNlZWRsZW4gYnl0ZXMgd2hp Y2ggaXMgYWx3YXlzIGxlc3MgdGhhbgorKwkgKiBtYXhpbXVtIHBlcm1pdHRlZCBzbyBubyBuZWVk IHRvIGNoZWNrIGxlbmd0aC4KKysJICovCisrCXNpemVfdCBvdXRsZW4gPSBkY3R4LT5zZWVkbGVu OworKwl0bXBbMF0gPSAxOworKwl0bXBbMV0gPSAoKG91dGxlbiAqIDgpID4+IDI0KSAmIDB4ZmY7 CisrCXRtcFsyXSA9ICgob3V0bGVuICogOCkgPj4gMTYpICYgMHhmZjsKKysJdG1wWzNdID0gKChv dXRsZW4gKiA4KSA+PiA4KSAmIDB4ZmY7CisrCXRtcFs0XSA9IChvdXRsZW4gKiA4KSAmIDB4ZmY7 CisrCWlmICghaW4xKQorKwkJeworKwkJdG1wWzVdID0gKHVuc2lnbmVkIGNoYXIpaW4xbGVuOwor KwkJaW4xID0gdG1wICsgNTsKKysJCWluMWxlbiA9IDE7CisrCQl9CisrCWZvciAoOzspCisrCQl7 CisrCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBkY3R4LT5kLmhhc2gubWQpKQorKwkJCXJl dHVybiAwOworKwkJaWYgKCFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCB0bXAsIDUpKQorKwkJCXJl dHVybiAwOworKwkJaWYgKGluMSAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4xLCBpbjFs ZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluMiAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0 eCwgaW4yLCBpbjJsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluMyAmJiAhRklQU19kaWdl c3R1cGRhdGUobWN0eCwgaW4zLCBpbjNsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluNCAm JiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW40LCBpbjRsZW4pKQorKwkJCXJldHVybiAwOwor KwkJaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJCQlpZiAoIUZJUFNf ZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCW1lbWNw eShvdXQsIHZ0bXAsIG91dGxlbik7CisrCQkJT1BFTlNTTF9jbGVhbnNlKHZ0bXAsIGRjdHgtPmJs b2NrbGVuZ3RoKTsKKysJCQlyZXR1cm4gMTsKKysJCQl9CisrCQllbHNlIGlmKCFGSVBTX2RpZ2Vz dGZpbmFsKG1jdHgsIG91dCwgTlVMTCkpCisrCQkJcmV0dXJuIDA7CisrCisrCQlvdXRsZW4gLT0g ZGN0eC0+YmxvY2tsZW5ndGg7CisrCQlpZiAob3V0bGVuID09IDApCisrCQkJcmV0dXJuIDE7Cisr CQl0bXBbMF0rKzsKKysJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCX0KKysJfQorKwor KworKy8qIEFkZCBhbiB1bnNpZ25lZCBidWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwgc3RvcmluZyB0 aGUgcmVzdWx0IGluIGJ1Zi4gRm9yCisrICogdGhpcyBhbGdvcml0aG0gdGhlIGxlbmd0aCBvZiBp bnB1dCBuZXZlciBleGNlZWRzIHRoZSBzZWVkIGxlbmd0aC4KKysgKi8KKysKKytzdGF0aWMgdm9p ZCBjdHhfYWRkX2J1ZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqYnVmLAorKwkJCQl1 bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorKwl7CisrCXNpemVfdCBpID0gaW5sZW47 CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnE7CisrCXVuc2lnbmVkIGNoYXIgYywgKnA7CisrCXAg PSBidWYgKyBkY3R4LT5zZWVkbGVuOworKwlxID0gaW4gKyBpbmxlbjsKKysKKysJT1BFTlNTTF9h c3NlcnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKKysKKysJLyogU3BlY2lhbCBjYXNlOiB6ZXJvIGxl bmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICovCisrCWlmIChpKQorKwkJYyA9IDA7CisrCWVs c2UgCisrCQljID0gMTsKKysKKysJd2hpbGUgKGkpCisrCQl7CisrCQlpbnQgcjsKKysJCXAtLTsK KysJCXEtLTsKKysJCXIgPSAqcCArICpxICsgYzsKKysJCS8qIENhcnJ5ICovCisrCQlpZiAociA+ IDB4ZmYpCisrCQkJYyA9IDE7CisrCQllbHNlCisrCQkJYyA9IDA7CisrCQkqcCA9IHIgJiAweGZm OworKwkJaS0tOworKwkJfQorKworKwlpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVuOworKworKwkv KiBJZiBub3QgYWRkaW5nIHdob2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2FycmllcyAqLworKwlp ZiAoYyAmJiBpKQorKwkJeworKwkJZG8KKysJCQl7CisrCQkJcC0tOworKwkJCWMgPSAqcDsKKysJ CQljKys7CisrCQkJKnAgPSBjOworKwkJCWlmKGMpCisrCQkJCXJldHVybjsKKysJCQl9IHdoaWxl KGktLSk7CisrCQl9CisrCX0KKysKKysvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2ggdG8gViAqLwor KwkKKytzdGF0aWMgaW50IGN0eF9hZGRfbWQoRFJCR19DVFggKmRjdHgpCisrCXsKKysJaWYgKCFG SVBTX2RpZ2VzdGZpbmFsKCZkY3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ZC5oYXNoLnZ0bXAsIE5V TEwpKQorKwkJCXJldHVybiAwOworKwljdHhfYWRkX2J1ZihkY3R4LCBkY3R4LT5kLmhhc2guViwg ZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJcmV0dXJuIDE7CisrCX0K KysKKytzdGF0aWMgaW50IGhhc2hfZ2VuKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCBvdXRsZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5k Lmhhc2g7CisrCWlmIChvdXRsZW4gPT0gMCkKKysJCXJldHVybiAxOworKwltZW1jcHkoaGN0eC0+ dnRtcCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7CisrCWZvcig7OykKKysJCXsKKysJCUZJUFNf ZGlnZXN0aW5pdCgmaGN0eC0+bWN0eCwgaGN0eC0+bWQpOworKwkJRklQU19kaWdlc3R1cGRhdGUo JmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgtPnNlZWRsZW4pOworKwkJaWYgKCEoZGN0eC0+ eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKKysJCQl7CisrCQkJ RklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgZGN0eC0+bGIsIE5VTEwpOworKwkJCWRjdHgt PmxiX3ZhbGlkID0gMTsKKysJCQl9CisrCQllbHNlIGlmIChvdXRsZW4gPCBkY3R4LT5ibG9ja2xl bmd0aCkKKysJCQl7CisrCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgaGN0eC0+dnRt cCwgTlVMTCk7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBoY3R4LT52dG1w KSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91dCwgaGN0eC0+dnRtcCwgb3V0bGVuKTsK KysJCQlyZXR1cm4gMTsKKysJCQl9CisrCQllbHNlCisrCQkJeworKwkJCUZJUFNfZGlnZXN0Zmlu YWwoJmhjdHgtPm1jdHgsIG91dCwgTlVMTCk7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVz dChkY3R4LCBvdXQpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2ts ZW5ndGg7CisrCQkJaWYgKG91dGxlbiA9PSAwKQorKwkJCQlyZXR1cm4gMTsKKysJCQlvdXQgKz0g ZGN0eC0+YmxvY2tsZW5ndGg7CisrCQkJfQorKwkJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+dnRt cCwgTlVMTCwgMCk7CisrCQl9CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF9pbnN0YW50 aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXpl X3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25j ZV9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikK KysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJaWYgKCFoYXNo X2RmKGRjdHgsIGhjdHgtPlYsIAorKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwg cHN0ciwgcHN0cl9sZW4sCisrCQkJTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFoYXNo X2RmKGRjdHgsIGhjdHgtPkMsIAorKwkJCU5VTEwsIDAsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4s CisrCQkJTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysjaWZkZWYgSEFTSF9E UkJHX1RSQUNFCisrCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGluc3RhbnRpYXRlOlxuIik7 CisrCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7CisrCWhleHByaW50 KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrI2VuZGlmCisrCXJldHVybiAxOwor Kwl9CisrCisrCQorK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwK KysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCURSQkdfSEFT SF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwkvKiBWIGFib3V0IHRvIGJlIHVwZGF0ZWQg c28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgt PkMsCisrCQkJTlVMTCwgMSwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKKysJCQllbnQsIGVudF9s ZW4sIGFkaW4sIGFkaW5fbGVuKSkKKysJCXJldHVybiAwOworKwltZW1jcHkoaGN0eC0+ViwgaGN0 eC0+QywgZGN0eC0+c2VlZGxlbik7CisrCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLCBOVUxM LCAwLAorKwkJCWhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorKwkJ cmV0dXJuIDA7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQorKwlmcHJpbnRmKHN0ZGVyciwgIlYr QyBhZnRlciByZXNlZWQ6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5z ZWVkbGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysj ZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF9nZW5lcmF0 ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVu LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsK KysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCUVWUF9NRF9DVFggKm1j dHggPSAmaGN0eC0+bWN0eDsKKysJdW5zaWduZWQgY2hhciB0bXBbNF07CisrCWlmIChhZGluICYm IGFkaW5fbGVuKQorKwkJeworKwkJdG1wWzBdID0gMjsKKysJCWlmICghRklQU19kaWdlc3Rpbml0 KG1jdHgsIGhjdHgtPm1kKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghRVZQX0RpZ2VzdFVwZGF0 ZShtY3R4LCB0bXAsIDEpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRl KG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFF VlBfRGlnZXN0VXBkYXRlKG1jdHgsIGFkaW4sIGFkaW5fbGVuKSkKKysJCQlyZXR1cm4gMDsKKysJ CWlmICghY3R4X2FkZF9tZChkY3R4KSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFoYXNo X2dlbihkY3R4LCBvdXQsIG91dGxlbikpCisrCQlyZXR1cm4gMDsKKysKKysJdG1wWzBdID0gMzsK KysJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQorKwkJcmV0dXJuIDA7Cisr CWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQorKwkJcmV0dXJuIDA7CisrCWlm ICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkKKysJCXJl dHVybiAwOworKworKwlpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCisrCQlyZXR1cm4gMDsKKysKKysJ Y3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrCisr CXRtcFswXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZmOworKwl0bXBbMV0g PSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYgMHhmZjsKKysJdG1wWzJdID0gKGRjdHgt PnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKKysJdG1wWzNdID0gZGN0eC0+cmVzZWVkX2Nv dW50ZXIgJiAweGZmOworKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCB0bXAsIDQpOworKyNp ZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgZ2VuZXJh dGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJ aGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0 dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF91bmluc3RhbnRpYXRlKERSQkdf Q1RYICpkY3R4KQorKwl7CisrCUVWUF9NRF9DVFhfY2xlYW51cCgmZGN0eC0+ZC5oYXNoLm1jdHgp OworKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaGFzaCwgc2l6ZW9mKERSQkdfSEFTSF9DVFgp KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NU WCAqZGN0eCkKKysJeworKwljb25zdCBFVlBfTUQgKm1kOworKwlEUkJHX0hBU0hfQ1RYICpoY3R4 ID0gJmRjdHgtPmQuaGFzaDsKKysJbWQgPSBGSVBTX2dldF9kaWdlc3RieW5pZChkY3R4LT50eXBl KTsKKysJaWYgKCFtZCkKKysJCXJldHVybiAtMjsKKysJc3dpdGNoIChkY3R4LT50eXBlKQorKwkJ eworKwkJY2FzZSBOSURfc2hhMToKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTI4OworKwkJYnJlYWs7 CisrCisrCQljYXNlIE5JRF9zaGEyMjQ6CisrCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsKKysJCWJy ZWFrOworKworKwkJZGVmYXVsdDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMjU2OworKwkJYnJlYWs7 CisrCQl9CisrCisrCWRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3RhbnRpYXRlOwor KwlkY3R4LT5yZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVkOworKwlkY3R4LT5nZW5lcmF0ZSA9IGRy YmdfaGFzaF9nZW5lcmF0ZTsKKysJZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF91bmlu c3RhbnRpYXRlOworKworKwlkY3R4LT5kLmhhc2gubWQgPSBtZDsKKysJRVZQX01EX0NUWF9pbml0 KCZoY3R4LT5tY3R4KTsKKysKKysJLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1AgODAwLTkwIDEw LjEgdGFibGUgMiAqLworKworKwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3NpemUobWQp OworKwlpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKKysJCWRjdHgtPnNlZWRsZW4gPSAxMTE7 CisrCWVsc2UKKysJCWRjdHgtPnNlZWRsZW4gPSA1NTsKKysKKysKKysJZGN0eC0+bWluX2VudHJv cHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhf TEVOR1RIOworKworKwlkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7Cisr CWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysJZGN0eC0+bWF4X3BlcnMg PSBEUkJHX01BWF9MRU5HVEg7CisrCWRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwor KworKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OworKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwg PSAxPDwyNDsKKysKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzX2RyYmdfaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2htYWMuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk3MzA2Mzc4ICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDE0LTEwLTE2IDEz OjE5OjM1LjA5NjMwNjM1NiArMDIwMAorQEAgLTAsMCArMSwyODEgQEAKKysvKiBmaXBzL3JhbmQv Zmlwc19kcmJnX2htYWMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAo c3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5o PgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisr Cisrc3RhdGljIGludCBkcmJnX2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4z LCBzaXplX3QgaW4zbGVuCisrCQkJKQorKwl7CisrCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGMwID0g MCwgYzEgPSAxOworKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJSE1B Q19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKKysKKysJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwg aG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysJCXJldHVybiAw OworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkK KysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMCwgMSkpCisrCQlyZXR1 cm4gMDsKKysJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4pKQor KwkJcmV0dXJuIDA7CisrCWlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4y bGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBp bjMsIGluM2xlbikpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGht YWMtPkssIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgs IGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4g MDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkp CisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwp KQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghaW4xbGVuICYmICFpbjJsZW4gJiYgIWluM2xlbikK KysJCXJldHVybiAxOworKworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4 LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1B Q19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7 CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMxLCAxKSkKKysJCXJldHVybiAwOworKwlpZiAo aW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCisrCQlyZXR1cm4gMDsK KysJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQorKwkJcmV0 dXJuIDA7CisrCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVuKSkK KysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVMTCkp CisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0 eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhN QUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAw OworKworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrCQlyZXR1cm4g MDsKKysKKysJcmV0dXJuIDE7CisrCisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19pbnN0 YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBz aXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBu b25jZV9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xl bikKKysJeworKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJbWVtc2V0 KGhtYWMtPkssIDAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJbWVtc2V0KGhtYWMtPlYsIDEsIGRj dHgtPmJsb2NrbGVuZ3RoKTsKKysJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCisrCQkJZW50 LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbikpCisrCQlyZXR1cm4g MDsKKysKKysjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCisrCWZwcmludGYoc3RkZXJyLCAiSytWIGFm dGVyIGluc3RhbnRpYXRlOlxuIik7CisrCWhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+ YmxvY2tsZW5ndGgpOworKwloZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVu Z3RoKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaG1h Y19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwg c2l6ZV90IGVudF9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGluX2xlbikKKysJeworKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKKysJCQllbnQsIGVu dF9sZW4sIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwKSkKKysJCXJldHVybiAwOworKworKyNpZmRl ZiBITUFDX0RSQkdfVFJBQ0UKKysJeworKwkJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5k LmhtYWM7CisrCQlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciByZXNlZWQ6XG4iKTsKKysJCWhl eHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOworKwkJaGV4cHJpbnQo c3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7CisrCX0KKysjZW5kaWYKKysJcmV0 dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19nZW5lcmF0ZShEUkJHX0NUWCAq ZGN0eCwKKysJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJRFJCR19ITUFD X0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCUhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhj dHg7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKlZ0bXAgPSBobWFjLT5WOworKwlpZiAoYWRpbl9s ZW4gJiYgIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sCisrCQkJCQkJTlVM TCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysJZm9yICg7OykKKysJCXsKKysJCWlmICgh SE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLAorKwkJCQkJCQlo bWFjLT5tZCwgTlVMTCkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUhNQUNfVXBkYXRlKGhjdHgs IFZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghKGRjdHgt PnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCisrCQkJeworKwkJ CWlmICghSE1BQ19GaW5hbChoY3R4LCBkY3R4LT5sYiwgTlVMTCkpCisrCQkJCXJldHVybiAwOwor KwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJCQlWdG1wID0gZGN0eC0+bGI7CisrCQkJY29udGlu dWU7CisrCQkJfQorKwkJZWxzZSBpZiAob3V0bGVuID4gZGN0eC0+YmxvY2tsZW5ndGgpCisrCQkJ eworKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBvdXQsIE5VTEwpKQorKwkJCQlyZXR1cm4gMDsK KysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrCQkJCXJldHVybiAw OworKwkJCVZ0bXAgPSBvdXQ7CisrCQkJfQorKwkJZWxzZQorKwkJCXsKKysJCQlpZiAoIUhNQUNf RmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCWlmICghZmlw c19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaG1hYy0+VikpCisrCQkJCXJldHVybiAwOworKwkJCW1l bWNweShvdXQsIGhtYWMtPlYsIG91dGxlbik7CisrCQkJYnJlYWs7CisrCQkJfQorKwkJb3V0ICs9 IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJ fQorKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAs IE5VTEwsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGlj IGludCBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlITUFD X0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhtYWMuaGN0eCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmZGN0 eC0+ZC5obWFjLCBzaXplb2YoRFJCR19ITUFDX0NUWCkpOworKwlyZXR1cm4gMTsKKysJfQorKwor K2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWNvbnN0IEVW UF9NRCAqbWQgPSBOVUxMOworKwlEUkJHX0hNQUNfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaG1hYzsK KysJZGN0eC0+c3RyZW5ndGggPSAyNTY7CisrCXN3aXRjaCAoZGN0eC0+dHlwZSkKKysJCXsKKysJ CWNhc2UgTklEX2htYWNXaXRoU0hBMToKKysJCW1kID0gRVZQX3NoYTEoKTsKKysJCWRjdHgtPnN0 cmVuZ3RoID0gMTI4OworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9obWFjV2l0aFNIQTIyNDoK KysJCW1kID0gRVZQX3NoYTIyNCgpOworKwkJZGN0eC0+c3RyZW5ndGggPSAxOTI7CisrCQlicmVh azsKKysKKysJCWNhc2UgTklEX2htYWNXaXRoU0hBMjU2OgorKwkJbWQgPSBFVlBfc2hhMjU2KCk7 CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2htYWNXaXRoU0hBMzg0OgorKwkJbWQgPSBFVlBf c2hhMzg0KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2htYWNXaXRoU0hBNTEyOgorKwkJ bWQgPSBFVlBfc2hhNTEyKCk7CisrCQlicmVhazsKKysKKysJCWRlZmF1bHQ6CisrCQlkY3R4LT5z dHJlbmd0aCA9IDA7CisrCQlyZXR1cm4gLTI7CisrCQl9CisrICAgICAgICBkY3R4LT5pbnN0YW50 aWF0ZSA9IGRyYmdfaG1hY19pbnN0YW50aWF0ZTsKKysgICAgICAgIGRjdHgtPnJlc2VlZCA9IGRy YmdfaG1hY19yZXNlZWQ7CisrICAgICAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5l cmF0ZTsKKysgICAgICAgIGRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2htYWNfdW5pbnN0YW50 aWF0ZTsKKysJSE1BQ19DVFhfaW5pdCgmaGN0eC0+aGN0eCk7CisrCWhjdHgtPm1kID0gbWQ7Cisr CWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCWRjdHgtPnNlZWRsZW4g PSBNX0VWUF9NRF9zaXplKG1kKTsKKysKKysgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0 eC0+c3RyZW5ndGggLyA4OworKyAgICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9M RU5HVEg7CisrCisrICAgICAgICBkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAv IDI7CisrICAgICAgICBkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAg ICAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKKysgICAgICAgIGRjdHgtPm1h eF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICAgICAgZGN0eC0+bWF4X3JlcXVlc3Qg PSAxPDwxNjsKKysgICAgICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0OworKworKwly ZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5j CistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMJMjAx NC0xMC0xNiAxMzoxOTozNS4wOTczMDYzNzggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTczMDYzNzggKzAy MDAKK0BAIC0wLDAgKzEsNTc4IEBACisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfbG9j bC5oIgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogU3VwcG9ydCBmcmFtZXdv cmsgZm9yIFNQODAwLTkwIERSQkdzICovCisrCisraW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RY ICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQorKwl7CisrCWludCBydjsKKysJ bWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOworKwlkY3R4LT5zdGF0dXMgPSBEUkJH X1NUQVRVU19VTklOSVRJQUxJU0VEOworKwlkY3R4LT54ZmxhZ3MgPSBmbGFnczsKKysJZGN0eC0+ dHlwZSA9IHR5cGU7CisrCisrCWRjdHgtPmlmbGFncyA9IDA7CisrCWRjdHgtPmVudHJvcHlfYmxv Y2tsZW4gPSAwOworKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKKysJZGN0eC0+aGVhbHRo X2NoZWNrX2ludGVydmFsID0gRFJCR19IRUFMVEhfSU5URVJWQUw7CisrCisrCXJ2ID0gZmlwc19k cmJnX2hhc2hfaW5pdChkY3R4KTsKKysKKysJaWYgKHJ2ID09IC0yKQorKwkJcnYgPSBmaXBzX2Ry YmdfY3RyX2luaXQoZGN0eCk7CisrCWlmIChydiA9PSAtMikKKysJCXJ2ID0gZmlwc19kcmJnX2ht YWNfaW5pdChkY3R4KTsKKysKKysJaWYgKHJ2IDw9IDApCisrCQl7CisrCQlpZiAocnYgPT0gLTIp CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9VTlNVUFBPUlRFRF9E UkJHX1RZUEUpOworKwkJZWxzZQorKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBG SVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcpOworKwkJfQorKworKwkvKiBJZiBub3QgaW4g dGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCisrCisr CWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkKKysJCXsKKysJCWlmICghRklQ U19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJ CQl9CisrCQl9CisrCisrCXJldHVybiBydjsKKysJfQorKworK0RSQkdfQ1RYICpGSVBTX2RyYmdf bmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisrCXsKKysJRFJCR19DVFggKmRjdHg7 CisrCWRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRFJCR19DVFgpKTsKKysJaWYgKCFkY3R4 KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX05FVywgRVJSX1JfTUFMTE9DX0ZB SUxVUkUpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrCisrCWlmICh0eXBlID09IDApCisrCQl7 CisrCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrCQlkY3R4LT50eXBlID0g MDsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrCQlyZXR1 cm4gZGN0eDsKKysJCX0KKysKKysJaWYgKEZJUFNfZHJiZ19pbml0KGRjdHgsIHR5cGUsIGZsYWdz KSA8PSAwKQorKwkJeworKwkJT1BFTlNTTF9mcmVlKGRjdHgpOworKwkJcmV0dXJuIE5VTEw7Cisr CQl9CisrCQkKKysJcmV0dXJuIGRjdHg7CisrCX0KKysKKyt2b2lkIEZJUFNfZHJiZ19mcmVlKERS QkdfQ1RYICpkY3R4KQorKwl7CisrCWlmIChkY3R4LT51bmluc3RhbnRpYXRlKQorKwkJZGN0eC0+ dW5pbnN0YW50aWF0ZShkY3R4KTsKKysJLyogRG9uJ3QgZnJlZSB1cCBkZWZhdWx0IERSQkcgKi8K KysJaWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpCisrCQl7CisrCQltZW1zZXQo ZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrCQlkY3R4LT50eXBlID0gMDsKKysJCWRjdHgt PnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrCQl9CisrCWVsc2UKKysJCXsK KysJCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKKysJCU9QRU5T U0xfZnJlZShkY3R4KTsKKysJCX0KKysJfQorKworK3N0YXRpYyBzaXplX3QgZmlwc19nZXRfZW50 cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRy b3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJdW5zaWduZWQgY2hh ciAqdG91dCwgKnA7CisrCXNpemVfdCBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4sIHJ2Owor KwlpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQorKwkJcmV0dXJuIDA7CisrCWlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCisrCQlyZXR1cm4gZGN0eC0+Z2V0X2VudHJvcHko ZGN0eCwgcG91dCwgZW50cm9weSwgbWluX2xlbiwgbWF4X2xlbik7CisrCXJ2ID0gZGN0eC0+Z2V0 X2VudHJvcHkoZGN0eCwgJnRvdXQsIGVudHJvcHkgKyBibCwKKysJCQkJbWluX2xlbiArIGJsLCBt YXhfbGVuICsgYmwpOworKwlpZiAodG91dCA9PSBOVUxMKQorKwkJcmV0dXJuIDA7CisrCSpwb3V0 ID0gdG91dCArIGJsOworKwlpZiAocnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBibCkpCisr CQlyZXR1cm4gMDsKKysJLyogQ29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNvbnRpbnVv dXMgUFJORyB0ZXN0ICovCisrCWZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBibDsgcCAr PSBibCkKKysJCXsKKysJCWlmICghbWVtY21wKHAsIHAgKyBibCwgYmwpKQorKwkJCXsKKysJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RV Q0spOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysJcnYgLT0gYmw7CisrCWlmIChydiA+ IG1heF9sZW4pCisrCQlyZXR1cm4gbWF4X2xlbjsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3Rh dGljIHZvaWQgZmlwc19jbGVhbnVwX2VudHJvcHkoRFJCR19DVFggKmRjdHgsCisrCQkJCQl1bnNp Z25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKQorKwl7CisrCXNpemVfdCBibDsKKysJaWYgKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKwkJYmwgPSAwOworKwllbHNlCisrCQlibCA9 IGRjdHgtPmVudHJvcHlfYmxvY2tsZW47CisrCS8qIENhbGwgY2xlYW51cCB3aXRoIG9yaWdpbmFs IGFyZ3VtZW50cyAqLworKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkoZGN0eCwgb3V0IC0gYmwsIG9s ZW4gKyBibCk7CisrCX0KKysKKysKKytpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikK KysJeworKwlzaXplX3QgZW50bGVuID0gMCwgbm9uY2VsZW4gPSAwOworKwl1bnNpZ25lZCBjaGFy ICpub25jZSA9IE5VTEwsICplbnRyb3B5ID0gTlVMTDsKKysKKysjaWYgMAorKwkvKiBQdXQgaGVy ZSBzbyBlcnJvciBzY3JpcHQgcGlja3MgdGhlbSB1cCAqLworKwlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfSU5TVEFOVElBVEUsCisrCQkJCUZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RP T19MT05HKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1Jf SU5fRVJST1JfU1RBVEUpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUs IEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSk7CisrCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdf Tk9OQ0UpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9J TlNUQU5USUFURV9FUlJPUik7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFU RSwgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEKTsKKysjZW5kaWYKKysKKysJaW50IHIgPSAw OworKworKwlpZiAocGVyc2xlbiA+IGRjdHgtPm1heF9wZXJzKQorKwkJeworKwkJciA9IEZJUFNf Ul9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmICghZGN0eC0+aW5zdGFudGlhdGUpCisrCQl7CisrCQlyID0gRklQU19SX0RSQkdfTk9U X0lOSVRJQUxJU0VEOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChkY3R4LT5zdGF0dXMg IT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCXsKKysJCWlmIChkY3R4LT5zdGF0dXMg PT0gRFJCR19TVEFUVVNfRVJST1IpCisrCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysJ CWVsc2UKKysJCQlyID0gRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEOworKwkJZ290byBlbmQ7 CisrCQl9CisrCisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKworKwllbnRs ZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKKysJ CQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKKysKKysJaWYgKGVudGxl biA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KQorKwkJ eworKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7CisrCQlnb3RvIGVuZDsK KysJCX0KKysKKysJaWYgKGRjdHgtPm1heF9ub25jZSA+IDAgJiYgZGN0eC0+Z2V0X25vbmNlKQor KwkJeworKwkJbm9uY2VsZW4gPSBkY3R4LT5nZXRfbm9uY2UoZGN0eCwgJm5vbmNlLAorKwkJCQkJ ZGN0eC0+c3RyZW5ndGggLyAyLAorKwkJCQkJZGN0eC0+bWluX25vbmNlLCBkY3R4LT5tYXhfbm9u Y2UpOworKworKwkJaWYgKG5vbmNlbGVuIDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNlbGVuID4g ZGN0eC0+bWF4X25vbmNlKQorKwkJCXsKKysJCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdf Tk9OQ0U7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKworKwkJfQorKworKwlpZiAoIWRjdHgtPmlu c3RhbnRpYXRlKGRjdHgsIAorKwkJCQllbnRyb3B5LCBlbnRsZW4sCisrCQkJCW5vbmNlLCBub25j ZWxlbiwKKysJCQkJcGVycywgcGVyc2xlbikpCisrCQl7CisrCQlyID0gRklQU19SX0VSUk9SX0lO U1RBTlRJQVRJTkdfRFJCRzsKKysJCWdvdG8gZW5kOworKwkJfQorKworKworKwlkY3R4LT5zdGF0 dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNU T01fUkVTRUVEKSkKKysJCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKKysKKysJZW5kOgorKwor KwlpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCisrCQlmaXBzX2NsZWFudXBf ZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOworKworKwlpZiAobm9uY2UgJiYgZGN0eC0+ Y2xlYW51cF9ub25jZSkKKysJCWRjdHgtPmNsZWFudXBfbm9uY2UoZGN0eCwgbm9uY2UsIG5vbmNl bGVuKTsKKysKKysJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKKysJCXJl dHVybiAxOworKworKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikp CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIHIpOworKworKwlyZXR1 cm4gMDsKKysKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgs CisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4sIGludCBoY2hl Y2spCisrCXsKKysJdW5zaWduZWQgY2hhciAqZW50cm9weSA9IE5VTEw7CisrCXNpemVfdCBlbnRs ZW4gPSAwOworKwlpbnQgciA9IDA7CisrCisrI2lmIDAKKysJRklQU2VycihGSVBTX0ZfRFJCR19S RVNFRUQsIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEKTsKKysJRklQU2VycihGSVBTX0ZfRFJCR19S RVNFRUQsIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HKTsKKysjZW5kaWYKKysJaWYg KGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQorKwkJJiYgZGN0eC0+c3RhdHVzICE9 IERSQkdfU1RBVFVTX1JFU0VFRCkKKysJCXsKKysJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19T VEFUVVNfRVJST1IpCisrCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysJCWVsc2UgaWYo ZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQkJciA9IEZJUFNf Ul9OT1RfSU5TVEFOVElBVEVEOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghYWRpbikK KysJCWFkaW5sZW4gPSAwOworKwllbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pCisr CQl7CisrCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrCS8qIFBl Zm9ybSBoZWFsdGggY2hlY2sgb24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5vdCBhIHByZWRp Y3Rpb24KKysJICogcmVzaXN0YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVzdCBtb2RlLgorKwkg Ki8KKysJaWYgKGhjaGVjayAmJiAhKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkKKysJ CXsKKysJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKKysJCQl7CisrCQkJciA9 IEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCX0KKysK KysJZW50bGVuID0gZmlwc19nZXRfZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5n dGgsCisrCQkJCWRjdHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7CisrCisrCWlm IChlbnRsZW4gPCBkY3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9w eSkKKysJCXsKKysJCXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOworKwkJZ290 byBlbmQ7CisrCQl9CisrCisrCWlmICghZGN0eC0+cmVzZWVkKGRjdHgsIGVudHJvcHksIGVudGxl biwgYWRpbiwgYWRpbmxlbikpCisrCQlnb3RvIGVuZDsKKysKKysJZGN0eC0+c3RhdHVzID0gRFJC R19TVEFUVVNfUkVBRFk7CisrCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VF RCkpCisrCQlkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7CisrCWVuZDoKKysKKysJaWYgKGVudHJv cHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQorKwkJZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0 eCwgZW50cm9weSwgZW50bGVuKTsKKysKKysJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRV U19SRUFEWSkKKysJCXJldHVybiAxOworKworKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERS QkdfRkxBR19OT0VSUikpCisrCQlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgcik7CisrCisr CXJldHVybiAwOworKwl9CisrCisraW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgs CisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJ cmV0dXJuIGRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIDEpOworKwl9CisrCisrc3Rh dGljIGludCBmaXBzX2RyYmdfY2hlY2soRFJCR19DVFggKmRjdHgpCisrCXsKKysJaWYgKGRjdHgt PnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKwkJcmV0dXJuIDE7CisrCWRjdHgtPmhlYWx0aF9j aGVja19jbnQrKzsKKysJaWYgKGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPj0gZGN0eC0+aGVhbHRo X2NoZWNrX2ludGVydmFsKQorKwkJeworKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRj dHgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJUFNfUl9T RUxGVEVTVF9GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCXJldHVybiAx OworKwl9CisrCisraW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWdu ZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFu Y2UsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsK KysJaW50IHIgPSAwOworKworKwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJaWYgKCFmaXBzX2RyYmdfY2hlY2soZGN0eCkp CisrCQlyZXR1cm4gMDsKKysKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFE WQorKwkJJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKKysJCXsKKysJCWlm IChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCisrCQkJciA9IEZJUFNfUl9JTl9F UlJPUl9TVEFURTsKKysJCWVsc2UgaWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5J VElBTElTRUQpCisrCQkJciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOworKwkJZ290byBlbmQ7 CisrCQl9CisrCisrCWlmIChvdXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVzdCkKKysJCXsKKysJCXIg PSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkc7CisrCQlyZXR1cm4gMDsKKysJCX0K KysKKysJaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikKKysJCXsKKysJCXIgPSBGSVBTX1Jf QURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAo ZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKQorKwkJZGN0eC0+Z2VuZXJhdGUoZGN0 eCwgTlVMTCwgb3V0bGVuLCBOVUxMLCAwKTsKKysJZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2NvdW50 ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQorKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFU VVNfUkVTRUVEOworKworKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFU0VFRCB8 fCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UpCisrCQl7CisrCQkvKiBJZiBwcmVkaWN0aW9uIHJlc2lz dGFuY2UgcmVxdWVzdCBkb24ndCBkbyBoZWFsdGggY2hlY2sgKi8KKysJCWludCBoY2hlY2sgPSBw cmVkaWN0aW9uX3Jlc2lzdGFuY2UgPyAwIDogMTsKKysJCQorKwkJaWYgKCFkcmJnX3Jlc2VlZChk Y3R4LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKQorKwkJCXsKKysJCQlyID0gRklQU19SX1JFU0VF RF9FUlJPUjsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhZGluID0gTlVMTDsKKysJCWFkaW5s ZW4gPSAwOworKwkJfQorKworKwlpZiAoIWRjdHgtPmdlbmVyYXRlKGRjdHgsIG91dCwgb3V0bGVu LCBhZGluLCBhZGlubGVuKSkKKysJCXsKKysJCXIgPSBGSVBTX1JfR0VORVJBVEVfRVJST1I7Cisr CQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysJCWdvdG8gZW5kOworKwkJfQor KwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJeworKwkJaWYg KGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCkKKysJCQlkY3R4 LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7CisrCQllbHNlCisrCQkJZGN0eC0+cmVzZWVk X2NvdW50ZXIrKzsKKysJCX0KKysKKysJZW5kOgorKwlpZiAocikKKysJCXsKKysJCWlmICghKGRj dHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisrCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0dFTkVSQVRFLCByKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlyZXR1cm4gMTsKKysJ fQorKworK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKysJewor KwlpbnQgcnY7CisrCWlmICghZGN0eC0+dW5pbnN0YW50aWF0ZSkKKysJCXJ2ID0gMTsKKysJZWxz ZQorKwkJcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOworKwkvKiBBbHRob3VnaCB3ZSdk IGxpa2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJlY2F1c2Ugd2UgaGF2ZSB0bworKwkgKiB0 ZXN0IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMgdGhlIGRhdGEuCisrCSAqLworKwlt ZW1zZXQoJmRjdHgtPmQsIDAsIHNpemVvZihkY3R4LT5kKSk7CisrCWRjdHgtPnN0YXR1cyA9IERS QkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrCS8qIElmIG1ldGhvZCBoYXMgcHJvYmxlbXMgdW5p bnN0YW50aWF0aW5nLCByZXR1cm4gZXJyb3IgKi8KKysJcmV0dXJuIHJ2OworKwl9CisrCisraW50 IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRf ZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51 cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVu KSwKKysJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCisrCXNpemVfdCAoKmdldF9ub25jZSkoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXpl X3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9ub25jZSkoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpCisrCXsKKysJaWYg KGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJcmV0dXJuIDA7 CisrCWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRyb3B5X2Jsb2NrbGVuOworKwlkY3R4LT5n ZXRfZW50cm9weSA9IGdldF9lbnRyb3B5OworKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkgPSBjbGVh bnVwX2VudHJvcHk7CisrCWRjdHgtPmdldF9ub25jZSA9IGdldF9ub25jZTsKKysJZGN0eC0+Y2xl YW51cF9ub25jZSA9IGNsZWFudXBfbm9uY2U7CisrCXJldHVybiAxOworKwl9CisrCisraW50IEZJ UFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrCXNpemVfdCAoKmdl dF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCisrCXZvaWQgKCpj bGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9s ZW4pLAorKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1 ZiwgaW50IG51bSksCisrCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAorKwkJCQlj b25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSkKKysJeworKwlpZiAoZGN0 eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQlyZXR1cm4gMDsKKysJ ZGN0eC0+Z2V0X2FkaW4gPSBnZXRfYWRpbjsKKysJZGN0eC0+Y2xlYW51cF9hZGluID0gY2xlYW51 cF9hZGluOworKwlkY3R4LT5yYW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7CisrCWRjdHgtPnJh bmRfYWRkX2NiID0gcmFuZF9hZGRfY2I7CisrCXJldHVybiAxOworKwl9CisrCisrdm9pZCAqRklQ U19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlyZXR1cm4gZGN0eC0+ YXBwX2RhdGE7CisrCX0KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFgg KmRjdHgsIHZvaWQgKmFwcF9kYXRhKQorKwl7CisrCWRjdHgtPmFwcF9kYXRhID0gYXBwX2RhdGE7 CisrCX0KKysKKytzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0 eCkKKysJeworKwlyZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7CisrCX0KKysKKytpbnQgRklQU19k cmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlyZXR1cm4gZGN0eC0+c3Ry ZW5ndGg7CisrCX0KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19D VFggKmRjdHgsIGludCBpbnRlcnZhbCkKKysJeworKwlkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2 YWwgPSBpbnRlcnZhbDsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2 YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKKysJeworKwlkY3R4LT5yZXNlZWRfaW50 ZXJ2YWwgPSBpbnRlcnZhbDsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19zdGljayA9IDA7Cisr Cisrdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKQorKwl7CisrCWRyYmdfc3RpY2sgPSBv bm9mZjsKKysJfQorKworKy8qIENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0aW9uICovCisr aW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBj aGFyICpvdXQpCisrCXsKKysJLyogTm8gQ1BSTkcgaW4gdGVzdCBtb2RlICovCisrCWlmIChkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKKysJCXJldHVybiAxOworKwkvKiBDaGVjayBibG9j ayBpcyB2YWxpZDogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworKwlpZiAoZGN0eC0+bGJfdmFsaWQg PT0gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBT X1JfSU5URVJOQUxfRVJST1IpOworKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWlmIChkcmJnX3N0aWNrKQorKwkJbWVtY3B5KGRjdHgtPmxiLCBvdXQs IGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2NrOiBmYWls IGlmIG1hdGNoICovCisrCWlmICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVu Z3RoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBT X1JfRFJCR19TVFVDSyk7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQlyZXR1cm4g MDsKKysJCX0KKysJLyogU2F2ZSBsYXN0IGJsb2NrIGZvciBuZXh0IGNvbXBhcmlzb24gKi8KKysJ bWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJcmV0dXJuIDE7Cisr CX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMu ZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCistLS0gb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzCTIwMTQtMTAtMTYg MTM6MTk6MzUuMDk3MzA2Mzc4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX3JhbmQuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NzMwNjM3OCArMDIwMAorQEAg LTAsMCArMSwxNzIgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3JhbmQuYyAqLworKy8qIFdy aXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUg T3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr 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 CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5k X2xjbC5oIgorKworKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAgRFJCR3MgdG8gT3BlblNTTCBSQU5E X01FVEhPRCAqLworKworKy8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgZ2xvYmFsIFBSTkcgdXNl ZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2JhbAorKyAqIHZhcmlhYmxlIHRvIHN0 b3JlIGNvbnRleHQuCisrICovCisrCisrc3RhdGljIERSQkdfQ1RYIG9zc2xfZGN0eDsKKysKKytE UkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpCisrCXsKKysJcmV0dXJuICZvc3Ns X2RjdHg7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19ieXRlcyh1bnNpZ25lZCBjaGFy ICpvdXQsIGludCBjb3VudCkKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Cisr CWludCBydiA9IDA7CisrCXVuc2lnbmVkIGNoYXIgKmFkaW4gPSBOVUxMOworKwlzaXplX3QgYWRp bmxlbiA9IDA7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWRvIAorKwkJ eworKwkJc2l6ZV90IHJjbnQ7CisrCQlpZiAoY291bnQgPiAoaW50KWRjdHgtPm1heF9yZXF1ZXN0 KQorKwkJCXJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsKKysJCWVsc2UKKysJCQlyY250ID0gY291 bnQ7CisrCQlpZiAoZGN0eC0+Z2V0X2FkaW4pCisrCQkJeworKwkJCWFkaW5sZW4gPSBkY3R4LT5n ZXRfYWRpbihkY3R4LCAmYWRpbik7CisrCQkJaWYgKGFkaW5sZW4gJiYgIWFkaW4pCisrCQkJCXsK KysJCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0JZVEVTLCBGSVBTX1JfRVJST1JfUkVUUklF VklOR19BRERJVElPTkFMX0lOUFVUKTsKKysJCQkJZ290byBlcnI7CisrCQkJCX0KKysJCQl9Cisr CQlydiA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBvdXQsIHJjbnQsIDAsIGFkaW4sIGFkaW5s ZW4pOworKwkJaWYgKGFkaW4pCisrCQkJeworKwkJCWlmIChkY3R4LT5jbGVhbnVwX2FkaW4pCisr CQkJCWRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKKysJCQlhZGluID0g TlVMTDsKKysJCQl9CisrCQlpZiAoIXJ2KQorKwkJCWdvdG8gZXJyOworKwkJb3V0ICs9IHJjbnQ7 CisrCQljb3VudCAtPSByY250OworKwkJfQorKwl3aGlsZSAoY291bnQpOworKwlydiA9IDE7Cisr CWVycjoKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcnY7 CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hhciAqb3V0 LCBpbnQgY291bnQpCisrCXsKKysJaWYgKGZpcHNfZHJiZ19ieXRlcyhvdXQsIGNvdW50KSA8PSAw KQorKwkJcmV0dXJuIC0xOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19k cmJnX3N0YXR1cyh2b2lkKQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJ aW50IHJ2OworKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlydiA9IGRjdHgt PnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEgOiAwOworKwlDUllQVE9fcl91bmxvY2so Q1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiBydjsKKysJfQorKworK3N0YXRpYyB2b2lkIGZp cHNfZHJiZ19jbGVhbnVwKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4 OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9 CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2Vl ZGxlbikKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWlmIChkY3R4LT5y YW5kX3NlZWRfY2IpCisrCQlyZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNlZWQsIHNl ZWRsZW4pOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2FkZChj b25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbiwKKysJCQkJCWRvdWJsZSBhZGRfZW50cm9weSkK KysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWlmIChkY3R4LT5yYW5kX2Fk ZF9jYikKKysJCXJldHVybiBkY3R4LT5yYW5kX2FkZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuLCBh ZGRfZW50cm9weSk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVU SE9EIHJhbmRfZHJiZ19tZXRoID0KKysJeworKwlmaXBzX2RyYmdfc2VlZCwKKysJZmlwc19kcmJn X2J5dGVzLAorKwlmaXBzX2RyYmdfY2xlYW51cCwKKysJZmlwc19kcmJnX2FkZCwKKysJZmlwc19k cmJnX3BzZXVkbywKKysJZmlwc19kcmJnX3N0YXR1cworKwl9OworKworK2NvbnN0IFJBTkRfTUVU SE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuICZyYW5kX2RyYmdfbWV0 aDsKKysJfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJn X3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2Vs ZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVz dC5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTczMDYzNzggKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5 OjM1LjA5NzMwNjM3OCArMDIwMAorQEAgLTAsMCArMSw4NjIgQEAKKysvKiBmaXBzL3JhbmQvZmlw c19kcmJnX3NlbGZ0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24g KHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLwor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu CisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK KysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5k X2xjbC5oIgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaW5jbHVkZSAiZmlwc19kcmJn X3NlbGZ0ZXN0LmgiCisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKwlpbnQgcG9zdDsKKysJaW50IG5p ZDsKKysJdW5zaWduZWQgaW50IGZsYWdzOworKworKwkvKiBLQVQgZGF0YSBmb3Igbm8gUFIgKi8K KysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50OworKwlzaXplX3QgZW50bGVuOworKwljb25zdCB1 bnNpZ25lZCBjaGFyICpub25jZTsKKysJc2l6ZV90IG5vbmNlbGVuOworKwljb25zdCB1bnNpZ25l ZCBjaGFyICpwZXJzOworKwlzaXplX3QgcGVyc2xlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbjsKKysJc2l6ZV90IGFkaW5sZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHJlc2Vl ZDsKKysJc2l6ZV90IGVudHJlc2VlZGxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbnJl c2VlZDsKKysJc2l6ZV90IGFkaW5yZXNlZWRsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFk aW4yOworKwlzaXplX3QgYWRpbjJsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDsKKysJ c2l6ZV90IGthdGxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0MjsKKysJc2l6ZV90IGth dDJsZW47CisrCisrCS8qIEtBVCBkYXRhIGZvciBQUiAqLworKwljb25zdCB1bnNpZ25lZCBjaGFy ICplbnRfcHI7CisrCXNpemVfdCBlbnRsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5v bmNlX3ByOworKwlzaXplX3Qgbm9uY2VsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBl cnNfcHI7CisrCXNpemVfdCBwZXJzbGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGlu X3ByOworKwlzaXplX3QgYWRpbmxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50cHJf cHI7CisrCXNpemVfdCBlbnRwcmxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbmdf cHI7CisrCXNpemVfdCBhZGluZ2xlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50Z19w cjsKKysJc2l6ZV90IGVudGdsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdF9wcjsK KysJc2l6ZV90IGthdGxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0Ml9wcjsKKysJ c2l6ZV90IGthdDJsZW5fcHI7CisrCisrCX0gRFJCR19TRUxGVEVTVF9EQVRBOworKworKyNkZWZp bmUgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcsIHByLCBwKSB7cCwgbmlkLCBmbGFnIHwg RFJCR19GTEFHX1RFU1QsIFwKKysJcHIjI19lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX2VudHJv cHlpbnB1dCksIFwKKysJcHIjI19ub25jZSwgc2l6ZW9mKHByIyNfbm9uY2UpLCBcCisrCXByIyNf cGVyc29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcp LCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQp LCBcCisrCXByIyNfZW50cm9weWlucHV0cmVzZWVkLCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXRy ZXNlZWQpLCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIjI19hZGRp dGlvbmFsaW5wdXRyZXNlZWQpLCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0Miwgc2l6ZW9mKHBy IyNfYWRkaXRpb25hbGlucHV0MiksIFwKKysJcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2Yo cHIjI19pbnRfcmV0dXJuZWRiaXRzKSwgXAorKwlwciMjX3JldHVybmVkYml0cywgc2l6ZW9mKHBy IyNfcmV0dXJuZWRiaXRzKSwgXAorKwlwciMjX3ByX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNf cHJfZW50cm9weWlucHV0KSwgXAorKwlwciMjX3ByX25vbmNlLCBzaXplb2YocHIjI19wcl9ub25j ZSksIFwKKysJcHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3ByX3Bl cnNvbmFsaXphdGlvbnN0cmluZyksIFwKKysJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQsIHNpemVv ZihwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCksIFwKKysJcHIjI19wcl9lbnRyb3B5aW5wdXRwciwg c2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIpLCBcCisrCXByIyNfcHJfYWRkaXRpb25hbGlu cHV0Miwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0MiksIFwKKysJcHIjI19wcl9lbnRy b3B5aW5wdXRwcjIsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dHByMiksIFwKKysJcHIjI19w cl9pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzKSwgXAor KwlwciMjX3ByX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcHJfcmV0dXJuZWRiaXRzKSwgXAor Kwl9CisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKG5pZCwgcHIsIHApIFwKKysJ bWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIERSQkdfRkxBR19DVFJfVVNFX0RGLCBwciwgcCkKKysK KysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZWMoY3VydmUsIG1kLCBwciwgcCkgXAorKwlt YWtlX2RyYmdfdGVzdF9kYXRhKChjdXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQorKworK3N0 YXRpYyBEUkJHX1NFTEZURVNUX0RBVEEgZHJiZ190ZXN0W10gPSB7CisrCW1ha2VfZHJiZ190ZXN0 X2RhdGFfZGYoTklEX2Flc18xMjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCisrCW1ha2VfZHJi Z190ZXN0X2RhdGFfZGYoTklEX2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCksCisrCW1h a2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9kZiwgMSks CisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNfMTI4X25vX2Rm LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIsIDAsIGFlc18xOTJf bm9fZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMjU2X2N0ciwgMCwgYWVz XzI1Nl9ub19kZiwgMSksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTEsIDAsIHNoYTEs IDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyMjQsIDAsIHNoYTIyNCwgMCksCisr CW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1NiwgMCwgc2hhMjU2LCAxKSwKKysJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBzaGEzODQsIDApLAorKwltYWtlX2RyYmdfdGVz dF9kYXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUxMiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX2htYWNXaXRoU0hBMSwgMCwgaG1hY19zaGExLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0 YShOSURfaG1hY1dpdGhTSEEyMjQsIDAsIGhtYWNfc2hhMjI0LCAwKSwKKysJbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfaG1hY1dpdGhTSEEyNTYsIDAsIGhtYWNfc2hhMjU2LCAxKSwKKysJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEzODQsIDAsIGhtYWNfc2hhMzg0LCAwKSwKKysJ bWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEE1MTIsIDAsIGhtYWNfc2hhNTEyLCAw KSwKKysJezAsMCwwfQorKwl9OworKworK3R5cGVkZWYgc3RydWN0IAorKwl7CisrCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmVudDsKKysJc2l6ZV90IGVudGxlbjsKKysJaW50IGVudGNudDsKKysJY29u c3QgdW5zaWduZWQgY2hhciAqbm9uY2U7CisrCXNpemVfdCBub25jZWxlbjsKKysJaW50IG5vbmNl Y250OworKwl9IFRFU1RfRU5UOworKworK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERSQkdf Q1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisr CXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91 dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OworKwl0LT5lbnRjbnQrKzsKKysJcmV0dXJuIHQt PmVudGxlbjsKKysJfQorKworK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NUWCAqZGN0 eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorKwl7CisrCVRF U1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKKysJKnBvdXQgPSAodW5z aWduZWQgY2hhciAqKXQtPm5vbmNlOworKwl0LT5ub25jZWNudCsrOworKwlyZXR1cm4gdC0+bm9u Y2VsZW47CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19zaW5nbGVfa2F0KERSQkdfQ1RY ICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAorKwkJCQkJCQkJaW50IHF1aWNrKQorKwl7 CisrCVRFU1RfRU5UIHQ7CisrCWludCBydiA9IDA7CisrCXNpemVfdCBhZGlubGVuOworKwl1bnNp Z25lZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrCisrCS8qIEluaXRpYWwgdGVzdCB3aXRob3V0IFBS ICovCisrCisrCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFu ZCBwZXJzb25hbGlzYXRpb24KKysJICogc3RyaW5nLgorKwkgKi8KKysKKysJaWYgKCFGSVBTX2Ry YmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCWlmICgh RklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25v bmNlLCAwKSkKKysJCXJldHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgs ICZ0KTsKKysKKysJdC5lbnQgPSB0ZC0+ZW50OworKwl0LmVudGxlbiA9IHRkLT5lbnRsZW47Cisr CXQubm9uY2UgPSB0ZC0+bm9uY2U7CisrCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrCXQu ZW50Y250ID0gMDsKKysJdC5ub25jZWNudCA9IDA7CisrCisrCWlmICghRklQU19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCisrCQlnb3RvIGVycjsKKysKKysJ LyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcwor KwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4K KysJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KKysJICovCisr CWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4 LT5pZmxhZ3MpKQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuIC8gMjsKKysJZWxzZQorKwkJYWRp bmxlbiA9IHRkLT5hZGlubGVuOworKworKwkvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJp Znkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLworKwlpZiAoIUZJUFNfZHJiZ19nZW5l cmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgYWRpbmxl bikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0LCB0ZC0+ a2F0bGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBG SVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFKTsKKysJCWdvdG8gZXJyMjsKKysJCX0KKysJLyogSWYg YWJicmV2aWF0ZWQgUE9TVCBlbmQgb2YgdGVzdCAqLworKwlpZiAocXVpY2spCisrCQl7CisrCQly diA9IDE7CisrCQlnb3RvIGVycjsKKysJCX0KKysJLyogUmVzZWVkIERSQkcgd2l0aCB0ZXN0IGVu dHJvcHkgYW5kIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysJdC5lbnQgPSB0ZC0+ZW50cmVzZWVkOwor Kwl0LmVudGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47CisrCisrCWlmICghRklQU19kcmJnX3Jlc2Vl ZChkY3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4pKQorKwkJZ290byBlcnI7 CisrCisrCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBl eHBlY3RlZCBkYXRhICovCisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQs IHRkLT5rYXQybGVuLCAwLAorKwkJCQl0ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCisrCQlnb3Rv IGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJsZW4pKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BS X1RFU1QyX0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQorKworKwlGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KTsKKysKKysJLyogTm93IHRlc3Qgd2l0aCBQUiAqLworKworKwkvKiBJ bnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0 aW9uCisrCSAqIHN0cmluZy4KKysJICovCisrCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQt Pm5pZCwgdGQtPmZsYWdzKSkKKysJCXJldHVybiAwOworKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2Fs bGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrCQlyZXR1 cm4gMDsKKysKKysJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7CisrCisrCXQuZW50 ID0gdGQtPmVudF9wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuX3ByOworKwl0Lm5vbmNlID0g dGQtPm5vbmNlX3ByOworKwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuX3ByOworKwl0LmVudGNu dCA9IDA7CisrCXQubm9uY2VjbnQgPSAwOworKworKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0 ZShkY3R4LCB0ZC0+cGVyc19wciwgdGQtPnBlcnNsZW5fcHIpKQorKwkJZ290byBlcnI7CisrCisr CS8qIE5vdyBnZW5lcmF0ZSB3aXRoIFBSOiB3ZSBuZWVkIHRvIHN1cHBseSBlbnRyb3B5IGFzIHRo aXMgd2lsbAorKwkgKiBwZXJmb3JtIGEgcmVzZWVkIG9wZXJhdGlvbi4gQ2hlY2sgb3V0cHV0IG1h dGNoZXMgZXhwZWN0ZWQgdmFsdWUuCisrCSAqLworKworKwl0LmVudCA9IHRkLT5lbnRwcl9wcjsK KysJdC5lbnRsZW4gPSB0ZC0+ZW50cHJsZW5fcHI7CisrCisrCS8qIE5vdGUgZm9yIENUUiB3aXRo b3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKKysJICogaWdub3JlIGJ5dGVzIGFm dGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCisrCSAqIHRvIGhhbGYgdG8gZW5z dXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCisrCSAqLworKwlpZiAoIWZpcHNfcG9zdF9jb3Jy dXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKKysJCWFkaW5s ZW4gPSB0ZC0+YWRpbmxlbl9wciAvIDI7CisrCWVsc2UKKysJCWFkaW5sZW4gPSB0ZC0+YWRpbmxl bl9wcjsKKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxl bl9wciwgMSwKKysJCQkJdGQtPmFkaW5fcHIsIGFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCisr CWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdF9wciwgdGQtPmthdGxlbl9wcikpCisrCQl7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QxX0ZB SUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQorKworKwkvKiBOb3cgZ2VuZXJhdGUgYWdhaW4g d2l0aCBQUjogc3VwcGx5IG5ldyBlbnRyb3B5IGFnYWluLgorKwkgKiBDaGVjayBvdXRwdXQgbWF0 Y2hlcyBleHBlY3RlZCB2YWx1ZS4KKysJICovCisrCisrCXQuZW50ID0gdGQtPmVudGdfcHI7Cisr CXQuZW50bGVuID0gdGQtPmVudGdsZW5fcHI7CisrCisrCWlmICghRklQU19kcmJnX2dlbmVyYXRl KGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuX3ByLCAxLAorKwkJCQl0ZC0+YWRpbmdfcHIsIHRk LT5hZGluZ2xlbl9wcikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0 ZC0+a2F0Ml9wciwgdGQtPmthdDJsZW5fcHIpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFKTsKKysJCWdvdG8gZXJy MjsKKysJCX0KKysJLyogQWxsIE9LLCB0ZXN0IGNvbXBsZXRlICovCisrCXJ2ID0gMTsKKysKKysJ ZXJyOgorKwlpZiAocnYgPT0gMCkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVf S0FULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJZXJyMjoKKysJRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCk7CisrCQorKwlyZXR1cm4gcnY7CisrCisrCX0KKysKKysvKiBJbml0aWFs aXNlIGEgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCisrCisrc3RhdGljIGludCBkb19k cmJnX2luaXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsIFRFU1RfRU5U ICp0KQorKwl7CisrCisrCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZs YWdzKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRj dHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrCQlyZXR1cm4gMDsKKysK KysJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCB0KTsKKysKKysJdC0+ZW50ID0gdGQtPmVu dDsKKysJdC0+ZW50bGVuID0gdGQtPmVudGxlbjsKKysJdC0+bm9uY2UgPSB0ZC0+bm9uY2U7Cisr CXQtPm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOworKwl0LT5lbnRjbnQgPSAwOworKwl0LT5ub25j ZWNudCA9IDA7CisrCXJldHVybiAxOworKwl9CisrCisrLyogSW5pdGlhbGlzZSBhbmQgaW5zdGFu dGlhdGUgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCisrc3RhdGljIGludCBkb19kcmJn X2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAorKwkJ CQkJCQkJVEVTVF9FTlQgKnQpCisrCXsKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsIHQp KQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5w ZXJzLCB0ZC0+cGVyc2xlbikpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrCX0KKysK KysvKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGV4dGVuc2l2ZSBlcnJvciBjaGVja2luZyBhcyBy ZXF1aXJlZCBieSBTUDgwMC05MC4KKysgKiBJbmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1vZGVzIGFu ZCBjaGVjayBhbiBlcnJvciBjb25kaXRpb24gaXMgc2V0LgorKyAqIFRoaXMgZnVuY3Rpb24gYWxv bmcgd2l0aCBmaXBzX2RyYmdfc2luZ2xlX2thdCBwZWZvcm1zIHRoZSBoZWFsdGggY2hlY2tpbmcK KysgKiBvcGVyYXRpb24uCisrICovCisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfZXJyb3JfY2hl Y2soRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQpCisrCXsKKysJdW5zaWdu ZWQgY2hhciByYW5kb3V0WzEwMjRdOworKwlURVNUX0VOVCB0OworKwlzaXplX3QgaTsKKysJdW5z aWduZWQgaW50IHJlc2VlZF9jb3VudGVyX3RtcDsKKysJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNp Z25lZCBjaGFyICopZGN0eDsKKysKKysJLyogSW5pdGlhbGlzZSBEUkJHICovCisrCisrCWlmICgh ZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogRG9uJ3Qg cmVwb3J0IGluZHVjZWQgZXJyb3JzICovCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9F UlI7CisrCisrCS8qIFBlcnNvbmFsaXNhdGlvbiBzdHJpbmcgdGVzdHMgKi8KKysKKysJLyogVGVz dCBkZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBlcnNvbmxpc2F0aW9uIHN0cmluZyAqLworKworKwlp ZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCBkY3R4LT5tYXhfcGVycyAr IDEpID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOwor KwkJfQorKworKwkvKiBFbnRyb3B5IHNvdXJjZSB0ZXN0cyAqLworKworKwkvKiBUZXN0IGVudHJv cHkgc291cmNlIGZhaWx1cmUgZGV0ZWNpb246IGkuZS4gcmV0dXJucyBubyBkYXRhICovCisrCisr CXQuZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+ cGVycywgdGQtPnBlcnNsZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3Rv IGVycjsKKysJCX0KKysKKysJLyogVHJ5IHRvIGdlbmVyYXRlIG91dHB1dCBmcm9tIHVuaW5zdGFu dGlhdGVkIERSQkcgKi8KKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0 ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfR0VORVJBVEVfRVJST1Jf VU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5E UkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisr CQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklO U1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIWRvX2RyYmdf aW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBE UkJHX0ZMQUdfTk9FUlI7CisrCisrCS8qIFRlc3QgaW5zdWZmaWNpZW50IGVudHJvcHkgKi8KKysK KysJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7CisrCisrCWlmIChGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9S X1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+ RFJCR19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVGVzdCB0b28g bXVjaCBlbnRyb3B5ICovCisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisr CQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJ dC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7CisrCisrCWlmIChGSVBTX2RyYmdfaW5z dGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJC R19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJ eworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNU QU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogTm9uY2UgdGVzdHMg Ki8KKysKKysJLyogVGVzdCB0b28gc21hbGwgbm9uY2UgKi8KKysKKysJaWYgKGRjdHgtPm1pbl9u b25jZSkKKysJCXsKKysKKysJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQkJ Z290byBlcnI7CisrCisrCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkJ dC5ub25jZWxlbiA9IGRjdHgtPm1pbl9ub25jZSAtIDE7CisrCisrCQlpZiAoRklQU19kcmJnX2lu c3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJCXsKKysJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9V TkRFVEVDVEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlkY3R4LT5pZmxhZ3MgJj0g fkRSQkdfRkxBR19OT0VSUjsKKysJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkp CisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCX0KKysK KysJLyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KKysKKysJaWYgKGRjdHgtPm1heF9ub25jZSkK KysJCXsKKysKKysJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQkJZ290byBl cnI7CisrCisrCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkJdC5ub25j ZWxlbiA9IGRjdHgtPm1heF9ub25jZSArIDE7CisrCisrCQlpZiAoRklQU19kcmJnX2luc3RhbnRp YXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJCXsKKysJCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVD VEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdf RkxBR19OT0VSUjsKKysJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQkJ eworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCX0KKysKKysJLyog SW5zdGFudGlhdGUgd2l0aCB2YWxpZCBkYXRhLiAqLworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlh dGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysKKysJLyogQ2hlY2sgZ2VuZXJhdGlv biBpcyBub3cgT0sgKi8KKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg dGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCWdvdG8gZXJy OworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkvKiBSZXF1ZXN0 IHRvbyBtdWNoIGRhdGEgZm9yIG9uZSByZXF1ZXN0ICovCisrCWlmIChGSVBTX2RyYmdfZ2VuZXJh dGUoZGN0eCwgcmFuZG91dCwgZGN0eC0+bWF4X3JlcXVlc3QgKyAxLCAwLAorKwkJCQl0ZC0+YWRp biwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3Rv IGVycjsKKysJCX0KKysKKysJLyogVHJ5IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCisr CWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJ CQkJdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VO REVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIENoZWNrIHByZWRpY3Rpb24g cmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrCSAqIGZhaWx1cmUu CisrCSAqLworKworKwl0LmVudGxlbiA9IDA7CisrCisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUo ZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVu KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysJCQorKwlk Y3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9Cisr CisrCisrCS8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGggdmFsaWQgZGF0YSAqLworKworKwlpZiAo IWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysJLyog VGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKwkvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNv dW50ZXIgKi8KKysJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7Cisr CS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KKysJZGN0eC0+cmVz ZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7CisrCisrCS8qIEdlbmVyYXRlIG91 dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLwor Kwl0LmVudGNudCA9IDA7CisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQs IHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQlnb3RvIGVy cjsKKysJaWYgKHQuZW50Y250ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7 CisrCQlnb3RvIGVycjsKKysJCX0KKysJLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4g cmVzZXQgKi8KKysJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVyX3Rt cCArIDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0 eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFu dGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwor KwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5 IHNvdXJjZQorKwkgKiBmYWlsdXJlLgorKwkgKi8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlk Y3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRl KGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxl bikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCQkKKysJ ZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCisrCWlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKworKworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKKysJCQln b3RvIGVycjsKKysJLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKwkvKiBTYXZlIGlu aXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KKysJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVz ZWVkX2NvdW50ZXI7CisrCS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwg Ki8KKysJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7CisrCisr CS8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQg Zm9yIHJlc2VlZCAqLworKwl0LmVudGNudCA9IDA7CisrCWlmICghRklQU19kcmJnX2dlbmVyYXRl KGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxl bikpCisrCQlnb3RvIGVycjsKKysJaWYgKHQuZW50Y250ICE9IDEpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNU RURfRk9SX1JFU0VFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysJLyogQ2hlY2sgcmVzZWVkIGNv dW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KKysJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJl c2VlZF9jb3VudGVyX3RtcCArIDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7CisrCQlnb3RvIGVycjsK KysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQ U19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8g ZXJyOworKwkJfQorKworKwkvKiBFeHBsaWNpdCByZXNlZWQgdGVzdHMgKi8KKysKKysJLyogVGVz dCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLworKwlp ZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRj dHgsIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEpID4gMCkKKysJCXsKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJS T1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVGVzdCBleHBsaWNp dCByZXNlZWQgd2l0aCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlICovCisrCisrCXQuZW50bGVuID0g MDsKKysKKysJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVu KSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisr CWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRv byBtdWNoIGVudHJvcHkgKi8KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkK KysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKwor Kwl0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKKysKKysJaWYgKEZJUFNfZHJiZ19y ZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghRklQU19kcmJnX3VuaW5zdGFu dGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwor KwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsaXR0bGUgZW50cm9weSAqLworKwor KwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRj dHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCXQuZW50bGVuID0gZGN0eC0+bWlu X2VudHJvcHkgLSAxOworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwg dGQtPmFkaW5sZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsK KysJCX0KKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElB VEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCXAgPSAodW5zaWduZWQgY2hhciAq KSZkY3R4LT5kOworKwkvKiBTdGFuZGFyZCBzYXlzIHdlIGhhdmUgdG8gY2hlY2sgdW5pbnN0YW50 aWF0ZSByZWFsbHkgemVyb2VzCisrCSAqIHRoZSBkYXRhLi4uCisrCSAqLworKwlmb3IgKGkgPSAw OyBpIDwgc2l6ZW9mKGRjdHgtPmQpOyBpKyspCisrCQl7CisrCQlpZiAoKnAgIT0gMCkKKysJCQl7 CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNU QU5USUFURV9aRVJPSVNFX0VSUk9SKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQlwKys7Cisr CQl9CisrCisrCXJldHVybiAxOworKworKwllcnI6CisrCS8qIEEgcmVhbCBlcnJvciBhcyBvcHBv c2VkIHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5nIGZ1bmN0aW9uIHdpbGwKKysJICogaW5k aWNhdGUgdGhlIGVycm9yLgorKwkgKi8KKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFH X05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X0ZVTkNUSU9OX0VSUk9SKTsKKysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCXJl dHVybiAwOworKworKwl9CisrCisraW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGlu dCBuaWQsIHVuc2lnbmVkIGludCBmbGFncykKKysJeworKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRk OworKwlmbGFncyB8PSBEUkJHX0ZMQUdfVEVTVDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQt Pm5pZCAhPSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRkLT5mbGFn cyA9PSBmbGFncykKKysJCQl7CisrCQkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0 ZCwgMCkpCisrCQkJCXJldHVybiAwOworKwkJCXJldHVybiBmaXBzX2RyYmdfZXJyb3JfY2hlY2so ZGN0eCwgdGQpOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19k cmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCkKKysJeworKwlpbnQgcnY7CisrCURSQkdf Q1RYICp0Y3R4ID0gTlVMTDsKKysJdGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrCWZpcHNf cG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsK KysJaWYgKCF0Y3R4KQorKwkJcmV0dXJuIDA7CisrCXJ2ID0gZmlwc19kcmJnX2thdCh0Y3R4LCBk Y3R4LT50eXBlLCBkY3R4LT54ZmxhZ3MpOworKwlpZiAodGN0eCkKKysJCUZJUFNfZHJiZ19mcmVl KHRjdHgpOworKwlpZiAocnYpCisrCQlmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywg ZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrCWVsc2UKKysJCWZpcHNfcG9zdF9mYWlsZWQo RklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOworKwlpZiAoIXJ2KQor KwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrCWVsc2UKKysJCWRjdHgtPmhl YWx0aF9jaGVja19jbnQgPSAwOworKwlyZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19zZWxm dGVzdF9kcmJnKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHg7CisrCURSQkdfU0VMRlRFU1Rf REFUQSAqdGQ7CisrCWludCBydiA9IDE7CisrCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwor KwlpZiAoIWRjdHgpCisrCQlyZXR1cm4gMDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5p ZCAhPSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKHRkLT5wb3N0ICE9IDEpCisrCQkJY29udGludWU7 CisrCQlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQt PmZsYWdzKSkKKysJCQlyZXR1cm4gMTsKKysJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0 eCwgdGQsIDEpKQorKwkJCXsKKysJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0 ZC0+bmlkLCAmdGQtPmZsYWdzKTsKKysJCQlydiA9IDA7CisrCQkJY29udGludWU7CisrCQkJfQor KwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5m bGFncykpCisrCQkJcmV0dXJuIDA7CisrCQl9CisrCUZJUFNfZHJiZ19mcmVlKGRjdHgpOworKwly ZXR1cm4gcnY7CisrCX0KKysKKysKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKQor Kwl7CisrCURSQkdfQ1RYICpkY3R4OworKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKwlpbnQg cnYgPSAxOworKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKKysJaWYgKCFkY3R4KQorKwkJ cmV0dXJuIDA7CisrCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKKysJ CXsKKysJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0 ZC0+ZmxhZ3MpKQorKwkJCXJldHVybiAxOworKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChk Y3R4LCB0ZCwgMCkpCisrCQkJeworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcs IHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250aW51ZTsKKysJCQl9 CisrCQlpZiAoIWZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCkpCisrCQkJeworKwkJCWZp cHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJ CXJ2ID0gMDsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfcG9zdF9zdWNjZXNz KEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4gMDsKKysJ CX0KKysJRklQU19kcmJnX2ZyZWUoZGN0eCk7CisrCXJldHVybiBydjsKKysJfQorKworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAorLS0tIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMJMjAxNC0xMC0x NiAxMzoxOTozNS4wOTgzMDY0MDEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzX2RyYmdfc2VsZnRlc3QuaAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5ODMwNjQwMSArMDIw MAorQEAgLTAsMCArMSwyMzM1IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZS5vcmcuCisrICoKKysgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKy8qIFNlbGZ0ZXN0 IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBmb3IgdGhlIFNQODAwLTkwIERSQkcgKi8KKysKKysjZGVm aW5lIF9fZmlwc19jb25zdHNlZworKworKy8qIEFFUy0xMjggdXNlIGRmIFBSICAqLworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3By X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDYxLDB4NTIsMHg3YywweGUzLDB4MjMsMHg3ZCww eDBhLDB4MDcsMHgxMCwweDBjLDB4NTAsMHgzMywKKysJMHhjOCwweGRiLDB4ZmYsMHgxMgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4NTEsMHgwZCwweDg1LDB4NzcsMHhlZCww eDIyLDB4OTcsMHgyOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweDU5LDB4OWYsMHhiYiwweGNkLDB4ZDUsMHgyNSwweDY5LDB4YjUsMHhjYiwweGI1 LDB4MDMsMHhmZSwKKysJMHhkNywweGQ3LDB4MDEsMHg2NworKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0KKysJeworKwkweGVmLDB4ODgsMHg3NiwweDAxLDB4YWYsMHgzYywweGZl LDB4OGIsMHhhZiwweDI2LDB4MDYsMHg5ZSwKKysJMHg5YSwweDQ3LDB4MDgsMHg3NgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4ZTIsMHg3NiwweGY5LDB4ZjYs MHgzYSwweGJhLDB4MTAsMHg5ZiwweGJmLDB4NDcsMHgwZSwweDUxLAorKwkweDA5LDB4ZmIsMHhh MywweGI2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGQ0 LDB4OTgsMHg4YSwweDQ2LDB4ODAsMHg0YywweGRiLDB4YTMsMHg1OSwweDAyLDB4NTcsMHg1MiwK KysJMHg2NiwweDFjLDB4ZWEsMHg1YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9CisrCXsKKysJMHg4OCwweDhjLDB4OTEsMHhkNiwweGJlLDB4NTYsMHg2ZSwweDA4LDB4OWEs MHg2MiwweDJiLDB4MTEsCisrCTB4M2YsMHg1ZSwweDMxLDB4MDYKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhjMCwweDVjLDB4NmIsMHg5OCwweDAxLDB4MGQs MHg1OCwweDE4LDB4NTEsMHgxOCwweDk2LDB4YWUsCisrCTB4YTcsMHhlMywweGE4LDB4NjcKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhjZiwweDAxLDB4YWMsMHgy MiwweDMxLDB4MDYsMHg4ZSwweGZjLDB4Y2UsMHg1NiwweGVhLDB4MjQsCisrCTB4MGYsMHgzOCww eDQzLDB4YzYKKysJfTsKKysKKysKKysvKiBBRVMtMTI4IHVzZSBkZiBObyBQUiAgKi8KKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9l bnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxZiwweDhlLDB4MzQsMHg4MiwweDBjLDB4YjcsMHhi ZSwweGM1LDB4MDEsMHgzZSwweGQwLDB4YTMsCisrCTB4OWQsMHg3ZCwweDFjLDB4OWIKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9ub25jZVtdID0KKysJeworKwkweGQ1LDB4NGQsMHhiZCwweDRhLDB4OTMsMHg3Ziww eGI4LDB4OTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJ MHhhYiwweGQ2LDB4M2YsMHgwNCwweGZlLDB4MjcsMHg2YiwweDJkLDB4ZDcsMHhjMywweDFjLDB4 ZjMsCisrCTB4MzgsMHg2NiwweGJhLDB4MWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRb XSA9CisrCXsKKysJMHhmZSwweGY0LDB4MDksMHhhOCwweGI3LDB4NzMsMHgyNywweDljLDB4NWYs MHhhNywweGVhLDB4NDYsCisrCTB4YjUsMHhlMiwweGIyLDB4NDEKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NDIsMHhlNCwweDRlLDB4N2IsMHgyNywweGRkLDB4 Y2IsMHhiYywweDBhLDB4Y2YsMHhhNiwweDY3LAorKwkweGU3LDB4NTcsMHgxMSwweGI0CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4MTQsMHgyNiwweDY5LDB4 ZDksMHhmMywweDY1LDB4MDMsMHhkNiwweDZiLDB4YjksMHg0NCwweDBiLAorKwkweGM3LDB4YzQs MHg5ZSwweDM5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7Cisr CTB4NTUsMHgyZSwweDYwLDB4OWEsMHgwNSwweDcyLDB4OGEsMHhhOCwweGVmLDB4MjIsMHg4MSww eDVhLAorKwkweGM4LDB4OTMsMHhmYSwweDg0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0 MltdID0KKysJeworKwkweDNjLDB4NDAsMHhjOCwweGM0LDB4MTYsMHgwYywweDIxLDB4YTQsMHgz NywweDJjLDB4OGYsMHhhNSwKKysJMHgwNiwweDBjLDB4MTUsMHgyYworKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweGUxLDB4M2UsMHg5OSwweDk4LDB4ODYsMHg2NywweDBi LDB4NjMsMHg3YiwweGJlLDB4M2YsMHg4OCwKKysJMHg0NiwweDgxLDB4YzcsMHgxOQorKwl9Owor KworKworKy8qIEFFUy0xOTIgdXNlIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0K KysJeworKwkweDJiLDB4NGUsMHg4YiwweGUxLDB4ZjEsMHgzNCwweDgwLDB4NTYsMHg4MSwweGY5 LDB4NzQsMHhlYywKKysJMHgxNywweDQ0LDB4MmEsMHhmMSwweDE0LDB4YjAsMHhiZiwweDk3LDB4 MzksMHhiNywweDA0LDB4N2QKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9ub25jZVtdID0KKysJeworKwkweGQ2 LDB4OWQsMHhlYiwweDE0LDB4NGUsMHg2YywweDMwLDB4MWUsMHgzOSwweDU1LDB4NzMsMHhkMCwK KysJMHhkMSwweDgwLDB4NzgsMHhmYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KKysJeworKwkweGZjLDB4NDMsMHg0YSwweGY4LDB4OWEsMHg1NSwweGIzLDB4NTMs MHg4MywweGUyLDB4MTgsMHgxNiwKKysJMHgwYywweGRjLDB4Y2QsMHg1ZSwweDRmLDB4YTAsMHgw MywweDAxLDB4MmIsMHg5ZiwweGU0LDB4ZDUsCisrCTB4N2QsMHg0OSwweGYwLDB4NDEsMHg5ZSww eDNkLDB4OTksMHgwNAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweDVlLDB4OWYsMHg0OSwweDZmLDB4MjEsMHg4YiwweDFkLDB4MzIsMHhkNSwweDg0LDB4NWMs MHhhYywKKysJMHhhZiwweGRmLDB4ZTQsMHg3OSwweDllLDB4YWYsMHhhOSwweDgyLDB4ZDAsMHhm OCwweDRmLDB4Y2IsCisrCTB4NjksMHgxMCwweDBhLDB4N2UsMHg4MSwweDU3LDB4YjUsMHgzNgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4ZDQsMHg4MSwweDBj LDB4ZDcsMHg2NiwweDM5LDB4ZWMsMHg0MiwweDUzLDB4ODcsMHg0MSwweGE1LAorKwkweDFlLDB4 N2QsMHg4MCwweDkxLDB4OGUsMHhiYiwweGVkLDB4YWMsMHgxNCwweDAyLDB4MWEsMHhkNQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkZiwweDFkLDB4Mzks MHg0NSwweDdjLDB4OWIsMHhjNiwweDJiLDB4N2QsMHg4YywweDkzLDB4ZTksCisrCTB4MTksMHgz MCwweDZiLDB4NjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7Cisr CTB4MDAsMHg3MSwweDI3LDB4NGUsMHhkMywweDE0LDB4ZjEsMHgyMCwweDdmLDB4NGEsMHg0MSww eDMyLAorKwkweDJhLDB4OTcsMHgxMSwweDQzLDB4OGYsMHg0YSwweDE1LDB4N2IsMHg5YiwweDUx LDB4NzksMHhkYSwKKysJMHg0OSwweDNkLDB4ZGUsMHhlOCwweGJjLDB4OTMsMHg5MSwweDk5Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4OTAsMHhlZSwweDc2 LDB4YTEsMHg0NSwweDhkLDB4YjcsMHg0MCwweGIwLDB4MTEsMHhiZiwweGQwLAorKwkweDY1LDB4 ZDcsMHgzYywweDdjLDB4NGYsMHgyMCwweDNmLDB4NGUsMHgxMSwweDlkLDB4YjMsMHg1ZQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDI0LDB4M2IsMHgyMCwweGE0 LDB4MzcsMHg2NiwweGJhLDB4NzIsMHgzOSwweDNmLDB4Y2YsMHgzYywKKysJMHg3ZSwweDFhLDB4 MmIsMHg4MworKwl9OworKworKworKy8qIEFFUy0xOTIgdXNlIGRmIE5vIFBSICAqLworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2Vu dHJvcHlpbnB1dFtdID0KKysJeworKwkweDhkLDB4NzQsMHhhNCwweDUwLDB4MWEsMHgwMiwweDY4 LDB4MGMsMHgyYSwweDY5LDB4YzQsMHg4MiwKKysJMHgzYiwweGJiLDB4ZGEsMHgwZSwweDdmLDB4 NzcsMHhhMywweDE3LDB4NzgsMHg1NywweGIyLDB4N2IKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25jZVtdID0K KysJeworKwkweDc1LDB4ZDUsMHgxZiwweGFjLDB4YTQsMHg4ZCwweDQyLDB4NzgsMHhkNywweDY5 LDB4ODYsMHg5ZCwKKysJMHg3NywweGQ3LDB4NDEsMHgwZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDRlLDB4MzMsMHg0MSwweDNjLDB4OWMsMHhjMiww eGQyLDB4NTMsMHhhZiwweDkwLDB4ZWEsMHhjZiwKKysJMHgxOSwweDUwLDB4MWUsMHhlNiwweDZm LDB4NjMsMHhjOCwweDMyLDB4MjIsMHhkYywweDA3LDB4NjUsCisrCTB4OWMsMHhkMywweGY4LDB4 MzAsMHg5ZSwweGVkLDB4MzUsMHg3MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0K KysJeworKwkweDVkLDB4OGIsMHg4YywweGMxLDB4ZGYsMHgwZSwweDAyLDB4NzgsMHhmYiwweDE5 LDB4YjgsMHg2OSwKKysJMHg3OCwweDRlLDB4OWMsMHg1MiwweGJjLDB4YzcsMHgyMCwweGM5LDB4 ZTYsMHg1ZSwweDc3LDB4MjIsCisrCTB4MjgsMHgzZCwweDBjLDB4OWUsMHg2OCwweGE4LDB4NDUs MHhkNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkNSwweGU3 LDB4MDgsMHhjNSwweDE5LDB4OTksMHhkNSwweDMxLDB4MDMsMHgwYSwweDc0LDB4YjYsCisrCTB4 YjcsMHhlZCwweGU5LDB4ZWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Cisr CXsKKysJMHg5YywweDI2LDB4ZGEsMHhmMSwweGFjLDB4ZDksMHg1YSwweGQ2LDB4YTgsMHg2NSww eGY1LDB4MDIsCisrCTB4OGYsMHhkYywweGEyLDB4MDksMHg1NCwweGE2LDB4ZTIsMHhhNCwweGRl LDB4MzIsMHhlMCwweDAxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQor Kwl7CisrCTB4OWIsMHg5MCwweGIwLDB4M2EsMHgwZSwweDNhLDB4ODAsMHgwNywweDRhLDB4ZjQs MHhkYSwweDc2LAorKwkweDI4LDB4MzAsMHgzYywweGVlLDB4NTQsMHgxYiwweDk0LDB4NTksMHg1 MSwweDQzLDB4NTYsMHg3NywKKysJMHhhZiwweDg4LDB4ZGQsMHg2MywweDg5LDB4NDcsMHgwNiww eDY1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDNjLDB4MTEs MHg2NCwweDdhLDB4OTYsMHhmNSwweGQ4LDB4YjgsMHhhZSwweGQ2LDB4NzAsMHg0ZSwKKysJMHgx NiwweDk2LDB4ZGUsMHhlOSwweDYyLDB4YmMsMHhlZSwweDI4LDB4MmYsMHgyNiwweGE2LDB4ZjAs CisrCTB4NTYsMHhlZiwweGEzLDB4ZjEsMHg2YiwweGExLDB4YjEsMHg3NworKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2Rm X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDBiLDB4ZTIsMHg1NiwweDAzLDB4MWUsMHhkYiww eDJjLDB4NmQsMHg3ZiwweDFiLDB4MTUsMHg1OCwKKysJMHgxYSwweGY5LDB4MTMsMHgyOAorKwl9 OworKworKworKy8qIEFFUy0yNTYgdXNlIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtd ID0KKysJeworKwkweDYxLDB4NjgsMHhmYywweDFhLDB4ZjAsMHhiNSwweDk1LDB4NmIsMHg4NSww eDA5LDB4OWIsMHg3NCwKKysJMHgzZiwweDEzLDB4NzgsMHg0OSwweDNiLDB4ODUsMHhlYywweDkz LDB4MTMsMHgzYiwweGE5LDB4NGYsCisrCTB4OTYsMHhhYiwweDJjLDB4ZTQsMHhjOCwweDhmLDB4 ZGQsMHg2YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4YWQsMHhkMiwweGJi LDB4YmEsMHhiNywweDY1LDB4ODksMHhjMywweDIxLDB4NmMsMHg1NSwweDMzLAorKwkweDJiLDB4 MzYsMHhmZiwweGE0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQor Kwl7CisrCTB4NmUsMHhjYSwweGU3LDB4MjAsMHg3MiwweGQzLDB4ODQsMHg1YSwweDMyLDB4ZDMs MHg0YiwweDI0LAorKwkweDcyLDB4YzQsMHg2MywweDJiLDB4OWQsMHgxMiwweDI0LDB4MGMsMHgy MywweDI2LDB4OGUsMHg4MywKKysJMHgxNiwweDM3LDB4MGIsMHhkMSwweDA2LDB4NGYsMHg2OCww eDZkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4N2UsMHgw OCwweDRhLDB4YmIsMHhlMywweDIxLDB4N2MsMHhjOSwweDIzLDB4ZDIsMHhmOCwweGIwLAorKwkw eDczLDB4OTgsMHhiYSwweDg0LDB4NzQsMHgyMywweGFiLDB4MDYsMHg4YSwweGUyLDB4MjIsMHhk MywKKysJMHg3YiwweGNlLDB4OWIsMHhkMiwweDRhLDB4NzYsMHhiOCwweGRlCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHgwYiwweDIzLDB4YWYsMHhkZiwweGYx LDB4NjIsMHhkNywweGQzLDB4NDMsMHg5NywweGY4LDB4NzcsCisrCTB4MDQsMHhhOCwweDQyLDB4 MjAsMHhiZCwweGY2LDB4MGYsMHhjMSwweDE3LDB4MmYsMHg5ZiwweDU0LAorKwkweGJiLDB4NTYs MHgxNywweDg2LDB4NjgsMHgwZSwweGJhLDB4YTkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4MzEsMHg4ZSwweGFkLDB4YWYsMHg0MCwweGViLDB4NmIsMHg3 NCwweDMxLDB4NDYsMHg4MCwweGM3LAorKwkweDE3LDB4YWIsMHgzYywweDdhCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDk0LDB4NmIsMHhjOSwweDlmLDB4 YWIsMHg4ZCwweGM1LDB4ZWMsMHg3MSwweDg4LDB4MWQsMHgwMCwKKysJMHg4YywweDg5LDB4Njgs MHhlNCwweGM4LDB4MDcsMHg3NywweDM2LDB4MTcsMHg2ZCwweDc5LDB4NzgsCisrCTB4YzcsMHgw NiwweDRlLDB4OTksMHgwNCwweDI4LDB4MjksMHhjMworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlp bnB1dHByMltdID0KKysJeworKwkweGJmLDB4NmMsMHg1OSwweDJhLDB4MGQsMHg0NCwweDBmLDB4 YWUsMHg5YSwweDVlLDB4MDMsMHg3MywKKysJMHhkOCwweGE2LDB4ZTEsMHhjZiwweDI1LDB4NjEs MHgzOCwweDI0LDB4ODYsMHg5ZSwweDUzLDB4ZTgsCisrCTB4YTQsMHhkZiwweDU2LDB4ZjQsMHgw NiwweDA3LDB4OWMsMHgwZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJewor KwkweDIyLDB4NGEsMHhiNCwweGI4LDB4YjYsMHhlZSwweDdkLDB4YjEsMHg5ZSwweGM5LDB4Zjks MHhhMCwKKysJMHhkOSwweGUyLDB4OTcsMHgwMAorKwl9OworKworKworKy8qIEFFUy0yNTYgdXNl IGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGE1LDB4M2UsMHgz NywweDEwLDB4MTcsMHg0MywweDkxLDB4OTMsMHg1OSwweDFlLDB4NDcsMHg1MCwKKysJMHg4Nyww eGFhLDB4ZGQsMHhkNSwweGMxLDB4YzMsMHg4NiwweGNkLDB4Y2EsMHgwZCwweGRiLDB4NjgsCisr CTB4ZTAsMHgwMiwweGQ4LDB4MGYsMHhkYywweDQwLDB4MWEsMHg0NworKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX25v bmNlW10gPQorKwl7CisrCTB4YTksMHg0ZCwweGE1LDB4NWEsMHhmZCwweGM1LDB4MGMsMHhlNSww eDFjLDB4OWEsMHgzYiwweDhhLAorKwkweDRjLDB4NDQsMHg4NCwweDQwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4OGIsMHg1MiwweGEyLDB4NGEsMHg5 MywweGMzLDB4NGUsMHhhNywweDFlLDB4MWMsMHhhNywweDA1LAorKwkweGViLDB4ODIsMHg5Yiww eGE2LDB4NWQsMHhlNCwweGQ0LDB4ZTAsMHg3ZiwweGEzLDB4ZDgsMHg2YiwKKysJMHgzNywweDg0 LDB4NWYsMHhmMSwweGM3LDB4ZDUsMHhmNiwweGQyCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlu cHV0W10gPQorKwl7CisrCTB4MjAsMHhmNCwweDIyLDB4ZWQsMHhmOCwweDVjLDB4YTEsMHg2YSww eDAxLDB4Y2YsMHhiZSwweDVmLAorKwkweDhkLDB4NmMsMHg5NCwweDdmLDB4YWUsMHgxMiwweGE4 LDB4NTcsMHhkYiwweDJhLDB4YTksMHhiZiwKKysJMHhjNywweGIzLDB4NjUsMHg4MSwweDgwLDB4 OGQsMHgwZCwweDQ2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eDRlLDB4NDQsMHhmZCwweGYzLDB4OWUsMHgyOSwweGEyLDB4YjgsMHgwZiwweDVkLDB4NmMsMHhl MSwKKysJMHgyOCwweDBjLDB4M2IsMHhjMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0KKysJeworKwkweGRkLDB4NDAsMHhlNSwweDk4LDB4N2IsMHgyNywweDE2LDB4NzMsMHgx NSwweDY4LDB4ZDIsMHg3NiwKKysJMHhiZiwweDBjLDB4NjcsMHgxNSwweDc1LDB4NzksMHgwMyww eGQzLDB4ZGUsMHhkZSwweDkxLDB4NDYsCisrCTB4NDIsMHhkZCwweGQ0LDB4NjcsMHhjOCwweDc5 LDB4YzgsMHgxZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJewor KwkweDdmLDB4ZDgsMHgxZiwweGJkLDB4MmEsMHhiNSwweDFjLDB4MTEsMHg1ZCwweDgzLDB4NGUs MHg5OSwKKysJMHhmNiwweDVjLDB4YTUsMHg0MCwweDIwLDB4ZWQsMHgzOCwweDhlLDB4ZDUsMHg5 ZSwweGUwLDB4NzUsCisrCTB4OTMsMHhmZSwweDEyLDB4NWUsMHg1ZCwweDczLDB4ZmIsMHg3NQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhjZCwweDJjLDB4ZmYs MHgxNCwweDY5LDB4M2UsMHg0YywweDllLDB4ZmQsMHhmZSwweDI2LDB4MGQsCisrCTB4ZTksMHg4 NiwweDAwLDB4NDksMHgzMCwweGJhLDB4YjEsMHhjNiwweDUwLDB4NTcsMHg3NywweDJhLAorKwkw eDYyLDB4MzksMHgyYywweDNiLDB4NzQsMHhlYiwweGM5LDB4MGQKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0ZiwweDc4LDB4YmUsMHhiOSwweDRkLDB4OTcsMHg4Yyww eGU5LDB4ZDAsMHg5NywweGZlLDB4YWQsCisrCTB4ZmEsMHhmZCwweDM1LDB4NWUKKysJfTsKKysK KysKKysvKiBBRVMtMTI4IG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7 CisrCTB4OWEsMHgyNSwweDY1LDB4MTAsMHg2NywweGQ1LDB4YjYsMHg2YiwweDcwLDB4YTEsMHhi MywweGE0LAorKwkweDQzLDB4OTUsMHg4MCwweGMwLDB4ODQsMHgwYSwweDc5LDB4YjAsMHg4OCww eDc0LDB4ZjIsMHhiZiwKKysJMHgzMSwweDZjLDB4MzMsMHgzOCwweDBiLDB4MDAsMHhiMiwweDVh CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9wcl9ub25jZVtdID0KKysJeworKwkweDc4LDB4NDcsMHg2YiwweGY3LDB4 OTAsMHg4ZSwweDg3LDB4ZjEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KKysJeworKwkweGY3LDB4MjIsMHgxZCwweDNhLDB4YmUsMHgxZCwweGNhLDB4MzIsMHgxYiww eGJkLDB4ODcsMHgwYywKKysJMHg1MSwweDI0LDB4MTksMHhlZSwweGEzLDB4MjMsMHgwOSwweDYz LDB4MzMsMHgzZCwweGE4LDB4MGMsCisrCTB4MWMsMHhmYSwweDQyLDB4ODksMHhjYywweDZmLDB4 YTAsMHhhOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4Yzks MHhlMCwweDgwLDB4YmYsMHg4YywweDQ1LDB4NTgsMHgzOSwweGZmLDB4MDAsMHhhYiwweDAyLAor KwkweDRjLDB4M2UsMHgzYSwweDk1LDB4OWIsMHg4MCwweGE4LDB4MjEsMHgyYSwweGVlLDB4YmEs MHg3MywKKysJMHhiMSwweGQ5LDB4Y2YsMHgyOCwweGY2LDB4OGYsMHg5YiwweDEyCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDRjLDB4YTgsMHhjNSwweGYwLDB4 NTksMHg5ZSwweGE2LDB4OGQsMHgyNiwweDUzLDB4ZDcsMHg4YSwKKysJMHhhOSwweGQ4LDB4Zjcs MHhlZCwweGIyLDB4ZjksMHgxMiwweDQyLDB4ZTEsMHhlNSwweGJkLDB4ZTcsCisrCTB4ZTcsMHgx ZCwweDc0LDB4OTksMHgwMCwweDlkLDB4MzEsMHgzZQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfaW50X3JldHVy bmVkYml0c1tdID0KKysJeworKwkweGUyLDB4YWMsMHgyMCwweGYwLDB4ODAsMHhlNywweGJjLDB4 N2UsMHg5YywweDdiLDB4NjUsMHg3MSwKKysJMHhhZiwweDE5LDB4MzIsMHgxNgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDMyLDB4N2YsMHgzOCwweDhiLDB4 NzMsMHgwYSwweDc4LDB4ODMsMHhkYywweDMwLDB4YmUsMHg5ZiwKKysJMHgxMCwweDFmLDB4ZjUs MHgxZiwweGNhLDB4MDAsMHhiNSwweDBkLDB4ZDYsMHg5ZCwweDYwLDB4ODMsCisrCTB4NTEsMHg1 NCwweDdkLDB4MzgsMHgyMywweDNhLDB4NTIsMHg1MAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlu cHV0cHIyW10gPQorKwl7CisrCTB4MTgsMHg2MSwweDUzLDB4NTYsMHhlZCwweGVkLDB4ZDcsMHgy MCwweGZiLDB4NzEsMHgwNCwweDdhLAorKwkweGIyLDB4YWMsMHhjMSwweDI4LDB4Y2QsMHhmMiww eGMyLDB4ZmMsMHhhYSwweGIxLDB4MDYsMHgwNywKKysJMHhlOSwweDQ2LDB4OTUsMHgwMiwweDQ4 LDB4MDEsMHg3OCwweGY5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHgyOSwweGM4LDB4MWIsMHgxNSwweGIxLDB4ZDEsMHhjMiwweGY2LDB4NzEsMHg4NiwweDY4LDB4 MzMsCisrCTB4NTcsMHg4MiwweDMzLDB4YWYKKysJfTsKKysKKysKKysvKiBBRVMtMTI4IG5vIGRm IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YzksMHhjNSwweDc5LDB4 YmMsMHhlOCwweGM1LDB4MTksMHhkOCwweGJjLDB4NjYsMHg3MywweDY3LAorKwkweGY2LDB4ZDMs MHg3MiwweGFhLDB4YTYsMHgxNiwweGI4LDB4NTAsMHhiNywweDQ3LDB4M2EsMHg0MiwKKysJMHhh YiwweGY0LDB4MTYsMHhiMiwweDk2LDB4ZDIsMHhiNiwweDYwCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9ub25jZVtd ID0KKysJeworKwkweDVmLDB4YmYsMHg5NywweDBjLDB4NGIsMHhhNCwweDg3LDB4MTMKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGNlLDB4ZmIsMHg3Yiww eDNmLDB4ZDQsMHg2YiwweDI5LDB4MGQsMHg2OSwweDA2LDB4ZmYsMHhiYiwKKysJMHhmMiwweGU1 LDB4YzYsMHg2YywweDBhLDB4MTAsMHhhMCwweGNmLDB4MWEsMHg0OCwweGM3LDB4OGIsCisrCTB4 M2MsMHgxNiwweDg4LDB4ZWQsMHg1MCwweDEzLDB4ODEsMHhjZQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRp b25hbGlucHV0W10gPQorKwl7CisrCTB4NGIsMHgyMiwweDQ2LDB4MTgsMHgwMiwweDdiLDB4ZDIs MHgxYiwweDIyLDB4NDIsMHg3YywweDM3LAorKwkweGQ5LDB4ZjYsMHhlOCwweDliLDB4MTIsMHgz MCwweDVmLDB4ZTksMHg5MCwweGU4LDB4MDgsMHgyNCwKKysJMHg0ZiwweDA2LDB4NjYsMHhkYiww eDE5LDB4MmIsMHgxMywweDk1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4MmUsMHg5NiwweDcwLDB4NjQsMHhmYSwweGRmLDB4ZGYsMHg1NywweGI1LDB4ODIsMHhl ZSwweGQ2LAorKwkweGVkLDB4M2UsMHg2NSwweGMyCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRy ZXNlZWRbXSA9CisrCXsKKysJMHgyNiwweGMwLDB4NzIsMHgxNiwweDNhLDB4NGIsMHhiNywweDk5 LDB4ZDQsMHgwNywweGFmLDB4NjYsCisrCTB4NjIsMHgzNiwweDk2LDB4YTQsMHg1MSwweDE3LDB4 ZmEsMHgwNywweDhiLDB4MTcsMHg1ZSwweGExLAorKwkweDJmLDB4M2MsMHgxMCwweGU3LDB4OTAs MHhkMCwweDQ2LDB4MDAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJ eworKwkweDgzLDB4MzksMHgzNywweDdiLDB4MDIsMHgwNiwweGQyLDB4MTIsMHgxMywweDhkLDB4 OGIsMHhmMiwKKysJMHhmMCwweGY2LDB4MjYsMHhlYiwweGE0LDB4MjIsMHg3YiwweGMyLDB4ZTcs MHhiYSwweDc5LDB4ZTQsCisrCTB4M2IsMHg3NywweDVkLDB4NGQsMHg0NywweGIyLDB4MmQsMHhi NAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDBiLDB4YjksMHg2 NywweDM3LDB4ZGIsMHg4MywweGRmLDB4Y2EsMHg4MSwweDhiLDB4ZjksMHgzZiwKKysJMHhmMSww eDExLDB4MWIsMHgyZiwweGYwLDB4NjEsMHhhNiwweGRmLDB4YmEsMHhhMywweGIxLDB4YWMsCisr CTB4ZDMsMHhlNiwweDA5LDB4YjgsMHgyYywweDZhLDB4NjcsMHhkNgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcmV0 dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MWUsMHhhNywweGE0LDB4ZTQsMHhlMSwweGE2LDB4N2Ms MHg2OSwweDlhLDB4NDQsMHg2YywweDM2LAorKwkweDgxLDB4MzcsMHgxOSwweGQ0CisrCX07Cisr CisrCisrLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJ eworKwkweDlkLDB4MmMsMHhkMiwweDU1LDB4NjYsMHhlYSwweGUwLDB4YmUsMHgxOCwweGI3LDB4 NzYsMHhlNywKKysJMHg3MywweDM1LDB4ZDgsMHgxZiwweGFkLDB4M2EsMHhlMywweDgxLDB4MGUs MHg5MiwweGQwLDB4NjEsCisrCTB4YzksMHgxMiwweDI2LDB4ZjYsMHgxYywweGRmLDB4ZmUsMHg0 NywweGFhLDB4ZmUsMHg3ZCwweDVhLAorKwkweDE3LDB4MWYsMHg4ZCwweDlhCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9wcl9ub25jZVtdID0KKysJeworKwkweDQ0LDB4ODIsMHhlZCwweGU4LDB4NGMsMHgyOCwweDVh LDB4MTQsMHhmZiwweDg4LDB4OGQsMHgxOSwKKysJMHg2MSwweDVjLDB4ZWUsMHgwZgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf bm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NDcsMHhkNywweDli LDB4OTksMHhhYSwweGNiLDB4ZTcsMHhkMiwweDU3LDB4NjYsMHgyYywweGUxLAorKwkweDc4LDB4 ZDYsMHgyYywweGVhLDB4YTMsMHgyMywweDVmLDB4MmEsMHhjMSwweDNhLDB4ZjAsMHhhNCwKKysJ MHgyMCwweDNiLDB4ZmEsMHgwNywweGQ1LDB4MDUsMHgwMiwweGU0LDB4NTcsMHgwMSwweGI2LDB4 MTAsCisrCTB4NTcsMHgyZSwweGU3LDB4NTUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dFtdID0KKysJeworKwkweDRiLDB4NzQsMHgwYiwweDQwLDB4Y2UsMHg2YiwweGMyLDB4NmEsMHgy NCwweGI0LDB4ZjMsMHhhZCwKKysJMHg3YSwweGE1LDB4N2EsMHhhMiwweDE1LDB4ZTIsMHhjOCww eDYxLDB4MTUsMHhjNiwweGI3LDB4ODUsCisrCTB4NjksMHgxMSwweGFkLDB4N2IsMHgxNCwweGQy LDB4ZjYsMHgxMiwweGExLDB4OTUsMHg1ZCwweDNmLAorKwkweGUyLDB4ZDAsMHgwYywweDJmCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDBjLDB4OWMsMHhhZCww eDA1LDB4ZWUsMHhhZSwweDQ4LDB4MjMsMHg4OSwweDU5LDB4YTEsMHg5NCwKKysJMHhkNywweGQ4 LDB4NzUsMHhkNSwweDU0LDB4OTMsMHhjNywweDRhLDB4ZDksMHgyNiwweGRlLDB4ZWIsCisrCTB4 YmEsMHhiMCwweDdlLDB4MzAsMHgxZCwweDVmLDB4NjksMHg0MCwweDljLDB4M2IsMHgxNywweDU4 LAorKwkweDFkLDB4MzAsMHhiMywweDc4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4ZjcsMHg5MywweGIwLDB4NmQsMHg3NywweDgzLDB4ZDUsMHgzOCwweDAx LDB4ZTEsMHg1MiwweDQwLAorKwkweDdlLDB4M2UsMHgwYywweDI2CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9h ZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4YmMsMHg0YiwweDM3LDB4NDQsMHgxYywweGM1 LDB4NDUsMHg1ZiwweDhmLDB4NTEsMHg2MiwweDhhLAorKwkweDg1LDB4MzAsMHgxZCwweDdjLDB4 ZTQsMHhjZiwweGY3LDB4NDQsMHhjZSwweDMyLDB4M2UsMHg1NywKKysJMHg5NSwweGE0LDB4MmEs MHhkZiwweGZkLDB4OWUsMHgzOCwweDQxLDB4YjMsMHhmNiwweGM1LDB4ZWUsCisrCTB4MGMsMHg0 YiwweGVlLDB4NmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkw eGVjLDB4YWYsMHhmNiwweDRmLDB4YjEsMHhhMCwweDU0LDB4YjUsMHg1YiwweGUzLDB4NDYsMHhi MCwKKysJMHg3NiwweDVhLDB4N2MsMHgzZiwweDdiLDB4OTQsMHg2OSwweDIxLDB4NTEsMHgwMiww eGU1LDB4OWYsCisrCTB4MDQsMHg1OSwweDAyLDB4OTgsMHhjNiwweDQzLDB4MmMsMHhjYywweDI2 LDB4NGMsMHg4NywweDZiLAorKwkweDhlLDB4MGEsMHg4MywweGRmCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg3NCwweDQ1LDB4ZmIsMHg1MywweDg0LDB4OTYsMHhi ZSwweGZmLDB4MTUsMHhjYywweDQxLDB4OTEsCisrCTB4YjksMHhhMSwweDIxLDB4NjgKKysJfTsK KysKKysKKysvKiBBRVMtMTkyIG5vIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0W10gPQor Kwl7CisrCTB4M2MsMHg3ZCwweGI1LDB4ZTAsMHg1NCwweGQ5LDB4NmUsMHg4YywweGE5LDB4ODYs MHhjZSwweDRlLAorKwkweDZiLDB4YWYsMHhlYiwweDJmLDB4ZTcsMHg3NSwweGUwLDB4OGIsMHhh NCwweDNiLDB4MDcsMHhmZSwKKysJMHhiZSwweDMzLDB4NzUsMHg5MywweDgwLDB4MjcsMHhiNSww eDI5LDB4NDcsMHg4YiwweGM3LDB4MjgsCisrCTB4OTQsMHhjMywweDU5LDB4NjMKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX25vbmNlW10gPQorKwl7CisrCTB4NDMsMHhmMSwweDdkLDB4YjgsMHhjMywweGZlLDB4ZDAs MHgyMywweDZiLDB4YjQsMHg5MiwweGRiLAorKwkweDI5LDB4ZmQsMHg0NSwweDcxCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg5ZiwweDI0LDB4MjksMHg5 OSwweDllLDB4MDEsMHhhYiwweGU5LDB4MTksMHhkOCwweDIzLDB4MDgsCisrCTB4YjcsMHhkNiww eDdlLDB4OGMsMHhjMCwweDllLDB4N2YsMHg2ZSwweDViLDB4MzMsMHgyMCwweDk2LAorKwkweDBi LDB4MjMsMHgyYywweGE1LDB4NmEsMHhmOCwweDFiLDB4MDQsMHgyNiwweGRiLDB4MmUsMHgyYiwK KysJMHgzYiwweDg4LDB4Y2UsMHgzNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQor Kwl7CisrCTB4OTQsMHhlOSwweDdjLDB4M2QsMHhhNywweGRiLDB4NjAsMHg4MywweDFmLDB4OTgs MHgzZiwweDBiLAorKwkweDg4LDB4NTksMHg1NywweDUxLDB4ODgsMHg5ZiwweDc2LDB4NDksMHg5 ZiwweGE2LDB4ZGEsMHg3MSwKKysJMHgxZCwweDBkLDB4NDcsMHgxNiwweDYzLDB4YzUsMHg2OCww eGU0LDB4NWQsMHgzOSwweDY5LDB4YjMsCisrCTB4M2UsMHhiZSwweGQ0LDB4OGUKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhmOSwweGQ3LDB4YWQsMHg2OSwweGFi LDB4OGYsMHgyMywweDU2LDB4NzAsMHgxNywweDRmLDB4MmEsCisrCTB4NDUsMHhlNywweDRhLDB4 YzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGE2LDB4NzEs MHg2YSwweDNkLDB4YmEsMHhkMSwweGU4LDB4NjYsMHhhNiwweGVmLDB4YjIsMHgwZSwKKysJMHhh OCwweDljLDB4YWEsMHg0ZSwweGFmLDB4MTcsMHg4OSwweDUwLDB4MDAsMHhkYSwweGExLDB4YjEs CisrCTB4MGIsMHhhNCwweGQ5LDB4MzUsMHg4OSwweGM4LDB4ZTUsMHhiMCwweGQ5LDB4YjcsMHhj NCwweDMzLAorKwkweDliLDB4Y2IsMHg3ZSwweDc1CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5w dXRyZXNlZWRbXSA9CisrCXsKKysJMHgyNywweDIxLDB4ZmMsMHhjMiwweGJkLDB4ZjMsMHgzYyww eGNlLDB4YzMsMHhjYSwweGMxLDB4MDEsCisrCTB4ZTAsMHhmZiwweDkzLDB4MTIsMHg3ZCwweDU0 LDB4NDIsMHhlMywweDlmLDB4MDMsMHhkZiwweDI3LAorKwkweDA0LDB4MDcsMHgzYywweDUzLDB4 N2YsMHhhOCwweDY2LDB4YzgsMHg5NywweDRiLDB4NjEsMHg0MCwKKysJMHg1ZCwweDdhLDB4MjUs MHg3OQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDJkLDB4OGUs MHgxNiwweDVkLDB4MGIsMHg5ZiwweGViLDB4YWEsMHhkNiwweGVjLDB4MjgsMHg3MSwKKysJMHg3 YywweDBiLDB4YzEsMHgxZCwweGQ0LDB4NDQsMHgxOSwweDQ3LDB4ZmQsMHgxZCwweDdjLDB4ZTUs CisrCTB4ZjMsMHgyNywweGUxLDB4YjYsMHg3MiwweDBhLDB4ZTAsMHhlYywweDBlLDB4Y2QsMHhl ZiwweDFhLAorKwkweDkxLDB4NmEsMHhlMywweDVmCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHhlNSwweGRhLDB4YjgsMHhlMCwweDYzLDB4NTksMHg1YSwweGNjLDB4M2Qs MHhkYywweDlmLDB4ZTgsCisrCTB4NjYsMHg2NywweDJjLDB4OTIKKysJfTsKKysKKysKKysvKiBB RVMtMjU2IG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MTUs MHhjNywweDVkLDB4Y2IsMHg0MSwweDRiLDB4MTYsMHgwMSwweDNhLDB4ZDEsMHg0NCwweGU4LAor KwkweDIyLDB4MzIsMHhjNiwweDljLDB4M2YsMHhlNywweDQzLDB4ZjUsMHg5YSwweGQzLDB4ZWEs MHhmMiwKKysJMHhkNywweDRlLDB4NmUsMHg2YSwweDU1LDB4NzMsMHg0MCwweGVmLDB4ODksMHhh ZCwweDBkLDB4MDMsCisrCTB4OTYsMHg3ZSwweDc4LDB4ODEsMHgyZiwweDkxLDB4MWIsMHg0NCww eGIwLDB4MDIsMHhiYSwweDFjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0KKysJeworKwkweGRj LDB4ZTQsMHhkNCwweDI3LDB4N2EsMHg5MCwweGQ3LDB4OTksMHg0MywweGExLDB4M2MsMHgzMCwK KysJMHhjYywweDRiLDB4ZWUsMHgyZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQorKwl7CisrCTB4ZTMsMHhlNiwweGI5LDB4MTEsMHhlNCwweDdhLDB4YTQsMHg0MCww eDZiLDB4ZjgsMHg3MywweGY3LAorKwkweDdlLDB4ZWMsMHhjNywweGI5LDB4OTcsMHhiZiwweGY4 LDB4MjUsMHg3YiwweGJlLDB4MTEsMHg5YiwKKysJMHg1YiwweDZhLDB4MGMsMHgyZSwweDJiLDB4 MDEsMHg1MSwweGNkLDB4NDEsMHg0YiwweDZiLDB4YWMsCisrCTB4MzEsMHhhOCwweDBiLDB4Zjcs MHhlNiwweDU5LDB4NDIsMHhiOCwweDAzLDB4MGMsMHhmOCwweDA2CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg2YSwweDlmLDB4MDAsMHg5MSwweGFlLDB4ZmUs MHhjZiwweDg0LDB4OTksMHhjZSwweGIxLDB4NDAsCisrCTB4NmQsMHg1ZCwweDMzLDB4MjgsMHg4 NCwweGY0LDB4OGMsMHg2MywweDRjLDB4N2UsMHhiZCwweDJjLAorKwkweDgwLDB4NzYsMHhlZSww eDVhLDB4YWEsMHgxNSwweDA3LDB4MzEsMHhkOCwweGJiLDB4OGMsMHg2OSwKKysJMHg5ZCwweDlk LDB4YmMsMHg3ZSwweDQ5LDB4YWUsMHhlYywweDM5LDB4NmIsMHhkMSwweDFmLDB4N2UKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4ZjMsMHhiOSwweDc1LDB4OWMs MHhiZCwweDg4LDB4ZWEsMHhhMiwweDUwLDB4YWQsMHhkNiwweDE2LAorKwkweDFhLDB4MTIsMHgz YywweDg2LDB4NjgsMHhhZiwweDZmLDB4YmUsMHgxOSwweGYyLDB4ZWUsMHhjYywKKysJMHhhNSww eDcwLDB4ODQsMHg1MywweDUwLDB4Y2IsMHg5ZiwweDE0LDB4YTksMHhlNSwweGVlLDB4YjksCisr CTB4NDgsMHg0NSwweDQwLDB4ZTIsMHhjNywweGM5LDB4OWEsMHg3NCwweGZmLDB4OGMsMHg5OSww eDFmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MmUsMHhm MiwweDQ1LDB4NGMsMHg2MiwweDJlLDB4MGEsMHhiOSwweDZiLDB4YTIsMHhmZCwweDU2LAorKwkw eDc5LDB4NjAsMHg5MywweGNmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4YWYsMHg2OSwweDIwLDB4ZTksMHgzYiwweDM3LDB4OWQsMHgzZiwweGI0LDB4ODAs MHgwMiwweDdhLAorKwkweDI1LDB4N2QsMHhiOCwweGRlLDB4NzEsMHhjNSwweDA2LDB4MGMsMHhi NCwweGUyLDB4OGYsMHgzNSwKKysJMHhkOCwweDE0LDB4MGQsMHg3ZiwweDc2LDB4NjMsMHg0ZSww eGI1LDB4ZWUsMHhlOSwweDZmLDB4MzQsCisrCTB4YzcsMHg1ZiwweDU2LDB4MTQsMHg0YSwweGU4 LDB4NzMsMHg5NSwweDViLDB4MWMsMHhiOSwweGNiCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9CisrCXsKKysJMHhlNSwweGIwLDB4MmUsMHg3ZSwweDUyLDB4MzAsMHhlMywweDYz LDB4ODIsMHhiNiwweDQ0LDB4ZDMsCisrCTB4MjUsMHgxOSwweDA1LDB4MjQsMHg5YSwweDlmLDB4 NWYsMHgyNywweDZhLDB4MjksMHhhYiwweGZhLAorKwkweDA3LDB4YTIsMHg0MiwweDBmLDB4YzUs MHhhOCwweDk0LDB4N2MsMHgxNywweDdiLDB4ODUsMHg4MywKKysJMHgwYywweDI1LDB4MGUsMHg2 MywweDBiLDB4ZTksMHgxMiwweDYwLDB4Y2QsMHhlZiwweDgwLDB4MGYKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3By X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDVlLDB4ZjIsMHgyNiwweGVmLDB4OWYsMHg1OCww eDVkLDB4ZDUsMHg0YSwweDEwLDB4ZmUsMHhhNywKKysJMHgyZCwweDVmLDB4NGEsMHg0NgorKwl9 OworKworKworKy8qIEFFUy0yNTYgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRbXSA9 CisrCXsKKysJMHhmYiwweGNmLDB4MWIsMHg2MSwweDE2LDB4ODksMHg3OCwweDIzLDB4ZjUsMHhk OCwweDk2LDB4ZTMsCisrCTB4NGUsMHg2NCwweDBiLDB4MjksMHg5YSwweDNmLDB4ZjgsMHhhNSww eGVkLDB4ZjIsMHhmZSwweGRiLAorKwkweDE2LDB4Y2EsMHg3ZiwweDEwLDB4ZmEsMHg1ZSwweDE4 LDB4NzYsMHgyYywweDYzLDB4NWUsMHg5NiwKKysJMHhjZiwweGIzLDB4ZDYsMHhmYywweGFmLDB4 OTksMHgzOSwweDI4LDB4OWMsMHg2MSwweGU4LDB4YjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX25vbmNlW10gPQor Kwl7CisrCTB4MTIsMHg5NiwweGYwLDB4NTIsMHhmMywweDhkLDB4ODEsMHhjZiwweGRlLDB4ODYs MHhmMiwweDk5LAorKwkweDQzLDB4OTYsMHhiOSwweGYwCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg2MywweDBkLDB4NzgsMHhmNSwweDkwLDB4OGUsMHgz MiwweDQ3LDB4YjAsMHg0ZCwweDM3LDB4NjAsCisrCTB4MDksMHg5NiwweGJjLDB4YmYsMHg5Nyww eDdhLDB4NjIsMHgxNCwweDQ1LDB4YmQsMHg4ZCwweGNjLAorKwkweDY5LDB4ZmIsMHgwMywweGUx LDB4ODAsMHgxYywweGM3LDB4ZTIsMHgyYSwweGY5LDB4MzcsMHgzZiwKKysJMHg2NiwweDRkLDB4 NjIsMHhkOSwweDEwLDB4ZTAsMHhhZCwweGM4LDB4OWEsMHhmMCwweGE4LDB4NmQKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDM2LDB4YzYsMHgxMywweDYwLDB4YmIs MHgxNCwweGFkLDB4MjIsMHhiMCwweDM4LDB4YWMsMHhhNiwKKysJMHgxOCwweDE2LDB4OTMsMHgy NSwweDg2LDB4YjcsMHhkYywweGRjLDB4MzYsMHg5OCwweDJiLDB4ZjksCisrCTB4NjgsMHgzMyww eGQzLDB4YzYsMHhmZiwweGNlLDB4OGQsMHgxNSwweDU5LDB4ODIsMHg3NiwweGVkLAorKwkweDZm LDB4OGQsMHg0OSwweDc0LDB4MmYsMHhkYSwweGRjLDB4MWYsMHgxNywweGQwLDB4ZGUsMHgxNwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDE2LDB4MmYsMHg4ZSww eDNmLDB4MjEsMHg3YSwweDFjLDB4MjAsMHg1NiwweGQxLDB4OTIsMHhmNiwKKysJMHhkMiwweDI1 LDB4NzUsMHgwZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 OTEsMHg3OSwweDc2LDB4ZWUsMHhlMCwweGNmLDB4OWUsMHhjMiwweGQ1LDB4ZDQsMHgyMywweDli LAorKwkweDEyLDB4OGMsMHg3ZSwweDBhLDB4YjcsMHhkMiwweDhiLDB4ZDYsMHg3YywweGEzLDB4 YzYsMHhlNSwKKysJMHgwZSwweGFhLDB4YzcsMHg2YiwweGFlLDB4MGQsMHhmYSwweDUzLDB4MDYs MHg3OSwweGExLDB4ZWQsCisrCTB4NGQsMHg2YSwweDBlLDB4ZDgsMHg5ZCwweGJlLDB4MWIsMHgz MSwweDkzLDB4N2IsMHhlYywweGZiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9CisrCXsKKysJMHhkMiwweDQ2LDB4NTAsMHgyMiwweDEwLDB4MTQsMHg2MywweGY3LDB4ZWEs MHgwZiwweGI5LDB4N2UsCisrCTB4MGQsMHhlMSwweDk0LDB4MDcsMHhhZiwweDA5LDB4NDQsMHgz MSwweGVhLDB4NjQsMHhhNCwweDE4LAorKwkweDViLDB4ZjksMHhkOCwweGMyLDB4ZmEsMHgwMyww eDQ3LDB4YzUsMHgzOSwweDQzLDB4ZDUsMHgzYiwKKysJMHg2MiwweDg2LDB4NjQsMHhlYSwweDJj LDB4NzMsMHg4YywweGFlLDB4OWQsMHg5OCwweDk4LDB4MjkKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9u YWxpbnB1dDJbXSA9CisrCXsKKysJMHg4YywweGFiLDB4MTgsMHhmOCwweGMzLDB4ZWMsMHgxOCww eDVjLDB4YjMsMHgxZSwweDlkLDB4YmUsCisrCTB4M2YsMHgwMywweGI0LDB4MDAsMHg5OCwweDlk LDB4YWUsMHhlYiwweGY0LDB4OTQsMHhmOCwweDQyLAorKwkweDhmLDB4ZTMsMHgzOSwweDA3LDB4 ZTEsMHhjOSwweGFkLDB4MGIsMHgxZiwweGVkLDB4YzAsMHhiYSwKKysJMHhmNiwweGQxLDB4ZWMs MHgyNywweDg2LDB4N2IsMHhkNiwweDU1LDB4OWIsMHg2MCwweGE1LDB4YzYKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGVmLDB4ZDIsMHhkOCwweDVjLDB4ZGMsMHg2Miww eDI1LDB4OWYsMHhhYSwweDFlLDB4MmMsMHg2NywKKysJMHhmNiwweDAyLDB4MzIsMHhlMgorKwl9 OworKworKworKy8qIFNIQS0xIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4ZDIsMHgz NiwweGE1LDB4MjcsMHgzMSwweDczLDB4ZGQsMHgxMSwweDRmLDB4OTMsMHhiZCwweGUyLAorKwkw eDMxLDB4YTUsMHg5MSwweDEzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtdID0KKysJeworKwkweGI1LDB4YjMsMHg2 MCwweGVmLDB4ZjcsMHg2MywweDMxLDB4ZjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KKysJeworKwkweGQ0LDB4YmIsMHgwMiwweDEwLDB4YjIsMHg3MSwweGRiLDB4ODEsMHhkNiww eGYwLDB4NDIsMHg2MCwKKysJMHhkYSwweGVhLDB4NzcsMHg1MgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlu cHV0W10gPQorKwl7CisrCTB4NGQsMHhkMiwweDZjLDB4ODcsMHhmYiwweDJjLDB4NGYsMHhhNiww eDhkLDB4MTYsMHg2MywweDIyLAorKwkweDZhLDB4NTEsMHhlMywweGY4CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5 aW5wdXRwcltdID0KKysJeworKwkweGM5LDB4ODMsMHg5ZSwweDE2LDB4ZjYsMHgxYywweDBmLDB4 YjIsMHhlYywweDYwLDB4MzEsMHhhOSwKKysJMHhjYiwweGE5LDB4MzYsMHg3YQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfaW50 X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGE4LDB4MTMsMHg0ZiwweGY0LDB4MzEsMHgwMiww eDQ0LDB4ZTMsMHhkMywweDNkLDB4NjEsMHg5ZSwKKysJMHhlNSwweGM2LDB4M2UsMHg4OSwweGI1 LDB4OWIsMHgwZiwweDM1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4Zjks MHhlOCwweGQyLDB4NzIsMHgxMywweDM0LDB4OTUsMHg2ZiwweDE1LDB4NDksMHg0NywweDk5LAor KwkweDE2LDB4MDMsMHgxOSwweDQ3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJ MHg0ZSwweDhjLDB4NDksMHg5YiwweDRhLDB4NWMsMHg5YiwweDljLDB4M2EsMHhlZSwweGZiLDB4 ZDIsCisrCTB4YWUsMHhjZCwweDhjLDB4YzQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3JldHVybmVkYml0c1tdID0KKysJewor KwkweDUwLDB4YjQsMHhiNCwweGNkLDB4NjgsMHg1NywweGZjLDB4MmUsMHhjMSwweDUyLDB4Y2Ms MHhmNiwKKysJMHg2OCwweGE0LDB4ODEsMHhlZCwweDdlLDB4ZTQsMHgxZCwweDg3CisrCX07Cisr CisrCisrLyogU0hBLTEgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhhOSwweDQ3LDB4 MWIsMHgyOSwweDJkLDB4MWMsMHgwNSwweGRmLDB4NzYsMHhkMCwweDYyLDB4ZjksCisrCTB4ZTIs MHg3ZiwweDRjLDB4N2IKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX25vbmNlW10gPQorKwl7CisrCTB4NTMsMHgyMywweDI0LDB4ZTMs MHhlYywweDBjLDB4NTQsMHgxNAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7Cisr CTB4N2EsMHg4NywweGExLDB4YWMsMHgxYywweGZkLDB4YWIsMHhhZSwweGY3LDB4ZDYsMHhmYiww eDc2LAorKwkweDI4LDB4ZWMsMHg2ZCwweGNhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHhmYywweDkyLDB4MzUsMHhkNiwweDdlLDB4YjcsMHgyNCwweDY1LDB4ZmQsMHgxMiwweDI3 LDB4MzUsCisrCTB4YzAsMHg3MiwweGNhLDB4MjgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHg1NywweDg4LDB4ODIsMHhlNSwweDI1LDB4YTUsMHgyYywweDRhLDB4MDYsMHgyMCww eDZjLDB4NzIsCisrCTB4NTUsMHg2MSwweGRkLDB4OTAsMHg3MSwweDlmLDB4OTUsMHhlYQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf ZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NjksMHhhNSwweDQwLDB4NjIsMHg5OCww eDQ3LDB4NTYsMHg3MywweDRhLDB4OGYsMHg2MCwweDk2LAorKwkweGQ2LDB4OTksMHgyNywweGVk CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhlNSwweDQwLDB4NGUsMHhi ZCwweDUwLDB4MDAsMHhmNSwweDE1LDB4YTYsMHhlZSwweDQ1LDB4ZGEsCisrCTB4ODQsMHgzZCww eGQ0LDB4YzAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgxMSwweDUxLDB4MTQs MHhmMCwweDA5LDB4MWIsMHg0ZSwweDU2LDB4MGQsMHhlOSwweGY2LDB4MWUsCisrCTB4NTIsMHg2 NSwweGNkLDB4OTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGExLDB4OWMsMHg5NCww eDZlLDB4MjksMHhlMSwweDMzLDB4MGQsMHgzMiwweGQ2LDB4YWEsMHhjZSwKKysJMHg3MSwweDNm LDB4NTIsMHg3MiwweDhiLDB4NDIsMHhhOCwweGQ3CisrCX07CisrCisrCisrLyogU0hBLTIyNCBQ UiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MTIsMHg2OSwweDMyLDB4NGYsMHg4Myww eGE2LDB4ZjUsMHgxNCwweGUzLDB4NDksMHgzZSwweDc1LAorKwkweDNlLDB4ZGUsMHhhZCwweGEx LDB4MjksMHhjMywweGYzLDB4MTksMHgyMCwweGI1LDB4NGMsMHhkOQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9ub25jZVtd ID0KKysJeworKwkweDZhLDB4NzgsMHhkMCwweGViLDB4YmIsMHg1YSwweGYwLDB4ZWUsMHhlOCww eGMzLDB4YmEsMHg3MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJ MHhkNSwweGI4LDB4YjYsMHhiYywweGMxLDB4NWIsMHg2MCwweDMxLDB4M2MsMHhmNSwweGU1LDB4 YzAsCisrCTB4OGUsMHg1MiwweDdhLDB4YmQsMHhlYSwweDQ3LDB4YTksMHg1ZiwweDhmLDB4Zjks MHg4YiwweGFlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDFmLDB4NTUs MHhlYywweGFlLDB4MTYsMHgxMiwweDg0LDB4YmEsMHg4NCwweDE2LDB4MTksMHg4OCwKKysJMHg4 ZSwweGI4LDB4MzMsMHgyNSwweDU0LDB4ZmYsMHhjYSwweDc5LDB4YWYsMHgwNywweDI1LDB4NTAK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHg5MiwweGEzLDB4MzIsMHhhOCww eDlhLDB4MGEsMHg1OCwweDdjLDB4MWQsMHg1YSwweDdlLDB4ZTEsCisrCTB4YjIsMHg3MywweGFi LDB4MGUsMHgxNiwweDc5LDB4MjMsMHhkMywweDI5LDB4ODksMHg4MSwweGUxCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhmMywweDM4LDB4OTEsMHg0MCwweDM3LDB4N2Es MHg1MSwweDcyLDB4NDIsMHg3NCwweDc4LDB4MGEsCisrCTB4NjksMHhmZCwweGE2LDB4NDQsMHg0 MywweDQ1LDB4NmMsMHgwYywweDVhLDB4MTksMHhmZiwweGYxLAorKwkweDU0LDB4NjAsMHhlZSww eDZhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg3NSwweGYzLDB4MDQs MHgyNSwweGRkLDB4MzYsMHhhOCwweDM3LDB4NDYsMHhhZSwweDBjLDB4NTIsCisrCTB4MDUsMHg3 OSwweDRjLDB4MjYsMHhkYiwweGU5LDB4NzEsMHgxNiwweDRjLDB4MGEsMHhmMiwweDYwCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGVhLDB4YzUsMHgwMywweDBhLDB4NGYs MHhiMCwweDM4LDB4OGQsMHgyMywweGQ0LDB4YzgsMHg3NywKKysJMHhlMiwweDZkLDB4OWMsMHgw YiwweDQ0LDB4ZjcsMHgyZCwweDViLDB4YmYsMHg1ZCwweDJhLDB4MTEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4NjAsMHg1MCwweDJiLDB4ZTcsMHg4NiwweGQ4LDB4MjYsMHg3 MywweGUzLDB4MWQsMHg5NSwweDIwLAorKwkweGIzLDB4MmMsMHgzMiwweDFjLDB4ZjUsMHhjZSww eDU3LDB4YTYsMHg2NywweDJiLDB4ZGMsMHg0ZSwKKysJMHhkZCwweDExLDB4NGMsMHhjNAorKwl9 OworKworKworKy8qIFNIQS0yMjQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGIy LDB4MWMsMHg3NywweDRkLDB4ZjYsMHhkMywweGI2LDB4NDAsMHhiNywweDMwLDB4M2UsMHgyOSwK KysJMHhiMCwweDg1LDB4MWMsMHhiZSwweDRhLDB4ZWEsMHg2YiwweDVhLDB4YjUsMHg4YSwweDk3 LDB4ZWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfbm9uY2VbXSA9CisrCXsKKysJMHg0MiwweDAyLDB4MGEsMHgxYywweDk4LDB4 OWEsMHg3NywweDllLDB4OWYsMHg4MCwweGJhLDB4ZTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQorKwl7CisrCTB4OTgsMHhiOCwweDA0LDB4NDEsMHhmYywweGMxLDB4NWQsMHhjNSww eGU5LDB4YjksMHgwOCwweGRhLAorKwkweGY5LDB4ZmEsMHgwZCwweDkwLDB4Y2UsMHhkZiwweDFk LDB4MTAsMHhhOSwweDhkLDB4NTAsMHgwYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHg5YSwweDhkLDB4MzksMHg0OSwweDQyLDB4ZDUsMHgwYiwweGFlLDB4ZTEsMHhhZiwweGI3 LDB4MDAsCisrCTB4MDIsMHhmYSwweDk2LDB4YjEsMHhhNSwweDFkLDB4MmQsMHgyNSwweDc4LDB4 ZWUsMHg4MywweDNmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNCwweGY1 LDB4NTMsMHg3OSwweDVhLDB4OTcsMHg1OCwweDA2LDB4MDgsMHhiYSwweDdiLDB4ZmEsCisrCTB4 ZjAsMHg4MywweDA1LDB4OGMsMHgyMiwweGMwLDB4YzksMHhkYiwweDE1LDB4ZTcsMHhkZSwweDIw LAorKwkweDU1LDB4MjIsMHg5YSwweGFkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJ eworKwkweDY3LDB4MDksMHg0OCwweGFhLDB4MDcsMHgxNiwweDk5LDB4ODksMHg3ZiwweDZkLDB4 YTAsMHhlNSwKKysJMHg4ZiwweGRmLDB4YmMsMHhkYiwweGZlLDB4ZTUsMHg2YywweDdhLDB4OTUs MHg0YSwweDY2LDB4MTcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 MGYsMHg0YiwweDFjLDB4NmYsMHhiNywweGUzLDB4NDcsMHhlNSwweDVkLDB4N2QsMHgzOCwweGQ2 LAorKwkweDI4LDB4OWIsMHhlYiwweDU1LDB4NjMsMHgwOSwweDNlLDB4N2MsMHg1NiwweGVhLDB4 ZjgsMHgxOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MmQsMHgyNiwweDdj LDB4MzcsMHhlNCwweDdhLDB4MjgsMHg1ZSwweDVhLDB4M2MsMHhhZiwweDNkLAorKwkweDVhLDB4 OGUsMHg1NSwweGEyLDB4MWEsMHg2ZSwweGMwLDB4ZTUsMHhmNiwweDIxLDB4ZDMsMHhmNgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0ZCwweDgzLDB4MzUsMHhkZiwweDY3LDB4YTks MHhmYywweDE3LDB4ZGEsMHg3MCwweGNjLDB4OGIsCisrCTB4N2YsMHg3NywweGFlLDB4YTIsMHg1 ZiwweGI5LDB4N2UsMHg3NCwweDRjLDB4MjYsMHhjMSwweDdhLAorKwkweDNiLDB4YTcsMHg1Yyww eDkzCisrCX07CisrCisrCisrLyogU0hBLTI1NiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQorKwl7 CisrCTB4Y2UsMHg0OSwweDAwLDB4N2EsMHg1NiwweGUzLDB4NjcsMHg4ZiwweGUxLDB4YjYsMHhh NywweGQ0LAorKwkweDRmLDB4MDgsMHg3YSwweDFiLDB4MDEsMHhmNCwweGZhLDB4NmIsMHhlZiww eGI3LDB4ZTUsMHhlYiwKKysJMHgwNywweDNkLDB4MTEsMHgwZCwweGM4LDB4ZWEsMHgyYiwweGZl CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X3ByX25vbmNlW10gPQorKwl7CisrCTB4NzMsMHg0MSwweGM4LDB4OTIsMHg5NCwweGUy LDB4YzUsMHg1ZiwweDkzLDB4ZmQsMHgzOSwweDVkLAorKwkweDJiLDB4OTEsMHg0ZCwweDM4Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDUwLDB4NmQsMHgwMSww eDAxLDB4MDcsMHg1YSwweDgwLDB4MzUsMHg3YSwweDU2LDB4MWEsMHg1NiwKKysJMHgyZiwweDlh LDB4MGIsMHgzNSwweGIyLDB4YjEsMHhjOSwweGU1LDB4Y2EsMHg2OSwweDYxLDB4NDgsCisrCTB4 ZmYsMHhmYiwweDBmLDB4ZDksMHg0YiwweDc5LDB4MWQsMHhiYQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFs aW5wdXRbXSA9CisrCXsKKysJMHgyMCwweGI4LDB4ZGYsMHg0NCwweDc3LDB4NWEsMHhiOCwweGQz LDB4YmYsMHhmNiwweGNmLDB4YWMsCisrCTB4NWUsMHhhNiwweDk2LDB4NjIsMHg3MywweDQ0LDB4 NDAsMHg0YSwweDMwLDB4ZmIsMHgzOCwweGE1LAorKwkweDdiLDB4MGQsMHhlNCwweDBkLDB4YzYs MHhlNCwweDlhLDB4MWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHgwNCww eGM0LDB4NjUsMHhmNCwweGQzLDB4YmYsMHg4MywweDRiLDB4YWIsMHhjOCwweDQxLDB4YTgsCisr CTB4YzIsMHhlMCwweDQ0LDB4NjMsMHg3NywweDRjLDB4NmYsMHg2YywweDQ5LDB4NDYsMHhmZiww eDk0LAorKwkweDE3LDB4ZWEsMHhlNiwweDFhLDB4OWQsMHg1ZSwweDY2LDB4NzgKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJf aW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDA3LDB4NGQsMHhhYywweDliLDB4ODYsMHhj YSwweDRhLDB4YWEsMHg2ZSwweDdhLDB4MDMsMHhhMiwKKysJMHg1ZCwweDEwLDB4ZWEsMHgwYiww eGY5LDB4ODMsMHhjYywweGQxLDB4ZmMsMHhlMiwweDA3LDB4YzcsCisrCTB4MDYsMHgzNCwweDYw LDB4NmYsMHg4MywweDk0LDB4OTksMHg3NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4ODksMHg0ZSwweDQ1LDB4OGMsMHgxMSwweGY5LDB4YmMsMHg1YiwweGFjLDB4NzQs MHg4YiwweDRiLAorKwkweDVmLDB4ZjcsMHgxOSwweGYzLDB4ZjUsMHgyNCwweDU0LDB4MTQsMHhk MSwweDE1LDB4YjEsMHg0MywKKysJMHgxMiwweGE0LDB4NWYsMHhkNCwweGVjLDB4ZmMsMHhjZCww eDA5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDBlLDB4ZWIsMHgxZiww eGQ3LDB4ZmMsMHhkMSwweDlkLDB4ZDQsMHgwNSwweDM2LDB4OGIsMHhiMiwKKysJMHhmYiwweGU0 LDB4ZjQsMHg1MSwweDBjLDB4ODcsMHg5YiwweDAyLDB4NDQsMHhkNSwweDkyLDB4NGQsCisrCTB4 NDQsMHhmZSwweDFhLDB4MDMsMHg0MywweDU2LDB4YmQsMHg4NgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHgwMiwweGFhLDB4YjYsMHgxZCwweDdlLDB4MmEsMHg0MCwweDAzLDB4 NjksMHgyZCwweDQ5LDB4YTMsCisrCTB4NDEsMHhlNywweDQ0LDB4MGIsMHhhZiwweDdiLDB4ODUs MHhlNCwweDVmLDB4NTMsMHgzYiwweDY0LAorKwkweGJjLDB4ODksMHhjOCwweDgyLDB4ZDQsMHg3 OCwweDM3LDB4YTIKKysJfTsKKysKKysKKysvKiBTSEEtMjU2IE5vIFBSICAqLworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHg1YiwweDFiLDB4ZWMsMHg0ZCwweGE5LDB4MzgsMHg3NCwweDVhLDB4MzQs MHgwYiwweDdiLDB4YzUsCisrCTB4ZTUsMHhkNywweDY2LDB4N2MsMHhiYywweDgyLDB4YjksMHgw ZSwweDJkLDB4MWYsMHg5MiwweGQ3LAorKwkweGMxLDB4YmMsMHg2NywweDY5LDB4ZWMsMHg2Yiww eDAzLDB4M2MKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9CisrCXsKKysJMHhhNCwweDBjLDB4ZDgsMHg5YywweDYx LDB4ZDgsMHhjMywweDU0LDB4ZmUsMHg1MywweGM5LDB4ZTUsCisrCTB4NWQsMHg2ZiwweDZkLDB4 MzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MjIsMHg1ZSwweDYy LDB4OTMsMHg0MiwweDgzLDB4NzgsMHgyNCwweGQ4LDB4NDAsMHg4YywweGRlLAorKwkweDZmLDB4 ZjksMHhhNCwweDdhLDB4YzUsMHhhNywweDNiLDB4ODgsMHhhMywweGVlLDB4NDIsMHgyMCwKKysJ MHhmZCwweDYxLDB4NTYsMHhjNiwweDRjLDB4MTMsMHg0MSwweDljCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxp bnB1dFtdID0KKysJeworKwkweGJmLDB4NzQsMHg1YiwweGY2LDB4YzUsMHg2NCwweDVlLDB4OTks MHgzNCwweDhmLDB4YmMsMHhhNCwKKysJMHhlMiwweGJkLDB4ZDgsMHg4NSwweDI2LDB4MzcsMHhl YSwweGJhLDB4NGYsMHhmMiwweDlhLDB4OWEsCisrCTB4NjYsMHhmYywweGRmLDB4NjMsMHgyNiww eDI2LDB4MTksMHg4NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YjMsMHhj NiwweDA3LDB4MDcsMHhkNiwweDc1LDB4ZjYsMHgyYiwweGQ2LDB4MjEsMHg5NiwweGYxLAorKwkw eGFlLDB4ZGIsMHgyYiwweGFjLDB4MjUsMHgyYSwweGFlLDB4YWUsMHg0MSwweDcyLDB4MDMsMHg1 ZSwKKysJMHhiZiwweGQzLDB4NjQsMHhiYywweDU5LDB4ZjksMHhjMCwweDc2CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJv cHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGJmLDB4MjAsMHgzMywweDU2LDB4MjksMHhhOCww eDM3LDB4MDQsMHgxZiwweDc4LDB4MzQsMHgzZCwKKysJMHg4MSwweDJhLDB4YzksMHg4NiwweGM2 LDB4N2EsMHgyZiwweDg4LDB4NWUsMHhkNSwweGJlLDB4MzQsCisrCTB4NDYsMHgyMCwweGE0LDB4 MzUsMHhlYiwweGM3LDB4ZTIsMHg5ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Cisr CXsKKysJMHg5YiwweGFlLDB4MmQsMHgyZCwweDYxLDB4YTQsMHg4OSwweGViLDB4NDMsMHg0Niww eGE3LDB4ZGEsCisrCTB4ZWYsMHg0MCwweGNhLDB4NGEsMHg5OSwweDExLDB4NDEsMHhkYywweDVj LDB4OTQsMHhlOSwweGFjLAorKwkweGQ0LDB4ZDAsMHhlNiwweGJkLDB4ZmIsMHgwMywweDljLDB4 YTgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDIzLDB4YWEsMHgwYywweGJk LDB4MjgsMHgzMywweGUyLDB4NTEsMHhmYywweDcxLDB4ZDIsMHgxNSwKKysJMHgxZiwweDc2LDB4 ZmQsMHgwZCwweGUwLDB4YjcsMHhiNSwweDg0LDB4NzUsMHg1YiwweGJlLDB4ZjMsCisrCTB4NWMs MHhjYSwweGM1LDB4MzAsMHhmMiwweDc1LDB4MWYsMHhkYQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHg5MCwweDNjLDB4YzEsMHgxMCwweDhjLDB4MTIsMHgwMSwweGM2LDB4YTYsMHgz YSwweDBmLDB4NGQsCisrCTB4YjYsMHgzYSwweDRmLDB4NDEsMHg5YywweDYxLDB4NzUsMHg4NCww eGU5LDB4NzQsMHg3NSwweGZkLAorKwkweGZlLDB4ZjIsMHgxZiwweDQzLDB4ZDgsMHg1ZSwweDI0 LDB4YTMKKysJfTsKKysKKysKKysvKiBTSEEtMzg0IFBSICAqLworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9Cisr CXsKKysJMHg3MSwweDlkLDB4YjIsMHg1YSwweDcxLDB4NmQsMHgwNCwweGU5LDB4MWUsMHhjNyww eDkyLDB4MjQsCisrCTB4NmUsMHgxMiwweDMzLDB4YTksMHg1MiwweDY0LDB4MzEsMHhlZiwweDcx LDB4ZWIsMHgyMiwweDU1LAorKwkweDI4LDB4OTcsMHgwNiwweDZhLDB4YzAsMHgwYywweGEwLDB4 N2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhmNSwweDBkLDB4ZmEsMHhiMCwweGVjLDB4 NmEsMHg3YywweGQ2LDB4YmQsMHg5YiwweDA1LDB4ZmQsCisrCTB4MzgsMHgzZSwweDJlLDB4NTYK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NzQsMHhhYywweDdl LDB4NmQsMHhiMSwweGE0LDB4ZTcsMHgyMSwweGQxLDB4MWUsMHg2ZSwweDk2LAorKwkweDZkLDB4 NGQsMHg1MywweDQ2LDB4ODIsMHg5NiwweDZlLDB4Y2YsMHhhYSwweDgxLDB4OGQsMHg3ZCwKKysJ MHg5ZSwweGUxLDB4MGYsMHgxNSwweGVhLDB4NDEsMHhiZiwweGUzCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9u YWxpbnB1dFtdID0KKysJeworKwkweGRhLDB4OTUsMHhkNCwweGQwLDB4YjgsMHgxMSwweGQzLDB4 NDksMHgyNywweDVkLDB4YTksMHgzOSwKKysJMHg2OCwweGYzLDB4YTgsMHhlOSwweDVkLDB4MTks MHg4YSwweDJiLDB4NjYsMHhlOCwweDY5LDB4MDYsCisrCTB4N2MsMHg5ZSwweDAzLDB4YTEsMHg4 YiwweDI2LDB4MmQsMHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDQ5 LDB4ZGYsMHg0NCwweDAwLDB4ZTQsMHgxYywweDc1LDB4MGIsMHgyNiwweDVhLDB4NTksMHg2NCwK KysJMHgxZiwweDRlLDB4YjEsMHhiMiwweDEzLDB4ZjEsMHgyMiwweDRlLDB4YjQsMHg2ZCwweDlh LDB4Y2MsCisrCTB4YTAsMHg0OCwweGU2LDB4Y2YsMHgxZCwweGQxLDB4OTIsMHgwZAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9w cl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YzgsMHg1MiwweGFlLDB4YmYsMHgwNCww eDNjLDB4MjcsMHhiNywweDc4LDB4MTgsMHhhYSwweDhmLAorKwkweGZmLDB4Y2YsMHhhNCwweGYx LDB4Y2MsMHhlNywweDY4LDB4ZmEsMHgyMiwweGEyLDB4MTMsMHg0NSwKKysJMHhlOCwweGRkLDB4 ODcsMHhlNiwweGYyLDB4NmUsMHhkZCwweGM3LDB4NTIsMHg5MCwweDlmLDB4N2IsCisrCTB4ZmEs MHg2MSwweDJkLDB4OWQsMHg5ZSwweGNmLDB4OTgsMHhhYywweDUyLDB4NDAsMHhjZSwweGFmCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg2MSwweDdjLDB4MDMsMHg5YSww eDNlLDB4NTAsMHg1NywweDYwLDB4YzUsMHg4MywweGM5LDB4YjIsCisrCTB4ZDEsMHg4NywweDg1 LDB4NjYsMHg5MiwweDVkLDB4ODQsMHgwZSwweDUzLDB4ZmIsMHg3MCwweDAzLAorKwkweDcyLDB4 ZmQsMHhiYSwweGFlLDB4OWMsMHg4ZiwweGY4LDB4MTgKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0cHIy W10gPQorKwl7CisrCTB4ZjgsMHhlYiwweDg5LDB4YjEsMHg4ZCwweDc4LDB4YmUsMHgyMSwweGUw LDB4YmIsMHg5ZCwweGI3LAorKwkweDk1LDB4MGUsMHhkOSwweDQ2LDB4MGMsMHg4YywweGUyLDB4 NjMsMHhiNywweDlkLDB4NjcsMHg5MCwKKysJMHhiZCwweGM3LDB4MGIsMHhhNSwweGNlLDB4YjIs MHg2NSwweDgxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGU2LDB4OWYsMHhm ZSwweDY4LDB4ZDYsMHhiNSwweDc5LDB4ZjEsMHgwNiwweDVmLDB4YTMsMHhiYiwKKysJMHgyMyww eDg1LDB4ZDgsMHhmMCwweDI5LDB4NWEsMHg2OCwweDllLDB4ZjUsMHhmNCwweGE2LDB4MTIsCisr CTB4ZTAsMHg5YSwweGUyLDB4YWMsMHgwMCwweDFkLDB4OTgsMHgyNiwweGZjLDB4NTMsMHg5NSww eDUzLAorKwkweGU0LDB4M2UsMHgxNywweGQ1LDB4MDgsMHgwYiwweDcwLDB4M2QsMHg2NywweDk5 LDB4YWMsMHg2NgorKwl9OworKworKworKy8qIFNIQS0zODQgTm8gUFIgICovCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1dFtd ID0KKysJeworKwkweDA3LDB4MTUsMHgyNywweDJhLDB4YWYsMHg3NCwweDI0LDB4MzcsMHhiYyww eGQ1LDB4MTQsMHg2OSwKKysJMHhjZSwweDExLDB4ZmYsMHhhMiwweDZiLDB4YjgsMHgwNSwweDY3 LDB4MzQsMHhmOCwweGJkLDB4NmQsCisrCTB4NmEsMHhjYywweGNkLDB4NjAsMHhhMywweDY4LDB4 Y2EsMHhmNAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTM4NF9ub25jZVtdID0KKysJeworKwkweDcwLDB4MTcsMHhjMiwweDViLDB4NWQs MHgyMiwweDBiLDB4MDYsMHgxNSwweDU0LDB4NzgsMHg3NywKKysJMHg0NCwweGFmLDB4MmYsMHgw OQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg4OSwweDM5LDB4Mjgs MHhiMCwweDYwLDB4ZWIsMHgzZCwweGRjLDB4NTUsMHg3NSwweDg2LDB4ZWIsCisrCTB4YWUsMHhh MiwweDhmLDB4YmMsMHgxYiwweDc1LDB4ZDQsMHhlMSwweDBmLDB4YWEsMHgzOCwweGNhLAorKwkw eDYyLDB4OGIsMHhjYiwweDJjLDB4MjYsMHhmNiwweGJjLDB4YjEKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlu cHV0W10gPQorKwl7CisrCTB4MzAsMHgyYiwweDQyLDB4MzUsMHhlZiwweGRhLDB4NDAsMHg1NSww eDI4LDB4YzYsMHg5NSwweGZiLAorKwkweDU0LDB4MDEsMHg2MiwweGQ3LDB4ODcsMHgxNCwweDQ4 LDB4NmQsMHg5MCwweDRjLDB4YTksMHgwMiwKKysJMHg1NCwweDQwLDB4MjIsMHhjOCwweDY2LDB4 YTUsMHg0OCwweDQ4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg4MiwweGM0 LDB4YTEsMHg5YywweDIxLDB4ZDIsMHhlNywweGE1LDB4YTYsMHhmNiwweDVmLDB4MDQsCisrCTB4 NWMsMHhjNywweDMxLDB4OWQsMHg4ZCwweDU5LDB4NzQsMHg1MCwweDE5LDB4ODksMHgyZiwweDYz LAorKwkweGQ1LDB4YjcsMHg3ZSwweGViLDB4MTUsMHhlMywweDcwLDB4ODMsMHhhMSwweDI0LDB4 NTksMHhmYSwKKysJMHgyYywweDU2LDB4ZjYsMHg4OCwweDNhLDB4OTIsMHg5MywweGExLDB4ZmIs MHg3OSwweGMxLDB4N2EKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4Mzks MHhhNiwweGU4LDB4NWMsMHg4MiwweDE3LDB4NzEsMHgyNiwweDU3LDB4NGYsMHg5ZiwweGMyLAor KwkweDU1LDB4ZmYsMHg1YywweDliLDB4NTMsMHgxYSwweGQxLDB4NWYsMHhiYywweDYyLDB4ZTQs MHgyNywKKysJMHgyZCwweDMyLDB4ZjAsMHhlNCwweDUyLDB4OGMsMHhjNSwweDBjCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDhkLDB4Y2IsMHg4ZCwweGNlLDB4MDgs MHhlYSwweDgwLDB4ZTgsMHg5YiwweDYxLDB4YTgsMHgwZiwKKysJMHhhZiwweDQ5LDB4MjAsMHg5 ZSwweDc0LDB4Y2IsMHg1NywweDgwLDB4NDIsMHhiMCwweDg0LDB4NWUsCisrCTB4MzAsMHgyYSww eDY3LDB4MDgsMHhmNCwweGUzLDB4NDAsMHgyMgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4N2MsMHg4ZiwweGMyLDB4YWUsMHgyMiwweDRhLDB4ZDYsMHhmNiwweDA1LDB4YTQs MHg3YSwweGVhLAorKwkweGJiLDB4MjUsMHhkMCwweGI3LDB4NWEsMHhkNiwweGNmLDB4OWQsMHhm MywweDZjLDB4ZTIsMHhiMiwKKysJMHg0ZSwweGI0LDB4YmQsMHhmNCwweGU1LDB4NDAsMHg4MCww eDk0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDllLDB4N2UsMHhmYiwweDU5LDB4 YmIsMHhhYSwweDNjLDB4ZjcsMHhlMSwweGY4LDB4NzYsMHhkZCwKKysJMHg2MywweDVmLDB4YWYs MHgyMywweGQ2LDB4NjQsMHg2MSwweGMwLDB4OWEsMHgwOSwweDQ3LDB4YzksCisrCTB4MzMsMHhk ZiwweDZkLDB4NTUsMHg5MSwweDM0LDB4NzksMHg3MCwweGM0LDB4OTksMHg2ZSwweDU0LAorKwkw eDA5LDB4NjQsMHgyMSwweDFhLDB4YmQsMHgxZSwweDgwLDB4NDAsMHgzNCwweGFkLDB4ZmEsMHhk NworKwl9OworKworKworKy8qIFNIQS01MTIgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0KKysJewor KwkweDEzLDB4ZjcsMHg2MSwweDc1LDB4NjUsMHgyOCwweGEyLDB4NTksMHgxMywweDVhLDB4NGEs MHg0ZiwKKysJMHg1NiwweDYwLDB4OGMsMHg1MywweDdkLDB4YjAsMHhiZCwweDA2LDB4NGYsMHhl ZCwweGNjLDB4ZDIsCisrCTB4YTIsMHhiNSwweGZkLDB4NWIsMHgzYSwweGFiLDB4ZWMsMHgyOAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTUxMl9wcl9ub25jZVtdID0KKysJeworKwkweGJlLDB4YTMsMHg5MSwweDkzLDB4MWQsMHhjMyww eDMxLDB4M2EsMHgyMywweDMzLDB4NTAsMHg2NywKKysJMHg4OCwweGM3LDB4YTIsMHhjNAorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgxZiwweDU5LDB4NGQsMHg3 YiwweGU2LDB4NDYsMHg5MSwweDQ4LDB4YzEsMHgyNSwweGZhLDB4ZmYsCisrCTB4ODksMHgxMiww eDc3LDB4MzUsMHhkZiwweDNlLDB4ZjQsMHg4MCwweDVmLDB4ZDksMHhiMCwweDA3LAorKwkweDIy LDB4NDEsMHhkZCwweDQ4LDB4NzgsMHg2YiwweDc3LDB4MmIKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlu cHV0W10gPQorKwl7CisrCTB4MzAsMHhmZiwweDYzLDB4NmYsMHhhYywweGQ5LDB4ODQsMHgzOSww eDZmLDB4ZTQsMHg5OSwweGNlLAorKwkweDkxLDB4N2QsMHg3ZSwweGM4LDB4NTgsMHhmMiwweDEy LDB4YzMsMHhiNiwweGFkLDB4ZGEsMHgyMiwKKysJMHgwNCwweGEwLDB4ZDIsMHgyMSwweGZlLDB4 ZjIsMHg5NSwweDFkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4NjQsMHg1 NCwweDEzLDB4ZWMsMHg0ZiwweDc3LDB4ZGEsMHhiMiwweDkyLDB4MmUsMHg1MiwweDgwLAorKwkw eDExLDB4MTAsMHhjMiwweGY4LDB4ZTYsMHhhNywweGNkLDB4NGIsMHhmYywweDMyLDB4MmUsMHg5 ZSwKKysJMHhlYiwweGJiLDB4YjEsMHhiZiwweDE1LDB4NWMsMHg3MywweDA4CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlZiwweDFlLDB4ZGMsMHgwYSwweGE0LDB4MzYs MHg5MSwweDljLDB4M2QsMHgyNywweDk3LDB4NTAsCisrCTB4OGQsMHgzNiwweDI5LDB4OGQsMHhj ZSwweDZhLDB4MGMsMHhmNywweDIxLDB4YzAsMHg5MSwweGFlLAorKwkweDBjLDB4OTYsMHg3Miww eGJkLDB4NTIsMHg4MSwweDU4LDB4ZmMsMHg2ZCwweGU1LDB4ZjcsMHhhNSwKKysJMHhmZCwweDVk LDB4YTcsMHg1OCwweDY4LDB4YzgsMHg5OSwweDU4LDB4OGUsMHhjOCwweGNlLDB4OTUsCisrCTB4 MDEsMHg3ZCwweGZmLDB4YTQsMHhjOCwweGY3LDB4NjMsMHhmZSwweDVmLDB4NjksMHg4MywweDUz LAorKwkweGUyLDB4YzYsMHg4YiwweGMzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Cisr CXsKKysJMHhlNiwweDliLDB4YzQsMHg4OCwweDM0LDB4Y2EsMHhlYSwweDI5LDB4MmYsMHg5OCww eDA1LDB4YTQsCisrCTB4ZDMsMHhjMCwweDdiLDB4MTEsMHhlOCwweGJiLDB4NzUsMHhmMiwweGJk LDB4MjksMHhiNywweDQwLAorKwkweDI1LDB4N2YsMHhjMSwweGI3LDB4YjEsMHhmMSwweDI1LDB4 NjEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4MjMsMHg2ZCwweGZmLDB4 ZGUsMHhmYiwweGQxLDB4YmEsMHgzMywweDE4LDB4ZTYsMHhiZSwweGI1LAorKwkweDQ4LDB4Nzcs MHg2ZCwweDdmLDB4YTcsMHhlMSwweDRkLDB4NDgsMHgxZSwweDNjLDB4YTcsMHgzNCwKKysJMHgx YSwweGM4LDB4NjAsMHhkYiwweDhmLDB4OTksMHgxNSwweDk5CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3JldHVybmVkYml0 c1tdID0KKysJeworKwkweDcwLDB4MjcsMHgzMSwweGRiLDB4OTIsMHg3MCwweDIxLDB4ZmUsMHgx NiwweGI2LDB4YzgsMHg1MSwKKysJMHgzNCwweDg3LDB4NjUsMHhkMCwweDRlLDB4ZmQsMHhmZSww eDY4LDB4ZWMsMHhhYywweGRjLDB4OTMsCisrCTB4NDEsMHgzOCwweDkyLDB4OTAsMHhiNCwweDk0 LDB4ZjksMHgwZCwweGE0LDB4ZjcsMHg0ZSwweDgwLAorKwkweDkyLDB4NjcsMHg0OCwweDQwLDB4 YTcsMHgwOCwweGM3LDB4YmMsMHg2NiwweDAwLDB4ZmQsMHhmNywKKysJMHg0YywweDhiLDB4MTcs MHg2ZSwweGQxLDB4OGYsMHg5YiwweGYzLDB4NmYsMHhmNiwweDM0LDB4ZGQsCisrCTB4NjcsMHhm NywweDY4LDB4ZGQKKysJfTsKKysKKysKKysvKiBTSEEtNTEyIE5vIFBSICAqLworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHhiNiwweDBiLDB4YjcsMHhiYywweDg0LDB4NTYsMHhmNiwweDEyLDB4YWYs MHg0NSwweDY3LDB4MTcsCisrCTB4N2MsMHhkMSwweGIyLDB4NzgsMHgyYiwweGEwLDB4ZjIsMHhi ZSwweGI2LDB4NmQsMHg4YiwweDU2LAorKwkweGM2LDB4YmMsMHg0ZCwweGUxLDB4ZjcsMHhiZSww eGNlLDB4YmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGE1MTJfbm9uY2VbXSA9CisrCXsKKysJMHg5ZCwweGVkLDB4YzAsMHhlNSwweDVh LDB4OTgsMHg2YSwweGNiLDB4NTEsMHg3ZCwweDc2LDB4MzEsCisrCTB4NWEsMHg2NCwweGYwLDB4 ZjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4YzIsMHg2ZCwweGEz LDB4YzMsMHgwNiwweDc0LDB4ZTUsMHgwMSwweDVjLDB4MTAsMHgxNywweGM3LAorKwkweGFmLDB4 ODMsMHg5ZCwweDU5LDB4OGQsMHgyZCwweDI5LDB4MzgsMHhjNSwweDU5LDB4NzAsMHg4YiwKKysJ MHg0NiwweDQ4LDB4MmQsMHhjZiwweDM2LDB4N2QsMHg1OSwweGMwCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxp bnB1dFtdID0KKysJeworKwkweGVjLDB4OGMsMHhkNCwweGY3LDB4NjEsMHg2ZSwweDBkLDB4OTUs MHg3OSwweGI3LDB4MjgsMHhhZCwKKysJMHg1ZiwweDY5LDB4NzQsMHg1ZiwweDJkLDB4MzYsMHgw NiwweDhhLDB4NmIsMHhhYywweDU0LDB4OTcsCisrCTB4YzQsMHhhMSwweDEyLDB4ODUsMHgwYSww eGRmLDB4NGIsMHgzNAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ODQsMHgy ZiwweDFmLDB4NjgsMHg2YSwweGEzLDB4YWQsMHgxZSwweGZiLDB4ZjQsMHgxNSwweGJkLAorKwkw eGRlLDB4MzgsMHhkNCwweDMwLDB4ODAsMHg1MSwweGU5LDB4ZDMsMHhjNywweDIwLDB4ODgsMHhl OSwKKysJMHhmNSwweGNjLDB4ZGYsMHg1NywweDVjLDB4NDcsMHgyZiwweDU3LDB4M2MsMHg1Ziww eDEzLDB4NTYsCisrCTB4Y2MsMHhjNSwweDRmLDB4ODQsMHhmOCwweDEwLDB4NDEsMHhkNSwweDdl LDB4NTgsMHg2ZSwweDE5LAorKwkweDE5LDB4OWUsMHhhZiwweGMyLDB4MjIsMHg1OCwweDQxLDB4 NTAsMHg3OSwweGMyLDB4ZDgsMHgwNCwKKysJMHgyOCwweGQ0LDB4MzksMHg5YQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRy b3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhmYSwweDdmLDB4NDYsMHg1MSwweDgzLDB4NjIs MHg5OCwweDE2LDB4OWEsMHgxOSwweGEyLDB4NDksCisrCTB4YTksMHhlNiwweDRhLDB4ZDgsMHg4 NSwweGU3LDB4ZDQsMHgzYiwweDJjLDB4ODIsMHhjNSwweDgyLAorKwkweGJmLDB4MTEsMHhmOSww eDllLDB4YmMsMHhkMCwweDAxLDB4ZWUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQor Kwl7CisrCTB4YjksMHgxMiwweGUwLDB4NGYsMHhmNywweGE3LDB4YzQsMHhkOCwweGQwLDB4OGUs MHg5OSwweDI5LAorKwkweDdjLDB4OWEsMHhlOSwweGNmLDB4YzQsMHg2YywweGY4LDB4YzMsMHhh NywweDQxLDB4ODMsMHhkNiwKKysJMHgyZSwweGZhLDB4YjgsMHg1ZSwweDhlLDB4NmIsMHg3OCww eDIwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhkNywweDA3LDB4NTIsMHhi OSwweDgzLDB4MmMsMHgwMywweDcxLDB4ZWUsMHhjOSwweGMwLDB4ODUsCisrCTB4ZTEsMHg1Nyww eGIyLDB4Y2QsMHgzYSwweGYwLDB4YzksMHgzNCwweDI0LDB4NDEsMHgxYywweDQyLAorKwkweDk5 LDB4YjIsMHg4NCwweGU5LDB4MTcsMHhkMiwweDc2LDB4OTIKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4MzYsMHgxNywweDVkLDB4OTgsMHgyYiwweDY1LDB4MjUsMHg4ZSwweGM4LDB4 MjksMHhkZiwweDI3LAorKwkweDA1LDB4MzYsMHgyNiwweDEyLDB4OGEsMHg2OCwweDc0LDB4Mjcs MHgzNywweGQ0LDB4N2YsMHgzMiwKKysJMHhiMSwweDEyLDB4ZDYsMHg4NSwweDgzLDB4ZWIsMHgy ZSwweGEwLDB4ZWQsMHg0YiwweGI1LDB4N2IsCisrCTB4NmYsMHgzOSwweDNjLDB4NzEsMHg3Nyww eDAyLDB4MTIsMHhjYywweDJjLDB4M2EsMHg4ZSwweDYzLAorKwkweGRmLDB4NGEsMHhiZCwweDZm LDB4NmUsMHgyZSwweGVkLDB4MGEsMHg4NSwweGE1LDB4MmYsMHhhMiwKKysJMHg2OCwweGRlLDB4 NDIsMHhiNQorKwl9OworKworKworKy8qIEhNQUMgU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1 dFtdID0KKysJeworKwkweDI2LDB4NWYsMHgzNiwweDE0LDB4ZmYsMHgzZCwweDgzLDB4ZmEsMHg3 MywweDVlLDB4NzUsMHhkYywKKysJMHgyYywweDE4LDB4MTcsMHgxYgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9ub25j ZVtdID0KKysJeworKwkweGM4LDB4ZTMsMHg1NywweGE1LDB4N2IsMHg3NCwweDg2LDB4NmUKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NmUsMHhkYiwweDBk LDB4ZmUsMHg3ZCwweGFjLDB4NzksMHhkMCwweGE1LDB4M2EsMHg0OCwweDg1LAorKwkweDgwLDB4 ZTIsMHg3ZiwweDJhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDMx LDB4Y2QsMHg1ZSwweDQzLDB4ZGMsMHhmYiwweDdhLDB4NzksMHhjYSwweDg4LDB4ZGUsMHgxZiwK KysJMHhkNywweGJiLDB4NDIsMHgwOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJ eworKwkweDdjLDB4MjMsMHg5NSwweDM4LDB4MDAsMHg5NSwweGMxLDB4NzgsMHgxZiwweDhmLDB4 ZDcsMHg2MywKKysJMHgyMywweDg3LDB4MmEsMHhlZAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4YmIsMHgzNCwweGU3LDB4OTMsMHhhMywweDAyLDB4MmMsMHg0YSww eGQwLDB4ODksMHhkYSwweDdmLAorKwkweGVkLDB4ZjQsMHg0YywweGRlLDB4MTcsMHhlYywweGU1 LDB4NmMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDQ5LDB4YmMs MHgyZCwweDJjLDB4YjcsMHgzMiwweGNiLDB4MjAsMHhkZiwweGY1LDB4NzcsMHg1OCwKKysJMHhh MCwweDRiLDB4OTMsMHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJ MHgzYywweGFhLDB4YjAsMHgyMSwweDQyLDB4YjAsMHhkZCwweDM0LDB4ZjAsMHgxNiwweDdmLDB4 MGMsCisrCTB4MGYsMHhmZiwweDJlLDB4YWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4OGUsMHhjYiwweGEzLDB4NjQsMHhiMiwweGI4LDB4MzMsMHg2YywweDY0LDB4M2Is MHg3OCwweDE2LAorKwkweDk5LDB4MzUsMHhjOCwweDMwLDB4Y2IsMHgzZSwweGEwLDB4ZDgKKysJ fTsKKysKKysKKysvKiBITUFDIFNIQS0xIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRbXSA9CisrCXsK KysJMHgzMiwweDlhLDB4MmEsMHg4NywweDdiLDB4ODksMHg3YywweGY2LDB4Y2IsMHg5NSwweGQ1 LDB4NDAsCisrCTB4MTcsMHhmZSwweDQ3LDB4NzAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfbm9uY2VbXSA9CisrCXsKKysJ MHgxNiwweGQ4LDB4ZTAsMHhjNywweDUyLDB4Y2YsMHg0YSwweDI1CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDM1LDB4MzUsMHhhOSwweGE1LDB4NDAsMHhiZSww eDliLDB4ZDEsMHg1NiwweGRkLDB4NDQsMHgwMCwKKysJMHg3MiwweGY3LDB4ZDMsMHg1ZQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgxYiwweDJjLDB4ODQsMHgyZCwweDRh LDB4ODksMHg4ZiwweDY5LDB4MTksMHhmMSwweGYzLDB4ZGIsCisrCTB4YmIsMHhlMywweGFhLDB4 ZWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGNmLDB4ZmEsMHg3ZCww eDcyLDB4MGYsMHhlNiwweGM3LDB4OTYsMHhhMCwweDY5LDB4MzEsMHgxMSwKKysJMHg5YiwweDBi LDB4MWEsMHgyMCwweDFmLDB4M2YsMHhhYSwweGQxCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0KKysJeworKwkweDkwLDB4NzUsMHgxNSwweDA0LDB4OTUsMHhmMSwweGJhLDB4ODEsMHgw YywweDM3LDB4OTQsMHg2ZiwKKysJMHg4NiwweDUyLDB4NmQsMHg5YworKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlv bmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg1YiwweDQwLDB4YmEsMHg1ZiwweDE3LDB4NzAs MHhmMCwweDRiLDB4ZGYsMHhjOSwweDk3LDB4OTIsCisrCTB4NzksMHhjNSwweDgyLDB4MjgKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTFfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDk3LDB4YzgsMHg4MCwweDkwLDB4 YjMsMHhhYSwweDZlLDB4NjAsMHhlYSwweDgzLDB4N2EsMHhlMywKKysJMHg4YSwweGNhLDB4YTQs MHg3ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg5MCwweGJkLDB4MDUsMHg1 NiwweDZkLDB4YjUsMHgyMiwweGQ1LDB4YjksMHg1YSwweDI5LDB4MmQsCisrCTB4ZTksMHgwYiww eGUxLDB4YWMsMHhkZSwweDI3LDB4MGIsMHhiMAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTIy NCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxNywweDMyLDB4MmIsMHgy ZSwweDZmLDB4MWIsMHg5YywweDZkLDB4MzEsMHhlMCwweDM0LDB4MDcsCisrCTB4Y2YsMHhlZCww eGY2LDB4YjYsMHg1YSwweDc2LDB4NGMsMHhiYywweDYyLDB4ODUsMHgwMSwweDkwCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy MjRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHgzOCwweGJmLDB4NWYsMHgyMCwweGIzLDB4NjgsMHgy ZiwweDQzLDB4NjEsMHgwNSwweDhmLDB4MjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9CisrCXsKKysJMHhjMCwweGM5LDB4NDUsMHhhYywweDhkLDB4MjcsMHg3NywweDA4 LDB4MGIsMHgxNywweDZkLDB4ZWQsCisrCTB4YzEsMHg3ZCwweGQ1LDB4MDcsMHg5ZCwweDZlLDB4 ZjgsMHgyMywweDJhLDB4MjIsMHgxMywweGJkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0 W10gPQorKwl7CisrCTB4YTQsMHgzYywweGU3LDB4M2IsMHhlYSwweDE5LDB4NDUsMHgzMiwweGMy LDB4ODMsMHg2ZCwweDIxLAorKwkweDhhLDB4YzAsMHhlZSwweDY3LDB4NDUsMHhkZSwweDEzLDB4 N2QsMHg5ZCwweDYxLDB4MDAsMHgzYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByW10gPQor Kwl7CisrCTB4MTUsMHgwNSwweDc0LDB4NGEsMHg3ZiwweDhkLDB4NWMsMHg2MCwweDE2LDB4ZTUs MHg3YiwweGFkLAorKwkweGY1LDB4NDEsMHg4ZiwweDU1LDB4NjAsMHhjNCwweDA5LDB4ZWUsMHgx ZSwweDExLDB4ODEsMHhhYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHg2ZiwweGY1LDB4OWEsMHhlMiwweDU0LDB4NTMsMHgzMCwweDNkLDB4NWEsMHgyNywweDI5 LDB4MzgsCisrCTB4MjcsMHhmMiwweDBkLDB4MDUsMHhlOSwweDI2LDB4Y2IsMHgxNiwweGMzLDB4 NTEsMHg1ZiwweDEzLAorKwkweDQxLDB4ZmUsMHg5OSwweGYyCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRp b25hbGlucHV0MltdID0KKysJeworKwkweDczLDB4ODEsMHg4OCwweDg0LDB4OGYsMHhlZCwweDZm LDB4MTAsMHg5ZiwweDkzLDB4YmYsMHgxNywKKysJMHgzNSwweDdjLDB4ZWYsMHhkNSwweDhkLDB4 MjYsMHhhNiwweDdhLDB4ZTgsMHgwOSwweDM2LDB4NGYKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9CisrCXsKKysJMHhlNiwweGNmLDB4Y2YsMHg3ZSwweDEyLDB4ZTUsMHg0MywweGQy LDB4MzgsMHhkOCwweDI0LDB4NmYsCisrCTB4NWEsMHgzNywweDY4LDB4YmYsMHg0ZiwweGEwLDB4 ZmYsMHhkNSwweDYxLDB4OGEsMHg5MywweGUwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4YWYsMHhmOSwweGQ4LDB4MTksMHg5MSwweDMwLDB4ODIsMHg2ZiwweGE5LDB4 MWUsMHg5ZCwweGQ3LAorKwkweGYzLDB4NTAsMHhlMCwweGM3LDB4ZDUsMHg2NCwweDk2LDB4N2Qs MHg0YywweDRkLDB4NzgsMHgwMywKKysJMHg2ZCwweGQ4LDB4OWUsMHg3MgorKwl9OworKworKwor Ky8qIEhNQUMgU0hBLTIyNCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgx MSwweDgyLDB4ZmQsMHhkOSwweDQyLDB4ZjQsMHhmYSwweGM4LDB4ZjIsMHg0MSwweGU2LDB4NTQs CisrCTB4MDEsMHhhZSwweDIyLDB4NmUsMHhjNiwweGFmLDB4YWYsMHhkMCwweGE2LDB4YjIsMHhl MiwweDZkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyMjRfbm9uY2VbXSA9CisrCXsKKysJMHhhOSwweDQ4LDB4ZDcsMHg5Miww eDM5LDB4N2UsMHgyYSwweGRjLDB4MzAsMHgxZiwweDBlLDB4MmIKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgxMSwweGQ1LDB4ZjQsMHhiZCwweDY3LDB4OGMs MHgzMSwweGNmLDB4YTMsMHgzZiwweDFlLDB4NmIsCisrCTB4YTgsMHgwNywweDAyLDB4MGIsMHhj OCwweDJlLDB4NmMsMHg2NCwweDQxLDB4NWIsMHhjOCwweDM3CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25h bGlucHV0W10gPQorKwl7CisrCTB4NjgsMHgxOCwweGMyLDB4MDYsMHhlYiwweDNlLDB4MDQsMHg5 NSwweDQ0LDB4NWUsMHhmYiwweGU2LAorKwkweDQxLDB4YzEsMHg1YywweGNjLDB4NDAsMHgyZiww eGI3LDB4ZDIsMHgwZiwweGYzLDB4NmIsMHhlNworKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHg3ZiwweDQ1LDB4YzcsMHg1ZCwweDMyLDB4ZTYsMHgxNywweDYwLDB4YmEs MHhkYywweGI4LDB4NDIsCisrCTB4MWIsMHg5YywweGYxLDB4ZmEsMHgzYiwweDRkLDB4MjksMHg1 NCwweGM2LDB4OTAsMHhmZiwweDVjLAorKwkweGNkLDB4ZDYsMHhhOSwweGNjCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRf ZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YzQsMHg4ZSwweDM3LDB4OTUsMHg2OSww eDUzLDB4MjgsMHhkNywweDM3LDB4YmIsMHg3MCwweDk1LAorKwkweDFjLDB4MDcsMHgxZCwweGQ5 LDB4YjcsMHhlNiwweDFiLDB4YmIsMHhmZSwweDQxLDB4ZWIsMHhjOQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDUzLDB4MTcsMHhhMSwweDZhLDB4ZmEsMHg3 NywweDQ3LDB4YjAsMHg5NSwweDU2LDB4OWEsMHgyMCwKKysJMHg1NywweGRlLDB4NWMsMHg4OSww eDlmLDB4N2YsMHhlMiwweGRlLDB4MTcsMHgzYSwweDUwLDB4MjMKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlv bmFsaW5wdXQyW10gPQorKwl7CisrCTB4M2EsMHgzMiwweGY5LDB4ODUsMHgwYywweGMxLDB4ZWQs MHg3NiwweDJkLDB4ZGYsMHg0MCwweGMzLAorKwkweDA2LDB4MjIsMHg2NiwweGQ0LDB4OWEsMHg5 YSwweGZmLDB4NWEsMHg3ZSwweDdhLDB4ZjMsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3JldHVybmVkYml0c1td ID0KKysJeworKwkweDQzLDB4YjQsMHg1NywweDVjLDB4MzgsMHgyNSwweDlkLDB4YWUsMHhlYyww eDk2LDB4ZDEsMHg4NSwKKysJMHgzYSwweDg0LDB4OGQsMHhmZSwweDY4LDB4ZDUsMHgwZSwweDVj LDB4OGYsMHg2NSwweGE1LDB4NGUsCisrCTB4NDUsMHg4NCwweGE4LDB4OTQKKysJfTsKKysKKysK KysvKiBITUFDIFNIQS0yNTYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4 NGQsMHhiMCwweDQzLDB4ZDgsMHgzNCwweDRiLDB4MTAsMHg3MCwweGIxLDB4OGIsMHhlZCwweGVh LAorKwkweDA3LDB4OTIsMHg5ZiwweDZjLDB4NzksMHgzMSwweGFmLDB4ODEsMHgyOSwweGViLDB4 NmUsMHhjYSwKKysJMHgzMiwweDQ4LDB4MjgsMHhlNywweDAyLDB4NWQsMHhhNiwweGE2CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHgzYSwweGFlLDB4MTUsMHhhOSwweDk5LDB4ZGMs MHhlNCwweDY3LDB4MzQsMHgzYiwweDcwLDB4MTUsCisrCTB4YWEsMHhkMywweDMwLDB4OWEKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgxMywweDFkLDB4 MjQsMHgwNCwweGIwLDB4MTgsMHg4MSwweDE1LDB4MjEsMHg1MSwweDJhLDB4MjQsCisrCTB4NTIs MHg2MSwweGJlLDB4NjQsMHg4MiwweDZiLDB4NTUsMHgyZiwweGUyLDB4ZjEsMHg0MCwweDdkLAor KwkweDcxLDB4ZDgsMHgwMSwweDg2LDB4MTUsMHhiNywweDhiLDB4YjUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg4ZiwweGE2LDB4NTQsMHg1ZiwweGIxLDB4ZDAs MHhkOCwweGMzLDB4ZTcsMHgwYywweDE1LDB4YTksCisrCTB4MjMsMHg2ZSwweGZlLDB4ZmIsMHg5 MywweGY3LDB4M2EsMHhiZCwweDU5LDB4MDEsMHhmYSwweDE4LAorKwkweDhlLDB4ZTksMHgxYSww eGE5LDB4NzgsMHhmYywweDc5LDB4MGIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0K KysJeworKwkweGNmLDB4MjQsMHhiOSwweGViLDB4YjMsMHhkNCwweGNkLDB4MTcsMHgzNywweDM4 LDB4NzUsMHg3OSwKKysJMHgxNSwweGNiLDB4MmQsMHg3NSwweDUxLDB4ZjEsMHhjYywweGFhLDB4 MzIsMHhhNCwweGE3LDB4MzYsCisrCTB4N2MsMHg1YywweGU0LDB4NDcsMHhmMSwweDNlLDB4MWQs MHhlNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg1MiwweDQy LDB4ZmEsMHhlYiwweDg1LDB4ZTAsMHgzMCwweDIyLDB4NzksMHgwMCwweDE2LDB4YjIsCisrCTB4 ODgsMHgyZiwweDE0LDB4NmEsMHhiNywweGZjLDB4YjcsMHg1MywweGRjLDB4NGEsMHgxMiwweGVm LAorKwkweDU0LDB4ZDYsMHgzMywweGU5LDB4MjAsMHhkNiwweGZkLDB4NTYKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ZjQsMHhmNiwweDQ5LDB4YTEsMHgyZCww eDY0LDB4MmIsMHgzMCwweDU4LDB4ZjgsMHhiZCwweGI4LAorKwkweDc1LDB4ZWIsMHhiYiwweDVl LDB4MWMsMHg5YiwweDgxLDB4NmEsMHhkYSwweDE0LDB4ODYsMHg2ZSwKKysJMHhkMCwweGRhLDB4 MTgsMHhiNywweDg4LDB4ZmIsMHg1OSwweGYzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHIy W10gPQorKwl7CisrCTB4MjEsMHhjZCwweDZlLDB4NDYsMHhhZCwweDk5LDB4MDcsMHgxNywweGI0 LDB4M2QsMHg3NiwweDBhLAorKwkweGZmLDB4NWIsMHg1MiwweDUwLDB4NzgsMHhkZiwweDFmLDB4 MjQsMHgwNiwweDBkLDB4M2YsMHg3NCwKKysJMHhhOSwweGM5LDB4MzcsMHhjZiwweGQ4LDB4MjYs MHgyNSwweDkxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTcsMHhh ZiwweDJmLDB4MjksMHhlMCwweDNhLDB4NzIsMHg5NSwweDk2LDB4MWMsMHhhOSwweGYwLAorKwkw eDRhLDB4MTcsMHg0ZCwweDY2LDB4MDYsMHgxMCwweGJmLDB4MzksMHg4OSwweDg4LDB4YjgsMHg5 MSwKKysJMHgzNywweDE4LDB4OTksMHhjZiwweDhjLDB4NTMsMHgzYiwweDdlCisrCX07CisrCisr CisrLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkw eDk2LDB4YjcsMHg1MywweDIyLDB4MWUsMHg1MiwweDJhLDB4OTYsMHhiMSwweDE1LDB4M2MsMHgz NSwKKysJMHg1YSwweDhiLDB4ZDMsMHg0YSwweGE2LDB4NmMsMHg4MywweDBhLDB4N2QsMHhhMyww eDIzLDB4M2QsCisrCTB4NDMsMHhhMSwweDA3LDB4MmMsMHgyZCwweGUzLDB4ODEsMHhjYworKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X25vbmNlW10gPQorKwl7CisrCTB4ZjEsMHhhYywweDk3LDB4Y2IsMHg1ZSwweDA2LDB4 NDgsMHhkMiwweDk0LDB4YmUsMHgxNSwweDJlLAorKwkweGM3LDB4ZmMsMHhjMiwweDAxCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4OTgsMHhjNSwweDFlLDB4 MzUsMHg1ZSwweDg5LDB4MGQsMHhjZSwweDY0LDB4NmQsMHgxOCwweGE3LAorKwkweDVhLDB4YzYs MHhmMywweGU3LDB4ZDYsMHg5ZSwweGMwLDB4ZWEsMHhiNywweDNhLDB4OGQsMHg2NSwKKysJMHhi OCwweGViLDB4MTAsMHhkNywweDU3LDB4MTgsMHhhMCwweDMyCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25h bGlucHV0W10gPQorKwl7CisrCTB4MWIsMHgxMCwweGFmLDB4YWMsMHhkMCwweDY1LDB4OTUsMHhh ZCwweDA0LDB4YWQsMHgwMywweDFjLAorKwkweGUwLDB4NDAsMHhkNiwweDNlLDB4MWMsMHg0Niww eDUzLDB4MzksMHg3YywweGUyLDB4YmMsMHhkYSwKKysJMHg4YywweGEyLDB4MzMsMHhhNywweDlh LDB4MjYsMHhkMywweDI3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eGJhLDB4NjEsMHgwZSwweDU1LDB4ZmUsMHgxMSwweDhhLDB4OWUsMHgwZiwweDgwLDB4ZGYsMHgx ZCwKKysJMHgwMywweDBhLDB4ZmUsMHgxNSwweDk0LDB4MjgsMHg0YiwweGJhLDB4ZjQsMHg5Ziww eDUxLDB4MjUsCisrCTB4ODgsMHhlNSwweDRlLDB4ZmIsMHhhZiwweGNlLDB4NjksMHg5MAorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDYyLDB4N2YsMHgxZSwweDZi LDB4ZTgsMHg4ZSwweGUxLDB4MzUsMHg3ZCwweDliLDB4NGYsMHhjNywKKysJMHhlYywweGM4LDB4 YWMsMHhlZiwweDZiLDB4MTMsMHg5ZSwweDA1LDB4NTYsMHhjMSwweDA4LDB4ZjksCisrCTB4MmYs MHgwZiwweDI3LDB4OWMsMHhkNCwweDE1LDB4ZWQsMHgyZAorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxp bnB1dHJlc2VlZFtdID0KKysJeworKwkweGM3LDB4NzYsMHg2ZSwweGE5LDB4ZDIsMHhiMiwweDc2 LDB4NDAsMHg4MiwweDI1LDB4MmMsMHhiMywKKysJMHg2ZiwweGFjLDB4ZTksMHg3NCwweGVmLDB4 OGYsMHgzYywweDhlLDB4Y2QsMHhmMSwweGJmLDB4YjMsCisrCTB4NDksMHg3NywweDM0LDB4ODgs MHg1MiwweDM2LDB4ZTYsMHgyZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsK KysJMHg4ZCwweGI4LDB4MGMsMHhkMSwweGJmLDB4NzAsMHhmNiwweDE5LDB4YzMsMHg0MSwweDgw LDB4OWYsCisrCTB4ZTEsMHhhNSwweGE0LDB4MWYsMHgyYywweDI2LDB4YjEsMHhlNSwweGQ4LDB4 ZWIsMHhiZSwweGY4LAorKwkweGRmLDB4ODgsMHg2YSwweDg5LDB4ZDYsMHgwNSwweGQ4LDB4OWQK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0MywweDEyLDB4MmEsMHgyYyww eDQwLDB4NTMsMHgyZSwweDdjLDB4NjYsMHgzNCwweGFjLDB4YzMsCisrCTB4NDMsMHhlMywweGUw LDB4NmEsMHhmYywweGZhLDB4ZWEsMHg4NywweDIxLDB4MWYsMHhlMiwweDI2LAorKwkweGM0LDB4 ZjksMHgwOSwweDlhLDB4MGQsMHg2ZSwweDdmLDB4ZTAKKysJfTsKKysKKysKKysvKiBITUFDIFNI QS0zODQgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NjksMHg4MSwweDk4 LDB4ODgsMHg0NCwweGY1LDB4ZDYsMHgyZSwweDAwLDB4MDgsMHgzYiwweGM1LAorKwkweGZiLDB4 ZDcsMHg4ZSwweDZmLDB4MjMsMHhmOCwweDZkLDB4MDksMHhkNiwweDg1LDB4NDksMHhkMSwKKysJ MHhmOCwweDZkLDB4YTQsMHg1OCwweDU0LDB4ZmQsMHg4OCwweGE5CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfbm9u Y2VbXSA9CisrCXsKKysJMHg2ZSwweDM4LDB4ODEsMHhjYSwweGI3LDB4ZTgsMHg2ZSwweDY2LDB4 NDksMHg4YSwweGIyLDB4NTksCisrCTB4ZWUsMHgxNiwweGM5LDB4ZGUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhmZSwweDRjLDB4ZDksMHhmNCwweDc4 LDB4M2IsMHgwOCwweDQxLDB4OGQsMHg4ZiwweDU1LDB4YzQsCisrCTB4NDMsMHg1NiwweGI2LDB4 MTIsMHgzNiwweDZiLDB4MzAsMHhiNywweDVlLDB4ZTEsMHhiOSwweDQ3LAorKwkweDA0LDB4YjEs MHg0ZSwweGE5LDB4MDAsMHhhMSwweDUyLDB4YTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5w dXRbXSA9CisrCXsKKysJMHg4OSwweGU5LDB4Y2MsMHg4ZiwweDI3LDB4M2MsMHgyNiwweGQxLDB4 OTUsMHhjOCwweDdkLDB4MGYsCisrCTB4NWIsMHgxYSwweGYwLDB4NzgsMHgzOSwweDU2LDB4NmYs MHhhNCwweDIzLDB4ZTcsMHhkMSwweGRhLAorKwkweDdjLDB4NjYsMHgzMywweGEwLDB4OTAsMHhj OSwweDkyLDB4ODgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweGJl LDB4M2QsMHg3YywweDBkLDB4Y2EsMHhkYSwweDdjLDB4NDksMHhiOCwweDEyLDB4MzYsMHhjMCwK KysJMHhkYiwweGFkLDB4MzUsMHhhOCwweGM3LDB4MGIsMHgyYSwweDJjLDB4NjksMHg2ZCwweDI1 LDB4NTYsCisrCTB4NjMsMHg4MiwweDExLDB4M2UsMHhhNywweDMzLDB4NzAsMHg3MgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh Mzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg4MiwweDNkLDB4ZTYsMHg1NCww eDgwLDB4NDIsMHhmOCwweGJhLDB4OTAsMHg0ZiwweDA2LDB4YTYsCisrCTB4ZDIsMHg3ZiwweGJm LDB4NzksMHg3YywweDEyLDB4N2QsMHhhNiwweGEyLDB4NjYsMHhlOCwweGE2LAorKwkweGMwLDB4 ZDYsMHg0YSwweDU1LDB4YmYsMHhkOCwweDBhLDB4YzUsMHhmOCwweDAzLDB4ODgsMHhkZCwKKysJ MHg4ZSwweDg3LDB4ZDEsMHg1YSwweDQ4LDB4MjYsMHg3MiwweDJhLDB4OGUsMHhjZiwweGVlLDB4 YmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OGYsMHhmZiww eGQ5LDB4ODQsMHhiYiwweDg1LDB4M2EsMHg2NiwweGExLDB4MjEsMHhjZSwweGIyLAorKwkweDNh LDB4M2EsMHgxNywweDIyLDB4MTksMHhhZSwweGM3LDB4YjYsMHg2MywweDgxLDB4ZDUsMHhmZiwK KysJMHgwZCwweGM4LDB4ZTEsMHhhZiwweDU3LDB4ZDIsMHhjYiwweDYwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJf ZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZDcsMHhmYiwweGM5LDB4ZTgsMHhlMiwweGYy LDB4YWEsMHg0YywweGI4LDB4NTEsMHgyZiwweGUxLAorKwkweDIyLDB4YmEsMHhmMywweGRhLDB4 MGEsMHgxOSwweDc2LDB4NzEsMHg1NywweGIyLDB4MWQsMHg5NCwKKysJMHgwOSwweDY5LDB4NmMs MHhkMywweDk3LDB4NTEsMHg4MSwweDg3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4ZTYsMHgxOSwweDI4LDB4YTgsMHgyMSwweGNlLDB4NWUsMHhkYiwweDI0LDB4Nzks MHg4YywweDc2LAorKwkweDVkLDB4NzMsMHhiMiwweGRmLDB4YWMsMHhlZiwweDg1LDB4YTcsMHgz YiwweDE5LDB4MDksMHg4YiwKKysJMHg3ZiwweDk4LDB4MjgsMHhhOSwweDkzLDB4ZDgsMHg3YSww eGFkLDB4NTUsMHg4YiwweDI0LDB4OWQsCisrCTB4ZTYsMHg5OCwweGZlLDB4NDcsMHhkNSwweDQ4 LDB4YzEsMHgyMywweGQ4LDB4MWQsMHg2MiwweDc1CisrCX07CisrCisrCisrLyogSE1BQyBTSEEt Mzg0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGMzLDB4NTYsMHgyYiww eDFkLDB4YzIsMHhiYiwweGE4LDB4ZjAsMHhhZSwweDFiLDB4MGQsMHhkMywKKysJMHg1YSwweDZj LDB4ZGEsMHg1NywweDhlLDB4YTUsMHg4YSwweDBkLDB4NmMsMHg0YiwweDE4LDB4YjEsCisrCTB4 MDQsMHgzZSwweGI0LDB4OTksMHgzNSwweGM0LDB4YzAsMHg1ZgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X25vbmNlW10g PQorKwl7CisrCTB4YzUsMHg0OSwweDFlLDB4NjYsMHgyNywweDkyLDB4YmUsMHhlYywweGI1LDB4 MWUsMHg0YiwweGIxLAorKwkweDM4LDB4ZTMsMHhlYiwweDYyCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4YmUsMHhlNywweDZiLDB4NTcsMHhkZSwweDg4LDB4 MTEsMHg5NiwweDliLDB4NmUsMHhlYSwweGU1LAorKwkweDYzLDB4ODMsMHg0YywweGI2LDB4OGQs MHg2NiwweGFhLDB4MWYsMHg4YiwweDU0LDB4ZTcsMHg2MiwKKysJMHg2ZCwweDVhLDB4ZmMsMHhi ZiwweDk3LDB4YmEsMHhjZCwweDc3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7 CisrCTB4ZTUsMHgyOCwweDVmLDB4NDMsMHhmNSwweDgzLDB4NmUsMHgwYSwweDgzLDB4NWMsMHhl MywweDgxLAorKwkweDAzLDB4ZjIsMHhmOCwweDc4LDB4MDAsMHg3YywweDk1LDB4ODcsMHgxNiww eGQ2LDB4NmMsMHg1OCwKKysJMHgzMywweDZjLDB4NTMsMHgzNSwweDBkLDB4NjYsMHhlMywweGNl CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGUyLDB4MWYsMHhmMyww eGRhLDB4MGQsMHgxOSwweDk5LDB4ODcsMHhjNCwweDkwLDB4YTIsMHgzMSwKKysJMHhjYSwweDJh LDB4ODksMHg1OCwweDQzLDB4NDQsMHhiOCwweGRlLDB4Y2YsMHhhNCwweGJlLDB4M2IsCisrCTB4 NTMsMHgyNiwweDIyLDB4MzEsMHg3NiwweDQxLDB4MjIsMHhiNSwweGE4LDB4NzAsMHgyZiwweDRi LAorKwkweDY0LDB4OTUsMHg0ZCwweDQ4LDB4OTYsMHgzNSwweGU2LDB4YmQsMHgzYywweDM0LDB4 ZGIsMHgxYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDc3LDB4 NjEsMHhiYSwweGJjLDB4ZjIsMHhjMSwweGYzLDB4NGIsMHg4NiwweDY1LDB4ZmQsMHg0OCwKKysJ MHgwZSwweDNjLDB4MDIsMHg1ZSwweGEyLDB4N2EsMHg2YiwweDdjLDB4ZWQsMHgyMSwweDVlLDB4 ZjksCisrCTB4Y2QsMHhjZCwweDc3LDB4MDcsMHgyYiwweGJlLDB4YzUsMHg1YworKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDE4LDB4MjQsMHg1ZiwweGM2LDB4 ODQsMHhkMSwweDY3LDB4YzMsMHg5YSwweDExLDB4YTUsMHg4YywKKysJMHgwNywweDM5LDB4MjEs MHg4MywweDRkLDB4MDQsMHhjNCwweDZhLDB4MjgsMHgxOSwweGNmLDB4OTIsCisrCTB4MjEsMHhk OSwweDllLDB4NDEsMHg3MiwweDZjLDB4OWUsMHg2MworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1 dDJbXSA9CisrCXsKKysJMHg5NiwweDY3LDB4NDEsMHgyOCwweDliLDB4YjcsMHg5MiwweDhkLDB4 NjQsMHgzYiwweGU0LDB4Y2YsCisrCTB4N2UsMHhhYSwweDFlLDB4YjEsMHg0YiwweDFkLDB4MDks MHg1NiwweDY3LDB4OWMsMHhjNiwweDZkLAorKwkweDNiLDB4ZTgsMHg5MSwweDlkLDB4ZTEsMHg4 YSwweGI3LDB4MzIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlMywweDU5 LDB4NjEsMHgzOCwweDkyLDB4ZWMsMHhlMiwweDNjLDB4ZmYsMHhiNywweGRiLDB4MTksCisrCTB4 MGYsMHg1YiwweDkzLDB4NjgsMHgwZCwweGE0LDB4OTQsMHg0MCwweDcyLDB4MGIsMHhlMCwweGVk LAorKwkweDRkLDB4Y2QsMHg2OCwweGEwLDB4MWUsMHhmZSwweDY3LDB4YjIsMHhmYSwweDIxLDB4 NTYsMHg3NCwKKysJMHhhNCwweGFkLDB4Y2YsMHhiNywweDYwLDB4NjYsMHgyZSwweDQwLDB4ZGUs MHg4MiwweGNhLDB4ZmIKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS01MTIgUFIgICovCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJf ZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YWEsMHg5ZSwweDQ1LDB4NjcsMHgwZSwweDAwLDB4 MmEsMHg2NywweDk4LDB4ZDYsMHhkYSwweDBiLAorKwkweDBmLDB4MTcsMHg3ZSwweGFjLDB4ZmQs MHgyNywweGM0LDB4Y2EsMHg4NCwweGRmLDB4ZGUsMHhiYSwKKysJMHg4NSwweGQ5LDB4YmUsMHg4 ZiwweGYzLDB4ZmYsMHg5MSwweDRkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg4 YywweDQ5LDB4MmYsMHg1OCwweDFlLDB4N2EsMHhkYSwweDRiLDB4N2UsMHg4YSwweDMwLDB4N2Is CisrCTB4ODYsMHhlYSwweGFmLDB4YTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9CisrCXsKKysJMHg3MSwweGUxLDB4YmIsMHhhZCwweGE3LDB4NGIsMHgyZSwweDMxLDB4 M2IsMHgwYiwweGVjLDB4MjQsCisrCTB4OTksMHgzOCwweGJjLDB4YWEsMHgwNSwweDRjLDB4NDYs MHg0NCwweGZhLDB4YWQsMHg4ZSwweDAyLAorKwkweGMxLDB4N2UsMHhhZCwweGVjLDB4NTQsMHhh NiwweGQwLDB4YWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgz ZCwweDZlLDB4YTYsMHhhOCwweDI5LDB4MmEsMHhiMiwweGY1LDB4OTgsMHg0MiwweGU0LDB4OTIs CisrCTB4NzgsMHgyMiwweDY3LDB4ZmQsMHgxYiwweDE1LDB4MWUsMHgyOSwweGFhLDB4NzEsMHgz YywweDNjLAorKwkweGU3LDB4MDUsMHgyMCwweGE5LDB4MjksMHhjNiwweDc1LDB4NzEKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweGFiLDB4YjksMHgxNiwweGQ4LDB4 NTUsMHgzNSwweDU0LDB4YjcsMHg5NywweDNmLDB4OTQsMHhiYywKKysJMHgyZiwweDdjLDB4NzAs MHhjNywweGQwLDB4ZWQsMHhiNywweDRiLDB4ZjcsMHhmNiwweDZjLDB4MDMsCisrCTB4MGMsMHhi MCwweDAzLDB4ZDgsMHhiYiwweDcxLDB4ZDksMHgxMAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2ludF9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHg4ZSwweGQzLDB4ZmQsMHg1MiwweDllLDB4ODMsMHgwOCwweDQ5 LDB4MTgsMHg2ZSwweDIzLDB4NTYsCisrCTB4NWMsMHg0NSwweDkzLDB4MzQsMHgwNSwweGUyLDB4 OTgsMHg4ZiwweDBjLDB4ZDQsMHgzMiwweDBjLAorKwkweGZkLDB4ZGEsMHg1ZiwweDkyLDB4M2Es MHg4YywweDgxLDB4YmQsMHhmNiwweDZjLDB4NTUsMHhmZCwKKysJMHhiOCwweDIwLDB4Y2UsMHg4 ZCwweDk3LDB4MjcsMHhlOCwweGU4LDB4ZTAsMHhiMywweDg1LDB4NTAsCisrCTB4YTIsMHhjMiww eGIyLDB4OTUsMHgxZCwweDQ4LDB4ZDMsMHg3YiwweDRiLDB4NzgsMHgxMywweDM1LAorKwkweDA1 LDB4MTcsMHhiZSwweDBkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJewor KwkweGMzLDB4ZmMsMHg5NSwweGFhLDB4NjksMHgwNiwweGFlLDB4NTksMHg0MSwweGNlLDB4MjYs MHgwOCwKKysJMHgyOSwweDZkLDB4NDUsMHhkYSwweGU4LDB4YjMsMHg2YywweDk1LDB4NjAsMHgw ZiwweDcwLDB4MmMsCisrCTB4MTAsMHhiYSwweDM4LDB4OGMsMHhjZiwweDI5LDB4OTksMHhhYQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDNiLDB4OWEsMHgyNSww eGNlLDB4ZDcsMHhmOSwweDVjLDB4ZDEsMHgzYSwweDNlLDB4YWEsMHg3MSwKKysJMHgxNCwweDNl LDB4MTksMHhlOCwweGNlLDB4ZTYsMHhmZSwweDUxLDB4ODQsMHhlOSwweDFiLDB4ZmUsCisrCTB4 M2YsMHhhNywweGYyLDB4ZmQsMHg3NiwweDVmLDB4NmEsMHhlNworKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3JldHVy bmVkYml0c1tdID0KKysJeworKwkweGI3LDB4ODIsMHhhOSwweDU3LDB4ODEsMHg2NywweDUzLDB4 YjUsMHhhMSwweGU5LDB4M2QsMHgzNSwKKysJMHhmOSwweGU0LDB4OTcsMHhiZSwweGE2LDB4Y2Es MHhmMSwweDAxLDB4MTMsMHgwOSwweGU3LDB4MjEsCisrCTB4YzAsMHhlZCwweDkzLDB4NWQsMHg0 YiwweGY0LDB4ZWIsMHg4ZCwweDUzLDB4MjUsMHg4YSwweGM0LAorKwkweGIxLDB4NmYsMHg2ZSww eDM3LDB4Y2QsMHgyZSwweGFjLDB4MzksMHhiMiwweGI2LDB4OTksMHhhMywKKysJMHg4MiwweDAw LDB4YjAsMHgyMSwweGYwLDB4YzcsMHgyZiwweDRjLDB4NzMsMHg5MiwweGZkLDB4MDAsCisrCTB4 YjYsMHhhZiwweGJjLDB4ZDMKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS01MTIgTm8gUFIgICov CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NmUsMHg4NSwweGU2LDB4MjUsMHg5NiwweDI5 LDB4YTcsMHg1MiwweDViLDB4NjAsMHhiYSwweGFhLAorKwkweGRlLDB4ZGIsMHgzNiwweDBhLDB4 NTEsMHg5YSwweDE1LDB4YWUsMHg2ZSwweDE4LDB4ZDMsMHhmZSwKKysJMHgzOSwweGI5LDB4NGEs MHg5NiwweGY4LDB4NzcsMHhjYiwweDk1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfbm9uY2VbXSA9CisrCXsKKysJMHhl MCwweGE2LDB4NWQsMHgwOCwweGMzLDB4N2MsMHhhZSwweDI1LDB4MmUsMHg4MCwweGQxLDB4M2Us CisrCTB4ZDksMHhhZiwweDQzLDB4M2MKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9CisrCXsKKysJMHg1MywweDk5LDB4NTIsMHg1ZiwweDExLDB4YTksMHg2NCwweDY2LDB4MjAs MHg1ZSwweDFiLDB4NWYsCisrCTB4NDIsMHhiMywweGY0LDB4ZGEsMHhlZCwweGJiLDB4NjMsMHhj MSwweDIzLDB4YWYsMHhkMCwweDAxLAorKwkweDkwLDB4M2IsMHhkMCwweDc4LDB4ZTQsMHgwYiww eGE3LDB4MjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg4NSwweDkw LDB4ODAsMHhkMywweDk4LDB4ZjEsMHg1MywweDZkLDB4NjgsMHgxNSwweDhmLDB4ZTUsCisrCTB4 NjAsMHgzZiwweDE3LDB4MjksMHg1NSwweDhkLDB4MzMsMHhiMSwweDQ1LDB4NjQsMHg2NCwweDhk LAorKwkweDUwLDB4MjEsMHg4OSwweGFlLDB4ZjYsMHhmZCwweDMyLDB4NzMKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9p bnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MjgsMHg1NiwweDMwLDB4NmYsMHhmNCwweGEx LDB4NDgsMHhlMCwweGM5LDB4ZjUsMHg3NSwweDkwLAorKwkweGNjLDB4ZmIsMHhkZiwweGRmLDB4 NzEsMHgzZCwweDBhLDB4OWEsMHgwMywweDY1LDB4M2IsMHgxOCwKKysJMHg2MSwweGUzLDB4ZDEs MHhkYSwweGNjLDB4NGEsMHhmZSwweDU1LDB4MzgsMHhmOCwweDIxLDB4NmIsCisrCTB4ZmEsMHgx OCwweDAxLDB4NDIsMHgzOSwweDJmLDB4OTksMHg1MywweDM4LDB4MTUsMHg4MiwweDM0LAorKwkw eGM1LDB4OTMsMHg5MiwweGJjLDB4NGQsMHg3NSwweDFhLDB4NWYsMHgyMSwweDI3LDB4Y2MsMHhh MSwKKysJMHhiMSwweDU3LDB4NjksMHhlOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtd ID0KKysJeworKwkweDhjLDB4NTIsMHg3ZSwweDc3LDB4NzIsMHgzZiwweGEzLDB4MDQsMHg5Nyww eDEwLDB4OWIsMHg0MSwKKysJMHhiZCwweGU4LDB4ZmYsMHg4OSwweGVkLDB4ODAsMHhlMywweGJk LDB4YWEsMHgxMiwweDJkLDB4Y2EsCisrCTB4NzUsMHg4MiwweDM2LDB4NzcsMHg4OCwweGNkLDB4 YTYsMHg3MworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDdl LDB4MzIsMHhlMywweDY5LDB4NjksMHgwNywweDM0LDB4YTIsMHgxNiwweGEyLDB4NWQsMHgxYSwK KysJMHgxMCwweDkxLDB4ZDMsMHhlMiwweDIxLDB4YTIsMHhhMywweGRkLDB4Y2QsMHgwYywweDA5 LDB4ODYsCisrCTB4MTEsMHhlMSwweDUwLDB4ZmYsMHg1YywweGI3LDB4ZWIsMHg1YworKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh NTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg3ZiwweDc4LDB4NjYsMHhkOCwweGZi LDB4NjcsMHhjZiwweDhkLDB4OGMsMHgwOCwweDMwLDB4YTUsCisrCTB4ZjgsMHg3ZCwweGNmLDB4 NDQsMHg1OSwweGNlLDB4ZjgsMHhkZiwweDU4LDB4ZDMsMHg2MCwweGNiLAorKwkweGE4LDB4NjAs MHhiOSwweDA3LDB4YzQsMHhiMSwweDk1LDB4NDgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHhkZiwweGE3LDB4MzYsMHhkNCwweGRjLDB4NWQsMHg0ZCwweDMxLDB4YWQsMHg2 OSwweDQ2LDB4OWYsCisrCTB4ZjEsMHg3YywweGQ3LDB4M2IsMHg0ZiwweDU1LDB4ZjIsMHhkNyww eGI5LDB4OWQsMHhhZCwweDdhLAorKwkweDc5LDB4MDgsMHg1OSwweGE1LDB4ZGMsMHg3NCwweGY1 LDB4OWIsMHg3MywweGQyLDB4MTMsMHgyNSwKKysJMHgwYiwweDgxLDB4MDgsMHgwOCwweDI1LDB4 ZmIsMHgzOSwweGYyLDB4ZjAsMHhhMywweGE0LDB4OGQsCisrCTB4ZWYsMHgwNSwweDllLDB4Yjgs MHhjNywweDUyLDB4ZTQsMHgwZSwweDQyLDB4YWEsMHg3YywweDc5LAorKwkweGMyLDB4ZDYsMHhm ZCwweGE1CisrCX07CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBz X2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kc2Ff c2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0 ZXN0LmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5OTMwNjQyMyArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxNC0xMC0xNiAxMzox OTozNS4wOTkzMDY0MjMgKzAyMDAKK0BAIC0wLDAgKzEsMTkzIEBACisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNh X3Rlc3RfMjA0OF9wW10gPSB7CisrCTB4YTgsMHg1MywweDc4LDB4ZDgsMHhmZCwweDNmLDB4OGQs MHg3MiwweGVjLDB4NzQsMHgxOCwweDA4LAorKwkweDBkLDB4YTIsMHgxMywweDE3LDB4ZTQsMHgz ZSwweGM0LDB4YjYsMHgyYiwweGE4LDB4YzgsMHg2MiwKKysJMHgzYiwweDdlLDB4NGQsMHgwNCww eDQ0LDB4MWQsMHhkMSwweGEwLDB4NjUsMHg4NiwweDYyLDB4NTksCisrCTB4NjQsMHg5MywweGNh LDB4OGUsMHg5ZSwweDhmLDB4YmIsMHg3ZSwweDM0LDB4YWEsMHhkZCwweGI2LAorKwkweDJlLDB4 NWQsMHg2NywweGI2LDB4ZDAsMHg5YSwweDZlLDB4NjEsMHhiNywweDY5LDB4ZTcsMHhjMywKKysJ MHg1MiwweGFhLDB4MmIsMHgxMCwweGUyLDB4MGMsMHhhMCwweDYzLDB4NjksMHg2MywweGI1LDB4 NTIsCisrCTB4M2UsMHg4NiwweDQ3LDB4MGQsMHhlYywweGJiLDB4ZWQsMHhhMCwweDI3LDB4ZTcs MHg5NywweGU3LAorKwkweGI2LDB4NzYsMHgzNSwweGQ0LDB4ZDQsMHg5YywweDMwLDB4NzAsMHgw ZSwweDc0LDB4YWYsMHg4YSwKKysJMHgwZiwweGYxLDB4NTYsMHhhOCwweDAxLDB4YWYsMHg1Nyww eGEyLDB4NmUsMHg3MCwweDc4LDB4ZjEsCisrCTB4ZDgsMHgyZiwweDc0LDB4OTAsMHg4ZSwweGNi LDB4NmQsMHgwNywweGU3LDB4MGIsMHgzNSwweDAzLAorKwkweGVlLDB4ZDksMHg0ZiwweGEzLDB4 MmMsMHhmMSwweDdhLDB4N2YsMHhjMywweGQ2LDB4Y2YsMHg0MCwKKysJMHhkYywweDdiLDB4MDAs MHg4MywweDBlLDB4NmEsMHgyNSwweDY2LDB4ZGMsMHgwNywweDNlLDB4MzQsCisrCTB4MzMsMHgx MiwweDUxLDB4N2MsMHg2YSwweGE1LDB4MTUsMHgyYiwweDRiLDB4ZmUsMHhjZCwweDJlLAorKwkw eDU1LDB4MWYsMHhlZSwweDM0LDB4NjMsMHgxOCwweGExLDB4NTMsMHg0MiwweDNjLDB4OTksMHg2 YiwKKysJMHgwZCwweDVkLDB4Y2IsMHg5MSwweDAyLDB4YWUsMHhkZCwweDM4LDB4NzksMHg4Niww eDE2LDB4ZjEsCisrCTB4ZjEsMHhlMCwweGQ2LDB4YzQsMHgwMywweDUyLDB4NWIsMHgxZiwweDli LDB4M2QsMHg0ZCwweGM3LAorKwkweDY2LDB4ZGUsMHgyZCwweGZjLDB4NGEsMHg1NiwweGQ3LDB4 YjgsMHhiYSwweDU5LDB4NjMsMHhkNiwKKysJMHgwZiwweDNlLDB4MTYsMHgzMSwweDg4LDB4NzAs MHhhZCwweDQzLDB4NjksMHg1MiwweGU1LDB4NTcsCisrCTB4NjUsMHgzNywweDRlLDB4YWIsMHg4 NSwweGU4LDB4ZWMsMHgxNywweGQ2LDB4YjksMHhhNCwweDU0LAorKwkweDdiLDB4OWIsMHg1Ziww eDI3LDB4NTIsMHhmMywweDEwLDB4NWIsMHhlOCwweDA5LDB4YjIsMHgzYSwKKysJMHgyYywweDhk LDB4NzQsMHg2OSwweGRiLDB4MDIsMHhlMiwweDRkLDB4NTksMHgyMywweDk0LDB4YTcsCisrCTB4 ZGIsMHhhMCwweDY5LDB4ZTkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRz YV90ZXN0XzIwNDhfcVtdID0geworKwkweGQyLDB4NzcsMHgwNCwweDRlLDB4NTAsMHhmNSwweGE0 LDB4ZTMsMHhmNSwweDEwLDB4YTUsMHgwYSwKKysJMHgwYiwweDg0LDB4ZmQsMHhmZiwweGJjLDB4 YTAsMHg0NywweGVkLDB4MjcsMHg2MCwweDIwLDB4NTYsCisrCTB4NzQsMHg0MSwweGEwLDB4YTUK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfZ1tdID0g eworKwkweDEzLDB4ZDcsMHg1NCwweGUyLDB4MWYsMHhkMiwweDQxLDB4NjUsMHg1ZCwweGE4LDB4 OTEsMHhjNSwKKysJMHgyMiwweGE2LDB4NWEsMHg3MiwweGE4LDB4OWIsMHhkYywweDY0LDB4ZWMs MHg5YiwweDU0LDB4YTgsCisrCTB4MjEsMHhlZCwweDRhLDB4ODksMHg4YiwweDQ5LDB4MGUsMHgw YywweDRmLDB4Y2IsMHg3MiwweDE5LAorKwkweDJhLDB4NGEsMHgyMCwweGY1LDB4NDEsMHhmMyww eGYyLDB4OTIsMHg1MywweDk5LDB4ZjAsMHhiYSwKKysJMHhlYywweGY5LDB4MjksMHhhYSwweGZi LDB4ZjcsMHg5ZCwweGZlLDB4NDMsMHgzMiwweDM5LDB4M2IsCisrCTB4MzIsMHhjZCwweDJlLDB4 MmYsMHhjZiwweDI3LDB4MmYsMHgzMiwweGE2LDB4MjcsMHg0MywweDRhLAorKwkweDBkLDB4ZjIs MHg0MiwweGI3LDB4NWIsMHg0MSwweDRkLDB4ZjMsMHg3MiwweDEyLDB4MWUsMHg1MywKKysJMHhh NSwweDUzLDB4ZjIsMHgyMiwweGY4LDB4MzYsMHhiMCwweDAwLDB4ZjAsMHgxNiwweDQ4LDB4NWIs CisrCTB4NmIsMHhkMCwweDg5LDB4ODQsMHg1MSwweDgwLDB4MWQsMHhjZCwweDhkLDB4ZTYsMHg0 YywweGQ1LAorKwkweDM2LDB4NTYsMHg5NiwweGZmLDB4YzUsMHgzMiwweGQ1LDB4MjgsMHhjNSww eDA2LDB4NjIsMHgwYSwKKysJMHg5NCwweDJhLDB4MDMsMHgwNSwweDA0LDB4NmQsMHg4ZiwweDE4 LDB4NzYsMHgzNCwweDFmLDB4MWUsCisrCTB4NTcsMHgwYiwweGMzLDB4OTcsMHg0YiwweGE2LDB4 YjksMHhhNCwweDM4LDB4ZTksMHg3MCwweDIzLAorKwkweDAyLDB4YTIsMHhlNiwweGU2LDB4N2Is MHhmZCwweDA2LDB4ZDMsMHgyYiwweGM2LDB4NzksMHg5NiwKKysJMHgyMiwweDcxLDB4ZDcsMHhi NCwweDBjLDB4ZDcsMHgyZiwweDM4LDB4NmUsMHg2NCwweGUwLDB4ZDcsCisrCTB4ZWYsMHg4Niww eGNhLDB4OGMsMHhhNSwweGQxLDB4NDIsMHgyOCwweGRjLDB4MmEsMHg0ZiwweDE2LAorKwkweGUz LDB4MTgsMHg5OCwweDg2LDB4YjUsMHg5OSwweDA2LDB4NzQsMHhmNCwweDIwLDB4MGYsMHgzYSwK KysJMHg0YywweGY2LDB4NWEsMHgzZiwweDBkLDB4ZGIsMHhhMSwweGZhLDB4NjcsMHgyZCwweGZm LDB4MmYsCisrCTB4NWUsMHgxNCwweDNkLDB4MTAsMHhlNCwweGU5LDB4N2EsMHhlOCwweDRmLDB4 NmQsMHhhMCwweDk1LAorKwkweDM1LDB4ZDUsMHhiOSwweGRmLDB4MjUsMHg5MSwweDgxLDB4YTcs MHg5YiwweDYzLDB4YjAsMHg2OSwKKysJMHhlOSwweDQ5LDB4OTcsMHgyYiwweDAyLDB4YmEsMHgz NiwweGIzLDB4NTgsMHg2YSwweGFiLDB4N2UsCisrCTB4NDUsMHhmMywweDIyLDB4ZjgsMHgyZSww eDRlLDB4ODUsMHhjYSwweDNhLDB4YjgsMHg1NSwweDkxLAorKwkweGIzLDB4YzIsMHhhOSwweDY2 CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3B1Yl9r ZXlbXSA9IHsKKysJMHgyNCwweDUyLDB4ZjMsMHhjYywweGJlLDB4OWUsMHhkNSwweGNhLDB4N2Qs MHhjNywweDRjLDB4NjAsCisrCTB4MmIsMHg5OSwweDIyLDB4NmUsMHg4ZiwweDJmLDB4YWIsMHgz OCwweGU3LDB4ZDcsMHhkZCwweGZiLAorKwkweDc1LDB4NTMsMHg5YiwweDE3LDB4MTUsMHg1ZSww eDlmLDB4Y2YsMHhkMSwweGFiLDB4YTUsMHg2NCwKKysJMHhlYiwweDg1LDB4MzUsMHhkOCwweDEy LDB4YzksMHhjMiwweGRjLDB4ZjksMHg3MiwweDg0LDB4NDQsCisrCTB4MWIsMHhjNCwweDgyLDB4 MjQsMHgzNiwweDI0LDB4YzcsMHhmNCwweDU3LDB4NTgsMHgwYywweDFjLAorKwkweDM4LDB4YTUs MHg3YywweDQ2LDB4YzQsMHg1NywweDM5LDB4MjQsMHg3MCwweGVkLDB4YjUsMHgyYywKKysJMHhi NSwweGE2LDB4ZTAsMHgzZiwweGU2LDB4MjgsMHg3YiwweGI2LDB4ZjQsMHg5YSwweDQyLDB4YTIs CisrCTB4MDYsMHg1YSwweDA1LDB4NGYsMHgwMywweDA4LDB4MzksMHhkZiwweDFmLDB4ZDMsMHgx NCwweDljLAorKwkweDRjLDB4YTAsMHg1MywweDFkLDB4ZDgsMHhjYSwweDhhLDB4YWEsMHg5Yyww eGM3LDB4MzMsMHg3MSwKKysJMHg5MywweDM4LDB4NzMsMHg0OCwweDMzLDB4NjEsMHgxOCwweDIy LDB4NDUsMHg0NSwweGU4LDB4OGMsCisrCTB4ODAsMHhmZiwweGQ4LDB4NzYsMHg1ZCwweDc0LDB4 MzYsMHgwMywweDMzLDB4Y2MsMHhhYiwweDk5LAorKwkweDcyLDB4NzcsMHg5YiwweDY1LDB4MjUs MHhhNiwweDViLDB4ZGQsMHgwZCwweDEwLDB4YzYsMHg3NSwKKysJMHhjMSwweDA5LDB4YmIsMHhk MywweGU1LDB4YmUsMHg0ZCwweDcyLDB4ZWYsMHg2ZSwweGJhLDB4NmUsCisrCTB4NDMsMHg4ZCww eDUyLDB4MjYsMHgyMywweDdkLDB4YjgsMHg4OCwweDM3LDB4OWMsMHg1ZiwweGNjLAorKwkweDQ3 LDB4YTMsMHg4NCwweDdmLDB4ZjYsMHgzNywweDExLDB4YmEsMHhlZCwweDZkLDB4MDMsMHhhZiwK KysJMHhlOCwweDFlLDB4NjksMHg0YSwweDQxLDB4M2IsMHg2OCwweDBiLDB4ZDMsMHg4YSwweGI0 LDB4OTAsCisrCTB4M2YsMHg4MywweDcwLDB4YTcsMHgwNywweGVmLDB4NTUsMHgxZCwweDQ5LDB4 NDEsMHgwMiwweDZkLAorKwkweDk1LDB4NzksMHhkNiwweDkxLDB4ZGUsMHg4ZSwweGRhLDB4YTEs MHg2MSwweDA1LDB4ZWIsMHg5ZCwKKysJMHhiYSwweDNjLDB4MmYsMHg0YywweDFiLDB4ZWMsMHg1 MCwweDgyLDB4NzUsMHhhYSwweDAyLDB4MDcsCisrCTB4ZTIsMHg1MSwweGI1LDB4ZWMsMHhjYiww eDI4LDB4NmEsMHg0YiwweDAxLDB4ZDQsMHg0OSwweGQzLAorKwkweDBhLDB4Y2IsMHg2NywweDM3 LDB4MTcsMHhhMCwweGQyLDB4ZmIsMHgzYiwweDUwLDB4YzgsMHg5MywKKysJMHhmNywweGRhLDB4 YjEsMHg0ZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0 OF9wcml2X2tleVtdID0geworKwkweDBjLDB4NGIsMHgzMCwweDg5LDB4ZDEsMHhiOCwweDYyLDB4 Y2IsMHgzYywweDQzLDB4NjQsMHg5MSwKKysJMHhmMCwweDkxLDB4NTQsMHg3MCwweGM1LDB4Mjcs MHg5NiwweGUzLDB4YWMsMHhiZSwweGU4LDB4MDAsCisrCTB4ZWMsMHg1NSwweGY2LDB4Y2MKKyt9 OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9kc2E7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNh KCkKKysgICAgeworKyAgICBjb3JydXB0X2RzYSA9IDE7CisrICAgIH0KKysKKytpbnQgRklQU19z ZWxmdGVzdF9kc2EoKQorKwl7CisrCURTQSAqZHNhID0gTlVMTDsKKysJRVZQX1BLRVkgKnBrID0g TlVMTDsKKysJaW50IHJldCA9IDA7CisrCisrCWRzYSA9IERTQV9uZXcoKTsKKysKKysJaWYoZHNh ID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNh LCBwLCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBxLCBk c2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBkc2FfdGVz dF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBkc2FfdGVz dF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwgZHNhX3Rl c3RfMjA0OCk7CisrCisrCWlmIChjb3JydXB0X2RzYSkKKysJCUJOX3NldF9iaXQoZHNhLT5wdWJf a2V5LCAyMDQ3KTsKKysKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdv dG8gZXJyOworKworKwlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOworKworKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwgMCwKKysJCQkJCU5VTEwsIDAsIEVWUF9z aGEyNTYoKSwgMCwKKysJCQkJCSJEU0EgU0hBMjU2IikpCisrCQlnb3RvIGVycjsKKysJcmV0ID0g MTsKKysKKysJZXJyOgorKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJZWxzZSBp ZiAoZHNhKQorKwkJRFNBX2ZyZWUoZHNhKTsKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZmlwcy9maXBzX2VuYy5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTkzMDY0MjMgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCTIwMTQtMTAtMTYg MTM6MTk6MzUuMDk5MzA2NDIzICswMjAwCitAQCAtMCwwICsxLDE5MSBAQAorKy8qIGZpcGUvZXZw L2ZpcHNfZW5jLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhp cyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3Jp dHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFz IGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBU aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0 aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0 Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgor KyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2Ft ZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmlj IFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBj b2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBp biBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICog YXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlz IGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0 dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQg d2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICog ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Cisr ICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAn Y3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxp YnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDot KS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBh IGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFw cGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERB TUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBh bnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhp cyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBi ZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UK KysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrCisrY29uc3QgRVZQX0NJUEhFUiAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCkK KysJeworKwlzd2l0Y2ggKG5pZCkKKysJCXsKKysJCWNhc2UgTklEX2Flc18xMjhfY2JjOgorKwkJ cmV0dXJuIEVWUF9hZXNfMTI4X2NiYygpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jY206Cisr CQlyZXR1cm4gRVZQX2Flc18xMjhfY2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NmYjE6 CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9j ZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9h ZXNfMTI4X2NmYjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOworKworKwkJY2FzZSBO SURfYWVzXzEyOF9jdHI6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7CisrCisrCQljYXNl IE5JRF9hZXNfMTI4X2VjYjoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9lY2IoKTsKKysKKysJCWNh c2UgTklEX2Flc18xMjhfZ2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2djbSgpOworKworKwkJ Y2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfb2ZiKCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMTI4X3h0czoKKysJCXJldHVybiBFVlBfYWVzXzEyOF94dHMoKTsK KysKKysJCWNhc2UgTklEX2Flc18xOTJfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NiYygp OworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jY206CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2Nt KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjE6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJf Y2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Fl c18xOTJfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjg6CisrCQlyZXR1cm4g RVZQX2Flc18xOTJfY2ZiOCgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jdHI6CisrCQlyZXR1 cm4gRVZQX2Flc18xOTJfY3RyKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2VjYjoKKysJCXJl dHVybiBFVlBfYWVzXzE5Ml9lY2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfZ2NtOgorKwkJ cmV0dXJuIEVWUF9hZXNfMTkyX2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9vZmIxMjg6 CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2Ni YzoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZf Y2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1 Nl9jZmIxOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEoKTsKKysKKysJCWNhc2UgTklEX2Fl c18yNTZfY2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEyOCgpOworKworKwkJY2Fz ZSBOSURfYWVzXzI1Nl9jZmI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjgoKTsKKysKKysJ CWNhc2UgTklEX2Flc18yNTZfY3RyOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2N0cigpOworKwor KwkJY2FzZSBOSURfYWVzXzI1Nl9lY2I6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfZWNiKCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMjU2X2djbToKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9nY20oKTsK KysKKysJCWNhc2UgTklEX2Flc18yNTZfb2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X29m YigpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl94dHM6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZf eHRzKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX2VjYjoKKysJCXJldHVybiBFVlBfZGVzX2Vk ZSgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfZWNiOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRl MygpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2JjOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRl M19jYmMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjE6CisrCQlyZXR1cm4gRVZQX2Rl c19lZGUzX2NmYjEoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjY0OgorKwkJcmV0dXJu IEVWUF9kZXNfZWRlM19jZmI2NCgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiODoKKysJ CXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfb2Zi NjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX29mYigpOworKworKwkJY2FzZSBOSURfZGVzX2Vk ZV9jYmM6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2JjKCk7CisrCisrCQljYXNlIE5JRF9kZXNf ZWRlX2NmYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlX2NmYjY0KCk7CisrCisrCQljYXNlIE5J RF9kZXNfZWRlX29mYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlX29mYigpOworKworKwkJZGVm YXVsdDoKKysJCXJldHVybiBOVUxMOworKworKwkJfQorKwl9CisrCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzLmgKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwkyMDE0 LTEwLTE2IDEzOjE5OjM1LjA5OTMwNjQyMyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2ZpcHMuaAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5OTMwNjQyMyArMDIwMAorQEAgLTAs MCArMSwyNzkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNs dWRlIDxzdGRhcmcuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNlcnJvciBGSVBTIGlz IGRpc2FibGVkLgorKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYg IF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrc3RydWN0IGRzYV9zdDsK KytzdHJ1Y3QgcnNhX3N0OworK3N0cnVjdCBldnBfcGtleV9zdDsKKytzdHJ1Y3QgZW52X21kX3N0 OworK3N0cnVjdCBlbnZfbWRfY3R4X3N0OworK3N0cnVjdCBldnBfY2lwaGVyX3N0OworK3N0cnVj dCBldnBfY2lwaGVyX2N0eF9zdDsKKytzdHJ1Y3QgZGhfbWV0aG9kOworK3N0cnVjdCBDTUFDX0NU WF9zdDsKKytzdHJ1Y3QgaG1hY19jdHhfc3Q7CisrCisraW50IEZJUFNfbW9kdWxlX21vZGVfc2V0 KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCk7CisraW50IEZJUFNfbW9kdWxlX21vZGUodm9p ZCk7CisrY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0 ZXN0KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKyt2b2lkIEZJUFNf Y29ycnVwdF9zaGExKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7CisraW50 IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9hZXModm9pZCk7 CisraW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9h ZXNfZ2NtKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHModm9pZCk7CisraW50IEZJ UFNfc2VsZnRlc3RfYWVzKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKKytp bnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQp OworK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRl c3RfcnNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKKyt2b2lkIEZJUFNf Y29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsK Kyt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Cisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lk KTsKKyt2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpOworK3ZvaWQgRklQU19kcmJnX3N0 aWNrKGludCBvbm9mZik7CisraW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOworK2ludCBGSVBT X3NlbGZ0ZXN0X3g5MzEodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsKKytp bnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxs KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWModm9pZCk7CisrCisrdm9pZCBGSVBTX2dl dF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7CisrCisr I2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJ TkVfXywgXAorKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9y IGlnbm9yZWQiKTsKKysKKytpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVjdCBldnBf cGtleV9zdCAqcGtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4s CisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAorKwkJ CWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAor KwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKKysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChzdHJ1 Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKKysJCQljb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9z dCAqY2lwaGVyLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICppdiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCisrCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKKysJCQlpbnQgbGVuKTsKKysKKyt2b2lk IGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7CisrCisrY29uc3Qgc3RydWN0IGVudl9tZF9z dCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7CisrCisrY29uc3Qgc3RydWN0IGV2cF9j aXBoZXJfc3QgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOworKworKworKy8qIEJFR0lO IEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0 ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKysgKiBtYWRlIGFmdGVyIHRo aXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4K KysgKi8KKyt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKKysKKysvKiBFcnJvciBj b2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLworKworKy8qIEZ1bmN0aW9uIGNvZGVzLiAq LworKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAorKyNkZWZpbmUg RklQU19GX0RIX0lOSVQJCQkJCSAxNDgKKysjZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VFRAkJCQkg MTYyCisrI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAxCisrI2RlZmlu ZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yCQkJIDEwNworKyNkZWZpbmUgRklQU19GX0RT QV9ET19TSUdOCQkJCSAxMDIKKysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMDMK KysjZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZCQkJCSAxNjMKKysjZGVmaW5lIEZJUFNf Rl9FQ0RTQV9ET19TSUdOCQkJCSAxNjQKKysjZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19WRVJJRlkJ CQkJIDE2NQorKyNkZWZpbmUgRklQU19GX0VDX0tFWV9HRU5FUkFURV9LRVkJCQkgMTY2CisrI2Rl ZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkgMTI0CisrI2RlZmluZSBGSVBTX0ZfRVZQ X0RJR0VTVElOSVRfRVgJCQkgMTI1CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJCQkJ IDEwNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBX1BSTkcJCQkgMTUxCisrI2RlZmlu ZSBGSVBTX0ZfRklQU19DSEVDS19FQwkJCQkgMTQyCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVD S19FQ19QUk5HCQkJIDE1MgorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdF UlBSSU5UCQkgMTA1CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJCQkJIDEwNgorKyNk ZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBX1BSTkcJCQkgMTUwCisrI2RlZmluZSBGSVBTX0Zf RklQU19DSVBIRVIJCQkJIDE2MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSSU5JVAkJCQkg MTQzCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJfQ1RYX0NUUkwJCQkgMTYxCisrI2RlZmlu ZSBGSVBTX0ZfRklQU19ESUdFU1RGSU5BTAkJCQkgMTU4CisrI2RlZmluZSBGSVBTX0ZfRklQU19E SUdFU1RJTklUCQkJCSAxMjgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFURQkJCSAx NTkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllURVMJCQkJIDEzMQorKyNkZWZpbmUgRklQ U19GX0ZJUFNfRFJCR19DSEVDSwkJCQkgMTQ2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NQ Uk5HX1RFU1QJCQkgMTMyCisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLCQkJ IDEzNgorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURQkJCSAxMzQKKysjZGVmaW5l IEZJUFNfRl9GSVBTX0RSQkdfSU5JVAkJCQkgMTM1CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJH X0lOU1RBTlRJQVRFCQkJIDEzOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcJCQkJIDEz OQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNFRUQJCQkJIDE0MAorKyNkZWZpbmUgRklQ U19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUCQkJIDE0MQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNB X0NIRUNLCQkvKiB1bnVzZWQgKi8JIDEwNworKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1NJR05f RElHRVNUCQkJIDE1NAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1ZFUklGWV9ESUdFU1QJCQkg MTU1CisrI2RlZmluZSBGSVBTX0ZfRklQU19HRVRfRU5UUk9QWQkJCQkgMTQ3CisrI2RlZmluZSBG SVBTX0ZfRklQU19NT0RFX1NFVAkJLyogdW51c2VkICovCSAxMDgKKysjZGVmaW5lIEZJUFNfRl9G SVBTX01PRFVMRV9NT0RFX1NFVAkJCSAxMDgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlfU0lH TkFUVVJFX1RFU1QJCQkgMTA5CisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0FERAkJCQkgMTM3 CisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMjIKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTCQkJIDE2NworKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFO RF9TRUVECQkJCSAxNjgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRAkJCSAx MjYKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTCQkJCSAxMjcKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVAkJCSAxNTYKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JT QV9WRVJJRllfRElHRVNUCQkJIDE1NworKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVT CQkJIDExMAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTQkJCSAxNDUKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19HQ00JCQkgMTI5CisrI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTCQkJIDE0NAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VM RlRFU1RfQ01BQwkJCSAxMzAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJCSAx MTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBCQkJIDEzMworKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VM RlRFU1RfSE1BQwkJCSAxMTMKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORwkvKiB1 bnVzZWQgKi8JIDExNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEJCQkgMTE0CisrI2RlZmluZSBGSVBT X0ZfRklQU19TRVRfUFJOR19LRVkJCQkgMTUzCisrI2RlZmluZSBGSVBTX0ZfSEFTSF9GSU5BTAkJ CQkgMTIzCisrI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOCQkJIDExNgorKyNkZWZp bmUgRklQU19GX1JTQV9FQVlfSU5JVAkJCQkgMTQ5CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9Q UklWQVRFX0RFQ1JZUFQJCQkgMTE3CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VO Q1JZUFQJCQkgMTE4CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJCSAx MTkKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAorKyNkZWZp bmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKKysjZGVmaW5lIEZJUFNf Rl9TU0xFQVlfUkFORF9CWVRFUwkvKiB1bnVzZWQgKi8JIDEyMgorKworKy8qIFJlYXNvbiBjb2Rl cy4gKi8KKysjZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQJ IDE1MAorKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcJCSAxMjUKKysj ZGVmaW5lIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRAkJCSAxMzQKKysjZGVmaW5lIEZJUFNf Ul9BVVRIRU5USUNBVElPTl9GQUlMVVJFCQkJIDE1MQorKyNkZWZpbmUgRklQU19SX0NBTk5PVF9S RUFEX0VYRQkJLyogdW51c2VkICovCSAxMDMKKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9F WEVfRElHRVNUCS8qIHVudXNlZCAqLwkgMTA0CisrI2RlZmluZSBGSVBTX1JfQ09OVFJBRElDVElO R19FVklERU5DRQkJCSAxMTQKKysjZGVmaW5lIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRAkJ CSAxNTIKKysjZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNLCQkJCSAxMDMKKysjZGVmaW5lIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQJCQkgMTA0CisrI2RlZmluZSBGSVBTX1JfRU5UUk9Q WV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQJCSAxMDUKKysjZGVmaW5lIEZJUFNfUl9FTlRST1BZ X1NPVVJDRV9TVFVDSwkJCSAxNDIKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJTkdf RFJCRwkJCSAxMTUKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkg MTI3CisrI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUCSAx MjQKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkJCQkgMTIyCisrI2Rl ZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRQkJCSAxNDAKKysjZGVmaW5lIEZJUFNf Ul9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIICAgLyogdW51c2VkICovCSAxMDUKKysjZGVmaW5l IEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAorKyNkZWZpbmUgRklQU19S X0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCisrI2RlZmlu ZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAxMTIK KysjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCisrI2RlZmluZSBG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2CisrI2RlZmluZSBGSVBTX1JfRlVOQ1RJ T05fRVJST1IJCQkJIDExNgorKyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SCQkJCSAxMzcK KysjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVECQkgMTE4CisrI2RlZmlu ZSBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IJCQkgMTE5CisrI2RlZmluZSBGSVBTX1JfSU5TVUZG SUNJRU5UX1NFQ1VSSVRZX1NUUkVOR1RICQkgMTIwCisrI2RlZmluZSBGSVBTX1JfSU5URVJOQUxf RVJST1IJCQkJIDEyMQorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMDkK KysjZGVmaW5lIEZJUFNfUl9JTlZBTElEX1BBUkFNRVRFUlMJCQkgMTQ0CisrI2RlZmluZSBGSVBT X1JfSU5fRVJST1JfU1RBVEUJCQkJIDEyMworKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJ CQkJIDEwOAorKyNkZWZpbmUgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQJCQkgMTQ5Cisr I2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKKysjZGVmaW5lIEZJUFNfUl9O T1BSX1RFU1QxX0ZBSUxVUkUJCQkgMTQ1CisrI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMl9GQUlM VVJFCQkJIDE0NgorKyNkZWZpbmUgRklQU19SX05PVF9JTlNUQU5USUFURUQJCQkJIDEyNgorKyNk ZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNworKyNkZWZpbmUgRklQU19S X1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVECQkgMTI4CisrI2RlZmluZSBGSVBTX1Jf UEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORwkJIDEyOQorKyNkZWZpbmUgRklQU19SX1BS TkdfU1RSRU5HVEhfVE9PX0xPVwkJCSAxNDMKKysjZGVmaW5lIEZJUFNfUl9QUl9URVNUMV9GQUlM VVJFCQkJCSAxNDcKKysjZGVmaW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFCQkJCSAxNDgKKysj ZGVmaW5lIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVECQkgMTMwCisrI2Rl ZmluZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkcJCSAxMzEKKysjZGVmaW5lIEZJ UFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUgkJCSAxMzIKKysjZGVmaW5lIEZJUFNfUl9SRVNFRURf RVJST1IJCQkJIDEzMworKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCS8qIHVudXNl ZCAqLwkgMTE1CisrI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJLyogdW51c2VkICov CSAxMTYKKysjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQorKyNkZWZpbmUg RklQU19SX1NFTEZURVNUX0ZBSUxVUkUJCQkJIDEzNQorKyNkZWZpbmUgRklQU19SX1NUUkVOR1RI X0VSUk9SX1VOREVURUNURUQJCSAxMzYKKysjZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUJCQkJ IDExNworKyNkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IJCQkgMTQxCisrI2RlZmlu ZSBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SCQkgMTM4CisrI2RlZmluZSBGSVBT X1JfVU5TVVBQT1JURURfRFJCR19UWVBFCQkJIDEzOQorKyNkZWZpbmUgRklQU19SX1VOU1VQUE9S VEVEX1BMQVRGT1JNCQkJIDExMworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlm CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2htYWNf c2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxm dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0 LmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5OTMwNjQyMyArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCTIwMTQtMTAtMTYgMTM6MTk6 MzUuMDk5MzA2NDIzICswMjAwCitAQCAtMCwwICsxLDEzNyBAQAorKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNl bmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrdHlwZWRlZiBzdHJ1Y3QgeworKwljb25zdCBFVlBfTUQgKigqYWxnKSh2b2lkKTsKKysJY29u c3QgY2hhciAqa2V5LCAqaXY7CisrCXVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpF XTsKKyt9IEhNQUNfS0FUOworKworK3N0YXRpYyBjb25zdCBITUFDX0tBVCB2ZWN0b3JbXSA9IHsK KysgICAgewlFVlBfc2hhMSwKKysJLyogZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNh dGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9A QUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHgwOSwweDIyLDB4ZDMsMHg0MCwweDVmLDB4YWEs MHgzZCwweDE5LAorKwkgIDB4NGYsMHg4MiwweGE0LDB4NTgsMHgzMCwweDczLDB4N2QsMHg1YywK KysJICAweGM2LDB4YzcsMHg1ZCwweDI0IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMjI0LAor KwkvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92ZS4uLiAqLworKwkiMDEyMzQ1Njc4OTo7 PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweGRkLDB4ZWYsMHgwYSwweDQwLDB4Y2Is MHg3ZCwweDUwLDB4ZmIsCisrCSAgMHg2ZSwweGU2LDB4Y2UsMHhhMSwweDIwLDB4YmEsMHgyNiww eGFhLAorKwkgIDB4MDgsMHhmMywweDA3LDB4NzUsMHg4NywweGI4LDB4YWQsMHgxYiwKKysJICAw eDhjLDB4OGQsMHgxMiwweGM3IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMjU2LAorKwkiMDEy MzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweGI4LDB4ZjIsMHgwZCww eGI1LDB4NDEsMHhlYSwweDQzLDB4MDksCisrCSAgMHhjYSwweDRlLDB4YTksMHgzOCwweDBjLDB4 ZDAsMHhlOCwweDM0LAorKwkgIDB4ZjcsMHgxZiwweGJlLDB4OTEsMHg3NCwweGEyLDB4NjEsMHgz OCwKKysJICAweDBkLDB4YzEsMHg3ZSwweGFlLDB4NmEsMHgzNCwweDUxLDB4ZDkgfQorKyAgICB9 LAorKyAgICB7CUVWUF9zaGEzODQsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1w bGUgIzIiLAorKwl7IDB4MDgsMHhiYywweGIwLDB4ZGEsMHg0OSwweDFlLDB4ODcsMHhhZCwKKysJ ICAweDlhLDB4MWQsMHg2YSwweGNlLDB4MjMsMHhjNSwweDBiLDB4ZjYsCisrCSAgMHhiNywweDE4 LDB4MDYsMHhhNSwweDc3LDB4Y2QsMHg0OSwweDA0LAorKwkgIDB4ODksMHhmMSwweGU2LDB4MjMs MHg0NCwweDUxLDB4NTEsMHg5ZiwKKysJICAweDg1LDB4NTYsMHg4MCwweDc5LDB4MGMsMHhiZCww eDRkLDB4NTAsCisrCSAgMHhhNCwweDVmLDB4MjksMHhlMywweDkzLDB4ZjAsMHhlOCwweDdmIH0K KysgICAgfSwKKysgICAgewlFVlBfc2hhNTEyLAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAor KwkiU2FtcGxlICMyIiwKKysJeyAweDgwLDB4OWQsMHg0NCwweDA1LDB4N2MsMHg1YiwweDk1LDB4 NDEsCisrCSAgMHgwNSwweGJkLDB4MDQsMHgxMywweDE2LDB4ZGIsMHgwZiwweGFjLAorKwkgIDB4 NDQsMHhkNSwweGE0LDB4ZDUsMHhkMCwweDg5LDB4MmIsMHhkMCwKKysJICAweDRlLDB4ODYsMHg2 NCwweDEyLDB4YzAsMHg5MCwweDc3LDB4NjgsCisrCSAgMHhmMSwweDg3LDB4YjcsMHg3YywweDRm LDB4YWUsMHgyYywweDJmLAorKwkgIDB4MjEsMHhhNSwweGI1LDB4NjUsMHg5YSwweDRmLDB4NGIs MHhhNywKKysJICAweDQ3LDB4MDIsMHhhMywweGRlLDB4OWIsMHg1MSwweGYxLDB4NDUsCisrCSAg MHhiZCwweDRmLDB4MjUsMHgyNywweDQyLDB4OTgsMHg5OSwweDA1IH0KKysgICAgfSwKKyt9Owor KworK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQorKyAgICB7CisrICAgIGludCBuOworKyAgICB1 bnNpZ25lZCBpbnQgICAgb3V0bGVuOworKyAgICB1bnNpZ25lZCBjaGFyICAgb3V0W0VWUF9NQVhf TURfU0laRV07CisrICAgIGNvbnN0IEVWUF9NRCAgICptZDsKKysgICAgY29uc3QgSE1BQ19LQVQg KnQ7CisrCisrICAgIGZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZl Y3RvclswXSk7IG4rKyx0KyspCisrCXsKKysJbWQgPSAoKnQtPmFsZykoKTsKKysJSE1BQyhtZCx0 LT5rZXksc3RybGVuKHQtPmtleSksCisrCQkoY29uc3QgdW5zaWduZWQgY2hhciAqKXQtPml2LHN0 cmxlbih0LT5pdiksCisrCQlvdXQsJm91dGxlbik7CisrCisrCWlmKG1lbWNtcChvdXQsdC0+a2F2 YWwsb3V0bGVuKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1Rf SE1BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQor Kwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2ZpcHNfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19sb2Ns LmguZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMDMwNjQ0NiArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk5MzA2 NDIzICswMjAwCitAQCAtMCwwICsxLDcxIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr 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 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4g IkMiIHsKKysjZW5kaWYKKysKKysjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUJMzIK KysjZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGtleSwgY29tcCwgcHJlKSBcCisrCWtl eS0+Y29tcCA9IEJOX2JpbjJibihwcmUjI18jI2NvbXAsIHNpemVvZihwcmUjI18jI2NvbXApLCBr ZXktPmNvbXApOyBcCisrCWlmICgha2V5LT5jb21wKSBcCisrCQlnb3RvIGVycgorKworKyNkZWZp bmUgZmlwc19wb3N0X3N0YXJ0ZWQoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZpbmUgZmlwc19wb3N0 X3N1Y2Nlc3MoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZpbmUgZmlwc19wb3N0X2ZhaWxlZChpZCwg c3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQsIGV4KSAx CisrI2RlZmluZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQorKworKyNpZmRlZiAgX19jcGx1c3BsdXMK Kyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzX21kLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX21kLmMKKy0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcwkyMDE0LTEwLTE2IDEz OjE5OjM1LjEwMDMwNjQ0NiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2Zp cHNfbWQuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMDMwNjQ0NiArMDIwMAorQEAgLTAsMCArMSwx NDUgQEAKKysvKiBmaXBzL2V2cC9maXBzX21kLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUt MTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0 dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBs ZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNT TC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9u LWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBh bGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAor KyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBT U0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMg Y292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUg aG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5 cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90 aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlz IHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVu IGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJh cnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2Fn ZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3Ig dGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIK KysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSBy b3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRv Z3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBz cGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUg YXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNr bm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3Jp dHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJp YnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAq IGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNv ZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlz dHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2Uu XQorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVy aWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku CisrICoKKysgKi8KKysKKysvKiBNaW5pbWFsIHN0YW5kYWxvbmUgRklQUyB2ZXJzaW9ucyBvZiBE aWdlc3Qgb3BlcmF0aW9ucyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2lu Y2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L29iamVjdHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrY29uc3QgRVZQX01EICpG SVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKQorKwl7CisrCXN3aXRjaCAobmlkKQorKwkJewor KwkJY2FzZSBOSURfc2hhMToKKysJCXJldHVybiBFVlBfc2hhMSgpOworKworKwkJY2FzZSBOSURf c2hhMjI0OgorKwkJcmV0dXJuIEVWUF9zaGEyMjQoKTsKKysKKysJCWNhc2UgTklEX3NoYTI1NjoK KysJCXJldHVybiBFVlBfc2hhMjU2KCk7CisrCisrCQljYXNlIE5JRF9zaGEzODQ6CisrCQlyZXR1 cm4gRVZQX3NoYTM4NCgpOworKworKwkJY2FzZSBOSURfc2hhNTEyOgorKwkJcmV0dXJuIEVWUF9z aGE1MTIoKTsKKysKKysJCWRlZmF1bHQ6CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysJfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDAzMDY0NDYgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwkyMDE0LTEwLTE2 IDEzOjE5OjM1LjEwMDMwNjQ0NiArMDIwMAorQEAgLTAsMCArMSwyMDUgQEAKKysvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFy ZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoK KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK KysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK KysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCisrICoKKysgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCisrLyogUG93ZXIgb24gc2VsZiB0ZXN0IChQT1NUKSBzdXBwb3J0IGZ1bmN0aW9ucyAqLwor KworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisr CisrLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KKytpbnQgRklQU19zZWxmdGVzdCh2b2lkKQorKwl7 CisrCWludCBydiA9IDE7CisrCWlmICghRklQU19zZWxmdGVzdF9kcmJnKCkpCisrCQlydiA9IDA7 CisrCWlmICghRklQU19zZWxmdGVzdF94OTMxKCkpCisrCQlydiA9IDA7CisrICAgIAlpZiAoIUZJ UFNfc2VsZnRlc3Rfc2hhMSgpKQorKwkJcnYgPSAwOworKyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0 X3NoYTIoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2htYWMoKSkKKysJCXJ2 ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2NtYWMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFG SVBTX3NlbGZ0ZXN0X2FlcygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVz X2NjbSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2djbSgpKQorKwkJ cnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX3h0cygpKQorKwkJcnYgPSAwOworKwlp ZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVz dF9yc2EoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQorKwkJcnYg PSAwOworKwlyZXR1cm4gcnY7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5IHRl c3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCisrICogc3VwcGxpZWQgaW4g dGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAorKyAq IGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdp bGwKKysgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBhIGtu b3duIGFuc3dlciB0ZXN0CisrICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlk ZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKKysgKiBvZiBmYWlsdXJlLiBJZiAicGtleSIg aXMgTlVMTCBqdXN0IHBlcmZvcm0gYSBtZXNzYWdlIGRpZ2VzdCBjaGVjay4KKysgKi8KKysKKytp bnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAorKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpr YXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVuc2ln bmVkIGludCBtZF9mbGFncywKKysJCQljb25zdCBjaGFyICpmYWlsX3N0cikKKysJewkKKysJaW50 IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7Cisr CXVuc2lnbmVkIGludCBzaWdsZW47CisrCUVWUF9NRF9DVFggbWN0eDsKKysJRVZQX01EX0NUWF9p bml0KCZtY3R4KTsKKysKKysJaWYgKGRpZ2VzdCA9PSBOVUxMKQorKwkJZGlnZXN0ID0gRVZQX3No YTI1NigpOworKworKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQorKwkJJiYgKFJT QV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKKysJCXsKKysJCXNpZyA9 IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7CisrCQlpZiAoIXNpZykK KysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEVSUl9S X01BTExPQ19GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCisrCWlmICh0 YnNsZW4gPT0gLTEpCisrCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOworKworKwlpZiAo bWRfZmxhZ3MpCisrCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxhZ3MpOworKwor KwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJy b3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8g ZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkK KysJCWdvdG8gZXJyb3I7CisrCisrCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8fCBt ZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFFVlBf VmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlm ICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290byBlcnJvcjsK KysJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtleSk7CisrCisr CWVycm9yOgorKwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJCU9QRU5TU0xfZnJlZShzaWcpOworKwlF VlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwlpZiAocmV0ICE9IDEpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1RfRkFJTFVSRSk7 CisrCQlpZiAoZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZh aWxfc3RyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworKy8qIEdl bmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZl cmlmeSByZXN1bHQKKysgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBhbmQgY29tcGFy ZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KKysgKi8KKysKKytpbnQgZmlwc19jaXBoZXJfdGVz dChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFy ICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciBwbHRtcFtG SVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFtGSVBTX01B WF9DSVBIRVJfVEVTVF9TSVpFXTsKKysKKysJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJUFNfTUFY X0NJUEhFUl9URVNUX1NJWkUpOworKwltZW1zZXQocGx0bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9U RVNUX1NJWkUpOworKwltZW1zZXQoY2l0bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUp OworKworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYs IDEpIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXIoY3R4LCBjaXRtcCwgcGxh aW50ZXh0LCBsZW4pIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKG1lbWNtcChjaXRtcCwgY2lw aGVydGV4dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4 LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKEVW UF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbikgPD0gMCkKKysJCXJldHVybiAwOworKwlp ZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikpCisrCQlyZXR1cm4gMDsKKysJcmV0dXJu IDE7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2Zp cHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKKy0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTQtMTAtMTYg MTM6MTk6MzUuMTAwMzA2NDQ2ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19yYW5kLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDAzMDY0NDYgKzAyMDAKK0BAIC0wLDAg KzEsNDU3IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9w 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 U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrLyoKKysgKiBUaGlzIGlz IGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEuMi40LgorKyAq LworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisr LyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0aW1l dmFsIHdvbid0CisrICAgYmUgZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3QgYmUgZGVj bGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCisrICAgbGlrZSBERUMgQyBpbiBBTlNJIEMgbW9k ZS4gICovCisrI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisrI2RlZmluZSBfWE9QRU5f U09VUkNFX0VYVEVOREVEIDEKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lmICEoZGVmaW5lZChPUEVOU1NMX1NZ U19XSU4zMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSkKKysjIGluY2x1ZGUgPHN5 cy90aW1lLmg+CisrI2VuZGlmCisrI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKKysj IGluY2x1ZGUgPHRpbWUuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2lmbmRl ZiBPUEVOU1NMX1NZU19XSU4zMgorKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKKysjICBpbmNsdWRl IE9QRU5TU0xfVU5JU1RECisrIyBlbHNlCisrIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisrIyBlbmRp ZgorKyNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysK Kyt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKKysKKysjZGVmaW5lIEFFU19CTE9DS19MRU5H VEgJMTYKKysKKysKKysvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCisrCisrdHlw ZWRlZiBzdHJ1Y3QgCisrCXsKKysJaW50IHNlZWRlZDsKKysJaW50IGtleWVkOworKwlpbnQgdGVz dF9tb2RlOworKwlpbnQgc2Vjb25kOworKwlpbnQgZXJyb3I7CisrCXVuc2lnbmVkIGxvbmcgY291 bnRlcjsKKysJQUVTX0tFWSBrczsKKysJaW50IHZwb3M7CisrCS8qIFRlbXBvcmFyeSBzdG9yYWdl IGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCisrCXVuc2lnbmVkIGNoYXIgdG1w X2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5H VEhdOworKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBj aGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07CisrCX0gRklQU19QUk5HX0NUWDsKKysKKytzdGF0 aWMgRklQU19QUk5HX0NUWCBzY3R4OworKworK3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAw OworKworK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZikKKysJeworKwlmaXBzX3Bybmdf ZmFpbCA9IG9ub2ZmOworKwl9CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQorKwl7Cisr CUZJUFNfeDkzMV9zdGljaygxKTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfcmFuZF9wcm5n X3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKKysJeworKwljdHgtPnNlZWRlZCA9IDA7CisrCWN0 eC0+a2V5ZWQgPSAwOworKwljdHgtPnRlc3RfbW9kZSA9IDA7CisrCWN0eC0+Y291bnRlciA9IDA7 CisrCWN0eC0+c2Vjb25kID0gMDsKKysJY3R4LT5lcnJvciA9IDA7CisrCWN0eC0+dnBvcyA9IDA7 CisrCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOworKwlPUEVOU1NM X2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7CisrCX0KKysJCisrCisrc3RhdGlj IGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5z aWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQorKwl7CisrCWlmIChGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRVRfUFJOR19L RVksIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChr ZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKKysJCXsKKysJCS8q IGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCisrCQlyZXR1cm4gMDsKKysJCX0KKysJQUVTX3Nl dF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7CisrCWlmIChrZXlsZW4g PT0gMTYpCisrCQl7CisrCQltZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKKysJCWN0eC0+ a2V5ZWQgPSAyOworKwkJfQorKwllbHNlCisrCQljdHgtPmtleWVkID0gMTsKKysJY3R4LT5zZWVk ZWQgPSAwOworKwljdHgtPnNlY29uZCA9IDA7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGlj IGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGludCBzZWVkbGVuKQorKwl7CisrCXVuc2lnbmVk IGludCBpOworKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQlyZXR1cm4gMDsKKysJLyogSW4gdGVzdCBt b2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCisrCWlmIChjdHgtPnRlc3RfbW9kZSkK KysJCXsKKysJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJcmV0dXJuIDA7 CisrCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCWN0eC0+c2Vl ZGVkID0gMTsKKysJCXJldHVybiAxOworKwkJfQorKwkvKiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Ig c3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KKysJZm9yIChpID0gMDsgaSA8IHNl ZWRsZW47IGkrKykKKysJCXsKKysJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtpXTsKKysJ CWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJY3R4LT52cG9z ID0gMDsKKysJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBl cXVhbHMKKysgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNo LgorKyAJCQkgKi8gCisrCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKKysJCQkJeworKwkJCQlpZiAo IW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQorKwkJCQkJeworKwkJCQkJUkFORGVy cihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAorKwkJCQkJCVJBTkRfUl9QUk5HX1NFRURfTVVT VF9OT1RfTUFUQ0hfS0VZKTsKKysJCQkJCXJldHVybiAwOworKwkJCQkJfQorKwkJCQlPUEVOU1NM X2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7CisrCQkJCWN0eC0+a2V5ZWQgPSAxOworKwkJCQl9 CisrCQkJY3R4LT5zZWVkZWQgPSAxOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysK KytzdGF0aWMgaW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgpCisrCXsK KysJaWYgKGN0eC0+a2V5ZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9URVNU X01PREUsUkFORF9SX1BSTkdfS0VZRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWN0eC0+dGVz dF9tb2RlID0gMTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU194OTMxX3Rlc3RfbW9k ZSh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOworKwl9Cisr CisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKKysJeworKwlyZXR1cm4gZmlwc19zZXRf dGVzdF9tb2RlKCZzY3R4KTsKKysJfQorKworKworK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2ln bmVkIGNoYXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7CisrCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysJ CXJldHVybiAwOworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgp OworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNo YXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7CisrCQlSQU5EZXJyKFJB TkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysJCXJldHVy biAwOworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKwly ZXR1cm4gMTsKKysJfQorKworK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFyICpi dWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpCisrCXsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIK KysJRklMRVRJTUUgZnQ7CisrI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQorKyAg ICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworKyNlbHNlCisrCXN0cnVjdCB0aW1ldmFsIHR2Owor KyNlbmRpZgorKworKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisrCXVuc2lnbmVkIGxv bmcgcGlkOworKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlHZXRTeXN0 ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3 SGlnaERhdGVUaW1lICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3 SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAo KGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10gPSAodW5zaWduZWQg Y2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVu c2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNp Z25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0g KHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKKysJYnVm WzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsK KysjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrCWNsb2NrX2dldHRpbWUoQ0xP Q0tfUkVBTFRJTUUsICZ0cyk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHMudHZfc2Vj ICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiA4KSAm IDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gMTYpICYg MHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAyNCkgJiAw eGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9uc2VjICYgMHhmZik7Cisr CWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZmKTsKKysJ YnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAxNikgJiAweGZmKTsKKysJ YnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAyNCkgJiAweGZmKTsKKysj ZWxzZQorKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOworKwlidWZbMF0gPSAodW5zaWduZWQgY2hh cikgKHR2LnR2X3NlYyAmIDB4ZmYpOworKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50 dl9zZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZf c2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9z ZWMgPj4gMjQpICYgMHhmZik7CisrCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfdXNl YyAmIDB4ZmYpOworKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDgp ICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMTYp ICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMjQp ICYgMHhmZik7CisrI2VuZGlmCisrCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoKnBjdHIgJiAw eGZmKTsKKysJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gOCkgJiAweGZmKTsK KysJYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDE2KSAmIDB4ZmYpOworKwli dWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMjQpICYgMHhmZik7CisrCisrCSgq cGN0cikrKzsKKysKKysKKysjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUworKwlwaWQ9KHVu c2lnbmVkIGxvbmcpZ2V0cGlkKCk7CisrCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikgKHBpZCAm IDB4ZmYpOworKwlidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYgMHhmZik7 CisrCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7CisrCWJ1 ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7CisrI2VuZGlmCisr ICAgIH0KKysKKytzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJ dW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBpbnQgb3V0bGVuKQorKwl7CisrCXVuc2lnbmVk IGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWdu ZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07CisrCWludCBpOworKwlpZiAoY3R4LT5lcnJv cikKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19FUlJPUik7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFjdHgtPmtleWVkKQorKwkJeworKwkJUkFORGVy cihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKKysJCXJldHVybiAwOworKwkJ fQorKwlpZiAoIWN0eC0+c2VlZGVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5E LFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWZvciAoOzsp CisrCQl7CisrCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQorKwkJCUZJUFNfZ2V0X3RpbWV2ZWMoY3R4 LT5EVCwgJmN0eC0+Y291bnRlcik7CisrCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4LT5r cyk7CisrCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJCXRtcFtp XSA9IElbaV0gXiBjdHgtPlZbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgtPmtzKTsK KysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0g UltpXSBeIElbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOworKwkJ LyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KKysJCWlmIChjdHgtPnNlY29uZCkKKysJCQl7Cisr CQkJaWYgKGZpcHNfcHJuZ19mYWlsKQorKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxP Q0tfTEVOR1RIKTsKKysJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5H VEgpKQorKwkJCQl7CisrCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BS TkdfU1RVQ0spOworKwkJCQljdHgtPmVycm9yID0gMTsKKysJCQkJZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCW1lbWNweShjdHgtPmxh c3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJaWYgKCFjdHgtPnNlY29uZCkKKysJCQl7Cisr CQkJY3R4LT5zZWNvbmQgPSAxOworKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJCWNvbnRp bnVlOworKwkJCX0KKysKKysJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7 CisrCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9CisrCisrCQlt ZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCW91dCArPSBBRVNfQkxPQ0tfTEVO R1RIOworKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7CisrCQl9CisrCXJldHVybiAxOwor Kwl9CisrCisrCisraW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgaW50IGtleWxlbikKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19M T0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXlsZW4p OworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7Cisr CX0KKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBG SVBTX1JBTkRfU0laRV9UIGtleWxlbikKKysJeworKwlyZXR1cm4gRklQU194OTMxX3NldF9rZXko a2V5LCBrZXlsZW4pOworKwl9CisrCisraW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKnNl ZWQsIGludCBzZWVkbGVuKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwgc2Vl ZGxlbik7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJl dDsKKysJfQorKworKworK2ludCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBp bnQgY291bnQpCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19S QU5EKTsKKysJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKKysJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IEZJ UFNfeDkzMV9zdGF0dXModm9pZCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fcl9sb2NrKENS WVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBzY3R4LnNlZWRlZDsKKysJQ1JZUFRPX3JfdW5sb2Nr KENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrdm9pZCBGSVBTX3g5 MzFfcmVzZXQodm9pZCkKKysJeworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwor KwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX3NlZWQoY29uc3Qg dm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJRklQU194OTMxX3NlZWQoc2VlZCwgc2Vl ZGxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfYWRk KGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAorKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5 KQorKwl7CisrCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOworKwlyZXR1cm4gMTsKKysJ fQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aD0KKysgICAgewor KyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKKysgICAgRklQU194OTMxX2J5dGVzLAorKyAgICBGSVBT X3g5MzFfcmVzZXQsCisrICAgIGZpcHNfZG9fcmFuZF9hZGQsCisrICAgIEZJUFNfeDkzMV9ieXRl cywKKysgICAgRklQU194OTMxX3N0YXR1cworKyAgICB9OworKworK2NvbnN0IFJBTkRfTUVUSE9E ICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpCisreworKyAgcmV0dXJuICZyYW5kX3g5MzFfbWV0aDsK Kyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBz X3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCistLS0g b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDE0LTEwLTE2IDEz OjE5OjM1LjEwMDMwNjQ0NiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2Zp cHNfcmFuZC5oCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAwMzA2NDQ2ICswMjAwCitAQCAtMCwwICsx LDE0NSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpZm5kZWYgSEVBREVSX0ZJ UFNfUkFORF9ICisrI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisr CisraW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtl eWxlbik7CisraW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7Cisr aW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRsZW4pOworKwor K2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpOworK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZv aWQpOworK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKKysKKytpbnQg RklQU194OTMxX3N0YXR1cyh2b2lkKTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU194OTMx X21ldGhvZCh2b2lkKTsKKysKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0eF9zdCBEUkJHX0NUWDsK KysvKiBEUkJHIGV4dGVybmFsIGZsYWdzICovCisrLyogRmxhZyBmb3IgQ1RSIG1vZGUgb25seTog dXNlIGRlcml2YXRpb24gZnVuY3Rpb24gY3RyX2RmICovCisrI2RlZmluZQlEUkJHX0ZMQUdfQ1RS X1VTRV9ERgkJMHgxCisrLyogUFJORyBpcyBpbiB0ZXN0IHN0YXRlICovCisrI2RlZmluZQlEUkJH X0ZMQUdfVEVTVAkJCTB4MgorKworK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpOworK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwg aW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisraW50IEZJUFNfZHJiZ19pbnN0YW50aWF0 ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90 IHBlcnNsZW4pOworK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCBjb25zdCB1 bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisraW50IEZJUFNfZHJiZ19nZW5l cmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAor KwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbiwgc2l6ZV90IGFkaW5sZW4pOworKworK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShE UkJHX0NUWCAqZGN0eCk7Cisrdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0eCk7Cisr CisraW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3Qg KCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJ CWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAorKwl2b2lkICgq Y2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvbGVuKSwKKysJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCisrCXNpemVfdCAoKmdldF9ub25j ZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5 LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9ub25j ZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpOworKwor K2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXpl X3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpLAorKwl2 b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvbGVuKSwKKysJaW50ICgqcmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2 b2lkICpidWYsIGludCBudW0pLAorKwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwK KysJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkpOworKworK3Zv aWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCk7Cisrdm9pZCBGSVBTX2Ry Ymdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsKKytzaXplX3Qg RklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCk7CisraW50IEZJUFNfZHJi Z19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpOworK3ZvaWQgRklQU19kcmJnX3NldF9jaGVj a19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKKyt2b2lkIEZJUFNfZHJi Z19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOworKwor K2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KTsKKysKKytEUkJHX0NU WCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpOworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBT X2RyYmdfbWV0aG9kKHZvaWQpOworKworKworK2ludCBGSVBTX3JhbmRfc2V0X21ldGhvZChjb25z dCBSQU5EX01FVEhPRCAqbWV0aCk7CisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRf bWV0aG9kKHZvaWQpOworKworK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cyk7Cisr CisraW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKTsKKysKKysvKiAxLjAuMCBjb21wYXQgZnVu Y3Rpb25zICovCisraW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOworK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2 b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKKytpbnQgRklQU19yYW5kX2J5dGVzKHVu c2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOworK2ludCBGSVBTX3Jh bmRfdGVzdF9tb2RlKHZvaWQpOworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOworK2ludCBG SVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKKytpbnQgRklQU19yYW5kX3N0YXR1 cyh2b2lkKTsKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKTsKKysK KysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCistLS0gb3BlbnNzbC0xLjAu MWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4x MDEzMDY0NjkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmRf bGNsLmgJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDEzMDY0NjkgKzAyMDAKK0BAIC0wLDAgKzEsMjE5 IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9sY2wuaCAqLworKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAq IHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisr dHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCBEUkJHX0hBU0hfQ1RYOworK3R5cGVkZWYg c3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19ITUFDX0NUWDsKKyt0eXBlZGVmIHN0cnVjdCBk cmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOworKworKy8qIDg4OCBiaXRzIGZyb20gMTAuMSB0 YWJsZSAyICovCisrI2RlZmluZSBIQVNIX1BSTkdfTUFYX1NFRURMRU4JMTExCisrCisrc3RydWN0 IGRyYmdfaGFzaF9jdHhfc3QKKysJeworKwljb25zdCBFVlBfTUQgKm1kOworKwlFVlBfTURfQ1RY IG1jdHg7CisrCXVuc2lnbmVkIGNoYXIgVltIQVNIX1BSTkdfTUFYX1NFRURMRU5dOworKwl1bnNp Z25lZCBjaGFyIENbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKKysJLyogVGVtcG9yYXJ5IHZhbHVl IHN0b3JhZ2U6IHNob3VsZCBhbHdheXMgZXhjZWVkIG1heCBkaWdlc3QgbGVuZ3RoICovCisrCXVu c2lnbmVkIGNoYXIgdnRtcFtIQVNIX1BSTkdfTUFYX1NFRURMRU5dOworKwl9OworKworK3N0cnVj dCBkcmJnX2htYWNfY3R4X3N0CisrCXsKKysJY29uc3QgRVZQX01EICptZDsKKysJSE1BQ19DVFgg aGN0eDsKKysJdW5zaWduZWQgY2hhciBLW0VWUF9NQVhfTURfU0laRV07CisrCXVuc2lnbmVkIGNo YXIgVltFVlBfTUFYX01EX1NJWkVdOworKwl9OworKworK3N0cnVjdCBkcmJnX2N0cl9jdHhfc3QK KysJeworKwlBRVNfS0VZIGtzOworKwlzaXplX3Qga2V5bGVuOworKwl1bnNpZ25lZCBjaGFyIEtb MzJdOworKwl1bnNpZ25lZCBjaGFyIFZbMTZdOworKwkvKiBUZW1wIHZhcmlhYmxlcyB1c2VkIGJ5 IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KKysJQUVTX0tFWSBkZl9rczsKKysJQUVTX0tFWSBkZl9r eGtzOworKwkvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFnZSB1c2VkIGJ5IGN0cl9kZiAqLworKwl1 bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKKysJc2l6ZV90IGJsdG1wX3BvczsKKysJdW5zaWduZWQg Y2hhciBLWFs0OF07CisrCX07CisrCisrLyogRFJCRyBpbnRlcm5hbCBmbGFncyAqLworKworKy8q IEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIgbGlicmFyeSAqLworKyNkZWZpbmUJRFJCR19G TEFHX05PRVJSCQkJMHgxCisrLyogQ3VzdG9tIHJlc2VlZCBjaGVja2luZyAqLworKyNkZWZpbmUJ RFJCR19DVVNUT01fUkVTRUVECQkweDIKKysKKysvKiBEUkJHIHN0YXR1cyB2YWx1ZXMgKi8KKysv KiBub3QgaW5pdGlhbGlzZWQgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQJ MAorKy8qIG9rIGFuZCByZWFkeSB0byBnZW5lcmF0ZSByYW5kb20gYml0cyAqLworKyNkZWZpbmUg RFJCR19TVEFUVVNfUkVBRFkJCTEKKysvKiByZXNlZWQgcmVxdWlyZWQgKi8KKysjZGVmaW5lIERS QkdfU1RBVFVTX1JFU0VFRAkJMgorKy8qIGZhdGFsIGVycm9yIGNvbmRpdGlvbiAqLworKyNkZWZp bmUgRFJCR19TVEFUVVNfRVJST1IJCTMKKysKKysvKiBBIGRlZmF1bHQgbWF4aW11bSBsZW5ndGg6 IGxhcmdlciB0aGFuIGFueSByZWFzb25hYmxlIHZhbHVlIHVzZWQgaW4gcHJhdGljZSAqLworKwor KyNkZWZpbmUgRFJCR19NQVhfTEVOR1RICQkJMHg3ZmZmZmZmMAorKy8qIE1heGltdW0gRFJCRyBi bG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBhcmUgYmlnZ2VyIHRoYW4gY2lwaGVyIGJsb2NrcyBz aXplcworKyAqIHNvIHVzZSBtYXggZGlnZXN0IGxlbmd0aC4KKysgKi8KKysjZGVmaW5lIERSQkdf TUFYX0JMT0NLCQkJRVZQX01BWF9NRF9TSVpFCisrCisrI2RlZmluZSBEUkJHX0hFQUxUSF9JTlRF UlZBTAkJKDEgPDwgMjQpCisrCisrLyogRFJCRyBjb250ZXh0IHN0cnVjdHVyZSAqLworKworK3N0 cnVjdCBkcmJnX2N0eF9zdAorKwl7CisrCS8qIEZpcnN0IHR5cGVzIGNvbW1vbiB0byBhbGwgaW1w bGVtZW50YXRpb25zICovCisrCS8qIERSQkcgdHlwZTogYSBOSUQgZm9yIHRoZSB1bmRlcmx5aW5n IGFsZ29yaXRobSAqLworKwlpbnQgdHlwZTsKKysJLyogVmFyaW91cyBleHRlcm5hbCBmbGFncyAq LworKwl1bnNpZ25lZCBpbnQgeGZsYWdzOworKwkvKiBWYXJpb3VzIGludGVybmFsIHVzZSBvbmx5 IGZsYWdzICovCisrCXVuc2lnbmVkIGludCBpZmxhZ3M7CisrCS8qIFVzZWQgZm9yIHBlcmlvZGlj IGhlYWx0aCBjaGVja3MgKi8KKysJaW50IGhlYWx0aF9jaGVja19jbnQsIGhlYWx0aF9jaGVja19p bnRlcnZhbDsKKysKKysJLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzZXR1cCBieSBt ZWNoYW5pc20gZHJiZ19pbml0KCkgY2FsbCAqLworKwlpbnQgc3RyZW5ndGg7CisrCXNpemVfdCBi bG9ja2xlbmd0aDsKKysJc2l6ZV90IG1heF9yZXF1ZXN0OworKworKwlzaXplX3QgbWluX2VudHJv cHksIG1heF9lbnRyb3B5OworKwlzaXplX3QgbWluX25vbmNlLCBtYXhfbm9uY2U7CisrCXNpemVf dCBtYXhfcGVycywgbWF4X2FkaW47CisrCXVuc2lnbmVkIGludCByZXNlZWRfY291bnRlcjsKKysJ dW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKKysJc2l6ZV90IHNlZWRsZW47CisrCWludCBz dGF0dXM7CisrCS8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5cGljYWxseSB1c2VkIGJ5IHRlc3QgZ2V0 X2VudHJvcHkgKi8KKysJdm9pZCAqYXBwX2RhdGE7CisrCS8qIEltcGxlbWVudGF0aW9uIHNwZWNp ZmljIHN0cnVjdHVyZXMgKi8KKysJdW5pb24gCisrCQl7CisrCQlEUkJHX0hBU0hfQ1RYIGhhc2g7 CisrCQlEUkJHX0hNQUNfQ1RYIGhtYWM7CisrCQlEUkJHX0NUUl9DVFggIGN0cjsKKysJCX0gZDsK KysJLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0dXAgY2FsbGJhY2tzIGJlbG93ICovCisrCWlu dCAoKmluaXQpKERSQkdfQ1RYICpjdHgsIGludCBuaWQsIGludCBzZWN1cml0eSwgdW5zaWduZWQg aW50IGZsYWdzKTsKKysJLyogSW50YW50aWF0ZSBQUk5HICovCisrCWludCAoKmluc3RhbnRpYXRl KShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBl bnRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4s CisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKKysJLyog cmVzZWVkICovCisrCWludCAoKnJlc2VlZCkoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCS8qIGdlbmVyYXQgb3V0cHV0ICovCisrCWludCAo KmdlbmVyYXRlKShEUkJHX0NUWCAqY3R4LAorKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVu KTsKKysJLyogdW5pbnN0YW50aWF0ZSAqLworKwlpbnQgKCp1bmluc3RhbnRpYXRlKShEUkJHX0NU WCAqY3R4KTsKKysKKysJLyogRW50cm9weSBzb3VyY2UgYmxvY2sgbGVuZ3RoICovCisrCXNpemVf dCBlbnRyb3B5X2Jsb2NrbGVuOworKworKwkvKiBlbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbiAq LworKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq KnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4p OworKwkvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIGVudHJvcHkgYnVmZmVyICov CisrCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG9sZW4pOworKworKwkvKiBub25jZSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8K KysJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91 dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7Cisr CS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggbm9uY2UgYnVmZmVyICovCisrCXZv aWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvbGVuKTsKKysKKysJLyogQ29udGludW91cyByYW5kb20gbnVtYmVyIHRlc3QgdGVtcG9y YXJ5IGFyZWEgKi8KKysJLyogTGFzdCBibG9jayAqLwkKKysJdW5zaWduZWQgY2hhciBsYltFVlBf TUFYX01EX1NJWkVdOworKwkvKiBzZXQgaWYgbGIgaXMgdmFsaWQgKi8KKysJaW50IGxiX3ZhbGlk OworKworKwkvKiBDYWxsYmFja3MgdXNlZCB3aGVuIGNhbGxlZCB0aHJvdWdoIFJBTkQgaW50ZXJm YWNlICovCisrCS8qIEdldCBhbnkgYWRkaXRpb25hbCBpbnB1dCBmb3IgZ2VuZXJhdGUgKi8KKysJ c2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KTsK KysJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LCBzaXplX3Qgb2xlbik7CisrCS8qIENhbGxiYWNrIGZvciBSQU5EX3NlZWQoKSwgUkFORF9hZGQo KSAqLworKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1 ZiwgaW50IG51bSk7CisrCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAorKwkJCQlj b25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KTsKKysJfTsKKysKKysKKytp bnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2hh c2hfaW5pdChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19D VFggKmRjdHgpOworK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpOworK2ludCBmaXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAq ZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KTsKKysKKytjb25zdCBzdHJ1Y3QgZW52X21k X3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKKysKKytjb25zdCBzdHJ1Y3QgZXZw X2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7CisrCisrI2RlZmluZSBG SVBTX2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKKysjZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRl IEVWUF9EaWdlc3RVcGRhdGUKKysjZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZp bmFsCisrI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9zaXplCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzX3JhbmRfbGliLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMTMwNjQ2OSArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYwkyMDE0LTEw LTE2IDEzOjE5OjM1LjEwMTMwNjQ2OSArMDIwMAorQEAgLTAsMCArMSwxOTEgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisr ICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNp bmNsdWRlICJlX29zLmgiCisrCisrLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1pbGFyIHRv IFJBTkQgZnVuY3Rpb25hbGl0eSBidXQgd2l0aG91dAorKyAqIEVOR0lORSBhbmQgYWRkaXRpb25h bCBjaGVja2luZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRob2RzLgorKyAqLworKworK3N0YXRpYyBj b25zdCBSQU5EX01FVEhPRCAqZmlwc19yYW5kX21ldGggPSBOVUxMOworK3N0YXRpYyBpbnQgZmlw c19hcHByb3ZlZF9yYW5kX21ldGggPSAwOworK3N0YXRpYyBpbnQgZmlwc19yYW5kX2JpdHMgPSAw OworKworKy8qIEFsbG93cyBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2YgYml0cyBh bmQgdXNlcyBub24tRklQUyBtZXRob2RzICovCisrdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50 IG5iaXRzKQorKwl7CisrCWZpcHNfcmFuZF9iaXRzID0gbmJpdHM7CisrCX0KKysKKytpbnQgRklQ U19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpCisrCXsKKysJaWYgKCFm aXBzX3JhbmRfYml0cykKKysJCXsKKysJCWlmIChtZXRoID09IEZJUFNfZHJiZ19tZXRob2QoKSkK KysJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDE7CisrCQllbHNlIGlmIChtZXRoID09IEZJ UFNfeDkzMV9tZXRob2QoKSkKKysJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDI7CisrCQll bHNlCisrCQkJeworKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMDsKKysJCQlpZiAoRklQ U19tb2R1bGVfbW9kZSgpKQorKwkJCQl7CisrCQkJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9T RVRfTUVUSE9ELAorKwkJCQkJCUZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJCQlyZXR1cm4g MDsKKysJCQkJfQorKwkJCX0KKysJCX0KKysJZmlwc19yYW5kX21ldGggPSBtZXRoOworKwlyZXR1 cm4gMTsKKysJfQorKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2 b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3JhbmRfbWV0aDsKKysJfQorKworK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuIEZJUFNfcmFuZF9n ZXRfbWV0aG9kKCk7CisrCX0KKysKKyt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQorKwl7Cisr CWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCkKKysJCWZpcHNf cmFuZF9tZXRoLT5jbGVhbnVwKCk7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qg dm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfUkFORF9TRUVELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAw OworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnNlZWQpCisr CQlmaXBzX3JhbmRfbWV0aC0+c2VlZChidWYsbnVtKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKyt2 b2lkIEZJUFNfcmFuZF9hZGQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9w eSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21v ZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9BREQsIEZJUFNfUl9OT05f RklQU19NRVRIT0QpOworKwkJcmV0dXJuOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYg Zmlwc19yYW5kX21ldGgtPmFkZCkKKysJCWZpcHNfcmFuZF9tZXRoLT5hZGQoYnVmLG51bSxlbnRy b3B5KTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBG SVBTX1JBTkRfU0laRV9UIG51bSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRo ICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFO RF9CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJ aWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5ieXRlcykKKysJCXJldHVybiBm aXBzX3JhbmRfbWV0aC0+Ynl0ZXMoYnVmLG51bSk7CisrCXJldHVybiAwOworKwl9CisrCisraW50 IEZJUFNfcmFuZF9wc2V1ZG9fYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtKQorKwl7 CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1BTRVVET19CWVRFUywgRklQU19SX05P Tl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRo ICYmIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKQorKwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRo LT5wc2V1ZG9yYW5kKGJ1ZixudW0pOworKwlyZXR1cm4gLTE7CisrCX0KKysKKytpbnQgRklQU19y YW5kX3N0YXR1cyh2b2lkKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYg RklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NU QVRVUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYg KGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMpCisrCQlyZXR1cm4gZmlw c19yYW5kX21ldGgtPnN0YXR1cygpOworKwlyZXR1cm4gMDsKKysJfQorKworKy8qIFJldHVybiBp bnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJORy4gRm9yIERSQkcgdGhpcyBpcyBhbiBpbnRlcm5h bAorKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMxIFBSTkcgaXQgaXMgODAgYml0cyAoZnJvbSBTUDgw MC0xMzEpLiBBbnkgb3RoZXIKKysgKiB0eXBlIG9mIFBSTkcgaXMgbm90IGFwcHJvdmVkIGFuZCBy ZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBtYXhpbXVtCisrICogMjU2IG91dHNpZGUgRklQUyBt b2RlLgorKyAqLworKworK2ludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCkKKysJeworKwlpZiAo Zmlwc19yYW5kX2JpdHMpCisrCQlyZXR1cm4gZmlwc19yYW5kX2JpdHM7CisrCWlmIChmaXBzX2Fw cHJvdmVkX3JhbmRfbWV0aCA9PSAxKQorKwkJcmV0dXJuIEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgo RklQU19nZXRfZGVmYXVsdF9kcmJnKCkpOworKwllbHNlIGlmIChmaXBzX2FwcHJvdmVkX3JhbmRf bWV0aCA9PSAyKQorKwkJcmV0dXJuIDgwOworKwllbHNlIGlmIChmaXBzX2FwcHJvdmVkX3JhbmRf bWV0aCA9PSAwKQorKwkJeworKwkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCQlyZXR1cm4g MDsKKysJCWVsc2UKKysJCQlyZXR1cm4gMjU2OworKwkJfQorKwlyZXR1cm4gMDsKKysJfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYworLS0tIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMJMjAxNC0x MC0xNiAxMzoxOTozNS4xMDEzMDY0NjkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMTMwNjQ2OSAr MDIwMAorQEAgLTAsMCArMSwxODMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor 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+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVm IE9QRU5TU0xfRklQUworKworKworKworK3R5cGVkZWYgc3RydWN0CisrCXsKKysJdW5zaWduZWQg Y2hhciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07CisrCXVuc2lnbmVkIGNoYXIgUlsx Nl07CisrCX0gQUVTX1BSTkdfVFY7CisrCisrLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMg YXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KKysKKytzdGF0aWMgdW5z aWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQorKwkJezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgx MywweDYwLDB4NzIsMHg0MiwKKysJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhkNCwweDYy LDB4MDJ9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2ID0gCisrCXsKKysJCQkJ LyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisr CQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKKysJCQkJLyogViAq LworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7 MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAorKwkJIDB4ODQsMHg3OSww eDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KKysJfTsKKysKKytzdGF0aWMgdW5zaWduZWQg Y2hhciBhZXNfMTkyX2tleVsyNF0gPQorKwkJezB4MTUsMHhkOCwweDc4LDB4MGQsMHg2MiwweGQz LDB4MjUsMHg2ZSwKKysJCSAweDQ0LDB4NjQsMHgxMCwweDEzLDB4NjAsMHgyYiwweGE5LDB4YmMs CisrCQkgMHg0YSwweGZiLDB4Y2EsMHhlYiwweDRjLDB4OGIsMHg5OSwweDNifTsKKysKKytzdGF0 aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90diA9IAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgz ZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdk LDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Yn0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MTcsMHgwNywweGQ1LDB4 MjgsMHgxOSwweDc5LDB4MWUsMHhlZiwKKysJCSAweGE1LDB4MGMsMHhiZiwweDI1LDB4ZTUsMHg1 NiwweGI0LDB4OTN9CisrCX07CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlb MzJdID0KKysJCXsweDZkLDB4MTQsMHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQsCisrCQkg MHg4MiwweDhkLDB4ZmEsMHhmMiwweDdhLDB4MDMsMHhiNywweDlmLAorKwkJIDB4MGMsMHhjNyww eDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUsMHhiNSwKKysJCSAweDIxLDB4MDUsMHg4YywweDRmLDB4 MzEsMHg3YSwweDgwLDB4YmJ9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2ID0K KysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4 YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODh9LAor KwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8q IFIgKi8KKysJCXsweDM1LDB4YzcsMHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5LDB4YmMsCisrCQkg MHg4MiwweDc5LDB4OTksMHhmYiwweGQwLDB4YjMsMHgzYiwweDcyfQorKwl9OworKworK3ZvaWQg RklQU19jb3JydXB0X3JuZygpCisrICAgIHsKKysgICAgYWVzXzE5Ml90di5WWzBdKys7CisrICAg IH0KKysKKysjZGVmaW5lIGZpcHNfeDkzMV90ZXN0KGtleSwgdHYpIFwKKysJZG9feDkzMV90ZXN0 KGtleSwgc2l6ZW9mIGtleSwgJnR2KQorKworK3N0YXRpYyBpbnQgZG9feDkzMV90ZXN0KHVuc2ln bmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKKysJCQlBRVNfUFJOR19UViAqdHYpCisrCXsKKysJ dW5zaWduZWQgY2hhciBSWzE2XSwgVlsxNl07CisrCWludCBydiA9IDE7CisrCW1lbWNweShWLCB0 di0+Viwgc2l6ZW9mKFYpKTsKKysJaWYgKCFGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbikp CisrCQlyZXR1cm4gMDsKKysJaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfWDkzMSwg a2V5bGVuLCBOVUxMKSkKKysJCXJldHVybiAxOworKwlpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJ UFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKwkJVlswXSsrOworKwlGSVBTX3g5MzFfc2Vl ZChWLCAxNik7CisrCUZJUFNfeDkzMV9zZXRfZHQodHYtPkRUKTsKKysJRklQU194OTMxX2J5dGVz KFIsIDE2KTsKKysJaWYgKG1lbWNtcChSLCB0di0+UiwgMTYpKQorKwkJeworKwkJZmlwc19wb3N0 X2ZhaWxlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKTsKKysJCXJ2ID0gMDsKKysJCX0K KysJZWxzZSBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5V TEwpKQorKwkJcmV0dXJuIDA7CisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0 ZXN0X3g5MzEoKQorKwl7CisrCWludCBydiA9IDE7CisrCUZJUFNfeDkzMV9yZXNldCgpOworKwlp ZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf U0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJ fQorKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpKQorKwkJcnYg PSAwOworKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KSkKKysJ CXJ2ID0gMDsKKysJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMjU2X2tleSwgYWVzXzI1Nl90dikp CisrCQlydiA9IDA7CisrCUZJUFNfeDkzMV9yZXNldCgpOworKwlpZiAoIXJ2KQorKwkJRklQU2Vy cihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwly ZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCkKKysJeworKwly ZXR1cm4gRklQU19zZWxmdGVzdF94OTMxKCk7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAxMzA2NDY5 ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIw MTQtMTAtMTYgMTM6MTk6MzUuMTAxMzA2NDY5ICswMjAwCitAQCAtMCwwICsxLDI1MCBAQAorKy8q IENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQor KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NM IGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0 LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZv cm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZv ciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBi ZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3Qg dGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0 aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwor KyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1 Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSBy ZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZ b3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRo ZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3Jt IG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3Vt ZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgor KyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAo ZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4g YmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5n IHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBp bmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9m KSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91 IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29t KSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBB UyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICog QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT CisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRo ZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWls YWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNo YW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBw dXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhl IEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 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 CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSAiZV9vcy5oIgorKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK Kyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4o MCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKworK3R5cGVkZWYgc3RydWN0CisrCXsKKysJdW5zaWduZWQgY2hh ciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07 CisrCX0gQUVTX1BSTkdfTUNUOworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfbWN0X2tleVsxNl0gPQorKwl7MHg5ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgzNCww eGI1LAorKwkgMHhkOCwweDJiLDB4ZTgsMHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsKKysKKytz dGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2ID0geworKwkJCS8qIERUICov CisrCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4MjksMHgwMiwweGJhLDB4M2IsCisrCSAweDY3LDB4 YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4YWN9LAorKwkJCS8qIFYgKi8KKysJezB4NTcs MHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcsMHg5NywKKysJIDB4N2UsMHg3NCwweGZiLDB4 ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCisrCQkJLyogUiAqLworKwl7MHg0OCwweGU5LDB4YmQs MHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAorKwkgMHhlNCwweDU3LDB4OTAsMHhkNSwweGMzLDB4 ZmMsMHg5YiwweDczfQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9tY3Rfa2V5WzI0XSA9CisrCXsweGI3LDB4NmMsMHgzNCwweGQxLDB4MDksMHg2NywweGFiLDB4 NzMsCisrCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgsMHgxNiwweDBiLDB4OTEsCisrCSAweGJj LDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4OGF9OworKworK3N0YXRpYyBjb25zdCBB RVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7CisrCQkJLyogRFQgKi8KKysJezB4ODQsMHhj ZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwKKysJIDB4ODQsMHgzYywweDBhLDB4YjMs MHhhOSwweDYzLDB4MTUsMHg1Mn0sCisrCQkJLyogViAqLworKwl7MHhiNiwweGFmLDB4ZTYsMHg4 ZiwweDk5LDB4OWUsMHg5MCwweDY0LAorKwkgMHhkZCwweGM3LDB4N2EsMHhjMSwweGJiLDB4OTAs MHgzYSwweDZkfSwKKysJCQkvKiBSICovCisrCXsweGZjLDB4ODUsMHg2MCwweDlhLDB4MjksMHg2 ZiwweGVmLDB4MjEsCisrCSAweGRkLDB4ODYsMHgyMCwweDMyLDB4OGEsMHgyOSwweDZmLDB4NDd9 CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlbMzJd ID0KKysJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgzYSwKKysJIDB4YTYs MHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKKysJIDB4YjgsMHg3ZSwweGYxLDB4 MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKKysJIDB4ODYsMHgzMiwweGZjLDB4MWYsMHg1ZSwweDFk LDB4MWUsMHg1MH07CisrCisrc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMjU2X21jdF90 diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHgzMSwweDZlLDB4MzUsMHg5YSwweGIxLDB4NDQsMHhm MCwweGVlLAorKwkgMHg2MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5MiwweDRjfSwKKysJ CQkvKiBWICovCisrCXsweDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiwweDRkLDB4YTEsCisr CSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAorKwkJCS8qIFIgKi8K KysJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwKKysJIDB4ZTcsMHhm MywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0KKyt9OworKworK3N0YXRpYyB2b2lkIGR1 bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikKKysgICAgeworKyAgICB3aGlsZShuLS0g PiAwKQorKwl7CisrCXByaW50ZigiICUwMngiLCpiKyspOworKwl9CisrICAgIH0KKysKKytzdGF0 aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1bnNpZ25l ZCBjaGFyICpleHBlY3RlZCwKKysJCSAgICBpbnQgbikKKysgICAgeworKyAgICBpbnQgaTsKKysK KysgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQorKwlpZihyZXN1bHRbaV0gIT0gZXhwZWN0ZWRb aV0pCisrCSAgICB7CisrCSAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsKKysJ ICAgIGR1bXAocmVzdWx0LG4pOworKwkgICAgcHV0cygiXG4gICAgICAgICAgICAgICBleHBlY3Rl ZDoiKTsKKysJICAgIGR1bXAoZXhwZWN0ZWQsbik7CisrCSAgICBwdXRjaGFyKCdcbicpOworKwkg ICAgRVhJVCgxKTsKKysJICAgIH0KKysgICAgfQorKworKworK3N0YXRpYyB2b2lkIHJ1bl90ZXN0 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKKysJCQkJCQkJY29uc3QgQUVT X1BSTkdfTUNUICp0dikKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2 XTsKKysgICAgaW50IGksIGo7CisrICAgIEZJUFNfeDkzMV9yZXNldCgpOworKyAgICBGSVBTX3g5 MzFfdGVzdF9tb2RlKCk7CisrICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysg ICAgRklQU194OTMxX3NlZWQodHYtPlYsIDE2KTsKKysgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2 KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCisrCXsKKysgICAgCUZJUFNfeDkz MV9zZXRfZHQoZHQpOworKwlGSVBTX3g5MzFfYnl0ZXMoYnVmLCAxNik7CisrCS8qIEluY3JlbWVu dCBEVCAqLworKwlmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCisrCQl7CisrCQlkdFtqXSsrOwor KwkJaWYgKGR0W2pdKQorKwkJCWJyZWFrOworKwkJfQorKwl9CisrCisrICAgIGNvbXBhcmUoYnVm LHR2LT5SLCAxNik7CisrICAgIH0KKysKKytpbnQgbWFpbigpCisrCXsKKysJcnVuX3Rlc3QoYWVz XzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcg dGVzdCAxIGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVzXzE5 Ml9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7CisrCXJ1bl90 ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7CisrCXByaW50ZigiRklQ UyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKKysJcmV0dXJuIDA7CisrCX0KKysKKysjZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCistLS0gb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTQtMTAt MTYgMTM6MTk6MzUuMTAyMzA2NDkxICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Zp cHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMjMwNjQ5MSArMDIw MAorQEAgLTAsMCArMSw0NDQgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKwor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbltdID0K KysiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4MzhceEFDXHgyQlx4 OURceEE4XHg3MSIKKysiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4NDNceEE0XHg0MFx4 RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKKysiXHgxRlx4QjhceERGXHhCQVx4QUZceDAzXHg1Q1x4 MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKKysiXHg0OFx4NzZceEVEXHg1Mlx4 MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIKKysiXHg3Rlx4 QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhCN1x4RDlceDNBXHgy NSIKKysiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIyXHg0 NVx4NDVceDk4XHgzOSIKKysiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVceDFGXHg1 Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKKysiXHg3Rlx4RTJceDUzXHg3Mlx4OThceENBXHgy QVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKKysiXHhDQiI7CisrCisrc3Rh dGljIGludCBjb3JydXB0X3JzYTsKKysKKytzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtleSkK KysgICAgeworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgxMSI7Cisr CisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9CisrIlx4MDBceEE1XHhEQVx4 RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0QiCisrIlx4 RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFceDU3XHg5 Nlx4NDEiCisrIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVceDc0XHg1 RVx4NUNceDM5XHgyNlx4NjkiCisrIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlceDM5XHhF M1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCisrIlx4QzlceDdGXHhGM1x4QURceDU5XHg1 MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCisrIlx4NDRceEU1XHg2 QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1XHhEMlx4MEEiCisr Ilx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4Q0VceEND XHg0OFx4OTQiCisrIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZceDNB XHg0Qlx4QzhceDVCXHgxQ1x4QjMiCisrIlx4QzEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBwW10gPQorKyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhCM1x4Qzlc eDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgorKyJceDAxXHg5OVx4RUJceDlGXHg0NFx4QUVc eEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgorKyJceDMyXHgxMlx4NEVc eEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4MDRceDBBIgorKyJc eDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJBXHg1OFx4 RkJceDY1IgorKyJceDk5IjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtd ID0KKysiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJceDMzXHhF QVx4QUFceEQxXHhEOSIKKysiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFceEQwXHg1 QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKKysiXHg4Nlx4OThceDQwXHhCNFx4MTZceDY2XHhC NFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKKysiXHhDRlx4Q0VceDMzXHg1 Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgxNSIKKysiXHgw MyI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9CisrIlx4NTRc eDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4 NUEiCisrIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4 NTFceEYyXHhCMVx4M0UiCisrIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4 NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCisrIlx4MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4 NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQorKyJceDQ3XHgxRVx4MDJceDkwXHhGRlx4MEFc eEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgorKyJceDYxXHhBRFx4QkRc eDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3IgorKyJc eEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4 MjJceDBEIgorKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5XHgyNFx4 NUFceDk4XHgzNlx4REFceDNEIjsKKysgICAgCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGlxbXBbXSA9CisrIlx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgxOVx4OERc eDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCisrIlx4QjNceDgwXHhGMlx4NzFceEY3XHgzNFx4NTNc eDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCisrIlx4OUZceEM5XHg4Nlx4MzJc eDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCisrIlx4OUVc eDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5XHg4MFx4 MzkiCisrIlx4RjciOworKworKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9mKG4pLTEs IGtleS0+bik7CisrICAgIGlmIChjb3JydXB0X3JzYSkKKysJQk5fc2V0X2JpdChrZXktPm4sIDEw MjQpOworKyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ZSk7Cisr ICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKKysgICAga2V5 LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBrZXktPnApOworKyAgICBrZXktPnEgPSBC Tl9iaW4yYm4ocSwgc2l6ZW9mKHEpLTEsIGtleS0+cSk7CisrICAgIGtleS0+ZG1wMSA9IEJOX2Jp bjJibihkbXAxLCBzaXplb2YoZG1wMSktMSwga2V5LT5kbXAxKTsKKysgICAga2V5LT5kbXExID0g Qk5fYmluMmJuKGRtcTEsIHNpemVvZihkbXExKS0xLCBrZXktPmRtcTEpOworKyAgICBrZXktPmlx bXAgPSBCTl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFtcCk7CisrICAgIHJl dHVybiAxOworKyAgICB9CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKKysgICAgeworKyAg ICBjb3JydXB0X3JzYSA9IDE7CisrICAgIH0KKysKKysvKiBLbm93biBBbnN3ZXIgVGVzdCAoS0FU KSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcKKysgKiBrYXRfdGJz LgorKyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9ICJPcGVu U1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FUIjsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7CisrICAweDJELCAweEFGLCAweDZFLCAw eEMyLCAweDk4LCAweEZCLCAweDhBLCAweEExLCAweEI5LCAweDQ2LCAweERBLCAweDBGLAorKyAg MHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhDMiwgMHg1NSwgMHgyNywgMHhFNCwgMHgxRCwgMHhE MiwgMHg5MCwgMHhCQiwKKysgIDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4NTEsIDB4 QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4RjgsIDB4RDMsCisrICAweEQxLCAweERGLCAweEU3LCAw eEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAorKyAg MHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1MSwgMHg2 MCwgMHhEMCwgMHhBNywKKysgIDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4 MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4RjUsCisrICAweEI2LCAweEYzLCAweEYyLCAw eDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAorKyAg MHgwQSwgMHhFOSwgMHg4RSwgMHgzOCwgMHhENywgMHgxOCwgMHhDNiwgMHgyQSwgMHgwRiwgMHhG OCwgMHhCNywgMHgzMSwKKysgIDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4 RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEsIDB4RTgsCisrICAweDIzLCAweEI1LCAweDdGLCAw eERDLCAweDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAorKyAg MHgyNiwgMHhDNiwgMHg3OSwgMHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhBOQorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7CisrICAw eDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAweEM1 LCAweDU4LCAweEE3LAorKyAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgy QywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKKysgIDB4QjEsIDB4OUUsIDB4RDIsIDB4 NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCisrICAw eDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAweDU0 LCAweDFDLCAweDg5LAorKyAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgy RSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKKysgIDB4QjEsIDB4RTYsIDB4N0IsIDB4 QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCisrICAw eDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAweDYy LCAweEQxLCAweEI1LAorKyAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhE MiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKKysgIDB4NTgsIDB4RDIsIDB4NzQsIDB4 ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCisrICAw eEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAweDk1 LCAweEMwLCAweDAwLAorKyAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwgMHhF RSwgMHhDMAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1Nf U0hBMjU2W10gPSB7CisrICAweDZELCAweDNELCAweEJFLCAweDhGLCAweDYwLCAweDZELCAweDI1 LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAweDg5LAorKyAgMHgwMCwgMHg5NywgMHhGQSwgMHg5 OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywgMHg4RiwKKysgIDB4 N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIsIDB4OEQsIDB4N0Qs IDB4NzMsIDB4MjgsCisrICAweEMxLCAweDc3LCAweEM2LCAweDI3LCAweDk3LCAweDAwLCAweDhC LCAweDAwLCAweEEzLCAweDk2LCAweDczLCAweDRFLAorKyAgMHg3RCwgMHgyRSwgMHgyQywgMHgz NCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0NywgMHgwNSwKKysgIDB4 QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQs IDB4MjYsIDB4QkEsCisrICAweDJGLCAweDdBLCAweDU0LCAweDUzLCAweDRFLCAweEVELCAweDcx LCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAweEI2LAorKyAgMHgwQiwgMHg0NywgMHgzNCwgMHhB RiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwKKysgIDB4 MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIs IDB4RTQsIDB4NkQsCisrICAweDVGLCAweEI3LCAweDAxLCAweERGLCAweEMzLCAweDExLCAweDZD LCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAweEY2LAorKyAgMHg3MiwgMHhGNCwgMHhGNiwgMHhF RiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7CisrICAweDQwLCAweEZCLCAweEExLCAweDIx LCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAorKyAgMHhF QywgMHgxQywgMHhDNCwgMHhDOCwgMHg3QywgMHgyMiwgMHg2NSwgMHg5QywgMHg1NywgMHg0NSwg MHhDRCwgMHg1RSwKKysgIDB4ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4REMs IDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4Q0QsCisrICAweEFBLCAweDI1LCAweEY0LCAweEIy LCAweEZDLCAweEYwLCAweDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAorKyAgMHg2 RiwgMHgwMiwgMHhFRiwgMHhDMSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwgMHhEQywg MHg0MiwgMHg2QywKKysgIDB4QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4RTYs IDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4RkIsCisrICAweDkxLCAweENBLCAweEY1LCAweDcw LCAweEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAorKyAgMHgz QSwgMHhCRSwgMHg4OSwgMHgzOCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwgMHhBRCwg MHg0MiwgMHg4OSwKKysgIDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4RkMsIDB4Mzgs IDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4NkYsCisrICAweDQ4LCAweEY2LCAweEFFLCAweEQ3 LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAorKyAgMHg0 OCwgMHg0NCwgMHhFRSwgMHgxRiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7CisrICAweDA3 LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFFLCAw eDYzLCAweDhDLAorKyAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwg MHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKKysgIDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMs IDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCisrICAweDRC LCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5LCAw eDIzLCAweDM5LAorKyAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwg MHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKKysgIDB4N0MsIDB4RTMsIDB4N0YsIDB4RUQs IDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCisrICAweDU3 LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAweEIwLCAw eDg1LCAweDEzLAorKyAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwg MHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKKysgIDB4MkQsIDB4NjAsIDB4RjUsIDB4NEMs IDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4RkUsCisrICAweDc2 LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAweDdGLCAweDgwLCAw eEMyLCAweDg4LAorKyAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwg MHg4QgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEExW10g PSB7CisrICAweDcxLCAweEVFLCAweDFBLCAweEMwLCAweEZFLCAweDAxLCAweDkzLCAweDU0LCAw eDc5LCAweDVDLCAweEYyLCAweDRDLAorKyAgMHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwgMHg4Riwg MHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKKysgIDB4RTcsIDB4RkQs IDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4 Q0YsCisrICAweERDLCAweDIyLCAweDM3LCAweDhFLCAweEQwLCAweEUxLCAweEFFLCAweDA5LCAw eEUzLCAweDNELCAweDFFLCAweEY4LAorKyAgMHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwgMHhFQywg MHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKKysgIDB4MjAsIDB4MjIs IDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4 QkEsCisrICAweEE5LCAweDlFLCAweEU4LCAweEIxLCAweDhBLCAweDYyLCAweDE2LCAweEJGLCAw eDRFLCAweENBLCAweDJFLCAweDRFLAorKyAgMHhCQywgMHgyOSwgMHhBOCwgMHg2NywgMHgxMywg MHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKKysgIDB4MzUsIDB4MDcs IDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4 MUYsCisrICAweDcyLCAweDA1LCAweERFLCAweEU2LCAweEU4LCAweDdGLCAweDMzLCAweDhBLCAw eDc2LCAweDRCLCAweDJGLCAweDk1LAorKyAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwg MHhEOSwgMHg0NiwgMHhCNAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9TSEEyMjRbXSA9IHsKKysgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUs IDB4NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4RjksCisrICAweDI1LCAweEJCLCAweEZB LCAweEQ0LCAweDNBLCAweDM0LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAweDE4LCAweDhELAor KyAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwgMHhDNSwg MHgxQSwgMHhDNSwgMHg4OSwKKysgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAs IDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCisrICAweEE0LCAweDAyLCAweEFE LCAweEIxLCAweDZELCAweDQ0LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAweDQxLCAweEU1LAor KyAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwgMHg1RSwg MHgwQiwgMHhBOSwgMHhDQywKKysgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDksIDB4MjUs IDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCisrICAweDBCLCAweDQ0LCAweDRD LCAweDQ2LCAweDk1LCAweEY0LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAweDNFLCAweEIyLAor KyAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwgMHhDMCwg MHg2NiwgMHhFNiwgMHgzNSwKKysgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcsIDB4NUUsIDB4MDIs IDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCisrICAweDQwLCAweDIxLCAweDg5 LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAweDhECisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0geworKyAgMHgwRCwgMHg1NSwgMHhFMiwgMHhB QSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywKKysgIDB4 RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4N0Is IDB4QUEsIDB4MjMsCisrICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1LCAweDE2 LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAorKyAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4 NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKKysgIDB4 MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAs IDB4MkQsIDB4MTgsCisrICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5LCAweDFE LCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAorKyAgMHhCRSwgMHgyMiwgMHhDNywgMHhE MywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKKysgIDB4 N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEs IDB4QTYsIDB4MzgsCisrICAweEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlELCAweENF LCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAorKyAgMHgyNywgMHg0OCwgMHgyQiwgMHhG NSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKKysgIDB4 QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7CisrICAweDFELCAw eEUzLCAweDZBLCAweERELCAweDI3LCAweDRDLCAweEMwLCAweEE1LCAweDI3LCAweEVGLCAweEU2 LCAweDFGLAorKyAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5 OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywKKysgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4 RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCisrICAweEE3LCAw eDY1LCAweDUyLCAweDhBLCAweEM4LCAweDQ0LCAweDdFLCAweDg2LCAweDVELCAweEE5LCAweEE2 LCAweDU1LAorKyAgMHg2NSwgMHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3 OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwKKysgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4 RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCisrICAweDFCLCAw eDJCLCAweEIwLCAweDgyLCAweDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUyLCAweDdELCAweEVC LCAweDhDLAorKyAgMHhGRiwgMHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwgMHhC RiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwKKysgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4 REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCisrICAweDE2LCAw eDI4LCAweDI0LCAweDY0LCAweDA0LCAweDM5LCAweDJELCAweDU4LCAweDFFLCAweDM3LCAweERD LCAweDA0LAorKyAgMHhCRCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1NiwgMHhC RgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9 IHsKKysgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIsIDB4 MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCisrICAweDQ5LCAweDI1LCAweDRBLCAweEExLCAweDZBLCAw eDc3LCAweDRDLCAweDM2LCAweDQwLCAweEY4LCAweEIyLCAweDlBLAorKyAgMHgxNSwgMHhFQSwg MHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgzMiwgMHhG MSwKKysgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4QjYsIDB4 NEMsIDB4NTQsIDB4OUYsIDB4RDgsCisrICAweDhELCAweENDLCAweEFDLCAweDhBLCAweEJCLCAw eDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUzLCAweDYyLCAweEI1LAorKyAgMHg4MCwgMHhFMiwg MHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5MiwgMHg2 QiwKKysgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4REYsIDB4 MUIsIDB4MUQsIDB4NDcsIDB4RTYsCisrICAweDU5LCAweDU2LCAweEE1LCAweEI5LCAweDVDLCAw eEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYzLCAweDg0LCAweDA1LAorKyAgMHg2RiwgMHgwRSwg MHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwgMHgy RCwKKysgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4MkQsIDB4 QUIsIDB4OTgsIDB4NjUsIDB4OTEsCisrICAweERGLCAweDcwLCAweDE0LCAweEE1LCAweDNGLCAw eDM2LCAweEFCLCAweDg0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1g5MzFfU0hBMVtdID0geworKyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4 MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKKysgIDB4RTksIDB4MkQsIDB4 RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUs CisrICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEyLCAweDFFLCAweDFF LCAweDE0LCAweEI4LCAweEFDLAorKyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1QywgMHhG OCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKKysgIDB4NzAsIDB4RkIsIDB4 NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYs CisrICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3LCAweEI0LCAweDBFLCAweENDLCAweEIx LCAweDFBLCAweDExLCAweDE5LAorKyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwgMHhC QywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhENywKKysgIDB4NkYsIDB4NEMsIDB4 M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTks CisrICAweDQ4LCAweEFGLCAweDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAweERC LCAweEVBLCAweEVELCAweDc2LAorKyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgx NCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2NywKKysgIDB4QTMsIDB4MjksIDB4 ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKKyt9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKKysgIDB4N0UsIDB4QTIsIDB4 NzcsIDB4RkUsIDB4QjgsIDB4NTQsIDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQsIDB4ODks CisrICAweEU1LCAweDUyLCAweDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAweDU4 LCAweDkyLCAweDFDLCAweERELAorKyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2 MiwgMHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKKysgIDB4MTYsIDB4NzYsIDB4 NjgsIDB4RjYsIDB4QzYsIDB4NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0IsIDB4QzgsIDB4OUIs CisrICAweEM2LCAweDUzLCAweDg4LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2LCAweDEz LCAweEI4LCAweEYwLCAweDRCLAorKyAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywgMHg1 MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKKysgIDB4QUQsIDB4NEUsIDB4 NDksIDB4MkMsIDB4RDcsIDB4NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTksIDB4MDEsIDB4RUMs CisrICAweDdFLCAweDc1LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2LCAweDg1LCAweDQ2 LCAweDhELCAweEEwLCAweDhDLAorKyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgwMywgMHhF QSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKKysgIDB4MjEsIDB4RUQsIDB4 OEQsIDB4QkMsIDB4QkMsIDB4REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIsIDB4REMs CisrICAweEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0LCAweDgwCisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0W10gPSB7 CisrICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDExLCAweDM4LCAweEJC LCAweDdCLCAweEVDLCAweDdCLAorKyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhCRCwgMHhF RiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwgMHgzNywgMHhDQiwKKysgIDB4RTYsIDB4NEYsIDB4 NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUsIDB4MkUsIDB4RTMs CisrICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlDLCAweDhFLCAweEQ3 LCAweDRBLCAweDYzLCAweEY2LAorKyAgMHg1NywgMHhDMiwgMHhCMCwgMHgwOCwgMHg1MSwgMHg3 MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2NiwgMHhFRSwgMHgzMSwKKysgIDB4RDgsIDB4NjksIDB4 RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQsIDB4RjEs CisrICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4LCAweERELCAweDJCLCAweEQ1LCAweEEw LCAweDYwLCAweDQxLCAweDc5LAorKyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhCNywgMHhCRiwgMHg0 NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwgMHg3QywgMHhGRiwKKysgIDB4MEUsIDB4MDksIDB4 RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIsIDB4NDQsIDB4MzUs CisrICAweEVGLCAweDAxLCAweEU2LCAweDVFLCAweDM5LCAweDMxLCAweDJELCAweDcxLCAweEE1 LCAweERDLCAweEM2LCAweDZELAorKyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhEQiwgMHg3MywgMHg4 MiwgMHg2NSwgMHgyOAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JT QV9YOTMxX1NIQTUxMltdID0geworKyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhC MywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKKysgIDB4RkMsIDB4QTEsIDB4 QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMs CisrICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFBLCAweDA1 LCAweDlFLCAweDc3LCAweEQ3LAorKyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0 QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKKysgIDB4QTAsIDB4OTksIDB4 NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUs CisrICAweDZFLCAweDJCLCAweDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAweDM0 LCAweDUzLCAweEQyLCAweEFGLAorKyAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhG NiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKKysgIDB4Q0UsIDB4OEEsIDB4 NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDks CisrICAweDlGLCAweDA5LCAweENBLCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAweDA0 LCAweDJELCAweEZCLCAweDdDLAorKyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywgMHhG RCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKKysgIDB4NjAsIDB4ODMsIDB4 MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKKyt9OworKworKworK2ludCBGSVBTX3Nl bGZ0ZXN0X3JzYSgpCisrCXsKKysJaW50IHJldCA9IDA7CisrCVJTQSAqa2V5OworKwlFVlBfUEtF WSAqcGsgPSBOVUxMOworKworKwlpZiAoKGtleT1SU0FfbmV3KCkpID09IE5VTEwpCisrCQlnb3Rv IGVycjsKKysJc2V0cnNha2V5KGtleSk7CisrCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5V TEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKKysK KysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCisrCQkJ CUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMSBQ S0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyMjQsIHNp emVvZihrYXRfUlNBX1NIQTIyNCksCisrCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyMjQgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAorKwkJ CQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hB MjU2IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTM4 NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKKysJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkKKysJCWdvdG8gZXJy OworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUxMiks CisrCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJT QSBTSEE1MTIgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9S U0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMSBQU1MiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9Q U1NfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywK KysJCQkJIlJTQSBTSEEyMjQgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWth dF9SU0FfUFNTX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksCisrCQkJCUVWUF9z aGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMjU2IFBTUyIp KQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEzODQsIHNpemVv ZihrYXRfUlNBX1BTU19TSEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTM4NCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwK KysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBT SEE1MTIgUFNTIikpCisrCQlnb3RvIGVycjsKKysKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9Y OTMxX1NIQTEsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMSksCisrCQkJRVZQX3NoYTEoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMSBYOTMxIikpCisrCQlnb3RvIGVy cjsKKysJLyogTkI6IFNIQTIyNCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCisrCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAor KwkJCWthdF9SU0FfWDkzMV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwKKysJ CQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTI1 NiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTM4 NCwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQpLAorKwkJCUVWUF9zaGEzODQoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkKKysJCWdvdG8gZXJy OworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9YOTMx X1NIQTUxMiksCisrCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisr CQkJIlJTQSBTSEE1MTIgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCisrCisrCXJldCA9IDE7Cisr CisrCWVycjoKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCWVsc2UgaWYgKGtl eSkKKysJCVJTQV9mcmVlKGtleSk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYgLyog ZGVmIE9QRU5TU0xfRklQUyAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcnNh X3g5MzFnLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5j LmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDIzMDY0OTEgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAy MzA2NDkxICswMjAwCitAQCAtMCwwICsxLDI4MiBAQAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5j ICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBp cyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBj cnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMg dG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlz IGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisr ICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmli dXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBu b3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRl ZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0 IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBh bmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90 IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0 LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRo b3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4g dGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICog aW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBh Y2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK KysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmlj IFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBo aWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICog ICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4g SWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZl IHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBj b2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0 c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZ T1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdF UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICog CisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2Fs bHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5u b3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3Bp ZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1 ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8u aD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrCisrZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisr CisrLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCisrCisraW50 IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklH TlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVN ICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJ R05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VO Q0IgKmNiKQorKwl7CisrCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVM TDsKKysJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxMOworKworKwlpZiAoIXJzYSkgCisrCQln b3RvIGVycjsKKysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkgCisrCQlnb3Rv IGVycjsKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7CisrCisrCXIwID0gQk5fQ1RYX2dldChjdHgpOwor KwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIzID0g Qk5fQ1RYX2dldChjdHgpOworKworKwlpZiAocjMgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlp ZiAoIXJzYS0+ZSkKKysJCXsKKysJCXJzYS0+ZSA9IEJOX2R1cChlKTsKKysJCWlmICghcnNhLT5l KQorKwkJCWdvdG8gZXJyOworKwkJfQorKwllbHNlCisrCQllID0gcnNhLT5lOworKworKwkvKiBJ ZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4K KysJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFt ZXRlcnMuCisrCSAqLworKworKwlpZiAoWHAgJiYgIXJzYS0+cCkKKysJCXsKKysJCXJzYS0+cCA9 IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnApCisrCQkJZ290byBlcnI7CisrCisrCQlpZiAoIUJO X1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAorKwkJCQkJWHAsIFhwMSwgWHAy LCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKFhxICYmICFyc2Et PnEpCisrCQl7CisrCQlyc2EtPnEgPSBCTl9uZXcoKTsKKysJCWlmICghcnNhLT5xKQorKwkJCWdv dG8gZXJyOworKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwK KysJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCisrCQkJZ290byBlcnI7CisrCQl9Cisr CisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7Cisr CQlCTl9DVFhfZnJlZShjdHgpOworKwkJcmV0dXJuIDI7CisrCQl9CisrCisrCS8qIFNpbmNlIGJv dGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysJ ICogY29tcG9uZW50cy4KKysJICovCisrCisrCS8qIGNhbGN1bGF0ZSBuICovCisrCXJzYS0+bj1C Tl9uZXcoKTsKKysJaWYgKHJzYS0+biA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5f bXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2Fs Y3VsYXRlIGQgKi8KKysJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJ CWdvdG8gZXJyOwkvKiBwLTEgKi8KKysJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29u ZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBxLTEgKi8KKysJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4 KSkKKysJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCisrCisrCWlmICghQk5fZ2NkKHIzLCBy MSwgcjIsIGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIw LCByMywgY3R4KSkKKysJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysJY3R4 MiA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgyKQorKwkJZ290byBlcnI7CisrCisrCXJzYS0+ ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLworKwlpZiAocnNh LT5kID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEp ICovCisrCXJzYS0+ZG1wMT1CTl9uZXcoKTsKKysJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJ Z290byBlcnI7CisrCWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKKysJCWdv dG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KKysJcnNhLT5kbXExPUJO X25ldygpOworKwlpZiAocnNhLT5kbXExID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFC Tl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNh bGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KKysJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNl KE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKKysKKysJZXJyOgorKwlpZiAoY3R4KQorKwkJewor KwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0 eDIpCisrCQlCTl9DVFhfZnJlZShjdHgyKTsKKysJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxz IHN1Y2Nlc3NmdWwgKi8KKysJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKKysJCXJldHVy biAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQorKworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9r ZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikK KysJeworKwlpbnQgb2sgPSAwOworKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKKysJ Qk5fQ1RYICpjdHggPSBOVUxMOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNf bW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJiAKKysJ CShiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJICAgIHsKKysJ ICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfS0VZX1RP T19TSE9SVCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysKKysJaWYgKGJpdHMgJiAweGZm KQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VY LEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9Cisr CisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJ UFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVE KTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNlbmRpZgorKworKwljdHggPSBCTl9DVFhf bmV3KCk7CisrCWlmICghY3R4KQorKwkJZ290byBlcnJvcjsKKysKKysJQk5fQ1RYX3N0YXJ0KGN0 eCk7CisrCVhwID0gQk5fQ1RYX2dldChjdHgpOworKwlYcSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJ aWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0eCkpCisrCQlnb3RvIGVy cm9yOworKworKwlyc2EtPnAgPSBCTl9uZXcoKTsKKysJcnNhLT5xID0gQk5fbmV3KCk7CisrCWlm ICghcnNhLT5wIHx8ICFyc2EtPnEpCisrCQlnb3RvIGVycm9yOworKworKwkvKiBHZW5lcmF0ZSB0 d28gcHJpbWVzIGZyb20gWHAsIFhxICovCisrCisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmlt ZV9leChyc2EtPnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhwLAorKwkJCQkJZSwgY3R4LCBj YikpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgo cnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcSwKKysJCQkJCWUsIGN0eCwgY2IpKQor KwkJZ290byBlcnJvcjsKKysKKysJLyogU2luY2UgcnNhLT5wIGFuZCByc2EtPnEgYXJlIHZhbGlk IHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCisrCSAqIHJlbWFpbmluZyBSU0EgY29tcG9uZW50 cy4KKysJICovCisrCisrCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwKKysJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgZSwg Y2IpKQorKwkJZ290byBlcnJvcjsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKCFmaXBz X2NoZWNrX3JzYShyc2EpKQorKwkgICAgZ290byBlcnJvcjsKKysjZW5kaWYKKysKKysJb2sgPSAx OworKworKwllcnJvcjoKKysJaWYgKGN0eCkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJ CUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCisrCWlmIChvaykKKysJCXJldHVybiAxOworKwor KwlyZXR1cm4gMDsKKysKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19zaGFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNf c2hhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3NoYV9z ZWxmdGVzdC5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDIzMDY0OTEgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTQtMTAtMTYg MTM6MTk6MzUuMTAyMzA2NDkxICswMjAwCitAQCAtMCwwICsxLDE0MCBAQAorKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgor KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwor KyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgor KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3NoYS5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgY29uc3QgY2hhciB0ZXN0 W11bNjBdPQorKyAgICB7CisrICAgICIiLAorKyAgICAiYWJjIiwKKysgICAgImFiY2RiY2RlY2Rl ZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgorKyAgICB9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RIXT0K KysgICAgeworKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4ZWUsMHg1ZSwweDZiLDB4NGIsMHgwZCww eDMyLDB4NTUsCisrICAgICAgMHhiZiwweGVmLDB4OTUsMHg2MCwweDE4LDB4OTAsMHhhZiwweGQ4 LDB4MDcsMHgwOSB9LAorKyAgICB7IDB4YTksMHg5OSwweDNlLDB4MzYsMHg0NywweDA2LDB4ODEs MHg2YSwweGJhLDB4M2UsCisrICAgICAgMHgyNSwweDcxLDB4NzgsMHg1MCwweGMyLDB4NmMsMHg5 YywweGQwLDB4ZDgsMHg5ZCB9LAorKyAgICB7IDB4ODQsMHg5OCwweDNlLDB4NDQsMHgxYywweDNi LDB4ZDIsMHg2ZSwweGJhLDB4YWUsCisrICAgICAgMHg0YSwweGExLDB4ZjksMHg1MSwweDI5LDB4 ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAorKyAgICB9OworKworK3N0YXRpYyBpbnQgY29ycnVw dF9zaGE7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCisrICAgIHsKKysgICAgY29ycnVw dF9zaGEgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCisrICAgIHsK KysgICAgaW50IG47CisrCisrICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2YodGVz dFswXSkgOyArK24pCisrCXsKKysJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07 CisrCisrCUVWUF9EaWdlc3QodGVzdFtuXSxzdHJsZW4odGVzdFtuXSkrY29ycnVwdF9zaGEsbWQs IE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOworKwlpZihtZW1jbXAobWQscmV0W25dLHNpemVvZiBt ZCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsRklQ U19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAg ICByZXR1cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19z aGEyNTZbXSA9IHsgMHhmYSwgMHg0OCwgMHg1OSwgMHgyYSwgMHhlMSwgMHhhZSwgMHgxZiwgMHgz MCwKKysJCQkJCSAgICAweGZjIH07Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnX3No YTI1NltdID0geyAweGY3LCAweDI2LCAweGQ4LCAweDk4LCAweDQ3LCAweDkxLCAweDY4LCAweDVi LAorKwkJCQkJICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUsIDB4YmYsIDB4 MDEsCisrCQkJCQkgICAgMHgxNywgMHgwYywgMHg4NCwgMHgwMCwgMHgwMSwgMHg3YSwgMHg5NCwg MHg4MywKKysJCQkJCSAgICAweGYzLCAweDBiLCAweDE1LCAweDg0LCAweDRiLCAweDY5LCAweDg4 LCAweDhhIH07CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTUxMltdID0g eyAweDM3LCAweGQxLCAweDM1LCAweDlkLCAweDE4LCAweDQxLCAweGU5LCAweGI3LAorKwkJCQkJ ICAgIDB4NmQsIDB4OWEsIDB4MTMsIDB4ZGEsIDB4NWYsIDB4ZjMsIDB4YmQgfTsKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhNTEyW10gPSB7IDB4MTEsIDB4MTMsIDB4YzQsIDB4 MTksIDB4ZWQsIDB4MmIsIDB4MWQsIDB4MTYsCisrCQkJCQkgICAgMHgxMSwgMHhlYiwgMHg5Yiwg MHhiZSwgMHhmMCwgMHg3ZiwgMHhjZiwgMHg0NCwKKysJCQkJCSAgICAweDhiLCAweGQ3LCAweDU3 LCAweGJkLCAweDhkLCAweGE5LCAweDI1LCAweGIwLAorKwkJCQkJICAgIDB4NDcsIDB4MjUsIDB4 ZDYsIDB4NmMsIDB4OWEsIDB4NTQsIDB4N2YsIDB4OGYsCisrCQkJCQkgICAgMHgwYiwgMHg1Mywg MHgxYSwgMHgxMCwgMHg2OCwgMHgzMiwgMHgwMywgMHgzOCwKKysJCQkJCSAgICAweDgyLCAweGM0 LCAweDg3LCAweGM0LCAweGVhLCAweDBlLCAweGQxLCAweDA0LAorKwkJCQkJICAgIDB4YTksIDB4 OTgsIDB4YzEsIDB4MDUsIDB4YTMsIDB4ZjMsIDB4ZjgsIDB4YjEsCisrCQkJCQkgICAgMHhhZiwg MHhiYywgMHhkOSwgMHg3OCwgMHg3ZSwgMHhlZSwgMHgzZCwgMHg0MyB9OworKworK2ludCBGSVBT X3NlbGZ0ZXN0X3NoYTIodm9pZCkKKysJeworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdF U1RfTEVOR1RIXTsKKysKKysJRVZQX0RpZ2VzdChtc2dfc2hhMjU2LCBzaXplb2YobXNnX3NoYTI1 NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpOworKwlpZihtZW1jbXAoZGlnX3NoYTI1 NiwgbWQsIHNpemVvZihkaWdfc2hhMjU2KSkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQor KworKwlFVlBfRGlnZXN0KG1zZ19zaGE1MTIsIHNpemVvZihtc2dfc2hhNTEyKSwgbWQsIE5VTEws IEVWUF9zaGE1MTIoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChkaWdfc2hhNTEyLCBtZCwgc2l6ZW9m KGRpZ19zaGE1MTIpKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCXJldHVybiAx OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9m aXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlw c19zdGFuZGFsb25lX2htYWMuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNf c3RhbmRhbG9uZV9obWFjLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMjMwNjQ5MSArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMJ MjAxNC0xMC0xNiAxMzoxOTozNS4xMDIzMDY0OTEgKzAyMDAKK0BAIC0wLDAgKzEsMjM2IEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1 ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2htYWMuaD4KKysKKysjaWZuZGVmIEZJUFNDQU5JU1RFUl9PCisraW50IEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkgeyByZXR1cm4gMDsgfQorK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygpIHt9 CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBibl9tdWxfbW9udF9mcHU2 NChCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLCBj b25zdCBCTl9VTE9ORyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkgeyByZXR1cm4g MDsgfTsKKytpbnQgYm5fbXVsX21vbnRfaW50KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcg KmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsIGNvbnN0IEJOX1VMT05HICpucCwgY29uc3QgQk5fVUxP TkcgKm4wLCBpbnQgbnVtKSB7IHJldHVybiAwOyB9OworKworKyNpZglkZWZpbmVkKF9faTM4Nikg ICB8fCBkZWZpbmVkKF9faTM4Nl9fKSAgIHx8IGRlZmluZWQoX01fSVg4NikgfHwgXAorKwlkZWZp bmVkKF9fSU5URUxfXykgfHwgXAorKwlkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2 XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQorKworK3Vuc2ln bmVkIGludCAgT1BFTlNTTF9pYTMyY2FwX1BbMl07CisrdW5zaWduZWQgbG9uZyAqT1BFTlNTTF9p YTMyY2FwX2xvYyh2b2lkKQorK3sgICBpZiAoc2l6ZW9mKGxvbmcpPT00KQorKwkvKgorKwkgKiBJ ZiAzMi1iaXQgYXBwbGljYXRpb24gcHVsbHMgYWRkcmVzcyBvZiBPUEVOU1NMX2lhMzJjYXBfUFsw XQorKwkgKiBjbGVhciBzZWNvbmQgZWxlbWVudCB0byBtYWludGFpbiB0aGUgaWxsdXNpb24gdGhh dCB2ZWN0b3IKKysJICogaXMgMzItYml0LgorKwkgKi8KKysJT1BFTlNTTF9pYTMyY2FwX1BbMV09 MDsKKysgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nICopT1BFTlNTTF9pYTMyY2FwX1A7CisrfQor KworKyNpZiBkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKSAmJiAhZGVmaW5lZChPUEVOU1NMX05P X0FTTSkgJiYgIWRlZmluZWQoSTM4Nl9PTkxZKQorKyNkZWZpbmUgT1BFTlNTTF9DUFVJRF9TRVRV UAorKyNpZiBkZWZpbmVkKF9XSU4zMikKKyt0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgSUEzMkNB UDsKKysjZWxzZQorK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElBMzJDQVA7CisrI2VuZGlm Cisrdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCisreyBzdGF0aWMgaW50IHRyaWdnZXI9 MDsKKysgIElBMzJDQVAgT1BFTlNTTF9pYTMyX2NwdWlkKHZvaWQpOworKyAgSUEzMkNBUCB2ZWM7 CisrICBjaGFyICplbnY7CisrCisrICAgIGlmICh0cmlnZ2VyKQlyZXR1cm47CisrCisrICAgIHRy aWdnZXI9MTsKKysgICAgaWYgKChlbnY9Z2V0ZW52KCJPUEVOU1NMX2lhMzJjYXAiKSkpIHsKKysJ aW50IG9mZiA9IChlbnZbMF09PSd+Jyk/MTowOworKyNpZiBkZWZpbmVkKF9XSU4zMikKKysJaWYg KCFzc2NhbmYoZW52K29mZiwiJUk2NGkiLCZ2ZWMpKSB2ZWMgPSBzdHJ0b3VsKGVuditvZmYsTlVM TCwwKTsKKysjZWxzZQorKwlpZiAoIXNzY2FuZihlbnYrb2ZmLCIlbGxpIiwobG9uZyBsb25nICop JnZlYykpIHZlYyA9IHN0cnRvdWwoZW52K29mZixOVUxMLDApOworKyNlbmRpZgorKwlpZiAob2Zm KSB2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoKSZ+dmVjOworKyAgICB9CisrICAgIGVsc2UKKysJ dmVjID0gT1BFTlNTTF9pYTMyX2NwdWlkKCk7CisrCisrICAgIC8qCisrICAgICAqIHwoMTw8MTAp IHNldHMgYSByZXNlcnZlZCBiaXQgdG8gc2lnbmFsIHRoYXQgdmFyaWFibGUKKysgICAgICogd2Fz IGluaXRpYWxpemVkIGFscmVhZHkuLi4gVGhpcyBpcyB0byBhdm9pZCBpbnRlcmZlcmVuY2UKKysg ICAgICogd2l0aCBjcHVpZCBzbmlwcGV0cyBpbiBFTEYgLmluaXQgc2VnbWVudC4KKysgICAgICov CisrICAgIE9QRU5TU0xfaWEzMmNhcF9QWzBdID0gKHVuc2lnbmVkIGludCl2ZWN8KDE8PDEwKTsK KysgICAgT1BFTlNTTF9pYTMyY2FwX1BbMV0gPSAodW5zaWduZWQgaW50KSh2ZWM+PjMyKTsKKyt9 CisrI2VuZGlmCisrCisrI2Vsc2UKKyt1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9j KHZvaWQpIHsgcmV0dXJuIE5VTEw7IH0KKysjZW5kaWYKKytpbnQgT1BFTlNTTF9OT05QSUNfcmVs b2NhdGVkID0gMDsKKysjaWYgIWRlZmluZWQoT1BFTlNTTF9DUFVJRF9TRVRVUCkgJiYgIWRlZmlu ZWQoT1BFTlNTTF9DUFVJRF9PQkopCisrdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpIHt9 CisrI2VuZGlmCisrCisrc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1Nl9DVFggKm1kX2N0eCxT SEEyNTZfQ1RYICpvX2N0eCwKKysJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKKysgICAgeworKyAg ICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOworKyAgICBpbnQgaTsKKysgICAgdW5zaWduZWQgY2hh ciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOworKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFD X01BWF9NRF9DQkxPQ0tdOworKworKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKKysJeworKwlT SEEyNTZfSW5pdChtZF9jdHgpOworKwlTSEEyNTZfVXBkYXRlKG1kX2N0eCxrZXksbGVuKTsKKysJ U0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7CisrCWxlbj1TSEEyNTZfRElHRVNUX0xFTkdUSDsK KysJfQorKyAgICBlbHNlCisrCW1lbWNweShrZXltZCxrZXksbGVuKTsKKysgICAgbWVtc2V0KCZr ZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7CisrCisrICAgIGZvcihpPTAg OyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQorKwlwYWRbaV09MHgzNl5rZXltZFtpXTsK KysgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShtZF9jdHgscGFk LFNIQTI1Nl9DQkxPQ0spOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9D SyA7IGkrKykKKysJcGFkW2ldPTB4NWNea2V5bWRbaV07CisrICAgIFNIQTI1Nl9Jbml0KG9fY3R4 KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7CisrICAgIH0K KysKKytzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNIQTI1Nl9DVFgg Km1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1 ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCisrICAgIFNIQTI1Nl9GaW5hbChidWYsbWRfY3R4 KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7CisrICAgIFNIQTI1 Nl9GaW5hbChtZCxvX2N0eCk7CisrICAgIH0KKysKKysjZW5kaWYKKysKKytpbnQgbWFpbihpbnQg YXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgc3Rh dGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysgICAg aW50IG4sYmluYXJ5PTA7CisrCisrICAgIGlmKGFyZ2MgPCAyKQorKwl7CisrCWZwcmludGYoc3Rk ZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysKKysgICAg bj0xOworKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5IikpCisrCXsKKysJbisrOwor KwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KKysJfQorKworKyAg ICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKKysJeworKwlGSUxFICpmPWZvcGVuKGFyZ3Zbbl0sInJi Iik7CisrCVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1 Nl9ESUdFU1RfTEVOR1RIXTsKKysJaW50IGk7CisrCisrCWlmKCFmKQorKwkgICAgeworKwkgICAg cGVycm9yKGFyZ3Zbbl0pOworKwkgICAgZXhpdCgyKTsKKysJICAgIH0KKysKKysJaG1hY19pbml0 KCZtZF9jdHgsJm9fY3R4LGtleSk7CisrCWZvciggOyA7ICkKKysJICAgIHsKKysJICAgIGNoYXIg YnVmWzEwMjRdOworKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1ZixmKTsKKysK KysJICAgIGlmKGwgPT0gMCkKKysJCXsKKysJCWlmKGZlcnJvcihmKSkKKysJCSAgICB7CisrCQkg ICAgcGVycm9yKGFyZ3Zbbl0pOworKwkJICAgIGV4aXQoMyk7CisrCQkgICAgfQorKwkJZWxzZQor KwkJICAgIGJyZWFrOworKwkJfQorKwkgICAgU0hBMjU2X1VwZGF0ZSgmbWRfY3R4LGJ1ZixsKTsK KysJICAgIH0KKysJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7CisrCisrCWlmIChiaW5h cnkpCisrCSAgICB7CisrCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJR0VTVF9MRU5HVEgsMSxzdGRv dXQpOworKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KKysJICAgIH0K KysKKysvKglwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7ICovCisrCWZvcihpPTAg OyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEggOyArK2kpCisrCSAgICBwcmludGYoIiUwMngiLG1k W2ldKTsKKysJcHJpbnRmKCJcbiIpOworKwl9CisrI2VuZGlmCisrICAgIHJldHVybiAwOworKyAg ICB9CisrCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rf c3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5j CistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcwky MDE0LTEwLTE2IDEzOjE5OjM1LjEwMzMwNjUxNCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAzMzA2NTE0 ICswMjAwCitAQCAtMCwwICsxLDU4OCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICoKKysgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZlciBmb3Ig dGhlIEZJUFMtMTQwIHRlc3RpbmcKKysgKiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2YWxpZGF0 aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCisrICogT3BlblNTTCBsaWJyYXJ5 IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhpYworKyAqIGZ1bmN0 aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxpYmVyYXRl bHkKKysgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFzaAorKyAqCisrICog Q29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCisrICoKKysgKi8KKysjaW5jbHVkZSA8c3Rk aW8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9h ZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysK KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisrICAgIHsKKysgICAgcHJpbnRmKCJObyBG SVBTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrICAgIH0KKysjZWxzZQorKworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysvKiBB RVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2ZXJpZnkgcmVzdWx0IG1h dGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0CisrKi8KKytzdGF0aWMgaW50IEZJUFNfYWVzX3Rlc3Qo dm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFsxNl07Cisr CXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOworKwl1bnNpZ25lZCBjaGFyIGtleVsxNl0gPSB7IDEs MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKKysJdW5zaWduZWQgY2hhciBw bGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Cisr CUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4 LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisrCQlnb3RvIGVy cjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7CisrCWlmIChFVlBf Q2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDAp IDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDE2 KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCisrCQlnb3RvIGVycjsKKysJ cmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlyZXR1 cm4gcmV0OworKwl9CisrCisrc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2b2lkKQorKwl7Cisr CWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOworKwl1bnNpZ25lZCBjaGFy IGNpdG1wWzhdOworKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsgMSwyLDMsNCw1LDYsNyw4 LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCisrCQkgICAgICAgICAgICAgIDE5LDIwLDIx LDIyLDIzLDI0fTsKKysgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10gPSB7ICdlJywgJ3Qn LCAnYScsICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsK KysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZj dHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisrCQlnb3Rv IGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4KTsKKysJaWYgKEVW UF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEws IDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAs IDgpOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQorKwkJZ290byBlcnI7Cisr CXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJcmV0 dXJuIHJldDsKKysJfQorKworKy8qCisrICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2 ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19kc2FfdGVzdChp bnQgYmFkKQorKyAgICB7CisrICAgIERTQSAqZHNhID0gTlVMTDsKKysgICAgRVZQX1BLRVkgcGs7 CisrICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRsYyI7CisrICAgIHVuc2ln bmVkIGNoYXIgYnVmWzYwXTsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIGludCByID0g MDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysg ICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAgZHNhID0gRFNBX25ldygpOworKyAgICBp ZiAoIWRzYSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNf ZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBp ZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJZ290byBlbmQ7CisrICAgIGlmIChiYWQpCisr CSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOworKworKyAgICBway50eXBlID0gRVZQ X1BLRVlfRFNBOworKyAgICBway5wa2V5LmRzYSA9IGRzYTsKKysKKysgICAgaWYgKCFFVlBfU2ln bkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYg KCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisrCWdvdG8g ZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCisr CWdvdG8gZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNz MSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0 eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICByID0gRVZQX1Zl cmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysgICAgRVZQX01E X0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKGRzYSkKKysgIAkgIERTQV9mcmVlKGRzYSk7 CisrICAgIGlmIChyICE9IDEpCisrCXJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQor KworKy8qCisrICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxh aW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQorKyAgICB7 CisrICAgIFJTQSAqa2V5OworKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0ZXh0W10gPSAiZXRh b25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKysgICAgdW5zaWduZWQg aW50IHNsZW47CisrICAgIEJJR05VTSAqYm47CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysgICAg RVZQX1BLRVkgcGs7CisrICAgIGludCByID0gMDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7 CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGtleSA9IFJTQV9uZXcoKTsKKysg ICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFrZXkgfHwgIWJuKQorKwlyZXR1cm4gMDsKKysg ICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4 KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAg ICBpZiAoYmFkKQorKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKKysKKysgICAgcGsudHlw ZSA9IEVWUF9QS0VZX1JTQTsKKysgICAgcGsucGtleS5yc2EgPSBrZXk7CisrCisrICAgIGlmICgh RVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7Cisr ICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRf cHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgs IGJ1ZiwgJnNsZW4sICZwaykpCisrCWdvdG8gZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJ bml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICgh RVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkg LSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwg c2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwor KyAgICBpZiAoa2V5KQorKyAgCSAgICBSU0FfZnJlZShrZXkpOworKyAgICBpZiAociAhPSAxKQor KwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEExOiBnZW5lcmF0 ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHBy ZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTFfdGVzdCgp CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5HVEhdID0K KysgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywgMHgxYSwgMHgxZSwgMHg4 ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwgMHgyYywgMHhlOCwg MHhiMywgMHhjNSwgMHgxOCB9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlz aGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysg ICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0 cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmICht ZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJl dHVybiAxOworKyAgICB9CisrCisrLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRp Z2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3Qg aGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKKysgICAgeworKyAgICB1 bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQorKwl7MHhmNSwgMHg1 MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAweGM5LCAw eDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkxLAorKwkgMHg2LCAweGVjLCAweDhlLCAweDExLCAw eDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2LCAweDUwLCAweDRm LCAweDQ3LCAweDU3fTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsK KysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCisrICAg IEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIp IC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmICht ZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJl dHVybiAxOworKyAgICB9CisrCisrLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRp Z2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3Qg aGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1 bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0gPQorKwl7MHg5OSwgMHhj OSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwgMHg4OCwgMHg1Ziwg MHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKKysJIDB4MTYsIDB4MWYsIDB4M2QsIDB4ZjQs IDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsIDB4ZDAsIDB4ZTcsIDB4 MGIsIDB4OTQsIDB4NGEsCisrCSAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAweDIwLCAweDA2LCAw eGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAweGQ5LCAweDQwLCAweDIy LAorKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgyNywgMHhmZSwgMHhi ZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhM307CisrICAgIHVuc2ln bmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRb U0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAg aWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGE1MTIo KSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQp KSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhN QUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUg dG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQg RklQU19obWFjX3NoYTFfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9 ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsK KysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4NzMsIDB4 ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEsIDB4ZWEsIDB4ZWEs IDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCisrCSAweGIyLCAweGZiLCAweGVjLCAweGM2 fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5z aWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICgh SE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91 dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEy MjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtu b3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNf aG1hY19zaGEyMjRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJl dGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysg ICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4NzUsIDB4NTgs IDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4YmUsIDB4 MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCisrCSAweGU1LCAweDYyLCAweDQ5LCAweGI2LCAw eDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5fTsKKysKKysgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hh MjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1 cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTI1NjogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTI1 Nl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhlOSwgMHgxNywgMHhjMSwgMHg3 YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwgMHgwMiwgMHhmNSwg MHg3MiwgMHgzMywgMHg4NywKKysJIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2IsIDB4N2UsIDB4YTgs IDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYsIDB4ZGEsIDB4MjQsIDB4 ZjR9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1 bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYg KCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0 LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMt U0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBG SVBTX2htYWNfc2hhMzg0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGIyLCAw eDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2LCAweDYzLCAweDA4 LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAorKwkgMHhlMiwgMHhkZiwgMHhmOCwgMHhm ZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgxYiwgMHhhYywgMHhiMCwg MHgwNywgMHgzOSwgMHgwOCwKKysJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYsIDB4ZDYs IDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4YjgsIDB4OWIsIDB4ODgsIDB4 MWN9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1 bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYg KCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0 LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMt U0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBG SVBTX2htYWNfc2hhNTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGNkLCAw eDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFmLCAweGYz LCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAorKwkgMHhmNywgMHhkMSwgMHg1MSwgMHg5 NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwgMHhhZCwgMHg3ZSwg MHgyNCwgMHhjYSwgMHhiMSwKKysJIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUsIDB4ZWEsIDB4MmMs IDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEsIDB4N2YsIDB4ZWIsIDB4 OWMsCisrCSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAweGVlLCAw eDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUzfTsKKysKKysgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hh NTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1 cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysKKysvKiBESDogZ2VuZXJhdGUgc2hh cmVkIHBhcmFtZXRlcnMKKysqLworK3N0YXRpYyBpbnQgZGhfdGVzdCgpCisrICAgIHsKKysgICAg REggKmRoOworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgZGggPSBGSVBTX2RoX25ldygp OworKyAgICBpZiAoIWRoKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKCFESF9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEZJUFNfZGhf ZnJlZShkaCk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogWmVyb2l6ZQorKyovCisr c3RhdGljIGludCBaZXJvaXplKCkKKysgICAgeworKyAgICBSU0EgKmtleTsKKysgICAgQklHTlVN ICpibjsKKysgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAorKwl7IDB4NDgsIDB4NTAs IDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4N2YsIDB4 ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKKysgICAgaW50IGksIG47CisrCisrICAgIGtl eSA9IEZJUFNfcnNhX25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAgICBpZiAoIWtleSB8 fCAhYm4pCisrCXJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBp ZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1cm4gMDsK KysgICAgQk5fZnJlZShibik7CisrICAgIAorKyAgICBuID0gQk5fbnVtX2J5dGVzKGtleS0+ZCk7 CisrICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRlIGtleVxuIiwgbik7 CisrICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxuIik7CisrICAgIGRv X2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysgICAgQk5fcmFuZChrZXktPmQsbio4LC0xLDAp OworKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxuIik7CisrICAgIGRv X2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVy IGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IoaSA9IDA7IGkgPCBz aXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7CisrICAgICAg ICBwcmludGYoIlxuIik7CisrICAgIFJBTkRfYnl0ZXModXNlcmtleSwgc2l6ZW9mIHVzZXJrZXkp OworKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92ZXJ3cml0aW5nOiBcblx0 XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50Zigi JTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAgICAgcHJpbnRmKCJcbiIpOworKworKyAgICByZXR1 cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBpbnQgRXJyb3I7CisrY29uc3QgY2hhciAqIEZhaWwo Y29uc3QgY2hhciAqbXNnKQorKyAgICB7CisrICAgIGRvX3ByaW50X2Vycm9ycygpOworKyAgICBF cnJvcisrOworKyAgICByZXR1cm4gbXNnOyAKKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdj LGNoYXIgKiphcmd2KQorKyAgICB7CisrCisrICAgIGludCBkb19jb3JydXB0X3JzYV9rZXlnZW4g PSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOworKyAgICBpbnQgYmFkX3JzYSA9IDAsIGJh ZF9kc2EgPSAwOworKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKKysgICAgaW50IG5vX2V4aXQg PSAwOworKworKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGljYXRpb25cblxuIik7 CisrCisrICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUsIGlmIGFueSAqLwor KyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOworKworKyAgICBpZiAoYXJndlsxXSkg eworKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLworKyAgICAgICAgaWYgKCFzdHJj bXAoYXJndlsxXSwgImFlcyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2FlcygpOwor KyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1 cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJk ZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKKysgICAgICAgICAgICBw cmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQu Li5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2EiKSkgewor KyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKKysgICAgICAgICAgICBwcmludGYoIkRT QSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQg S0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNhIikp IHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7CisrICAgICAgICAgICAgcHJpbnRm KCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJz YWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7CisrCSAgICBiYWRf cnNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0g MTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5c biIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXkiKSkgewor KyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFs aWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAgYmFkX2RzYSA9IDE7Cisr CSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi ZHNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDE7CisrCSAgICBu b19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKKysgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7CisrICAgICAgICAgICAg RklQU19jb3JydXB0X3NoYTEoKTsKKysgICAgICAgICAgICBwcmludGYoIlNIQS0xIGhhc2ggd2l0 aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJy bmciKSkgeworKwkgICAgRklQU19jb3JydXB0X3JuZygpOworKwl9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgInJuZ3N0aWNrIikpIHsKKysJICAgIGRvX3JuZ19zdGljayA9IDE7CisrCSAgICBu b19leGl0ID0gMTsKKysJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250aW51b3Vz IHRlc3QuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmludGYoIkJh ZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOworKyAgICAgICAgICAgIGV4aXQoMSk7Cisr ICAgICAgICB9CisrCWlmICghbm9fZXhpdCkgeworKyAgICAgICAgCWlmICghRklQU19tb2RlX3Nl dCgxKSkgeworKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAgIAkgICAgcHJpbnRm KCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKKysJCSAgICBleGl0KDEpOworKwkJfQor KyAgICAgICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIpOworKyAg ICAgICAgCWV4aXQoMCk7CisrCX0KKysgICAgfQorKworKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5 cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCIxLiBOb24tQXBwcm92 ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7CisrICAgIHByaW50ZigiXHRh LiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBkaF90ZXN0KCkg PyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBQb3dl ci11cCBzZWxmIHRlc3QKKysgICAgKi8KKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIHBy aW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOworKyAgICBpZiAoIUZJ UFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICBwcmlu dGYoRmFpbCgiRkFJTEVEIVxuIikpOworKwlleGl0KDEpOworKwl9CisrICAgIHByaW50Zigic3Vj Y2Vzc2Z1bFxuIik7CisrICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4pCisrICAgICAgICAg ICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRfcnNhX2tl eWdlbikKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigpOworKyAgICBpZiAo ZG9fcm5nX3N0aWNrKQorKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7CisrCisrICAgIC8q IEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCIzLiBBRVMg ZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19hZXNfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogUlNB IGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAg cHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4u LiIpOworKyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBERVMtQ0JDIGVuY3J5cHRpb24v ZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19kZXMzX3Rlc3QoKSA/ICJzdWNjZXNz ZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIERTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI2LiBE U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7CisrICAgIHBy aW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS0xIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRm KCI3YS4gU0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhMV90ZXN0KCkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtMjU2 IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNoLi4uIik7CisrICAg IHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTUxMiBoYXNoCisrICAgICovCisrICAgIHByaW50 ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhNTEyX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhN QUMtU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdkLiBITUFDLVNIQS0xIGhhc2gu Li4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0yMjQgaGFzaAor KyAgICAqLworKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4uLiIpOworKyAgICBw cmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjU2IGhhc2gKKysgICAgKi8KKysg ICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBT X2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCisrICAgICovCisrICAgIHByaW50Zigi N2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTM4 NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBITUFDLVNIQS01MTIgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdoLiBITUFDLVNI QS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogTm9uLUFw cHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiOC4g Tm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBw cmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHByaW50Zigg ZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDogRmFpbCgiZmFp bGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgLyogWmVyb2l6YXRpb24KKysgICAgKi8K KysgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOworKyAgICBwcmludGYoIFplcm9p emUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDogRmFpbCgiXHRmYWls ZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAgICBwcmludGYoIlxuQWxsIHRlc3RzIGNvbXBs ZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOworKyAgICByZXR1cm4gRXJyb3IgPyAxIDog MDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Zp cHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9NYWtlZmlsZQorLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMJMjAxNC0xMC0xNiAxMzox OTozNS4xMDMzMDY1MTQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9NYWtl ZmlsZQkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMzMwNjUxNCArMDIwMAorQEAgLTAsMCArMSwzNDEg QEAKKysjCisrIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCisrIworKworK0RJUj0JZmlw cworK1RPUD0JLi4vLi4KKytDQz0JY2MKKytJTkNMVURFUz0KKytDRkxBRz0tZworK01BS0VGSUxF PQlNYWtlZmlsZQorK0FSPQkJYXIgcgorKworK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykK KysKKytHRU5FUkFMPU1ha2VmaWxlCisrVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3JhbmR0 ZXN0LmMKKytBUFBTPQorKworK1BST0dSQU09IGZpcHNfc3RhbmRhbG9uZV9obWFjCisrRVhFPSAk KFBST0dSQU0pJChFWEVfRVhUKQorKworK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKKytMSUJTUkM9 Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVz dC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKKysgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBz X3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBc CisrICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlwc19wb3N0LmMgZmlwc19kcmJnX2N0ci5jIGZpcHNf ZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMuYyBcCisrICAgIGZpcHNfZHJiZ19saWIuYyBmaXBz X2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFuZF9saWIuYyBcCisrICAg IGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCisrCisrTElCT0JKPWZp cHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2htYWNfc2VsZnRlc3Qu byBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8gZmlwc19z aGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8gXAor KyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJiZ19jdHIubyBmaXBzX2Ry YmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAorKyAgICBmaXBzX2RyYmdfbGliLm8gZmlwc19k cmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRfbGliLm8gXAorKyAgICBm aXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubworKworK0xJQkNSWVBUTz0t TC4uIC1sY3J5cHRvCisrCisrU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25lX2htYWMuYwor KworK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKKytIRUFERVI9CSQoRVhIRUFERVIpCisr CisrQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKKysKKyt0b3A6CisrCShjZCAu Li8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKKysKKythbGw6 CWxpYiBleGUKKysKKytsaWI6CSQoTElCT0JKKQorKwkkKEFSKSAkKExJQikgJChMSUJPQkopCisr CSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgorKwlAdG91Y2ggbGliCisrCisr ZXhlOgkkKEVYRSkKKysKKytmaWxlczoKKysJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBN YWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KKysKKytsaW5rczoKKysJQCQoUEVSTCkgJChUT1ApL3V0 aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQorKwlAJChQRVJM KSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCisrCUAkKFBFUkwpICQo VE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKKysKKytpbnN0YWxsOgorKwlA WyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4u CisrCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwK KysJZG8gIFwKKysJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVk ZS9vcGVuc3NsLyQkaTsgXAorKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExU T1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAorKwlkb25lOworKworK3RhZ3M6CisrCWN0YWdz ICQoU1JDKQorKworK3Rlc3RzOgorKworK2xpbnQ6CisrCWxpbnQgLURMSU5UICQoSU5DTFVERVMp ICQoU1JDKT5mbHVmZgorKworK2RlcGVuZDoKKysJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBz aG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCisrCSQoTUFLRURFUEVORCkgLS0gJChD RkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKKysKKytk Y2xlYW46CisrCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykg e3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKKysJbXYgLWYgTWFr ZWZpbGUubmV3ICQoTUFLRUZJTEUpCisrCisrY2xlYW46CisrCXJtIC1mICoubyAqLm9iaiBsaWIg dGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCisrCisrJChFWEUpOiAkKFBS T0dSQU0pLm8KKysJRklQU19TSEFfQVNNPSIiOyBmb3IgaSBpbiAkKFNIQTFfQVNNX09CSikgc2hh MjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vc2hhLyQkaSIgOyBkb25l OyBcCisrCWZvciBpIGluICQoQ1BVSURfT0JKKTsgZG8gRklQU19TSEFfQVNNPSIkJEZJUFNfU0hB X0FTTSAuLi8kJGkiIDsgZG9uZTsgXAorKwkkKENDKSAtbyAkQCAkKENGTEFHUykgJChQUk9HUkFN KS5vICQkRklQU19TSEFfQVNNCisrCisrIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtl IGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorKworK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwcy5jIGZpcHNfbG9jbC5o CisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2Flc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAor K2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZp cHNfYWVzX3NlbGZ0ZXN0LmMKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfZGVzX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZmlwc19kZXNfc2VsZnRlc3QuYworK2ZpcHNfZHJiZ19jdHIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytm aXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJiZ19jdHIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19y YW5kLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2N0ci5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfY3RyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCisrZmlwc19kcmJnX2N0ci5vOiBmaXBzX2RyYmdfY3RyLmMgZmlwc19yYW5kX2xjbC5oCisr Zmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2hhc2gu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2Zp cHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNf ZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2hhc2guYworK2ZpcHNfZHJiZ19oYXNoLm86IGZp cHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAor K2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw c19yYW5kLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2Ry YmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdf aG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19obWFjLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19obWFjLmMKKytmaXBz X2RyYmdfaG1hYy5vOiBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19k cmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlw c19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisr Zmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBz X2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19kcmJnX2xpYi5vOiBmaXBzX2RyYmdfbGliLmMgZmlw c19sb2NsLmggZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBz X2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2Ry YmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisr Zmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19kcmJnX3JhbmQuYworK2ZpcHNfZHJiZ19yYW5kLm86IGZpcHNfcmFuZF9s Y2wuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2htYWMuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Jh bmQuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWNrLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNr LmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggZmlwc19kcmJnX3NlbGZ0ZXN0LmMKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogZmlwc19kcmJn X3NlbGZ0ZXN0LmggZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5oCisrZmlwc19kc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytm aXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHNhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19kc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5jCisr Zmlwc19kc2Ffc2VsZnRlc3QubzogZmlwc19sb2NsLmgKKytmaXBzX2htYWNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisr Zmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfaG1h Y19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19obWFjX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19obWFjX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2htYWNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfaG1hY19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfaG1hY19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfaG1hY19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfaG1hY19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2htYWNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19obWFjX3NlbGZ0ZXN0 LmMKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBz X3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19wb3N0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHNfcG9zdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgg Zmlwc19sb2NsLmggZmlwc19wb3N0LmMKKytmaXBzX3JhbmQubzogLi4vLi4vZV9vcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgK KytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlw c19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfcmFuZC5vOiBmaXBzX2xvY2wuaCBmaXBzX3JhbmQu YworK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorK2ZpcHNfcmFu ZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytm aXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3Jh bmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmRfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yYW5kX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisr Zmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfcmFuZF9saWIubzogZmlwc19yYW5kX2xpYi5j CisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzX3JhbmQuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv aG1hYy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5o CisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAor K2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBm aXBzX2xvY2wuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiBmaXBzX3JhbmRfc2VsZnRlc3QuYwor K2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV9zZWxmdGVzdC5jCisrZmlwc19yc2FfeDkzMWcubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3JzYV94OTMx Zy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmggZmlwc19yc2FfeDkzMWcuYworK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlw c19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19z aGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX3NoYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisr Zmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlw c19zaGFfc2VsZnRlc3QuYworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2htYWMvaG1h Yy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2htYWMvaG1hYy5jCistLS0gb3BlbnNzbC0x LjAuMWovY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vaG1hYy9obWFjLmMJMjAxNC0xMC0x NiAxMzoxOTozNS4xMDMzMDY1MTQgKzAyMDAKK0BAIC04MSwxMSArODEsNiBAQCBpbnQgSE1BQ19J bml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCisgCQkJRVZQZXJyKEVWUF9GX0hNQUNfSU5J VF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworIAkJCXJldHVybiAwOworIAkJCX0KKy0J CS8qIE90aGVyIGFsZ29yaXRobSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2lu aXQsCistCQkgKiB2aWEgRklQU19obWFjX2luaXRfZXgoKS4KKy0JCSAqLworLQkJaWYgKCFpbXBs ICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCQlyZXR1cm4gRklQU19obWFjX2luaXRfZXgoY3R4 LCBrZXksIGxlbiwgbWQsIE5VTEwpOworIAkJfQorICNlbmRpZgorIAorQEAgLTk5LDYgKzk0LDEz IEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KKyAKKyAJaWYgKGtl eSAhPSBOVUxMKQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUo KSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCisrCQkmJiAoIShjdHgtPm1kX2N0 eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+ aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwgIShj dHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCisrCQkJ Z290byBlcnI7CisrI2VuZGlmCisgCQlyZXNldD0xOworIAkJaj1FVlBfTURfYmxvY2tfc2l6ZSht ZCk7CisgCQlPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7CitAQCAt MTU1LDEwICsxNTcsNiBAQCBpbnQgSE1BQ19Jbml0KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQK KyAKKyBpbnQgSE1BQ19VcGRhdGUoSE1BQ19DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAq ZGF0YSwgc2l6ZV90IGxlbikKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNf bW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCXJldHVybiBGSVBTX2htYWNfdXBkYXRl KGN0eCwgZGF0YSwgbGVuKTsKKy0jZW5kaWYKKyAJcmV0dXJuIEVWUF9EaWdlc3RVcGRhdGUoJmN0 eC0+bWRfY3R4LGRhdGEsbGVuKTsKKyAJfQorIAorQEAgLTE2NiwxMCArMTY0LDYgQEAgaW50IEhN QUNfRmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgYworIAl7CisgCXVuc2lnbmVkIGludCBp OworIAl1bnNpZ25lZCBjaGFyIGJ1ZltFVlBfTUFYX01EX1NJWkVdOworLSNpZmRlZiBPUEVOU1NM X0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCXJldHVy biBGSVBTX2htYWNfZmluYWwoY3R4LCBtZCwgbGVuKTsKKy0jZW5kaWYKKyAKKyAJaWYgKCFFVlBf RGlnZXN0RmluYWxfZXgoJmN0eC0+bWRfY3R4LGJ1ZiwmaSkpCisgCQlnb3RvIGVycjsKK0BAIC0y MDksMTMgKzIwMyw2IEBAIGludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0MK KyAKKyB2b2lkIEhNQUNfQ1RYX2NsZWFudXAoSE1BQ19DVFggKmN0eCkKKyAJeworLSNpZmRlZiBP UEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0J CXsKKy0JCUZJUFNfaG1hY19jdHhfY2xlYW51cChjdHgpOworLQkJcmV0dXJuOworLQkJfQorLSNl bmRpZgorIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+aV9jdHgpOworIAlFVlBfTURfQ1RYX2Ns ZWFudXAoJmN0eC0+b19jdHgpOworIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+bWRfY3R4KTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5 cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDE0LTEwLTE2 IDEzOjE5OjM1LjEwMzMwNjUxNCArMDIwMAorQEAgLTc2LDcgKzc2LDcgQEAKKyAJCQkqKChjKSsr KT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKKyAKKyBzdGF0aWMgdm9pZCBtZGMy X2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsK Ky1maXBzX21kX2luaXQoTURDMikKKytub25maXBzX21kX2luaXQoTURDMikKKyAJeworIAljLT5u dW09MDsKKyAJYy0+cGFkX3R5cGU9MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9t ZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwor LS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzCTIwMTQtMTAtMTUg MTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL21kMi9t ZDJfZGdzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAzMzA2NTE0ICswMjAwCitAQCAtNjIsNiAr NjIsMTEgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3Nsdi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisgCisgY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIiIE9QRU5T U0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hhciAqTUQy X29wdGlvbnModm9pZCkKKyAJCXJldHVybigibWQyKGludCkiKTsKKyAJfQorIAorLWZpcHNfbWRf aW5pdChNRDIpCisrbm9uZmlwc19tZF9pbml0KE1EMikKKyAJeworIAljLT5udW09MDsKKyAJbWVt c2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZDQvbWQ0 X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIw MTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL21kNC9tZDRfZGdzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA0MzA2NTM2ICswMjAwCitA QCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9W CisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZp bmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBzX21kX2lu aXQoTUQ0KQorK25vbmZpcHNfbWRfaW5pdChNRDQpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9m KCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlw dG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbWQ1L21kNV9kZ3N0 LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDE0LTEw LTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNDMwNjUzNiArMDIwMAorQEAgLTcx LDcgKzcxLDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgorICNk ZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyAjZGVmaW5lIElO SVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisgCistZmlwc19tZF9pbml0KE1E NSkKKytub25maXBzX21kX2luaXQoTUQ1KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykp OworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL29f Zmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL29fZmlwcy5jCistLS0gb3BlbnNzbC0x LjAuMWovY3J5cHRvL29fZmlwcy5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vb19maXBzLmMJMjAxNC0xMC0xNiAxMzox OTozNS4xMDQzMDY1MzYgKzAyMDAKK0BAIC03OSw2ICs3OSw4IEBAIGludCBGSVBTX21vZGVfc2V0 KGludCByKQorICNpZm5kZWYgRklQU19BVVRIX1VTRVJfUEFTUworICNkZWZpbmUgRklQU19BVVRI X1VTRVJfUEFTUwkiRGVmYXVsdCBGSVBTIENyeXB0byBVc2VyIFBhc3N3b3JkIgorICNlbmRpZgor KwlpZiAociAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIC8qIGNhbiBiZSBpbXBsaWNpdGx5IGluaXRp YWxpemVkIGJ5IE9QRU5TU0xfaW5pdCgpICovCisrCQlyZXR1cm4gMTsKKyAJaWYgKCFGSVBTX21v ZHVsZV9tb2RlX3NldChyLCBGSVBTX0FVVEhfVVNFUl9QQVNTKSkKKyAJCXJldHVybiAwOworIAlp ZiAocikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9vX2luaXQuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9vX2lu aXQuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMWovY3J5cHRvL29faW5pdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA0MzA2NTM2ICsw MjAwCitAQCAtNTUsMjggKzU1LDY4IEBACisgI2luY2x1ZGUgPGVfb3MuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNs dWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K KysKKysjZGVmaW5lIEZJUFNfTU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBz X2VuYWJsZWQiCisrCisrc3RhdGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKKysJeworKwlj aGFyIGJ1ZlsyXSA9ICIwIjsKKysJaW50IGZkOworKwkKKysJaWYgKGdldGVudigiT1BFTlNTTF9G T1JDRV9GSVBTX01PREUiKSAhPSBOVUxMKQorKwkJeworKwkJYnVmWzBdID0gJzEnOworKwkJfQor KwllbHNlIGlmICgoZmQgPSBvcGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+ PSAwKQorKwkJeworKwkJd2hpbGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCAmJiBl cnJubyA9PSBFSU5UUik7CisrCQljbG9zZShmZCk7CisrCQl9CisrCS8qIEZhaWx1cmUgcmVhZGlu ZyB0aGUgZmlwcyBtb2RlIHN3aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90CisrCSAqIHN3aXRjaGlu ZyBpbnRvIEZJUFMgbW9kZS4gV2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCisrCSAqIG90 aGVyd2lzZS4gCisrCSAqLworKwkKKysJaWYgKGJ1ZlswXSA9PSAnMScpCisrCQl7CisrCQlGSVBT X21vZGVfc2V0KDEpOworKwkJfQorKwl9CisgI2VuZGlmCisgCisgLyogUGVyZm9ybSBhbnkgZXNz ZW50aWFsIE9wZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KKyAgKiBDdXJyZW50bHkg b25seSBzZXRzIEZJUFMgY2FsbGJhY2tzCisgICovCisgCistdm9pZCBPUEVOU1NMX2luaXQodm9p ZCkKKyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCisgCXsKKyAJc3RhdGljIGludCBk b25lID0gMDsKKyAJaWYgKGRvbmUpCisgCQlyZXR1cm47CisgCWRvbmUgPSAxOworICNpZmRlZiBP UEVOU1NMX0ZJUFMKKy0JRklQU19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xvY2ssIENS WVBUT19hZGRfbG9jayk7CistCUZJUFNfc2V0X2Vycm9yX2NhbGxiYWNrcyhFUlJfcHV0X2Vycm9y LCBFUlJfYWRkX2Vycm9yX3ZkYXRhKTsKKy0JRklQU19zZXRfbWFsbG9jX2NhbGxiYWNrcyhDUllQ VE9fbWFsbG9jLCBDUllQVE9fZnJlZSk7CisgCVJBTkRfaW5pdF9maXBzKCk7CisrCWluaXRfZmlw c19tb2RlKCk7CisrCWlmICghRklQU19tb2RlKCkpCisrCQl7CisrCQkvKiBDbGVhbiB1cCBwcmVt YXR1cmVseSBzZXQgZGVmYXVsdCByYW5kIG1ldGhvZCAqLworKwkJUkFORF9zZXRfcmFuZF9tZXRo b2QoTlVMTCk7CisrCQl9CisgI2VuZGlmCisgI2lmIDAKKyAJZnByaW50ZihzdGRlcnIsICJDYWxs ZWQgT1BFTlNTTF9pbml0XG4iKTsKKyAjZW5kaWYKKyAJfQorIAorK3ZvaWQgT1BFTlNTTF9pbml0 KHZvaWQpCisrCXsKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysJfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vb3BlbnNzbGNvbmYuaC5pbgorLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9vcGVuc3Ns Y29uZi5oLmluLmZpcHMJMjAxNC0xMC0xNSAxNDo1MTowNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgkyMDE0LTEwLTE2IDEzOjE5OjM1 LjEwNDMwNjUzNiArMDIwMAorQEAgLTEsNSArMSwyMCBAQAorIC8qIGNyeXB0by9vcGVuc3NsY29u Zi5oLmluICovCisgCisrI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAorKworKy8qIElu Y2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8g ZW5hYmxlIGEgZmVhdHVyZQorKyAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVu ZC4KKysgKgorKyAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQg dGhpcywgd2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncworKyAqIGluc3RlYWQ7IHdlIHdhbnQg dG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFs Z29yaXRobXMuXQorKyAqLworKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2RlZmluZSBPUEVO U1NMX0ZJUFMKKysjZW5kaWYKKysKKysjZW5kaWYKKysKKyAvKiBHZW5lcmF0ZSA4MDM4NiBjb2Rl PyAqLworICN1bmRlZiBJMzg2X09OTFkKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yYW5kL21kX3JhbmQu YworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzCTIwMTQtMTAt MTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3Jh bmQvbWRfcmFuZC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA0MzA2NTM2ICswMjAwCitAQCAtMzkx LDcgKzM5MSwxMCBAQCBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqYnVmCisg CUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CisgCWNyeXB0b19sb2NrX3JhbmQg PSAxOworIAorLQlpZiAoIWluaXRpYWxpemVkKQorKwkvKiBhbHdheXMgcG9sbCBmb3IgZXh0ZXJu YWwgZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAorKwkgKiBleHBhbnNp b24KKysJICovCisrCWlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgpKSAKKyAJ CXsKKyAJCVJBTkRfcG9sbCgpOworIAkJaW5pdGlhbGl6ZWQgPSAxOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWovY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3Jh bmQvcmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMJMjAx NC0xMC0xNiAxMzoxOTozNC43NzUyOTkxMDkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlw dG8vcmFuZC9yYW5kLmgJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDUzMDY1NTkgKzAyMDAKK0BAIC0x MzMsMTYgKzEzMywzNCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKKyAvKiBF cnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNv ZGVzLiAqLworKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgK KysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZpbmUgUkFORF9GX0ZJUFNf UkFORF9CWVRFUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkg MTA2CisrI2RlZmluZSBSQU5EX0ZfRklQU19YOTMxX1NFVF9EVAkJCQkgMTA2CisrI2RlZmluZSBS QU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdf U0VFRAkJCSAxMDcKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1Cisg I2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCistI2RlZmluZSBSQU5E X0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBT CQkJCSAxMDkKKyAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKKyAKKyAv KiBSZWFzb24gY29kZXMuICovCistI2RlZmluZSBSQU5EX1JfRFVBTF9FQ19EUkJHX0RJU0FCTEVE CQkJIDEwNAorLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDEwMgor LSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMDMKKy0jZGVmaW5l IFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTAxCisrI2RlZmluZSBSQU5EX1Jf RFVBTF9FQ19EUkJHX0RJU0FCTEVECQkJIDExNAorKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJ QUxJU0lOR19EUkJHCQkJIDExMgorKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdf RFJCRwkJCSAxMTMKKysjZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwNQorKyNk ZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgorKyNkZWZpbmUgUkFORF9SX05P X0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMTEKKysjZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VU CQkJCSAxMDcKKysjZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAx CisrI2RlZmluZSBSQU5EX1JfUFJOR19FUlJPUgkJCQkgMTA4CisrI2RlZmluZSBSQU5EX1JfUFJO R19LRVlFRAkJCQkgMTA5CisrI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAy CisrI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQJCQkgMTAzCisgI2RlZmluZSBSQU5E X1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKKysjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVT VF9OT1RfTUFUQ0hfS0VZCQkgMTEwCisrI2RlZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkgMTA0 CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yaXBlbWQv cm1kX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5m aXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MWovY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA1MzA2NTU5 ICswMjAwCitAQCAtNzAsNyArNzAsNyBAQCBjb25zdCBjaGFyIFJNRDE2MF92ZXJzaW9uW109IlJJ UEUtTUQxNjAiCisgICAgICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQxNjBfQ1RYICpjLCB1 bnNpZ25lZCBsb25nICpwLHNpemVfdCBudW0pOworICMgIGVuZGlmCisgCistZmlwc19tZF9pbml0 KFJJUEVNRDE2MCkKKytub25maXBzX21kX2luaXQoUklQRU1EMTYwKQorIAl7CisgCW1lbXNldCAo YywwLHNpemVvZigqYykpOworIAljLT5BPVJJUEVNRDE2MF9BOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWovY3J5cHRvL3JzYS9yc2FfY3JwdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3Jz YS9yc2FfY3JwdC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfY3JwdC5jLmZp cHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vcnNhL3JzYV9jcnB0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDUzMDY1NTkgKzAy MDAKK0BAIC05MCwxMCArOTAsOSBAQCBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQgZmxlbiwg Y29uc3QKKyAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisgCXsKKyAjaWZkZWYgT1BFTlNT TF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxB R19GSVBTX01FVEhPRCkKKy0JCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykpCisrCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkKKyAJCXsKKy0JCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBS U0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKKysJCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9F TkNSWVBULCBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKyAJCXJl dHVybiAtMTsKKyAJCX0KKyAjZW5kaWYKK0BAIC0xMTgsMTAgKzExNyw5IEBAIGludCBSU0FfcHVi bGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKKyAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRp bmcpCisgCXsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhKHJz YS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKy0JCQkmJiAhKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisrCWlmKEZJUFNfbW9kZSgpICYmICEocnNh LT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKyAJCXsKKy0JCVJTQWVycihSU0Ff Rl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKwkJUlNB ZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VE X0lOX0ZJUFNfTU9ERSk7CisgCQlyZXR1cm4gLTE7CisgCQl9CisgI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9yc2EvcnNhX2VheS5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfZWF5 LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA1MzA2NTU5 ICswMjAwCitAQCAtMTE0LDYgKzExNCwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgI2lmbmRlZiBSU0FfTlVMTAorIAorQEAgLTEz OCw3ICsxNDIsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9eworIAlC Tl9tb2RfZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250Z29t ZXJ5IGlmICBlID09IDMgKi8KKyAJUlNBX2VheV9pbml0LAorIAlSU0FfZWF5X2ZpbmlzaCwKKy0J MCwgLyogZmxhZ3MgKi8KKysJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCisgCU5V TEwsCisgCTAsIC8qIHJzYV9zaWduICovCisgCTAsIC8qIHJzYV92ZXJpZnkgKi8KK0BAIC0xNTgs NiArMTYyLDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAJ dW5zaWduZWQgY2hhciAqYnVmPU5VTEw7CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlpZihGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19F TkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJ fQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJ CSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysj ZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9E VUxVU19CSVRTKQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQs IFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC0zNjEsNiArMzgzLDI0IEBAIHN0YXRpYyBp bnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKKyAJQklHTlVNICp1bmJsaW5kID0gTlVM TDsKKyAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysKKysJ CWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKKysJCQkmJiAoQk5f bnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisr CQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgor KworIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhf c3RhcnQoY3R4KTsKKyAJZiAgID0gQk5fQ1RYX2dldChjdHgpOworQEAgLTUwNCw2ICs1NDQsMjQg QEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgorIAlCSUdOVU0gKnVu YmxpbmQgPSBOVUxMOworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlyZXR1cm4gLTE7Cisr CQkJfQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQor KwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBU LCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9 CisrI2VuZGlmCisrCisgCWlmKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJy OworIAlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJZiAgID0gQk5fQ1RYX2dldChjdHgpOworQEAgLTYz OSw2ICs2OTcsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAor IAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElD X0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVycjsKKysJ CQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisr CQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVT X0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwg UlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQor KyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9N T0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQ VCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTg5Nyw2ICs5NzMsOSBAQCBlcnI6Cisg Cisgc3RhdGljIGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCisgCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcnNhLT5mbGFnc3w9 UlNBX0ZMQUdfQ0FDSEVfUFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7CisgCXJldHVybigx KTsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlw cyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDE0LTEwLTE2 IDEzOjE5OjM1LjEwNTMwNjU1OSArMDIwMAorQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgRVJS X1NUUklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJM SUNfRU5DUllQVCksCSJSU0FfcHVibGljX2VuY3J5cHQifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNB X1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NF VFVQX0JMSU5ESU5HKSwJIlJTQV9zZXR1cF9ibGluZGluZyJ9LAorK3tFUlJfRlVOQyhSU0FfRl9S U0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwJIlJTQV9zZXRfZGVmYXVsdF9tZXRob2QifSwKKyt7RVJS X0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0QpLAkiUlNBX3NldF9tZXRob2QifSwKKyB7RVJSX0ZV TkMoUlNBX0ZfUlNBX1NJR04pLAkiUlNBX3NpZ24ifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJ R05fQVNOMV9PQ1RFVF9TVFJJTkcpLAkiUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkcifSwKKyB7 RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWSksCSJSU0FfdmVyaWZ5In0sCitkaWZmIC11cCBvcGVu c3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9yc2EvcnNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfZ2VuLmMu ZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9yc2EvcnNhX2dlbi5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA2MzA2NTgxICsw MjAwCitAQCAtNjksNiArNjksNzggQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaWZk ZWYgT1BFTlNTTF9GSVBTCisgI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworK3N0YXRpYyBpbnQg Zmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tl eWdlbih2b2lkKQorKwl7CisrCWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOworKwl9CisrCisr aW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQorKwl7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIg dGJzW10gPSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKwl1bnNpZ25lZCBjaGFyICpjdGJ1 ZiA9IE5VTEwsICpwdGJ1ZiA9IE5VTEw7CisrCWludCBsZW4sIHJldCA9IDA7CisrCUVWUF9QS0VZ ICpwazsKKysKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJy OworKworKwlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKKysKKysJLyogUGVyZm9ybSBwYWly d2lzZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMs IC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBO VUxMKSkKKysJCWdvdG8gZXJyOworKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5j eSBlbmNyeXB0L2RlY3J5cHQgdGVzdCAqLworKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9z aXplKHJzYSkpOworKwlpZiAoIWN0YnVmKQorKwkJZ290byBlcnI7CisrCisrCWxlbiA9IFJTQV9w dWJsaWNfZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNBX1BLQ1Mx X1BBRERJTkcpOworKwlpZiAobGVuIDw9IDApCisrCQlnb3RvIGVycjsKKysJLyogQ2hlY2sgY2lw aGVydGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLworKwlpZiAoKGxlbiA9PSAoc2l6ZW9m KHRicykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQorKwkJZ290byBlcnI7Cisr CXB0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7CisrCisrCWlmICghcHRidWYp CisrCQlnb3RvIGVycjsKKysJbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0YnVmLCBw dGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gIT0gKHNpemVvZih0YnMp IC0gMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQorKwkJ Z290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrCWlmICghcHRidWYpCisrCQlnb3RvIGVycjsK KysJCisrCWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOworKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BBSVJXSVNF X1RFU1RfRkFJTEVEKTsKKysJCX0KKysKKysJaWYgKGN0YnVmKQorKwkJT1BFTlNTTF9mcmVlKGN0 YnVmKTsKKysJaWYgKHB0YnVmKQorKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKKysJaWYgKHBrKQor KwkJRVZQX1BLRVlfZnJlZShwayk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKyAjZW5kaWYKKyAK KyBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05V TSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKTsKK0BAIC04MSw3ICsxNTMsNyBAQCBzdGF0aWMgaW50 IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKKyBpbnQgUlNBX2dlbmVyYXRlX2tleV9leChS U0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKQorIAl7Cisg I2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZs YWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYg IShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCisgCQkJJiYgIShyc2Et PmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJeworIAkJUlNBZXJyKFJTQV9G X1JTQV9HRU5FUkFURV9LRVlfRVgsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworQEAgLTkw LDEwICsxNjIsNiBAQCBpbnQgUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpCisg I2VuZGlmCisgCWlmKHJzYS0+bWV0aC0+cnNhX2tleWdlbikKKyAJCXJldHVybiByc2EtPm1ldGgt PnJzYV9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2lmZGVmIE9QRU5TU0xfRklQ UworLQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4gRklQU19yc2FfZ2VuZXJhdGVfa2V5X2V4 KHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOworLSNlbmRpZgorIAlyZXR1cm4gcnNhX2J1aWx0aW5f a2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOworIAl9CisgCitAQCAtMTA1LDYgKzE3Mywy MyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKKyAJaW50IGJpdHNw LGJpdHNxLG9rPSAtMSxuPTA7CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJICAgIAl7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxU SU5fS0VZR0VOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICAJcmV0dXJuIDA7 CisrCSAgICAJfQorKworKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVT X0JJVFMpCisrCQkgICAgeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdF TixGSVBTX1JfS0VZX1RPT19TSE9SVCk7CisrCQkgICAgcmV0dXJuIDA7CisrCQkgICAgfQorKwkJ fQorKyNlbmRpZgorKworIAljdHg9Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdv dG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKK0BAIC0yMTYsNiArMzAxLDE3IEBAIHN0YXRp YyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIAkJcCA9IHJzYS0+cDsKKyAJaWYg KCFCTl9tb2RfaW52ZXJzZShyc2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBlcnI7CisgCisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJ aWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwpCisrCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsK KysKKysJCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQorKwkJICAgIGdvdG8gZXJyOworKwkJfQor KyNlbmRpZgorKworIAlvaz0xOworIGVycjoKKyAJaWYgKG9rID09IC0xKQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2EuaC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9y c2EvcnNhLmgKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAxNC0x MC0xNiAxMzoxOTozNC45NDczMDI5OTIgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8v cnNhL3JzYS5oCTIwMTQtMTAtMTYgMTM6MjQ6MDAuODI0MzA1MjgxICswMjAwCitAQCAtMTY0LDYg KzE2NCw4IEBAIHN0cnVjdCByc2Ffc3QKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxV U19CSVRTCTE2Mzg0CisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMgMTAyNAorKworICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19C SVRTCisgIyBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIKKyAjZW5k aWYKK0BAIC0yOTAsNiArMjkyLDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50IGJpdHMs IHVuc2lnbmUKKyAKKyAvKiBOZXcgdmVyc2lvbiAqLworIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4 KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0Ff WDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAq cTEsIEJJR05VTSAqcTIsCisrCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAy LCBjb25zdCBCSUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0g KlhxMiwgY29uc3QgQklHTlVNICpYcSwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpj Yik7CisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNv bnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKyAKKyBpbnQJUlNBX2NoZWNrX2tleShjb25z dCBSU0EgKik7CisgCS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KK0BAIC00ODcsNyAr NDk0LDcgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJTQV9G X1JTQV9QQURESU5HX0FERF9OT05FCQkJIDEwNworICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdf QUREX1BLQ1MxX09BRVAJCSAxMjEKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NT MV9QU1MJCQkgMTI1CistI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01H RjEJCSAxNDgKKysjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1NfTUdGMQkJ IDE1OAorICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMQkJIDEwOAor ICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMgkJIDEwOQorICNkZWZp bmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1NTTFYyMwkJCSAxMTAKK0BAIC01MDAsMjAgKzUwNywy MiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgUlNBX0ZfUlNB X1BBRERJTkdfQ0hFQ0tfWDkzMQkJCSAxMjgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVAkJCQkJ IDExNQorICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKKy0jZGVmaW5lIFJTQV9G X1JTQV9QUklWQVRFX0RFQ1JZUFQJCQkgMTUwCistI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9F TkNSWVBUCQkJIDE1MQorKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTcK KysjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4CisgI2RlZmluZSBSU0Ff Rl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNworICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RF CQkJCSAxMzgKKy0jZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNTIKKysjZGVm aW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9Q VUJMSUNfRU5DUllQVAkJCSAxNTMKKyAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAx MzkKKyAjZGVmaW5lIFJTQV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYKKysjZGVmaW5lIFJT QV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJCQkgMTUwCisrI2RlZmluZSBSU0FfRl9SU0FfU0VU X01FVEhPRAkJCQkgMTUxCisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNworICNkZWZp bmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKKyAjZGVmaW5lIFJTQV9G X1JTQV9WRVJJRlkJCQkJIDExOQorICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9BU04xX09DVEVU X1NUUklORwkJIDEyMAorICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1MJCQkgMTI2 CistI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE0OQorKyNkZWZp bmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNTIKKyAKKyAvKiBSZWFzb24g Y29kZXMuICovCisgI2RlZmluZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0gJCQkgMTAwCitAQCAt NTQyLDIxICs1NTEsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVm aW5lIFJTQV9SX0lOVkFMSURfTUdGMV9NRAkJCQkgMTU2CisgI2RlZmluZSBSU0FfUl9JTlZBTElE X1BBRERJTkcJCQkJIDEzOAorICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HX01PREUJCQkg MTQxCistI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE0OQorKyNkZWZp bmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNTcKKyAjZGVmaW5lIFJTQV9SX0lO VkFMSURfUFNTX1NBTFRMRU4JCQkgMTQ2CistI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVO R1RICQkJIDE1MAorKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTgKKyAj ZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUgkJCQkgMTM5CisgI2RlZmluZSBSU0FfUl9JTlZB TElEX1g5MzFfRElHRVNUCQkJIDE0MgorICNkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5WRVJTRV9P Rl9RCQkJIDEyNgorICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAorICNk ZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAorICNkZWZpbmUgUlNBX1JfTU9E VUxVU19UT09fTEFSR0UJCQkJIDEwNQorLSNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RAkJCSAxNTcKKysjZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTQ5CisrI2Rl ZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDE0OQorICNkZWZpbmUgUlNBX1JfTk9fUFVC TElDX0VYUE9ORU5UCQkJIDE0MAorICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlT U0lORwkJCSAxMTMKKyAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RCQkJIDEyNwor ICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKKy0jZGVmaW5lIFJTQV9S X09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1OAorKyNkZWZpbmUgUlNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTUwCisgI2RlZmluZSBSU0FfUl9P UEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFCSAxNDgKKyAjZGVmaW5lIFJT QV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJIDExNAorICNkZWZpbmUgUlNBX1JfUEtDU19ERUNP RElOR19FUlJPUgkJCSAxNTkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNh X2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6Mzku MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfbGliLmMJ MjAxNC0xMC0xNiAxMzoxOTozNS4xMDYzMDY1ODEgKzAyMDAKK0BAIC04NCw2ICs4NCwxMyBAQCBS U0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3Qg UlNBX01FVEhPRCAqbWV0aCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNf bW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7Cisr CQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVU SE9EKTsKKysJCXJldHVybjsKKysJCX0KKysjZW5kaWYKKyAJZGVmYXVsdF9SU0FfbWV0aCA9IG1l dGg7CisgCX0KKyAKK0BAIC05MSwxOCArOTgsMTEgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX2dl dF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlmIChkZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpCisg CQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJldHVy biBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gUlNBX1BLQ1Mx X1NTTGVheSgpOworLSNlbHNlCisgI2lmZGVmIFJTQV9OVUxMCisgCQlkZWZhdWx0X1JTQV9tZXRo PVJTQV9udWxsX21ldGhvZCgpOworICNlbHNlCisgCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9QS0NT MV9TU0xlYXkoKTsKKyAjZW5kaWYKKy0jZW5kaWYKKyAJCX0KKyAKKyAJcmV0dXJuIGRlZmF1bHRf UlNBX21ldGg7CitAQCAtMTE4LDYgKzExOCwxMyBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpy c2EsIGNvbnN0IFJTQV9NCisgCS8qIE5COiBUaGUgY2FsbGVyIGlzIHNwZWNpZmljYWxseSBzZXR0 aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cworIAkgKiB0byBkZWFsIHdpdGggd2hp Y2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCisgCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAm IFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfU0VUX01F VEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRp ZgorIAltdG1wID0gcnNhLT5tZXRoOworIAlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5pc2go cnNhKTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMTcwLDYgKzE3NywxOCBAQCBS U0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAkJCX0KKyAJCX0KKyAjZW5kaWYK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNB X05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrI2lmbmRlZiBPUEVOU1NMX05P X0VOR0lORQorKwkJaWYgKHJldC0+ZW5naW5lKQorKwkJCUVOR0lORV9maW5pc2gocmV0LT5lbmdp bmUpOworKyNlbmRpZgorKwkJT1BFTlNTTF9mcmVlKHJldCk7CisrCQlyZXR1cm4gTlVMTDsKKysJ CX0KKysjZW5kaWYKKyAKKyAJcmV0LT5wYWQ9MDsKKyAJcmV0LT52ZXJzaW9uPTA7CitAQCAtMTg4 LDcgKzIwNyw3IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCisgCXJldC0+ YmxpbmRpbmc9TlVMTDsKKyAJcmV0LT5tdF9ibGluZGluZz1OVUxMOworIAlyZXQtPmJpZ251bV9k YXRhPU5VTEw7CistCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFncyAmIH5SU0FfRkxBR19OT05f RklQU19BTExPVzsKKysJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzOworIAlpZiAoIUNSWVBU T19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByZXQsICZyZXQtPmV4X2RhdGEpKQor IAkJeworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3Jz YV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBz CTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNjMwNjU4MSArMDIw MAorQEAgLTIwNiwyMiArMjA2LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZ X0NUWCAqYworIAkJCQkJUlNBX1JfSU5WQUxJRF9ESUdFU1RfTEVOR1RIKTsKKyAJCQlyZXR1cm4g LTE7CisgCQkJfQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChyZXQgPiAwKQorLQkJCXsK Ky0JCQl1bnNpZ25lZCBpbnQgc2xlbjsKKy0JCQlyZXQgPSBGSVBTX3JzYV9zaWduX2RpZ2VzdChy c2EsIHRicywgdGJzbGVuLCByY3R4LT5tZCwKKy0JCQkJCQkJcmN0eC0+cGFkX21vZGUsCistCQkJ CQkJCXJjdHgtPnNhbHRsZW4sCistCQkJCQkJCXJjdHgtPm1nZjFtZCwKKy0JCQkJCQkJc2lnLCAm c2xlbik7CistCQkJaWYgKHJldCA+IDApCistCQkJCSpzaWdsZW4gPSBzbGVuOworLQkJCWVsc2UK Ky0JCQkJKnNpZ2xlbiA9IDA7CistCQkJcmV0dXJuIHJldDsKKy0JCQl9CistI2VuZGlmCisgCisg CQlpZiAoRVZQX01EX3R5cGUocmN0eC0+bWQpID09IE5JRF9tZGMyKQorIAkJCXsKK0BAIC0zNTQs MTkgKzMzOCw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAorICNl bmRpZgorIAlpZiAocmN0eC0+bWQpCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYg KHJ2ID4gMCkKKy0JCQl7CistCQkJcmV0dXJuIEZJUFNfcnNhX3ZlcmlmeV9kaWdlc3QocnNhLAor LQkJCQkJCQl0YnMsIHRic2xlbiwKKy0JCQkJCQkJcmN0eC0+bWQsCistCQkJCQkJCXJjdHgtPnBh ZF9tb2RlLAorLQkJCQkJCQlyY3R4LT5zYWx0bGVuLAorLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCist CQkJCQkJCXNpZywgc2lnbGVuKTsKKy0JCQkJCQkJCistCQkJfQorLSNlbmRpZgorIAkJaWYgKHJj dHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QQURESU5HKQorIAkJCXJldHVybiBSU0FfdmVyaWZ5 KEVWUF9NRF90eXBlKHJjdHgtPm1kKSwgdGJzLCB0YnNsZW4sCisgCQkJCQlzaWcsIHNpZ2xlbiwg cnNhKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBz IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX3NpZ24uYworLS0tIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTQtMTAt MTYgMTM6MTk6MzUuMTA2MzA2NTgxICswMjAwCitAQCAtMTM4LDcgKzEzOCw4IEBAIGludCBSU0Ff c2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWkyZF9YNTA5X1NJRygmc2lnLCZw KTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2VuY3J5cHQoaSxzLHNpZ3JldCxy c2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBk aXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9w cml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdyZXQscnNhLFJTQV9QS0NT MV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9MDsKKyAJZWxzZQorQEAgLTE5 Nyw4ICsxOTgsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCisg CisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQorIAkJeworLQkJaSA9IFJTQV9w dWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1Mx X1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJz YV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFE RElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4gMDsKKyAJCSpwcm1fbGVuID0g aTsKK0BAIC0yMTUsNyArMjE2LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29u c3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9JTlZBTElEX01F U1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlpPVJTQV9wdWJsaWNfZGVjcnlw dCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjog Y2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICov CisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygo aW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAKKyAJaWYg KGkgPD0gMCkgZ290byBlcnI7CisgCS8qIE9kZGJhbGwgTURDMiBjYXNlOiBzaWduYXR1cmUgY2Fu IGJlIE9DVEVUIFNUUklORy4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hh LmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vc2hhL3NoYS5oCistLS0gb3BlbnNzbC0xLjAu MWovY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzQuNjY3Mjk2NjcxICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9zaGEuaAkyMDE0LTEwLTE2IDEzOjE5 OjM1LjEwNzMwNjYwNCArMDIwMAorQEAgLTExNiw5ICsxMTYsNiBAQCB1bnNpZ25lZCBjaGFyICpT SEEoY29uc3QgdW5zaWduZWQgY2hhciAqCisgdm9pZCBTSEFfVHJhbnNmb3JtKFNIQV9DVFggKmMs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19TSEExCistI2lmZGVmIE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTFfSW5pdChTSEFf Q1RYICpjKTsKKy0jZW5kaWYKKyBpbnQgU0hBMV9Jbml0KFNIQV9DVFggKmMpOworIGludCBTSEEx X1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQg U0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7CitAQCAtMTQxLDEwICsx MzgsNiBAQCB0eXBlZGVmIHN0cnVjdCBTSEEyNTZzdGF0ZV9zdAorIAl9IFNIQTI1Nl9DVFg7Cisg CisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQg cHJpdmF0ZV9TSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKKy1pbnQgcHJpdmF0ZV9TSEEyNTZf SW5pdChTSEEyNTZfQ1RYICpjKTsKKy0jZW5kaWYKKyBpbnQgU0hBMjI0X0luaXQoU0hBMjU2X0NU WCAqYyk7CisgaW50IFNIQTIyNF9VcGRhdGUoU0hBMjU2X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQTIyNF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hB MjU2X0NUWCAqYyk7CitAQCAtMTkyLDEwICsxODUsNiBAQCB0eXBlZGVmIHN0cnVjdCBTSEE1MTJz dGF0ZV9zdAorICNlbmRpZgorIAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7Cist aW50IHByaXZhdGVfU0hBNTEyX0luaXQoU0hBNTEyX0NUWCAqYyk7CistI2VuZGlmCisgaW50IFNI QTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOworIGludCBTSEEzODRfVXBkYXRlKFNIQTUxMl9DVFgg KmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEEzODRfRmluYWwodW5z aWduZWQgY2hhciAqbWQsIFNIQTUxMl9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9zaGFf bG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAx NC0xMC0xNiAxMzoxOTozNC42NjkyOTY3MTYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlw dG8vc2hhL3NoYV9sb2NsLmgJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDczMDY2MDQgKzAyMDAKK0BA IC0xMjMsMTEgKzEyMywxNCBAQCB2b2lkIHNoYTFfYmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAq YywKKyAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKKyAKKyAjaWZkZWYgU0hBXzAK Ky1maXBzX21kX2luaXQoU0hBKQorK25vbmZpcHNfbWRfaW5pdChTSEEpCisgI2Vsc2UKKyBmaXBz X21kX2luaXRfY3R4KFNIQTEsIFNIQSkKKyAjZW5kaWYKKyAJeworKyNpZiBkZWZpbmVkKFNIQV8x KSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNl bmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+aDA9SU5JVF9EQVRBX2gwOwor IAljLT5oMT1JTklUX0RBVEFfaDE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vc2hh L3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9zaGEyNTYuYworLS0tIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5 LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhMjU2LmMJ MjAxNC0xMC0xNiAxMzoxOTozNS4xMDczMDY2MDQgKzAyMDAKK0BAIC0xMiwxMiArMTIsMTkgQEAK KyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9zaGEu aD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNl bmRpZgorKworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgCisgY29uc3QgY2hhciBT SEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisgZmlw c19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2Yo KmMpKTsKKyAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOworIAlj LT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7CitAQCAtMjksNiArMzYs OSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQorIAorIGZpcHNfbWRfaW5pdChT SEEyNTYpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmhbMF09MHg2YTA5 ZTY2N1VMOwljLT5oWzFdPTB4YmI2N2FlODVVTDsKKyAJYy0+aFsyXT0weDNjNmVmMzcyVUw7CWMt PmhbM109MHhhNTRmZjUzYVVMOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9z aGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhNTEyLmMKKy0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vc2hhL3NoYTUxMi5jCTIw MTQtMTAtMTYgMTM6MTk6MzUuMTA3MzA2NjA0ICswMjAwCitAQCAtNSw2ICs1LDEwIEBACisgICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKyAgKi8KKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisr CisgI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NI QTUxMikKKyAvKgorICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgorQEAgLTYxLDYgKzY1LDkgQEAg Y29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltdPSJTSEEtNTEyIiBPUAorIAorIGZpcHNfbWRfaW5p dF9jdHgoU0hBMzg0LCBTSEE1MTIpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJYy0+aFswXT1VNjQoMHhjYmJiOWQ1ZGMxMDU5 ZWQ4KTsKKyAJYy0+aFsxXT1VNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsKKyAJYy0+aFsyXT1VNjQo MHg5MTU5MDE1YTMwNzBkZDE3KTsKK0BAIC03Nyw2ICs4NCw5IEBAIGZpcHNfbWRfaW5pdF9jdHgo U0hBMzg0LCBTSEE1MTIpCisgCisgZmlwc19tZF9pbml0KFNIQTUxMikKKyAJeworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAljLT5oWzBd PVU2NCgweDZhMDllNjY3ZjNiY2M5MDgpOworIAljLT5oWzFdPVU2NCgweGJiNjdhZTg1ODRjYWE3 M2IpOworIAljLT5oWzJdPVU2NCgweDNjNmVmMzcyZmU5NGY4MmIpOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWovY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by93aHJscG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vd2hybHBv b2wvd3BfZGdzdC5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCTIwMTQtMTAtMTYgMTM6 MTk6MzUuMTA3MzA2NjA0ICswMjAwCitAQCAtNTUsNyArNTUsNyBAQAorICNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy1maXBzX21kX2luaXQoV0hJ UkxQT09MKQorK25vbmZpcHNfbWRfaW5pdChXSElSTFBPT0wpCisgCXsKKyAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7CisgCXJldHVybigxKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL01ha2Vm aWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjFqL01ha2VmaWxlLm9yZworLS0tIG9wZW5zc2wtMS4w LjFqL01ha2VmaWxlLm9yZy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDYyMzA1NTg4ICswMjAw CisrKysgb3BlbnNzbC0xLjAuMWovTWFrZWZpbGUub3JnCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA4 MzA2NjI2ICswMjAwCitAQCAtMTM2LDYgKzEzNiw5IEBAIEZJUFNDQU5MSUI9CisgCisgQkFTRUFE RFI9CisgCisrIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVkCisrRklQUz0KKysKKyBESVJTPSAg IGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMKKyBFTkdESVJTPSBjY2dvc3QKKyBT SExJQkRJUlM9IGNyeXB0byBzc2wKK0BAIC0xNDgsNyArMTUxLDcgQEAgU0RJUlM9ICBcCisgCWJu IGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwKKyAJYnVmZmVyIGJpbyBzdGFj ayBsaGFzaCByYW5kIGVyciBcCisgCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9k YiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAorLQljbXMgcHF1ZXVlIHRzIGpwYWtl IHNycCBzdG9yZSBjbWFjCisrCWNtcyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMgZmlw cworICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9D b25maWd1cmUKKyAjIGFjY29yZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCisgCitAQCAtMjM3 LDYgKzI0MCw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MKKyAJ CUZJUFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJXAorIAkJRklQU0RJUj0nJHtGSVBTRElSfScJ CQkJXAorIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwKKysJ CUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklM RT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkg ImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAorICMgd2hpY2gg aW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRo IC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovc3NsL2QxX3NydnIuYy5maXBzIG9wZW5zc2wt MS4wLjFqL3NzbC9kMV9zcnZyLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9zc2wvZDFfc3J2ci5jLmZp cHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x ai9zc2wvZDFfc3J2ci5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA4MzA2NjI2ICswMjAwCitAQCAt MTM5MCw2ICsxMzkwLDggQEAgaW50IGR0bHMxX3NlbmRfc2VydmVyX2tleV9leGNoYW5nZShTU0wg KgorIAkJCQlqPTA7CisgCQkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQorIAkJCQkJewor KwkJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKKysJCQkJCQkJCUVWUF9NRF9DVFhf RkxBR19OT05fRklQU19BTExPVyk7CisgCQkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChu dW0gPT0gMikKKyAJCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKKyAJCQkJ CUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wz X1JBTkRPTV9TSVpFKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL3NzbC9zc2xfYWxncy5jLmZp cHMgb3BlbnNzbC0xLjAuMWovc3NsL3NzbF9hbGdzLmMKKy0tLSBvcGVuc3NsLTEuMC4xai9zc2wv c3NsX2FsZ3MuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWovc3NsL3NzbF9hbGdzLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDgzMDY2 MjYgKzAyMDAKK0BAIC02NCw2ICs2NCwxMiBAQAorIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQp CisgCXsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7 CisrCWlmICghRklQU19tb2RlKCkpCisrCQl7CisrI2VuZGlmCisrCisgI2lmbmRlZiBPUEVOU1NM X05PX0RFUworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NiYygpKTsKKyAJRVZQX2FkZF9jaXBo ZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKK0BAIC0xMzcsNiArMTQzLDUwIEBAIGludCBTU0xfbGli cmFyeV9pbml0KHZvaWQpCisgCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7CisgCUVWUF9hZGRf ZGlnZXN0KEVWUF9kc3MoKSk7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJfQor KwllbHNlCisrCQl7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworKwlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZTNfY2JjKCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKKysJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzE5Ml9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKKysJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzI1Nl9nY20oKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX01ENQorKwkvKiBu ZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFDICovCisrCUVWUF9hZGRfZGln ZXN0KEVWUF9tZDUoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwic3NsMi1tZDUi KTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wzLW1kNSIpOworKyNlbmRpZgor KyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7IC8q IFJTQSB3aXRoIHNoYTEgKi8KKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1z aGExIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixT Tl9zaGExV2l0aFJTQSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorKwlF VlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2 KCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKysJRVZQX2FkZF9kaWdl c3QoRVZQX3NoYTM4NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjZW5k aWYKKysjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9f RFNBKQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGggc2hhMSAqLwor KwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsK KysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKKysJRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKKysjZW5kaWYKKysjaWZuZGVm IE9QRU5TU0xfTk9fRUNEU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOworKyNlbmRp ZgorKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCisgCS8qIFRoaXMgd2ls bCBpbml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLgorIAkgICBU aGUgdmFsdWUgcmV0dXJuZWQgaXMgYSBTVEFDS19PRihTU0xfQ09NUCksIGJ1dCB0aGF0IGNhbgoK ZGlmZiAtLWdpdCBhL29wZW5zc2wuc3BlYyBiL29wZW5zc2wuc3BlYwppbmRleCBiNDJiYzkxLi43 OWZhODIyIDEwMDY0NAotLS0gYS9vcGVuc3NsLnNwZWMKKysrIGIvb3BlbnNzbC5zcGVjCkBAIC0y Miw4ICsyMiw4IEBACiAKIFN1bW1hcnk6IFV0aWxpdGllcyBmcm9tIHRoZSBnZW5lcmFsIHB1cnBv c2UgY3J5cHRvZ3JhcGh5IGxpYnJhcnkgd2l0aCBUTFMgaW1wbGVtZW50YXRpb24KIE5hbWU6IG9w ZW5zc2wKLVZlcnNpb246IDEuMC4xaQotUmVsZWFzZTogNSV7P2Rpc3R9CitWZXJzaW9uOiAxLjAu MWoKK1JlbGVhc2U6IDElez9kaXN0fQogRXBvY2g6IDEKICMgV2UgaGF2ZSB0byByZW1vdmUgY2Vy dGFpbiBwYXRlbnRlZCBhbGdvcml0aG1zIGZyb20gdGhlIG9wZW5zc2wgc291cmNlCiAjIHRhcmJh bGwgd2l0aCB0aGUgaG9iYmxlLW9wZW5zc2wgc2NyaXB0IHdoaWNoIGlzIGluY2x1ZGVkIGJlbG93 LgpAQCAtNTgsNyArNTgsNyBAQCBQYXRjaDMzOiBvcGVuc3NsLTEuMC4wLWJldGE0LWNhLWRpci5w YXRjaAogUGF0Y2gzNDogb3BlbnNzbC0wLjkuNi14NTA5LnBhdGNoCiBQYXRjaDM1OiBvcGVuc3Ns LTAuOS44ai12ZXJzaW9uLWFkZC1lbmdpbmVzLnBhdGNoCiBQYXRjaDM5OiBvcGVuc3NsLTEuMC4x aC1pcHY2LWFwcHMucGF0Y2gKLVBhdGNoNDA6IG9wZW5zc2wtMS4wLjFnLWZpcHMucGF0Y2gKK1Bh dGNoNDA6IG9wZW5zc2wtMS4wLjFqLWZpcHMucGF0Y2gKIFBhdGNoNDU6IG9wZW5zc2wtMS4wLjFl LWVudi16bGliLnBhdGNoCiBQYXRjaDQ3OiBvcGVuc3NsLTEuMC4wLWJldGE1LXJlYWRtZS13YXJu aW5nLnBhdGNoCiBQYXRjaDQ5OiBvcGVuc3NsLTEuMC4xaS1hbGdvLWRvYy5wYXRjaApAQCAtNzIs NyArNzIsNyBAQCBQYXRjaDY1OiBvcGVuc3NsLTEuMC4wZS1jaGlsLWZpeGVzLnBhdGNoCiBQYXRj aDY2OiBvcGVuc3NsLTEuMC4xLXBrZ2NvbmZpZy1rcmI1LnBhdGNoCiBQYXRjaDY4OiBvcGVuc3Ns LTEuMC4xZS1zZWN1cmUtZ2V0ZW52LnBhdGNoCiBQYXRjaDY5OiBvcGVuc3NsLTEuMC4xYy1kaC0x MDI0LnBhdGNoCi1QYXRjaDcwOiBvcGVuc3NsLTEuMC4xZS1maXBzLWVjLnBhdGNoCitQYXRjaDcw OiBvcGVuc3NsLTEuMC4xai1maXBzLWVjLnBhdGNoCiBQYXRjaDcxOiBvcGVuc3NsLTEuMC4xaS1t YW5maXgucGF0Y2gKIFBhdGNoNzI6IG9wZW5zc2wtMS4wLjFlLWZpcHMtY3Rvci5wYXRjaAogUGF0 Y2g3Mzogb3BlbnNzbC0xLjAuMWUtZWNjLXN1aXRlYi5wYXRjaApAQCAtODQsMTIgKzg0LDExIEBA IFBhdGNoOTA6IG9wZW5zc2wtMS4wLjFlLWVuYy1mYWlsLnBhdGNoCiBQYXRjaDkyOiBvcGVuc3Ns LTEuMC4xaC1zeXN0ZW0tY2lwaGVybGlzdC5wYXRjaAogUGF0Y2g5Mzogb3BlbnNzbC0xLjAuMWgt ZGlzYWJsZS1zc2x2MnYzLnBhdGNoCiAjIEJhY2twb3J0ZWQgZml4ZXMgaW5jbHVkaW5nIHNlY3Vy aXR5IGZpeGVzCi1QYXRjaDgwOiBvcGVuc3NsLTEuMC4xaS1ldnAtd3JhcC5wYXRjaAorUGF0Y2g4 MDogb3BlbnNzbC0xLjAuMWotZXZwLXdyYXAucGF0Y2gKIFBhdGNoODE6IG9wZW5zc2wtMS4wLjEt YmV0YTItcGFkbG9jazY0LnBhdGNoCiBQYXRjaDg0OiBvcGVuc3NsLTEuMC4xaS10cnVzdGVkLWZp cnN0LnBhdGNoCiBQYXRjaDg1OiBvcGVuc3NsLTEuMC4xZS1hcm0tdXNlLWVsZi1hdXh2LWNhcHMu cGF0Y2gKLVBhdGNoODk6IG9wZW5zc2wtMS4wLjFlLWVwaGVtZXJhbC1rZXktc2l6ZS5wYXRjaAot UGF0Y2g5NDogb3BlbnNzbC0xLjAuMWktY29weS1hbGdvLnBhdGNoCitQYXRjaDg5OiBvcGVuc3Ns LTEuMC4xai1lcGhlbWVyYWwta2V5LXNpemUucGF0Y2gKIAogTGljZW5zZTogT3BlblNTTAogR3Jv dXA6IFN5c3RlbSBFbnZpcm9ubWVudC9MaWJyYXJpZXMKQEAgLTIxMiw3ICsyMTEsNiBAQCBjcCAl e1NPVVJDRTEyfSAle1NPVVJDRTEzfSBjcnlwdG8vZWMvCiAlcGF0Y2g4NCAtcDEgLWIgLnRydXN0 ZWQtZmlyc3QKICVwYXRjaDg1IC1wMSAtYiAuYXJtY2FwCiAlcGF0Y2g4OSAtcDEgLWIgLmVwaGVt ZXJhbAotJXBhdGNoOTQgLXAxIC1iIC5jb3B5LWFsZ28KIAogc2VkIC1pICdzL1NITElCX1ZFUlNJ T05fTlVNQkVSICIxLjAuMCIvU0hMSUJfVkVSU0lPTl9OVU1CRVIgIiV7dmVyc2lvbn0iLycgY3J5 cHRvL29wZW5zc2x2LmgKIApAQCAtNDgwLDYgKzQ3OCw5IEBAIHJtIC1yZiAkUlBNX0JVSUxEX1JP T1QvJXtfbGliZGlyfS9maXBzY2FuaXN0ZXIuKgogJXBvc3R1biBsaWJzIC1wIC9zYmluL2xkY29u ZmlnCiAKICVjaGFuZ2Vsb2cKKyogVGh1IE9jdCAxNiAyMDE0IFRvbcOhxaEgTXLDoXogPHRtcmF6 QHJlZGhhdC5jb20+IDEuMC4xai0xCistIG5ldyB1cHN0cmVhbSByZWxlYXNlIGZpeGluZyBtdWx0 aXBsZSBzZWN1cml0eSBpc3N1ZXMKKwogKiBGcmkgT2N0IDEwIDIwMTQgVG9tw6HFoSBNcsOheiA8 dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjFpLTUKIC0gY29weSBuZWdvdGlhdGVkIGRpZ2VzdHMgd2hl biBzd2l0Y2hpbmcgY2VydHMgYnkgU05JICgjMTE1MDAzMikKIAo=