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: Mattias Ellert To: git-commits@fedoraproject.org Subject: [rpms/gsi-openssh] f45: Based on openssh-10.5p1-1.fc45 Date: Tue, 22 Sep 2026 19:58:49 GMT Message-ID: <179010712916.1.2944219774923780864.rpms-gsi-openssh-fd9f3fdaabca@fedoraproject.org> List-ID: X-Git-Repo: rpms/gsi-openssh X-Git-Branch: f45 X-Git-Rev: fd9f3fdaabca4133c00c2a2dfa3fa713f425f1f1 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZ3NpLW9wZW5zc2gK QnJhbmNoIDogZjQ1CkNvbW1pdCA6IGZkOWYzZmRhYWJjYTQxMzNjMDBjMmEyZGZhM2ZhNzEzZjQy NWYxZjEKQXV0aG9yIDogTWF0dGlhcyBFbGxlcnQgPG1hdHRpYXMuZWxsZXJ0QHBoeXNpY3MudXUu c2U+CkRhdGUgICA6IDIwMjYtMDktMjJUMDE6MDQ6MzMrMDI6MDAKU3RhdHMgIDogKzI3NTMzLy0y NzgzMSBpbiA3NyBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3Jn L3JwbXMvZ3NpLW9wZW5zc2gvYy9mZDlmM2ZkYWFiY2E0MTMzYzAwYzJhMmRmYTNmYTcxM2Y0MjVm MWYxP2JyYW5jaD1mNDUKCkxvZzoKQmFzZWQgb24gb3BlbnNzaC0xMC41cDEtMS5mYzQ1CgotLS0K ZGlmZiAtLWdpdCBhLzAwMDEtQWRkLVNFTGludXgtcm9sZS1hbmQtTUxTLU11bHRpLUxldmVsLVNl Y3VyaXR5LXN1cHBvci5wYXRjaCBiLzAwMDEtQWRkLVNFTGludXgtcm9sZS1hbmQtTUxTLU11bHRp LUxldmVsLVNlY3VyaXR5LXN1cHBvci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYmI2NGVkYi4uMDAwMDAwMAotLS0gYS8wMDAxLUFkZC1TRUxpbnV4LXJvbGUtYW5kLU1MUy1N dWx0aS1MZXZlbC1TZWN1cml0eS1zdXBwb3IucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYg KzAsMCBAQAotRnJvbSBjZGIyMWU1NDVmZmRlOWIyMzdmYTlhYjdiZThlMzJiNzhmZmMwMGJiIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgotRGF0ZTogTW9uLCAxMyBBcHIgMjAyNiAxNDowNjozMiArMDIwMAotU3ViamVj dDogW1BBVENIIDAxLzU0XSBBZGQgU0VMaW51eCByb2xlIGFuZCBNTFMgKE11bHRpLUxldmVsIFNl Y3VyaXR5KSBzdXBwb3J0Ci0KLW9wZW5zc2gtNy44cDEtcm9sZS1tbHMKLQotQWRkIHN1cHBvcnQg Zm9yIFNFTGludXggcm9sZS1iYXNlZCBhY2Nlc3MgY29udHJvbCBhbmQgTXVsdGktTGV2ZWwKLVNl Y3VyaXR5IChNTFMpIGJ5IGFsbG93aW5nIHVzZXJzIHRvIHNwZWNpZnkgdGhlaXIgcm9sZSBhcyBw YXJ0IG9mIHRoZQotdXNlcm5hbWUgaW4gdGhlIGZvcm1hdCB1c2VyL3JvbGUuCi0KLUNoYW5nZXM6 Ci0tIGF1dGguaDogQWRkIHJvbGUgZmllbGQgdG8gQXV0aGN0eHQgc3RydWN0dXJlCi0tIGF1dGgy LmM6IFBhcnNlIHJvbGUgZnJvbSB1c2VybmFtZSBhbmQgaW5mb3JtIG1vbml0b3IgcHJvY2Vzcwot LSBhdXRoMi1nc3MuYzogSW5jbHVkZSByb2xlIGluIEdTU0FQSSBNSUMgYXV0aGVudGljYXRpb24K LS0gYXV0aDItaG9zdGJhc2VkLmM6IEluY2x1ZGUgcm9sZSBpbiBob3N0YmFzZWQgYXV0aGVudGlj YXRpb24gc2lnbmF0dXJlCi0tIGF1dGgyLXB1YmtleS5jOiBJbmNsdWRlIHJvbGUgaW4gcHVia2V5 IGF1dGhlbnRpY2F0aW9uIHVzZXJzdHlsZQotLSBtb25pdG9yLmM6IEFkZCBtbV9hbnN3ZXJfYXV0 aHJvbGUoKSBhbmQgaGFuZGxlIHJvbGUgaW4gYXV0aGVudGljYXRpb24KLSAgYmxvYiB2YWxpZGF0 aW9uCi0tIG1vbml0b3Jfd3JhcC5jOiBBZGQgbW1faW5mb3JtX2F1dGhyb2xlKCkgZm9yIHByaXZp bGVnZSBzZXBhcmF0aW9uCi0tIG1pc2MuYzogVXBkYXRlIGNvbG9uKCkgdG8gaGFuZGxlIC9yb2xl IHN5bnRheCBpbiBmaWxlIHBhdGhzCi0KLUNvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQu NSA8bm9yZXBseUBhbnRocm9waWMuY29tPgotLS0tCi0gYXV0aC5oICAgICAgICAgICAgfCAgMyAr KysKLSBhdXRoMi1nc3MuYyAgICAgICB8IDExICsrKysrKysrKystCi0gYXV0aDItaG9zdGJhc2Vk LmMgfCAgOSArKysrKysrKysKLSBhdXRoMi1wdWJrZXkuYyAgICB8IDE5ICsrKysrKysrKysrKysr Ky0tLS0KLSBhdXRoMi5jICAgICAgICAgICB8IDE0ICsrKysrKysrKysrKysrCi0gbWlzYy5jICAg ICAgICAgICAgfCAxOCArKysrKysrKysrKysrKysrKy0KLSBtb25pdG9yLmMgICAgICAgICB8IDM3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KLSBtb25pdG9yLmggICAgICAg ICB8ICA0ICsrKysKLSBtb25pdG9yX3dyYXAuYyAgICB8IDIxICsrKysrKysrKysrKysrKysrKysr KwotIG1vbml0b3Jfd3JhcC5oICAgIHwgIDMgKysrCi0gMTAgZmlsZXMgY2hhbmdlZCwgMTMxIGlu c2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9hdXRoLmggYi9hdXRo LmgKLWluZGV4IDYzNGE4NGFhOC4uMzJlZTNjYmY0IDEwMDY0NAotLS0tIGEvYXV0aC5oCi0rKysg Yi9hdXRoLmgKLUBAIC02NSw2ICs2NSw5IEBAIHN0cnVjdCBBdXRoY3R4dCB7Ci0gCWNoYXIJCSpz ZXJ2aWNlOwotIAlzdHJ1Y3QgcGFzc3dkCSpwdzsJCS8qIHNldCBpZiAndmFsaWQnICovCi0gCWNo YXIJCSpzdHlsZTsKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rCWNoYXIJCSpyb2xlOwotKyNlbmRp ZgotIAotIAkvKiBNZXRob2QgbGlzdHMgZm9yIG11bHRpcGxlIGF1dGhlbnRpY2F0aW9uICovCi0g CWNoYXIJCSoqYXV0aF9tZXRob2RzOwkvKiBtb2RpZmllZCBmcm9tIHNlcnZlciBjb25maWcgKi8K LWRpZmYgLS1naXQgYS9hdXRoMi1nc3MuYyBiL2F1dGgyLWdzcy5jCi1pbmRleCAwNTM1NDg1Mjcu LmIzODBkYzExNyAxMDA2NDQKLS0tLSBhL2F1dGgyLWdzcy5jCi0rKysgYi9hdXRoMi1nc3MuYwot QEAgLTI4NCw2ICsyODQsNyBAQCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1aW50MzJfdCBw bGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCUF1dGhjdHh0ICphdXRoY3R4dCA9IHNzaC0+YXV0aGN0 eHQ7Ci0gCUdzc2N0eHQgKmdzc2N0eHQ7Ci0gCWludCByLCBhdXRoZW50aWNhdGVkID0gMDsKLSsJ Y2hhciAqbWljdXNlcjsKLSAJc3RydWN0IHNzaGJ1ZiAqYjsKLSAJZ3NzX2J1ZmZlcl9kZXNjIG1p YywgZ3NzYnVmOwotIAl1X2NoYXIgKnA7Ci1AQCAtMzAwLDcgKzMwMSwxMyBAQCBpbnB1dF9nc3Nh cGlfbWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCQlmYXRh bF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwotIAltaWMudmFsdWUgPSBwOwotIAltaWMubGVuZ3Ro ID0gbGVuOwotLQlzc2hfZ3NzYXBpX2J1aWxkbWljKGIsIGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4 dC0+c2VydmljZSwKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rCWlmIChhdXRoY3R4dC0+cm9sZSAm JiBhdXRoY3R4dC0+cm9sZVswXSAhPSAwKQotKwkJeGFzcHJpbnRmKCZtaWN1c2VyLCAiJXMvJXMi LCBhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQtPnJvbGUpOwotKwllbHNlCi0rI2VuZGlmCi0rCQlt aWN1c2VyID0gYXV0aGN0eHQtPnVzZXI7Ci0rCXNzaF9nc3NhcGlfYnVpbGRtaWMoYiwgbWljdXNl ciwgYXV0aGN0eHQtPnNlcnZpY2UsCi0gCSAgICAiZ3NzYXBpLXdpdGgtbWljIiwgc3NoLT5rZXgt PnNlc3Npb25faWQpOwotIAotIAlpZiAoKGdzc2J1Zi52YWx1ZSA9IHNzaGJ1Zl9tdXRhYmxlX3B0 cihiKSkgPT0gTlVMTCkKLUBAIC0zMTMsNiArMzIwLDggQEAgaW5wdXRfZ3NzYXBpX21pYyhpbnQg dHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKQotIAkJbG9naXQoIkdTU0FQSSBN SUMgY2hlY2sgZmFpbGVkIik7Ci0gCi0gCXNzaGJ1Zl9mcmVlKGIpOwotKwlpZiAobWljdXNlciAh PSBhdXRoY3R4dC0+dXNlcikKLSsJCWZyZWUobWljdXNlcik7Ci0gCWZyZWUobWljLnZhbHVlKTsK LSAKLSAJYXV0aGN0eHQtPnBvc3Rwb25lZCA9IDA7Ci1kaWZmIC0tZ2l0IGEvYXV0aDItaG9zdGJh c2VkLmMgYi9hdXRoMi1ob3N0YmFzZWQuYwotaW5kZXggOGExYWNkZWMzLi5hMjg3MDkxZWMgMTAw NjQ0Ci0tLS0gYS9hdXRoMi1ob3N0YmFzZWQuYwotKysrIGIvYXV0aDItaG9zdGJhc2VkLmMKLUBA IC0xMzAsNyArMTMwLDE2IEBAIHVzZXJhdXRoX2hvc3RiYXNlZChzdHJ1Y3Qgc3NoICpzc2gsIGNv bnN0IGNoYXIgKm1ldGhvZCkKLSAJLyogcmVjb25zdHJ1Y3QgcGFja2V0ICovCi0gCWlmICgociA9 IHNzaGJ1Zl9wdXRfc3RyaW5nYihiLCBzc2gtPmtleC0+c2Vzc2lvbl9pZCkpICE9IDAgfHwKLSAJ ICAgIChyID0gc3NoYnVmX3B1dF91OChiLCBTU0gyX01TR19VU0VSQVVUSF9SRVFVRVNUKSkgIT0g MCB8fAotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJICAgIChhdXRoY3R4dC0+cm9sZQotKwkgICAg PyAoIChyID0gc3NoYnVmX3B1dF91MzIoYiwgc3RybGVuKGF1dGhjdHh0LT51c2VyKStzdHJsZW4o YXV0aGN0eHQtPnJvbGUpKzEpKSAhPSAwIHx8Ci0rCSAgICAgICAgKHIgPSBzc2hidWZfcHV0KGIs IGF1dGhjdHh0LT51c2VyLCBzdHJsZW4oYXV0aGN0eHQtPnVzZXIpKSkgIT0gMCB8fAotKwkgICAg ICAgIChyID0gc3NoYnVmX3B1dF91OChiLCAnLycpICE9IDApIHx8Ci0rCSAgICAgICAgKHIgPSBz c2hidWZfcHV0KGIsIGF1dGhjdHh0LT5yb2xlLCBzdHJsZW4oYXV0aGN0eHQtPnJvbGUpKSkgIT0g MCkKLSsJICAgIDogKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgYXV0aGN0eHQtPnVzZXIpKSAh PSAwKSB8fAotKyNlbHNlCi0gCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCBhdXRoY3R4 dC0+dXNlcikpICE9IDAgfHwKLSsjZW5kaWYKLSAJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5n KGIsIGF1dGhjdHh0LT5zZXJ2aWNlKSkgIT0gMCB8fAotIAkgICAgKHIgPSBzc2hidWZfcHV0X2Nz dHJpbmcoYiwgbWV0aG9kKSkgIT0gMCB8fAotIAkgICAgKHIgPSBzc2hidWZfcHV0X3N0cmluZyhi LCBwa2FsZywgYWxlbikpICE9IDAgfHwKLWRpZmYgLS1naXQgYS9hdXRoMi1wdWJrZXkuYyBiL2F1 dGgyLXB1YmtleS5jCi1pbmRleCBlNDQ2ZWY0MTIuLjMxOWU0MmIyYiAxMDA2NDQKLS0tLSBhL2F1 dGgyLXB1YmtleS5jCi0rKysgYi9hdXRoMi1wdWJrZXkuYwotQEAgLTcxLDYgKzcxLDggQEAKLSAK LSAvKiBpbXBvcnQgKi8KLSBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOwotK2V4dGVybiBp bnQgaW5ldGRfZmxhZzsKLStleHRlcm4gQXV0aGN0eHQgKnRoZV9hdXRoY3R4dDsKLSBleHRlcm4g c3RydWN0IGF1dGhtZXRob2RfY2ZnIG1ldGhvZGNmZ19wdWJrZXk7Ci0gCi0gc3RhdGljIGNoYXIg KgotQEAgLTIwMSw5ICsyMDMsMTYgQEAgdXNlcmF1dGhfcHVia2V5KHN0cnVjdCBzc2ggKnNzaCwg Y29uc3QgY2hhciAqbWV0aG9kKQotIAkJCWdvdG8gZG9uZTsKLSAJCX0KLSAJCS8qIHJlY29uc3Ry dWN0IHBhY2tldCAqLwotLQkJeGFzcHJpbnRmKCZ1c2Vyc3R5bGUsICIlcyVzJXMiLCBhdXRoY3R4 dC0+dXNlciwKLSsJCXhhc3ByaW50ZigmdXNlcnN0eWxlLCAiJXMlcyVzJXMlcyIsIGF1dGhjdHh0 LT51c2VyLAotIAkJICAgIGF1dGhjdHh0LT5zdHlsZSA/ICI6IiA6ICIiLAotLQkJICAgIGF1dGhj dHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHlsZSA6ICIiKTsKLSsJCSAgICBhdXRoY3R4dC0+c3R5 bGUgPyBhdXRoY3R4dC0+c3R5bGUgOiAiIiwKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rCQkgICAg YXV0aGN0eHQtPnJvbGUgPyAiLyIgOiAiIiwKLSsJCSAgICBhdXRoY3R4dC0+cm9sZSA/IGF1dGhj dHh0LT5yb2xlIDogIiIKLSsjZWxzZQotKwkJICAgICIiLCAiIgotKyNlbmRpZgotKwkJICAgICk7 Ci0gCQlpZiAoKHIgPSBzc2hidWZfcHV0X3U4KGIsIFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVFU1Qp KSAhPSAwIHx8Ci0gCQkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgdXNlcnN0eWxlKSkg IT0gMCB8fAotIAkJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKGIsIGF1dGhjdHh0LT5zZXJ2 aWNlKSkgIT0gMCB8fAotQEAgLTQ3Myw3ICs0ODIsOCBAQCBtYXRjaF9wcmluY2lwYWxzX2NvbW1h bmQoc3RydWN0IHBhc3N3ZCAqdXNlcl9wdywgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAotIAlp ZiAoKHBpZCA9IHN1YnByb2Nlc3MoIkF1dGhvcml6ZWRQcmluY2lwYWxzQ29tbWFuZCIsIGNvbW1h bmQsCi0gCSAgICBhYywgYXYsICZmLAotIAkgICAgU1NIX1NVQlBST0NFU1NfU1RET1VUX0NBUFRV UkV8U1NIX1NVQlBST0NFU1NfU1RERVJSX0RJU0NBUkQsCi0tCSAgICBydW5hc19wdywgdGVtcG9y YXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQpKSA9PSAwKQotKwkgICAgcnVuYXNfcHcsIHRlbXBv cmFyaWx5X3VzZV91aWQsIHJlc3RvcmVfdWlkLAotKwkgICAgaW5ldGRfZmxhZywgdGhlX2F1dGhj dHh0KSkgPT0gMCkKLSAJCWdvdG8gb3V0OwotIAotIAl1aWRfc3dhcHBlZCA9IDE7Ci1AQCAtNzQ5 LDcgKzc1OSw4IEBAIHVzZXJfa2V5X2NvbW1hbmRfYWxsb3dlZDIoc3RydWN0IHBhc3N3ZCAqdXNl cl9wdywgc3RydWN0IHNzaGtleSAqa2V5LAotIAlpZiAoKHBpZCA9IHN1YnByb2Nlc3MoIkF1dGhv cml6ZWRLZXlzQ29tbWFuZCIsIGNvbW1hbmQsCi0gCSAgICBhYywgYXYsICZmLAotIAkgICAgU1NI X1NVQlBST0NFU1NfU1RET1VUX0NBUFRVUkV8U1NIX1NVQlBST0NFU1NfU1RERVJSX0RJU0NBUkQs Ci0tCSAgICBydW5hc19wdywgdGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQpKSA9PSAw KQotKwkgICAgcnVuYXNfcHcsIHRlbXBvcmFyaWx5X3VzZV91aWQsIHJlc3RvcmVfdWlkLAotKwkg ICAgaW5ldGRfZmxhZywgdGhlX2F1dGhjdHh0KSkgPT0gMCkKLSAJCWdvdG8gb3V0OwotIAotIAl1 aWRfc3dhcHBlZCA9IDE7Ci1kaWZmIC0tZ2l0IGEvYXV0aDIuYyBiL2F1dGgyLmMKLWluZGV4IDNh MTY4Mjc0Ni4uYmZkNDI1ZWFiIDEwMDY0NAotLS0tIGEvYXV0aDIuYwotKysrIGIvYXV0aDIuYwot QEAgLTI3MSw2ICsyNzEsOSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50 MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5h dXRoY3R4dDsKLSAJQXV0aG1ldGhvZCAqbSA9IE5VTEw7Ci0gCWNoYXIgKnVzZXIgPSBOVUxMLCAq c2VydmljZSA9IE5VTEwsICptZXRob2QgPSBOVUxMLCAqc3R5bGUgPSBOVUxMOwotKyNpZmRlZiBX SVRIX1NFTElOVVgKLSsJY2hhciAqcm9sZSA9IE5VTEw7Ci0rI2VuZGlmCi0gCWludCByLCBhdXRo ZW50aWNhdGVkID0gMDsKLSAJZG91YmxlIHRzdGFydCA9IG1vbm90aW1lX2RvdWJsZSgpOwotIAot QEAgLTI4NCw2ICsyODcsMTEgQEAgaW5wdXRfdXNlcmF1dGhfcmVxdWVzdChpbnQgdHlwZSwgdWlu dDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCWRlYnVnKCJ1c2VyYXV0aC1yZXF1ZXN0IGZv ciB1c2VyICVzIHNlcnZpY2UgJXMgbWV0aG9kICVzIiwgdXNlciwgc2VydmljZSwgbWV0aG9kKTsK LSAJZGVidWcoImF0dGVtcHQgJWQgZmFpbHVyZXMgJWQiLCBhdXRoY3R4dC0+YXR0ZW1wdCwgYXV0 aGN0eHQtPmZhaWx1cmVzKTsKLSAKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rCWlmICgocm9sZSA9 IHN0cmNocih1c2VyLCAnLycpKSAhPSBOVUxMKQotKwkJKnJvbGUrKyA9IDA7Ci0rI2VuZGlmCi0r Ci0gCWlmICgoc3R5bGUgPSBzdHJjaHIodXNlciwgJzonKSkgIT0gTlVMTCkKLSAJCSpzdHlsZSsr ID0gMDsKLSAKLUBAIC0yOTUsNiArMzAzLDkgQEAgaW5wdXRfdXNlcmF1dGhfcmVxdWVzdChpbnQg dHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCQlhdXRoY3R4dC0+dXNlciA9 IHhzdHJkdXAodXNlcik7Ci0gCQlhdXRoY3R4dC0+c2VydmljZSA9IHhzdHJkdXAoc2VydmljZSk7 Ci0gCQlhdXRoY3R4dC0+c3R5bGUgPSBzdHlsZSA/IHhzdHJkdXAoc3R5bGUpIDogTlVMTDsKLSsj aWZkZWYgV0lUSF9TRUxJTlVYCi0rCQlhdXRoY3R4dC0+cm9sZSA9IHJvbGUgPyB4c3RyZHVwKHJv bGUpIDogTlVMTDsKLSsjZW5kaWYKLSAJCWlmIChhdXRoY3R4dC0+cHcgJiYgc3RyY21wKHNlcnZp Y2UsICJzc2gtY29ubmVjdGlvbiIpPT0wKSB7Ci0gCQkJYXV0aGN0eHQtPnZhbGlkID0gMTsKLSAJ CQlkZWJ1ZzJfZigic2V0dGluZyB1cCBhdXRoY3R4dCBmb3IgJXMiLCB1c2VyKTsKLUBAIC0zMTQs NiArMzI1LDkgQEAgaW5wdXRfdXNlcmF1dGhfcmVxdWVzdChpbnQgdHlwZSwgdWludDMyX3Qgc2Vx LCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCQkgICAgYXV0aGN0eHQtPnZhbGlkID8gImF1dGhlbnRpY2F0 aW5nICIgOiAiaW52YWxpZCAiLCB1c2VyKTsKLSAJCXNldHByb2N0aXRsZSgiJXMgW25ldF0iLCBh dXRoY3R4dC0+dmFsaWQgPyB1c2VyIDogInVua25vd24iKTsKLSAJCW1tX2luZm9ybV9hdXRoc2Vy dihzZXJ2aWNlLCBzdHlsZSk7Ci0rI2lmZGVmIFdJVEhfU0VMSU5VWAotKyAgICAgICAgIAltbV9p bmZvcm1fYXV0aHJvbGUocm9sZSk7Ci0rI2VuZGlmCi0gCQl1c2VyYXV0aF9iYW5uZXIoc3NoKTsK LSAJCWlmICgociA9IGtleF9zZXJ2ZXJfdXBkYXRlX2V4dF9pbmZvKHNzaCkpICE9IDApCi0gCQkJ ZmF0YWxfZnIociwgImtleF9zZXJ2ZXJfdXBkYXRlX2V4dF9pbmZvIGZhaWxlZCIpOwotZGlmZiAt LWdpdCBhL21pc2MuYyBiL21pc2MuYwotaW5kZXggZWQzZTlkMzE0Li5lOTZmYThkNjEgMTAwNjQ0 Ci0tLS0gYS9taXNjLmMKLSsrKyBiL21pc2MuYwotQEAgLTg2OSw2ICs4NjksNyBAQCBjaGFyICoK LSBjb2xvbihjaGFyICpjcCkKLSB7Ci0gCWludCBmbGFnID0gMDsKLSsJaW50IHN0YXJ0ID0gMTsK LSAKLSAJaWYgKCpjcCA9PSAnOicpCQkvKiBMZWFkaW5nIGNvbG9uIGlzIHBhcnQgb2YgZmlsZSBu YW1lLiAqLwotIAkJcmV0dXJuIE5VTEw7Ci1AQCAtODg0LDYgKzg4NSwxMyBAQCBjb2xvbihjaGFy ICpjcCkKLSAJCQlyZXR1cm4gKGNwKTsKLSAJCWlmICgqY3AgPT0gJy8nKQotIAkJCXJldHVybiBO VUxMOwotKwkJaWYgKHN0YXJ0KSB7Ci0rCQkvKiBTbGFzaCBvbiBiZWdpbm5pbmcgb3IgYWZ0ZXIg ZG90cyBvbmx5IGRlbm90ZXMgZmlsZSBuYW1lLiAqLwotKwkJCWlmICgqY3AgPT0gJy8nKQotKwkJ CQlyZXR1cm4gKDApOwotKwkJCWlmICgqY3AgIT0gJy4nKQotKwkJCQlzdGFydCA9IDA7Ci0rCQl9 Ci0gCX0KLSAJcmV0dXJuIE5VTEw7Ci0gfQotQEAgLTI4MjgsNyArMjgzNiw4IEBAIHN0ZGZkX2Rl dm51bGwoaW50IGRvX3N0ZGluLCBpbnQgZG9fc3Rkb3V0LCBpbnQgZG9fc3RkZXJyKQotIHBpZF90 Ci0gc3VicHJvY2Vzcyhjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmNvbW1hbmQsCi0gICAg IGludCBhYywgY2hhciAqKmF2LCBGSUxFICoqY2hpbGQsIHVfaW50IGZsYWdzLAotLSAgICBzdHJ1 Y3QgcGFzc3dkICpwdywgcHJpdmRyb3BfZm4gKmRyb3BfcHJpdnMsIHByaXZyZXN0b3JlX2ZuICpy ZXN0b3JlX3ByaXZzKQotKyAgICBzdHJ1Y3QgcGFzc3dkICpwdywgcHJpdmRyb3BfZm4gKmRyb3Bf cHJpdnMsCi0rICAgIHByaXZyZXN0b3JlX2ZuICpyZXN0b3JlX3ByaXZzLCBpbnQgaW5ldGQsIHZv aWQgKnRoZV9hdXRoY3R4dCkKLSB7Ci0gCUZJTEUgKmYgPSBOVUxMOwotIAlzdHJ1Y3Qgc3RhdCBz dDsKLUBAIC0yOTYxLDYgKzI5NzAsMTMgQEAgc3VicHJvY2Vzcyhjb25zdCBjaGFyICp0YWcsIGNv bnN0IGNoYXIgKmNvbW1hbmQsCi0gCQkJZXJyb3IoIiVzOiBkdXAyOiAlcyIsIHRhZywgc3RyZXJy b3IoZXJybm8pKTsKLSAJCQlfZXhpdCgxKTsKLSAJCX0KLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0r CQlpZiAoc3NoZF9zZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXMoaW5ldGQsIHRoZV9hdXRoY3R4 dCkgPCAwKSB7Ci0rCQkJZXJyb3IgKCJmYWlsZWQgdG8gY29weSBlbnZpcm9ubWVudDogICVzIiwK LSsJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKLSsJCQlfZXhpdCgxMjcpOwotKwkJfQotKyNlbmRp ZgotIAkJaWYgKGVudiAhPSBOVUxMKQotIAkJCWV4ZWN2ZShhdlswXSwgYXYsIGVudik7Ci0gCQll bHNlCi1kaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCi1pbmRleCA5ZDY2NzJiYjYu LjFlNDFkZmE1MyAxMDA2NDQKLS0tLSBhL21vbml0b3IuYwotKysrIGIvbW9uaXRvci5jCi1AQCAt MTExLDYgKzExMSw5IEBAIGludCBtbV9hbnN3ZXJfc2lnbihzdHJ1Y3Qgc3NoICosIGludCwgc3Ry dWN0IHNzaGJ1ZiAqKTsKLSBpbnQgbW1fYW5zd2VyX3B3bmFtYWxsb3coc3RydWN0IHNzaCAqLCBp bnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1tX2Fuc3dlcl9hdXRoMl9yZWFkX2Jhbm5lcihz dHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKLSBpbnQgbW1fYW5zd2VyX2F1dGhz ZXJ2KHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotKyNpZmRlZiBXSVRIX1NF TElOVVgKLStpbnQgbW1fYW5zd2VyX2F1dGhyb2xlKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qg c3NoYnVmICopOwotKyNlbmRpZgotIGludCBtbV9hbnN3ZXJfYXV0aHBhc3N3b3JkKHN0cnVjdCBz c2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJfYnNkYXV0aHF1ZXJ5 KHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJfYnNk YXV0aHJlc3BvbmQoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci1AQCAtMTg4 LDYgKzE5MSw5IEBAIHN0cnVjdCBtb25fdGFibGUgbW9uX2Rpc3BhdGNoX3Byb3RvMjBbXSA9IHsK LSAgICAge01PTklUT1JfUkVRX1NJR04sIE1PTl9PTkNFLCBtbV9hbnN3ZXJfc2lnbn0sCi0gICAg IHtNT05JVE9SX1JFUV9QV05BTSwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9wd25hbWFsbG93fSwKLSAg ICAge01PTklUT1JfUkVRX0FVVEhTRVJWLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGhzZXJ2fSwK LSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rICAgIHtNT05JVE9SX1JFUV9BVVRIUk9MRSwgTU9OX09O Q0UsIG1tX2Fuc3dlcl9hdXRocm9sZX0sCi0rI2VuZGlmCi0gICAgIHtNT05JVE9SX1JFUV9BVVRI Ml9SRUFEX0JBTk5FUiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9hdXRoMl9yZWFkX2Jhbm5lcn0sCi0g ICAgIHtNT05JVE9SX1JFUV9BVVRIUEFTU1dPUkQsIE1PTl9BVVRILCBtbV9hbnN3ZXJfYXV0aHBh c3N3b3JkfSwKLSAjaWZkZWYgVVNFX1BBTQotQEAgLTk0Niw2ICs5NTIsOSBAQCBtbV9hbnN3ZXJf cHduYW1hbGxvdyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQot IAotIAkvKiBBbGxvdyBzZXJ2aWNlL3N0eWxlIGluZm9ybWF0aW9uIG9uIHRoZSBhdXRoIGNvbnRl eHQgKi8KLSAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9BVVRIU0VS ViwgMSk7Ci0rI2lmZGVmIFdJVEhfU0VMSU5VWAotKwltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0 Y2gsIE1PTklUT1JfUkVRX0FVVEhST0xFLCAxKTsKLSsjZW5kaWYKLSAJbW9uaXRvcl9wZXJtaXQo bW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9BVVRIMl9SRUFEX0JBTk5FUiwgMSk7Ci0gCi0gI2lm ZGVmIFVTRV9QQU0KLUBAIC0xMDIwLDYgKzEwMjksMjYgQEAga2V5X2Jhc2VfdHlwZV9tYXRjaChj b25zdCBjaGFyICptZXRob2QsIGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSwKLSAJcmV0dXJuIGZv dW5kOwotIH0KLSAKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0raW50Ci0rbW1fYW5zd2VyX2F1dGhy b2xlKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCi0rewotKwlp bnQgcjsKLSsJbW9uaXRvcl9wZXJtaXRfYXV0aGVudGljYXRpb25zKDEpOwotKwotKwlpZiAoKHIg PSBzc2hidWZfZ2V0X2NzdHJpbmcobSwgJmF1dGhjdHh0LT5yb2xlLCBOVUxMKSkgIT0gMCkKLSsJ CWZhdGFsX2YoImJ1ZmZlciBlcnJvcjogJXMiLCBzc2hfZXJyKHIpKTsKLSsJZGVidWczX2YoInJv bGU9JXMiLCBhdXRoY3R4dC0+cm9sZSk7Ci0rCi0rCWlmIChzdHJsZW4oYXV0aGN0eHQtPnJvbGUp ID09IDApIHsKLSsJCWZyZWUoYXV0aGN0eHQtPnJvbGUpOwotKwkJYXV0aGN0eHQtPnJvbGUgPSBO VUxMOwotKwl9Ci0rCi0rCXJldHVybiAoMCk7Ci0rfQotKyNlbmRpZgotKwotIGludAotIG1tX2Fu c3dlcl9hdXRocGFzc3dvcmQoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1 ZiAqbSkKLSB7Ci1AQCAtMTM5Miw3ICsxNDIxLDcgQEAgbW9uaXRvcl92YWxpZF91c2VyYmxvYihz dHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgZGF0YWxlbikKLSAJc3Ry dWN0IHNzaGJ1ZiAqYjsKLSAJc3RydWN0IHNzaGtleSAqaG9zdGtleSA9IE5VTEw7Ci0gCWNvbnN0 IHVfY2hhciAqcDsKLS0JY2hhciAqdXNlcnN0eWxlLCAqY3A7Ci0rCWNoYXIgKnVzZXJzdHlsZSwg KnMsICpjcDsKLSAJc2l6ZV90IGxlbjsKLSAJdV9jaGFyIHR5cGU7Ci0gCWludCBob3N0Ym91bmQg PSAwLCByLCBmYWlsID0gMDsKLUBAIC0xNDIzLDYgKzE0NTIsOCBAQCBtb25pdG9yX3ZhbGlkX3Vz ZXJibG9iKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVu KQotIAkJZmFpbCsrOwotIAlpZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcoYiwgJmNwLCBOVUxM KSkgIT0gMCkKLSAJCWZhdGFsX2ZyKHIsICJwYXJzZSB1c2Vyc3R5bGUiKTsKLSsJaWYgKChzID0g c3RyY2hyKGNwLCAnLycpKSAhPSBOVUxMKQotKwkJKnMgPSAnXDAnOwotIAl4YXNwcmludGYoJnVz ZXJzdHlsZSwgIiVzJXMlcyIsIGF1dGhjdHh0LT51c2VyLAotIAkgICAgYXV0aGN0eHQtPnN0eWxl ID8gIjoiIDogIiIsCi0gCSAgICBhdXRoY3R4dC0+c3R5bGUgPyBhdXRoY3R4dC0+c3R5bGUgOiAi Iik7Ci1AQCAtMTQ3Myw3ICsxNTA0LDcgQEAgbW9uaXRvcl92YWxpZF9ob3N0YmFzZWRibG9iKGNv bnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgZGF0YWxlbiwKLSB7Ci0gCXN0cnVjdCBzc2hidWYgKmI7 Ci0gCWNvbnN0IHVfY2hhciAqcDsKLS0JY2hhciAqY3AsICp1c2Vyc3R5bGU7Ci0rCWNoYXIgKmNw LCAqcywgKnVzZXJzdHlsZTsKLSAJc2l6ZV90IGxlbjsKLSAJaW50IHIsIGZhaWwgPSAwOwotIAl1 X2NoYXIgdHlwZTsKLUBAIC0xNDk0LDYgKzE1MjUsOCBAQCBtb25pdG9yX3ZhbGlkX2hvc3RiYXNl ZGJsb2IoY29uc3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVuLAotIAkJZmFpbCsrOwotIAlp ZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcoYiwgJmNwLCBOVUxMKSkgIT0gMCkKLSAJCWZhdGFs X2ZyKHIsICJwYXJzZSB1c2Vyc3R5bGUiKTsKLSsJaWYgKChzID0gc3RyY2hyKGNwLCAnLycpKSAh PSBOVUxMKQotKwkJKnMgPSAnXDAnOwotIAl4YXNwcmludGYoJnVzZXJzdHlsZSwgIiVzJXMlcyIs IGF1dGhjdHh0LT51c2VyLAotIAkgICAgYXV0aGN0eHQtPnN0eWxlID8gIjoiIDogIiIsCi0gCSAg ICBhdXRoY3R4dC0+c3R5bGUgPyBhdXRoY3R4dC0+c3R5bGUgOiAiIik7Ci1kaWZmIC0tZ2l0IGEv bW9uaXRvci5oIGIvbW9uaXRvci5oCi1pbmRleCBmZTBiMDBiMmUuLjFiNDZlNzk0ZSAxMDA2NDQK LS0tLSBhL21vbml0b3IuaAotKysrIGIvbW9uaXRvci5oCi1AQCAtNTcsNiArNTcsMTAgQEAgZW51 bSBtb25pdG9yX3JlcXR5cGUgewotIAlNT05JVE9SX1JFUV9URVJNID0gNTAsCi0gCU1PTklUT1Jf UkVRX1NUQVRFID0gNTEsIE1PTklUT1JfQU5TX1NUQVRFID0gNTIsCi0gCi0rI2lmZGVmIFdJVEhf U0VMSU5VWAotKwlNT05JVE9SX1JFUV9BVVRIUk9MRSA9IDgwLAotKyNlbmRpZgotKwotIAlNT05J VE9SX1JFUV9QQU1fU1RBUlQgPSAxMDAsCi0gCU1PTklUT1JfUkVRX1BBTV9BQ0NPVU5UID0gMTAy LCBNT05JVE9SX0FOU19QQU1fQUNDT1VOVCA9IDEwMywKLSAJTU9OSVRPUl9SRVFfUEFNX0lOSVRf Q1RYID0gMTA0LCBNT05JVE9SX0FOU19QQU1fSU5JVF9DVFggPSAxMDUsCi1kaWZmIC0tZ2l0IGEv bW9uaXRvcl93cmFwLmMgYi9tb25pdG9yX3dyYXAuYwotaW5kZXggODE1OTZhNGNjLi5mM2MzNDFi YzcgMTAwNjQ0Ci0tLS0gYS9tb25pdG9yX3dyYXAuYwotKysrIGIvbW9uaXRvcl93cmFwLmMKLUBA IC00NzMsNiArNDczLDI3IEBAIG1tX2luZm9ybV9hdXRoc2VydihjaGFyICpzZXJ2aWNlLCBjaGFy ICpzdHlsZSkKLSAJc3NoYnVmX2ZyZWUobSk7Ci0gfQotIAotKy8qIEluZm9ybSB0aGUgcHJpdmls ZWdlZCBwcm9jZXNzIGFib3V0IHJvbGUgKi8KLSsKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rdm9p ZAotK21tX2luZm9ybV9hdXRocm9sZShjaGFyICpyb2xlKQotK3sKLSsJaW50IHI7Ci0rCXN0cnVj dCBzc2hidWYgKm07Ci0rCi0rCWRlYnVnM19mKCJlbnRlcmluZyIpOwotKwotKwlpZiAoKG0gPSBz c2hidWZfbmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwot KwlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgcm9sZSA/IHJvbGUgOiAiIikpICE9IDAp Ci0rCQlmYXRhbF9mKCJidWZmZXIgZXJyb3I6ICVzIiwgc3NoX2VycihyKSk7Ci0rCW1tX3JlcXVl c3Rfc2VuZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfUkVRX0FVVEhST0xFLCBtKTsKLSsK LSsJc3NoYnVmX2ZyZWUobSk7Ci0rfQotKyNlbmRpZgotKwotIC8qIERvIHRoZSBwYXNzd29yZCBh dXRoZW50aWNhdGlvbiAqLwotIGludAotIG1tX2F1dGhfcGFzc3dvcmQoc3RydWN0IHNzaCAqc3No LCBjaGFyICpwYXNzd29yZCkKLWRpZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuaCBiL21vbml0b3Jf d3JhcC5oCi1pbmRleCBjMmY3Zjk3ZDkuLjNlMDhkZGQ3OCAxMDA2NDQKLS0tLSBhL21vbml0b3Jf d3JhcC5oCi0rKysgYi9tb25pdG9yX3dyYXAuaAotQEAgLTUxLDYgKzUxLDkgQEAgaW50IG1tX3Nz aGtleV9zaWduKHN0cnVjdCBzc2ggKiwgc3RydWN0IHNzaGtleSAqLCB1X2NoYXIgKiosIHNpemVf dCAqLAotICAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiwKLSAgICAgY29uc3QgY2hhciAqLCB1X2ludCBjb21wYXQpOwotIHZvaWQgbW1faW5mb3Jt X2F1dGhzZXJ2KGNoYXIgKiwgY2hhciAqKTsKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rdm9pZCBt bV9pbmZvcm1fYXV0aHJvbGUoY2hhciAqKTsKLSsjZW5kaWYKLSBzdHJ1Y3QgcGFzc3dkICptbV9n ZXRwd25hbWFsbG93KHN0cnVjdCBzc2ggKiwgY29uc3QgY2hhciAqKTsKLSBjaGFyICptbV9hdXRo Ml9yZWFkX2Jhbm5lcih2b2lkKTsKLSBpbnQgbW1fYXV0aF9wYXNzd29yZChzdHJ1Y3Qgc3NoICos IGNoYXIgKik7Ci0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvMDAwMS1vcGVuc3NoLTYuN3Ax LWNvdmVyaXR5LnBhdGNoIGIvMDAwMS1vcGVuc3NoLTYuN3AxLWNvdmVyaXR5LnBhdGNoCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjAxZjUKLS0tIC9kZXYvbnVsbAorKysg Yi8wMDAxLW9wZW5zc2gtNi43cDEtY292ZXJpdHkucGF0Y2gKQEAgLTAsMCArMSwxOTIgQEAKK0Zy b20gZmE2Zjc3ZDE2NTc0YmY0NTQzNDQzMWMyZmQ2MGZjZDM0ZTlhMGM4ZiBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4K K0RhdGU6IEZyaSwgNyBBdWcgMjAyNiAxNzoyNTowNyArMDIwMAorU3ViamVjdDogW1BBVENIIDAx LzUzXSBvcGVuc3NoLTYuN3AxLWNvdmVyaXR5CisKKy0tLQorIGtybC5jICAgICAgICAgICAgICAg ICAgICAgICAgIHwgMyArKysKKyBsb2dpbnJlYy5jICAgICAgICAgICAgICAgICAgICB8IDIgKysK KyBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDMgKysrCisgbW9uaXRvci5jICAgICAg ICAgICAgICAgICAgICAgfCA0ICsrLS0KKyBvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYyB8 IDIgKy0KKyBvcGVuYnNkLWNvbXBhdC9ic2QtcHNlbGVjdC5jICB8IDggKysrKy0tLS0KKyByZWFk Y29uZi5jICAgICAgICAgICAgICAgICAgICB8IDEgKworIHNlcnZjb25mLmMgICAgICAgICAgICAg ICAgICAgIHwgNSArKystLQorIHNlcnZlcmxvb3AuYyAgICAgICAgICAgICAgICAgIHwgMiArLQor IDkgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2Rp ZmYgLS1naXQgYS9rcmwuYyBiL2tybC5jCitpbmRleCAwZTJiNWYxNTUuLmYyZDEwNWYyMyAxMDA2 NDQKKy0tLSBhL2tybC5jCisrKysgYi9rcmwuYworQEAgLTEyMDIsNiArMTIwMiw3IEBAIGlzX2tl eV9yZXZva2VkKHN0cnVjdCBzc2hfa3JsICprcmwsIGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSkK KyAJCXJldHVybiByOworIAllcmIgPSBSQl9GSU5EKHJldm9rZWRfYmxvYl90cmVlLCAma3JsLT5y ZXZva2VkX3NoYTFzLCAmcmIpOworIAlmcmVlKHJiLmJsb2IpOworKwlyYi5ibG9iID0gTlVMTDsg LyogbWFrZSBjb3Zlcml0eSBoYXBweSAqLworIAlpZiAoZXJiICE9IE5VTEwpIHsKKyAJCUtSTF9E QkcoKCJyZXZva2VkIGJ5IGtleSBTSEExIikpOworIAkJcmV0dXJuIFNTSF9FUlJfS0VZX1JFVk9L RUQ7CitAQCAtMTIxMiw2ICsxMjEzLDcgQEAgaXNfa2V5X3Jldm9rZWQoc3RydWN0IHNzaF9rcmwg KmtybCwgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5KQorIAkJcmV0dXJuIHI7CisgCWVyYiA9IFJC X0ZJTkQocmV2b2tlZF9ibG9iX3RyZWUsICZrcmwtPnJldm9rZWRfc2hhMjU2cywgJnJiKTsKKyAJ ZnJlZShyYi5ibG9iKTsKKysJcmIuYmxvYiA9IE5VTEw7IC8qIG1ha2UgY292ZXJpdHkgaGFwcHkg Ki8KKyAJaWYgKGVyYiAhPSBOVUxMKSB7CisgCQlLUkxfREJHKCgicmV2b2tlZCBieSBrZXkgU0hB MjU2IikpOworIAkJcmV0dXJuIFNTSF9FUlJfS0VZX1JFVk9LRUQ7CitAQCAtMTIyMyw2ICsxMjI1 LDcgQEAgaXNfa2V5X3Jldm9rZWQoc3RydWN0IHNzaF9rcmwgKmtybCwgY29uc3Qgc3RydWN0IHNz aGtleSAqa2V5KQorIAkJcmV0dXJuIHI7CisgCWVyYiA9IFJCX0ZJTkQocmV2b2tlZF9ibG9iX3Ry ZWUsICZrcmwtPnJldm9rZWRfa2V5cywgJnJiKTsKKyAJZnJlZShyYi5ibG9iKTsKKysJcmIuYmxv YiA9IE5VTEw7IC8qIG1ha2UgY292ZXJpdHkgaGFwcHkgKi8KKyAJaWYgKGVyYiAhPSBOVUxMKSB7 CisgCQlLUkxfREJHKCgicmV2b2tlZCBieSBleHBsaWNpdCBrZXkiKSk7CisgCQlyZXR1cm4gU1NI X0VSUl9LRVlfUkVWT0tFRDsKK2RpZmYgLS1naXQgYS9sb2dpbnJlYy5jIGIvbG9naW5yZWMuYwor aW5kZXggNzQ5OWFhOTc1Li4yODA3Y2FkNGEgMTAwNjQ0CistLS0gYS9sb2dpbnJlYy5jCisrKysg Yi9sb2dpbnJlYy5jCitAQCAtNjgwLDkgKzY4MCwxMSBAQCBjb25zdHJ1Y3RfdXRtcChzdHJ1Y3Qg bG9naW5pbmZvICpsaSwKKyAJICovCisgCisgCS8qIFVzZSBzdHJuY3B5IGJlY2F1c2Ugd2UgZG9u J3QgbmVjZXNzYXJpbHkgd2FudCBudWxsIHRlcm1pbmF0aW9uICovCisrCS8qIGNvdmVyaXR5W2J1 ZmZlcl9zaXplX3dhcm5pbmcgOiBGQUxTRV0gKi8KKyAJc3RybmNweSh1dC0+dXRfbmFtZSwgbGkt PnVzZXJuYW1lLAorIAkgICAgTUlOX1NJWkVPRih1dC0+dXRfbmFtZSwgbGktPnVzZXJuYW1lKSk7 CisgIyBpZmRlZiBIQVZFX0hPU1RfSU5fVVRNUAorKwkvKiBjb3Zlcml0eVtidWZmZXJfc2l6ZV93 YXJuaW5nIDogRkFMU0VdICovCisgCXN0cm5jcHkodXQtPnV0X2hvc3QsIGxpLT5ob3N0bmFtZSwK KyAJICAgIE1JTl9TSVpFT0YodXQtPnV0X2hvc3QsIGxpLT5ob3N0bmFtZSkpOworICMgZW5kaWYK K2RpZmYgLS1naXQgYS9taXNjLmMgYi9taXNjLmMKK2luZGV4IDUxN2ZhN2E5Ny4uODhkYzc4ODIx IDEwMDY0NAorLS0tIGEvbWlzYy5jCisrKysgYi9taXNjLmMKK0BAIC0xNjEyLDYgKzE2MTIsOCBA QCBzYW5pdGlzZV9zdGRmZCh2b2lkKQorIAl9CisgCWlmIChudWxsZmQgPiBTVERFUlJfRklMRU5P KQorIAkJY2xvc2UobnVsbGZkKTsKKysJLyogY292ZXJpdHlbbGVha2VkX2hhbmRsZSA6IEZBTFNF XSovCisrCS8qIGNvdmVyaXR5W2xlYWtlZF9oYW5kbGUgOiBGQUxTRV0qLworIH0KKyAKKyBjaGFy ICoKK0BAIC0yODE1LDYgKzI4MTcsNyBAQCBzdGRmZF9kZXZudWxsKGludCBkb19zdGRpbiwgaW50 IGRvX3N0ZG91dCwgaW50IGRvX3N0ZGVycikKKyAJfQorIAlpZiAoZGV2bnVsbCA+IFNUREVSUl9G SUxFTk8pCisgCQljbG9zZShkZXZudWxsKTsKKysJLyogY292ZXJpdHlbbGVha2VkX2hhbmRsZSA6 IEZBTFNFXSovCisgCXJldHVybiByZXQ7CisgfQorIAorZGlmZiAtLWdpdCBhL21vbml0b3IuYyBi L21vbml0b3IuYworaW5kZXggMTQ5NjcxMTQ1Li4wZTU4NzE5OTQgMTAwNjQ0CistLS0gYS9tb25p dG9yLmMKKysrKyBiL21vbml0b3IuYworQEAgLTM2Nyw3ICszNjcsNyBAQCBtb25pdG9yX2NoaWxk X3ByZWF1dGgoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCisgCW1t X2dldF9rZXlzdGF0ZShzc2gsIHBtb25pdG9yKTsKKyAKKyAJLyogRHJhaW4gYW55IGJ1ZmZlcmVk IG1lc3NhZ2VzIGZyb20gdGhlIGNoaWxkICovCistCXdoaWxlIChwbW9uaXRvci0+bV9sb2dfcmVj dmZkICE9IC0xICYmIG1vbml0b3JfcmVhZF9sb2cocG1vbml0b3IpID09IDApCisrCXdoaWxlIChw bW9uaXRvci0+bV9sb2dfcmVjdmZkID49IDAgJiYgbW9uaXRvcl9yZWFkX2xvZyhwbW9uaXRvcikg PT0gMCkKKyAJCTsKKyAKKyAJLyogV2FpdCBmb3IgdGhlIGNoaWxkJ3MgZXhpdCBzdGF0dXMgKi8K K0BAIC0xNzMzLDcgKzE3MzMsNyBAQCBtbV9hbnN3ZXJfcHR5KHN0cnVjdCBzc2ggKnNzaCwgaW50 IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCisgCXMtPnB0eW1hc3RlciA9IHMtPnB0eWZkOworIAor IAlkZWJ1ZzNfZigidHR5ICVzIHB0eWZkICVkIiwgcy0+dHR5LCBzLT50dHlmZCk7CistCisrCS8q IGNvdmVyaXR5W2xlYWtlZF9oYW5kbGUgOiBGQUxTRV0gKi8KKyAJcmV0dXJuICgwKTsKKyAKKyAg ZXJyb3I6CitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmMgYi9vcGVu YnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYworaW5kZXggMzQ2YzdmZTU2Li5mNDI3OTJmZGUgMTAw NjQ0CistLS0gYS9vcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYworKysrIGIvb3BlbmJzZC1j b21wYXQvYmluZHJlc3Zwb3J0LmMKK0BAIC01OSw3ICs1OSw3IEBAIGJpbmRyZXN2cG9ydF9zYShp bnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqc2EpCisgCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNjsK KyAJdV9pbnQxNl90ICpwb3J0cDsKKyAJdV9pbnQxNl90IHBvcnQ7CistCXNvY2tsZW5fdCBzYWxl bjsKKysJc29ja2xlbl90IHNhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsK KyAJaW50IGk7CisgCisgCWlmIChzYSA9PSBOVUxMKSB7CitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1j b21wYXQvYnNkLXBzZWxlY3QuYyBiL29wZW5ic2QtY29tcGF0L2JzZC1wc2VsZWN0LmMKK2luZGV4 IDI2YmRjM2UwOC4uOGUyOTM5Yjk1IDEwMDY0NAorLS0tIGEvb3BlbmJzZC1jb21wYXQvYnNkLXBz ZWxlY3QuYworKysrIGIvb3BlbmJzZC1jb21wYXQvYnNkLXBzZWxlY3QuYworQEAgLTg1LDEzICs4 NSwxMyBAQCBwc2VsZWN0X25vdGlmeV9zZXR1cCh2b2lkKQorIHN0YXRpYyB2b2lkCisgcHNlbGVj dF9ub3RpZnlfcGFyZW50KHZvaWQpCisgeworLQlpZiAobm90aWZ5X3BpcGVbMV0gIT0gLTEpCisr CWlmIChub3RpZnlfcGlwZVsxXSA+PSAwKQorIAkJKHZvaWQpd3JpdGUobm90aWZ5X3BpcGVbMV0s ICIiLCAxKTsKKyB9Cisgc3RhdGljIHZvaWQKKyBwc2VsZWN0X25vdGlmeV9wcmVwYXJlKGZkX3Nl dCAqcmVhZHNldCkKKyB7CistCWlmIChub3RpZnlfcGlwZVswXSAhPSAtMSkKKysJaWYgKG5vdGlm eV9waXBlWzBdID49IDApCisgCQlGRF9TRVQobm90aWZ5X3BpcGVbMF0sIHJlYWRzZXQpOworIH0K KyBzdGF0aWMgdm9pZAorQEAgLTk5LDggKzk5LDggQEAgcHNlbGVjdF9ub3RpZnlfZG9uZShmZF9z ZXQgKnJlYWRzZXQpCisgeworIAljaGFyIGM7CisgCistCWlmIChub3RpZnlfcGlwZVswXSAhPSAt MSAmJiBGRF9JU1NFVChub3RpZnlfcGlwZVswXSwgcmVhZHNldCkpIHsKKy0JCXdoaWxlIChyZWFk KG5vdGlmeV9waXBlWzBdLCAmYywgMSkgIT0gLTEpCisrCWlmIChub3RpZnlfcGlwZVswXSA+PSAw ICYmIEZEX0lTU0VUKG5vdGlmeV9waXBlWzBdLCByZWFkc2V0KSkgeworKwkJd2hpbGUgKHJlYWQo bm90aWZ5X3BpcGVbMF0sICZjLCAxKSA+PSAwKQorIAkJCWRlYnVnMl9mKCJyZWFkaW5nIik7Cisg CQlGRF9DTFIobm90aWZ5X3BpcGVbMF0sIHJlYWRzZXQpOworIAl9CitkaWZmIC0tZ2l0IGEvcmVh ZGNvbmYuYyBiL3JlYWRjb25mLmMKK2luZGV4IGJjNDhiNGY1NS4uNzQ2NTIxNmYzIDEwMDY0NAor LS0tIGEvcmVhZGNvbmYuYworKysrIGIvcmVhZGNvbmYuYworQEAgLTIxMTEsNiArMjExMSw3IEBA IHBhcnNlX3B1YmtleV9hbGdvczoKKyAJCQl9IGVsc2UgaWYgKHIgIT0gMCkgeworIAkJCQllcnJv cigiJS4yMDBzIGxpbmUgJWQ6IGdsb2IgZmFpbGVkIGZvciAlcy4iLAorIAkJCQkgICAgZmlsZW5h bWUsIGxpbmVudW0sIGFyZzIpOworKwkJCQlmcmVlKGFyZzIpOworIAkJCQlnb3RvIG91dDsKKyAJ CQl9CisgCQkJZnJlZShhcmcyKTsKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYu YworaW5kZXggYWMwYzMxZDk1Li5lNzgxOWQ1OWEgMTAwNjQ0CistLS0gYS9zZXJ2Y29uZi5jCisr KysgYi9zZXJ2Y29uZi5jCitAQCAtMjAyNiw4ICsyMDI2LDkgQEAgcHJvY2Vzc19zZXJ2ZXJfY29u ZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwKKyAJCWlm ICgqYWN0aXZlcCAmJiAqY2hhcnB0ciA9PSBOVUxMKSB7CisgCQkJKmNoYXJwdHIgPSB0aWxkZV9l eHBhbmRfZmlsZW5hbWUoYXJnLCBnZXR1aWQoKSk7CisgCQkJLyogaW5jcmVhc2Ugb3B0aW9uYWwg Y291bnRlciAqLworLQkJCWlmIChpbnRwdHIgIT0gTlVMTCkKKy0JCQkJKmludHB0ciA9ICppbnRw dHIgKyAxOworKwkJCS8qIERFQUQgQ09ERSBpbnRwdHIgaXMgc3RpbGwgTlVMTCA7KQorKyAgCQkJ IGlmIChpbnRwdHIgIT0gTlVMTCkKKysJCQkJKmludHB0ciA9ICppbnRwdHIgKyAxOyAqLworIAkJ fQorIAkJYnJlYWs7CisgCitkaWZmIC0tZ2l0IGEvc2VydmVybG9vcC5jIGIvc2VydmVybG9vcC5j CitpbmRleCA5ZDhhMzQyOWUuLmMyMjY4MTQ4MyAxMDA2NDQKKy0tLSBhL3NlcnZlcmxvb3AuYwor KysrIGIvc2VydmVybG9vcC5jCitAQCAtNTM2LDcgKzUzNiw3IEBAIHNlcnZlcl9yZXF1ZXN0X3R1 bihzdHJ1Y3Qgc3NoICpzc2gpCisgCQlkZWJ1Z19mKCJpbnZhbGlkIHR1biIpOworIAkJZ290byBk b25lOworIAl9CistCWlmIChhdXRoX29wdHMtPmZvcmNlX3R1bl9kZXZpY2UgIT0gLTEpIHsKKysJ aWYgKGF1dGhfb3B0cy0+Zm9yY2VfdHVuX2RldmljZSA+PSAwKSB7CisgCQlpZiAodHVuICE9IFNT SF9UVU5JRF9BTlkgJiYKKyAJCSAgICBhdXRoX29wdHMtPmZvcmNlX3R1bl9kZXZpY2UgIT0gKGlu dCl0dW4pCisgCQkJZ290byBkb25lOworLS0gCisyLjU1LjAKKwoKZGlmZiAtLWdpdCBhLzAwMDIt QWRkLVNFTGludXgtcm9sZS1hbmQtTUxTLU11bHRpLUxldmVsLVNlY3VyaXR5LXN1cHBvci5wYXRj aCBiLzAwMDItQWRkLVNFTGludXgtcm9sZS1hbmQtTUxTLU11bHRpLUxldmVsLVNlY3VyaXR5LXN1 cHBvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y3MDMwCi0t LSAvZGV2L251bGwKKysrIGIvMDAwMi1BZGQtU0VMaW51eC1yb2xlLWFuZC1NTFMtTXVsdGktTGV2 ZWwtU2VjdXJpdHktc3VwcG9yLnBhdGNoCkBAIC0wLDAgKzEsNDE2IEBACitGcm9tIDNjNDdmMmJi MjIzZTRlNDAwZmFjMDhjMTJiZjM2YTJhODhmYTU1YmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBNb24s IDEzIEFwciAyMDI2IDE0OjA2OjMyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvNTNdIEFkZCBT RUxpbnV4IHJvbGUgYW5kIE1MUyAoTXVsdGktTGV2ZWwgU2VjdXJpdHkpIHN1cHBvcnQKKworb3Bl bnNzaC03LjhwMS1yb2xlLW1scworCitBZGQgc3VwcG9ydCBmb3IgU0VMaW51eCByb2xlLWJhc2Vk IGFjY2VzcyBjb250cm9sIGFuZCBNdWx0aS1MZXZlbAorU2VjdXJpdHkgKE1MUykgYnkgYWxsb3dp bmcgdXNlcnMgdG8gc3BlY2lmeSB0aGVpciByb2xlIGFzIHBhcnQgb2YgdGhlCit1c2VybmFtZSBp biB0aGUgZm9ybWF0IHVzZXIvcm9sZS4KKworQ2hhbmdlczoKKy0gYXV0aC5oOiBBZGQgcm9sZSBm aWVsZCB0byBBdXRoY3R4dCBzdHJ1Y3R1cmUKKy0gYXV0aDIuYzogUGFyc2Ugcm9sZSBmcm9tIHVz ZXJuYW1lIGFuZCBpbmZvcm0gbW9uaXRvciBwcm9jZXNzCistIGF1dGgyLWdzcy5jOiBJbmNsdWRl IHJvbGUgaW4gR1NTQVBJIE1JQyBhdXRoZW50aWNhdGlvbgorLSBhdXRoMi1ob3N0YmFzZWQuYzog SW5jbHVkZSByb2xlIGluIGhvc3RiYXNlZCBhdXRoZW50aWNhdGlvbiBzaWduYXR1cmUKKy0gYXV0 aDItcHVia2V5LmM6IEluY2x1ZGUgcm9sZSBpbiBwdWJrZXkgYXV0aGVudGljYXRpb24gdXNlcnN0 eWxlCistIG1vbml0b3IuYzogQWRkIG1tX2Fuc3dlcl9hdXRocm9sZSgpIGFuZCBoYW5kbGUgcm9s ZSBpbiBhdXRoZW50aWNhdGlvbgorICBibG9iIHZhbGlkYXRpb24KKy0gbW9uaXRvcl93cmFwLmM6 IEFkZCBtbV9pbmZvcm1fYXV0aHJvbGUoKSBmb3IgcHJpdmlsZWdlIHNlcGFyYXRpb24KKy0gbWlz Yy5jOiBVcGRhdGUgY29sb24oKSB0byBoYW5kbGUgL3JvbGUgc3ludGF4IGluIGZpbGUgcGF0aHMK KworQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25uZXQgNC41IDxub3JlcGx5QGFudGhyb3BpYy5j b20+CistLS0KKyBhdXRoLmggICAgICAgICAgICB8ICAzICsrKworIGF1dGgyLWdzcy5jICAgICAg IHwgMTEgKysrKysrKysrKy0KKyBhdXRoMi1ob3N0YmFzZWQuYyB8ICA5ICsrKysrKysrKworIGF1 dGgyLXB1YmtleS5jICAgIHwgMTkgKysrKysrKysrKysrKysrLS0tLQorIGF1dGgyLmMgICAgICAg ICAgIHwgMTQgKysrKysrKysrKysrKysKKyBtaXNjLmMgICAgICAgICAgICB8IDE4ICsrKysrKysr KysrKysrKysrLQorIG1vbml0b3IuYyAgICAgICAgIHwgMzcgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLQorIG1vbml0b3IuaCAgICAgICAgIHwgIDQgKysrKworIG1vbml0b3Jf d3JhcC5jICAgIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCisgbW9uaXRvcl93cmFwLmggICAg fCAgMyArKysKKyAxMCBmaWxlcyBjaGFuZ2VkLCAxMzEgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlv bnMoLSkKKworZGlmZiAtLWdpdCBhL2F1dGguaCBiL2F1dGguaAoraW5kZXggMGYxMTQ1OGNhLi5l ZmU4MTkzMjMgMTAwNjQ0CistLS0gYS9hdXRoLmgKKysrKyBiL2F1dGguaAorQEAgLTY1LDYgKzY1 LDkgQEAgc3RydWN0IEF1dGhjdHh0IHsKKyAJY2hhcgkJKnNlcnZpY2U7CisgCXN0cnVjdCBwYXNz d2QJKnB3OwkJLyogc2V0IGlmICd2YWxpZCcgKi8KKyAJY2hhcgkJKnN0eWxlOworKyNpZmRlZiBX SVRIX1NFTElOVVgKKysJY2hhcgkJKnJvbGU7CisrI2VuZGlmCisgCisgCS8qIE1ldGhvZCBsaXN0 cyBmb3IgbXVsdGlwbGUgYXV0aGVudGljYXRpb24gKi8KKyAJY2hhcgkJKiphdXRoX21ldGhvZHM7 CS8qIG1vZGlmaWVkIGZyb20gc2VydmVyIGNvbmZpZyAqLworZGlmZiAtLWdpdCBhL2F1dGgyLWdz cy5jIGIvYXV0aDItZ3NzLmMKK2luZGV4IDllOTQ5NmU1My4uNTUzZmJhMzI4IDEwMDY0NAorLS0t IGEvYXV0aDItZ3NzLmMKKysrKyBiL2F1dGgyLWdzcy5jCitAQCAtMjgwLDYgKzI4MCw3IEBAIGlu cHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkK KyAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRoY3R4dDsKKyAJR3NzY3R4dCAqZ3NzY3R4 dDsKKyAJaW50IHIsIGF1dGhlbnRpY2F0ZWQgPSAwOworKwljaGFyICptaWN1c2VyOworIAlzdHJ1 Y3Qgc3NoYnVmICpiOworIAlnc3NfYnVmZmVyX2Rlc2MgbWljLCBnc3NidWY7CisgCXVfY2hhciAq cDsKK0BAIC0yOTcsNyArMjk4LDEzIEBAIGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQz Ml90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKKyAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVk Iik7CisgCW1pYy52YWx1ZSA9IHA7CisgCW1pYy5sZW5ndGggPSBsZW47CistCXNzaF9nc3NhcGlf YnVpbGRtaWMoYiwgYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5zZXJ2aWNlLAorKyNpZmRlZiBX SVRIX1NFTElOVVgKKysJaWYgKGF1dGhjdHh0LT5yb2xlICYmIGF1dGhjdHh0LT5yb2xlWzBdICE9 IDApCisrCQl4YXNwcmludGYoJm1pY3VzZXIsICIlcy8lcyIsIGF1dGhjdHh0LT51c2VyLCBhdXRo Y3R4dC0+cm9sZSk7CisrCWVsc2UKKysjZW5kaWYKKysJCW1pY3VzZXIgPSBhdXRoY3R4dC0+dXNl cjsKKysJc3NoX2dzc2FwaV9idWlsZG1pYyhiLCBtaWN1c2VyLCBhdXRoY3R4dC0+c2VydmljZSwK KyAJICAgICJnc3NhcGktd2l0aC1taWMiLCBzc2gtPmtleC0+c2Vzc2lvbl9pZCk7CisgCisgCWlm ICgoZ3NzYnVmLnZhbHVlID0gc3NoYnVmX211dGFibGVfcHRyKGIpKSA9PSBOVUxMKQorQEAgLTMx MCw2ICszMTcsOCBAQCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBz dHJ1Y3Qgc3NoICpzc2gpCisgCQlsb2dpdCgiR1NTQVBJIE1JQyBjaGVjayBmYWlsZWQiKTsKKyAK KyAJc3NoYnVmX2ZyZWUoYik7CisrCWlmIChtaWN1c2VyICE9IGF1dGhjdHh0LT51c2VyKQorKwkJ ZnJlZShtaWN1c2VyKTsKKyAJZnJlZShtaWMudmFsdWUpOworIAorIAlpZiAoIWF1dGhlbnRpY2F0 ZWQpCitkaWZmIC0tZ2l0IGEvYXV0aDItaG9zdGJhc2VkLmMgYi9hdXRoMi1ob3N0YmFzZWQuYwor aW5kZXggNTY0YThkM2NjLi42YTY3MDRkOTMgMTAwNjQ0CistLS0gYS9hdXRoMi1ob3N0YmFzZWQu YworKysrIGIvYXV0aDItaG9zdGJhc2VkLmMKK0BAIC0xMzEsNyArMTMxLDE2IEBAIHVzZXJhdXRo X2hvc3RiYXNlZChzdHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IGNoYXIgKm1ldGhvZCkKKyAJLyogcmVj b25zdHJ1Y3QgcGFja2V0ICovCisgCWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nYihiLCBzc2gt PmtleC0+c2Vzc2lvbl9pZCkpICE9IDAgfHwKKyAJICAgIChyID0gc3NoYnVmX3B1dF91OChiLCBT U0gyX01TR19VU0VSQVVUSF9SRVFVRVNUKSkgIT0gMCB8fAorKyNpZmRlZiBXSVRIX1NFTElOVVgK KysJICAgIChhdXRoY3R4dC0+cm9sZQorKwkgICAgPyAoIChyID0gc3NoYnVmX3B1dF91MzIoYiwg c3RybGVuKGF1dGhjdHh0LT51c2VyKStzdHJsZW4oYXV0aGN0eHQtPnJvbGUpKzEpKSAhPSAwIHx8 CisrCSAgICAgICAgKHIgPSBzc2hidWZfcHV0KGIsIGF1dGhjdHh0LT51c2VyLCBzdHJsZW4oYXV0 aGN0eHQtPnVzZXIpKSkgIT0gMCB8fAorKwkgICAgICAgIChyID0gc3NoYnVmX3B1dF91OChiLCAn LycpICE9IDApIHx8CisrCSAgICAgICAgKHIgPSBzc2hidWZfcHV0KGIsIGF1dGhjdHh0LT5yb2xl LCBzdHJsZW4oYXV0aGN0eHQtPnJvbGUpKSkgIT0gMCkKKysJICAgIDogKHIgPSBzc2hidWZfcHV0 X2NzdHJpbmcoYiwgYXV0aGN0eHQtPnVzZXIpKSAhPSAwKSB8fAorKyNlbHNlCisgCSAgICAociA9 IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCBhdXRoY3R4dC0+dXNlcikpICE9IDAgfHwKKysjZW5kaWYK KyAJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKGIsIGF1dGhjdHh0LT5zZXJ2aWNlKSkgIT0g MCB8fAorIAkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgbWV0aG9kKSkgIT0gMCB8fAor IAkgICAgKHIgPSBzc2hidWZfcHV0X3N0cmluZyhiLCBwa2FsZywgYWxlbikpICE9IDAgfHwKK2Rp ZmYgLS1naXQgYS9hdXRoMi1wdWJrZXkuYyBiL2F1dGgyLXB1YmtleS5jCitpbmRleCBjMTViMWJh NzEuLmRjMDdmYWE5MiAxMDA2NDQKKy0tLSBhL2F1dGgyLXB1YmtleS5jCisrKysgYi9hdXRoMi1w dWJrZXkuYworQEAgLTcxLDYgKzcxLDggQEAKKyAKKyAvKiBpbXBvcnQgKi8KKyBleHRlcm4gU2Vy dmVyT3B0aW9ucyBvcHRpb25zOworK2V4dGVybiBpbnQgaW5ldGRfZmxhZzsKKytleHRlcm4gQXV0 aGN0eHQgKnRoZV9hdXRoY3R4dDsKKyBleHRlcm4gc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1ldGhv ZGNmZ19wdWJrZXk7CisgCisgc3RhdGljIGNoYXIgKgorQEAgLTIwMSw5ICsyMDMsMTYgQEAgdXNl cmF1dGhfcHVia2V5KHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQorIAkJCWdv dG8gZG9uZTsKKyAJCX0KKyAJCS8qIHJlY29uc3RydWN0IHBhY2tldCAqLworLQkJeGFzcHJpbnRm KCZ1c2Vyc3R5bGUsICIlcyVzJXMiLCBhdXRoY3R4dC0+dXNlciwKKysJCXhhc3ByaW50ZigmdXNl cnN0eWxlLCAiJXMlcyVzJXMlcyIsIGF1dGhjdHh0LT51c2VyLAorIAkJICAgIGF1dGhjdHh0LT5z dHlsZSA/ICI6IiA6ICIiLAorLQkJICAgIGF1dGhjdHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHls ZSA6ICIiKTsKKysJCSAgICBhdXRoY3R4dC0+c3R5bGUgPyBhdXRoY3R4dC0+c3R5bGUgOiAiIiwK KysjaWZkZWYgV0lUSF9TRUxJTlVYCisrCQkgICAgYXV0aGN0eHQtPnJvbGUgPyAiLyIgOiAiIiwK KysJCSAgICBhdXRoY3R4dC0+cm9sZSA/IGF1dGhjdHh0LT5yb2xlIDogIiIKKysjZWxzZQorKwkJ ICAgICIiLCAiIgorKyNlbmRpZgorKwkJICAgICk7CisgCQlpZiAoKHIgPSBzc2hidWZfcHV0X3U4 KGIsIFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVFU1QpKSAhPSAwIHx8CisgCQkgICAgKHIgPSBzc2hi dWZfcHV0X2NzdHJpbmcoYiwgdXNlcnN0eWxlKSkgIT0gMCB8fAorIAkJICAgIChyID0gc3NoYnVm X3B1dF9jc3RyaW5nKGIsIGF1dGhjdHh0LT5zZXJ2aWNlKSkgIT0gMCB8fAorQEAgLTQ3Myw3ICs0 ODIsOCBAQCBtYXRjaF9wcmluY2lwYWxzX2NvbW1hbmQoc3RydWN0IHBhc3N3ZCAqdXNlcl9wdywg Y29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAorIAlpZiAoKHBpZCA9IHN1YnByb2Nlc3MoIkF1dGhv cml6ZWRQcmluY2lwYWxzQ29tbWFuZCIsIGNvbW1hbmQsCisgCSAgICBhYywgYXYsICZmLAorIAkg ICAgU1NIX1NVQlBST0NFU1NfU1RET1VUX0NBUFRVUkV8U1NIX1NVQlBST0NFU1NfU1RERVJSX0RJ U0NBUkQsCistCSAgICBydW5hc19wdywgdGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQp KSA9PSAwKQorKwkgICAgcnVuYXNfcHcsIHRlbXBvcmFyaWx5X3VzZV91aWQsIHJlc3RvcmVfdWlk LAorKwkgICAgaW5ldGRfZmxhZywgdGhlX2F1dGhjdHh0KSkgPT0gMCkKKyAJCWdvdG8gb3V0Owor IAorIAl1aWRfc3dhcHBlZCA9IDE7CitAQCAtNzQ5LDcgKzc1OSw4IEBAIHVzZXJfa2V5X2NvbW1h bmRfYWxsb3dlZDIoc3RydWN0IHBhc3N3ZCAqdXNlcl9wdywgc3RydWN0IHNzaGtleSAqa2V5LAor IAlpZiAoKHBpZCA9IHN1YnByb2Nlc3MoIkF1dGhvcml6ZWRLZXlzQ29tbWFuZCIsIGNvbW1hbmQs CisgCSAgICBhYywgYXYsICZmLAorIAkgICAgU1NIX1NVQlBST0NFU1NfU1RET1VUX0NBUFRVUkV8 U1NIX1NVQlBST0NFU1NfU1RERVJSX0RJU0NBUkQsCistCSAgICBydW5hc19wdywgdGVtcG9yYXJp bHlfdXNlX3VpZCwgcmVzdG9yZV91aWQpKSA9PSAwKQorKwkgICAgcnVuYXNfcHcsIHRlbXBvcmFy aWx5X3VzZV91aWQsIHJlc3RvcmVfdWlkLAorKwkgICAgaW5ldGRfZmxhZywgdGhlX2F1dGhjdHh0 KSkgPT0gMCkKKyAJCWdvdG8gb3V0OworIAorIAl1aWRfc3dhcHBlZCA9IDE7CitkaWZmIC0tZ2l0 IGEvYXV0aDIuYyBiL2F1dGgyLmMKK2luZGV4IDNmMzUzYTcxOS4uNDk3ZmE4ZWQyIDEwMDY0NAor LS0tIGEvYXV0aDIuYworKysrIGIvYXV0aDIuYworQEAgLTI3Nyw2ICsyNzcsOSBAQCBpbnB1dF91 c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkK KyAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRoY3R4dDsKKyAJQXV0aG1ldGhvZCAqbSA9 IE5VTEw7CisgCWNoYXIgKnVzZXIgPSBOVUxMLCAqc2VydmljZSA9IE5VTEwsICptZXRob2QgPSBO VUxMLCAqc3R5bGUgPSBOVUxMOworKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJY2hhciAqcm9sZSA9 IE5VTEw7CisrI2VuZGlmCisgCWludCByLCBhdXRoZW50aWNhdGVkID0gMDsKKyAJZG91YmxlIHRz dGFydCA9IG1vbm90aW1lX2RvdWJsZSgpOworIAorQEAgLTI5MCw2ICsyOTMsMTEgQEAgaW5wdXRf dXNlcmF1dGhfcmVxdWVzdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gp CisgCWRlYnVnKCJ1c2VyYXV0aC1yZXF1ZXN0IGZvciB1c2VyICVzIHNlcnZpY2UgJXMgbWV0aG9k ICVzIiwgdXNlciwgc2VydmljZSwgbWV0aG9kKTsKKyAJZGVidWcoImF0dGVtcHQgJWQgZmFpbHVy ZXMgJWQiLCBhdXRoY3R4dC0+YXR0ZW1wdCwgYXV0aGN0eHQtPmZhaWx1cmVzKTsKKyAKKysjaWZk ZWYgV0lUSF9TRUxJTlVYCisrCWlmICgocm9sZSA9IHN0cmNocih1c2VyLCAnLycpKSAhPSBOVUxM KQorKwkJKnJvbGUrKyA9IDA7CisrI2VuZGlmCisrCisgCWlmICgoc3R5bGUgPSBzdHJjaHIodXNl ciwgJzonKSkgIT0gTlVMTCkKKyAJCSpzdHlsZSsrID0gMDsKKyAKK0BAIC0zMDEsNiArMzA5LDkg QEAgaW5wdXRfdXNlcmF1dGhfcmVxdWVzdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qg c3NoICpzc2gpCisgCQlhdXRoY3R4dC0+dXNlciA9IHhzdHJkdXAodXNlcik7CisgCQlhdXRoY3R4 dC0+c2VydmljZSA9IHhzdHJkdXAoc2VydmljZSk7CisgCQlhdXRoY3R4dC0+c3R5bGUgPSBzdHls ZSA/IHhzdHJkdXAoc3R5bGUpIDogTlVMTDsKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrCQlhdXRo Y3R4dC0+cm9sZSA9IHJvbGUgPyB4c3RyZHVwKHJvbGUpIDogTlVMTDsKKysjZW5kaWYKKyAJCWlm IChhdXRoY3R4dC0+cHcgJiYgc3RyY21wKHNlcnZpY2UsICJzc2gtY29ubmVjdGlvbiIpPT0wKSB7 CisgCQkJYXV0aGN0eHQtPnZhbGlkID0gMTsKKyAJCQlkZWJ1ZzJfZigic2V0dGluZyB1cCBhdXRo Y3R4dCBmb3IgJXMiLCB1c2VyKTsKK0BAIC0zMjAsNiArMzMxLDkgQEAgaW5wdXRfdXNlcmF1dGhf cmVxdWVzdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCisgCQkgICAg YXV0aGN0eHQtPnZhbGlkID8gImF1dGhlbnRpY2F0aW5nICIgOiAiaW52YWxpZCAiLCB1c2VyKTsK KyAJCXNldHByb2N0aXRsZSgiJXMgW25ldF0iLCBhdXRoY3R4dC0+dmFsaWQgPyB1c2VyIDogInVu a25vd24iKTsKKyAJCW1tX2luZm9ybV9hdXRoc2VydihzZXJ2aWNlLCBzdHlsZSk7CisrI2lmZGVm IFdJVEhfU0VMSU5VWAorKyAgICAgICAgIAltbV9pbmZvcm1fYXV0aHJvbGUocm9sZSk7CisrI2Vu ZGlmCisgCQl1c2VyYXV0aF9iYW5uZXIoc3NoKTsKKyAJCWlmICgociA9IGtleF9zZXJ2ZXJfdXBk YXRlX2V4dF9pbmZvKHNzaCkpICE9IDApCisgCQkJZmF0YWxfZnIociwgImtleF9zZXJ2ZXJfdXBk YXRlX2V4dF9pbmZvIGZhaWxlZCIpOworZGlmZiAtLWdpdCBhL21pc2MuYyBiL21pc2MuYworaW5k ZXggODhkYzc4ODIxLi5mNTI3NWQxMDggMTAwNjQ0CistLS0gYS9taXNjLmMKKysrKyBiL21pc2Mu YworQEAgLTg2OSw2ICs4NjksNyBAQCBjaGFyICoKKyBjb2xvbihjaGFyICpjcCkKKyB7CisgCWlu dCBmbGFnID0gMDsKKysJaW50IHN0YXJ0ID0gMTsKKyAKKyAJaWYgKCpjcCA9PSAnOicpCQkvKiBM ZWFkaW5nIGNvbG9uIGlzIHBhcnQgb2YgZmlsZSBuYW1lLiAqLworIAkJcmV0dXJuIE5VTEw7CitA QCAtODg0LDYgKzg4NSwxMyBAQCBjb2xvbihjaGFyICpjcCkKKyAJCQlyZXR1cm4gKGNwKTsKKyAJ CWlmICgqY3AgPT0gJy8nKQorIAkJCXJldHVybiBOVUxMOworKwkJaWYgKHN0YXJ0KSB7CisrCQkv KiBTbGFzaCBvbiBiZWdpbm5pbmcgb3IgYWZ0ZXIgZG90cyBvbmx5IGRlbm90ZXMgZmlsZSBuYW1l LiAqLworKwkJCWlmICgqY3AgPT0gJy8nKQorKwkJCQlyZXR1cm4gKDApOworKwkJCWlmICgqY3Ag IT0gJy4nKQorKwkJCQlzdGFydCA9IDA7CisrCQl9CisgCX0KKyAJcmV0dXJuIE5VTEw7CisgfQor QEAgLTI4MzMsNyArMjg0MSw4IEBAIHN0ZGZkX2Rldm51bGwoaW50IGRvX3N0ZGluLCBpbnQgZG9f c3Rkb3V0LCBpbnQgZG9fc3RkZXJyKQorIHBpZF90Cisgc3VicHJvY2Vzcyhjb25zdCBjaGFyICp0 YWcsIGNvbnN0IGNoYXIgKmNvbW1hbmQsCisgICAgIGludCBhYywgY2hhciAqKmF2LCBGSUxFICoq Y2hpbGQsIHVfaW50IGZsYWdzLAorLSAgICBzdHJ1Y3QgcGFzc3dkICpwdywgcHJpdmRyb3BfZm4g KmRyb3BfcHJpdnMsIHByaXZyZXN0b3JlX2ZuICpyZXN0b3JlX3ByaXZzKQorKyAgICBzdHJ1Y3Qg cGFzc3dkICpwdywgcHJpdmRyb3BfZm4gKmRyb3BfcHJpdnMsCisrICAgIHByaXZyZXN0b3JlX2Zu ICpyZXN0b3JlX3ByaXZzLCBpbnQgaW5ldGQsIHZvaWQgKnRoZV9hdXRoY3R4dCkKKyB7CisgCUZJ TEUgKmYgPSBOVUxMOworIAlzdHJ1Y3Qgc3RhdCBzdDsKK0BAIC0yOTY2LDYgKzI5NzUsMTMgQEAg c3VicHJvY2Vzcyhjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmNvbW1hbmQsCisgCQkJZXJy b3IoIiVzOiBkdXAyOiAlcyIsIHRhZywgc3RyZXJyb3IoZXJybm8pKTsKKyAJCQlfZXhpdCgxKTsK KyAJCX0KKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrCQlpZiAoc3NoZF9zZWxpbnV4X3NldHVwX2Vu dl92YXJpYWJsZXMoaW5ldGQsIHRoZV9hdXRoY3R4dCkgPCAwKSB7CisrCQkJZXJyb3IgKCJmYWls ZWQgdG8gY29weSBlbnZpcm9ubWVudDogICVzIiwKKysJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsK KysJCQlfZXhpdCgxMjcpOworKwkJfQorKyNlbmRpZgorIAkJaWYgKGVudiAhPSBOVUxMKQorIAkJ CWV4ZWN2ZShhdlswXSwgYXYsIGVudik7CisgCQllbHNlCitkaWZmIC0tZ2l0IGEvbW9uaXRvci5j IGIvbW9uaXRvci5jCitpbmRleCAwZTU4NzE5OTQuLmM2NTllOTllMCAxMDA2NDQKKy0tLSBhL21v bml0b3IuYworKysrIGIvbW9uaXRvci5jCitAQCAtMTExLDYgKzExMSw5IEBAIGludCBtbV9hbnN3 ZXJfc2lnbihzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyBpbnQgbW1fYW5z d2VyX3B3bmFtYWxsb3coc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisgaW50 IG1tX2Fuc3dlcl9hdXRoMl9yZWFkX2Jhbm5lcihzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNz aGJ1ZiAqKTsKKyBpbnQgbW1fYW5zd2VyX2F1dGhzZXJ2KHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1 Y3Qgc3NoYnVmICopOworKyNpZmRlZiBXSVRIX1NFTElOVVgKKytpbnQgbW1fYW5zd2VyX2F1dGhy b2xlKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOworKyNlbmRpZgorIGludCBt bV9hbnN3ZXJfYXV0aHBhc3N3b3JkKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICop OworIGludCBtbV9hbnN3ZXJfYnNkYXV0aHF1ZXJ5KHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qg c3NoYnVmICopOworIGludCBtbV9hbnN3ZXJfYnNkYXV0aHJlc3BvbmQoc3RydWN0IHNzaCAqLCBp bnQsIHN0cnVjdCBzc2hidWYgKik7CitAQCAtMTg4LDYgKzE5MSw5IEBAIHN0cnVjdCBtb25fdGFi bGUgbW9uX2Rpc3BhdGNoX3Byb3RvMjBbXSA9IHsKKyAgICAge01PTklUT1JfUkVRX1NJR04sIE1P Tl9PTkNFLCBtbV9hbnN3ZXJfc2lnbn0sCisgICAgIHtNT05JVE9SX1JFUV9QV05BTSwgTU9OX09O Q0UsIG1tX2Fuc3dlcl9wd25hbWFsbG93fSwKKyAgICAge01PTklUT1JfUkVRX0FVVEhTRVJWLCBN T05fT05DRSwgbW1fYW5zd2VyX2F1dGhzZXJ2fSwKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrICAg IHtNT05JVE9SX1JFUV9BVVRIUk9MRSwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9hdXRocm9sZX0sCisr I2VuZGlmCisgICAgIHtNT05JVE9SX1JFUV9BVVRIMl9SRUFEX0JBTk5FUiwgTU9OX09OQ0UsIG1t X2Fuc3dlcl9hdXRoMl9yZWFkX2Jhbm5lcn0sCisgICAgIHtNT05JVE9SX1JFUV9BVVRIUEFTU1dP UkQsIE1PTl9BVVRILCBtbV9hbnN3ZXJfYXV0aHBhc3N3b3JkfSwKKyAjaWZkZWYgVVNFX1BBTQor QEAgLTkzMiw2ICs5MzgsOSBAQCBtbV9hbnN3ZXJfcHduYW1hbGxvdyhzdHJ1Y3Qgc3NoICpzc2gs IGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorIAorIAkvKiBBbGxvdyBzZXJ2aWNlL3N0eWxl IGluZm9ybWF0aW9uIG9uIHRoZSBhdXRoIGNvbnRleHQgKi8KKyAJbW9uaXRvcl9wZXJtaXQobW9u X2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9BVVRIU0VSViwgMSk7CisrI2lmZGVmIFdJVEhfU0VMSU5V WAorKwltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0FVVEhST0xFLCAx KTsKKysjZW5kaWYKKyAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9B VVRIMl9SRUFEX0JBTk5FUiwgMSk7CisgCisgI2lmZGVmIFVTRV9QQU0KK0BAIC0xMDA2LDYgKzEw MTUsMjYgQEAga2V5X2Jhc2VfdHlwZV9tYXRjaChjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IHN0 cnVjdCBzc2hrZXkgKmtleSwKKyAJcmV0dXJuIGZvdW5kOworIH0KKyAKKysjaWZkZWYgV0lUSF9T RUxJTlVYCisraW50CisrbW1fYW5zd2VyX2F1dGhyb2xlKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNv Y2ssIHN0cnVjdCBzc2hidWYgKm0pCisreworKwlpbnQgcjsKKysJbW9uaXRvcl9wZXJtaXRfYXV0 aGVudGljYXRpb25zKDEpOworKworKwlpZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcobSwgJmF1 dGhjdHh0LT5yb2xlLCBOVUxMKSkgIT0gMCkKKysJCWZhdGFsX2YoImJ1ZmZlciBlcnJvcjogJXMi LCBzc2hfZXJyKHIpKTsKKysJZGVidWczX2YoInJvbGU9JXMiLCBhdXRoY3R4dC0+cm9sZSk7Cisr CisrCWlmIChzdHJsZW4oYXV0aGN0eHQtPnJvbGUpID09IDApIHsKKysJCWZyZWUoYXV0aGN0eHQt PnJvbGUpOworKwkJYXV0aGN0eHQtPnJvbGUgPSBOVUxMOworKwl9CisrCisrCXJldHVybiAoMCk7 CisrfQorKyNlbmRpZgorKworIGludAorIG1tX2Fuc3dlcl9hdXRocGFzc3dvcmQoc3RydWN0IHNz aCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKKyB7CitAQCAtMTM3OCw3ICsxNDA3 LDcgQEAgbW9uaXRvcl92YWxpZF91c2VyYmxvYihzdHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IHVfY2hh ciAqZGF0YSwgdV9pbnQgZGF0YWxlbikKKyAJc3RydWN0IHNzaGJ1ZiAqYjsKKyAJc3RydWN0IHNz aGtleSAqaG9zdGtleSA9IE5VTEw7CisgCWNvbnN0IHVfY2hhciAqcDsKKy0JY2hhciAqdXNlcnN0 eWxlLCAqY3A7CisrCWNoYXIgKnVzZXJzdHlsZSwgKnMsICpjcDsKKyAJc2l6ZV90IGxlbjsKKyAJ dV9jaGFyIHR5cGU7CisgCWludCBob3N0Ym91bmQgPSAwLCByLCBmYWlsID0gMDsKK0BAIC0xNDA5 LDYgKzE0MzgsOCBAQCBtb25pdG9yX3ZhbGlkX3VzZXJibG9iKHN0cnVjdCBzc2ggKnNzaCwgY29u c3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVuKQorIAkJZmFpbCsrOworIAlpZiAoKHIgPSBz c2hidWZfZ2V0X2NzdHJpbmcoYiwgJmNwLCBOVUxMKSkgIT0gMCkKKyAJCWZhdGFsX2ZyKHIsICJw YXJzZSB1c2Vyc3R5bGUiKTsKKysJaWYgKChzID0gc3RyY2hyKGNwLCAnLycpKSAhPSBOVUxMKQor KwkJKnMgPSAnXDAnOworIAl4YXNwcmludGYoJnVzZXJzdHlsZSwgIiVzJXMlcyIsIGF1dGhjdHh0 LT51c2VyLAorIAkgICAgYXV0aGN0eHQtPnN0eWxlID8gIjoiIDogIiIsCisgCSAgICBhdXRoY3R4 dC0+c3R5bGUgPyBhdXRoY3R4dC0+c3R5bGUgOiAiIik7CitAQCAtMTQ1OSw3ICsxNDkwLDcgQEAg bW9uaXRvcl92YWxpZF9ob3N0YmFzZWRibG9iKGNvbnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgZGF0 YWxlbiwKKyB7CisgCXN0cnVjdCBzc2hidWYgKmI7CisgCWNvbnN0IHVfY2hhciAqcDsKKy0JY2hh ciAqY3AsICp1c2Vyc3R5bGU7CisrCWNoYXIgKmNwLCAqcywgKnVzZXJzdHlsZTsKKyAJc2l6ZV90 IGxlbjsKKyAJaW50IHIsIGZhaWwgPSAwOworIAl1X2NoYXIgdHlwZTsKK0BAIC0xNDgwLDYgKzE1 MTEsOCBAQCBtb25pdG9yX3ZhbGlkX2hvc3RiYXNlZGJsb2IoY29uc3QgdV9jaGFyICpkYXRhLCB1 X2ludCBkYXRhbGVuLAorIAkJZmFpbCsrOworIAlpZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmco YiwgJmNwLCBOVUxMKSkgIT0gMCkKKyAJCWZhdGFsX2ZyKHIsICJwYXJzZSB1c2Vyc3R5bGUiKTsK KysJaWYgKChzID0gc3RyY2hyKGNwLCAnLycpKSAhPSBOVUxMKQorKwkJKnMgPSAnXDAnOworIAl4 YXNwcmludGYoJnVzZXJzdHlsZSwgIiVzJXMlcyIsIGF1dGhjdHh0LT51c2VyLAorIAkgICAgYXV0 aGN0eHQtPnN0eWxlID8gIjoiIDogIiIsCisgCSAgICBhdXRoY3R4dC0+c3R5bGUgPyBhdXRoY3R4 dC0+c3R5bGUgOiAiIik7CitkaWZmIC0tZ2l0IGEvbW9uaXRvci5oIGIvbW9uaXRvci5oCitpbmRl eCBmZTBiMDBiMmUuLjFiNDZlNzk0ZSAxMDA2NDQKKy0tLSBhL21vbml0b3IuaAorKysrIGIvbW9u aXRvci5oCitAQCAtNTcsNiArNTcsMTAgQEAgZW51bSBtb25pdG9yX3JlcXR5cGUgeworIAlNT05J VE9SX1JFUV9URVJNID0gNTAsCisgCU1PTklUT1JfUkVRX1NUQVRFID0gNTEsIE1PTklUT1JfQU5T X1NUQVRFID0gNTIsCisgCisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKwlNT05JVE9SX1JFUV9BVVRI Uk9MRSA9IDgwLAorKyNlbmRpZgorKworIAlNT05JVE9SX1JFUV9QQU1fU1RBUlQgPSAxMDAsCisg CU1PTklUT1JfUkVRX1BBTV9BQ0NPVU5UID0gMTAyLCBNT05JVE9SX0FOU19QQU1fQUNDT1VOVCA9 IDEwMywKKyAJTU9OSVRPUl9SRVFfUEFNX0lOSVRfQ1RYID0gMTA0LCBNT05JVE9SX0FOU19QQU1f SU5JVF9DVFggPSAxMDUsCitkaWZmIC0tZ2l0IGEvbW9uaXRvcl93cmFwLmMgYi9tb25pdG9yX3dy YXAuYworaW5kZXggZTlhNzcxYjM0Li5hZjAyNTI5NjQgMTAwNjQ0CistLS0gYS9tb25pdG9yX3dy YXAuYworKysrIGIvbW9uaXRvcl93cmFwLmMKK0BAIC00NDAsNiArNDQwLDI3IEBAIG1tX2luZm9y bV9hdXRoc2VydihjaGFyICpzZXJ2aWNlLCBjaGFyICpzdHlsZSkKKyAJc3NoYnVmX2ZyZWUobSk7 CisgfQorIAorKy8qIEluZm9ybSB0aGUgcHJpdmlsZWdlZCBwcm9jZXNzIGFib3V0IHJvbGUgKi8K KysKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrdm9pZAorK21tX2luZm9ybV9hdXRocm9sZShjaGFy ICpyb2xlKQorK3sKKysJaW50IHI7CisrCXN0cnVjdCBzc2hidWYgKm07CisrCisrCWRlYnVnM19m KCJlbnRlcmluZyIpOworKworKwlpZiAoKG0gPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisrCQlm YXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworKwlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJp bmcobSwgcm9sZSA/IHJvbGUgOiAiIikpICE9IDApCisrCQlmYXRhbF9mKCJidWZmZXIgZXJyb3I6 ICVzIiwgc3NoX2VycihyKSk7CisrCW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9yZWN2ZmQs IE1PTklUT1JfUkVRX0FVVEhST0xFLCBtKTsKKysKKysJc3NoYnVmX2ZyZWUobSk7CisrfQorKyNl bmRpZgorKworIC8qIERvIHRoZSBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiAqLworIGludAorIG1t X2F1dGhfcGFzc3dvcmQoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpwYXNzd29yZCkKK2RpZmYgLS1n aXQgYS9tb25pdG9yX3dyYXAuaCBiL21vbml0b3Jfd3JhcC5oCitpbmRleCBmNDM3NTliMjEuLjMw NTg1MTg3YyAxMDA2NDQKKy0tLSBhL21vbml0b3Jfd3JhcC5oCisrKysgYi9tb25pdG9yX3dyYXAu aAorQEAgLTUxLDYgKzUxLDkgQEAgaW50IG1tX3NzaGtleV9zaWduKHN0cnVjdCBzc2ggKiwgc3Ry dWN0IHNzaGtleSAqLCB1X2NoYXIgKiosIHNpemVfdCAqLAorICAgICBjb25zdCB1X2NoYXIgKiwg c2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKyAgICAgY29uc3QgY2hhciAqLCB1 X2ludCBjb21wYXQpOworIHZvaWQgbW1faW5mb3JtX2F1dGhzZXJ2KGNoYXIgKiwgY2hhciAqKTsK KysjaWZkZWYgV0lUSF9TRUxJTlVYCisrdm9pZCBtbV9pbmZvcm1fYXV0aHJvbGUoY2hhciAqKTsK KysjZW5kaWYKKyBzdHJ1Y3QgcGFzc3dkICptbV9nZXRwd25hbWFsbG93KHN0cnVjdCBzc2ggKiwg Y29uc3QgY2hhciAqKTsKKyBjaGFyICptbV9hdXRoMl9yZWFkX2Jhbm5lcih2b2lkKTsKKyBpbnQg bW1fYXV0aF9wYXNzd29yZChzdHJ1Y3Qgc3NoICosIGNoYXIgKik7CistLSAKKzIuNTUuMAorCgpk aWZmIC0tZ2l0IGEvMDAwMi1JbXBsZW1lbnQtU0VMaW51eC1lbnZpcm9ubWVudC12YXJpYWJsZS1z ZXR1cC1mb3Itc3ViLnBhdGNoIGIvMDAwMi1JbXBsZW1lbnQtU0VMaW51eC1lbnZpcm9ubWVudC12 YXJpYWJsZS1zZXR1cC1mb3Itc3ViLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBlNTRmZjAzLi4wMDAwMDAwCi0tLSBhLzAwMDItSW1wbGVtZW50LVNFTGludXgtZW52aXJvbm1l bnQtdmFyaWFibGUtc2V0dXAtZm9yLXN1Yi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDY3NyAr MCwwIEBACi1Gcm9tIDhiMjU2MTQxMzJjNzgxMTY0OThhMmI5NDYzNGIyYjhiYWNmODJmNWYgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBn bWFpbC5jb20+Ci1EYXRlOiBNb24sIDEzIEFwciAyMDI2IDE0OjA2OjQ3ICswMjAwCi1TdWJqZWN0 OiBbUEFUQ0ggMDIvNTRdIEltcGxlbWVudCBTRUxpbnV4IGVudmlyb25tZW50IHZhcmlhYmxlIHNl dHVwIGZvcgotIHN1YnByb2Nlc3MgZXhlY3V0aW9uCi0KLW9wZW5zc2gtNi42cDEtc2VsaW51eC1l bnYtc2V0dXAKLQotSW1wbGVtZW50IGNvbXByZWhlbnNpdmUgU0VMaW51eCBjb250ZXh0IG1hbmFn ZW1lbnQgZm9yIHNzaGQsIGluY2x1ZGluZwotcm9sZSBzZWxlY3Rpb24sIE1MUyBsZXZlbCB2YWxp ZGF0aW9uLCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0dXAgZm9yCi1wYW1fc2VsaW51eCBp bnRlZ3JhdGlvbi4KLQotQ2hhbmdlczoKLS0gb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC1zc2hk LmM6IE5ldyBmaWxlIHdpdGggU0VMaW51eCBjb250ZXh0Ci0gIG1hbmFnZW1lbnQgZnVuY3Rpb25z IGluY2x1ZGluZyBzc2hkX3NlbGludXhfZ2V0Y3R4YnluYW1lKCksCi0gIHNzaGRfc2VsaW51eF9z ZXR1cF9leGVjX2NvbnRleHQoKSwgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlIHNldHVwCi0tIG9w ZW5ic2QtY29tcGF0L01ha2VmaWxlLmluOiBBZGQgcG9ydC1saW51eC1zc2hkLm8gdG8gYnVpbGQK LS0gb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jOiBSZW1vdmUgb2xkIHNzaF9zZWxpbnV4X3Nl dHVwX2V4ZWNfY29udGV4dCgpLAotICB1cGRhdGUgc3NoX3NlbGludXhfc2V0dXBfcHR5KCkgdG8g dXNlIGdldGV4ZWNjb24oKQotLSBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmg6IFVwZGF0ZSBm dW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yCi0gIHNzaGQtc3BlY2lmaWMgU0VMaW51eCBmdW5jdGlv bnMKLS0gcGxhdGZvcm0uYzogUmVwbGFjZSBzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQo KSB3aXRoCi0gIHNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoKSBhbmQgcGFzcyBhZGRp dGlvbmFsIHBhcmFtZXRlcnMKLSAgKGluZXRkX2ZsYWcsIGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRo Y3R4dCwgb3B0aW9ucy51c2VfcGFtKQotLSBzc2hkLXNlc3Npb24uYzogQWRkIFNFTGludXggZXhl Y3V0aW9uIGNvbnRleHQgc2V0dXAgY2FsbCBpbiBtYWluKCkKLS0gYXV0aC1wYW0uYzogQ2hhbmdl IGRvX3BhbV9wdXRlbnYoKSB2YWx1ZSBwYXJhbWV0ZXIgdG8gY29uc3QgY2hhciAqCi0tIGF1dGgt cGFtLmg6IFVwZGF0ZSBkb19wYW1fcHV0ZW52KCkgc2lnbmF0dXJlIGFuZCBhZGQgZG9fcGFtX2No YXV0aHRvaygpCi0gIGRlY2xhcmF0aW9uCi0KLUNvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0 IDQuNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgotLS0tCi0gYXV0aC1wYW0uYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKy0KLSBhdXRoLXBhbS5oICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMyArLQotIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluICAgICAgIHwgICAzICstCi0gb3Bl bmJzZC1jb21wYXQvcG9ydC1saW51eC1zc2hkLmMgfCA0NTQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwotIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYyAgICAgIHwgIDM3ICstLQot IG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCAgICAgIHwgICA1ICstCi0gcGxhdGZvcm0uYyAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDggKy0KLSBzc2hkLXNlc3Npb24uYyAgICAgICAgICAg ICAgICAgICB8ICAgNyArLQotIDggZmlsZXMgY2hhbmdlZCwgNDgwIGluc2VydGlvbnMoKyksIDM5 IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxp bnV4LXNzaGQuYwotCi1kaWZmIC0tZ2l0IGEvYXV0aC1wYW0uYyBiL2F1dGgtcGFtLmMKLWluZGV4 IDI5NjA3ZTA0MS4uM2YzNDJmOWUxIDEwMDY0NAotLS0tIGEvYXV0aC1wYW0uYwotKysrIGIvYXV0 aC1wYW0uYwotQEAgLTExNDUsNyArMTE0NSw3IEBAIGlzX3BhbV9zZXNzaW9uX29wZW4odm9pZCkK LSAgKiBkdXJpbmcgdGhlIHNzaCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLgotICAqLwotIGludAot LWRvX3BhbV9wdXRlbnYoY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCi0rZG9fcGFtX3B1dGVudihj aGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLSB7Ci0gCWludCByZXQgPSAxOwotIAljaGFy ICpjb21wb3VuZDsKLWRpZmYgLS1naXQgYS9hdXRoLXBhbS5oIGIvYXV0aC1wYW0uaAotaW5kZXgg NDkxMzM2NzAxLi5mOTE2N2NmYzggMTAwNjQ0Ci0tLS0gYS9hdXRoLXBhbS5oCi0rKysgYi9hdXRo LXBhbS5oCi1AQCAtMzIsNyArMzIsOCBAQCB2b2lkIGZpbmlzaF9wYW0odm9pZCk7Ci0gdV9pbnQg ZG9fcGFtX2FjY291bnQodm9pZCk7Ci0gdm9pZCBkb19wYW1fc2Vzc2lvbihzdHJ1Y3Qgc3NoICop OwotIHZvaWQgZG9fcGFtX3NldGNyZWQodm9pZCk7Ci0taW50IGRvX3BhbV9wdXRlbnYoY2hhciAq LCBjaGFyICopOwotK3ZvaWQgZG9fcGFtX2NoYXV0aHRvayh2b2lkKTsKLStpbnQgZG9fcGFtX3B1 dGVudihjaGFyICosIGNvbnN0IGNoYXIgKik7Ci0gY2hhciAqKiBmZXRjaF9wYW1fZW52aXJvbm1l bnQodm9pZCk7Ci0gY2hhciAqKiBmZXRjaF9wYW1fY2hpbGRfZW52aXJvbm1lbnQodm9pZCk7Ci0g dm9pZCBmcmVlX3BhbV9lbnZpcm9ubWVudChjaGFyICoqKTsKLWRpZmYgLS1naXQgYS9vcGVuYnNk LWNvbXBhdC9NYWtlZmlsZS5pbiBiL29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluCi1pbmRleCA1 M2M4N2RiNmQuLjM5NTMxYWU3NyAxMDA2NDQKLS0tLSBhL29wZW5ic2QtY29tcGF0L01ha2VmaWxl LmluCi0rKysgYi9vcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbgotQEAgLTEwMiw3ICsxMDIsOCBA QCBQT1JUUz0JcG9ydC1haXgubyBcCi0gCXBvcnQtcHJuZ2QubyBcCi0gCXBvcnQtc29sYXJpcy5v IFwKLSAJcG9ydC1uZXQubyBcCi0tCXBvcnQtdXcubwotKwlwb3J0LXV3Lm8gXAotKwlwb3J0LWxp bnV4LXNzaGQubwotIAotIC5jLm86Ci0gCSQoQ0MpICQoQ0ZMQUdTX05PUElFKSAkKFBJQ0ZMQUcp ICQoQ1BQRkxBR1MpIC1jICQ8Ci1kaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51 eC1zc2hkLmMgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYwotbmV3IGZpbGUgbW9k ZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMC4uYWIwODNhNjM3Ci0tLS0gL2Rldi9udWxsCi0rKysg Yi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYwotQEAgLTAsMCArMSw0NTQgQEAKLSsv KgotKyAqIENvcHlyaWdodCAoYykgMjAwNSBEYW5pZWwgV2Fsc2ggPGR3YWxzaEByZWRoYXQuY29t PgotKyAqIENvcHlyaWdodCAoYykgMjAxNCBQZXRyIExhdXRyYmFjaCA8cGxhdXRyYmFAcmVkaGF0 LmNvbT4KLSsgKgotKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0 cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0 IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSsgKiBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29w aWVzLgotKyAqCi0rICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBB VVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0rICogV0lUSCBSRUdBUkQgVE8gVEhJUyBT T0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotKyAqIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFC TEUgRk9SCi0rICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotKyAqIEFDVElPTiBP RiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcg T1VUIE9GCi0rICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0Ug T0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsKLSsvKgotKyAqIExpbnV4LXNwZWNpZmljIHBvcnRh YmlsaXR5IGNvZGUgLSBqdXN0IFNFTGludXggc3VwcG9ydCBmb3Igc3NoZCBhdCBwcmVzZW50Ci0r ICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rCi0rI2lmIGRlZmluZWQoV0lUSF9TRUxJ TlVYKSB8fCBkZWZpbmVkKExJTlVYX09PTV9BREpVU1QpCi0rI2luY2x1ZGUgPGVycm5vLmg+Ci0r I2luY2x1ZGUgPHN0ZGFyZy5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3Rk aW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rCi0rI2luY2x1ZGUgImxvZy5oIgotKyNpbmNs dWRlICJ4bWFsbG9jLmgiCi0rI2luY2x1ZGUgIm1pc2MuaCIgICAgICAvKiBzZXJ2Y29uZi5oIG5l ZWRzIG1pc2MuaCBmb3Igc3RydWN0IEZvcndhcmRPcHRpb25zICovCi0rI2luY2x1ZGUgInNlcnZj b25mLmgiCi0rI2luY2x1ZGUgInBvcnQtbGludXguaCIKLSsjaW5jbHVkZSAic3Noa2V5LmgiCi0r I2luY2x1ZGUgImhvc3RmaWxlLmgiCi0rI2luY2x1ZGUgImF1dGguaCIKLSsKLSsjaWZkZWYgV0lU SF9TRUxJTlVYCi0rI2luY2x1ZGUgPHNlbGludXgvc2VsaW51eC5oPgotKyNpbmNsdWRlIDxzZWxp bnV4L2NvbnRleHQuaD4KLSsjaW5jbHVkZSA8c2VsaW51eC9nZXRfY29udGV4dF9saXN0Lmg+Ci0r I2luY2x1ZGUgPHNlbGludXgvZ2V0X2RlZmF1bHRfdHlwZS5oPgotKwotKyNpZmRlZiBIQVZFX0xJ TlVYX0FVRElUCi0rI2luY2x1ZGUgPGxpYmF1ZGl0Lmg+Ci0rI2luY2x1ZGUgPHVuaXN0ZC5oPgot KyNlbmRpZgotKwotKy8qIFdyYXBwZXIgYXJvdW5kIGlzX3NlbGludXhfZW5hYmxlZCgpIHRvIGxv ZyBpdHMgcmV0dXJuIHZhbHVlIG9uY2Ugb25seSAqLwotK2ludAotK3NzaGRfc2VsaW51eF9lbmFi bGVkKHZvaWQpCi0rewotKwlzdGF0aWMgaW50IGVuYWJsZWQgPSAtMTsKLSsKLSsJaWYgKGVuYWJs ZWQgPT0gLTEpIHsKLSsJCWVuYWJsZWQgPSAoaXNfc2VsaW51eF9lbmFibGVkKCkgPT0gMSk7Ci0r CQlkZWJ1ZygiU0VMaW51eCBzdXBwb3J0ICVzIiwgZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNh YmxlZCIpOwotKwl9Ci0rCi0rCXJldHVybiAoZW5hYmxlZCk7Ci0rfQotKwotKy8qIFNlbmQgYXVk aXQgbWVzc2FnZSAqLwotK3N0YXRpYyBpbnQKLStzc2hkX3NlbGludXhfc2VuZF9hdWRpdF9tZXNz YWdlKGludCBzdWNjZXNzLCBzZWN1cml0eV9jb250ZXh0X3QgZGVmYXVsdF9jb250ZXh0LAotKwkJ ICAgICAgIHNlY3VyaXR5X2NvbnRleHRfdCBzZWxlY3RlZF9jb250ZXh0KQotK3sKLSsJaW50IHJj PTA7Ci0rI2lmZGVmIEhBVkVfTElOVVhfQVVESVQKLSsJY2hhciAqbXNnID0gTlVMTDsKLSsJaW50 IGF1ZGl0X2ZkID0gYXVkaXRfb3BlbigpOwotKwlzZWN1cml0eV9jb250ZXh0X3QgZGVmYXVsdF9y YXc9TlVMTDsKLSsJc2VjdXJpdHlfY29udGV4dF90IHNlbGVjdGVkX3Jhdz1OVUxMOwotKwlyYyA9 IC0xOwotKwlpZiAoYXVkaXRfZmQgPCAwKSB7Ci0rCQlpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVy cm5vID09IEVQUk9UT05PU1VQUE9SVCB8fAotKwkJCQkJZXJybm8gPT0gRUFGTk9TVVBQT1JUKQot KwkJCQlyZXR1cm4gMDsgLyogTm8gYXVkaXQgc3VwcG9ydCBpbiBrZXJuZWwgKi8KLSsJCWVycm9y KCJFcnJvciBjb25uZWN0aW5nIHRvIGF1ZGl0IHN5c3RlbS4iKTsKLSsJCXJldHVybiByYzsKLSsJ fQotKwlpZiAoc2VsaW51eF90cmFuc190b19yYXdfY29udGV4dChkZWZhdWx0X2NvbnRleHQsICZk ZWZhdWx0X3JhdykgPCAwKSB7Ci0rCQllcnJvcigiRXJyb3IgdHJhbnNsYXRpbmcgZGVmYXVsdCBj b250ZXh0LiIpOwotKwkJZGVmYXVsdF9yYXcgPSBOVUxMOwotKwl9Ci0rCWlmIChzZWxpbnV4X3Ry YW5zX3RvX3Jhd19jb250ZXh0KHNlbGVjdGVkX2NvbnRleHQsICZzZWxlY3RlZF9yYXcpIDwgMCkg ewotKwkJZXJyb3IoIkVycm9yIHRyYW5zbGF0aW5nIHNlbGVjdGVkIGNvbnRleHQuIik7Ci0rCQlz ZWxlY3RlZF9yYXcgPSBOVUxMOwotKwl9Ci0rCWlmIChhc3ByaW50ZigmbXNnLCAic3NoZDogZGVm YXVsdC1jb250ZXh0PSVzIHNlbGVjdGVkLWNvbnRleHQ9JXMiLAotKwkJICAgICBkZWZhdWx0X3Jh dyA/IGRlZmF1bHRfcmF3IDogKGRlZmF1bHRfY29udGV4dCA/IGRlZmF1bHRfY29udGV4dDogIj8i KSwKLSsJCSAgICAgc2VsZWN0ZWRfY29udGV4dCA/IHNlbGVjdGVkX3JhdyA6IChzZWxlY3RlZF9j b250ZXh0ID8gc2VsZWN0ZWRfY29udGV4dCA6Ij8iKSkgPCAwKSB7Ci0rCQllcnJvcigiRXJyb3Ig YWxsb2NhdGluZyBtZW1vcnkuIik7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwlpZiAoYXVkaXRfbG9n X3VzZXJfbWVzc2FnZShhdWRpdF9mZCwgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSwKLSsJCQkJICAg bXNnLCBOVUxMLCBOVUxMLCBOVUxMLCBzdWNjZXNzKSA8PSAwKSB7Ci0rCQllcnJvcigiRXJyb3Ig c2VuZGluZyBhdWRpdCBtZXNzYWdlLiIpOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJcmMgPSAwOwot KyAgICAgIG91dDoKLSsJZnJlZShtc2cpOwotKwlmcmVlY29uKGRlZmF1bHRfcmF3KTsKLSsJZnJl ZWNvbihzZWxlY3RlZF9yYXcpOwotKwljbG9zZShhdWRpdF9mZCk7Ci0rI2VuZGlmCi0rCXJldHVy biByYzsKLSt9Ci0rCi0rc3RhdGljIGludAotK21sc19yYW5nZV9hbGxvd2VkKHNlY3VyaXR5X2Nv bnRleHRfdCBzcmMsIHNlY3VyaXR5X2NvbnRleHRfdCBkc3QpCi0rewotKwlzdHJ1Y3QgYXZfZGVj aXNpb24gYXZkOwotKwlpbnQgcmV0dmFsOwotKwlhY2Nlc3NfdmVjdG9yX3QgYml0OwotKwlzZWN1 cml0eV9jbGFzc190IGNsYXNzOwotKwotKwlkZWJ1Z19mKCJzcmM6JXMgZHN0OiVzIiwgc3JjLCBk c3QpOwotKwljbGFzcyA9IHN0cmluZ190b19zZWN1cml0eV9jbGFzcygiY29udGV4dCIpOwotKwlp ZiAoIWNsYXNzKSB7Ci0rCQllcnJvcigic3RyaW5nX3RvX3NlY3VyaXR5X2NsYXNzIGZhaWxlZCB0 byB0cmFuc2xhdGUgc2VjdXJpdHkgY2xhc3MgY29udGV4dCIpOwotKwkJcmV0dXJuIDE7Ci0rCX0K LSsJYml0ID0gc3RyaW5nX3RvX2F2X3Blcm0oY2xhc3MsICJjb250YWlucyIpOwotKwlpZiAoIWJp dCkgewotKwkJZXJyb3IoInN0cmluZ190b19hdl9wZXJtIGZhaWxlZCB0byB0cmFuc2xhdGUgYXYg cGVybSBjb250YWlucyIpOwotKwkJcmV0dXJuIDE7Ci0rCX0KLSsJcmV0dmFsID0gc2VjdXJpdHlf Y29tcHV0ZV9hdihzcmMsIGRzdCwgY2xhc3MsIGJpdCwgJmF2ZCk7Ci0rCWlmIChyZXR2YWwgfHwg KChiaXQgJiBhdmQuYWxsb3dlZCkgIT0gYml0KSkKLSsJCXJldHVybiAwOwotKwotKwlyZXR1cm4g MTsKLSt9Ci0rCi0rc3RhdGljIGludAotK2dldF91c2VyX2NvbnRleHQoY29uc3QgY2hhciAqc2Vu YW1lLCBjb25zdCBjaGFyICpyb2xlLCBjb25zdCBjaGFyICpsdmwsCi0rCXNlY3VyaXR5X2NvbnRl eHRfdCAqc2MpIHsKLSsjaWZkZWYgSEFWRV9HRVRfREVGQVVMVF9DT05URVhUX1dJVEhfTEVWRUwK LSsJaWYgKGx2bCA9PSBOVUxMIHx8IGx2bFswXSA9PSAnXDAnIHx8IGdldF9kZWZhdWx0X2NvbnRl eHRfd2l0aF9sZXZlbChzZW5hbWUsIGx2bCwgTlVMTCwgc2MpICE9IDApIHsKLSsJICAgICAgICAv KiBVc2VyIG1heSBoYXZlIHJlcXVlc3RlZCBhIGxldmVsIGNvbXBsZXRlbHkgb3V0c2lkZSBvZiBo aXMgCi0rCSAgICAgICAgICAgYWxsb3dlZCByYW5nZS4gV2UgZ2V0IGEgY29udGV4dCBqdXN0IGZv ciBhdWRpdGluZyBhcyB0aGUKLSsJICAgICAgICAgICByYW5nZSBjaGVjayBiZWxvdyB3aWxsIGNl cnRhaW5seSBmYWlsIGZvciBkZWZhdWx0IGNvbnRleHQuICovCi0rI2VuZGlmCi0rCQlpZiAoZ2V0 X2RlZmF1bHRfY29udGV4dChzZW5hbWUsIE5VTEwsIHNjKSAhPSAwKSB7Ci0rCQkJKnNjID0gTlVM TDsKLSsJCQlyZXR1cm4gLTE7Ci0rCQl9Ci0rI2lmZGVmIEhBVkVfR0VUX0RFRkFVTFRfQ09OVEVY VF9XSVRIX0xFVkVMCi0rCX0KLSsjZW5kaWYKLSsJaWYgKHJvbGUgIT0gTlVMTCAmJiByb2xlWzBd KSB7Ci0rCQljb250ZXh0X3QgY29uOwotKwkJY2hhciAqdHlwZT1OVUxMOwotKwkJaWYgKGdldF9k ZWZhdWx0X3R5cGUocm9sZSwgJnR5cGUpICE9IDApIHsKLSsJCQllcnJvcigiZ2V0X2RlZmF1bHRf dHlwZTogZmFpbGVkIHRvIGdldCBkZWZhdWx0IHR5cGUgZm9yICclcyciLAotKwkJCQlyb2xlKTsK LSsJCQlnb3RvIG91dDsKLSsJCX0KLSsJCWNvbiA9IGNvbnRleHRfbmV3KCpzYyk7Ci0rCQlpZiAo IWNvbikgewotKwkJCWdvdG8gb3V0OwotKwkJfQotKwkJY29udGV4dF9yb2xlX3NldChjb24sIHJv bGUpOwotKwkJY29udGV4dF90eXBlX3NldChjb24sIHR5cGUpOwotKwkJZnJlZWNvbigqc2MpOwot KwkJKnNjID0gc3RyZHVwKGNvbnRleHRfc3RyKGNvbikpOwotKwkJY29udGV4dF9mcmVlKGNvbik7 Ci0rCQlpZiAoISpzYykKLSsJCQlyZXR1cm4gLTE7Ci0rCX0KLSsjaWZkZWYgSEFWRV9HRVRfREVG QVVMVF9DT05URVhUX1dJVEhfTEVWRUwKLSsJaWYgKGx2bCAhPSBOVUxMICYmIGx2bFswXSkgewot KwkJLyogdmVyaWZ5IHRoYXQgdGhlIHJlcXVlc3RlZCByYW5nZSBpcyBvYnRhaW5lZCAqLwotKwkJ Y29udGV4dF90IGNvbjsKLSsJCXNlY3VyaXR5X2NvbnRleHRfdCBvYnRhaW5lZF9yYXc7Ci0rCQlz ZWN1cml0eV9jb250ZXh0X3QgcmVxdWVzdGVkX3JhdzsKLSsJCWNvbiA9IGNvbnRleHRfbmV3KCpz Yyk7Ci0rCQlpZiAoIWNvbikgewotKwkJCWdvdG8gb3V0OwotKwkJfQotKwkJY29udGV4dF9yYW5n ZV9zZXQoY29uLCBsdmwpOwotKwkJaWYgKHNlbGludXhfdHJhbnNfdG9fcmF3X2NvbnRleHQoKnNj LCAmb2J0YWluZWRfcmF3KSA8IDApIHsKLSsJCQljb250ZXh0X2ZyZWUoY29uKTsKLSsJCQlnb3Rv IG91dDsKLSsJCX0KLSsJCWlmIChzZWxpbnV4X3RyYW5zX3RvX3Jhd19jb250ZXh0KGNvbnRleHRf c3RyKGNvbiksICZyZXF1ZXN0ZWRfcmF3KSA8IDApIHsKLSsJCQlmcmVlY29uKG9idGFpbmVkX3Jh dyk7Ci0rCQkJY29udGV4dF9mcmVlKGNvbik7Ci0rCQkJZ290byBvdXQ7Ci0rCQl9Ci0rCi0rCQlk ZWJ1ZygiZ2V0X3VzZXJfY29udGV4dDogb2J0YWluZWQgY29udGV4dCAnJXMnIHJlcXVlc3RlZCBj b250ZXh0ICclcyciLAotKwkJCW9idGFpbmVkX3JhdywgcmVxdWVzdGVkX3Jhdyk7Ci0rCQlpZiAo c3RyY21wKG9idGFpbmVkX3JhdywgcmVxdWVzdGVkX3JhdykpIHsKLSsJCQkvKiBzZXQgdGhlIGNv bnRleHQgdG8gdGhlIHJlYWwgcmVxdWVzdGVkIG9uZSBidXQgZmFpbCAqLwotKwkJCWZyZWVjb24o cmVxdWVzdGVkX3Jhdyk7Ci0rCQkJZnJlZWNvbihvYnRhaW5lZF9yYXcpOwotKwkJCWZyZWVjb24o KnNjKTsKLSsJCQkqc2MgPSBzdHJkdXAoY29udGV4dF9zdHIoY29uKSk7Ci0rCQkJY29udGV4dF9m cmVlKGNvbik7Ci0rCQkJcmV0dXJuIC0xOwotKwkJfQotKwkJZnJlZWNvbihyZXF1ZXN0ZWRfcmF3 KTsKLSsJCWZyZWVjb24ob2J0YWluZWRfcmF3KTsKLSsJCWNvbnRleHRfZnJlZShjb24pOwotKwl9 Ci0rI2VuZGlmCi0rCXJldHVybiAwOwotKyAgICAgIG91dDoKLSsJZnJlZWNvbigqc2MpOwotKwkq c2MgPSBOVUxMOwotKwlyZXR1cm4gLTE7Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rc3NoX3NlbGlu dXhfZ2V0X3JvbGVfbGV2ZWwoY2hhciAqKnJvbGUsIGNvbnN0IGNoYXIgKipsZXZlbCwKLSsgICAg QXV0aGN0eHQgKnRoZV9hdXRoY3R4dCkKLSt7Ci0rCSpyb2xlID0gTlVMTDsKLSsJKmxldmVsID0g TlVMTDsKLSsJaWYgKHRoZV9hdXRoY3R4dCkgewotKwkJaWYgKHRoZV9hdXRoY3R4dC0+cm9sZSAh PSBOVUxMKSB7Ci0rCQkJY2hhciAqc2xhc2g7Ci0rCQkJKnJvbGUgPSB4c3RyZHVwKHRoZV9hdXRo Y3R4dC0+cm9sZSk7Ci0rCQkJaWYgKChzbGFzaCA9IHN0cmNocigqcm9sZSwgJy8nKSkgIT0gTlVM TCkgewotKwkJCQkqc2xhc2ggPSAnXDAnOwotKwkJCQkqbGV2ZWwgPSBzbGFzaCArIDE7Ci0rCQkJ fQotKwkJfQotKwl9Ci0rfQotKwotKy8qIFJldHVybiB0aGUgZGVmYXVsdCBzZWN1cml0eSBjb250 ZXh0IGZvciB0aGUgZ2l2ZW4gdXNlcm5hbWUgKi8KLStzdGF0aWMgaW50Ci0rc3NoZF9zZWxpbnV4 X2dldGN0eGJ5bmFtZShjaGFyICpwd25hbWUsIHNlY3VyaXR5X2NvbnRleHRfdCAqZGVmYXVsdF9z YywKLSsgICAgc2VjdXJpdHlfY29udGV4dF90ICp1c2VyX3NjLCBpbnQgaW5ldGQsIEF1dGhjdHh0 ICp0aGVfYXV0aGN0eHQpCi0rewotKwljaGFyICpzZW5hbWUsICpsdmw7Ci0rCWNoYXIgKnJvbGU7 Ci0rCWNvbnN0IGNoYXIgKnJlcWx2bDsKLSsJaW50IHIgPSAwOwotKwljb250ZXh0X3QgY29uID0g TlVMTDsKLSsKLSsJc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoJnJvbGUsICZyZXFsdmwsIHRo ZV9hdXRoY3R4dCk7Ci0rCi0rI2lmZGVmIEhBVkVfR0VUU0VVU0VSQllOQU1FCi0rCWlmICgocj1n ZXRzZXVzZXJieW5hbWUocHduYW1lLCAmc2VuYW1lLCAmbHZsKSkgIT0gMCkgewotKwkJc2VuYW1l ID0gTlVMTDsKLSsJCWx2bCA9IE5VTEw7Ci0rCX0KLSsjZWxzZQotKwlzZW5hbWUgPSBwd25hbWU7 Ci0rCWx2bCA9ICIiOwotKyNlbmRpZgotKwotKwlpZiAociA9PSAwKSB7Ci0rI2lmZGVmIEhBVkVf R0VUX0RFRkFVTFRfQ09OVEVYVF9XSVRIX0xFVkVMCi0rCQlyID0gZ2V0X2RlZmF1bHRfY29udGV4 dF93aXRoX2xldmVsKHNlbmFtZSwgbHZsLCBOVUxMLCBkZWZhdWx0X3NjKTsKLSsjZWxzZQotKwkJ ciA9IGdldF9kZWZhdWx0X2NvbnRleHQoc2VuYW1lLCBOVUxMLCBkZWZhdWx0X3NjKTsKLSsjZW5k aWYKLSsJfQotKwotKwlpZiAociA9PSAwKSB7Ci0rCQkvKiBJZiBsYXVuY2hlZCBmcm9tIHhpbmV0 ZCwgd2UgbXVzdCB1c2UgY3VycmVudCBsZXZlbCAqLwotKwkJaWYgKGluZXRkKSB7Ci0rCQkJc2Vj dXJpdHlfY29udGV4dF90IHNzaGRzYz1OVUxMOwotKwotKwkJCWlmIChnZXRjb25fcmF3KCZzc2hk c2MpIDwgMCkKLSsJCQkJZmF0YWwoImZhaWxlZCB0byBhbGxvY2F0ZSBzZWN1cml0eSBjb250ZXh0 Iik7Ci0rCi0rCQkJaWYgKChjb249Y29udGV4dF9uZXcoc3NoZHNjKSkgPT0gTlVMTCkKLSsJCQkJ ZmF0YWwoImZhaWxlZCB0byBhbGxvY2F0ZSBzZWxpbnV4IGNvbnRleHQiKTsKLSsJCQlyZXFsdmwg PSBjb250ZXh0X3JhbmdlX2dldChjb24pOwotKwkJCWZyZWVjb24oc3NoZHNjKTsKLSsJCQlpZiAo cmVxbHZsICE9TlVMTCAmJiBsdmwgIT0gTlVMTCAmJiBzdHJjbXAocmVxbHZsLCBsdmwpID09IDAp Ci0rCQkJICAgIC8qIHdlIGFjdHVhbGx5IGRvbid0IGNoYW5nZSBsZXZlbCAqLwotKwkJCSAgICBy ZXFsdmwgPSAiIjsKLSsKLSsJCQlkZWJ1Z19mKCJjdXJyZW50IGNvbm5lY3Rpb24gbGV2ZWwgJyVz JyIsIHJlcWx2bCk7Ci0rCi0rCQl9Ci0rCi0rCQlpZiAoKHJlcWx2bCAhPSBOVUxMICYmIHJlcWx2 bFswXSkgfHwgKHJvbGUgIT0gTlVMTCAmJiByb2xlWzBdKSkgewotKwkJCXIgPSBnZXRfdXNlcl9j b250ZXh0KHNlbmFtZSwgcm9sZSwgcmVxbHZsLCB1c2VyX3NjKTsKLSsKLSsJCQlpZiAociA9PSAw ICYmIHJlcWx2bCAhPSBOVUxMICYmIHJlcWx2bFswXSkgewotKwkJCQlzZWN1cml0eV9jb250ZXh0 X3QgZGVmYXVsdF9sZXZlbF9zYyA9ICpkZWZhdWx0X3NjOwotKwkJCQlpZiAocm9sZSAhPSBOVUxM ICYmIHJvbGVbMF0pIHsKLSsJCQkJCWlmIChnZXRfdXNlcl9jb250ZXh0KHNlbmFtZSwgcm9sZSwg bHZsLCAmZGVmYXVsdF9sZXZlbF9zYykgPCAwKQotKwkJCQkJCWRlZmF1bHRfbGV2ZWxfc2MgPSAq ZGVmYXVsdF9zYzsKLSsJCQkJfQotKwkJCQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdGVkIHJh bmdlIGlzIGNvbnRhaW5lZCBpbiB0aGUgdXNlciByYW5nZSAqLwotKwkJCQlpZiAobWxzX3Jhbmdl X2FsbG93ZWQoZGVmYXVsdF9sZXZlbF9zYywgKnVzZXJfc2MpKSB7Ci0rCQkJCQlsb2dpdCgicGVy bWl0IE1MUyBsZXZlbCAlcyAodXNlciByYW5nZSAlcykiLCByZXFsdmwsIGx2bCk7Ci0rCQkJCX0g ZWxzZSB7Ci0rCQkJCQlyID0gLTE7Ci0rCQkJCQllcnJvcigiZGVueSBNTFMgbGV2ZWwgJXMgKHVz ZXIgcmFuZ2UgJXMpIiwgcmVxbHZsLCBsdmwpOwotKwkJCQl9Ci0rCQkJCWlmIChkZWZhdWx0X2xl dmVsX3NjICE9ICpkZWZhdWx0X3NjKQotKwkJCQkJZnJlZWNvbihkZWZhdWx0X2xldmVsX3NjKTsK LSsJCQl9Ci0rCQl9IGVsc2UgewotKwkJCSp1c2VyX3NjID0gKmRlZmF1bHRfc2M7Ci0rCQl9Ci0r CX0KLSsJaWYgKHIgIT0gMCkgewotKwkJZXJyb3JfZigiRmFpbGVkIHRvIGdldCBkZWZhdWx0IFNF TGludXggc2VjdXJpdHkgIgotKwkJICAgICJjb250ZXh0IGZvciAlcyIsIHB3bmFtZSk7Ci0rCX0K LSsKLSsjaWZkZWYgSEFWRV9HRVRTRVVTRVJCWU5BTUUKLSsJZnJlZShzZW5hbWUpOwotKwlmcmVl KGx2bCk7Ci0rI2VuZGlmCi0rCi0rCWlmIChyb2xlICE9IE5VTEwpCi0rCQlmcmVlKHJvbGUpOwot KwlpZiAoY29uKQotKwkJY29udGV4dF9mcmVlKGNvbik7Ci0rCi0rCXJldHVybiAocik7Ci0rfQot KwotKy8qIFNldHVwIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgcGFtX3NlbGludXggKi8KLStz dGF0aWMgaW50Ci0rc3NoZF9zZWxpbnV4X3NldHVwX3ZhcmlhYmxlcyhpbnQoKnNldF9pdCkoY2hh ciAqLCBjb25zdCBjaGFyICopLCBpbnQgaW5ldGQsCi0rICAgIEF1dGhjdHh0ICp0aGVfYXV0aGN0 eHQpCi0rewotKwljb25zdCBjaGFyICpyZXFsdmw7Ci0rCWNoYXIgKnJvbGU7Ci0rCWNoYXIgKnVz ZV9jdXJyZW50OwotKwlpbnQgcnY7Ci0rCi0rCWRlYnVnM19mKCJzZXR0aW5nIGV4ZWN1dGlvbiBj b250ZXh0Iik7Ci0rCi0rCXNzaF9zZWxpbnV4X2dldF9yb2xlX2xldmVsKCZyb2xlLCAmcmVxbHZs LCB0aGVfYXV0aGN0eHQpOwotKwotKwlydiA9IHNldF9pdCgiU0VMSU5VWF9ST0xFX1JFUVVFU1RF RCIsIHJvbGUgPyByb2xlIDogIiIpOwotKwotKwlpZiAoaW5ldGQpIHsKLSsJCXVzZV9jdXJyZW50 ID0gIjEiOwotKwl9IGVsc2UgewotKwkJdXNlX2N1cnJlbnQgPSAiIjsKLSsJCXJ2ID0gcnYgfHwg c2V0X2l0KCJTRUxJTlVYX0xFVkVMX1JFUVVFU1RFRCIsIHJlcWx2bCA/IHJlcWx2bDogIiIpOwot Kwl9Ci0rCi0rCXJ2ID0gcnYgfHwgc2V0X2l0KCJTRUxJTlVYX1VTRV9DVVJSRU5UX1JBTkdFIiwg dXNlX2N1cnJlbnQpOwotKwotKwlpZiAocm9sZSAhPSBOVUxMKQotKwkJZnJlZShyb2xlKTsKLSsK LSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgaW50Ci0rc3NoZF9zZWxpbnV4X3NldHVwX3Bh bV92YXJpYWJsZXMoaW50IGluZXRkLAotKyAgICBpbnQocGFtX3NldGVudikoY2hhciAqLCBjb25z dCBjaGFyICopLCBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0KQotK3sKLSsJcmV0dXJuIHNzaGRfc2Vs aW51eF9zZXR1cF92YXJpYWJsZXMocGFtX3NldGVudiwgaW5ldGQsIHRoZV9hdXRoY3R4dCk7Ci0r fQotKwotK3N0YXRpYyBpbnQKLStkb19zZXRlbnYoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFs dWUpCi0rewotKwlyZXR1cm4gc2V0ZW52KG5hbWUsIHZhbHVlLCAxKTsKLSt9Ci0rCi0raW50Ci0r c3NoZF9zZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXMoaW50IGluZXRkLCB2b2lkICp0aGVfYXV0 aGN0eHQpCi0rewotKwlBdXRoY3R4dCAqYXV0aGN0eHQgPSAoQXV0aGN0eHQgKikgdGhlX2F1dGhj dHh0OwotKwlyZXR1cm4gc3NoZF9zZWxpbnV4X3NldHVwX3ZhcmlhYmxlcyhkb19zZXRlbnYsIGlu ZXRkLCBhdXRoY3R4dCk7Ci0rfQotKwotKy8qIFNldCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgdG8g dGhlIGRlZmF1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciAqLwotK3ZvaWQKLStzc2hkX3NlbGlu dXhfc2V0dXBfZXhlY19jb250ZXh0KGNoYXIgKnB3bmFtZSwgaW50IGluZXRkLAotKyAgICBpbnQo cGFtX3NldGVudikoY2hhciAqLCBjb25zdCBjaGFyICopLCB2b2lkICp0aGVfYXV0aGN0eHQsIGlu dCB1c2VfcGFtKQotK3sKLSsJc2VjdXJpdHlfY29udGV4dF90IHVzZXJfY3R4ID0gTlVMTDsKLSsJ aW50IHIgPSAwOwotKwlzZWN1cml0eV9jb250ZXh0X3QgZGVmYXVsdF9jdHggPSBOVUxMOwotKwlB dXRoY3R4dCAqYXV0aGN0eHQgPSAoQXV0aGN0eHQgKikgdGhlX2F1dGhjdHh0OwotKwotKwlpZiAo IXNzaGRfc2VsaW51eF9lbmFibGVkKCkpCi0rCQlyZXR1cm47Ci0rCi0rCWlmICh1c2VfcGFtKSB7 Ci0rCQkvKiBkbyBub3QgY29tcHV0ZSBjb250ZXh0LCBqdXN0IHNldHVwIGVudmlyb25tZW50IGZv ciBwYW1fc2VsaW51eCAqLwotKwkJaWYgKHNzaGRfc2VsaW51eF9zZXR1cF9wYW1fdmFyaWFibGVz KGluZXRkLCBwYW1fc2V0ZW52LCBhdXRoY3R4dCkpIHsKLSsJCQlzd2l0Y2ggKHNlY3VyaXR5X2dl dGVuZm9yY2UoKSkgewotKwkJCWNhc2UgLTE6Ci0rCQkJCWZhdGFsX2YoInNlY3VyaXR5X2dldGVu Zm9yY2UoKSBmYWlsZWQiKTsKLSsJCQljYXNlIDA6Ci0rCQkJCWVycm9yX2YoIlNFTGludXggUEFN IHZhcmlhYmxlIHNldHVwIGZhaWx1cmUuIENvbnRpbnVpbmcgaW4gcGVybWlzc2l2ZSBtb2RlLiIp OwotKwkJCWJyZWFrOwotKwkJCWRlZmF1bHQ6Ci0rCQkJCWZhdGFsX2YoIlNFTGludXggUEFNIHZh cmlhYmxlIHNldHVwIGZhaWx1cmUuIEFib3J0aW5nIGNvbm5lY3Rpb24uIik7Ci0rCQkJfQotKwkJ fQotKwkJcmV0dXJuOwotKwl9Ci0rCi0rCWRlYnVnM19mKCJzZXR0aW5nIGV4ZWN1dGlvbiBjb250 ZXh0Iik7Ci0rCi0rCXIgPSBzc2hkX3NlbGludXhfZ2V0Y3R4YnluYW1lKHB3bmFtZSwgJmRlZmF1 bHRfY3R4LCAmdXNlcl9jdHgsIGluZXRkLCBhdXRoY3R4dCk7Ci0rCWlmIChyID49IDApIHsKLSsJ CXIgPSBzZXRleGVjY29uKHVzZXJfY3R4KTsKLSsJCWlmIChyIDwgMCkgewotKwkJCWVycm9yX2Yo IkZhaWxlZCB0byBzZXQgU0VMaW51eCBleGVjdXRpb24gY29udGV4dCAlcyBmb3IgJXMiLAotKwkJ CSAgICB1c2VyX2N0eCwgcHduYW1lKTsKLSsJCX0KLSsjaWZkZWYgSEFWRV9TRVRLRVlDUkVBVEVD T04KLSsJCWVsc2UgaWYgKHNldGtleWNyZWF0ZWNvbih1c2VyX2N0eCkgPCAwKSB7Ci0rCQkJZXJy b3JfZigiRmFpbGVkIHRvIHNldCBTRUxpbnV4IGtleXJpbmcgY3JlYXRpb24gY29udGV4dCAlcyBm b3IgJXMiLAotKwkJCSAgICB1c2VyX2N0eCwgcHduYW1lKTsKLSsJCX0KLSsjZW5kaWYKLSsJfQot KwlpZiAodXNlcl9jdHggPT0gTlVMTCkgewotKwkJdXNlcl9jdHggPSBkZWZhdWx0X2N0eDsKLSsJ fQotKwlpZiAociA8IDAgfHwgdXNlcl9jdHggIT0gZGVmYXVsdF9jdHgpIHsKLSsJCS8qIGF1ZGl0 IGp1c3QgdGhlIGNhc2Ugd2hlbiB1c2VyIGNoYW5nZWQgYSByb2xlIG9yIHRoZXJlIHdhcwotKwkJ ICAgYSBmYWlsdXJlICovCi0rCQlzc2hkX3NlbGludXhfc2VuZF9hdWRpdF9tZXNzYWdlKHIgPj0g MCwgZGVmYXVsdF9jdHgsIHVzZXJfY3R4KTsKLSsJfQotKwlpZiAociA8IDApIHsKLSsJCXN3aXRj aCAoc2VjdXJpdHlfZ2V0ZW5mb3JjZSgpKSB7Ci0rCQljYXNlIC0xOgotKwkJCWZhdGFsX2YoInNl Y3VyaXR5X2dldGVuZm9yY2UoKSBmYWlsZWQiKTsKLSsJCWNhc2UgMDoKLSsJCQllcnJvcl9mKCJF TGludXggZmFpbHVyZS4gQ29udGludWluZyBpbiBwZXJtaXNzaXZlIG1vZGUuIik7Ci0rCQkJYnJl YWs7Ci0rCQlkZWZhdWx0OgotKwkJCWZhdGFsX2YoIlNFTGludXggZmFpbHVyZS4gQWJvcnRpbmcg Y29ubmVjdGlvbi4iKTsKLSsJCX0KLSsJfQotKwlpZiAodXNlcl9jdHggIT0gTlVMTCAmJiB1c2Vy X2N0eCAhPSBkZWZhdWx0X2N0eCkKLSsJCWZyZWVjb24odXNlcl9jdHgpOwotKwlpZiAoZGVmYXVs dF9jdHggIT0gTlVMTCkKLSsJCWZyZWVjb24oZGVmYXVsdF9jdHgpOwotKwotKwlkZWJ1ZzNfZigi ZG9uZSIpOwotK30KLSsKLSsjZW5kaWYKLSsjZW5kaWYKLSsKLWRpZmYgLS1naXQgYS9vcGVuYnNk LWNvbXBhdC9wb3J0LWxpbnV4LmMgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmMKLWluZGV4 IGMxZDU0ZjM4ZC4uNzQyNmY2Zjc5IDEwMDY0NAotLS0tIGEvb3BlbmJzZC1jb21wYXQvcG9ydC1s aW51eC5jCi0rKysgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmMKLUBAIC0xMDksMzcgKzEw OSw2IEBAIHNzaF9zZWxpbnV4X2dldGN0eGJ5bmFtZShjaGFyICpwd25hbWUpCi0gCXJldHVybiBz YzsKLSB9Ci0gCi0tLyogU2V0IHRoZSBleGVjdXRpb24gY29udGV4dCB0byB0aGUgZGVmYXVsdCBm b3IgdGhlIHNwZWNpZmllZCB1c2VyICovCi0tdm9pZAotLXNzaF9zZWxpbnV4X3NldHVwX2V4ZWNf Y29udGV4dChjaGFyICpwd25hbWUpCi0tewotLQljaGFyICp1c2VyX2N0eCA9IE5VTEw7Ci0tCi0t CWlmICghc3NoX3NlbGludXhfZW5hYmxlZCgpKQotLQkJcmV0dXJuOwotLQotLQlkZWJ1ZzMoIiVz OiBzZXR0aW5nIGV4ZWN1dGlvbiBjb250ZXh0IiwgX19mdW5jX18pOwotLQotLQl1c2VyX2N0eCA9 IHNzaF9zZWxpbnV4X2dldGN0eGJ5bmFtZShwd25hbWUpOwotLQlpZiAoc2V0ZXhlY2Nvbih1c2Vy X2N0eCkgIT0gMCkgewotLQkJc3dpdGNoIChzZWN1cml0eV9nZXRlbmZvcmNlKCkpIHsKLS0JCWNh c2UgLTE6Ci0tCQkJZmF0YWwoIiVzOiBzZWN1cml0eV9nZXRlbmZvcmNlKCkgZmFpbGVkIiwgX19m dW5jX18pOwotLQkJY2FzZSAwOgotLQkJCWVycm9yKCIlczogRmFpbGVkIHRvIHNldCBTRUxpbnV4 IGV4ZWN1dGlvbiAiCi0tCQkJICAgICJjb250ZXh0IGZvciAlcyIsIF9fZnVuY19fLCBwd25hbWUp OwotLQkJCWJyZWFrOwotLQkJZGVmYXVsdDoKLS0JCQlmYXRhbCgiJXM6IEZhaWxlZCB0byBzZXQg U0VMaW51eCBleGVjdXRpb24gY29udGV4dCAiCi0tCQkJICAgICJmb3IgJXMgKGluIGVuZm9yY2lu ZyBtb2RlKSIsIF9fZnVuY19fLCBwd25hbWUpOwotLQkJfQotLQl9Ci0tCWlmICh1c2VyX2N0eCAh PSBOVUxMKQotLQkJZnJlZWNvbih1c2VyX2N0eCk7Ci0tCi0tCWRlYnVnMygiJXM6IGRvbmUiLCBf X2Z1bmNfXyk7Ci0tfQotLQotIC8qIFNldCB0aGUgVFRZIGNvbnRleHQgZm9yIHRoZSBzcGVjaWZp ZWQgdXNlciAqLwotIHZvaWQKLSBzc2hfc2VsaW51eF9zZXR1cF9wdHkoY2hhciAqcHduYW1lLCBj b25zdCBjaGFyICp0dHkpCi1AQCAtMTUyLDcgKzEyMSwxMSBAQCBzc2hfc2VsaW51eF9zZXR1cF9w dHkoY2hhciAqcHduYW1lLCBjb25zdCBjaGFyICp0dHkpCi0gCi0gCWRlYnVnMygiJXM6IHNldHRp bmcgVFRZIGNvbnRleHQgb24gJXMiLCBfX2Z1bmNfXywgdHR5KTsKLSAKLS0JdXNlcl9jdHggPSBz c2hfc2VsaW51eF9nZXRjdHhieW5hbWUocHduYW1lKTsKLSsJaWYgKGdldGV4ZWNjb24oJnVzZXJf Y3R4KSAhPSAwKSB7Ci0rCQllcnJvcl9mKCJnZXRleGVjY29uOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotIAotIAkvKiBYWFg6IHNob3VsZCB0aGVzZSBjYWxs cyBmYXRhbCgpIHVwb24gZmFpbHVyZSBpbiBlbmZvcmNpbmcgbW9kZT8gKi8KLSAKLWRpZmYgLS1n aXQgYS9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmggYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxp bnV4LmgKLWluZGV4IDk1OTQzMGRlMS4uMjZjNWY3NzNiIDEwMDY0NAotLS0tIGEvb3BlbmJzZC1j b21wYXQvcG9ydC1saW51eC5oCi0rKysgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmgKLUBA IC0yMCw5ICsyMCwxMiBAQAotICNpZmRlZiBXSVRIX1NFTElOVVgKLSBpbnQgc3NoX3NlbGludXhf ZW5hYmxlZCh2b2lkKTsKLSB2b2lkIHNzaF9zZWxpbnV4X3NldHVwX3B0eShjaGFyICosIGNvbnN0 IGNoYXIgKik7Ci0tdm9pZCBzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqKTsK LSB2b2lkIHNzaF9zZWxpbnV4X2NoYW5nZV9jb250ZXh0KGNvbnN0IGNoYXIgKik7Ci0gdm9pZCBz c2hfc2VsaW51eF9zZXRmc2NyZWF0ZWNvbihjb25zdCBjaGFyICopOwotKwotK2ludCBzc2hkX3Nl bGludXhfZW5hYmxlZCh2b2lkKTsKLSt2b2lkIHNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRl eHQoY2hhciAqLCBpbnQsIGludChjaGFyICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKiwgaW50KTsK LStpbnQgc3NoZF9zZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXMoaW50IGluZXRkLCB2b2lkICop OwotICNlbmRpZgotIAotICNpZmRlZiBMSU5VWF9PT01fQURKVVNUCi1kaWZmIC0tZ2l0IGEvcGxh dGZvcm0uYyBiL3BsYXRmb3JtLmMKLWluZGV4IGZkMWE3YTdjMi4uNjZkMGMyYTZiIDEwMDY0NAot LS0tIGEvcGxhdGZvcm0uYwotKysrIGIvcGxhdGZvcm0uYwotQEAgLTMzLDYgKzMzLDggQEAKLSAj aW5jbHVkZSAib3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCIKLSAKLSBleHRlcm4gU2Vy dmVyT3B0aW9ucyBvcHRpb25zOwotK2V4dGVybiBpbnQgaW5ldGRfZmxhZzsKLStleHRlcm4gQXV0 aGN0eHQgKnRoZV9hdXRoY3R4dDsKLSAKLSAvKiByZXR1cm4gMSBpZiB3ZSBhcmUgcnVubmluZyB3 aXRoIHByaXZpbGVnZSB0byBzd2FwIFVJRHMsIDAgb3RoZXJ3aXNlICovCi0gaW50Ci1AQCAtNTUs NyArNTcsNyBAQCBwbGF0Zm9ybV9zZXR1c2VyY29udGV4dChzdHJ1Y3QgcGFzc3dkICpwdykKLSB7 Ci0gI2lmZGVmIFdJVEhfU0VMSU5VWAotIAkvKiBDYWNoZSBzZWxpbnV4IHN0YXR1cyBmb3IgbGF0 ZXIgdXNlICovCi0tCSh2b2lkKXNzaF9zZWxpbnV4X2VuYWJsZWQoKTsKLSsJKHZvaWQpc3NoZF9z ZWxpbnV4X2VuYWJsZWQoKTsKLSAjZW5kaWYKLSAKLSAjaWZkZWYgVVNFX1NPTEFSSVNfUFJPSkVD VFMKLUBAIC0xNDAsNyArMTQyLDkgQEAgcGxhdGZvcm1fc2V0dXNlcmNvbnRleHRfcG9zdF9ncm91 cHMoc3RydWN0IHBhc3N3ZCAqcHcpCi0gCX0KLSAjZW5kaWYgLyogSEFWRV9TRVRQQ1JFRCAqLwot ICNpZmRlZiBXSVRIX1NFTElOVVgKLS0Jc3NoX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KHB3 LT5wd19uYW1lKTsKLSsJc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChwdy0+cHdfbmFt ZSwKLSsJICAgIGluZXRkX2ZsYWcsIGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRoY3R4dCwKLSsJICAg IG9wdGlvbnMudXNlX3BhbSk7Ci0gI2VuZGlmCi0gfQotIAotZGlmZiAtLWdpdCBhL3NzaGQtc2Vz c2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKLWluZGV4IGU5YTQ4OGQwOC4uOTY3NzM3YzViIDEwMDY0 NAotLS0tIGEvc3NoZC1zZXNzaW9uLmMKLSsrKyBiL3NzaGQtc2Vzc2lvbi5jCi1AQCAtMTIzLDcg KzEyMyw3IEBAIGNoYXIgKmNvbmZpZ19maWxlX25hbWUgPSBfUEFUSF9TRVJWRVJfQ09ORklHX0ZJ TEU7Ci0gaW50IGRlYnVnX2ZsYWcgPSAwOwotIAotIC8qIEZsYWcgaW5kaWNhdGluZyB0aGF0IHRo ZSBkYWVtb24gaXMgYmVpbmcgc3RhcnRlZCBmcm9tIGluZXRkLiAqLwotLXN0YXRpYyBpbnQgaW5l dGRfZmxhZyA9IDA7Ci0raW50IGluZXRkX2ZsYWcgPSAwOwotIAotIC8qIGRlYnVnIGdvZXMgdG8g c3RkZXJyIHVubGVzcyBpbmV0ZF9mbGFnIGlzIHNldCAqLwotIHN0YXRpYyBpbnQgbG9nX3N0ZGVy ciA9IDA7Ci1AQCAtMTI3NCw2ICsxMjc0LDExIEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCi0g CQlyZXN0b3JlX3VpZCgpOwotIAl9Ci0gI2VuZGlmCi0rI2lmZGVmIFdJVEhfU0VMSU5VWAotKwlz c2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KGF1dGhjdHh0LT5wdy0+cHdfbmFtZSwKLSsJ ICAgIGluZXRkX2ZsYWcsIGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRoY3R4dCwKLSsJICAgIG9wdGlv bnMudXNlX3BhbSk7Ci0rI2VuZGlmCi0gI2lmZGVmIFVTRV9QQU0KLSAJaWYgKG9wdGlvbnMudXNl X3BhbSkgewotIAkJZG9fcGFtX3NldGNyZWQoKTsKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQg YS8wMDAzLUltcGxlbWVudC1TRUxpbnV4LWVudmlyb25tZW50LXZhcmlhYmxlLXNldHVwLWZvci1z dWIucGF0Y2ggYi8wMDAzLUltcGxlbWVudC1TRUxpbnV4LWVudmlyb25tZW50LXZhcmlhYmxlLXNl dHVwLWZvci1zdWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJl ZGYyYwotLS0gL2Rldi9udWxsCisrKyBiLzAwMDMtSW1wbGVtZW50LVNFTGludXgtZW52aXJvbm1l bnQtdmFyaWFibGUtc2V0dXAtZm9yLXN1Yi5wYXRjaApAQCAtMCwwICsxLDY3NyBAQAorRnJvbSBj NWRmMGJmYmI4ZGUwYjE1MzY0NzZmMjAwYTlhZjNlY2YwYzEwNDg1IE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0 ZTogTW9uLCAxMyBBcHIgMjAyNiAxNDowNjo0NyArMDIwMAorU3ViamVjdDogW1BBVENIIDAzLzUz XSBJbXBsZW1lbnQgU0VMaW51eCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR1cCBmb3IKKyBzdWJw cm9jZXNzIGV4ZWN1dGlvbgorCitvcGVuc3NoLTYuNnAxLXNlbGludXgtZW52LXNldHVwCisKK0lt cGxlbWVudCBjb21wcmVoZW5zaXZlIFNFTGludXggY29udGV4dCBtYW5hZ2VtZW50IGZvciBzc2hk LCBpbmNsdWRpbmcKK3JvbGUgc2VsZWN0aW9uLCBNTFMgbGV2ZWwgdmFsaWRhdGlvbiwgYW5kIGVu dmlyb25tZW50IHZhcmlhYmxlIHNldHVwIGZvcgorcGFtX3NlbGludXggaW50ZWdyYXRpb24uCisK K0NoYW5nZXM6CistIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jOiBOZXcgZmlsZSB3 aXRoIFNFTGludXggY29udGV4dAorICBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBpbmNsdWRpbmcgc3No ZF9zZWxpbnV4X2dldGN0eGJ5bmFtZSgpLAorICBzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250 ZXh0KCksIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR1cAorLSBvcGVuYnNkLWNvbXBhdC9N YWtlZmlsZS5pbjogQWRkIHBvcnQtbGludXgtc3NoZC5vIHRvIGJ1aWxkCistIG9wZW5ic2QtY29t cGF0L3BvcnQtbGludXguYzogUmVtb3ZlIG9sZCBzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRl eHQoKSwKKyAgdXBkYXRlIHNzaF9zZWxpbnV4X3NldHVwX3B0eSgpIHRvIHVzZSBnZXRleGVjY29u KCkKKy0gb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oOiBVcGRhdGUgZnVuY3Rpb24gZGVjbGFy YXRpb25zIGZvcgorICBzc2hkLXNwZWNpZmljIFNFTGludXggZnVuY3Rpb25zCistIHBsYXRmb3Jt LmM6IFJlcGxhY2Ugc3NoX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KCkgd2l0aAorICBzc2hk X3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KCkgYW5kIHBhc3MgYWRkaXRpb25hbCBwYXJhbWV0 ZXJzCisgIChpbmV0ZF9mbGFnLCBkb19wYW1fcHV0ZW52LCB0aGVfYXV0aGN0eHQsIG9wdGlvbnMu dXNlX3BhbSkKKy0gc3NoZC1zZXNzaW9uLmM6IEFkZCBTRUxpbnV4IGV4ZWN1dGlvbiBjb250ZXh0 IHNldHVwIGNhbGwgaW4gbWFpbigpCistIGF1dGgtcGFtLmM6IENoYW5nZSBkb19wYW1fcHV0ZW52 KCkgdmFsdWUgcGFyYW1ldGVyIHRvIGNvbnN0IGNoYXIgKgorLSBhdXRoLXBhbS5oOiBVcGRhdGUg ZG9fcGFtX3B1dGVudigpIHNpZ25hdHVyZSBhbmQgYWRkIGRvX3BhbV9jaGF1dGh0b2soKQorICBk ZWNsYXJhdGlvbgorCitDby1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVwbHlA YW50aHJvcGljLmNvbT4KKy0tLQorIGF1dGgtcGFtLmMgICAgICAgICAgICAgICAgICAgICAgIHwg ICAyICstCisgYXV0aC1wYW0uaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KKyBvcGVu YnNkLWNvbXBhdC9NYWtlZmlsZS5pbiAgICAgICB8ICAgMyArLQorIG9wZW5ic2QtY29tcGF0L3Bv cnQtbGludXgtc3NoZC5jIHwgNDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBv cGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmMgICAgICB8ICAzNyArLS0KKyBvcGVuYnNkLWNvbXBh dC9wb3J0LWxpbnV4LmggICAgICB8ICAgNSArLQorIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAg ICAgICAgIHwgICA4ICstCisgc3NoZC1zZXNzaW9uLmMgICAgICAgICAgICAgICAgICAgfCAgIDcg Ky0KKyA4IGZpbGVzIGNoYW5nZWQsIDQ4MCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkK KyBjcmVhdGUgbW9kZSAxMDA2NDQgb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC1zc2hkLmMKKwor ZGlmZiAtLWdpdCBhL2F1dGgtcGFtLmMgYi9hdXRoLXBhbS5jCitpbmRleCAyOTYwN2UwNDEuLjNm MzQyZjllMSAxMDA2NDQKKy0tLSBhL2F1dGgtcGFtLmMKKysrKyBiL2F1dGgtcGFtLmMKK0BAIC0x MTQ1LDcgKzExNDUsNyBAQCBpc19wYW1fc2Vzc2lvbl9vcGVuKHZvaWQpCisgICogZHVyaW5nIHRo ZSBzc2ggYXV0aGVudGljYXRpb24gcHJvY2Vzcy4KKyAgKi8KKyBpbnQKKy1kb19wYW1fcHV0ZW52 KGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQorK2RvX3BhbV9wdXRlbnYoY2hhciAqbmFtZSwgY29u c3QgY2hhciAqdmFsdWUpCisgeworIAlpbnQgcmV0ID0gMTsKKyAJY2hhciAqY29tcG91bmQ7Citk aWZmIC0tZ2l0IGEvYXV0aC1wYW0uaCBiL2F1dGgtcGFtLmgKK2luZGV4IDQ5MTMzNjcwMS4uZjkx NjdjZmM4IDEwMDY0NAorLS0tIGEvYXV0aC1wYW0uaAorKysrIGIvYXV0aC1wYW0uaAorQEAgLTMy LDcgKzMyLDggQEAgdm9pZCBmaW5pc2hfcGFtKHZvaWQpOworIHVfaW50IGRvX3BhbV9hY2NvdW50 KHZvaWQpOworIHZvaWQgZG9fcGFtX3Nlc3Npb24oc3RydWN0IHNzaCAqKTsKKyB2b2lkIGRvX3Bh bV9zZXRjcmVkKHZvaWQpOworLWludCBkb19wYW1fcHV0ZW52KGNoYXIgKiwgY2hhciAqKTsKKyt2 b2lkIGRvX3BhbV9jaGF1dGh0b2sodm9pZCk7CisraW50IGRvX3BhbV9wdXRlbnYoY2hhciAqLCBj b25zdCBjaGFyICopOworIGNoYXIgKiogZmV0Y2hfcGFtX2Vudmlyb25tZW50KHZvaWQpOworIGNo YXIgKiogZmV0Y2hfcGFtX2NoaWxkX2Vudmlyb25tZW50KHZvaWQpOworIHZvaWQgZnJlZV9wYW1f ZW52aXJvbm1lbnQoY2hhciAqKik7CitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvTWFrZWZp bGUuaW4gYi9vcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbgoraW5kZXggNTNjODdkYjZkLi4zOTUz MWFlNzcgMTAwNjQ0CistLS0gYS9vcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbgorKysrIGIvb3Bl bmJzZC1jb21wYXQvTWFrZWZpbGUuaW4KK0BAIC0xMDIsNyArMTAyLDggQEAgUE9SVFM9CXBvcnQt YWl4Lm8gXAorIAlwb3J0LXBybmdkLm8gXAorIAlwb3J0LXNvbGFyaXMubyBcCisgCXBvcnQtbmV0 Lm8gXAorLQlwb3J0LXV3Lm8KKysJcG9ydC11dy5vIFwKKysJcG9ydC1saW51eC1zc2hkLm8KKyAK KyAuYy5vOgorIAkkKENDKSAkKENGTEFHU19OT1BJRSkgJChQSUNGTEFHKSAkKENQUEZMQUdTKSAt YyAkPAorZGlmZiAtLWdpdCBhL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jIGIvb3Bl bmJzZC1jb21wYXQvcG9ydC1saW51eC1zc2hkLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl eCAwMDAwMDAwMDAuLmFiMDgzYTYzNworLS0tIC9kZXYvbnVsbAorKysrIGIvb3BlbmJzZC1jb21w YXQvcG9ydC1saW51eC1zc2hkLmMKK0BAIC0wLDAgKzEsNDU0IEBACisrLyoKKysgKiBDb3B5cmln aHQgKGMpIDIwMDUgRGFuaWVsIFdhbHNoIDxkd2Fsc2hAcmVkaGF0LmNvbT4KKysgKiBDb3B5cmln aHQgKGMpIDIwMTQgUGV0ciBMYXV0cmJhY2ggPHBsYXV0cmJhQHJlZGhhdC5jb20+CisrICoKKysg KiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNv ZnR3YXJlIGZvciBhbnkKKysgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5 IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisrICogY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysgKgorKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlN UyBBTEwgV0FSUkFOVElFUworKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVE SU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKysgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorKyAqIEFO WSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1Ig QU5ZIERBTUFHRVMKKysgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBE QVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKysgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5F R0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorKyAqIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdB UkUuCisrICovCisrCisrLyoKKysgKiBMaW51eC1zcGVjaWZpYyBwb3J0YWJpbGl0eSBjb2RlIC0g anVzdCBTRUxpbnV4IHN1cHBvcnQgZm9yIHNzaGQgYXQgcHJlc2VudAorKyAqLworKworKyNpbmNs dWRlICJpbmNsdWRlcy5oIgorKworKyNpZiBkZWZpbmVkKFdJVEhfU0VMSU5VWCkgfHwgZGVmaW5l ZChMSU5VWF9PT01fQURKVVNUKQorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRh cmcuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1 ZGUgPHN0ZGxpYi5oPgorKworKyNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVkZSAieG1hbGxvYy5o IgorKyNpbmNsdWRlICJtaXNjLmgiICAgICAgLyogc2VydmNvbmYuaCBuZWVkcyBtaXNjLmggZm9y IHN0cnVjdCBGb3J3YXJkT3B0aW9ucyAqLworKyNpbmNsdWRlICJzZXJ2Y29uZi5oIgorKyNpbmNs dWRlICJwb3J0LWxpbnV4LmgiCisrI2luY2x1ZGUgInNzaGtleS5oIgorKyNpbmNsdWRlICJob3N0 ZmlsZS5oIgorKyNpbmNsdWRlICJhdXRoLmgiCisrCisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKyNp bmNsdWRlIDxzZWxpbnV4L3NlbGludXguaD4KKysjaW5jbHVkZSA8c2VsaW51eC9jb250ZXh0Lmg+ CisrI2luY2x1ZGUgPHNlbGludXgvZ2V0X2NvbnRleHRfbGlzdC5oPgorKyNpbmNsdWRlIDxzZWxp bnV4L2dldF9kZWZhdWx0X3R5cGUuaD4KKysKKysjaWZkZWYgSEFWRV9MSU5VWF9BVURJVAorKyNp bmNsdWRlIDxsaWJhdWRpdC5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjZW5kaWYKKysKKysv KiBXcmFwcGVyIGFyb3VuZCBpc19zZWxpbnV4X2VuYWJsZWQoKSB0byBsb2cgaXRzIHJldHVybiB2 YWx1ZSBvbmNlIG9ubHkgKi8KKytpbnQKKytzc2hkX3NlbGludXhfZW5hYmxlZCh2b2lkKQorK3sK KysJc3RhdGljIGludCBlbmFibGVkID0gLTE7CisrCisrCWlmIChlbmFibGVkID09IC0xKSB7Cisr CQllbmFibGVkID0gKGlzX3NlbGludXhfZW5hYmxlZCgpID09IDEpOworKwkJZGVidWcoIlNFTGlu dXggc3VwcG9ydCAlcyIsIGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKysJfQor KworKwlyZXR1cm4gKGVuYWJsZWQpOworK30KKysKKysvKiBTZW5kIGF1ZGl0IG1lc3NhZ2UgKi8K KytzdGF0aWMgaW50Cisrc3NoZF9zZWxpbnV4X3NlbmRfYXVkaXRfbWVzc2FnZShpbnQgc3VjY2Vz cywgc2VjdXJpdHlfY29udGV4dF90IGRlZmF1bHRfY29udGV4dCwKKysJCSAgICAgICBzZWN1cml0 eV9jb250ZXh0X3Qgc2VsZWN0ZWRfY29udGV4dCkKKyt7CisrCWludCByYz0wOworKyNpZmRlZiBI QVZFX0xJTlVYX0FVRElUCisrCWNoYXIgKm1zZyA9IE5VTEw7CisrCWludCBhdWRpdF9mZCA9IGF1 ZGl0X29wZW4oKTsKKysJc2VjdXJpdHlfY29udGV4dF90IGRlZmF1bHRfcmF3PU5VTEw7CisrCXNl Y3VyaXR5X2NvbnRleHRfdCBzZWxlY3RlZF9yYXc9TlVMTDsKKysJcmMgPSAtMTsKKysJaWYgKGF1 ZGl0X2ZkIDwgMCkgeworKwkJaWYgKGVycm5vID09IEVJTlZBTCB8fCBlcnJubyA9PSBFUFJPVE9O T1NVUFBPUlQgfHwKKysJCQkJCWVycm5vID09IEVBRk5PU1VQUE9SVCkKKysJCQkJcmV0dXJuIDA7 IC8qIE5vIGF1ZGl0IHN1cHBvcnQgaW4ga2VybmVsICovCisrCQllcnJvcigiRXJyb3IgY29ubmVj dGluZyB0byBhdWRpdCBzeXN0ZW0uIik7CisrCQlyZXR1cm4gcmM7CisrCX0KKysJaWYgKHNlbGlu dXhfdHJhbnNfdG9fcmF3X2NvbnRleHQoZGVmYXVsdF9jb250ZXh0LCAmZGVmYXVsdF9yYXcpIDwg MCkgeworKwkJZXJyb3IoIkVycm9yIHRyYW5zbGF0aW5nIGRlZmF1bHQgY29udGV4dC4iKTsKKysJ CWRlZmF1bHRfcmF3ID0gTlVMTDsKKysJfQorKwlpZiAoc2VsaW51eF90cmFuc190b19yYXdfY29u dGV4dChzZWxlY3RlZF9jb250ZXh0LCAmc2VsZWN0ZWRfcmF3KSA8IDApIHsKKysJCWVycm9yKCJF cnJvciB0cmFuc2xhdGluZyBzZWxlY3RlZCBjb250ZXh0LiIpOworKwkJc2VsZWN0ZWRfcmF3ID0g TlVMTDsKKysJfQorKwlpZiAoYXNwcmludGYoJm1zZywgInNzaGQ6IGRlZmF1bHQtY29udGV4dD0l cyBzZWxlY3RlZC1jb250ZXh0PSVzIiwKKysJCSAgICAgZGVmYXVsdF9yYXcgPyBkZWZhdWx0X3Jh dyA6IChkZWZhdWx0X2NvbnRleHQgPyBkZWZhdWx0X2NvbnRleHQ6ICI/IiksCisrCQkgICAgIHNl bGVjdGVkX2NvbnRleHQgPyBzZWxlY3RlZF9yYXcgOiAoc2VsZWN0ZWRfY29udGV4dCA/IHNlbGVj dGVkX2NvbnRleHQgOiI/IikpIDwgMCkgeworKwkJZXJyb3IoIkVycm9yIGFsbG9jYXRpbmcgbWVt b3J5LiIpOworKwkJZ290byBvdXQ7CisrCX0KKysJaWYgKGF1ZGl0X2xvZ191c2VyX21lc3NhZ2Uo YXVkaXRfZmQsIEFVRElUX1VTRVJfUk9MRV9DSEFOR0UsCisrCQkJCSAgIG1zZywgTlVMTCwgTlVM TCwgTlVMTCwgc3VjY2VzcykgPD0gMCkgeworKwkJZXJyb3IoIkVycm9yIHNlbmRpbmcgYXVkaXQg bWVzc2FnZS4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCXJjID0gMDsKKysgICAgICBvdXQ6Cisr CWZyZWUobXNnKTsKKysJZnJlZWNvbihkZWZhdWx0X3Jhdyk7CisrCWZyZWVjb24oc2VsZWN0ZWRf cmF3KTsKKysJY2xvc2UoYXVkaXRfZmQpOworKyNlbmRpZgorKwlyZXR1cm4gcmM7CisrfQorKwor K3N0YXRpYyBpbnQKKyttbHNfcmFuZ2VfYWxsb3dlZChzZWN1cml0eV9jb250ZXh0X3Qgc3JjLCBz ZWN1cml0eV9jb250ZXh0X3QgZHN0KQorK3sKKysJc3RydWN0IGF2X2RlY2lzaW9uIGF2ZDsKKysJ aW50IHJldHZhbDsKKysJYWNjZXNzX3ZlY3Rvcl90IGJpdDsKKysJc2VjdXJpdHlfY2xhc3NfdCBj bGFzczsKKysKKysJZGVidWdfZigic3JjOiVzIGRzdDolcyIsIHNyYywgZHN0KTsKKysJY2xhc3Mg PSBzdHJpbmdfdG9fc2VjdXJpdHlfY2xhc3MoImNvbnRleHQiKTsKKysJaWYgKCFjbGFzcykgewor KwkJZXJyb3IoInN0cmluZ190b19zZWN1cml0eV9jbGFzcyBmYWlsZWQgdG8gdHJhbnNsYXRlIHNl Y3VyaXR5IGNsYXNzIGNvbnRleHQiKTsKKysJCXJldHVybiAxOworKwl9CisrCWJpdCA9IHN0cmlu Z190b19hdl9wZXJtKGNsYXNzLCAiY29udGFpbnMiKTsKKysJaWYgKCFiaXQpIHsKKysJCWVycm9y KCJzdHJpbmdfdG9fYXZfcGVybSBmYWlsZWQgdG8gdHJhbnNsYXRlIGF2IHBlcm0gY29udGFpbnMi KTsKKysJCXJldHVybiAxOworKwl9CisrCXJldHZhbCA9IHNlY3VyaXR5X2NvbXB1dGVfYXYoc3Jj LCBkc3QsIGNsYXNzLCBiaXQsICZhdmQpOworKwlpZiAocmV0dmFsIHx8ICgoYml0ICYgYXZkLmFs bG93ZWQpICE9IGJpdCkpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrfQorKworK3N0 YXRpYyBpbnQKKytnZXRfdXNlcl9jb250ZXh0KGNvbnN0IGNoYXIgKnNlbmFtZSwgY29uc3QgY2hh ciAqcm9sZSwgY29uc3QgY2hhciAqbHZsLAorKwlzZWN1cml0eV9jb250ZXh0X3QgKnNjKSB7Cisr I2lmZGVmIEhBVkVfR0VUX0RFRkFVTFRfQ09OVEVYVF9XSVRIX0xFVkVMCisrCWlmIChsdmwgPT0g TlVMTCB8fCBsdmxbMF0gPT0gJ1wwJyB8fCBnZXRfZGVmYXVsdF9jb250ZXh0X3dpdGhfbGV2ZWwo c2VuYW1lLCBsdmwsIE5VTEwsIHNjKSAhPSAwKSB7CisrCSAgICAgICAgLyogVXNlciBtYXkgaGF2 ZSByZXF1ZXN0ZWQgYSBsZXZlbCBjb21wbGV0ZWx5IG91dHNpZGUgb2YgaGlzIAorKwkgICAgICAg ICAgIGFsbG93ZWQgcmFuZ2UuIFdlIGdldCBhIGNvbnRleHQganVzdCBmb3IgYXVkaXRpbmcgYXMg dGhlCisrCSAgICAgICAgICAgcmFuZ2UgY2hlY2sgYmVsb3cgd2lsbCBjZXJ0YWlubHkgZmFpbCBm b3IgZGVmYXVsdCBjb250ZXh0LiAqLworKyNlbmRpZgorKwkJaWYgKGdldF9kZWZhdWx0X2NvbnRl eHQoc2VuYW1lLCBOVUxMLCBzYykgIT0gMCkgeworKwkJCSpzYyA9IE5VTEw7CisrCQkJcmV0dXJu IC0xOworKwkJfQorKyNpZmRlZiBIQVZFX0dFVF9ERUZBVUxUX0NPTlRFWFRfV0lUSF9MRVZFTAor Kwl9CisrI2VuZGlmCisrCWlmIChyb2xlICE9IE5VTEwgJiYgcm9sZVswXSkgeworKwkJY29udGV4 dF90IGNvbjsKKysJCWNoYXIgKnR5cGU9TlVMTDsKKysJCWlmIChnZXRfZGVmYXVsdF90eXBlKHJv bGUsICZ0eXBlKSAhPSAwKSB7CisrCQkJZXJyb3IoImdldF9kZWZhdWx0X3R5cGU6IGZhaWxlZCB0 byBnZXQgZGVmYXVsdCB0eXBlIGZvciAnJXMnIiwKKysJCQkJcm9sZSk7CisrCQkJZ290byBvdXQ7 CisrCQl9CisrCQljb24gPSBjb250ZXh0X25ldygqc2MpOworKwkJaWYgKCFjb24pIHsKKysJCQln b3RvIG91dDsKKysJCX0KKysJCWNvbnRleHRfcm9sZV9zZXQoY29uLCByb2xlKTsKKysJCWNvbnRl eHRfdHlwZV9zZXQoY29uLCB0eXBlKTsKKysJCWZyZWVjb24oKnNjKTsKKysJCSpzYyA9IHN0cmR1 cChjb250ZXh0X3N0cihjb24pKTsKKysJCWNvbnRleHRfZnJlZShjb24pOworKwkJaWYgKCEqc2Mp CisrCQkJcmV0dXJuIC0xOworKwl9CisrI2lmZGVmIEhBVkVfR0VUX0RFRkFVTFRfQ09OVEVYVF9X SVRIX0xFVkVMCisrCWlmIChsdmwgIT0gTlVMTCAmJiBsdmxbMF0pIHsKKysJCS8qIHZlcmlmeSB0 aGF0IHRoZSByZXF1ZXN0ZWQgcmFuZ2UgaXMgb2J0YWluZWQgKi8KKysJCWNvbnRleHRfdCBjb247 CisrCQlzZWN1cml0eV9jb250ZXh0X3Qgb2J0YWluZWRfcmF3OworKwkJc2VjdXJpdHlfY29udGV4 dF90IHJlcXVlc3RlZF9yYXc7CisrCQljb24gPSBjb250ZXh0X25ldygqc2MpOworKwkJaWYgKCFj b24pIHsKKysJCQlnb3RvIG91dDsKKysJCX0KKysJCWNvbnRleHRfcmFuZ2Vfc2V0KGNvbiwgbHZs KTsKKysJCWlmIChzZWxpbnV4X3RyYW5zX3RvX3Jhd19jb250ZXh0KCpzYywgJm9idGFpbmVkX3Jh dykgPCAwKSB7CisrCQkJY29udGV4dF9mcmVlKGNvbik7CisrCQkJZ290byBvdXQ7CisrCQl9Cisr CQlpZiAoc2VsaW51eF90cmFuc190b19yYXdfY29udGV4dChjb250ZXh0X3N0cihjb24pLCAmcmVx dWVzdGVkX3JhdykgPCAwKSB7CisrCQkJZnJlZWNvbihvYnRhaW5lZF9yYXcpOworKwkJCWNvbnRl eHRfZnJlZShjb24pOworKwkJCWdvdG8gb3V0OworKwkJfQorKworKwkJZGVidWcoImdldF91c2Vy X2NvbnRleHQ6IG9idGFpbmVkIGNvbnRleHQgJyVzJyByZXF1ZXN0ZWQgY29udGV4dCAnJXMnIiwK KysJCQlvYnRhaW5lZF9yYXcsIHJlcXVlc3RlZF9yYXcpOworKwkJaWYgKHN0cmNtcChvYnRhaW5l ZF9yYXcsIHJlcXVlc3RlZF9yYXcpKSB7CisrCQkJLyogc2V0IHRoZSBjb250ZXh0IHRvIHRoZSBy ZWFsIHJlcXVlc3RlZCBvbmUgYnV0IGZhaWwgKi8KKysJCQlmcmVlY29uKHJlcXVlc3RlZF9yYXcp OworKwkJCWZyZWVjb24ob2J0YWluZWRfcmF3KTsKKysJCQlmcmVlY29uKCpzYyk7CisrCQkJKnNj ID0gc3RyZHVwKGNvbnRleHRfc3RyKGNvbikpOworKwkJCWNvbnRleHRfZnJlZShjb24pOworKwkJ CXJldHVybiAtMTsKKysJCX0KKysJCWZyZWVjb24ocmVxdWVzdGVkX3Jhdyk7CisrCQlmcmVlY29u KG9idGFpbmVkX3Jhdyk7CisrCQljb250ZXh0X2ZyZWUoY29uKTsKKysJfQorKyNlbmRpZgorKwly ZXR1cm4gMDsKKysgICAgICBvdXQ6CisrCWZyZWVjb24oKnNjKTsKKysJKnNjID0gTlVMTDsKKysJ cmV0dXJuIC0xOworK30KKysKKytzdGF0aWMgdm9pZAorK3NzaF9zZWxpbnV4X2dldF9yb2xlX2xl dmVsKGNoYXIgKipyb2xlLCBjb25zdCBjaGFyICoqbGV2ZWwsCisrICAgIEF1dGhjdHh0ICp0aGVf YXV0aGN0eHQpCisreworKwkqcm9sZSA9IE5VTEw7CisrCSpsZXZlbCA9IE5VTEw7CisrCWlmICh0 aGVfYXV0aGN0eHQpIHsKKysJCWlmICh0aGVfYXV0aGN0eHQtPnJvbGUgIT0gTlVMTCkgeworKwkJ CWNoYXIgKnNsYXNoOworKwkJCSpyb2xlID0geHN0cmR1cCh0aGVfYXV0aGN0eHQtPnJvbGUpOwor KwkJCWlmICgoc2xhc2ggPSBzdHJjaHIoKnJvbGUsICcvJykpICE9IE5VTEwpIHsKKysJCQkJKnNs YXNoID0gJ1wwJzsKKysJCQkJKmxldmVsID0gc2xhc2ggKyAxOworKwkJCX0KKysJCX0KKysJfQor K30KKysKKysvKiBSZXR1cm4gdGhlIGRlZmF1bHQgc2VjdXJpdHkgY29udGV4dCBmb3IgdGhlIGdp dmVuIHVzZXJuYW1lICovCisrc3RhdGljIGludAorK3NzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUo Y2hhciAqcHduYW1lLCBzZWN1cml0eV9jb250ZXh0X3QgKmRlZmF1bHRfc2MsCisrICAgIHNlY3Vy aXR5X2NvbnRleHRfdCAqdXNlcl9zYywgaW50IGluZXRkLCBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0 KQorK3sKKysJY2hhciAqc2VuYW1lLCAqbHZsOworKwljaGFyICpyb2xlOworKwljb25zdCBjaGFy ICpyZXFsdmw7CisrCWludCByID0gMDsKKysJY29udGV4dF90IGNvbiA9IE5VTEw7CisrCisrCXNz aF9zZWxpbnV4X2dldF9yb2xlX2xldmVsKCZyb2xlLCAmcmVxbHZsLCB0aGVfYXV0aGN0eHQpOwor KworKyNpZmRlZiBIQVZFX0dFVFNFVVNFUkJZTkFNRQorKwlpZiAoKHI9Z2V0c2V1c2VyYnluYW1l KHB3bmFtZSwgJnNlbmFtZSwgJmx2bCkpICE9IDApIHsKKysJCXNlbmFtZSA9IE5VTEw7CisrCQls dmwgPSBOVUxMOworKwl9CisrI2Vsc2UKKysJc2VuYW1lID0gcHduYW1lOworKwlsdmwgPSAiIjsK KysjZW5kaWYKKysKKysJaWYgKHIgPT0gMCkgeworKyNpZmRlZiBIQVZFX0dFVF9ERUZBVUxUX0NP TlRFWFRfV0lUSF9MRVZFTAorKwkJciA9IGdldF9kZWZhdWx0X2NvbnRleHRfd2l0aF9sZXZlbChz ZW5hbWUsIGx2bCwgTlVMTCwgZGVmYXVsdF9zYyk7CisrI2Vsc2UKKysJCXIgPSBnZXRfZGVmYXVs dF9jb250ZXh0KHNlbmFtZSwgTlVMTCwgZGVmYXVsdF9zYyk7CisrI2VuZGlmCisrCX0KKysKKysJ aWYgKHIgPT0gMCkgeworKwkJLyogSWYgbGF1bmNoZWQgZnJvbSB4aW5ldGQsIHdlIG11c3QgdXNl IGN1cnJlbnQgbGV2ZWwgKi8KKysJCWlmIChpbmV0ZCkgeworKwkJCXNlY3VyaXR5X2NvbnRleHRf dCBzc2hkc2M9TlVMTDsKKysKKysJCQlpZiAoZ2V0Y29uX3Jhdygmc3NoZHNjKSA8IDApCisrCQkJ CWZhdGFsKCJmYWlsZWQgdG8gYWxsb2NhdGUgc2VjdXJpdHkgY29udGV4dCIpOworKworKwkJCWlm ICgoY29uPWNvbnRleHRfbmV3KHNzaGRzYykpID09IE5VTEwpCisrCQkJCWZhdGFsKCJmYWlsZWQg dG8gYWxsb2NhdGUgc2VsaW51eCBjb250ZXh0Iik7CisrCQkJcmVxbHZsID0gY29udGV4dF9yYW5n ZV9nZXQoY29uKTsKKysJCQlmcmVlY29uKHNzaGRzYyk7CisrCQkJaWYgKHJlcWx2bCAhPU5VTEwg JiYgbHZsICE9IE5VTEwgJiYgc3RyY21wKHJlcWx2bCwgbHZsKSA9PSAwKQorKwkJCSAgICAvKiB3 ZSBhY3R1YWxseSBkb24ndCBjaGFuZ2UgbGV2ZWwgKi8KKysJCQkgICAgcmVxbHZsID0gIiI7Cisr CisrCQkJZGVidWdfZigiY3VycmVudCBjb25uZWN0aW9uIGxldmVsICclcyciLCByZXFsdmwpOwor KworKwkJfQorKworKwkJaWYgKChyZXFsdmwgIT0gTlVMTCAmJiByZXFsdmxbMF0pIHx8IChyb2xl ICE9IE5VTEwgJiYgcm9sZVswXSkpIHsKKysJCQlyID0gZ2V0X3VzZXJfY29udGV4dChzZW5hbWUs IHJvbGUsIHJlcWx2bCwgdXNlcl9zYyk7CisrCisrCQkJaWYgKHIgPT0gMCAmJiByZXFsdmwgIT0g TlVMTCAmJiByZXFsdmxbMF0pIHsKKysJCQkJc2VjdXJpdHlfY29udGV4dF90IGRlZmF1bHRfbGV2 ZWxfc2MgPSAqZGVmYXVsdF9zYzsKKysJCQkJaWYgKHJvbGUgIT0gTlVMTCAmJiByb2xlWzBdKSB7 CisrCQkJCQlpZiAoZ2V0X3VzZXJfY29udGV4dChzZW5hbWUsIHJvbGUsIGx2bCwgJmRlZmF1bHRf bGV2ZWxfc2MpIDwgMCkKKysJCQkJCQlkZWZhdWx0X2xldmVsX3NjID0gKmRlZmF1bHRfc2M7Cisr CQkJCX0KKysJCQkJLyogdmVyaWZ5IHRoYXQgdGhlIHJlcXVlc3RlZCByYW5nZSBpcyBjb250YWlu ZWQgaW4gdGhlIHVzZXIgcmFuZ2UgKi8KKysJCQkJaWYgKG1sc19yYW5nZV9hbGxvd2VkKGRlZmF1 bHRfbGV2ZWxfc2MsICp1c2VyX3NjKSkgeworKwkJCQkJbG9naXQoInBlcm1pdCBNTFMgbGV2ZWwg JXMgKHVzZXIgcmFuZ2UgJXMpIiwgcmVxbHZsLCBsdmwpOworKwkJCQl9IGVsc2UgeworKwkJCQkJ ciA9IC0xOworKwkJCQkJZXJyb3IoImRlbnkgTUxTIGxldmVsICVzICh1c2VyIHJhbmdlICVzKSIs IHJlcWx2bCwgbHZsKTsKKysJCQkJfQorKwkJCQlpZiAoZGVmYXVsdF9sZXZlbF9zYyAhPSAqZGVm YXVsdF9zYykKKysJCQkJCWZyZWVjb24oZGVmYXVsdF9sZXZlbF9zYyk7CisrCQkJfQorKwkJfSBl bHNlIHsKKysJCQkqdXNlcl9zYyA9ICpkZWZhdWx0X3NjOworKwkJfQorKwl9CisrCWlmIChyICE9 IDApIHsKKysJCWVycm9yX2YoIkZhaWxlZCB0byBnZXQgZGVmYXVsdCBTRUxpbnV4IHNlY3VyaXR5 ICIKKysJCSAgICAiY29udGV4dCBmb3IgJXMiLCBwd25hbWUpOworKwl9CisrCisrI2lmZGVmIEhB VkVfR0VUU0VVU0VSQllOQU1FCisrCWZyZWUoc2VuYW1lKTsKKysJZnJlZShsdmwpOworKyNlbmRp ZgorKworKwlpZiAocm9sZSAhPSBOVUxMKQorKwkJZnJlZShyb2xlKTsKKysJaWYgKGNvbikKKysJ CWNvbnRleHRfZnJlZShjb24pOworKworKwlyZXR1cm4gKHIpOworK30KKysKKysvKiBTZXR1cCBl bnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHBhbV9zZWxpbnV4ICovCisrc3RhdGljIGludAorK3Nz aGRfc2VsaW51eF9zZXR1cF92YXJpYWJsZXMoaW50KCpzZXRfaXQpKGNoYXIgKiwgY29uc3QgY2hh ciAqKSwgaW50IGluZXRkLAorKyAgICBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0KQorK3sKKysJY29u c3QgY2hhciAqcmVxbHZsOworKwljaGFyICpyb2xlOworKwljaGFyICp1c2VfY3VycmVudDsKKysJ aW50IHJ2OworKworKwlkZWJ1ZzNfZigic2V0dGluZyBleGVjdXRpb24gY29udGV4dCIpOworKwor Kwlzc2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbCgmcm9sZSwgJnJlcWx2bCwgdGhlX2F1dGhjdHh0 KTsKKysKKysJcnYgPSBzZXRfaXQoIlNFTElOVVhfUk9MRV9SRVFVRVNURUQiLCByb2xlID8gcm9s ZSA6ICIiKTsKKysKKysJaWYgKGluZXRkKSB7CisrCQl1c2VfY3VycmVudCA9ICIxIjsKKysJfSBl bHNlIHsKKysJCXVzZV9jdXJyZW50ID0gIiI7CisrCQlydiA9IHJ2IHx8IHNldF9pdCgiU0VMSU5V WF9MRVZFTF9SRVFVRVNURUQiLCByZXFsdmwgPyByZXFsdmw6ICIiKTsKKysJfQorKworKwlydiA9 IHJ2IHx8IHNldF9pdCgiU0VMSU5VWF9VU0VfQ1VSUkVOVF9SQU5HRSIsIHVzZV9jdXJyZW50KTsK KysKKysJaWYgKHJvbGUgIT0gTlVMTCkKKysJCWZyZWUocm9sZSk7CisrCisrCXJldHVybiBydjsK Kyt9CisrCisrc3RhdGljIGludAorK3NzaGRfc2VsaW51eF9zZXR1cF9wYW1fdmFyaWFibGVzKGlu dCBpbmV0ZCwKKysgICAgaW50KHBhbV9zZXRlbnYpKGNoYXIgKiwgY29uc3QgY2hhciAqKSwgQXV0 aGN0eHQgKnRoZV9hdXRoY3R4dCkKKyt7CisrCXJldHVybiBzc2hkX3NlbGludXhfc2V0dXBfdmFy aWFibGVzKHBhbV9zZXRlbnYsIGluZXRkLCB0aGVfYXV0aGN0eHQpOworK30KKysKKytzdGF0aWMg aW50CisrZG9fc2V0ZW52KGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorK3sKKysJcmV0 dXJuIHNldGVudihuYW1lLCB2YWx1ZSwgMSk7CisrfQorKworK2ludAorK3NzaGRfc2VsaW51eF9z ZXR1cF9lbnZfdmFyaWFibGVzKGludCBpbmV0ZCwgdm9pZCAqdGhlX2F1dGhjdHh0KQorK3sKKysJ QXV0aGN0eHQgKmF1dGhjdHh0ID0gKEF1dGhjdHh0ICopIHRoZV9hdXRoY3R4dDsKKysJcmV0dXJu IHNzaGRfc2VsaW51eF9zZXR1cF92YXJpYWJsZXMoZG9fc2V0ZW52LCBpbmV0ZCwgYXV0aGN0eHQp OworK30KKysKKysvKiBTZXQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHRoZSBkZWZhdWx0IGZv ciB0aGUgc3BlY2lmaWVkIHVzZXIgKi8KKyt2b2lkCisrc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNf Y29udGV4dChjaGFyICpwd25hbWUsIGludCBpbmV0ZCwKKysgICAgaW50KHBhbV9zZXRlbnYpKGNo YXIgKiwgY29uc3QgY2hhciAqKSwgdm9pZCAqdGhlX2F1dGhjdHh0LCBpbnQgdXNlX3BhbSkKKyt7 CisrCXNlY3VyaXR5X2NvbnRleHRfdCB1c2VyX2N0eCA9IE5VTEw7CisrCWludCByID0gMDsKKysJ c2VjdXJpdHlfY29udGV4dF90IGRlZmF1bHRfY3R4ID0gTlVMTDsKKysJQXV0aGN0eHQgKmF1dGhj dHh0ID0gKEF1dGhjdHh0ICopIHRoZV9hdXRoY3R4dDsKKysKKysJaWYgKCFzc2hkX3NlbGludXhf ZW5hYmxlZCgpKQorKwkJcmV0dXJuOworKworKwlpZiAodXNlX3BhbSkgeworKwkJLyogZG8gbm90 IGNvbXB1dGUgY29udGV4dCwganVzdCBzZXR1cCBlbnZpcm9ubWVudCBmb3IgcGFtX3NlbGludXgg Ki8KKysJCWlmIChzc2hkX3NlbGludXhfc2V0dXBfcGFtX3ZhcmlhYmxlcyhpbmV0ZCwgcGFtX3Nl dGVudiwgYXV0aGN0eHQpKSB7CisrCQkJc3dpdGNoIChzZWN1cml0eV9nZXRlbmZvcmNlKCkpIHsK KysJCQljYXNlIC0xOgorKwkJCQlmYXRhbF9mKCJzZWN1cml0eV9nZXRlbmZvcmNlKCkgZmFpbGVk Iik7CisrCQkJY2FzZSAwOgorKwkJCQllcnJvcl9mKCJTRUxpbnV4IFBBTSB2YXJpYWJsZSBzZXR1 cCBmYWlsdXJlLiBDb250aW51aW5nIGluIHBlcm1pc3NpdmUgbW9kZS4iKTsKKysJCQlicmVhazsK KysJCQlkZWZhdWx0OgorKwkJCQlmYXRhbF9mKCJTRUxpbnV4IFBBTSB2YXJpYWJsZSBzZXR1cCBm YWlsdXJlLiBBYm9ydGluZyBjb25uZWN0aW9uLiIpOworKwkJCX0KKysJCX0KKysJCXJldHVybjsK KysJfQorKworKwlkZWJ1ZzNfZigic2V0dGluZyBleGVjdXRpb24gY29udGV4dCIpOworKworKwly ID0gc3NoZF9zZWxpbnV4X2dldGN0eGJ5bmFtZShwd25hbWUsICZkZWZhdWx0X2N0eCwgJnVzZXJf Y3R4LCBpbmV0ZCwgYXV0aGN0eHQpOworKwlpZiAociA+PSAwKSB7CisrCQlyID0gc2V0ZXhlY2Nv bih1c2VyX2N0eCk7CisrCQlpZiAociA8IDApIHsKKysJCQllcnJvcl9mKCJGYWlsZWQgdG8gc2V0 IFNFTGludXggZXhlY3V0aW9uIGNvbnRleHQgJXMgZm9yICVzIiwKKysJCQkgICAgdXNlcl9jdHgs IHB3bmFtZSk7CisrCQl9CisrI2lmZGVmIEhBVkVfU0VUS0VZQ1JFQVRFQ09OCisrCQllbHNlIGlm IChzZXRrZXljcmVhdGVjb24odXNlcl9jdHgpIDwgMCkgeworKwkJCWVycm9yX2YoIkZhaWxlZCB0 byBzZXQgU0VMaW51eCBrZXlyaW5nIGNyZWF0aW9uIGNvbnRleHQgJXMgZm9yICVzIiwKKysJCQkg ICAgdXNlcl9jdHgsIHB3bmFtZSk7CisrCQl9CisrI2VuZGlmCisrCX0KKysJaWYgKHVzZXJfY3R4 ID09IE5VTEwpIHsKKysJCXVzZXJfY3R4ID0gZGVmYXVsdF9jdHg7CisrCX0KKysJaWYgKHIgPCAw IHx8IHVzZXJfY3R4ICE9IGRlZmF1bHRfY3R4KSB7CisrCQkvKiBhdWRpdCBqdXN0IHRoZSBjYXNl IHdoZW4gdXNlciBjaGFuZ2VkIGEgcm9sZSBvciB0aGVyZSB3YXMKKysJCSAgIGEgZmFpbHVyZSAq LworKwkJc3NoZF9zZWxpbnV4X3NlbmRfYXVkaXRfbWVzc2FnZShyID49IDAsIGRlZmF1bHRfY3R4 LCB1c2VyX2N0eCk7CisrCX0KKysJaWYgKHIgPCAwKSB7CisrCQlzd2l0Y2ggKHNlY3VyaXR5X2dl dGVuZm9yY2UoKSkgeworKwkJY2FzZSAtMToKKysJCQlmYXRhbF9mKCJzZWN1cml0eV9nZXRlbmZv cmNlKCkgZmFpbGVkIik7CisrCQljYXNlIDA6CisrCQkJZXJyb3JfZigiRUxpbnV4IGZhaWx1cmUu IENvbnRpbnVpbmcgaW4gcGVybWlzc2l2ZSBtb2RlLiIpOworKwkJCWJyZWFrOworKwkJZGVmYXVs dDoKKysJCQlmYXRhbF9mKCJTRUxpbnV4IGZhaWx1cmUuIEFib3J0aW5nIGNvbm5lY3Rpb24uIik7 CisrCQl9CisrCX0KKysJaWYgKHVzZXJfY3R4ICE9IE5VTEwgJiYgdXNlcl9jdHggIT0gZGVmYXVs dF9jdHgpCisrCQlmcmVlY29uKHVzZXJfY3R4KTsKKysJaWYgKGRlZmF1bHRfY3R4ICE9IE5VTEwp CisrCQlmcmVlY29uKGRlZmF1bHRfY3R4KTsKKysKKysJZGVidWczX2YoImRvbmUiKTsKKyt9Cisr CisrI2VuZGlmCisrI2VuZGlmCisrCitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvcG9ydC1s aW51eC5jIGIvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jCitpbmRleCBjMWQ1NGYzOGQuLjc0 MjZmNmY3OSAxMDA2NDQKKy0tLSBhL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYworKysrIGIv b3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jCitAQCAtMTA5LDM3ICsxMDksNiBAQCBzc2hfc2Vs aW51eF9nZXRjdHhieW5hbWUoY2hhciAqcHduYW1lKQorIAlyZXR1cm4gc2M7CisgfQorIAorLS8q IFNldCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgdG8gdGhlIGRlZmF1bHQgZm9yIHRoZSBzcGVjaWZp ZWQgdXNlciAqLworLXZvaWQKKy1zc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAq cHduYW1lKQorLXsKKy0JY2hhciAqdXNlcl9jdHggPSBOVUxMOworLQorLQlpZiAoIXNzaF9zZWxp bnV4X2VuYWJsZWQoKSkKKy0JCXJldHVybjsKKy0KKy0JZGVidWczKCIlczogc2V0dGluZyBleGVj dXRpb24gY29udGV4dCIsIF9fZnVuY19fKTsKKy0KKy0JdXNlcl9jdHggPSBzc2hfc2VsaW51eF9n ZXRjdHhieW5hbWUocHduYW1lKTsKKy0JaWYgKHNldGV4ZWNjb24odXNlcl9jdHgpICE9IDApIHsK Ky0JCXN3aXRjaCAoc2VjdXJpdHlfZ2V0ZW5mb3JjZSgpKSB7CistCQljYXNlIC0xOgorLQkJCWZh dGFsKCIlczogc2VjdXJpdHlfZ2V0ZW5mb3JjZSgpIGZhaWxlZCIsIF9fZnVuY19fKTsKKy0JCWNh c2UgMDoKKy0JCQllcnJvcigiJXM6IEZhaWxlZCB0byBzZXQgU0VMaW51eCBleGVjdXRpb24gIgor LQkJCSAgICAiY29udGV4dCBmb3IgJXMiLCBfX2Z1bmNfXywgcHduYW1lKTsKKy0JCQlicmVhazsK Ky0JCWRlZmF1bHQ6CistCQkJZmF0YWwoIiVzOiBGYWlsZWQgdG8gc2V0IFNFTGludXggZXhlY3V0 aW9uIGNvbnRleHQgIgorLQkJCSAgICAiZm9yICVzIChpbiBlbmZvcmNpbmcgbW9kZSkiLCBfX2Z1 bmNfXywgcHduYW1lKTsKKy0JCX0KKy0JfQorLQlpZiAodXNlcl9jdHggIT0gTlVMTCkKKy0JCWZy ZWVjb24odXNlcl9jdHgpOworLQorLQlkZWJ1ZzMoIiVzOiBkb25lIiwgX19mdW5jX18pOworLX0K Ky0KKyAvKiBTZXQgdGhlIFRUWSBjb250ZXh0IGZvciB0aGUgc3BlY2lmaWVkIHVzZXIgKi8KKyB2 b2lkCisgc3NoX3NlbGludXhfc2V0dXBfcHR5KGNoYXIgKnB3bmFtZSwgY29uc3QgY2hhciAqdHR5 KQorQEAgLTE1Miw3ICsxMjEsMTEgQEAgc3NoX3NlbGludXhfc2V0dXBfcHR5KGNoYXIgKnB3bmFt ZSwgY29uc3QgY2hhciAqdHR5KQorIAorIAlkZWJ1ZzMoIiVzOiBzZXR0aW5nIFRUWSBjb250ZXh0 IG9uICVzIiwgX19mdW5jX18sIHR0eSk7CisgCistCXVzZXJfY3R4ID0gc3NoX3NlbGludXhfZ2V0 Y3R4YnluYW1lKHB3bmFtZSk7CisrCWlmIChnZXRleGVjY29uKCZ1c2VyX2N0eCkgIT0gMCkgewor KwkJZXJyb3JfZigiZ2V0ZXhlY2NvbjogJXMiLCBzdHJlcnJvcihlcnJubykpOworKwkJZ290byBv dXQ7CisrCX0KKysKKyAKKyAJLyogWFhYOiBzaG91bGQgdGhlc2UgY2FsbHMgZmF0YWwoKSB1cG9u IGZhaWx1cmUgaW4gZW5mb3JjaW5nIG1vZGU/ICovCisgCitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1j b21wYXQvcG9ydC1saW51eC5oIGIvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oCitpbmRleCA5 NTk0MzBkZTEuLjI2YzVmNzczYiAxMDA2NDQKKy0tLSBhL29wZW5ic2QtY29tcGF0L3BvcnQtbGlu dXguaAorKysrIGIvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oCitAQCAtMjAsOSArMjAsMTIg QEAKKyAjaWZkZWYgV0lUSF9TRUxJTlVYCisgaW50IHNzaF9zZWxpbnV4X2VuYWJsZWQodm9pZCk7 Cisgdm9pZCBzc2hfc2VsaW51eF9zZXR1cF9wdHkoY2hhciAqLCBjb25zdCBjaGFyICopOworLXZv aWQgc3NoX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KGNoYXIgKik7Cisgdm9pZCBzc2hfc2Vs aW51eF9jaGFuZ2VfY29udGV4dChjb25zdCBjaGFyICopOworIHZvaWQgc3NoX3NlbGludXhfc2V0 ZnNjcmVhdGVjb24oY29uc3QgY2hhciAqKTsKKysKKytpbnQgc3NoZF9zZWxpbnV4X2VuYWJsZWQo dm9pZCk7Cisrdm9pZCBzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KGNoYXIgKiwgaW50 LCBpbnQoY2hhciAqLCBjb25zdCBjaGFyICopLCB2b2lkICosIGludCk7CisraW50IHNzaGRfc2Vs aW51eF9zZXR1cF9lbnZfdmFyaWFibGVzKGludCBpbmV0ZCwgdm9pZCAqKTsKKyAjZW5kaWYKKyAK KyAjaWZkZWYgTElOVVhfT09NX0FESlVTVAorZGlmZiAtLWdpdCBhL3BsYXRmb3JtLmMgYi9wbGF0 Zm9ybS5jCitpbmRleCBmZDFhN2E3YzIuLjY2ZDBjMmE2YiAxMDA2NDQKKy0tLSBhL3BsYXRmb3Jt LmMKKysrKyBiL3BsYXRmb3JtLmMKK0BAIC0zMyw2ICszMyw4IEBACisgI2luY2x1ZGUgIm9wZW5i c2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmgiCisgCisgZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0 aW9uczsKKytleHRlcm4gaW50IGluZXRkX2ZsYWc7CisrZXh0ZXJuIEF1dGhjdHh0ICp0aGVfYXV0 aGN0eHQ7CisgCisgLyogcmV0dXJuIDEgaWYgd2UgYXJlIHJ1bm5pbmcgd2l0aCBwcml2aWxlZ2Ug dG8gc3dhcCBVSURzLCAwIG90aGVyd2lzZSAqLworIGludAorQEAgLTU1LDcgKzU3LDcgQEAgcGxh dGZvcm1fc2V0dXNlcmNvbnRleHQoc3RydWN0IHBhc3N3ZCAqcHcpCisgeworICNpZmRlZiBXSVRI X1NFTElOVVgKKyAJLyogQ2FjaGUgc2VsaW51eCBzdGF0dXMgZm9yIGxhdGVyIHVzZSAqLworLQko dm9pZClzc2hfc2VsaW51eF9lbmFibGVkKCk7CisrCSh2b2lkKXNzaGRfc2VsaW51eF9lbmFibGVk KCk7CisgI2VuZGlmCisgCisgI2lmZGVmIFVTRV9TT0xBUklTX1BST0pFQ1RTCitAQCAtMTQwLDcg KzE0Miw5IEBAIHBsYXRmb3JtX3NldHVzZXJjb250ZXh0X3Bvc3RfZ3JvdXBzKHN0cnVjdCBwYXNz d2QgKnB3KQorIAl9CisgI2VuZGlmIC8qIEhBVkVfU0VUUENSRUQgKi8KKyAjaWZkZWYgV0lUSF9T RUxJTlVYCistCXNzaF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChwdy0+cHdfbmFtZSk7Cisr CXNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQocHctPnB3X25hbWUsCisrCSAgICBpbmV0 ZF9mbGFnLCBkb19wYW1fcHV0ZW52LCB0aGVfYXV0aGN0eHQsCisrCSAgICBvcHRpb25zLnVzZV9w YW0pOworICNlbmRpZgorIH0KKyAKK2RpZmYgLS1naXQgYS9zc2hkLXNlc3Npb24uYyBiL3NzaGQt c2Vzc2lvbi5jCitpbmRleCAwNmE3MmRhYWYuLjFhNDBhNDNmMSAxMDA2NDQKKy0tLSBhL3NzaGQt c2Vzc2lvbi5jCisrKysgYi9zc2hkLXNlc3Npb24uYworQEAgLTEyMyw3ICsxMjMsNyBAQCBjaGFy ICpjb25maWdfZmlsZV9uYW1lID0gX1BBVEhfU0VSVkVSX0NPTkZJR19GSUxFOworIGludCBkZWJ1 Z19mbGFnID0gMDsKKyAKKyAvKiBGbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgZGFlbW9uIGlzIGJl aW5nIHN0YXJ0ZWQgZnJvbSBpbmV0ZC4gKi8KKy1zdGF0aWMgaW50IGluZXRkX2ZsYWcgPSAwOwor K2ludCBpbmV0ZF9mbGFnID0gMDsKKyAKKyAvKiBkZWJ1ZyBnb2VzIHRvIHN0ZGVyciB1bmxlc3Mg aW5ldGRfZmxhZyBpcyBzZXQgKi8KKyBzdGF0aWMgaW50IGxvZ19zdGRlcnIgPSAwOworQEAgLTEy NzcsNiArMTI3NywxMSBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorIAkJcmVzdG9yZV91aWQo KTsKKyAJfQorICNlbmRpZgorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJc3NoZF9zZWxpbnV4X3Nl dHVwX2V4ZWNfY29udGV4dChhdXRoY3R4dC0+cHctPnB3X25hbWUsCisrCSAgICBpbmV0ZF9mbGFn LCBkb19wYW1fcHV0ZW52LCB0aGVfYXV0aGN0eHQsCisrCSAgICBvcHRpb25zLnVzZV9wYW0pOwor KyNlbmRpZgorICNpZmRlZiBVU0VfUEFNCisgCWlmIChvcHRpb25zLnVzZV9wYW0pIHsKKyAJCWRv X3BhbV9zZXRjcmVkKCk7CistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMDAwMy1QYXNzLWlu ZXRkLWZsYWdzLWFuZC1hdXRoLWNvbnRleHQtdG8tc3VicHJvY2Vzcy1jYWxsLnBhdGNoIGIvMDAw My1QYXNzLWluZXRkLWZsYWdzLWFuZC1hdXRoLWNvbnRleHQtdG8tc3VicHJvY2Vzcy1jYWxsLnBh dGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzlhNmVmLi4wMDAwMDAwCi0tLSBh LzAwMDMtUGFzcy1pbmV0ZC1mbGFncy1hbmQtYXV0aC1jb250ZXh0LXRvLXN1YnByb2Nlc3MtY2Fs bC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLUZyb20gODQyM2U4OTJkNzUz MjU4OWMyZGYwNTk4NDcwZTAxZWFhMzgzZmI2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZy b206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTMg QXByIDIwMjYgMTQ6MDc6MDIgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAwMy81NF0gUGFzcyBpbmV0 ZCBmbGFncyBhbmQgYXV0aCBjb250ZXh0IHRvIHN1YnByb2Nlc3MgY2FsbHMKLSBmb3IgU0VMaW51 eAotCi1vcGVuc3NoLTcuNnAxLXN1YnByb2Nlc3Mtc2VsaW51eAotCi1QYXNzIGluZXRkIGZsYWdz IGFuZCBhdXRoZW50aWNhdGlvbiBjb250ZXh0IGRvd24gdG8gc3VicHJvY2VzcyBjYWxscwotZm9y IFNFTGludXggZW52aXJvbm1lbnQgc2V0dXAuIFRoaXMgZW5zdXJlcyB0aGF0IEF1dGhvcml6ZWRL ZXlzQ29tbWFuZAotYW5kIEF1dGhvcml6ZWRQcmluY2lwYWxzQ29tbWFuZCBzdWJwcm9jZXNzZXMg cnVuIHdpdGggdGhlIGNvcnJlY3QKLVNFTGludXggY29udGV4dCBiYXNlZCBvbiB0aGUgYXV0aGVu dGljYXRlZCB1c2VyJ3Mgcm9sZSBhbmQgbGV2ZWwuCi0KLUNoYW5nZXM6Ci0tIG1pc2MuYzogVXBk YXRlIHN1YnByb2Nlc3MoKSBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYWNjZXB0IGluZXRkIGFuZAot ICB0aGVfYXV0aGN0eHQgcGFyYW1ldGVyczsgYWRkIHNzaGRfc2VsaW51eF9zZXR1cF9lbnZfdmFy aWFibGVzKCkgY2FsbAotICBpbiBjaGlsZCBwcm9jZXNzIGJlZm9yZSBleGVjdmUKLS0gbWlzYy5o OiBVcGRhdGUgc3VicHJvY2VzcygpIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCi0tIGF1dGgyLXB1Ymtl eS5jOiBBZGQgZXh0ZXJuIGRlY2xhcmF0aW9ucyBmb3IgaW5ldGRfZmxhZyBhbmQKLSAgdGhlX2F1 dGhjdHh0OyBwYXNzIHRoZW0gdG8gc3VicHJvY2VzcygpIGNhbGxzIGZvcgotICBBdXRob3JpemVk S2V5c0NvbW1hbmQgYW5kIEF1dGhvcml6ZWRQcmluY2lwYWxzQ29tbWFuZAotLSBzc2hjb25uZWN0 LmM6IFVwZGF0ZSBzdWJwcm9jZXNzKCkgY2FsbCB3aXRoIG5ldyBwYXJhbWV0ZXJzICgwLCBOVUxM KQotLSBzc2hkLWF1dGguYzogTWFrZSBpbmV0ZF9mbGFnIG5vbi1zdGF0aWMgKGV4dGVybikKLS0g c3NoZC1zZXNzaW9uLmM6IE1ha2UgaW5ldGRfZmxhZyBub24tc3RhdGljIChleHRlcm4pCi0KLUNv LUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgot LS0tCi0gbWlzYy5oICAgICAgIHwgMiArLQotIHNzaGNvbm5lY3QuYyB8IDIgKy0KLSBzc2hkLWF1 dGguYyAgfCAyICstCi0gMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRp b25zKC0pCi0KLWRpZmYgLS1naXQgYS9taXNjLmggYi9taXNjLmgKLWluZGV4IDc5MTg3NmMxZS4u ZmUxMWY5ZDhhIDEwMDY0NAotLS0tIGEvbWlzYy5oCi0rKysgYi9taXNjLmgKLUBAIC0xMjksNyAr MTI5LDcgQEAgdHlwZWRlZiB2b2lkIHByaXZyZXN0b3JlX2ZuKHZvaWQpOwotICNkZWZpbmUJU1NI X1NVQlBST0NFU1NfVU5TQUZFX1BBVEgJKDE8PDMpCS8qIERvbid0IGNoZWNrIGZvciBzYWZlIGNt ZCAqLwotICNkZWZpbmUJU1NIX1NVQlBST0NFU1NfUFJFU0VSVkVfRU5WCSgxPDw0KQkvKiBLZWVw IHBhcmVudCBlbnZpcm9ubWVudCAqLwotIHBpZF90IHN1YnByb2Nlc3MoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIGludCwgY2hhciAqKiwgRklMRSAqKiwgdV9pbnQsCi0tICAgIHN0cnVjdCBw YXNzd2QgKiwgcHJpdmRyb3BfZm4gKiwgcHJpdnJlc3RvcmVfZm4gKik7Ci0rICAgIHN0cnVjdCBw YXNzd2QgKiwgcHJpdmRyb3BfZm4gKiwgcHJpdnJlc3RvcmVfZm4gKiwgaW50LCB2b2lkICopOwot IAotIHR5cGVkZWYgc3RydWN0IGFyZ2xpc3QgYXJnbGlzdDsKLSBzdHJ1Y3QgYXJnbGlzdCB7Ci1k aWZmIC0tZ2l0IGEvc3NoY29ubmVjdC5jIGIvc3NoY29ubmVjdC5jCi1pbmRleCA0Mzg0Mjc3YTYu LjVlNzYxNTYxZCAxMDA2NDQKLS0tLSBhL3NzaGNvbm5lY3QuYwotKysrIGIvc3NoY29ubmVjdC5j Ci1AQCAtOTExLDcgKzkxMSw3IEBAIGxvYWRfaG9zdGtleXNfY29tbWFuZChzdHJ1Y3QgaG9zdGtl eXMgKmhvc3RrZXlzLCBjb25zdCBjaGFyICpjb21tYW5kX3RlbXBsYXRlLAotIAotIAlpZiAoKHBp ZCA9IHN1YnByb2Nlc3ModGFnLCBjb21tYW5kLCBhYywgYXYsICZmLAotIAkgICAgU1NIX1NVQlBS T0NFU1NfU1RET1VUX0NBUFRVUkV8U1NIX1NVQlBST0NFU1NfVU5TQUZFX1BBVEh8Ci0tCSAgICBT U0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9FTlYsIE5VTEwsIE5VTEwsIE5VTEwpKSA9PSAwKQotKwkg ICAgU1NIX1NVQlBST0NFU1NfUFJFU0VSVkVfRU5WLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBOVUxM KSkgPT0gMCkKLSAJCWdvdG8gb3V0OwotIAotIAlsb2FkX2hvc3RrZXlzX2ZpbGUoaG9zdGtleXMs IGhvc3RmaWxlX2hvc3RuYW1lLCB0YWcsIGYsIDEpOwotZGlmZiAtLWdpdCBhL3NzaGQtYXV0aC5j IGIvc3NoZC1hdXRoLmMKLWluZGV4IDc2MzUwYTJhMy4uNzNhY2IwZGJlIDEwMDY0NAotLS0tIGEv c3NoZC1hdXRoLmMKLSsrKyBiL3NzaGQtYXV0aC5jCi1AQCAtMTE5LDcgKzExOSw3IEBAIGNoYXIg KmNvbmZpZ19maWxlX25hbWUgPSBfUEFUSF9TRVJWRVJfQ09ORklHX0ZJTEU7Ci0gaW50IGRlYnVn X2ZsYWcgPSAwOwotIAotIC8qIEZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBkYWVtb24gaXMgYmVp bmcgc3RhcnRlZCBmcm9tIGluZXRkLiAqLwotLXN0YXRpYyBpbnQgaW5ldGRfZmxhZyA9IDA7Ci0r aW50IGluZXRkX2ZsYWcgPSAwOwotIAotIC8qIFNhdmVkIGFyZ3VtZW50cyB0byBtYWluKCkuICov Ci0gc3RhdGljIGNoYXIgKipzYXZlZF9hcmd2OwotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBh LzAwMDQtUGFzcy1pbmV0ZC1mbGFncy1hbmQtYXV0aC1jb250ZXh0LXRvLXN1YnByb2Nlc3MtY2Fs bC5wYXRjaCBiLzAwMDQtUGFzcy1pbmV0ZC1mbGFncy1hbmQtYXV0aC1jb250ZXh0LXRvLXN1YnBy b2Nlc3MtY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdh YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvMDAwNC1QYXNzLWluZXRkLWZsYWdzLWFuZC1hdXRoLWNv bnRleHQtdG8tc3VicHJvY2Vzcy1jYWxsLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gZTYz YTRhZDMwZDA3ZjA5MTJmNjMzNjAyNjM5ODVkN2FlZjk0ODU2NSBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6 IE1vbiwgMTMgQXByIDIwMjYgMTQ6MDc6MDIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNC81M10g UGFzcyBpbmV0ZCBmbGFncyBhbmQgYXV0aCBjb250ZXh0IHRvIHN1YnByb2Nlc3MgY2FsbHMKKyBm b3IgU0VMaW51eAorCitvcGVuc3NoLTcuNnAxLXN1YnByb2Nlc3Mtc2VsaW51eAorCitQYXNzIGlu ZXRkIGZsYWdzIGFuZCBhdXRoZW50aWNhdGlvbiBjb250ZXh0IGRvd24gdG8gc3VicHJvY2VzcyBj YWxscworZm9yIFNFTGludXggZW52aXJvbm1lbnQgc2V0dXAuIFRoaXMgZW5zdXJlcyB0aGF0IEF1 dGhvcml6ZWRLZXlzQ29tbWFuZAorYW5kIEF1dGhvcml6ZWRQcmluY2lwYWxzQ29tbWFuZCBzdWJw cm9jZXNzZXMgcnVuIHdpdGggdGhlIGNvcnJlY3QKK1NFTGludXggY29udGV4dCBiYXNlZCBvbiB0 aGUgYXV0aGVudGljYXRlZCB1c2VyJ3Mgcm9sZSBhbmQgbGV2ZWwuCisKK0NoYW5nZXM6CistIG1p c2MuYzogVXBkYXRlIHN1YnByb2Nlc3MoKSBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYWNjZXB0IGlu ZXRkIGFuZAorICB0aGVfYXV0aGN0eHQgcGFyYW1ldGVyczsgYWRkIHNzaGRfc2VsaW51eF9zZXR1 cF9lbnZfdmFyaWFibGVzKCkgY2FsbAorICBpbiBjaGlsZCBwcm9jZXNzIGJlZm9yZSBleGVjdmUK Ky0gbWlzYy5oOiBVcGRhdGUgc3VicHJvY2VzcygpIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCistIGF1 dGgyLXB1YmtleS5jOiBBZGQgZXh0ZXJuIGRlY2xhcmF0aW9ucyBmb3IgaW5ldGRfZmxhZyBhbmQK KyAgdGhlX2F1dGhjdHh0OyBwYXNzIHRoZW0gdG8gc3VicHJvY2VzcygpIGNhbGxzIGZvcgorICBB dXRob3JpemVkS2V5c0NvbW1hbmQgYW5kIEF1dGhvcml6ZWRQcmluY2lwYWxzQ29tbWFuZAorLSBz c2hjb25uZWN0LmM6IFVwZGF0ZSBzdWJwcm9jZXNzKCkgY2FsbCB3aXRoIG5ldyBwYXJhbWV0ZXJz ICgwLCBOVUxMKQorLSBzc2hkLWF1dGguYzogTWFrZSBpbmV0ZF9mbGFnIG5vbi1zdGF0aWMgKGV4 dGVybikKKy0gc3NoZC1zZXNzaW9uLmM6IE1ha2UgaW5ldGRfZmxhZyBub24tc3RhdGljIChleHRl cm4pCisKK0NvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9yZXBseUBhbnRocm9w aWMuY29tPgorLS0tCisgbWlzYy5oICAgICAgIHwgMiArLQorIHNzaGNvbm5lY3QuYyB8IDIgKy0K KyBzc2hkLWF1dGguYyAgfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyks IDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9taXNjLmggYi9taXNjLmgKK2luZGV4IDc5 MTg3NmMxZS4uZmUxMWY5ZDhhIDEwMDY0NAorLS0tIGEvbWlzYy5oCisrKysgYi9taXNjLmgKK0BA IC0xMjksNyArMTI5LDcgQEAgdHlwZWRlZiB2b2lkIHByaXZyZXN0b3JlX2ZuKHZvaWQpOworICNk ZWZpbmUJU1NIX1NVQlBST0NFU1NfVU5TQUZFX1BBVEgJKDE8PDMpCS8qIERvbid0IGNoZWNrIGZv ciBzYWZlIGNtZCAqLworICNkZWZpbmUJU1NIX1NVQlBST0NFU1NfUFJFU0VSVkVfRU5WCSgxPDw0 KQkvKiBLZWVwIHBhcmVudCBlbnZpcm9ubWVudCAqLworIHBpZF90IHN1YnByb2Nlc3MoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosIGludCwgY2hhciAqKiwgRklMRSAqKiwgdV9pbnQsCistICAg IHN0cnVjdCBwYXNzd2QgKiwgcHJpdmRyb3BfZm4gKiwgcHJpdnJlc3RvcmVfZm4gKik7CisrICAg IHN0cnVjdCBwYXNzd2QgKiwgcHJpdmRyb3BfZm4gKiwgcHJpdnJlc3RvcmVfZm4gKiwgaW50LCB2 b2lkICopOworIAorIHR5cGVkZWYgc3RydWN0IGFyZ2xpc3QgYXJnbGlzdDsKKyBzdHJ1Y3QgYXJn bGlzdCB7CitkaWZmIC0tZ2l0IGEvc3NoY29ubmVjdC5jIGIvc3NoY29ubmVjdC5jCitpbmRleCAw ZGRmYzc2YjMuLmJkYWFkZTY4MiAxMDA2NDQKKy0tLSBhL3NzaGNvbm5lY3QuYworKysrIGIvc3No Y29ubmVjdC5jCitAQCAtOTU0LDcgKzk1NCw3IEBAIGxvYWRfaG9zdGtleXNfY29tbWFuZChzdHJ1 Y3QgaG9zdGtleXMgKmhvc3RrZXlzLCBjb25zdCBjaGFyICpjb21tYW5kX3RlbXBsYXRlLAorIAor IAlpZiAoKHBpZCA9IHN1YnByb2Nlc3ModGFnLCBjb21tYW5kLCBhYywgYXYsICZmLAorIAkgICAg U1NIX1NVQlBST0NFU1NfU1RET1VUX0NBUFRVUkV8U1NIX1NVQlBST0NFU1NfVU5TQUZFX1BBVEh8 CistCSAgICBTU0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9FTlYsIE5VTEwsIE5VTEwsIE5VTEwpKSA9 PSAwKQorKwkgICAgU1NIX1NVQlBST0NFU1NfUFJFU0VSVkVfRU5WLCBOVUxMLCBOVUxMLCBOVUxM LCAwLCBOVUxMKSkgPT0gMCkKKyAJCWdvdG8gb3V0OworIAorIAlsb2FkX2hvc3RrZXlzX2ZpbGUo aG9zdGtleXMsIGhvc3RmaWxlX2hvc3RuYW1lLCB0YWcsIGYsIDEpOworZGlmZiAtLWdpdCBhL3Nz aGQtYXV0aC5jIGIvc3NoZC1hdXRoLmMKK2luZGV4IDQ4ODhjOGU2Mi4uMTQxMDkxNTFjIDEwMDY0 NAorLS0tIGEvc3NoZC1hdXRoLmMKKysrKyBiL3NzaGQtYXV0aC5jCitAQCAtMTE5LDcgKzExOSw3 IEBAIGNoYXIgKmNvbmZpZ19maWxlX25hbWUgPSBfUEFUSF9TRVJWRVJfQ09ORklHX0ZJTEU7Cisg aW50IGRlYnVnX2ZsYWcgPSAwOworIAorIC8qIEZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBkYWVt b24gaXMgYmVpbmcgc3RhcnRlZCBmcm9tIGluZXRkLiAqLworLXN0YXRpYyBpbnQgaW5ldGRfZmxh ZyA9IDA7CisraW50IGluZXRkX2ZsYWcgPSAwOworIAorIC8qIFNhdmVkIGFyZ3VtZW50cyB0byBt YWluKCkuICovCisgc3RhdGljIGNoYXIgKipzYXZlZF9hcmd2OworLS0gCisyLjU1LjAKKwoKZGlm ZiAtLWdpdCBhLzAwMDQtb3BlbnNzaC02LjZwMS1rZXljYXQucGF0Y2ggYi8wMDA0LW9wZW5zc2gt Ni42cDEta2V5Y2F0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjkwODVj Li4wMDAwMDAwCi0tLSBhLzAwMDQtb3BlbnNzaC02LjZwMS1rZXljYXQucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwzODAgKzAsMCBAQAotRnJvbSA1Y2MxYjEwYzhjZDVkZTkxZWM4MTlhOTM5N2Fi ZDI0YWVmOWYwOTlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlh dnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0Mzoy OCArMDIwMAotU3ViamVjdDogW1BBVENIIDA0LzU0XSBvcGVuc3NoLTYuNnAxLWtleWNhdAotCi0t LS0KLSAuZ2l0aWdub3JlICAgICAgIHwgICAxICsKLSBIT1dUTy5zc2gta2V5Y2F0IHwgIDEyICsr KwotIE1ha2VmaWxlLmluICAgICAgfCAgIDggKy0KLSBjb25maWd1cmUuYWMgICAgIHwgICA2ICsr Ci0gc3NoLWtleWNhdC5jICAgICB8IDI0MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwotIDUgZmlsZXMgY2hhbmdlZCwgMjY3IGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgSE9XVE8uc3NoLWtleWNhdAotIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzc2gta2V5Y2F0LmMKLQotZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8u Z2l0aWdub3JlCi1pbmRleCA5MDc1MzMwNjcuLjdiNDY2OGQ3MSAxMDA2NDQKLS0tLSBhLy5naXRp Z25vcmUKLSsrKyBiLy5naXRpZ25vcmUKLUBAIC0yOCw2ICsyOCw3IEBAIHNzaC1hZ2VudAotIHNz aC1rZXlnZW4KLSBzc2gta2V5c2NhbgotIHNzaC1rZXlzaWduCi0rc3NoLWtleWNhdAotIHNzaC1w a2NzMTEtaGVscGVyCi0gc3NoLXNrLWhlbHBlcgotIHNzaGQKLWRpZmYgLS1naXQgYS9IT1dUTy5z c2gta2V5Y2F0IGIvSE9XVE8uc3NoLWtleWNhdAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4 IDAwMDAwMDAwMC4uNjMwZWM2MjhjCi0tLS0gL2Rldi9udWxsCi0rKysgYi9IT1dUTy5zc2gta2V5 Y2F0Ci1AQCAtMCwwICsxLDEyIEBACi0rVGhlIHNzaC1rZXljYXQgcmV0cmlldmVzIHRoZSBjb250 ZW50IG9mIHRoZSB+Ly5zc2gvYXV0aG9yaXplZF9rZXlzCi0rb2YgYW4gdXNlciBpbiBhbnkgZW52 aXJvbm1lbnQuIFRoaXMgaW5jbHVkZXMgZW52aXJvbm1lbnRzIHdpdGgKLStwb2x5aW5zdGFudGlh dGlvbiBvZiBob21lIGRpcmVjdG9yaWVzIGFuZCBTRUxpbnV4IE1MUyBwb2xpY3kgZW5hYmxlZC4K LSsKLStUbyB1c2Ugc3NoLWtleWNhdCwgc2V0IHRoZXNlIG9wdGlvbnMgaW4gL2V0Yy9zc2gvc3No ZF9jb25maWcgZmlsZToKLSsgICAgICAgIEF1dGhvcml6ZWRLZXlzQ29tbWFuZCAvdXNyL2xpYmV4 ZWMvb3BlbnNzaC9zc2gta2V5Y2F0Ci0rICAgICAgICBBdXRob3JpemVkS2V5c0NvbW1hbmRVc2Vy IHJvb3QKLSsKLStEbyBub3QgZm9yZ2V0IHRvIGVuYWJsZSBwdWJsaWMga2V5IGF1dGhlbnRpY2F0 aW9uOgotKyAgICAgICAgUHVia2V5QXV0aGVudGljYXRpb24geWVzCi0rCi0rCi1kaWZmIC0tZ2l0 IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgotaW5kZXggMmFhYzg3OWMxLi40MmI0NWQzM2Qg MTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5pbgotKysrIGIvTWFrZWZpbGUuaW4KLUBAIC0yMyw2ICsy Myw3IEBAIFNTSF9QUk9HUkFNPUBiaW5kaXJAL3NzaAotIEFTS1BBU1NfUFJPR1JBTT0kKGxpYmV4 ZWNkaXIpL3NzaC1hc2twYXNzCi0gU0ZUUF9TRVJWRVI9JChsaWJleGVjZGlyKS9zZnRwLXNlcnZl cgotIFNTSF9LRVlTSUdOPSQobGliZXhlY2Rpcikvc3NoLWtleXNpZ24KLStTU0hfS0VZQ0FUPSQo bGliZXhlY2Rpcikvc3NoLWtleWNhdAotIFNTSERfU0VTU0lPTj0kKGxpYmV4ZWNkaXIpL3NzaGQt c2Vzc2lvbgotIFNTSERfQVVUSD0kKGxpYmV4ZWNkaXIpL3NzaGQtYXV0aAotIFNTSF9QS0NTMTFf SEVMUEVSPSQobGliZXhlY2Rpcikvc3NoLXBrY3MxMS1oZWxwZXIKLUBAIC01OCw2ICs1OSw3IEBA IENIQU5ORUxMSUJTPUBDSEFOTkVMTElCU0AKLSBLNUxJQlM9QEs1TElCU0AKLSBHU1NMSUJTPUBH U1NMSUJTQAotIFNTSERMSUJTPUBTU0hETElCU0AKLStLRVlDQVRMSUJTPUBLRVlDQVRMSUJTQAot IExJQkVESVQ9QExJQkVESVRACi0gTElCRklETzI9QExJQkZJRE8yQAotIExJQldUTVBEQj1ATElC V1RNUERCQAotQEAgLTc1LDcgKzc3LDcgQEAgTUtESVJfUD1ATUtESVJfUEAKLSAKLSAuU1VGRklY RVM6IC5sbwotIAotLVRBUkdFVFM9c3NoJChFWEVFWFQpIHNzaGQkKEVYRUVYVCkgc3NoZC1zZXNz aW9uJChFWEVFWFQpIHNzaGQtYXV0aCQoRVhFRVhUKSBzc2gtYWRkJChFWEVFWFQpIHNzaC1rZXln ZW4kKEVYRUVYVCkgc3NoLWtleXNjYW4ke0VYRUVYVH0gc3NoLWtleXNpZ24ke0VYRUVYVH0gc3No LXBrY3MxMS1oZWxwZXIkKEVYRUVYVCkgc3NoLWFnZW50JChFWEVFWFQpIHNjcCQoRVhFRVhUKSBz ZnRwLXNlcnZlciQoRVhFRVhUKSBzZnRwJChFWEVFWFQpIHNzaC1zay1oZWxwZXIkKEVYRUVYVCkg JChTS19TVEFOREFMT05FKQotK1RBUkdFVFM9c3NoJChFWEVFWFQpIHNzaGQkKEVYRUVYVCkgc3No ZC1zZXNzaW9uJChFWEVFWFQpIHNzaGQtYXV0aCQoRVhFRVhUKSBzc2gtYWRkJChFWEVFWFQpIHNz aC1rZXlnZW4kKEVYRUVYVCkgc3NoLWtleXNjYW4ke0VYRUVYVH0gc3NoLWtleXNpZ24ke0VYRUVY VH0gc3NoLXBrY3MxMS1oZWxwZXIkKEVYRUVYVCkgc3NoLWFnZW50JChFWEVFWFQpIHNjcCQoRVhF RVhUKSBzZnRwLXNlcnZlciQoRVhFRVhUKSBzZnRwJChFWEVFWFQpIHNzaC1zay1oZWxwZXIkKEVY RUVYVCkgc3NoLWtleWNhdCQoRVhFRVhUKSAkKFNLX1NUQU5EQUxPTkUpCi0gCi0gTElCT1BFTlNT SF9PQkpTPVwKLSAJc3NoX2FwaS5vIFwKLUBAIC0yNTIsNiArMjU0LDkgQEAgc3NoLXBrY3MxMS1o ZWxwZXIkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFAxMUhFTFBFUl9PQkpTKQot IHNzaC1zay1oZWxwZXIkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNLSEVMUEVS X09CSlMpCi0gCSQoTEQpIC1vICRAICQoU0tIRUxQRVJfT0JKUykgJChMREZMQUdTKSAtbHNzaCAt bG9wZW5ic2QtY29tcGF0IC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKSAkKExJQkZJRE8y KSAkKENIQU5ORUxMSUJTKQotIAotK3NzaC1rZXljYXQkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSAk KFNTSERPQkpTKSBsaWJzc2guYSBzc2gta2V5Y2F0Lm8gdWlkc3dhcC5vCi0rCSQoTEQpIC1vICRA IHNzaC1rZXljYXQubyB1aWRzd2FwLm8gJChMREZMQUdTKSAtbHNzaCAtbG9wZW5ic2QtY29tcGF0 ICQoS0VZQ0FUTElCUykgJChDSEFOTkVMTElCUykgJChMSUJTKQotKwotIHNzaC1rZXlzY2FuJChF WEVFWFQpOiAkKExJQkNPTVBBVCkgbGlic3NoLmEgJChTU0hLRVlTQ0FOX09CSlMpCi0gCSQoTEQp IC1vICRAICQoU1NIS0VZU0NBTl9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1jb21w YXQgLWxzc2ggJChMSUJTKSAkKENIQU5ORUxMSUJTKQotIAotQEAgLTQ0MCw2ICs0NDUsNyBAQCBp bnN0YWxsLWZpbGVzOgotIAkkKElOU1RBTEwpIC1tIDQ3MTEgJChTVFJJUF9PUFQpIHNzaC1rZXlz aWduJChFWEVFWFQpICQoREVTVERJUikkKFNTSF9LRVlTSUdOKSQoRVhFRVhUKQotIAkkKElOU1RB TEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNzaC1wa2NzMTEtaGVscGVyJChFWEVFWFQpICQoREVT VERJUikkKFNTSF9QS0NTMTFfSEVMUEVSKSQoRVhFRVhUKQotIAkkKElOU1RBTEwpIC1tIDA3NTUg JChTVFJJUF9PUFQpIHNzaC1zay1oZWxwZXIkKEVYRUVYVCkgJChERVNURElSKSQoU1NIX1NLX0hF TFBFUikkKEVYRUVYVCkKLSsJJChJTlNUQUxMKSAtbSAwNzU1ICQoU1RSSVBfT1BUKSBzc2gta2V5 Y2F0JChFWEVFWFQpICQoREVTVERJUikkKGxpYmV4ZWNkaXIpL3NzaC1rZXljYXQkKEVYRUVYVCkK LSAJJChJTlNUQUxMKSAtbSAwNzU1ICQoU1RSSVBfT1BUKSBzZnRwJChFWEVFWFQpICQoREVTVERJ UikkKGJpbmRpcikvc2Z0cCQoRVhFRVhUKQotIAkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9P UFQpIHNmdHAtc2VydmVyJChFWEVFWFQpICQoREVTVERJUikkKFNGVFBfU0VSVkVSKSQoRVhFRVhU KQotIAkkKElOU1RBTEwpIC1tIDY0NCBzc2guMS5vdXQgJChERVNURElSKSQobWFuZGlyKS8kKG1h bnN1YmRpcikxL3NzaC4xCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFj Ci1pbmRleCBhOGU5ZGY2NmIuLjhmODI3NmM3OCAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwot KysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzcwOSw2ICszNzA5LDcgQEAgQUNfQVJHX1dJVEgoW3Bh bV0sCi0gCQkJUEFNX01TRz0ieWVzIgotIAotIAkJCVNTSERMSUJTPSIkU1NIRExJQlMgLWxwYW0i Ci0rCQkJS0VZQ0FUTElCUz0iJEtFWUNBVExJQlMgLWxwYW0iCi0gCQkJQUNfREVGSU5FKFtVU0Vf UEFNXSwgWzFdLAotIAkJCQlbRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQQU0gc3VwcG9y dF0pCi0gCi1AQCAtMzcxOSw2ICszNzIwLDcgQEAgQUNfQVJHX1dJVEgoW3BhbV0sCi0gCQkJCQk7 OwotIAkJCQkqKQotIAkJCQkJU1NIRExJQlM9IiRTU0hETElCUyAtbGRsIgotKwkJCQkJS0VZQ0FU TElCUz0iJEtFWUNBVExJQlMgLWxkbCIKLSAJCQkJCTs7Ci0gCQkJCWVzYWMKLSAJCQlmaQotQEAg LTQ5NjIsNiArNDk2NCw3IEBAIEFDX0FSR19XSVRIKFtzZWxpbnV4XSwKLSAJZmkgXQotICkKLSBB Q19TVUJTVChbU1NIRExJQlNdKQotK0FDX1NVQlNUKFtLRVlDQVRMSUJTXSkKLSAKLSAjIENoZWNr IHdoZXRoZXIgdXNlciB3YW50cyBLZXJiZXJvcyA1IHN1cHBvcnQKLSBLUkI1X01TRz0ibm8iCi1A QCAtNTk3NSw2ICs1OTc4LDkgQEAgZmkKLSBpZiB0ZXN0ICEgLXogIiR7U1NIRExJQlN9IjsgdGhl bgotIGVjaG8gIiAgICAgICAgICtmb3Igc3NoZDogJHtTU0hETElCU30iCi0gZmkKLStpZiB0ZXN0 ICEgLXogIiR7S0VZQ0FUTElCU30iOyB0aGVuCi0rZWNobyAiICAgK2ZvciBzc2gta2V5Y2F0OiAk e0tFWUNBVExJQlN9IgotK2ZpCi0gCi0gZWNobyAiIgotIAotZGlmZiAtLWdpdCBhL3NzaC1rZXlj YXQuYyBiL3NzaC1rZXljYXQuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAw MC4uOGJiMTdjNzNlCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zc2gta2V5Y2F0LmMKLUBAIC0wLDAg KzEsMjQxIEBACi0rLyoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9u IG5vdGljZSBpbiBpdHMgZW50aXJldHksCi0rICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVy IG9mIHdhcnJhbnRpZXMuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUg dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKLSsgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0rICogICAgd3JpdHRlbiBwZXJt aXNzaW9uLgotKyAqCi0rICogQUxURVJOQVRJVkVMWSwgdGhpcyBwcm9kdWN0IG1heSBiZSBkaXN0 cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKLSsgKiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBp biB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCi0rICogcmVxdWlyZWQg SU5TVEVBRCBPRiB0aGUgYWJvdmUgcmVzdHJpY3Rpb25zLiAgKFRoaXMgY2xhdXNlIGlzCi0rICog bmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUg R1BMIGFuZAotKyAqIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNv cHlyaWdodC4pCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBB TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0rICogT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSsgKiBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsCi0rICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0rICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0rICogU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqLwotKwotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDEx IFJlZCBIYXQsIEluYy4KLSsgKiBXcml0dGVuIGJ5IFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5j b20+Ci0rKi8KLSsKLSsjZGVmaW5lIF9HTlVfU09VUkNFCi0rCi0rI2luY2x1ZGUgImNvbmZpZy5o IgotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKyNpbmNsdWRlIDxzeXMvc3RhdC5o PgotKyNpbmNsdWRlIDxwd2QuaD4KLSsjaW5jbHVkZSA8ZmNudGwuaD4KLSsjaW5jbHVkZSA8dW5p c3RkLmg+Ci0rI2lmZGVmIEhBVkVfU1RESU5UX0gKLSsjaW5jbHVkZSA8c3RkaW50Lmg+Ci0rI2Vu ZGlmCi0rCi0rI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9hcHBsLmg+Ci0rCi0rI2luY2x1ZGUgInVp ZHN3YXAuaCIKLSsjaW5jbHVkZSAibWlzYy5oIgotKwotKyNkZWZpbmUgRVJSX1VTQUdFIDEKLSsj ZGVmaW5lIEVSUl9QQU1fU1RBUlQgMgotKyNkZWZpbmUgRVJSX09QRU5fU0VTU0lPTiAzCi0rI2Rl ZmluZSBFUlJfQ0xPU0VfU0VTU0lPTiA0Ci0rI2RlZmluZSBFUlJfUEFNX0VORCA1Ci0rI2RlZmlu ZSBFUlJfR0VUUFdOQU0gNgotKyNkZWZpbmUgRVJSX01FTU9SWSA3Ci0rI2RlZmluZSBFUlJfT1BF TiA4Ci0rI2RlZmluZSBFUlJfRklMRV9NT0RFIDkKLSsjZGVmaW5lIEVSUl9GRE9QRU4gMTAKLSsj ZGVmaW5lIEVSUl9TVEFUIDExCi0rI2RlZmluZSBFUlJfV1JJVEUgMTIKLSsjZGVmaW5lIEVSUl9Q QU1fUFVURU5WIDEzCi0rI2RlZmluZSBCVUZMRU4gNDA5NgotKwotKy8qIEp1c3QgaWdub3JlIHRo ZSBtZXNzYWdlcyBpbiB0aGUgY29udmVyc2F0aW9uIGZ1bmN0aW9uICovCi0rc3RhdGljIGludAot K2R1bW15X2NvbnYoaW50IG51bV9tc2csIGNvbnN0IHN0cnVjdCBwYW1fbWVzc2FnZSAqKm1zZ20s Ci0rCSAgIHN0cnVjdCBwYW1fcmVzcG9uc2UgKipyZXNwb25zZSwgdm9pZCAqYXBwZGF0YV9wdHIp Ci0rewotKwlzdHJ1Y3QgcGFtX3Jlc3BvbnNlICpyc3A7Ci0rCi0rCSh2b2lkKW1zZ207Ci0rCSh2 b2lkKWFwcGRhdGFfcHRyOwotKwotKwlpZiAobnVtX21zZyA8PSAwKQotKwkJcmV0dXJuIFBBTV9D T05WX0VSUjsKLSsKLSsJLyogSnVzdCBhbGxvY2F0ZSB0aGUgYXJyYXkgYXMgZW1wdHkgcmVzcG9u c2VzICovCi0rCXJzcCA9IGNhbGxvYyAobnVtX21zZywgc2l6ZW9mIChzdHJ1Y3QgcGFtX3Jlc3Bv bnNlKSk7Ci0rCWlmIChyc3AgPT0gTlVMTCkKLSsJCXJldHVybiBQQU1fQ09OVl9FUlI7Ci0rCi0r CSpyZXNwb25zZSA9IHJzcDsKLSsJcmV0dXJuIFBBTV9TVUNDRVNTOwotK30KLSsKLStzdGF0aWMg c3RydWN0IHBhbV9jb252IGNvbnYgPSB7Ci0rCWR1bW15X2NvbnYsCi0rCU5VTEwKLSt9OwotKwot K2NoYXIgKgotK21ha2VfYXV0aF9rZXlzX25hbWUoY29uc3Qgc3RydWN0IHBhc3N3ZCAqcHdkKQot K3sKLSsJY2hhciAqZm5hbWU7Ci0rCi0rCWlmIChhc3ByaW50ZigmZm5hbWUsICIlcy8uc3NoL2F1 dGhvcml6ZWRfa2V5cyIsIHB3ZC0+cHdfZGlyKSA8IDApCi0rCQlyZXR1cm4gTlVMTDsKLSsKLSsJ cmV0dXJuIGZuYW1lOwotK30KLSsKLStpbnQKLStkdW1wX2tleXMoY29uc3QgY2hhciAqdXNlcikK LSt7Ci0rCXN0cnVjdCBwYXNzd2QgKnB3ZDsKLSsJaW50IGZkID0gLTE7Ci0rCUZJTEUgKmYgPSBO VUxMOwotKwljaGFyICpmbmFtZSA9IE5VTEw7Ci0rCWludCBydiA9IDA7Ci0rCWNoYXIgYnVmW0JV RkxFTl07Ci0rCXNpemVfdCBsZW47Ci0rCXN0cnVjdCBzdGF0IHN0OwotKwotKwlpZiAoKHB3ZCA9 IGdldHB3bmFtKHVzZXIpKSA9PSBOVUxMKSB7Ci0rCQlyZXR1cm4gRVJSX0dFVFBXTkFNOwotKwl9 Ci0rCi0rCWlmICgoZm5hbWUgPSBtYWtlX2F1dGhfa2V5c19uYW1lKHB3ZCkpID09IE5VTEwpIHsK LSsJCXJldHVybiBFUlJfTUVNT1JZOwotKwl9Ci0rCi0rCXRlbXBvcmFyaWx5X3VzZV91aWQocHdk KTsKLSsKLSsJaWYgKChmZCA9IG9wZW4oZm5hbWUsIE9fUkRPTkxZfE9fTk9OQkxPQ0t8T19OT0ZP TExPVywgMCkpIDwgMCkgewotKwkJcnYgPSBFUlJfT1BFTjsKLSsJCWdvdG8gZmFpbDsKLSsJfQot KwotKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKSB7Ci0rCQlydiA9IEVSUl9TVEFUOwotKwkJZ290 byBmYWlsOwotKwl9Ci0rCi0rCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSB8fAotKwkJKHN0LnN0 X3VpZCAhPSBwd2QtPnB3X3VpZCAmJiBzdC5zdF91aWQgIT0gMCkpIHsKLSsJCXJ2ID0gRVJSX0ZJ TEVfTU9ERTsKLSsJCWdvdG8gZmFpbDsKLSsJfQotKwotKwl1bnNldF9ub25ibG9jayhmZCk7Ci0r Ci0rCWlmICgoZiA9IGZkb3BlbihmZCwgInIiKSkgPT0gTlVMTCkgewotKwkJcnYgPSBFUlJfRkRP UEVOOwotKwkJZ290byBmYWlsOwotKwl9Ci0rCi0rCWZkID0gLTE7Ci0rCi0rCXdoaWxlICgobGVu ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgZikpID4gMCkgewotKwkJcnYgPSBmd3JpdGUo YnVmLCAxLCBsZW4sIHN0ZG91dCkgIT0gbGVuID8gRVJSX1dSSVRFIDogMDsKLSsJfQotKwotK2Zh aWw6Ci0rCWlmIChmZCAhPSAtMSkKLSsJCWNsb3NlKGZkKTsKLSsJaWYgKGYgIT0gTlVMTCkKLSsJ CWZjbG9zZShmKTsKLSsJZnJlZShmbmFtZSk7Ci0rCXJlc3RvcmVfdWlkKCk7Ci0rCXJldHVybiBy djsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IGNoYXIgKmVudl9uYW1lc1tdID0geyAiU0VMSU5VWF9S T0xFX1JFUVVFU1RFRCIsCi0rCSJTRUxJTlVYX0xFVkVMX1JFUVVFU1RFRCIsCi0rCSJTRUxJTlVY X1VTRV9DVVJSRU5UX1JBTkdFIgotK307Ci0rCi0rZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwotKwot K2ludAotK3NldF9wYW1fZW52aXJvbm1lbnQocGFtX2hhbmRsZV90ICpwYW1oKQotK3sKLSsJaW50 IGk7Ci0rCXNpemVfdCBqOwotKwotKwlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKGVudl9uYW1lcykv c2l6ZW9mKGVudl9uYW1lc1swXSk7ICsraikgewotKwkJaW50IGxlbiA9IHN0cmxlbihlbnZfbmFt ZXNbal0pOwotKwotKwkJZm9yIChpID0gMDsgZW52aXJvbltpXSAhPSBOVUxMOyArK2kpIHsKLSsJ CQlpZiAoc3RybmNtcChlbnZfbmFtZXNbal0sIGVudmlyb25baV0sIGxlbikgPT0gMCAmJgotKwkJ CSAgICBlbnZpcm9uW2ldW2xlbl0gPT0gJz0nKSB7Ci0rCQkJCWlmIChwYW1fcHV0ZW52KHBhbWgs IGVudmlyb25baV0pICE9IFBBTV9TVUNDRVNTKQotKwkJCQkJcmV0dXJuIEVSUl9QQU1fUFVURU5W OwotKwkJCX0KLSsJCX0KLSsJfQotKwotKwlyZXR1cm4gMDsKLSt9Ci0rCi0raW50Ci0rbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsJcGFtX2hhbmRsZV90ICpwYW1oID0gTlVMTDsK LSsJaW50IHJldHZhbDsKLSsJaW50IGV2ID0gMDsKLSsKLSsJaWYgKGFyZ2MgIT0gMikgewotKwkJ ZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgPHVzZXItbmFtZT5cbiIsIGFyZ3ZbMF0pOwotKwkJ cmV0dXJuIEVSUl9VU0FHRTsKLSsJfQotKwotKwlyZXR2YWwgPSBwYW1fc3RhcnQoInNzaC1rZXlj YXQiLCBhcmd2WzFdLCAmY29udiwgJnBhbWgpOwotKwlpZiAocmV0dmFsICE9IFBBTV9TVUNDRVNT KSB7Ci0rCQlyZXR1cm4gRVJSX1BBTV9TVEFSVDsKLSsJfQotKwotKwlldiA9IHNldF9wYW1fZW52 aXJvbm1lbnQocGFtaCk7Ci0rCWlmIChldiAhPSAwKQotKwkJZ290byBmaW5pc2g7Ci0rCi0rCXJl dHZhbCA9IHBhbV9vcGVuX3Nlc3Npb24ocGFtaCwgUEFNX1NJTEVOVCk7Ci0rCWlmIChyZXR2YWwg IT0gUEFNX1NVQ0NFU1MpIHsKLSsJCWV2ID0gRVJSX09QRU5fU0VTU0lPTjsKLSsJCWdvdG8gZmlu aXNoOwotKwl9Ci0rCi0rCWV2ID0gZHVtcF9rZXlzKGFyZ3ZbMV0pOwotKwotKwlyZXR2YWwgPSBw YW1fY2xvc2Vfc2Vzc2lvbihwYW1oLCBQQU1fU0lMRU5UKTsKLSsJaWYgKHJldHZhbCAhPSBQQU1f U1VDQ0VTUykgewotKwkJZXYgPSBFUlJfQ0xPU0VfU0VTU0lPTjsKLSsJfQotKwotK2ZpbmlzaDoK LSsJcmV0dmFsID0gcGFtX2VuZCAocGFtaCxyZXR2YWwpOwotKwlpZiAocmV0dmFsICE9IFBBTV9T VUNDRVNTKSB7Ci0rCQlldiA9IEVSUl9QQU1fRU5EOwotKwl9Ci0rCXJldHVybiBldjsKLSt9Ci0t LSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvMDAwNS1vcGVuc3NoLTYuNnAxLWFsbG93LWlwLW9w dHMucGF0Y2ggYi8wMDA1LW9wZW5zc2gtNi42cDEtYWxsb3ctaXAtb3B0cy5wYXRjaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI0M2U4MS4uMDAwMDAwMAotLS0gYS8wMDA1LW9wZW5z c2gtNi42cDEtYWxsb3ctaXAtb3B0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg QEAKLUZyb20gMTM1YmI2OTAzYjcxNTAxMmE4YWUzMDIwMjJiYjdhMzFkMTg3OWM2YSBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWls LmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQ QVRDSCAwNS81NF0gb3BlbnNzaC02LjZwMS1hbGxvdy1pcC1vcHRzCi0KLSNodHRwczovL2J1Z3pp bGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0Ci0tLS0KLSBzc2hkLXNlc3Npb24u YyB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQs IDI2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zc2hkLXNl c3Npb24uYyBiL3NzaGQtc2Vzc2lvbi5jCi1pbmRleCA5Njc3MzdjNWIuLjAwZDAwZTI5MyAxMDA2 NDQKLS0tLSBhL3NzaGQtc2Vzc2lvbi5jCi0rKysgYi9zc2hkLXNlc3Npb24uYwotQEAgLTcyNiwx MiArNzI2LDMyIEBAIGNoZWNrX2lwX29wdGlvbnMoc3RydWN0IHNzaCAqc3NoKQotIAotIAlpZiAo Z2V0c29ja29wdChzb2NrX2luLCBJUFBST1RPX0lQLCBJUF9PUFRJT05TLCBvcHRzLAotIAkgICAg Jm9wdGlvbl9zaXplKSA+PSAwICYmIG9wdGlvbl9zaXplICE9IDApIHsKLS0JCXRleHRbMF0gPSAn XDAnOwotLQkJZm9yIChpID0gMDsgaSA8IG9wdGlvbl9zaXplOyBpKyspCi0tCQkJc25wcmludGYo dGV4dCArIGkqMywgc2l6ZW9mKHRleHQpIC0gaSozLAotLQkJCSAgICAiICUyLjJ4Iiwgb3B0c1tp XSk7Ci0tCQlmYXRhbCgiQ29ubmVjdGlvbiBmcm9tICUuMTAwcyBwb3J0ICVkIHdpdGggSVAgb3B0 czogJS44MDBzIiwKLS0JCSAgICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3Bv cnQoc3NoKSwgdGV4dCk7Ci0rCQlpID0gMDsKLSsJCWRvIHsKLSsJCQlzd2l0Y2ggKG9wdHNbaV0p IHsKLSsJCQkJY2FzZSAwOgotKwkJCQljYXNlIDE6Ci0rCQkJCQkrK2k7Ci0rCQkJCQlicmVhazsK LSsJCQkJY2FzZSAxMzA6Ci0rCQkJCWNhc2UgMTMzOgotKwkJCQljYXNlIDEzNDoKLSsJCQkJCWlm IChpICsgMSA8IG9wdGlvbl9zaXplICYmIG9wdHNbaSArIDFdID49IDIpIHsKLSsJCQkJCQlpICs9 IG9wdHNbaSArIDFdOwotKwkJCQkJCWJyZWFrOwotKwkJCQkJfQotKwkJCQkJLyogRkFMTFRIUk9V R0ggKi8KLSsJCQkJZGVmYXVsdDoKLSsJCQkJLyogRmFpbCwgZmF0YWxseSwgaWYgd2UgZGV0ZWN0 IGVpdGhlciBsb29zZSBvciBzdHJpY3QKLSsJCQkgCSAqIG9yIGluY29ycmVjdCBzb3VyY2Ugcm91 dGluZyBvcHRpb25zLiAqLwotKwkJCQkJdGV4dFswXSA9ICdcMCc7Ci0rCQkJCQlmb3IgKGkgPSAw OyBpIDwgb3B0aW9uX3NpemU7IGkrKykKLSsJCQkJCQlzbnByaW50Zih0ZXh0ICsgaSozLCBzaXpl b2YodGV4dCkgLSBpKjMsCi0rCQkJCQkJCSIgJTIuMngiLCBvcHRzW2ldKTsKLSsJCQkJCWZhdGFs KCJDb25uZWN0aW9uIGZyb20gJS4xMDBzIHBvcnQgJWQgd2l0aCBJUCBvcHRpb25zOiUuODAwcyIs Ci0rCQkJCQkJc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksIHRl eHQpOwotKwkJCX0KLSsJCX0gd2hpbGUgKGkgPCBvcHRpb25fc2l6ZSk7Ci0gCX0KLSAjZW5kaWYg LyogSVBfT1BUSU9OUyAqLwotIH0KLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDA1LW9w ZW5zc2gtNi42cDEta2V5Y2F0LnBhdGNoIGIvMDAwNS1vcGVuc3NoLTYuNnAxLWtleWNhdC5wYXRj aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDlhNWVmCi0tLSAvZGV2L251 bGwKKysrIGIvMDAwNS1vcGVuc3NoLTYuNnAxLWtleWNhdC5wYXRjaApAQCAtMCwwICsxLDM5MyBA QAorRnJvbSA2MTY0ZDk1ODliZTUxMjViOTVkYTk5OWVkNjYxNWFhNDMxYTQyZTcwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwu Y29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BB VENIIDA1LzUzXSBvcGVuc3NoLTYuNnAxLWtleWNhdAorCistLS0KKyAuZGVwZW5kICAgICAgICAg IHwgICAxICsKKyAuZ2l0aWdub3JlICAgICAgIHwgICAxICsKKyBIT1dUTy5zc2gta2V5Y2F0IHwg IDEyICsrKworIE1ha2VmaWxlLmluICAgICAgfCAgIDggKy0KKyBjb25maWd1cmUuYWMgICAgIHwg ICA2ICsrCisgc3NoLWtleWNhdC5jICAgICB8IDI0MSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKworIDYgZmlsZXMgY2hhbmdlZCwgMjY4IGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgSE9XVE8uc3NoLWtleWNhdAor IGNyZWF0ZSBtb2RlIDEwMDY0NCBzc2gta2V5Y2F0LmMKKworZGlmZiAtLWdpdCBhLy5kZXBlbmQg Yi8uZGVwZW5kCitpbmRleCA4NDVmYWRjZWIuLjdkMmQwMGJiZiAxMDA2NDQKKy0tLSBhLy5kZXBl bmQKKysrKyBiLy5kZXBlbmQKK0BAIC0xMzUsNiArMTM1LDcgQEAgc3NoLWVkMjU1MTktc2subzog aW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNvbXBhdC9v cGVuYnMKKyBzc2gtZWQyNTUxOS5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0 Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvYmFz ZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJh c2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5o IG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5ic2Qt Y29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0Y2gu aCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmggb3Bl bmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmggb3Bl bmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5oIG9w ZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmggb3Bl bmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaCBv cGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmggb3Bl bmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1uZXQuaCBvcGVu YnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVwLmggZW50cm9w eS5oIGNyeXB0b19hcGkuaCBsb2cuaCBzc2hlcnIuaCBzc2hidWYuaCBzc2hrZXkuaAorIHNzaC1r ZXlnZW4ubzogY2lwaGVyLWNoYWNoYXBvbHkuaCBjaGFjaGEuaCBwb2x5MTMwNS5oIGNpcGhlci1h ZXNjdHIuaCByaWpuZGFlbC5oCisgc3NoLWtleWdlbi5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRl ZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJz ZC1jb21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQv cmVhZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRy cnNldGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hh Mi5oIG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29t cGF0L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt c2lnbmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0 cmVzX2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt d2FpdHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1y ZmMyNTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQv cG9ydC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0 LWxpbnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9y dC1uZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRz dGVwLmggZW50cm9weS5oIHhtYWxsb2MuaCBzc2hrZXkuaCBhdXRoZmlsZS5oIHNzaGJ1Zi5oIHBh dGhuYW1lcy5oIGxvZy5oIHNzaGVyci5oIG1pc2MuaCBtYXRjaC5oIGhvc3RmaWxlLmggZG5zLmgg c3NoLmggc3NoMi5oIGF0b21pY2lvLmgga3JsLmggZGlnZXN0LmggdXRmOC5oIGF1dGhmZC5oIHNz aHNpZy5oIHNzaC1zay5oIHNrLWFwaS5oIGNpcGhlci5oCisrc3NoLWtleWNhdC5vOiBjb25maWcu aCB1aWRzd2FwLmggbWlzYy5oCisgc3NoLWtleXNjYW4ubzogYXRvbWljaW8uaCBtaXNjLmggaG9z dGZpbGUuaCBzc2hfYXBpLmggc3NoMi5oIGRucy5oIGFkZHIuaAorIHNzaC1rZXlzY2FuLm86IGlu Y2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3Bl bmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdh Y3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5o IG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9w ZW5ic2QtY29tcGF0L2JzZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21w YXQvYmxmLmggb3BlbmJzZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5o IG9wZW5ic2QtY29tcGF0L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9w ZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5o IG9wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBv cGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0 aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5o IG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMu aCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVu YnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuaCBlbnRyb3B5LmggeG1hbGxvYy5oIHNzaC5oIHNzaGJ1 Zi5oIHNzaGtleS5oIGNpcGhlci5oIGNpcGhlci1jaGFjaGFwb2x5LmggY2hhY2hhLmggcG9seTEz MDUuaCBjaXBoZXItYWVzY3RyLmggcmlqbmRhZWwuaCBkaWdlc3QuaCBrZXguaCBtYWMuaCBjcnlw dG9fYXBpLmggY29tcGF0LmggbXlwcm9wb3NhbC5oIHBhY2tldC5oIGRpc3BhdGNoLmggbG9nLmgg c3NoZXJyLmgKKyBzc2gta2V5c2lnbi5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBw bGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQv YmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVhZHBhc3Nw aHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFt ZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5i c2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0 Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmgg b3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmgg b3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5o IG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmgg b3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXgu aCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmgg b3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1uZXQuaCBv cGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVwLmggZW50 cm9weS5oIHhtYWxsb2MuaCBsb2cuaCBzc2hlcnIuaCBzc2hrZXkuaCBzc2guaCBzc2gyLmggbWlz Yy5oIHNzaGJ1Zi5oIGF1dGhmaWxlLmggbXNnLmggY2Fub2hvc3QuaCBwYXRobmFtZXMuaCByZWFk Y29uZi5oIHVpZHN3YXAuaAorZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCitp bmRleCA5MDc1MzMwNjcuLjdiNDY2OGQ3MSAxMDA2NDQKKy0tLSBhLy5naXRpZ25vcmUKKysrKyBi Ly5naXRpZ25vcmUKK0BAIC0yOCw2ICsyOCw3IEBAIHNzaC1hZ2VudAorIHNzaC1rZXlnZW4KKyBz c2gta2V5c2NhbgorIHNzaC1rZXlzaWduCisrc3NoLWtleWNhdAorIHNzaC1wa2NzMTEtaGVscGVy Cisgc3NoLXNrLWhlbHBlcgorIHNzaGQKK2RpZmYgLS1naXQgYS9IT1dUTy5zc2gta2V5Y2F0IGIv SE9XVE8uc3NoLWtleWNhdAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4u NjMwZWM2MjhjCistLS0gL2Rldi9udWxsCisrKysgYi9IT1dUTy5zc2gta2V5Y2F0CitAQCAtMCww ICsxLDEyIEBACisrVGhlIHNzaC1rZXljYXQgcmV0cmlldmVzIHRoZSBjb250ZW50IG9mIHRoZSB+ Ly5zc2gvYXV0aG9yaXplZF9rZXlzCisrb2YgYW4gdXNlciBpbiBhbnkgZW52aXJvbm1lbnQuIFRo aXMgaW5jbHVkZXMgZW52aXJvbm1lbnRzIHdpdGgKKytwb2x5aW5zdGFudGlhdGlvbiBvZiBob21l IGRpcmVjdG9yaWVzIGFuZCBTRUxpbnV4IE1MUyBwb2xpY3kgZW5hYmxlZC4KKysKKytUbyB1c2Ug c3NoLWtleWNhdCwgc2V0IHRoZXNlIG9wdGlvbnMgaW4gL2V0Yy9zc2gvc3NoZF9jb25maWcgZmls ZToKKysgICAgICAgIEF1dGhvcml6ZWRLZXlzQ29tbWFuZCAvdXNyL2xpYmV4ZWMvb3BlbnNzaC9z c2gta2V5Y2F0CisrICAgICAgICBBdXRob3JpemVkS2V5c0NvbW1hbmRVc2VyIHJvb3QKKysKKytE byBub3QgZm9yZ2V0IHRvIGVuYWJsZSBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uOgorKyAgICAg ICAgUHVia2V5QXV0aGVudGljYXRpb24geWVzCisrCisrCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUu aW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZTk1MDNlN2I3Li4yYTQ0OTY4MGEgMTAwNjQ0CistLS0g YS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yMyw2ICsyMyw3IEBAIFNTSF9Q Uk9HUkFNPUBiaW5kaXJAL3NzaAorIEFTS1BBU1NfUFJPR1JBTT0kKGxpYmV4ZWNkaXIpL3NzaC1h c2twYXNzCisgU0ZUUF9TRVJWRVI9JChsaWJleGVjZGlyKS9zZnRwLXNlcnZlcgorIFNTSF9LRVlT SUdOPSQobGliZXhlY2Rpcikvc3NoLWtleXNpZ24KKytTU0hfS0VZQ0FUPSQobGliZXhlY2Rpcikv c3NoLWtleWNhdAorIFNTSERfU0VTU0lPTj0kKGxpYmV4ZWNkaXIpL3NzaGQtc2Vzc2lvbgorIFNT SERfQVVUSD0kKGxpYmV4ZWNkaXIpL3NzaGQtYXV0aAorIFNTSF9QS0NTMTFfSEVMUEVSPSQobGli ZXhlY2Rpcikvc3NoLXBrY3MxMS1oZWxwZXIKK0BAIC01OCw2ICs1OSw3IEBAIENIQU5ORUxMSUJT PUBDSEFOTkVMTElCU0AKKyBLNUxJQlM9QEs1TElCU0AKKyBHU1NMSUJTPUBHU1NMSUJTQAorIFNT SERMSUJTPUBTU0hETElCU0AKKytLRVlDQVRMSUJTPUBLRVlDQVRMSUJTQAorIExJQkVESVQ9QExJ QkVESVRACisgTElCRklETzI9QExJQkZJRE8yQAorIExJQldUTVBEQj1ATElCV1RNUERCQAorQEAg LTc1LDcgKzc3LDcgQEAgTUtESVJfUD1ATUtESVJfUEAKKyAKKyAuU1VGRklYRVM6IC5sbworIAor LVRBUkdFVFM9c3NoJChFWEVFWFQpIHNzaGQkKEVYRUVYVCkgc3NoZC1zZXNzaW9uJChFWEVFWFQp IHNzaGQtYXV0aCQoRVhFRVhUKSBzc2gtYWRkJChFWEVFWFQpIHNzaC1rZXlnZW4kKEVYRUVYVCkg c3NoLWtleXNjYW4ke0VYRUVYVH0gc3NoLWtleXNpZ24ke0VYRUVYVH0gc3NoLXBrY3MxMS1oZWxw ZXIkKEVYRUVYVCkgc3NoLWFnZW50JChFWEVFWFQpIHNjcCQoRVhFRVhUKSBzZnRwLXNlcnZlciQo RVhFRVhUKSBzZnRwJChFWEVFWFQpIHNzaC1zay1oZWxwZXIkKEVYRUVYVCkgJChTS19TVEFOREFM T05FKQorK1RBUkdFVFM9c3NoJChFWEVFWFQpIHNzaGQkKEVYRUVYVCkgc3NoZC1zZXNzaW9uJChF WEVFWFQpIHNzaGQtYXV0aCQoRVhFRVhUKSBzc2gtYWRkJChFWEVFWFQpIHNzaC1rZXlnZW4kKEVY RUVYVCkgc3NoLWtleXNjYW4ke0VYRUVYVH0gc3NoLWtleXNpZ24ke0VYRUVYVH0gc3NoLXBrY3Mx MS1oZWxwZXIkKEVYRUVYVCkgc3NoLWFnZW50JChFWEVFWFQpIHNjcCQoRVhFRVhUKSBzZnRwLXNl cnZlciQoRVhFRVhUKSBzZnRwJChFWEVFWFQpIHNzaC1zay1oZWxwZXIkKEVYRUVYVCkgc3NoLWtl eWNhdCQoRVhFRVhUKSAkKFNLX1NUQU5EQUxPTkUpCisgCisgTElCT1BFTlNTSF9PQkpTPVwKKyAJ c3NoX2FwaS5vIFwKK0BAIC0yNTMsNiArMjU1LDkgQEAgc3NoLXBrY3MxMS1oZWxwZXIkKEVYRUVY VCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFAxMUhFTFBFUl9PQkpTKQorIHNzaC1zay1oZWxw ZXIkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNLSEVMUEVSX09CSlMpCisgCSQo TEQpIC1vICRAICQoU0tIRUxQRVJfT0JKUykgJChMREZMQUdTKSAtbHNzaCAtbG9wZW5ic2QtY29t cGF0IC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKSAkKExJQkZJRE8yKSAkKENIQU5ORUxM SUJTKQorIAorK3NzaC1rZXljYXQkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSAkKFNTSERPQkpTKSBs aWJzc2guYSBzc2gta2V5Y2F0Lm8gdWlkc3dhcC5vCisrCSQoTEQpIC1vICRAIHNzaC1rZXljYXQu byB1aWRzd2FwLm8gJChMREZMQUdTKSAtbHNzaCAtbG9wZW5ic2QtY29tcGF0ICQoS0VZQ0FUTElC UykgJChDSEFOTkVMTElCUykgJChMSUJTKQorKworIHNzaC1rZXlzY2FuJChFWEVFWFQpOiAkKExJ QkNPTVBBVCkgbGlic3NoLmEgJChTU0hLRVlTQ0FOX09CSlMpCisgCSQoTEQpIC1vICRAICQoU1NI S0VZU0NBTl9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgLWxzc2ggJChM SUJTKSAkKENIQU5ORUxMSUJTKQorIAorQEAgLTQ0OSw2ICs0NTQsNyBAQCBpbnN0YWxsLWZpbGVz OgorIAkkKElOU1RBTEwpIC1tIDQ3MTEgJChTVFJJUF9PUFQpIHNzaC1rZXlzaWduJChFWEVFWFQp ICQoREVTVERJUikkKFNTSF9LRVlTSUdOKSQoRVhFRVhUKQorIAkkKElOU1RBTEwpIC1tIDA3NTUg JChTVFJJUF9PUFQpIHNzaC1wa2NzMTEtaGVscGVyJChFWEVFWFQpICQoREVTVERJUikkKFNTSF9Q S0NTMTFfSEVMUEVSKSQoRVhFRVhUKQorIAkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQp IHNzaC1zay1oZWxwZXIkKEVYRUVYVCkgJChERVNURElSKSQoU1NIX1NLX0hFTFBFUikkKEVYRUVY VCkKKysJJChJTlNUQUxMKSAtbSAwNzU1ICQoU1RSSVBfT1BUKSBzc2gta2V5Y2F0JChFWEVFWFQp ICQoREVTVERJUikkKGxpYmV4ZWNkaXIpL3NzaC1rZXljYXQkKEVYRUVYVCkKKyAJJChJTlNUQUxM KSAtbSAwNzU1ICQoU1RSSVBfT1BUKSBzZnRwJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikv c2Z0cCQoRVhFRVhUKQorIAkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNmdHAtc2Vy dmVyJChFWEVFWFQpICQoREVTVERJUikkKFNGVFBfU0VSVkVSKSQoRVhFRVhUKQorIAkkKElOU1RB TEwpIC1tIDY0NCBzc2guMS5vdXQgJChERVNURElSKSQobWFuZGlyKS8kKG1hbnN1YmRpcikxL3Nz aC4xCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjYjE3 MTFmNmIuLjRiM2NmZjM4YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmln dXJlLmFjCitAQCAtMzYzOSw2ICszNjM5LDcgQEAgQUNfQVJHX1dJVEgoW3BhbV0sCisgCQkJUEFN X01TRz0ieWVzIgorIAorIAkJCVNTSERMSUJTPSIkU1NIRExJQlMgLWxwYW0iCisrCQkJS0VZQ0FU TElCUz0iJEtFWUNBVExJQlMgLWxwYW0iCisgCQkJQUNfREVGSU5FKFtVU0VfUEFNXSwgWzFdLAor IAkJCQlbRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQQU0gc3VwcG9ydF0pCisgCitAQCAt MzY0OSw2ICszNjUwLDcgQEAgQUNfQVJHX1dJVEgoW3BhbV0sCisgCQkJCQk7OworIAkJCQkqKQor IAkJCQkJU1NIRExJQlM9IiRTU0hETElCUyAtbGRsIgorKwkJCQkJS0VZQ0FUTElCUz0iJEtFWUNB VExJQlMgLWxkbCIKKyAJCQkJCTs7CisgCQkJCWVzYWMKKyAJCQlmaQorQEAgLTQ4OTIsNiArNDg5 NCw3IEBAIEFDX0FSR19XSVRIKFtzZWxpbnV4XSwKKyAJZmkgXQorICkKKyBBQ19TVUJTVChbU1NI RExJQlNdKQorK0FDX1NVQlNUKFtLRVlDQVRMSUJTXSkKKyAKKyAjIENoZWNrIHdoZXRoZXIgdXNl ciB3YW50cyBLZXJiZXJvcyA1IHN1cHBvcnQKKyBLUkI1X01TRz0ibm8iCitAQCAtNTkwNSw2ICs1 OTA4LDkgQEAgZmkKKyBpZiB0ZXN0ICEgLXogIiR7U1NIRExJQlN9IjsgdGhlbgorIGVjaG8gIiAg ICAgICAgICtmb3Igc3NoZDogJHtTU0hETElCU30iCisgZmkKKytpZiB0ZXN0ICEgLXogIiR7S0VZ Q0FUTElCU30iOyB0aGVuCisrZWNobyAiICAgK2ZvciBzc2gta2V5Y2F0OiAke0tFWUNBVExJQlN9 IgorK2ZpCisgCisgZWNobyAiIgorIAorZGlmZiAtLWdpdCBhL3NzaC1rZXljYXQuYyBiL3NzaC1r ZXljYXQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uOGJiMTdjNzNl CistLS0gL2Rldi9udWxsCisrKysgYi9zc2gta2V5Y2F0LmMKK0BAIC0wLDAgKzEsMjQxIEBACisr LyoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBp dHMgZW50aXJldHksCisrICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRp ZXMuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KKysgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRv cnNlIG9yIHByb21vdGUKKysgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisrICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorKyAq CisrICogQUxURVJOQVRJVkVMWSwgdGhpcyBwcm9kdWN0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRl ciB0aGUgdGVybXMgb2YKKysgKiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBpbiB3aGljaCBjYXNl IHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCisrICogcmVxdWlyZWQgSU5TVEVBRCBPRiB0 aGUgYWJvdmUgcmVzdHJpY3Rpb25zLiAgKFRoaXMgY2xhdXNlIGlzCisrICogbmVjZXNzYXJ5IGR1 ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorKyAq IHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNvcHlyaWdodC4pCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF U1MgT1IgSU1QTElFRAorKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisrICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKysgKiBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisrICog SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTCisrICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisrICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqLworKworKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDExIFJlZCBIYXQsIElu Yy4KKysgKiBXcml0dGVuIGJ5IFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5jb20+CisrKi8KKysK KysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNpbmNsdWRl IDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRl IDxwd2QuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2lm ZGVmIEhBVkVfU1RESU5UX0gKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrCisrI2lu Y2x1ZGUgPHNlY3VyaXR5L3BhbV9hcHBsLmg+CisrCisrI2luY2x1ZGUgInVpZHN3YXAuaCIKKysj aW5jbHVkZSAibWlzYy5oIgorKworKyNkZWZpbmUgRVJSX1VTQUdFIDEKKysjZGVmaW5lIEVSUl9Q QU1fU1RBUlQgMgorKyNkZWZpbmUgRVJSX09QRU5fU0VTU0lPTiAzCisrI2RlZmluZSBFUlJfQ0xP U0VfU0VTU0lPTiA0CisrI2RlZmluZSBFUlJfUEFNX0VORCA1CisrI2RlZmluZSBFUlJfR0VUUFdO QU0gNgorKyNkZWZpbmUgRVJSX01FTU9SWSA3CisrI2RlZmluZSBFUlJfT1BFTiA4CisrI2RlZmlu ZSBFUlJfRklMRV9NT0RFIDkKKysjZGVmaW5lIEVSUl9GRE9QRU4gMTAKKysjZGVmaW5lIEVSUl9T VEFUIDExCisrI2RlZmluZSBFUlJfV1JJVEUgMTIKKysjZGVmaW5lIEVSUl9QQU1fUFVURU5WIDEz CisrI2RlZmluZSBCVUZMRU4gNDA5NgorKworKy8qIEp1c3QgaWdub3JlIHRoZSBtZXNzYWdlcyBp biB0aGUgY29udmVyc2F0aW9uIGZ1bmN0aW9uICovCisrc3RhdGljIGludAorK2R1bW15X2NvbnYo aW50IG51bV9tc2csIGNvbnN0IHN0cnVjdCBwYW1fbWVzc2FnZSAqKm1zZ20sCisrCSAgIHN0cnVj dCBwYW1fcmVzcG9uc2UgKipyZXNwb25zZSwgdm9pZCAqYXBwZGF0YV9wdHIpCisreworKwlzdHJ1 Y3QgcGFtX3Jlc3BvbnNlICpyc3A7CisrCisrCSh2b2lkKW1zZ207CisrCSh2b2lkKWFwcGRhdGFf cHRyOworKworKwlpZiAobnVtX21zZyA8PSAwKQorKwkJcmV0dXJuIFBBTV9DT05WX0VSUjsKKysK KysJLyogSnVzdCBhbGxvY2F0ZSB0aGUgYXJyYXkgYXMgZW1wdHkgcmVzcG9uc2VzICovCisrCXJz cCA9IGNhbGxvYyAobnVtX21zZywgc2l6ZW9mIChzdHJ1Y3QgcGFtX3Jlc3BvbnNlKSk7CisrCWlm IChyc3AgPT0gTlVMTCkKKysJCXJldHVybiBQQU1fQ09OVl9FUlI7CisrCisrCSpyZXNwb25zZSA9 IHJzcDsKKysJcmV0dXJuIFBBTV9TVUNDRVNTOworK30KKysKKytzdGF0aWMgc3RydWN0IHBhbV9j b252IGNvbnYgPSB7CisrCWR1bW15X2NvbnYsCisrCU5VTEwKKyt9OworKworK2NoYXIgKgorK21h a2VfYXV0aF9rZXlzX25hbWUoY29uc3Qgc3RydWN0IHBhc3N3ZCAqcHdkKQorK3sKKysJY2hhciAq Zm5hbWU7CisrCisrCWlmIChhc3ByaW50ZigmZm5hbWUsICIlcy8uc3NoL2F1dGhvcml6ZWRfa2V5 cyIsIHB3ZC0+cHdfZGlyKSA8IDApCisrCQlyZXR1cm4gTlVMTDsKKysKKysJcmV0dXJuIGZuYW1l OworK30KKysKKytpbnQKKytkdW1wX2tleXMoY29uc3QgY2hhciAqdXNlcikKKyt7CisrCXN0cnVj dCBwYXNzd2QgKnB3ZDsKKysJaW50IGZkID0gLTE7CisrCUZJTEUgKmYgPSBOVUxMOworKwljaGFy ICpmbmFtZSA9IE5VTEw7CisrCWludCBydiA9IDA7CisrCWNoYXIgYnVmW0JVRkxFTl07CisrCXNp emVfdCBsZW47CisrCXN0cnVjdCBzdGF0IHN0OworKworKwlpZiAoKHB3ZCA9IGdldHB3bmFtKHVz ZXIpKSA9PSBOVUxMKSB7CisrCQlyZXR1cm4gRVJSX0dFVFBXTkFNOworKwl9CisrCisrCWlmICgo Zm5hbWUgPSBtYWtlX2F1dGhfa2V5c19uYW1lKHB3ZCkpID09IE5VTEwpIHsKKysJCXJldHVybiBF UlJfTUVNT1JZOworKwl9CisrCisrCXRlbXBvcmFyaWx5X3VzZV91aWQocHdkKTsKKysKKysJaWYg KChmZCA9IG9wZW4oZm5hbWUsIE9fUkRPTkxZfE9fTk9OQkxPQ0t8T19OT0ZPTExPVywgMCkpIDwg MCkgeworKwkJcnYgPSBFUlJfT1BFTjsKKysJCWdvdG8gZmFpbDsKKysJfQorKworKwlpZiAoZnN0 YXQoZmQsICZzdCkgPCAwKSB7CisrCQlydiA9IEVSUl9TVEFUOworKwkJZ290byBmYWlsOworKwl9 CisrCisrCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSB8fAorKwkJKHN0LnN0X3VpZCAhPSBwd2Qt PnB3X3VpZCAmJiBzdC5zdF91aWQgIT0gMCkpIHsKKysJCXJ2ID0gRVJSX0ZJTEVfTU9ERTsKKysJ CWdvdG8gZmFpbDsKKysJfQorKworKwl1bnNldF9ub25ibG9jayhmZCk7CisrCisrCWlmICgoZiA9 IGZkb3BlbihmZCwgInIiKSkgPT0gTlVMTCkgeworKwkJcnYgPSBFUlJfRkRPUEVOOworKwkJZ290 byBmYWlsOworKwl9CisrCisrCWZkID0gLTE7CisrCisrCXdoaWxlICgobGVuID0gZnJlYWQoYnVm LCAxLCBzaXplb2YoYnVmKSwgZikpID4gMCkgeworKwkJcnYgPSBmd3JpdGUoYnVmLCAxLCBsZW4s IHN0ZG91dCkgIT0gbGVuID8gRVJSX1dSSVRFIDogMDsKKysJfQorKworK2ZhaWw6CisrCWlmIChm ZCAhPSAtMSkKKysJCWNsb3NlKGZkKTsKKysJaWYgKGYgIT0gTlVMTCkKKysJCWZjbG9zZShmKTsK KysJZnJlZShmbmFtZSk7CisrCXJlc3RvcmVfdWlkKCk7CisrCXJldHVybiBydjsKKyt9CisrCisr c3RhdGljIGNvbnN0IGNoYXIgKmVudl9uYW1lc1tdID0geyAiU0VMSU5VWF9ST0xFX1JFUVVFU1RF RCIsCisrCSJTRUxJTlVYX0xFVkVMX1JFUVVFU1RFRCIsCisrCSJTRUxJTlVYX1VTRV9DVVJSRU5U X1JBTkdFIgorK307CisrCisrZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworKworK2ludAorK3NldF9w YW1fZW52aXJvbm1lbnQocGFtX2hhbmRsZV90ICpwYW1oKQorK3sKKysJaW50IGk7CisrCXNpemVf dCBqOworKworKwlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKGVudl9uYW1lcykvc2l6ZW9mKGVudl9u YW1lc1swXSk7ICsraikgeworKwkJaW50IGxlbiA9IHN0cmxlbihlbnZfbmFtZXNbal0pOworKwor KwkJZm9yIChpID0gMDsgZW52aXJvbltpXSAhPSBOVUxMOyArK2kpIHsKKysJCQlpZiAoc3RybmNt cChlbnZfbmFtZXNbal0sIGVudmlyb25baV0sIGxlbikgPT0gMCAmJgorKwkJCSAgICBlbnZpcm9u W2ldW2xlbl0gPT0gJz0nKSB7CisrCQkJCWlmIChwYW1fcHV0ZW52KHBhbWgsIGVudmlyb25baV0p ICE9IFBBTV9TVUNDRVNTKQorKwkJCQkJcmV0dXJuIEVSUl9QQU1fUFVURU5WOworKwkJCX0KKysJ CX0KKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisraW50CisrbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysJcGFtX2hhbmRsZV90ICpwYW1oID0gTlVMTDsKKysJaW50IHJldHZh bDsKKysJaW50IGV2ID0gMDsKKysKKysJaWYgKGFyZ2MgIT0gMikgeworKwkJZnByaW50ZihzdGRl cnIsICJVc2FnZTogJXMgPHVzZXItbmFtZT5cbiIsIGFyZ3ZbMF0pOworKwkJcmV0dXJuIEVSUl9V U0FHRTsKKysJfQorKworKwlyZXR2YWwgPSBwYW1fc3RhcnQoInNzaC1rZXljYXQiLCBhcmd2WzFd LCAmY29udiwgJnBhbWgpOworKwlpZiAocmV0dmFsICE9IFBBTV9TVUNDRVNTKSB7CisrCQlyZXR1 cm4gRVJSX1BBTV9TVEFSVDsKKysJfQorKworKwlldiA9IHNldF9wYW1fZW52aXJvbm1lbnQocGFt aCk7CisrCWlmIChldiAhPSAwKQorKwkJZ290byBmaW5pc2g7CisrCisrCXJldHZhbCA9IHBhbV9v cGVuX3Nlc3Npb24ocGFtaCwgUEFNX1NJTEVOVCk7CisrCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NF U1MpIHsKKysJCWV2ID0gRVJSX09QRU5fU0VTU0lPTjsKKysJCWdvdG8gZmluaXNoOworKwl9Cisr CisrCWV2ID0gZHVtcF9rZXlzKGFyZ3ZbMV0pOworKworKwlyZXR2YWwgPSBwYW1fY2xvc2Vfc2Vz c2lvbihwYW1oLCBQQU1fU0lMRU5UKTsKKysJaWYgKHJldHZhbCAhPSBQQU1fU1VDQ0VTUykgewor KwkJZXYgPSBFUlJfQ0xPU0VfU0VTU0lPTjsKKysJfQorKworK2ZpbmlzaDoKKysJcmV0dmFsID0g cGFtX2VuZCAocGFtaCxyZXR2YWwpOworKwlpZiAocmV0dmFsICE9IFBBTV9TVUNDRVNTKSB7Cisr CQlldiA9IEVSUl9QQU1fRU5EOworKwl9CisrCXJldHVybiBldjsKKyt9CistLSAKKzIuNTUuMAor CgpkaWZmIC0tZ2l0IGEvMDAwNi1vcGVuc3NoLTUuOXAxLWlwdjZtYW4ucGF0Y2ggYi8wMDA2LW9w ZW5zc2gtNS45cDEtaXB2Nm1hbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MmJiN2FlOC4uMDAwMDAwMAotLS0gYS8wMDA2LW9wZW5zc2gtNS45cDEtaXB2Nm1hbi5wYXRjaAor KysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLUZyb20gYmEyMGMyMzgwYjMxMDhiMWY4ZTJj MDA2ODlhOGVmYzY2MjNjZDQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRy eSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUg MTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAwNi81NF0gb3BlbnNzaC01LjlwMS1pcHY2 bWFuCi0KLSMoZHJvcD8pIGh0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dp P2lkPTE5MjUKLS0tLQotIHNzaC4xICB8IDIgKysKLSBzc2hkLjggfCAyICsrCi0gMiBmaWxlcyBj aGFuZ2VkLCA0IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL3NzaC4xIGIvc3NoLjEKLWlu ZGV4IDgyYWU1NDgwYy4uYzJjOGY1MGYxIDEwMDY0NAotLS0tIGEvc3NoLjEKLSsrKyBiL3NzaC4x Ci1AQCAtMTY2OSw2ICsxNjY5LDggQEAgbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24u Ci0gLk5tCi0gZXhpdHMgd2l0aCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHJlbW90ZSBjb21tYW5k IG9yIHdpdGggMjU1Ci0gaWYgYW4gZXJyb3Igb2NjdXJyZWQuCi0rLlNoIElQVjYKLStJUHY2IGFk ZHJlc3MgY2FuIGJlIHVzZWQgZXZlcnl3aGVyZSB3aGVyZSBJUHY0IGFkZHJlc3MuIEluIGFsbCBl bnRyaWVzIG11c3QgYmUgdGhlIElQdjYgYWRkcmVzcyBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tl dHMuIE5vdGU6IFRoZSBzcXVhcmUgYnJhY2tldHMgYXJlIG1ldGFjaGFyYWN0ZXJzIGZvciB0aGUg c2hlbGwgYW5kIG11c3QgYmUgZXNjYXBlZCBpbiBzaGVsbC4KLSAuU2ggU0VFIEFMU08KLSAuWHIg c2NwIDEgLAotIC5YciBzZnRwIDEgLAotZGlmZiAtLWdpdCBhL3NzaGQuOCBiL3NzaGQuOAotaW5k ZXggN2ZiY2E3NzZhLi4wMjI2YTgzMDMgMTAwNjQ0Ci0tLS0gYS9zc2hkLjgKLSsrKyBiL3NzaGQu OAotQEAgLTEwMTgsNiArMTAxOCw4IEBAIGNvbmN1cnJlbnRseSBmb3IgZGlmZmVyZW50IHBvcnRz LCB0aGlzIGNvbnRhaW5zIHRoZSBwcm9jZXNzIElEIG9mIHRoZSBvbmUKLSBzdGFydGVkIGxhc3Qp LgotIFRoZSBjb250ZW50IG9mIHRoaXMgZmlsZSBpcyBub3Qgc2Vuc2l0aXZlOyBpdCBjYW4gYmUg d29ybGQtcmVhZGFibGUuCi0gLkVsCi0rLlNoIElQVjYKLStJUHY2IGFkZHJlc3MgY2FuIGJlIHVz ZWQgZXZlcnl3aGVyZSB3aGVyZSBJUHY0IGFkZHJlc3MuIEluIGFsbCBlbnRyaWVzIG11c3QgYmUg dGhlIElQdjYgYWRkcmVzcyBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMuIE5vdGU6IFRoZSBz cXVhcmUgYnJhY2tldHMgYXJlIG1ldGFjaGFyYWN0ZXJzIGZvciB0aGUgc2hlbGwgYW5kIG11c3Qg YmUgZXNjYXBlZCBpbiBzaGVsbC4KLSAuU2ggU0VFIEFMU08KLSAuWHIgc2NwIDEgLAotIC5YciBz ZnRwIDEgLAotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAwMDYtb3BlbnNzaC02LjZwMS1h bGxvdy1pcC1vcHRzLnBhdGNoIGIvMDAwNi1vcGVuc3NoLTYuNnAxLWFsbG93LWlwLW9wdHMucGF0 Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkMzkwZQotLS0gL2Rldi9u dWxsCisrKyBiLzAwMDYtb3BlbnNzaC02LjZwMS1hbGxvdy1pcC1vcHRzLnBhdGNoCkBAIC0wLDAg KzEsNTYgQEAKK0Zyb20gYjdiMjg3Mzk2ZjA3OTIyODdlZTRiZTA4NzAyZmY3MDg3NmNkNDAxZCBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0 QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1Ympl Y3Q6IFtQQVRDSCAwNi81M10gb3BlbnNzaC02LjZwMS1hbGxvdy1pcC1vcHRzCisKKyNodHRwczov L2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0CistLS0KKyBzc2hkLXNl c3Npb24uYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNo YW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9z c2hkLXNlc3Npb24uYyBiL3NzaGQtc2Vzc2lvbi5jCitpbmRleCAxYTQwYTQzZjEuLjBmNDE3NTZm ZiAxMDA2NDQKKy0tLSBhL3NzaGQtc2Vzc2lvbi5jCisrKysgYi9zc2hkLXNlc3Npb24uYworQEAg LTcyNywxMiArNzI3LDMyIEBAIGNoZWNrX2lwX29wdGlvbnMoc3RydWN0IHNzaCAqc3NoKQorIAor IAlpZiAoZ2V0c29ja29wdChzb2NrX2luLCBJUFBST1RPX0lQLCBJUF9PUFRJT05TLCBvcHRzLAor IAkgICAgJm9wdGlvbl9zaXplKSA+PSAwICYmIG9wdGlvbl9zaXplICE9IDApIHsKKy0JCXRleHRb MF0gPSAnXDAnOworLQkJZm9yIChpID0gMDsgaSA8IG9wdGlvbl9zaXplOyBpKyspCistCQkJc25w cmludGYodGV4dCArIGkqMywgc2l6ZW9mKHRleHQpIC0gaSozLAorLQkJCSAgICAiICUyLjJ4Iiwg b3B0c1tpXSk7CistCQlmYXRhbCgiQ29ubmVjdGlvbiBmcm9tICUuMTAwcyBwb3J0ICVkIHdpdGgg SVAgb3B0czogJS44MDBzIiwKKy0JCSAgICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVt b3RlX3BvcnQoc3NoKSwgdGV4dCk7CisrCQlpID0gMDsKKysJCWRvIHsKKysJCQlzd2l0Y2ggKG9w dHNbaV0pIHsKKysJCQkJY2FzZSAwOgorKwkJCQljYXNlIDE6CisrCQkJCQkrK2k7CisrCQkJCQli cmVhazsKKysJCQkJY2FzZSAxMzA6CisrCQkJCWNhc2UgMTMzOgorKwkJCQljYXNlIDEzNDoKKysJ CQkJCWlmIChpICsgMSA8IG9wdGlvbl9zaXplICYmIG9wdHNbaSArIDFdID49IDIpIHsKKysJCQkJ CQlpICs9IG9wdHNbaSArIDFdOworKwkJCQkJCWJyZWFrOworKwkJCQkJfQorKwkJCQkJLyogRkFM TFRIUk9VR0ggKi8KKysJCQkJZGVmYXVsdDoKKysJCQkJLyogRmFpbCwgZmF0YWxseSwgaWYgd2Ug ZGV0ZWN0IGVpdGhlciBsb29zZSBvciBzdHJpY3QKKysJCQkgCSAqIG9yIGluY29ycmVjdCBzb3Vy Y2Ugcm91dGluZyBvcHRpb25zLiAqLworKwkJCQkJdGV4dFswXSA9ICdcMCc7CisrCQkJCQlmb3Ig KGkgPSAwOyBpIDwgb3B0aW9uX3NpemU7IGkrKykKKysJCQkJCQlzbnByaW50Zih0ZXh0ICsgaSoz LCBzaXplb2YodGV4dCkgLSBpKjMsCisrCQkJCQkJCSIgJTIuMngiLCBvcHRzW2ldKTsKKysJCQkJ CWZhdGFsKCJDb25uZWN0aW9uIGZyb20gJS4xMDBzIHBvcnQgJWQgd2l0aCBJUCBvcHRpb25zOiUu ODAwcyIsCisrCQkJCQkJc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNz aCksIHRleHQpOworKwkJCX0KKysJCX0gd2hpbGUgKGkgPCBvcHRpb25fc2l6ZSk7CisgCX0KKyAj ZW5kaWYgLyogSVBfT1BUSU9OUyAqLworIH0KKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQgYS8w MDA3LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaCBiLzAwMDctb3BlbnNzaC01LjhwMi1zaWdw aXBlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGIyZDg2Li4wMDAwMDAw Ci0tLSBhLzAwMDctb3BlbnNzaC01LjhwMi1zaWdwaXBlLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsMjYgKzAsMCBAQAotRnJvbSBlMTVjYzczYzFhMjZkY2ZhYjNmZDAwNzdlZTA1NjE3MjRhZDRm OGI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJl bGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAot U3ViamVjdDogW1BBVENIIDA3LzU0XSBvcGVuc3NoLTUuOHAyLXNpZ3BpcGUKLQotLS0tCi0gc3No LWtleXNjYW4uYyB8IDMgKysrCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1k aWZmIC0tZ2l0IGEvc3NoLWtleXNjYW4uYyBiL3NzaC1rZXlzY2FuLmMKLWluZGV4IDliZDNlNzhl Yi4uYmIzZWU0NjJkIDEwMDY0NAotLS0tIGEvc3NoLWtleXNjYW4uYwotKysrIGIvc3NoLWtleXNj YW4uYwotQEAgLTc3Nyw2ICs3NzcsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJ aWYgKG1heGZkID4gZmRsaW1fZ2V0KDApKQotIAkJZmRsaW1fc2V0KG1heGZkKTsKLSAJZmRjb24g PSB4Y2FsbG9jKG1heGZkLCBzaXplb2YoY29uKSk7Ci0rIAotKwlzaWduYWwoU0lHUElQRSwgU0lH X0lHTik7Ci0rCi0gCXJlYWRfd2FpdCA9IHhjYWxsb2MobWF4ZmQsIHNpemVvZihzdHJ1Y3QgcG9s bGZkKSk7Ci0gCWZvciAoaiA9IDA7IGogPCBtYXhmZDsgaisrKQotIAkJcmVhZF93YWl0W2pdLmZk ID0gLTE7Ci0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvMDAwNy1vcGVuc3NoLTUuOXAxLWlw djZtYW4ucGF0Y2ggYi8wMDA3LW9wZW5zc2gtNS45cDEtaXB2Nm1hbi5wYXRjaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Y3N2M1Ci0tLSAvZGV2L251bGwKKysrIGIvMDAw Ny1vcGVuc3NoLTUuOXAxLWlwdjZtYW4ucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBiZjRl NjViNzMzNWU1MTZiYWU3OGEwYmQwYzA4NWFiNTVmMzc3OTczIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTog VGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDA3LzUzXSBv cGVuc3NoLTUuOXAxLWlwdjZtYW4KKworIyhkcm9wPykgaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90 Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNQorLS0tCisgc3NoLjEgIHwgMiArKworIHNzaGQuOCB8 IDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEv c3NoLjEgYi9zc2guMQoraW5kZXggNjBlZTNhYjM0Li4wODliZDM0OGEgMTAwNjQ0CistLS0gYS9z c2guMQorKysrIGIvc3NoLjEKK0BAIC0xNTc5LDYgKzE1NzksOCBAQCBtYW51YWwgcGFnZSBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4KKyAuTm0KKyBleGl0cyB3aXRoIHRoZSBleGl0IHN0YXR1cyBvZiB0 aGUgcmVtb3RlIGNvbW1hbmQgb3Igd2l0aCAyNTUKKyBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKysu U2ggSVBWNgorK0lQdjYgYWRkcmVzcyBjYW4gYmUgdXNlZCBldmVyeXdoZXJlIHdoZXJlIElQdjQg YWRkcmVzcy4gSW4gYWxsIGVudHJpZXMgbXVzdCBiZSB0aGUgSVB2NiBhZGRyZXNzIGVuY2xvc2Vk IGluIHNxdWFyZSBicmFja2V0cy4gTm90ZTogVGhlIHNxdWFyZSBicmFja2V0cyBhcmUgbWV0YWNo YXJhY3RlcnMgZm9yIHRoZSBzaGVsbCBhbmQgbXVzdCBiZSBlc2NhcGVkIGluIHNoZWxsLgorIC5T aCBTRUUgQUxTTworIC5YciBzY3AgMSAsCisgLlhyIHNmdHAgMSAsCitkaWZmIC0tZ2l0IGEvc3No ZC44IGIvc3NoZC44CitpbmRleCBhNjVhYWU3NWQuLjI0ZTU2MzlhMyAxMDA2NDQKKy0tLSBhL3Nz aGQuOAorKysrIGIvc3NoZC44CitAQCAtMTAyNCw2ICsxMDI0LDggQEAgY29uY3VycmVudGx5IGZv ciBkaWZmZXJlbnQgcG9ydHMsIHRoaXMgY29udGFpbnMgdGhlIHByb2Nlc3MgSUQgb2YgdGhlIG9u ZQorIHN0YXJ0ZWQgbGFzdCkuCisgVGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGlzIG5vdCBzZW5z aXRpdmU7IGl0IGNhbiBiZSB3b3JsZC1yZWFkYWJsZS4KKyAuRWwKKysuU2ggSVBWNgorK0lQdjYg YWRkcmVzcyBjYW4gYmUgdXNlZCBldmVyeXdoZXJlIHdoZXJlIElQdjQgYWRkcmVzcy4gSW4gYWxs IGVudHJpZXMgbXVzdCBiZSB0aGUgSVB2NiBhZGRyZXNzIGVuY2xvc2VkIGluIHNxdWFyZSBicmFj a2V0cy4gTm90ZTogVGhlIHNxdWFyZSBicmFja2V0cyBhcmUgbWV0YWNoYXJhY3RlcnMgZm9yIHRo ZSBzaGVsbCBhbmQgbXVzdCBiZSBlc2NhcGVkIGluIHNoZWxsLgorIC5TaCBTRUUgQUxTTworIC5Y ciBzY3AgMSAsCisgLlhyIHNmdHAgMSAsCistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMDAw OC1vcGVuc3NoLTUuOHAyLXNpZ3BpcGUucGF0Y2ggYi8wMDA4LW9wZW5zc2gtNS44cDItc2lncGlw ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJkYTY3Ci0tLSAv ZGV2L251bGwKKysrIGIvMDAwOC1vcGVuc3NoLTUuOHAyLXNpZ3BpcGUucGF0Y2gKQEAgLTAsMCAr MSwyNiBAQAorRnJvbSBkY2NkMmE5YWJhNWZhNzU4Y2ZkMjdjNmRlODZmYTczODMwYWE3ZjZmIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVj dDogW1BBVENIIDA4LzUzXSBvcGVuc3NoLTUuOHAyLXNpZ3BpcGUKKworLS0tCisgc3NoLWtleXNj YW4uYyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0t Z2l0IGEvc3NoLWtleXNjYW4uYyBiL3NzaC1rZXlzY2FuLmMKK2luZGV4IGYwOTNiMDEwOC4uNzdi NDM0MWM5IDEwMDY0NAorLS0tIGEvc3NoLWtleXNjYW4uYworKysrIGIvc3NoLWtleXNjYW4uYwor QEAgLTc5Nyw2ICs3OTcsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJaWYgKG1h eGZkID4gZmRsaW1fZ2V0KDApKQorIAkJZmRsaW1fc2V0KG1heGZkKTsKKyAJZmRjb24gPSB4Y2Fs bG9jKG1heGZkLCBzaXplb2YoY29uKSk7CisrIAorKwlzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7 CisrCisgCXJlYWRfd2FpdCA9IHhjYWxsb2MobWF4ZmQsIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSk7 CisgCWZvciAoaiA9IDA7IGogPCBtYXhmZDsgaisrKQorIAkJcmVhZF93YWl0W2pdLmZkID0gLTE7 CistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMDAwOS1vcGVuc3NoLTUuMXAxLWFza3Bhc3Mt cHJvZ3Jlc3MucGF0Y2ggYi8wMDA5LW9wZW5zc2gtNS4xcDEtYXNrcGFzcy1wcm9ncmVzcy5wYXRj aAppbmRleCA3YjM2NzRiLi45YzE0MzMyIDEwMDY0NAotLS0gYS8wMDA5LW9wZW5zc2gtNS4xcDEt YXNrcGFzcy1wcm9ncmVzcy5wYXRjaAorKysgYi8wMDA5LW9wZW5zc2gtNS4xcDEtYXNrcGFzcy1w cm9ncmVzcy5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNDMxNGQyODhkYjJhODE0YWQ1OGU5 MWRhMjFkMmE2OWU0OTgzZDNjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gOTkzNzY3 ZDZjOWMyYjJlOWNmYTZmZjJjZDNkN2JjOGM0ODY5YzJmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRo dSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAwOS81NF0gb3Bl bnNzaC01LjFwMS1hc2twYXNzLXByb2dyZXNzCitTdWJqZWN0OiBbUEFUQ0ggMDkvNTNdIG9wZW5z c2gtNS4xcDEtYXNrcGFzcy1wcm9ncmVzcwogCiAtLS0KICBjb250cmliL2dub21lLXNzaC1hc2tw YXNzMi5jIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCkBAIC05Miw1 ICs5Miw1IEBAIGluZGV4IGE2MmY5ODE1Mi4uY2I3MTUyZGM4IDEwMDY0NAogIAogIAkvKiBHcmFi IGZvY3VzICovCiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDEwLW9wZW5z c2gtNC4zcDItYXNrcGFzcy1ncmFiLWluZm8ucGF0Y2ggYi8wMDEwLW9wZW5zc2gtNC4zcDItYXNr cGFzcy1ncmFiLWluZm8ucGF0Y2gKaW5kZXggNjEyMjNhZS4uYWY0ZDA1NyAxMDA2NDQKLS0tIGEv MDAxMC1vcGVuc3NoLTQuM3AyLWFza3Bhc3MtZ3JhYi1pbmZvLnBhdGNoCisrKyBiLzAwMTAtb3Bl bnNzaC00LjNwMi1hc2twYXNzLWdyYWItaW5mby5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20g ZGI0Y2EzMzZlNGJkZGZjNGM1Y2U2NTFmYmRmMWY0MDM0OGQ5M2I4ZiBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKK0Zyb20gNjg2MDllYjg0NTUxNTMzM2ZlODY3NTZkZDBkMGYxZmU4NjY5NDNlZiBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0 QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1Ympl Y3Q6IFtQQVRDSCAxMC81NF0gb3BlbnNzaC00LjNwMi1hc2twYXNzLWdyYWItaW5mbworU3ViamVj dDogW1BBVENIIDEwLzUzXSBvcGVuc3NoLTQuM3AyLWFza3Bhc3MtZ3JhYi1pbmZvCiAKICNodHRw czovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTE5ODMzMgogLS0tCkBAIC0y OCw1ICsyOCw1IEBAIGluZGV4IGNiNzE1MmRjOC4uYmJlOTNkODM4IDEwMDY0NAogIAogIAlndGtf ZGlhbG9nX3J1bihHVEtfRElBTE9HKGVycikpOwogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZm IC0tZ2l0IGEvMDAxMS1vcGVuc3NoLTguN3AxLXJlZGhhdC5wYXRjaCBiLzAwMTEtb3BlbnNzaC04 LjdwMS1yZWRoYXQucGF0Y2gKaW5kZXggNWFiMjQ4NS4uMjNjMDcxZCAxMDA2NDQKLS0tIGEvMDAx MS1vcGVuc3NoLTguN3AxLXJlZGhhdC5wYXRjaAorKysgYi8wMDExLW9wZW5zc2gtOC43cDEtcmVk aGF0LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSBlYzYzODU2ZjJjNDI3NmRhM2FhMjJjNzhm ZWFjZmViZmJmYjU5NGRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAzMTMzMzNmNDI5 YWVkZDVmMjU1NjQzNDAwNjY5MjA0YTMyZTYxMDIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQog RnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAx NSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDExLzU0XSBvcGVuc3No LTguN3AxLXJlZGhhdAorU3ViamVjdDogW1BBVENIIDExLzUzXSBvcGVuc3NoLTguN3AxLXJlZGhh dAogCiAjaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNSAo V09OVEZJWCkKIC0tLQpAQCAtNTcsNyArNTcsNyBAQCBpbmRleCAwMDAwMDAwMDAuLjhiMWI1OTAy MQogKyMgVW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIC5sb2NhbCBkb21haW4KICsj IEhvc3QgKi5sb2NhbAogZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnIGIvc3NoZF9jb25maWcKLWlu ZGV4IDBmNGEzYTcyNC4uNjA4MjAzZTRiIDEwMDY0NAoraW5kZXggNTdlY2FiYjg2Li5mNDNhYTgw OTMgMTAwNjQ0CiAtLS0gYS9zc2hkX2NvbmZpZwogKysrIGIvc3NoZF9jb25maWcKIEBAIC0xMCw2 ICsxMCwxNCBAQApAQCAtNzYsMTAgKzc2LDEwIEBAIGluZGV4IDBmNGEzYTcyNC4uNjA4MjAzZTRi IDEwMDY0NAogICNBZGRyZXNzRmFtaWx5IGFueQogICNMaXN0ZW5BZGRyZXNzIDAuMC4wLjAKIGRp ZmYgLS1naXQgYS9zc2hkX2NvbmZpZy4wIGIvc3NoZF9jb25maWcuMAotaW5kZXggNzcwZWM3NDJl Li4xZjcxYzM3YzMgMTAwNjQ0CitpbmRleCAyMjQ4MDA2ZWEuLjkxZWRhNzdmNCAxMDA2NDQKIC0t LSBhL3NzaGRfY29uZmlnLjAKICsrKyBiL3NzaGRfY29uZmlnLjAKLUBAIC0xMjQ3LDkgKzEyNDcs OSBAQCBERVNDUklQVElPTgorQEAgLTEyNjUsOSArMTI2NSw5IEBAIERFU0NSSVBUSU9OCiAgCiAg ICAgICBTeXNsb2dGYWNpbGl0eQogICAgICAgICAgICAgICBHaXZlcyB0aGUgZmFjaWxpdHkgY29k ZSB0aGF0IGlzIHVzZWQgd2hlbiBsb2dnaW5nIG1lc3NhZ2VzIGZyb20KQEAgLTkzLDEwICs5Mywx MCBAQCBpbmRleCA3NzBlYzc0MmUuLjFmNzFjMzdjMyAxMDA2NDQKICAgICAgIFRDUEtlZXBBbGl2 ZQogICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0aGUgc3lzdGVtIHNob3VsZCBzZW5k IFRDUCBrZWVwYWxpdmUgbWVzc2FnZXMKIGRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3No ZF9jb25maWcuNQotaW5kZXggM2Y1ZTI5ODEyLi5jYTQyNWE4ZGEgMTAwNjQ0CitpbmRleCBhN2Qz MDAxMzkuLmU4NWNjYTZlYiAxMDA2NDQKIC0tLSBhL3NzaGRfY29uZmlnLjUKICsrKyBiL3NzaGRf Y29uZmlnLjUKLUBAIC0xOTcxLDcgKzE5NzEsNyBAQCBCeSBkZWZhdWx0IG5vIHN1YnN5c3RlbXMg YXJlIGRlZmluZWQuCitAQCAtMTk4OSw3ICsxOTg5LDcgQEAgQnkgZGVmYXVsdCBubyBzdWJzeXN0 ZW1zIGFyZSBkZWZpbmVkLgogIC5JdCBDbSBTeXNsb2dGYWNpbGl0eQogIEdpdmVzIHRoZSBmYWNp bGl0eSBjb2RlIHRoYXQgaXMgdXNlZCB3aGVuIGxvZ2dpbmcgbWVzc2FnZXMgZnJvbQogIC5YciBz c2hkIDggLgpAQCAtMTQzLDUgKzE0Myw1IEBAIGluZGV4IDAwMDAwMDAwMC4uMWQ1OTJkMTNmCiAr SW5jbHVkZSAvZXRjL2NyeXB0by1wb2xpY2llcy9iYWNrLWVuZHMvb3BlbnNzaHNlcnZlci5jb25m aWcKICsKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMTItb3BlbnNzaC03 LjhwMS1Vc2VQQU0td2FybmluZy5wYXRjaCBiLzAwMTItb3BlbnNzaC03LjhwMS1Vc2VQQU0td2Fy bmluZy5wYXRjaAppbmRleCA4MzE1MzVhLi4wZDAwMWJkIDEwMDY0NAotLS0gYS8wMDEyLW9wZW5z c2gtNy44cDEtVXNlUEFNLXdhcm5pbmcucGF0Y2gKKysrIGIvMDAxMi1vcGVuc3NoLTcuOHAxLVVz ZVBBTS13YXJuaW5nLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA5ODA5MmMxZmE1YzU0YjMy ZWRjYjdjZWYxOGE0ZmFiNjA3OGVmYmMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAx MGZlZWU0MzU0MGNiZWJhZDcwZjk5MDNhNmNiZDU5NDA5ZjlmMGM0IE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0 ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDEyLzU0 XSBvcGVuc3NoLTcuOHAxLVVzZVBBTS13YXJuaW5nCitTdWJqZWN0OiBbUEFUQ0ggMTIvNTNdIG9w ZW5zc2gtNy44cDEtVXNlUEFNLXdhcm5pbmcKIAogIyB3YXJuIHVzZXJzIGZvciB1bnN1cHBvcnRl ZCBVc2VQQU09bm8gKCM3NTc1NDUpCiAtLS0KQEAgLTEwLDEwICsxMCwxMCBAQCBTdWJqZWN0OiBb UEFUQ0ggMTIvNTRdIG9wZW5zc2gtNy44cDEtVXNlUEFNLXdhcm5pbmcKICAyIGZpbGVzIGNoYW5n ZWQsIDYgaW5zZXJ0aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hk LXNlc3Npb24uYwotaW5kZXggMDBkMDBlMjkzLi42OTc2ZDY4NzIgMTAwNjQ0CitpbmRleCAwZjQx NzU2ZmYuLjZlOWIyOGRlYyAxMDA2NDQKIC0tLSBhL3NzaGQtc2Vzc2lvbi5jCiArKysgYi9zc2hk LXNlc3Npb24uYwotQEAgLTEwNzUsNiArMTA3NSwxMCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2 KQorQEAgLTEwNzYsNiArMTA3NiwxMCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQogIAkJCSAg ICAiZW5hYmxlZCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIik7CiAgCX0KICAKQEAgLTI1LDEwICsy NSwxMCBAQCBpbmRleCAwMGQwMGUyOTMuLjY5NzZkNjg3MiAxMDA2NDQKICAJaWYgKG9wdGlvbnMu bW9kdWxpX2ZpbGUgIT0gTlVMTCkKICAJCWRoX3NldF9tb2R1bGlfZmlsZShvcHRpb25zLm1vZHVs aV9maWxlKTsKIGRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZyBiL3NzaGRfY29uZmlnCi1pbmRleCA2 MDgyMDNlNGIuLjQ4YWY2MzIxYiAxMDA2NDQKK2luZGV4IGY0M2FhODA5My4uZjYyNmQ1ODAxIDEw MDY0NAogLS0tIGEvc3NoZF9jb25maWcKICsrKyBiL3NzaGRfY29uZmlnCi1AQCAtODksNiArODks OCBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRob3JpemVkX2tleXMKK0BAIC05MCw2ICs5 MCw4IEBAIEF1dGhvcml6ZWRLZXlzRmlsZQkuc3NoL2F1dGhvcml6ZWRfa2V5cwogICMgSWYgeW91 IGp1c3Qgd2FudCB0aGUgUEFNIGFjY291bnQgYW5kIHNlc3Npb24gY2hlY2tzIHRvIHJ1biB3aXRo b3V0CiAgIyBQQU0gYXV0aGVudGljYXRpb24sIHRoZW4gZW5hYmxlIHRoaXMgYnV0IHNldCBQYXNz d29yZEF1dGhlbnRpY2F0aW9uCiAgIyBhbmQgS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiB0 byAnbm8nLgpAQCAtMzgsNSArMzgsNSBAQCBpbmRleCA2MDgyMDNlNGIuLjQ4YWY2MzIxYiAxMDA2 NDQKICAKICAjQWxsb3dBZ2VudEZvcndhcmRpbmcgeWVzCiAtLSAKLTIuNTMuMAorMi41NS4wCiAK CmRpZmYgLS1naXQgYS8wMDEzLW9wZW5zc2gtOS42cDEtZ3NzYXBpLWtleWV4LnBhdGNoIGIvMDAx My1vcGVuc3NoLTkuNnAxLWdzc2FwaS1rZXlleC5wYXRjaAppbmRleCBmMjEwNmE0Li5kZTJjYWJm IDEwMDY0NAotLS0gYS8wMDEzLW9wZW5zc2gtOS42cDEtZ3NzYXBpLWtleWV4LnBhdGNoCisrKyBi LzAwMTMtb3BlbnNzaC05LjZwMS1nc3NhcGkta2V5ZXgucGF0Y2gKQEAgLTEsOSArMSwxMCBAQAot RnJvbSAyMDgwODBlYzJjZWRkYjllNGM5MTdkNGU1N2I5YmM0NDUyZGIzMDQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQorRnJvbSA5ODhiNTQzZTVhOTIxMDlmMDhhNmVmMjEzYzgzNGViODI5MjQx NzhlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJl bGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAot U3ViamVjdDogW1BBVENIIDEzLzU0XSBvcGVuc3NoLTkuNnAxLWdzc2FwaS1rZXlleAorU3ViamVj dDogW1BBVENIIDEzLzUzXSBvcGVuc3NoLTkuNnAxLWdzc2FwaS1rZXlleAogCiAtLS0KKyAuZGVw ZW5kICAgICAgICAgfCAgIDIgKwogIE1ha2VmaWxlLmluICAgICB8ICAgNyArLQogIGF1dGguYyAg ICAgICAgICB8ICAgMyArLQogIGF1dGgyLWdzcy5jICAgICB8ICA1MiArKystCkBAIC0xMyw1NSAr MTQsNjggQEAgU3ViamVjdDogW1BBVENIIDEzLzU0XSBvcGVuc3NoLTkuNnAxLWdzc2FwaS1rZXll eAogIGNhbm9ob3N0LmggICAgICB8ICAgMyArCiAgY2xpZW50bG9vcC5jICAgIHwgIDEyICsKICBj b25maWd1cmUuYWMgICAgfCAgMjQgKysKLSBnc3MtZ2Vuci5jICAgICAgfCAzMTIgKysrKysrKysr KysrKysrKysrKystCisgZ3NzLWdlbnIuYyAgICAgIHwgMzEzICsrKysrKysrKysrKysrKysrKysr LQogIGdzcy1zZXJ2LWtyYjUuYyB8ICA5NyArKysrKystCiAgZ3NzLXNlcnYuYyAgICAgIHwgMjAw ICsrKysrKysrKysrKy0tCi0ga2V4LW5hbWVzLmMgICAgIHwgIDYxICsrKystCisga2V4LW5hbWVz LmMgICAgIHwgIDY3ICsrKystCiAga2V4LmMgICAgICAgICAgIHwgIDM1ICsrLQogIGtleC5oICAg ICAgICAgICB8ICAzNCArKysKICBrZXhkaC5jICAgICAgICAgfCAgMTAgKwogIGtleGdlbi5jICAg ICAgICB8ICAgMiArLQogIGtleGdzc2MuYyAgICAgICB8IDcwNiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKICBrZXhnc3NzLmMgICAgICAgfCA2MDMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBtb25pdG9yLmMgICAgICAg fCAxNDcgKysrKysrKysrLQorIG1vbml0b3IuYyAgICAgICB8IDE1MCArKysrKysrKystCiAgbW9u aXRvci5oICAgICAgIHwgICAyICsKICBtb25pdG9yX3dyYXAuYyAgfCAgNTcgKysrLQogIG1vbml0 b3Jfd3JhcC5oICB8ICAgNCArLQogIHJlYWRjb25mLmMgICAgICB8ICA3MCArKysrKwogIHJlYWRj b25mLmggICAgICB8ICAgNiArCi0gc2VydmNvbmYuYyAgICAgIHwgIDQ2ICsrKysKLSBzZXJ2Y29u Zi5oICAgICAgfCAgIDMgKworIHNlcnZjb25mLmMgICAgICB8ICAyOCArKworIHNlcnZjb25mLmgg ICAgICB8ICAxMSArLQogIHNlc3Npb24uYyAgICAgICB8ICAxMCArLQogIHNzaC1nc3MuaCAgICAg ICB8ICA2NCArKysrLQotIHNzaC4xICAgICAgICAgICB8ICAgOCArCi0gc3NoLmMgICAgICAgICAg IHwgICA2ICstCisgc3NoLjEgICAgICAgICAgIHwgICAyICsKKyBzc2guYyAgICAgICAgICAgfCAg IDcgKy0KICBzc2hfY29uZmlnICAgICAgfCAgIDIgKwotIHNzaF9jb25maWcuNSAgICB8ICA1OCAr KysrCisgc3NoX2NvbmZpZy41ICAgIHwgIDYxICsrKysrCiAgc3NoY29ubmVjdDIuYyAgIHwgMTU0 ICsrKysrKysrKystCi0gc3NoZC1hdXRoLmMgICAgIHwgIDU1ICsrKy0KKyBzc2hkLWF1dGguYyAg ICAgfCAgNTggKysrLQogIHNzaGQtc2Vzc2lvbi5jICB8ICAgOSArLQogIHNzaGQuYyAgICAgICAg ICB8ICAgMyArLQogIHNzaGRfY29uZmlnICAgICB8ICAgMiArCi0gc3NoZF9jb25maWcuNSAgIHwg IDQwICsrLQorIHNzaGRfY29uZmlnLjUgICB8ICA0MyArKy0KICBzc2hrZXkuYyAgICAgICAgfCAg NzIgKysrKy0KICBzc2hrZXkuaCAgICAgICAgfCAgIDEgKwotIDQxIGZpbGVzIGNoYW5nZWQsIDMw MDQgaW5zZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCisgNDIgZmlsZXMgY2hhbmdlZCwgMzAw NCBpbnNlcnRpb25zKCspLCA4NCBkZWxldGlvbnMoLSkKICBjcmVhdGUgbW9kZSAxMDA2NDQga2V4 Z3NzYy5jCiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGtleGdzc3MuYwogCitkaWZmIC0tZ2l0IGEvLmRl cGVuZCBiLy5kZXBlbmQKK2luZGV4IDdkMmQwMGJiZi4uNDVhZDJiZjRlIDEwMDY0NAorLS0tIGEv LmRlcGVuZAorKysrIGIvLmRlcGVuZAorQEAgLTY3LDYgKzY3LDggQEAga2V4YzI1NTE5Lm86IGlu Y2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3Bl bmJzZC1jb20KKyBrZXhkaC5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0Zm9y bS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvYmFzZTY0 Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2Uu aCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oIG9w ZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5ic2QtY29t cGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0Y2guaCBv cGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmggb3BlbmJz ZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmggb3BlbmJz ZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5oIG9wZW5i c2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmggb3BlbmJz ZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaCBvcGVu YnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmggb3BlbmJz ZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1uZXQuaCBvcGVuYnNk LWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVwLmggZW50cm9weS5o Cisga2V4ZWNkaC5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9w ZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvYmFzZTY0Lmggb3Bl bmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuaCBvcGVu YnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oIG9wZW5ic2Qt Y29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5ic2QtY29tcGF0L21k NS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0Y2guaCBvcGVuYnNk LWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmggb3BlbmJzZC1jb21w YXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmggb3BlbmJzZC1jb21w YXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5oIG9wZW5ic2QtY29t cGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmggb3BlbmJzZC1jb21w YXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaCBvcGVuYnNkLWNv bXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmggb3BlbmJzZC1jb21w YXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1uZXQuaCBvcGVuYnNkLWNvbXBh dC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVwLmggZW50cm9weS5oCisga2V4 Z2VuLm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1j b21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNv bXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29t cGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQv c2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3Bl bmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0 L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt bWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt c3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNk LXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt Y3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3Bv cnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0 LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQt dXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuaCBlbnRyb3B5Lmggc3Noa2V5Lmgga2V4 LmggbWFjLmggY3J5cHRvX2FwaS5oIGxvZy5oIHNzaGVyci5oIHBhY2tldC5oIGRpc3BhdGNoLmgg c3NoMi5oIHNzaGJ1Zi5oIGRpZ2VzdC5oCisra2V4Z3NzYy5vOiBpbmNsdWRlcy5oIGNvbmZpZy5o IGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3Bl bmJzZC1jb21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21w YXQvcmVhZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9n ZXRycnNldGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt c2hhMi5oIG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2Qt Y29tcGF0L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9i c2Qtc2lnbmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt c2V0cmVzX2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9i c2Qtd2FpdHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFr ZS1yZmMyNTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21w YXQvcG9ydC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9w b3J0LWxpbnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQv cG9ydC1uZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5l eHRzdGVwLmggZW50cm9weS5oCisra2V4Z3Nzcy5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmlu ZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1j b21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVh ZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNl dGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5o IG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0 L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2ln bmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVz X2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2Fp dHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMy NTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9y dC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxp bnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1u ZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVw LmggZW50cm9weS5oCisga2V4Z2V4Lm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5oIHBs YXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9i YXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3Bo cmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1l Lmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEyLmggb3BlbmJz ZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21wYXQvZm5tYXRj aC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaWduYWwuaCBv cGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNfaWQuaCBv cGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlkLmgg b3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaCBv cGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5o IG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBv cGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5ldC5oIG9w ZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuaCBlbnRy b3B5LmgKKyBrZXhnZXhjLm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5oIHBsYXRmb3Jt Lmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9iYXNlNjQu aCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5o IG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmggb3Bl bmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEyLmggb3BlbmJzZC1jb21w YXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21wYXQvZm5tYXRjaC5oIG9w ZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaWduYWwuaCBvcGVuYnNk LWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNfaWQuaCBvcGVuYnNk LWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlkLmggb3BlbmJz ZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaCBvcGVuYnNk LWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oIG9wZW5i c2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBvcGVuYnNk LWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5ldC5oIG9wZW5ic2Qt Y29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuaCBlbnRyb3B5LmgK KyBrZXhnZXhzLm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3Bl bmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVu YnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5i c2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1j b21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1 Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2Qt Y29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBh dC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBh dC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21w YXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBh dC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29t cGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBh dC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0 L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuaCBlbnRyb3B5LmgKIGRpZmYg LS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCA0MmI0NWQzM2QuLmExMmY2 YWQxZCAxMDA2NDQKK2luZGV4IDJhNDQ5NjgwYS4uMWVlYjM0Y2FkIDEwMDY0NAogLS0tIGEvTWFr ZWZpbGUuaW4KICsrKyBiL01ha2VmaWxlLmluCi1AQCAtMTA4LDYgKzEwOCw3IEBAIExJQlNTSF9P QkpTPSR7TElCT1BFTlNTSF9PQkpTfSBcCitAQCAtMTA5LDYgKzEwOSw3IEBAIExJQlNTSF9PQkpT PSR7TElCT1BFTlNTSF9PQkpTfSBcCiAgCWtleC5vIGtleC1uYW1lcy5vIGtleGRoLm8ga2V4Z2V4 Lm8ga2V4ZWNkaC5vIGtleGMyNTUxOS5vIFwKLSAJa2V4Z2V4Yy5vIGtleGdleHMubyBcCisgCWtl eGdleGMubyBrZXhnZXhzLm8ga2V4bWxrZW03NjhlY2RoLm8gXAogIAlrZXhzbnRydXA3NjF4MjU1 MTkubyBrZXhtbGtlbTc2OHgyNTUxOS5vIHNudHJ1cDc2MS5vIGtleGdlbi5vIFwKICsJa2V4Z3Nz Yy5vIFwKICAJc2Z0cC1yZWFscGF0aC5vIHBsYXRmb3JtLXBsZWRnZS5vIHBsYXRmb3JtLXRyYWNp bmcubyBwbGF0Zm9ybS1taXNjLm8gXAogIAlzc2hidWYtaW8ubyBtaXNjLWFnZW50Lm8gc3NoZXJy LWxpYmNyeXB0by5vCiAgCi1AQCAtMTMxLDcgKzEzMiw3IEBAIFNTSERfU0VTU0lPTl9PQkpTPXNz aGQtc2Vzc2lvbi5vIGF1dGgtcmhvc3RzLm8gYXV0aC1wYXNzd2QubyBcCitAQCAtMTMyLDcgKzEz Myw3IEBAIFNTSERfU0VTU0lPTl9PQkpTPXNzaGQtc2Vzc2lvbi5vIGF1dGgtcmhvc3RzLm8gYXV0 aC1wYXNzd2QubyBcCiAgCWF1dGgyLWNoYWxsLm8gZ3JvdXBhY2Nlc3MubyBcCiAgCWF1dGgtYnNk YXV0aC5vIGF1dGgyLWhvc3RiYXNlZC5vIGF1dGgyLWtiZGludC5vIFwKICAJYXV0aDItbm9uZS5v IGF1dGgyLXBhc3N3ZC5vIGF1dGgyLXB1YmtleS5vIGF1dGgyLXB1YmtleWZpbGUubyBcCkBAIC03 MCw3ICs4NCw3IEBAIGluZGV4IDQyYjQ1ZDMzZC4uYTEyZjZhZDFkIDEwMDY0NAogIAlhdXRoMi1n c3MubyBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBcCiAgCWxvZ2lucmVjLm8gYXV0aC1wYW0u byBhdXRoLXNoYWRvdy5vIGF1dGgtc2lhLm8gXAogIAlzZnRwLXNlcnZlci5vIHNmdHAtY29tbW9u Lm8gXAotQEAgLTE0Myw3ICsxNDQsNyBAQCBTU0hEX0FVVEhfT0JKUz1zc2hkLWF1dGgubyBcCitA QCAtMTQ0LDcgKzE0NSw3IEBAIFNTSERfQVVUSF9PQkpTPXNzaGQtYXV0aC5vIFwKICAJc2VydmVy bG9vcC5vIGF1dGgubyBhdXRoMi5vIGF1dGgtb3B0aW9ucy5vIHNlc3Npb24ubyBhdXRoMi1jaGFs bC5vIFwKICAJZ3JvdXBhY2Nlc3MubyBhdXRoLWJzZGF1dGgubyBhdXRoMi1ob3N0YmFzZWQubyBh dXRoMi1rYmRpbnQubyBcCiAgCWF1dGgyLW5vbmUubyBhdXRoMi1wYXNzd2QubyBhdXRoMi1wdWJr ZXkubyBhdXRoMi1wdWJrZXlmaWxlLm8gXApAQCAtNzksNyArOTMsNyBAQCBpbmRleCA0MmI0NWQz M2QuLmExMmY2YWQxZCAxMDA2NDQKICAJbW9uaXRvcl93cmFwLm8gYXV0aC1rcmI1Lm8gXAogIAlh dWRpdC5vIGF1ZGl0LWJzbS5vIGF1ZGl0LWxpbnV4Lm8gcGxhdGZvcm0ubyBcCiAgCWxvZ2lucmVj Lm8gYXV0aC1wYW0ubyBhdXRoLXNoYWRvdy5vIGF1dGgtc2lhLm8gXAotQEAgLTU1NSw3ICs1NTYs NyBAQCByZWdyZXNzLXByZXA6CitAQCAtNTY2LDcgKzU2Nyw3IEBAIHJlZ3Jlc3MtcHJlcDoKICAJ ICAgIGxuIC1zIGBjZCAkKHNyY2RpcikgJiYgcHdkYC9yZWdyZXNzL01ha2VmaWxlIGBwd2RgL3Jl Z3Jlc3MvTWFrZWZpbGUKICAKICBSRUdSRVNTTElCUz1saWJzc2guYSAkKExJQkNPTVBBVCkKQEAg LTg5LDcgKzEwMyw3IEBAIGluZGV4IDQyYjQ1ZDMzZC4uYTEyZjZhZDFkIDEwMDY0NAogIHJlZ3Jl c3MvbW9kcGlwZSQoRVhFRVhUKTogJChzcmNkaXIpL3JlZ3Jlc3MvbW9kcGlwZS5jICQoUkVHUkVT U0xJQlMpCiAgCSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAtbyAkQCAkKHNyY2RpcikvcmVn cmVzcy9tb2RwaXBlLmMgXAogZGlmZiAtLWdpdCBhL2F1dGguYyBiL2F1dGguYwotaW5kZXggYTAy MTdhODExLi4xNDJhYzVhZmQgMTAwNjQ0CitpbmRleCBhNGEzN2MxMWEuLjlkMTMwN2I3NiAxMDA2 NDQKIC0tLSBhL2F1dGguYwogKysrIGIvYXV0aC5jCiBAQCAtMzU0LDcgKzM1NCw4IEBAIGF1dGhf cm9vdF9hbGxvd2VkKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQpAQCAtMTAz LDcgKzExNyw3IEBAIGluZGV4IGEwMjE3YTgxMS4uMTQyYWM1YWZkIDEwMDY0NAogIAkJYnJlYWs7 CiAgCWNhc2UgUEVSTUlUX0ZPUkNFRF9PTkxZOgogZGlmZiAtLWdpdCBhL2F1dGgyLWdzcy5jIGIv YXV0aDItZ3NzLmMKLWluZGV4IGIzODBkYzExNy4uOTBmMDk5ZTg1IDEwMDY0NAoraW5kZXggNTUz ZmJhMzI4Li5kMTEwYTRlYWMgMTAwNjQ0CiAtLS0gYS9hdXRoMi1nc3MuYwogKysrIGIvYXV0aDIt Z3NzLmMKIEBAIC01MSw2ICs1MSw3IEBACkBAIC0xNjMsMTYgKzE3NywxNiBAQCBpbmRleCBiMzgw ZGMxMTcuLjkwZjA5OWU4NSAxMDA2NDQKICAvKgogICAqIFdlIG9ubHkgc3VwcG9ydCB0aG9zZSBt ZWNoYW5pc21zIHRoYXQgd2Uga25vdyBhYm91dCAoaWUgb25lcyB0aGF0IHdlIGtub3cKICAgKiBo b3cgdG8gY2hlY2sgbG9jYWwgdXNlciBrdXNlcm9rIGFuZCB0aGUgbGlrZSkKLUBAIC0yNjcsNyAr MzEwLDcgQEAgaW5wdXRfZ3NzYXBpX2V4Y2hhbmdlX2NvbXBsZXRlKGludCB0eXBlLCB1aW50MzJf dCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtMjYxLDcgKzMwNCw3IEBAIGlucHV0X2dzc2Fw aV9leGNoYW5nZV9jb21wbGV0ZShpbnQgdHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAq c3NoKQogIAlpZiAoKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQogIAkJZmF0YWxfZnIo ciwgInBhcnNlIHBhY2tldCIpOwogIAogLQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91 c2Vyb2soYXV0aGN0eHQtPnVzZXIpOwogKyAJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlf dXNlcm9rKGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+cHcsIDEpOworIAlpZiAoIWF1dGhlbnRp Y2F0ZWQpCisgCQlhdXRoX2ZhaWx1cmVfZGVsYXkoYXV0aGN0eHQsIHRzdGFydCk7CiAgCi0gCWF1 dGhjdHh0LT5wb3N0cG9uZWQgPSAwOwotIAlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0df VVNFUkFVVEhfR1NTQVBJX1RPS0VOLCBOVUxMKTsKLUBAIC0zMTUsNyArMzU4LDcgQEAgaW5wdXRf Z3NzYXBpX21pYyhpbnQgdHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKQorQEAg LTMxMiw3ICszNTUsNyBAQCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVu LCBzdHJ1Y3Qgc3NoICpzc2gpCiAgCWdzc2J1Zi5sZW5ndGggPSBzc2hidWZfbGVuKGIpOwogIAog IAlpZiAoIUdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKGdzc2N0eHQsICZnc3NidWYs ICZtaWMpKSkKQEAgLTIxOCw3ICsyMzIsNyBAQCBpbmRleCA5OTYzN2E4OWIuLmEwNTkwOGNmMyAx MDA2NDQKICAjZW5kaWYKICAJJm1ldGhvZGNmZ19wYXNzd2QsCiBkaWZmIC0tZ2l0IGEvYXV0aDIu YyBiL2F1dGgyLmMKLWluZGV4IGJmZDQyNWVhYi4uM2MzYmRiNzc2IDEwMDY0NAoraW5kZXggNDk3 ZmE4ZWQyLi5mMGYzOTcwN2YgMTAwNjQ0CiAtLS0gYS9hdXRoMi5jCiArKysgYi9hdXRoMi5jCiBA QCAtNzEsNiArNzEsNyBAQCBleHRlcm4gQXV0aG1ldGhvZCBtZXRob2RfcGFzc3dkOwpAQCAtMzU3 LDcgKzM3MSw3IEBAIGluZGV4IDI2ZDYyODU1YS4uMGNhZGM5ZjE4IDEwMDY0NAogIGludAkJIGdl dF9wZWVyX3BvcnQoaW50KTsKICBjaGFyCQkqZ2V0X2xvY2FsX2lwYWRkcihpbnQpOwogZGlmZiAt LWdpdCBhL2NsaWVudGxvb3AuYyBiL2NsaWVudGxvb3AuYwotaW5kZXggNmEwZTdiNmI4Li5hYjVj NGQ0YWQgMTAwNjQ0CitpbmRleCA0OTk1MGNlY2MuLmYwNzZkMWQ1NiAxMDA2NDQKIC0tLSBhL2Ns aWVudGxvb3AuYwogKysrIGIvY2xpZW50bG9vcC5jCiBAQCAtMTAxLDYgKzEwMSwxMCBAQApAQCAt MzcxLDcgKzM4NSw3IEBAIGluZGV4IDZhMGU3YjZiOC4uYWI1YzRkNGFkIDEwMDY0NAogIC8qIFBl cm1pdHRlZCBSU0Egc2lnbmF0dXJlIGFsZ29yaXRobXMgZm9yIFVwZGF0ZUhvc3RrZXlzIHByb29m cyAqLwogICNkZWZpbmUgSE9TVEtFWV9QUk9PRl9SU0FfQUxHUwkicnNhLXNoYTItNTEyLHJzYS1z aGEyLTI1NiIKICAKLUBAIC0xNjExLDYgKzE2MTUsMTQgQEAgY2xpZW50X2xvb3Aoc3RydWN0IHNz aCAqc3NoLCBpbnQgaGF2ZV9wdHksIGludCBlc2NhcGVfY2hhcl9hcmcsCitAQCAtMTYxNyw2ICsx NjIxLDE0IEBAIGNsaWVudF9sb29wKHN0cnVjdCBzc2ggKnNzaCwgaW50IGhhdmVfcHR5LCBpbnQg ZXNjYXBlX2NoYXJfYXJnLAogIAkJLyogRG8gY2hhbm5lbCBvcGVyYXRpb25zLiAqLwogIAkJY2hh bm5lbF9hZnRlcl9wb2xsKHNzaCwgcGZkLCBucGZkX2FjdGl2ZSk7CiAgCkBAIC0zODcsNyArNDAx LDcgQEAgaW5kZXggNmEwZTdiNmI4Li5hYjVjNGQ0YWQgMTAwNjQ0CiAgCQlpZiAoY29ubl9pbl9y ZWFkeSkKICAJCQljbGllbnRfcHJvY2Vzc19uZXRfaW5wdXQoc3NoKTsKIGRpZmYgLS1naXQgYS9j b25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDhmODI3NmM3OC4uNzU1NzZiNDVkIDEw MDY0NAoraW5kZXggNGIzY2ZmMzhjLi5jYjQ2OTAzZjQgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUu YWMKICsrKyBiL2NvbmZpZ3VyZS5hYwogQEAgLTg0NCw2ICs4NDQsMzAgQEAgaW50IG1haW4odm9p ZCkgeyBpZiAoTlNWZXJzaW9uT2ZSdW5UaW1lTGlicmFyeSgiU3lzdGVtIikgPj0gKDYwIDw8IDE2 KSkKQEAgLTQyMiw3ICs0MzYsNyBAQCBpbmRleCA4ZjgyNzZjNzguLjc1NTc2YjQ1ZCAxMDA2NDQK ICAJQUNfQ0hFQ0tfREVDTChbQVVfSVB2NF0sIFtdLAogIAkgICAgQUNfREVGSU5FKFtBVV9JUHY0 XSwgWzBdLCBbU3lzdGVtIG9ubHkgc3VwcG9ydHMgSVB2NCBhdWRpdCByZWNvcmRzXSkKIGRpZmYg LS1naXQgYS9nc3MtZ2Vuci5jIGIvZ3NzLWdlbnIuYwotaW5kZXggNzA4OGQ5M2I0Li5hMDdkYmY1 MTIgMTAwNjQ0CitpbmRleCA3MDg4ZDkzYjQuLmVjMmM5YzZkZCAxMDA2NDQKIC0tLSBhL2dzcy1n ZW5yLmMKICsrKyBiL2dzcy1nZW5yLmMKIEBAIC00Miw5ICs0MiwzMyBAQApAQCAtNDU5LDcgKzQ3 Myw3IEBAIGluZGV4IDcwODhkOTNiNC4uYTA3ZGJmNTEyIDEwMDY0NAogIC8qIHNzaGJ1Zl9nZXQg Zm9yIGdzc19idWZmZXJfZGVzYyAqLwogIGludAogIHNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNj KHN0cnVjdCBzc2hidWYgKmIsIGdzc19idWZmZXJfZGVzYyAqZykKLUBAIC02MCw2ICs4NCwxNjkg QEAgc3NoX2dzc2FwaV9nZXRfYnVmZmVyX2Rlc2Moc3RydWN0IHNzaGJ1ZiAqYiwgZ3NzX2J1ZmZl cl9kZXNjICpnKQorQEAgLTYwLDYgKzg0LDE3MCBAQCBzc2hfZ3NzYXBpX2dldF9idWZmZXJfZGVz YyhzdHJ1Y3Qgc3NoYnVmICpiLCBnc3NfYnVmZmVyX2Rlc2MgKmcpCiAgCXJldHVybiAwOwogIH0K ICAKQEAgLTU1Nyw4ICs1NzEsOSBAQCBpbmRleCA3MDg4ZDkzYjQuLmEwN2RiZjUxMiAxMDA2NDQK ICsJCQllbmNsZW4gPSBfX2I2NF9udG9wKGRpZ2VzdCwKICsJCQkgICAgc3NoX2RpZ2VzdF9ieXRl cyhTU0hfRElHRVNUX01ENSksIGVuY29kZWQsCiArCQkJICAgIHNzaF9kaWdlc3RfYnl0ZXMoU1NI X0RJR0VTVF9NRDUpICogMik7Ci0rCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt V3N0cmluZ29wLW92ZXJmbG93IgogKwkJCWNwID0gc3RybmNweShzLCBrZXgsIHN0cmxlbihrZXgp KTsKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAogKwkJCWZvciAoKHAgPSBzdHJzZXAoJmNw LCAiLCIpKTsgcCAmJiAqcCAhPSAnXDAnOwogKwkJCQkocCA9IHN0cnNlcCgmY3AsICIsIikpKSB7 CiArCQkJCWlmIChzc2hidWZfbGVuKGJ1ZikgIT0gMCAmJgpAQCAtNjI5LDcgKzY0NCw3IEBAIGlu ZGV4IDcwODhkOTNiNC4uYTA3ZGJmNTEyIDEwMDY0NAogIC8qIENoZWNrIHRoYXQgdGhlIE9JRCBp biBhIGRhdGEgc3RyZWFtIG1hdGNoZXMgdGhhdCBpbiB0aGUgY29udGV4dCAqLwogIGludAogIHNz aF9nc3NhcGlfY2hlY2tfb2lkKEdzc2N0eHQgKmN0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikK LUBAIC0xNjgsNiArMzU1LDcgQEAgc3NoX2dzc2FwaV9idWlsZF9jdHgoR3NzY3R4dCAqKmN0eCkK K0BAIC0xNjgsNiArMzU2LDcgQEAgc3NoX2dzc2FwaV9idWlsZF9jdHgoR3NzY3R4dCAqKmN0eCkK ICAJKCpjdHgpLT5jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7CiAgCSgqY3R4KS0+Y2xpZW50 ID0gR1NTX0NfTk9fTkFNRTsKICAJKCpjdHgpLT5jbGllbnRfY3JlZHMgPSBHU1NfQ19OT19DUkVE RU5USUFMOwpAQCAtNjM3LDcgKzY1Miw3IEBAIGluZGV4IDcwODhkOTNiNC4uYTA3ZGJmNTEyIDEw MDY0NAogIH0KICAKICAvKiBEZWxldGUgb3VyIGNvbnRleHQsIHByb3ZpZGluZyBpdCBoYXMgYmVl biBidWlsdCBjb3JyZWN0bHkgKi8KLUBAIC0xOTMsNiArMzgxLDEyIEBAIHNzaF9nc3NhcGlfZGVs ZXRlX2N0eChHc3NjdHh0ICoqY3R4KQorQEAgLTE5Myw2ICszODIsMTIgQEAgc3NoX2dzc2FwaV9k ZWxldGVfY3R4KEdzc2N0eHQgKipjdHgpCiAgCQlnc3NfcmVsZWFzZV9uYW1lKCZtcywgJigqY3R4 KS0+Y2xpZW50KTsKICAJaWYgKCgqY3R4KS0+Y2xpZW50X2NyZWRzICE9IEdTU19DX05PX0NSRURF TlRJQUwpCiAgCQlnc3NfcmVsZWFzZV9jcmVkKCZtcywgJigqY3R4KS0+Y2xpZW50X2NyZWRzKTsK QEAgLTY1MCw3ICs2NjUsNyBAQCBpbmRleCA3MDg4ZDkzYjQuLmEwN2RiZjUxMiAxMDA2NDQKICAK ICAJZnJlZSgqY3R4KTsKICAJKmN0eCA9IE5VTEw7Ci1AQCAtMjE2LDcgKzQxMCw3IEBAIHNzaF9n c3NhcGlfaW5pdF9jdHgoR3NzY3R4dCAqY3R4LCBpbnQgZGVsZWdfY3JlZHMsIGdzc19idWZmZXJf ZGVzYyAqcmVjdl90b2ssCitAQCAtMjE2LDcgKzQxMSw3IEBAIHNzaF9nc3NhcGlfaW5pdF9jdHgo R3NzY3R4dCAqY3R4LCBpbnQgZGVsZWdfY3JlZHMsIGdzc19idWZmZXJfZGVzYyAqcmVjdl90b2ss CiAgCX0KICAKICAJY3R4LT5tYWpvciA9IGdzc19pbml0X3NlY19jb250ZXh0KCZjdHgtPm1pbm9y LApAQCAtNjU5LDcgKzY3NCw3IEBAIGluZGV4IDcwODhkOTNiNC4uYTA3ZGJmNTEyIDEwMDY0NAog IAkgICAgR1NTX0NfTVVUVUFMX0ZMQUcgfCBHU1NfQ19JTlRFR19GTEFHIHwgZGVsZWdfZmxhZywK ICAJICAgIDAsIE5VTEwsIHJlY3ZfdG9rLCBOVUxMLCBzZW5kX3RvaywgZmxhZ3MsIE5VTEwpOwog IAotQEAgLTI0NSw5ICs0MzksNDMgQEAgc3NoX2dzc2FwaV9pbXBvcnRfbmFtZShHc3NjdHh0ICpj dHgsIGNvbnN0IGNoYXIgKmhvc3QpCitAQCAtMjQ1LDkgKzQ0MCw0MyBAQCBzc2hfZ3NzYXBpX2lt cG9ydF9uYW1lKEdzc2N0eHQgKmN0eCwgY29uc3QgY2hhciAqaG9zdCkKICAJcmV0dXJuIChjdHgt Pm1ham9yKTsKICB9CiAgCkBAIC03MDMsNyArNzE4LDcgQEAgaW5kZXggNzA4OGQ5M2I0Li5hMDdk YmY1MTIgMTAwNjQ0CiAgCWlmICgoY3R4LT5tYWpvciA9IGdzc19nZXRfbWljKCZjdHgtPm1pbm9y LCBjdHgtPmNvbnRleHQsCiAgCSAgICBHU1NfQ19RT1BfREVGQVVMVCwgYnVmZmVyLCBoYXNoKSkp CiAgCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci1AQCAtMjU1LDYgKzQ4MywxOSBAQCBzc2hfZ3Nz YXBpX3NpZ24oR3NzY3R4dCAqY3R4LCBnc3NfYnVmZmVyX3QgYnVmZmVyLCBnc3NfYnVmZmVyX3Qg aGFzaCkKK0BAIC0yNTUsNiArNDg0LDE5IEBAIHNzaF9nc3NhcGlfc2lnbihHc3NjdHh0ICpjdHgs IGdzc19idWZmZXJfdCBidWZmZXIsIGdzc19idWZmZXJfdCBoYXNoKQogIAlyZXR1cm4gKGN0eC0+ bWFqb3IpOwogIH0KICAKQEAgLTcyMyw3ICs3MzgsNyBAQCBpbmRleCA3MDg4ZDkzYjQuLmEwN2Ri ZjUxMiAxMDA2NDQKICB2b2lkCiAgc3NoX2dzc2FwaV9idWlsZG1pYyhzdHJ1Y3Qgc3NoYnVmICpi LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpzZXJ2aWNlLAogICAgICBjb25zdCBjaGFy ICpjb250ZXh0LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXNzaW9uX2lkKQotQEAgLTI3MSwxMSAr NTEyLDE2IEBAIHNzaF9nc3NhcGlfYnVpbGRtaWMoc3RydWN0IHNzaGJ1ZiAqYiwgY29uc3QgY2hh ciAqdXNlciwgY29uc3QgY2hhciAqc2VydmljZSwKK0BAIC0yNzEsMTEgKzUxMywxNiBAQCBzc2hf Z3NzYXBpX2J1aWxkbWljKHN0cnVjdCBzc2hidWYgKmIsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0 IGNoYXIgKnNlcnZpY2UsCiAgfQogIAogIGludApAQCAtNzQxLDcgKzc1Niw3IEBAIGluZGV4IDcw ODhkOTNiNC4uYTA3ZGJmNTEyIDEwMDY0NAogIAogIAkvKiBSRkMgNDQ2MiBzYXlzIHdlIE1VU1Qg Tk9UIGRvIFNQTkVHTyAqLwogIAlpZiAob2lkLT5sZW5ndGggPT0gc3BuZWdvX29pZC5sZW5ndGgg JiYKLUBAIC0yODUsNiArNTMxLDEwIEBAIHNzaF9nc3NhcGlfY2hlY2tfbWVjaGFuaXNtKEdzc2N0 eHQgKipjdHgsIGdzc19PSUQgb2lkLCBjb25zdCBjaGFyICpob3N0KQorQEAgLTI4NSw2ICs1MzIs MTAgQEAgc3NoX2dzc2FwaV9jaGVja19tZWNoYW5pc20oR3NzY3R4dCAqKmN0eCwgZ3NzX09JRCBv aWQsIGNvbnN0IGNoYXIgKmhvc3QpCiAgCXNzaF9nc3NhcGlfYnVpbGRfY3R4KGN0eCk7CiAgCXNz aF9nc3NhcGlfc2V0X29pZCgqY3R4LCBvaWQpOwogIAltYWpvciA9IHNzaF9nc3NhcGlfaW1wb3J0 X25hbWUoKmN0eCwgaG9zdCk7CkBAIC03NTIsNyArNzY3LDcgQEAgaW5kZXggNzA4OGQ5M2I0Li5h MDdkYmY1MTIgMTAwNjQ0CiAgCWlmICghR1NTX0VSUk9SKG1ham9yKSkgewogIAkJbWFqb3IgPSBz c2hfZ3NzYXBpX2luaXRfY3R4KCpjdHgsIDAsIEdTU19DX05PX0JVRkZFUiwgJnRva2VuLAogIAkJ ICAgIE5VTEwpOwotQEAgLTI5NCwxMCArNTQ0LDY2IEBAIHNzaF9nc3NhcGlfY2hlY2tfbWVjaGFu aXNtKEdzc2N0eHQgKipjdHgsIGdzc19PSUQgb2lkLCBjb25zdCBjaGFyICpob3N0KQorQEAgLTI5 NCwxMCArNTQ1LDY2IEBAIHNzaF9nc3NhcGlfY2hlY2tfbWVjaGFuaXNtKEdzc2N0eHQgKipjdHgs IGdzc19PSUQgb2lkLCBjb25zdCBjaGFyICpob3N0KQogIAkJCSAgICBHU1NfQ19OT19CVUZGRVIp OwogIAl9CiAgCkBAIC0xMjU2LDcgKzEyNzEsNyBAQCBpbmRleCBmOWFlMzAzYjUuLjhiNGZhOWNm ZSAxMDA2NDQKICAKICAvKiBQcml2aWxlZ2VkICovCiBkaWZmIC0tZ2l0IGEva2V4LW5hbWVzLmMg Yi9rZXgtbmFtZXMuYwotaW5kZXggNzUxZjA2Y2VhLi43NjlhMzY4MTAgMTAwNjQ0CitpbmRleCAx MTYxNTAzMTYuLjJiYzQzMTIyMyAxMDA2NDQKIC0tLSBhL2tleC1uYW1lcy5jCiArKysgYi9rZXgt bmFtZXMuYwogQEAgLTM2LDYgKzM2LDcgQEAKQEAgLTEyNzgsNyArMTI5Myw3IEBAIGluZGV4IDc1 MWYwNmNlYS4uNzY5YTM2ODEwIDEwMDY0NAogIHN0cnVjdCBrZXhhbGcgewogIAljaGFyICpuYW1l OwogIAl1X2ludCB0eXBlOwotQEAgLTg4LDkgKzkzLDIyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg a2V4YWxnIGtleGFsZ3NbXSA9IHsKK0BAIC04Niw5ICs5MSwyMiBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGtleGFsZyBrZXhhbGdzW10gPSB7CiAgI2VuZGlmIC8qIEhBVkVfRVZQX1NIQTI1NiB8fCAh V0lUSF9PUEVOU1NMICovCiAgCXsgTlVMTCwgMCwgLTEsIC0xLCAwIH0sCiAgfTsKQEAgLTEzMDMs NyArMTMxOCw3IEBAIGluZGV4IDc1MWYwNmNlYS4uNzY5YTM2ODEwIDEwMDY0NAogIHsKICAJY2hh ciAqcmV0ID0gTlVMTDsKICAJY29uc3Qgc3RydWN0IGtleGFsZyAqazsKLUBAIC0xMDIsNiArMTIw LDE4IEBAIGtleF9hbGdfbGlzdChjaGFyIHNlcCkKK0BAIC0xMDAsNiArMTE4LDE4IEBAIGtleF9h bGdfbGlzdChjaGFyIHNlcCkKICAJcmV0dXJuIHJldDsKICB9CiAgCkBAIC0xMzIyLDcgKzEzMzcs NyBAQCBpbmRleCA3NTFmMDZjZWEuLjc2OWEzNjgxMCAxMDA2NDQKICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGtleGFsZyAqCiAga2V4X2FsZ19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiAgewotQEAg LTExMSw2ICsxNDEsMTAgQEAga2V4X2FsZ19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCitAQCAt MTA5LDYgKzEzOSwxMCBAQCBrZXhfYWxnX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKICAJCWlm IChzdHJjbXAoay0+bmFtZSwgbmFtZSkgPT0gMCkKICAJCQlyZXR1cm4gazsKICAJfQpAQCAtMTMz Myw3ICsxMzQ4LDcgQEAgaW5kZXggNzUxZjA2Y2VhLi43NjlhMzY4MTAgMTAwNjQ0CiAgCXJldHVy biBOVUxMOwogIH0KICAKLUBAIC0xNzIsNiArMjA2LDEyIEBAIGtleF9uYW1lc192YWxpZChjb25z dCBjaGFyICpuYW1lcykKK0BAIC0xNzAsNiArMjA0LDEyIEBAIGtleF9uYW1lc192YWxpZChjb25z dCBjaGFyICpuYW1lcykKICAJCXJldHVybiAwOwogIAlmb3IgKChwID0gc3Ryc2VwKCZjcCwgIiwi KSk7IHAgJiYgKnAgIT0gJ1wwJzsKICAJICAgIChwID0gc3Ryc2VwKCZjcCwgIiwiKSkpIHsKQEAg LTEzNDYsNyArMTM2MSw3IEBAIGluZGV4IDc1MWYwNmNlYS4uNzY5YTM2ODEwIDEwMDY0NAogIAkJ aWYgKGtleF9hbGdfYnlfbmFtZShwKSA9PSBOVUxMKSB7CiAgCQkJZXJyb3IoIlVuc3VwcG9ydGVk IEtFWCBhbGdvcml0aG0gXCIlLjEwMHNcIiIsIHApOwogIAkJCWZyZWUocyk7Ci1AQCAtMzM0LDMg KzM2OCwyNiBAQCBrZXhfYXNzZW1ibGVfbmFtZXMoY2hhciAqKmxpc3RwLCBjb25zdCBjaGFyICpk ZWYsIGNvbnN0IGNoYXIgKmFsbCkKK0BAIC0zMzIsMyArMzcyLDI2IEBAIGtleF9hc3NlbWJsZV9u YW1lcyhjaGFyICoqbGlzdHAsIGNvbnN0IGNoYXIgKmRlZiwgY29uc3QgY2hhciAqYWxsKQogIAlm cmVlKHJldCk7CiAgCXJldHVybiByOwogIH0KQEAgLTEzNzQsNyArMTM4OSw3IEBAIGluZGV4IDc1 MWYwNmNlYS4uNzY5YTM2ODEwIDEwMDY0NAogKwlyZXR1cm4gMTsKICt9CiBkaWZmIC0tZ2l0IGEv a2V4LmMgYi9rZXguYwotaW5kZXggODViMTEyYzc1Li4zNjA4YTU1MDQgMTAwNjQ0CitpbmRleCBi MmMzZDk3MjAuLjFiOGYxYzNjNSAxMDA2NDQKIC0tLSBhL2tleC5jCiArKysgYi9rZXguYwogQEAg LTI5MywxNyArMjkzLDM3IEBAIHN0YXRpYyBpbnQKQEAgLTE0MjEsNyArMTQzNiw3IEBAIGluZGV4 IDg1YjExMmM3NS4uMzYwOGE1NTA0IDEwMDY0NAogIAkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJp bmcobSwgIjAiKSkgIT0gMCB8fAogIAkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgImFn ZW50LWZvcndhcmQiKSkgIT0gMCB8fAogIAkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwg IjAiKSkgIT0gMCkgewotQEAgLTc0MSw2ICs3NjEsOSBAQCBrZXhfZnJlZShzdHJ1Y3Qga2V4ICpr ZXgpCitAQCAtNzQ0LDYgKzc2NCw5IEBAIGtleF9mcmVlKHN0cnVjdCBrZXggKmtleCkKICAJc3No YnVmX2ZyZWUoa2V4LT5zZXJ2ZXJfdmVyc2lvbik7CiAgCXNzaGJ1Zl9mcmVlKGtleC0+Y2xpZW50 X3B1Yik7CiAgCXNzaGJ1Zl9mcmVlKGtleC0+c2Vzc2lvbl9pZCk7CkBAIC0xNDMyLDcgKzE0NDcs NyBAQCBpbmRleCA4NWIxMTJjNzUuLjM2MDhhNTUwNCAxMDA2NDQKICAJc3Noa2V5X2ZyZWUoa2V4 LT5pbml0aWFsX2hvc3RrZXkpOwogIAlmcmVlKGtleC0+ZmFpbGVkX2Nob2ljZSk7CiBkaWZmIC0t Z2l0IGEva2V4LmggYi9rZXguaAotaW5kZXggNGY2ZDkyMTY0Li4yYzg2YjI1ZjkgMTAwNjQ0Citp bmRleCA5ODE2YjFkODMuLjIxOTE5YTlhYSAxMDA2NDQKIC0tLSBhL2tleC5oCiArKysgYi9rZXgu aAogQEAgLTI5LDYgKzI5LDEwIEBACkBAIC0xNDQ0LDEyICsxNDU5LDEyIEBAIGluZGV4IDRmNmQ5 MjE2NC4uMmM4NmIyNWY5IDEwMDY0NAogKyNlbmRpZgogKwogICNpZmRlZiBXSVRIX09QRU5TU0wK LSAjIGluY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjIGluY2x1ZGUgPG9wZW5zc2wvZGguaD4KLUBA IC0xMDMsNiArMTA3LDE1IEBAIGVudW0ga2V4X2V4Y2hhbmdlIHsKLSAJS0VYX0MyNTUxOV9TSEEy NTYsCisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgor QEAgLTk4LDYgKzEwMiwxNSBAQCBlbnVtIGtleF9leGNoYW5nZSB7CiAgCUtFWF9LRU1fU05UUlVQ NzYxWDI1NTE5X1NIQTUxMiwKICAJS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTYsCisgCUtF WF9LRU1fTUxLRU03NjhFQ0RIX1NIQTI1NiwKICsjaWZkZWYgR1NTQVBJCiArCUtFWF9HU1NfR1JQ MV9TSEExLAogKwlLRVhfR1NTX0dSUDE0X1NIQTEsCkBAIC0xNDYyLDcgKzE0NzcsNyBAQCBpbmRl eCA0ZjZkOTIxNjQuLjJjODZiMjVmOSAxMDA2NDQKICAJS0VYX01BWAogIH07CiAgCi1AQCAtMTcw LDYgKzE4MywxMyBAQCBzdHJ1Y3Qga2V4IHsKK0BAIC0xNjYsNiArMTc5LDEzIEBAIHN0cnVjdCBr ZXggewogIAl1X2ludAlmbGFnczsKICAJaW50CWhhc2hfYWxnOwogIAlpbnQJZWNfbmlkOwpAQCAt MTQ3Niw3ICsxNDkxLDcgQEAgaW5kZXggNGY2ZDkyMTY0Li4yYzg2YjI1ZjkgMTAwNjQ0CiAgCWNo YXIJKmZhaWxlZF9jaG9pY2U7CiAgCWludAkoKnZlcmlmeV9ob3N0X2tleSkoc3RydWN0IHNzaGtl eSAqLCBzdHJ1Y3Qgc3NoICopOwogIAlzdHJ1Y3Qgc3Noa2V5ICooKmxvYWRfaG9zdF9wdWJsaWNf a2V5KShpbnQsIGludCwgc3RydWN0IHNzaCAqKTsKLUBAIC0xOTcsOCArMjE3LDEwIEBAIGludAkg a2V4X25pZF9mcm9tX25hbWUoY29uc3QgY2hhciAqKTsKK0BAIC0xOTMsOCArMjEzLDEwIEBAIGlu dAkga2V4X25pZF9mcm9tX25hbWUoY29uc3QgY2hhciAqKTsKICBpbnQJIGtleF9pc19wcV9mcm9t X25hbWUoY29uc3QgY2hhciAqKTsKICBpbnQJIGtleF9uYW1lc192YWxpZChjb25zdCBjaGFyICop OwogIGNoYXIJKmtleF9hbGdfbGlzdChjaGFyKTsKQEAgLTE0ODcsNyArMTUwMiw3IEBAIGluZGV4 IDRmNmQ5MjE2NC4uMmM4NmIyNWY5IDEwMDY0NAogIGludAkga2V4X2Fzc2VtYmxlX25hbWVzKGNo YXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICB2b2lkCSBrZXhfcHJvcG9zYWxf cG9wdWxhdGVfZW50cmllcyhzdHJ1Y3Qgc3NoICosIGNoYXIgKnByb3BbUFJPUE9TQUxfTUFYXSwK ICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwotQEAgLTIzMiw2ICsyNTQsMTIgQEAgaW50CSBrZXhnZXhfY2xp ZW50KHN0cnVjdCBzc2ggKik7CitAQCAtMjI4LDYgKzI1MCwxMiBAQCBpbnQJIGtleGdleF9jbGll bnQoc3RydWN0IHNzaCAqKTsKICBpbnQJIGtleGdleF9zZXJ2ZXIoc3RydWN0IHNzaCAqKTsKICBp bnQJIGtleF9nZW5fY2xpZW50KHN0cnVjdCBzc2ggKik7CiAgaW50CSBrZXhfZ2VuX3NlcnZlcihz dHJ1Y3Qgc3NoICopOwpAQCAtMTUwMCw3ICsxNTE1LDcgQEAgaW5kZXggNGY2ZDkyMTY0Li4yYzg2 YjI1ZjkgMTAwNjQ0CiAgCiAgaW50CSBrZXhfZGhfa2V5cGFpcihzdHJ1Y3Qga2V4ICopOwogIGlu dAkga2V4X2RoX2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwgc3RydWN0 IHNzaGJ1ZiAqKiwKLUBAIC0yNzAsNiArMjk4LDEyIEBAIGludAkga2V4Z2V4X2hhc2goaW50LCBj b25zdCBzdHJ1Y3Qgc3NoYnVmICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKK0BAIC0yNzUsNiAr MzAzLDEyIEBAIGludAkga2V4Z2V4X2hhc2goaW50LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosIGNv bnN0IHN0cnVjdCBzc2hidWYgKiwKICAgICAgY29uc3QgQklHTlVNICosIGNvbnN0IHVfY2hhciAq LCBzaXplX3QsCiAgICAgIHVfY2hhciAqLCBzaXplX3QgKik7CiAgCkBAIC0xNTQyLDcgKzE1NTcs NyBAQCBpbmRleCBjYmNiMmQ4MzYuLmI2MzM3NGIwZSAxMDA2NDQKICAJCWJyZWFrOwogIAljYXNl IEtFWF9ESF9HUlAxOF9TSEE1MTI6CiBkaWZmIC0tZ2l0IGEva2V4Z2VuLmMgYi9rZXhnZW4uYwot aW5kZXggNTY0M2JjODMxLi5hMmJlYjNmMTAgMTAwNjQ0CitpbmRleCBkMWY5ZDg0MGEuLmZmNTA0 NTgwZiAxMDA2NDQKIC0tLSBhL2tleGdlbi5jCiArKysgYi9rZXhnZW4uYwogQEAgLTQ0LDcgKzQ0 LDcgQEAKQEAgLTI4NzYsNyArMjg5MSw3IEBAIGluZGV4IDAwMDAwMDAwMC4uOThlOTQwNGRmCiAr CiArI2VuZGlmIC8qIGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkgKi8K IGRpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKLWluZGV4IDFlNDFkZmE1My4uMDI1 YzZhYmJlIDEwMDY0NAoraW5kZXggYzY1OWU5OWUwLi5mYTQ3Nzg5OWUgMTAwNjQ0CiAtLS0gYS9t b25pdG9yLmMKICsrKyBiL21vbml0b3IuYwogQEAgLTEzOCw2ICsxMzgsOCBAQCBpbnQgbW1fYW5z d2VyX2dzc19zZXR1cF9jdHgoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CkBA IC0yOTQ2LDEwICsyOTYxLDEyIEBAIGluZGV4IDFlNDFkZmE1My4uMDI1YzZhYmJlIDEwMDY0NAog IAogIAlpZiAoYXV0aF9vcHRzLT5wZXJtaXRfcHR5X2ZsYWcpIHsKICAJCW1vbml0b3JfcGVybWl0 KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfUFRZLCAxKTsKLUBAIC0xOTI0LDYgKzE5NDgsMTcg QEAgbW9uaXRvcl9hcHBseV9rZXlzdGF0ZShzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9y ICpwbW9uaXRvcikKLSAjIGlmZGVmIE9QRU5TU0xfSEFTX0VDQworQEAgLTE5MDgsOCArMTkzMiwx OCBAQCBtb25pdG9yX2FwcGx5X2tleXN0YXRlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0 b3IgKnBtb25pdG9yKQorIAlrZXgtPmtleFtLRVhfREhfR0VYX1NIQTFdID0ga2V4Z2V4X3NlcnZl cjsKKyAJa2V4LT5rZXhbS0VYX0RIX0dFWF9TSEEyNTZdID0ga2V4Z2V4X3NlcnZlcjsKICAJa2V4 LT5rZXhbS0VYX0VDREhfU0hBMl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAjIGVuZGlmCistCWtleC0+ a2V4W0tFWF9LRU1fTUxLRU03NjhFQ0RIX1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKy0jZW5k aWYKICsjIGlmZGVmIEdTU0FQSQogKwlpZiAob3B0aW9ucy5nc3Nfa2V5ZXgpIHsKICsJCWtleC0+ a2V4W0tFWF9HU1NfR1JQMV9TSEExXSA9IGtleGdzc19zZXJ2ZXI7CkBAIC0yOTYxLDEwICsyOTc4 LDExIEBAIGluZGV4IDFlNDFkZmE1My4uMDI1YzZhYmJlIDEwMDY0NAogKwkJa2V4LT5rZXhbS0VY X0dTU19DMjU1MTlfU0hBMjU2XSA9IGtleGdzc19zZXJ2ZXI7CiArCX0KICsjIGVuZGlmCi0gI2Vu ZGlmIC8qIFdJVEhfT1BFTlNTTCAqLworKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KICAJa2V4 LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CiAgCWtleC0+a2V4W0tF WF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX3NlcnZlcjsKLUBAIC0yMDIy LDggKzIwNTcsOCBAQCBtbV9hbnN3ZXJfZ3NzX3NldHVwX2N0eChzdHJ1Y3Qgc3NoICpzc2gsIGlu dCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorIAlrZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1 NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKK0BAIC0yMDA3LDggKzIwNDEsOCBAQCBtbV9h bnN3ZXJfZ3NzX3NldHVwX2N0eChzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3No YnVmICptKQogIAl1X2NoYXIgKnA7CiAgCWludCByOwogIApAQCAtMjk3NSw3ICsyOTkzLDcgQEAg aW5kZXggMWU0MWRmYTUzLi4wMjVjNmFiYmUgMTAwNjQ0CiAgCiAgCWlmICgociA9IHNzaGJ1Zl9n ZXRfc3RyaW5nKG0sICZwLCAmbGVuKSkgIT0gMCkKICAJCWZhdGFsX2ZyKHIsICJwYXJzZSIpOwot QEAgLTIwNTUsOCArMjA5MCw4IEBAIG1tX2Fuc3dlcl9nc3NfYWNjZXB0X2N0eChzdHJ1Y3Qgc3No ICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorQEAgLTIwNDAsOCArMjA3NCw4IEBA IG1tX2Fuc3dlcl9nc3NfYWNjZXB0X2N0eChzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1 Y3Qgc3NoYnVmICptKQogIAlPTV91aW50MzIgZmxhZ3MgPSAwOyAvKiBHU0kgbmVlZHMgdGhpcyAq LwogIAlpbnQgcjsKICAKQEAgLTI5ODYsNyArMzAwNCw3IEBAIGluZGV4IDFlNDFkZmE1My4uMDI1 YzZhYmJlIDEwMDY0NAogIAogIAlpZiAoKHIgPSBzc2hfZ3NzYXBpX2dldF9idWZmZXJfZGVzYyht LCAmaW4pKSAhPSAwKQogIAkJZmF0YWxfZnIociwgInNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNj Iik7Ci1AQCAtMjA3Niw2ICsyMTExLDcgQEAgbW1fYW5zd2VyX2dzc19hY2NlcHRfY3R4KHN0cnVj dCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCitAQCAtMjA2MSw2ICsyMDk1 LDcgQEAgbW1fYW5zd2VyX2dzc19hY2NlcHRfY3R4KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ss IHN0cnVjdCBzc2hidWYgKm0pCiAgCQltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklU T1JfUkVRX0dTU1NURVAsIDApOwogIAkJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05J VE9SX1JFUV9HU1NVU0VST0ssIDEpOwogIAkJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBN T05JVE9SX1JFUV9HU1NDSEVDS01JQywgMSk7CkBAIC0yOTk0LDcgKzMwMTIsNyBAQCBpbmRleCAx ZTQxZGZhNTMuLjAyNWM2YWJiZSAxMDA2NDQKICAJfQogIAlyZXR1cm4gKDApOwogIH0KLUBAIC0y MDg3LDggKzIxMjMsOCBAQCBtbV9hbnN3ZXJfZ3NzX2NoZWNrbWljKHN0cnVjdCBzc2ggKnNzaCwg aW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCitAQCAtMjA3Miw4ICsyMTA3LDggQEAgbW1fYW5z d2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVm ICptKQogIAlPTV91aW50MzIgcmV0OwogIAlpbnQgcjsKICAKQEAgLTMwMDUsNyArMzAyMyw3IEBA IGluZGV4IDFlNDFkZmE1My4uMDI1YzZhYmJlIDEwMDY0NAogIAogIAlpZiAoKHIgPSBzc2hfZ3Nz YXBpX2dldF9idWZmZXJfZGVzYyhtLCAmZ3NzYnVmKSkgIT0gMCB8fAogIAkgICAgKHIgPSBzc2hf Z3NzYXBpX2dldF9idWZmZXJfZGVzYyhtLCAmbWljKSkgIT0gMCkKLUBAIC0yMTE0LDEzICsyMTUw LDE3IEBAIG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWMoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywg c3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC0yMDk5LDEzICsyMTM0LDE3IEBAIG1tX2Fuc3dlcl9nc3Nf Y2hlY2ttaWMoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICBp bnQKICBtbV9hbnN3ZXJfZ3NzX3VzZXJvayhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1 Y3Qgc3NoYnVmICptKQogIHsKQEAgLTMwMjcsNyArMzA0NSw3IEBAIGluZGV4IDFlNDFkZmE1My4u MDI1YzZhYmJlIDEwMDY0NAogIAogIAlzc2hidWZfcmVzZXQobSk7CiAgCWlmICgociA9IHNzaGJ1 Zl9wdXRfdTMyKG0sIGF1dGhlbnRpY2F0ZWQpKSAhPSAwKQotQEAgLTIxMjksNyArMjE2OSwxMSBA QCBtbV9hbnN3ZXJfZ3NzX3VzZXJvayhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qg c3NoYnVmICptKQorQEAgLTIxMTQsNyArMjE1MywxMSBAQCBtbV9hbnN3ZXJfZ3NzX3VzZXJvayhz dHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQogIAlkZWJ1ZzNfZigi c2VuZGluZyByZXN1bHQgJWQiLCBhdXRoZW50aWNhdGVkKTsKICAJbW1fcmVxdWVzdF9zZW5kKHNv Y2ssIE1PTklUT1JfQU5TX0dTU1VTRVJPSywgbSk7CiAgCkBAIC0zMDQwLDcgKzMwNTgsNyBAQCBp bmRleCAxZTQxZGZhNTMuLjAyNWM2YWJiZSAxMDA2NDQKICAKICAJaWYgKChkaXNwbGF5bmFtZSA9 IHNzaF9nc3NhcGlfZGlzcGxheW5hbWUoKSkgIT0gTlVMTCkKICAJCWF1dGgyX3JlY29yZF9pbmZv KGF1dGhjdHh0LCAiJXMiLCBkaXNwbGF5bmFtZSk7Ci1AQCAtMjEzNyw1ICsyMTgxLDg0IEBAIG1t X2Fuc3dlcl9nc3NfdXNlcm9rKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hi dWYgKm0pCitAQCAtMjEyMiw1ICsyMTY1LDg0IEBAIG1tX2Fuc3dlcl9nc3NfdXNlcm9rKHN0cnVj dCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCS8qIE1vbml0b3IgbG9v cCB3aWxsIHRlcm1pbmF0ZSBpZiBhdXRoZW50aWNhdGVkICovCiAgCXJldHVybiAoYXV0aGVudGlj YXRlZCk7CiAgfQpAQCAtMzEzOSwxMCArMzE1NywxMCBAQCBpbmRleCAxYjQ2ZTc5NGUuLjc1YTBk NjE4MSAxMDA2NDQKICAKICBzdHJ1Y3Qgc3NoOwogZGlmZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5j IGIvbW9uaXRvcl93cmFwLmMKLWluZGV4IGYzYzM0MWJjNy4uNDk2ZGU0MzZlIDEwMDY0NAoraW5k ZXggYWYwMjUyOTY0Li4yYjA0NGYzODMgMTAwNjQ0CiAtLS0gYS9tb25pdG9yX3dyYXAuYwogKysr IGIvbW9uaXRvcl93cmFwLmMKLUBAIC0xMTYyLDEzICsxMTYyLDE1IEBAIG1tX3NzaF9nc3NhcGlf Y2hlY2ttaWMoR3NzY3R4dCAqY3R4LCBnc3NfYnVmZmVyX3QgZ3NzYnVmLCBnc3NfYnVmZmVyX3Qg Z3NzbWljKQorQEAgLTExMTIsMTMgKzExMTIsMTUgQEAgbW1fc3NoX2dzc2FwaV9jaGVja21pYyhH c3NjdHh0ICpjdHgsIGdzc19idWZmZXJfdCBnc3NidWYsIGdzc19idWZmZXJfdCBnc3NtaWMpCiAg fQogIAogIGludApAQCAtMzE1OSw3ICszMTc3LDcgQEAgaW5kZXggZjNjMzQxYmM3Li40OTZkZTQz NmUgMTAwNjQ0CiAgCiAgCW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklU T1JfUkVRX0dTU1VTRVJPSywgbSk7CiAgCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBlY3QocG1vbml0 b3ItPm1fcmVjdmZkLAotQEAgLTExODEsNiArMTE4Myw1OSBAQCBtbV9zc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICp1c2VyKQorQEAgLTExMzEsNiArMTEzMyw1OSBAQCBtbV9zc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICp1c2VyKQogIAlkZWJ1ZzNfZigidXNlciAlc2F1dGhlbnRpY2F0ZWQiLCBhdXRoZW50 aWNhdGVkID8gIiIgOiAibm90ICIpOwogIAlyZXR1cm4gKGF1dGhlbnRpY2F0ZWQpOwogIH0KQEAg LTMyMjAsNyArMzIzOCw3IEBAIGluZGV4IGYzYzM0MWJjNy4uNDk2ZGU0MzZlIDEwMDY0NAogIAog IC8qCiBkaWZmIC0tZ2l0IGEvbW9uaXRvcl93cmFwLmggYi9tb25pdG9yX3dyYXAuaAotaW5kZXgg M2UwOGRkZDc4Li5hNzA4YmY0ZDggMTAwNjQ0CitpbmRleCAzMDU4NTE4N2MuLjA3YjIwN2QxZCAx MDA2NDQKIC0tLSBhL21vbml0b3Jfd3JhcC5oCiArKysgYi9tb25pdG9yX3dyYXAuaAogQEAgLTcy LDggKzcyLDEwIEBAIHZvaWQgbW1fZGVjb2RlX2FjdGl2YXRlX3NlcnZlcl9vcHRpb25zKHN0cnVj dCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqbSk7CkBAIC0zMjM2LDcgKzMyNTQsNyBAQCBpbmRl eCAzZTA4ZGRkNzguLmE3MDhiZjRkOCAxMDA2NDQKICAKICAjaWZkZWYgVVNFX1BBTQogZGlmZiAt LWdpdCBhL3JlYWRjb25mLmMgYi9yZWFkY29uZi5jCi1pbmRleCAxMGNiZDA0YmEuLjkwMDQwNzZl NCAxMDA2NDQKK2luZGV4IDc0NjUyMTZmMy4uOTkyYzc4ODY2IDEwMDY0NAogLS0tIGEvcmVhZGNv bmYuYwogKysrIGIvcmVhZGNvbmYuYwogQEAgLTU3LDYgKzU3LDcgQEAKQEAgLTMzMjIsNyArMzM0 MCw3IEBAIGluZGV4IDEwY2JkMDRiYS4uOTAwNDA3NmU0IDEwMDY0NAogIAljYXNlIG9CYXRjaE1v ZGU6CiAgCQlpbnRwdHIgPSAmb3B0aW9ucy0+YmF0Y2hfbW9kZTsKICAJCWdvdG8gcGFyc2VfZmxh ZzsKLUBAIC0yNzE4LDcgKzI3NjUsMTMgQEAgaW5pdGlhbGl6ZV9vcHRpb25zKE9wdGlvbnMgKiBv cHRpb25zKQorQEAgLTI3MTksNyArMjc2NiwxMyBAQCBpbml0aWFsaXplX29wdGlvbnMoT3B0aW9u cyAqIG9wdGlvbnMpCiAgCW9wdGlvbnMtPmZ3ZF9vcHRzLnN0cmVhbWxvY2FsX2JpbmRfdW5saW5r ID0gLTE7CiAgCW9wdGlvbnMtPnB1YmtleV9hdXRoZW50aWNhdGlvbiA9IC0xOwogIAlvcHRpb25z LT5nc3NfYXV0aGVudGljYXRpb24gPSAtMTsKQEAgLTMzMzYsNyArMzM1NCw3IEBAIGluZGV4IDEw Y2JkMDRiYS4uOTAwNDA3NmU0IDEwMDY0NAogIAlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNh dGlvbiA9IC0xOwogIAlvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPSAt MTsKICAJb3B0aW9ucy0+a2JkX2ludGVyYWN0aXZlX2RldmljZXMgPSBOVUxMOwotQEAgLTI4ODQs OCArMjkzNywxOCBAQCBmaWxsX2RlZmF1bHRfb3B0aW9ucyhPcHRpb25zICogb3B0aW9ucykKK0BA IC0yODg1LDggKzI5MzgsMTggQEAgZmlsbF9kZWZhdWx0X29wdGlvbnMoT3B0aW9ucyAqIG9wdGlv bnMpCiAgCQlvcHRpb25zLT5wdWJrZXlfYXV0aGVudGljYXRpb24gPSBTU0hfUFVCS0VZX0FVVEhf QUxMOwogIAlpZiAob3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID09IC0xKQogIAkJb3B0aW9u cy0+Z3NzX2F1dGhlbnRpY2F0aW9uID0gMDsKQEAgLTMzNTUsNyArMzM3Myw3IEBAIGluZGV4IDEw Y2JkMDRiYS4uOTAwNDA3NmU0IDEwMDY0NAogIAlpZiAob3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVu dGljYXRpb24gPT0gLTEpCiAgCQlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9IDE7 CiAgCWlmIChvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPT0gLTEpCi1A QCAtMzc2NSw3ICszODI4LDE0IEBAIGR1bXBfY2xpZW50X2NvbmZpZyhPcHRpb25zICpvLCBjb25z dCBjaGFyICpob3N0KQorQEAgLTM3NjYsNyArMzgyOSwxNCBAQCBkdW1wX2NsaWVudF9jb25maWco T3B0aW9ucyAqbywgY29uc3QgY2hhciAqaG9zdCkKICAJZHVtcF9jZmdfZm10aW50KG9HYXRld2F5 UG9ydHMsIG8tPmZ3ZF9vcHRzLmdhdGV3YXlfcG9ydHMpOwogICNpZmRlZiBHU1NBUEkKICAJZHVt cF9jZmdfZm10aW50KG9Hc3NBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0aW9uKTsK QEAgLTMzODksNyArMzQwNyw3IEBAIGluZGV4IGRiY2I0MTcyNS4uOGIwYzk4YWNmIDEwMDY0NAog IAkJCQkJCSAqIGF1dGhlbnRpY2F0aW9uLiAqLwogIAlpbnQgICAgIGtiZF9pbnRlcmFjdGl2ZV9h dXRoZW50aWNhdGlvbjsgLyogVHJ5IGtleWJvYXJkLWludGVyYWN0aXZlIGF1dGguICovCiBkaWZm IC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKLWluZGV4IDY2ODI1OWEyMC4uZGUzZmE5 NDgxIDEwMDY0NAoraW5kZXggZTc4MTlkNTlhLi5mMjhkMTkxOTQgMTAwNjQ0CiAtLS0gYS9zZXJ2 Y29uZi5jCiArKysgYi9zZXJ2Y29uZi5jCiBAQCAtNjIsNiArNjIsNyBAQApAQCAtMzM5OCw5NSAr MzQxNiw0MCBAQCBpbmRleCA2NjgyNTlhMjAuLmRlM2ZhOTQ4MSAxMDA2NDQKICAjaW5jbHVkZSAi dmVyc2lvbi5oIgogKyNpbmNsdWRlICJzc2gtZ3NzLmgiCiAgCi0gI2lmICFkZWZpbmVkKFNTSERf UEFNX1NFUlZJQ0UpCi0gIyBkZWZpbmUgU1NIRF9QQU1fU0VSVklDRQkJInNzaGQiCi1AQCAtMTMx LDkgKzEzMiwxMiBAQCBpbml0aWFsaXplX3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9w dGlvbnMpCi0gCW9wdGlvbnMtPmtlcmJlcm9zX3RpY2tldF9jbGVhbnVwID0gLTE7Ci0gCW9wdGlv bnMtPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4gPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2F1dGhlbnRp Y2F0aW9uPS0xOwotKwlvcHRpb25zLT5nc3Nfa2V5ZXggPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2Ns ZWFudXBfY3JlZHMgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0gLTE7Ci0gCW9w dGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAtMTsKLSsJb3B0aW9ucy0+Z3NzX3N0b3JlX3Jl a2V5ID0gLTE7Ci0rCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IE5VTEw7Ci0gCW9wdGlv bnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID0gLTE7Ci0gCW9wdGlvbnMtPmtiZF9pbnRlcmFj dGl2ZV9hdXRoZW50aWNhdGlvbiA9IC0xOwotIAlvcHRpb25zLT5wZXJtaXRfZW1wdHlfcGFzc3dk ID0gLTE7Ci1AQCAtMzcyLDEyICszNzYsMjAgQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25z KFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gCQlvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rv a2VuID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9PSAtMSkKLSAJCW9w dGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IDA7Ci0rCWlmIChvcHRpb25zLT5nc3Nfa2V5ZXgg PT0gLTEpCi0rCQlvcHRpb25zLT5nc3Nfa2V5ZXggPSAwOwotIAlpZiAob3B0aW9ucy0+Z3NzX2Ns ZWFudXBfY3JlZHMgPT0gLTEpCi0gCQlvcHRpb25zLT5nc3NfY2xlYW51cF9jcmVkcyA9IDE7Ci0g CWlmIChvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPT0gLTEpCi0gCQlvcHRpb25zLT5nc3NfZGVs ZWdfY3JlZHMgPSAxOwotIAlpZiAob3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9PSAtMSkK LSAJCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAxOwotKwlpZiAob3B0aW9ucy0+Z3Nz X3N0b3JlX3Jla2V5ID09IC0xKQotKwkJb3B0aW9ucy0+Z3NzX3N0b3JlX3Jla2V5ID0gMDsKKyAj ZGVmaW5lIFNTSERfQ09ORklHX0JMT0JfVkVSU0lPTgkxCisgCitAQCAtMzM1LDYgKzMzNiwxMCBA QCBmaWxsX2RlZmF1bHRfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKKyAJ CW9wdGlvbnMtPmxvZ19mYWNpbGl0eSA9IFNZU0xPR19GQUNJTElUWV9BVVRIOworIAlpZiAob3B0 aW9ucy0+bG9nX2xldmVsID09IFNZU0xPR19MRVZFTF9OT1RfU0VUKQorIAkJb3B0aW9ucy0+bG9n X2xldmVsID0gU1lTTE9HX0xFVkVMX0lORk87CiArI2lmZGVmIEdTU0FQSQogKwlpZiAob3B0aW9u cy0+Z3NzX2tleF9hbGdvcml0aG1zID09IE5VTEwpCiArCQlvcHRpb25zLT5nc3Nfa2V4X2FsZ29y aXRobXMgPSBzdHJkdXAoR1NTX0tFWF9ERUZBVUxUX0tFWCk7CiArI2VuZGlmCi0gCWlmIChvcHRp b25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9PSAtMSkKLSAJCW9wdGlvbnMtPnBhc3N3b3Jk X2F1dGhlbnRpY2F0aW9uID0gMTsKLSAJaWYgKG9wdGlvbnMtPmtiZF9pbnRlcmFjdGl2ZV9hdXRo ZW50aWNhdGlvbiA9PSAtMSkKLUBAIC01NjUsNiArNTc3LDcgQEAgdHlwZWRlZiBlbnVtIHsKLSAJ c1BlclNvdXJjZVBlbmFsdGllcywgc1BlclNvdXJjZVBlbmFsdHlFeGVtcHRMaXN0LAotIAlzQ2xp ZW50QWxpdmVJbnRlcnZhbCwgc0NsaWVudEFsaXZlQ291bnRNYXgsIHNBdXRob3JpemVkS2V5c0Zp bGUsCi0gCXNHc3NBdXRoZW50aWNhdGlvbiwgc0dzc0NsZWFudXBDcmVkcywgc0dzc0RlbGVnYXRl Q3JlZHMsIHNHc3NTdHJpY3RBY2NlcHRvciwKLSsJc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGht cywgc0dzc1N0b3JlUmVrZXksCi0gCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWws Ci0gCXNNYXRjaCwgc1Blcm1pdE9wZW4sIHNQZXJtaXRMaXN0ZW4sIHNGb3JjZUNvbW1hbmQsIHND aHJvb3REaXJlY3RvcnksCi0gCXNVc2VQcml2aWxlZ2VTZXBhcmF0aW9uLCBzQWxsb3dBZ2VudEZv cndhcmRpbmcsCi1AQCAtNjUwLDE0ICs2NjMsMjQgQEAgc3RhdGljIHN0cnVjdCB7Ci0gI2lmZGVm IEdTU0FQSQotIAl7ICJnc3NhcGlhdXRoZW50aWNhdGlvbiIsIHNHc3NBdXRoZW50aWNhdGlvbiwg U1NIQ0ZHX0FMTCB9LAotIAl7ICJnc3NhcGljbGVhbnVwY3JlZGVudGlhbHMiLCBzR3NzQ2xlYW51 cENyZWRzLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgImdzc2FwaWNsZWFudXBjcmVkcyIsIHNHc3ND bGVhbnVwQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpZGVsZWdhdGVjcmVkZW50 aWFscyIsIHNHc3NEZWxlZ2F0ZUNyZWRzLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0 cmljdGFjY2VwdG9yY2hlY2siLCBzR3NzU3RyaWN0QWNjZXB0b3IsIFNTSENGR19HTE9CQUwgfSwK LSsJeyAiZ3NzYXBpa2V5ZXhjaGFuZ2UiLCBzR3NzS2V5RXgsIFNTSENGR19HTE9CQUwgfSwKLSsJ eyAiZ3NzYXBpc3RvcmVjcmVkZW50aWFsc29ucmVrZXkiLCBzR3NzU3RvcmVSZWtleSwgU1NIQ0ZH X0dMT0JBTCB9LAotKwl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwgc0dzc0tleEFsZ29yaXRobXMs IFNTSENGR19HTE9CQUwgfSwKLSAjZWxzZQotIAl7ICJnc3NhcGlhdXRoZW50aWNhdGlvbiIsIHNV bnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJnc3NhcGljbGVhbnVwY3JlZGVudGlhbHMi LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZ3NzYXBpY2xlYW51cGNyZWRz Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWRlbGVnYXRlY3Jl ZGVudGlhbHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpc3Ry aWN0YWNjZXB0b3JjaGVjayIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJn c3NhcGlrZXlleGNoYW5nZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJn c3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JB TCB9LAotKwl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xP QkFMIH0sCi0gI2VuZGlmCi0rCXsgImdzc3VzZXNlc3Npb25jY2FjaGUiLCBzVW5zdXBwb3J0ZWQs IFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZ3NzYXBpdXNlc2Vzc2lvbmNyZWRjYWNoZSIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJwYXNzd29yZGF1dGhlbnRpY2F0aW9uIiwg c1Bhc3N3b3JkQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwgfSwKLSAJeyAia2JkaW50ZXJhY3Rp dmVhdXRoZW50aWNhdGlvbiIsIHNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLCBTU0hDRkdf QUxMIH0sCi0gCXsgImNoYWxsZW5nZXJlc3BvbnNlYXV0aGVudGljYXRpb24iLCBzS2JkSW50ZXJh Y3RpdmVBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCB9LCAvKiBhbGlhcyAqLwotQEAgLTE2NTAs NiArMTY3MywxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRp b25zICpvcHRpb25zLCBjaGFyICpsaW5lLAorIAlpZiAob3B0aW9ucy0+cGVybWl0X3VzZXJfZW52 ID09IC0xKSB7CisgCQlvcHRpb25zLT5wZXJtaXRfdXNlcl9lbnYgPSAwOworIAkJb3B0aW9ucy0+ cGVybWl0X3VzZXJfZW52X2FsbG93bGlzdCA9IE5VTEw7CitAQCAtMTQzNSw2ICsxNDQwLDEwIEBA IHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMs IGNoYXIgKmxpbmUsCiAgCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uOwog IAkJZ290byBwYXJzZV9mbGFnOwogIAotKwljYXNlIHNHc3NLZXlFeDoKKysJY2FzZSBzR1NTQVBJ S2V5RXhjaGFuZ2U6CiArCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2tleWV4OwogKwkJZ290byBw YXJzZV9mbGFnOwogKwotIAljYXNlIHNHc3NDbGVhbnVwQ3JlZHM6CisgCWNhc2Ugc0dTU0FQSUNs ZWFudXBDcmVkZW50aWFsczoKICAJCWludHB0ciA9ICZvcHRpb25zLT5nc3NfY2xlYW51cF9jcmVk czsKICAJCWdvdG8gcGFyc2VfZmxhZzsKLUBAIC0xNjYyLDYgKzE2ODksMjIgQEAgcHJvY2Vzc19z ZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGlu ZSwKK0BAIC0xNDQ2LDYgKzE0NTUsMjIgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVw dGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwKKyAJY2FzZSBzR1NTQVBJU3Ry aWN0QWNjZXB0b3JDaGVjazoKICAJCWludHB0ciA9ICZvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2Vw dG9yOwogIAkJZ290byBwYXJzZV9mbGFnOwotIAotKwljYXNlIHNHc3NTdG9yZVJla2V5OgorKwor KwljYXNlIHNHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtleToKICsJCWludHB0ciA9ICZvcHRp b25zLT5nc3Nfc3RvcmVfcmVrZXk7CiArCQlnb3RvIHBhcnNlX2ZsYWc7CiArCi0rCWNhc2Ugc0dz c0tleEFsZ29yaXRobXM6CisrCWNhc2Ugc0dTU0FQSUtleEFsZ29yaXRobXM6CiArCQlhcmcgPSBh cmd2X25leHQoJmFjLCAmYXYpOwogKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQogKwkJCWZh dGFsKCIlLjIwMHMgbGluZSAlZDogTWlzc2luZyBhcmd1bWVudC4iLApAQCAtMzQ5Nyw0MyArMzQ2 MCw1MyBAQCBpbmRleCA2NjgyNTlhMjAuLmRlM2ZhOTQ4MSAxMDA2NDQKICsJCWlmICgqYWN0aXZl cCAmJiBvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPT0gTlVMTCkKICsJCQlvcHRpb25zLT5n c3Nfa2V4X2FsZ29yaXRobXMgPSB4c3RyZHVwKGFyZyk7CiArCQlicmVhazsKLSsKKyAjZW5kaWYg LyogR1NTQVBJICovCisgCiAgCWNhc2Ugc1Bhc3N3b3JkQXV0aGVudGljYXRpb246Ci0gCQlpbnRw dHIgPSAmb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb247Ci0gCQlnb3RvIHBhcnNlX2Zs YWc7Ci1AQCAtMzI5MSw3ICszMzM0LDEwIEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8p Ci0gCWR1bXBfY2ZnX2ZtdGludChzR3NzQXV0aGVudGljYXRpb24sIG8tPmdzc19hdXRoZW50aWNh dGlvbik7Ci0gCWR1bXBfY2ZnX2ZtdGludChzR3NzQ2xlYW51cENyZWRzLCBvLT5nc3NfY2xlYW51 cF9jcmVkcyk7Ci0gCWR1bXBfY2ZnX2ZtdGludChzR3NzRGVsZWdhdGVDcmVkcywgby0+Z3NzX2Rl bGVnX2NyZWRzKTsKLSsJZHVtcF9jZmdfZm10aW50KHNHc3NLZXlFeCwgby0+Z3NzX2tleWV4KTsK LSAJZHVtcF9jZmdfZm10aW50KHNHc3NTdHJpY3RBY2NlcHRvciwgby0+Z3NzX3N0cmljdF9hY2Nl cHRvcik7Ci0rCWR1bXBfY2ZnX2ZtdGludChzR3NzU3RvcmVSZWtleSwgby0+Z3NzX3N0b3JlX3Jl a2V5KTsKLSsJZHVtcF9jZmdfc3RyaW5nKHNHc3NLZXhBbGdvcml0aG1zLCBvLT5nc3Nfa2V4X2Fs Z29yaXRobXMpOworQEAgLTQyMTcsNyArNDI0MiwxMCBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRp b25zICpvKQorIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSUF1dGhlbnRpY2F0aW9uLCBvLT5nc3Nf YXV0aGVudGljYXRpb24pOworIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSUNsZWFudXBDcmVkZW50 aWFscywgby0+Z3NzX2NsZWFudXBfY3JlZHMpOworIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSURl bGVnYXRlQ3JlZGVudGlhbHMsIG8tPmdzc19kZWxlZ19jcmVkcyk7CisrCWR1bXBfY2ZnX2ZtdGlu dChzR1NTQVBJS2V5RXhjaGFuZ2UsIG8tPmdzc19rZXlleCk7CisgCWR1bXBfY2ZnX2ZtdGludChz R1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjaywgby0+Z3NzX3N0cmljdF9hY2NlcHRvcik7CisrCWR1 bXBfY2ZnX2ZtdGludChzR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXksIG8tPmdzc19zdG9y ZV9yZWtleSk7CisrCWR1bXBfY2ZnX3N0cmluZyhzR1NTQVBJS2V4QWxnb3JpdGhtcywgby0+Z3Nz X2tleF9hbGdvcml0aG1zKTsKICAjZW5kaWYKICAJZHVtcF9jZmdfZm10aW50KHNQYXNzd29yZEF1 dGhlbnRpY2F0aW9uLCBvLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbik7CiAgCWR1bXBfY2ZnX2Zt dGludChzS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiwKIGRpZmYgLS1naXQgYS9zZXJ2Y29u Zi5oIGIvc2VydmNvbmYuaAotaW5kZXggYjA2ZGIwOWUxLi43NjY0MWQ1ODAgMTAwNjQ0CitpbmRl eCAzNjQ4ZTJiZTEuLmM2ZGE3OWY1MyAxMDA2NDQKIC0tLSBhL3NlcnZjb25mLmgKICsrKyBiL3Nl cnZjb25mLmgKLUBAIC0xNTEsOSArMTUxLDEyIEBAIHR5cGVkZWYgc3RydWN0IHsKLSAJaW50ICAg ICBrZXJiZXJvc19nZXRfYWZzX3Rva2VuOwkJLyogSWYgdHJ1ZSwgdHJ5IHRvIGdldCBBRlMgdG9r ZW4gaWYKLSAJCQkJCQkgKiBhdXRoZW50aWNhdGVkIHdpdGggS2VyYmVyb3MuICovCi0gCWludCAg ICAgZ3NzX2F1dGhlbnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1dGhlbnRp Y2F0aW9uICovCi0rCWludCAgICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQ SSBrZXkgZXhjaGFuZ2UgKi8KLSAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyogSWYgdHJ1 ZSwgZGVzdHJveSBjcmVkIGNhY2hlIG9uIGxvZ291dCAqLwotIAlpbnQgICAgIGdzc19kZWxlZ19j cmVkczsJLyogSWYgdHJ1ZSwgYWNjZXB0IGRlbGVnYXRlZCBHU1MgY3JlZGVudGlhbHMgKi8KLSAJ aW50ICAgICBnc3Nfc3RyaWN0X2FjY2VwdG9yOwkvKiBJZiB0cnVlLCByZXN0cmljdCB0aGUgR1NT QVBJIGFjY2VwdG9yIG5hbWUgKi8KLSsJaW50IAlnc3Nfc3RvcmVfcmVrZXk7Ci0rCWNoYXIgICAq Z3NzX2tleF9hbGdvcml0aG1zOwkvKiBHU1NBUEkga2V4IG1ldGhvZHMgdG8gYmUgb2ZmZXJlZCBi eSBjbGllbnQuICovCi0gCWludCAgICAgcGFzc3dvcmRfYXV0aGVudGljYXRpb247CS8qIElmIHRy dWUsIHBlcm1pdCBwYXNzd29yZAotIAkJCQkJCSAqIGF1dGhlbnRpY2F0aW9uLiAqLwotIAlpbnQg ICAgIGtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlvbjsJLyogSWYgdHJ1ZSwgcGVybWl0ICov CitAQCAtMzE2LDE0ICszMTYsMjEgQEAgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3Nf Z2V0X2Fmc190b2tlbiwgS2VyYmVyb3NHZXRBRlNUb2tlbiwgU1NIQ0ZHX0dMT0IKKyAjZGVmaW5l IFNTSERfQ09ORklHX0VOVFJJRVNfR1NTIFwKKyBTU0hDT05GX0lOVEZMQUcoZ3NzX2F1dGhlbnRp Y2F0aW9uLCBHU1NBUElBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlf TUFUQ0gpIFwKKyBTU0hDT05GX0lOVEZMQUcoZ3NzX2NsZWFudXBfY3JlZHMsIEdTU0FQSUNsZWFu dXBDcmVkZW50aWFscywgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorK1NT SENPTkZfQUxJQVMoR1NTQVBJQ2xlYW51cENyZWRzLCBHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMs IFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX0lOVEZMQUcoZ3NzX2RlbGVnX2NyZWRzLCBHU1NB UElEZWxlZ2F0ZUNyZWRlbnRpYWxzLCBTU0hDRkdfR0xPQkFMLCAxLCBTU0hDRkdfQ09QWV9OT05F KSBcCistU1NIQ09ORl9JTlRGTEFHKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0cmljdEFj Y2VwdG9yQ2hlY2ssIFNTSENGR19HTE9CQUwsIDEsIFNTSENGR19DT1BZX05PTkUpCisrU1NIQ09O Rl9JTlRGTEFHKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0cmljdEFjY2VwdG9yQ2hlY2ss IFNTSENGR19HTE9CQUwsIDEsIFNTSENGR19DT1BZX05PTkUpIFwKKytTU0hDT05GX0lOVEZMQUco Z3NzX2tleWV4LCBHU1NBUElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NP UFlfTk9ORSkgXAorK1NTSENPTkZfSU5URkxBRyhnc3Nfc3RvcmVfcmVrZXksIEdTU0FQSVN0b3Jl Q3JlZGVudGlhbHNPblJla2V5LCBTU0hDRkdfR0xPQkFMLCAwLCBTU0hDRkdfQ09QWV9OT05FKSBc CisrU1NIQ09ORl9TVFJJTkcoZ3NzX2tleF9hbGdvcml0aG1zLCBHU1NBUElLZXhBbGdvcml0aG1z LCBTU0hDRkdfR0xPQkFMLCBTU0hDRkdfQ09QWV9OT05FKQorICNlbHNlIC8qIEdTU0FQSSAqLwor ICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFU19HU1MgXAorIFNTSENPTkZfVU5TVVBQT1JURURf SU5UKGdzc19hdXRoZW50aWNhdGlvbiwgR1NTQVBJQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwp IFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3NfY2xlYW51cF9jcmVkcywgR1NTQVBJQ2xl YW51cENyZWRlbnRpYWxzLCBTU0hDRkdfR0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9J TlQoZ3NzX2RlbGVnX2NyZWRzLCBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzLCBTU0hDRkdfR0xP QkFMKSBcCistU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX3N0cmljdF9hY2NlcHRvciwgR1NT QVBJU3RyaWN0QWNjZXB0b3JDaGVjaywgU1NIQ0ZHX0dMT0JBTCkKKytTU0hDT05GX1VOU1VQUE9S VEVEX0lOVChnc3Nfc3RyaWN0X2FjY2VwdG9yLCBHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrLCBT U0hDRkdfR0xPQkFMKSBcCisrU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2tleWV4LCBHU1NB UElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCkgXAorK1NTSENPTkZfVU5TVVBQT1JURURfSU5U KGdzc19zdG9yZV9yZWtleSwgR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXksIFNTSENGR19H TE9CQUwpIFwKKytTU0hDT05GX1VOU1VQUE9SVEVEX1NUUklORyhnc3Nfa2V4X2FsZ29yaXRobXMs IEdTU0FQSUtleEFsZ29yaXRobXMsIFNTSENGR19HTE9CQUwpCisgI2VuZGlmIC8qIEdTU0FQSSAq LworIAorICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFUyBcCiBkaWZmIC0tZ2l0IGEvc2Vzc2lv bi5jIGIvc2Vzc2lvbi5jCi1pbmRleCA5M2RlMzVkN2MuLmYxNGQ1ZmFiOCAxMDA2NDQKK2luZGV4 IGZjOWM5ZDZmOC4uN2I3NmYxZjcxIDEwMDY0NAogLS0tIGEvc2Vzc2lvbi5jCiArKysgYi9zZXNz aW9uLmMKLUBAIC0yNjM4LDEzICsyNjM4LDE5IEBAIGRvX2NsZWFudXAoc3RydWN0IHNzaCAqc3No LCBBdXRoY3R4dCAqYXV0aGN0eHQpCitAQCAtMjY0MiwxMyArMjY0MiwxOSBAQCBkb19jbGVhbnVw KHN0cnVjdCBzc2ggKnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0KQogIAogICNpZmRlZiBLUkI1CiAg CWlmIChvcHRpb25zLmtlcmJlcm9zX3RpY2tldF9jbGVhbnVwICYmCkBAIC0zNjg0LDI2ICszNjU3 LDEwIEBAIGluZGV4IDdiMTRlNzRhOC4uOGVjNDUxOTI2IDEwMDY0NAogIAogICNlbmRpZiAvKiBf U1NIX0dTU19IICovCiBkaWZmIC0tZ2l0IGEvc3NoLjEgYi9zc2guMQotaW5kZXggYzJjOGY1MGYx Li5iNWQwYTFkMDkgMTAwNjQ0CitpbmRleCAwODliZDM0OGEuLmE2MWIwYWJmYSAxMDA2NDQKIC0t LSBhL3NzaC4xCiArKysgYi9zc2guMQotQEAgLTU0Myw5ICs1NDMsMTUgQEAgRm9yIGZ1bGwgZGV0 YWlscyBvZiB0aGUgb3B0aW9ucyBsaXN0ZWQgYmVsb3csIGFuZCB0aGVpciBwb3NzaWJsZSB2YWx1 ZXMsIHNlZQotIC5JdCBGb3J3YXJkWDExVGltZW91dAotIC5JdCBGb3J3YXJkWDExVHJ1c3RlZAot IC5JdCBHU1NBUElBdXRoZW50aWNhdGlvbgotKy5JdCBHU1NBUElLZXlFeGNoYW5nZQotKy5JdCBH U1NBUElDbGllbnRJZGVudGl0eQotIC5JdCBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCi0gLkl0 IEdhdGV3YXlQb3J0cwotIC5JdCBHbG9iYWxLbm93bkhvc3RzRmlsZQotKy5JdCBHU1NBUElLZXhB bGdvcml0aG1zCi0rLkl0IEdTU0FQSVJlbmV3YWxGb3JjZXNSZWtleQotKy5JdCBHU1NBUElTZXJ2 ZXJJZGVudGl0eQotKy5JdCBHU1NBUElUcnVzdERucwotIC5JdCBIYXNoS25vd25Ib3N0cwotIC5J dCBIb3N0Ci0gLkl0IEhvc3RLZXlBbGdvcml0aG1zCi1AQCAtNjQwLDYgKzY0Niw4IEBAIGZsYWcp LAorQEAgLTUzOSw2ICs1MzksOCBAQCBmbGFnKSwKICAoc3VwcG9ydGVkIG1lc3NhZ2UgaW50ZWdy aXR5IGNvZGVzKSwKICAuQXIga2V4CiAgKGtleSBleGNoYW5nZSBhbGdvcml0aG1zKSwKQEAgLTM3 MTMsMTAgKzM2NzAsMTAgQEAgaW5kZXggYzJjOGY1MGYxLi5iNWQwYTFkMDkgMTAwNjQ0CiAgKGtl eSB0eXBlcyksCiAgLkFyIGtleS1jYS1zaWduCiBkaWZmIC0tZ2l0IGEvc3NoLmMgYi9zc2guYwot aW5kZXggNTMxZjI4ZWIyLi5iYzNiZThmOGUgMTAwNjQ0CitpbmRleCBlOWY5OWM0MzMuLmI5YTU5 Y2E0MyAxMDA2NDQKIC0tLSBhL3NzaC5jCiArKysgYi9zc2guYwotQEAgLTgwNSw2ICs4MDUsOSBA QCBtYWluKGludCBhYywgY2hhciAqKmF2KQorQEAgLTc5MCw2ICs3OTAsOSBAQCBtYWluKGludCBh YywgY2hhciAqKmF2KQogIAkJCWVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJrZXgiKSA9PSAwIHx8 CiAgCQkJICAgIHN0cmNhc2VjbXAob3B0YXJnLCAiS2V4QWxnb3JpdGhtcyIpID09IDApCiAgCQkJ CWNwID0ga2V4X2FsZ19saXN0KCdcbicpOwpAQCAtMzcyNiw3ICszNjgzLDcgQEAgaW5kZXggNTMx ZjI4ZWIyLi5iYzNiZThmOGUgMTAwNjQ0CiAgCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImtl eSIpID09IDApCiAgCQkJCWNwID0gc3Noa2V5X2FsZ19saXN0KDAsIDAsIDAsICdcbicpOwogIAkJ CWVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJrZXktY2VydCIpID09IDApCi1AQCAtODM1LDggKzgz Nyw4IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCitAQCAtODIwLDggKzgyMyw4IEBAIG1haW4o aW50IGFjLCBjaGFyICoqYXYpCiAgCQkJfSBlbHNlIGlmIChzdHJjbXAob3B0YXJnLCAiaGVscCIp ID09IDApIHsKICAJCQkJY3AgPSB4c3RyZHVwKAogIAkJCQkgICAgImNpcGhlclxuY2lwaGVyLWF1 dGhcbmNvbXByZXNzaW9uXG5rZXhcbiIKQEAgLTM3NTEsMTAgKzM3MDgsMTAgQEAgaW5kZXggZDkz MjRjOTU3Li5jYTdjNTg1M2IgMTAwNjQ0CiAgIyAgIENoZWNrSG9zdElQIG5vCiAgIyAgIEFkZHJl c3NGYW1pbHkgYW55CiBkaWZmIC0tZ2l0IGEvc3NoX2NvbmZpZy41IGIvc3NoX2NvbmZpZy41Ci1p bmRleCBiNDU5YjA0NDkuLjllNTE2Mzc3NCAxMDA2NDQKK2luZGV4IGJkYWE0OWM4MS4uMDQ3OTdh MWU5IDEwMDY0NAogLS0tIGEvc3NoX2NvbmZpZy41CiArKysgYi9zc2hfY29uZmlnLjUKLUBAIC05 NzYsMTAgKzk3Niw3MSBAQCBUaGUgZGVmYXVsdCBpcworQEAgLTEwMTQsMTAgKzEwMTQsNzEgQEAg VGhlIGRlZmF1bHQgaXMKICBTcGVjaWZpZXMgd2hldGhlciB1c2VyIGF1dGhlbnRpY2F0aW9uIGJh c2VkIG9uIEdTU0FQSSBpcyBhbGxvd2VkLgogIFRoZSBkZWZhdWx0IGlzCiAgLkNtIG5vIC4KQEAg LTM4MjcsMTAgKzM3ODQsMTAgQEAgaW5kZXggYjQ1OWIwNDQ5Li45ZTUxNjM3NzQgMTAwNjQ0CiAg SW5kaWNhdGVzIHRoYXQKICAuWHIgc3NoIDEKIGRpZmYgLS1naXQgYS9zc2hjb25uZWN0Mi5jIGIv c3NoY29ubmVjdDIuYwotaW5kZXggNDc4YTlhNTJmLi4zMWJiYzBlZDggMTAwNjQ0CitpbmRleCAw ZDQ4ODg0MDIuLjU0NTljYWEwYyAxMDA2NDQKIC0tLSBhL3NzaGNvbm5lY3QyLmMKICsrKyBiL3Nz aGNvbm5lY3QyLmMKLUBAIC0yMjMsNiArMjIzLDExIEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNz aCwgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICpob3N0YWRkciwgdV9zaG9ydCBwb3J0LAor QEAgLTIyMyw2ICsyMjMsMTEgQEAgc3NoX2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0 LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFkZHIsCiAgCWNoYXIgKmFsbF9rZXksICpo a2FsZ3MgPSBOVUxMOwogIAlpbnQgciwgdXNlX2tub3duX2hvc3RzX29yZGVyID0gMDsKICAKQEAg LTM4MzksMTAgKzM3OTYsMTAgQEAgaW5kZXggNDc4YTlhNTJmLi4zMWJiYzBlZDggMTAwNjQ0CiAr CWNoYXIgKmdzc19ob3N0ID0gTlVMTDsKICsjZW5kaWYKICsKLSAJeHh4X2hvc3QgPSBob3N0Owot IAl4eHhfaG9zdGFkZHIgPSBob3N0YWRkcjsKLSAJeHh4X2Nvbm5faW5mbyA9IGNpbmZvOwotQEAg LTI1Niw2ICsyNjEsNDIgQEAgc3NoX2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBz dHJ1Y3Qgc29ja2FkZHIgKmhvc3RhZGRyLCB1X3Nob3J0IHBvcnQsCisgCXh4eF9ob3N0ID0geHN0 cmR1cChob3N0KTsKKyAJeHh4X2hvc3RhZGRyID0gKmhvc3RhZGRyOworIAl4eHhfY29ubl9pbmZv ID0gc3NoX2Nvbm5faW5mb19kdXAoY2luZm8pOworQEAgLTI1Nyw2ICsyNjIsNDIgQEAgc3NoX2tl eDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAq aG9zdGFkZHIsCiAgCSAgICBjb21wcmVzc2lvbl9hbGdfbGlzdChvcHRpb25zLmNvbXByZXNzaW9u KSwKICAJICAgIGhrYWxncyA/IGhrYWxncyA6IG9wdGlvbnMuaG9zdGtleWFsZ29yaXRobXMpOwog IApAQCAtMzg4NSwxMCArMzg0MiwxMCBAQCBpbmRleCA0NzhhOWE1MmYuLjMxYmJjMGVkOCAxMDA2 NDQKICAJZnJlZShoa2FsZ3MpOwogIAogIAkvKiBzdGFydCBrZXkgZXhjaGFuZ2UgKi8KLUBAIC0y NzIsMTUgKzMxMyw0NSBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0 cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKLSAjIGlmZGVmIE9QRU5TU0xf SEFTX0VDQworQEAgLTI3MSwxNiArMzEyLDQ2IEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwg Y2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmhvc3RhZGRyLAorIAlzc2gtPmtl eC0+a2V4W0tFWF9ESF9HRVhfU0hBMV0gPSBrZXhnZXhfY2xpZW50OworIAlzc2gtPmtleC0+a2V4 W0tFWF9ESF9HRVhfU0hBMjU2XSA9IGtleGdleF9jbGllbnQ7CiAgCXNzaC0+a2V4LT5rZXhbS0VY X0VDREhfU0hBMl0gPSBrZXhfZ2VuX2NsaWVudDsKLSAjIGVuZGlmCiAtI2VuZGlmCiArIyBpZmRl ZiBHU1NBUEkKICsJaWYgKG9wdGlvbnMuZ3NzX2tleWV4KSB7CkBAIC0zOTA1LDYgKzM4NjIsNyBA QCBpbmRleCA0NzhhOWE1MmYuLjMxYmJjMGVkOCAxMDA2NDQKICAJc3NoLT5rZXgtPmtleFtLRVhf QzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKICAJc3NoLT5rZXgtPmtleFtLRVhfS0VN X1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9jbGllbnQ7CiAgCXNzaC0+a2V4LT5r ZXhbS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CisgCXNz aC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OEVDREhfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50 OwogIAlzc2gtPmtleC0+dmVyaWZ5X2hvc3Rfa2V5PSZ2ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2s7 CiAgCiArI2lmIGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkKQEAgLTQw NjAsMTAgKzQwMTgsMTAgQEAgaW5kZXggNDc4YTlhNTJmLi4zMWJiYzBlZDggMTAwNjQ0CiAgCiAg c3RhdGljIGludAogZGlmZiAtLWdpdCBhL3NzaGQtYXV0aC5jIGIvc3NoZC1hdXRoLmMKLWluZGV4 IDczYWNiMGRiZS4uODg1Y2Q4MjgxIDEwMDY0NAoraW5kZXggMTQxMDkxNTFjLi4wNzkwNjNmNDcg MTAwNjQ0CiAtLS0gYS9zc2hkLWF1dGguYwogKysrIGIvc3NoZC1hdXRoLmMKLUBAIC02OTEsNyAr NjkxLDcgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK0BAIC02NjUsNyArNjY1LDcgQEAgbWFp bihpbnQgYWMsIGNoYXIgKiphdikKICAJCQlicmVhazsKICAJCX0KICAJfQpAQCAtNDA3Miw3ICs0 MDMwLDcgQEAgaW5kZXggNzNhY2IwZGJlLi44ODVjZDgyODEgMTAwNjQ0CiAgCQlmYXRhbCgiaW50 ZXJuYWwgZXJyb3I6IHJlY2VpdmVkIG5vIGhvc3RrZXlzIik7CiAgCiAgCS8qIEVuc3VyZSB0aGF0 IHVtYXNrIGRpc2FsbG93cyBhdCBsZWFzdCBncm91cCBhbmQgd29ybGQgd3JpdGUgKi8KLUBAIC04 MTEsNiArODExLDQ4IEBAIGRvX3NzaDJfa2V4KHN0cnVjdCBzc2ggKnNzaCkKK0BAIC03ODQsNiAr Nzg0LDQ4IEBAIGRvX3NzaDJfa2V4KHN0cnVjdCBzc2ggKnNzaCkKICAKICAJZnJlZShoa2FsZ3Mp OwogIApAQCAtNDEyMSwxMCArNDA3OSwxMiBAQCBpbmRleCA3M2FjYjBkYmUuLjg4NWNkODI4MSAx MDA2NDQKICAJaWYgKChyID0ga2V4X2V4Y2hhbmdlX2lkZW50aWZpY2F0aW9uKHNzaCwgLTEsCiAg CSAgICBvcHRpb25zLnZlcnNpb25fYWRkZW5kdW0pKSAhPSAwKQogIAkJc3NocGt0X2ZhdGFsKHNz aCwgciwgImJhbm5lciBleGNoYW5nZSIpOwotQEAgLTgzNiw2ICs4NzgsMTcgQEAgZG9fc3NoMl9r ZXgoc3RydWN0IHNzaCAqc3NoKQotICMgaWZkZWYgT1BFTlNTTF9IQVNfRUNDCitAQCAtODA3LDgg Kzg0OSwxOCBAQCBkb19zc2gyX2tleChzdHJ1Y3Qgc3NoICpzc2gpCisgCWtleC0+a2V4W0tFWF9E SF9HRVhfU0hBMV0gPSBrZXhnZXhfc2VydmVyOworIAlrZXgtPmtleFtLRVhfREhfR0VYX1NIQTI1 Nl0gPSBrZXhnZXhfc2VydmVyOwogIAlrZXgtPmtleFtLRVhfRUNESF9TSEEyXSA9IGtleF9nZW5f c2VydmVyOwotICMgZW5kaWYgLyogT1BFTlNTTF9IQVNfRUNDICovCistCWtleC0+a2V4W0tFWF9L RU1fTUxLRU03NjhFQ0RIX1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKy0jZW5kaWYKICsjIGlm ZGVmIEdTU0FQSQogKwlpZiAob3B0aW9ucy5nc3Nfa2V5ZXgpIHsKICsJCWtleC0+a2V4W0tFWF9H U1NfR1JQMV9TSEExXSA9IGtleGdzc19zZXJ2ZXI7CkBAIC00MTM2LDE0ICs0MDk2LDE1IEBAIGlu ZGV4IDczYWNiMGRiZS4uODg1Y2Q4MjgxIDEwMDY0NAogKwkJa2V4LT5rZXhbS0VYX0dTU19DMjU1 MTlfU0hBMjU2XSA9IGtleGdzc19zZXJ2ZXI7CiArCX0KICsjIGVuZGlmCi0gI2VuZGlmIC8qIFdJ VEhfT1BFTlNTTCAqLworKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KICAJa2V4LT5rZXhbS0VY X0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CiAgCWtleC0+a2V4W0tFWF9LRU1fU05U UlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJa2V4LT5rZXhbS0VYX0tF TV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CiBkaWZmIC0tZ2l0IGEv c3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24uYwotaW5kZXggNjk3NmQ2ODcyLi5mODQ3ZmMw YTkgMTAwNjQ0CitpbmRleCA2ZTliMjhkZWMuLmNmNjcwOWY0NiAxMDA2NDQKIC0tLSBhL3NzaGQt c2Vzc2lvbi5jCiArKysgYi9zc2hkLXNlc3Npb24uYwotQEAgLTU2NCw4ICs1NjQsOCBAQCBub3Rp ZnlfaG9zdGtleXMoc3RydWN0IHNzaCAqc3NoKQorQEAgLTU2NSw4ICs1NjUsOCBAQCBub3RpZnlf aG9zdGtleXMoc3RydWN0IHNzaCAqc3NoKQogIAl9CiAgCWRlYnVnM19mKCJzZW50ICV1IGhvc3Rr ZXlzIiwgbmtleXMpOwogIAlpZiAobmtleXMgPT0gMCkKQEAgLTQxNTQsNyArNDExNSw3IEBAIGlu ZGV4IDY5NzZkNjg3Mi4uZjg0N2ZjMGE5IDEwMDY0NAogIAkJc3NocGt0X2ZhdGFsKHNzaCwgciwg IiVzOiBzZW5kIiwgX19mdW5jX18pOwogIAlzc2hidWZfZnJlZShidWYpOwogIH0KLUBAIC0xMTA3 LDggKzExMDcsOSBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorQEAgLTExMDgsOCArMTEwOCw5 IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAgCQkJYnJlYWs7CiAgCQl9CiAgCX0KQEAgLTQx NjcsMTAgKzQxMjgsMTAgQEAgaW5kZXggNjk3NmQ2ODcyLi5mODQ3ZmMwYTkgMTAwNjQ0CiAgCS8q IEVuc3VyZSB0aGF0IHVtYXNrIGRpc2FsbG93cyBhdCBsZWFzdCBncm91cCBhbmQgd29ybGQgd3Jp dGUgKi8KICAJbmV3X3VtYXNrID0gdW1hc2soMDA3NykgfCAwMDIyOwogZGlmZiAtLWdpdCBhL3Nz aGQuYyBiL3NzaGQuYwotaW5kZXggNzRkMjVmYzczLi41NTI0MzU4MTcgMTAwNjQ0CitpbmRleCA3 ZDE0NjZkOTcuLmY2NmUxZjg2ZiAxMDA2NDQKIC0tLSBhL3NzaGQuYwogKysrIGIvc3NoZC5jCi1A QCAtMTY2Nyw3ICsxNjY3LDggQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK0BAIC0xNjY5LDcg KzE2NjksOCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQogIAkJZnJlZShmcCk7CiAgCX0KICAJ YWNjdW11bGF0ZV9ob3N0X3RpbWluZ19zZWNyZXQoY2ZnLCBOVUxMKTsKQEAgLTQxODEsMTAgKzQx NDIsMTAgQEAgaW5kZXggNzRkMjVmYzczLi41NTI0MzU4MTcgMTAwNjQ0CiAgCQlleGl0KDEpOwog IAl9CiBkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcgYi9zc2hkX2NvbmZpZwotaW5kZXggNDhhZjYz MjFiLi44ZGI5ZjBmYjEgMTAwNjQ0CitpbmRleCBmNjI2ZDU4MDEuLjQwNGFhMWJiYiAxMDA2NDQK IC0tLSBhL3NzaGRfY29uZmlnCiArKysgYi9zc2hkX2NvbmZpZwotQEAgLTc5LDYgKzc5LDggQEAg QXV0aG9yaXplZEtleXNGaWxlCS5zc2gvYXV0aG9yaXplZF9rZXlzCitAQCAtODAsNiArODAsOCBA QCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRob3JpemVkX2tleXMKICAjIEdTU0FQSSBvcHRp b25zCiAgI0dTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCiAgI0dTU0FQSUNsZWFudXBDcmVkZW50aWFs cyB5ZXMKQEAgLTQxOTQsMTAgKzQxNTUsMTAgQEAgaW5kZXggNDhhZjYzMjFiLi44ZGI5ZjBmYjEg MTAwNjQ0CiAgIyBTZXQgdGhpcyB0byAneWVzJyB0byBlbmFibGUgUEFNIGF1dGhlbnRpY2F0aW9u LCBhY2NvdW50IHByb2Nlc3NpbmcsCiAgIyBhbmQgc2Vzc2lvbiBwcm9jZXNzaW5nLiBJZiB0aGlz IGlzIGVuYWJsZWQsIFBBTSBhdXRoZW50aWNhdGlvbiB3aWxsCiBkaWZmIC0tZ2l0IGEvc3NoZF9j b25maWcuNSBiL3NzaGRfY29uZmlnLjUKLWluZGV4IGNhNDI1YThkYS4uNTkyOGI2Y2QyIDEwMDY0 NAoraW5kZXggZTg1Y2NhNmViLi42MjVlNmZkZWMgMTAwNjQ0CiAtLS0gYS9zc2hkX2NvbmZpZy41 CiArKysgYi9zc2hkX2NvbmZpZy41Ci1AQCAtNzUyLDkgKzc1MiwxOSBAQCBvbiBsb2dvdXQuCitA QCAtNzYwLDkgKzc2MCwxOSBAQCBvbiBsb2dvdXQuCiAgVGhlIGRlZmF1bHQgaXMKICAuQ20geWVz IC4KICAuSXQgQ20gR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscwpAQCAtNDIxOSwxMCArNDE4MCwx MCBAQCBpbmRleCBjYTQyNWE4ZGEuLjU5MjhiNmNkMiAxMDA2NDQKICAuSXQgQ20gR1NTQVBJU3Ry aWN0QWNjZXB0b3JDaGVjawogIERldGVybWluZXMgd2hldGhlciB0byBiZSBzdHJpY3QgYWJvdXQg dGhlIGlkZW50aXR5IG9mIHRoZSBHU1NBUEkgYWNjZXB0b3IKICBhIGNsaWVudCBhdXRoZW50aWNh dGVzIGFnYWluc3QuCi1AQCAtNzY5LDYgKzc3OSwzNSBAQCBtYWNoaW5lJ3MgZGVmYXVsdCBzdG9y ZS4KLSBUaGlzIGZhY2lsaXR5IGlzIHByb3ZpZGVkIHRvIGFzc2lzdCB3aXRoIG9wZXJhdGlvbiBv biBtdWx0aSBob21lZCBtYWNoaW5lcy4KK0BAIC03NzgsNiArNzg4LDM1IEBAIFRoaXMgZmFjaWxp dHkgaXMgcHJvdmlkZWQgdG8gYXNzaXN0IHdpdGggb3BlcmF0aW9uIG9uIG11bHRpIGhvbWVkIG1h Y2hpbmVzLgogIFRoZSBkZWZhdWx0IGlzCiAgLkNtIHllcyAuCisgVGhpcyBvcHRpb24gbWF5IG5v dCBiZSBlZmZlY3RpdmUgaW4gV2luZG93cyBBY3RpdmUgRGlyZWN0b3J5IGVudmlyb25tZW50cy4K ICsuSXQgQ20gR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXkKICtDb250cm9scyB3aGV0aGVy IHRoZSB1c2VyJ3MgR1NTQVBJIGNyZWRlbnRpYWxzIHNob3VsZCBiZSB1cGRhdGVkIGZvbGxvd2lu ZyBhCiArc3VjY2Vzc2Z1bCBjb25uZWN0aW9uIHJla2V5aW5nLiBUaGlzIG9wdGlvbiBjYW4gYmUg dXNlZCB0byBhY2NlcHRlZCByZW5ld2VkCkBAIC00MjU2LDcgKzQyMTcsNyBAQCBpbmRleCBjYTQy NWE4ZGEuLjU5MjhiNmNkMiAxMDA2NDQKICBTcGVjaWZpZXMgdGhlIHNpZ25hdHVyZSBhbGdvcml0 aG1zIHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBmb3IgaG9zdGJhc2VkCiAgYXV0aGVudGljYXRpb24g YXMgYSBsaXN0IG9mIGNvbW1hLXNlcGFyYXRlZCBwYXR0ZXJucy4KIGRpZmYgLS1naXQgYS9zc2hr ZXkuYyBiL3NzaGtleS5jCi1pbmRleCA1OWQxNDUzMWMuLmNjYzM1ZGJmNSAxMDA2NDQKK2luZGV4 IGE1OTA1MjlhMC4uN2QxNDAxYThmIDEwMDY0NAogLS0tIGEvc3Noa2V5LmMKICsrKyBiL3NzaGtl eS5jCiBAQCAtMTE1LDYgKzExNSw3NSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNzaGtleV9pbXBs IHNzaGtleV9yc2Ffc2hhNTEyX2ltcGw7CkBAIC00MzUzLDE3ICs0MzE0LDE3IEBAIGluZGV4IDU5 ZDE0NTMxYy4uY2NjMzVkYmY1IDEwMDY0NAogIAkJaWYgKCFpbmNsdWRlX3NpZ29ubHkgJiYgaW1w bC0+c2lnb25seSkKICAJCQljb250aW51ZTsKIGRpZmYgLS1naXQgYS9zc2hrZXkuaCBiL3NzaGtl eS5oCi1pbmRleCBhOWNkZmNkMTkuLjllY2VkNWQ4YSAxMDA2NDQKK2luZGV4IGU0Zjg0ZjE2Zi4u M2U3MzhmNDJjIDEwMDY0NAogLS0tIGEvc3Noa2V5LmgKICsrKyBiL3NzaGtleS5oCi1AQCAtNjcs NiArNjcsNyBAQCBlbnVtIHNzaGtleV90eXBlcyB7Ci0gCUtFWV9FQ0RTQV9TS19DRVJULAotIAlL RVlfRUQyNTUxOV9TSywKK0BAIC02Myw2ICs2Myw3IEBAIGVudW0gc3Noa2V5X3R5cGVzIHsKICAJ S0VZX0VEMjU1MTlfU0tfQ0VSVCwKKyAJS0VZX01MRFNBNDRfRUQyNTUxOSwKKyAJS0VZX01MRFNB NDRfRUQyNTUxOV9DRVJULAogKwlLRVlfTlVMTCwKICAJS0VZX1VOU1BFQwogIH07CiAgCiAtLSAK LTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDE0LW9wZW5zc2gtNi42cDEtZm9yY2Vf a3JiLnBhdGNoIGIvMDAxNC1vcGVuc3NoLTYuNnAxLWZvcmNlX2tyYi5wYXRjaAppbmRleCAzNmI5 ZjZjLi5mZGQwYzg1IDEwMDY0NAotLS0gYS8wMDE0LW9wZW5zc2gtNi42cDEtZm9yY2Vfa3JiLnBh dGNoCisrKyBiLzAwMTQtb3BlbnNzaC02LjZwMS1mb3JjZV9rcmIucGF0Y2gKQEAgLTEsNyArMSw3 IEBACi1Gcm9tIGEwMzM5NDUzYjliMGFjNTE1NzUyZDBjNjBmZmQ5YmNiNDY1NjNlNzEgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDVkMWRlYmRhZWU3YjZkYzUxYzVmMTA1MzBiNDY5OGE3 YTJmMWJiODAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tp eSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICsw MjAwCi1TdWJqZWN0OiBbUEFUQ0ggMTQvNTRdIG9wZW5zc2gtNi42cDEtZm9yY2Vfa3JiCitTdWJq ZWN0OiBbUEFUQ0ggMTQvNTNdIG9wZW5zc2gtNi42cDEtZm9yY2Vfa3JiCiAKICNodHRwOi8vd3d3 Lm1haWwtYXJjaGl2ZS5jb20va2VyYmVyb3NAbWl0LmVkdS9tc2cxNzU5MS5odG1sCiAtLS0KQEAg LTIxOCw3ICsyMTgsNyBAQCBpbmRleCBiZTQwMWZlMGUuLmMyNjE3NDkyOCAxMDA2NDQKICAvKiBU aGlzIHdyaXRlcyBvdXQgYW55IGZvcndhcmRlZCBjcmVkZW50aWFscyBmcm9tIHRoZSBzdHJ1Y3R1 cmUgcG9wdWxhdGVkCiAgICogZHVyaW5nIHVzZXJhdXRoLiBDYWxsZWQgYWZ0ZXIgd2UgaGF2ZSBz ZXR1aWQgdG8gdGhlIHVzZXIgKi8KIGRpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNzaW9uLmMK LWluZGV4IGYxNGQ1ZmFiOC4uNjEwYTJjYzZmIDEwMDY0NAoraW5kZXggN2I3NmYxZjcxLi5iNGRi NjRlYTQgMTAwNjQ0CiAtLS0gYS9zZXNzaW9uLmMKICsrKyBiL3Nlc3Npb24uYwogQEAgLTY0Myw2 ICs2NDMsMjkgQEAgZG9fZXhlYyhzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNo YXIgKmNvbW1hbmQpCkBAIC0yNjcsMTAgKzI2NywxMCBAQCBpbmRleCA4ZWM0NTE5MjYuLmRiMzRk NzdmNCAxMDA2NDQKICAKICAvKiBkcmFmdC1pZXRmLXNlY3NoLWdzc2tleWV4LTA2ICovCiBkaWZm IC0tZ2l0IGEvc3NoZC44IGIvc3NoZC44Ci1pbmRleCAwMjI2YTgzMDMuLmUyZDhmZjAwMyAxMDA2 NDQKK2luZGV4IDI0ZTU2MzlhMy4uOGVmMzU4Y2Q1IDEwMDY0NAogLS0tIGEvc3NoZC44CiArKysg Yi9zc2hkLjgKLUBAIC0yODYsNiArMjg2LDcgQEAgRmluYWxseSwgdGhlIHNlcnZlciBhbmQgdGhl IGNsaWVudCBlbnRlciBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cuCitAQCAtMjg3LDYgKzI4Nyw3 IEBAIEZpbmFsbHksIHRoZSBzZXJ2ZXIgYW5kIHRoZSBjbGllbnQgZW50ZXIgYW4gYXV0aGVudGlj YXRpb24gZGlhbG9nLgogIFRoZSBjbGllbnQgdHJpZXMgdG8gYXV0aGVudGljYXRlIGl0c2VsZiB1 c2luZwogIGhvc3QtYmFzZWQgYXV0aGVudGljYXRpb24sCiAgcHVibGljIGtleSBhdXRoZW50aWNh dGlvbiwKQEAgLTI3OCw3ICsyNzgsNyBAQCBpbmRleCAwMjI2YTgzMDMuLmUyZDhmZjAwMyAxMDA2 NDQKICBjaGFsbGVuZ2UtcmVzcG9uc2UgYXV0aGVudGljYXRpb24sCiAgb3IgcGFzc3dvcmQgYXV0 aGVudGljYXRpb24uCiAgLlBwCi1AQCAtODc0LDYgKzg3NSwxMiBAQCBUaGlzIGZpbGUgaXMgdXNl ZCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcworQEAgLTg3OCw2ICs4NzksMTIgQEAgVGhpcyBm aWxlIGlzIHVzZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMKICBidXQgYWxsb3dzIGhvc3Qt YmFzZWQgYXV0aGVudGljYXRpb24gd2l0aG91dCBwZXJtaXR0aW5nIGxvZ2luIHdpdGgKICBybG9n aW4vcnNoLgogIC5QcApAQCAtMjkyLDUgKzI5Miw1IEBAIGluZGV4IDAyMjZhODMwMy4uZTJkOGZm MDAzIDEwMDY0NAogIFRoaXMgZGlyZWN0b3J5IGlzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBh bGwgdXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uCiAgYW5kIGF1dGhlbnRpY2F0aW9uIGluZm9y bWF0aW9uLgogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAxNS1vcGVuc3No LTcuN3AxLWdzc2FwaS1uZXctdW5pcXVlLnBhdGNoIGIvMDAxNS1vcGVuc3NoLTcuN3AxLWdzc2Fw aS1uZXctdW5pcXVlLnBhdGNoCmluZGV4IGY2OTdiN2IuLjU1ZWJlOTMgMTAwNjQ0Ci0tLSBhLzAw MTUtb3BlbnNzaC03LjdwMS1nc3NhcGktbmV3LXVuaXF1ZS5wYXRjaAorKysgYi8wMDE1LW9wZW5z c2gtNy43cDEtZ3NzYXBpLW5ldy11bmlxdWUucGF0Y2gKQEAgLTEsMjUgKzEsMjMgQEAKLUZyb20g ZWEzMGUxNThkY2VjZTM5NTI1YmViMGJjMTZlYjRhMjZkOGViODAxZiBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKK0Zyb20gOTQ1Mjg3NTc2MGI5OWZiNTM4NDYzZjI5MWZjZWRlZTc1ZGVlNGEzOCBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0 QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1Ympl Y3Q6IFtQQVRDSCAxNS81NF0gb3BlbnNzaC03LjdwMS1nc3NhcGktbmV3LXVuaXF1ZQorU3ViamVj dDogW1BBVENIIDE1LzUzXSBvcGVuc3NoLTcuN3AxLWdzc2FwaS1uZXctdW5pcXVlCiAKLSMgSW1w cm92ZSBjY2FjaGUgaGFuZGxpbmcgaW4gb3BlbnNzaCAoIzk5MTE4NiwgIzExOTkzNjMsICMxNTY2 NDk0KQotIyBodHRwczovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzc1 CiAtLS0KLSBhdXRoLWtyYjUuYyAgICAgfCAyNjIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tCisgYXV0aC1rcmI1LmMgICAgIHwgMjY0ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogIGF1dGguaCAgICAgICAgICB8 ICAgMyArLQogIGdzcy1zZXJ2LWtyYjUuYyB8ICA0MiArKystLS0tLQogIGdzcy1zZXJ2LmMgICAg ICB8ICAxMiArLS0KLSBzZXJ2Y29uZi5jICAgICAgfCAgMTIgKystCisgc2VydmNvbmYuYyAgICAg IHwgICA1ICsKICBzZXJ2Y29uZi5oICAgICAgfCAgIDIgKwogIHNlc3Npb24uYyAgICAgICB8ICAg NSArLQogIHNzaC1nc3MuaCAgICAgICB8ICAgNCArLQogIHNzaGQtc2Vzc2lvbi5jICB8ICAgMiAr LQogIHNzaGRfY29uZmlnLjUgICB8ICAgOCArKwotIDEwIGZpbGVzIGNoYW5nZWQsIDI4MCBpbnNl cnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkKKyAxMCBmaWxlcyBjaGFuZ2VkLCAyNzYgaW5zZXJ0 aW9ucygrKSwgNzEgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9hdXRoLWtyYjUuYyBiL2F1 dGgta3JiNS5jCi1pbmRleCAzYzZkYzA2MjIuLjBkZTFhYWY4ZCAxMDA2NDQKK2luZGV4IDNjNmRj MDYyMi4uODYzMTEwOTEwIDEwMDY0NAogLS0tIGEvYXV0aC1rcmI1LmMKICsrKyBiL2F1dGgta3Ji NS5jCiBAQCAtNTEsNiArNTEsNyBAQApAQCAtMTI3LDcgKzEyNSw3IEBAIGluZGV4IDNjNmRjMDYy Mi4uMGRlMWFhZjhkIDEwMDY0NAogIAlpZiAoYXV0aGN0eHQtPmtyYjVfdXNlcikgewogIAkJa3Ji NV9mcmVlX3ByaW5jaXBhbChhdXRoY3R4dC0+a3JiNV9jdHgsIGF1dGhjdHh0LT5rcmI1X3VzZXIp OwogIAkJYXV0aGN0eHQtPmtyYjVfdXNlciA9IE5VTEw7Ci1AQCAtMjM4LDM2ICsyODEsMTg5IEBA IGtyYjVfY2xlYW51cF9wcm9jKEF1dGhjdHh0ICphdXRoY3R4dCkKK0BAIC0yMzgsMzYgKzI4MSwx OTEgQEAga3JiNV9jbGVhbnVwX3Byb2MoQXV0aGN0eHQgKmF1dGhjdHh0KQogIAl9CiAgfQogIApA QCAtMjgxLDYgKzI3OSw3IEBAIGluZGV4IDNjNmRjMDYyMi4uMGRlMWFhZjhkIDEwMDY0NAogKwkJ dW1hc2sob2xkX3VtYXNrKTsKICsJCWlmICh0bXBmZCA9PSAtMSkgewogKwkJCWxvZ2l0KCJta3N0 ZW1wKCk6ICUuMTAwcyIsIHN0cmVycm9yKG9lcnJubykpOworKwkJCWZyZWUoY2NuYW1lKTsKICsJ CQlyZXR1cm4gb2Vycm5vOwogKwkJfQogKwpAQCAtMjg4LDYgKzI4Nyw3IEBAIGluZGV4IDNjNmRj MDYyMi4uMGRlMWFhZjhkIDEwMDY0NAogKwkJCW9lcnJubyA9IGVycm5vOwogKwkJCWxvZ2l0KCJm Y2htb2QoKTogJS4xMDBzIiwgc3RyZXJyb3Iob2Vycm5vKSk7CiArCQkJY2xvc2UodG1wZmQpOwor KwkJCWZyZWUoY2NuYW1lKTsKICsJCQlyZXR1cm4gb2Vycm5vOwogKwkJfQogKwkJLyogbWFrZSBz dXJlIHRoZSBLUkI1Q0NOQU1FIGlzIHNldCBmb3Igbm9uLXN0YW5kYXJkIGxvY2F0aW9uICovCkBA IC0zNDEsNyArMzQxLDcgQEAgaW5kZXggM2M2ZGMwNjIyLi4wZGUxYWFmOGQgMTAwNjQ0CiAgI2Vu ZGlmIC8qICFIRUlNREFMICovCiAgI2VuZGlmIC8qIEtSQjUgKi8KIGRpZmYgLS1naXQgYS9hdXRo LmggYi9hdXRoLmgKLWluZGV4IDMyZWUzY2JmNC4uOWU1NWZmOGFkIDEwMDY0NAoraW5kZXggZWZl ODE5MzIzLi4yYTE5ZTJiMzQgMTAwNjQ0CiAtLS0gYS9hdXRoLmgKICsrKyBiL2F1dGguaAogQEAg LTg1LDYgKzg1LDcgQEAgc3RydWN0IEF1dGhjdHh0IHsKQEAgLTM1Miw3ICszNTIsNyBAQCBpbmRl eCAzMmVlM2NiZjQuLjllNTVmZjhhZCAxMDA2NDQKICAjZW5kaWYKICAJc3RydWN0IHNzaGJ1Zgkq bG9naW5tc2c7CiAgCi1AQCAtMjQzLDcgKzI0NCw3IEBAIEZJTEUJKmF1dGhfb3BlbnByaW5jaXBh bHMoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcGFzc3dkICosIGludCk7CitAQCAtMjQ0LDcgKzI0NSw3 IEBAIEZJTEUJKmF1dGhfb3BlbnByaW5jaXBhbHMoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcGFzc3dk ICosIGludCk7CiAgaW50CSBzeXNfYXV0aF9wYXNzd2Qoc3RydWN0IHNzaCAqLCBjb25zdCBjaGFy ICopOwogIAogICNpZiBkZWZpbmVkKEtSQjUpICYmICFkZWZpbmVkKEhFSU1EQUwpCkBAIC01MTYs ODMgKzUxNiw0OSBAQCBpbmRleCA4YjRmYTljZmUuLjZlYjdkMjE2MyAxMDA2NDQKICAKICAJb2sg PSBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVkcygmZ3NzYXBpX2NsaWVudC5zdG9yZSk7CiBkaWZm IC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKLWluZGV4IGRlM2ZhOTQ4MS4uMTBiNDNk NTZhIDEwMDY0NAoraW5kZXggZjI4ZDE5MTk0Li5hZTE4ZDU2ZmQgMTAwNjQ0CiAtLS0gYS9zZXJ2 Y29uZi5jCiArKysgYi9zZXJ2Y29uZi5jCi1AQCAtMTMxLDYgKzEzMSw3IEBAIGluaXRpYWxpemVf c2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKLSAJb3B0aW9ucy0+a2VyYmVy b3Nfb3JfbG9jYWxfcGFzc3dkID0gLTE7Ci0gCW9wdGlvbnMtPmtlcmJlcm9zX3RpY2tldF9jbGVh bnVwID0gLTE7Ci0gCW9wdGlvbnMtPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4gPSAtMTsKLSsJb3B0 aW9ucy0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSA9IC0xOwotIAlvcHRpb25zLT5nc3NfYXV0aGVu dGljYXRpb249LTE7Ci0gCW9wdGlvbnMtPmdzc19rZXlleCA9IC0xOwotIAlvcHRpb25zLT5nc3Nf Y2xlYW51cF9jcmVkcyA9IC0xOwotQEAgLTM3NCw2ICszNzUsOCBAQCBmaWxsX2RlZmF1bHRfc2Vy dmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKLSAJCW9wdGlvbnMtPmtlcmJlcm9z X3RpY2tldF9jbGVhbnVwID0gMTsKLSAJaWYgKG9wdGlvbnMtPmtlcmJlcm9zX2dldF9hZnNfdG9r ZW4gPT0gLTEpCi0gCQlvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID0gMDsKLSsJaWYg KG9wdGlvbnMtPmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUgPT0gLTEpCi0rCQlvcHRpb25zLT5rZXJi ZXJvc191bmlxdWVfY2NhY2hlID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlv biA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IDA7Ci0gCWlmIChvcHRp b25zLT5nc3Nfa2V5ZXggPT0gLTEpCi1AQCAtNTYxLDcgKzU2NCw3IEBAIHR5cGVkZWYgZW51bSB7 Ci0gCXNQb3J0LCBzSG9zdEtleUZpbGUsIHNMb2dpbkdyYWNlVGltZSwKLSAJc1Blcm1pdFJvb3RM b2dpbiwgc0xvZ0ZhY2lsaXR5LCBzTG9nTGV2ZWwsIHNMb2dWZXJib3NlLAotIAlzS2VyYmVyb3NB dXRoZW50aWNhdGlvbiwgc0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCwgc0tlcmJlcm9zVGlja2V0Q2xl YW51cCwKLS0Jc0tlcmJlcm9zR2V0QUZTVG9rZW4sIHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uLAot KwlzS2VyYmVyb3NHZXRBRlNUb2tlbiwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBzUGFzc3dvcmRB dXRoZW50aWNhdGlvbiwKLSAJc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24sIHNMaXN0ZW5B ZGRyZXNzLCBzQWRkcmVzc0ZhbWlseSwKLSAJc1ByaW50TW90ZCwgc1ByaW50TGFzdExvZywgc0ln bm9yZVJob3N0cywKLSAJc1gxMUZvcndhcmRpbmcsIHNYMTFEaXNwbGF5T2Zmc2V0LCBzWDExVXNl TG9jYWxob3N0LAotQEAgLTY1MiwxMSArNjU1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgewotICNlbHNl Ci0gCXsgImtlcmJlcm9zZ2V0YWZzdG9rZW4iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwg fSwKLSAjZW5kaWYKLSsJeyAia2VyYmVyb3N1bmlxdWVjY2FjaGUiLCBzS2VyYmVyb3NVbmlxdWVD Q2FjaGUsIFNTSENGR19HTE9CQUwgfSwKLSAjZWxzZQotIAl7ICJrZXJiZXJvc2F1dGhlbnRpY2F0 aW9uIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCi0gCXsgImtlcmJlcm9zb3Jsb2NhbHBh c3N3ZCIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJrZXJiZXJvc3RpY2tl dGNsZWFudXAiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAia2VyYmVyb3Nn ZXRhZnN0b2tlbiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJrZXJiZXJv c3VuaXF1ZWNjYWNoZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbmRpZgot IAl7ICJrZXJiZXJvc3RndHBhc3NpbmciLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwK LSAJeyAiYWZzdG9rZW5wYXNzaW5nIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi1A QCAtMTY2OSw2ICsxNjc0LDEwIEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNl cnZlck9wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmxpbmUsCi0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+ a2VyYmVyb3NfZ2V0X2Fmc190b2tlbjsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKK0BAIC0xNDM1LDYg KzE0MzUsMTAgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9u cyAqb3B0aW9ucywgY2hhciAqbGluZSwKKyAjZW5kaWYgLyogVVNFX0FGUyAqLworICNlbmRpZiAv KiBLUkI1ICovCiAgCiArCWNhc2Ugc0tlcmJlcm9zVW5pcXVlQ0NhY2hlOgogKwkJaW50cHRyID0g Jm9wdGlvbnMtPmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGU7CiArCQlnb3RvIHBhcnNlX2ZsYWc7CiAr Ci0gCWNhc2Ugc0dzc0F1dGhlbnRpY2F0aW9uOgorICNpZmRlZiBHU1NBUEkKKyAJY2FzZSBzR1NT QVBJQXV0aGVudGljYXRpb246CiAgCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0 aW9uOwotIAkJZ290byBwYXJzZV9mbGFnOwotQEAgLTMzMjksNiArMzMzOCw3IEBAIGR1bXBfY29u ZmlnKFNlcnZlck9wdGlvbnMgKm8pCitAQCAtNDIzNyw2ICs0MjQxLDcgQEAgZHVtcF9jb25maWco U2VydmVyT3B0aW9ucyAqbykKICAjIGlmZGVmIFVTRV9BRlMKICAJZHVtcF9jZmdfZm10aW50KHNL ZXJiZXJvc0dldEFGU1Rva2VuLCBvLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuKTsKICAjIGVuZGlm CiArCWR1bXBfY2ZnX2ZtdGludChzS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIG8tPmtlcmJlcm9zX3Vu aXF1ZV9jY2FjaGUpOwogICNlbmRpZgogICNpZmRlZiBHU1NBUEkKLSAJZHVtcF9jZmdfZm10aW50 KHNHc3NBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0aW9uKTsKKyAJZHVtcF9jZmdf Zm10aW50KHNHU1NBUElBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0aW9uKTsKIGRp ZmYgLS1naXQgYS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAotaW5kZXggNzY2NDFkNTgwLi5iZjU4 OTkxMWEgMTAwNjQ0CitpbmRleCBjNmRhNzlmNTMuLjVmNTY3MjA4MiAxMDA2NDQKIC0tLSBhL3Nl cnZjb25mLmgKICsrKyBiL3NlcnZjb25mLmgKLUBAIC0xNTAsNiArMTUwLDggQEAgdHlwZWRlZiBz dHJ1Y3QgewotIAkJCQkJCSAqIGZpbGUgb24gbG9nb3V0LiAqLwotIAlpbnQgICAgIGtlcmJlcm9z X2dldF9hZnNfdG9rZW47CQkvKiBJZiB0cnVlLCB0cnkgdG8gZ2V0IEFGUyB0b2tlbiBpZgotIAkJ CQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcy4gKi8KLSsJaW50ICAgICBrZXJiZXJv c191bmlxdWVfY2NhY2hlOwkJLyogSWYgdHJ1ZSwgdGhlIGFjcXVpcmVkIHRpY2tldCB3aWxsCi0r CQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNzaW9uIGNjYWNoZSAqLwotIAlpbnQgICAgIGdz c19hdXRoZW50aWNhdGlvbjsJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBhdXRoZW50aWNhdGlv biAqLwotIAlpbnQgICAgIGdzc19rZXlleDsJCS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkga2V5 IGV4Y2hhbmdlICovCi0gCWludCAgICAgZ3NzX2NsZWFudXBfY3JlZHM7CS8qIElmIHRydWUsIGRl c3Ryb3kgY3JlZCBjYWNoZSBvbiBsb2dvdXQgKi8KK0BAIC0zMDMsMTIgKzMwMywxNCBAQCBTU0hD T05GX1VOU1VQUE9SVEVEX0lOVChrZXJiZXJvc19nZXRfYWZzX3Rva2VuLCBLZXJiZXJvc0dldEFG U1Rva2VuLCBTU0hDRkdfR0xPQgorIFNTSENPTkZfSU5URkxBRyhrZXJiZXJvc19hdXRoZW50aWNh dGlvbiwgS2VyYmVyb3NBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlf TUFUQ0gpIFwKKyBTU0hDT05GX0lOVEZMQUcoa2VyYmVyb3Nfb3JfbG9jYWxfcGFzc3dkLCBLZXJi ZXJvc09yTG9jYWxQYXNzd2QsIFNTSENGR19HTE9CQUwsIDEsIFNTSENGR19DT1BZX05PTkUpIFwK KyBTU0hDT05GX0lOVEZMQUcoa2VyYmVyb3NfdGlja2V0X2NsZWFudXAsIEtlcmJlcm9zVGlja2V0 Q2xlYW51cCwgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorK1NTSENPTkZf SU5URkxBRyhrZXJiZXJvc191bmlxdWVfY2NhY2hlLCBLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgU1NI Q0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorIFNTSERfQ09ORklHX0tSQjVfQUZT CisgI2Vsc2UgLyogS1JCNSAqLworICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFU19LUkI1IFwK KyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChrZXJiZXJvc19hdXRoZW50aWNhdGlvbiwgS2VyYmVy b3NBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCkgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5U KGtlcmJlcm9zX29yX2xvY2FsX3Bhc3N3ZCwgS2VyYmVyb3NPckxvY2FsUGFzc3dkLCBTU0hDRkdf R0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3NfdGlja2V0X2NsZWFu dXAsIEtlcmJlcm9zVGlja2V0Q2xlYW51cCwgU1NIQ0ZHX0dMT0JBTCkgXAorK1NTSENPTkZfVU5T VVBQT1JURURfSU5UKGtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUsIEtlcmJlcm9zVW5pcXVlQ0NhY2hl LCBTU0hDRkdfR0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3NfZ2V0 X2Fmc190b2tlbiwgS2VyYmVyb3NHZXRBRlNUb2tlbiwgU1NIQ0ZHX0dMT0JBTCkKKyAjZW5kaWYg LyogS1JCNSAqLworIAogZGlmZiAtLWdpdCBhL3Nlc3Npb24uYyBiL3Nlc3Npb24uYwotaW5kZXgg NjEwYTJjYzZmLi41MTdjYWI2YjYgMTAwNjQ0CitpbmRleCBiNGRiNjRlYTQuLmMyY2RkNmM0ZiAx MDA2NDQKIC0tLSBhL3Nlc3Npb24uYwogKysrIGIvc2Vzc2lvbi5jCiBAQCAtOTg4LDcgKzk4OCw4 IEBAIGRvX3NldHVwX2VudihzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIg KnNoZWxsKQpAQCAtNjM3LDEwICs2MDMsMTAgQEAgaW5kZXggZGIzNGQ3N2Y0Li5hODk0ZTIzYzkg MTAwNjQ0CiAgCiAgY2hhciAqc3NoX2dzc2FwaV9zZXJ2ZXJfbWVjaGFuaXNtcyh2b2lkKTsKIGRp ZmYgLS1naXQgYS9zc2hkLXNlc3Npb24uYyBiL3NzaGQtc2Vzc2lvbi5jCi1pbmRleCBmODQ3ZmMw YTkuLjlkNzVhNDU1NSAxMDA2NDQKK2luZGV4IGNmNjcwOWY0Ni4uOGEzMTIxZDAxIDEwMDY0NAog LS0tIGEvc3NoZC1zZXNzaW9uLmMKICsrKyBiL3NzaGQtc2Vzc2lvbi5jCi1AQCAtMTI5NSw3ICsx Mjk1LDcgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK0BAIC0xMjk4LDcgKzEyOTgsNyBAQCBt YWluKGludCBhYywgY2hhciAqKmF2KQogICNpZmRlZiBHU1NBUEkKICAJaWYgKG9wdGlvbnMuZ3Nz X2F1dGhlbnRpY2F0aW9uKSB7CiAgCQl0ZW1wb3JhcmlseV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7 CkBAIC02NTAsMTAgKzYxNiwxMCBAQCBpbmRleCBmODQ3ZmMwYTkuLjlkNzVhNDU1NSAxMDA2NDQK ICAJfQogICNlbmRpZgogZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnLjUgYi9zc2hkX2NvbmZpZy41 Ci1pbmRleCA1OTI4YjZjZDIuLmQwYjBkZmUzNiAxMDA2NDQKK2luZGV4IDYyNWU2ZmRlYy4uMDhh MzA0Y2RjIDEwMDY0NAogLS0tIGEvc3NoZF9jb25maWcuNQogKysrIGIvc3NoZF9jb25maWcuNQot QEAgLTEwNTcsNiArMTA1NywxNCBAQCBTcGVjaWZpZXMgd2hldGhlciB0byBhdXRvbWF0aWNhbGx5 IGRlc3Ryb3kgdGhlIHVzZXIncyB0aWNrZXQgY2FjaGUKK0BAIC0xMDc0LDYgKzEwNzQsMTQgQEAg U3BlY2lmaWVzIHdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBkZXN0cm95IHRoZSB1c2VyJ3MgdGlj a2V0IGNhY2hlCiAgZmlsZSBvbiBsb2dvdXQuCiAgVGhlIGRlZmF1bHQgaXMKICAuQ20geWVzIC4K QEAgLTY2OSw1ICs2MzUsNSBAQCBpbmRleCA1OTI4YjZjZDIuLmQwYjBkZmUzNiAxMDA2NDQKICBT cGVjaWZpZXMgdGhlIHBlcm1pdHRlZCBLRVggKEtleSBFeGNoYW5nZSkgYWxnb3JpdGhtcyB0aGF0 IHRoZSBzZXJ2ZXIgd2lsbAogIG9mZmVyIHRvIGNsaWVudHMuCiAtLSAKLTIuNTMuMAorMi41NS4w CiAKCmRpZmYgLS1naXQgYS8wMDE2LW9wZW5zc2gtNy4ycDItazVsb2dpbl9kaXJlY3RvcnkucGF0 Y2ggYi8wMDE2LW9wZW5zc2gtNy4ycDItazVsb2dpbl9kaXJlY3RvcnkucGF0Y2gKaW5kZXggY2Fh NWI5ZC4uMmNkNzQzZSAxMDA2NDQKLS0tIGEvMDAxNi1vcGVuc3NoLTcuMnAyLWs1bG9naW5fZGly ZWN0b3J5LnBhdGNoCisrKyBiLzAwMTYtb3BlbnNzaC03LjJwMi1rNWxvZ2luX2RpcmVjdG9yeS5w YXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gZjA1ZDBhZGM4ZjE1ZTAxYTM0NzlkNDk2NDVkZjI2 MTcwYmU5ZDc3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNzZhNDZkYzI4N2FiNzgw NzEyNDJiYmY4ZjMxZGQxZGQyZjgwNTk3MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206 IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5 IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAxNi81NF0gb3BlbnNzaC03LjJw Mi1rNWxvZ2luX2RpcmVjdG9yeQorU3ViamVjdDogW1BBVENIIDE2LzUzXSBvcGVuc3NoLTcuMnAy LWs1bG9naW5fZGlyZWN0b3J5CiAKICMgUmVzcGVjdCBrNWxvZ2luX2RpcmVjdG9yeSBvcHRpb24g aW4ga3JrNS5jb25mICgjMTMyODI0MykKIC0tLQpAQCAtMTIsMTAgKzEyLDEwIEBAIFN1YmplY3Q6 IFtQQVRDSCAxNi81NF0gb3BlbnNzaC03LjJwMi1rNWxvZ2luX2RpcmVjdG9yeQogIDQgZmlsZXMg Y2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEv YXV0aC1rcmI1LmMgYi9hdXRoLWtyYjUuYwotaW5kZXggMGRlMWFhZjhkLi4xNDgyNDJjYmYgMTAw NjQ0CitpbmRleCA4NjMxMTA5MTAuLjk5NmIxOTczOCAxMDA2NDQKIC0tLSBhL2F1dGgta3JiNS5j CiArKysgYi9hdXRoLWtyYjUuYwotQEAgLTQ2NSw1ICs0NjUsMjEgQEAgc3NoX2tyYjVfY2NfbmV3 X3VuaXF1ZShrcmI1X2NvbnRleHQgY3R4LCBrcmI1X2NjYWNoZSAqY2NhY2hlLCBpbnQgKm5lZWRf ZW52aXJvbm0KK0BAIC00NjcsNSArNDY3LDIxIEBAIHNzaF9rcmI1X2NjX25ld191bmlxdWUoa3Ji NV9jb250ZXh0IGN0eCwga3JiNV9jY2FjaGUgKmNjYWNoZSwgaW50ICpuZWVkX2Vudmlyb25tCiAg CQlyZXR1cm4gKGtyYjVfY2NfcmVzb2x2ZShjdHgsIGNjbmFtZSwgY2NhY2hlKSk7CiAgCX0KICB9 CkBAIC0zOCwxMCArMzgsMTAgQEAgaW5kZXggMGRlMWFhZjhkLi4xNDgyNDJjYmYgMTAwNjQ0CiAg I2VuZGlmIC8qICFIRUlNREFMICovCiAgI2VuZGlmIC8qIEtSQjUgKi8KIGRpZmYgLS1naXQgYS9h dXRoLmggYi9hdXRoLmgKLWluZGV4IDllNTVmZjhhZC4uODE1ZjgyMWY5IDEwMDY0NAoraW5kZXgg MmExOWUyYjM0Li45ZGQyNWY0OTQgMTAwNjQ0CiAtLS0gYS9hdXRoLmgKICsrKyBiL2F1dGguaAot QEAgLTI0NSw2ICsyNDUsOCBAQCBpbnQJIHN5c19hdXRoX3Bhc3N3ZChzdHJ1Y3Qgc3NoICosIGNv bnN0IGNoYXIgKik7CitAQCAtMjQ2LDYgKzI0Niw4IEBAIGludAkgc3lzX2F1dGhfcGFzc3dkKHN0 cnVjdCBzc2ggKiwgY29uc3QgY2hhciAqKTsKICAKICAjaWYgZGVmaW5lZChLUkI1KSAmJiAhZGVm aW5lZChIRUlNREFMKQogIGtyYjVfZXJyb3JfY29kZSBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGty YjVfY29udGV4dCwga3JiNV9jY2FjaGUgKiwgaW50ICopOwpAQCAtODQsMTAgKzg0LDEwIEBAIGlu ZGV4IDQxNWZiMTg5My4uN2RmMzFjNmFmIDEwMDY0NAogIH0KICAKIGRpZmYgLS1naXQgYS9zc2hk LjggYi9zc2hkLjgKLWluZGV4IGUyZDhmZjAwMy4uZmEzM2Y1MjMyIDEwMDY0NAoraW5kZXggOGVm MzU4Y2Q1Li5hZTIyYTllYTQgMTAwNjQ0CiAtLS0gYS9zc2hkLjgKICsrKyBiL3NzaGQuOAotQEAg LTg4MCw2ICs4ODAsMTAgQEAgcmxvZ2luL3JzaC4KK0BAIC04ODQsNiArODg0LDEwIEBAIHJsb2dp bi9yc2guCiAgVGhlc2UgZmlsZXMgZW5mb3JjZSBHU1NBUEkvS2VyYmVyb3MgYXV0aGVudGljYXRp b24gYWNjZXNzIGNvbnRyb2wuCiAgRnVydGhlciBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4KICAu WHIga3N1IDEgLgpAQCAtOTksNSArOTksNSBAQCBpbmRleCBlMmQ4ZmYwMDMuLmZhMzNmNTIzMiAx MDA2NDQKICAuSXQgUGEgfi8uc3NoLwogIFRoaXMgZGlyZWN0b3J5IGlzIHRoZSBkZWZhdWx0IGxv Y2F0aW9uIGZvciBhbGwgdXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uCiAtLSAKLTIuNTMuMAor Mi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDE3LW9wZW5zc2gtNi42cDEta3VzZXJvay5wYXRjaCBi LzAwMTctb3BlbnNzaC02LjZwMS1rdXNlcm9rLnBhdGNoCmluZGV4IDdlMGFlNTIuLmY4NDM4MWQg MTAwNjQ0Ci0tLSBhLzAwMTctb3BlbnNzaC02LjZwMS1rdXNlcm9rLnBhdGNoCisrKyBiLzAwMTct b3BlbnNzaC02LjZwMS1rdXNlcm9rLnBhdGNoCkBAIC0xLDIwICsxLDE5IEBACi1Gcm9tIGJkYjJi NThlMWE3ZjRkNGE0MmEwYWNhMWY4ZjMwMTViNWVkYzg2YTEgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCitGcm9tIDQ2NzJmZWJkNWZmNTA4MmZlMjViMTgwNjk0ODVmMDU0OTEyMzhkYzIgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFp bC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBb UEFUQ0ggMTcvNTRdIG9wZW5zc2gtNi42cDEta3VzZXJvaworU3ViamVjdDogW1BBVENIIDE3LzUz XSBvcGVuc3NoLTYuNnAxLWt1c2Vyb2sKIAotI2h0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcv c2hvd19idWcuY2dpP2lkPTE3ODAKIC0tLQogIGF1dGgta3JiNS5jICAgICB8ICAyMCArKysrKysr Ky0KICBnc3Mtc2Vydi1rcmI1LmMgfCAxMDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tCi0gc2VydmNvbmYuYyAgICAgIHwgIDEzICsrKysrLQotIHNlcnZj b25mLmggICAgICB8ICAgMSArCisgc2VydmNvbmYuYyAgICAgIHwgICA1ICsrKworIHNlcnZjb25m LmggICAgICB8ICAgMiArCiAgc3NoZF9jb25maWcgICAgIHwgICAxICsKICBzc2hkX2NvbmZpZy41 ICAgfCAgIDUgKysrCi0gNiBmaWxlcyBjaGFuZ2VkLCAxMzkgaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkKKyA2IGZpbGVzIGNoYW5nZWQsIDEzMyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9u cygtKQogCiBkaWZmIC0tZ2l0IGEvYXV0aC1rcmI1LmMgYi9hdXRoLWtyYjUuYwotaW5kZXggMTQ4 MjQyY2JmLi4yODdiZGQzNWEgMTAwNjQ0CitpbmRleCA5OTZiMTk3MzguLjJlM2MxYzgwZiAxMDA2 NDQKIC0tLSBhL2F1dGgta3JiNS5jCiArKysgYi9hdXRoLWtyYjUuYwogQEAgLTU1LDYgKzU1LDIx IEBACkBAIC0xOTAsNTEgKzE4OSwxMCBAQCBpbmRleCA3ZGYzMWM2YWYuLjZmNTgyNmNlOCAxMDA2 NDQKICAJaWYgKChmcCA9IGZvcGVuKGZpbGUsICJyIikpID09IE5VTEwpIHsKICAJCWludCBzYXZl ZF9lcnJubyA9IGVycm5vOwogZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1p bmRleCAxMGI0M2Q1NmEuLjc1MTM4OGJjMCAxMDA2NDQKK2luZGV4IGFlMThkNTZmZC4uNWRlMDNm M2JmIDEwMDY0NAogLS0tIGEvc2VydmNvbmYuYwogKysrIGIvc2VydmNvbmYuYwotQEAgLTEzOSw2 ICsxMzksNyBAQCBpbml0aWFsaXplX3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlv bnMpCi0gCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAtMTsKLSAJb3B0aW9ucy0+Z3Nz X3N0b3JlX3Jla2V5ID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IE5VTEw7 Ci0rCW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gLTE7Ci0gCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhl bnRpY2F0aW9uID0gLTE7Ci0gCW9wdGlvbnMtPmtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlv biA9IC0xOwotIAlvcHRpb25zLT5wZXJtaXRfZW1wdHlfcGFzc3dkID0gLTE7Ci1AQCAtMzkzLDYg KzM5NCw4IEBAIGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRp b25zKQotIAlpZiAob3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID09IE5VTEwpCi0gCQlvcHRp b25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSBzdHJkdXAoR1NTX0tFWF9ERUZBVUxUX0tFWCk7Ci0g I2VuZGlmCi0rCWlmIChvcHRpb25zLT51c2Vfa3VzZXJvayA9PSAtMSkKLSsJCW9wdGlvbnMtPnVz ZV9rdXNlcm9rID0gMTsKLSAJaWYgKG9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID09 IC0xKQotIAkJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAxOwotIAlpZiAob3B0 aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID09IC0xKQotQEAgLTU2NCw3ICs1 NjcsNyBAQCB0eXBlZGVmIGVudW0gewotIAlzUG9ydCwgc0hvc3RLZXlGaWxlLCBzTG9naW5HcmFj ZVRpbWUsCi0gCXNQZXJtaXRSb290TG9naW4sIHNMb2dGYWNpbGl0eSwgc0xvZ0xldmVsLCBzTG9n VmVyYm9zZSwKLSAJc0tlcmJlcm9zQXV0aGVudGljYXRpb24sIHNLZXJiZXJvc09yTG9jYWxQYXNz d2QsIHNLZXJiZXJvc1RpY2tldENsZWFudXAsCi0tCXNLZXJiZXJvc0dldEFGU1Rva2VuLCBzS2Vy YmVyb3NVbmlxdWVDQ2FjaGUsIHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uLAotKwlzS2VyYmVyb3NH ZXRBRlNUb2tlbiwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBzS2VyYmVyb3NVc2VLdXNlcm9rLCBz UGFzc3dvcmRBdXRoZW50aWNhdGlvbiwKLSAJc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24s IHNMaXN0ZW5BZGRyZXNzLCBzQWRkcmVzc0ZhbWlseSwKLSAJc1ByaW50TW90ZCwgc1ByaW50TGFz dExvZywgc0lnbm9yZVJob3N0cywKLSAJc1gxMUZvcndhcmRpbmcsIHNYMTFEaXNwbGF5T2Zmc2V0 LCBzWDExVXNlTG9jYWxob3N0LAotQEAgLTY1NiwxMiArNjU5LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qg ewotIAl7ICJrZXJiZXJvc2dldGFmc3Rva2VuIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFM IH0sCi0gI2VuZGlmCi0gCXsgImtlcmJlcm9zdW5pcXVlY2NhY2hlIiwgc0tlcmJlcm9zVW5pcXVl Q0NhY2hlLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgImtlcmJlcm9zdXNla3VzZXJvayIsIHNLZXJi ZXJvc1VzZUt1c2Vyb2ssIFNTSENGR19BTEwgfSwKLSAjZWxzZQotIAl7ICJrZXJiZXJvc2F1dGhl bnRpY2F0aW9uIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCi0gCXsgImtlcmJlcm9zb3Js b2NhbHBhc3N3ZCIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJrZXJiZXJv c3RpY2tldGNsZWFudXAiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAia2Vy YmVyb3NnZXRhZnN0b2tlbiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJr ZXJiZXJvc3VuaXF1ZWNjYWNoZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7 ICJrZXJiZXJvc3VzZWt1c2Vyb2siLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKLSAjZW5k aWYKLSAJeyAia2VyYmVyb3N0Z3RwYXNzaW5nIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFM IH0sCi0gCXsgImFmc3Rva2VucGFzc2luZyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9 LAotQEAgLTI0NjMsNiArMjQ2OCwxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0 aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAorQEAgLTIyMjksNiArMjIyOSwx MCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRp b25zLCBjaGFyICpsaW5lLAogIAkJfQogIAkJYnJlYWs7CiAgCkBAIC0yNDUsMzkgKzIwMywzOSBA QCBpbmRleCAxMGI0M2Q1NmEuLjc1MTM4OGJjMCAxMDA2NDQKICAJY2FzZSBzTWF0Y2g6CiAgCQlp ZiAoY21kbGluZSkKICAJCQlmYXRhbCgiTWF0Y2ggZGlyZWN0aXZlIG5vdCBzdXBwb3J0ZWQgYXMg YSBjb21tYW5kLWxpbmUgIgotQEAgLTMwMzAsNiArMzAzOSw3IEBAIGNvcHlfc2V0X3NlcnZlcl9v cHRpb25zKFNlcnZlck9wdGlvbnMgKmRzdCwgU2VydmVyT3B0aW9ucyAqc3JjLCBpbnQgcHJlYXV0 aCkKLSAJTV9DUF9JTlRPUFQoY2xpZW50X2FsaXZlX2ludGVydmFsKTsKLSAJTV9DUF9JTlRPUFQo aXBfcW9zX2ludGVyYWN0aXZlKTsKLSAJTV9DUF9JTlRPUFQoaXBfcW9zX2J1bGspOwotKwlNX0NQ X0lOVE9QVCh1c2Vfa3VzZXJvayk7Ci0gCU1fQ1BfSU5UT1BUKHJla2V5X2xpbWl0KTsKLSAJTV9D UF9JTlRPUFQocmVrZXlfaW50ZXJ2YWwpOwotIAlNX0NQX0lOVE9QVChsb2dfbGV2ZWwpOwotQEAg LTMzMzksNiArMzM0OSw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCitAQCAtNDI0 Miw2ICs0MjQ2LDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykKICAJZHVtcF9jZmdf Zm10aW50KHNLZXJiZXJvc0dldEFGU1Rva2VuLCBvLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuKTsK ICAjIGVuZGlmCiAgCWR1bXBfY2ZnX2ZtdGludChzS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIG8tPmtl cmJlcm9zX3VuaXF1ZV9jY2FjaGUpOwogKwlkdW1wX2NmZ19mbXRpbnQoc0tlcmJlcm9zVXNlS3Vz ZXJvaywgby0+dXNlX2t1c2Vyb2spOwogICNlbmRpZgogICNpZmRlZiBHU1NBUEkKLSAJZHVtcF9j ZmdfZm10aW50KHNHc3NBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0aW9uKTsKKyAJ ZHVtcF9jZmdfZm10aW50KHNHU1NBUElBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0 aW9uKTsKIGRpZmYgLS1naXQgYS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAotaW5kZXggYmY1ODk5 MTFhLi45ODQzZjk2YzUgMTAwNjQ0CitpbmRleCA1ZjU2NzIwODIuLjdjMDAzYjhjNSAxMDA2NDQK IC0tLSBhL3NlcnZjb25mLmgKICsrKyBiL3NlcnZjb25mLmgKLUBAIC0xNTIsNiArMTUyLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgewotIAkJCQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcy4g Ki8KLSAJaW50ICAgICBrZXJiZXJvc191bmlxdWVfY2NhY2hlOwkJLyogSWYgdHJ1ZSwgdGhlIGFj cXVpcmVkIHRpY2tldCB3aWxsCi0gCQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNzaW9uIGNj YWNoZSAqLwotKwlpbnQJdXNlX2t1c2Vyb2s7Ci0gCWludCAgICAgZ3NzX2F1dGhlbnRpY2F0aW9u OwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1dGhlbnRpY2F0aW9uICovCi0gCWludCAgICAg Z3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8KLSAJ aW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyogSWYgdHJ1ZSwgZGVzdHJveSBjcmVkIGNhY2hl IG9uIGxvZ291dCAqLworQEAgLTMwNCw2ICszMDQsNyBAQCBTU0hDT05GX0lOVEZMQUcoa2VyYmVy b3NfYXV0aGVudGljYXRpb24sIEtlcmJlcm9zQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwsIDAs CisgU1NIQ09ORl9JTlRGTEFHKGtlcmJlcm9zX29yX2xvY2FsX3Bhc3N3ZCwgS2VyYmVyb3NPckxv Y2FsUGFzc3dkLCBTU0hDRkdfR0xPQkFMLCAxLCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NIQ09O Rl9JTlRGTEFHKGtlcmJlcm9zX3RpY2tldF9jbGVhbnVwLCBLZXJiZXJvc1RpY2tldENsZWFudXAs IFNTSENGR19HTE9CQUwsIDEsIFNTSENGR19DT1BZX05PTkUpIFwKKyBTU0hDT05GX0lOVEZMQUco a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSwgS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIFNTSENGR19HTE9C QUwsIDAsIFNTSENGR19DT1BZX05PTkUpIFwKKytTU0hDT05GX0lOVEZMQUcodXNlX2t1c2Vyb2ss IEtlcmJlcm9zVXNlS3VzZXJvaywgU1NIQ0ZHX0FMTCwgMSwgU1NIQ0ZHX0NPUFlfTUFUQ0gpIFwK KyBTU0hEX0NPTkZJR19LUkI1X0FGUworICNlbHNlIC8qIEtSQjUgKi8KKyAjZGVmaW5lIFNTSERf Q09ORklHX0VOVFJJRVNfS1JCNSBcCitAQCAtMzExLDYgKzMxMiw3IEBAIFNTSENPTkZfVU5TVVBQ T1JURURfSU5UKGtlcmJlcm9zX2F1dGhlbnRpY2F0aW9uLCBLZXJiZXJvc0F1dGhlbnRpY2F0aW9u LCBTU0hDRkdfCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3Nfb3JfbG9jYWxfcGFz c3dkLCBLZXJiZXJvc09yTG9jYWxQYXNzd2QsIFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VO U1VQUE9SVEVEX0lOVChrZXJiZXJvc190aWNrZXRfY2xlYW51cCwgS2VyYmVyb3NUaWNrZXRDbGVh bnVwLCBTU0hDRkdfR0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3Nf dW5pcXVlX2NjYWNoZSwgS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIFNTSENGR19HTE9CQUwpIFwKKytT U0hDT05GX1VOU1VQUE9SVEVEX0lOVCh1c2Vfa3VzZXJvaywgS2VyYmVyb3NVc2VLdXNlcm9rLCBT U0hDRkdfQUxMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3NfZ2V0X2Fmc190 b2tlbiwgS2VyYmVyb3NHZXRBRlNUb2tlbiwgU1NIQ0ZHX0dMT0JBTCkKKyAjZW5kaWYgLyogS1JC NSAqLworIAogZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnIGIvc3NoZF9jb25maWcKLWluZGV4IDhk YjlmMGZiMS4uZWE1YTg3OGU2IDEwMDY0NAoraW5kZXggNDA0YWExYmJiLi43NjI3OWQ3OTUgMTAw NjQ0CiAtLS0gYS9zc2hkX2NvbmZpZwogKysrIGIvc3NoZF9jb25maWcKLUBAIC03NSw2ICs3NSw3 IEBAIEF1dGhvcml6ZWRLZXlzRmlsZQkuc3NoL2F1dGhvcml6ZWRfa2V5cworQEAgLTc2LDYgKzc2 LDcgQEAgQXV0aG9yaXplZEtleXNGaWxlCS5zc2gvYXV0aG9yaXplZF9rZXlzCiAgI0tlcmJlcm9z T3JMb2NhbFBhc3N3ZCB5ZXMKICAjS2VyYmVyb3NUaWNrZXRDbGVhbnVwIHllcwogICNLZXJiZXJv c0dldEFGU1Rva2VuIG5vCkBAIC0yODYsMTAgKzI0NCwxMCBAQCBpbmRleCA4ZGI5ZjBmYjEuLmVh NWE4NzhlNiAxMDA2NDQKICAjIEdTU0FQSSBvcHRpb25zCiAgI0dTU0FQSUF1dGhlbnRpY2F0aW9u IG5vCiBkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRfY29uZmlnLjUKLWluZGV4IGQw YjBkZmUzNi4uMTc2Mjg3NGM0IDEwMDY0NAoraW5kZXggMDhhMzA0Y2RjLi4wMDc3ZWUwOTYgMTAw NjQ0CiAtLS0gYS9zc2hkX2NvbmZpZy41CiArKysgYi9zc2hkX2NvbmZpZy41Ci1AQCAtMTA2NSw2 ICsxMDY1LDEwIEBAIFRoZSBkZWZhdWx0IHZhbHVlCitAQCAtMTA4Miw2ICsxMDgyLDEwIEBAIFRo ZSBkZWZhdWx0IHZhbHVlCiAgLkNtIG5vCiAgY2FuIGxlYWQgdG8gb3ZlcndyaXRpbmcgcHJldmlv dXMgdGlja2V0cyBieSBzdWJzZXFlbnQgY29ubmVjdGlvbnMgdG8gdGhlIHNhbWUKICB1c2VyIGFj Y291bnQuCkBAIC0zMDAsNyArMjU4LDcgQEAgaW5kZXggZDBiMGRmZTM2Li4xNzYyODc0YzQgMTAw NjQ0CiAgLkl0IENtIEtleEFsZ29yaXRobXMKICBTcGVjaWZpZXMgdGhlIHBlcm1pdHRlZCBLRVgg KEtleSBFeGNoYW5nZSkgYWxnb3JpdGhtcyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbAogIG9mZmVyIHRv IGNsaWVudHMuCi1AQCAtMTM3OSw2ICsxMzgzLDcgQEAgQXZhaWxhYmxlIGtleXdvcmRzIGFyZQor QEAgLTEzOTgsNiArMTQwMiw3IEBAIEF2YWlsYWJsZSBrZXl3b3JkcyBhcmUKICAuQ20gSVBRb1Mg LAogIC5DbSBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uICwKICAuQ20gS2VyYmVyb3NBdXRo ZW50aWNhdGlvbiAsCkBAIC0zMDksNSArMjY3LDUgQEAgaW5kZXggZDBiMGRmZTM2Li4xNzYyODc0 YzQgMTAwNjQ0CiAgLkNtIE1heEF1dGhUcmllcyAsCiAgLkNtIE1heFNlc3Npb25zICwKIC0tIAot Mi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMTgtb3BlbnNzaC02LjRwMS1mcm9tdG8t cmVtb3RlLnBhdGNoIGIvMDAxOC1vcGVuc3NoLTYuNHAxLWZyb210by1yZW1vdGUucGF0Y2gKaW5k ZXggM2JlZTZhMy4uMjA0YzU3NSAxMDA2NDQKLS0tIGEvMDAxOC1vcGVuc3NoLTYuNHAxLWZyb210 by1yZW1vdGUucGF0Y2gKKysrIGIvMDAxOC1vcGVuc3NoLTYuNHAxLWZyb210by1yZW1vdGUucGF0 Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGMwOTVlMmY0OGUyNzlhZjY1YTk0MTlmNTgwYWM5Y2Fl MTQ0NTNhOTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGU2Mzg4ZGZkYjljYzYwYzUw NWI3ZDI3NjVlYzA2ODhkZTA4MjBhYmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBE bWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAy MDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMTgvNTRdIG9wZW5zc2gtNi40cDEt ZnJvbXRvLXJlbW90ZQorU3ViamVjdDogW1BBVENIIDE4LzUzXSBvcGVuc3NoLTYuNHAxLWZyb210 by1yZW1vdGUKIAogIyBVc2UgdHR5IGFsbG9jYXRpb24gZm9yIGEgcmVtb3RlIHNjcCAoIzk4NTY1 MCkKIC0tLQpAQCAtOSw3ICs5LDcgQEAgU3ViamVjdDogW1BBVENIIDE4LzU0XSBvcGVuc3NoLTYu NHAxLWZyb210by1yZW1vdGUKICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9zY3AuYyBiL3NjcC5jCi1pbmRleCAxZmFhOWE1NTUu LmQ4N2Q5MzlhMSAxMDA2NDQKK2luZGV4IDI4YWM3YTI5ZC4uNDgyMTUxNGJhIDEwMDY0NAogLS0t IGEvc2NwLmMKICsrKyBiL3NjcC5jCiBAQCAtMTE0Myw3ICsxMTQzLDEwIEBAIHRvcmVtb3RlKGlu dCBhcmdjLCBjaGFyICoqYXJndiwgZW51bSBzY3BfbW9kZV9lIG1vZGUsIGNoYXIgKnNmdHBfZGly ZWN0KQpAQCAtMjUsNSArMjUsNSBAQCBpbmRleCAxZmFhOWE1NTUuLmQ4N2Q5MzlhMSAxMDA2NDQK ICAJCQkJYWRkYXJncygmYWxpc3QsICIlcyIsCiAgCQkJCSAgICByZW1vdGVfcmVtb3RlX2FyZ3Mu bGlzdFtqXSk7CiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDE5LW9wZW5z c2gtNi42LjFwMS1sb2ctaW4tY2hyb290LnBhdGNoIGIvMDAxOS1vcGVuc3NoLTYuNi4xcDEtbG9n LWluLWNocm9vdC5wYXRjaAppbmRleCBiNGE0NmFiLi4yNTM4ZWMyIDEwMDY0NAotLS0gYS8wMDE5 LW9wZW5zc2gtNi42LjFwMS1sb2ctaW4tY2hyb290LnBhdGNoCisrKyBiLzAwMTktb3BlbnNzaC02 LjYuMXAxLWxvZy1pbi1jaHJvb3QucGF0Y2gKQEAgLTEsOSArMSw4IEBACi1Gcm9tIGYxODcyMTBj MThmOTMzYTNiMjM5YzQ5YmQwOWVmZWFiYmE0ZTQ3MTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CitGcm9tIDIzMTY1NDNiZjg1MDM1NzYyZDlhYWRmMjAwMDY3ZmNhZjJkMGUzMzggTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5j b20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFU Q0ggMTkvNTRdIG9wZW5zc2gtNi42LjFwMS1sb2ctaW4tY2hyb290CitTdWJqZWN0OiBbUEFUQ0gg MTkvNTNdIG9wZW5zc2gtNi42LjFwMS1sb2ctaW4tY2hyb290CiAKLSMgbG9nIHZpYSBtb25pdG9y IGluIGNocm9vdHMgd2l0aG91dCAvZGV2L2xvZyAoIzI2ODEpCiAtLS0KICBsb2cuYyAgICAgICAg ICAgICAgfCAxMSArKysrKysrKystLQogIGxvZy5oICAgICAgICAgICAgICB8ICAxICsKQEAgLTU4 LDEwICs1NywxMCBAQCBpbmRleCA4ZThkZmMyM2YuLjcwMDQ4YThhZiAxMDA2NDQKICBpbnQgICAg ICBsb2dfY2hhbmdlX2xldmVsKExvZ0xldmVsKTsKICBpbnQgICAgICBsb2dfaXNfb25fc3RkZXJy KHZvaWQpOwogZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0b3IuYwotaW5kZXggMDI1YzZh YmJlLi41MjU1MDgzYWIgMTAwNjQ0CitpbmRleCBmYTQ3Nzg5OWUuLjE0Y2RjY2YyZiAxMDA2NDQK IC0tLSBhL21vbml0b3IuYwogKysrIGIvbW9uaXRvci5jCi1AQCAtMjAzMCw5ICsyMDMwLDIyIEBA IG1vbml0b3JfaW5pdCh2b2lkKQorQEAgLTIwMTQsOSArMjAxNCwyMiBAQCBtb25pdG9yX2luaXQo dm9pZCkKICB9CiAgCiAgdm9pZApAQCAtMTAwLDcgKzk5LDcgQEAgaW5kZXggNzVhMGQ2MTgxLi5m NDcyMWM0NzIgMTAwNjQ0CiAgc3RydWN0IEF1dGhjdHh0OwogIHZvaWQgbW9uaXRvcl9jaGlsZF9w cmVhdXRoKHN0cnVjdCBzc2ggKiwgc3RydWN0IG1vbml0b3IgKik7CiBkaWZmIC0tZ2l0IGEvc2Vz c2lvbi5jIGIvc2Vzc2lvbi5jCi1pbmRleCA1MTdjYWI2YjYuLjBjMjY0NDhkOSAxMDA2NDQKK2lu ZGV4IGMyY2RkNmM0Zi4uNTcyNDg3YjRhIDEwMDY0NAogLS0tIGEvc2Vzc2lvbi5jCiArKysgYi9z ZXNzaW9uLmMKIEBAIC0xNjIsNiArMTYyLDcgQEAgbG9naW5fY2FwX3QgKmxjOwpAQCAtMTU0LDEy ICsxNTMsMTIgQEAgaW5kZXggNTE3Y2FiNmI2Li4wYzI2NDQ4ZDkgMTAwNjQ0CiAgCWRvX3JjX2Zp bGVzKHNzaCwgcywgc2hlbGwpOwogIAogIAkvKiByZXN0b3JlIFNJR1BJUEUgZm9yIGNoaWxkICov Ci1AQCAtMTY0NSw5ICsxNjQxLDE3IEBAIGRvX2NoaWxkKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lv biAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKK0BAIC0xNjQ2LDkgKzE2NDIsMTcgQEAgZG9fY2hp bGQoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBjb25zdCBjaGFyICpjb21tYW5kKQogICNp ZmRlZiBXSVRIX1NFTElOVVgKICAJCXNzaF9zZWxpbnV4X2NoYW5nZV9jb250ZXh0KCJzZnRwZF90 Iik7CiAgI2VuZGlmCi0tCQlleGl0KHNmdHBfc2VydmVyX21haW4oaSwgYXJndiwgcy0+cHcpKTsK LSsJCWV4aXQoc2Z0cF9zZXJ2ZXJfbWFpbihpLCBhcmd2LCBzLT5wdywgaGF2ZV9kZXZfbG9nKSk7 CistCQlleGl0KHNmdHBfc2VydmVyX21haW4oc2Z0cF9hcmdjLCBzZnRwX2FyZ3YsIHMtPnB3KSk7 CisrCQlleGl0KHNmdHBfc2VydmVyX21haW4oc2Z0cF9hcmdjLCBzZnRwX2FyZ3YsIHMtPnB3LCBo YXZlX2Rldl9sb2cpKTsKICAJfQogIAogKwkvKgpAQCAtMTg1LDEwICsxODQsMTAgQEAgaW5kZXgg MmM3MGY4OWJjLi5iYmI3OWYyNzggMTAwNjQ0CiArCXJldHVybiAoc2Z0cF9zZXJ2ZXJfbWFpbihh cmdjLCBhcmd2LCB1c2VyX3B3LCAwKSk7CiAgfQogZGlmZiAtLWdpdCBhL3NmdHAtc2VydmVyLmMg Yi9zZnRwLXNlcnZlci5jCi1pbmRleCBlYmRiMzFkMzIuLjdhNmU0ZmE4OCAxMDA2NDQKK2luZGV4 IGY4N2ZjNTgyNS4uZWVmOWE5NmY4IDEwMDY0NAogLS0tIGEvc2Z0cC1zZXJ2ZXIuYwogKysrIGIv c2Z0cC1zZXJ2ZXIuYwotQEAgLTE4OTMsNyArMTg5Myw3IEBAIHNmdHBfc2VydmVyX3VzYWdlKHZv aWQpCitAQCAtMTkxOCw3ICsxOTE4LDcgQEAgc2Z0cF9zZXJ2ZXJfdXNhZ2Uodm9pZCkKICB9CiAg CiAgaW50CkBAIC0xOTcsNyArMTk2LDcgQEAgaW5kZXggZWJkYjMxZDMyLi43YTZlNGZhODggMTAw NjQ0CiAgewogIAlpbnQgaSwgciwgaW4sIG91dCwgY2gsIHNraXBhcmdzID0gMCwgbG9nX3N0ZGVy ciA9IDA7CiAgCXNzaXplX3QgbGVuLCBvbGVuOwotQEAgLTE5MDUsNyArMTkwNSw3IEBAIHNmdHBf c2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3 KQorQEAgLTE5MzAsNyArMTkzMCw3IEBAIHNmdHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3KQogIAlleHRlcm4gY2hhciAqX19wcm9nbmFt ZTsKICAKICAJX19wcm9nbmFtZSA9IHNzaF9nZXRfcHJvZ25hbWUoYXJndlswXSk7CkBAIC0yMDYs NyArMjA1LDcgQEAgaW5kZXggZWJkYjMxZDMyLi43YTZlNGZhODggMTAwNjQ0CiAgCiAgCXB3ID0g cHdjb3B5KHVzZXJfcHcpOwogIAotQEAgLTE5NzgsNyArMTk3OCw3IEBAIHNmdHBfc2VydmVyX21h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3KQorQEAgLTIw MDMsNyArMjAwMyw3IEBAIHNmdHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBz dHJ1Y3QgcGFzc3dkICp1c2VyX3B3KQogIAkJfQogIAl9CiAgCkBAIC0yMjcsNyArMjI2LDcgQEAg aW5kZXggMmJkZThiYjdmLi5kZGYxYTM5NjggMTAwNjQ0CiAraW50CXNmdHBfc2VydmVyX21haW4o aW50LCBjaGFyICoqLCBzdHJ1Y3QgcGFzc3dkICosIGludCk7CiAgdm9pZAlzZnRwX3NlcnZlcl9j bGVhbnVwX2V4aXQoaW50KSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwogZGlmZiAtLWdpdCBh L3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKLWluZGV4IDlkNzVhNDU1NS4uMjNiODBl YjAxIDEwMDY0NAoraW5kZXggOGEzMTIxZDAxLi44YTA2NjE2ZmQgMTAwNjQ0CiAtLS0gYS9zc2hk LXNlc3Npb24uYwogKysrIGIvc3NoZC1zZXNzaW9uLmMKIEBAIC0zODcsNyArMzg3LDcgQEAgcHJp dnNlcF9wb3N0YXV0aChzdHJ1Y3Qgc3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKQEAgLTI1 Miw1ICsyNTEsNSBAQCBpbmRleCA5ZDc1YTQ1NTUuLjIzYjgwZWIwMSAxMDA2NDQKICAJLyogRGVt b3RlIHRoZSBwcml2YXRlIGtleXMgdG8gcHVibGljIGtleXMuICovCiAgCWRlbW90ZV9zZW5zaXRp dmVfZGF0YSgpOwogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAyMC1vcGVu c3NoLTYuNi4xcDEtc2NwLW5vbi1leGlzdGluZy1kaXJlY3RvcnkucGF0Y2ggYi8wMDIwLW9wZW5z c2gtNi42LjFwMS1zY3Atbm9uLWV4aXN0aW5nLWRpcmVjdG9yeS5wYXRjaAppbmRleCA2ZTI2NmYy Li4zMmQ0YjYwIDEwMDY0NAotLS0gYS8wMDIwLW9wZW5zc2gtNi42LjFwMS1zY3Atbm9uLWV4aXN0 aW5nLWRpcmVjdG9yeS5wYXRjaAorKysgYi8wMDIwLW9wZW5zc2gtNi42LjFwMS1zY3Atbm9uLWV4 aXN0aW5nLWRpcmVjdG9yeS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gMjc2NzI5ZGMzN2Qy MDRlM2RhODA0NTU3ODhkZWVhYzg1NGM3MmI0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zy b20gY2Y4ZDlkMGY2MDJhYzIzZmEzNWU0ZjhiNjM4YTA0OTQ1NjRkN2RjNCBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4K IERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAy MC81NF0gb3BlbnNzaC02LjYuMXAxLXNjcC1ub24tZXhpc3RpbmctZGlyZWN0b3J5CitTdWJqZWN0 OiBbUEFUQ0ggMjAvNTNdIG9wZW5zc2gtNi42LjFwMS1zY3Atbm9uLWV4aXN0aW5nLWRpcmVjdG9y eQogCiAjIHNjcCBmaWxlIGludG8gbm9uLWV4aXN0aW5nIGRpcmVjdG9yeSAoIzExNDIyMjMpCiAt LS0KQEAgLTksNyArOSw3IEBAIFN1YmplY3Q6IFtQQVRDSCAyMC81NF0gb3BlbnNzaC02LjYuMXAx LXNjcC1ub24tZXhpc3RpbmctZGlyZWN0b3J5CiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9u cygrKQogCiBkaWZmIC0tZ2l0IGEvc2NwLmMgYi9zY3AuYwotaW5kZXggZDg3ZDkzOWExLi5iNWFk NDVjMTIgMTAwNjQ0CitpbmRleCA0ODIxNTE0YmEuLmZjYTQzOTNmMyAxMDA2NDQKIC0tLSBhL3Nj cC5jCiArKysgYi9zY3AuYwogQEAgLTE4NzEsNiArMTg3MSwxMCBAQCBzaW5rKGludCBhcmdjLCBj aGFyICoqYXJndiwgY29uc3QgY2hhciAqc3JjKQpAQCAtMjQsNSArMjQsNSBAQCBpbmRleCBkODdk OTM5YTEuLmI1YWQ0NWMxMiAxMDA2NDQKICAJCW1vZGUgfD0gU19JV1VTUjsKICAJCWlmICgob2Zk ID0gb3BlbihucCwgT19XUk9OTFl8T19DUkVBVCwgbW9kZSkpID09IC0xKSB7CiAtLSAKLTIuNTMu MAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDIxLW9wZW5zc2gtNi42cDEtR1NTQVBJRW5hYmxl azV1c2Vycy5wYXRjaCBiLzAwMjEtb3BlbnNzaC02LjZwMS1HU1NBUElFbmFibGVrNXVzZXJzLnBh dGNoCmluZGV4IGQ2Mjc3OGIuLjk2ZWVmZjQgMTAwNjQ0Ci0tLSBhLzAwMjEtb3BlbnNzaC02LjZw MS1HU1NBUElFbmFibGVrNXVzZXJzLnBhdGNoCisrKyBiLzAwMjEtb3BlbnNzaC02LjZwMS1HU1NB UElFbmFibGVrNXVzZXJzLnBhdGNoCkBAIC0xLDE0ICsxLDE0IEBACi1Gcm9tIGNmNmY4MzkzNzBi MWY4YTIwN2RlMDhiNGIwMGMyOGNlNjY4NGQxODIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitG cm9tIGRkMTg3MTk3MjE3M2M5ZjQ4MzZjNGQ4MDk2NDExOTgxZDI5MWZmODUgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+ CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0gg MjEvNTRdIG9wZW5zc2gtNi42cDEtR1NTQVBJRW5hYmxlazV1c2VycworU3ViamVjdDogW1BBVENI IDIxLzUzXSBvcGVuc3NoLTYuNnAxLUdTU0FQSUVuYWJsZWs1dXNlcnMKIAogLS0tCi0gZ3NzLXNl cnYta3JiNS5jIHwgIDMgKy0tCi0gc2VydmNvbmYuYyAgICAgIHwgMTMgKysrKysrKysrKysrLQot IHNlcnZjb25mLmggICAgICB8ICAxICsKLSBzc2hkX2NvbmZpZyAgICAgfCAgMSArCi0gNCBmaWxl cyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGdzcy1zZXJ2LWty YjUuYyB8IDMgKy0tCisgc2VydmNvbmYuYyAgICAgIHwgNSArKysrKworIHNlcnZjb25mLmggICAg ICB8IDYgKysrKy0tCisgc3NoZF9jb25maWcgICAgIHwgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAx MSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvZ3NzLXNlcnYt a3JiNS5jIGIvZ3NzLXNlcnYta3JiNS5jCiBpbmRleCA2ZjU4MjZjZTguLjcyMzUwOTQwOSAxMDA2 NDQKQEAgLTMyLDk1ICszMiw1NyBAQCBpbmRleCA2ZjU4MjZjZTguLjcyMzUwOTQwOSAxMDA2NDQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazVsb2dpbl9leGlzdHMp OwogIAl9CiBkaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKLWluZGV4IDc1MTM4 OGJjMC4uOGRlODFmZGM4IDEwMDY0NAoraW5kZXggNWRlMDNmM2JmLi4zZGJmY2NlYTggMTAwNjQ0 CiAtLS0gYS9zZXJ2Y29uZi5jCiArKysgYi9zZXJ2Y29uZi5jCi1AQCAtMTQwLDYgKzE0MCw3IEBA IGluaXRpYWxpemVfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKLSAJb3B0 aW9ucy0+Z3NzX3N0b3JlX3Jla2V5ID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGht cyA9IE5VTEw7Ci0gCW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gLTE7Ci0rCW9wdGlvbnMtPmVuYWJs ZV9rNXVzZXJzID0gLTE7Ci0gCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID0gLTE7 Ci0gCW9wdGlvbnMtPmtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlvbiA9IC0xOwotIAlvcHRp b25zLT5wZXJtaXRfZW1wdHlfcGFzc3dkID0gLTE7Ci1AQCAtMzk2LDYgKzM5Nyw4IEBAIGZpbGxf ZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotICNlbmRpZgot IAlpZiAob3B0aW9ucy0+dXNlX2t1c2Vyb2sgPT0gLTEpCi0gCQlvcHRpb25zLT51c2Vfa3VzZXJv ayA9IDE7Ci0rCWlmIChvcHRpb25zLT5lbmFibGVfazV1c2VycyA9PSAtMSkKLSsJCW9wdGlvbnMt PmVuYWJsZV9rNXVzZXJzID0gMDsKLSAJaWYgKG9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0 aW9uID09IC0xKQotIAkJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAxOwotIAlp ZiAob3B0aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID09IC0xKQotQEAgLTU4 Miw3ICs1ODUsNyBAQCB0eXBlZGVmIGVudW0gewotIAlzSG9zdEtleUFsZ29yaXRobXMsIHNQZXJT b3VyY2VNYXhTdGFydHVwcywgc1BlclNvdXJjZU5ldEJsb2NrU2l6ZSwKLSAJc1BlclNvdXJjZVBl bmFsdGllcywgc1BlclNvdXJjZVBlbmFsdHlFeGVtcHRMaXN0LAotIAlzQ2xpZW50QWxpdmVJbnRl cnZhbCwgc0NsaWVudEFsaXZlQ291bnRNYXgsIHNBdXRob3JpemVkS2V5c0ZpbGUsCi0tCXNHc3NB dXRoZW50aWNhdGlvbiwgc0dzc0NsZWFudXBDcmVkcywgc0dzc0RlbGVnYXRlQ3JlZHMsIHNHc3NT dHJpY3RBY2NlcHRvciwKLSsJc0dzc0F1dGhlbnRpY2F0aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBz R3NzRGVsZWdhdGVDcmVkcywgc0dzc0VuYWJsZWs1dXNlcnMsIHNHc3NTdHJpY3RBY2NlcHRvciwK LSAJc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywgc0dzc1N0b3JlUmVrZXksCi0gCXNBY2Nl cHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCi0gCXNNYXRjaCwgc1Blcm1pdE9wZW4sIHNQ ZXJtaXRMaXN0ZW4sIHNGb3JjZUNvbW1hbmQsIHNDaHJvb3REaXJlY3RvcnksCi1AQCAtNjc5LDYg KzY4Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJnc3NhcGlrZXlleGNoYW5nZSIsIHNHc3NL ZXlFeCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtl eSIsIHNHc3NTdG9yZVJla2V5LCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtleGFsZ29y aXRobXMiLCBzR3NzS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJnc3NhcGll bmFibGVrNXVzZXJzIiwgc0dzc0VuYWJsZWs1dXNlcnMsIFNTSENGR19BTEwgfSwKLSAjZWxzZQot IAl7ICJnc3NhcGlhdXRoZW50aWNhdGlvbiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAot IAl7ICJnc3NhcGljbGVhbnVwY3JlZGVudGlhbHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9C QUwgfSwKLUBAIC02ODgsNiArNjkyLDcgQEAgc3RhdGljIHN0cnVjdCB7Ci0gCXsgImdzc2FwaWtl eWV4Y2hhbmdlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0 b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0g CXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwK LSsJeyAiZ3NzYXBpZW5hYmxlazV1c2VycyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAot ICNlbmRpZgotIAl7ICJnc3N1c2VzZXNzaW9uY2NhY2hlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdf R0xPQkFMIH0sCi0gCXsgImdzc2FwaXVzZXNlc3Npb25jcmVkY2FjaGUiLCBzVW5zdXBwb3J0ZWQs IFNTSENGR19HTE9CQUwgfSwKLUBAIC0yNDcyLDYgKzI0NzcsMTAgQEAgcHJvY2Vzc19zZXJ2ZXJf Y29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwKK0BA IC0yMjMzLDYgKzIyMzMsMTAgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2Vy dmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwKICAJCWludHB0ciA9ICZvcHRpb25zLT51 c2Vfa3VzZXJvazsKICAJCWdvdG8gcGFyc2VfZmxhZzsKICAKLSsJY2FzZSBzR3NzRW5hYmxlazV1 c2VyczoKKysJY2FzZSBzR1NTQVBJRW5hYmxlazV1c2VyczoKICsJCWludHB0ciA9ICZvcHRpb25z LT5lbmFibGVfazV1c2VyczsKICsJCWdvdG8gcGFyc2VfZmxhZzsKICsKICAJY2FzZSBzTWF0Y2g6 CiAgCQlpZiAoY21kbGluZSkKICAJCQlmYXRhbCgiTWF0Y2ggZGlyZWN0aXZlIG5vdCBzdXBwb3J0 ZWQgYXMgYSBjb21tYW5kLWxpbmUgIgotQEAgLTMwNDAsNiArMzA0OSw3IEBAIGNvcHlfc2V0X3Nl cnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKmRzdCwgU2VydmVyT3B0aW9ucyAqc3JjLCBpbnQg cHJlYXV0aCkKLSAJTV9DUF9JTlRPUFQoaXBfcW9zX2ludGVyYWN0aXZlKTsKLSAJTV9DUF9JTlRP UFQoaXBfcW9zX2J1bGspOwotIAlNX0NQX0lOVE9QVCh1c2Vfa3VzZXJvayk7Ci0rCU1fQ1BfSU5U T1BUKGVuYWJsZV9rNXVzZXJzKTsKLSAJTV9DUF9JTlRPUFQocmVrZXlfbGltaXQpOwotIAlNX0NQ X0lOVE9QVChyZWtleV9pbnRlcnZhbCk7Ci0gCU1fQ1BfSU5UT1BUKGxvZ19sZXZlbCk7Ci1AQCAt MzM1MCw2ICszMzYwLDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykKK0BAIC00MjQ3 LDYgKzQyNTEsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQogICMgZW5kaWYKICAJ ZHVtcF9jZmdfZm10aW50KHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgby0+a2VyYmVyb3NfdW5pcXVl X2NjYWNoZSk7CiAgCWR1bXBfY2ZnX2ZtdGludChzS2VyYmVyb3NVc2VLdXNlcm9rLCBvLT51c2Vf a3VzZXJvayk7Ci0rCWR1bXBfY2ZnX2ZtdGludChzR3NzRW5hYmxlazV1c2Vycywgby0+ZW5hYmxl X2s1dXNlcnMpOworKwlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSUVuYWJsZWs1dXNlcnMsIG8tPmVu YWJsZV9rNXVzZXJzKTsKICAjZW5kaWYKICAjaWZkZWYgR1NTQVBJCi0gCWR1bXBfY2ZnX2ZtdGlu dChzR3NzQXV0aGVudGljYXRpb24sIG8tPmdzc19hdXRoZW50aWNhdGlvbik7CisgCWR1bXBfY2Zn X2ZtdGludChzR1NTQVBJQXV0aGVudGljYXRpb24sIG8tPmdzc19hdXRoZW50aWNhdGlvbik7CiBk aWZmIC0tZ2l0IGEvc2VydmNvbmYuaCBiL3NlcnZjb25mLmgKLWluZGV4IDk4NDNmOTZjNS4uNTY5 MTAwZTQ3IDEwMDY0NAoraW5kZXggN2MwMDNiOGM1Li5jNTViNjRjNzMgMTAwNjQ0CiAtLS0gYS9z ZXJ2Y29uZi5oCiArKysgYi9zZXJ2Y29uZi5oCi1AQCAtMTUzLDYgKzE1Myw3IEBAIHR5cGVkZWYg c3RydWN0IHsKLSAJaW50ICAgICBrZXJiZXJvc191bmlxdWVfY2NhY2hlOwkJLyogSWYgdHJ1ZSwg dGhlIGFjcXVpcmVkIHRpY2tldCB3aWxsCi0gCQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNz aW9uIGNjYWNoZSAqLwotIAlpbnQJdXNlX2t1c2Vyb2s7Ci0rCWludAkJZW5hYmxlX2s1dXNlcnM7 Ci0gCWludCAgICAgZ3NzX2F1dGhlbnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJ IGF1dGhlbnRpY2F0aW9uICovCi0gCWludCAgICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVy bWl0IEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8KLSAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJ LyogSWYgdHJ1ZSwgZGVzdHJveSBjcmVkIGNhY2hlIG9uIGxvZ291dCAqLworQEAgLTMyNSw3ICsz MjUsOCBAQCBTU0hDT05GX0lOVEZMQUcoZ3NzX2RlbGVnX2NyZWRzLCBHU1NBUElEZWxlZ2F0ZUNy ZWRlbnRpYWxzLCBTU0hDRkdfR0xPQkFMLCAxLCBTUworIFNTSENPTkZfSU5URkxBRyhnc3Nfc3Ry aWN0X2FjY2VwdG9yLCBHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrLCBTU0hDRkdfR0xPQkFMLCAx LCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NIQ09ORl9JTlRGTEFHKGdzc19rZXlleCwgR1NTQVBJ S2V5RXhjaGFuZ2UsIFNTSENGR19HTE9CQUwsIDAsIFNTSENGR19DT1BZX05PTkUpIFwKKyBTU0hD T05GX0lOVEZMQUcoZ3NzX3N0b3JlX3Jla2V5LCBHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtl eSwgU1NIQ0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorLVNTSENPTkZfU1RSSU5H KGdzc19rZXhfYWxnb3JpdGhtcywgR1NTQVBJS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCwg U1NIQ0ZHX0NPUFlfTk9ORSkKKytTU0hDT05GX1NUUklORyhnc3Nfa2V4X2FsZ29yaXRobXMsIEdT U0FQSUtleEFsZ29yaXRobXMsIFNTSENGR19HTE9CQUwsIFNTSENGR19DT1BZX05PTkUpIFwKKytT U0hDT05GX0lOVEZMQUcoZW5hYmxlX2s1dXNlcnMsIEdTU0FQSUVuYWJsZWs1dXNlcnMsIFNTSENG R19BTEwsIDAsIFNTSENGR19DT1BZX01BVENIKQorICNlbHNlIC8qIEdTU0FQSSAqLworICNkZWZp bmUgU1NIRF9DT05GSUdfRU5UUklFU19HU1MgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGdz c19hdXRoZW50aWNhdGlvbiwgR1NTQVBJQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwpIFwKK0BA IC0zMzQsNyArMzM1LDggQEAgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2RlbGVnX2NyZWRz LCBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzLCBTU0hDRkdfR0xPQkEKKyBTU0hDT05GX1VOU1VQ UE9SVEVEX0lOVChnc3Nfc3RyaWN0X2FjY2VwdG9yLCBHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNr LCBTU0hDRkdfR0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2tleWV4LCBH U1NBUElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCkgXAorIFNTSENPTkZfVU5TVVBQT1JURURf SU5UKGdzc19zdG9yZV9yZWtleSwgR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXksIFNTSENG R19HTE9CQUwpIFwKKy1TU0hDT05GX1VOU1VQUE9SVEVEX1NUUklORyhnc3Nfa2V4X2FsZ29yaXRo bXMsIEdTU0FQSUtleEFsZ29yaXRobXMsIFNTSENGR19HTE9CQUwpCisrU1NIQ09ORl9VTlNVUFBP UlRFRF9TVFJJTkcoZ3NzX2tleF9hbGdvcml0aG1zLCBHU1NBUElLZXhBbGdvcml0aG1zLCBTU0hD RkdfR0xPQkFMKSBcCisrU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZW5hYmxlX2s1dXNlcnMsIEdT U0FQSUVuYWJsZWs1dXNlcnMsIFNTSENGR19BTEwpCisgI2VuZGlmIC8qIEdTU0FQSSAqLworIAor ICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFUyBcCiBkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcg Yi9zc2hkX2NvbmZpZwotaW5kZXggZWE1YTg3OGU2Li4zMzcxM2M4ODYgMTAwNjQ0CitpbmRleCA3 NjI3OWQ3OTUuLmQzOGQ4OTlhNiAxMDA2NDQKIC0tLSBhL3NzaGRfY29uZmlnCiArKysgYi9zc2hk X2NvbmZpZwotQEAgLTgyLDYgKzgyLDcgQEAgQXV0aG9yaXplZEtleXNGaWxlCS5zc2gvYXV0aG9y aXplZF9rZXlzCitAQCAtODMsNiArODMsNyBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRo b3JpemVkX2tleXMKICAjR1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzIHllcwogICNHU1NBUElTdHJp Y3RBY2NlcHRvckNoZWNrIHllcwogICNHU1NBUElLZXlFeGNoYW5nZSBubwpAQCAtMTI5LDUgKzkx LDUgQEAgaW5kZXggZWE1YTg3OGU2Li4zMzcxM2M4ODYgMTAwNjQ0CiAgIyBTZXQgdGhpcyB0byAn eWVzJyB0byBlbmFibGUgUEFNIGF1dGhlbnRpY2F0aW9uLCBhY2NvdW50IHByb2Nlc3NpbmcsCiAg IyBhbmQgc2Vzc2lvbiBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIGVuYWJsZWQsIFBBTSBhdXRoZW50 aWNhdGlvbiB3aWxsCiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDIyLW9w ZW5zc2gtNi44cDEtc3NoZFQtb3V0cHV0LnBhdGNoIGIvMDAyMi1vcGVuc3NoLTYuOHAxLXNzaGRU LW91dHB1dC5wYXRjaAppbmRleCBiZWJhZGYzLi5hY2ZlM2Y4IDEwMDY0NAotLS0gYS8wMDIyLW9w ZW5zc2gtNi44cDEtc3NoZFQtb3V0cHV0LnBhdGNoCisrKyBiLzAwMjItb3BlbnNzaC02LjhwMS1z c2hkVC1vdXRwdXQucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDQ5YmQ4YWExNjFlNTA1ZTlj NTllOTcyNDZlODk4MWJlM2ZkOTJmNjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGM1 Y2MxNjZmZjllZWJhNmIzNDYwMjJhYTFlZTBlNGQ3OGEyZTFmZGQgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRl OiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMjIvNTRd IG9wZW5zc2gtNi44cDEtc3NoZFQtb3V0cHV0CitTdWJqZWN0OiBbUEFUQ0ggMjIvNTNdIG9wZW5z c2gtNi44cDEtc3NoZFQtb3V0cHV0CiAKICMgYXBwbHkgdXBzdHJlYW0gcGF0Y2ggYW5kIG1ha2Ug c3NoZCAtVCBtb3JlIGNvbnNpc3RlbnQgKCMxMTg3NTIxKQogLS0tCkBAIC05LDEwICs5LDEwIEBA IFN1YmplY3Q6IFtQQVRDSCAyMi81NF0gb3BlbnNzaC02LjhwMS1zc2hkVC1vdXRwdXQKICAxIGZp bGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBh L3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCA4ZGU4MWZkYzguLjgwNDU3NTZmYiAxMDA2 NDQKK2luZGV4IDNkYmZjY2VhOC4uMjcxNDdhMWU3IDEwMDY0NAogLS0tIGEvc2VydmNvbmYuYwog KysrIGIvc2VydmNvbmYuYwotQEAgLTM0MDMsNyArMzQwMyw3IEBAIGR1bXBfY29uZmlnKFNlcnZl ck9wdGlvbnMgKm8pCitAQCAtNDI5NCw3ICs0Mjk0LDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0 aW9ucyAqbykKICAJZHVtcF9jZmdfc3RyaW5nKHNYQXV0aExvY2F0aW9uLCBvLT54YXV0aF9sb2Nh dGlvbik7CiAgCWR1bXBfY2ZnX3N0cmluZyhzQ2lwaGVycywgby0+Y2lwaGVycyk7CiAgCWR1bXBf Y2ZnX3N0cmluZyhzTWFjcywgby0+bWFjcyk7CkBAIC0yMiw1ICsyMiw1IEBAIGluZGV4IDhkZTgx ZmRjOC4uODA0NTc1NmZiIDEwMDY0NAogIAlkdW1wX2NmZ19zdHJpbmcoc0Nocm9vdERpcmVjdG9y eSwgby0+Y2hyb290X2RpcmVjdG9yeSk7CiAgCWR1bXBfY2ZnX3N0cmluZyhzVHJ1c3RlZFVzZXJD QUtleXMsIG8tPnRydXN0ZWRfdXNlcl9jYV9rZXlzKTsKIC0tIAotMi41My4wCisyLjU1LjAKIAoK ZGlmZiAtLWdpdCBhLzAwMjMtb3BlbnNzaC02LjdwMS1zZnRwLWZvcmNlLXBlcm1pc3Npb24ucGF0 Y2ggYi8wMDIzLW9wZW5zc2gtNi43cDEtc2Z0cC1mb3JjZS1wZXJtaXNzaW9uLnBhdGNoCmluZGV4 IDNkN2Y1ZDAuLjA0OWI2MWUgMTAwNjQ0Ci0tLSBhLzAwMjMtb3BlbnNzaC02LjdwMS1zZnRwLWZv cmNlLXBlcm1pc3Npb24ucGF0Y2gKKysrIGIvMDAyMy1vcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2Ut cGVybWlzc2lvbi5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gM2VhNDFlZjliZjJkYTg4MTRh MWY1Nzk4OThhODM5YjUxNTBkN2I2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNzFi MmNhN2JiZjM5NTE0ZTk2ZGE1NzM3NThkMTU3YTdkNTI2MjViYyBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6 IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyMy81NF0g b3BlbnNzaC02LjdwMS1zZnRwLWZvcmNlLXBlcm1pc3Npb24KK1N1YmplY3Q6IFtQQVRDSCAyMy81 M10gb3BlbnNzaC02LjdwMS1zZnRwLWZvcmNlLXBlcm1pc3Npb24KIAogIyBBZGQgc2Z0cCBvcHRp b24gdG8gZm9yY2UgbW9kZSBvZiBjcmVhdGVkIGZpbGVzICgjMTE5MTA1NSkKIC0tLQpAQCAtMTAs NyArMTAsNyBAQCBTdWJqZWN0OiBbUEFUQ0ggMjMvNTRdIG9wZW5zc2gtNi43cDEtc2Z0cC1mb3Jj ZS1wZXJtaXNzaW9uCiAgMiBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvc2Z0cC1zZXJ2ZXIuOCBiL3NmdHAtc2VydmVyLjgKLWlu ZGV4IDUzMTFiZjkyOS4uNWU2ZTNhYTQ0IDEwMDY0NAoraW5kZXggZDkwNjBhYjlhLi5jZDViMDM1 ZDYgMTAwNjQ0CiAtLS0gYS9zZnRwLXNlcnZlci44CiArKysgYi9zZnRwLXNlcnZlci44CiBAQCAt MzgsNiArMzgsNyBAQApAQCAtMjEsNyArMjEsNyBAQCBpbmRleCA1MzExYmY5MjkuLjVlNmUzYWE0 NCAxMDA2NDQKICAuRWsKICAuTm0KICAuRmwgUSBBciBwcm90b2NvbF9mZWF0dXJlCi1AQCAtMTM4 LDYgKzEzOSwxMiBAQCBTZXRzIGFuIGV4cGxpY2l0CitAQCAtMTQ5LDYgKzE1MCwxMiBAQCBTZXRz IGFuIGV4cGxpY2l0CiAgLlhyIHVtYXNrIDIKICB0byBiZSBhcHBsaWVkIHRvIG5ld2x5LWNyZWF0 ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLCBpbnN0ZWFkIG9mIHRoZQogIHVzZXIncyBkZWZhdWx0 IG1hc2suCkBAIC0zNSw3ICszNSw3IEBAIGluZGV4IDUzMTFiZjkyOS4uNWU2ZTNhYTQ0IDEwMDY0 NAogIC5QcAogIE9uIHNvbWUgc3lzdGVtcywKIGRpZmYgLS1naXQgYS9zZnRwLXNlcnZlci5jIGIv c2Z0cC1zZXJ2ZXIuYwotaW5kZXggN2E2ZTRmYTg4Li5kMThjNGFjYjkgMTAwNjQ0CitpbmRleCBl ZWY5YTk2ZjguLjU2N2NmNmU5YSAxMDA2NDQKIC0tLSBhL3NmdHAtc2VydmVyLmMKICsrKyBiL3Nm dHAtc2VydmVyLmMKIEBAIC02OCw2ICs2OCwxMCBAQCBzdHJ1Y3Qgc3NoYnVmICpvcXVldWU7CkBA IC03Nyw3ICs3Nyw3IEBAIGluZGV4IDdhNmU0ZmE4OC4uZDE4YzRhY2I5IDEwMDY0NAogIAlpZiAo c3RhdHVzICE9IFNTSDJfRlhfT0spCiAgCQlzZW5kX3N0YXR1cyhpZCwgc3RhdHVzKTsKICAJZnJl ZShuYW1lKTsKLUBAIC0xODg2LDcgKzE4OTcsNyBAQCBzZnRwX3NlcnZlcl91c2FnZSh2b2lkKQor QEAgLTE5MTEsNyArMTkyMiw3IEBAIHNmdHBfc2VydmVyX3VzYWdlKHZvaWQpCiAgCWZwcmludGYo c3RkZXJyLAogIAkgICAgInVzYWdlOiAlcyBbLWVoUl0gWy1kIHN0YXJ0X2RpcmVjdG9yeV0gWy1m IGxvZ19mYWNpbGl0eV0gIgogIAkgICAgIlstbCBsb2dfbGV2ZWxdXG5cdFstUCBkZW5pZWRfcmVx dWVzdHNdICIKQEAgLTg2LDcgKzg2LDcgQEAgaW5kZXggN2E2ZTRmYTg4Li5kMThjNGFjYjkgMTAw NjQ0CiAgCSAgICAiICAgICAgICVzIC1RIHByb3RvY29sX2ZlYXR1cmVcbiIsCiAgCSAgICBfX3By b2duYW1lLCBfX3Byb2duYW1lKTsKICAJZXhpdCgxKTsKLUBAIC0xOTEwLDcgKzE5MjEsNyBAQCBz ZnRwX3NlcnZlcl9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndiwgc3RydWN0IHBhc3N3ZCAqdXNl cl9wdywgaW50IHJlc2V0X2hhbmRsZQorQEAgLTE5MzUsNyArMTk0Niw3IEBAIHNmdHBfc2VydmVy X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBpbnQg cmVzZXRfaGFuZGxlCiAgCXB3ID0gcHdjb3B5KHVzZXJfcHcpOwogIAogIAl3aGlsZSAoIXNraXBh cmdzICYmIChjaCA9IGdldG9wdChhcmdjLCBhcmd2LApAQCAtOTUsNyArOTUsNyBAQCBpbmRleCA3 YTZlNGZhODguLmQxOGM0YWNiOSAxMDA2NDQKICAJCXN3aXRjaCAoY2gpIHsKICAJCWNhc2UgJ1En OgogIAkJCWlmIChzdHJjYXNlY21wKG9wdGFyZywgInJlcXVlc3RzIikgIT0gMCkgewotQEAgLTE5 NzIsNiArMTk4MywxNSBAQCBzZnRwX3NlcnZlcl9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndiwg c3RydWN0IHBhc3N3ZCAqdXNlcl9wdywgaW50IHJlc2V0X2hhbmRsZQorQEAgLTE5OTcsNiArMjAw OCwxNSBAQCBzZnRwX3NlcnZlcl9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndiwgc3RydWN0IHBh c3N3ZCAqdXNlcl9wdywgaW50IHJlc2V0X2hhbmRsZQogIAkJCQlmYXRhbCgiSW52YWxpZCB1bWFz ayBcIiVzXCIiLCBvcHRhcmcpOwogIAkJCSh2b2lkKXVtYXNrKChtb2RlX3QpbWFzayk7CiAgCQkJ YnJlYWs7CkBAIC0xMTIsNSArMTEyLDUgQEAgaW5kZXggN2E2ZTRmYTg4Li5kMThjNGFjYjkgMTAw NjQ0CiAgCQlkZWZhdWx0OgogIAkJCXNmdHBfc2VydmVyX3VzYWdlKCk7CiAtLSAKLTIuNTMuMAor Mi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDI0LW9wZW5zc2gtNy4ycDItczM5MC1jbG9zZWZyb20u cGF0Y2ggYi8wMDI0LW9wZW5zc2gtNy4ycDItczM5MC1jbG9zZWZyb20ucGF0Y2gKaW5kZXggYmQz ZjRmMy4uMmM5NTUxOCAxMDA2NDQKLS0tIGEvMDAyNC1vcGVuc3NoLTcuMnAyLXMzOTAtY2xvc2Vm cm9tLnBhdGNoCisrKyBiLzAwMjQtb3BlbnNzaC03LjJwMi1zMzkwLWNsb3NlZnJvbS5wYXRjaApA QCAtMSw3ICsxLDcgQEAKLUZyb20gNmY5MDU5ODc2ZDQzMjNkZTMzY2E3MDZkYTBlODgzZDE0Mjc1 N2Y0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gZGQ5NTNmMDU3MmVmNmI1MzgyNWFm YjUwY2M0NGQ2NWIyMDQ3ODMxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRy eSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUg MTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyNC81NF0gb3BlbnNzaC03LjJwMi1zMzkw LWNsb3NlZnJvbQorU3ViamVjdDogW1BBVENIIDI0LzUzXSBvcGVuc3NoLTcuMnAyLXMzOTAtY2xv c2Vmcm9tCiAKICMgbWFrZSBzMzkwIHVzZSAvZGV2LyBjcnlwdG8gZGV2aWNlcyAtLSBpZ25vcmUg Y2xvc2Vmcm9tCiAtLS0KQEAgLTQ3LDUgKzQ3LDUgQEAgaW5kZXggNDlhNGYzNWZmLi5mNjExMjQ1 ODUgMTAwNjQ0CiAgCSh2b2lkKSBjbG9zZWRpcihkaXJwKTsKICAJcmV0dXJuOwogLS0gCi0yLjUz LjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAyNS1vcGVuc3NoLTcuNXAxLXNhbmRib3gucGF0 Y2ggYi8wMDI1LW9wZW5zc2gtNy41cDEtc2FuZGJveC5wYXRjaAppbmRleCBiNWEyNGE0Li5kMjQ2 ODVhIDEwMDY0NAotLS0gYS8wMDI1LW9wZW5zc2gtNy41cDEtc2FuZGJveC5wYXRjaAorKysgYi8w MDI1LW9wZW5zc2gtNy41cDEtc2FuZGJveC5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gMTY0 YTE1OTllYTdmMTQ3OTE5ZjZjOTI1ZWUxN2MyMTgyMGI5ZTdlZSBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKK0Zyb20gNDY4ODI4MDQxN2U0ZWEyOGJlNzY4M2I1NTRmOTFlMzFmMjM0MTM2YiBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6 IFtQQVRDSCAyNS81NF0gb3BlbnNzaC03LjVwMS1zYW5kYm94CitTdWJqZWN0OiBbUEFUQ0ggMjUv NTNdIG9wZW5zc2gtNy41cDEtc2FuZGJveAogCiAjIFNhbmRib3ggYWRqdXN0bWVudHMgZm9yIHMz OTAgYW5kIGF1ZGl0CiAtLS0KQEAgLTksNyArOSw3IEBAIFN1YmplY3Q6IFtQQVRDSCAyNS81NF0g b3BlbnNzaC03LjVwMS1zYW5kYm94CiAgMSBmaWxlIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKykK IAogZGlmZiAtLWdpdCBhL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYyBiL3NhbmRib3gtc2VjY29t cC1maWx0ZXIuYwotaW5kZXggN2IyNDQ0OTMwLi5lMjEwNDhmM2EgMTAwNjQ0CitpbmRleCBiZjc1 M2VlZjIuLmI2NTQxM2M5NSAxMDA2NDQKIC0tLSBhL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYwog KysrIGIvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jCiBAQCAtMzA1LDYgKzMwNSw5IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgcHJlYXV0aF9pbnNuc1tdID0gewpAQCAtNTUsNSAr NTUsNSBAQCBpbmRleCA3YjI0NDQ5MzAuLmUyMTA0OGYzYSAxMDA2NDQKICAJU0NfQUxMT1coX19O Ul9nZXR1aWQpLAogICNlbmRpZgogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEv MDAyNi1vcGVuc3NoLTcuOHAxLXNjcC1pcHY2LnBhdGNoIGIvMDAyNi1vcGVuc3NoLTcuOHAxLXNj cC1pcHY2LnBhdGNoCmluZGV4IDcxYzczODYuLjdmYWFjYjAgMTAwNjQ0Ci0tLSBhLzAwMjYtb3Bl bnNzaC03LjhwMS1zY3AtaXB2Ni5wYXRjaAorKysgYi8wMDI2LW9wZW5zc2gtNy44cDEtc2NwLWlw djYucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDNlODZmZWI4MjRmMmYxYTdlZmU0YjZiN2Iz NWMxNDViZWYxZDBkZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDQ2YzYzYjUyYWZh ODEzNmE0NmE5MDk0YTY5YjRjMDExZjIyYjQ0YWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBG cm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1 IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMjYvNTRdIG9wZW5zc2gt Ny44cDEtc2NwLWlwdjYKK1N1YmplY3Q6IFtQQVRDSCAyNi81M10gb3BlbnNzaC03LjhwMS1zY3At aXB2NgogCiAjIFVuYnJlYWsgc2NwIGJldHdlZW4gdHdvIElQdjYgaG9zdHMgKCMxNjIwMzMzKQog LS0tCkBAIC05LDcgKzksNyBAQCBTdWJqZWN0OiBbUEFUQ0ggMjYvNTRdIG9wZW5zc2gtNy44cDEt c2NwLWlwdjYKICAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CiAKIGRpZmYgLS1naXQgYS9zY3AuYyBiL3NjcC5jCi1pbmRleCBiNWFkNDVjMTIuLjU2MThlMjhl NyAxMDA2NDQKK2luZGV4IGZjYTQzOTNmMy4uYWM0M2VjNWY0IDEwMDY0NAogLS0tIGEvc2NwLmMK ICsrKyBiL3NjcC5jCiBAQCAtMTE2NCw3ICsxMTY0LDkgQEAgdG9yZW1vdGUoaW50IGFyZ2MsIGNo YXIgKiphcmd2LCBlbnVtIHNjcF9tb2RlX2UgbW9kZSwgY2hhciAqc2Z0cF9kaXJlY3QpCkBAIC0y NCw1ICsyNCw1IEBAIGluZGV4IGI1YWQ0NWMxMi4uNTYxOGUyOGU3IDEwMDY0NAogIAkJCSAgICB0 aG9zdCwgdGFyZyk7CiAgCQkJaWYgKGRvX2xvY2FsX2NtZCgmYWxpc3QpICE9IDApCiAtLSAKLTIu NTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDI3LW9wZW5zc2gtOC4wcDEtY3J5cHRvLXBv bGljaWVzLnBhdGNoIGIvMDAyNy1vcGVuc3NoLTguMHAxLWNyeXB0by1wb2xpY2llcy5wYXRjaApp bmRleCA4YTFiN2Q0Li4wMTQ1MTYzIDEwMDY0NAotLS0gYS8wMDI3LW9wZW5zc2gtOC4wcDEtY3J5 cHRvLXBvbGljaWVzLnBhdGNoCisrKyBiLzAwMjctb3BlbnNzaC04LjBwMS1jcnlwdG8tcG9saWNp ZXMucGF0Y2gKQEAgLTEsMTggKzEsMTggQEAKLUZyb20gMDkxNDc2NmFlZDkwMTc4MGZiNzQ0YjRi YTA2ZTUwMGFkMDNjZjQyOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gN2E1ZmY4Zjcy OGNmYjk4YzkwZGNiZTY0ODcyM2ZiNGQ0ZWQwMjMwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK IEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwg MTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyNy81NF0gb3BlbnNz aC04LjBwMS1jcnlwdG8tcG9saWNpZXMKK1N1YmplY3Q6IFtQQVRDSCAyNy81M10gb3BlbnNzaC04 LjBwMS1jcnlwdG8tcG9saWNpZXMKIAogLS0tCi0gc3NoX2NvbmZpZy41ICB8IDE2OCArKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBzc2hkX2NvbmZpZy41IHwg MTg2ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g MiBmaWxlcyBjaGFuZ2VkLCAxNDAgaW5zZXJ0aW9ucygrKSwgMjE0IGRlbGV0aW9ucygtKQorIHNz aF9jb25maWcuNSAgfCAxNzIgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBzc2hkX2NvbmZpZy41IHwgMTkzICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMzkgaW5zZXJ0aW9ucygr KSwgMjI2IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvc3NoX2NvbmZpZy41IGIvc3NoX2Nv bmZpZy41Ci1pbmRleCA5ZTUxNjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKK2luZGV4IDA0Nzk3YTFl OS4uYzRjNzJmNTg3IDEwMDY0NAogLS0tIGEvc3NoX2NvbmZpZy41CiArKysgYi9zc2hfY29uZmln LjUKLUBAIC00MzgsMTcgKzQzOCwxMyBAQCBBIHNpbmdsZSBhcmd1bWVudCBvZgorQEAgLTQ2OCwx OCArNDY4LDEzIEBAIEEgc2luZ2xlIGFyZ3VtZW50IG9mCiAgY2F1c2VzIG5vIENOQU1FcyB0byBi ZSBjb25zaWRlcmVkIGZvciBjYW5vbmljYWxpemF0aW9uLgogIFRoaXMgaXMgdGhlIGRlZmF1bHQg YmVoYXZpb3VyLgogIC5JdCBDbSBDQVNpZ25hdHVyZUFsZ29yaXRobXMKQEAgLTI5LDEzICsyOSwx NCBAQCBpbmRleCA5ZTUxNjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKIC1lY2RzYS1zaGEyLW5pc3Rw Mzg0LGVjZHNhLXNoYTItbmlzdHA1MjEsCiAtc2stc3NoLWVkMjU1MTlAb3BlbnNzaC5jb20sCiAt c2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKLS1yc2Etc2hhMi01MTIscnNhLXNo YTItMjU2CistcnNhLXNoYTItNTEyLHJzYS1zaGEyLTI1NiwKKy1zc2gtbWxkc2E0NC1lZDI1NTE5 QG9wZW5zc2guY29tCiAtLkVkCiAtLlBwCiAgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3 aXRoIGEKICAuU3EgKwogIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMg d2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZGVmYXVsdCBzZXQKLUBAIC01ODcsMjAgKzU4MywyNSBA QCBJZiB0aGUgb3B0aW9uIGlzIHNldCB0bworQEAgLTYxOCwyMCArNjEzLDI1IEBAIElmIHRoZSBv cHRpb24gaXMgc2V0IHRvCiAgKHRoZSBkZWZhdWx0KSwKICB0aGUgY2hlY2sgd2lsbCBub3QgYmUg ZXhlY3V0ZWQuCiAgLkl0IENtIENpcGhlcnMKQEAgLTY1LDcgKzY2LDcgQEAgaW5kZXggOWU1MTYz Nzc0Li4zMDZmYTFkOGEgMTAwNjQ0CiAgLlBwCiAgVGhlIHN1cHBvcnRlZCBjaXBoZXJzIGFyZToK ICAuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKLUBAIC02MTYsMTMgKzYxNyw2IEBAIGFlczI1 Ni1nY21Ab3BlbnNzaC5jb20KK0BAIC02NDcsMTMgKzY0Nyw2IEBAIGFlczI1Ni1nY21Ab3BlbnNz aC5jb20KICBjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbQogIC5FZAogIC5QcApAQCAtNzks NyArODAsNyBAQCBpbmRleCA5ZTUxNjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKICBUaGUgbGlzdCBv ZiBhdmFpbGFibGUgY2lwaGVycyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwogIC5RcSBzc2gg LVEgY2lwaGVyIC4KICAuSXQgQ20gQ2xlYXJBbGxGb3J3YXJkaW5ncwotQEAgLTEwMjIsNiArMTAx NiwxMSBAQCBjb21tYW5kIGxpbmUgd2lsbCBiZSBwYXNzZWQgdW50b3VjaGVkIHRvIHRoZSBHU1NB UEkgbGlicmFyeS4KK0BAIC0xMDYwLDYgKzEwNTMsMTEgQEAgY29tbWFuZCBsaW5lIHdpbGwgYmUg cGFzc2VkIHVudG91Y2hlZCB0byB0aGUgR1NTQVBJIGxpYnJhcnkuCiAgVGhlIGRlZmF1bHQgaXMK ICAuRHEgbm8gLgogIC5JdCBDbSBHU1NBUElLZXhBbGdvcml0aG1zCkBAIC05MSw3ICs5Miw3IEBA IGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAogIFRoZSBsaXN0IG9mIGtleSBleGNo YW5nZSBhbGdvcml0aG1zIHRoYXQgYXJlIG9mZmVyZWQgZm9yIEdTU0FQSQogIGtleSBleGNoYW5n ZS4gUG9zc2libGUgdmFsdWVzIGFyZQogIC5CZCAtbGl0ZXJhbCAtb2Zmc2V0IDNuCi1AQCAtMTAz NCw5ICsxMDMzLDYgQEAgZ3NzLW5pc3RwMjU2LXNoYTI1Ni0sCitAQCAtMTA3Miw5ICsxMDcwLDYg QEAgZ3NzLW5pc3RwMjU2LXNoYTI1Ni0sCiAgZ3NzLWN1cnZlMjU1MTktc2hhMjU2LQogIC5FZAog IC5QcApAQCAtMTAxLDcgKzEwMiw3IEBAIGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0 NAogIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byBjb25uZWN0aW9ucyB1c2luZyBHU1NBUEku CiAgLlBwCiAgVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGtleSBleGNoYW5nZSBhbGdvcml0aG1zIG1h eSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCi1AQCAtMTA1NiwzOCArMTA1MywyNSBAQCB3aWxsIG5v dCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSwKK0BAIC0xMDk3LDQwICsxMDkyLDI1IEBAIHdp bGwgbm90IGJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5LAogIGJ1dCBtYXkgYmUgbWFudWFsbHkg aGFzaGVkIHVzaW5nCiAgLlhyIHNzaC1rZXlnZW4gMSAuCiAgLkl0IENtIEhvc3RiYXNlZEFjY2Vw dGVkQWxnb3JpdGhtcwpAQCAtMTM3LDE4ICsxMzgsMjAgQEAgaW5kZXggOWU1MTYzNzc0Li4zMDZm YTFkOGEgMTAwNjQ0CiAtd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBv cGVuc3NoLmNvbSwKIC1yc2Etc2hhMi01MTItY2VydC12MDFAb3BlbnNzaC5jb20sCiAtcnNhLXNo YTItMjU2LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNzaC1tbGRzYTQ0LWVkMjU1MTktY2VydC12 MDFAb3BlbnNzaC5jb20sCiAtc3NoLWVkMjU1MTksCiAtZWNkc2Etc2hhMi1uaXN0cDI1NixlY2Rz YS1zaGEyLW5pc3RwMzg0LGVjZHNhLXNoYTItbmlzdHA1MjEsCiAtc2stc3NoLWVkMjU1MTlAb3Bl bnNzaC5jb20sCiAtc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKIC13ZWJhdXRo bi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tLAotLXJzYS1zaGEyLTUxMixyc2Et c2hhMi0yNTYKKy1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2LAorLXNzaC1tbGRzYTQ0LWVkMjU1 MTlAb3BlbnNzaC5jb20KIC0uRWQKICthdCB0aGUgaGVhZCBvZiB0aGUgYnVpbHQtaW4gb3BlbnNz aCBkZWZhdWx0IHNldC4KICAuUHAKICBUaGUKICAuRmwgUQotQEAgLTExNDIsNiArMTEyNiwxNyBA QCB0byBwcmVmZXIgdGhlaXIgYWxnb3JpdGhtcy4KK0BAIC0xMTg3LDYgKzExNjcsMTcgQEAgdG8g cHJlZmVyIHRoZWlyIGFsZ29yaXRobXMuCiAgLlBwCiAgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNp Z25hdHVyZSBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCiAgLlFxIHNzaCAt USBIb3N0S2V5QWxnb3JpdGhtcyAuCkBAIC0xNjYsNyArMTY5LDcgQEAgaW5kZXggOWU1MTYzNzc0 Li4zMDZmYTFkOGEgMTAwNjQ0CiAgLkl0IENtIEhvc3RLZXlBbGlhcwogIFNwZWNpZmllcyBhbiBh bGlhcyB0aGF0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlCiAgcmVhbCBob3N0IG5hbWUg d2hlbiBsb29raW5nIHVwIG9yIHNhdmluZyB0aGUgaG9zdCBrZXkKLUBAIC0xMzY0LDYgKzEzNTks MTEgQEAgaXQgbWF5IGJlIHplcm8gb3IgbW9yZSBvZjoKK0BAIC0xMzg1LDYgKzEzNzYsMTEgQEAg aXQgbWF5IGJlIHplcm8gb3IgbW9yZSBvZjoKICBhbmQKICAuQ20gcGFtIC4KICAuSXQgQ20gS2V4 QWxnb3JpdGhtcwpAQCAtMTc4LDcgKzE4MSw3IEBAIGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhh IDEwMDY0NAogIFNwZWNpZmllcyB0aGUgcGVybWl0dGVkIEtFWCAoS2V5IEV4Y2hhbmdlKSBhbGdv cml0aG1zIHRoYXQgd2lsbCBiZSB1c2VkIGFuZAogIHRoZWlyIHByZWZlcmVuY2Ugb3JkZXIuCiAg VGhlIHNlbGVjdGVkIGFsZ29yaXRobSB3aWxsIGJlIHRoZSBmaXJzdCBhbGdvcml0aG0gaW4gdGhp cyBsaXN0IHRoYXQKLUBAIC0xMzc1LDI4ICsxMzc0LDE2IEBAIE11bHRpcGxlIGFsZ29yaXRobXMg bXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQuCitAQCAtMTM5MywyOCArMTM4OSwxNiBAQCBNdWx0aXBs ZSBhbGdvcml0aG1zIG11c3QgYmUgY29tbWEtc2VwYXJhdGVkLgogIC5QcAogIElmIHRoZSBzcGVj aWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCiAgLlNxICsKQEAgLTIxMSw3ICsyMTQsNyBAQCBpbmRl eCA5ZTUxNjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKICAuUHAKICBUaGUgbGlzdCBvZiBzdXBwb3J0 ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKICAu UXEgc3NoIC1RIGtleCAuCi1AQCAtMTUxMCwzNyArMTQ5OCwzMyBAQCBmdW5jdGlvbiwgYW5kIGFs bCBjb2RlIGluIHRoZQorQEAgLTE1MzEsMzcgKzE1MTUsMzMgQEAgZnVuY3Rpb24sIGFuZCBhbGwg Y29kZSBpbiB0aGUKICBmaWxlLgogIFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dp bmcgYW5kIG5vIG92ZXJyaWRlcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgogIC5JdCBDbSBNQUNz CkBAIC0yNTgsNyArMjYxLDcgQEAgaW5kZXggOWU1MTYzNzc0Li4zMDZmYTFkOGEgMTAwNjQ0CiAg VGhlIGxpc3Qgb2YgYXZhaWxhYmxlIE1BQyBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVk IHVzaW5nCiAgLlFxIHNzaCAtUSBtYWMgLgogIC5JdCBDbSBOb0hvc3RBdXRoZW50aWNhdGlvbkZv ckxvY2FsaG9zdAotQEAgLTE3MjksNDEgKzE3MTMsMzEgQEAgaW5zdGVhZCBvZiBjb250aW51aW5n IHRvIGV4ZWN1dGUgYW5kIHBhc3MgZGF0YS4KK0BAIC0xNzUwLDQzICsxNzMwLDMxIEBAIGluc3Rl YWQgb2YgY29udGludWluZyB0byBleGVjdXRlIGFuZCBwYXNzIGRhdGEuCiAgVGhlIGRlZmF1bHQg aXMKICAuQ20gbm8gLgogIC5JdCBDbSBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMKQEAgLTI5NSwx MiArMjk4LDE0IEBAIGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAogLXdlYmF1dGhu LXNrLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20sCiAtcnNhLXNoYTIt NTEyLWNlcnQtdjAxQG9wZW5zc2guY29tLAogLXJzYS1zaGEyLTI1Ni1jZXJ0LXYwMUBvcGVuc3No LmNvbSwKKy1zc2gtbWxkc2E0NC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAogLXNzaC1l ZDI1NTE5LAogLWVjZHNhLXNoYTItbmlzdHAyNTYsZWNkc2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1z aGEyLW5pc3RwNTIxLAogLXNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tLAogLXNrLWVjZHNhLXNo YTItbmlzdHAyNTZAb3BlbnNzaC5jb20sCiAtd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1 NkBvcGVuc3NoLmNvbSwKLS1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2CistcnNhLXNoYTItNTEy LHJzYS1zaGEyLTI1NiwKKy1zc2gtbWxkc2E0NC1lZDI1NTE5QG9wZW5zc2guY29tCiAtLkVkCiAr YnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldC4KICAuUHAKQEAgLTMxMiw3ICszMTcsNyBAQCBp bmRleCA5ZTUxNjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKICAuSXQgQ20gUHVia2V5QXV0aGVudGlj YXRpb24KICBTcGVjaWZpZXMgd2hldGhlciB0byB0cnkgcHVibGljIGtleSBhdXRoZW50aWNhdGlv bi4KICBUaGUgYXJndW1lbnQgdG8gdGhpcyBrZXl3b3JkIG11c3QgYmUKLUBAIC0yNTE3LDcgKzI0 OTEsOSBAQCBmb3IgdGhvc2UgdXNlcnMgd2hvIGRvIG5vdCBoYXZlIGEgY29uZmlndXJhdGlvbiBm aWxlLgorQEAgLTI1NDAsNyArMjUwOCw5IEBAIGZvciB0aG9zZSB1c2VycyB3aG8gZG8gbm90IGhh dmUgYSBjb25maWd1cmF0aW9uIGZpbGUuCiAgVGhpcyBmaWxlIG11c3QgYmUgd29ybGQtcmVhZGFi bGUuCiAgLkVsCiAgLlNoIFNFRSBBTFNPCkBAIC0zMjQsMTAgKzMyOSwxMCBAQCBpbmRleCA5ZTUx NjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKICAuQW4gLW5vc3BsaXQKICBPcGVuU1NIIGlzIGEgZGVy aXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgYW5kIGZyZWUKIGRpZmYgLS1naXQgYS9zc2hkX2NvbmZp Zy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggMTc2Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0Citp bmRleCAwMDc3ZWUwOTYuLmI3Mjc1Nzg5NSAxMDA2NDQKIC0tLSBhL3NzaGRfY29uZmlnLjUKICsr KyBiL3NzaGRfY29uZmlnLjUKLUBAIC0zODMsMTcgKzM4MywxMyBAQCBJZiB0aGUgYXJndW1lbnQg aXMKK0BAIC0zODMsMTggKzM4MywxMyBAQCBJZiB0aGUgYXJndW1lbnQgaXMKICB0aGVuIG5vIGJh bm5lciBpcyBkaXNwbGF5ZWQuCiAgQnkgZGVmYXVsdCwgbm8gYmFubmVyIGlzIGRpc3BsYXllZC4K ICAuSXQgQ20gQ0FTaWduYXR1cmVBbGdvcml0aG1zCkBAIC0zNDQsMTMgKzM0OSwxNCBAQCBpbmRl eCAxNzYyODc0YzQuLjFkMTZkYWJhZiAxMDA2NDQKIC1lY2RzYS1zaGEyLW5pc3RwMzg0LGVjZHNh LXNoYTItbmlzdHA1MjEsCiAtc2stc3NoLWVkMjU1MTlAb3BlbnNzaC5jb20sCiAtc2stZWNkc2Et c2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKLS1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2Cist cnNhLXNoYTItNTEyLHJzYS1zaGEyLTI1NiwKKy1zc2gtbWxkc2E0NC1lZDI1NTE5QG9wZW5zc2gu Y29tCiAtLkVkCiAtLlBwCiAgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKICAu U3EgKwogIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBh cHBlbmRlZCB0byB0aGUgZGVmYXVsdCBzZXQKLUBAIC01MzcsMjAgKzUzMywyNSBAQCBUaGUgZGVm YXVsdCBpcworQEAgLTUzOCwyMCArNTMzLDI1IEBAIFRoZSBkZWZhdWx0IGlzCiAgaW5kaWNhdGlu ZyBub3QgdG8KICAuWHIgY2hyb290IDIgLgogIC5JdCBDbSBDaXBoZXJzCkBAIC0zODAsNyArMzg2 LDcgQEAgaW5kZXggMTc2Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CiAgLlBwCiAgVGhlIHN1cHBv cnRlZCBjaXBoZXJzIGFyZToKICAuUHAKLUBAIC01NzcsMTMgKzU3OCw2IEBAIGFlczI1Ni1nY21A b3BlbnNzaC5jb20KK0BAIC01NzgsMTMgKzU3OCw2IEBAIGFlczI1Ni1nY21Ab3BlbnNzaC5jb20K ICBjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbQogIC5FbAogIC5QcApAQCAtMzk0LDcgKzQw MCw3IEBAIGluZGV4IDE3NjI4NzRjNC4uMWQxNmRhYmFmIDEwMDY0NAogIFRoZSBsaXN0IG9mIGF2 YWlsYWJsZSBjaXBoZXJzIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCiAgLlFxIHNzaCAtUSBj aXBoZXIgLgogIC5JdCBDbSBDbGllbnRBbGl2ZUNvdW50TWF4Ci1AQCAtNzg5LDU4ICs3ODMsNDYg QEAgRm9yIHRoaXMgdG8gd29yaworQEAgLTc5OCw2MCArNzkxLDQ2IEBAIEZvciB0aGlzIHRvIHdv cmsKICAuQ20gR1NTQVBJS2V5RXhjaGFuZ2UKICBuZWVkcyB0byBiZSBlbmFibGVkIGluIHRoZSBz ZXJ2ZXIgYW5kIGFsc28gdXNlZCBieSB0aGUgY2xpZW50LgogIC5JdCBDbSBHU1NBUElLZXhBbGdv cml0aG1zCkBAIC00NjEsMTggKzQ2NywyMCBAQCBpbmRleCAxNzYyODc0YzQuLjFkMTZkYWJhZiAx MDA2NDQKIC13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2LWNlcnQtdjAxQG9wZW5zc2gu Y29tLAogLXJzYS1zaGEyLTUxMi1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKIC1yc2Etc2hhMi0yNTYt Y2VydC12MDFAb3BlbnNzaC5jb20sCistc3NoLW1sZHNhNDQtZWQyNTUxOS1jZXJ0LXYwMUBvcGVu c3NoLmNvbSwKIC1zc2gtZWQyNTUxOSwKIC1lY2RzYS1zaGEyLW5pc3RwMjU2LGVjZHNhLXNoYTIt bmlzdHAzODQsZWNkc2Etc2hhMi1uaXN0cDUyMSwKIC1zay1zc2gtZWQyNTUxOUBvcGVuc3NoLmNv bSwKIC1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tLAogLXdlYmF1dGhuLXNrLWVj ZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20sCi0tcnNhLXNoYTItNTEyLHJzYS1zaGEyLTI1 NgorLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYsCistc3NoLW1sZHNhNDQtZWQyNTUxOUBvcGVu c3NoLmNvbQogLS5FZAogK3RoZSBoZWFkIG9mIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQg c2V0LgogIC5QcAogIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzaWduYXR1cmUgYWxnb3JpdGhtcyBt YXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwogIC5RcSBzc2ggLVEgSG9zdGJhc2VkQWNjZXB0ZWRB bGdvcml0aG1zIC4KLUBAIC05MDQsMjcgKzg4NiwxMyBAQCBpcyBzcGVjaWZpZWQsIHRoZSBsb2Nh dGlvbiBvZiB0aGUgc29ja2V0IHdpbGwgYmUgcmVhZCBmcm9tIHRoZQorQEAgLTkxOSwyOSArODk4 LDEzIEBAIGlzIHNwZWNpZmllZCwgdGhlIGxvY2F0aW9uIG9mIHRoZSBzb2NrZXQgd2lsbCBiZSBy ZWFkIGZyb20gdGhlCiAgLkV2IFNTSF9BVVRIX1NPQ0sKICBlbnZpcm9ubWVudCB2YXJpYWJsZS4K ICAuSXQgQ20gSG9zdEtleUFsZ29yaXRobXMKQEAgLTQ5NCwxOCArNTAyLDIwIEBAIGluZGV4IDE3 NjI4NzRjNC4uMWQxNmRhYmFmIDEwMDY0NAogLXdlYmF1dGhuLXNrLWVjZHNhLXNoYTItbmlzdHAy NTYtY2VydC12MDFAb3BlbnNzaC5jb20sCiAtcnNhLXNoYTItNTEyLWNlcnQtdjAxQG9wZW5zc2gu Y29tLAogLXJzYS1zaGEyLTI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1zc2gtbWxkc2E0NC1l ZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAogLXNzaC1lZDI1NTE5LAogLWVjZHNhLXNoYTIt bmlzdHAyNTYsZWNkc2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1zaGEyLW5pc3RwNTIxLAogLXNrLXNz aC1lZDI1NTE5QG9wZW5zc2guY29tLAogLXNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5j b20sCiAtd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKLS1yc2Et c2hhMi01MTIscnNhLXNoYTItMjU2CistcnNhLXNoYTItNTEyLHJzYS1zaGEyLTI1NiwKKy1zc2gt bWxkc2E0NC1lZDI1NTE5QG9wZW5zc2guY29tCiAtLkVkCiAtLlBwCiAgVGhlIGxpc3Qgb2YgYXZh aWxhYmxlIHNpZ25hdHVyZSBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCiAg LlFxIHNzaCAtUSBIb3N0S2V5QWxnb3JpdGhtcyAuCiAgLkl0IENtIElnbm9yZVJob3N0cwotQEAg LTEwNzAsNiArMTAzOCwxMSBAQCBTcGVjaWZpZXMgd2hldGhlciB0byBsb29rIGF0IC5rNWxvZ2lu IGZpbGUgZm9yIHVzZXIncyBhbGlhc2VzLgorQEAgLTEwODcsNiArMTA1MCwxMSBAQCBTcGVjaWZp ZXMgd2hldGhlciB0byBsb29rIGF0IC5rNWxvZ2luIGZpbGUgZm9yIHVzZXIncyBhbGlhc2VzLgog IFRoZSBkZWZhdWx0IGlzCiAgLkNtIHllcyAuCiAgLkl0IENtIEtleEFsZ29yaXRobXMKQEAgLTUx Nyw3ICs1MjcsNyBAQCBpbmRleCAxNzYyODc0YzQuLjFkMTZkYWJhZiAxMDA2NDQKICBTcGVjaWZp ZXMgdGhlIHBlcm1pdHRlZCBLRVggKEtleSBFeGNoYW5nZSkgYWxnb3JpdGhtcyB0aGF0IHRoZSBz ZXJ2ZXIgd2lsbAogIG9mZmVyIHRvIGNsaWVudHMuCiAgVGhlIG9yZGVyaW5nIG9mIHRoaXMgbGlz dCBpcyBub3QgaW1wb3J0YW50LCBhcyB0aGUgY2xpZW50IHNwZWNpZmllcyB0aGUKLUBAIC0xMDc4 LDE2ICsxMDUxLDE2IEBAIE11bHRpcGxlIGFsZ29yaXRobXMgbXVzdCBiZSBjb21tYS1zZXBhcmF0 ZWQuCitAQCAtMTA5NSwxNiArMTA2MywxNiBAQCBNdWx0aXBsZSBhbGdvcml0aG1zIG11c3QgYmUg Y29tbWEtc2VwYXJhdGVkLgogIC5QcAogIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0 aCBhCiAgLlNxICsKQEAgLTUzOCw3ICs1NDgsNyBAQCBpbmRleCAxNzYyODc0YzQuLjFkMTZkYWJh ZiAxMDA2NDQKICAuUHAKICBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlOgogIC5QcAotQEAg LTExMjQsMTQgKzEwOTcsNiBAQCBzbnRydXA3NjF4MjU1MTktc2hhNTEyCitAQCAtMTE0MywxNCAr MTExMSw2IEBAIHNudHJ1cDc2MXgyNTUxOS1zaGE1MTIKICBzbnRydXA3NjF4MjU1MTktc2hhNTEy QG9wZW5zc2guY29tCiAgLkVsCiAgLlBwCkBAIC01NTMsNyArNTYzLDcgQEAgaW5kZXggMTc2Mjg3 NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CiAgVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGtleSBleGNoYW5n ZSBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCiAgLlFxIHNzaCAtUSBLZXhB bGdvcml0aG1zIC4KICAuSXQgQ20gTGlzdGVuQWRkcmVzcwotQEAgLTEyMTgsMjEgKzExODMsMjYg QEAgZnVuY3Rpb24sIGFuZCBhbGwgY29kZSBpbiB0aGUKK0BAIC0xMjM3LDIxICsxMTk3LDI2IEBA IGZ1bmN0aW9uLCBhbmQgYWxsIGNvZGUgaW4gdGhlCiAgZmlsZS4KICBUaGlzIG9wdGlvbiBpcyBp bnRlbmRlZCBmb3IgZGVidWdnaW5nIGFuZCBubyBvdmVycmlkZXMgYXJlIGVuYWJsZWQgYnkgZGVm YXVsdC4KICAuSXQgQ20gTUFDcwpAQCAtNTg0LDcgKzU5NCw3IEBAIGluZGV4IDE3NjI4NzRjNC4u MWQxNmRhYmFmIDEwMDY0NAogIC5QcAogIFRoZSBhbGdvcml0aG1zIHRoYXQgY29udGFpbgogIC5R cSAtZXRtCi1AQCAtMTI3NSwxNSArMTI0NSw2IEBAIHVtYWMtNjQtZXRtQG9wZW5zc2guY29tCitA QCAtMTI5NCwxNSArMTI1OSw2IEBAIHVtYWMtNjQtZXRtQG9wZW5zc2guY29tCiAgdW1hYy0xMjgt ZXRtQG9wZW5zc2guY29tCiAgLkVsCiAgLlBwCkBAIC02MDAsNyArNjEwLDcgQEAgaW5kZXggMTc2 Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CiAgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIE1BQyBhbGdv cml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCiAgLlFxIHNzaCAtUSBtYWMgLgogIC5J dCBDbSBNYXRjaAotQEAgLTE3NzMsMzggKzE3MzQsMjUgQEAgb3IgZXF1aXZhbGVudC4pCitAQCAt MTc5Miw0MCArMTc0OCwyNSBAQCBvciBlcXVpdmFsZW50LikKICBUaGUgZGVmYXVsdCBpcwogIC5D bSB5ZXMgLgogIC5JdCBDbSBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMKQEAgLTYzNywxOCArNjQ3 LDIwIEBAIGluZGV4IDE3NjI4NzRjNC4uMWQxNmRhYmFmIDEwMDY0NAogLXdlYmF1dGhuLXNrLWVj ZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20sCiAtcnNhLXNoYTItNTEyLWNl cnQtdjAxQG9wZW5zc2guY29tLAogLXJzYS1zaGEyLTI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwK Ky1zc2gtbWxkc2E0NC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAogLXNzaC1lZDI1NTE5 LAogLWVjZHNhLXNoYTItbmlzdHAyNTYsZWNkc2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1zaGEyLW5p c3RwNTIxLAogLXNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tLAogLXNrLWVjZHNhLXNoYTItbmlz dHAyNTZAb3BlbnNzaC5jb20sCiAtd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVu c3NoLmNvbSwKLS1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2CistcnNhLXNoYTItNTEyLHJzYS1z aGEyLTI1NiwKKy1zc2gtbWxkc2E0NC1lZDI1NTE5QG9wZW5zc2guY29tCiAtLkVkCiArYnVpbHQt aW4gb3BlbnNzaCBkZWZhdWx0IHNldC4KICAuUHAKICBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2ln bmF0dXJlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKICAuUXEgc3NoIC1R IFB1YmtleUFjY2VwdGVkQWxnb3JpdGhtcyAuCi1AQCAtMjMxNyw3ICsyMjY1LDkgQEAgVGhpcyBm aWxlIHNob3VsZCBiZSB3cml0YWJsZSBieSByb290IG9ubHksIGJ1dCBpdCBpcyByZWNvbW1lbmRl ZAorQEAgLTIzMzgsNyArMjI3OSw5IEBAIFRoaXMgZmlsZSBzaG91bGQgYmUgd3JpdGFibGUgYnkg cm9vdCBvbmx5LCBidXQgaXQgaXMgcmVjb21tZW5kZWQKICAuRWwKICAuU2ggU0VFIEFMU08KICAu WHIgc2Z0cC1zZXJ2ZXIgOCAsCkBAIC02NjAsNSArNjcyLDUgQEAgaW5kZXggMTc2Mjg3NGM0Li4x ZDE2ZGFiYWYgMTAwNjQ0CiAgLkFuIC1ub3NwbGl0CiAgT3BlblNTSCBpcyBhIGRlcml2YXRpdmUg b2YgdGhlIG9yaWdpbmFsIGFuZCBmcmVlCiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1n aXQgYS8wMDI4LW9wZW5zc2gtOC4wcDEtb3BlbnNzbC1rZGYucGF0Y2ggYi8wMDI4LW9wZW5zc2gt OC4wcDEtb3BlbnNzbC1rZGYucGF0Y2gKaW5kZXggMDUzZGFhZC4uOWMzZDU4YyAxMDA2NDQKLS0t IGEvMDAyOC1vcGVuc3NoLTguMHAxLW9wZW5zc2wta2RmLnBhdGNoCisrKyBiLzAwMjgtb3BlbnNz aC04LjBwMS1vcGVuc3NsLWtkZi5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gMWEyZTQwNjhm OTk3YzFhOWVkNDE3OTY3MTE2MjIwMWY3NjZmMjBiOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb20gMWZkZDhmOWRkYjFiMmUxZTBkNGY3ZDk3ZTVlN2UxN2I3NGE4NWE2YSBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNv bT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRD SCAyOC81NF0gb3BlbnNzaC04LjBwMS1vcGVuc3NsLWtkZgorU3ViamVjdDogW1BBVENIIDI4LzUz XSBvcGVuc3NoLTguMHAxLW9wZW5zc2wta2RmCiAKICMgVXNlIE9wZW5TU0wgS0RGICgjMTYzMTc2 MSkKIC0tLQpAQCAtMTAsMTAgKzEwLDEwIEBAIFN1YmplY3Q6IFtQQVRDSCAyOC81NF0gb3BlbnNz aC04LjBwMS1vcGVuc3NsLWtkZgogIDIgZmlsZXMgY2hhbmdlZCwgMTA4IGluc2VydGlvbnMoKykK IAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggNzU1NzZi NDVkLi44NmYwZTllMDkgMTAwNjQ0CitpbmRleCBjYjQ2OTAzZjQuLjM5NGFjYzNkOCAxMDA2NDQK IC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzI0OCw2ICszMjQ4 LDcgQEAgaWYgdGVzdCAieCRvcGVuc3NsIiA9ICJ4eWVzIiA7IHRoZW4KK0BAIC0zMjYxLDYgKzMy NjEsNyBAQCBpZiB0ZXN0ICJ4JG9wZW5zc2wiID0gInh5ZXMiIDsgdGhlbgogIAkJSE1BQ19DVFhf aW5pdCBcCiAgCQlSU0FfZ2VuZXJhdGVfa2V5X2V4IFwKICAJCVJTQV9nZXRfZGVmYXVsdF9tZXRo b2QgXApAQCAtMjIsNyArMjIsNyBAQCBpbmRleCA3NTU3NmI0NWQuLjg2ZjBlOWUwOSAxMDA2NDQK ICAKICAJIyBMaWJyZVNTTC9PcGVuU1NMIEFQSSBkaWZmZXJlbmNlcwogZGlmZiAtLWdpdCBhL2tl eC5jIGIva2V4LmMKLWluZGV4IDM2MDhhNTUwNC4uNTRlNzExODEwIDEwMDY0NAoraW5kZXggMWI4 ZjFjM2M1Li42OTgxYjU5ZjUgMTAwNjQ0CiAtLS0gYS9rZXguYwogKysrIGIva2V4LmMKIEBAIC0z Nyw2ICszNywxMSBAQApAQCAtMzcsNyArMzcsNyBAQCBpbmRleCAzNjA4YTU1MDQuLjU0ZTcxMTgx MCAxMDA2NDQKICAjZW5kaWYKICAKICAjaW5jbHVkZSAic3NoLmgiCi1AQCAtMTA4Myw2ICsxMDg4 LDEwNyBAQCBrZXhfY2hvb3NlX2NvbmYoc3RydWN0IHNzaCAqc3NoLCB1aW50MzJfdCBzZXEpCitA QCAtMTA4Niw2ICsxMDkxLDEwNyBAQCBrZXhfY2hvb3NlX2NvbmYoc3RydWN0IHNzaCAqc3NoLCB1 aW50MzJfdCBzZXEpCiAgCXJldHVybiByOwogIH0KICAKQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmRl eCAzNjA4YTU1MDQuLjU0ZTcxMTgxMCAxMDA2NDQKICBzdGF0aWMgaW50CiAgZGVyaXZlX2tleShz dHJ1Y3Qgc3NoICpzc2gsIGludCBpZCwgdV9pbnQgbmVlZCwgdV9jaGFyICpoYXNoLCB1X2ludCBo YXNobGVuLAogICAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzaGFyZWRfc2VjcmV0LCB1X2NoYXIg KiprZXlwKQotQEAgLTExNDYsNiArMTI1Miw3IEBAIGRlcml2ZV9rZXkoc3RydWN0IHNzaCAqc3No LCBpbnQgaWQsIHVfaW50IG5lZWQsIHVfY2hhciAqaGFzaCwgdV9pbnQgaGFzaGxlbiwKK0BAIC0x MTQ5LDYgKzEyNTUsNyBAQCBkZXJpdmVfa2V5KHN0cnVjdCBzc2ggKnNzaCwgaW50IGlkLCB1X2lu dCBuZWVkLCB1X2NoYXIgKmhhc2gsIHVfaW50IGhhc2hsZW4sCiAgCXNzaF9kaWdlc3RfZnJlZSho YXNoY3R4KTsKICAJcmV0dXJuIHI7CiAgfQpAQCAtMTU0LDUgKzE1NCw1IEBAIGluZGV4IDM2MDhh NTUwNC4uNTRlNzExODEwIDEwMDY0NAogICNkZWZpbmUgTktFWVMJNgogIGludAogLS0gCi0yLjUz LjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAyOS1vcGVuc3NoLTguMnAxLXZpc2liaWxpdHku cGF0Y2ggYi8wMDI5LW9wZW5zc2gtOC4ycDEtdmlzaWJpbGl0eS5wYXRjaAppbmRleCAzNDYxZWZh Li40MDA4YzBjIDEwMDY0NAotLS0gYS8wMDI5LW9wZW5zc2gtOC4ycDEtdmlzaWJpbGl0eS5wYXRj aAorKysgYi8wMDI5LW9wZW5zc2gtOC4ycDEtdmlzaWJpbGl0eS5wYXRjaApAQCAtMSw3ICsxLDcg QEAKLUZyb20gMDNmOTY0OThjM2IxYzVhMDEwMTRhNDdhODAwZjk0NDMwYzdjOTJjZSBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gMGM4MzgwMjQzYWE0NzQxOTE4NmYxMjA3MGI0MTE1ODQ2 YmY5YjQyNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5 IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAy MDAKLVN1YmplY3Q6IFtQQVRDSCAyOS81NF0gb3BlbnNzaC04LjJwMS12aXNpYmlsaXR5CitTdWJq ZWN0OiBbUEFUQ0ggMjkvNTNdIG9wZW5zc2gtOC4ycDEtdmlzaWJpbGl0eQogCiAjIHNrLWR1bW15 LnNvIGJ1aWx0IHdpdGggLWZ2aXNpYmlsaXR5PWhpZGRlbiBkb2VzIG5vdCB3b3JrCiAtLS0KQEAg LTksNyArOSw3IEBAIFN1YmplY3Q6IFtQQVRDSCAyOS81NF0gb3BlbnNzaC04LjJwMS12aXNpYmls aXR5CiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIAog ZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvbWlzYy9zay1kdW1teS9zay1kdW1teS5jIGIvcmVncmVzcy9t aXNjL3NrLWR1bW15L3NrLWR1bW15LmMKLWluZGV4IDRjOTZlODgyNy4uNGFmNTIwOWRiIDEwMDY0 NAoraW5kZXggY2JiYmE3NDU5Li5mMWIzZjA2MGIgMTAwNjQ0CiAtLS0gYS9yZWdyZXNzL21pc2Mv c2stZHVtbXkvc2stZHVtbXkuYwogKysrIGIvcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15 LmMKIEBAIC04MCw3ICs4MCw3IEBAIHNrZGVidWcoY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hh ciAqZm10LCAuLi4pCkBAIC00OSw1ICs0OSw1IEBAIGluZGV4IDRjOTZlODgyNy4uNGFmNTIwOWRi IDEwMDY0NAogICAgICBzdHJ1Y3Qgc2tfcmVzaWRlbnRfa2V5ICoqKnJrcywgc2l6ZV90ICpucmtz KQogIHsKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMzAtb3BlbnNzaC04 LjJwMS14MTEtd2l0aG91dC1pcHY2LnBhdGNoIGIvMDAzMC1vcGVuc3NoLTguMnAxLXgxMS13aXRo b3V0LWlwdjYucGF0Y2gKaW5kZXggODc2MDEzMi4uMzczZTg4OSAxMDA2NDQKLS0tIGEvMDAzMC1v cGVuc3NoLTguMnAxLXgxMS13aXRob3V0LWlwdjYucGF0Y2gKKysrIGIvMDAzMC1vcGVuc3NoLTgu MnAxLXgxMS13aXRob3V0LWlwdjYucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGVmY2ExZjU0 ZDhhZmM4NjdmMzk4OWI1ZWQ3OTAwNTRkZTk0MmNiMGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CitGcm9tIGEyOWRmMjViMWVkMGQyOTQ1ZDA5OTBiYzdjYTg5MThjMTZjN2QyNjQgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5j b20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFU Q0ggMzAvNTRdIG9wZW5zc2gtOC4ycDEteDExLXdpdGhvdXQtaXB2NgorU3ViamVjdDogW1BBVENI IDMwLzUzXSBvcGVuc3NoLTguMnAxLXgxMS13aXRob3V0LWlwdjYKIAogIyBEbyBub3QgYnJlYWsg WDExIHdpdGhvdXQgSVB2NgogLS0tCkBAIC05LDEwICs5LDEwIEBAIFN1YmplY3Q6IFtQQVRDSCAz MC81NF0gb3BlbnNzaC04LjJwMS14MTEtd2l0aG91dC1pcHY2CiAgMSBmaWxlIGNoYW5nZWQsIDEw IGluc2VydGlvbnMoKykKIAogZGlmZiAtLWdpdCBhL2NoYW5uZWxzLmMgYi9jaGFubmVscy5jCi1p bmRleCA3MWNjNjdkMTcuLjE0ZDUzNmQ2NCAxMDA2NDQKK2luZGV4IGZjZDgwMjg4Zi4uYmFlODRl NWY5IDEwMDY0NAogLS0tIGEvY2hhbm5lbHMuYwogKysrIGIvY2hhbm5lbHMuYwotQEAgLTUxMzIs NiArNTEzMiwxNiBAQCB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICpzc2gsIGlu dCB4MTFfZGlzcGxheV9vZmZzZXQsCitAQCAtNTE0MSw2ICs1MTQxLDE2IEBAIHgxMV9jcmVhdGVf ZGlzcGxheV9pbmV0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHgxMV9kaXNwbGF5X29mZnNldCwKICAJ CQkJZGVidWcyX2YoImJpbmQgcG9ydCAlZDogJS4xMDBzIiwgcG9ydCwKICAJCQkJICAgIHN0cmVy cm9yKGVycm5vKSk7CiAgCQkJCWNsb3NlKHNvY2spOwpAQCAtMzAsNSArMzAsNSBAQCBpbmRleCA3 MWNjNjdkMTcuLjE0ZDUzNmQ2NCAxMDA2NDQKICAJCQkJCWNsb3NlKHNvY2tzW25dKTsKICAJCQkJ bnVtX3NvY2tzID0gMDsKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMzEt b3BlbnNzaC04LjBwMS1wcmVzZXJ2ZS1wYW0tZXJyb3JzLnBhdGNoIGIvMDAzMS1vcGVuc3NoLTgu MHAxLXByZXNlcnZlLXBhbS1lcnJvcnMucGF0Y2gKaW5kZXggMjg5NGViYy4uYWQ4MzgyYyAxMDA2 NDQKLS0tIGEvMDAzMS1vcGVuc3NoLTguMHAxLXByZXNlcnZlLXBhbS1lcnJvcnMucGF0Y2gKKysr IGIvMDAzMS1vcGVuc3NoLTguMHAxLXByZXNlcnZlLXBhbS1lcnJvcnMucGF0Y2gKQEAgLTEsNyAr MSw3IEBACi1Gcm9tIDgyMDM4MDNhOTNhZDZiODA3YTk0MzI0MTU2ZWY4NjZiNDVjYzhlYWUgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDc0ZDE2MGE5NTFjMzkwZTJjNjkwYmYzNDYyYjY0 M2I3MzI4ZTNiODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2 c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5 ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMzEvNTRdIG9wZW5zc2gtOC4wcDEtcHJlc2VydmUtcGFt LWVycm9ycworU3ViamVjdDogW1BBVENIIDMxLzUzXSBvcGVuc3NoLTguMHAxLXByZXNlcnZlLXBh bS1lcnJvcnMKIAogIyBzc2hkIHByb3ZpZGVzIFBBTSBhbiBpbmNvcnJlY3QgZXJyb3IgY29kZSAo IzE4Nzk1MDMpCiAtLS0KQEAgLTUzLDUgKzUzLDUgQEAgaW5kZXggM2YzNDJmOWUxLi5kM2RjZDAz N2IgMTAwNjQ0CiAgCQkJCXNzaHBhbV9zZXRfbWF4dHJpZXNfcmVhY2hlZCgxKTsKICAJCQkvKiBG QUxMVEhST1VHSCAqLwogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAzMi1v cGVuc3NoLTguN3AxLXNjcC1raWxsLXN3aXRjaC5wYXRjaCBiLzAwMzItb3BlbnNzaC04LjdwMS1z Y3Ata2lsbC1zd2l0Y2gucGF0Y2gKaW5kZXggOTQ3YTZiOS4uNmJhMzEwMCAxMDA2NDQKLS0tIGEv MDAzMi1vcGVuc3NoLTguN3AxLXNjcC1raWxsLXN3aXRjaC5wYXRjaAorKysgYi8wMDMyLW9wZW5z c2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA2MWFj YzVlOTRlYTA4N2RiMjA1MDQ3NzdlNzRiZGI1NTkxNzYyMDU2IE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQorRnJvbSBlZTM4NWRmZTU0MTQyYjFmOGMwM2YyMGI4YTYzYjlmOGYxYjUyYjNmIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21h aWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVjdDog W1BBVENIIDMyLzU0XSBvcGVuc3NoLTguN3AxLXNjcC1raWxsLXN3aXRjaAorU3ViamVjdDogW1BB VENIIDMyLzUzXSBvcGVuc3NoLTguN3AxLXNjcC1raWxsLXN3aXRjaAogCiAjIEltcGxlbWVudCBr aWxsIHN3aXRjaCBmb3IgU0NQIHByb3RvY29sCiAtLS0KQEAgLTExLDEyICsxMSwxMiBAQCBTdWJq ZWN0OiBbUEFUQ0ggMzIvNTRdIG9wZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoCiAgMyBmaWxl cyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCiAKIGRpZmYgLS1naXQgYS9wYXRobmFtZXMuaCBi L3BhdGhuYW1lcy5oCi1pbmRleCBhZTAxYzY5ZTIuLjgwZGI3NmUwMCAxMDA2NDQKK2luZGV4IDJm MGI5ZjRmNi4uY2U1ZGRjMTRmIDEwMDY0NAogLS0tIGEvcGF0aG5hbWVzLmgKICsrKyBiL3BhdGhu YW1lcy5oCi1AQCAtNDAsNiArNDAsNyBAQAotICNkZWZpbmUgX1BBVEhfSE9TVF9SU0FfS0VZX0ZJ TEUJCVNTSERJUiAiL3NzaF9ob3N0X3JzYV9rZXkiCitAQCAtNDEsNiArNDEsNyBAQAogICNkZWZp bmUgX1BBVEhfSE9TVF9FRDI1NTE5X0tFWV9GSUxFCVNTSERJUiAiL3NzaF9ob3N0X2VkMjU1MTlf a2V5IgorICNkZWZpbmUgX1BBVEhfSE9TVF9NTERTQTQ0X0VEMjU1MTlfS0VZX0ZJTEUgU1NIRElS ICIvc3NoX2hvc3RfbWxkc2E0NF9lZDI1NTE5X2tleSIKICAjZGVmaW5lIF9QQVRIX0RIX01PRFVM SQkJCVNTSERJUiAiL21vZHVsaSIKICsjZGVmaW5lIF9QQVRIX1NDUF9LSUxMX1NXSVRDSAkJU1NI RElSICIvZGlzYWJsZV9zY3AiCiAgCkBAIC00MSw3ICs0MSw3IEBAIGluZGV4IDdiY2UwZmU2Zi4u MmJiODM4YzdkIDEwMDY0NAogIC5FeCAtc3RkIHNjcAogIC5TaCBTRUUgQUxTTwogZGlmZiAtLWdp dCBhL3NjcC5jIGIvc2NwLmMKLWluZGV4IDU2MThlMjhlNy4uNzZkY2I2MDQwIDEwMDY0NAoraW5k ZXggYWM0M2VjNWY0Li41Nzc1YmU0NTcgMTAwNjQ0CiAtLS0gYS9zY3AuYwogKysrIGIvc2NwLmMK IEBAIC02MjgsNiArNjI4LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQpAQCAtNjAs NSArNjAsNSBAQCBpbmRleCA1NjE4ZTI4ZTcuLjc2ZGNiNjA0MCAxMDA2NDQKICAJCWZhdGFsKCJ1 bmtub3duIHVzZXIgJXUiLCAodV9pbnQpIHVzZXJpZCk7CiAgCiAtLSAKLTIuNTMuMAorMi41NS4w CiAKCmRpZmYgLS1naXQgYS8wMDMzLW9wZW5zc2gtOC43cDEtcmVjdXJzaXZlLXNjcC5wYXRjaCBi LzAwMzMtb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2NwLnBhdGNoCmluZGV4IDMzZjEwNjcuLjgz YWM4ZDMgMTAwNjQ0Ci0tLSBhLzAwMzMtb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2NwLnBhdGNo CisrKyBiLzAwMzMtb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2NwLnBhdGNoCkBAIC0xLDcgKzEs NyBAQAotRnJvbSA3MjIyM2Y1MTkyOTRjMjM0ZTczMTNkYzBlZmI4NmMxMTY0YTY3YjQ3IE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBmMjFhN2IxNjhhMjVlY2E4ZWYyOTI4ZWI1NDY2NDI5 NzRkMmQyYTMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNr aXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSAr MDIwMAotU3ViamVjdDogW1BBVENIIDMzLzU0XSBvcGVuc3NoLTguN3AxLXJlY3Vyc2l2ZS1zY3AK K1N1YmplY3Q6IFtQQVRDSCAzMy81M10gb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2NwCiAKICMg V29ya2Fyb3VuZCBmb3IgbGFjayBvZiBzZnRwX3JlYWxwYXRoIGluIG9sZGVyIHZlcnNpb25zIG9m IFJIRUwKICMgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0yMDM4 ODU0CkBAIC0xNSw3ICsxNSw3IEBAIFN1YmplY3Q6IFtQQVRDSCAzMy81NF0gb3BlbnNzaC04Ljdw MS1yZWN1cnNpdmUtc2NwCiAgNCBmaWxlcyBjaGFuZ2VkLCA1MiBpbnNlcnRpb25zKCspLCAyMCBk ZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL3NjcC5jIGIvc2NwLmMKLWluZGV4IDc2ZGNiNjA0 MC4uOTczODQ4ZTA0IDEwMDY0NAoraW5kZXggNTc3NWJlNDU3Li42NDZjZjI0NzggMTAwNjQ0CiAt LS0gYS9zY3AuYwogKysrIGIvc2NwLmMKIEBAIC0xMzc3LDcgKzEzNzcsNyBAQCBzb3VyY2Vfc2Z0 cChpbnQgYXJnYywgY2hhciAqc3JjLCBjaGFyICp0YXJnLCBzdHJ1Y3Qgc2Z0cF9jb25uICpjb25u KQpAQCAtMjgsNyArMjgsNyBAQCBpbmRleCA3NmRjYjYwNDAuLjk3Mzg0OGUwNCAxMDA2NDQKICAJ CQllcnJzID0gMTsKICAJCX0KIGRpZmYgLS1naXQgYS9zZnRwLWNsaWVudC5jIGIvc2Z0cC1jbGll bnQuYwotaW5kZXggNjllZjI4Y2RjLi4zMDEyZWFjMTIgMTAwNjQ0CitpbmRleCAxZjAzMTEyOGUu LmFhZDg2NDM1NyAxMDA2NDQKIC0tLSBhL3NmdHAtY2xpZW50LmMKICsrKyBiL3NmdHAtY2xpZW50 LmMKIEBAIC05ODgsNyArOTg4LDcgQEAgc2Z0cF9mc2V0c3RhdChzdHJ1Y3Qgc2Z0cF9jb25uICpj b25uLCBjb25zdCB1X2NoYXIgKmhhbmRsZSwgdV9pbnQgaGFuZGxlX2xlbiwKQEAgLTExMyw3ICsx MTMsNyBAQCBpbmRleCA2OWVmMjhjZGMuLjMwMTJlYWMxMiAxMDA2NDQKICB9CiAgCiAgaW50Ci1A QCAtMjAwMSw3ICsyMDMzLDcgQEAgc2Z0cF9kb3dubG9hZF9kaXIoc3RydWN0IHNmdHBfY29ubiAq Y29ubiwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCitAQCAtMjAwNiw3ICsyMDM4 LDcgQEAgc2Z0cF9kb3dubG9hZF9kaXIoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hh ciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCiAgCWNoYXIgKnNyY19jYW5vbjsKICAJaW50IHJldDsK ICAKQEAgLTEyMiw3ICsxMjIsNyBAQCBpbmRleCA2OWVmMjhjZGMuLjMwMTJlYWMxMiAxMDA2NDQK ICAJCWVycm9yKCJkb3dubG9hZCBcIiVzXCI6IHBhdGggY2Fub25pY2FsaXphdGlvbiBmYWlsZWQi LCBzcmMpOwogIAkJcmV0dXJuIC0xOwogIAl9Ci1AQCAtMjM1NiwxMiArMjM4OCwxMiBAQCB1cGxv YWRfZGlyX2ludGVybmFsKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNyYywg Y29uc3QgY2hhciAqZHN0LAorQEAgLTIzNjEsMTIgKzIzOTMsMTIgQEAgdXBsb2FkX2Rpcl9pbnRl cm5hbChzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIg KmRzdCwKICBpbnQKICBzZnRwX3VwbG9hZF9kaXIoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29u c3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCiAgICAgIGludCBwcmVzZXJ2ZV9mbGFnLCBp bnQgcHJpbnRfZmxhZywgaW50IHJlc3VtZSwgaW50IGZzeW5jX2ZsYWcsCkBAIC0xMzcsNyArMTM3 LDcgQEAgaW5kZXggNjllZjI4Y2RjLi4zMDEyZWFjMTIgMTAwNjQ0CiAgCQllcnJvcigidXBsb2Fk IFwiJXNcIjogcGF0aCBjYW5vbmljYWxpemF0aW9uIGZhaWxlZCIsIGRzdCk7CiAgCQlyZXR1cm4g LTE7CiAgCX0KLUBAIC0yODE5LDcgKzI4NTEsNyBAQCBzZnRwX2Nyb3NzbG9hZF9kaXIoc3RydWN0 IHNmdHBfY29ubiAqZnJvbSwgc3RydWN0IHNmdHBfY29ubiAqdG8sCitAQCAtMjgyOSw3ICsyODYx LDcgQEAgc2Z0cF9jcm9zc2xvYWRfZGlyKHN0cnVjdCBzZnRwX2Nvbm4gKmZyb20sIHN0cnVjdCBz ZnRwX2Nvbm4gKnRvLAogIAljaGFyICpmcm9tX3BhdGhfY2Fub247CiAgCWludCByZXQ7CiAgCkBA IC0xNjksMTAgKzE2OSwxMCBAQCBpbmRleCBjYzhlMjAyOTguLjM2YjY4ZDRjYyAxMDA2NDQKICAv KgogICAqIERvd25sb2FkIGEgJ2Zyb21fcGF0aCcgZnJvbSB0aGUgJ2Zyb20nIGNvbm5lY3Rpb24g YW5kIHVwbG9hZCBpdCB0bwogZGlmZiAtLWdpdCBhL3NmdHAuYyBiL3NmdHAuYwotaW5kZXggZWVi YjE2NmU4Li40YTcxZGQwNWQgMTAwNjQ0CitpbmRleCAzMWQ4ZmE0OTQuLmQzYmU3MmZmZSAxMDA2 NDQKIC0tLSBhL3NmdHAuYwogKysrIGIvc2Z0cC5jCi1AQCAtODA1LDcgKzgwNSw3IEBAIHByb2Nl c3NfcHV0KHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hh ciAqZHN0LAorQEAgLTgwNCw3ICs4MDQsNyBAQCBwcm9jZXNzX3B1dChzdHJ1Y3Qgc2Z0cF9jb25u ICpjb25uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCwKICAJCSAgICAocmZsYWcg fHwgZ2xvYmFsX3JmbGFnKSkgewogIAkJCWlmIChzZnRwX3VwbG9hZF9kaXIoY29ubiwgZy5nbF9w YXRodltpXSwgYWJzX2RzdCwKICAJCQkgICAgcGZsYWcgfHwgZ2xvYmFsX3BmbGFnLCAxLCByZXN1 bWUsCkBAIC0xODEsNyArMTgxLDcgQEAgaW5kZXggZWViYjE2NmU4Li40YTcxZGQwNWQgMTAwNjQ0 CiAgCQkJCWVyciA9IC0xOwogIAkJfSBlbHNlIHsKICAJCQlpZiAoc2Z0cF91cGxvYWQoY29ubiwg Zy5nbF9wYXRodltpXSwgYWJzX2RzdCwKLUBAIC0xNjQwLDcgKzE2NDAsNyBAQCBwYXJzZV9kaXNw YXRjaF9jb21tYW5kKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNtZCwgY2hh ciAqKnB3ZCwKK0BAIC0xNjQ5LDcgKzE2NDksNyBAQCBwYXJzZV9kaXNwYXRjaF9jb21tYW5kKHN0 cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqKnB3ZCwKICAJCWlm IChwYXRoMSA9PSBOVUxMIHx8ICpwYXRoMSA9PSAnXDAnKQogIAkJCXBhdGgxID0geHN0cmR1cChz dGFydGRpcik7CiAgCQlwYXRoMSA9IHNmdHBfbWFrZV9hYnNvbHV0ZShwYXRoMSwgKnB3ZCk7CkBA IC0xOTAsNyArMTkwLDcgQEAgaW5kZXggZWViYjE2NmU4Li40YTcxZGQwNWQgMTAwNjQ0CiAgCQkJ ZXJyID0gMTsKICAJCQlicmVhazsKICAJCX0KLUBAIC0yMjY2LDcgKzIyNjYsNyBAQCBpbnRlcmFj dGl2ZV9sb29wKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNoYXIgKmZpbGUxLCBjaGFyICpmaWxl MikKK0BAIC0yMjc1LDcgKzIyNzUsNyBAQCBpbnRlcmFjdGl2ZV9sb29wKHN0cnVjdCBzZnRwX2Nv bm4gKmNvbm4sIGNoYXIgKmZpbGUxLCBjaGFyICpmaWxlMikKICAJfQogICNlbmRpZiAvKiBVU0Vf TElCRURJVCAqLwogIApAQCAtMjAwLDUgKzIwMCw1IEBAIGluZGV4IGVlYmIxNjZlOC4uNGE3MWRk MDVkIDEwMDY0NAogIAlzdGFydGRpciA9IHhzdHJkdXAocmVtb3RlX3BhdGgpOwogIAogLS0gCi0y LjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAzNC1vcGVuc3NoLTguN3AxLWlibWNhLnBh dGNoIGIvMDAzNC1vcGVuc3NoLTguN3AxLWlibWNhLnBhdGNoCmluZGV4IDU1MzI5N2EuLjhjYTRj Y2IgMTAwNjQ0Ci0tLSBhLzAwMzQtb3BlbnNzaC04LjdwMS1pYm1jYS5wYXRjaAorKysgYi8wMDM0 LW9wZW5zc2gtOC43cDEtaWJtY2EucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDI3ZTczYzlk NmM0YTQ0YmRmYjk4ODUyZGRlYjMwZTkwMmZmODY1OGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CitGcm9tIDUzMzA2MjRkNzZhMjQ1NTdmYjcxZDg4NTJjNmU1ZTFjOGVkY2U3NjIgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5j b20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1TdWJqZWN0OiBbUEFU Q0ggMzQvNTRdIG9wZW5zc2gtOC43cDEtaWJtY2EKK1N1YmplY3Q6IFtQQVRDSCAzNC81M10gb3Bl bnNzaC04LjdwMS1pYm1jYQogCiAjIGRvd25zdHJlYW0gb25seSwgSUJNQ0EgdGVudGF0aXZlIGZp eAogIyBGcm9tIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTk3 NjIwMiNjMTQKQEAgLTIzLDUgKzIzLDUgQEAgaW5kZXggZjYxMTI0NTg1Li40MTdjMjA0ODQgMTAw NjQ0CiAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogICNpbmNsdWRlIDx1bmlzdGQuaD4KIC0tIAot Mi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMzUtb3BlbnNzaC03LjZwMS1hdWRpdC5w YXRjaCBiLzAwMzUtb3BlbnNzaC03LjZwMS1hdWRpdC5wYXRjaAppbmRleCA0MGRmMDZjLi41MWQ3 Mjg1IDEwMDY0NAotLS0gYS8wMDM1LW9wZW5zc2gtNy42cDEtYXVkaXQucGF0Y2gKKysrIGIvMDAz NS1vcGVuc3NoLTcuNnAxLWF1ZGl0LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAwMGVmNTY1 MzM2YzkzM2Y5NDY0YjA5YzU1MTM0ZmEzYjNjNzZhZDQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQorRnJvbSA2ZmVmYTc2OGYyOTk1M2M2MmY4MWY2ZTRlOGU3MGUzMmY2YzQ4ZGQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwu Y29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVjdDogW1BB VENIIDM1LzU0XSBvcGVuc3NoLTcuNnAxLWF1ZGl0CitTdWJqZWN0OiBbUEFUQ0ggMzUvNTNdIG9w ZW5zc2gtNy42cDEtYXVkaXQKIAogLS0tCiAgTWFrZWZpbGUuaW4gICAgICAgfCAgIDIgKy0KQEAg LTM1LDEwICszNSwxMCBAQCBTdWJqZWN0OiBbUEFUQ0ggMzUvNTRdIG9wZW5zc2gtNy42cDEtYXVk aXQKICBjcmVhdGUgbW9kZSAxMDA2NDQgYXVkaXRzdHViLmMKIAogZGlmZiAtLWdpdCBhL01ha2Vm aWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IGExMmY2YWQxZC4uZjgwYzk1ODQ2IDEwMDY0NAor aW5kZXggMWVlYjM0Y2FkLi5mNjFmODllNGQgMTAwNjQ0CiAtLS0gYS9NYWtlZmlsZS5pbgogKysr IGIvTWFrZWZpbGUuaW4KLUBAIC0xMTAsNyArMTEwLDcgQEAgTElCU1NIX09CSlM9JHtMSUJPUEVO U1NIX09CSlN9IFwKK0BAIC0xMTEsNyArMTExLDcgQEAgTElCU1NIX09CSlM9JHtMSUJPUEVOU1NI X09CSlN9IFwKICAJa2V4c250cnVwNzYxeDI1NTE5Lm8ga2V4bWxrZW03Njh4MjU1MTkubyBzbnRy dXA3NjEubyBrZXhnZW4ubyBcCiAgCWtleGdzc2MubyBcCiAgCXNmdHAtcmVhbHBhdGgubyBwbGF0 Zm9ybS1wbGVkZ2UubyBwbGF0Zm9ybS10cmFjaW5nLm8gcGxhdGZvcm0tbWlzYy5vIFwKQEAgLTc4 MiwxMCArNzgyLDEwIEBAIGluZGV4IDAwMDAwMDAwMC4uNjM5YTc5OGRmCiArewogK30KIGRpZmYg LS1naXQgYS9hdXRoLmMgYi9hdXRoLmMKLWluZGV4IDE0MmFjNWFmZC4uMTg1OGJkZGFiIDEwMDY0 NAoraW5kZXggOWQxMzA3Yjc2Li45ODUxNjI1Y2YgMTAwNjQ0CiAtLS0gYS9hdXRoLmMKICsrKyBi L2F1dGguYwotQEAgLTQ5OSw5ICs0OTksNiBAQCBnZXRwd25hbWFsbG93KHN0cnVjdCBzc2ggKnNz aCwgY29uc3QgY2hhciAqdXNlcikKK0BAIC01MDIsOSArNTAyLDYgQEAgZ2V0cHduYW1hbGxvdyhz dHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IGNoYXIgKnVzZXIpCiAgCQlyZWNvcmRfZmFpbGVkX2xvZ2lu KHNzaCwgdXNlciwKICAJCSAgICBhdXRoX2dldF9jYW5vbmljYWxfaG9zdG5hbWUoc3NoLCBvcHRp b25zLnVzZV9kbnMpLCAic3NoIik7CiAgI2VuZGlmCkBAIC03OTYsMTAgKzc5NiwxMCBAQCBpbmRl eCAxNDJhYzVhZmQuLjE4NThiZGRhYiAxMDA2NDQKICAJfQogIAlpZiAoIWFsbG93ZWRfdXNlcihz c2gsIHB3KSkKIGRpZmYgLS1naXQgYS9hdXRoLmggYi9hdXRoLmgKLWluZGV4IDgxNWY4MjFmOS4u YjcyYjc2MTYzIDEwMDY0NAoraW5kZXggOWRkMjVmNDk0Li4wNjZmNWVmZmEgMTAwNjQ0CiAtLS0g YS9hdXRoLmgKICsrKyBiL2F1dGguaAotQEAgLTIxMyw2ICsyMTMsOCBAQCBzdHJ1Y3Qgc3Noa2V5 CSpnZXRfaG9zdGtleV9wcml2YXRlX2J5X3R5cGUoaW50LCBpbnQsIHN0cnVjdCBzc2ggKik7CitA QCAtMjE0LDYgKzIxNCw4IEBAIHN0cnVjdCBzc2hrZXkJKmdldF9ob3N0a2V5X3ByaXZhdGVfYnlf dHlwZShpbnQsIGludCwgc3RydWN0IHNzaCAqKTsKICBpbnQJIGdldF9ob3N0a2V5X2luZGV4KHN0 cnVjdCBzc2hrZXkgKiwgaW50LCBzdHJ1Y3Qgc3NoICopOwogIGludAkgc3NoZF9ob3N0a2V5X3Np Z24oc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3Noa2V5ICosIHN0cnVjdCBzc2hrZXkgKiwKICAgICAg dV9jaGFyICoqLCBzaXplX3QgKiwgY29uc3QgdV9jaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAq KTsKQEAgLTgwOCw3ICs4MDgsNyBAQCBpbmRleCA4MTVmODIxZjkuLmI3MmI3NjE2MyAxMDA2NDQK ICAKICAvKiBLZXkgLyBjZXJ0IG9wdGlvbnMgbGlua2FnZSB0byBhdXRoIGxheWVyICovCiAgaW50 CSBhdXRoX2FjdGl2YXRlX29wdGlvbnMoc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3NoYXV0aG9wdCAq KTsKLUBAIC0yMzgsNiArMjQwLDggQEAgaW50CSBhdXRoX2NoZWNrX2F1dGhrZXlfbGluZShzdHJ1 Y3QgcGFzc3dkICosIHN0cnVjdCBzc2hrZXkgKiwKK0BAIC0yMzksNiArMjQxLDggQEAgaW50CSBh dXRoX2NoZWNrX2F1dGhrZXlfbGluZShzdHJ1Y3QgcGFzc3dkICosIHN0cnVjdCBzc2hrZXkgKiwK ICAgICAgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBz dHJ1Y3Qgc3NoYXV0aG9wdCAqKik7CiAgaW50CSBhdXRoX2NoZWNrX2F1dGhrZXlzX2ZpbGUoc3Ry dWN0IHBhc3N3ZCAqLCBGSUxFICosIGNoYXIgKiwKICAgICAgc3RydWN0IHNzaGtleSAqLCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHNzaGF1dGhvcHQgKiopOwpAQCAtODE4LDEw ICs4MTgsMTAgQEAgaW5kZXggODE1ZjgyMWY5Li5iNzJiNzYxNjMgMTAwNjQ0CiAgRklMRQkqYXV0 aF9vcGVucHJpbmNpcGFscyhjb25zdCBjaGFyICosIHN0cnVjdCBwYXNzd2QgKiwgaW50KTsKICAK IGRpZmYgLS1naXQgYS9hdXRoMi1ob3N0YmFzZWQuYyBiL2F1dGgyLWhvc3RiYXNlZC5jCi1pbmRl eCBhMjg3MDkxZWMuLmJjNDc3NTA0MiAxMDA2NDQKK2luZGV4IDZhNjcwNGQ5My4uZDg3NzQ3MWRh IDEwMDY0NAogLS0tIGEvYXV0aDItaG9zdGJhc2VkLmMKICsrKyBiL2F1dGgyLWhvc3RiYXNlZC5j Ci1AQCAtMTU4LDcgKzE1OCw3IEBAIHVzZXJhdXRoX2hvc3RiYXNlZChzdHJ1Y3Qgc3NoICpzc2gs IGNvbnN0IGNoYXIgKm1ldGhvZCkKK0BAIC0xNTksNyArMTU5LDcgQEAgdXNlcmF1dGhfaG9zdGJh c2VkKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQogIAlhdXRoZW50aWNhdGVk ID0gMDsKICAJaWYgKG1tX2hvc3RiYXNlZF9rZXlfYWxsb3dlZChzc2gsIGF1dGhjdHh0LT5wdywg Y3VzZXIsCiAgCSAgICBjaG9zdCwga2V5KSAmJgpAQCAtODMwLDcgKzgzMCw3IEBAIGluZGV4IGEy ODcwOTFlYy4uYmM0Nzc1MDQyIDEwMDY0NAogIAkgICAgc3NoYnVmX3B0cihiKSwgc3NoYnVmX2xl bihiKSwgcGthbGcsIHNzaC0+Y29tcGF0LCBOVUxMKSA9PSAwKQogIAkJYXV0aGVudGljYXRlZCA9 IDE7CiAgCi1AQCAtMTc1LDYgKzE3NSwyMCBAQCBkb25lOgorQEAgLTE3Niw2ICsxNzYsMjAgQEAg ZG9uZToKICAJcmV0dXJuIGF1dGhlbnRpY2F0ZWQ7CiAgfQogIApAQCAtODUyLDcgKzg1Miw3IEBA IGluZGV4IGEyODcwOTFlYy4uYmM0Nzc1MDQyIDEwMDY0NAogIGludAogIGhvc3RiYXNlZF9rZXlf YWxsb3dlZChzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBwYXNzd2QgKnB3LAogZGlmZiAtLWdpdCBh L2F1dGgyLXB1YmtleS5jIGIvYXV0aDItcHVia2V5LmMKLWluZGV4IDMxOWU0MmIyYi4uOTczODEw ZGM5IDEwMDY0NAoraW5kZXggZGMwN2ZhYTkyLi5mMmE0MzI5ZTUgMTAwNjQ0CiAtLS0gYS9hdXRo Mi1wdWJrZXkuYwogKysrIGIvYXV0aDItcHVia2V5LmMKIEBAIC0yMzAsNyArMjMwLDcgQEAgdXNl cmF1dGhfcHVia2V5KHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQpAQCAtODg2 LDEwICs4ODYsMTAgQEAgaW5kZXggMzE5ZTQyYjJiLi45NzM4MTBkYzkgMTAwNjQ0CiAgbWF0Y2hf cHJpbmNpcGFsc19maWxlKHN0cnVjdCBwYXNzd2QgKnB3LCBjaGFyICpmaWxlLAogICAgICBzdHJ1 Y3Qgc3Noa2V5X2NlcnQgKmNlcnQsIHN0cnVjdCBzc2hhdXRob3B0ICoqYXV0aG9wdHNwKQogZGlm ZiAtLWdpdCBhL2F1dGgyLmMgYi9hdXRoMi5jCi1pbmRleCAzYzNiZGI3NzYuLjc5MGJiMzQ1NCAx MDA2NDQKK2luZGV4IGYwZjM5NzA3Zi4uNzE0NjBkNzhmIDEwMDY0NAogLS0tIGEvYXV0aDIuYwog KysrIGIvYXV0aDIuYwotQEAgLTMxNSw5ICszMTUsNiBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0 KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKK0BAIC0zMjEsOSArMzIx LDYgQEAgaW5wdXRfdXNlcmF1dGhfcmVxdWVzdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1 Y3Qgc3NoICpzc2gpCiAgCQkJYXV0aGN0eHQtPnZhbGlkID0gMDsKICAJCQkvKiBJbnZhbGlkIHVz ZXIsIGZha2UgcGFzc3dvcmQgaW5mb3JtYXRpb24gKi8KICAJCQlhdXRoY3R4dC0+cHcgPSBmYWtl cHcoKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCBpbmRleCAzYzNiZGI3NzYuLjc5MGJiMzQ1NCAxMDA2 NDQKICAjaWZkZWYgVVNFX1BBTQogIAkJaWYgKG9wdGlvbnMudXNlX3BhbSkKIGRpZmYgLS1naXQg YS9jaXBoZXIuYyBiL2NpcGhlci5jCi1pbmRleCBmNzcwZTY2NmMuLmIwNTc1NWQ3MyAxMDA2NDQK K2luZGV4IDA2OTdlNTU5Yi4uODIwNzZkNGJkIDEwMDY0NAogLS0tIGEvY2lwaGVyLmMKICsrKyBi L2NpcGhlci5jCiBAQCAtNjMsMjUgKzYzLDYgQEAgc3RydWN0IHNzaGNpcGhlcl9jdHggewpAQCAt OTI5LDcgKzkyOSw3IEBAIGluZGV4IGY3NzBlNjY2Yy4uYjA1NzU1ZDczIDEwMDY0NAogIHN0YXRp YyBjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyIGNpcGhlcnNbXSA9IHsKICAjaWZkZWYgV0lUSF9PUEVO U1NMCiAgI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotQEAgLTQxMCw3ICszOTEsNyBAQCBjaXBoZXJf Z2V0X2xlbmd0aChzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MsIHVfaW50ICpwbGVucCwgdV9pbnQg c2VxbnIsCitAQCAtNDE4LDcgKzM5OSw3IEBAIGNpcGhlcl9nZXRfbGVuZ3RoKHN0cnVjdCBzc2hj aXBoZXJfY3R4ICpjYywgdV9pbnQgKnBsZW5wLCB1X2ludCBzZXFuciwKICB2b2lkCiAgY2lwaGVy X2ZyZWUoc3RydWN0IHNzaGNpcGhlcl9jdHggKmNjKQogIHsKQEAgLTkzOSw3ICs5MzksNyBAQCBp bmRleCBmNzcwZTY2NmMuLmIwNTc1NWQ3MyAxMDA2NDQKICAJaWYgKChjYy0+Y2lwaGVyLT5mbGFn cyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDApIHsKICAJCWNoYWNoYXBvbHlfZnJlZShjYy0+Y3Bf Y3R4KTsKIGRpZmYgLS1naXQgYS9jaXBoZXIuaCBiL2NpcGhlci5oCi1pbmRleCA2NTMzZmYyYmIu LjJlMDVhMDIxMCAxMDA2NDQKK2luZGV4IDMyYWJkZGUyMi4uZTk1M2RmYzNjIDEwMDY0NAogLS0t IGEvY2lwaGVyLmgKICsrKyBiL2NpcGhlci5oCiBAQCAtNDcsNyArNDcsMjUgQEAKQEAgLTk3MCw3 ICs5NzAsNyBAQCBpbmRleCA2NTMzZmYyYmIuLjJlMDVhMDIxMCAxMDA2NDQKICAKICBjb25zdCBz dHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXJfYnlfbmFtZShjb25zdCBjaGFyICopOwogZGlmZiAtLWdp dCBhL2tleC5jIGIva2V4LmMKLWluZGV4IDU0ZTcxMTgxMC4uNzBiZWJjZTZhIDEwMDY0NAoraW5k ZXggNjk4MWI1OWY1Li45Y2UyYjdlMTIgMTAwNjQ0CiAtLS0gYS9rZXguYwogKysrIGIva2V4LmMK IEBAIC02NCw2ICs2NCw3IEBACkBAIC05ODEsNyArOTgxLDcgQEAgaW5kZXggNTRlNzExODEwLi43 MGJlYmNlNmEgMTAwNjQ0CiAgCiAgLyogcHJvdG90eXBlICovCiAgc3RhdGljIGludCBrZXhfY2hv b3NlX2NvbmYoc3RydWN0IHNzaCAqLCB1aW50MzJfdCBzZXEpOwotQEAgLTgyNiwxMiArODI3LDE2 IEBAIGtleF9zdGFydF9yZWtleChzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtODI5LDEyICs4MzAsMTYg QEAga2V4X3N0YXJ0X3Jla2V4KHN0cnVjdCBzc2ggKnNzaCkKICB9CiAgCiAgc3RhdGljIGludApA QCAtMTAwMCw3ICsxMDAwLDcgQEAgaW5kZXggNTRlNzExODEwLi43MGJlYmNlNmEgMTAwNjQ0CiAg CWlmICgoZW5jLT5jaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShuYW1lKSkgPT0gTlVMTCkgewogIAkJ ZXJyb3JfZigidW5zdXBwb3J0ZWQgY2lwaGVyICVzIiwgbmFtZSk7CiAgCQlmcmVlKG5hbWUpOwot QEAgLTg1Miw4ICs4NTcsMTIgQEAgY2hvb3NlX21hYyhzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBz c2htYWMgKm1hYywgY2hhciAqY2xpZW50LCBjaGFyICpzZXJ2ZXIpCitAQCAtODU1LDggKzg2MCwx MiBAQCBjaG9vc2VfbWFjKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaG1hYyAqbWFjLCBjaGFy ICpjbGllbnQsIGNoYXIgKnNlcnZlcikKICB7CiAgCWNoYXIgKm5hbWUgPSBtYXRjaF9saXN0KGNs aWVudCwgc2VydmVyLCBOVUxMKTsKICAKQEAgLTEwMTQsNyArMTAxNCw3IEBAIGluZGV4IDU0ZTcx MTgxMC4uNzBiZWJjZTZhIDEwMDY0NAogIAlpZiAobWFjX3NldHVwKG1hYywgbmFtZSkgPCAwKSB7 CiAgCQllcnJvcl9mKCJ1bnN1cHBvcnRlZCBNQUMgJXMiLCBuYW1lKTsKICAJCWZyZWUobmFtZSk7 Ci1AQCAtODY2LDEyICs4NzUsMTYgQEAgY2hvb3NlX21hYyhzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVj dCBzc2htYWMgKm1hYywgY2hhciAqY2xpZW50LCBjaGFyICpzZXJ2ZXIpCitAQCAtODY5LDEyICs4 NzgsMTYgQEAgY2hvb3NlX21hYyhzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2htYWMgKm1hYywg Y2hhciAqY2xpZW50LCBjaGFyICpzZXJ2ZXIpCiAgfQogIAogIHN0YXRpYyBpbnQKQEAgLTEwMzMs NyArMTAzMyw3IEBAIGluZGV4IDU0ZTcxMTgxMC4uNzBiZWJjZTZhIDEwMDY0NAogICNpZmRlZiBX SVRIX1pMSUIKICAJaWYgKHN0cmNtcChuYW1lLCAiemxpYkBvcGVuc3NoLmNvbSIpID09IDApIHsK ICAJCWNvbXAtPnR5cGUgPSBDT01QX0RFTEFZRUQ7Ci1AQCAtMTAzNSw3ICsxMDQ4LDcgQEAga2V4 X2Nob29zZV9jb25mKHN0cnVjdCBzc2ggKnNzaCwgdWludDMyX3Qgc2VxKQorQEAgLTEwMzgsNyAr MTA1MSw3IEBAIGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qgc3NoICpzc2gsIHVpbnQzMl90IHNlcSkK ICAJCW5lbmMgID0gY3RvcyA/IFBST1BPU0FMX0VOQ19BTEdTX0NUT1MgIDogUFJPUE9TQUxfRU5D X0FMR1NfU1RPQzsKICAJCW5tYWMgID0gY3RvcyA/IFBST1BPU0FMX01BQ19BTEdTX0NUT1MgIDog UFJPUE9TQUxfTUFDX0FMR1NfU1RPQzsKICAJCW5jb21wID0gY3RvcyA/IFBST1BPU0FMX0NPTVBf QUxHU19DVE9TIDogUFJPUE9TQUxfQ09NUF9BTEdTX1NUT0M7CkBAIC0xMDQyLDcgKzEwNDIsNyBA QCBpbmRleCA1NGU3MTE4MTAuLjcwYmViY2U2YSAxMDA2NDQKICAJCSAgICBzcHJvcFtuZW5jXSkp ICE9IDApIHsKICAJCQlrZXgtPmZhaWxlZF9jaG9pY2UgPSBwZWVyW25lbmNdOwogIAkJCXBlZXJb bmVuY10gPSBOVUxMOwotQEAgLTEwNTAsNyArMTA2Myw3IEBAIGtleF9jaG9vc2VfY29uZihzdHJ1 Y3Qgc3NoICpzc2gsIHVpbnQzMl90IHNlcSkKK0BAIC0xMDUzLDcgKzEwNjYsNyBAQCBrZXhfY2hv b3NlX2NvbmYoc3RydWN0IHNzaCAqc3NoLCB1aW50MzJfdCBzZXEpCiAgCQkJcGVlcltubWFjXSA9 IE5VTEw7CiAgCQkJZ290byBvdXQ7CiAgCQl9CkBAIC0xMDUxLDcgKzEwNTEsNyBAQCBpbmRleCA1 NGU3MTE4MTAuLjcwYmViY2U2YSAxMDA2NDQKICAJCSAgICBzcHJvcFtuY29tcF0pKSAhPSAwKSB7 CiAgCQkJa2V4LT5mYWlsZWRfY2hvaWNlID0gcGVlcltuY29tcF07CiAgCQkJcGVlcltuY29tcF0g PSBOVUxMOwotQEAgLTEwNzMsNiArMTA4NiwxMCBAQCBrZXhfY2hvb3NlX2NvbmYoc3RydWN0IHNz aCAqc3NoLCB1aW50MzJfdCBzZXEpCitAQCAtMTA3Niw2ICsxMDg5LDEwIEBAIGtleF9jaG9vc2Vf Y29uZihzdHJ1Y3Qgc3NoICpzc2gsIHVpbnQzMl90IHNlcSkKICAJCWRoX25lZWQgPSBNQVhJTVVN KGRoX25lZWQsIG5ld2tleXMtPmVuYy5ibG9ja19zaXplKTsKICAJCWRoX25lZWQgPSBNQVhJTVVN KGRoX25lZWQsIG5ld2tleXMtPmVuYy5pdl9sZW4pOwogIAkJZGhfbmVlZCA9IE1BWElNVU0oZGhf bmVlZCwgbmV3a2V5cy0+bWFjLmtleV9sZW4pOwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgaW5kZXgg NTRlNzExODEwLi43MGJlYmNlNmEgMTAwNjQ0CiAgCX0KICAJLyogWFhYIG5lZWQgcnVuZGVuPyAq LwogIAlrZXgtPndlX25lZWQgPSBuZWVkOwotQEAgLTEzNDIsNiArMTM1OSwzNiBAQCBkdW1wX2Rp Z2VzdChjb25zdCBjaGFyICptc2csIGNvbnN0IHVfY2hhciAqZGlnZXN0LCBpbnQgbGVuKQorQEAg LTEzNDUsNiArMTM2MiwzNiBAQCBkdW1wX2RpZ2VzdChjb25zdCBjaGFyICptc2csIGNvbnN0IHVf Y2hhciAqZGlnZXN0LCBpbnQgbGVuKQogIH0KICAjZW5kaWYKICAKQEAgLTExMDAsMTAgKzExMDAs MTAgQEAgaW5kZXggNTRlNzExODEwLi43MGJlYmNlNmEgMTAwNjQ0CiAgICogU2VuZCBhIHBsYWlu dGV4dCBlcnJvciBtZXNzYWdlIHRvIHRoZSBwZWVyLCBzdWZmaXhlZCBieSBcclxuLgogICAqIE9u bHkgdXNlZCBkdXJpbmcgYmFubmVyIGV4Y2hhbmdlLCBhbmQgdGhlcmUgb25seSBmb3IgdGhlIHNl cnZlci4KIGRpZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCi1pbmRleCAyYzg2YjI1ZjkuLjBhMGNi MTU2MiAxMDA2NDQKK2luZGV4IDIxOTE5YTlhYS4uOGY5OTM0ODk5IDEwMDY0NAogLS0tIGEva2V4 LmgKICsrKyBiL2tleC5oCi1AQCAtMjYxLDYgKzI2MSw4IEBAIGludAkga2V4Z3NzX2NsaWVudChz dHJ1Y3Qgc3NoICopOworQEAgLTI1Nyw2ICsyNTcsOCBAQCBpbnQJIGtleGdzc19jbGllbnQoc3Ry dWN0IHNzaCAqKTsKICBpbnQJIGtleGdzc19zZXJ2ZXIoc3RydWN0IHNzaCAqKTsKICAjZW5kaWYK ICAKQEAgLTExMTMsNyArMTExMyw3IEBAIGluZGV4IDJjODZiMjVmOS4uMGEwY2IxNTYyIDEwMDY0 NAogIGludAkga2V4X2RoX2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwg c3RydWN0IHNzaGJ1ZiAqKiwKICAgICAgc3RydWN0IHNzaGJ1ZiAqKik7CiBkaWZmIC0tZ2l0IGEv bWFjLmMgYi9tYWMuYwotaW5kZXggMTc2MDc4MzBjLi4yOTEzYjhhOGMgMTAwNjQ0CitpbmRleCAz MDQ5NmI0MDIuLmQ0N2RmMGNkZiAxMDA2NDQKIC0tLSBhL21hYy5jCiArKysgYi9tYWMuYwogQEAg LTIzMCw2ICsyMzAsMjAgQEAgbWFjX2NsZWFyKHN0cnVjdCBzc2htYWMgKm1hYykKQEAgLTExNDks NyArMTE0OSw3IEBAIGluZGV4IDA0MDg5ZjQxYi4uNmI1ZWJjNDRiIDEwMDY0NAogIAogICNlbmRp ZiAvKiBTU0hNQUNfSCAqLwogZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0b3IuYwotaW5k ZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0CitpbmRleCAxNGNkY2NmMmYuLjczM2EzNDYw ZiAxMDA2NDQKIC0tLSBhL21vbml0b3IuYwogKysrIGIvbW9uaXRvci5jCiBAQCAtODMsNiArODMs NyBAQApAQCAtMTIwNCw3ICsxMjA0LDcgQEAgaW5kZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAw NjQ0CiAgI2VuZGlmCiAgICAgIHswLCAwLCBOVUxMfQogIH07Ci1AQCAtMTYwMyw4ICsxNjIwLDEw IEBAIG1tX2Fuc3dlcl9rZXl2ZXJpZnkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0 IHNzaGJ1ZiAqbSkKK0BAIC0xNTg5LDggKzE2MDYsMTAgQEAgbW1fYW5zd2VyX2tleXZlcmlmeShz dHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQogIAlpbnQgciwgcmV0 LCByZXFfcHJlc2VuY2UgPSAwLCByZXFfdmVyaWZ5ID0gMCwgdmFsaWRfZGF0YSA9IDA7CiAgCWlu dCBlbmNvZGVkX3JldDsKICAJc3RydWN0IHNzaGtleV9zaWdfZGV0YWlscyAqc2lnX2RldGFpbHMg PSBOVUxMOwpAQCAtMTIxNiw3ICsxMjE2LDcgQEAgaW5kZXggNTI1NTA4M2FiLi4zMDU4ODMyNzgg MTAwNjQ0CiAgCSAgICAociA9IHNzaGJ1Zl9nZXRfc3RyaW5nX2RpcmVjdChtLCAmc2lnbmF0dXJl LCAmc2lnbmF0dXJlbGVuKSkgIT0gMCB8fAogIAkgICAgKHIgPSBzc2hidWZfZ2V0X3N0cmluZ19k aXJlY3QobSwgJmRhdGEsICZkYXRhbGVuKSkgIT0gMCB8fAogIAkgICAgKHIgPSBzc2hidWZfZ2V0 X2NzdHJpbmcobSwgJnNpZ2FsZywgTlVMTCkpICE9IDApCi1AQCAtMTYxMyw2ICsxNjMyLDggQEAg bW1fYW5zd2VyX2tleXZlcmlmeShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3No YnVmICptKQorQEAgLTE1OTksNiArMTYxOCw4IEBAIG1tX2Fuc3dlcl9rZXl2ZXJpZnkoc3RydWN0 IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJaWYgKGhvc3RiYXNlZF9j dXNlciA9PSBOVUxMIHx8IGhvc3RiYXNlZF9jaG9zdCA9PSBOVUxMIHx8CiAgCSAgIW1vbml0b3Jf YWxsb3dlZF9rZXkoYmxvYiwgYmxvYmxlbikpCiAgCQlmYXRhbF9mKCJiYWQga2V5LCBub3QgcHJl dmlvdXNseSBhbGxvd2VkIik7CkBAIC0xMjI1LDcgKzEyMjUsNyBAQCBpbmRleCA1MjU1MDgzYWIu LjMwNTg4MzI3OCAxMDA2NDQKICAKICAJLyogRW1wdHkgc2lnbmF0dXJlIGFsZ29yaXRobSBtZWFu cyBOVUxMLiAqLwogIAlpZiAoKnNpZ2FsZyA9PSAnXDAnKSB7Ci1AQCAtMTYyOCwxNCArMTY0OSwx OSBAQCBtbV9hbnN3ZXJfa2V5dmVyaWZ5KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVj dCBzc2hidWYgKm0pCitAQCAtMTYxNCwxNCArMTYzNSwxOSBAQCBtbV9hbnN3ZXJfa2V5dmVyaWZ5 KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCWNhc2UgTU1f VVNFUktFWToKICAJCXZhbGlkX2RhdGEgPSBtb25pdG9yX3ZhbGlkX3VzZXJibG9iKHNzaCwgZGF0 YSwgZGF0YWxlbik7CiAgCQlhdXRoX21ldGhvZCA9ICJwdWJsaWNrZXkiOwpAQCAtMTI0NSw3ICsx MjQ1LDcgQEAgaW5kZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0CiAgCQlicmVhazsKICAJ fQogIAlpZiAoIXZhbGlkX2RhdGEpCi1AQCAtMTY0Nyw4ICsxNjczLDYgQEAgbW1fYW5zd2VyX2tl eXZlcmlmeShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorQEAg LTE2MzMsOCArMTY1OSw2IEBAIG1tX2Fuc3dlcl9rZXl2ZXJpZnkoc3RydWN0IHNzaCAqc3NoLCBp bnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJICAgIFNTSF9GUF9ERUZBVUxUKSkgPT0gTlVM TCkKICAJCWZhdGFsX2YoInNzaGtleV9maW5nZXJwcmludCBmYWlsZWQiKTsKICAKQEAgLTEyNTQs NyArMTI1NCw3IEBAIGluZGV4IDUyNTUwODNhYi4uMzA1ODgzMjc4IDEwMDY0NAogIAlkZWJ1ZzNf ZigiJXMgJXMgc2lnbmF0dXJlIHVzaW5nICVzICVzJXMlcyIsIGF1dGhfbWV0aG9kLAogIAkgICAg c3Noa2V5X3R5cGUoa2V5KSwgc2lnYWxnID09IE5VTEwgPyAiZGVmYXVsdCIgOiBzaWdhbGcsCiAg CSAgICAocmV0ID09IDApID8gInZlcmlmaWVkIiA6ICJ1bnZlcmlmaWVkIiwKLUBAIC0xNzM2LDEz ICsxNzYwLDE5IEBAIG1tX3JlY29yZF9sb2dpbihzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMs IHN0cnVjdCBwYXNzd2QgKnB3KQorQEAgLTE3MjIsMTMgKzE3NDYsMTkgQEAgbW1fcmVjb3JkX2xv Z2luKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgc3RydWN0IHBhc3N3ZCAqcHcpCiAgfQog IAogIHN0YXRpYyB2b2lkCkBAIC0xMjc1LDcgKzEyNzUsNyBAQCBpbmRleCA1MjU1MDgzYWIuLjMw NTg4MzI3OCAxMDA2NDQKICAJc2Vzc2lvbl91bnVzZWQocy0+c2VsZik7CiAgfQogIAotQEAgLTE4 MDksNyArMTgzOSw3IEBAIG1tX2Fuc3dlcl9wdHkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywg c3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC0xNzk1LDcgKzE4MjUsNyBAQCBtbV9hbnN3ZXJfcHR5KHN0 cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCiAgIGVycm9yOgog IAlpZiAocyAhPSBOVUxMKQpAQCAtMTI4NCw3ICsxMjg0LDcgQEAgaW5kZXggNTI1NTA4M2FiLi4z MDU4ODMyNzggMTAwNjQ0CiAgCWlmICgociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIDApKSAhPSAwKQog IAkJZmF0YWxfZnIociwgImFzc2VtYmxlIDAiKTsKICAJbW1fcmVxdWVzdF9zZW5kKHNvY2ssIE1P TklUT1JfQU5TX1BUWSwgbSk7Ci1AQCAtMTgyOCw3ICsxODU4LDcgQEAgbW1fYW5zd2VyX3B0eV9j bGVhbnVwKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCitAQCAt MTgxNCw3ICsxODQ0LDcgQEAgbW1fYW5zd2VyX3B0eV9jbGVhbnVwKHN0cnVjdCBzc2ggKnNzaCwg aW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmlu ZyhtLCAmdHR5LCBOVUxMKSkgIT0gMCkKICAJCWZhdGFsX2ZyKHIsICJwYXJzZSB0dHkiKTsKICAJ aWYgKChzID0gc2Vzc2lvbl9ieV90dHkodHR5KSkgIT0gTlVMTCkKQEAgLTEyOTMsNyArMTI5Myw3 IEBAIGluZGV4IDUyNTUwODNhYi4uMzA1ODgzMjc4IDEwMDY0NAogIAlzc2hidWZfcmVzZXQobSk7 CiAgCWZyZWUodHR5KTsKICAJcmV0dXJuICgwKTsKLUBAIC0xODUwLDYgKzE4ODAsOCBAQCBtbV9h bnN3ZXJfdGVybShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICpyZXEp CitAQCAtMTgzNiw2ICsxODY2LDggQEAgbW1fYW5zd2VyX3Rlcm0oc3RydWN0IHNzaCAqc3NoLCBp bnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqcmVxKQogIAkJc3NocGFtX2NsZWFudXAoKTsKICAjZW5k aWYKICAKQEAgLTEzMDIsNyArMTMwMiw3IEBAIGluZGV4IDUyNTUwODNhYi4uMzA1ODgzMjc4IDEw MDY0NAogIAl3aGlsZSAod2FpdHBpZChwbW9uaXRvci0+bV9waWQsICZzdGF0dXMsIDApID09IC0x KQogIAkJaWYgKGVycm5vICE9IEVJTlRSKQogIAkJCWV4aXQoMSk7Ci1AQCAtMTg5NiwxMiArMTky OCw0NiBAQCBtbV9hbnN3ZXJfYXVkaXRfY29tbWFuZChzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2Nr ZXQsIHN0cnVjdCBzc2hidWYgKm0pCitAQCAtMTg4MiwxMiArMTkxNCw0NiBAQCBtbV9hbnN3ZXJf YXVkaXRfY29tbWFuZChzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYg Km0pCiAgewogIAljaGFyICpjbWQ7CiAgCWludCByOwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAgaW5k ZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0CiAgCWZyZWUoY21kKTsKICAJcmV0dXJuICgw KTsKICB9Ci1AQCAtMTk3NCw2ICsyMDQwLDcgQEAgbW9uaXRvcl9hcHBseV9rZXlzdGF0ZShzdHJ1 Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRvcikKK0BAIC0xOTU4LDYgKzIwMjQs NyBAQCBtb25pdG9yX2FwcGx5X2tleXN0YXRlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0 b3IgKnBtb25pdG9yKQogIHZvaWQKICBtbV9nZXRfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBz dHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCiAgewpAQCAtMTM1OCw3ICsxMzU4LDcgQEAgaW5kZXgg NTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0CiAgCWRlYnVnM19mKCJXYWl0aW5nIGZvciBuZXcg a2V5cyIpOwogIAogIAlpZiAoKGNoaWxkX3N0YXRlID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQot QEAgLTE5ODEsNiArMjA0OCwxOSBAQCBtbV9nZXRfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBz dHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCitAQCAtMTk2NSw2ICsyMDMyLDE5IEBAIG1tX2dldF9r ZXlzdGF0ZShzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRvcikKICAJbW1f cmVxdWVzdF9yZWNlaXZlX2V4cGVjdChwbW9uaXRvci0+bV9zZW5kZmQsIE1PTklUT1JfUkVRX0tF WUVYUE9SVCwKICAJICAgIGNoaWxkX3N0YXRlKTsKICAJZGVidWczX2YoIkdPVCBuZXcga2V5cyIp OwpAQCAtMTM3OCw3ICsxMzc4LDcgQEAgaW5kZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0 CiAgfQogIAogIAotQEAgLTIyNzUsMyArMjM1NSwxMDIgQEAgbW1fYW5zd2VyX2dzc191cGRhdGVj cmVkcyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pIHsKK0BA IC0yMjU5LDMgKzIzMzksMTAyIEBAIG1tX2Fuc3dlcl9nc3NfdXBkYXRlY3JlZHMoc3RydWN0IHNz aCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVmICptKSB7CiAgCiAgI2VuZGlmIC8qIEdT U0FQSSAqLwogIApAQCAtMTUwMSwxMCArMTUwMSwxMCBAQCBpbmRleCBmNDcyMWM0NzIuLjA4N2Fk ZGZmNSAxMDA2NDQKICAJTU9OSVRPUl9SRVFfR1NTU0lHTiA9IDE1MCwgTU9OSVRPUl9BTlNfR1NT U0lHTiA9IDE1MSwKICAJTU9OSVRPUl9SRVFfR1NTVVBDUkVEUyA9IDE1MiwgTU9OSVRPUl9BTlNf R1NTVVBDUkVEUyA9IDE1MywKIGRpZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuYyBiL21vbml0b3Jf d3JhcC5jCi1pbmRleCA0OTZkZTQzNmUuLmVmNDE5Yjc0MyAxMDA2NDQKK2luZGV4IDJiMDQ0ZjM4 My4uYmRhYzdkM2Y5IDEwMDY0NAogLS0tIGEvbW9uaXRvcl93cmFwLmMKICsrKyBiL21vbml0b3Jf d3JhcC5jCi1AQCAtNTk4LDcgKzU5OCw3IEBAIG1tX2tleV9hbGxvd2VkKGVudW0gbW1fa2V5dHlw ZSB0eXBlLCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpob3N0LAorQEAgLTU2NSw3ICs1 NjUsNyBAQCBtbV9rZXlfYWxsb3dlZChlbnVtIG1tX2tleXR5cGUgdHlwZSwgY29uc3QgY2hhciAq dXNlciwgY29uc3QgY2hhciAqaG9zdCwKICAgKi8KICAKICBpbnQKQEAgLTE1MTMsNyArMTUxMyw3 IEBAIGluZGV4IDQ5NmRlNDM2ZS4uZWY0MTliNzQzIDEwMDY0NAogICAgICBjb25zdCB1X2NoYXIg KmRhdGEsIHNpemVfdCBkYXRhbGVuLCBjb25zdCBjaGFyICpzaWdhbGcsIHVfaW50IGNvbXBhdCwK ICAgICAgc3RydWN0IHNzaGtleV9zaWdfZGV0YWlscyAqKnNpZ19kZXRhaWxzcCkKICB7Ci1AQCAt NjE0LDcgKzYxNCw4IEBAIG1tX3NzaGtleV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5 LCBjb25zdCB1X2NoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbiwKK0BAIC01ODEsNyArNTgxLDggQEAg bW1fc3Noa2V5X3ZlcmlmeShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksIGNvbnN0IHVfY2hhciAq c2lnLCBzaXplX3Qgc2lnbGVuLAogIAkJKnNpZ19kZXRhaWxzcCA9IE5VTEw7CiAgCWlmICgobSA9 IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKICAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7 CkBAIC0xNTIzLDcgKzE1MjMsNyBAQCBpbmRleCA0OTZkZTQzNmUuLmVmNDE5Yjc0MyAxMDA2NDQK ICAJICAgIChyID0gc3NoYnVmX3B1dF9zdHJpbmcobSwgc2lnLCBzaWdsZW4pKSAhPSAwIHx8CiAg CSAgICAociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKG0sIGRhdGEsIGRhdGFsZW4pKSAhPSAwIHx8CiAg CSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCBzaWdhbGcgPT0gTlVMTCA/ICIiIDogc2ln YWxnKSkgIT0gMCkKLUBAIC02NDcsNiArNjQ4LDIyIEBAIG1tX3NzaGtleV92ZXJpZnkoY29uc3Qg c3RydWN0IHNzaGtleSAqa2V5LCBjb25zdCB1X2NoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbiwKK0BA IC02MTQsNiArNjE1LDIyIEBAIG1tX3NzaGtleV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAq a2V5LCBjb25zdCB1X2NoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbiwKICAJcmV0dXJuIDA7CiAgfQog IApAQCAtMTU0Niw3ICsxNTQ2LDcgQEAgaW5kZXggNDk2ZGU0MzZlLi5lZjQxOWI3NDMgMTAwNjQ0 CiAgdm9pZAogIG1tX3NlbmRfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRv ciAqbW9uaXRvcikKICB7Ci1AQCAtMTA2MywxMSArMTA4MCwxMiBAQCBtbV9hdWRpdF9ldmVudChz dHJ1Y3Qgc3NoICpzc2gsIHNzaF9hdWRpdF9ldmVudF90IGV2ZW50KQorQEAgLTEwMTMsMTEgKzEw MzAsMTIgQEAgbW1fYXVkaXRfZXZlbnQoc3RydWN0IHNzaCAqc3NoLCBzc2hfYXVkaXRfZXZlbnRf dCBldmVudCkKICAJc3NoYnVmX2ZyZWUobSk7CiAgfQogIApAQCAtMTU2MSw3ICsxNTYxLDcgQEAg aW5kZXggNDk2ZGU0MzZlLi5lZjQxOWI3NDMgMTAwNjQ0CiAgCiAgCWRlYnVnM19mKCJlbnRlcmlu ZyBjb21tYW5kICVzIiwgY29tbWFuZCk7CiAgCi1AQCAtMTA3Nyw2ICsxMDk1LDMwIEBAIG1tX2F1 ZGl0X3J1bl9jb21tYW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQpCitAQCAtMTAyNyw2ICsxMDQ1LDMw IEBAIG1tX2F1ZGl0X3J1bl9jb21tYW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQpCiAgCQlmYXRhbF9m cihyLCAiYnVmZmVyIGVycm9yIik7CiAgCiAgCW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9y ZWN2ZmQsIE1PTklUT1JfUkVRX0FVRElUX0NPTU1BTkQsIG0pOwpAQCAtMTU5Miw3ICsxNTkyLDcg QEAgaW5kZXggNDk2ZGU0MzZlLi5lZjQxOWI3NDMgMTAwNjQ0CiAgCXNzaGJ1Zl9mcmVlKG0pOwog IH0KICAjZW5kaWYgLyogU1NIX0FVRElUX0VWRU5UUyAqLwotQEAgLTEzMjUsMyArMTM2Nyw4MyBA QCBzZXJ2ZXJfZ2V0X2Nvbm5lY3Rpb25faW5mbyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBwb3B1bGF0 ZSwgaW50IHVzZV9kbnMpCitAQCAtMTI3NSwzICsxMzE3LDgzIEBAIHNlcnZlcl9nZXRfY29ubmVj dGlvbl9pbmZvKHN0cnVjdCBzc2ggKnNzaCwgaW50IHBvcHVsYXRlLCBpbnQgdXNlX2RucykKICAJ cmV0dXJuICZjaTsKICB9CiAgCkBAIC0xNjc3LDcgKzE2NzcsNyBAQCBpbmRleCA0OTZkZTQzNmUu LmVmNDE5Yjc0MyAxMDA2NDQKICt9CiArI2VuZGlmIC8qIFNTSF9BVURJVF9FVkVOVFMgKi8KIGRp ZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuaCBiL21vbml0b3Jfd3JhcC5oCi1pbmRleCBhNzA4YmY0 ZDguLjk4NTY5NjhmOSAxMDA2NDQKK2luZGV4IDA3YjIwN2QxZC4uN2Y4NDZmMDg1IDEwMDY0NAog LS0tIGEvbW9uaXRvcl93cmFwLmgKICsrKyBiL21vbml0b3Jfd3JhcC5oCiBAQCAtNjMsNyArNjMs OSBAQCBpbnQgbW1fdXNlcl9rZXlfYWxsb3dlZChzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBwYXNz d2QgKiwgc3RydWN0IHNzaGtleSAqLCBpbnQsCkBAIC0xNzA2LDEwICsxNzA2LDEwIEBAIGluZGV4 IGE3MDhiZjRkOC4uOTg1Njk2OGY5IDEwMDY0NAogIAogIHN0cnVjdCBTZXNzaW9uOwogZGlmZiAt LWdpdCBhL3BhY2tldC5jIGIvcGFja2V0LmMKLWluZGV4IDE5MGE1NzlkMS4uZmE2ZjRjODQzIDEw MDY0NAoraW5kZXggNjNkY2I1MzUxLi40YzNjNTQxZWQgMTAwNjQ0CiAtLS0gYS9wYWNrZXQuYwog KysrIGIvcGFja2V0LmMKLUBAIC03Nyw2ICs3Nyw3IEBACitAQCAtNzUsNiArNzUsNyBAQAogICNl bmRpZgogIAogICNpbmNsdWRlICJ4bWFsbG9jLmgiCkBAIC0xNzE3LDcgKzE3MTcsNyBAQCBpbmRl eCAxOTBhNTc5ZDEuLmZhNmY0Yzg0MyAxMDA2NDQKICAjaW5jbHVkZSAiY29tcGF0LmgiCiAgI2lu Y2x1ZGUgInNzaDIuaCIKICAjaW5jbHVkZSAiY2lwaGVyLmgiCi1AQCAtNTExLDYgKzUxMiwxMyBA QCBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX291dChzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtNTE0 LDYgKzUxNSwxMyBAQCBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX291dChzdHJ1Y3Qgc3NoICpz c2gpCiAgCXJldHVybiBzc2gtPnN0YXRlLT5jb25uZWN0aW9uX291dDsKICB9CiAgCkBAIC0xNzMx LDcgKzE3MzEsNyBAQCBpbmRleCAxOTBhNTc5ZDEuLmZhNmY0Yzg0MyAxMDA2NDQKICAvKgogICAq IFJldHVybnMgdGhlIElQLWFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBob3N0IGFzIGEgc3RyaW5nLiAg VGhlIHJldHVybmVkCiAgICogc3RyaW5nIG11c3Qgbm90IGJlIGZyZWVkLgotQEAgLTY4MSwyMiAr Njg5LDE5IEBAIHNzaF9wYWNrZXRfY2xvc2VfaW50ZXJuYWwoc3RydWN0IHNzaCAqc3NoLCBpbnQg ZG9fY2xvc2UpCitAQCAtNjg0LDIyICs2OTIsMTkgQEAgc3NoX3BhY2tldF9jbG9zZV9pbnRlcm5h bChzdHJ1Y3Qgc3NoICpzc2gsIGludCBkb19jbG9zZSkKICAJc3RydWN0IHNlc3Npb25fc3RhdGUg KnN0YXRlID0gc3NoLT5zdGF0ZTsKICAJdV9pbnQgbW9kZTsKICAJc3RydWN0IHBhY2tldCAqcDsK QEAgLTE3NTksNyArMTc1OSw3IEBAIGluZGV4IDE5MGE1NzlkMS4uZmE2ZjRjODQzIDEwMDY0NAog IAl3aGlsZSAoKHAgPSBUQUlMUV9GSVJTVCgmc3RhdGUtPm91dGdvaW5nKSkpIHsKICAJCXNzaGJ1 Zl9mcmVlKHAtPnBheWxvYWQpOwogIAkJVEFJTFFfUkVNT1ZFKCZzdGF0ZS0+b3V0Z29pbmcsIHAs IG5leHQpOwotQEAgLTczNyw4ICs3NDIsMTggQEAgc3NoX3BhY2tldF9jbG9zZV9pbnRlcm5hbChz dHJ1Y3Qgc3NoICpzc2gsIGludCBkb19jbG9zZSkKK0BAIC03NDAsOCArNzQ1LDE4IEBAIHNzaF9w YWNrZXRfY2xvc2VfaW50ZXJuYWwoc3RydWN0IHNzaCAqc3NoLCBpbnQgZG9fY2xvc2UpCiAgI2Vu ZGlmCS8qIFdJVEhfWkxJQiAqLwogIAljaXBoZXJfZnJlZShzdGF0ZS0+c2VuZF9jb250ZXh0KTsK ICAJY2lwaGVyX2ZyZWUoc3RhdGUtPnJlY2VpdmVfY29udGV4dCk7CkBAIC0xNzc4LDcgKzE3Nzgs NyBAQCBpbmRleCAxOTBhNTc5ZDEuLmZhNmY0Yzg0MyAxMDA2NDQKICAJCWZyZWUoc3NoLT5sb2Nh bF9pcGFkZHIpOwogIAkJc3NoLT5sb2NhbF9pcGFkZHIgPSBOVUxMOwogIAkJZnJlZShzc2gtPnJl bW90ZV9pcGFkZHIpOwotQEAgLTEwMDQsNiArMTAxOSw3IEBAIHNzaF9zZXRfbmV3a2V5cyhzdHJ1 Y3Qgc3NoICpzc2gsIGludCBtb2RlKQorQEAgLTEwMDcsNiArMTAyMiw3IEBAIHNzaF9zZXRfbmV3 a2V5cyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBtb2RlKQogIAkJICAgICh1bnNpZ25lZCBsb25nIGxv bmcpc3RhdGUtPnBfc2VuZC5ieXRlcywKICAJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXN0YXRl LT5wX3NlbmQuYmxvY2tzKTsKICAJCWtleF9mcmVlX25ld2tleXMoc3RhdGUtPm5ld2tleXNbbW9k ZV0pOwpAQCAtMTc4Niw3ICsxNzg2LDcgQEAgaW5kZXggMTkwYTU3OWQxLi5mYTZmNGM4NDMgMTAw NjQ0CiAgCQlzdGF0ZS0+bmV3a2V5c1ttb2RlXSA9IE5VTEw7CiAgCX0KICAJLyogbm90ZSB0aGF0 IGJvdGggYnl0ZXMgYW5kIHRoZSBzZXFuciBhcmUgbm90IHJlc2V0ICovCi1AQCAtMjM4NSw2ICsy NDAxLDcyIEBAIHNzaF9wYWNrZXRfZ2V0X291dHB1dChzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtMjM5 OCw2ICsyNDE0LDcyIEBAIHNzaF9wYWNrZXRfZ2V0X291dHB1dChzdHJ1Y3Qgc3NoICpzc2gpCiAg CXJldHVybiAodm9pZCAqKXNzaC0+c3RhdGUtPm91dHB1dDsKICB9CiAgCkBAIC0xODYwLDE3ICsx ODYwLDE3IEBAIGluZGV4IDE5MGE1NzlkMS4uZmE2ZjRjODQzIDEwMDY0NAogIHN0YXRpYyBpbnQK ICBzc2hfcGFja2V0X3NldF9wb3N0YXV0aChzdHJ1Y3Qgc3NoICpzc2gpCiBkaWZmIC0tZ2l0IGEv cGFja2V0LmggYi9wYWNrZXQuaAotaW5kZXggM2U4YWNiMmNkLi5lOWFlZmRhYWQgMTAwNjQ0Citp bmRleCA0NDJlMzhiYjcuLmJmZTQ4MTIyMCAxMDA2NDQKIC0tLSBhL3BhY2tldC5oCiArKysgYi9w YWNrZXQuaAotQEAgLTIyNSw0ICsyMjUsNSBAQCBjaGFyCSpjb25uZWN0aW9uX2luZm9fbWVzc2Fn ZShzdHJ1Y3Qgc3NoICpzc2gpOwotICMgdW5kZWYgRUNfUE9JTlQKLSAjZW5kaWYKK0BAIC0yMDcs NCArMjA3LDUgQEAgdm9pZAlzc2hwa3RfZm10X2Nvbm5lY3Rpb25faWQoc3RydWN0IHNzaCAqc3No LCBjaGFyICpzLCBzaXplX3QgbCk7CisgY29uc3QgdV9jaGFyCSpzc2hwa3RfcHRyKHN0cnVjdCBz c2ggKiwgc2l6ZV90ICpsZW5wKTsKKyBjaGFyCSpjb25uZWN0aW9uX2luZm9fbWVzc2FnZShzdHJ1 Y3Qgc3NoICpzc2gpOwogIAogK3ZvaWQJIHBhY2tldF9kZXN0cm95X2FsbChzdHJ1Y3Qgc3NoICos IGludCwgaW50KTsKICAjZW5kaWYJCQkJLyogUEFDS0VUX0ggKi8KIGRpZmYgLS1naXQgYS9zZXNz aW9uLmMgYi9zZXNzaW9uLmMKLWluZGV4IDBjMjY0NDhkOS4uNzVmZjEwODBlIDEwMDY0NAoraW5k ZXggNTcyNDg3YjRhLi5kMzZjMWI3MDIgMTAwNjQ0CiAtLS0gYS9zZXNzaW9uLmMKICsrKyBiL3Nl c3Npb24uYwogQEAgLTEzOSw2ICsxMzksNyBAQCBzdGF0aWMgaW50IHNlc3Npb25fcHR5X3JlcShz dHJ1Y3Qgc3NoICosIFNlc3Npb24gKik7CkBAIC0xOTMwLDcgKzE5MzAsNyBAQCBpbmRleCAwYzI2 NDQ4ZDkuLjc1ZmYxMDgwZSAxMDA2NDQKICAKICAJLyogRm9yY2UgYSBwYXNzd29yZCBjaGFuZ2Ug Ki8KICAJaWYgKHMtPmF1dGhjdHh0LT5mb3JjZV9wd2NoYW5nZSkgewotQEAgLTE3MTcsNiArMTcz NCw5IEBAIHNlc3Npb25fdW51c2VkKGludCBpZCkKK0BAIC0xNzE4LDYgKzE3MzUsOSBAQCBzZXNz aW9uX3VudXNlZChpbnQgaWQpCiAgCXNlc3Npb25zW2lkXS50dHlmZCA9IC0xOwogIAlzZXNzaW9u c1tpZF0ucHR5bWFzdGVyID0gLTE7CiAgCXNlc3Npb25zW2lkXS54MTFfY2hhbmlkcyA9IE5VTEw7 CkBAIC0xOTQwLDcgKzE5NDAsNyBAQCBpbmRleCAwYzI2NDQ4ZDkuLjc1ZmYxMDgwZSAxMDA2NDQK ICAJc2Vzc2lvbnNbaWRdLm5leHRfdW51c2VkID0gc2Vzc2lvbnNfZmlyc3RfdW51c2VkOwogIAlz ZXNzaW9uc19maXJzdF91bnVzZWQgPSBpZDsKICB9Ci1AQCAtMTc5NSw2ICsxODE1LDE5IEBAIHNl c3Npb25fb3BlbihBdXRoY3R4dCAqYXV0aGN0eHQsIGludCBjaGFuaWQpCitAQCAtMTc5Niw2ICsx ODE2LDE5IEBAIHNlc3Npb25fb3BlbihBdXRoY3R4dCAqYXV0aGN0eHQsIGludCBjaGFuaWQpCiAg CXJldHVybiAxOwogIH0KICAKQEAgLTE5NjAsNyArMTk2MCw3IEBAIGluZGV4IDBjMjY0NDhkOS4u NzVmZjEwODBlIDEwMDY0NAogIFNlc3Npb24gKgogIHNlc3Npb25fYnlfdHR5KGNoYXIgKnR0eSkK ICB7Ci1AQCAtMjQxMyw2ICsyNDQ2LDMyIEBAIHNlc3Npb25fZXhpdF9tZXNzYWdlKHN0cnVjdCBz c2ggKnNzaCwgU2Vzc2lvbiAqcywgaW50IHN0YXR1cykKK0BAIC0yNDE3LDYgKzI0NTAsMzIgQEAg c2Vzc2lvbl9leGl0X21lc3NhZ2Uoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBpbnQgc3Rh dHVzKQogIAkJY2hhbl93cml0ZV9mYWlsZWQoc3NoLCBjKTsKICB9CiAgCkBAIC0xOTkzLDcgKzE5 OTMsNyBAQCBpbmRleCAwYzI2NDQ4ZDkuLjc1ZmYxMDgwZSAxMDA2NDQKICB2b2lkCiAgc2Vzc2lv bl9jbG9zZShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMpCiAgewotQEAgLTI0MjYsNiArMjQ4 NSwxMCBAQCBzZXNzaW9uX2Nsb3NlKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcykKK0BAIC0y NDMwLDYgKzI0ODksMTAgQEAgc2Vzc2lvbl9jbG9zZShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24g KnMpCiAgCiAgCWlmIChzLT50dHlmZCAhPSAtMSkKICAJCXNlc3Npb25fcHR5X2NsZWFudXAocyk7 CkBAIC0yMDA0LDcgKzIwMDQsNyBAQCBpbmRleCAwYzI2NDQ4ZDkuLjc1ZmYxMDgwZSAxMDA2NDQK ICAJZnJlZShzLT50ZXJtKTsKICAJZnJlZShzLT5kaXNwbGF5KTsKICAJZnJlZShzLT54MTFfY2hh bmlkcyk7Ci1AQCAtMjUwMiwxNCArMjU2NSwxNCBAQCBzZXNzaW9uX2Nsb3NlX2J5X2NoYW5uZWwo c3RydWN0IHNzaCAqc3NoLCBpbnQgaWQsIGludCBmb3JjZSwgdm9pZCAqYXJnKQorQEAgLTI1MDYs MTQgKzI1NjksMTQgQEAgc2Vzc2lvbl9jbG9zZV9ieV9jaGFubmVsKHN0cnVjdCBzc2ggKnNzaCwg aW50IGlkLCBpbnQgZm9yY2UsIHZvaWQgKmFyZykKICB9CiAgCiAgdm9pZApAQCAtMjAyMSw3ICsy MDIxLDcgQEAgaW5kZXggMGMyNjQ0OGQ5Li43NWZmMTA4MGUgMTAwNjQ0CiAgCQkJZWxzZQogIAkJ CQlzZXNzaW9uX2Nsb3NlKHNzaCwgcyk7CiAgCQl9Ci1AQCAtMjYzNSw2ICsyNjk4LDE1IEBAIGRv X2F1dGhlbnRpY2F0ZWQyKHN0cnVjdCBzc2ggKnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0KQorQEAg LTI2MzksNiArMjcwMiwxNSBAQCBkb19hdXRoZW50aWNhdGVkMihzdHJ1Y3Qgc3NoICpzc2gsIEF1 dGhjdHh0ICphdXRoY3R4dCkKICAJc2VydmVyX2xvb3AyKHNzaCwgYXV0aGN0eHQpOwogIH0KICAK QEAgLTIwMzcsNyArMjAzNyw3IEBAIGluZGV4IDBjMjY0NDhkOS4uNzVmZjEwODBlIDEwMDY0NAog IHZvaWQKICBkb19jbGVhbnVwKHN0cnVjdCBzc2ggKnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0KQog IHsKLUBAIC0yNjk4LDcgKzI3NzAsNyBAQCBkb19jbGVhbnVwKHN0cnVjdCBzc2ggKnNzaCwgQXV0 aGN0eHQgKmF1dGhjdHh0KQorQEAgLTI3MDIsNyArMjc3NCw3IEBAIGRvX2NsZWFudXAoc3RydWN0 IHNzaCAqc3NoLCBBdXRoY3R4dCAqYXV0aGN0eHQpCiAgCSAqIG9yIGlmIHJ1bm5pbmcgaW4gbW9u aXRvci4KICAJICovCiAgCWlmIChtbV9pc19tb25pdG9yKCkpCkBAIC0yMDc4LDcgKzIwNzgsNyBA QCBpbmRleCAzNDRhMWRkZjkuLmE0MWM2ZWZjZCAxMDA2NDQKICB2b2lkCSBzZXNzaW9uX2Nsb3Nl KHN0cnVjdCBzc2ggKiwgU2Vzc2lvbiAqKTsKICB2b2lkCSBkb19zZXR1c2VyY29udGV4dChzdHJ1 Y3QgcGFzc3dkICopOwogZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9u LmMKLWluZGV4IDIzYjgwZWIwMS4uZDg5NzJmYmQ1IDEwMDY0NAoraW5kZXggOGEwNjYxNmZkLi4w YTk3MDhkM2EgMTAwNjQ0CiAtLS0gYS9zc2hkLXNlc3Npb24uYwogKysrIGIvc3NoZC1zZXNzaW9u LmMKIEBAIC0xODEsOCArMTgxLDggQEAgc3RydWN0IGluY2x1ZGVfbGlzdCBpbmNsdWRlcyA9IFRB SUxRX0hFQURfSU5JVElBTElaRVIoaW5jbHVkZXMpOwpAQCAtMjIyMSw3ICsyMjIxLDcgQEAgaW5k ZXggMjNiODBlYjAxLi5kODk3MmZiZDUgMTAwNjQ0CiAgCiAgCXJlc2VlZF9wcm5ncygpOwogIAot QEAgLTEzMzMsNiArMTQwMiw5IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCitAQCAtMTMzNiw2 ICsxNDA1LDkgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKICAJZG9fYXV0aGVudGljYXRlZChz c2gsIGF1dGhjdHh0KTsKICAKICAJLyogVGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gdGVybWluYXRl ZC4gKi8KQEAgLTIyMzEsNyArMjIzMSw3IEBAIGluZGV4IDIzYjgwZWIwMS4uZDg5NzJmYmQ1IDEw MDY0NAogIAlzc2hfcGFja2V0X2dldF9ieXRlcyhzc2gsICZpYnl0ZXMsICZvYnl0ZXMpOwogIAl2 ZXJib3NlKCJUcmFuc2ZlcnJlZDogc2VudCAlbGx1LCByZWNlaXZlZCAlbGx1IGJ5dGVzIiwKICAJ ICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2J5dGVzLCAodW5zaWduZWQgbG9uZyBsb25nKWlieXRl cyk7Ci1AQCAtMTM3OCw2ICsxNDUwLDE2IEBAIHNzaGRfaG9zdGtleV9zaWduKHN0cnVjdCBzc2gg KnNzaCwgc3RydWN0IHNzaGtleSAqcHJpdmtleSwKK0BAIC0xMzgxLDYgKzE0NTMsMTYgQEAgc3No ZF9ob3N0a2V5X3NpZ24oc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3Qgc3Noa2V5ICpwcml2a2V5LAog IHZvaWQKICBjbGVhbnVwX2V4aXQoaW50IGkpCiAgewpAQCAtMjI0OCw3ICsyMjQ4LDcgQEAgaW5k ZXggMjNiODBlYjAxLi5kODk3MmZiZDUgMTAwNjQ0CiAgCWlmICh0aGVfYWN0aXZlX3N0YXRlICE9 IE5VTEwgJiYgdGhlX2F1dGhjdHh0ICE9IE5VTEwpIHsKICAJCWRvX2NsZWFudXAodGhlX2FjdGl2 ZV9zdGF0ZSwgdGhlX2F1dGhjdHh0KTsKICAJCWlmIChwcml2c2VwX2lzX3ByZWF1dGggJiYKLUBA IC0xMzkyLDcgKzE0NzQsOSBAQCBjbGVhbnVwX2V4aXQoaW50IGkpCitAQCAtMTM5NSw3ICsxNDc3 LDkgQEAgY2xlYW51cF9leGl0KGludCBpKQogIAl9CiAgI2lmZGVmIFNTSF9BVURJVF9FVkVOVFMK ICAJLyogZG9uZSBhZnRlciBkb19jbGVhbnVwIHNvIGl0IGNhbiBjYW5jZWwgdGhlIFBBTSBhdXRo ICd0aHJlYWQnICovCkBAIC0yMjYwLDcgKzIyNjAsNyBAQCBpbmRleCAyM2I4MGViMDEuLmQ4OTcy ZmJkNSAxMDA2NDQKICAjZW5kaWYKICAJLyogT3ZlcnJpZGUgZGVmYXVsdCBmYXRhbCBleGl0IHZh bHVlIHdoZW4gYXV0aCB3YXMgYXR0ZW1wdGVkICovCiBkaWZmIC0tZ2l0IGEvc3NoZC5jIGIvc3No ZC5jCi1pbmRleCA1NTI0MzU4MTcuLjIyYWQ0ZGZmMCAxMDA2NDQKK2luZGV4IGY2NmUxZjg2Zi4u NmI5ODQ3ZjY3IDEwMDY0NAogLS0tIGEvc3NoZC5jCiArKysgYi9zc2hkLmMKIEBAIC0yMDYsNiAr MjA2LDE1IEBAIGNsb3NlX2xpc3Rlbl9zb2Nrcyh2b2lkKQpAQCAtMjI4OCw1ICsyMjg4LDUgQEAg aW5kZXggNTUyNDM1ODE3Li4yMmFkNGRmZjAgMTAwNjQ0CiAgCQkJaWYgKG9wdGlvbnMucGlkX2Zp bGUgIT0gTlVMTCkKICAJCQkJdW5saW5rKG9wdGlvbnMucGlkX2ZpbGUpOwogLS0gCi0yLjUzLjAK KzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAzNi1vcGVuc3NoLTcuMXAyLWF1ZGl0LXJhY2UtY29u ZGl0aW9uLnBhdGNoIGIvMDAzNi1vcGVuc3NoLTcuMXAyLWF1ZGl0LXJhY2UtY29uZGl0aW9uLnBh dGNoCmluZGV4IDNiZDY1OTQuLjNmY2JjY2UgMTAwNjQ0Ci0tLSBhLzAwMzYtb3BlbnNzaC03LjFw Mi1hdWRpdC1yYWNlLWNvbmRpdGlvbi5wYXRjaAorKysgYi8wMDM2LW9wZW5zc2gtNy4xcDItYXVk aXQtcmFjZS1jb25kaXRpb24ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGQxOGMwZThjMTIx MTBkN2E0NmJjYmZiNjdjYjZlMjhlN2ViY2VjZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitG cm9tIDY5OTE2ODIzMzVmYjFkZGVkN2I1MGQ5MDNiN2Y5Y2M2MDA1MzViYTIgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+ CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0gg MzYvNTRdIG9wZW5zc2gtNy4xcDItYXVkaXQtcmFjZS1jb25kaXRpb24KK1N1YmplY3Q6IFtQQVRD SCAzNi81M10gb3BlbnNzaC03LjFwMi1hdWRpdC1yYWNlLWNvbmRpdGlvbgogCiAjIEF1ZGl0IHJh Y2UgY29uZGl0aW9uIGluIGZvcmtlZCBjaGlsZCAoIzEzMTA2ODQpCiAtLS0KQEAgLTExLDEwICsx MSwxMCBAQCBTdWJqZWN0OiBbUEFUQ0ggMzYvNTRdIG9wZW5zc2gtNy4xcDItYXVkaXQtcmFjZS1j b25kaXRpb24KICAzIGZpbGVzIGNoYW5nZWQsIDEwMiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9u cygtKQogCiBkaWZmIC0tZ2l0IGEvbW9uaXRvcl93cmFwLmMgYi9tb25pdG9yX3dyYXAuYwotaW5k ZXggZWY0MTliNzQzLi5mYTM3MTg5MjQgMTAwNjQ0CitpbmRleCBiZGFjN2QzZjkuLjRkYzY0ODU3 YiAxMDA2NDQKIC0tLSBhL21vbml0b3Jfd3JhcC5jCiArKysgYi9tb25pdG9yX3dyYXAuYwotQEAg LTE0NDYsNCArMTQ0Niw1MCBAQCBtbV9hdWRpdF9kZXN0cm95X3NlbnNpdGl2ZV9kYXRhKHN0cnVj dCBzc2ggKnNzaCwgY29uc3QgY2hhciAqZnAsIHBpZF90IHBpZCwgdWlkXworQEAgLTEzOTYsNCAr MTM5Niw1MCBAQCBtbV9hdWRpdF9kZXN0cm95X3NlbnNpdGl2ZV9kYXRhKHN0cnVjdCBzc2ggKnNz aCwgY29uc3QgY2hhciAqZnAsIHBpZF90IHBpZCwgdWlkXwogIAltbV9yZXF1ZXN0X3NlbmQocG1v bml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9BVURJVF9TRVJWRVJfS0VZX0ZSRUUsIG0pOwog IAlzc2hidWZfZnJlZShtKTsKICB9CkBAIC02Niw3ICs2Niw3IEBAIGluZGV4IGVmNDE5Yjc0My4u ZmEzNzE4OTI0IDEwMDY0NAogK30KICAjZW5kaWYgLyogU1NIX0FVRElUX0VWRU5UUyAqLwogZGlm ZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5oIGIvbW9uaXRvcl93cmFwLmgKLWluZGV4IDk4NTY5Njhm OS4uMDg2NWY1OWNiIDEwMDY0NAoraW5kZXggN2Y4NDZmMDg1Li40MWU0Yjc5ZmUgMTAwNjQ0CiAt LS0gYS9tb25pdG9yX3dyYXAuaAogKysrIGIvbW9uaXRvcl93cmFwLmgKIEBAIC05OCw2ICs5OCw4 IEBAIHZvaWQgbW1fYXVkaXRfdW5zdXBwb3J0ZWRfYm9keShzdHJ1Y3Qgc3NoICosIGludCk7CkBA IC03OSw3ICs3OSw3IEBAIGluZGV4IDk4NTY5NjhmOS4uMDg2NWY1OWNiIDEwMDY0NAogIAogIHN0 cnVjdCBTZXNzaW9uOwogZGlmZiAtLWdpdCBhL3Nlc3Npb24uYyBiL3Nlc3Npb24uYwotaW5kZXgg NzVmZjEwODBlLi4xYTdmNWNhN2EgMTAwNjQ0CitpbmRleCBkMzZjMWI3MDIuLmJkOGRjODA4YyAx MDA2NDQKIC0tLSBhL3Nlc3Npb24uYwogKysrIGIvc2Vzc2lvbi5jCiBAQCAtMTYxLDYgKzE2MSwx MCBAQCBzdGF0aWMgU2Vzc2lvbiAqc2Vzc2lvbnMgPSBOVUxMOwpAQCAtMjAwLDUgKzIwMCw1IEBA IGluZGV4IDc1ZmYxMDgwZS4uMWE3ZjVjYTdhIDEwMDY0NAogIAlpZiAocy0+YXV0aGN0eHQtPmZv cmNlX3B3Y2hhbmdlKSB7CiAgCQlkb19zZXR1c2VyY29udGV4dChwdyk7CiAtLSAKLTIuNTMuMAor Mi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDM3LW9wZW5zc2gtOS4wcDEtYXVkaXQtbG9nLnBhdGNo IGIvMDAzNy1vcGVuc3NoLTkuMHAxLWF1ZGl0LWxvZy5wYXRjaAppbmRleCA0ZThmMjdlLi42MGNi NDM5IDEwMDY0NAotLS0gYS8wMDM3LW9wZW5zc2gtOS4wcDEtYXVkaXQtbG9nLnBhdGNoCisrKyBi LzAwMzctb3BlbnNzaC05LjBwMS1hdWRpdC1sb2cucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9t IDhhNDg0M2Y4NzI2MDI4Y2E2YjEwMjg1Njk4ZGNjZWE4NTI2MzI1OTIgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCitGcm9tIGJiM2YwZWZhZDE4YzQ1YmM3YzEzMWM2ODk4YzliYzg3YmNiNTBmNTUg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1TdWJq ZWN0OiBbUEFUQ0ggMzcvNTRdIG9wZW5zc2gtOS4wcDEtYXVkaXQtbG9nCitTdWJqZWN0OiBbUEFU Q0ggMzcvNTNdIG9wZW5zc2gtOS4wcDEtYXVkaXQtbG9nCiAKICMgaHR0cHM6Ly9idWd6aWxsYS5y ZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0yMDQ5OTQ3CiAtLS0KQEAgLTI2Miw1ICsyNjIsNSBA QCBpbmRleCA0NWQ2NmNjZmYuLjA1YWMxMzJjZiAxMDA2NDQKICB2b2lkCWF1ZGl0X3Vuc3VwcG9y dGVkKHN0cnVjdCBzc2ggKiwgaW50KTsKICB2b2lkCWF1ZGl0X2tleChzdHJ1Y3Qgc3NoICosIGlu dCwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqKTsKIC0tIAotMi41My4wCisyLjU1LjAK IAoKZGlmZiAtLWdpdCBhLzAwMzgtb3BlbnNzaC03LjdwMS1maXBzLnBhdGNoIGIvMDAzOC1vcGVu c3NoLTcuN3AxLWZpcHMucGF0Y2gKaW5kZXggMTljMWIyMS4uMDRiNjg1MSAxMDA2NDQKLS0tIGEv MDAzOC1vcGVuc3NoLTcuN3AxLWZpcHMucGF0Y2gKKysrIGIvMDAzOC1vcGVuc3NoLTcuN3AxLWZp cHMucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDU1YzBkNTRiOTFjYzM5ZWQ2ZjEwNTQyZjg4 M2RiYWFkNmEzMjEzY2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGQ1N2ZlZjhmYzdi MmFkNjQyNmQ1OGFiNzdmYTVhYTY3MTcyYmRhYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBG cm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDI4 IEF1ZyAyMDI1IDE0OjAxOjM4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMzgvNTRdIG9wZW5zc2gt Ny43cDEtZmlwcworU3ViamVjdDogW1BBVENIIDM4LzUzXSBvcGVuc3NoLTcuN3AxLWZpcHMKIAog LS0tCiAgZGguYyAgICAgICAgICAgICAgICAgICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKysr KwpAQCAtOSw3ICs5LDcgQEAgU3ViamVjdDogW1BBVENIIDM4LzU0XSBvcGVuc3NoLTcuN3AxLWZp cHMKICBrZXgtbmFtZXMuYyAgICAgICAgICAgICAgfCAgNiArKystCiAga2V4LmMgICAgICAgICAg ICAgICAgICAgIHwgIDMgKy0KICBrZXhnZW4uYyAgICAgICAgICAgICAgICAgfCA3NCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCi0ga2V4Z2V4Yy5jICAgICAgICAgICAg ICAgIHwgIDUgKysrCisga2V4Z2V4Yy5jICAgICAgICAgICAgICAgIHwgIDYgKysrKwogIG15cHJv cG9zYWwuaCAgICAgICAgICAgICB8IDMzICsrKysrKysrKysrKysrKysrKwogIHJlYWRjb25mLmMg ICAgICAgICAgICAgICB8IDIxICsrKysrKysrKy0tLQogIHNhbmRib3gtc2VjY29tcC1maWx0ZXIu YyB8ICAzICsrCkBAIC0yMyw3ICsyMyw3IEBAIFN1YmplY3Q6IFtQQVRDSCAzOC81NF0gb3BlbnNz aC03LjdwMS1maXBzCiAgc3NoY29ubmVjdDIuYyAgICAgICAgICAgIHwgMTEgKysrKystCiAgc3No ZC5jICAgICAgICAgICAgICAgICAgIHwgMTkgKysrKysrKysrKysKICBzc2hrZXkuYyAgICAgICAg ICAgICAgICAgfCAzNyArKysrKysrKysrKysrKysrKysrKwotIDE5IGZpbGVzIGNoYW5nZWQsIDMw MCBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKKyAxOSBmaWxlcyBjaGFuZ2VkLCAzMDEg aW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9kaC5jIGIvZGgu YwogaW5kZXggYjI5MTc1MGQ4Li4zZWZlMGE2OWYgMTAwNjQ0CkBAIC0xMDIsNyArMTAyLDcgQEAg aW5kZXggYzYzMjZhMzlkLi5lNTFlMjkyYjggMTAwNjQ0CiAgdV9pbnQJIGRoX2VzdGltYXRlKGlu dCk7CiAgdm9pZAkgZGhfc2V0X21vZHVsaV9maWxlKGNvbnN0IGNoYXIgKik7CiBkaWZmIC0tZ2l0 IGEva2V4LW5hbWVzLmMgYi9rZXgtbmFtZXMuYwotaW5kZXggNzY5YTM2ODEwLi5jMDc2MWFlOGYg MTAwNjQ0CitpbmRleCAyYmM0MzEyMjMuLjhlOWM2MjFiZCAxMDA2NDQKIC0tLSBhL2tleC1uYW1l cy5jCiArKysgYi9rZXgtbmFtZXMuYwogQEAgLTMyLDYgKzMyLDcgQEAKQEAgLTExMyw3ICsxMTMs NyBAQCBpbmRleCA3NjlhMzY4MTAuLmMwNzYxYWU4ZiAxMDA2NDQKICAjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KICAjZW5kaWYKICAKLUBAIC0yMDcsNyArMjA4LDEwIEBAIGtleF9uYW1lc192YWxp ZChjb25zdCBjaGFyICpuYW1lcykKK0BAIC0yMTEsNyArMjEyLDEwIEBAIGtleF9uYW1lc192YWxp ZChjb25zdCBjaGFyICpuYW1lcykKICAJCQlyZXR1cm4gMDsKICAJCX0KICAJCWlmIChrZXhfYWxn X2J5X25hbWUocCkgPT0gTlVMTCkgewpAQCAtMTI2LDcgKzEyNiw3IEBAIGluZGV4IDc2OWEzNjgx MC4uYzA3NjFhZThmIDEwMDY0NAogIAkJCXJldHVybiAwOwogIAkJfQogZGlmZiAtLWdpdCBhL2tl eC5jIGIva2V4LmMKLWluZGV4IDcwYmViY2U2YS4uZTEwNTlkZWM0IDEwMDY0NAoraW5kZXggOWNl MmI3ZTEyLi43ZTUwZjI3N2YgMTAwNjQ0CiAtLS0gYS9rZXguYwogKysrIGIva2V4LmMKIEBAIC0z Nyw2ICszNyw3IEBACkBAIC0xNDcsNyArMTQ3LDcgQEAgaW5kZXggNzBiZWJjZTZhLi5lMTA1OWRl YzQgMTAwNjQ0CiAgCSAgICAiZXh0LWluZm8tcyxrZXgtc3RyaWN0LXMtdjAwQG9wZW5zc2guY29t IiA6CiAgCSAgICAiZXh0LWluZm8tYyxrZXgtc3RyaWN0LWMtdjAwQG9wZW5zc2guY29tIikpID09 IE5VTEwpCiBkaWZmIC0tZ2l0IGEva2V4Z2VuLmMgYi9rZXhnZW4uYwotaW5kZXggYTJiZWIzZjEw Li4yZjgyNTI0ODggMTAwNjQ0CitpbmRleCBmZjUwNDU4MGYuLjgzNDA3M2VmMSAxMDA2NDQKIC0t LSBhL2tleGdlbi5jCiArKysgYi9rZXhnZW4uYwogQEAgLTMxLDYgKzMxLDcgQEAKQEAgLTE1OCw3 ICsxNTgsNyBAQCBpbmRleCBhMmJlYjNmMTAuLjJmODI1MjQ4OCAxMDA2NDQKICAKICAjaW5jbHVk ZSAic3Noa2V5LmgiCiAgI2luY2x1ZGUgImtleC5oIgotQEAgLTExNSwxMyArMTE2LDI4IEBAIGtl eF9nZW5fY2xpZW50KHN0cnVjdCBzc2ggKnNzaCkKK0BAIC0xMTgsMTMgKzExOSwyOCBAQCBrZXhf Z2VuX2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCiAgCQlicmVhazsKICAjZW5kaWYgLyogV0lUSF9P UEVOU1NMICovCiAgCWNhc2UgS0VYX0MyNTUxOV9TSEEyNTY6CkBAIC0xOTAsNyArMTkwLDcgQEAg aW5kZXggYTJiZWIzZjEwLi4yZjgyNTI0ODggMTAwNjQ0CiAgCQlicmVhazsKICAJZGVmYXVsdDoK ICAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci1AQCAtMTg5LDE1ICsyMDUsMzAgQEAg aW5wdXRfa2V4X2dlbl9yZXBseShpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpz c2gpCitAQCAtMTk2LDE1ICsyMTIsMzAgQEAgaW5wdXRfa2V4X2dlbl9yZXBseShpbnQgdHlwZSwg dWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCiAgCQlicmVhazsKICAjZW5kaWYgLyogV0lU SF9PUEVOU1NMICovCiAgCWNhc2UgS0VYX0MyNTUxOV9TSEEyNTY6CkBAIC0yMjYsNyArMjI2LDcg QEAgaW5kZXggYTJiZWIzZjEwLi4yZjgyNTI0ODggMTAwNjQ0CiAgCQlicmVhazsKICAJZGVmYXVs dDoKICAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci1AQCAtMzEyLDE2ICszNDMsMzEg QEAgaW5wdXRfa2V4X2dlbl9pbml0KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2gg KnNzaCkKK0BAIC0zMjMsMTYgKzM1NCwzMSBAQCBpbnB1dF9rZXhfZ2VuX2luaXQoaW50IHR5cGUs IHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQogIAkJYnJlYWs7CiAgI2VuZGlmIC8qIFdJ VEhfT1BFTlNTTCAqLwogIAljYXNlIEtFWF9DMjU1MTlfU0hBMjU2OgpAQCAtMjY1LDcgKzI2NSw3 IEBAIGluZGV4IGEyYmViM2YxMC4uMmY4MjUyNDg4IDEwMDY0NAogIAlkZWZhdWx0OgogIAkJciA9 IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKIGRpZmYgLS1naXQgYS9rZXhnZXhjLmMgYi9rZXhn ZXhjLmMKLWluZGV4IDFjMjE5NGE4Zi4uZjlhNThiOTU1IDEwMDY0NAoraW5kZXggMWMyMTk0YThm Li4yNzYzZTg2MmEgMTAwNjQ0CiAtLS0gYS9rZXhnZXhjLmMKICsrKyBiL2tleGdleGMuYwogQEAg LTI5LDYgKzI5LDcgQEAKQEAgLTI3Niw3ICsyNzYsNyBAQCBpbmRleCAxYzIxOTRhOGYuLmY5YTU4 Yjk1NSAxMDA2NDQKICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAgCiAgI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLUBAIC0xMTcsNiArMTE4LDExIEBAIGlucHV0X2tleF9kaF9nZXhfZ3JvdXAoaW50 IHR5cGUsIHVfaW50MzIKK0BAIC0xMTYsNiArMTE3LDExIEBAIGlucHV0X2tleF9kaF9nZXhfZ3Jv dXAoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQogIAl9CiAgCXAgPSBn ID0gTlVMTDsgLyogYmVsb25nIHRvIGtleC0+ZGggbm93ICovCiAgCkBAIC0yODksMTIgKzI4OSwx MiBAQCBpbmRleCAxYzIxOTRhOGYuLmY5YTU4Yjk1NSAxMDA2NDQKICAJaWYgKChyID0gZGhfZ2Vu X2tleShrZXgtPmRoLCBrZXgtPndlX25lZWQgKiA4KSkgIT0gMCkKICAJCWdvdG8gb3V0OwogZGlm ZiAtLWdpdCBhL215cHJvcG9zYWwuaCBiL215cHJvcG9zYWwuaAotaW5kZXggZDk5MmQ4YjEyLi42 NDMzZTA4MjAgMTAwNjQ0CitpbmRleCBhMmExZjk5MWUuLmYwMzI5M2YzNSAxMDA2NDQKIC0tLSBh L215cHJvcG9zYWwuaAogKysrIGIvbXlwcm9wb3NhbC5oCiBAQCAtNjAsNiArNjAsMTggQEAKICAJ InJzYS1zaGEyLTUxMiwiIFwKLSAJInJzYS1zaGEyLTI1NiIKKyAJInJzYS1zaGEyLTI1NiIgXAog IAogKyNkZWZpbmUJS0VYX0ZJUFNfUEtfQUxHCVwKICsJImVjZHNhLXNoYTItbmlzdHAyNTYtY2Vy dC12MDFAb3BlbnNzaC5jb20sIiBcCkBAIC0zNDAsNyArMzQwLDcgQEAgaW5kZXggZDk5MmQ4YjEy Li42NDMzZTA4MjAgMTAwNjQ0CiAgI2RlZmluZQlTU0hfQUxMT1dFRF9DQV9TSUdBTEdTCVwKICAJ InNzaC1lZDI1NTE5LCIgXAogZGlmZiAtLWdpdCBhL3JlYWRjb25mLmMgYi9yZWFkY29uZi5jCi1p bmRleCA5MDA0MDc2ZTQuLjA1OGU1M2NmMSAxMDA2NDQKK2luZGV4IDk5MmM3ODg2Ni4uMmNiZjFm Y2JkIDEwMDY0NAogLS0tIGEvcmVhZGNvbmYuYwogKysrIGIvcmVhZGNvbmYuYwogQEAgLTM4LDYg KzM4LDEyIEBACkBAIC0zNTYsNyArMzU2LDcgQEAgaW5kZXggOTAwNDA3NmU0Li4wNThlNTNjZjEg MTAwNjQ0CiAgI2luY2x1ZGUgPHV0aWwuaD4KICAjaWYgZGVmaW5lZChIQVZFX1NUUk5WSVMpICYm IGRlZmluZWQoSEFWRV9WSVNfSCkgJiYgIWRlZmluZWQoQlJPS0VOX1NUUk5WSVMpCiAgIyBpbmNs dWRlIDx2aXMuaD4KLUBAIC0zMDk4LDExICszMTA0LDE2IEBAIGZpbGxfZGVmYXVsdF9vcHRpb25z KE9wdGlvbnMgKiBvcHRpb25zKQorQEAgLTMwOTksMTEgKzMxMDUsMTYgQEAgZmlsbF9kZWZhdWx0 X29wdGlvbnMoT3B0aW9ucyAqIG9wdGlvbnMpCiAgCWFsbF9rZXkgPSBzc2hrZXlfYWxnX2xpc3Qo MCwgMCwgMSwgJywnKTsKICAJYWxsX3NpZyA9IHNzaGtleV9hbGdfbGlzdCgwLCAxLCAxLCAnLCcp OwogIAkvKiByZW1vdmUgdW5zdXBwb3J0ZWQgYWxnb3MgZnJvbSBkZWZhdWx0IGxpc3RzICovCkBA IC0zNzksNyArMzc5LDcgQEAgaW5kZXggOTAwNDA3NmU0Li4wNThlNTNjZjEgMTAwNjQ0CiAgCWRv IHsgXAogIAkJaWYgKChyID0ga2V4X2Fzc2VtYmxlX25hbWVzKCZvcHRpb25zLT53aGF0LCBcCiBk aWZmIC0tZ2l0IGEvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jIGIvc2FuZGJveC1zZWNjb21wLWZp bHRlci5jCi1pbmRleCBlMjEwNDhmM2EuLjI1YzlkZjQyYSAxMDA2NDQKK2luZGV4IGI2NTQxM2M5 NS4uMTdlMWNlYTcyIDEwMDY0NAogLS0tIGEvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jCiArKysg Yi9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMKIEBAIC0yNTgsNiArMjU4LDkgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBzb2NrX2ZpbHRlciBwcmVhdXRoX2luc25zW10gPSB7CkBAIC0zOTMsNyArMzkz LDcgQEAgaW5kZXggZTIxMDQ4ZjNhLi4yNWM5ZGY0MmEgMTAwNjQ0CiAgCVNDX0RFTlkoX19OUl9v cGVuYXQsIEVBQ0NFUyksCiAgI2VuZGlmCiBkaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZj b25mLmMKLWluZGV4IDgwNDU3NTZmYi4uNmMxYmE3N2Y2IDEwMDY0NAoraW5kZXggMjcxNDdhMWU3 Li44NDZmNWQyMTIgMTAwNjQ0CiAtLS0gYS9zZXJ2Y29uZi5jCiArKysgYi9zZXJ2Y29uZi5jCiBA QCAtMzgsNyArMzgsMTUgQEAKQEAgLTQxMiw3ICs0MTIsNyBAQCBpbmRleCA4MDQ1NzU2ZmIuLjZj MWJhNzdmNiAxMDA2NDQKICAKICAjaW5jbHVkZSAieG1hbGxvYy5oIgogICNpbmNsdWRlICJzc2gu aCIKLUBAIC0yNDIsMTEgKzI1MCwxNiBAQCBhc3NlbWJsZV9hbGdvcml0aG1zKFNlcnZlck9wdGlv bnMgKm8pCitAQCAtMjEzLDExICsyMjEsMTYgQEAgYXNzZW1ibGVfYWxnb3JpdGhtcyhTZXJ2ZXJP cHRpb25zICpvKQogIAlhbGxfa2V5ID0gc3Noa2V5X2FsZ19saXN0KDAsIDAsIDEsICcsJyk7CiAg CWFsbF9zaWcgPSBzc2hrZXlfYWxnX2xpc3QoMCwgMSwgMSwgJywnKTsKICAJLyogcmVtb3ZlIHVu c3VwcG9ydGVkIGFsZ29zIGZyb20gZGVmYXVsdCBsaXN0cyAqLwpAQCAtNDM1LDcgKzQzNSw3IEBA IGluZGV4IDgwNDU3NTZmYi4uNmMxYmE3N2Y2IDEwMDY0NAogIAlkbyB7IFwKICAJCWlmICgociA9 IGtleF9hc3NlbWJsZV9uYW1lcygmby0+d2hhdCwgZGVmYXVsdHMsIGFsbCkpICE9IDApIFwKIGRp ZmYgLS1naXQgYS9zc2gtZWQyNTUxOS5jIGIvc3NoLWVkMjU1MTkuYwotaW5kZXggMjM2OWMzYWYw Li5hZjA1OWQ3ZjEgMTAwNjQ0CitpbmRleCA4MjI4ZjI4MzAuLjY2ODgyM2VkMiAxMDA2NDQKIC0t LSBhL3NzaC1lZDI1NTE5LmMKICsrKyBiL3NzaC1lZDI1NTE5LmMKIEBAIC0yNCw2ICsyNCw3IEBA CkBAIC00NDYsNyArNDQ2LDcgQEAgaW5kZXggMjM2OWMzYWYwLi5hZjA1OWQ3ZjEgMTAwNjQ0CiAg CiAgI2luY2x1ZGUgImxvZy5oIgogICNpbmNsdWRlICJzc2hidWYuaCIKLUBAIC0xNjIsNiArMTYz LDEwIEBAIHNzaF9lZDI1NTE5X3NpZ24oc3RydWN0IHNzaGtleSAqa2V5LAorQEAgLTE2Myw2ICsx NjQsMTAgQEAgc3NoX2VkMjU1MTlfc2lnbihzdHJ1Y3Qgc3Noa2V5ICprZXksCiAgCSAgICBrZXkt PmVkMjU1MTlfc2sgPT0gTlVMTCB8fAogIAkgICAgZGF0YWxlbiA+PSBJTlRfTUFYIC0gY3J5cHRv X3NpZ25fZWQyNTUxOV9CWVRFUykKICAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7 CkBAIC00NTcsNyArNDU3LDcgQEAgaW5kZXggMjM2OWMzYWYwLi5hZjA1OWQ3ZjEgMTAwNjQ0CiAg CXNtbGVuID0gc2xlbiA9IGRhdGFsZW4gKyBjcnlwdG9fc2lnbl9lZDI1NTE5X0JZVEVTOwogIAlp ZiAoKHNpZyA9IG1hbGxvYyhzbGVuKSkgPT0gTlVMTCkKICAJCXJldHVybiBTU0hfRVJSX0FMTE9D X0ZBSUw7Ci1AQCAtMjQzLDYgKzI0OCwxMCBAQCBzc2hfZWQyNTUxOV92ZXJpZnkoY29uc3Qgc3Ry dWN0IHNzaGtleSAqa2V5LAorQEAgLTI0NCw2ICsyNDksMTAgQEAgc3NoX2VkMjU1MTlfdmVyaWZ5 KGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSwKICAJICAgIGRsZW4gPj0gSU5UX01BWCAtIGNyeXB0 b19zaWduX2VkMjU1MTlfQllURVMgfHwKICAJICAgIHNpZyA9PSBOVUxMIHx8IHNpZ2xlbiA9PSAw KQogIAkJcmV0dXJuIFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKQEAgLTQ4NSw3ICs0ODUsNyBA QCBpbmRleCBhODk0ZTIzYzkuLjMyOWRjOWRhMCAxMDA2NDQKICAKICB0eXBlZGVmIHN0cnVjdCB7 CiBkaWZmIC0tZ2l0IGEvc3NoLWtleWdlbi5jIGIvc3NoLWtleWdlbi5jCi1pbmRleCA1ODRkNWE4 OTkuLjEyNDMwZTZhNCAxMDA2NDQKK2luZGV4IDY2NjdhNWMxYi4uZWQxOTMyZmYwIDEwMDY0NAog LS0tIGEvc3NoLWtleWdlbi5jCiArKysgYi9zc2gta2V5Z2VuLmMKIEBAIC0yMiw2ICsyMiw3IEBA CkBAIC01MTUsNyArNTE1LDcgQEAgaW5kZXggNTg0ZDVhODk5Li4xMjQzMGU2YTQgMTAwNjQ0CiAg CXN3aXRjaCAodHlwZSkgewogIAljYXNlIEtFWV9SU0E6CiAgCQlpZiAoKmJpdHNwIDwgU1NIX1JT QV9NSU5JTVVNX01PRFVMVVNfU0laRSkKLUBAIC0yNDgsNyArMjU0LDcgQEAgYXNrX2ZpbGVuYW1l KHN0cnVjdCBwYXNzd2QgKnB3LCBjb25zdCBjaGFyICpwcm9tcHQpCitAQCAtMjQzLDcgKzI0OSw3 IEBAIGFza19maWxlbmFtZShzdHJ1Y3QgcGFzc3dkICpwdywgY29uc3QgY2hhciAqcHJvbXB0KQog IAljaGFyICpuYW1lID0gTlVMTDsKICAKICAJaWYgKGtleV90eXBlX25hbWUgPT0gTlVMTCkKQEAg LTUyMyw4ICs1MjMsOCBAQCBpbmRleCA1ODRkNWE4OTkuLjEyNDMwZTZhNCAxMDA2NDQKICsJCW5h bWUgPSBGSVBTX21vZGUoKSA/IF9QQVRIX1NTSF9DTElFTlRfSURfUlNBIDogX1BBVEhfU1NIX0NM SUVOVF9JRF9FRDI1NTE5OwogIAllbHNlIHsKICAJCXN3aXRjaCAoc3Noa2V5X3R5cGVfZnJvbV9z aG9ydG5hbWUoa2V5X3R5cGVfbmFtZSkpIHsKLSAjaWZkZWYgT1BFTlNTTF9IQVNfRUNDCi1AQCAt MTA1Nyw5ICsxMDYzLDE3IEBAIGRvX2dlbl9hbGxfaG9zdGtleXMoc3RydWN0IHBhc3N3ZCAqcHcp CisgCQljYXNlIEtFWV9FQ0RTQV9DRVJUOgorQEAgLTEwNDgsOSArMTA1NCwxNyBAQCBkb19nZW5f YWxsX2hvc3RrZXlzKHN0cnVjdCBwYXNzd2QgKnB3KQogIAkJCWZpcnN0ID0gMTsKICAJCQlwcmlu dGYoIiVzOiBnZW5lcmF0aW5nIG5ldyBob3N0IGtleXM6ICIsIF9fcHJvZ25hbWUpOwogIAkJfQpA QCAtNTQzLDcgKzU0Myw3IEBAIGluZGV4IDU4NGQ1YTg5OS4uMTI0MzBlNmE0IDEwMDY0NAogIAkJ aWYgKChmZCA9IG1rc3RlbXAocHJ2X3RtcCkpID09IC0xKSB7CiAgCQkJZXJyb3IoIkNvdWxkIG5v dCBzYXZlIHlvdXIgcHJpdmF0ZSBrZXkgaW4gJXM6ICVzIiwKICAJCQkgICAgcHJ2X3RtcCwgc3Ry ZXJyb3IoZXJybm8pKTsKLUBAIC0zNzY4LDcgKzM3ODIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKK0BAIC0zNzkyLDcgKzM4MDYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKICAJfQogIAogIAlpZiAoa2V5X3R5cGVfbmFtZSA9PSBOVUxMKQpAQCAtNTUzLDcgKzU1Myw3 IEBAIGluZGV4IDU4NGQ1YTg5OS4uMTI0MzBlNmE0IDEwMDY0NAogIAl0eXBlID0gc3Noa2V5X3R5 cGVfZnJvbV9zaG9ydG5hbWUoa2V5X3R5cGVfbmFtZSk7CiAgCXR5cGVfYml0c192YWxpZCh0eXBl LCBrZXlfdHlwZV9uYW1lLCAmYml0cyk7CiBkaWZmIC0tZ2l0IGEvc3NoLWtleXNjYW4uYyBiL3Nz aC1rZXlzY2FuLmMKLWluZGV4IGJiM2VlNDYyZC4uM2NlYTFkYWFjIDEwMDY0NAoraW5kZXggNzdi NDM0MWM5Li4yODRkNGRlZWUgMTAwNjQ0CiAtLS0gYS9zc2gta2V5c2Nhbi5jCiArKysgYi9zc2gt a2V5c2Nhbi5jCiBAQCAtMjEsNiArMjEsNyBAQApAQCAtNTY0LDcgKzU2NCw3IEBAIGluZGV4IGJi M2VlNDYyZC4uM2NlYTFkYWFjIDEwMDY0NAogIAogICNpbmNsdWRlIDxlcnJuby5oPgogICNpbmNs dWRlIDxsaW1pdHMuaD4KLUBAIC0yMzQsNiArMjM1LDE0IEBAIGtleWdyYWJfc3NoMihjb24gKmMp CitAQCAtMjM4LDYgKzIzOSwxNCBAQCBrZXlncmFiX3NzaDIoY29uICpjKQogIAljaGFyICpteXBy b3Bvc2FsW1BST1BPU0FMX01BWF0gPSB7IEtFWF9DTElFTlQgfTsKICAJaW50IHI7CiAgCkBAIC02 MDksNyArNjA5LDcgQEAgaW5kZXggY2NhZGIxNGNhLi41YWYzOWJiMzkgMTAwNjQ0CiAgCQlnb3Rv IG91dDsKICAJfQogZGlmZiAtLWdpdCBhL3NzaC5jIGIvc3NoLmMKLWluZGV4IGJjM2JlOGY4ZS4u ZTdiZGJhMzI3IDEwMDY0NAoraW5kZXggYjlhNTljYTQzLi4wMGMwZWRlZmMgMTAwNjQ0CiAtLS0g YS9zc2guYwogKysrIGIvc3NoLmMKIEBAIC03MSw2ICs3MSw3IEBACkBAIC02MjAsNyArNjIwLDcg QEAgaW5kZXggYmMzYmU4ZjhlLi5lN2JkYmEzMjcgMTAwNjQ0CiAgI2luY2x1ZGUgIm9wZW5ic2Qt Y29tcGF0L29wZW5zc2wtY29tcGF0LmgiCiAgCiAgI2luY2x1ZGUgInhtYWxsb2MuaCIKLUBAIC0x NjMxLDYgKzE2MzIsMTAgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK0BAIC0xNjE3LDYgKzE2 MTgsMTAgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKICAJCWV4aXQoMCk7CiAgCX0KICAKQEAg LTYzMiw3ICs2MzIsNyBAQCBpbmRleCBiYzNiZThmOGUuLmU3YmRiYTMyNyAxMDA2NDQKICAJaWYg KG9wdGlvbnMuc2tfcHJvdmlkZXIgIT0gTlVMTCAmJiAqb3B0aW9ucy5za19wcm92aWRlciA9PSAn JCcgJiYKICAJICAgIHN0cmxlbihvcHRpb25zLnNrX3Byb3ZpZGVyKSA+IDEpIHsKIGRpZmYgLS1n aXQgYS9zc2hjb25uZWN0Mi5jIGIvc3NoY29ubmVjdDIuYwotaW5kZXggMzFiYmMwZWQ4Li4yZGRk ODlkNWMgMTAwNjQ0CitpbmRleCA1NDU5Y2FhMGMuLjI0NGM3MjVmNyAxMDA2NDQKIC0tLSBhL3Nz aGNvbm5lY3QyLmMKICsrKyBiL3NzaGNvbm5lY3QyLmMKIEBAIC00NSw2ICs0NSwxMCBAQApAQCAt NjQ2LDcgKzY0Niw3IEBAIGluZGV4IDMxYmJjMGVkOC4uMmRkZDg5ZDVjIDEwMDY0NAogICNpbmNs dWRlICJ4bWFsbG9jLmgiCiAgI2luY2x1ZGUgInNzaC5oIgogICNpbmNsdWRlICJzc2gyLmgiCi1A QCAtMjYzLDYgKzI2Nyw5IEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqaG9zdCwg c3RydWN0IHNvY2thZGRyICpob3N0YWRkciwgdV9zaG9ydCBwb3J0LAorQEAgLTI2NCw2ICsyNjgs OSBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRk cl9zdG9yYWdlICpob3N0YWRkciwKICAKICAjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQo V0lUSF9PUEVOU1NMKQogIAlpZiAob3B0aW9ucy5nc3Nfa2V5ZXgpIHsKQEAgLTY1Niw3ICs2NTYs NyBAQCBpbmRleCAzMWJiYzBlZDguLjJkZGQ4OWQ1YyAxMDA2NDQKICAJCS8qIEFkZCB0aGUgR1NT QVBJIG1lY2hhbmlzbXMgY3VycmVudGx5IHN1cHBvcnRlZCBvbiB0aGlzCiAgCQkgKiBjbGllbnQg dG8gdGhlIGtleSBleGNoYW5nZSBhbGdvcml0aG0gcHJvcG9zYWwgKi8KICAJCW9yaWcgPSBteXBy b3Bvc2FsW1BST1BPU0FMX0tFWF9BTEdTXTsKLUBAIC0yODIsNyArMjg5LDkgQEAgc3NoX2tleDIo c3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3RhZGRyLCB1 X3Nob3J0IHBvcnQsCitAQCAtMjgzLDcgKzI5MCw5IEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNz aCwgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmhvc3RhZGRyLAogIAkJfQog IAogIAkJZ3NzID0gc3NoX2dzc2FwaV9jbGllbnRfbWVjaGFuaXNtcyhnc3NfaG9zdCwKQEAgLTY2 OCw3ICs2NjgsNyBAQCBpbmRleCAzMWJiYzBlZDguLjJkZGQ4OWQ1YyAxMDA2NDQKICAJCQlkZWJ1 ZygiT2ZmZXJpbmcgR1NTQVBJIHByb3Bvc2FsOiAlcyIsIGdzcyk7CiAgCQkJeGFzcHJpbnRmKCZt eXByb3Bvc2FsW1BST1BPU0FMX0tFWF9BTEdTXSwKIGRpZmYgLS1naXQgYS9zc2hkLmMgYi9zc2hk LmMKLWluZGV4IDIyYWQ0ZGZmMC4uMjg2NTYxOWM3IDEwMDY0NAoraW5kZXggNmI5ODQ3ZjY3Li5h ZTI2YjEwYjMgMTAwNjQ0CiAtLS0gYS9zc2hkLmMKICsrKyBiL3NzaGQuYwogQEAgLTQzLDYgKzQz LDcgQEAKQEAgLTY5Myw4ICs2OTMsOCBAQCBpbmRleCAyMmFkNGRmZjAuLjI4NjU2MTljNyAxMDA2 NDQKICAjaWZkZWYgSEFWRV9TRUNVUkVXQVJFCiAgI2luY2x1ZGUgPHN5cy9zZWN1cml0eS5oPgog ICNpbmNsdWRlIDxwcm90Lmg+Ci1AQCAtMTYwNCw2ICsxNjEyLDEzIEBAIG1haW4oaW50IGFjLCBj aGFyICoqYXYpCi0gCQkgICAgJmtleSwgTlVMTCkpICE9IDAgJiYgciAhPSBTU0hfRVJSX1NZU1RF TV9FUlJPUikKK0BAIC0xNjA1LDYgKzE2MTMsMTMgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikK KyAJCSAgICByICE9IFNTSF9FUlJfU1lTVEVNX0VSUk9SICYmICFoYXZlX2FnZW50KQogIAkJCWRv X2xvZzJfcihyLCBsbCwgIlVuYWJsZSB0byBsb2FkIGhvc3Qga2V5IFwiJXNcIiIsCiAgCQkJICAg IG9wdGlvbnMuaG9zdF9rZXlfZmlsZXNbaV0pOwogKwkJaWYgKEZJUFNfbW9kZSgpICYmIGtleSAh PSBOVUxMICYmIChzc2hrZXlfdHlwZV9wbGFpbihrZXktPnR5cGUpID09IEtFWV9FRDI1NTE5X1NL CkBAIC03MDcsNyArNzA3LDcgQEAgaW5kZXggMjJhZDRkZmYwLi4yODY1NjE5YzcgMTAwNjQ0CiAg CQlpZiAoc3Noa2V5X2lzX3NrKGtleSkgJiYKICAJCSAgICBrZXktPnNrX2ZsYWdzICYgU1NIX1NL X1VTRVJfUFJFU0VOQ0VfUkVRRCkgewogIAkJCWRlYnVnKCJob3N0IGtleSAlcyByZXF1aXJlcyB1 c2VyIHByZXNlbmNlLCBpZ25vcmluZyIsCi1AQCAtMTgyNyw2ICsxODQyLDEwIEBAIG1haW4oaW50 IGFjLCBjaGFyICoqYXYpCitAQCAtMTgyOSw2ICsxODQ0LDEwIEBAIG1haW4oaW50IGFjLCBjaGFy ICoqYXYpCiAgCS8qIFJlaW5pdGlhbGl6ZSB0aGUgbG9nIChiZWNhdXNlIG9mIHRoZSBmb3JrIGFi b3ZlKS4gKi8KICAJbG9nX2luaXQoX19wcm9nbmFtZSwgb3B0aW9ucy5sb2dfbGV2ZWwsIG9wdGlv bnMubG9nX2ZhY2lsaXR5LCBsb2dfc3RkZXJyKTsKICAKQEAgLTcxOSw3ICs3MTksNyBAQCBpbmRl eCAyMmFkNGRmZjAuLjI4NjU2MTljNyAxMDA2NDQKICAJICogQ2hkaXIgdG8gdGhlIHJvb3QgZGly ZWN0b3J5IHNvIHRoYXQgdGhlIGN1cnJlbnQgZGlzayBjYW4gYmUKICAJICogdW5tb3VudGVkIGlm IGRlc2lyZWQuCiBkaWZmIC0tZ2l0IGEvc3Noa2V5LmMgYi9zc2hrZXkuYwotaW5kZXggY2NjMzVk YmY1Li44MmU1NTUwOWQgMTAwNjQ0CitpbmRleCA3ZDE0MDFhOGYuLjIzODBjODA4MSAxMDA2NDQK IC0tLSBhL3NzaGtleS5jCiArKysgYi9zc2hrZXkuYwogQEAgLTM2LDYgKzM2LDcgQEAKQEAgLTc1 Nyw3ICs3NTcsNyBAQCBpbmRleCBjY2MzNWRiZjUuLjgyZTU1NTA5ZCAxMDA2NDQKICAJCWlmICgh aW5jbHVkZV9zaWdvbmx5ICYmIGltcGwtPnNpZ29ubHkpCiAgCQkJY29udGludWU7CiAgCQlpZiAo KGNlcnRzX29ubHkgJiYgIWltcGwtPmNlcnQpIHx8IChwbGFpbl9vbmx5ICYmIGltcGwtPmNlcnQp KQotQEAgLTE0MzEsNiArMTQ0NSwyMCBAQCBzc2hrZXlfcmVhZChzdHJ1Y3Qgc3Noa2V5ICpyZXQs IGNoYXIgKipjcHApCitAQCAtMTQyNyw2ICsxNDQxLDIwIEBAIHNzaGtleV9yZWFkKHN0cnVjdCBz c2hrZXkgKnJldCwgY2hhciAqKmNwcCkKICAJCXJldHVybiBTU0hfRVJSX0VDX0NVUlZFX01JU01B VENIOwogIAl9CiAgCkBAIC03NzgsNyArNzc4LDcgQEAgaW5kZXggY2NjMzVkYmY1Li44MmU1NTUw OWQgMTAwNjQ0CiAgCS8qIEZpbGwgaW4gcmV0IGZyb20gcGFyc2VkIGtleSAqLwogIAlzc2hrZXlf ZnJlZV9jb250ZW50cyhyZXQpOwogIAkqcmV0ID0gKms7Ci1AQCAtMjI2NCw2ICsyMjkyLDExIEBA IHNzaGtleV9zaWduKHN0cnVjdCBzc2hrZXkgKmtleSwKK0BAIC0yMjYwLDYgKzIyODgsMTEgQEAg c3Noa2V5X3NpZ24oc3RydWN0IHNzaGtleSAqa2V5LAogIAkJKmxlbnAgPSAwOwogIAlpZiAoZGF0 YWxlbiA+IFNTSF9LRVlfTUFYX1NJR05fREFUQV9TSVpFKQogIAkJcmV0dXJuIFNTSF9FUlJfSU5W QUxJRF9BUkdVTUVOVDsKQEAgLTc5MCw3ICs3OTAsNyBAQCBpbmRleCBjY2MzNWRiZjUuLjgyZTU1 NTA5ZCAxMDA2NDQKICAJaWYgKChpbXBsID0gc3Noa2V5X2ltcGxfZnJvbV9rZXkoa2V5KSkgPT0g TlVMTCkKICAJCXJldHVybiBTU0hfRVJSX0tFWV9UWVBFX1VOS05PV047CiAgCWlmICgociA9IHNz aGtleV91bnNoaWVsZF9wcml2YXRlKGtleSkpICE9IDApCi1AQCAtMjMwMyw2ICsyMzM2LDEwIEBA IHNzaGtleV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAorQEAgLTIyOTksNiArMjMz MiwxMCBAQCBzc2hrZXlfdmVyaWZ5KGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSwKICAJCSpkZXRh aWxzcCA9IE5VTEw7CiAgCWlmIChzaWdsZW4gPT0gMCB8fCBkbGVuID4gU1NIX0tFWV9NQVhfU0lH Tl9EQVRBX1NJWkUpCiAgCQlyZXR1cm4gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwpAQCAtODAy LDUgKzgwMiw1IEBAIGluZGV4IGNjYzM1ZGJmNS4uODJlNTU1MDlkIDEwMDY0NAogIAkJcmV0dXJu IFNTSF9FUlJfS0VZX1RZUEVfVU5LTk9XTjsKICAJcmV0dXJuIGltcGwtPmZ1bmNzLT52ZXJpZnko a2V5LCBzaWcsIHNpZ2xlbiwgZGF0YSwgZGxlbiwKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlm ZiAtLWdpdCBhLzAwMzktb3BlbnNzaC04LjdwMS1uZWdvdGlhdGUtc3VwcG9ydGVkLWFsZ3MucGF0 Y2ggYi8wMDM5LW9wZW5zc2gtOC43cDEtbmVnb3RpYXRlLXN1cHBvcnRlZC1hbGdzLnBhdGNoCmlu ZGV4IGQwMGJlZDQuLmZiZGQ2MmQgMTAwNjQ0Ci0tLSBhLzAwMzktb3BlbnNzaC04LjdwMS1uZWdv dGlhdGUtc3VwcG9ydGVkLWFsZ3MucGF0Y2gKKysrIGIvMDAzOS1vcGVuc3NoLTguN3AxLW5lZ290 aWF0ZS1zdXBwb3J0ZWQtYWxncy5wYXRjaApAQCAtMSwxOCArMSwxOSBAQAotRnJvbSBiZmJkYWYw YjEzNTVlMDZiZTVjNDBkYWUzOTg2ZDRkZGRlNTBhYzA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQorRnJvbSA1ZTVlYTYyY2EyM2JkY2U5ZjNjYWQyZWExMWM4ZjA1M2ZhZWI0MmVlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwu Y29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVjdDogW1BB VENIIDM5LzU0XSBvcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncworU3ViamVj dDogW1BBVENIIDM5LzUzXSBvcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncwog CiAjIERvbid0IHByb3Bvc2UgZGlzYWxsb3dlZCBhbGdvcml0aG1zIGR1cmluZyBob3N0a2V5IG5l Z290aWF0aW9uCiAjIHVwc3RyZWFtIE1SOgogIyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzaC9v cGVuc3NoLXBvcnRhYmxlL3B1bGwvMzIzCiAtLS0KLSByZWdyZXNzL2hvc3RrZXktYWdlbnQuc2gg fCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQotIHNzaGNvbm5lY3QyLmMgICAg ICAgICAgICB8IDE3ICsrKysrKysrKysrKysrKy0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNl cnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorIHJlZ3Jlc3MvaG9zdGtleS1hZ2VudC5zaCAgICAg IHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KKyByZWdyZXNzL2tub3duaG9z dHMtY29tbWFuZC5zaCB8ICA4ICsrKysrKy0tCisgc3NoY29ubmVjdDIuYyAgICAgICAgICAgICAg ICAgfCAxNyArKysrKysrKysrKysrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgNDYgaW5zZXJ0aW9u cygrKSwgMTEgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9yZWdyZXNzL2hvc3RrZXktYWdl bnQuc2ggYi9yZWdyZXNzL2hvc3RrZXktYWdlbnQuc2gKLWluZGV4IDI4ZGNmZTE3MC4uYjllNzE2 ZGNkIDEwMDY0NAoraW5kZXggMGU3OTYyZTNjLi4yNTFkNTI1OGUgMTAwNjQ0CiAtLS0gYS9yZWdy ZXNzL2hvc3RrZXktYWdlbnQuc2gKICsrKyBiL3JlZ3Jlc3MvaG9zdGtleS1hZ2VudC5zaAogQEAg LTE3LDggKzE3LDIxIEBAIHRyYWNlICJtYWtlIENBIGtleSIKQEAgLTg2LDEyICs4NywzNyBAQCBp bmRleCAyOGRjZmUxNzAuLmI5ZTcxNmRjZCAxMDA2NDQKICAJdmVyYm9zZSAiY2VydCB0eXBlICRr IgogIAlvcHRzPSItb0hvc3RLZXlBbGdvcml0aG1zPSRrIC1GICRPQkovc3NoX3Byb3h5IgogIAlT U0hfQ09OTkVDVElPTj1gJHtTU0h9ICRvcHRzIGhvc3QgJ2VjaG8gJFNTSF9DT05ORUNUSU9OJ2AK K2RpZmYgLS1naXQgYS9yZWdyZXNzL2tub3duaG9zdHMtY29tbWFuZC5zaCBiL3JlZ3Jlc3Mva25v d25ob3N0cy1jb21tYW5kLnNoCitpbmRleCA1ODAwNGI4MGUuLjAzNmE3YzJiOSAxMDA2NDQKKy0t LSBhL3JlZ3Jlc3Mva25vd25ob3N0cy1jb21tYW5kLnNoCisrKysgYi9yZWdyZXNzL2tub3duaG9z dHMtY29tbWFuZC5zaAorQEAgLTM4LDggKzM4LDEyIEBAIF9FT0YKKyBjaG1vZCBhK3ggJE9CSi9r bm93bmhvc3RzX2NvbW1hbmQKKyAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgeCB0cnVlICYmIGZh aWwgInNzaCBjb25uZWN0IHN1Y2NlZWRlZCB3aXRoIGJhZCBleGl0IgorIAorK1BVQktFWV9BQ0NF UFRFRF9BTEdPUz1gJFNTSCAtRyAiZXhhbXBsZS5jb20iIHwgXAorKyAgICBncmVwIC1pICJQdWJr ZXlBY2NlcHRlZEFsZ29yaXRobXMiIHwgY3V0IC1kICcgJyAtZjItIHwgdHIgIiwiICJ8ImAKKytT U0hfQUNDRVBURURfSE9TVEtFWV9UWVBFUz1gZWNobyAiJFNTSF9IT1NUS0VZX1RZUEVTIiB8IHRy ICcgJyAnXG4nIHwgZWdyZXAgIiRQVUJLRVlfQUNDRVBURURfQUxHT1MiYAorKworIGNwICRPQkov c3NoZF9wcm94eSAkT0JKL3NzaGRfcHJveHkuYmFrCistZm9yIGtleXR5cGUgaW4gJHtTU0hfSE9T VEtFWV9UWVBFU30gOyBkbworK2ZvciBrZXl0eXBlIGluICR7U1NIX0FDQ0VQVEVEX0hPU1RLRVlf VFlQRVN9IDsgZG8KKyAJZ3JlcCAtdmkgSG9zdEtleUFsZ29yaXRobXMgJE9CSi9zc2hkX3Byb3h5 LmJhayA+ICRPQkovc3NoZF9wcm94eQorIAllY2hvICJIb3N0S2V5QWxnb3JpdGhtcz0rJGtleXR5 cGUiID4+ICRPQkovc3NoZF9wcm94eQorIAlhbGdzPSRrZXl0eXBlCitAQCAtNTMsNSArNTcsNSBA QCB0ZXN0ICJ4XCQzIiA9ICJ4JExPR05BTUUiIHx8IGRpZSAid3JvbmcgdXNlcm5hbWUgXCQzIChl eHBlY3RlZCAkTE9HTkFNRSkiCisgZ3JlcCAtLSAiXCQxLipcJDIiICRPQkova25vd25faG9zdHMK KyBfRU9GCisgCSR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSAtb0hvc3RLZXlBbGdvcml0aG1zPSRh bGdzIHggdHJ1ZSB8fAorLQkgICAgZmFpbCAic3NoIGNvbm5lY3QgZmFpbGVkIGZvciBrZXl0eXBl ICR4IgorKwkgICAgZmFpbCAic3NoIGNvbm5lY3QgZmFpbGVkIGZvciBrZXl0eXBlICRrZXl0eXBl IgorIGRvbmUKIGRpZmYgLS1naXQgYS9zc2hjb25uZWN0Mi5jIGIvc3NoY29ubmVjdDIuYwotaW5k ZXggMmRkZDg5ZDVjLi4zMWY1MWJlNjIgMTAwNjQ0CitpbmRleCAyNDRjNzI1ZjcuLmMyMWIzYTEx YSAxMDA2NDQKIC0tLSBhL3NzaGNvbm5lY3QyLmMKICsrKyBiL3NzaGNvbm5lY3QyLmMKLUBAIC0y MjQsNyArMjI0LDcgQEAgc3NoX2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1 Y3Qgc29ja2FkZHIgKmhvc3RhZGRyLCB1X3Nob3J0IHBvcnQsCi0gICAgIGNvbnN0IHN0cnVjdCBz c2hfY29ubl9pbmZvICpjaW5mbykKK0BAIC0yMjQsNyArMjI0LDcgQEAgc3NoX2tleDIoc3RydWN0 IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFkZHIs CisgICAgIHVfc2hvcnQgcG9ydCwgY29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQog IHsKICAJY2hhciAqbXlwcm9wb3NhbFtQUk9QT1NBTF9NQVhdOwogLQljaGFyICphbGxfa2V5LCAq aGthbGdzID0gTlVMTDsKQEAgLTk5LDkgKzEyNSw5IEBAIGluZGV4IDJkZGQ4OWQ1Yy4uMzFmNTFi ZTYyIDEwMDY0NAogIAlpbnQgciwgdXNlX2tub3duX2hvc3RzX29yZGVyID0gMDsKICAKICAjaWYg ZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKQotQEAgLTI2MCwxMCArMjYw LDIyIEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqaG9zdCwgc3RydWN0IHNvY2th ZGRyICpob3N0YWRkciwgdV9zaG9ydCBwb3J0LAotIAlpZiAodXNlX2tub3duX2hvc3RzX29yZGVy KQotIAkJaGthbGdzID0gb3JkZXJfaG9zdGtleWFsZ3MoaG9zdCwgaG9zdGFkZHIsIHBvcnQsIGNp bmZvKTsKK0BAIC0yNjEsMTAgKzI2MSwyMiBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNo YXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpob3N0YWRkciwKKyAJCSAgICBwb3J0 LCBjaW5mbyk7CisgCX0KICAKICsJZmlsdGVyZWRfYWxncyA9IGhrYWxncyA/IG1hdGNoX2ZpbHRl cl9hbGxvd2xpc3QoaGthbGdzLCBvcHRpb25zLnB1YmtleV9hY2NlcHRlZF9hbGdvcykKICsJCSAg ICAgICAgICAgICAgIDogbWF0Y2hfZmlsdGVyX2FsbG93bGlzdChvcHRpb25zLmhvc3RrZXlhbGdv cml0aG1zLApAQCAtMTIzLDcgKzE0OSw3IEBAIGluZGV4IDJkZGQ4OWQ1Yy4uMzFmNTFiZTYyIDEw MDY0NAogIAogICNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCiAg CWlmIChvcHRpb25zLmdzc19rZXlleCkgewotQEAgLTMwNyw2ICszMTksNyBAQCBzc2hfa2V4Mihz dHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVf c2hvcnQgcG9ydCwKK0BAIC0zMDgsNiArMzIwLDcgQEAgc3NoX2tleDIoc3RydWN0IHNzaCAqc3No LCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFkZHIsCiAgI2VuZGlm CiAgCiAgCWZyZWUoaGthbGdzKTsKQEAgLTEzMiw1ICsxNTgsNSBAQCBpbmRleCAyZGRkODlkNWMu LjMxZjUxYmU2MiAxMDA2NDQKICAJLyogc3RhcnQga2V5IGV4Y2hhbmdlICovCiAgCWlmICgociA9 IGtleF9zZXR1cChzc2gsIG15cHJvcG9zYWwpKSAhPSAwKQogLS0gCi0yLjUzLjAKKzIuNTUuMAog CgpkaWZmIC0tZ2l0IGEvMDA0MC1vcGVuc3NoLTkuMHAxLWV2cC1maXBzLWtleC5wYXRjaCBiLzAw NDAtb3BlbnNzaC05LjBwMS1ldnAtZmlwcy1rZXgucGF0Y2gKaW5kZXggNjZmZDRlNi4uOGFkNTBm ZiAxMDA2NDQKLS0tIGEvMDA0MC1vcGVuc3NoLTkuMHAxLWV2cC1maXBzLWtleC5wYXRjaAorKysg Yi8wMDQwLW9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4LnBhdGNoCkBAIC0xLDE1ICsxLDE1IEBA Ci1Gcm9tIGZjMTY2NjA0NzkwNDA5ZWVmZDVmNTUwYzcxYzIzMmJlM2MxOGQ5NGQgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCitGcm9tIDE2MmU5OWI5MTg5Nzk2ZmFkNjMyNzE0OGQ4YzY4MTdkNWVl NzRjMTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8 YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAw Ci1TdWJqZWN0OiBbUEFUQ0ggNDAvNTRdIG9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4CitTdWJq ZWN0OiBbUEFUQ0ggNDAvNTNdIG9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4CiAKIC0tLQogIGRo LmMgICAgICB8ICA5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogIGtl eC5jICAgICB8IDEzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKICBrZXguaCAgICAgfCAgIDYgKysrCiAga2V4ZGguYyAgIHwgIDUyICsrKysr KysrKysrKysrKysrKy0tCi0ga2V4ZWNkaC5jIHwgMTI5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tCi0gNSBmaWxlcyBjaGFuZ2VkLCAzODIgaW5zZXJ0 aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCisga2V4ZWNkaC5jIHwgMTI3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDM3 OCBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2RoLmMgYi9k aC5jCiBpbmRleCAzZWZlMGE2OWYuLmJmMzI0MzA5YyAxMDA2NDQKQEAgLTE0MCwxMCArMTQwLDEw IEBAIGluZGV4IDNlZmUwYTY5Zi4uYmYzMjQzMDljIDEwMDY0NAogIAogIERIICoKIGRpZmYgLS1n aXQgYS9rZXguYyBiL2tleC5jCi1pbmRleCBlMTA1OWRlYzQuLjFlYjNjYTlkMyAxMDA2NDQKK2lu ZGV4IDdlNTBmMjc3Zi4uNjJjZmE4NmNkIDEwMDY0NAogLS0tIGEva2V4LmMKICsrKyBiL2tleC5j Ci1AQCAtMTYxOSwzICsxNjE5LDE0MiBAQCBrZXhfZXhjaGFuZ2VfaWRlbnRpZmljYXRpb24oc3Ry dWN0IHNzaCAqc3NoLCBpbnQgdGltZW91dF9tcywKK0BAIC0xNjIyLDMgKzE2MjIsMTQyIEBAIGtl eF9leGNoYW5nZV9pZGVudGlmaWNhdGlvbihzdHJ1Y3Qgc3NoICpzc2gsIGludCB0aW1lb3V0X21z LAogIAlyZXR1cm4gcjsKICB9CiAgCkBAIC0yODcsMjAgKzI4NywyMCBAQCBpbmRleCBlMTA1OWRl YzQuLjFlYjNjYTlkMyAxMDA2NDQKICt9CiArI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwogZGlm ZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKLWluZGV4IDBhMGNiMTU2Mi4uZmY0MTMyNGU5IDEwMDY0 NAoraW5kZXggOGY5OTM0ODk5Li4xZmU0YmIyOWIgMTAwNjQ0CiAtLS0gYS9rZXguaAogKysrIGIv a2V4LmgKLUBAIC0zNyw2ICszNyw5IEBACi0gIyBpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gIyBp bmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0gIyBpbmNsdWRlIDxvcGVuc3NsL2VjZHNhLmg+Ci0rIyBp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyMgaW5jbHVkZSA8b3BlbnNzbC9jb3JlX25hbWVzLmg+ Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL3BhcmFtX2J1aWxkLmg+Ci0gIyBpZmRlZiBPUEVOU1NMX0hB U19FQ0MKLSAjICBpbmNsdWRlIDxvcGVuc3NsL2VjLmg+Ci0gIyBlbHNlIC8qIE9QRU5TU0xfSEFT X0VDQyAqLwotQEAgLTMxNyw2ICszMjAsOSBAQCBpbnQJa2V4YzI1NTE5X3NoYXJlZF9rZXlfZXh0 KGNvbnN0IHVfY2hhciBrZXlbQ1VSVkUyNTUxOV9TSVpFXSwKK0BAIC0zOCw2ICszOCw5IEBACisg I2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lYy5oPgorICNpbmNs dWRlIDxvcGVuc3NsL2VjZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvY29yZV9uYW1lcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3BhcmFtX2J1aWxk Lmg+CisgI2Vsc2UgLyogT1BFTlNTTCAqLworICNkZWZpbmUgQklHTlVNCQl2b2lkCisgI2RlZmlu ZSBESAkJdm9pZAorQEAgLTMyMiw2ICszMjUsOSBAQCBpbnQJa2V4YzI1NTE5X3NoYXJlZF9rZXlf ZXh0KGNvbnN0IHVfY2hhciBrZXlbQ1VSVkUyNTUxOV9TSVpFXSwKICAgICAgY29uc3QgdV9jaGFy IHB1YltDVVJWRTI1NTE5X1NJWkVdLCBzdHJ1Y3Qgc3NoYnVmICpvdXQsIGludCkKICAJX19hdHRy aWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCBDVVJWRTI1NTE5X1NJWkUpKSkK ICAJX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAyLCBDVVJWRTI1NTE5 X1NJWkUpKSk7CkBAIC00MDQsMTAgKzQwNCwxMCBAQCBpbmRleCBiNjMzNzRiMGUuLjc0YWZhMTE4 NCAxMDA2NDQKICB9CiAgCiBkaWZmIC0tZ2l0IGEva2V4ZWNkaC5jIGIva2V4ZWNkaC5jCi1pbmRl eCA2YTkwNThjZGMuLmI2NjFlMDcwNSAxMDA2NDQKK2luZGV4IGE5ZGJmNWM0Yi4uMzhkODI3YjRj IDEwMDY0NAogLS0tIGEva2V4ZWNkaC5jCiArKysgYi9rZXhlY2RoLmMKLUBAIC0zNSwxNiArMzUs NTYgQEAKK0BAIC0zNSwxMSArMzUsNTEgQEAKICAKICAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgog ICNpbmNsdWRlIDxvcGVuc3NsL2VjZGguaD4KQEAgLTQyMSwxMSArNDIxLDcgQEAgaW5kZXggNmE5 MDU4Y2RjLi5iNjYxZTA3MDUgMTAwNjQ0CiAgI2luY2x1ZGUgInNzaGJ1Zi5oIgogICNpbmNsdWRl ICJzc2hlcnIuaCIKICsjaW5jbHVkZSAibG9nLmgiCi0gCi0gc3RhdGljIGludAotIGtleF9lY2Ro X2RlY19rZXlfZ3JvdXAoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosIEVDX0tF WSAqa2V5LAotICAgICBjb25zdCBFQ19HUk9VUCAqLCBzdHJ1Y3Qgc3NoYnVmICoqKTsKLSAKKysK ICtzdGF0aWMgRUNfS0VZICoKICtnZW5lcmF0ZV9lY19rZXlzKGludCBlY19uaWQpCiArewpAQCAt NDYwLDExICs0NTYsMTAgQEAgaW5kZXggNmE5MDU4Y2RjLi5iNjYxZTA3MDUgMTAwNjQ0CiArCU9T U0xfUEFSQU1fZnJlZShwYXJhbXMpOwogKwlyZXR1cm4gY2xpZW50X2tleTsKICt9Ci0rCisgCiAg aW50CiAga2V4X2VjZGhfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCi0gewotQEAgLTU0LDExICs5 NCw3IEBAIGtleF9lY2RoX2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQorQEAgLTUwLDExICs5MCw3 IEBAIGtleF9lY2RoX2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQogIAlzdHJ1Y3Qgc3NoYnVmICpi dWYgPSBOVUxMOwogIAlpbnQgcjsKICAKQEAgLTQ3Nyw3ICs0NzIsNyBAQCBpbmRleCA2YTkwNThj ZGMuLmI2NjFlMDcwNSAxMDA2NDQKICAJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKICAJ CWdvdG8gb3V0OwogIAl9Ci1AQCAtMTAwLDExICsxMzYsNyBAQCBrZXhfZWNkaF9lbmMoc3RydWN0 IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwKK0BAIC05NiwxMSAr MTMyLDcgQEAga2V4X2VjZGhfZW5jKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3RydWN0IHNzaGJ1 ZiAqY2xpZW50X2Jsb2IsCiAgCSpzZXJ2ZXJfYmxvYnAgPSBOVUxMOwogIAkqc2hhcmVkX3NlY3Jl dHAgPSBOVUxMOwogIApAQCAtNDkwLDcgKzQ4NSw3IEBAIGluZGV4IDZhOTA1OGNkYy4uYjY2MWUw NzA1IDEwMDY0NAogIAkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwogIAkJZ290byBvdXQ7 CiAgCX0KLUBAIC0xMzksMTEgKzE3MSwyMSBAQCBrZXhfZWNkaF9kZWNfa2V5X2dyb3VwKHN0cnVj dCBrZXggKmtleCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqZWNfYmxvYiwKK0BAIC0xMzUsMTEgKzE2 NywyMSBAQCBrZXhfZWNkaF9kZWNfa2V5X2dyb3VwKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3Ry dWN0IHNzaGJ1ZiAqZWNfYmxvYiwKICB7CiAgCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7CiAg CUJJR05VTSAqc2hhcmVkX3NlY3JldCA9IE5VTEw7CkBAIC01MTUsNyArNTEwLDcgQEAgaW5kZXgg NmE5MDU4Y2RjLi5iNjYxZTA3MDUgMTAwNjQ0CiAgCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7CiAg CiAgCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKSB7Ci1AQCAtMTUyLDQ1ICsxOTQs ODIgQEAga2V4X2VjZGhfZGVjX2tleV9ncm91cChzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVj dCBzc2hidWYgKmVjX2Jsb2IsCitAQCAtMTQ4LDI5ICsxOTAsNTggQEAga2V4X2VjZGhfZGVjX2tl eV9ncm91cChzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmVjX2Jsb2IsCiAg CX0KICAJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmdiKGJ1ZiwgZWNfYmxvYikpICE9IDApCiAg CQlnb3RvIG91dDsKQEAgLTU3MywyOCArNTY4LDMyIEBAIGluZGV4IDZhOTA1OGNkYy4uYjY2MWUw NzA1IDEwMDY0NAogIAkJZ290byBvdXQ7CiAgCX0KIC0Ja2xlbiA9IChFQ19HUk9VUF9nZXRfZGVn cmVlKGdyb3VwKSArIDcpIC8gODsKLS0JaWYgKChrYnVmID0gbWFsbG9jKGtsZW4pKSA9PSBOVUxM IHx8Ci0tCSAgICAoc2hhcmVkX3NlY3JldCA9IEJOX25ldygpKSA9PSBOVUxMKSB7Ci0rCWlmICgo a2J1ZiA9IG1hbGxvYyhrbGVuKSkgPT0gTlVMTCkgeworIAlpZiAoKGtidWYgPSBtYWxsb2Moa2xl bikpID09IE5VTEwpIHsKICAJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7CiAgCQlnb3RvIG91dDsK ICAJfQotLQlpZiAoRUNESF9jb21wdXRlX2tleShrYnVmLCBrbGVuLCBkaF9wdWIsIGtleSwgTlVM TCkgIT0gKGludClrbGVuIHx8Ci0tCSAgICBCTl9iaW4yYm4oa2J1Ziwga2xlbiwgc2hhcmVkX3Nl Y3JldCkgPT0gTlVMTCkgeworLQlpZiAoRUNESF9jb21wdXRlX2tleShrYnVmLCBrbGVuLCBkaF9w dWIsIGtleSwgTlVMTCkgIT0gKGludClrbGVuKSB7CiArCWlmIChFVlBfUEtFWV9kZXJpdmUoY3R4 LCBrYnVmLCAma2xlbikgIT0gMSkgewogIAkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwog IAkJZ290byBvdXQ7CiAgCX0KLSAjaWZkZWYgREVCVUdfS0VYRUNESAotIAlkdW1wX2RpZ2VzdCgi c2hhcmVkIHNlY3JldCIsIGtidWYsIGtsZW4pOwotICNlbmRpZgotKwlpZiAoKHNoYXJlZF9zZWNy ZXQgPSBCTl9uZXcoKSkgPT0gTlVMTCB8fAotKwkgICAgKEJOX2JpbjJibihrYnVmLCBrbGVuLCBz aGFyZWRfc2VjcmV0KSA9PSBOVUxMKSkgewotKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSsJ CWdvdG8gb3V0OwotKwl9Ci0gCWlmICgociA9IHNzaGJ1Zl9wdXRfYmlnbnVtMihidWYsIHNoYXJl ZF9zZWNyZXQpKSAhPSAwKQotIAkJZ290byBvdXQ7CitAQCAtMTgxLDIzICsyNTIsMjUgQEAga2V4 X2VjZGhfZGVjX2tleV9ncm91cChzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYg KmVjX2Jsb2IsCisgCQlpZiAoKHIgPSBzc2hidWZfcHV0KGJ1Ziwga2J1Ziwga2xlbikpICE9IDAp CisgCQkJZ290byBvdXQ7CisgCX0gZWxzZSB7CistCQlpZiAoKHNoYXJlZF9zZWNyZXQgPSBCTl9u ZXcoKSkgPT0gTlVMTCkgeworKwkJaWYgKChzaGFyZWRfc2VjcmV0ID0gQk5fbmV3KCkpID09IE5V TEwgfHwKKysJCSAgICAoQk5fYmluMmJuKGtidWYsIGtsZW4sIHNoYXJlZF9zZWNyZXQpID09IE5V TEwpKSB7CisgCQkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKyAJCQlnb3RvIG91dDsKKyAJCX0K Ky0JCWlmIChCTl9iaW4yYm4oa2J1Ziwga2xlbiwgc2hhcmVkX3NlY3JldCkgPT0gTlVMTCkgewor LQkJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKy0JCQlnb3RvIG91dDsKKy0JCX0KKyAJ CWlmICgociA9IHNzaGJ1Zl9wdXRfYmlnbnVtMihidWYsIHNoYXJlZF9zZWNyZXQpKSAhPSAwKQor IAkJCWdvdG8gb3V0OworIAl9CiAgCSpzaGFyZWRfc2VjcmV0cCA9IGJ1ZjsKICAJYnVmID0gTlVM TDsKICAgb3V0OgpAQCAtNjExLDUgKzYxMCw1IEBAIGluZGV4IDZhOTA1OGNkYy4uYjY2MWUwNzA1 IDEwMDY0NAogIAlyZXR1cm4gcjsKICB9CiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1n aXQgYS8wMDQxLW9wZW5zc2gtOC43cDEtbm9ob3N0c2hhMXByb29mLnBhdGNoIGIvMDA0MS1vcGVu c3NoLTguN3AxLW5vaG9zdHNoYTFwcm9vZi5wYXRjaAppbmRleCAwYjYyY2M0Li5kYzM5OTgzIDEw MDY0NAotLS0gYS8wMDQxLW9wZW5zc2gtOC43cDEtbm9ob3N0c2hhMXByb29mLnBhdGNoCisrKyBi LzAwNDEtb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJvb2YucGF0Y2gKQEAgLTEsNyArMSw3IEBA Ci1Gcm9tIDgxNmQ5MzEzNTZiM2I3MmY2MTkyOWM4ZDY2NzQ2YjU1ZDk2ODgyYmMgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCitGcm9tIDg1NTVkZDM5MTZkMzExY2JlZjViZmY3ODU1MjNjZDI3YTE5 M2M3MjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8 YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAw Ci1TdWJqZWN0OiBbUEFUQ0ggNDEvNTRdIG9wZW5zc2gtOC43cDEtbm9ob3N0c2hhMXByb29mCitT dWJqZWN0OiBbUEFUQ0ggNDEvNTNdIG9wZW5zc2gtOC43cDEtbm9ob3N0c2hhMXByb29mCiAKIC0t LQogIGNvbXBhdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKysrKysKQEAg LTY1LDEwICs2NSwxMCBAQCBpbmRleCAxYTE5MDYwZmMuLjJlNmRiNWJmOSAxMDA2NDQKICAvKiAj ZGVmaW5lIHVudXNlZAkJMHgwMDAwMDAyMCAqLwogICNkZWZpbmUgU1NIX0JVR19ERUJVRwkJMHgw MDAwMDA0MAogZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0b3IuYwotaW5kZXggMzA1ODgz Mjc4Li5iZjVhNTEwNWIgMTAwNjQ0CitpbmRleCA3MzNhMzQ2MGYuLjgyNjllNzhjMyAxMDA2NDQK IC0tLSBhL21vbml0b3IuYwogKysrIGIvbW9uaXRvci5jCi1AQCAtNzU1LDExICs3NTUsMTggQEAg aW50CitAQCAtNzQxLDExICs3NDEsMTggQEAgaW50CiAgbW1fYW5zd2VyX3NldGNvbXBhdChzdHJ1 Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQogIHsKICAJaW50IHI7CkBA IC04OCw3ICs4OCw3IEBAIGluZGV4IDMwNTg4MzI3OC4uYmY1YTUxMDViIDEwMDY0NAogIAljb21w YXRfc2V0ID0gMTsKICAKICAJcmV0dXJuICgwKTsKLUBAIC03NzMsMTAgKzc4MCwxMiBAQCBtbV9h bnN3ZXJfc2lnbihzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQor QEAgLTc1OSwxMSArNzY2LDEzIEBAIG1tX2Fuc3dlcl9zaWduKHN0cnVjdCBzc2ggKnNzaCwgaW50 IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCXN0cnVjdCBzc2hidWYgKnNpZ2J1ZiA9IE5VTEw7 CiAgCXVfY2hhciAqcCA9IE5VTEwsICpzaWduYXR1cmUgPSBOVUxMOwogIAljaGFyICphbGcgPSBO VUxMOwpAQCAtOTksMTEgKzk5LDEyIEBAIGluZGV4IDMwNTg4MzI3OC4uYmY1YTUxMDViIDEwMDY0 NAogKwlpbnQgciwgaXNfcHJvb2YgPSAwOwogKwlpbnQga2V5aWQsIGNvbXBhdDsKICAJY29uc3Qg Y2hhciBwcm9vZl9yZXFbXSA9ICJob3N0a2V5cy1wcm92ZS0wMEBvcGVuc3NoLmNvbSI7CisgCXN0 YXRpYyBpbnQgbmhvc3RrZXlfcHJvb2ZzX2RvbmUsICpob3N0a2V5X3Byb29mc19kb25lOwogKwlj b25zdCBjaGFyIHNhZmVfcnNhW10gID0gInJzYS1zaGEyLTI1NiI7CiAgCiAgCWRlYnVnM19mKCJl bnRlcmluZyIpOwogIAotQEAgLTgzOCwxOCArODQ3LDMwIEBAIG1tX2Fuc3dlcl9zaWduKHN0cnVj dCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCitAQCAtODM2LDE4ICs4NDUs MzAgQEAgbW1fYW5zd2VyX3NpZ24oc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNz aGJ1ZiAqbSkKICAJfQogIAogIAlpZiAoKGtleSA9IGdldF9ob3N0a2V5X2J5X2luZGV4KGtleWlk KSkgIT0gTlVMTCkgewpAQCAtMTM4LDcgKzEzOSw3IEBAIGluZGV4IDMwNTg4MzI3OC4uYmY1YTUx MDViIDEwMDY0NAogIAogIAlzc2hidWZfcmVzZXQobSk7CiBkaWZmIC0tZ2l0IGEvcmVncmVzcy91 bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMgYi9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXgu YwotaW5kZXggMTZjMmYyZGZmLi5mNDcwMGRlZWIgMTAwNjQ0CitpbmRleCA4OTM3NmYxMTUuLmRi N2NiNDE4YiAxMDA2NDQKIC0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCiAr KysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYwogQEAgLTExMCw3ICsxMTAsOCBA QCBkb19rZXhfd2l0aF9rZXkoY2hhciAqa2V4LCBjaGFyICpjaXBoZXIsIGNoYXIgKm1hYywKQEAg LTE1MiwxMCArMTUzLDEwIEBAIGluZGV4IDE2YzJmMmRmZi4uZjQ3MDBkZWViIDEwMDY0NAogIAlr ZXhfcGFyYW1zLnByb3Bvc2FsW1BST1BPU0FMX1NFUlZFUl9IT1NUX0tFWV9BTEdTXSA9IGtleW5h bWU7CiAgCUFTU0VSVF9JTlRfRVEoc3NoX2luaXQoJmNsaWVudCwgMCwgJmtleF9wYXJhbXMpLCAw KTsKIGRpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9maWxlLmMgYi9y ZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9maWxlLmMKLWluZGV4IGU0MTJiNzVkOC4uNWIw NmJjOTA1IDEwMDY0NAoraW5kZXggZjhmY2MzYWJkLi5kNGFiNjRjZjAgMTAwNjQ0CiAtLS0gYS9y ZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9maWxlLmMKICsrKyBiL3JlZ3Jlc3MvdW5pdHRl c3RzL3NzaGtleS90ZXN0X2ZpbGUuYwotQEAgLTEwNiw2ICsxMDYsNyBAQCBzc2hrZXlfZmlsZV90 ZXN0cyh2b2lkKQorQEAgLTEwNCw2ICsxMDQsNyBAQCBzc2hrZXlfZmlsZV90ZXN0cyh2b2lkKQog IAlzc2hrZXlfZnJlZShrMik7CiAgCVRFU1RfRE9ORSgpOwogIApAQCAtMTYzLDcgKzE2NCw3IEBA IGluZGV4IGU0MTJiNzVkOC4uNWIwNmJjOTA1IDEwMDY0NAogIAlURVNUX1NUQVJUKCJsb2FkIFJT QSBjZXJ0IHdpdGggU0hBMSBzaWduYXR1cmUiKTsKICAJQVNTRVJUX0lOVF9FUShzc2hrZXlfbG9h ZF9jZXJ0KHRlc3RfZGF0YV9maWxlKCJyc2FfMV9zaGExIiksICZrMiksIDApOwogIAlBU1NFUlRf UFRSX05FKGsyLCBOVUxMKTsKLUBAIC0xMTMsNyArMTE0LDcgQEAgc3Noa2V5X2ZpbGVfdGVzdHMo dm9pZCkKK0BAIC0xMTEsNyArMTEyLDcgQEAgc3Noa2V5X2ZpbGVfdGVzdHModm9pZCkKICAJQVNT RVJUX0lOVF9FUShzc2hrZXlfZXF1YWxfcHVibGljKGsxLCBrMiksIDEpOwogIAlBU1NFUlRfU1RS SU5HX0VRKGsyLT5jZXJ0LT5zaWduYXR1cmVfdHlwZSwgInNzaC1yc2EiKTsKICAJc3Noa2V5X2Zy ZWUoazIpOwpAQCAtMTczLDEwICsxNzQsMTAgQEAgaW5kZXggZTQxMmI3NWQ4Li41YjA2YmM5MDUg MTAwNjQ0CiAgCVRFU1RfU1RBUlQoImxvYWQgUlNBIGNlcnQgd2l0aCBTSEE1MTIgc2lnbmF0dXJl Iik7CiAgCUFTU0VSVF9JTlRfRVEoc3Noa2V5X2xvYWRfY2VydCh0ZXN0X2RhdGFfZmlsZSgicnNh XzFfc2hhNTEyIiksICZrMiksIDApOwogZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3Nz aGtleS90ZXN0X2Z1enouYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X2Z1enouYwot aW5kZXggZDBmNDdkN2NmLi5iYTRkNTA2ZDUgMTAwNjQ0CitpbmRleCAwZTViZGY3NDguLjNiZGZk ZTE2NyAxMDA2NDQKIC0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X2Z1enouYwog KysrIGIvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3RfZnV6ei5jCi1AQCAtMjczLDEzICsy NzMsMTQgQEAgc3Noa2V5X2Z1enpfdGVzdHModm9pZCkKK0BAIC0zMTMsMTMgKzMxMywxNCBAQCBz c2hrZXlfZnV6el90ZXN0cyh2b2lkKQogIAlURVNUX0RPTkUoKTsKICAKICAjaWZkZWYgV0lUSF9P UEVOU1NMCkBAIC0xOTMsMTAgKzE5NCwxMCBAQCBpbmRleCBkMGY0N2Q3Y2YuLmJhNGQ1MDZkNSAx MDA2NDQKICAJVEVTVF9TVEFSVCgiZnV6eiBSU0EgU0hBMjU2IHNpZyIpOwogIAlidWYgPSBsb2Fk X2ZpbGUoInJzYV8xIik7CiBkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rl c3Rfc3Noa2V5LmMgYi9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkuYwotaW5k ZXggMTcwMWM4N2M1Li4zNmY2ZmQzMzUgMTAwNjQ0CitpbmRleCA1OWVmYmIyOGUuLjQyMTk4Nzc1 ZiAxMDA2NDQKIC0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X3NzaGtleS5jCiAr KysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkuYwotQEAgLTU5LDYgKzU5 LDkgQEAgYnVpbGRfY2VydChzdHJ1Y3Qgc3NoYnVmICpiLCBzdHJ1Y3Qgc3Noa2V5ICprLCBjb25z dCBjaGFyICp0eXBlLAorQEAgLTU3LDYgKzU3LDkgQEAgYnVpbGRfY2VydChzdHJ1Y3Qgc3NoYnVm ICpiLCBzdHJ1Y3Qgc3Noa2V5ICprLCBjb25zdCBjaGFyICp0eXBlLAogIAl1X2NoYXIgKnNpZ2Js b2I7CiAgCXNpemVfdCBzaWdsZW47CiAgCkBAIC0yMDYsNyArMjA3LDcgQEAgaW5kZXggMTcwMWM4 N2M1Li4zNmY2ZmQzMzUgMTAwNjQ0CiAgCWNhX2J1ZiA9IHNzaGJ1Zl9uZXcoKTsKICAJQVNTRVJU X1BUUl9ORShjYV9idWYsIE5VTEwpOwogIAlBU1NFUlRfSU5UX0VRKHNzaGtleV9wdXRiKGNhX2tl eSwgY2FfYnVmKSwgMCk7Ci1AQCAtMTAwLDggKzEwMyw5IEBAIGJ1aWxkX2NlcnQoc3RydWN0IHNz aGJ1ZiAqYiwgc3RydWN0IHNzaGtleSAqaywgY29uc3QgY2hhciAqdHlwZSwKK0BAIC05OCw4ICsx MDEsOSBAQCBidWlsZF9jZXJ0KHN0cnVjdCBzc2hidWYgKmIsIHN0cnVjdCBzc2hrZXkgKmssIGNv bnN0IGNoYXIgKnR5cGUsCiAgCUFTU0VSVF9JTlRfRVEoc3NoYnVmX3B1dF9zdHJpbmcoYiwgTlVM TCwgMCksIDApOyAvKiByZXNlcnZlZCAqLwogIAlBU1NFUlRfSU5UX0VRKHNzaGJ1Zl9wdXRfc3Ry aW5nYihiLCBjYV9idWYpLCAwKTsgLyogc2lnbmF0dXJlIGtleSAqLwogIAlBU1NFUlRfSU5UX0VR KHNzaGtleV9zaWduKHNpZ25fa2V5LCAmc2lnYmxvYiwgJnNpZ2xlbiwKQEAgLTIxOCw3ICsyMTks NyBAQCBpbmRleCAxNzAxYzg3YzUuLjM2ZjZmZDMzNSAxMDA2NDQKICAKICAJZnJlZShzaWdibG9i KTsKICAJc3NoYnVmX2ZyZWUoY2FfYnVmKTsKLUBAIC0xMTgsMTYgKzEyMiwyMCBAQCBzaWduYXR1 cmVfdGVzdChzdHJ1Y3Qgc3Noa2V5ICprLCBzdHJ1Y3Qgc3Noa2V5ICpiYWQsIGNvbnN0IGNoYXIg KnNpZ19hbGcsCitAQCAtMTE2LDE2ICsxMjAsMjAgQEAgc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IHNz aGtleSAqaywgc3RydWN0IHNzaGtleSAqYmFkLCBjb25zdCBjaGFyICpzaWdfYWxnLAogIHsKICAJ c2l6ZV90IGxlbjsKICAJdV9jaGFyICpzaWc7CkBAIC0yNDcsNyArMjQ4LDcgQEAgaW5kZXggMTcw MWM4N2M1Li4zNmY2ZmQzMzUgMTAwNjQ0CiAgCWZyZWUoc2lnKTsKICB9CiAgCi1AQCAtNTUyLDcg KzU2MCw3IEBAIHNzaGtleV90ZXN0cyh2b2lkKQorQEAgLTYyNSw3ICs2MzMsNyBAQCBzc2hrZXlf dGVzdHModm9pZCkKICAJQVNTRVJUX0lOVF9FUShzc2hrZXlfbG9hZF9wdWJsaWModGVzdF9kYXRh X2ZpbGUoInJzYV8xLnB1YiIpLCAmazIsCiAgCSAgICBOVUxMKSwgMCk7CiAgCWszID0gZ2V0X3By aXZhdGUoInJzYV8xIik7CkBAIC0yNTcsNyArMjU4LDcgQEAgaW5kZXggMTcwMWM4N2M1Li4zNmY2 ZmQzMzUgMTAwNjQ0CiAgCSAgICBTU0hfRVJSX0tFWV9DRVJUX0lOVkFMSURfU0lHTl9LRVkpOwog IAlBU1NFUlRfUFRSX0VRKGs0LCBOVUxMKTsKIGRpZmYgLS1naXQgYS9zZXJ2ZXJsb29wLmMgYi9z ZXJ2ZXJsb29wLmMKLWluZGV4IDhlNjM0ODBlYy4uMTA4N2E2YzdkIDEwMDY0NAoraW5kZXggYzIy NjgxNDgzLi4yOTQ0NTQyNmIgMTAwNjQ0CiAtLS0gYS9zZXJ2ZXJsb29wLmMKICsrKyBiL3NlcnZl cmxvb3AuYwogQEAgLTc2LDYgKzc2LDcgQEAKQEAgLTI2OCw3ICsyNjksNyBAQCBpbmRleCA4ZTYz NDgwZWMuLjEwODdhNmM3ZCAxMDA2NDQKICAKICBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25z OwogIAotQEAgLTcyNCw3ICs3MjUsMTAgQEAgc2VydmVyX2lucHV0X2hvc3RrZXlzX3Byb3ZlKHN0 cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQorQEAgLTcyNSw3ICs3MjYsMTAg QEAgc2VydmVyX2lucHV0X2hvc3RrZXlzX3Byb3ZlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNz aGJ1ZiAqKnJlc3BwKQogIAkJCWVsc2UgaWYgKHNzaC0+a2V4LT5mbGFncyAmIEtFWF9SU0FfU0hB Ml8yNTZfU1VQUE9SVEVEKQogIAkJCQlzaWdhbGcgPSAicnNhLXNoYTItMjU2IjsKICAJCX0KQEAg LTI5NSw3ICsyOTYsNyBAQCBpbmRleCA1YWYzOWJiMzkuLjg4MjMyYzZlZCAxMDA2NDQKICAJCQln b3RvIG91dDsKICAJCX0KIGRpZmYgLS1naXQgYS9zc2hjb25uZWN0Mi5jIGIvc3NoY29ubmVjdDIu YwotaW5kZXggMzFmNTFiZTYyLi5lZWUxZjk3OTQgMTAwNjQ0CitpbmRleCBjMjFiM2ExMWEuLjM2 NjA4NzNhNiAxMDA2NDQKIC0tLSBhL3NzaGNvbm5lY3QyLmMKICsrKyBiL3NzaGNvbm5lY3QyLmMK IEBAIC0xNDQwLDYgKzE0NDAsMTQgQEAgaWRlbnRpdHlfc2lnbihzdHJ1Y3QgaWRlbnRpdHkgKmlk LCB1X2NoYXIgKipzaWdwLCBzaXplX3QgKmxlbnAsCkBAIC0zMTQsMTAgKzMxNSwxMCBAQCBpbmRl eCAzMWY1MWJlNjIuLmVlZTFmOTc5NCAxMDA2NDQKICAJfQogIAogZGlmZiAtLWdpdCBhL3NzaGQt c2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKLWluZGV4IGQ4OTcyZmJkNS4uNzA2NGFmZDdjIDEw MDY0NAoraW5kZXggMGE5NzA4ZDNhLi5hZGY1YjFiNDkgMTAwNjQ0CiAtLS0gYS9zc2hkLXNlc3Np b24uYwogKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBAIC0xMjYwLDYgKzEyNjAsMjcgQEAgbWFpbihp bnQgYWMsIGNoYXIgKiphdikKK0BAIC0xMjYxLDYgKzEyNjEsMjcgQEAgbWFpbihpbnQgYWMsIGNo YXIgKiphdikKICAKICAJY2hlY2tfaXBfb3B0aW9ucyhzc2gpOwogIApAQCAtMzQ2LDUgKzM0Nyw1 IEBAIGluZGV4IGQ4OTcyZmJkNS4uNzA2NGFmZDdjIDEwMDY0NAogIAljaGFubmVsX2luaXRfY2hh bm5lbHMoc3NoKTsKICAJY2hhbm5lbF9zZXRfYWYoc3NoLCBvcHRpb25zLmFkZHJlc3NfZmFtaWx5 KTsKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwNDItb3BlbnNzaC05Ljlw MS1zZXBhcmF0ZS1rZXlzaWduLnBhdGNoIGIvMDA0Mi1vcGVuc3NoLTkuOXAxLXNlcGFyYXRlLWtl eXNpZ24ucGF0Y2gKaW5kZXggMTUzNWUyMy4uYzI2N2U5ZSAxMDA2NDQKLS0tIGEvMDA0Mi1vcGVu c3NoLTkuOXAxLXNlcGFyYXRlLWtleXNpZ24ucGF0Y2gKKysrIGIvMDA0Mi1vcGVuc3NoLTkuOXAx LXNlcGFyYXRlLWtleXNpZ24ucGF0Y2gKQEAgLTEsMTcgKzEsMTcgQEAKLUZyb20gZjNkZTMyODA5 MzMzNGE5MDNlZTU0NTkzNDA3NjViN2Y1NDQxMjE2YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb20gZTllYmE3ZjRhZGI1OWQzMDhmZjlkZWM0ZjhlYzFhNDI2Y2ZlM2UzOSBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNv bT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAKLVN1YmplY3Q6IFtQQVRD SCA0Mi81NF0gb3BlbnNzaC05LjlwMS1zZXBhcmF0ZS1rZXlzaWduCitTdWJqZWN0OiBbUEFUQ0gg NDIvNTNdIG9wZW5zc2gtOS45cDEtc2VwYXJhdGUta2V5c2lnbgogCiAtLS0KICBzc2hfY29uZmln LjUgfCAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0p CiAKIGRpZmYgLS1naXQgYS9zc2hfY29uZmlnLjUgYi9zc2hfY29uZmlnLjUKLWluZGV4IDMwNmZh MWQ4YS4uYWI5OGMxNzJmIDEwMDY0NAoraW5kZXggYzRjNzJmNTg3Li5mMmZmODU4NWMgMTAwNjQ0 CiAtLS0gYS9zc2hfY29uZmlnLjUKICsrKyBiL3NzaF9jb25maWcuNQotQEAgLTc5Nyw3ICs3OTcs NyBAQCBvcgorQEAgLTgzNCw3ICs4MzQsNyBAQCBvcgogIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBw bGFjZWQgaW4gdGhlIG5vbi1ob3N0c3BlY2lmaWMgc2VjdGlvbi4KICBTZWUKICAuWHIgc3NoLWtl eXNpZ24gOApAQCAtMjEsNSArMjEsNSBAQCBpbmRleCAzMDZmYTFkOGEuLmFiOThjMTcyZiAxMDA2 NDQKICBTZXRzIHRoZSBlc2NhcGUgY2hhcmFjdGVyIChkZWZhdWx0OgogIC5RbCB+ICkgLgogLS0g Ci0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDA0My1vcGVuc3NoLTkuOXAxLW9wZW5z c2wtbWxrZW0ucGF0Y2ggYi8wMDQzLW9wZW5zc2gtOS45cDEtb3BlbnNzbC1tbGtlbS5wYXRjaApp bmRleCA2MDJkN2JlLi44ZmZjMWM3IDEwMDY0NAotLS0gYS8wMDQzLW9wZW5zc2gtOS45cDEtb3Bl bnNzbC1tbGtlbS5wYXRjaAorKysgYi8wMDQzLW9wZW5zc2gtOS45cDEtb3BlbnNzbC1tbGtlbS5w YXRjaApAQCAtMSwxOCArMSwxOCBAQAotRnJvbSAxZDUzZDM0MjkwZGVmYmJiM2I2ZGFhOTY3Yzc0 YjhmMDAyODJkYzdlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA2NDgzNDhmMzRlM2Y0 Mjc5ZTAzMDE4NGEzMThhOWMwMzI2ZmQ4MmExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJv bTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBN YXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVjdDogW1BBVENIIDQzLzU0XSBvcGVuc3NoLTku OXAxLW9wZW5zc2wtbWxrZW0KK1N1YmplY3Q6IFtQQVRDSCA0My81M10gb3BlbnNzaC05LjlwMS1v cGVuc3NsLW1sa2VtCiAKIC0tLQogIGtleC1uYW1lcy5jICAgICAgICAgfCAgMjMgKysrLQotIGtl eG1sa2VtNzY4eDI1NTE5LmMgfCAyOTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDMxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCisga2V4bWxrZW03Njh4MjU1MTkuYyB8IDI5MiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMzE0IGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL2tleC1uYW1lcy5jIGIva2V4LW5hbWVz LmMKLWluZGV4IGMwNzYxYWU4Zi4uODgyZjI5MDViIDEwMDY0NAoraW5kZXggOGU5YzYyMWJkLi5j ZGQ1ZGI5MGUgMTAwNjQ0CiAtLS0gYS9rZXgtbmFtZXMuYwogKysrIGIva2V4LW5hbWVzLmMKLUBA IC0xMDgsNiArMTA4LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGdzc19rZXhhbGdz W10gPSB7CitAQCAtMTA2LDYgKzEwNiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyBn c3Nfa2V4YWxnc1tdID0gewogIAl7IE5VTEwsIDAsIC0xLCAtMSwgMH0sCiAgfTsKICAKQEAgLTMy LDcgKzMyLDcgQEAgaW5kZXggYzA3NjFhZThmLi44ODJmMjkwNWIgMTAwNjQ0CiAgc3RhdGljIGNo YXIgKgogIGtleF9hbGdfbGlzdF9pbnRlcm5hbChjaGFyIHNlcCwgY29uc3Qgc3RydWN0IGtleGFs ZyAqYWxncykKICB7Ci1AQCAtMTE1LDggKzEyOCwxMiBAQCBrZXhfYWxnX2xpc3RfaW50ZXJuYWwo Y2hhciBzZXAsIGNvbnN0IHN0cnVjdCBrZXhhbGcgKmFsZ3MpCitAQCAtMTEzLDggKzEyNiwxMiBA QCBrZXhfYWxnX2xpc3RfaW50ZXJuYWwoY2hhciBzZXAsIGNvbnN0IHN0cnVjdCBrZXhhbGcgKmFs Z3MpCiAgCWNvbnN0IHN0cnVjdCBrZXhhbGcgKms7CiAgCWNoYXIgc2VwX3N0clsyXSA9IHtzZXAs ICdcMCd9OwogIApAQCAtNDYsNyArNDYsNyBAQCBpbmRleCBjMDc2MWFlOGYuLjg4MmYyOTA1YiAx MDA2NDQKICAKICAJcmV0dXJuIHJldDsKICB9Ci1AQCAtMTM4LDYgKzE1NSwxMCBAQCBrZXhfYWxn X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK0BAIC0xMzYsNiArMTUzLDEwIEBAIGtleF9hbGdf YnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQogIHsKICAJY29uc3Qgc3RydWN0IGtleGFsZyAqazsK ICAKQEAgLTU4LDEzICs1OCwxMyBAQCBpbmRleCBjMDc2MWFlOGYuLjg4MmYyOTA1YiAxMDA2NDQK ICAJCWlmIChzdHJjbXAoay0+bmFtZSwgbmFtZSkgPT0gMCkKICAJCQlyZXR1cm4gazsKIGRpZmYg LS1naXQgYS9rZXhtbGtlbTc2OHgyNTUxOS5jIGIva2V4bWxrZW03Njh4MjU1MTkuYwotaW5kZXgg MjU4NWQxZGIzLi5hYjYxNjcyMjEgMTAwNjQ0CitpbmRleCBlMmMyYzBhODYuLjM2NjU4MTIwZiAx MDA2NDQKIC0tLSBhL2tleG1sa2VtNzY4eDI1NTE5LmMKICsrKyBiL2tleG1sa2VtNzY4eDI1NTE5 LmMKLUBAIC00NCwxMCArNDQsMTI3IEBACitAQCAtNDUsOSArNDUsMTI3IEBACisgCiAgI2lmZGVm IFVTRV9NTEtFTTc2OFgyNTUxOQogIAotICNpbmNsdWRlICJsaWJjcnV4X21sa2VtNzY4X3NoYTMu aCIKICsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KICsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K ICsjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTE4MSwxNiArMTgxLDE2IEBAIGluZGV4IDI1ODVkMWRi My4uYWI2MTY3MjIxIDEwMDY0NAogKwogKyAgICByZXR1cm4gcjsKICt9Ci0gCisrCiAgaW50CiAg a2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKICB7CiArI2lm IDAKICAJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKLSAJdV9jaGFyIHJuZFtMSUJDUlVYX01M X0tFTV9LRVlfUEFJUl9QUk5HX0xFTl0sICpjcCA9IE5VTEw7CisgCXVfY2hhciAqY3AgPSBOVUxM OwogIAlzaXplX3QgbmVlZDsKLUBAIC04Miw2ICsxOTksMzYgQEAga2V4X2tlbV9tbGtlbTc2OHgy NTUxOV9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKLSAJZXhwbGljaXRfYnplcm8ocm5kLCBzaXpl b2Yocm5kKSk7CitAQCAtNzgsNiArMTk2LDM2IEBAIGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5 cGFpcihzdHJ1Y3Qga2V4ICprZXgpCisgIG91dDoKICAJc3NoYnVmX2ZyZWUoYnVmKTsKICAJcmV0 dXJuIHI7CiArI2Vsc2UKQEAgLTIyNiw3ICsyMjYsNyBAQCBpbmRleCAyNTg1ZDFkYjMuLmFiNjE2 NzIyMSAxMDA2NDQKICB9CiAgCiAgaW50Ci1AQCAtODksNiArMjM2LDcgQEAga2V4X2tlbV9tbGtl bTc2OHgyNTUxOV9lbmMoc3RydWN0IGtleCAqa2V4LAorQEAgLTg1LDYgKzIzMyw3IEBAIGtleF9r ZW1fbWxrZW03Njh4MjU1MTlfZW5jKHN0cnVjdCBrZXggKmtleCwKICAgICBjb25zdCBzdHJ1Y3Qg c3NoYnVmICpjbGllbnRfYmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNlcnZlcl9ibG9icCwKICAgICBz dHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCiAgewpAQCAtMjM0LDcgKzIzNCw3IEBAIGlu ZGV4IDI1ODVkMWRiMy4uYWI2MTY3MjIxIDEwMDY0NAogIAlzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJf YmxvYiA9IE5VTEw7CiAgCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7CiAgCWNvbnN0IHVfY2hh ciAqY2xpZW50X3B1YjsKLUBAIC0xODEsMTIgKzMyOSw5NyBAQCBrZXhfa2VtX21sa2VtNzY4eDI1 NTE5X2VuYyhzdHJ1Y3Qga2V4ICprZXgsCitAQCAtMTcwLDEyICszMTksOTcgQEAga2V4X2tlbV9t bGtlbTc2OHgyNTUxOV9lbmMoc3RydWN0IGtleCAqa2V4LAogIAlzc2hidWZfZnJlZShzZXJ2ZXJf YmxvYik7CiAgCXNzaGJ1Zl9mcmVlKGJ1Zik7CiAgCXJldHVybiByOwpAQCAtMjc3LDEzICsyNzcs MTMgQEAgaW5kZXggMjU4NWQxZGIzLi5hYjYxNjcyMjEgMTAwNjQ0CiArCQlyID0gU1NIX0VSUl9B TExPQ19GQUlMOwogKwkJZ290byBvdXQ7CiArCX0KLSsJaWYgKG1sa2VtNzY4X2VuY2FwX3NlY3Jl dChjbGllbnRfcHViLCBlbmMuc25kLCBlbmMuZnN0LnZhbHVlKSAhPSAwKQorKwlpZiAobWxrZW03 NjhfZW5jYXBfc2VjcmV0KGNsaWVudF9wdWIsIGVuYy5zbmQuZGF0YSwgZW5jLmZzdC5kYXRhKSAh PSAwKQogKwkJZ290byBvdXQ7CiArCiArCS8qIGdlbmVyYXRlIEVDREgga2V5IHBhaXIsIHN0b3Jl IHNlcnZlciBwdWJrZXkgYWZ0ZXIgY2lwaGVydGV4dCAqLwogKwlrZXhjMjU1MTlfa2V5Z2VuKHNl cnZlcl9rZXksIHNlcnZlcl9wdWIpOwotKwlpZiAoKHIgPSBzc2hidWZfcHV0KGJ1ZiwgZW5jLnNu ZCwgc2l6ZW9mKGVuYy5zbmQpKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hidWZfcHV0KHNlcnZl cl9ibG9iLCBlbmMuZnN0LnZhbHVlLCBzaXplb2YoZW5jLmZzdC52YWx1ZSkpKSAhPSAwIHx8Cisr CWlmICgociA9IHNzaGJ1Zl9wdXQoYnVmLCBlbmMuc25kLmRhdGEsIHNpemVvZihlbmMuc25kLmRh dGEpKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hidWZfcHV0KHNlcnZlcl9ibG9iLCBlbmMuZnN0 LmRhdGEsIHNpemVvZihlbmMuZnN0LmRhdGEpKSkgIT0gMCB8fAogKwkgICAgKHIgPSBzc2hidWZf cHV0KHNlcnZlcl9ibG9iLCBzZXJ2ZXJfcHViLCBzaXplb2Yoc2VydmVyX3B1YikpKSAhPSAwKQog KwkJZ290byBvdXQ7CiArCS8qIGFwcGVuZCBFQ0RIIHNoYXJlZCBrZXkgKi8KQEAgLTI5NSw4ICsy OTUsOCBAQCBpbmRleCAyNTg1ZDFkYjMuLmFiNjE2NzIyMSAxMDA2NDQKICsjaWZkZWYgREVCVUdf S0VYRUNESAogKwlkdW1wX2RpZ2VzdCgic2VydmVyIHB1YmxpYyBrZXkgMjU1MTk6Iiwgc2VydmVy X3B1YiwgQ1VSVkUyNTUxOV9TSVpFKTsKICsJZHVtcF9kaWdlc3QoInNlcnZlciBjaXBoZXIgdGV4 dDoiLAotKwkgICAgZW5jLmZzdC52YWx1ZSwgc2l6ZW9mKGVuYy5mc3QudmFsdWUpKTsKLSsJZHVt cF9kaWdlc3QoInNlcnZlciBrZW0ga2V5OiIsIGVuYy5zbmQsIHNpemVvZihlbmMuc25kKSk7Cisr CSAgICBlbmMuZnN0LmRhdGEsIHNpemVvZihlbmMuZnN0LmRhdGEpKTsKKysJZHVtcF9kaWdlc3Qo InNlcnZlciBrZW0ga2V5OiIsIGVuYy5zbmQuZGF0YSwgc2l6ZW9mKGVuYy5zbmQuZGF0YSkpOwog KwlkdW1wX2RpZ2VzdCgiY29uY2F0ZW5hdGlvbiBvZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBr ZXk6IiwKICsJICAgIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVmX2xlbihidWYpKTsKICsjZW5kaWYK QEAgLTMzMCwxMCArMzMwLDEwIEBAIGluZGV4IDI1ODVkMWRiMy4uYWI2MTY3MjIxIDEwMDY0NAog IHsKICsjaWYgMAogIAlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOwotIAl1X2NoYXIgbWxrZW1f a2V5W2NyeXB0b19rZW1fbWxrZW03NjhfQllURVNdOworIAl1X2NoYXIgc2hhcmVkX3NlY3JldFtN TEtFTTc2OF9CWVRFU107CiAgCWNvbnN0IHVfY2hhciAqY2lwaGVydGV4dCwgKnNlcnZlcl9wdWI7 Ci1AQCAtMjU0LDYgKzQ4Nyw2NCBAQCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2RlYyhzdHJ1Y3Qg a2V4ICprZXgsCi0gCWV4cGxpY2l0X2J6ZXJvKG1sa2VtX2tleSwgc2l6ZW9mKG1sa2VtX2tleSkp OworQEAgLTIzNiw2ICs0NzAsNjQgQEAga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0 IGtleCAqa2V4LAorIAlleHBsaWNpdF9iemVybyhzaGFyZWRfc2VjcmV0LCBzaXplb2Yoc2hhcmVk X3NlY3JldCkpOwogIAlzc2hidWZfZnJlZShidWYpOwogIAlyZXR1cm4gcjsKICsjZWxzZQpAQCAt Mzk4LDUgKzM5OCw1IEBAIGluZGV4IDI1ODVkMWRiMy4uYWI2MTY3MjIxIDEwMDY0NAogICNlbHNl IC8qIFVTRV9NTEtFTTc2OFgyNTUxOSAqLwogIGludAogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpk aWZmIC0tZ2l0IGEvMDA0NC1vcGVuc3NoLTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcucGF0Y2ggYi8w MDQ0LW9wZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZy5wYXRjaAppbmRleCAzNWRmMzRiLi5k YzdmMWViIDEwMDY0NAotLS0gYS8wMDQ0LW9wZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZy5w YXRjaAorKysgYi8wMDQ0LW9wZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZy5wYXRjaApAQCAt MSw3ICsxLDcgQEAKLUZyb20gMDRlYzBlMzRhNGQ0Zjg2N2NhZDMyZWQ4NTQzYjMyZTRkZTQ1OGY4 ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gODc2YTcxZDJmYTljOWVlYTViNDI2MzIx NjQxM2U5ZjM4NjQ5NTZkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBC ZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IEZyaSwgMTYgTWF5IDIwMjUgMTQ6 NTM6NTQgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA0NC81NF0gb3BlbnNzaC05LjlwMi1lcnJvcl9w cm9jZXNzaW5nCitTdWJqZWN0OiBbUEFUQ0ggNDQvNTNdIG9wZW5zc2gtOS45cDItZXJyb3JfcHJv Y2Vzc2luZwogCiAjIGh0dHBzOi8vd3d3Lm9wZW53YWxsLmNvbS9saXN0cy9vc3Mtc2VjdXJpdHkv MjAyNS8wMi8yMi8xCiAtLS0KQEAgLTksMTAgKzksMTAgQEAgU3ViamVjdDogW1BBVENIIDQ0LzU0 XSBvcGVuc3NoLTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcKICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNl cnRpb25zKCspCiAKIGRpZmYgLS1naXQgYS9zc2gtYWdlbnQuYyBiL3NzaC1hZ2VudC5jCi1pbmRl eCBjNzNhYmQxZDAuLjc3NzNhNGIwNyAxMDA2NDQKK2luZGV4IDE2MDRmNTQwYS4uNGM4ZTFhNGRh IDEwMDY0NAogLS0tIGEvc3NoLWFnZW50LmMKICsrKyBiL3NzaC1hZ2VudC5jCi1AQCAtMTM1Miw2 ICsxMzUyLDggQEAgcHJvY2Vzc19hZGRfaWRlbnRpdHkoU29ja2V0RW50cnkgKmUpCitAQCAtMTM1 OSw2ICsxMzU5LDggQEAgcHJvY2Vzc19hZGRfaWRlbnRpdHkoU29ja2V0RW50cnkgKmUpCiAgCWlm ICgociA9IHNzaGtleV9wcml2YXRlX2Rlc2VyaWFsaXplKGUtPnJlcXVlc3QsICZrKSkgIT0gMCB8 fAogIAkgICAgayA9PSBOVUxMIHx8CiAgCSAgICAociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhlLT5y ZXF1ZXN0LCAmY29tbWVudCwgTlVMTCkpICE9IDApIHsKQEAgLTIyLDUgKzIyLDUgQEAgaW5kZXgg YzczYWJkMWQwLi43NzczYTRiMDcgMTAwNjQ0CiAgCQlnb3RvIG91dDsKICAJfQogLS0gCi0yLjUz LjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDA0NS1JZ25vcmUtYmFkLWhvc3RrZXlzLWluLWtu b3duX2hvc3RzLWZpbGUucGF0Y2ggYi8wMDQ1LUlnbm9yZS1iYWQtaG9zdGtleXMtaW4ta25vd25f aG9zdHMtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzNl OTIzCi0tLSAvZGV2L251bGwKKysrIGIvMDA0NS1JZ25vcmUtYmFkLWhvc3RrZXlzLWluLWtub3du X2hvc3RzLWZpbGUucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorRnJvbSBlODY0YjU0ZTA3NDkxNGIx YmRjMmEyMzlkMDJiOWNhYmM5N2U5Y2E0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTog Wm9sdGFuIEZyaWRyaWNoIDx6ZnJpZHJpY0ByZWRoYXQuY29tPgorRGF0ZTogTW9uLCA1IE1heSAy MDI1IDExOjUyOjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNDUvNTNdIElnbm9yZSBiYWQgaG9z dGtleXMgaW4ga25vd25faG9zdHMgZmlsZQorCitTaWduZWQtb2ZmLWJ5OiBab2x0YW4gRnJpZHJp Y2ggPHpmcmlkcmljQHJlZGhhdC5jb20+CisKKyMgaHR0cHM6Ly9naXRodWIuY29tL29wZW5zc2gv b3BlbnNzaC1wb3J0YWJsZS9wdWxsLzU2NworLS0tCisgaG9zdGZpbGUuYyB8IDE1ICsrKysrKysr KysrKysrKworIGhvc3RmaWxlLmggfCAgMSArCisgc3NoLmMgICAgICB8ICAyICsrCisgMyBmaWxl cyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ob3N0ZmlsZS5jIGIv aG9zdGZpbGUuYworaW5kZXggMDMzYjI5MTA0Li40NTE3YWEwODAgMTAwNjQ0CistLS0gYS9ob3N0 ZmlsZS5jCisrKysgYi9ob3N0ZmlsZS5jCitAQCAtNjMsNiArNjMsMTQgQEAKKyAjaW5jbHVkZSAi aG1hYy5oIgorICNpbmNsdWRlICJzc2hidWYuaCIKKyAKKytzdGF0aWMgaW50IHJlcXVpcmVkX3Jz YV9zaXplID0gU1NIX1JTQV9NSU5JTVVNX01PRFVMVVNfU0laRTsKKysKKyt2b2lkCisraG9zdGZp bGVfc2V0X21pbmltdW1fcnNhX3NpemUoaW50IHNpemUpCisreworKwlyZXF1aXJlZF9yc2Ffc2l6 ZSA9IHNpemU7CisrfQorKworIC8qIFhYWCBobWFjIGlzIHRvbyBlYXN5IHRvIGRpY3Rpb25hcnkg YXR0YWNrOyB1c2UgYmNyeXB0PyAqLworIAorIHN0YXRpYyBpbnQKK0BAIC0yMzMsNiArMjQxLDcg QEAgcmVjb3JkX2hvc3RrZXkoc3RydWN0IGhvc3RrZXlfZm9yZWFjaF9saW5lICpsLCB2b2lkICpf Y3R4KQorIAlzdHJ1Y3QgbG9hZF9jYWxsYmFja19jdHggKmN0eCA9IChzdHJ1Y3QgbG9hZF9jYWxs YmFja19jdHggKilfY3R4OworIAlzdHJ1Y3QgaG9zdGtleXMgKmhvc3RrZXlzID0gY3R4LT5ob3N0 a2V5czsKKyAJc3RydWN0IGhvc3RrZXlfZW50cnkgKnRtcDsKKysJaW50IHIgPSAwOworIAorIAlp ZiAobC0+c3RhdHVzID09IEhLRl9TVEFUVVNfSU5WQUxJRCkgeworIAkJLyogWFhYIG1ha2UgdGhp cyB2ZXJib3NlKCkgaW4gdGhlIGZ1dHVyZSAqLworQEAgLTI0MSw2ICsyNTAsMTIgQEAgcmVjb3Jk X2hvc3RrZXkoc3RydWN0IGhvc3RrZXlfZm9yZWFjaF9saW5lICpsLCB2b2lkICpfY3R4KQorIAkJ cmV0dXJuIDA7CisgCX0KKyAKKysJaWYgKChyID0gc3Noa2V5X2NoZWNrX3JzYV9sZW5ndGgobC0+ a2V5LCByZXF1aXJlZF9yc2Ffc2l6ZSkpICE9IDApIHsKKysJCWRlYnVnMl9mKCIlczolbGQ6IGln bm9yaW5nIGhvc3RrZXk6ICVzIiwKKysJCSAgICBsLT5wYXRoLCBsLT5saW5lbnVtLCBzc2hfZXJy KHIpKTsKKysJCXJldHVybiAwOworKwl9CisrCisgCWRlYnVnM19mKCJmb3VuZCAlc2tleSB0eXBl ICVzIGluIGZpbGUgJXM6JWx1IiwKKyAJICAgIGwtPm1hcmtlciA9PSBNUktfTk9ORSA/ICIiIDoK KyAJICAgIChsLT5tYXJrZXIgPT0gTVJLX0NBID8gImNhICIgOiAicmV2b2tlZCAiKSwKK2RpZmYg LS1naXQgYS9ob3N0ZmlsZS5oIGIvaG9zdGZpbGUuaAoraW5kZXggYTI0YTRlMzI5Li4wZTliMWEx OWEgMTAwNjQ0CistLS0gYS9ob3N0ZmlsZS5oCisrKysgYi9ob3N0ZmlsZS5oCitAQCAtMTE5LDUg KzExOSw2IEBAIGludCBob3N0a2V5c19mb3JlYWNoX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgRklM RSAqZiwKKyAgICAgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqaXAsIHVfaW50IG9wdGlv bnMsIHVfaW50IG5vdGUpOworIAorIHZvaWQgaG9zdGZpbGVfY3JlYXRlX3VzZXJfc3NoX2Rpcihj b25zdCBjaGFyICosIGludCk7Cisrdm9pZCBob3N0ZmlsZV9zZXRfbWluaW11bV9yc2Ffc2l6ZShp bnQpOworIAorICNlbmRpZgorZGlmZiAtLWdpdCBhL3NzaC5jIGIvc3NoLmMKK2luZGV4IDAwYzBl ZGVmYy4uMDE4MmNjNTY3IDEwMDY0NAorLS0tIGEvc3NoLmMKKysrKyBiL3NzaC5jCitAQCAtOTcs NiArOTcsNyBAQAorICNpbmNsdWRlICJ2ZXJzaW9uLmgiCisgI2luY2x1ZGUgInNzaGVyci5oIgor ICNpbmNsdWRlICJ1dGY4LmgiCisrI2luY2x1ZGUgImhvc3RmaWxlLmgiCisgCisgI2lmZGVmIEVO QUJMRV9QS0NTMTEKKyAjaW5jbHVkZSAic3NoLXBrY3MxMS5oIgorQEAgLTEzNjEsNiArMTM2Miw3 IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCisgCQkJb3B0aW9ucy51cGRhdGVfaG9zdGtleXMg PSAwOworIAkJfQorIAl9CisrCWhvc3RmaWxlX3NldF9taW5pbXVtX3JzYV9zaXplKG9wdGlvbnMu cmVxdWlyZWRfcnNhX3NpemUpOworIAlpZiAob3B0aW9ucy5jb25uZWN0aW9uX2F0dGVtcHRzIDw9 IDApCisgCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgQ29ubmVjdGlvbkF0dGVtcHRzIik7Cisg CistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMDA0NS1Qcm92aWRlLWJldHRlci1lcnJvci1m b3Itbm9uLXN1cHBvcnRlZC1wcml2YXRlLWtleXMucGF0Y2ggYi8wMDQ1LVByb3ZpZGUtYmV0dGVy LWVycm9yLWZvci1ub24tc3VwcG9ydGVkLXByaXZhdGUta2V5cy5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMzIwYzcxZS4uMDAwMDAwMAotLS0gYS8wMDQ1LVByb3ZpZGUtYmV0 dGVyLWVycm9yLWZvci1ub24tc3VwcG9ydGVkLXByaXZhdGUta2V5cy5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDI5ICswLDAgQEAKLUZyb20gMWQ1OWJiMWY2NThiYWI4ZGU5MzFkMTE1OTU5ZmNi MGZlOTNkMjdmYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFpvbHRhbiBGcmlkcmlj aCA8emZyaWRyaWNAcmVkaGF0LmNvbT4KLURhdGU6IFdlZCwgMTYgQXByIDIwMjUgMTU6MTE6NTkg KzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA0NS81NF0gUHJvdmlkZSBiZXR0ZXIgZXJyb3IgZm9yIG5v bi1zdXBwb3J0ZWQgcHJpdmF0ZSBrZXlzCi0KLVNpZ25lZC1vZmYtYnk6IFpvbHRhbiBGcmlkcmlj aCA8emZyaWRyaWNAcmVkaGF0LmNvbT4KLQotIyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzaC9v cGVuc3NoLXBvcnRhYmxlL3B1bGwvNTY0Ci0tLS0KLSBzc2hrZXkuYyB8IDMgKysrCi0gMSBmaWxl IGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3Noa2V5LmMgYi9zc2hr ZXkuYwotaW5kZXggODJlNTU1MDlkLi41MjI1ZWFiZjIgMTAwNjQ0Ci0tLS0gYS9zc2hrZXkuYwot KysrIGIvc3Noa2V5LmMKLUBAIC0zNTU0LDYgKzM1NTQsOSBAQCB0cmFuc2xhdGVfbGliY3J5cHRv X2Vycm9yKHVuc2lnbmVkIGxvbmcgcGVtX2VycikKLSAJCQlyZXR1cm4gU1NIX0VSUl9MSUJDUllQ VE9fRVJST1I7Ci0gCQl9Ci0gCWNhc2UgRVJSX0xJQl9BU04xOgotKyNpZmRlZiBFUlJfTElCX09T U0xfREVDT0RFUgotKwljYXNlIEVSUl9MSUJfT1NTTF9ERUNPREVSOgotKyNlbmRpZgotIAkJcmV0 dXJuIFNTSF9FUlJfSU5WQUxJRF9GT1JNQVQ7Ci0gCX0KLSAJcmV0dXJuIFNTSF9FUlJfTElCQ1JZ UFRPX0VSUk9SOwotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAwNDYtSWdub3JlLWJhZC1o b3N0a2V5cy1pbi1rbm93bl9ob3N0cy1maWxlLnBhdGNoIGIvMDA0Ni1JZ25vcmUtYmFkLWhvc3Rr ZXlzLWluLWtub3duX2hvc3RzLWZpbGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDI0ODVlOTUuLjAwMDAwMDAKLS0tIGEvMDA0Ni1JZ25vcmUtYmFkLWhvc3RrZXlzLWluLWtu b3duX2hvc3RzLWZpbGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi1Gcm9t IGRlZjQ0MjE0NmJiZmUxMTE2Y2E1MWMwYjgxYTJlZWJjMTNhODZlZWIgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCi1Gcm9tOiBab2x0YW4gRnJpZHJpY2ggPHpmcmlkcmljQHJlZGhhdC5jb20+Ci1E YXRlOiBNb24sIDUgTWF5IDIwMjUgMTE6NTI6MjUgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA0Ni81 NF0gSWdub3JlIGJhZCBob3N0a2V5cyBpbiBrbm93bl9ob3N0cyBmaWxlCi0KLVNpZ25lZC1vZmYt Ynk6IFpvbHRhbiBGcmlkcmljaCA8emZyaWRyaWNAcmVkaGF0LmNvbT4KLQotIyBodHRwczovL2dp dGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlL3B1bGwvNTY3Ci0tLS0KLSBob3N0Zmls ZS5jIHwgMTUgKysrKysrKysrKysrKysrCi0gaG9zdGZpbGUuaCB8ICAxICsKLSBzc2guYyAgICAg IHwgIDIgKysKLSAzIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdp dCBhL2hvc3RmaWxlLmMgYi9ob3N0ZmlsZS5jCi1pbmRleCAwMzNiMjkxMDQuLjQ1MTdhYTA4MCAx MDA2NDQKLS0tLSBhL2hvc3RmaWxlLmMKLSsrKyBiL2hvc3RmaWxlLmMKLUBAIC02Myw2ICs2Mywx NCBAQAotICNpbmNsdWRlICJobWFjLmgiCi0gI2luY2x1ZGUgInNzaGJ1Zi5oIgotIAotK3N0YXRp YyBpbnQgcmVxdWlyZWRfcnNhX3NpemUgPSBTU0hfUlNBX01JTklNVU1fTU9EVUxVU19TSVpFOwot KwotK3ZvaWQKLStob3N0ZmlsZV9zZXRfbWluaW11bV9yc2Ffc2l6ZShpbnQgc2l6ZSkKLSt7Ci0r CXJlcXVpcmVkX3JzYV9zaXplID0gc2l6ZTsKLSt9Ci0rCi0gLyogWFhYIGhtYWMgaXMgdG9vIGVh c3kgdG8gZGljdGlvbmFyeSBhdHRhY2s7IHVzZSBiY3J5cHQ/ICovCi0gCi0gc3RhdGljIGludAot QEAgLTIzMyw2ICsyNDEsNyBAQCByZWNvcmRfaG9zdGtleShzdHJ1Y3QgaG9zdGtleV9mb3JlYWNo X2xpbmUgKmwsIHZvaWQgKl9jdHgpCi0gCXN0cnVjdCBsb2FkX2NhbGxiYWNrX2N0eCAqY3R4ID0g KHN0cnVjdCBsb2FkX2NhbGxiYWNrX2N0eCAqKV9jdHg7Ci0gCXN0cnVjdCBob3N0a2V5cyAqaG9z dGtleXMgPSBjdHgtPmhvc3RrZXlzOwotIAlzdHJ1Y3QgaG9zdGtleV9lbnRyeSAqdG1wOwotKwlp bnQgciA9IDA7Ci0gCi0gCWlmIChsLT5zdGF0dXMgPT0gSEtGX1NUQVRVU19JTlZBTElEKSB7Ci0g CQkvKiBYWFggbWFrZSB0aGlzIHZlcmJvc2UoKSBpbiB0aGUgZnV0dXJlICovCi1AQCAtMjQxLDYg KzI1MCwxMiBAQCByZWNvcmRfaG9zdGtleShzdHJ1Y3QgaG9zdGtleV9mb3JlYWNoX2xpbmUgKmws IHZvaWQgKl9jdHgpCi0gCQlyZXR1cm4gMDsKLSAJfQotIAotKwlpZiAoKHIgPSBzc2hrZXlfY2hl Y2tfcnNhX2xlbmd0aChsLT5rZXksIHJlcXVpcmVkX3JzYV9zaXplKSkgIT0gMCkgewotKwkJZGVi dWcyX2YoIiVzOiVsZDogaWdub3JpbmcgaG9zdGtleTogJXMiLAotKwkJICAgIGwtPnBhdGgsIGwt PmxpbmVudW0sIHNzaF9lcnIocikpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSAJZGVidWczX2Yo ImZvdW5kICVza2V5IHR5cGUgJXMgaW4gZmlsZSAlczolbHUiLAotIAkgICAgbC0+bWFya2VyID09 IE1SS19OT05FID8gIiIgOgotIAkgICAgKGwtPm1hcmtlciA9PSBNUktfQ0EgPyAiY2EgIiA6ICJy ZXZva2VkICIpLAotZGlmZiAtLWdpdCBhL2hvc3RmaWxlLmggYi9ob3N0ZmlsZS5oCi1pbmRleCBh MjRhNGUzMjkuLjBlOWIxYTE5YSAxMDA2NDQKLS0tLSBhL2hvc3RmaWxlLmgKLSsrKyBiL2hvc3Rm aWxlLmgKLUBAIC0xMTksNSArMTE5LDYgQEAgaW50IGhvc3RrZXlzX2ZvcmVhY2hfZmlsZShjb25z dCBjaGFyICpwYXRoLCBGSUxFICpmLAotICAgICBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFy ICppcCwgdV9pbnQgb3B0aW9ucywgdV9pbnQgbm90ZSk7Ci0gCi0gdm9pZCBob3N0ZmlsZV9jcmVh dGVfdXNlcl9zc2hfZGlyKGNvbnN0IGNoYXIgKiwgaW50KTsKLSt2b2lkIGhvc3RmaWxlX3NldF9t aW5pbXVtX3JzYV9zaXplKGludCk7Ci0gCi0gI2VuZGlmCi1kaWZmIC0tZ2l0IGEvc3NoLmMgYi9z c2guYwotaW5kZXggZTdiZGJhMzI3Li40YTE3YzBhN2QgMTAwNjQ0Ci0tLS0gYS9zc2guYwotKysr IGIvc3NoLmMKLUBAIC05Nyw2ICs5Nyw3IEBACi0gI2luY2x1ZGUgInZlcnNpb24uaCIKLSAjaW5j bHVkZSAic3NoZXJyLmgiCi0gI2luY2x1ZGUgInV0ZjguaCIKLSsjaW5jbHVkZSAiaG9zdGZpbGUu aCIKLSAKLSAjaWZkZWYgRU5BQkxFX1BLQ1MxMQotICNpbmNsdWRlICJzc2gtcGtjczExLmgiCi1A QCAtMTM3NSw2ICsxMzc2LDcgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKLSAJCQlvcHRpb25z LnVwZGF0ZV9ob3N0a2V5cyA9IDA7Ci0gCQl9Ci0gCX0KLSsJaG9zdGZpbGVfc2V0X21pbmltdW1f cnNhX3NpemUob3B0aW9ucy5yZXF1aXJlZF9yc2Ffc2l6ZSk7Ci0gCWlmIChvcHRpb25zLmNvbm5l Y3Rpb25fYXR0ZW1wdHMgPD0gMCkKLSAJCWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiBDb25uZWN0 aW9uQXR0ZW1wdHMiKTsKLSAKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDQ2LXN1cHBv cnQtYXV0aGVudGljYXRpb24taW5kaWNhdG9ycy1pbi1HU1NBUEkucGF0Y2ggYi8wMDQ2LXN1cHBv cnQtYXV0aGVudGljYXRpb24taW5kaWNhdG9ycy1pbi1HU1NBUEkucGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkNDYwYgotLS0gL2Rldi9udWxsCisrKyBiLzAwNDYt c3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdTU0FQSS5wYXRjaApAQCAtMCww ICsxLDQ1OCBAQAorRnJvbSA1MzQ4ZmY0ZjRjNTlkYWM2NzdiODM0OGIxMjEzYzZlZjFlNTMwZTMx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRt aXRAZ21haWwuY29tPgorRGF0ZTogU3VuLCAxMiBBcHIgMjAyNiAxMjoyMzo1MSArMDIwMAorU3Vi amVjdDogW1BBVENIIDQ2LzUzXSBzdXBwb3J0IGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMgaW4g R1NTQVBJCisKK2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5zc2gtcG9ydGFibGUvcHVs bC81MDAKKworQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25uZXQgNC41IDxub3JlcGx5QGFudGhy b3BpYy5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgfCAgIDEgKworIGdzcy1zZXJ2LWtyYjUu YyB8ICA4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIGdzcy1zZXJ2 LmMgICAgICB8IDExMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0KKyBzZXJ2Y29uZi5jICAgICAgfCAgMTEgKysrKysKKyBzZXJ2Y29uZi5oICAgICAgfCAg IDYgKystCisgc3NoLWdzcy5oICAgICAgIHwgICA3ICsrKworIHNzaGRfY29uZmlnLjUgICB8ICA0 NiArKysrKysrKysrKysrKysrKysrKworIDcgZmlsZXMgY2hhbmdlZCwgMjU4IGluc2VydGlvbnMo KyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmln dXJlLmFjCitpbmRleCAzOTRhY2MzZDguLmQ2Mjc0MzI4YiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3Vy ZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTA1OSw2ICs1MDU5LDcgQEAgQUNfQVJHX1dJ VEgoW2tlcmJlcm9zNV0sCisgCQlBQ19DSEVDS19IRUFERVJTKFtnc3NhcGkuaCBnc3NhcGkvZ3Nz YXBpLmhdKQorIAkJQUNfQ0hFQ0tfSEVBREVSUyhbZ3NzYXBpX2tyYjUuaCBnc3NhcGkvZ3NzYXBp X2tyYjUuaF0pCisgCQlBQ19DSEVDS19IRUFERVJTKFtnc3NhcGlfZ2VuZXJpYy5oIGdzc2FwaS9n c3NhcGlfZ2VuZXJpYy5oXSkKKysJCUFDX0NIRUNLX0hFQURFUlMoW2dzc2FwaV9leHQuaCBnc3Nh cGkvZ3NzYXBpX2V4dC5oXSkKKyAKKyAJCUFDX1NFQVJDSF9MSUJTKFtrX2hhc2Fmc10sIFtrYWZz XSwgW0FDX0RFRklORShbVVNFX0FGU10sIFsxXSwKKyAJCQlbRGVmaW5lIHRoaXMgaWYgeW91IHdh bnQgdG8gdXNlIGxpYmthZnMnIEFGUyBzdXBwb3J0XSldKQorZGlmZiAtLWdpdCBhL2dzcy1zZXJ2 LWtyYjUuYyBiL2dzcy1zZXJ2LWtyYjUuYworaW5kZXggNzIzNTA5NDA5Li5mYzdjYWJjMDkgMTAw NjQ0CistLS0gYS9nc3Mtc2Vydi1rcmI1LmMKKysrKyBiL2dzcy1zZXJ2LWtyYjUuYworQEAgLTQz LDYgKzQzLDcgQEAKKyAjaW5jbHVkZSAibG9nLmgiCisgI2luY2x1ZGUgIm1pc2MuaCIKKyAjaW5j bHVkZSAic2VydmNvbmYuaCIKKysjaW5jbHVkZSAibWF0Y2guaCIKKyAKKyAjaW5jbHVkZSAic3No LWdzcy5oIgorIAorQEAgLTg3LDYgKzg4LDMzIEBAIHNzaF9nc3NhcGlfa3JiNV9pbml0KHZvaWQp CisgCXJldHVybiAxOworIH0KKyAKKysvKiBDaGVjayBpZiBhbnkgb2YgdGhlIGluZGljYXRvcnMg aW4gdGhlIEtlcmJlcm9zIHRpY2tldCBtYXRjaAorKyAqIG9uZSBvZiBpbmRpY2F0b3JzIGluIHRo ZSBsaXN0IG9mIGFsbG93ZWQvZGVuaWVkIHJ1bGVzLgorKyAqIEluIGNhc2Ugb2YgdGhlIG1hdGNo LCBhcHBseSB0aGUgZGVjaXNpb24gZnJvbSB0aGUgcnVsZS4KKysgKiBJbiBjYXNlIG9mIG5vIGlu ZGljYXRvciBmcm9tIHRoZSB0aWNrZXQgbWF0Y2hpbmcgdGhlIHJ1bGUsIGRlbnkKKysgKi8KKysK KytzdGF0aWMgaW50Cisrc3NoX2dzc2FwaV9jaGVja19pbmRpY2F0b3JzKHNzaF9nc3NhcGlfY2xp ZW50ICpjbGllbnQsIGludCAqbWF0Y2hlZCkKKyt7CisrCWludCByZXQ7CisrCXVfaW50IGk7Cisr CSptYXRjaGVkID0gLTE7CisrCisrCS8qIENoZWNrIGluZGljYXRvcnMgKi8KKysJZm9yIChpID0g MDsgY2xpZW50LT5pbmRpY2F0b3JzW2ldICE9IE5VTEw7IGkrKykgeworKwkJcmV0ID0gbWF0Y2hf cGF0dGVybl9saXN0KGNsaWVudC0+aW5kaWNhdG9yc1tpXSwKKysJCQkJCSBvcHRpb25zLmdzc19p bmRpY2F0b3JzLCAxKTsKKysJCS8qIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIG1hdGNoICovCisrCQlp ZiAocmV0ICE9IDApIHsKKysJCQkqbWF0Y2hlZCA9IGk7CisrCQkJcmV0dXJuIHJldDsKKysJCX0K KysJfQorKwkvKiBObyBydWxlIG1hdGNoZWQgKi8KKysJcmV0dXJuIDA7CisrfQorKworIC8qIENo ZWNrIGlmIHRoaXMgdXNlciBpcyBPSyB0byBsb2dpbi4gVGhpcyBvbmx5IHdvcmtzIHdpdGgga3Ji NSAtIG90aGVyCisgICogR1NTQVBJIG1lY2hhbmlzbXMgd2lsbCBuZWVkIHRoZWlyIG93bi4KKyAg KiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgaXMgT0sgdG8gbG9nIGluLCBvdGhlcndpc2UgcmV0 dXJucyAwCitAQCAtMTkzLDE1ICsyMjEsMTUgQEAgc3RhdGljIGludAorIHNzaF9nc3NhcGlfa3Ji NV91c2Vyb2soc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSkKKyB7CisgCWty YjVfcHJpbmNpcGFsIHByaW5jOworLQlpbnQgcmV0dmFsOworKwlpbnQgcmV0dmFsLCBtYXRjaGVk LCBzdWNjZXNzOworIAljb25zdCBjaGFyICplcnJtc2c7CisgCWludCBrNWxvZ2luX2V4aXN0czsK KyAKKyAJaWYgKHNzaF9nc3NhcGlfa3JiNV9pbml0KCkgPT0gMCkKKyAJCXJldHVybiAwOworIAor LQlpZiAoKHJldHZhbCA9IGtyYjVfcGFyc2VfbmFtZShrcmJfY29udGV4dCwgY2xpZW50LT5leHBv cnRlZG5hbWUudmFsdWUsCistCSAgICAmcHJpbmMpKSkgeworKwlyZXR2YWwgPSBrcmI1X3BhcnNl X25hbWUoa3JiX2NvbnRleHQsIGNsaWVudC0+ZXhwb3J0ZWRuYW1lLnZhbHVlLCAmcHJpbmMpOwor KwlpZiAocmV0dmFsKSB7CisgCQllcnJtc2cgPSBrcmI1X2dldF9lcnJvcl9tZXNzYWdlKGtyYl9j b250ZXh0LCByZXR2YWwpOworIAkJbG9naXQoImtyYjVfcGFyc2VfbmFtZSgpOiAlLjEwMHMiLCBl cnJtc2cpOworIAkJa3JiNV9mcmVlX2Vycm9yX21lc3NhZ2Uoa3JiX2NvbnRleHQsIGVycm1zZyk7 CitAQCAtMjE2LDE3ICsyNDQsNjAgQEAgc3NoX2dzc2FwaV9rcmI1X3VzZXJvayhzc2hfZ3NzYXBp X2NsaWVudCAqY2xpZW50LCBjaGFyICpuYW1lKQorIAlpZiAoazVsb2dpbl9leGlzdHMgJiYKKyAJ ICAgIHNzaF9rcmI1X2t1c2Vyb2soa3JiX2NvbnRleHQsIHByaW5jLCBuYW1lLCBrNWxvZ2luX2V4 aXN0cykpIHsKKyAJCXJldHZhbCA9IDE7CistCQlsb2dpdCgiQXV0aG9yaXplZCB0byAlcywga3Ji NSBwcmluY2lwYWwgJXMgKGtyYjVfa3VzZXJvaykiLAorLQkJICAgIG5hbWUsIChjaGFyICopY2xp ZW50LT5kaXNwbGF5bmFtZS52YWx1ZSk7CisrCQllcnJtc2cgPSAia3JiNV9rdXNlcm9rIjsKKyAJ fSBlbHNlIGlmIChzc2hfZ3NzYXBpX2tyYjVfY21kb2socHJpbmMsIGNsaWVudC0+ZXhwb3J0ZWRu YW1lLnZhbHVlLAorIAkJbmFtZSwgazVsb2dpbl9leGlzdHMpKSB7CisgCQlyZXR2YWwgPSAxOwor LQkJbG9naXQoIkF1dGhvcml6ZWQgdG8gJXMsIGtyYjUgcHJpbmNpcGFsICVzICIKKy0JCSAgICAi KHNzaF9nc3NhcGlfa3JiNV9jbWRvaykiLAorLQkJICAgIG5hbWUsIChjaGFyICopY2xpZW50LT5k aXNwbGF5bmFtZS52YWx1ZSk7CistCX0gZWxzZQorKwkJZXJybXNnID0gInNzaF9nc3NhcGlfa3Ji NV9jbWRvayI7CisrCX0gZWxzZSB7CisgCQlyZXR2YWwgPSAwOworKwkJZ290byBvdXQ7CisrCX0K KyAKKysJLyogQXQgdGhpcyBwb2ludCB3ZSBhcmUgZ29vZCBpZiBubyBpbmRpY2F0b3JzIHdlcmUg ZGVmaW5lZCAqLworKwlpZiAob3B0aW9ucy5nc3NfaW5kaWNhdG9ycyA9PSBOVUxMKSB7CisrCQly ZXR2YWwgPSAxOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJLyogQXQgdGhpcyBwb2ludCB3ZSBo YXZlIGluZGljYXRvcnMgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiwKKysJICogaWYgY2xp ZW50dCBkaWQgbm90IHByb3ZpZGUgYW55IGluZGljYXRvcnMsIHdlIHJlamVjdCAqLworKwlpZiAo IWNsaWVudC0+aW5kaWNhdG9ycykgeworKwkJcmV0dmFsID0gMDsKKysJCWxvZ2l0KCJHU1NBUEkg YXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBlbmZvcmNlZCAiCisrCQkgICAgICAiYnV0IGluZGlj YXRvcnMgbm90IHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuICIKKysJCSAgICAgICJrcmI1IHByaW5j aXBhbCAlcyBkZW5pZWQiLAorKwkJICAgICAgKGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZh bHVlKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCS8qIEF0IHRoaXMgcG9pbnQgdGhlIGNvbmZp Z3VyYXRpb24gZW5mb3JjZXMgcHJlc2VuY2Ugb2YgaW5kaWNhdG9ycworKwkgKiBjaGVjayB0aGUg bWF0Y2ggKi8KKysJbWF0Y2hlZCA9IC0xOworKwlzdWNjZXNzID0gc3NoX2dzc2FwaV9jaGVja19p bmRpY2F0b3JzKGNsaWVudCwgJm1hdGNoZWQpOworKworKwlzd2l0Y2ggKHN1Y2Nlc3MpIHsKKysJ Y2FzZSAxOgorKwkJbG9naXQoIlByb3ZpZGVkIGluZGljYXRvciAlcyBhbGxvd2VkIGJ5IHRoZSBj b25maWd1cmF0aW9uIiwKKysJCSAgICAgIGNsaWVudC0+aW5kaWNhdG9yc1ttYXRjaGVkXSk7Cisr CQlyZXR2YWwgPSAxOworKwkJYnJlYWs7CisrCWNhc2UgLTE6CisrCQlsb2dpdCgiUHJvdmlkZWQg aW5kaWNhdG9yICVzIHJlamVjdGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIiwKKysJCSAgICAgIGNs aWVudC0+aW5kaWNhdG9yc1ttYXRjaGVkXSk7CisrCQlyZXR2YWwgPSAwOworKwkJYnJlYWs7Cisr CWRlZmF1bHQ6CisrCQlsb2dpdCgiUHJvdmlkZWQgaW5kaWNhdG9ycyBkbyBub3QgbWF0Y2ggdGhl IGNvbmZpZ3VyYXRpb24iKTsKKysJCXJldHZhbCA9IDA7CisrCQlicmVhazsKKysJfQorKworK291 dDoKKysJaWYgKHJldHZhbCA9PSAxKSB7CisrCQlsb2dpdCgiQXV0aG9yaXplZCB0byAlcywga3Ji NSBwcmluY2lwYWwgJXMgKCVzKSIsCisrCQkgICAgICBuYW1lLCAoY2hhciAqKWNsaWVudC0+ZGlz cGxheW5hbWUudmFsdWUsIGVycm1zZyk7CisrCX0KKyAJa3JiNV9mcmVlX3ByaW5jaXBhbChrcmJf Y29udGV4dCwgcHJpbmMpOworIAlyZXR1cm4gcmV0dmFsOworIH0KK2RpZmYgLS1naXQgYS9nc3Mt c2Vydi5jIGIvZ3NzLXNlcnYuYworaW5kZXggNmViN2QyMTYzLi4yMzdhM2M0MGEgMTAwNjQ0Cist LS0gYS9nc3Mtc2Vydi5jCisrKysgYi9nc3Mtc2Vydi5jCitAQCAtNTUsNyArNTUsNyBAQCBleHRl cm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOworIAorIHN0YXRpYyBzc2hfZ3NzYXBpX2NsaWVudCBn c3NhcGlfY2xpZW50ID0KKyAgICAgeyBHU1NfQ19FTVBUWV9CVUZGRVIsIEdTU19DX0VNUFRZX0JV RkZFUiwgR1NTX0NfTk9fQ1JFREVOVElBTCwKKy0gICAgR1NTX0NfTk9fTkFNRSwgTlVMTCwge05V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCAwLCAwfTsKKysgICAgR1NTX0NfTk9fTkFNRSwg TlVMTCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCAwLCAwLCBOVUxMfTsKKyAKKyBz c2hfZ3NzYXBpX21lY2ggZ3NzYXBpX251bGxfbWVjaCA9CisgICAgIHsgTlVMTCwgTlVMTCwgezAs IE5VTEx9LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfTsKK0BAIC0yOTcsNiArMjk3LDk5 IEBAIHNzaF9nc3NhcGlfcGFyc2VfZW5hbWUoR3NzY3R4dCAqY3R4LCBnc3NfYnVmZmVyX3QgZW5h bWUsIGdzc19idWZmZXJfdCBuYW1lKQorIAlyZXR1cm4gR1NTX1NfQ09NUExFVEU7CisgfQorIAor KworKy8qIEV4dHJhY3QgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBmcm9tIHRoZSBLZXJiZXJv cyB0aWNrZXQuIEF1dGhlbnRpY2F0aW9uCisrICogaW5kaWNhdG9ycyBhcmUgR1NTQVBJIG5hbWUg YXR0cmlidXRlcyBmb3IgdGhlIG5hbWUgImF1dGgtaW5kaWNhdG9ycyIuCisrICogTXVsdGlwbGUg aW5kaWNhdG9ycyBtaWdodCBiZSBwcmVzZW50IGluIHRoZSB0aWNrZXQuCisrICogRWFjaCBpbmRp Y2F0b3IgaXMgYW4gdXRmOCBzdHJpbmcuICovCisrCisrI2RlZmluZSBBVVRIX0lORElDQVRPUlNf VEFHICJhdXRoLWluZGljYXRvcnMiCisrI2RlZmluZSBTU0hfR1NTQVBJX01BWF9JTkRJQ0FUT1JT IDY0CisrCisrLyogUHJpdmlsZWdlZCAoY2FsbGVkIGZyb20gYWNjZXB0X3NlY3VyZV9jdHgpICov Cisrc3RhdGljIE9NX3VpbnQzMgorK3NzaF9nc3NhcGlfZ2V0aW5kaWNhdG9ycyhHc3NjdHh0ICpj dHgsIGdzc19uYW1lX3QgZ3NzX25hbWUsIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCisrewor Kwlnc3NfYnVmZmVyX3NldF90IGF0dHJzID0gR1NTX0NfTk9fQlVGRkVSX1NFVDsKKysJZ3NzX2J1 ZmZlcl9kZXNjIHZhbHVlID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwlnc3NfYnVmZmVyX2Rlc2Mg ZGlzcGxheV92YWx1ZSA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJaW50IGlzX21lY2huYW1lLCBh dXRoZW50aWNhdGVkLCBjb21wbGV0ZSwgbW9yZTsKKysJc2l6ZV90IGNvdW50LCBpOworKworKwkv KiBhbHdheXMgaW5pdGlhbGl6ZSBjbGllbnQtPmluZGljYXRvcnMgKi8KKysJY2xpZW50LT5pbmRp Y2F0b3JzID0gTlVMTDsKKysKKysJY3R4LT5tYWpvciA9IGdzc19pbnF1aXJlX25hbWUoJmN0eC0+ bWlub3IsIGdzc19uYW1lLAorKwkJCQkgICAgICAmaXNfbWVjaG5hbWUsIE5VTEwsICZhdHRycyk7 CisrCWlmIChjdHgtPm1ham9yICE9IEdTU19TX0NPTVBMRVRFKQorKwkJcmV0dXJuIGN0eC0+bWFq b3I7CisrCisrCWlmIChhdHRycyA9PSBHU1NfQ19OT19CVUZGRVJfU0VUKSB7CisrCQkvKiBubyBp bmRpY2F0b3JzIGluIHRoZSB0aWNrZXQgKi8KKysJCXJldHVybiBHU1NfU19DT01QTEVURTsKKysJ fQorKworKwkvKiBjbGllbnQtPmluZGljYXRvcnMgaXMgTlVMTCB0ZXJtaW5hdGVkICovCisrCWNv dW50ID0gMDsKKysJY2xpZW50LT5pbmRpY2F0b3JzID0geGNhbGxvYyhjb3VudCArIDEsIHNpemVv ZihjaGFyICopKTsKKysKKysJZm9yIChpID0gMDsgaSA8IGF0dHJzLT5jb3VudDsgaSsrKSB7Cisr CQlhdXRoZW50aWNhdGVkID0gMDsKKysJCWNvbXBsZXRlID0gMDsKKysJCW1vcmUgPSAtMTsKKysK KysJCS8qIHNraXAgYW55dGhpbmcgYnV0IGF1dGgtaW5kaWNhdG9ycyAqLworKwkJaWYgKCgoc2l6 ZW9mKEFVVEhfSU5ESUNBVE9SU19UQUcpIC0gMSkgIT0gYXR0cnMtPmVsZW1lbnRzW2ldLmxlbmd0 aCkgfHwKKysJCSAgICBtZW1jbXAoQVVUSF9JTkRJQ0FUT1JTX1RBRywgYXR0cnMtPmVsZW1lbnRz W2ldLnZhbHVlLAorKwkJCSAgIHNpemVvZihBVVRIX0lORElDQVRPUlNfVEFHKSAtIDEpICE9IDAp CisrCQkJY29udGludWU7CisrCisrCQkvKiByZXRyaWV2ZSBhbGwgaW5kaWNhdG9ycyAqLworKwkJ d2hpbGUgKG1vcmUgIT0gMCkgeworKwkJCXZhbHVlLnZhbHVlID0gTlVMTDsKKysJCQlkaXNwbGF5 X3ZhbHVlLnZhbHVlID0gTlVMTDsKKysKKysJCQljdHgtPm1ham9yID0gZ3NzX2dldF9uYW1lX2F0 dHJpYnV0ZSgmY3R4LT5taW5vciwgZ3NzX25hbWUsCisrCQkJCQkJCSAgICAmYXR0cnMtPmVsZW1l bnRzW2ldLAorKwkJCQkJCQkgICAgJmF1dGhlbnRpY2F0ZWQsICZjb21wbGV0ZSwKKysJCQkJCQkJ ICAgICZ2YWx1ZSwgJmRpc3BsYXlfdmFsdWUsICZtb3JlKTsKKysJCQlpZiAoY3R4LT5tYWpvciAh PSBHU1NfU19DT01QTEVURSkKKysJCQkJZ290byBvdXQ7CisrCisrCQkJaWYgKHZhbHVlLnZhbHVl ID09IE5VTEwgfHwgIWF1dGhlbnRpY2F0ZWQpCisrCQkJCWNvbnRpbnVlOworKworKwkJCWlmIChj b3VudCA+PSBTU0hfR1NTQVBJX01BWF9JTkRJQ0FUT1JTKSB7CisrCQkJCWxvZ2l0KCJzc2hfZ3Nz YXBpX2dldGluZGljYXRvcnM6IgorKwkJCQkgICAgICAiIHRvbyBtYW55IGluZGljYXRvcnMsIHRy dW5jYXRpbmcgYXQgJWQiLAorKwkJCQkgICAgICBTU0hfR1NTQVBJX01BWF9JTkRJQ0FUT1JTKTsK KysJCQkJZ290byBvdXQ7CisrCQkJfQorKworKwkJCWNsaWVudC0+aW5kaWNhdG9yc1tjb3VudF0g PSB4bWFsbG9jKHZhbHVlLmxlbmd0aCArIDEpOworKwkJCW1lbWNweShjbGllbnQtPmluZGljYXRv cnNbY291bnRdLCB2YWx1ZS52YWx1ZSwgdmFsdWUubGVuZ3RoKTsKKysJCQljbGllbnQtPmluZGlj YXRvcnNbY291bnRdW3ZhbHVlLmxlbmd0aF0gPSAnXDAnOworKwkJCWNvdW50Kys7CisrCisrCQkJ LyogYWRkIE5VTEwgdGVybWluYXRvciAqLworKwkJCWNsaWVudC0+aW5kaWNhdG9ycyA9IHhyZWNh bGxvY2FycmF5KGNsaWVudC0+aW5kaWNhdG9ycywgY291bnQsCisrCQkJCQkJCSAgICBjb3VudCAr IDEsIHNpemVvZihjaGFyICopKTsKKysJCX0KKysJfQorKworK291dDoKKysJaWYgKGN0eC0+bWFq b3IgIT0gR1NTX1NfQ09NUExFVEUgJiYgY2xpZW50LT5pbmRpY2F0b3JzICE9IE5VTEwpIHsKKysJ CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorKwkJCWZyZWUoY2xpZW50LT5pbmRpY2F0b3Jz W2ldKTsKKysJCWZyZWUoY2xpZW50LT5pbmRpY2F0b3JzKTsKKysJCWNsaWVudC0+aW5kaWNhdG9y cyA9IE5VTEw7CisrCX0KKysJZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmdmFsdWUp OworKwlnc3NfcmVsZWFzZV9idWZmZXIoJmN0eC0+bWlub3IsICZkaXNwbGF5X3ZhbHVlKTsKKysJ Z3NzX3JlbGVhc2VfYnVmZmVyX3NldCgmY3R4LT5taW5vciwgJmF0dHJzKTsKKysJcmV0dXJuIGN0 eC0+bWFqb3I7CisrfQorKworIC8qIEV4dHJhY3QgdGhlIGNsaWVudCBkZXRhaWxzIGZyb20gYSBn aXZlbiBjb250ZXh0LiBUaGlzIGNhbiBvbmx5IHJlbGlhYmx5CisgICogYmUgY2FsbGVkIG9uY2Ug Zm9yIGEgY29udGV4dCAqLworIAorQEAgLTM4Niw2ICs0NzksMTIgQEAgc3NoX2dzc2FwaV9nZXRj bGllbnQoR3NzY3R4dCAqY3R4LCBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQorIAl9CisgCisg CWdzc19yZWxlYXNlX2J1ZmZlcigmY3R4LT5taW5vciwgJmVuYW1lKTsKKysJLyogUmV0cmlldmUg YXV0aGVudGljYXRpb24gaW5kaWNhdG9ycywgaWYgdGhleSBleGlzdCAqLworKwlpZiAoKGN0eC0+ bWFqb3IgPSBzc2hfZ3NzYXBpX2dldGluZGljYXRvcnMoY3R4LAorKwkgICAgY3R4LT5jbGllbnQs IGNsaWVudCkpKSB7CisrCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7CisrCQlyZXR1cm4gKGN0eC0+ bWFqb3IpOworKwl9CisgCisgCS8qIFdlIGNhbid0IGNvcHkgdGhpcyBzdHJ1Y3R1cmUsIHNvIHdl IGp1c3QgbW92ZSB0aGUgcG9pbnRlciB0byBpdCAqLworIAljbGllbnQtPmNyZWRzID0gY3R4LT5j bGllbnRfY3JlZHM7CitAQCAtNDUzLDYgKzU1Miw3IEBAIGludAorIHNzaF9nc3NhcGlfdXNlcm9r KGNoYXIgKnVzZXIsIHN0cnVjdCBwYXNzd2QgKnB3LCBpbnQga2V4KQorIHsKKyAJT01fdWludDMy IGxtaW47CisrCXNpemVfdCBpOworIAorIAkodm9pZCkga2V4OyAvKiB1c2VkIGluIHByaXZpbGVn ZSBzZXBhcmF0aW9uICovCisgCitAQCAtNDcxLDggKzU3MSwxNCBAQCBzc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICp1c2VyLCBzdHJ1Y3QgcGFzc3dkICpwdywgaW50IGtleCkKKyAJCQlnc3NfcmVsZWFz ZV9idWZmZXIoJmxtaW4sICZnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1lKTsKKyAJCQlnc3NfcmVs ZWFzZV9idWZmZXIoJmxtaW4sICZnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZSk7CisgCQkJZ3Nz X3JlbGVhc2VfY3JlZCgmbG1pbiwgJmdzc2FwaV9jbGllbnQuY3JlZHMpOworLQkJCWV4cGxpY2l0 X2J6ZXJvKCZnc3NhcGlfY2xpZW50LAorLQkJCSAgICBzaXplb2Yoc3NoX2dzc2FwaV9jbGllbnQp KTsKKysKKysJCQlpZiAoZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzICE9IE5VTEwpIHsKKysJCQkJ Zm9yIChpID0gMDsgZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzW2ldICE9IE5VTEw7IGkrKykKKysJ CQkJCWZyZWUoZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzW2ldKTsKKysJCQkJZnJlZShnc3NhcGlf Y2xpZW50LmluZGljYXRvcnMpOworKwkJCX0KKysKKysJCQlleHBsaWNpdF9iemVybygmZ3NzYXBp X2NsaWVudCwgc2l6ZW9mKHNzaF9nc3NhcGlfY2xpZW50KSk7CisgCQkJcmV0dXJuIDA7CisgCQl9 CisgCWVsc2UKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYworaW5kZXggODQ2 ZjVkMjEyLi5kOWNjY2MxN2MgMTAwNjQ0CistLS0gYS9zZXJ2Y29uZi5jCisrKysgYi9zZXJ2Y29u Zi5jCitAQCAtNDU2LDYgKzQ1Niw3IEBAIGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2 ZXJPcHRpb25zICpvcHRpb25zKQorIAlDTEVBUl9PTl9OT05FKG9wdGlvbnMtPnJvdXRpbmdfZG9t YWluKTsKKyAJQ0xFQVJfT05fTk9ORShvcHRpb25zLT5ob3N0X2tleV9hZ2VudCk7CisgCUNMRUFS X09OX05PTkUob3B0aW9ucy0+cGVyX3NvdXJjZV9wZW5hbHR5X2V4ZW1wdCk7CisrCUNMRUFSX09O X05PTkUob3B0aW9ucy0+Z3NzX2luZGljYXRvcnMpOworIAorIAlmb3IgKGkgPSAwOyBpIDwgb3B0 aW9ucy0+bnVtX2hvc3Rfa2V5X2ZpbGVzOyBpKyspCisgCQlDTEVBUl9PTl9OT05FKG9wdGlvbnMt Pmhvc3Rfa2V5X2ZpbGVzW2ldKTsKK0BAIC0xNDg4LDYgKzE0ODksMTUgQEAgcHJvY2Vzc19zZXJ2 ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwK KyAJCWlmICgqYWN0aXZlcCAmJiBvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPT0gTlVMTCkK KyAJCQlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSB4c3RyZHVwKGFyZyk7CisgCQlicmVh azsKKysKKysJY2FzZSBzR1NTQVBJSW5kaWNhdG9yczoKKysJCWFyZyA9IGFyZ3ZfbmV4dCgmYWMs ICZhdik7CisrCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCisrCQkJZmF0YWwoIiVzIGxpbmUg JWQ6ICVzIG1pc3NpbmcgYXJndW1lbnQuIiwKKysJCQkgICAgZmlsZW5hbWUsIGxpbmVudW0sIGtl eXdvcmQpOworKwkJaWYgKG9wdGlvbnMtPmdzc19pbmRpY2F0b3JzID09IE5VTEwpCisrCQkJb3B0 aW9ucy0+Z3NzX2luZGljYXRvcnMgPSB4c3RyZHVwKGFyZyk7CisrCQlicmVhazsKKyAjZW5kaWYg LyogR1NTQVBJICovCisgCisgCWNhc2Ugc1Bhc3N3b3JkQXV0aGVudGljYXRpb246CitAQCAtNDI3 NCw2ICs0Mjg0LDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykKKyAJZHVtcF9jZmdf Zm10aW50KHNHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrLCBvLT5nc3Nfc3RyaWN0X2FjY2VwdG9y KTsKKyAJZHVtcF9jZmdfZm10aW50KHNHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtleSwgby0+ Z3NzX3N0b3JlX3Jla2V5KTsKKyAJZHVtcF9jZmdfc3RyaW5nKHNHU1NBUElLZXhBbGdvcml0aG1z LCBvLT5nc3Nfa2V4X2FsZ29yaXRobXMpOworKwlkdW1wX2NmZ19zdHJpbmcoc0dTU0FQSUluZGlj YXRvcnMsIG8tPmdzc19pbmRpY2F0b3JzKTsKKyAjZW5kaWYKKyAJZHVtcF9jZmdfZm10aW50KHNQ YXNzd29yZEF1dGhlbnRpY2F0aW9uLCBvLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbik7CisgCWR1 bXBfY2ZnX2ZtdGludChzS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiwKK2RpZmYgLS1naXQg YS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAoraW5kZXggYzU1YjY0YzczLi44MWU2OTk2NTUgMTAw NjQ0CistLS0gYS9zZXJ2Y29uZi5oCisrKysgYi9zZXJ2Y29uZi5oCitAQCAtMzI2LDcgKzMyNiw4 IEBAIFNTSENPTkZfSU5URkxBRyhnc3Nfc3RyaWN0X2FjY2VwdG9yLCBHU1NBUElTdHJpY3RBY2Nl cHRvckNoZWNrLCBTU0hDRkdfR0xPQkFMLCAxCisgU1NIQ09ORl9JTlRGTEFHKGdzc19rZXlleCwg R1NTQVBJS2V5RXhjaGFuZ2UsIFNTSENGR19HTE9CQUwsIDAsIFNTSENGR19DT1BZX05PTkUpIFwK KyBTU0hDT05GX0lOVEZMQUcoZ3NzX3N0b3JlX3Jla2V5LCBHU1NBUElTdG9yZUNyZWRlbnRpYWxz T25SZWtleSwgU1NIQ0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorIFNTSENPTkZf U1RSSU5HKGdzc19rZXhfYWxnb3JpdGhtcywgR1NTQVBJS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dM T0JBTCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorLVNTSENPTkZfSU5URkxBRyhlbmFibGVfazV1c2Vy cywgR1NTQVBJRW5hYmxlazV1c2VycywgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFUQ0gp CisrU1NIQ09ORl9JTlRGTEFHKGVuYWJsZV9rNXVzZXJzLCBHU1NBUElFbmFibGVrNXVzZXJzLCBT U0hDRkdfQUxMLCAwLCBTU0hDRkdfQ09QWV9NQVRDSCkgXAorK1NTSENPTkZfU1RSSU5HKGdzc19p bmRpY2F0b3JzLCBHU1NBUElJbmRpY2F0b3JzLCBTU0hDRkdfQUxMLCBTU0hDRkdfQ09QWV9NQVRD SCkKKyAjZWxzZSAvKiBHU1NBUEkgKi8KKyAjZGVmaW5lIFNTSERfQ09ORklHX0VOVFJJRVNfR1NT IFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3NfYXV0aGVudGljYXRpb24sIEdTU0FQSUF1 dGhlbnRpY2F0aW9uLCBTU0hDRkdfQUxMKSBcCitAQCAtMzM2LDcgKzMzNyw4IEBAIFNTSENPTkZf VU5TVVBQT1JURURfSU5UKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0cmljdEFjY2VwdG9y Q2hlY2ssIFNTSENGR19HCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2tleWV4LCBHU1NB UElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCkgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5U KGdzc19zdG9yZV9yZWtleSwgR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXksIFNTSENGR19H TE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX1NUUklORyhnc3Nfa2V4X2FsZ29yaXRobXMs IEdTU0FQSUtleEFsZ29yaXRobXMsIFNTSENGR19HTE9CQUwpIFwKKy1TU0hDT05GX1VOU1VQUE9S VEVEX0lOVChlbmFibGVfazV1c2VycywgR1NTQVBJRW5hYmxlazV1c2VycywgU1NIQ0ZHX0FMTCkK KytTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChlbmFibGVfazV1c2VycywgR1NTQVBJRW5hYmxlazV1 c2VycywgU1NIQ0ZHX0FMTCkgXAorK1NTSENPTkZfVU5TVVBQT1JURURfU1RSSU5HKGdzc19pbmRp Y2F0b3JzLCBHU1NBUElJbmRpY2F0b3JzLCBTU0hDRkdfQUxMKQorICNlbmRpZiAvKiBHU1NBUEkg Ki8KKyAKKyAjZGVmaW5lIFNTSERfQ09ORklHX0VOVFJJRVMgXAorZGlmZiAtLWdpdCBhL3NzaC1n c3MuaCBiL3NzaC1nc3MuaAoraW5kZXggMzI5ZGM5ZGEwLi4xNTA2NzE5YTkgMTAwNjQ0CistLS0g YS9zc2gtZ3NzLmgKKysrKyBiL3NzaC1nc3MuaAorQEAgLTM0LDYgKzM0LDEyIEBACisgI2luY2x1 ZGUgPGdzc2FwaS9nc3NhcGkuaD4KKyAjZW5kaWYKKyAKKysjaWZkZWYgSEFWRV9HU1NBUElfRVhU X0gKKysjaW5jbHVkZSA8Z3NzYXBpX2V4dC5oPgorKyNlbGlmIGRlZmluZWQoSEFWRV9HU1NBUElf R1NTQVBJX0VYVF9IKQorKyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2V4dC5oPgorKyNlbmRpZgor KworICNpZmRlZiBLUkI1CisgIyBpZm5kZWYgSEVJTURBTAorICMgIGlmZGVmIEhBVkVfR1NTQVBJ X0dFTkVSSUNfSAorQEAgLTExMiw2ICsxMTgsNyBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCXNzaF9n c3NhcGlfY2NhY2hlIHN0b3JlOworIAlpbnQgdXNlZDsKKyAJaW50IHVwZGF0ZWQ7CisrCWNoYXIg KippbmRpY2F0b3JzOyAvKiBhdXRoIGluZGljYXRvcnMgKi8KKyB9IHNzaF9nc3NhcGlfY2xpZW50 OworIAorIHR5cGVkZWYgc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3QgeworZGlmZiAtLWdp dCBhL3NzaGRfY29uZmlnLjUgYi9zc2hkX2NvbmZpZy41CitpbmRleCBiNzI3NTc4OTUuLjJhOGYz YWJlYSAxMDA2NDQKKy0tLSBhL3NzaGRfY29uZmlnLjUKKysrKyBiL3NzaGRfY29uZmlnLjUKK0BA IC04MTEsNiArODExLDUyIEBAIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byBjb25uZWN0aW9u cyB1c2luZyBHU1NBUEkuCisgLlBwCisgVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGtleSBleGNoYW5n ZSBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCisgLlFxIHNzaCAtUSBHU1NB UElLZXhBbGdvcml0aG1zIC4KKysuSXQgQ20gR1NTQVBJSW5kaWNhdG9ycworK1NwZWNpZmllcyB3 aGV0aGVyIHRvIGFjY2VwdCBvciBkZW55IEdTU0FQSSBhdXRoZW50aWNhdGVkIGFjY2VzcyBpZiBL ZXJiZXJvcworK21lY2hhbmlzbSBpcyB1c2VkIGFuZCBLZXJiZXJvcyB0aWNrZXQgY29udGFpbnMg YSBwYXJ0aWN1bGFyIHNldCBvZgorK2F1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMuIFRoZSB2YWx1 ZXMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0CisrLkNtIFshXW5h bWUxLFshXW5hbWUyLC4uLiAuCisrV2hlbiBpbmRpY2F0b3IncyBuYW1lIGlzIHByZWZpeGVkIHdp dGggISwgdGhlIGF1dGhlbnRpY2F0aW9uIGluZGljYXRvciAnbmFtZScKKyt3aWxsIGRlbnkgYWNj ZXNzIHRvIHRoZSBzeXN0ZW0uIE90aGVyd2lzZSwgb25lIG9mIG5vbi1uZWdhdGVkIGF1dGhlbnRp Y2F0aW9uCisraW5kaWNhdG9ycyBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIEtlcmJlcm9zIHRpY2tl dCB0byBhbGxvdyBhY2Nlc3MuIElmCisrLkNtIEdTU0FQSUluZGljYXRvcnMKKytpcyBkZWZpbmVk LCBhIEtlcmJlcm9zIHRpY2tldCB0aGF0IGhhcyBpbmRpY2F0b3JzIGJ1dCBkb2VzIG5vdCBtYXRj aCB0aGUKKytwb2xpY3kgd2lsbCBnZXQgZGVuaWFsLiBJZiBhdCBsZWFzdCBvbmUgaW5kaWNhdG9y IGlzIGNvbmZpZ3VyZWQsIHdoZXRoZXIgZm9yCisrYWNjZXNzIG9yIGRlbmlhbCwgdGlja2V0cyB3 aXRob3V0IGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMgd2lsbCBiZSBleHBsaWNpdGx5CisrcmVq ZWN0ZWQuCisrLlBwCisrQnkgZGVmYXVsdCBzeXN0ZW1zIHVzaW5nIE1JVCBLZXJiZXJvcyAxLjE3 IG9yIGxhdGVyIHdpbGwgbm90IGFzc2lnbiBhbnkKKytpbmRpY2F0b3JzLiBTUEFLRSBhbmQgUEtJ TklUIG1ldGhvZHMgYWRkIGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMKKyt0byBhbGwgc3VjY2Vz c2Z1bCBhdXRoZW50aWNhdGlvbnMuIFRoZSBTUEFLRSBwcmUtYXV0aGVudGljYXRpb24gbWV0aG9k IGlzCisrcHJlZmVycmVkIG92ZXIgYW4gZW5jcnlwdGVkIHRpbWVzdGFtcCBwcmUtYXV0aGVudGlj YXRpb24gd2hlbiBwYXNzd29yZHMgdXNlZCB0bworK2F1dGhlbnRpY2F0ZSB1c2VyIHByaW5jaXBh bHMuIEtlcmJlcm9zIEtEQ3MgYnVpbHQgd2l0aCBIZWltZGFsIEtlcmJlcm9zCisrKGluY2x1ZGlu ZyBTYW1iYSBBRCBEQyBidWlsdCB3aXRoIEhlaW1kYWwpIGRvIG5vdCBhZGQgYXV0aGVudGljYXRp b24KKytpbmRpY2F0b3JzLiBIb3dldmVyLCBPcGVuU1NIIGJ1aWx0IGFnYWluc3QgSGVpbWRhbCBL ZXJiZXJvcyBsaWJyYXJ5IGlzIGFibGUgdG8KKytpbnF1aXJlIGF1dGhlbnRpY2F0aW9uIGluZGlj YXRvcnMgYW5kIHRodXMgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHRoZWlyIHByZXNlbmNlLgor Ky5QcAorK0luZGljYXRvciBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGFuZCBkZXBlbmRzIG9uIHRo ZSBjb25maWd1cmF0aW9uIG9mIGEKKytwYXJ0aWN1bGFyIEtlcmJlcm9zIGRlcGxveW1lbnQuIElu ZGljYXRvcnMgYXZhaWxhYmxlIGluIE1JVCBLZXJiZXJvcyBhbmQKKytGcmVlSVBBIGVudmlyb25t ZW50czoKKysuUHAKKysuQmwgLXRhZyAtd2lkdGggWFhYWCAtb2Zmc2V0IGluZGVudCAtY29tcGFj dAorKy5JdCBDbSBoYXJkZW5lZAorK1NQQUtFIG9yIGVuY3J5cHRlZCB0aW1lc3RhbXAgcHJlLWF1 dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgaW4gTUlUIEtlcmJlcm9zIGFuZCBGcmVlSVBBCisrLkl0 IENtIHBraW5pdAorK3NtYXJ0Y2FyZCBvciBQS0NTMTEgdG9rZW4tYmFzZWQgcHJlLWF1dGhlbnRp Y2F0aW9uIGluIE1JVCBLZXJiZXJvcyBhbmQgRnJlZUlQQQorKy5JdCBDbSByYWRpdXMKKytwcmUt YXV0aGVudGljYXRpb24gYmFzZWQgb24gYSBSQURJVVMgc2VydmVyIGluIE1JVCBLZXJiZXJvcyBh bmQgRnJlZUlQQQorKy5JdCBDbSBvdHAKKytUT1RQL0hPVFAtYmFzZWQgdHdvLWZhY3RvciBwcmUt YXV0aGVudGljYXRpb24gaW4gRnJlZUlQQQorKy5JdCBDbSBpZHAKKytPQXV0aDItYmFzZWQgcHJl LWF1dGhlbnRpY2F0aW9uIGluIEZyZWVJUEEgdXNpbmcgYW4gZXh0ZXJuYWwgaWRlbnRpdHkgcHJv dmlkZXIKKythbmQgZGV2aWNlIGF1dGhvcml6YXRpb24gZ3JhbnQgZmxvdworKy5JdCBDbSBwYXNz a2V5CisrRklETzItYmFzZWQgcHJlLWF1dGhlbnRpY2F0aW9uIGluIEZyZWVJUEEsIHVzaW5nIEZJ RE8yIFVTQiBhbmQgTkZDIHRva2VucworKy5FbAorKy5QcAorK1RoZSBkZWZhdWx0CisrLkRxIG5v bmUKKytpcyB0byBub3QgdXNlIEdTU0FQSSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGZvciBh Y2Nlc3MgZGVjaXNpb25zLgorIC5JdCBDbSBIb3N0YmFzZWRBY2NlcHRlZEFsZ29yaXRobXMKKyBU aGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5CisgLlhyIGNyeXB0by1wb2xpY2ll cyA3IC4KKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQgYS8wMDQ3LU5JU1QtY3VydmVzLWh5YnJp ZC1LRVgtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi8wMDQ3LU5JU1QtY3VydmVzLWh5YnJpZC1LRVgt aW1wbGVtZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u Njg4NTI0MQotLS0gL2Rldi9udWxsCisrKyBiLzAwNDctTklTVC1jdXJ2ZXMtaHlicmlkLUtFWC1p bXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDEzNTMgQEAKK0Zyb20gMTExYmU0YjJiYTVl MGUyNTQ5ZDIxZDFlZDRjNTNmZTlhZjkwODI3YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zy b206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjAg T2N0IDIwMjUgMTY6MDc6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA0Ny81M10gTklTVCBjdXJ2 ZXMgaHlicmlkIEtFWCBpbXBsZW1lbnRhdGlvbgorCistLS0KKyBjb21wYXQuYyAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAyMyArLQorIGNvbXBhdC5oICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKKyBjcnlwdG9fYXBpLmggICAgICAgICAgICAgICAgICAgICB8ICAgNSArCisga2V4 LW5hbWVzLmMgICAgICAgICAgICAgICAgICAgICAgfCAgOTEgKysrKy0KKyBrZXguYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisga2V4LmggICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMjAgKy0KKyBrZXhnZW4uYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NyAr Ky0KKyBrZXhtbGtlbTc2OHgyNTUxOS5jICAgICAgICAgICAgICB8IDY4MCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tCisgbW9uaXRvci5jICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDIgKworIG15cHJvcG9zYWwuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKKyByZWdyZXNz L3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYyB8ICAgNCArCisgc3NoLWtleXNjYW4uYyAgICAgICAg ICAgICAgICAgICAgfCAgIDMgKy0KKyBzc2hfYXBpLmMgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgNiArLQorIHNzaGNvbm5lY3QyLmMgICAgICAgICAgICAgICAgICAgIHwgICAzICstCisgc3No ZC1hdXRoLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKworIDE1IGZpbGVzIGNoYW5nZWQs IDg1MiBpbnNlcnRpb25zKCspLCA2MCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbXBh dC5jIGIvY29tcGF0LmMKK2luZGV4IDQzMTI1MTBlNS4uZTZjNzkzNWQ0IDEwMDY0NAorLS0tIGEv Y29tcGF0LmMKKysrKyBiL2NvbXBhdC5jCitAQCAtMzYsNiArMzYsNyBAQAorICNpbmNsdWRlICJj b21wYXQuaCIKKyAjaW5jbHVkZSAibG9nLmgiCisgI2luY2x1ZGUgIm1hdGNoLmgiCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorIAorIC8qIGRldGVybWluZSBidWcgZmxhZ3MgZnJvbSBTU0gg cHJvdG9jb2wgYmFubmVyICovCisgdm9pZAorQEAgLTE0OCw4ICsxNDksOSBAQCBjaGFyICoKKyBj b21wYXRfa2V4X3Byb3Bvc2FsKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqcCkKKyB7Cisg CWNoYXIgKmNwID0gTlVMTCwgKmNwMiA9IE5VTEw7CisrCWludCBtbGtlbV9hdmFpbGFibGUgPSBp c19tbGtlbTc2OF9hdmFpbGFibGUoKTsKKyAKKy0JaWYgKChzc2gtPmNvbXBhdCAmIChTU0hfQlVH X0NVUlZFMjU1MTlQQUR8U1NIX09MRF9ESEdFWCkpID09IDApCisrCWlmICgoc3NoLT5jb21wYXQg JiAoU1NIX0JVR19DVVJWRTI1NTE5UEFEfFNTSF9PTERfREhHRVgpKSA9PSAwICYmIG1sa2VtX2F2 YWlsYWJsZSA9PSAyKQorIAkJcmV0dXJuIHhzdHJkdXAocCk7CisgCWRlYnVnMl9mKCJvcmlnaW5h bCBLRVggcHJvcG9zYWw6ICVzIiwgcCk7CisgCWlmICgoc3NoLT5jb21wYXQgJiBTU0hfQlVHX0NV UlZFMjU1MTlQQUQpICE9IDApCitAQCAtMTY0LDYgKzE2NiwyNSBAQCBjb21wYXRfa2V4X3Byb3Bv c2FsKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqcCkKKyAJCWZyZWUoY3ApOworIAkJY3Ag PSBjcDI7CisgCX0KKysJaWYgKG1sa2VtX2F2YWlsYWJsZSA9PSAyKQorKwkJcmV0dXJuIGNwID8g Y3AgOiB4c3RyZHVwKHApOworKwlpZiAobWxrZW1fYXZhaWxhYmxlID09IDEgJiYgRklQU19tb2Rl KCkpIHsKKysJCWlmICgoY3AyID0gbWF0Y2hfZmlsdGVyX2RlbnlsaXN0KGNwID8gY3AgOiBwLAor KwkJICAgICJtbGtlbTc2OHgyNTUxOS1zaGEyNTYiKSkgPT0gTlVMTCkKKysJCQlmYXRhbCgibWF0 Y2hfZmlsdGVyX2RlbnlsaXN0IGZhaWxlZCIpOworKwkJZnJlZShjcCk7CisrCQljcCA9IGNwMjsK KysJfQorKwlpZiAobWxrZW1fYXZhaWxhYmxlID09IDApIHsKKysJCWlmICgoY3AyID0gbWF0Y2hf ZmlsdGVyX2RlbnlsaXN0KGNwID8gY3AgOiBwLAorKwkJICAgICJtbGtlbTc2OHgyNTUxOS1zaGEy NTYsIgorKwkJICAgICJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiwiCisrCQkgICAgIm1sa2VtMTAy NG5pc3RwMzg0LXNoYTM4NCIpKSA9PSBOVUxMKQorKwkJCWZhdGFsKCJtYXRjaF9maWx0ZXJfZGVu eWxpc3QgZmFpbGVkIik7CisrCQlmcmVlKGNwKTsKKysJCWNwID0gY3AyOworKwl9CisrCisgCWlm IChjcCA9PSBOVUxMIHx8ICpjcCA9PSAnXDAnKQorIAkJZmF0YWwoIk5vIHN1cHBvcnRlZCBrZXkg ZXhjaGFuZ2UgYWxnb3JpdGhtcyBmb3VuZCIpOworIAlkZWJ1ZzJfZigiY29tcGF0IEtFWCBwcm9w b3NhbDogJXMiLCBjcCk7CitkaWZmIC0tZ2l0IGEvY29tcGF0LmggYi9jb21wYXQuaAoraW5kZXgg MmU2ZGI1YmY5Li5iNzhlNTViNjkgMTAwNjQ0CistLS0gYS9jb21wYXQuaAorKysrIGIvY29tcGF0 LmgKK0BAIC02Miw0ICs2Miw1IEBAIHN0cnVjdCBzc2g7CisgCisgdm9pZCAgICBjb21wYXRfYmFu bmVyKHN0cnVjdCBzc2ggKiwgY29uc3QgY2hhciAqKTsKKyBjaGFyCSpjb21wYXRfa2V4X3Byb3Bv c2FsKHN0cnVjdCBzc2ggKiwgY29uc3QgY2hhciAqKTsKKytpbnQgaXNfbWxrZW03NjhfYXZhaWxh YmxlKHZvaWQpOworICNlbmRpZgorZGlmZiAtLWdpdCBhL2NyeXB0b19hcGkuaCBiL2NyeXB0b19h cGkuaAoraW5kZXggZjg0NDFlZDZmLi42MGVhMjRhM2UgMTAwNjQ0CistLS0gYS9jcnlwdG9fYXBp LmgKKysrKyBiL2NyeXB0b19hcGkuaAorQEAgLTIwMyw2ICsyMDMsMTEgQEAgaW50IGNyeXB0b19z aWduX21sZHNhNDRfZWQyNTUxOV92ZXJpZnkoY29uc3QgdWludDhfdCBzaWdbTUxEU0E0NF9FRDI1 NTE5X1NJR19TWl0KKyAgICAgY29uc3QgdWludDhfdCAqY3R4LCBzaXplX3QgY3R4bGVuLAorICAg ICBjb25zdCB1aW50OF90IHBrW01MRFNBNDRfRUQyNTUxOV9QS19TWl0pOworIAorKy8qIE1MLUtF TS0xMDI0ICovCisrI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUyAx NTY4CisrI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUyAzMTY4Cisr I2RlZmluZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVMgMTU2OAorKworIC8q IFV0aWxpdHkgKi8KKyB2b2lkIHNoYTNfMjU2KHVpbnQ4X3QgZGlnZXN0WzMyXSwgY29uc3QgdWlu dDhfdCAqZGF0YSwgc2l6ZV90IGxlbik7Cisgdm9pZCBzaGEzXzUxMih1aW50OF90IGRpZ2VzdFs2 NF0sIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pOworZGlmZiAtLWdpdCBhL2tleC1u YW1lcy5jIGIva2V4LW5hbWVzLmMKK2luZGV4IGNkZDVkYjkwZS4uZjljNTE0MjlhIDEwMDY0NAor LS0tIGEva2V4LW5hbWVzLmMKKysrKyBiL2tleC1uYW1lcy5jCitAQCAtMzQsNiArMzQsNyBAQAor ICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAj ZW5kaWYKKyAKKyAjaW5jbHVkZSAia2V4LmgiCitAQCAtNzMsOCArNzQsNiBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGtleGFsZyBrZXhhbGdzW10gPSB7CisgCSAgICBTU0hfRElHRVNUX1NIQTM4NCwg S0VYX05PVF9QUSB9LAorIAl7IEtFWF9FQ0RIX1NIQTJfTklTVFA1MjEsIEtFWF9FQ0RIX1NIQTIs IE5JRF9zZWNwNTIxcjEsCisgCSAgICBTU0hfRElHRVNUX1NIQTUxMiwgS0VYX05PVF9QUSB9LAor LQl7IEtFWF9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NiwgS0VYX0tFTV9NTEtFTTc2OEVDREhfU0hB MjU2LAorLQkgICAgTklEX1g5XzYyX3ByaW1lMjU2djEsIFNTSF9ESUdFU1RfU0hBMjU2LCBLRVhf SVNfUFEgfSwKKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgI2lmIGRlZmluZWQoSEFWRV9F VlBfU0hBMjU2KSB8fCAhZGVmaW5lZChXSVRIX09QRU5TU0wpCisgCXsgS0VYX0NVUlZFMjU1MTlf U0hBMjU2LCBLRVhfQzI1NTE5X1NIQTI1NiwgMCwgU1NIX0RJR0VTVF9TSEEyNTYsIEtFWF9OT1Rf UFEgfSwKK0BAIC04OCw2ICs4NywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyBrZXhh bGdzW10gPSB7CisgI2lmZGVmIFVTRV9NTEtFTTc2OFgyNTUxOQorIAl7IEtFWF9NTEtFTTc2OFgy NTUxOV9TSEEyNTYsIEtFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2LCAwLAorIAkgICAgU1NI X0RJR0VTVF9TSEEyNTYsIEtFWF9JU19QUSB9LAorKwl7IEtFWF9NTEtFTTc2OE5JU1RQMjU2X1NI QTI1NiwgS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NiwgMCwKKysJICAgIFNTSF9ESUdF U1RfU0hBMjU2LCBLRVhfSVNfUFEgfSwKKysJeyBLRVhfTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0 LCBLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCwgMCwKKysJICAgIFNTSF9ESUdFU1Rf U0hBMzg0LCBLRVhfSVNfUFEgfSwKKyAjZW5kaWYKKyAjZW5kaWYgLyogSEFWRV9FVlBfU0hBMjU2 IHx8ICFXSVRIX09QRU5TU0wgKi8KKyAJeyBOVUxMLCAwLCAtMSwgLTEsIDAgfSwKK0BAIC0xMDYs MTQgKzEwOSwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyBnc3Nfa2V4YWxnc1tdID0g eworIAl7IE5VTEwsIDAsIC0xLCAtMSwgMH0sCisgfTsKKyAKKy1zdGF0aWMgaW50IGlzX21sa2Vt NzY4X2F2YWlsYWJsZSgpCisrLyoKKysgKiAwIC0gdW5hdmFpbGFibGUKKysgKiAxIC0gYXZhaWxh YmxlIGluIG5vbi1GSVBTIG1vZGUKKysgKiAyIC0gYXZhaWxhYmxlIGFsd2F5cworKyAqLworK2lu dCBpc19tbGtlbTc2OF9hdmFpbGFibGUoKQorIHsKKyAJc3RhdGljIGludCBpc19mZXRjaGVkID0g LTE7CisgCisgCWlmIChpc19mZXRjaGVkID09IC0xKSB7CistCQlFVlBfS0VNICptbGtlbTc2OCA9 IEVWUF9LRU1fZmV0Y2goTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCk7CistCQlpc19mZXRjaGVkID0g bWxrZW03NjggIT0gTlVMTCA/IDEgOiAwOworKwkJRVZQX0tFTSAqbWxrZW03NjggPSBOVUxMOwor KworKwkJRVJSX3NldF9tYXJrKCk7CisrCQltbGtlbTc2OCA9IEVWUF9LRU1fZmV0Y2goTlVMTCwg Im1sa2VtNzY4IiwgTlVMTCk7CisrCQlpc19mZXRjaGVkID0gKG1sa2VtNzY4ID09IE5VTEwpID8g MCA6IDI7CisrCQlpZiAoaXNfZmV0Y2hlZCA9PSAwICYmIEZJUFNfbW9kZSgpID09IDEpIHsKKysJ CSAgICBtbGtlbTc2OCA9IEVWUF9LRU1fZmV0Y2goTlVMTCwgIm1sa2VtNzY4IiwgInByb3ZpZGVy PWRlZmF1bHQsLWZpcHMiKTsKKysJCSAgICBpc19mZXRjaGVkID0gKG1sa2VtNzY4ID09IE5VTEwp ID8gMCA6IDE7CisrCQl9CisgCQlFVlBfS0VNX2ZyZWUobWxrZW03NjgpOworKwkJRVJSX3BvcF90 b19tYXJrKCk7CisgCX0KKyAKKyAJcmV0dXJuIGlzX2ZldGNoZWQ7CitAQCAtMTI1LDExICsxNDEs MzIgQEAga2V4X2FsZ19saXN0X2ludGVybmFsKGNoYXIgc2VwLCBjb25zdCBzdHJ1Y3Qga2V4YWxn ICphbGdzKQorIAljaGFyICpyZXQgPSBOVUxMOworIAljb25zdCBzdHJ1Y3Qga2V4YWxnICprOwor IAljaGFyIHNlcF9zdHJbMl0gPSB7c2VwLCAnXDAnfTsKKysJaW50IHgyNTUxOW1sa2VtX2F2YWls YWJsZSA9IDAsIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAwOworIAorLQlmb3IgKGsgPSBrZXhhbGdz OyBrLT5uYW1lICE9IE5VTEw7IGsrKykgeworLQkJaWYgKHN0cmNtcChrLT5uYW1lLCBLRVhfTUxL RU03NjhYMjU1MTlfU0hBMjU2KSA9PSAwCistCQkJJiYgIWlzX21sa2VtNzY4X2F2YWlsYWJsZSgp KQorKwkvKgorKwkgKiBGSVBTIHByb3ZpZGVyIGNhbiBwcm92aWRlIE1MLUtFTXMgYW5kIHRoZW4g YWxsIGh5YnJpZHMgYXJlIGF2YWlsYWJsZQorKwkgKiBPdGhlcndpc2Ugb25seSBOSVNUIGh5YnJp ZHMgYXJlIGF2YWlsYWJsZQorKwkgKiAqLworKwlpZiAoRklQU19tb2RlKCkpIHsKKysJICAgIGlm IChpc19tbGtlbTc2OF9hdmFpbGFibGUoKSA9PSAyKSB7CisrCSAgICAgICAgeDI1NTE5bWxrZW1f YXZhaWxhYmxlID0gMTsKKysJICAgICAgICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKKysJICAg IH0gZWxzZSBpZiAoaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkgPT0gMSkgeworKwkgICAgICAgIG5p c3RtbGtlbV9hdmFpbGFibGUgPSAxOworKwkgICAgfQorKwl9IGVsc2UgeworKwkgICAgaWYgKGlz X21sa2VtNzY4X2F2YWlsYWJsZSgpID4gMCkgeworKwkgICAgICAgIHgyNTUxOW1sa2VtX2F2YWls YWJsZSA9IDE7CisrCSAgICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7CisrCSAgICB9Cisr CX0KKysKKysJZm9yIChrID0gYWxnczsgay0+bmFtZSAhPSBOVUxMOyBrKyspIHsKKysJCWlmICgg IChzdHJjbXAoay0+bmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMCAgICAmJiB4 MjU1MTltbGtlbV9hdmFpbGFibGUgPT0gMCkKKysJCSAgIHx8IChzdHJjbXAoay0+bmFtZSwgS0VY X01MS0VNNzY4TklTVFAyNTZfU0hBMjU2KSA9PSAwICAmJiBuaXN0bWxrZW1fYXZhaWxhYmxlID09 IDApCisrCQkgICB8fCAoc3RyY21wKGstPm5hbWUsIEtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEz ODQpID09IDAgJiYgbmlzdG1sa2VtX2F2YWlsYWJsZSA9PSAwKSkKKyAJCQljb250aW51ZTsKKysK KyAJCXhleHRlbmRmKCZyZXQsIHNlcF9zdHIsICIlcyIsIGstPm5hbWUpOworIAl9CisgCitAQCAt MTUyLDEwICsxODksMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZXhhbGcgKgorIGtleF9hbGdf YnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQorIHsKKyAJY29uc3Qgc3RydWN0IGtleGFsZyAqazsK KysJaW50IHgyNTUxOW1sa2VtX2F2YWlsYWJsZSA9IDAsIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAw OworIAorLQlpZiAoc3RyY21wKG5hbWUsIEtFWF9NTEtFTTc2OFgyNTUxOV9TSEEyNTYpID09IDAK Ky0JCSYmICFpc19tbGtlbTc2OF9hdmFpbGFibGUoKSkKKy0JcmV0dXJuIE5VTEw7CisrCS8qCisr CSAqIEZJUFMgcHJvdmlkZXIgY2FuIHByb3ZpZGUgTUwtS0VNcyBhbmQgdGhlbiBhbGwgaHlicmlk cyBhcmUgYXZhaWxhYmxlCisrCSAqIE90aGVyd2lzZSBvbmx5IE5JU1QgaHlicmlkcyBhcmUgYXZh aWxhYmxlCisrCSAqICovCisrCWlmIChGSVBTX21vZGUoKSkgeworKwkgICAgaWYgKGlzX21sa2Vt NzY4X2F2YWlsYWJsZSgpID09IDIpIHsKKysJICAgICAgICB4MjU1MTltbGtlbV9hdmFpbGFibGUg PSAxOworKwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOworKwkgICAgfSBlbHNlIGlm IChpc19tbGtlbTc2OF9hdmFpbGFibGUoKSA9PSAxKSB7CisrCSAgICAgICAgbmlzdG1sa2VtX2F2 YWlsYWJsZSA9IDE7CisrCSAgICB9CisrCX0gZWxzZSB7CisrCSAgICBpZiAoaXNfbWxrZW03Njhf YXZhaWxhYmxlKCkgPiAwKSB7CisrCSAgICAgICAgeDI1NTE5bWxrZW1fYXZhaWxhYmxlID0gMTsK KysJICAgICAgICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKKysJICAgIH0KKysJfQorKworKwlp ZiAoICAoc3RyY21wKG5hbWUsIEtFWF9NTEtFTTc2OFgyNTUxOV9TSEEyNTYpID09IDAgICAgJiYg eDI1NTE5bWxrZW1fYXZhaWxhYmxlID09IDApCisrCSAgIHx8IChzdHJjbXAobmFtZSwgS0VYX01M S0VNNzY4TklTVFAyNTZfU0hBMjU2KSA9PSAwICAmJiBuaXN0bWxrZW1fYXZhaWxhYmxlID09IDAp CisrCSAgIHx8IChzdHJjbXAobmFtZSwgS0VYX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCkgPT0g MCAmJiBuaXN0bWxrZW1fYXZhaWxhYmxlID09IDApKQorKwkgICByZXR1cm4gTlVMTDsKKyAKKyAJ Zm9yIChrID0ga2V4YWxnczsgay0+bmFtZSAhPSBOVUxMOyBrKyspIHsKKyAJCWlmIChzdHJjbXAo ay0+bmFtZSwgbmFtZSkgPT0gMCkKK0BAIC0yMzMsOCArMjkwLDE2IEBAIGtleF9uYW1lc192YWxp ZChjb25zdCBjaGFyICpuYW1lcykKKyAJCQlyZXR1cm4gMDsKKyAJCX0KKyAJCWlmIChrZXhfYWxn X2J5X25hbWUocCkgPT0gTlVMTCkgeworLQkJCWlmIChGSVBTX21vZGUoKSkKKy0JCQkJZXJyb3Io IlwiJS4xMDBzXCIgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIiwgcCk7CisrCQkJaWYgKEZJ UFNfbW9kZSgpKSB7CisrCQkJCWlmICgoc3RyY21wKHAsIEtFWF9NTEtFTTc2OFgyNTUxOV9TSEEy NTYpID09IDApCisrCQkJCSAgICB8fCAoc3RyY21wKHAsIEtFWF9NTEtFTTc2OE5JU1RQMjU2X1NI QTI1NikgPT0gMCkKKysJCQkJICAgIHx8IChzdHJjbXAocCwgS0VYX01MS0VNMTAyNE5JU1RQMzg0 X1NIQTM4NCkgPT0gMCkpIHsKKysJCQkJCWRlYnVnKCJcIiUuMTAwc1wiIGlzIG5vdCBhbGxvd2Vk IGluIEZJUFMgbW9kZSIsIHApOworKwkJCQkJY29udGludWU7CisrCQkJCX0KKysJCQkJZWxzZQor KwkJCQkJZXJyb3IoIlwiJS4xMDBzXCIgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIiwgcCk7 CisrCQkJfQorIAkJCWVsc2UKKyAJCQkJZXJyb3IoIlVuc3VwcG9ydGVkIEtFWCBhbGdvcml0aG0g XCIlLjEwMHNcIiIsIHApOworIAkJCWZyZWUocyk7CitkaWZmIC0tZ2l0IGEva2V4LmMgYi9rZXgu YworaW5kZXggNjJjZmE4NmNkLi4xZTBjMjliOTEgMTAwNjQ0CistLS0gYS9rZXguYworKysrIGIv a2V4LmMKK0BAIC03NjAsNiArNzYwLDcgQEAga2V4X2ZyZWUoc3RydWN0IGtleCAqa2V4KQorICNp ZmRlZiBXSVRIX09QRU5TU0wKKyAJREhfZnJlZShrZXgtPmRoKTsKKyAJRUNfS0VZX2ZyZWUoa2V4 LT5lY19jbGllbnRfa2V5KTsKKysJRVZQX1BLRVlfZnJlZShrZXgtPmVjX2h5YnJpZF9jbGllbnRf a2V5KTsKKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgCWZvciAobW9kZSA9IDA7IG1vZGUg PCBNT0RFX01BWDsgbW9kZSsrKSB7CisgCQlrZXhfZnJlZV9uZXdrZXlzKGtleC0+bmV3a2V5c1tt b2RlXSk7CitkaWZmIC0tZ2l0IGEva2V4LmggYi9rZXguaAoraW5kZXggMWZlNGJiMjliLi40ZTFi Mjg3NWUgMTAwNjQ0CistLS0gYS9rZXguaAorKysrIGIva2V4LmgKK0BAIC02NSw3ICs2NSw4IEBA CisgI2RlZmluZQlLRVhfU05UUlVQNzYxWDI1NTE5X1NIQTUxMgkic250cnVwNzYxeDI1NTE5LXNo YTUxMiIKKyAjZGVmaW5lCUtFWF9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyX09MRAkic250cnVwNzYx eDI1NTE5LXNoYTUxMkBvcGVuc3NoLmNvbSIKKyAjZGVmaW5lCUtFWF9NTEtFTTc2OFgyNTUxOV9T SEEyNTYJIm1sa2VtNzY4eDI1NTE5LXNoYTI1NiIKKy0jZGVmaW5lCUtFWF9NTEtFTTc2OE5JU1RQ MjU2X1NIQTI1NgkibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYiCisrI2RlZmluZQlLRVhfTUxLRU03 NjhOSVNUUDI1Nl9TSEEyNTYgICAgICJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiIKKysjZGVmaW5l CUtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQgICAgIm1sa2VtMTAyNG5pc3RwMzg0LXNoYTM4 NCIKKyAKKyAjZGVmaW5lIENPTVBfTk9ORQkwCisgI2RlZmluZSBDT01QX0RFTEFZRUQJMgorQEAg LTEwNCw3ICsxMDUsOCBAQCBlbnVtIGtleF9leGNoYW5nZSB7CisgCUtFWF9DMjU1MTlfU0hBMjU2 LAorIAlLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTIsCisgCUtFWF9LRU1fTUxLRU03NjhY MjU1MTlfU0hBMjU2LAorLQlLRVhfS0VNX01MS0VNNzY4RUNESF9TSEEyNTYsCisrCUtFWF9LRU1f TUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYsCisrCUtFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hB Mzg0LAorICNpZmRlZiBHU1NBUEkKKyAJS0VYX0dTU19HUlAxX1NIQTEsCisgCUtFWF9HU1NfR1JQ MTRfU0hBMSwKK0BAIC0yMDcsNiArMjA5LDkgQEAgc3RydWN0IGtleCB7CisgCXVfY2hhciBzbnRy dXA3NjFfY2xpZW50X2tleVtjcnlwdG9fa2VtX3NudHJ1cDc2MV9TRUNSRVRLRVlCWVRFU107IC8q IEtFTSAqLworIAl1X2NoYXIgbWxrZW03NjhfY2xpZW50X2tleVtjcnlwdG9fa2VtX21sa2VtNzY4 X1NFQ1JFVEtFWUJZVEVTXTsgLyogS0VNICovCisgCXN0cnVjdCBzc2hidWYgKmNsaWVudF9wdWI7 CisrCS8qIEZJWE1FICovCisrCUVWUF9QS0VZICplY19oeWJyaWRfY2xpZW50X2tleTsgLyogTklT VCBoeWJyaWRzICovCisrCXVfY2hhciBtbGtlbTEwMjRfY2xpZW50X2tleVtjcnlwdG9fa2VtX21s a2VtMTAyNF9TRUNSRVRLRVlCWVRFU107IC8qIE1MLUtFTSAxMDI0ICsgTklTVCAqLworIH07Cisg CisgaW50CSBrZXhfbmFtZV92YWxpZChjb25zdCBjaGFyICopOworQEAgLTI5Nyw2ICszMDIsMTcg QEAgaW50CSBrZXhfa2VtX21sa2VtNzY4ZWNkaF9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1 Y3Qgc3NoYnVmICosCisgICAgIHN0cnVjdCBzc2hidWYgKiosIHN0cnVjdCBzc2hidWYgKiopOwor IGludAkga2V4X2tlbV9tbGtlbTc2OGVjZGhfZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0 IHNzaGJ1ZiAqLAorICAgICBzdHJ1Y3Qgc3NoYnVmICoqKTsKKytpbnQJIGtleF9rZW1fbWxrZW03 NjhuaXN0cDI1Nl9rZXlwYWlyKHN0cnVjdCBrZXggKik7CisraW50CSBrZXhfa2VtX21sa2VtNzY4 bmlzdHAyNTZfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorKyAgICBz dHJ1Y3Qgc3NoYnVmICoqLCBzdHJ1Y3Qgc3NoYnVmICoqKTsKKytpbnQJIGtleF9rZW1fbWxrZW03 NjhuaXN0cDI1Nl9kZWMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCisrICAg IHN0cnVjdCBzc2hidWYgKiopOworKworK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9r ZXlwYWlyKHN0cnVjdCBrZXggKik7CisraW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2Vu YyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKKysgICAgc3RydWN0IHNzaGJ1 ZiAqKiwgc3RydWN0IHNzaGJ1ZiAqKik7CisraW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0 X2RlYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKKysgICAgc3RydWN0IHNz aGJ1ZiAqKik7CisgCisgaW50CSBrZXhfZGhfa2V5Z2VuKHN0cnVjdCBrZXggKik7CisgaW50CSBr ZXhfZGhfY29tcHV0ZV9rZXkoc3RydWN0IGtleCAqLCBCSUdOVU0gKiwgc3RydWN0IHNzaGJ1ZiAq KTsKK2RpZmYgLS1naXQgYS9rZXhnZW4uYyBiL2tleGdlbi5jCitpbmRleCA4MzQwNzNlZjEuLjc5 ZGRiNTkyNSAxMDA2NDQKKy0tLSBhL2tleGdlbi5jCisrKysgYi9rZXhnZW4uYworQEAgLTExNCw5 ICsxMTQsNiBAQCBrZXhfZ2VuX2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCisgCWNhc2UgS0VYX0VD REhfU0hBMjoKKyAJCXIgPSBrZXhfZWNkaF9rZXlwYWlyKGtleCk7CisgCQlicmVhazsKKy0JY2Fz ZSBLRVhfS0VNX01MS0VNNzY4RUNESF9TSEEyNTY6CistCQlyID0ga2V4X2tlbV9tbGtlbTc2OGVj ZGhfa2V5cGFpcihrZXgpOworLQkJYnJlYWs7CisgI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwor IAljYXNlIEtFWF9DMjU1MTlfU0hBMjU2OgorIAkJaWYgKEZJUFNfbW9kZSgpKSB7CitAQCAtMTM2 LDEyICsxMzMsMjQgQEAga2V4X2dlbl9jbGllbnQoc3RydWN0IHNzaCAqc3NoKQorIAkJYnJlYWs7 CisgCWNhc2UgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTY6CisgCQlpZiAoRklQU19tb2Rl KCkpIHsKKy0JCSAgICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBp cyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKKy0JCSAgICByID0gU1NIX0VSUl9JTlZBTElE X0FSR1VNRU5UOworKwkJICAgIEVWUF9LRU0gKm1sa2VtID0gRVZQX0tFTV9mZXRjaChOVUxMLCAi bWxrZW03NjgiLCBOVUxMKTsKKysJCSAgICBpZiAobWxrZW0gPT0gTlVMTCkgeworKwkJICAgICAg ICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBpcyBub3QgYWxsb3dl ZCBpbiBGSVBTIG1vZGUiKTsKKysJCSAgICAgICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVO VDsKKysJCSAgICB9IGVsc2UgeworKwkJCUVWUF9LRU1fZnJlZShtbGtlbSk7CisrCQkgICAgICAg IHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoa2V4KTsKKysJCSAgICB9CisgCQl9 IGVsc2UgeworIAkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoa2V4KTsK KyAJCX0KKyAJCWJyZWFrOworKwljYXNlIEtFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTY6 CisrCQkgICAgciA9IGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9rZXlwYWlyKGtleCk7CisrCQli cmVhazsKKysJY2FzZSBLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NDoKKysJCSAgICBy ID0ga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9rZXlwYWlyKGtleCk7CisrCQlicmVhazsKKyAJ ZGVmYXVsdDoKKyAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgCQlicmVhazsKK0BA IC0yMDYsMTAgKzIxNSw2IEBAIGlucHV0X2tleF9nZW5fcmVwbHkoaW50IHR5cGUsIHVpbnQzMl90 IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorIAljYXNlIEtFWF9FQ0RIX1NIQTI6CisgCQlyID0ga2V4 X2VjZGhfZGVjKGtleCwgc2VydmVyX2Jsb2IsICZzaGFyZWRfc2VjcmV0KTsKKyAJCWJyZWFrOwor LQljYXNlIEtFWF9LRU1fTUxLRU03NjhFQ0RIX1NIQTI1NjoKKy0JCXIgPSBrZXhfa2VtX21sa2Vt NzY4ZWNkaF9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwKKy0JCSAgICAmc2hhcmVkX3NlY3JldCk7Cist CQlicmVhazsKKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgCWNhc2UgS0VYX0MyNTUxOV9T SEEyNTY6CisgCQlpZiAoRklQU19tb2RlKCkpIHsKK0BAIC0yMzAsMTMgKzIzNSwyOCBAQCBpbnB1 dF9rZXhfZ2VuX3JlcGx5KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkK KyAJCWJyZWFrOworIAljYXNlIEtFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2OgorIAkJaWYg KEZJUFNfbW9kZSgpKSB7CistCQkgICAgbG9naXRfZigiS2V5IGV4Y2hhbmdlIHR5cGUgbWxrZW03 Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIik7CistCQkgICAgciA9IFNTSF9F UlJfSU5WQUxJRF9BUkdVTUVOVDsKKysJCSAgICBFVlBfS0VNICptbGtlbSA9IEVWUF9LRU1fZmV0 Y2goTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCk7CisrCQkgICAgaWYgKG1sa2VtID09IE5VTEwpIHsK KysJCSAgICAgICAgbG9naXRfZigiS2V5IGV4Y2hhbmdlIHR5cGUgbWxrZW03Njh4MjU1MTkgaXMg bm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIik7CisrCQkgICAgICAgIHIgPSBTU0hfRVJSX0lOVkFM SURfQVJHVU1FTlQ7CisrCQkgICAgfSBlbHNlIHsKKysJCQlFVlBfS0VNX2ZyZWUobWxrZW0pOwor KwkJICAgICAgICByID0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoa2V4LCBzZXJ2ZXJfYmxv YiwKKysJCSAgICAgICAgICAgICZzaGFyZWRfc2VjcmV0KTsKKysJCSAgICB9CisgCQl9IGVsc2Ug eworIAkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2RlYyhrZXgsIHNlcnZlcl9ibG9i LAorIAkJICAgICAgICAmc2hhcmVkX3NlY3JldCk7CisgCQl9CisgCQlicmVhazsKKysJY2FzZSBL RVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2OgorKwkJICAgIHIgPSBrZXhfa2VtX21sa2Vt NzY4bmlzdHAyNTZfZGVjKGtleCwgc2VydmVyX2Jsb2IsCisrCQkgICAgICAgICZzaGFyZWRfc2Vj cmV0KTsKKysJCWJyZWFrOworKwljYXNlIEtFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0 OgorKwkJICAgIHIgPSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2RlYyhrZXgsIHNlcnZlcl9i bG9iLAorKwkJICAgICAgICAmc2hhcmVkX3NlY3JldCk7CisrCQlicmVhazsKKyAJZGVmYXVsdDoK KyAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgCQlicmVhazsKK0BAIC0yOTAsNiAr MzEwLDggQEAgb3V0OgorIAkgICAgc2l6ZW9mKGtleC0+c250cnVwNzYxX2NsaWVudF9rZXkpKTsK KyAJZXhwbGljaXRfYnplcm8oa2V4LT5tbGtlbTc2OF9jbGllbnRfa2V5LAorIAkgICAgc2l6ZW9m KGtleC0+bWxrZW03NjhfY2xpZW50X2tleSkpOworKwlleHBsaWNpdF9iemVybyhrZXgtPm1sa2Vt MTAyNF9jbGllbnRfa2V5LAorKwkgICAgc2l6ZW9mKGtleC0+bWxrZW0xMDI0X2NsaWVudF9rZXkp KTsKKyAJc3NoYnVmX2ZyZWUoc2VydmVyX2hvc3Rfa2V5X2Jsb2IpOworIAlmcmVlKHNpZ25hdHVy ZSk7CisgCXNzaGJ1Zl9mcmVlKHRtcCk7CitAQCAtMzQ4LDEwICszNzAsNiBAQCBpbnB1dF9rZXhf Z2VuX2luaXQoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorIAkJciA9 IGtleF9lY2RoX2VuYyhrZXgsIGNsaWVudF9wdWJrZXksICZzZXJ2ZXJfcHVia2V5LAorIAkJICAg ICZzaGFyZWRfc2VjcmV0KTsKKyAJCWJyZWFrOworLQljYXNlIEtFWF9LRU1fTUxLRU03NjhFQ0RI X1NIQTI1NjoKKy0JCXIgPSBrZXhfa2VtX21sa2VtNzY4ZWNkaF9lbmMoa2V4LCBjbGllbnRfcHVi a2V5LAorLQkJICAgICZzZXJ2ZXJfcHVia2V5LCAmc2hhcmVkX3NlY3JldCk7CistCQlicmVhazsK KyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgCWNhc2UgS0VYX0MyNTUxOV9TSEEyNTY6Cisg CQlpZiAoRklQU19tb2RlKCkpIHsKK0BAIC0zNzMsMTMgKzM5MSwyOCBAQCBpbnB1dF9rZXhfZ2Vu X2luaXQoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorIAkJYnJlYWs7 CisgCWNhc2UgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTY6CisgCQlpZiAoRklQU19tb2Rl KCkpIHsKKy0JCSAgICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBp cyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKKy0JCSAgICByID0gU1NIX0VSUl9JTlZBTElE X0FSR1VNRU5UOworKwkJICAgIEVWUF9LRU0gKm1sa2VtID0gRVZQX0tFTV9mZXRjaChOVUxMLCAi bWxrZW03NjgiLCBOVUxMKTsKKysJCSAgICBpZiAobWxrZW0gPT0gTlVMTCkgeworKwkJICAgICAg ICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBpcyBub3QgYWxsb3dl ZCBpbiBGSVBTIG1vZGUiKTsKKysJCSAgICAgICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVO VDsKKysJCSAgICB9IGVsc2UgeworKwkJCUVWUF9LRU1fZnJlZShtbGtlbSk7CisrCQkgICAgICAg IHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2VuYyhrZXgsIGNsaWVudF9wdWJrZXksCisrCQkg ICAgICAgICAgICAmc2VydmVyX3B1YmtleSwgJnNoYXJlZF9zZWNyZXQpOworKwkJICAgIH0KKyAJ CX0gZWxzZSB7CisgCQkgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZW5jKGtleCwgY2xp ZW50X3B1YmtleSwKKyAJCSAgICAgICAgJnNlcnZlcl9wdWJrZXksICZzaGFyZWRfc2VjcmV0KTsK KyAJCX0KKyAJCWJyZWFrOworKwljYXNlIEtFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTY6 CisrCQkgICAgciA9IGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9lbmMoa2V4LCBjbGllbnRfcHVi a2V5LAorKwkJICAgICAgICAmc2VydmVyX3B1YmtleSwgJnNoYXJlZF9zZWNyZXQpOworKwkJYnJl YWs7CisrCWNhc2UgS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQ6CisrCQkgICAgciA9 IGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZW5jKGtleCwgY2xpZW50X3B1YmtleSwKKysJCSAg ICAgICAgJnNlcnZlcl9wdWJrZXksICZzaGFyZWRfc2VjcmV0KTsKKysJCWJyZWFrOworIAlkZWZh dWx0OgorIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAJCWJyZWFrOworZGlmZiAt LWdpdCBhL2tleG1sa2VtNzY4eDI1NTE5LmMgYi9rZXhtbGtlbTc2OHgyNTUxOS5jCitpbmRleCAz NjY1ODEyMGYuLjAzZWZiNzg4ZiAxMDA2NDQKKy0tLSBhL2tleG1sa2VtNzY4eDI1NTE5LmMKKysr KyBiL2tleG1sa2VtNzY4eDI1NTE5LmMKK0BAIC00NSwxOSArNDUsMzQgQEAKKyAKKyAjaWZkZWYg VVNFX01MS0VNNzY4WDI1NTE5CisgCisrI2luY2x1ZGUgImxpYmNydXhfaW50ZXJuYWwuaCIKKysj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+CisgI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorKyNkZWZpbmUgRklQU19G QUxMQkFDS19QUk9QUSAicHJvdmlkZXI9ZGVmYXVsdCwtZmlwcyIKKysKKyBzdGF0aWMgaW50Cist bWxrZW03Njhfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCB1bnNpZ25lZCBj aGFyICpwcml2a2V5YnVmKQorK21sa2VtX2tleXBhaXJfZ2VuKGNvbnN0IGNoYXIgKmFsZ25hbWUs IHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1Ziwgc2l6ZV90IHB1YmtleV9zaXplLAorKwkgICAgICAg ICAgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1Ziwgc2l6ZV90IHByaXZrZXlfc2l6ZSkKKyB7Cisg ICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKKyAgICAgRVZQX1BLRVkgKnBrZXkgPSBOVUxM OworICAgICBpbnQgcmV0ID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKy0gICAgc2l6ZV90IHB1 YmtleV9zaXplID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUywgcHJpdmtleV9z aXplID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFUzsKKysgICAgc2l6ZV90IGdv dF9wdWJfc2l6ZSA9IHB1YmtleV9zaXplLCBnb3RfcHJpdl9zaXplID0gcHJpdmtleV9zaXplOwor KworKyAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCBhbGduYW1lLCBO VUxMKTsKKysKKysgICAgaWYgKGN0eCA9PSBOVUxMICYmIEZJUFNfbW9kZSgpKSB7CisrCS8qIFdl IGhhdmUgZmlsdGVyZWQgeDI1NTE5ICsgTUwtS0VNIGluIEZJUFMgbW9kZSBlYXJsaWVyCisrCSAq IHNvIGlmIHdlIGFyZSBpbiBGSVBTIG1vZGUgYW5kIE1MLUtFTSBpcyBub3QgYXZhaWxhYmxlIHdp dGggZGVmYXVsdCBwcm9wcSwKKysJICogd2UgY2FuIGZldGNoIGl0IGZyb20gdGhlIGRlZmF1bHQg cHJvdmlkZXIgKi8KKysgICAgICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5V TEwsIGFsZ25hbWUsIEZJUFNfRkFMTEJBQ0tfUFJPUFEpOworKyAgICB9CisgCistICAgIGN0eCA9 IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOworICAg ICBpZiAoY3R4ID09IE5VTEwpIHsKKyAJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Cisg CWdvdG8gZXJyOworQEAgLTY5LDE3ICs4NCwyMyBAQCBtbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNp Z25lZCBjaGFyICpwdWJrZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCisgICAgICAg ICBnb3RvIGVycjsKKyAgICAgfQorIAorLSAgICBpZiAoRVZQX1BLRVlfZ2V0X3Jhd19wdWJsaWNf a2V5KHBrZXksIHB1YmtleWJ1ZiwgJnB1YmtleV9zaXplKSA8PSAwCistCXx8IEVWUF9QS0VZX2dl dF9yYXdfcHJpdmF0ZV9rZXkocGtleSwgcHJpdmtleWJ1ZiwgJnByaXZrZXlfc2l6ZSkgPD0gMCkg eworKyAgICBpZiAoRVZQX1BLRVlfZ2V0X3Jhd19wdWJsaWNfa2V5KHBrZXksIE5VTEwsICZnb3Rf cHViX3NpemUpIDw9IDAKKysJfHwgRVZQX1BLRVlfZ2V0X3Jhd19wcml2YXRlX2tleShwa2V5LCBO VUxMLCAmZ290X3ByaXZfc2l6ZSkgPD0gMCkgeworIAlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUjsKKyAgICAgICAgIGdvdG8gZXJyOworICAgICB9CisgCistICAgIGlmIChwcml2a2V5X3Np emUgIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFUworLQkgICAgfHwgcHVia2V5 X3NpemUgIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUykgeworKyAgICBpZiAo cHJpdmtleV9zaXplICE9IGdvdF9wcml2X3NpemUgfHwgcHVia2V5X3NpemUgIT0gZ290X3B1Yl9z aXplKSB7CisgCXJldCA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworICAgICAgICAgZ290byBl cnI7CisgICAgIH0KKysKKysgICAgaWYgKEVWUF9QS0VZX2dldF9yYXdfcHVibGljX2tleShwa2V5 LCBwdWJrZXlidWYsICZnb3RfcHViX3NpemUpIDw9IDAKKysJfHwgRVZQX1BLRVlfZ2V0X3Jhd19w cml2YXRlX2tleShwa2V5LCBwcml2a2V5YnVmLCAmZ290X3ByaXZfc2l6ZSkgPD0gMCkgeworKwly ZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9 CisrCisgICAgIHJldCA9IDA7CisgCisgIGVycjoKK0BAIC05MSwyNyArMTEyLDU3IEBAIG1sa2Vt NzY4X2tleXBhaXJfZ2VuKHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAq cHJpdmtleWJ1ZikKKyB9CisgCisgc3RhdGljIGludAorLW1sa2VtNzY4X2VuY2FwX3NlY3JldChj b25zdCB1X2NoYXIgKnB1YmtleWJ1ZiwgdV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQorK21s a2VtNzY4X2tleXBhaXJfZ2VuKHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hh ciAqcHJpdmtleWJ1ZikKKyt7CisrCXJldHVybiBtbGtlbV9rZXlwYWlyX2dlbigibWxrZW03Njgi LCBwdWJrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMsCisrCQkJcHJp dmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFUyk7CisrfQorKworK3N0 YXRpYyBpbnQKKyttbGtlbTEwMjRfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hhciAqcHVia2V5YnVm LCB1bnNpZ25lZCBjaGFyICpwcml2a2V5YnVmKQorK3sKKysJcmV0dXJuIG1sa2VtX2tleXBhaXJf Z2VuKCJtbGtlbTEwMjQiLCBwdWJrZXlidWYsIGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tF WUJZVEVTLAorKwkJCXByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW0xMDI0X1NFQ1JFVEtFWUJZ VEVTKTsKKyt9CisrCisrc3RhdGljIGludAorK21sa2VtX2VuY2FwX3NlY3JldChjb25zdCBjaGFy ICptbGtlbV9hbGcsIGNvbnN0IHVfY2hhciAqcHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwgdV9j aGFyICpvdXQpCisgeworICAgICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisgICAgIEVWUF9QS0VZ X0NUWCAqY3R4ID0gTlVMTDsKKyAgICAgaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwor LSAgICBzaXplX3Qgb3V0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMs CistCSAgIHNlY3JldGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVM7CisrICAgIHNpemVf dCBvdXRsZW4sIGV4cGVjdGVkX291dGxlbiwgcHVibGVuLCBzZWNyZXRsZW4gPSBjcnlwdG9fa2Vt X21sa2VtNzY4X0JZVEVTOworKyAgICBpbnQgZmlwc19mYWxsYmFjayA9IDA7CisrCisrICAgIGlm IChzdHJjbXAobWxrZW1fYWxnLCAibWxrZW03NjgiKSA9PSAwKSB7CisrCSAgICBvdXRsZW4gPSBj cnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUzsKKysJICAgIHB1YmxlbiA9IGNyeXB0 b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVM7CisrICAgIH0gZWxzZSBpZiAoc3RyY21wKG1s a2VtX2FsZywgIm1sa2VtMTAyNCIpID09IDApIHsKKysJICAgIG91dGxlbiA9IGNyeXB0b19rZW1f bWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUzsKKysJICAgIHB1YmxlbiA9IGNyeXB0b19rZW1fbWxr ZW0xMDI0X1BVQkxJQ0tFWUJZVEVTOworKyAgICB9IGVsc2UKKysJICAgIHJldHVybiByOworIAor LSAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wdWJsaWNfa2V5X2V4KE5VTEwsICJtbGtlbTc2 OCIsIE5VTEwsCistCQkgICAgcHVia2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tF WUJZVEVTKTsKKysgICAgZXhwZWN0ZWRfb3V0bGVuID0gb3V0bGVuOworKworKyAgICBwa2V5ID0g RVZQX1BLRVlfbmV3X3Jhd19wdWJsaWNfa2V5X2V4KE5VTEwsIG1sa2VtX2FsZywgTlVMTCwKKysJ CSAgICBwdWJrZXlidWYsIHB1Ymxlbik7CisrICAgIGlmIChwa2V5ID09IE5VTEwgJiYgRklQU19t b2RlKCkpIHsKKysgICAgICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3B1YmxpY19rZXlfZXgo TlVMTCwgbWxrZW1fYWxnLCBGSVBTX0ZBTExCQUNLX1BST1BRLAorKwkJICAgIHB1YmtleWJ1Ziwg cHVibGVuKTsKKysJZmlwc19mYWxsYmFjayA9IDE7CisrICAgIH0KKyAgICAgaWYgKHBrZXkgPT0g TlVMTCkgeworIAlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisgCWdvdG8gZXJyOworICAg ICB9CisgCistICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBrZXks IE5VTEwpOworKyAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5 LCBmaXBzX2ZhbGxiYWNrID8gRklQU19GQUxMQkFDS19QUk9QUSA6IE5VTEwpOworICAgICBpZiAo Y3R4ID09IE5VTEwKKyAJfHwgRVZQX1BLRVlfZW5jYXBzdWxhdGVfaW5pdChjdHgsIE5VTEwpIDw9 IDAKKy0gICAgICAgIHx8IEVWUF9QS0VZX2VuY2Fwc3VsYXRlKGN0eCwgb3V0LCAmb3V0bGVuLCBz ZWNyZXQsICZzZWNyZXRsZW4pIDw9IDAKKysgICAgICAgIHx8IEVWUF9QS0VZX2VuY2Fwc3VsYXRl KGN0eCwgb3V0LCAmZXhwZWN0ZWRfb3V0bGVuLCBzZWNyZXQsICZzZWNyZXRsZW4pIDw9IDAKKyAJ fHwgc2VjcmV0bGVuICE9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVMKKy0JfHwgb3V0bGVuICE9 IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTKSB7CisrCXx8IG91dGxlbiAhPSBl eHBlY3RlZF9vdXRsZW4pIHsKKyAJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworIAlnb3Rv IGVycjsKKyAgICAgfQorQEAgLTEyNywyNSArMTc4LDQ1IEBAIG1sa2VtNzY4X2VuY2FwX3NlY3Jl dChjb25zdCB1X2NoYXIgKnB1YmtleWJ1ZiwgdV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQor IH0KKyAKKyBzdGF0aWMgaW50CistbWxrZW03NjhfZGVjYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAq cHJpdmtleWJ1ZiwgY29uc3QgdV9jaGFyICp3cmFwcGVkLCB1X2NoYXIgKnNlY3JldCkKKyttbGtl bTc2OF9lbmNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwdWJrZXlidWYsIHVfY2hhciAqc2VjcmV0 LCB1X2NoYXIgKm91dCkKKyt7CisrCXJldHVybiBtbGtlbV9lbmNhcF9zZWNyZXQoIm1sa2VtNzY4 IiwgcHVia2V5YnVmLCBzZWNyZXQsIG91dCk7CisrfQorKworK3N0YXRpYyBpbnQKKyttbGtlbTEw MjRfZW5jYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwg dV9jaGFyICpvdXQpCisreworKwlyZXR1cm4gbWxrZW1fZW5jYXBfc2VjcmV0KCJtbGtlbTEwMjQi LCBwdWJrZXlidWYsIHNlY3JldCwgb3V0KTsKKyt9CisrCisrc3RhdGljIGludAorK21sa2VtX2Rl Y2FwX3NlY3JldChjb25zdCBjaGFyICphbGduYW1lLAorKyAgICBjb25zdCB1X2NoYXIgKnByaXZr ZXlidWYsIHNpemVfdCBwcml2a2V5X2xlbiwKKysgICAgY29uc3QgdV9jaGFyICp3cmFwcGVkLCBz aXplX3Qgd3JhcHBlZF9sZW4sCisrICAgIHVfY2hhciAqc2VjcmV0KQorIHsKKyAgICAgRVZQX1BL RVkgKnBrZXkgPSBOVUxMOworICAgICBFVlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7CisgICAgIGlu dCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKy0gICAgc2l6ZV90IHdyYXBwZWRsZW4gPSBj cnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUywKKy0JICAgc2VjcmV0bGVuID0gY3J5 cHRvX2tlbV9tbGtlbTc2OF9CWVRFUzsKKysgICAgc2l6ZV90IHNlY3JldGxlbiA9IGNyeXB0b19r ZW1fbWxrZW03NjhfQllURVM7CisrICAgIGludCBmaXBzX2ZhbGxiYWNrID0gMDsKKyAKKy0gICAg cGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHJpdmF0ZV9rZXlfZXgoTlVMTCwgIm1sa2VtNzY4Iiwg TlVMTCwKKy0JCSAgICBwcml2a2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JFVEtFWUJZ VEVTKTsKKysgICAgcGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHJpdmF0ZV9rZXlfZXgoTlVMTCwg YWxnbmFtZSwKKysJCSAgICBOVUxMLCBwcml2a2V5YnVmLCBwcml2a2V5X2xlbik7CisrICAgIGlm IChwa2V5ID09IE5VTEwgJiYgRklQU19tb2RlKCkpIHsKKysgICAgICAgIHBrZXkgPSBFVlBfUEtF WV9uZXdfcmF3X3ByaXZhdGVfa2V5X2V4KE5VTEwsIGFsZ25hbWUsCisrCQkgICAgRklQU19GQUxM QkFDS19QUk9QUSwgcHJpdmtleWJ1ZiwgcHJpdmtleV9sZW4pOworKwlmaXBzX2ZhbGxiYWNrID0g MTsKKysgICAgfQorICAgICBpZiAocGtleSA9PSBOVUxMKSB7CisgCXIgPSBTU0hfRVJSX0xJQkNS WVBUT19FUlJPUjsKKyAJZ290byBlcnI7CisgICAgIH0KKyAKKy0gICAgY3R4ID0gRVZQX1BLRVlf Q1RYX25ld19mcm9tX3BrZXkoTlVMTCwgcGtleSwgTlVMTCk7CisrICAgIGN0eCA9IEVWUF9QS0VZ X0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBrZXksIGZpcHNfZmFsbGJhY2sgPyBGSVBTX0ZBTExC QUNLX1BST1BRIDogTlVMTCk7CisgICAgIGlmIChjdHggPT0gTlVMTAorIAl8fCBFVlBfUEtFWV9k ZWNhcHN1bGF0ZV9pbml0KGN0eCwgTlVMTCkgPD0gMAorLSAgICAgICAgfHwgRVZQX1BLRVlfZGVj YXBzdWxhdGUoY3R4LCBzZWNyZXQsICZzZWNyZXRsZW4sIHdyYXBwZWQsIHdyYXBwZWRsZW4pIDw9 IDAKKysgICAgICAgIHx8IEVWUF9QS0VZX2RlY2Fwc3VsYXRlKGN0eCwgc2VjcmV0LCAmc2VjcmV0 bGVuLCB3cmFwcGVkLCB3cmFwcGVkX2xlbikgPD0gMAorIAl8fCBzZWNyZXRsZW4gIT0gY3J5cHRv X2tlbV9tbGtlbTc2OF9CWVRFUykgeworIAlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Cisg CWdvdG8gZXJyOworQEAgLTE2Miw2ICsyMzMsMjAgQEAgbWxrZW03NjhfZGVjYXBfc2VjcmV0KGNv bnN0IHVfY2hhciAqcHJpdmtleWJ1ZiwgY29uc3QgdV9jaGFyICp3cmFwcGVkLCB1X2NoYXIgKnMK KyAgICAgcmV0dXJuIHI7CisgfQorIAorK3N0YXRpYyBpbnQKKyttbGtlbTc2OF9kZWNhcF9zZWNy ZXQoY29uc3QgdV9jaGFyICpwcml2a2V5YnVmLCBjb25zdCB1X2NoYXIgKndyYXBwZWQsIHVfY2hh ciAqc2VjcmV0KQorK3sKKysJcmV0dXJuIG1sa2VtX2RlY2FwX3NlY3JldCgibWxrZW03NjgiLCBw cml2a2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JFVEtFWUJZVEVTLAorKwkJd3JhcHBl ZCwgY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMsIHNlY3JldCk7CisrfQorKwor K3N0YXRpYyBpbnQKKyttbGtlbTEwMjRfZGVjYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHJpdmtl eWJ1ZiwgY29uc3QgdV9jaGFyICp3cmFwcGVkLCB1X2NoYXIgKnNlY3JldCkKKyt7CisrCXJldHVy biBtbGtlbV9kZWNhcF9zZWNyZXQoIm1sa2VtMTAyNCIsIHByaXZrZXlidWYsIGNyeXB0b19rZW1f bWxrZW0xMDI0X1NFQ1JFVEtFWUJZVEVTLAorKwkJd3JhcHBlZCwgY3J5cHRvX2tlbV9tbGtlbTEw MjRfQ0lQSEVSVEVYVEJZVEVTLCBzZWNyZXQpOworK30KKysKKyBpbnQKKyBrZXhfa2VtX21sa2Vt NzY4eDI1NTE5X2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQorIHsKK0BAIC0zMjcsNyArNDEyLDcg QEAga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9lbmMoc3RydWN0IGtleCAqa2V4LAorIAl1X2NoYXIg aGFzaFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOworIAlzaXplX3QgbmVlZDsKKyAJaW50IHIgPSBT U0hfRVJSX0lOVEVSTkFMX0VSUk9SOworLQlzdHJ1Y3QgbGliY3J1eF9tbGtlbTc2OF9lbmNfcmVz dWx0IGVuYzsgLyogRklYTUUgKi8KKysJbGliY3J1eF9tbGtlbTc2OF9lbmNfcmVzdWx0IGVuYzsK KyAKKyAJKnNlcnZlcl9ibG9icCA9IE5VTEw7CisgCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7CitA QCAtNTI5LDYgKzYxNCw1MjAgQEAga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0IGtl eCAqa2V4LAorIAlyZXR1cm4gcjsKKyAjZW5kaWYKKyB9CisrCisrI2RlZmluZSBOSVNUX1AyNTZf Q09NUFJFU1NFRF9MRU4gICAzMworKyNkZWZpbmUgTklTVF9QMjU2X1VOQ09NUFJFU1NFRF9MRU4g NjUKKysjZGVmaW5lIE5JU1RfUDM4NF9DT01QUkVTU0VEX0xFTiAgIDQ5CisrI2RlZmluZSBOSVNU X1AzODRfVU5DT01QUkVTU0VEX0xFTiA5NworKyNkZWZpbmUgTklTVF9CVUZfTUFYX1NJWkUgTklT VF9QMzg0X1VOQ09NUFJFU1NFRF9MRU4KKysKKytzdGF0aWMgY29uc3QgY2hhciBlYzI1NltdID0g IlAtMjU2IjsKKytzdGF0aWMgY29uc3QgY2hhciBlYzM4NFtdID0gIlAtMzg0IjsKKytzdGF0aWMg Y29uc3QgY2hhciAqbGVuMmN1cnZlX25hbWUoc2l6ZV90IGxlbikKKyt7CisrCXN3aXRjaCAobGVu KSB7CisrCQljYXNlIE5JU1RfUDI1Nl9DT01QUkVTU0VEX0xFTjoKKysJCWNhc2UgTklTVF9QMjU2 X1VOQ09NUFJFU1NFRF9MRU46CisrCQkJcmV0dXJuIGVjMjU2OworKwkJCWJyZWFrOworKwkJY2Fz ZSBOSVNUX1AzODRfQ09NUFJFU1NFRF9MRU46CisrCQljYXNlIE5JU1RfUDM4NF9VTkNPTVBSRVNT RURfTEVOOgorKwkJCXJldHVybiBlYzM4NDsKKysJCQlicmVhazsKKysJfQorKwlyZXR1cm4gTlVM TDsKKyt9CisrCisrc3RhdGljIEVWUF9QS0VZICoKKytidWYybmlzdF9rZXkoY29uc3QgdW5zaWdu ZWQgY2hhciAqcHViX2tleV9idWYsIHNpemVfdCBwdWJfa2V5X2xlbikKKyt7CisrCUVWUF9QS0VZ ICpwa2V5ID0gTlVMTDsKKysJRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworKwlPU1NMX1BBUkFN IHBhcmFtc1szXTsKKysJY29uc3QgY2hhciAqY3VydmVfbmFtZSA9IGxlbjJjdXJ2ZV9uYW1lKHB1 Yl9rZXlfbGVuKTsKKysKKysJaWYgKGN1cnZlX25hbWUgPT0gTlVMTCkKKysJCXJldHVybiBOVUxM OworKworKwljdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiRUMiLCBOVUxM KTsKKysJaWYgKCFjdHgpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKEVWUF9QS0VZX2Zyb21kYXRh X2luaXQoY3R4KSA8PSAwKQorKwkJZ290byBlcnI7CisrCisrCXBhcmFtc1swXSA9IE9TU0xfUEFS QU1fY29uc3RydWN0X3V0Zjhfc3RyaW5nKE9TU0xfUEtFWV9QQVJBTV9HUk9VUF9OQU1FLCBjdXJ2 ZV9uYW1lLCAwKTsKKysJcGFyYW1zWzFdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3Rfb2N0ZXRfc3Ry aW5nKAorKwkJCU9TU0xfUEtFWV9QQVJBTV9QVUJfS0VZLCAodm9pZCAqKXB1Yl9rZXlfYnVmLCBw dWJfa2V5X2xlbik7CisrCXBhcmFtc1syXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X2VuZCgpOwor KworKwlpZiAoRVZQX1BLRVlfZnJvbWRhdGEoY3R4LCAmcGtleSwgRVZQX1BLRVlfUFVCTElDX0tF WSwgcGFyYW1zKSA8PSAwKQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX0NUWF9mcmVlKGN0 eCk7CisrCXJldHVybiBwa2V5OworKworK2VycjoKKysJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsK KysJRVZQX1BLRVlfZnJlZShwa2V5KTsKKysJcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyBp bnQKKytrZXhfbmlzdF9zaGFyZWRfa2V5X2V4dChFVlBfUEtFWSAqcHJpdl9rZXksCisrICAgIGNv bnN0IHVfY2hhciAqcHViX2tleV9idWYsIHNpemVfdCBwdWJfa2V5X2xlbiwgc3RydWN0IHNzaGJ1 ZiAqb3V0KQorK3sKKysJRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworKwl1bnNpZ25lZCBjaGFy ICpzaGFyZWRfc2VjcmV0ID0gTlVMTDsKKysJc2l6ZV90IHNoYXJlZF9zZWNyZXRfbGVuID0gMDsK KysJRVZQX1BLRVkgKnBlZXJfa2V5ID0gYnVmMm5pc3Rfa2V5KHB1Yl9rZXlfYnVmLCBwdWJfa2V5 X2xlbik7CisrCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysKKysJaWYgKHBlZXJf a2V5ID09IE5VTEwpCisrCQlyZXR1cm4gU1NIX0VSUl9LRVlfTEVOR1RIOworKworKwljdHggPSBF VlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwcml2X2tleSwgTlVMTCk7CisrCWlmICgh Y3R4KQorKwkJZ290byBlbmQ7CisrCisrCWlmICgoRVZQX1BLRVlfZGVyaXZlX2luaXQoY3R4KSA8 PSAwKQorKwkJfHwgRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyKGN0eCwgcGVlcl9rZXkpIDw9IDAK KysJCXx8IEVWUF9QS0VZX2Rlcml2ZShjdHgsIE5VTEwsICZzaGFyZWRfc2VjcmV0X2xlbikgPD0g MCkKKysJCWdvdG8gZW5kOworKworKwlzaGFyZWRfc2VjcmV0ID0gT1BFTlNTTF9tYWxsb2Moc2hh cmVkX3NlY3JldF9sZW4pOworKwlpZiAoc2hhcmVkX3NlY3JldCA9PSBOVUxMKQorKwkJZ290byBl bmQ7CisrCisrCWlmIChFVlBfUEtFWV9kZXJpdmUoY3R4LCBzaGFyZWRfc2VjcmV0LCAmc2hhcmVk X3NlY3JldF9sZW4pIDw9IDApCisrCQlnb3RvIGVuZDsKKysKKysJaWYgKChyID0gc3NoYnVmX3B1 dChvdXQsIHNoYXJlZF9zZWNyZXQsIHNoYXJlZF9zZWNyZXRfbGVuKSkgIT0gMCkKKysJCWdvdG8g ZW5kOworKworKwlyID0gMDsKKysKKytlbmQ6CisrCUVWUF9QS0VZX2ZyZWUocGVlcl9rZXkpOwor KwlpZiAoc2hhcmVkX3NlY3JldCkKKysJCU9QRU5TU0xfY2xlYXJfZnJlZShzaGFyZWRfc2VjcmV0 LCBzaGFyZWRfc2VjcmV0X2xlbik7CisrCUVWUF9QS0VZX0NUWF9mcmVlKGN0eCk7CisrCisrCXJl dHVybiByOworK30KKysKKytzdGF0aWMgRVZQX1BLRVkgKgorK25pc3RfcGtleV9rZXlnZW4oc2l6 ZV90IHB1Yl9rZXlfbGVuKQorK3sKKysJY29uc3QgY2hhciAqY3VydmVfbmFtZSA9IGxlbjJjdXJ2 ZV9uYW1lKHB1Yl9rZXlfbGVuKTsKKysJRVZQX1BLRVlfQ1RYICpwY3R4ID0gTlVMTDsKKysJRVZQ X1BLRVkgKnBrZXkgPSBOVUxMOworKwlPU1NMX1BBUkFNIHBhcmFtc1syXTsKKysKKysJaWYgKGN1 cnZlX25hbWUgPT0gTlVMTCkKKysJCXJldHVybiBOVUxMOworKworKwlwY3R4ID0gRVZQX1BLRVlf Q1RYX25ld19mcm9tX25hbWUoTlVMTCwgIkVDIiwgTlVMTCk7CisrCWlmICghcGN0eCkKKysJCXJl dHVybiBOVUxMOworKworKwlpZiAoRVZQX1BLRVlfa2V5Z2VuX2luaXQocGN0eCkgPD0gMCkgewor KwkJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0eCk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlw YXJhbXNbMF0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF91dGY4X3N0cmluZyhPU1NMX1BLRVlfUEFS QU1fR1JPVVBfTkFNRSwgY3VydmVfbmFtZSwgMCk7CisrCXBhcmFtc1sxXSA9IE9TU0xfUEFSQU1f Y29uc3RydWN0X2VuZCgpOworKworKwlpZiAoRVZQX1BLRVlfQ1RYX3NldF9wYXJhbXMocGN0eCwg cGFyYW1zKSA8PSAwCisrCSAgICB8fCBFVlBfUEtFWV9rZXlnZW4ocGN0eCwgJnBrZXkpIDw9IDAp IHsKKysJCUVWUF9QS0VZX0NUWF9mcmVlKHBjdHgpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysK KysJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0eCk7CisrCXJldHVybiBwa2V5OworK30KKysKKytzdGF0 aWMgc2l6ZV90IGRlY29tcHJlc3NfcHViX2tleSh2b2lkICpwdWIsIHNpemVfdCBjb21wcmVzc2Vk X2xlbiwgc2l6ZV90IGRlY29tcHJlc3NlZF9sZW4pCisreworKyAgICBFQ19HUk9VUCAqZ3JvdXAg PSBOVUxMOworKyAgICBFQ19QT0lOVCAqcG9pbnQgPSBOVUxMOworKyAgICBCTl9DVFggKmN0eCA9 IE5VTEw7CisrICAgIHNpemVfdCBsZW4gPSAwOworKyAgICBpbnQgZ3JvdXBfbmlkID0gTklEX3Vu ZGVmOworKworKyAgICBzd2l0Y2ggKGNvbXByZXNzZWRfbGVuKSB7CisrICAgIGNhc2UgTklTVF9Q MjU2X0NPTVBSRVNTRURfTEVOOgorKyAgICAgICAgIGdyb3VwX25pZCA9IE5JRF9YOV82Ml9wcmlt ZTI1NnYxOworKyAgICAgICBicmVhazsKKysgICAgY2FzZSBOSVNUX1AzODRfQ09NUFJFU1NFRF9M RU46CisrICAgICAgICAgZ3JvdXBfbmlkID0gTklEX3NlY3AzODRyMTsKKysgICAgICAgYnJlYWs7 CisrICAgIGRlZmF1bHQ6CisrICAgICAgIHJldHVybiAwOworKyAgICAgICBicmVhazsKKysgICAg fQorKworKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7CisrICAgIGdyb3VwID0gRUNfR1JPVVBfbmV3 X2J5X2N1cnZlX25hbWUoZ3JvdXBfbmlkKTsKKysgICAgaWYgKGN0eCA9PSBOVUxMIHx8IGdyb3Vw ID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgcG9pbnQgPSBFQ19QT0lOVF9u ZXcoZ3JvdXApOworKyAgICBpZiAocG9pbnQgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOwor KworKyAgICBpZiAoIUVDX1BPSU5UX29jdDJwb2ludChncm91cCwgcG9pbnQsIHB1YiwgY29tcHJl c3NlZF9sZW4sIGN0eCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgbGVuID0gRUNfUE9J TlRfcG9pbnQyb2N0KGdyb3VwLCBwb2ludCwgUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQs IHB1YiwgZGVjb21wcmVzc2VkX2xlbiwgY3R4KTsKKysKKytlcnI6CisrICAgIEVDX1BPSU5UX2Zy ZWUocG9pbnQpOworKyAgICBFQ19HUk9VUF9mcmVlKGdyb3VwKTsKKysgICAgQk5fQ1RYX2ZyZWUo Y3R4KTsKKysKKysgICAgcmV0dXJuIGxlbjsKKyt9CisrCisrc3RhdGljIGludAorK2dldF91bmNv bXByZXNzZWRfZWNfcHVia2V5KEVWUF9QS0VZICpwa2V5LCB1bnNpZ25lZCBjaGFyICpidWYsIHNp emVfdCBidWZfbGVuKQorK3sKKysgICAgT1NTTF9QQVJBTSBwYXJhbXNbMl07CisrICAgIHNpemVf dCByZXF1aXJlZF9sZW4gPSAwLCBvdXRfbGVuID0gMDsKKysKKysgICAgcGFyYW1zWzBdID0gT1NT TF9QQVJBTV9jb25zdHJ1Y3RfdXRmOF9zdHJpbmcoCisrICAgICAgICBPU1NMX1BLRVlfUEFSQU1f RUNfUE9JTlRfQ09OVkVSU0lPTl9GT1JNQVQsCisrICAgICAgICAidW5jb21wcmVzc2VkIiwgMCk7 CisrICAgIHBhcmFtc1sxXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X2VuZCgpOworKworKyAgICBp ZiAoRVZQX1BLRVlfc2V0X3BhcmFtcyhwa2V5LCBwYXJhbXMpIDw9IDAKKysJICAgIHx8IEVWUF9Q S0VZX2dldF9vY3RldF9zdHJpbmdfcGFyYW0ocGtleSwgT1NTTF9QS0VZX1BBUkFNX1BVQl9LRVks CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWZfbGVu LCAmcmVxdWlyZWRfbGVuKSA8PSAwKSB7CisrICAgICAgICByZXR1cm4gU1NIX0VSUl9MSUJDUllQ VE9fRVJST1I7CisrICAgIH0KKysKKysgICAgaWYgKHJlcXVpcmVkX2xlbiAhPSBidWZfbGVuKSB7 CisrICAgICAgICAvKiBSZWQgSGF0IGNlcnRpZmllZCBGSVBTIHByb3ZpZGVyIGlnbm9yZXMgT1NT TF9QS0VZX1BBUkFNX0VDX1BPSU5UX0NPTlZFUlNJT05fRk9STUFUCisrCSAqIFdlIG1heSBoYXZl IHRvIHBlcmZvcm0gdGhlIGNvbnZlcnNpb24gbWFudWFsbHkgKi8KKysgICAgICAgIGlmIChsZW4y Y3VydmVfbmFtZShyZXF1aXJlZF9sZW4pID09IGxlbjJjdXJ2ZV9uYW1lKGJ1Zl9sZW4pKSB7Cisr CSAgICBvdXRfbGVuID0gZGVjb21wcmVzc19wdWJfa2V5KGJ1ZiwgcmVxdWlyZWRfbGVuLCBidWZf bGVuKTsKKysJICAgIGlmIChvdXRfbGVuICE9IGJ1Zl9sZW4pIHsKKysJICAgICAgICBkZWJ1Z19m KCJFcnJvciBkZWNvbXByZXNzaW5nIHRoZSBjb21wcmVzc2VkIHB1YmxpYyBrZXkiKTsKKysJICAg ICAgICByZXR1cm4gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisrCSAgICB9IGVsc2UgeworKwkJ cmV0dXJuIDA7CisrCSAgICB9CisrCX0gZWxzZSB7CisrCSAgICBkZWJ1Z19mKCJVbmV4cGVjdGVk IGxlbmd0aCBvZiB1bmNvbXByZXNzZWQgcHVibGljIGtleTogZXhwZWN0ZWQgJWQsIGdvdCAlZCIs IGJ1Zl9sZW4sIHJlcXVpcmVkX2xlbik7CisrCSAgICByZXR1cm4gU1NIX0VSUl9MSUJDUllQVE9f RVJST1I7CisrCX0KKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyt9CisrLyogbmlzdF9ieXRl c19sZW4gc2hvdWxkIGFsd2F5cyBiZSB1bmNvbXByZXNzZWQgKi8KKytzdGF0aWMgaW50Cisra2V4 X2tlbV9tbGtlbV9uaXN0X2tleXBhaXIoc3RydWN0IGtleCAqa2V4LCBzaXplX3QgbWxrZW1fYnl0 ZXNfbGVuLCBzaXplX3QgbmlzdF9ieXRlc19sZW4pCisreworKwlzdHJ1Y3Qgc3NoYnVmICpidWYg PSBOVUxMOworKwl1X2NoYXIgKmNwID0gTlVMTDsKKysJc2l6ZV90IG5lZWQ7CisrCWludCByID0g U1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJdV9jaGFyICpjbGllbnRfa2V5ID0gTlVMTDsKKysK KysJaWYgKChidWYgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisrCQlyZXR1cm4gU1NIX0VSUl9B TExPQ19GQUlMOworKwluZWVkID0gbWxrZW1fYnl0ZXNfbGVuICsgbmlzdF9ieXRlc19sZW47Cisr CWlmICgociA9IHNzaGJ1Zl9yZXNlcnZlKGJ1ZiwgbmVlZCwgJmNwKSkgIT0gMCkKKysJCWdvdG8g b3V0OworKworKwlpZiAobWxrZW1fYnl0ZXNfbGVuID09IGNyeXB0b19rZW1fbWxrZW03NjhfUFVC TElDS0VZQllURVMpIHsKKysJCWNsaWVudF9rZXkgPSBrZXgtPm1sa2VtNzY4X2NsaWVudF9rZXk7 CisrCQlyID0gbWxrZW03Njhfa2V5cGFpcl9nZW4oY3AsIGNsaWVudF9rZXkpOworKwl9CisrCisr CWlmIChtbGtlbV9ieXRlc19sZW4gPT0gY3J5cHRvX2tlbV9tbGtlbTEwMjRfUFVCTElDS0VZQllU RVMpIHsKKysJCWNsaWVudF9rZXkgPSBrZXgtPm1sa2VtMTAyNF9jbGllbnRfa2V5OworKwkJciA9 IG1sa2VtMTAyNF9rZXlwYWlyX2dlbihjcCwgY2xpZW50X2tleSk7CisrCX0KKysKKysJaWYgKGNs aWVudF9rZXkgPT0gTlVMTCkKKysJCWdvdG8gb3V0OworKworKwlpZiAociAhPSAwKQorKwkJZ290 byBvdXQ7CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJs aWMga2V5IG1sa2VtWFhYOiIsIGNwLCBtbGtlbV9ieXRlc19sZW4pOworKyNlbmRpZgorKwljcCAr PSBtbGtlbV9ieXRlc19sZW47CisrCWlmICgoa2V4LT5lY19oeWJyaWRfY2xpZW50X2tleSA9IG5p c3RfcGtleV9rZXlnZW4obmlzdF9ieXRlc19sZW4pKSA9PSBOVUxMKQorKwkJZ290byBvdXQ7Cisr CisrCWlmICgociA9IGdldF91bmNvbXByZXNzZWRfZWNfcHVia2V5KGtleC0+ZWNfaHlicmlkX2Ns aWVudF9rZXksIGNwLCBuaXN0X2J5dGVzX2xlbikpICE9IDApCisrCQlnb3RvIG91dDsKKysKKysj aWZkZWYgREVCVUdfS0VYRUNESAorKwlkdW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgTklT VDoiLCBjcCwgbmlzdF9ieXRlc19sZW4pOworKyNlbmRpZgorKwkvKiBzdWNjZXNzICovCisrCXIg PSAwOworKwlrZXgtPmNsaWVudF9wdWIgPSBidWY7CisrCWJ1ZiA9IE5VTEw7CisrIG91dDoKKysJ c3NoYnVmX2ZyZWUoYnVmKTsKKysgICAgICAgIGlmIChyID09IFNTSF9FUlJfTElCQ1JZUFRPX0VS Uk9SKQorKwkgICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisrCisrCXJldHVybiByOwor K30KKysKKytzdGF0aWMgaW50Cisra2V4X2tlbV9tbGtlbV9uaXN0X2VuYyhzdHJ1Y3Qga2V4ICpr ZXgsIGNvbnN0IGNoYXIgKm5pc3RfY3VydmUsCisrICAgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqY2xp ZW50X2Jsb2IsIHN0cnVjdCBzc2hidWYgKipzZXJ2ZXJfYmxvYnAsCisrICAgc3RydWN0IHNzaGJ1 ZiAqKnNoYXJlZF9zZWNyZXRwKQorK3sKKysJc3RydWN0IHNzaGJ1ZiAqc2VydmVyX2Jsb2IgPSBO VUxMOworKwlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOworKwljb25zdCB1X2NoYXIgKmNsaWVu dF9wdWI7CisrCXVfY2hhciBzZXJ2ZXJfcHViW05JU1RfQlVGX01BWF9TSVpFXTsKKysJdV9jaGFy IGVuY19vdXRbY3J5cHRvX2tlbV9tbGtlbTEwMjRfQ0lQSEVSVEVYVEJZVEVTXTsKKysJdV9jaGFy IHNlY3JldFtjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTXTsKKysJRVZQX1BLRVkgKnNlcnZlcl9r ZXkgPSBOVUxMOworKwl1X2NoYXIgaGFzaFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOworKwlzaXpl X3QgY2xpZW50X2J1Zl9sZW4sIG1sa2VtX2J1Zl9sZW4sIGVjZGhfYnVmX2xlbiwgc2VydmVyX2tl eV9sZW4sIGVuY19vdXRfbGVuOworKwlpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Cisr CisrCSpzZXJ2ZXJfYmxvYnAgPSBOVUxMOworKwkqc2hhcmVkX3NlY3JldHAgPSBOVUxMOworKwor KwljbGllbnRfYnVmX2xlbiA9IHNzaGJ1Zl9sZW4oY2xpZW50X2Jsb2IpOworKwkvKiBjbGllbnRf YmxvYiBjb250YWlucyBib3RoIEtFTSBhbmQgRUNESCBjbGllbnQgcHVia2V5cyAqLworKwlpZiAo c3RyY21wKG5pc3RfY3VydmUsICJQLTI1NiIpID09IDApIHsKKysJCWlmIChjcnlwdG9fa2VtX21s a2VtNzY4X1BVQkxJQ0tFWUJZVEVTID4gY2xpZW50X2J1Zl9sZW4pCisrCQkJcmV0dXJuIHI7Cisr CisrCQllY2RoX2J1Zl9sZW4gPSBjbGllbnRfYnVmX2xlbiAtIGNyeXB0b19rZW1fbWxrZW03Njhf UFVCTElDS0VZQllURVM7CisrCQlpZiAoZWNkaF9idWZfbGVuICE9IE5JU1RfUDI1Nl9DT01QUkVT U0VEX0xFTiAmJgorKwkJCWVjZGhfYnVmX2xlbiAhPSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xF TikKKysJCQlyZXR1cm4gcjsKKysJCW1sa2VtX2J1Zl9sZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4 X1BVQkxJQ0tFWUJZVEVTOworKwkJZW5jX291dF9sZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJ UEhFUlRFWFRCWVRFUzsKKysJCXNlcnZlcl9rZXlfbGVuID0gTklTVF9QMjU2X1VOQ09NUFJFU1NF RF9MRU47CisrCX0gZWxzZSBpZiAoc3RyY21wKG5pc3RfY3VydmUsICJQLTM4NCIpID09IDApIHsK KysJCWlmIChjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUyA+IGNsaWVudF9idWZf bGVuKQorKwkJCXJldHVybiByOworKworKwkJZWNkaF9idWZfbGVuID0gY2xpZW50X2J1Zl9sZW4g LSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUzsKKysJCWlmIChlY2RoX2J1Zl9s ZW4gIT0gTklTVF9QMzg0X0NPTVBSRVNTRURfTEVOICYmCisrCQkJZWNkaF9idWZfbGVuICE9IE5J U1RfUDM4NF9VTkNPTVBSRVNTRURfTEVOKQorKwkJCXJldHVybiByOworKwkJbWxrZW1fYnVmX2xl biA9IGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTOworKwkJZW5jX291dF9sZW4g PSBjcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVM7CisrCQlzZXJ2ZXJfa2V5X2xl biA9IE5JU1RfUDM4NF9VTkNPTVBSRVNTRURfTEVOOworKwl9IGVsc2UKKysJCXJldHVybiByOwor KworKwljbGllbnRfcHViID0gc3NoYnVmX3B0cihjbGllbnRfYmxvYik7CisrI2lmZGVmIERFQlVH X0tFWEVDREgKKysJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5IG1sa2VtOiIsIGNsaWVu dF9wdWIsIG1sa2VtX2J1Zl9sZW4pOworKwlkdW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkg TklTVDoiLCBjbGllbnRfcHViICsgbWxrZW1fYnVmX2xlbiwgZWNkaF9idWZfbGVuKTsKKysjZW5k aWYKKysKKysJLyogYWxsb2NhdGUgYnVmZmVyIGZvciBjb25jYXRlbmF0aW9uIG9mIEtFTSBrZXkg YW5kIEVDREggc2hhcmVkIGtleSAqLworKwkvKiB0aGUgYnVmZmVyIHdpbGwgYmUgaGFzaGVkIGFu ZCB0aGUgcmVzdWx0IGlzIHRoZSBzaGFyZWQgc2VjcmV0ICovCisrCWlmICgoYnVmID0gc3NoYnVm X25ldygpKSA9PSBOVUxMKSB7CisrCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOworKwkJZ290byBv dXQ7CisrCX0KKysJLyogYWxsb2NhdGUgc3BhY2UgZm9yIGVuY3J5cHRlZCBLRU0ga2V5IGFuZCBF Q0RIIHB1YiBrZXkgKi8KKysJaWYgKChzZXJ2ZXJfYmxvYiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVM TCkgeworKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKysJCWdvdG8gb3V0OworKwl9CisrCXIg PSAobWxrZW1fYnVmX2xlbiA9PSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTKSA/ CisrCQltbGtlbTc2OF9lbmNhcF9zZWNyZXQoY2xpZW50X3B1Yiwgc2VjcmV0LCBlbmNfb3V0KSA6 CisrCQltbGtlbTEwMjRfZW5jYXBfc2VjcmV0KGNsaWVudF9wdWIsIHNlY3JldCwgZW5jX291dCk7 CisrCisrCWlmIChyICE9IDApCisrCQlnb3RvIG91dDsKKysKKysJLyogZ2VuZXJhdGUgRUNESCBr ZXkgcGFpciwgc3RvcmUgc2VydmVyIHB1YmtleSBhZnRlciBjaXBoZXJ0ZXh0ICovCisrCXNlcnZl cl9rZXkgPSBuaXN0X3BrZXlfa2V5Z2VuKHNlcnZlcl9rZXlfbGVuKTsKKysKKysJaWYgKChzZXJ2 ZXJfa2V5ID09IE5VTEwpIHx8CisrCSAgICAociA9IGdldF91bmNvbXByZXNzZWRfZWNfcHVia2V5 KHNlcnZlcl9rZXksIHNlcnZlcl9wdWIsIHNlcnZlcl9rZXlfbGVuKSAhPSAwKSB8fAorKwkgICAg KHIgPSBzc2hidWZfcHV0KGJ1Ziwgc2VjcmV0LCBzaXplb2Yoc2VjcmV0KSkpICE9IDAgfHwKKysJ ICAgIChyID0gc3NoYnVmX3B1dChzZXJ2ZXJfYmxvYiwgZW5jX291dCwgZW5jX291dF9sZW4pICE9 IDApfHwKKysJICAgIChyID0gc3NoYnVmX3B1dChzZXJ2ZXJfYmxvYiwgc2VydmVyX3B1Yiwgc2Vy dmVyX2tleV9sZW4pKSAhPSAwKQorKwkJZ290byBvdXQ7CisrCisrCS8qIGFwcGVuZCBFQ0RIIHNo YXJlZCBrZXkgKi8KKysJY2xpZW50X3B1YiArPSBtbGtlbV9idWZfbGVuOworKwlpZiAoKHIgPSBr ZXhfbmlzdF9zaGFyZWRfa2V5X2V4dChzZXJ2ZXJfa2V5LCBjbGllbnRfcHViLCBlY2RoX2J1Zl9s ZW4sIGJ1ZikpIDwgMCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBzc2hfZGlnZXN0X2J1ZmZl cihrZXgtPmhhc2hfYWxnLCBidWYsIGhhc2gsIHNpemVvZihoYXNoKSkpICE9IDApCisrCQlnb3Rv IG91dDsKKysjaWZkZWYgREVCVUdfS0VYRUNESAorKwlkdW1wX2RpZ2VzdCgic2VydmVyIHB1Ymxp YyBOSVNUOiIsIHNlcnZlcl9wdWIsIHNlcnZlcl9rZXlfbGVuKTsKKysJZHVtcF9kaWdlc3QoInNl cnZlciBjaXBoZXIgdGV4dDoiLCBlbmNfb3V0LCBlbmNfb3V0X2xlbik7CisrCWR1bXBfZGlnZXN0 KCJzZXJ2ZXIga2VtIGtleToiLCBzZWNyZXQsIHNpemVvZihzZWNyZXQpKTsKKysJZHVtcF9kaWdl c3QoImNvbmNhdGVuYXRpb24gb2YgS0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5OiIsCisrCSAg ICBzc2hidWZfcHRyKGJ1ZiksIHNzaGJ1Zl9sZW4oYnVmKSk7CisrI2VuZGlmCisrCS8qIHN0cmlu Zy1lbmNvZGVkIGhhc2ggaXMgcmVzdWx0aW5nIHNoYXJlZCBzZWNyZXQgKi8KKysJc3NoYnVmX3Jl c2V0KGJ1Zik7CisrCWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKGJ1ZiwgaGFzaCwKKysJICAg IHNzaF9kaWdlc3RfYnl0ZXMoa2V4LT5oYXNoX2FsZykpKSAhPSAwKQorKwkJZ290byBvdXQ7Cisr I2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3QoImVuY29kZWQgc2hhcmVkIHNlY3Jl dDoiLCBzc2hidWZfcHRyKGJ1ZiksIHNzaGJ1Zl9sZW4oYnVmKSk7CisrI2VuZGlmCisrCS8qIHN1 Y2Nlc3MgKi8KKysJciA9IDA7CisrCSpzZXJ2ZXJfYmxvYnAgPSBzZXJ2ZXJfYmxvYjsKKysJKnNo YXJlZF9zZWNyZXRwID0gYnVmOworKwlzZXJ2ZXJfYmxvYiA9IE5VTEw7CisrCWJ1ZiA9IE5VTEw7 CisrIG91dDoKKysJZXhwbGljaXRfYnplcm8oaGFzaCwgc2l6ZW9mKGhhc2gpKTsKKysJRVZQX1BL RVlfZnJlZShzZXJ2ZXJfa2V5KTsKKysJZXhwbGljaXRfYnplcm8oZW5jX291dCwgc2l6ZW9mKGVu Y19vdXQpKTsKKysJZXhwbGljaXRfYnplcm8oc2VjcmV0LCBzaXplb2Yoc2VjcmV0KSk7CisrCXNz aGJ1Zl9mcmVlKHNlcnZlcl9ibG9iKTsKKysJc3NoYnVmX2ZyZWUoYnVmKTsKKysJcmV0dXJuIHI7 CisrfQorKworK3N0YXRpYyBpbnQKKytrZXhfa2VtX21sa2VtX25pc3RfZGVjKHN0cnVjdCBrZXgg KmtleCwKKysgICAgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2VydmVyX2Jsb2IsIHN0cnVjdCBzc2hi dWYgKipzaGFyZWRfc2VjcmV0cCwKKysgICAgc2l6ZV90IG1sa2VtX2xlbikKKyt7CisrCXN0cnVj dCBzc2hidWYgKmJ1ZiA9IE5VTEw7CisrCWNvbnN0IHVfY2hhciAqY2lwaGVydGV4dCwgKnNlcnZl cl9wdWI7CisrCXVfY2hhciBoYXNoW1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07CisrCXVfY2hhciBk ZWNhcFtjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTXTsKKysJaW50IHI7CisrCXNpemVfdCBuaXN0 X2xlbjsKKysKKysJKnNoYXJlZF9zZWNyZXRwID0gTlVMTDsKKysKKysJaWYgKHNzaGJ1Zl9sZW4o c2VydmVyX2Jsb2IpIDwgbWxrZW1fbGVuKSB7CisrCQlyID0gU1NIX0VSUl9TSUdOQVRVUkVfSU5W QUxJRDsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCW5pc3RfbGVuID0gc3NoYnVmX2xlbihzZXJ2 ZXJfYmxvYikgLSBtbGtlbV9sZW47CisrCisrCXN3aXRjaCAobWxrZW1fbGVuKSB7CisrCQljYXNl IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTOgorKwkJCWlmIChuaXN0X2xlbiAh PSBOSVNUX1AyNTZfQ09NUFJFU1NFRF9MRU4KKysJCQkJJiYgbmlzdF9sZW4gIT0gTklTVF9QMjU2 X1VOQ09NUFJFU1NFRF9MRU4pIHsKKysJCQkJciA9IFNTSF9FUlJfU0lHTkFUVVJFX0lOVkFMSUQ7 CisrCQkJCWdvdG8gb3V0OworKwkJCX0KKysJCWJyZWFrOworKwkJY2FzZSBjcnlwdG9fa2VtX21s a2VtMTAyNF9DSVBIRVJURVhUQllURVM6CisrCQkJaWYgKG5pc3RfbGVuICE9IE5JU1RfUDM4NF9D T01QUkVTU0VEX0xFTgorKwkJCQkmJiBuaXN0X2xlbiAhPSBOSVNUX1AzODRfVU5DT01QUkVTU0VE X0xFTikgeworKwkJCQlyID0gU1NIX0VSUl9TSUdOQVRVUkVfSU5WQUxJRDsKKysJCQkJZ290byBv dXQ7CisrCQkJfQorKwkJYnJlYWs7CisrCX0KKysKKysJY2lwaGVydGV4dCA9IHNzaGJ1Zl9wdHIo c2VydmVyX2Jsb2IpOworKwlzZXJ2ZXJfcHViID0gY2lwaGVydGV4dCArIG1sa2VtX2xlbjsKKysJ LyogaGFzaCBjb25jYXRlbmF0aW9uIG9mIEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtleSAqLwor KwlpZiAoKGJ1ZiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkgeworKwkJciA9IFNTSF9FUlJfQUxM T0NfRkFJTDsKKysJCWdvdG8gb3V0OworKwl9CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVt cF9kaWdlc3QoInNlcnZlciBjaXBoZXIgdGV4dDoiLCBjaXBoZXJ0ZXh0LCBtbGtlbV9sZW4pOwor KwlkdW1wX2RpZ2VzdCgic2VydmVyIHB1YmxpYyBrZXkgTklTVDoiLCBzZXJ2ZXJfcHViLCBuaXN0 X2xlbik7CisrI2VuZGlmCisrCXIgPSAobWxrZW1fbGVuID09IGNyeXB0b19rZW1fbWxrZW03Njhf Q0lQSEVSVEVYVEJZVEVTKSA/CisrCQltbGtlbTc2OF9kZWNhcF9zZWNyZXQoa2V4LT5tbGtlbTc2 OF9jbGllbnRfa2V5LCBjaXBoZXJ0ZXh0LCBkZWNhcCkgOgorKwkJbWxrZW0xMDI0X2RlY2FwX3Nl Y3JldChrZXgtPm1sa2VtMTAyNF9jbGllbnRfa2V5LCBjaXBoZXJ0ZXh0LCBkZWNhcCk7CisrCisr CWlmIChyICE9IDApCisrCQlnb3RvIG91dDsKKysJaWYgKChyID0gc3NoYnVmX3B1dChidWYsIGRl Y2FwLCBzaXplb2YoZGVjYXApKSkgIT0gMCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBrZXhf bmlzdF9zaGFyZWRfa2V5X2V4dChrZXgtPmVjX2h5YnJpZF9jbGllbnRfa2V5LCBzZXJ2ZXJfcHVi LAorKwkJbmlzdF9sZW4sIGJ1ZikpIDwgMCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBzc2hf ZGlnZXN0X2J1ZmZlcihrZXgtPmhhc2hfYWxnLCBidWYsCisrCSAgICBoYXNoLCBzaXplb2YoaGFz aCkpKSAhPSAwKQorKwkJZ290byBvdXQ7CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9k aWdlc3QoImNsaWVudCBrZW0ga2V5OiIsIGRlY2FwLCBzaXplb2YoZGVjYXApKTsKKysJZHVtcF9k aWdlc3QoImNvbmNhdGVuYXRpb24gb2YgS0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5OiIsCisr CSAgICBzc2hidWZfcHRyKGJ1ZiksIHNzaGJ1Zl9sZW4oYnVmKSk7CisrI2VuZGlmCisrCXNzaGJ1 Zl9yZXNldChidWYpOworKwlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZyhidWYsIGhhc2gsCisr CSAgICBzc2hfZGlnZXN0X2J5dGVzKGtleC0+aGFzaF9hbGcpKSkgIT0gMCkKKysJCWdvdG8gb3V0 OworKyNpZmRlZiBERUJVR19LRVhFQ0RICisrCWR1bXBfZGlnZXN0KCJlbmNvZGVkIHNoYXJlZCBz ZWNyZXQ6Iiwgc3NoYnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOworKyNlbmRpZgorKwkv KiBzdWNjZXNzICovCisrCXIgPSAwOworKwkqc2hhcmVkX3NlY3JldHAgPSBidWY7CisrCWJ1ZiA9 IE5VTEw7CisrIG91dDoKKysJZXhwbGljaXRfYnplcm8oaGFzaCwgc2l6ZW9mKGhhc2gpKTsKKysJ ZXhwbGljaXRfYnplcm8oZGVjYXAsIHNpemVvZihkZWNhcCkpOworKwlzc2hidWZfZnJlZShidWYp OworKwlyZXR1cm4gcjsKKyt9CisrCisraW50Cisra2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2tl eXBhaXIoc3RydWN0IGtleCAqa2V4KQorK3sKKysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9r ZXlwYWlyKGtleCwgY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUywgTklTVF9QMjU2 X1VOQ09NUFJFU1NFRF9MRU4pOworK30KKysKKytpbnQKKytrZXhfa2VtX21sa2VtNzY4bmlzdHAy NTZfZW5jKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqY2xpZW50X2Jsb2Is CisrICAgIHN0cnVjdCBzc2hidWYgKipzZXJ2ZXJfYmxvYnAsIHN0cnVjdCBzc2hidWYgKipzaGFy ZWRfc2VjcmV0cCkKKyt7CisrCXJldHVybiBrZXhfa2VtX21sa2VtX25pc3RfZW5jKGtleCwgIlAt MjU2IiwgY2xpZW50X2Jsb2IsIHNlcnZlcl9ibG9icCwgc2hhcmVkX3NlY3JldHApOworK30KKysK KytpbnQKKytrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfZGVjKHN0cnVjdCBrZXggKmtleCwgY29u c3Qgc3RydWN0IHNzaGJ1ZiAqc2VydmVyX2Jsb2IsCisrICAgIHN0cnVjdCBzc2hidWYgKipzaGFy ZWRfc2VjcmV0cCkKKyt7CisrCXJldHVybiBrZXhfa2VtX21sa2VtX25pc3RfZGVjKGtleCwgc2Vy dmVyX2Jsb2IsIHNoYXJlZF9zZWNyZXRwLAorKwkJY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJU RVhUQllURVMpOworK30KKysKKytpbnQKKytrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2tleXBh aXIoc3RydWN0IGtleCAqa2V4KQorK3sKKysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9rZXlw YWlyKGtleCwgY3J5cHRvX2tlbV9tbGtlbTEwMjRfUFVCTElDS0VZQllURVMsIE5JU1RfUDM4NF9V TkNPTVBSRVNTRURfTEVOKTsKKyt9CisrCisraW50Cisra2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4 NF9lbmMoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwK KysgICAgc3RydWN0IHNzaGJ1ZiAqKnNlcnZlcl9ibG9icCwgc3RydWN0IHNzaGJ1ZiAqKnNoYXJl ZF9zZWNyZXRwKQorK3sKKysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9lbmMoa2V4LCAiUC0z ODQiLCBjbGllbnRfYmxvYiwgc2VydmVyX2Jsb2JwLCBzaGFyZWRfc2VjcmV0cCk7CisrfQorKwor K2ludAorK2tleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZGVjKHN0cnVjdCBrZXggKmtleCwgY29u c3Qgc3RydWN0IHNzaGJ1ZiAqc2VydmVyX2Jsb2IsCisrICAgIHN0cnVjdCBzc2hidWYgKipzaGFy ZWRfc2VjcmV0cCkKKyt7CisrCXJldHVybiBrZXhfa2VtX21sa2VtX25pc3RfZGVjKGtleCwgc2Vy dmVyX2Jsb2IsIHNoYXJlZF9zZWNyZXRwLAorKwkJY3J5cHRvX2tlbV9tbGtlbTEwMjRfQ0lQSEVS VEVYVEJZVEVTKTsKKyt9CisrCisgI2Vsc2UgLyogVVNFX01MS0VNNzY4WDI1NTE5ICovCisgaW50 Cisga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKK0BAIC01 NTAsNCArMTE0OSwzOSBAQCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2RlYyhzdHJ1Y3Qga2V4ICpr ZXgsCisgeworIAlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKKyB9CisrCisr aW50CSBrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfa2V5cGFpcihzdHJ1Y3Qga2V4ICopCisrewor KwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKKyt9CisrCisraW50CSBrZXhf a2VtX21sa2VtNzY4bmlzdHAyNTZfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1 ZiAqLAorKyAgICBzdHJ1Y3Qgc3NoYnVmICoqLCBzdHJ1Y3Qgc3NoYnVmICoqKQorK3sKKysJcmV0 dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7CisrfQorKworK2ludAkga2V4X2tlbV9t bGtlbTc2OG5pc3RwMjU2X2RlYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwK KysgICAgc3RydWN0IHNzaGJ1ZiAqKikKKyt7CisrCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VO U1VQUE9SVEVEOworK30KKysKKytpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfa2V5cGFp cihzdHJ1Y3Qga2V4ICopCisreworKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRF RDsKKyt9CisrCisraW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2VuYyhzdHJ1Y3Qga2V4 ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKKysgICAgc3RydWN0IHNzaGJ1ZiAqKiwgc3RydWN0 IHNzaGJ1ZiAqKikKKyt7CisrCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOwor K30KKysKKytpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZGVjKHN0cnVjdCBrZXggKiwg Y29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorKyAgICBzdHJ1Y3Qgc3NoYnVmICoqKQorK3sKKysJcmV0 dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7CisrfQorKworICNlbmRpZiAvKiBVU0Vf TUxLRU03NjhYMjU1MTkgKi8KK2RpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKK2lu ZGV4IDgyNjllNzhjMy4uODdkZjNlOWQ3IDEwMDY0NAorLS0tIGEvbW9uaXRvci5jCisrKysgYi9t b25pdG9yLmMKK0BAIC0yMDM0LDYgKzIwMzQsOCBAQCBtb25pdG9yX2FwcGx5X2tleXN0YXRlKHN0 cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0b3IgKnBtb25pdG9yKQorIAlrZXgtPmtleFtLRVhf QzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJa2V4LT5rZXhbS0VYX0tFTV9TTlRS VVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fc2VydmVyOworIAlrZXgtPmtleFtLRVhfS0VN X01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKysJa2V4LT5rZXhbS0VY X0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKysJa2V4LT5r ZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9zZXJ2ZXI7Cisg CWtleC0+bG9hZF9ob3N0X3B1YmxpY19rZXk9JmdldF9ob3N0a2V5X3B1YmxpY19ieV90eXBlOwor IAlrZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tleT0mZ2V0X2hvc3RrZXlfcHJpdmF0ZV9ieV90eXBl OworIAlrZXgtPmhvc3Rfa2V5X2luZGV4PSZnZXRfaG9zdGtleV9pbmRleDsKK2RpZmYgLS1naXQg YS9teXByb3Bvc2FsLmggYi9teXByb3Bvc2FsLmgKK2luZGV4IGYwMzI5M2YzNS4uZGI1MGM1YjFj IDEwMDY0NAorLS0tIGEvbXlwcm9wb3NhbC5oCisrKysgYi9teXByb3Bvc2FsLmgKK0BAIC0yNiw2 ICsyNiw4IEBACisgCisgI2RlZmluZSBLRVhfU0VSVkVSX0tFWAlcCisgCSJtbGtlbTc2OHgyNTUx OS1zaGEyNTYsIiBcCisrCSJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiwiIFwKKysJIm1sa2VtMTAy NG5pc3RwMzg0LXNoYTM4NCwiIFwKKyAJInNudHJ1cDc2MXgyNTUxOS1zaGE1MTIsIiBcCisgCSJz bnRydXA3NjF4MjU1MTktc2hhNTEyQG9wZW5zc2guY29tLCIgXAorIAkiY3VydmUyNTUxOS1zaGEy NTYsIiBcCitAQCAtOTksNiArMTAxLDggQEAKKyAJImFlczE5Mi1jYmMsYWVzMjU2LWNiYyxyaWpu ZGFlbC1jYmNAbHlzYXRvci5saXUuc2UsIiBcCisgCSJhZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFl czI1Ni1nY21Ab3BlbnNzaC5jb20iCisgI2RlZmluZSBLRVhfREVGQVVMVF9LRVhfRklQUwkJXAor KwkibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYsIiBcCisrCSJtbGtlbTEwMjRuaXN0cDM4NC1zaGEz ODQsIiBcCisgCSJlY2RoLXNoYTItbmlzdHAyNTYsIiBcCisgCSJlY2RoLXNoYTItbmlzdHAzODQs IiBcCisgCSJlY2RoLXNoYTItbmlzdHA1MjEsIiBcCitkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0 dGVzdHMva2V4L3Rlc3Rfa2V4LmMgYi9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYwor aW5kZXggZGI3Y2I0MThiLi5mYWQ5YTYzNGEgMTAwNjQ0CistLS0gYS9yZWdyZXNzL3VuaXR0ZXN0 cy9rZXgvdGVzdF9rZXguYworKysrIGIvcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMK K0BAIC0xNjksNiArMTY5LDggQEAgZG9fa2V4X3dpdGhfa2V5KGNoYXIgKmtleCwgY2hhciAqY2lw aGVyLCBjaGFyICptYWMsCisgCXNlcnZlcjItPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9 IGtleF9nZW5fc2VydmVyOworIAlzZXJ2ZXIyLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgy NTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCXNlcnZlcjItPmtleC0+a2V4W0tFWF9L RU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworKwlzZXJ2ZXIyLT5r ZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVy OworKwlzZXJ2ZXIyLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0g PSBrZXhfZ2VuX3NlcnZlcjsKKyAJc2VydmVyMi0+a2V4LT5sb2FkX2hvc3RfcHVibGljX2tleSA9 IHNlcnZlci0+a2V4LT5sb2FkX2hvc3RfcHVibGljX2tleTsKKyAJc2VydmVyMi0+a2V4LT5sb2Fk X2hvc3RfcHJpdmF0ZV9rZXkgPSBzZXJ2ZXItPmtleC0+bG9hZF9ob3N0X3ByaXZhdGVfa2V5Owor IAlzZXJ2ZXIyLT5rZXgtPnNpZ24gPSBzZXJ2ZXItPmtleC0+c2lnbjsKK0BAIC0yNDIsNiArMjQ0 LDggQEAga2V4X3Rlc3RzKHZvaWQpCisgCX0KKyAjIGlmZGVmIFVTRV9NTEtFTTc2OFgyNTUxOQor IAlkb19rZXgoIm1sa2VtNzY4eDI1NTE5LXNoYTI1NiIpOworKwlkb19rZXgoIm1sa2VtNzY4bmlz dHAyNTYtc2hhMjU2Iik7CisrCWRvX2tleCgibWxrZW0xMDI0bmlzdHAzODQtc2hhMzg0Iik7Cisg IyBlbmRpZiAvKiBVU0VfTUxLRU03NjhYMjU1MTkgKi8KKyAjIGlmZGVmIFVTRV9TTlRSVVA3NjFY MjU1MTkKKyAJZG9fa2V4KCJzbnRydXA3NjF4MjU1MTktc2hhNTEyIik7CitkaWZmIC0tZ2l0IGEv c3NoLWtleXNjYW4uYyBiL3NzaC1rZXlzY2FuLmMKK2luZGV4IDI4NGQ0ZGVlZS4uNDA1ZmFmMTY3 IDEwMDY0NAorLS0tIGEvc3NoLWtleXNjYW4uYworKysrIGIvc3NoLWtleXNjYW4uYworQEAgLTMw Nyw3ICszMDcsOCBAQCBrZXlncmFiX3NzaDIoY29uICpjKQorIAljLT5jX3NzaC0+a2V4LT5rZXhb S0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CisgCWMtPmNfc3NoLT5rZXgtPmtl eFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9jbGllbnQ7CisgCWMt PmNfc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2Vu X2NsaWVudDsKKy0JYy0+Y19zc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhFQ0RIX1NIQTI1 Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJYy0+Y19zc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03 NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CisrCWMtPmNfc3NoLT5rZXgtPmtl eFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX2NsaWVudDsKKyAJ c3NoX3NldF92ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2soYy0+Y19zc2gsIGtleV9wcmludF93cmFw cGVyKTsKKyAJLyoKKyAJICogZG8gdGhlIGtleS1leGNoYW5nZSB1bnRpbCBhbiBlcnJvciBvY2N1 cnMgb3IgdW50aWwKK2RpZmYgLS1naXQgYS9zc2hfYXBpLmMgYi9zc2hfYXBpLmMKK2luZGV4IGQw MWFjNTQ4My4uZjU1NGIxMmNkIDEwMDY0NAorLS0tIGEvc3NoX2FwaS5jCisrKysgYi9zc2hfYXBp LmMKK0BAIC0xMzMsNyArMTMzLDggQEAgc3NoX2luaXQoc3RydWN0IHNzaCAqKnNzaHAsIGludCBp c19zZXJ2ZXIsIHN0cnVjdCBrZXhfcGFyYW1zICprZXhfcGFyYW1zKQorIAkJc3NoLT5rZXgtPmtl eFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJCXNzaC0+a2V4LT5rZXhb S0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fc2VydmVyOworIAkJc3No LT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZl cjsKKy0JCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OEVDREhfU0hBMjU2XSA9IGtleF9n ZW5fc2VydmVyOworKwkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hB MjU2XSA9IGtleF9nZW5fc2VydmVyOworKwkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNMTAy NE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJCXNzaC0+a2V4LT5sb2FkX2hv c3RfcHVibGljX2tleT0mX3NzaF9ob3N0X3B1YmxpY19rZXk7CisgCQlzc2gtPmtleC0+bG9hZF9o b3N0X3ByaXZhdGVfa2V5PSZfc3NoX2hvc3RfcHJpdmF0ZV9rZXk7CisgCQlzc2gtPmtleC0+c2ln bj0mX3NzaF9ob3N0X2tleV9zaWduOworQEAgLTE1MSw3ICsxNTIsOCBAQCBzc2hfaW5pdChzdHJ1 Y3Qgc3NoICoqc3NocCwgaW50IGlzX3NlcnZlciwgc3RydWN0IGtleF9wYXJhbXMgKmtleF9wYXJh bXMpCisgCQlzc2gtPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50 OworIAkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4 X2dlbl9jbGllbnQ7CisgCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hB MjU2XSA9IGtleF9nZW5fY2xpZW50OworLQkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4 RUNESF9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CisrCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1f TUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CisrCQlzc2gtPmtleC0+ a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fY2xpZW50Owor IAkJc3NoLT5rZXgtPnZlcmlmeV9ob3N0X2tleSA9Jl9zc2hfdmVyaWZ5X2hvc3Rfa2V5OworIAl9 CisgCSpzc2hwID0gc3NoOworZGlmZiAtLWdpdCBhL3NzaGNvbm5lY3QyLmMgYi9zc2hjb25uZWN0 Mi5jCitpbmRleCAzNjYwODczYTYuLmI1ZDYzZTU5OSAxMDA2NDQKKy0tLSBhL3NzaGNvbm5lY3Qy LmMKKysrKyBiL3NzaGNvbm5lY3QyLmMKK0BAIC0zNDksNyArMzQ5LDggQEAgc3NoX2tleDIoc3Ry dWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFk ZHIsCisgCXNzaC0+a2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7 CisgCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9n ZW5fY2xpZW50OworIAlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2 XSA9IGtleF9nZW5fY2xpZW50OworLQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhFQ0RI X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VN NzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OworKwlzc2gtPmtleC0+a2V4W0tF WF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fY2xpZW50OworIAlzc2gt PmtleC0+dmVyaWZ5X2hvc3Rfa2V5PSZ2ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2s7CisgCisgI2lm IGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkKK2RpZmYgLS1naXQgYS9z c2hkLWF1dGguYyBiL3NzaGQtYXV0aC5jCitpbmRleCAwNzkwNjNmNDcuLjYwMzg3NThjZSAxMDA2 NDQKKy0tLSBhL3NzaGQtYXV0aC5jCisrKysgYi9zc2hkLWF1dGguYworQEAgLTg2NCw2ICs4NjQs OCBAQCBkb19zc2gyX2tleChzdHJ1Y3Qgc3NoICpzc2gpCisgCWtleC0+a2V4W0tFWF9DMjU1MTlf U0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworIAlrZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgy NTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCWtleC0+a2V4W0tFWF9LRU1fTUxLRU03 NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworKwlrZXgtPmtleFtLRVhfS0VNX01M S0VNNzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworKwlrZXgtPmtleFtLRVhf S0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJa2V4LT5s b2FkX2hvc3RfcHVibGljX2tleT0mZ2V0X2hvc3RrZXlfcHVibGljX2J5X3R5cGU7CisgCWtleC0+ bG9hZF9ob3N0X3ByaXZhdGVfa2V5PSZnZXRfaG9zdGtleV9wcml2YXRlX2J5X3R5cGU7CisgCWtl eC0+aG9zdF9rZXlfaW5kZXg9JmdldF9ob3N0a2V5X2luZGV4OworLS0gCisyLjU1LjAKKwoKZGlm ZiAtLWdpdCBhLzAwNDctc3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdTU0FQ SS5wYXRjaCBiLzAwNDctc3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdTU0FQ SS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwNmJkZi4uMDAwMDAwMAot LS0gYS8wMDQ3LXN1cHBvcnQtYXV0aGVudGljYXRpb24taW5kaWNhdG9ycy1pbi1HU1NBUEkucGF0 Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0ODcgKzAsMCBAQAotRnJvbSA0NzdlMGRmZTQ0ZDVlMzA5 YTkzNTczNzU1ODI4ODQyMjBmZGU0YWNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTog RG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogU3VuLCAxMiBBcHIg MjAyNiAxMjoyMzo1MSArMDIwMAotU3ViamVjdDogW1BBVENIIDQ3LzU0XSBzdXBwb3J0IGF1dGhl bnRpY2F0aW9uIGluZGljYXRvcnMgaW4gR1NTQVBJCi0KLWh0dHBzOi8vZ2l0aHViLmNvbS9vcGVu c3NoL29wZW5zc2gtcG9ydGFibGUvcHVsbC81MDAKLQotQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBT b25uZXQgNC41IDxub3JlcGx5QGFudGhyb3BpYy5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgICAg fCAgIDEgKwotIGdzcy1zZXJ2LWtyYjUuYyB8ICA4OSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0KLSBnc3Mtc2Vydi5jICAgICAgfCAxMDggKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCi0gc2VydmNvbmYuYyAgICAgIHwgIDE2ICsr KysrKy0KLSBzZXJ2Y29uZi5oICAgICAgfCAgIDIgKwotIHNzaC1nc3MuaCAgICAgICB8ICAgNyAr KysrCi0gc3NoZF9jb25maWcuNSAgIHwgIDQ2ICsrKysrKysrKysrKysrKysrKysrKwotIDcgZmls ZXMgY2hhbmdlZCwgMjU2IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0t Z2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA4NmYwZTllMDkuLjEzODhl NWU3MiAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAt NTEyOSw2ICs1MTI5LDcgQEAgQUNfQVJHX1dJVEgoW2tlcmJlcm9zNV0sCi0gCQlBQ19DSEVDS19I RUFERVJTKFtnc3NhcGkuaCBnc3NhcGkvZ3NzYXBpLmhdKQotIAkJQUNfQ0hFQ0tfSEVBREVSUyhb Z3NzYXBpX2tyYjUuaCBnc3NhcGkvZ3NzYXBpX2tyYjUuaF0pCi0gCQlBQ19DSEVDS19IRUFERVJT KFtnc3NhcGlfZ2VuZXJpYy5oIGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oXSkKLSsJCUFDX0NIRUNL X0hFQURFUlMoW2dzc2FwaV9leHQuaCBnc3NhcGkvZ3NzYXBpX2V4dC5oXSkKLSAKLSAJCUFDX1NF QVJDSF9MSUJTKFtrX2hhc2Fmc10sIFtrYWZzXSwgW0FDX0RFRklORShbVVNFX0FGU10sIFsxXSwK LSAJCQlbRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIGxpYmthZnMnIEFGUyBzdXBwb3J0 XSldKQotZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LWtyYjUuYyBiL2dzcy1zZXJ2LWtyYjUuYwotaW5k ZXggNzIzNTA5NDA5Li5mYzdjYWJjMDkgMTAwNjQ0Ci0tLS0gYS9nc3Mtc2Vydi1rcmI1LmMKLSsr KyBiL2dzcy1zZXJ2LWtyYjUuYwotQEAgLTQzLDYgKzQzLDcgQEAKLSAjaW5jbHVkZSAibG9nLmgi Ci0gI2luY2x1ZGUgIm1pc2MuaCIKLSAjaW5jbHVkZSAic2VydmNvbmYuaCIKLSsjaW5jbHVkZSAi bWF0Y2guaCIKLSAKLSAjaW5jbHVkZSAic3NoLWdzcy5oIgotIAotQEAgLTg3LDYgKzg4LDMzIEBA IHNzaF9nc3NhcGlfa3JiNV9pbml0KHZvaWQpCi0gCXJldHVybiAxOwotIH0KLSAKLSsvKiBDaGVj ayBpZiBhbnkgb2YgdGhlIGluZGljYXRvcnMgaW4gdGhlIEtlcmJlcm9zIHRpY2tldCBtYXRjaAot KyAqIG9uZSBvZiBpbmRpY2F0b3JzIGluIHRoZSBsaXN0IG9mIGFsbG93ZWQvZGVuaWVkIHJ1bGVz LgotKyAqIEluIGNhc2Ugb2YgdGhlIG1hdGNoLCBhcHBseSB0aGUgZGVjaXNpb24gZnJvbSB0aGUg cnVsZS4KLSsgKiBJbiBjYXNlIG9mIG5vIGluZGljYXRvciBmcm9tIHRoZSB0aWNrZXQgbWF0Y2hp bmcgdGhlIHJ1bGUsIGRlbnkKLSsgKi8KLSsKLStzdGF0aWMgaW50Ci0rc3NoX2dzc2FwaV9jaGVj a19pbmRpY2F0b3JzKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGludCAqbWF0Y2hlZCkKLSt7 Ci0rCWludCByZXQ7Ci0rCXVfaW50IGk7Ci0rCSptYXRjaGVkID0gLTE7Ci0rCi0rCS8qIENoZWNr IGluZGljYXRvcnMgKi8KLSsJZm9yIChpID0gMDsgY2xpZW50LT5pbmRpY2F0b3JzW2ldICE9IE5V TEw7IGkrKykgewotKwkJcmV0ID0gbWF0Y2hfcGF0dGVybl9saXN0KGNsaWVudC0+aW5kaWNhdG9y c1tpXSwKLSsJCQkJCSBvcHRpb25zLmdzc19pbmRpY2F0b3JzLCAxKTsKLSsJCS8qIG5lZ2F0aXZl IG9yIHBvc2l0aXZlIG1hdGNoICovCi0rCQlpZiAocmV0ICE9IDApIHsKLSsJCQkqbWF0Y2hlZCA9 IGk7Ci0rCQkJcmV0dXJuIHJldDsKLSsJCX0KLSsJfQotKwkvKiBObyBydWxlIG1hdGNoZWQgKi8K LSsJcmV0dXJuIDA7Ci0rfQotKwotIC8qIENoZWNrIGlmIHRoaXMgdXNlciBpcyBPSyB0byBsb2dp bi4gVGhpcyBvbmx5IHdvcmtzIHdpdGgga3JiNSAtIG90aGVyCi0gICogR1NTQVBJIG1lY2hhbmlz bXMgd2lsbCBuZWVkIHRoZWlyIG93bi4KLSAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgaXMg T0sgdG8gbG9nIGluLCBvdGhlcndpc2UgcmV0dXJucyAwCi1AQCAtMTkzLDE1ICsyMjEsMTUgQEAg c3RhdGljIGludAotIHNzaF9nc3NhcGlfa3JiNV91c2Vyb2soc3NoX2dzc2FwaV9jbGllbnQgKmNs aWVudCwgY2hhciAqbmFtZSkKLSB7Ci0gCWtyYjVfcHJpbmNpcGFsIHByaW5jOwotLQlpbnQgcmV0 dmFsOwotKwlpbnQgcmV0dmFsLCBtYXRjaGVkLCBzdWNjZXNzOwotIAljb25zdCBjaGFyICplcnJt c2c7Ci0gCWludCBrNWxvZ2luX2V4aXN0czsKLSAKLSAJaWYgKHNzaF9nc3NhcGlfa3JiNV9pbml0 KCkgPT0gMCkKLSAJCXJldHVybiAwOwotIAotLQlpZiAoKHJldHZhbCA9IGtyYjVfcGFyc2VfbmFt ZShrcmJfY29udGV4dCwgY2xpZW50LT5leHBvcnRlZG5hbWUudmFsdWUsCi0tCSAgICAmcHJpbmMp KSkgewotKwlyZXR2YWwgPSBrcmI1X3BhcnNlX25hbWUoa3JiX2NvbnRleHQsIGNsaWVudC0+ZXhw b3J0ZWRuYW1lLnZhbHVlLCAmcHJpbmMpOwotKwlpZiAocmV0dmFsKSB7Ci0gCQllcnJtc2cgPSBr cmI1X2dldF9lcnJvcl9tZXNzYWdlKGtyYl9jb250ZXh0LCByZXR2YWwpOwotIAkJbG9naXQoImty YjVfcGFyc2VfbmFtZSgpOiAlLjEwMHMiLCBlcnJtc2cpOwotIAkJa3JiNV9mcmVlX2Vycm9yX21l c3NhZ2Uoa3JiX2NvbnRleHQsIGVycm1zZyk7Ci1AQCAtMjE2LDE3ICsyNDQsNjAgQEAgc3NoX2dz c2FwaV9rcmI1X3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICpuYW1lKQot IAlpZiAoazVsb2dpbl9leGlzdHMgJiYKLSAJICAgIHNzaF9rcmI1X2t1c2Vyb2soa3JiX2NvbnRl eHQsIHByaW5jLCBuYW1lLCBrNWxvZ2luX2V4aXN0cykpIHsKLSAJCXJldHZhbCA9IDE7Ci0tCQls b2dpdCgiQXV0aG9yaXplZCB0byAlcywga3JiNSBwcmluY2lwYWwgJXMgKGtyYjVfa3VzZXJvayki LAotLQkJICAgIG5hbWUsIChjaGFyICopY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSk7Ci0rCQll cnJtc2cgPSAia3JiNV9rdXNlcm9rIjsKLSAJfSBlbHNlIGlmIChzc2hfZ3NzYXBpX2tyYjVfY21k b2socHJpbmMsIGNsaWVudC0+ZXhwb3J0ZWRuYW1lLnZhbHVlLAotIAkJbmFtZSwgazVsb2dpbl9l eGlzdHMpKSB7Ci0gCQlyZXR2YWwgPSAxOwotLQkJbG9naXQoIkF1dGhvcml6ZWQgdG8gJXMsIGty YjUgcHJpbmNpcGFsICVzICIKLS0JCSAgICAiKHNzaF9nc3NhcGlfa3JiNV9jbWRvaykiLAotLQkJ ICAgIG5hbWUsIChjaGFyICopY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSk7Ci0tCX0gZWxzZQot KwkJZXJybXNnID0gInNzaF9nc3NhcGlfa3JiNV9jbWRvayI7Ci0rCX0gZWxzZSB7Ci0gCQlyZXR2 YWwgPSAwOwotKwkJZ290byBvdXQ7Ci0rCX0KLSAKLSsJLyogQXQgdGhpcyBwb2ludCB3ZSBhcmUg Z29vZCBpZiBubyBpbmRpY2F0b3JzIHdlcmUgZGVmaW5lZCAqLwotKwlpZiAob3B0aW9ucy5nc3Nf aW5kaWNhdG9ycyA9PSBOVUxMKSB7Ci0rCQlyZXR2YWwgPSAxOwotKwkJZ290byBvdXQ7Ci0rCX0K LSsKLSsJLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGluZGljYXRvcnMgZGVmaW5lZCBpbiB0aGUg Y29uZmlndXJhdGlvbiwKLSsJICogaWYgY2xpZW50dCBkaWQgbm90IHByb3ZpZGUgYW55IGluZGlj YXRvcnMsIHdlIHJlamVjdCAqLwotKwlpZiAoIWNsaWVudC0+aW5kaWNhdG9ycykgewotKwkJcmV0 dmFsID0gMDsKLSsJCWxvZ2l0KCJHU1NBUEkgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBlbmZv cmNlZCAiCi0rCQkgICAgICAiYnV0IGluZGljYXRvcnMgbm90IHByb3ZpZGVkIGJ5IHRoZSBjbGll bnQuICIKLSsJCSAgICAgICJrcmI1IHByaW5jaXBhbCAlcyBkZW5pZWQiLAotKwkJICAgICAgKGNo YXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0r CS8qIEF0IHRoaXMgcG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZW5mb3JjZXMgcHJlc2VuY2Ugb2Yg aW5kaWNhdG9ycwotKwkgKiBjaGVjayB0aGUgbWF0Y2ggKi8KLSsJbWF0Y2hlZCA9IC0xOwotKwlz dWNjZXNzID0gc3NoX2dzc2FwaV9jaGVja19pbmRpY2F0b3JzKGNsaWVudCwgJm1hdGNoZWQpOwot KwotKwlzd2l0Y2ggKHN1Y2Nlc3MpIHsKLSsJY2FzZSAxOgotKwkJbG9naXQoIlByb3ZpZGVkIGlu ZGljYXRvciAlcyBhbGxvd2VkIGJ5IHRoZSBjb25maWd1cmF0aW9uIiwKLSsJCSAgICAgIGNsaWVu dC0+aW5kaWNhdG9yc1ttYXRjaGVkXSk7Ci0rCQlyZXR2YWwgPSAxOwotKwkJYnJlYWs7Ci0rCWNh c2UgLTE6Ci0rCQlsb2dpdCgiUHJvdmlkZWQgaW5kaWNhdG9yICVzIHJlamVjdGVkIGJ5IHRoZSBj b25maWd1cmF0aW9uIiwKLSsJCSAgICAgIGNsaWVudC0+aW5kaWNhdG9yc1ttYXRjaGVkXSk7Ci0r CQlyZXR2YWwgPSAwOwotKwkJYnJlYWs7Ci0rCWRlZmF1bHQ6Ci0rCQlsb2dpdCgiUHJvdmlkZWQg aW5kaWNhdG9ycyBkbyBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24iKTsKLSsJCXJldHZhbCA9 IDA7Ci0rCQlicmVhazsKLSsJfQotKwotK291dDoKLSsJaWYgKHJldHZhbCA9PSAxKSB7Ci0rCQls b2dpdCgiQXV0aG9yaXplZCB0byAlcywga3JiNSBwcmluY2lwYWwgJXMgKCVzKSIsCi0rCQkgICAg ICBuYW1lLCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsIGVycm1zZyk7Ci0rCX0K LSAJa3JiNV9mcmVlX3ByaW5jaXBhbChrcmJfY29udGV4dCwgcHJpbmMpOwotIAlyZXR1cm4gcmV0 dmFsOwotIH0KLWRpZmYgLS1naXQgYS9nc3Mtc2Vydi5jIGIvZ3NzLXNlcnYuYwotaW5kZXggNmVi N2QyMTYzLi42ODZhYzRlYjMgMTAwNjQ0Ci0tLS0gYS9nc3Mtc2Vydi5jCi0rKysgYi9nc3Mtc2Vy di5jCi1AQCAtNTUsNyArNTUsNyBAQCBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOwotIAot IHN0YXRpYyBzc2hfZ3NzYXBpX2NsaWVudCBnc3NhcGlfY2xpZW50ID0KLSAgICAgeyBHU1NfQ19F TVBUWV9CVUZGRVIsIEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfTk9fQ1JFREVOVElBTCwKLS0g ICAgR1NTX0NfTk9fTkFNRSwgTlVMTCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCAw LCAwfTsKLSsgICAgR1NTX0NfTk9fTkFNRSwgTlVMTCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEx9LCAwLCAwLCBOVUxMfTsKLSAKLSBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX251bGxfbWVj aCA9Ci0gICAgIHsgTlVMTCwgTlVMTCwgezAsIE5VTEx9LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMfTsKLUBAIC0yOTUsNiArMjk1LDk5IEBAIHNzaF9nc3NhcGlfcGFyc2VfZW5hbWUoR3Nz Y3R4dCAqY3R4LCBnc3MKLSAJcmV0dXJuIEdTU19TX0NPTVBMRVRFOwotIH0KLSAKLSsKLSsvKiBF eHRyYWN0IGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMgZnJvbSB0aGUgS2VyYmVyb3MgdGlja2V0 LiBBdXRoZW50aWNhdGlvbgotKyAqIGluZGljYXRvcnMgYXJlIEdTU0FQSSBuYW1lIGF0dHJpYnV0 ZXMgZm9yIHRoZSBuYW1lICJhdXRoLWluZGljYXRvcnMiLgotKyAqIE11bHRpcGxlIGluZGljYXRv cnMgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgdGlja2V0LgotKyAqIEVhY2ggaW5kaWNhdG9yIGlz IGFuIHV0Zjggc3RyaW5nLiAqLwotKwotKyNkZWZpbmUgQVVUSF9JTkRJQ0FUT1JTX1RBRyAiYXV0 aC1pbmRpY2F0b3JzIgotKyNkZWZpbmUgU1NIX0dTU0FQSV9NQVhfSU5ESUNBVE9SUyA2NAotKwot Ky8qIFByaXZpbGVnZWQgKGNhbGxlZCBmcm9tIGFjY2VwdF9zZWN1cmVfY3R4KSAqLwotK3N0YXRp YyBPTV91aW50MzIKLStzc2hfZ3NzYXBpX2dldGluZGljYXRvcnMoR3NzY3R4dCAqY3R4LCBnc3Nf bmFtZV90IGdzc19uYW1lLCBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQotK3sKLSsJZ3NzX2J1 ZmZlcl9zZXRfdCBhdHRycyA9IEdTU19DX05PX0JVRkZFUl9TRVQ7Ci0rCWdzc19idWZmZXJfZGVz YyB2YWx1ZSA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJZ3NzX2J1ZmZlcl9kZXNjIGRpc3BsYXlf dmFsdWUgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0rCWludCBpc19tZWNobmFtZSwgYXV0aGVudGlj YXRlZCwgY29tcGxldGUsIG1vcmU7Ci0rCXNpemVfdCBjb3VudCwgaTsKLSsKLSsJLyogYWx3YXlz IGluaXRpYWxpemUgY2xpZW50LT5pbmRpY2F0b3JzICovCi0rCWNsaWVudC0+aW5kaWNhdG9ycyA9 IE5VTEw7Ci0rCi0rCWN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9uYW1lKCZjdHgtPm1pbm9yLCBn c3NfbmFtZSwKLSsJCQkJICAgICAgJmlzX21lY2huYW1lLCBOVUxMLCAmYXR0cnMpOwotKwlpZiAo Y3R4LT5tYWpvciAhPSBHU1NfU19DT01QTEVURSkKLSsJCXJldHVybiBjdHgtPm1ham9yOwotKwot KwlpZiAoYXR0cnMgPT0gR1NTX0NfTk9fQlVGRkVSX1NFVCkgewotKwkJLyogbm8gaW5kaWNhdG9y cyBpbiB0aGUgdGlja2V0ICovCi0rCQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7Ci0rCX0KLSsKLSsJ LyogY2xpZW50LT5pbmRpY2F0b3JzIGlzIE5VTEwgdGVybWluYXRlZCAqLwotKwljb3VudCA9IDA7 Ci0rCWNsaWVudC0+aW5kaWNhdG9ycyA9IHhjYWxsb2MoY291bnQgKyAxLCBzaXplb2YoY2hhciAq KSk7Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCBhdHRycy0+Y291bnQ7IGkrKykgewotKwkJYXV0aGVu dGljYXRlZCA9IDA7Ci0rCQljb21wbGV0ZSA9IDA7Ci0rCQltb3JlID0gLTE7Ci0rCi0rCQkvKiBz a2lwIGFueXRoaW5nIGJ1dCBhdXRoLWluZGljYXRvcnMgKi8KLSsJCWlmICgoKHNpemVvZihBVVRI X0lORElDQVRPUlNfVEFHKSAtIDEpICE9IGF0dHJzLT5lbGVtZW50c1tpXS5sZW5ndGgpIHx8Ci0r CQkgICAgbWVtY21wKEFVVEhfSU5ESUNBVE9SU19UQUcsIGF0dHJzLT5lbGVtZW50c1tpXS52YWx1 ZSwKLSsJCQkgICBzaXplb2YoQVVUSF9JTkRJQ0FUT1JTX1RBRykgLSAxKSAhPSAwKQotKwkJCWNv bnRpbnVlOwotKwotKwkJLyogcmV0cmlldmUgYWxsIGluZGljYXRvcnMgKi8KLSsJCXdoaWxlICht b3JlICE9IDApIHsKLSsJCQl2YWx1ZS52YWx1ZSA9IE5VTEw7Ci0rCQkJZGlzcGxheV92YWx1ZS52 YWx1ZSA9IE5VTEw7Ci0rCi0rCQkJY3R4LT5tYWpvciA9IGdzc19nZXRfbmFtZV9hdHRyaWJ1dGUo JmN0eC0+bWlub3IsIGdzc19uYW1lLAotKwkJCQkJCQkgICAgJmF0dHJzLT5lbGVtZW50c1tpXSwK LSsJCQkJCQkJICAgICZhdXRoZW50aWNhdGVkLCAmY29tcGxldGUsCi0rCQkJCQkJCSAgICAmdmFs dWUsICZkaXNwbGF5X3ZhbHVlLCAmbW9yZSk7Ci0rCQkJaWYgKGN0eC0+bWFqb3IgIT0gR1NTX1Nf Q09NUExFVEUpCi0rCQkJCWdvdG8gb3V0OwotKwotKwkJCWlmICh2YWx1ZS52YWx1ZSA9PSBOVUxM IHx8ICFhdXRoZW50aWNhdGVkKQotKwkJCQljb250aW51ZTsKLSsKLSsJCQlpZiAoY291bnQgPj0g U1NIX0dTU0FQSV9NQVhfSU5ESUNBVE9SUykgewotKwkJCQlsb2dpdCgic3NoX2dzc2FwaV9nZXRp bmRpY2F0b3JzOiIKLSsJCQkJICAgICAgIiB0b28gbWFueSBpbmRpY2F0b3JzLCB0cnVuY2F0aW5n IGF0ICVkIiwKLSsJCQkJICAgICAgU1NIX0dTU0FQSV9NQVhfSU5ESUNBVE9SUyk7Ci0rCQkJCWdv dG8gb3V0OwotKwkJCX0KLSsKLSsJCQljbGllbnQtPmluZGljYXRvcnNbY291bnRdID0geG1hbGxv Yyh2YWx1ZS5sZW5ndGggKyAxKTsKLSsJCQltZW1jcHkoY2xpZW50LT5pbmRpY2F0b3JzW2NvdW50 XSwgdmFsdWUudmFsdWUsIHZhbHVlLmxlbmd0aCk7Ci0rCQkJY2xpZW50LT5pbmRpY2F0b3JzW2Nv dW50XVt2YWx1ZS5sZW5ndGhdID0gJ1wwJzsKLSsJCQljb3VudCsrOwotKwotKwkJCS8qIGFkZCBO VUxMIHRlcm1pbmF0b3IgKi8KLSsJCQljbGllbnQtPmluZGljYXRvcnMgPSB4cmVjYWxsb2NhcnJh eShjbGllbnQtPmluZGljYXRvcnMsIGNvdW50LAotKwkJCQkJCQkgICAgY291bnQgKyAxLCBzaXpl b2YoY2hhciAqKSk7Ci0rCQl9Ci0rCX0KLSsKLStvdXQ6Ci0rCWlmIChjdHgtPm1ham9yICE9IEdT U19TX0NPTVBMRVRFICYmIGNsaWVudC0+aW5kaWNhdG9ycyAhPSBOVUxMKSB7Ci0rCQlmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykKLSsJCQlmcmVlKGNsaWVudC0+aW5kaWNhdG9yc1tpXSk7Ci0r CQlmcmVlKGNsaWVudC0+aW5kaWNhdG9ycyk7Ci0rCQljbGllbnQtPmluZGljYXRvcnMgPSBOVUxM OwotKwl9Ci0rCWdzc19yZWxlYXNlX2J1ZmZlcigmY3R4LT5taW5vciwgJnZhbHVlKTsKLSsJZ3Nz X3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmZGlzcGxheV92YWx1ZSk7Ci0rCWdzc19yZWxl YXNlX2J1ZmZlcl9zZXQoJmN0eC0+bWlub3IsICZhdHRycyk7Ci0rCXJldHVybiBjdHgtPm1ham9y OwotK30KLSsKLSAvKiBFeHRyYWN0IHRoZSBjbGllbnQgZGV0YWlscyBmcm9tIGEgZ2l2ZW4gY29u dGV4dC4gVGhpcyBjYW4gb25seSByZWxpYWJseQotICAqIGJlIGNhbGxlZCBvbmNlIGZvciBhIGNv bnRleHQgKi8KLSAKLUBAIC0zODYsNiArNDc1LDEyIEBAIHNzaF9nc3NhcGlfZ2V0Y2xpZW50KEdz c2N0eHQgKmN0eCwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKLSAJfQotIAotIAlnc3NfcmVs ZWFzZV9idWZmZXIoJmN0eC0+bWlub3IsICZlbmFtZSk7Ci0rCS8qIFJldHJpZXZlIGF1dGhlbnRp Y2F0aW9uIGluZGljYXRvcnMsIGlmIHRoZXkgZXhpc3QgKi8KLSsJaWYgKChjdHgtPm1ham9yID0g c3NoX2dzc2FwaV9nZXRpbmRpY2F0b3JzKGN0eCwKLSsJICAgIGN0eC0+Y2xpZW50LCBjbGllbnQp KSkgewotKwkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOwotKwkJcmV0dXJuIChjdHgtPm1ham9yKTsK LSsJfQotIAotIAkvKiBXZSBjYW4ndCBjb3B5IHRoaXMgc3RydWN0dXJlLCBzbyB3ZSBqdXN0IG1v dmUgdGhlIHBvaW50ZXIgdG8gaXQgKi8KLSAJY2xpZW50LT5jcmVkcyA9IGN0eC0+Y2xpZW50X2Ny ZWRzOwotQEAgLTQ1Myw2ICs1NDgsNyBAQCBpbnQKLSBzc2hfZ3NzYXBpX3VzZXJvayhjaGFyICp1 c2VyLCBzdHJ1Y3QgcGFzc3dkICpwdywgaW50IGtleCkKLSB7Ci0gCU9NX3VpbnQzMiBsbWluOwot KwlzaXplX3QgaTsKLSAKLSAJKHZvaWQpIGtleDsgLyogdXNlZCBpbiBwcml2aWxlZ2Ugc2VwYXJh dGlvbiAqLwotIAotQEAgLTQ3MSw4ICs1NjcsMTQgQEAgc3NoX2dzc2FwaV91c2Vyb2soY2hhciAq dXNlciwgc3RydWN0IHBhc3N3ZCAqcHcsIGludCBrZXgpCi0gCQkJZ3NzX3JlbGVhc2VfYnVmZmVy KCZsbWluLCAmZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZSk7Ci0gCQkJZ3NzX3JlbGVhc2VfYnVm ZmVyKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUpOwotIAkJCWdzc19yZWxlYXNl X2NyZWQoJmxtaW4sICZnc3NhcGlfY2xpZW50LmNyZWRzKTsKLS0JCQlleHBsaWNpdF9iemVybygm Z3NzYXBpX2NsaWVudCwKLS0JCQkgICAgc2l6ZW9mKHNzaF9nc3NhcGlfY2xpZW50KSk7Ci0rCi0r CQkJaWYgKGdzc2FwaV9jbGllbnQuaW5kaWNhdG9ycyAhPSBOVUxMKSB7Ci0rCQkJCWZvciAoaSA9 IDA7IGdzc2FwaV9jbGllbnQuaW5kaWNhdG9yc1tpXSAhPSBOVUxMOyBpKyspCi0rCQkJCQlmcmVl KGdzc2FwaV9jbGllbnQuaW5kaWNhdG9yc1tpXSk7Ci0rCQkJCWZyZWUoZ3NzYXBpX2NsaWVudC5p bmRpY2F0b3JzKTsKLSsJCQl9Ci0rCi0rCQkJZXhwbGljaXRfYnplcm8oJmdzc2FwaV9jbGllbnQs IHNpemVvZihzc2hfZ3NzYXBpX2NsaWVudCkpOwotIAkJCXJldHVybiAwOwotIAkJfQotIAllbHNl Ci1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKLWluZGV4IDZjMWJhNzdmNi4u MjY4YzA5ZDFjIDEwMDY0NAotLS0tIGEvc2VydmNvbmYuYwotKysrIGIvc2VydmNvbmYuYwotQEAg LTE0NSw2ICsxNDUsNyBAQCBpbml0aWFsaXplX3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMg Km9wdGlvbnMpCi0gCW9wdGlvbnMtPmdzc19jbGVhbnVwX2NyZWRzID0gLTE7Ci0gCW9wdGlvbnMt Pmdzc19kZWxlZ19jcmVkcyA9IC0xOwotIAlvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2VwdG9yID0g LTE7Ci0rCW9wdGlvbnMtPmdzc19pbmRpY2F0b3JzID0gTlVMTDsKLSAJb3B0aW9ucy0+Z3NzX3N0 b3JlX3Jla2V5ID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IE5VTEw7Ci0g CW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gLTE7Ci1AQCAtNTYwLDYgKzU2MSw3IEBAIGZpbGxfZGVm YXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAlDTEVBUl9PTl9O T05FKG9wdGlvbnMtPnJvdXRpbmdfZG9tYWluKTsKLSAJQ0xFQVJfT05fTk9ORShvcHRpb25zLT5o b3N0X2tleV9hZ2VudCk7Ci0gCUNMRUFSX09OX05PTkUob3B0aW9ucy0+cGVyX3NvdXJjZV9wZW5h bHR5X2V4ZW1wdCk7Ci0rCUNMRUFSX09OX05PTkUob3B0aW9ucy0+Z3NzX2luZGljYXRvcnMpOwot IAotIAlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy0+bnVtX2hvc3Rfa2V5X2ZpbGVzOyBpKyspCi0g CQlDTEVBUl9PTl9OT05FKG9wdGlvbnMtPmhvc3Rfa2V5X2ZpbGVzW2ldKTsKLUBAIC01OTksNyAr NjAxLDcgQEAgdHlwZWRlZiBlbnVtIHsKLSAJc1BlclNvdXJjZVBlbmFsdGllcywgc1BlclNvdXJj ZVBlbmFsdHlFeGVtcHRMaXN0LAotIAlzQ2xpZW50QWxpdmVJbnRlcnZhbCwgc0NsaWVudEFsaXZl Q291bnRNYXgsIHNBdXRob3JpemVkS2V5c0ZpbGUsCi0gCXNHc3NBdXRoZW50aWNhdGlvbiwgc0dz c0NsZWFudXBDcmVkcywgc0dzc0RlbGVnYXRlQ3JlZHMsIHNHc3NFbmFibGVrNXVzZXJzLCBzR3Nz U3RyaWN0QWNjZXB0b3IsCi0tCXNHc3NLZXlFeCwgc0dzc0tleEFsZ29yaXRobXMsIHNHc3NTdG9y ZVJla2V5LAotKwlzR3NzSW5kaWNhdG9ycywgc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywg c0dzc1N0b3JlUmVrZXksCi0gCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCi0g CXNNYXRjaCwgc1Blcm1pdE9wZW4sIHNQZXJtaXRMaXN0ZW4sIHNGb3JjZUNvbW1hbmQsIHNDaHJv b3REaXJlY3RvcnksCi0gCXNVc2VQcml2aWxlZ2VTZXBhcmF0aW9uLCBzQWxsb3dBZ2VudEZvcndh cmRpbmcsCi1AQCAtNjk2LDYgKzY5OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJnc3NhcGlz dG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNHc3NTdG9yZVJla2V5LCBTU0hDRkdfR0xPQkFMIH0s Ci0gCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzR3NzS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dM T0JBTCB9LAotIAl7ICJnc3NhcGllbmFibGVrNXVzZXJzIiwgc0dzc0VuYWJsZWs1dXNlcnMsIFNT SENGR19BTEwgfSwKLSsJeyAiZ3NzYXBpaW5kaWNhdG9ycyIsIHNHc3NJbmRpY2F0b3JzLCBTU0hD RkdfQUxMIH0sCi0gI2Vsc2UKLSAJeyAiZ3NzYXBpYXV0aGVudGljYXRpb24iLCBzVW5zdXBwb3J0 ZWQsIFNTSENGR19BTEwgfSwKLSAJeyAiZ3NzYXBpY2xlYW51cGNyZWRlbnRpYWxzIiwgc1Vuc3Vw cG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi1AQCAtNzA2LDYgKzcwOSw3IEBAIHN0YXRpYyBzdHJ1 Y3QgewotIAl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNVbnN1cHBvcnRlZCwg U1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwgc1Vuc3VwcG9ydGVk LCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWVuYWJsZWs1dXNlcnMiLCBzVW5zdXBwb3J0 ZWQsIFNTSENGR19BTEwgfSwKLSsJeyAiZ3NzYXBpaW5kaWNhdG9ycyIsIHNVbnN1cHBvcnRlZCwg U1NIQ0ZHX0FMTCB9LAotICNlbmRpZgotIAl7ICJnc3N1c2VzZXNzaW9uY2NhY2hlIiwgc1Vuc3Vw cG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXVzZXNlc3Npb25jcmVkY2FjaGUi LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC0xNzM3LDYgKzE3NDEsMTUgQEAg cHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywg Y2hhciAqbGluZSwKLSAJCQlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSB4c3RyZHVwKGFy Zyk7Ci0gCQlicmVhazsKLSAKLSsJY2FzZSBzR3NzSW5kaWNhdG9yczoKLSsJCWFyZyA9IGFyZ3Zf bmV4dCgmYWMsICZhdik7Ci0rCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCi0rCQkJZmF0YWwo IiVzIGxpbmUgJWQ6ICVzIG1pc3NpbmcgYXJndW1lbnQuIiwKLSsJCQkgICAgZmlsZW5hbWUsIGxp bmVudW0sIGtleXdvcmQpOwotKwkJaWYgKG9wdGlvbnMtPmdzc19pbmRpY2F0b3JzID09IE5VTEwp Ci0rCQkJb3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPSB4c3RyZHVwKGFyZyk7Ci0rCQlicmVhazsK LSsKLSAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoKLSAJCWludHB0ciA9ICZvcHRpb25z LT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbjsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLUBAIC0zMzgz LDYgKzMzOTYsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQotIAlkdW1wX2NmZ19m bXRpbnQoc0dzc1N0cmljdEFjY2VwdG9yLCBvLT5nc3Nfc3RyaWN0X2FjY2VwdG9yKTsKLSAJZHVt cF9jZmdfZm10aW50KHNHc3NTdG9yZVJla2V5LCBvLT5nc3Nfc3RvcmVfcmVrZXkpOwotIAlkdW1w X2NmZ19zdHJpbmcoc0dzc0tleEFsZ29yaXRobXMsIG8tPmdzc19rZXhfYWxnb3JpdGhtcyk7Ci0r CWR1bXBfY2ZnX3N0cmluZyhzR3NzSW5kaWNhdG9ycywgby0+Z3NzX2luZGljYXRvcnMpOwotICNl bmRpZgotIAlkdW1wX2NmZ19mbXRpbnQoc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sIG8tPnBhc3N3 b3JkX2F1dGhlbnRpY2F0aW9uKTsKLSAJZHVtcF9jZmdfZm10aW50KHNLYmRJbnRlcmFjdGl2ZUF1 dGhlbnRpY2F0aW9uLAotZGlmZiAtLWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCi1pbmRl eCA1NjkxMDBlNDcuLjc4MWYyMGM2MSAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmgKLSsrKyBiL3Nl cnZjb25mLmgKLUBAIC0xODEsNiArMTgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewotIAljaGFyICAg KiphbGxvd19ncm91cHM7Ci0gCXVfaW50IG51bV9kZW55X2dyb3VwczsKLSAJY2hhciAgICoqZGVu eV9ncm91cHM7Ci0rCWNoYXIgICAqZ3NzX2luZGljYXRvcnM7Ci0gCi0gCXVfaW50IG51bV9zdWJz eXN0ZW1zOwotIAljaGFyICAgKipzdWJzeXN0ZW1fbmFtZTsKLUBAIC0zMTAsNiArMzExLDcgQEAg VEFJTFFfSEVBRChpbmNsdWRlX2xpc3QsIGluY2x1ZGVfaXRlbSk7Ci0gCQlNX0NQX1NUUk9QVChy b3V0aW5nX2RvbWFpbik7IFwKLSAJCU1fQ1BfU1RST1BUKHBlcm1pdF91c2VyX2Vudl9hbGxvd2xp c3QpOyBcCi0gCQlNX0NQX1NUUk9QVChwYW1fc2VydmljZV9uYW1lKTsgXAotKwkJTV9DUF9TVFJP UFQoZ3NzX2luZGljYXRvcnMpOyBcCi0gCQlNX0NQX1NUUkFSUkFZT1BUKGF1dGhvcml6ZWRfa2V5 c19maWxlcywgbnVtX2F1dGhrZXlzX2ZpbGVzLCAxKTtcCi0gCQlNX0NQX1NUUkFSUkFZT1BUKHJl dm9rZWRfa2V5c19maWxlcywgXAotIAkJICAgIG51bV9yZXZva2VkX2tleXNfZmlsZXMsIDEpOyBc Ci1kaWZmIC0tZ2l0IGEvc3NoLWdzcy5oIGIvc3NoLWdzcy5oCi1pbmRleCAzMjlkYzlkYTAuLjE1 MDY3MTlhOSAxMDA2NDQKLS0tLSBhL3NzaC1nc3MuaAotKysrIGIvc3NoLWdzcy5oCi1AQCAtMzQs NiArMzQsMTIgQEAKLSAjaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgotICNlbmRpZgotIAotKyNp ZmRlZiBIQVZFX0dTU0FQSV9FWFRfSAotKyNpbmNsdWRlIDxnc3NhcGlfZXh0Lmg+Ci0rI2VsaWYg ZGVmaW5lZChIQVZFX0dTU0FQSV9HU1NBUElfRVhUX0gpCi0rI2luY2x1ZGUgPGdzc2FwaS9nc3Nh cGlfZXh0Lmg+Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIEtSQjUKLSAjIGlmbmRlZiBIRUlNREFMCi0g IyAgaWZkZWYgSEFWRV9HU1NBUElfR0VORVJJQ19ICi1AQCAtMTEyLDYgKzExOCw3IEBAIHR5cGVk ZWYgc3RydWN0IHsKLSAJc3NoX2dzc2FwaV9jY2FjaGUgc3RvcmU7Ci0gCWludCB1c2VkOwotIAlp bnQgdXBkYXRlZDsKLSsJY2hhciAqKmluZGljYXRvcnM7IC8qIGF1dGggaW5kaWNhdG9ycyAqLwot IH0gc3NoX2dzc2FwaV9jbGllbnQ7Ci0gCi0gdHlwZWRlZiBzdHJ1Y3Qgc3NoX2dzc2FwaV9tZWNo X3N0cnVjdCB7Ci1kaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRfY29uZmlnLjUKLWlu ZGV4IDFkMTZkYWJhZi4uNGNhODAwMTZjIDEwMDY0NAotLS0tIGEvc3NoZF9jb25maWcuNQotKysr IGIvc3NoZF9jb25maWcuNQotQEAgLTgwMyw2ICs4MDMsNTIgQEAgVGhpcyBvcHRpb24gb25seSBh cHBsaWVzIHRvIGNvbm5lY3Rpb25zIHVzaW5nIEdTU0FQSS4KLSAuUHAKLSBUaGUgbGlzdCBvZiBz dXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNp bmcKLSAuUXEgc3NoIC1RIEdTU0FQSUtleEFsZ29yaXRobXMgLgotKy5JdCBDbSBHU1NBUElJbmRp Y2F0b3JzCi0rU3BlY2lmaWVzIHdoZXRoZXIgdG8gYWNjZXB0IG9yIGRlbnkgR1NTQVBJIGF1dGhl bnRpY2F0ZWQgYWNjZXNzIGlmIEtlcmJlcm9zCi0rbWVjaGFuaXNtIGlzIHVzZWQgYW5kIEtlcmJl cm9zIHRpY2tldCBjb250YWlucyBhIHBhcnRpY3VsYXIgc2V0IG9mCi0rYXV0aGVudGljYXRpb24g aW5kaWNhdG9ycy4gVGhlIHZhbHVlcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgY29tbWEtc2VwYXJh dGVkIGxpc3QKLSsuQ20gWyFdbmFtZTEsWyFdbmFtZTIsLi4uIC4KLStXaGVuIGluZGljYXRvcidz IG5hbWUgaXMgcHJlZml4ZWQgd2l0aCAhLCB0aGUgYXV0aGVudGljYXRpb24gaW5kaWNhdG9yICdu YW1lJwotK3dpbGwgZGVueSBhY2Nlc3MgdG8gdGhlIHN5c3RlbS4gT3RoZXJ3aXNlLCBvbmUgb2Yg bm9uLW5lZ2F0ZWQgYXV0aGVudGljYXRpb24KLStpbmRpY2F0b3JzIG11c3QgYmUgcHJlc2VudCBp biB0aGUgS2VyYmVyb3MgdGlja2V0IHRvIGFsbG93IGFjY2Vzcy4gSWYKLSsuQ20gR1NTQVBJSW5k aWNhdG9ycwotK2lzIGRlZmluZWQsIGEgS2VyYmVyb3MgdGlja2V0IHRoYXQgaGFzIGluZGljYXRv cnMgYnV0IGRvZXMgbm90IG1hdGNoIHRoZQotK3BvbGljeSB3aWxsIGdldCBkZW5pYWwuIElmIGF0 IGxlYXN0IG9uZSBpbmRpY2F0b3IgaXMgY29uZmlndXJlZCwgd2hldGhlciBmb3IKLSthY2Nlc3Mg b3IgZGVuaWFsLCB0aWNrZXRzIHdpdGhvdXQgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyB3aWxs IGJlIGV4cGxpY2l0bHkKLStyZWplY3RlZC4KLSsuUHAKLStCeSBkZWZhdWx0IHN5c3RlbXMgdXNp bmcgTUlUIEtlcmJlcm9zIDEuMTcgb3IgbGF0ZXIgd2lsbCBub3QgYXNzaWduIGFueQotK2luZGlj YXRvcnMuIFNQQUtFIGFuZCBQS0lOSVQgbWV0aG9kcyBhZGQgYXV0aGVudGljYXRpb24gaW5kaWNh dG9ycwotK3RvIGFsbCBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9ucy4gVGhlIFNQQUtFIHByZS1h dXRoZW50aWNhdGlvbiBtZXRob2QgaXMKLStwcmVmZXJyZWQgb3ZlciBhbiBlbmNyeXB0ZWQgdGlt ZXN0YW1wIHByZS1hdXRoZW50aWNhdGlvbiB3aGVuIHBhc3N3b3JkcyB1c2VkIHRvCi0rYXV0aGVu dGljYXRlIHVzZXIgcHJpbmNpcGFscy4gS2VyYmVyb3MgS0RDcyBidWlsdCB3aXRoIEhlaW1kYWwg S2VyYmVyb3MKLSsoaW5jbHVkaW5nIFNhbWJhIEFEIERDIGJ1aWx0IHdpdGggSGVpbWRhbCkgZG8g bm90IGFkZCBhdXRoZW50aWNhdGlvbgotK2luZGljYXRvcnMuIEhvd2V2ZXIsIE9wZW5TU0ggYnVp bHQgYWdhaW5zdCBIZWltZGFsIEtlcmJlcm9zIGxpYnJhcnkgaXMgYWJsZSB0bwotK2lucXVpcmUg YXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBhbmQgdGh1cyBjYW4gYmUgdXNlZCB0byBjaGVjayBm b3IgdGhlaXIgcHJlc2VuY2UuCi0rLlBwCi0rSW5kaWNhdG9yIG5hbWUgaXMgY2FzZS1zZW5zaXRp dmUgYW5kIGRlcGVuZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgYQotK3BhcnRpY3VsYXIgS2Vy YmVyb3MgZGVwbG95bWVudC4gSW5kaWNhdG9ycyBhdmFpbGFibGUgaW4gTUlUIEtlcmJlcm9zIGFu ZAotK0ZyZWVJUEEgZW52aXJvbm1lbnRzOgotKy5QcAotKy5CbCAtdGFnIC13aWR0aCBYWFhYIC1v ZmZzZXQgaW5kZW50IC1jb21wYWN0Ci0rLkl0IENtIGhhcmRlbmVkCi0rU1BBS0Ugb3IgZW5jcnlw dGVkIHRpbWVzdGFtcCBwcmUtYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBpbiBNSVQgS2VyYmVy b3MgYW5kIEZyZWVJUEEKLSsuSXQgQ20gcGtpbml0Ci0rc21hcnRjYXJkIG9yIFBLQ1MxMSB0b2tl bi1iYXNlZCBwcmUtYXV0aGVudGljYXRpb24gaW4gTUlUIEtlcmJlcm9zIGFuZCBGcmVlSVBBCi0r Lkl0IENtIHJhZGl1cwotK3ByZS1hdXRoZW50aWNhdGlvbiBiYXNlZCBvbiBhIFJBRElVUyBzZXJ2 ZXIgaW4gTUlUIEtlcmJlcm9zIGFuZCBGcmVlSVBBCi0rLkl0IENtIG90cAotK1RPVFAvSE9UUC1i YXNlZCB0d28tZmFjdG9yIHByZS1hdXRoZW50aWNhdGlvbiBpbiBGcmVlSVBBCi0rLkl0IENtIGlk cAotK09BdXRoMi1iYXNlZCBwcmUtYXV0aGVudGljYXRpb24gaW4gRnJlZUlQQSB1c2luZyBhbiBl eHRlcm5hbCBpZGVudGl0eSBwcm92aWRlcgotK2FuZCBkZXZpY2UgYXV0aG9yaXphdGlvbiBncmFu dCBmbG93Ci0rLkl0IENtIHBhc3NrZXkKLStGSURPMi1iYXNlZCBwcmUtYXV0aGVudGljYXRpb24g aW4gRnJlZUlQQSwgdXNpbmcgRklETzIgVVNCIGFuZCBORkMgdG9rZW5zCi0rLkVsCi0rLlBwCi0r VGhlIGRlZmF1bHQKLSsuRHEgbm9uZQotK2lzIHRvIG5vdCB1c2UgR1NTQVBJIGF1dGhlbnRpY2F0 aW9uIGluZGljYXRvcnMgZm9yIGFjY2VzcyBkZWNpc2lvbnMuCi0gLkl0IENtIEhvc3RiYXNlZEFj Y2VwdGVkQWxnb3JpdGhtcwotIFRoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkK LSAuWHIgY3J5cHRvLXBvbGljaWVzIDcgLgotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAw NDgtTklTVC1jdXJ2ZXMtaHlicmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBiLzAwNDgtTklT VC1jdXJ2ZXMtaHlicmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggYzdhYjcxMS4uMDAwMDAwMAotLS0gYS8wMDQ4LU5JU1QtY3VydmVzLWh5 YnJpZC1LRVgtaW1wbGVtZW50YXRpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAzICsw LDAgQEAKLUZyb20gMzgwMmE1MWI2OTA0NGY0MTliYjUzZGVhZmY3MDYxZDYyZDk1OTZmZSBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KLURhdGU6IE1vbiwgMjAgT2N0IDIwMjUgMTY6MDc6MzEgKzAyMDAKLVN1YmplY3Q6 IFtQQVRDSCA0OC81NF0gTklTVCBjdXJ2ZXMgaHlicmlkIEtFWCBpbXBsZW1lbnRhdGlvbgotCi0t LS0KLSBjb21wYXQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMyArLQotIGNvbXBhdC5o ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKLSBjcnlwdG9fYXBpLmggICAgICAgICAg ICAgICAgICAgICB8ICAgNCArCi0ga2V4LW5hbWVzLmMgICAgICAgICAgICAgICAgICAgICAgfCAg ODkgKysrLQotIGtleC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKLSBrZXgu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxOSArCi0ga2V4Z2VuLmMgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgNTYgKystCi0ga2V4bWxrZW03Njh4MjU1MTkuYyAgICAgICAgICAg ICAgfCA2NzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQotIG1vbml0b3IuYyAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAyICsKLSBteXByb3Bvc2FsLmggICAgICAgICAgICAgICAg ICAgICB8ICAgNCArCi0gcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMgfCAgIDQgKwot IHNzaC1rZXlzY2FuLmMgICAgICAgICAgICAgICAgICAgIHwgICAyICsKLSBzc2hfYXBpLmMgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNCArCi0gc3NoY29ubmVjdDIuYyAgICAgICAgICAgICAg ICAgICAgfCAgIDIgKwotIHNzaGQtYXV0aC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsK LSAxNSBmaWxlcyBjaGFuZ2VkLCA4NTEgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCi0K LWRpZmYgLS1naXQgYS9jb21wYXQuYyBiL2NvbXBhdC5jCi1pbmRleCA0MzEyNTEwZTUuLmU2Yzc5 MzVkNCAxMDA2NDQKLS0tLSBhL2NvbXBhdC5jCi0rKysgYi9jb21wYXQuYwotQEAgLTM2LDYgKzM2 LDcgQEAKLSAjaW5jbHVkZSAiY29tcGF0LmgiCi0gI2luY2x1ZGUgImxvZy5oIgotICNpbmNsdWRl ICJtYXRjaC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAKLSAvKiBkZXRlcm1pbmUg YnVnIGZsYWdzIGZyb20gU1NIIHByb3RvY29sIGJhbm5lciAqLwotIHZvaWQKLUBAIC0xNDgsOCAr MTQ5LDkgQEAgY2hhciAqCi0gY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICpzc2gsIGNv bnN0IGNoYXIgKnApCi0gewotIAljaGFyICpjcCA9IE5VTEwsICpjcDIgPSBOVUxMOwotKwlpbnQg bWxrZW1fYXZhaWxhYmxlID0gaXNfbWxrZW03NjhfYXZhaWxhYmxlKCk7Ci0gCi0tCWlmICgoc3No LT5jb21wYXQgJiAoU1NIX0JVR19DVVJWRTI1NTE5UEFEfFNTSF9PTERfREhHRVgpKSA9PSAwKQot KwlpZiAoKHNzaC0+Y29tcGF0ICYgKFNTSF9CVUdfQ1VSVkUyNTUxOVBBRHxTU0hfT0xEX0RIR0VY KSkgPT0gMCAmJiBtbGtlbV9hdmFpbGFibGUgPT0gMikKLSAJCXJldHVybiB4c3RyZHVwKHApOwot IAlkZWJ1ZzJfZigib3JpZ2luYWwgS0VYIHByb3Bvc2FsOiAlcyIsIHApOwotIAlpZiAoKHNzaC0+ Y29tcGF0ICYgU1NIX0JVR19DVVJWRTI1NTE5UEFEKSAhPSAwKQotQEAgLTE2NCw2ICsxNjYsMjUg QEAgY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IGNoYXIgKnApCi0g CQlmcmVlKGNwKTsKLSAJCWNwID0gY3AyOwotIAl9Ci0rCWlmIChtbGtlbV9hdmFpbGFibGUgPT0g MikKLSsJCXJldHVybiBjcCA/IGNwIDogeHN0cmR1cChwKTsKLSsJaWYgKG1sa2VtX2F2YWlsYWJs ZSA9PSAxICYmIEZJUFNfbW9kZSgpKSB7Ci0rCQlpZiAoKGNwMiA9IG1hdGNoX2ZpbHRlcl9kZW55 bGlzdChjcCA/IGNwIDogcCwKLSsJCSAgICAibWxrZW03Njh4MjU1MTktc2hhMjU2IikpID09IE5V TEwpCi0rCQkJZmF0YWwoIm1hdGNoX2ZpbHRlcl9kZW55bGlzdCBmYWlsZWQiKTsKLSsJCWZyZWUo Y3ApOwotKwkJY3AgPSBjcDI7Ci0rCX0KLSsJaWYgKG1sa2VtX2F2YWlsYWJsZSA9PSAwKSB7Ci0r CQlpZiAoKGNwMiA9IG1hdGNoX2ZpbHRlcl9kZW55bGlzdChjcCA/IGNwIDogcCwKLSsJCSAgICAi bWxrZW03Njh4MjU1MTktc2hhMjU2LCIKLSsJCSAgICAibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYs IgotKwkJICAgICJtbGtlbTEwMjRuaXN0cDM4NC1zaGEzODQiKSkgPT0gTlVMTCkKLSsJCQlmYXRh bCgibWF0Y2hfZmlsdGVyX2RlbnlsaXN0IGZhaWxlZCIpOwotKwkJZnJlZShjcCk7Ci0rCQljcCA9 IGNwMjsKLSsJfQotKwotIAlpZiAoY3AgPT0gTlVMTCB8fCAqY3AgPT0gJ1wwJykKLSAJCWZhdGFs KCJObyBzdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgZm91bmQiKTsKLSAJZGVidWcy X2YoImNvbXBhdCBLRVggcHJvcG9zYWw6ICVzIiwgY3ApOwotZGlmZiAtLWdpdCBhL2NvbXBhdC5o IGIvY29tcGF0LmgKLWluZGV4IDJlNmRiNWJmOS4uYjc4ZTU1YjY5IDEwMDY0NAotLS0tIGEvY29t cGF0LmgKLSsrKyBiL2NvbXBhdC5oCi1AQCAtNjIsNCArNjIsNSBAQCBzdHJ1Y3Qgc3NoOwotIAot IHZvaWQgICAgY29tcGF0X2Jhbm5lcihzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7Ci0gY2hh cgkqY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7Ci0raW50 IGlzX21sa2VtNzY4X2F2YWlsYWJsZSh2b2lkKTsKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9jcnlw dG9fYXBpLmggYi9jcnlwdG9fYXBpLmgKLWluZGV4IGY1ZTM4YjU0Ny4uNmE4ZWRlMDY3IDEwMDY0 NAotLS0tIGEvY3J5cHRvX2FwaS5oCi0rKysgYi9jcnlwdG9fYXBpLmgKLUBAIC04Miw0ICs4Miw4 IEBAIGludAljcnlwdG9fa2VtX3NudHJ1cDc2MV9rZXlwYWlyKHVuc2lnbmVkIGNoYXIgKnBrLCB1 bnNpZ25lZCBjaGFyICpzayk7Ci0gI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRF WFRCWVRFUyAxMDg4Ci0gI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTIDMyCi0gCi0r I2RlZmluZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUyAxNTY4Ci0rI2RlZmlu ZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUyAzMTY4Ci0rI2RlZmluZSBjcnlw dG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVMgMTU2OAotKwotICNlbmRpZiAvKiBjcnlw dG9fYXBpX2ggKi8KLWRpZmYgLS1naXQgYS9rZXgtbmFtZXMuYyBiL2tleC1uYW1lcy5jCi1pbmRl eCA4ODJmMjkwNWIuLjYwZmM0ODdiMCAxMDA2NDQKLS0tLSBhL2tleC1uYW1lcy5jCi0rKysgYi9r ZXgtbmFtZXMuYwotQEAgLTM0LDYgKzM0LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgImtleC5o IgotQEAgLTkwLDYgKzkxLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGtleGFsZ3Nb XSA9IHsKLSAjaWZkZWYgVVNFX01MS0VNNzY4WDI1NTE5Ci0gCXsgS0VYX01MS0VNNzY4WDI1NTE5 X1NIQTI1NiwgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTYsIDAsCi0gCSAgICBTU0hfRElH RVNUX1NIQTI1NiwgS0VYX0lTX1BRIH0sCi0rCXsgS0VYX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2 LCBLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2LCAwLAotKwkgICAgU1NIX0RJR0VTVF9T SEEyNTYsIEtFWF9JU19QUSB9LAotKwl7IEtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQsIEtF WF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0LCAwLAotKwkgICAgU1NIX0RJR0VTVF9TSEEz ODQsIEtFWF9JU19QUSB9LAotICNlbmRpZgotICNlbmRpZiAvKiBIQVZFX0VWUF9TSEEyNTYgfHwg IVdJVEhfT1BFTlNTTCAqLwotIAl7IE5VTEwsIDAsIC0xLCAtMSwgMCB9LAotQEAgLTEwOCwxNCAr MTEzLDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGdzc19rZXhhbGdzW10gPSB7Ci0g CXsgTlVMTCwgMCwgLTEsIC0xLCAwfSwKLSB9OwotIAotLXN0YXRpYyBpbnQgaXNfbWxrZW03Njhf YXZhaWxhYmxlKCkKLSsvKgotKyAqIDAgLSB1bmF2YWlsYWJsZQotKyAqIDEgLSBhdmFpbGFibGUg aW4gbm9uLUZJUFMgbW9kZQotKyAqIDIgLSBhdmFpbGFibGUgYWx3YXlzCi0rICovCi0raW50IGlz X21sa2VtNzY4X2F2YWlsYWJsZSgpCi0gewotIAlzdGF0aWMgaW50IGlzX2ZldGNoZWQgPSAtMTsK LSAKLSAJaWYgKGlzX2ZldGNoZWQgPT0gLTEpIHsKLS0JCUVWUF9LRU0gKm1sa2VtNzY4ID0gRVZQ X0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKLS0JCWlzX2ZldGNoZWQgPSBtbGtl bTc2OCAhPSBOVUxMID8gMSA6IDA7Ci0rCQlFVlBfS0VNICptbGtlbTc2OCA9IE5VTEw7Ci0rCi0r CQlFUlJfc2V0X21hcmsoKTsKLSsJCW1sa2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxr ZW03NjgiLCBOVUxMKTsKLSsJCWlzX2ZldGNoZWQgPSAobWxrZW03NjggPT0gTlVMTCkgPyAwIDog MjsKLSsJCWlmIChpc19mZXRjaGVkID09IDAgJiYgRklQU19tb2RlKCkgPT0gMSkgewotKwkJICAg IG1sa2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCAicHJvdmlkZXI9ZGVm YXVsdCwtZmlwcyIpOwotKwkJICAgIGlzX2ZldGNoZWQgPSAobWxrZW03NjggPT0gTlVMTCkgPyAw IDogMTsKLSsJCX0KLSAJCUVWUF9LRU1fZnJlZShtbGtlbTc2OCk7Ci0rCQlFUlJfcG9wX3RvX21h cmsoKTsKLSAJfQotIAotIAlyZXR1cm4gaXNfZmV0Y2hlZDsKLUBAIC0xMjcsMTEgKzE0NSwzMiBA QCBrZXhfYWxnX2xpc3RfaW50ZXJuYWwoY2hhciBzZXAsIGNvbnN0IHN0cnVjdCBrZXhhbGcgKmFs Z3MpCi0gCWNoYXIgKnJldCA9IE5VTEw7Ci0gCWNvbnN0IHN0cnVjdCBrZXhhbGcgKms7Ci0gCWNo YXIgc2VwX3N0clsyXSA9IHtzZXAsICdcMCd9OwotKwlpbnQgeDI1NTE5bWxrZW1fYXZhaWxhYmxl ID0gMCwgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDA7Ci0gCi0tCWZvciAoayA9IGtleGFsZ3M7IGst Pm5hbWUgIT0gTlVMTDsgaysrKSB7Ci0tCQlpZiAoc3RyY21wKGstPm5hbWUsIEtFWF9NTEtFTTc2 OFgyNTUxOV9TSEEyNTYpID09IDAKLS0JCQkmJiAhaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkpCi0r CS8qCi0rCSAqIEZJUFMgcHJvdmlkZXIgY2FuIHByb3ZpZGUgTUwtS0VNcyBhbmQgdGhlbiBhbGwg aHlicmlkcyBhcmUgYXZhaWxhYmxlCi0rCSAqIE90aGVyd2lzZSBvbmx5IE5JU1QgaHlicmlkcyBh cmUgYXZhaWxhYmxlCi0rCSAqICovCi0rCWlmIChGSVBTX21vZGUoKSkgewotKwkgICAgaWYgKGlz X21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDIpIHsKLSsJICAgICAgICB4MjU1MTltbGtlbV9hdmFp bGFibGUgPSAxOwotKwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOwotKwkgICAgfSBl bHNlIGlmIChpc19tbGtlbTc2OF9hdmFpbGFibGUoKSA9PSAxKSB7Ci0rCSAgICAgICAgbmlzdG1s a2VtX2F2YWlsYWJsZSA9IDE7Ci0rCSAgICB9Ci0rCX0gZWxzZSB7Ci0rCSAgICBpZiAoaXNfbWxr ZW03NjhfYXZhaWxhYmxlKCkgPiAwKSB7Ci0rCSAgICAgICAgeDI1NTE5bWxrZW1fYXZhaWxhYmxl ID0gMTsKLSsJICAgICAgICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKLSsJICAgIH0KLSsJfQot KwotKwlmb3IgKGsgPSBhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgewotKwkJaWYgKCAgKHN0 cmNtcChrLT5uYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlfU0hBMjU2KSA9PSAwICAgICYmIHgyNTUx OW1sa2VtX2F2YWlsYWJsZSA9PSAwKQotKwkJICAgfHwgKHN0cmNtcChrLT5uYW1lLCBLRVhfTUxL RU03NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkK LSsJCSAgIHx8IChzdHJjbXAoay0+bmFtZSwgS0VYX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCkg PT0gMCAmJiBuaXN0bWxrZW1fYXZhaWxhYmxlID09IDApKQotIAkJCWNvbnRpbnVlOwotKwotIAkJ eGV4dGVuZGYoJnJldCwgc2VwX3N0ciwgIiVzIiwgay0+bmFtZSk7Ci0gCX0KLSAKLUBAIC0xNTQs MTAgKzE5MywzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyAqCi0ga2V4X2FsZ19ieV9u YW1lKGNvbnN0IGNoYXIgKm5hbWUpCi0gewotIAljb25zdCBzdHJ1Y3Qga2V4YWxnICprOwotKwlp bnQgeDI1NTE5bWxrZW1fYXZhaWxhYmxlID0gMCwgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDA7Ci0g Ci0tCWlmIChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMAotLQkJ JiYgIWlzX21sa2VtNzY4X2F2YWlsYWJsZSgpKQotLQlyZXR1cm4gTlVMTDsKLSsJLyoKLSsJICog RklQUyBwcm92aWRlciBjYW4gcHJvdmlkZSBNTC1LRU1zIGFuZCB0aGVuIGFsbCBoeWJyaWRzIGFy ZSBhdmFpbGFibGUKLSsJICogT3RoZXJ3aXNlIG9ubHkgTklTVCBoeWJyaWRzIGFyZSBhdmFpbGFi bGUKLSsJICogKi8KLSsJaWYgKEZJUFNfbW9kZSgpKSB7Ci0rCSAgICBpZiAoaXNfbWxrZW03Njhf YXZhaWxhYmxlKCkgPT0gMikgewotKwkgICAgICAgIHgyNTUxOW1sa2VtX2F2YWlsYWJsZSA9IDE7 Ci0rCSAgICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7Ci0rCSAgICB9IGVsc2UgaWYgKGlz X21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDEpIHsKLSsJICAgICAgICBuaXN0bWxrZW1fYXZhaWxh YmxlID0gMTsKLSsJICAgIH0KLSsJfSBlbHNlIHsKLSsJICAgIGlmIChpc19tbGtlbTc2OF9hdmFp bGFibGUoKSA+IDApIHsKLSsJICAgICAgICB4MjU1MTltbGtlbV9hdmFpbGFibGUgPSAxOwotKwkg ICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOwotKwkgICAgfQotKwl9Ci0rCi0rCWlmICgg IChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMCAgICAmJiB4MjU1 MTltbGtlbV9hdmFpbGFibGUgPT0gMCkKLSsJICAgfHwgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU03 NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkKLSsJ ICAgfHwgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0KSA9PSAwICYm IG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkpCi0rCSAgIHJldHVybiBOVUxMOwotIAotIAlmb3Ig KGsgPSBrZXhhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgewotIAkJaWYgKHN0cmNtcChrLT5u YW1lLCBuYW1lKSA9PSAwKQotQEAgLTIyOSw4ICsyODgsMTYgQEAga2V4X25hbWVzX3ZhbGlkKGNv bnN0IGNoYXIgKm5hbWVzKQotIAkJCXJldHVybiAwOwotIAkJfQotIAkJaWYgKGtleF9hbGdfYnlf bmFtZShwKSA9PSBOVUxMKSB7Ci0tCQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCQllcnJvcigiXCIl LjEwMHNcIiBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiLCBwKTsKLSsJCQlpZiAoRklQU19t b2RlKCkpIHsKLSsJCQkJaWYgKChzdHJjbXAocCwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1Nikg PT0gMCkKLSsJCQkJICAgIHx8IChzdHJjbXAocCwgS0VYX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2 KSA9PSAwKQotKwkJCQkgICAgfHwgKHN0cmNtcChwLCBLRVhfTUxLRU0xMDI0TklTVFAzODRfU0hB Mzg0KSA9PSAwKSkgewotKwkJCQkJZGVidWcoIlwiJS4xMDBzXCIgaXMgbm90IGFsbG93ZWQgaW4g RklQUyBtb2RlIiwgcCk7Ci0rCQkJCQljb250aW51ZTsKLSsJCQkJfQotKwkJCQllbHNlCi0rCQkJ CQllcnJvcigiXCIlLjEwMHNcIiBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiLCBwKTsKLSsJ CQl9Ci0gCQkJZWxzZQotIAkJCQllcnJvcigiVW5zdXBwb3J0ZWQgS0VYIGFsZ29yaXRobSBcIiUu MTAwc1wiIiwgcCk7Ci0gCQkJZnJlZShzKTsKLWRpZmYgLS1naXQgYS9rZXguYyBiL2tleC5jCi1p bmRleCAxZWIzY2E5ZDMuLjhjZmQ0NDZjMCAxMDA2NDQKLS0tLSBhL2tleC5jCi0rKysgYi9rZXgu YwotQEAgLTc1Nyw2ICs3NTcsNyBAQCBrZXhfZnJlZShzdHJ1Y3Qga2V4ICprZXgpCi0gI2lmZGVm IE9QRU5TU0xfSEFTX0VDQwotIAlFQ19LRVlfZnJlZShrZXgtPmVjX2NsaWVudF9rZXkpOwotICNl bmRpZiAvKiBPUEVOU1NMX0hBU19FQ0MgKi8KLSsJRVZQX1BLRVlfZnJlZShrZXgtPmVjX2h5YnJp ZF9jbGllbnRfa2V5KTsKLSAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCi0gCWZvciAobW9kZSA9 IDA7IG1vZGUgPCBNT0RFX01BWDsgbW9kZSsrKSB7Ci0gCQlrZXhfZnJlZV9uZXdrZXlzKGtleC0+ bmV3a2V5c1ttb2RlXSk7Ci1kaWZmIC0tZ2l0IGEva2V4LmggYi9rZXguaAotaW5kZXggZmY0MTMy NGU5Li5kMTEwYWQyOWEgMTAwNjQ0Ci0tLS0gYS9rZXguaAotKysrIGIva2V4LmgKLUBAIC03Miw2 ICs3Miw4IEBACi0gI2RlZmluZQlLRVhfU05UUlVQNzYxWDI1NTE5X1NIQTUxMgkic250cnVwNzYx eDI1NTE5LXNoYTUxMiIKLSAjZGVmaW5lCUtFWF9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyX09MRAki c250cnVwNzYxeDI1NTE5LXNoYTUxMkBvcGVuc3NoLmNvbSIKLSAjZGVmaW5lCUtFWF9NTEtFTTc2 OFgyNTUxOV9TSEEyNTYJIm1sa2VtNzY4eDI1NTE5LXNoYTI1NiIKLSsjZGVmaW5lCUtFWF9NTEtF TTc2OE5JU1RQMjU2X1NIQTI1NiAgICAgIm1sa2VtNzY4bmlzdHAyNTYtc2hhMjU2IgotKyNkZWZp bmUJS0VYX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCAgICAibWxrZW0xMDI0bmlzdHAzODQtc2hh Mzg0IgotIAotICNkZWZpbmUgQ09NUF9OT05FCTAKLSAjZGVmaW5lIENPTVBfREVMQVlFRAkyCi1A QCAtMTEwLDYgKzExMiw4IEBAIGVudW0ga2V4X2V4Y2hhbmdlIHsKLSAJS0VYX0MyNTUxOV9TSEEy NTYsCi0gCUtFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMiwKLSAJS0VYX0tFTV9NTEtFTTc2 OFgyNTUxOV9TSEEyNTYsCi0rCUtFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYsCi0rCUtF WF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0LAotICNpZmRlZiBHU1NBUEkKLSAJS0VYX0dT U19HUlAxX1NIQTEsCi0gCUtFWF9HU1NfR1JQMTRfU0hBMSwKLUBAIC0yMTEsNiArMjE1LDkgQEAg c3RydWN0IGtleCB7Ci0gCXVfY2hhciBzbnRydXA3NjFfY2xpZW50X2tleVtjcnlwdG9fa2VtX3Nu dHJ1cDc2MV9TRUNSRVRLRVlCWVRFU107IC8qIEtFTSAqLwotIAl1X2NoYXIgbWxrZW03NjhfY2xp ZW50X2tleVtjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JFVEtFWUJZVEVTXTsgLyogS0VNICovCi0g CXN0cnVjdCBzc2hidWYgKmNsaWVudF9wdWI7Ci0rCS8qIEZJWE1FICovCi0rCUVWUF9QS0VZICpl Y19oeWJyaWRfY2xpZW50X2tleTsgLyogTklTVCBoeWJyaWRzICovCi0rCXVfY2hhciBtbGtlbTEw MjRfY2xpZW50X2tleVtjcnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFU107IC8qIE1M LUtFTSAxMDI0ICsgTklTVCAqLwotIH07Ci0gCi0gaW50CSBrZXhfbmFtZV92YWxpZChjb25zdCBj aGFyICopOwotQEAgLTI5Myw2ICszMDAsMTggQEAgaW50CSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5 X2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKLSBpbnQJIGtleF9rZW1f bWxrZW03Njh4MjU1MTlfZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAot ICAgICBzdHJ1Y3Qgc3NoYnVmICoqKTsKLSAKLStpbnQJIGtleF9rZW1fbWxrZW03NjhuaXN0cDI1 Nl9rZXlwYWlyKHN0cnVjdCBrZXggKik7Ci0raW50CSBrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZf ZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAotKyAgICBzdHJ1Y3Qgc3No YnVmICoqLCBzdHJ1Y3Qgc3NoYnVmICoqKTsKLStpbnQJIGtleF9rZW1fbWxrZW03NjhuaXN0cDI1 Nl9kZWMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAgIHN0cnVjdCBz c2hidWYgKiopOwotKwotK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9rZXlwYWlyKHN0 cnVjdCBrZXggKik7Ci0raW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2VuYyhzdHJ1Y3Qg a2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKiwgc3Ry dWN0IHNzaGJ1ZiAqKik7Ci0raW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2RlYyhzdHJ1 Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKik7 Ci0rCi0gaW50CSBrZXhfZGhfa2V5Z2VuKHN0cnVjdCBrZXggKik7Ci0gaW50CSBrZXhfZGhfY29t cHV0ZV9rZXkoc3RydWN0IGtleCAqLCBCSUdOVU0gKiwgc3RydWN0IHNzaGJ1ZiAqKTsKLSAKLWRp ZmYgLS1naXQgYS9rZXhnZW4uYyBiL2tleGdlbi5jCi1pbmRleCAyZjgyNTI0ODguLjlhMzU2ZTI5 OCAxMDA2NDQKLS0tLSBhL2tleGdlbi5jCi0rKysgYi9rZXhnZW4uYwotQEAgLTEzMywxMiArMTMz LDI0IEBAIGtleF9nZW5fY2xpZW50KHN0cnVjdCBzc2ggKnNzaCkKLSAJCWJyZWFrOwotIAljYXNl IEtFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2OgotIAkJaWYgKEZJUFNfbW9kZSgpKSB7Ci0t CQkgICAgbG9naXRfZigiS2V5IGV4Y2hhbmdlIHR5cGUgbWxrZW03Njh4MjU1MTkgaXMgbm90IGFs bG93ZWQgaW4gRklQUyBtb2RlIik7Ci0tCQkgICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVO VDsKLSsJCSAgICBFVlBfS0VNICptbGtlbSA9IEVWUF9LRU1fZmV0Y2goTlVMTCwgIm1sa2VtNzY4 IiwgTlVMTCk7Ci0rCQkgICAgaWYgKG1sa2VtID09IE5VTEwpIHsKLSsJCSAgICAgICAgbG9naXRf ZigiS2V5IGV4Y2hhbmdlIHR5cGUgbWxrZW03Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQ UyBtb2RlIik7Ci0rCQkgICAgICAgIHIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQkg ICAgfSBlbHNlIHsKLSsJCQlFVlBfS0VNX2ZyZWUobWxrZW0pOwotKwkJICAgICAgICByID0ga2V4 X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKGtleCk7Ci0rCQkgICAgfQotIAkJfSBlbHNlIHsK LSAJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKGtleCk7Ci0gCQl9Ci0g CQlicmVhazsKLSsJY2FzZSBLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2OgotKwkJICAg IHIgPSBrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfa2V5cGFpcihrZXgpOwotKwkJYnJlYWs7Ci0r CWNhc2UgS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQ6Ci0rCQkgICAgciA9IGtleF9r ZW1fbWxrZW0xMDI0bmlzdHAzODRfa2V5cGFpcihrZXgpOwotKwkJYnJlYWs7Ci0gCWRlZmF1bHQ6 Ci0gCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwotIAkJYnJlYWs7Ci1AQCAtMjIzLDEz ICsyMzUsMjggQEAgaW5wdXRfa2V4X2dlbl9yZXBseShpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBz dHJ1Y3Qgc3NoICpzc2gpCi0gCQlicmVhazsKLSAJY2FzZSBLRVhfS0VNX01MS0VNNzY4WDI1NTE5 X1NIQTI1NjoKLSAJCWlmIChGSVBTX21vZGUoKSkgewotLQkJICAgIGxvZ2l0X2YoIktleSBleGNo YW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOwot LQkJICAgIHIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQkgICAgRVZQX0tFTSAqbWxr ZW0gPSBFVlBfS0VNX2ZldGNoKE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOwotKwkJICAgIGlmICht bGtlbSA9PSBOVUxMKSB7Ci0rCQkgICAgICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1s a2VtNzY4eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOwotKwkJICAgICAgICBy ID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwotKwkJICAgIH0gZWxzZSB7Ci0rCQkJRVZQX0tF TV9mcmVlKG1sa2VtKTsKLSsJCSAgICAgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZGVj KGtleCwgc2VydmVyX2Jsb2IsCi0rCQkgICAgICAgICAgICAmc2hhcmVkX3NlY3JldCk7Ci0rCQkg ICAgfQotIAkJfSBlbHNlIHsKLSAJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMo a2V4LCBzZXJ2ZXJfYmxvYiwKLSAJCSAgICAgICAgJnNoYXJlZF9zZWNyZXQpOwotIAkJfQotIAkJ YnJlYWs7Ci0rCWNhc2UgS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NjoKLSsJCSAgICBy ID0ga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2RlYyhrZXgsIHNlcnZlcl9ibG9iLAotKwkJICAg ICAgICAmc2hhcmVkX3NlY3JldCk7Ci0rCQlicmVhazsKLSsJY2FzZSBLRVhfS0VNX01MS0VNMTAy NE5JU1RQMzg0X1NIQTM4NDoKLSsJCSAgICByID0ga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9k ZWMoa2V4LCBzZXJ2ZXJfYmxvYiwKLSsJCSAgICAgICAgJnNoYXJlZF9zZWNyZXQpOwotKwkJYnJl YWs7Ci0gCWRlZmF1bHQ6Ci0gCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwotIAkJYnJl YWs7Ci1AQCAtMjgzLDYgKzMxMCw4IEBAIG91dDoKLSAJICAgIHNpemVvZihrZXgtPnNudHJ1cDc2 MV9jbGllbnRfa2V5KSk7Ci0gCWV4cGxpY2l0X2J6ZXJvKGtleC0+bWxrZW03NjhfY2xpZW50X2tl eSwKLSAJICAgIHNpemVvZihrZXgtPm1sa2VtNzY4X2NsaWVudF9rZXkpKTsKLSsJZXhwbGljaXRf Ynplcm8oa2V4LT5tbGtlbTEwMjRfY2xpZW50X2tleSwKLSsJICAgIHNpemVvZihrZXgtPm1sa2Vt MTAyNF9jbGllbnRfa2V5KSk7Ci0gCXNzaGJ1Zl9mcmVlKHNlcnZlcl9ob3N0X2tleV9ibG9iKTsK LSAJZnJlZShzaWduYXR1cmUpOwotIAlzc2hidWZfZnJlZSh0bXApOwotQEAgLTM2MiwxMyArMzkx LDI4IEBAIGlucHV0X2tleF9nZW5faW5pdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qg c3NoICpzc2gpCi0gCQlicmVhazsKLSAJY2FzZSBLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1 NjoKLSAJCWlmIChGSVBTX21vZGUoKSkgewotLQkJICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0 eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOwotLQkJICAg IHIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQkgICAgRVZQX0tFTSAqbWxrZW0gPSBF VlBfS0VNX2ZldGNoKE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOwotKwkJICAgIGlmIChtbGtlbSA9 PSBOVUxMKSB7Ci0rCQkgICAgICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4 eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOwotKwkJICAgICAgICByID0gU1NI X0VSUl9JTlZBTElEX0FSR1VNRU5UOwotKwkJICAgIH0gZWxzZSB7Ci0rCQkJRVZQX0tFTV9mcmVl KG1sa2VtKTsKLSsJCSAgICAgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZW5jKGtleCwg Y2xpZW50X3B1YmtleSwKLSsJCSAgICAgICAgICAgICZzZXJ2ZXJfcHVia2V5LCAmc2hhcmVkX3Nl Y3JldCk7Ci0rCQkgICAgfQotIAkJfSBlbHNlIHsKLSAJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2 OHgyNTUxOV9lbmMoa2V4LCBjbGllbnRfcHVia2V5LAotIAkJICAgICAgICAmc2VydmVyX3B1Ymtl eSwgJnNoYXJlZF9zZWNyZXQpOwotIAkJfQotIAkJYnJlYWs7Ci0rCWNhc2UgS0VYX0tFTV9NTEtF TTc2OE5JU1RQMjU2X1NIQTI1NjoKLSsJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2 X2VuYyhrZXgsIGNsaWVudF9wdWJrZXksCi0rCQkgICAgICAgICZzZXJ2ZXJfcHVia2V5LCAmc2hh cmVkX3NlY3JldCk7Ci0rCQlicmVhazsKLSsJY2FzZSBLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0 X1NIQTM4NDoKLSsJCSAgICByID0ga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9lbmMoa2V4LCBj bGllbnRfcHVia2V5LAotKwkJICAgICAgICAmc2VydmVyX3B1YmtleSwgJnNoYXJlZF9zZWNyZXQp OwotKwkJYnJlYWs7Ci0gCWRlZmF1bHQ6Ci0gCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5U OwotIAkJYnJlYWs7Ci1kaWZmIC0tZ2l0IGEva2V4bWxrZW03Njh4MjU1MTkuYyBiL2tleG1sa2Vt NzY4eDI1NTE5LmMKLWluZGV4IGFiNjE2NzIyMS4uN2MwNjNmMjFjIDEwMDY0NAotLS0tIGEva2V4 bWxrZW03Njh4MjU1MTkuYwotKysrIGIva2V4bWxrZW03Njh4MjU1MTkuYwotQEAgLTQ0LDE5ICs0 NCwzMyBAQAotICNpZmRlZiBVU0VfTUxLRU03NjhYMjU1MTkKLSAKLSAjaW5jbHVkZSAibGliY3J1 eF9tbGtlbTc2OF9zaGEzLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lYy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjaW5jbHVkZSA8c3RkaW8u aD4KLSAKLSsjZGVmaW5lIEZJUFNfRkFMTEJBQ0tfUFJPUFEgInByb3ZpZGVyPWRlZmF1bHQsLWZp cHMiCi0rCi0gc3RhdGljIGludAotLW1sa2VtNzY4X2tleXBhaXJfZ2VuKHVuc2lnbmVkIGNoYXIg KnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1ZikKLSttbGtlbV9rZXlwYWlyX2dl bihjb25zdCBjaGFyICphbGduYW1lLCB1bnNpZ25lZCBjaGFyICpwdWJrZXlidWYsIHNpemVfdCBw dWJrZXlfc2l6ZSwKLSsJICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYsIHNpemVf dCBwcml2a2V5X3NpemUpCi0gewotICAgICBFVlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7Ci0gICAg IEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKLSAgICAgaW50IHJldCA9IFNTSF9FUlJfSU5URVJOQUxf RVJST1I7Ci0tICAgIHNpemVfdCBwdWJrZXlfc2l6ZSA9IGNyeXB0b19rZW1fbWxrZW03NjhfUFVC TElDS0VZQllURVMsIHByaXZrZXlfc2l6ZSA9IGNyeXB0b19rZW1fbWxrZW03NjhfU0VDUkVUS0VZ QllURVM7Ci0rICAgIHNpemVfdCBnb3RfcHViX3NpemUgPSBwdWJrZXlfc2l6ZSwgZ290X3ByaXZf c2l6ZSA9IHByaXZrZXlfc2l6ZTsKLSsKLSsgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9t X25hbWUoTlVMTCwgYWxnbmFtZSwgTlVMTCk7Ci0rCi0rICAgIGlmIChjdHggPT0gTlVMTCAmJiBG SVBTX21vZGUoKSkgewotKwkvKiBXZSBoYXZlIGZpbHRlcmVkIHgyNTUxOSArIE1MLUtFTSBpbiBG SVBTIG1vZGUgZWFybGllcgotKwkgKiBzbyBpZiB3ZSBhcmUgaW4gRklQUyBtb2RlIGFuZCBNTC1L RU0gaXMgbm90IGF2YWlsYWJsZSB3aXRoIGRlZmF1bHQgcHJvcHEsCi0rCSAqIHdlIGNhbiBmZXRj aCBpdCBmcm9tIHRoZSBkZWZhdWx0IHByb3ZpZGVyICovCi0rICAgICAgICBjdHggPSBFVlBfUEtF WV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCBhbGduYW1lLCBGSVBTX0ZBTExCQUNLX1BST1BRKTsK LSsgICAgfQotIAotLSAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAi bWxrZW03NjgiLCBOVUxMKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMKSB7Ci0gCXJldCA9IFNTSF9F UlJfTElCQ1JZUFRPX0VSUk9SOwotIAlnb3RvIGVycjsKLUBAIC02OCwxNyArODIsMjMgQEAgbWxr ZW03Njhfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCB1bnNpZ25lZCBjaGFy ICpwcml2a2V5YnVmKQotICAgICAgICAgZ290byBlcnI7Ci0gICAgIH0KLSAKLS0gICAgaWYgKEVW UF9QS0VZX2dldF9yYXdfcHVibGljX2tleShwa2V5LCBwdWJrZXlidWYsICZwdWJrZXlfc2l6ZSkg PD0gMAotLQl8fCBFVlBfUEtFWV9nZXRfcmF3X3ByaXZhdGVfa2V5KHBrZXksIHByaXZrZXlidWYs ICZwcml2a2V5X3NpemUpIDw9IDApIHsKLSsgICAgaWYgKEVWUF9QS0VZX2dldF9yYXdfcHVibGlj X2tleShwa2V5LCBOVUxMLCAmZ290X3B1Yl9zaXplKSA8PSAwCi0rCXx8IEVWUF9QS0VZX2dldF9y YXdfcHJpdmF0ZV9rZXkocGtleSwgTlVMTCwgJmdvdF9wcml2X3NpemUpIDw9IDApIHsKLSAJcmV0 ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gICAgICAgICBnb3RvIGVycjsKLSAgICAgfQot IAotLSAgICBpZiAocHJpdmtleV9zaXplICE9IGNyeXB0b19rZW1fbWxrZW03NjhfU0VDUkVUS0VZ QllURVMKLS0JICAgIHx8IHB1YmtleV9zaXplICE9IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElD S0VZQllURVMpIHsKLSsgICAgaWYgKHByaXZrZXlfc2l6ZSAhPSBnb3RfcHJpdl9zaXplIHx8IHB1 YmtleV9zaXplICE9IGdvdF9wdWJfc2l6ZSkgewotIAlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUjsKLSAgICAgICAgIGdvdG8gZXJyOwotICAgICB9Ci0rCi0rICAgIGlmIChFVlBfUEtFWV9n ZXRfcmF3X3B1YmxpY19rZXkocGtleSwgcHVia2V5YnVmLCAmZ290X3B1Yl9zaXplKSA8PSAwCi0r CXx8IEVWUF9QS0VZX2dldF9yYXdfcHJpdmF0ZV9rZXkocGtleSwgcHJpdmtleWJ1ZiwgJmdvdF9w cml2X3NpemUpIDw9IDApIHsKLSsJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0rICAg ICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotICAgICByZXQgPSAwOwotIAotICBlcnI6Ci1AQCAt OTAsMjcgKzExMCw1NyBAQCBtbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNpZ25lZCBjaGFyICpwdWJr ZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCi0gfQotIAotIHN0YXRpYyBpbnQKLS1t bGtlbTc2OF9lbmNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwdWJrZXlidWYsIHVfY2hhciAqc2Vj cmV0LCB1X2NoYXIgKm91dCkKLSttbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNpZ25lZCBjaGFyICpw dWJrZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCi0rewotKwlyZXR1cm4gbWxrZW1f a2V5cGFpcl9nZW4oIm1sa2VtNzY4IiwgcHVia2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtNzY4X1BV QkxJQ0tFWUJZVEVTLAotKwkJCXByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03NjhfU0VDUkVU S0VZQllURVMpOwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxrZW0xMDI0X2tleXBhaXJfZ2VuKHVu c2lnbmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1ZikKLSt7Ci0r CXJldHVybiBtbGtlbV9rZXlwYWlyX2dlbigibWxrZW0xMDI0IiwgcHVia2V5YnVmLCBjcnlwdG9f a2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUywKLSsJCQlwcml2a2V5YnVmLCBjcnlwdG9fa2Vt X21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUyk7Ci0rfQotKwotK3N0YXRpYyBpbnQKLSttbGtlbV9l bmNhcF9zZWNyZXQoY29uc3QgY2hhciAqbWxrZW1fYWxnLCBjb25zdCB1X2NoYXIgKnB1YmtleWJ1 ZiwgdV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQotIHsKLSAgICAgRVZQX1BLRVkgKnBrZXkg PSBOVUxMOwotICAgICBFVlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7Ci0gICAgIGludCByID0gU1NI X0VSUl9JTlRFUk5BTF9FUlJPUjsKLS0gICAgc2l6ZV90IG91dGxlbiA9IGNyeXB0b19rZW1fbWxr ZW03NjhfQ0lQSEVSVEVYVEJZVEVTLAotLQkgICBzZWNyZXRsZW4gPSBjcnlwdG9fa2VtX21sa2Vt NzY4X0JZVEVTOwotKyAgICBzaXplX3Qgb3V0bGVuLCBleHBlY3RlZF9vdXRsZW4sIHB1Ymxlbiwg c2VjcmV0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUzsKLSsgICAgaW50IGZpcHNfZmFs bGJhY2sgPSAwOwotKwotKyAgICBpZiAoc3RyY21wKG1sa2VtX2FsZywgIm1sa2VtNzY4IikgPT0g MCkgewotKwkgICAgb3V0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVM7 Ci0rCSAgICBwdWJsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTOwotKyAg ICB9IGVsc2UgaWYgKHN0cmNtcChtbGtlbV9hbGcsICJtbGtlbTEwMjQiKSA9PSAwKSB7Ci0rCSAg ICBvdXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVM7Ci0rCSAgICBw dWJsZW4gPSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUzsKLSsgICAgfSBlbHNl Ci0rCSAgICByZXR1cm4gcjsKLSAKLS0gICAgcGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHVibGlj X2tleV9leChOVUxMLCAibWxrZW03NjgiLCBOVUxMLAotLQkJICAgIHB1YmtleWJ1ZiwgY3J5cHRv X2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUyk7Ci0rICAgIGV4cGVjdGVkX291dGxlbiA9IG91 dGxlbjsKLSsKLSsgICAgcGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHVibGljX2tleV9leChOVUxM LCBtbGtlbV9hbGcsIE5VTEwsCi0rCQkgICAgcHVia2V5YnVmLCBwdWJsZW4pOwotKyAgICBpZiAo cGtleSA9PSBOVUxMICYmIEZJUFNfbW9kZSgpKSB7Ci0rICAgICAgICBwa2V5ID0gRVZQX1BLRVlf bmV3X3Jhd19wdWJsaWNfa2V5X2V4KE5VTEwsIG1sa2VtX2FsZywgRklQU19GQUxMQkFDS19QUk9Q USwKLSsJCSAgICBwdWJrZXlidWYsIHB1Ymxlbik7Ci0rCWZpcHNfZmFsbGJhY2sgPSAxOwotKyAg ICB9Ci0gICAgIGlmIChwa2V5ID09IE5VTEwpIHsKLSAJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VS Uk9SOwotIAlnb3RvIGVycjsKLSAgICAgfQotIAotLSAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3 X2Zyb21fcGtleShOVUxMLCBwa2V5LCBOVUxMKTsKLSsgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25l d19mcm9tX3BrZXkoTlVMTCwgcGtleSwgZmlwc19mYWxsYmFjayA/IEZJUFNfRkFMTEJBQ0tfUFJP UFEgOiBOVUxMKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMCi0gCXx8IEVWUF9QS0VZX2VuY2Fwc3Vs YXRlX2luaXQoY3R4LCBOVUxMKSA8PSAwCi0tICAgICAgICB8fCBFVlBfUEtFWV9lbmNhcHN1bGF0 ZShjdHgsIG91dCwgJm91dGxlbiwgc2VjcmV0LCAmc2VjcmV0bGVuKSA8PSAwCi0rICAgICAgICB8 fCBFVlBfUEtFWV9lbmNhcHN1bGF0ZShjdHgsIG91dCwgJmV4cGVjdGVkX291dGxlbiwgc2VjcmV0 LCAmc2VjcmV0bGVuKSA8PSAwCi0gCXx8IHNlY3JldGxlbiAhPSBjcnlwdG9fa2VtX21sa2VtNzY4 X0JZVEVTCi0tCXx8IG91dGxlbiAhPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRF UykgewotKwl8fCBvdXRsZW4gIT0gZXhwZWN0ZWRfb3V0bGVuKSB7Ci0gCXIgPSBTU0hfRVJSX0xJ QkNSWVBUT19FUlJPUjsKLSAJZ290byBlcnI7Ci0gICAgIH0KLUBAIC0xMjYsMjUgKzE3Niw0NSBA QCBtbGtlbTc2OF9lbmNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwdWJrZXlidWYsIHVfY2hhciAq c2VjcmV0LCB1X2NoYXIgKm91dCkKLSB9Ci0gCi0gc3RhdGljIGludAotLW1sa2VtNzY4X2RlY2Fw X3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNvbnN0IHVfY2hhciAqd3JhcHBlZCwg dV9jaGFyICpzZWNyZXQpCi0rbWxrZW03NjhfZW5jYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHVi a2V5YnVmLCB1X2NoYXIgKnNlY3JldCwgdV9jaGFyICpvdXQpCi0rewotKwlyZXR1cm4gbWxrZW1f ZW5jYXBfc2VjcmV0KCJtbGtlbTc2OCIsIHB1YmtleWJ1Ziwgc2VjcmV0LCBvdXQpOwotK30KLSsK LStzdGF0aWMgaW50Ci0rbWxrZW0xMDI0X2VuY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnB1Ymtl eWJ1ZiwgdV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQotK3sKLSsJcmV0dXJuIG1sa2VtX2Vu Y2FwX3NlY3JldCgibWxrZW0xMDI0IiwgcHVia2V5YnVmLCBzZWNyZXQsIG91dCk7Ci0rfQotKwot K3N0YXRpYyBpbnQKLSttbGtlbV9kZWNhcF9zZWNyZXQoY29uc3QgY2hhciAqYWxnbmFtZSwKLSsg ICAgY29uc3QgdV9jaGFyICpwcml2a2V5YnVmLCBzaXplX3QgcHJpdmtleV9sZW4sCi0rICAgIGNv bnN0IHVfY2hhciAqd3JhcHBlZCwgc2l6ZV90IHdyYXBwZWRfbGVuLAotKyAgICB1X2NoYXIgKnNl Y3JldCkKLSB7Ci0gICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKLSAgICAgRVZQX1BLRVlfQ1RY ICpjdHggPSBOVUxMOwotICAgICBpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0tICAg IHNpemVfdCB3cmFwcGVkbGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMs Ci0tCSAgIHNlY3JldGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVM7Ci0rICAgIHNpemVf dCBzZWNyZXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTOwotKyAgICBpbnQgZmlwc19m YWxsYmFjayA9IDA7Ci0gCi0tICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3ByaXZhdGVfa2V5 X2V4KE5VTEwsICJtbGtlbTc2OCIsIE5VTEwsCi0tCQkgICAgcHJpdmtleWJ1ZiwgY3J5cHRvX2tl bV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFUyk7Ci0rICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3 X3ByaXZhdGVfa2V5X2V4KE5VTEwsIGFsZ25hbWUsCi0rCQkgICAgTlVMTCwgcHJpdmtleWJ1Ziwg cHJpdmtleV9sZW4pOwotKyAgICBpZiAocGtleSA9PSBOVUxMICYmIEZJUFNfbW9kZSgpKSB7Ci0r ICAgICAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wcml2YXRlX2tleV9leChOVUxMLCBhbGdu YW1lLAotKwkJICAgIEZJUFNfRkFMTEJBQ0tfUFJPUFEsIHByaXZrZXlidWYsIHByaXZrZXlfbGVu KTsKLSsJZmlwc19mYWxsYmFjayA9IDE7Ci0rICAgIH0KLSAgICAgaWYgKHBrZXkgPT0gTlVMTCkg ewotIAlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gCWdvdG8gZXJyOwotICAgICB9Ci0g Ci0tICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBrZXksIE5VTEwp OwotKyAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5LCBmaXBz X2ZhbGxiYWNrID8gRklQU19GQUxMQkFDS19QUk9QUSA6IE5VTEwpOwotICAgICBpZiAoY3R4ID09 IE5VTEwKLSAJfHwgRVZQX1BLRVlfZGVjYXBzdWxhdGVfaW5pdChjdHgsIE5VTEwpIDw9IDAKLS0g ICAgICAgIHx8IEVWUF9QS0VZX2RlY2Fwc3VsYXRlKGN0eCwgc2VjcmV0LCAmc2VjcmV0bGVuLCB3 cmFwcGVkLCB3cmFwcGVkbGVuKSA8PSAwCi0rICAgICAgICB8fCBFVlBfUEtFWV9kZWNhcHN1bGF0 ZShjdHgsIHNlY3JldCwgJnNlY3JldGxlbiwgd3JhcHBlZCwgd3JhcHBlZF9sZW4pIDw9IDAKLSAJ fHwgc2VjcmV0bGVuICE9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVMpIHsKLSAJciA9IFNTSF9F UlJfTElCQ1JZUFRPX0VSUk9SOwotIAlnb3RvIGVycjsKLUBAIC0xNjEsNiArMjMxLDIwIEBAIG1s a2VtNzY4X2RlY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNvbnN0IHVfY2hh ciAqd3JhcHBlZCwgdV9jaGFyICpzCi0gICAgIHJldHVybiByOwotIH0KLSAKLStzdGF0aWMgaW50 Ci0rbWxrZW03NjhfZGVjYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHJpdmtleWJ1ZiwgY29uc3Qg dV9jaGFyICp3cmFwcGVkLCB1X2NoYXIgKnNlY3JldCkKLSt7Ci0rCXJldHVybiBtbGtlbV9kZWNh cF9zZWNyZXQoIm1sa2VtNzY4IiwgcHJpdmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNS RVRLRVlCWVRFUywKLSsJCXdyYXBwZWQsIGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZ VEVTLCBzZWNyZXQpOwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxrZW0xMDI0X2RlY2FwX3NlY3Jl dChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNvbnN0IHVfY2hhciAqd3JhcHBlZCwgdV9jaGFy ICpzZWNyZXQpCi0rewotKwlyZXR1cm4gbWxrZW1fZGVjYXBfc2VjcmV0KCJtbGtlbTEwMjQiLCBw cml2a2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUywKLSsJCXdyYXBw ZWQsIGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUywgc2VjcmV0KTsKLSt9Ci0r Ci0gaW50Ci0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkK LSB7Ci1AQCAtMzM3LDcgKzQyMSw3IEBAIGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZW5jKHN0cnVj dCBrZXggKmtleCwKLSAJdV9jaGFyIGhhc2hbU1NIX0RJR0VTVF9NQVhfTEVOR1RIXTsKLSAJc2l6 ZV90IG5lZWQ7Ci0gCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLS0Jc3RydWN0IGxp YmNydXhfbWxrZW03NjhfZW5jX3Jlc3VsdCBlbmM7IC8qIEZJWE1FICovCi0rCXN0cnVjdCBsaWJj cnV4X21sa2VtNzY4X2VuY19yZXN1bHQgZW5jOwotIAotIAkqc2VydmVyX2Jsb2JwID0gTlVMTDsK LSAJKnNoYXJlZF9zZWNyZXRwID0gTlVMTDsKLUBAIC01NDYsNiArNjMwLDUyMCBAQCBrZXhfa2Vt X21sa2VtNzY4eDI1NTE5X2RlYyhzdHJ1Y3Qga2V4ICprZXgsCi0gCXJldHVybiByOwotICNlbmRp ZgotIH0KLSsKLSsjZGVmaW5lIE5JU1RfUDI1Nl9DT01QUkVTU0VEX0xFTiAgIDMzCi0rI2RlZmlu ZSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTiA2NQotKyNkZWZpbmUgTklTVF9QMzg0X0NPTVBS RVNTRURfTEVOICAgNDkKLSsjZGVmaW5lIE5JU1RfUDM4NF9VTkNPTVBSRVNTRURfTEVOIDk3Ci0r I2RlZmluZSBOSVNUX0JVRl9NQVhfU0laRSBOSVNUX1AzODRfVU5DT01QUkVTU0VEX0xFTgotKwot K3N0YXRpYyBjb25zdCBjaGFyIGVjMjU2W10gPSAiUC0yNTYiOwotK3N0YXRpYyBjb25zdCBjaGFy IGVjMzg0W10gPSAiUC0zODQiOwotK3N0YXRpYyBjb25zdCBjaGFyICpsZW4yY3VydmVfbmFtZShz aXplX3QgbGVuKQotK3sKLSsJc3dpdGNoIChsZW4pIHsKLSsJCWNhc2UgTklTVF9QMjU2X0NPTVBS RVNTRURfTEVOOgotKwkJY2FzZSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTjoKLSsJCQlyZXR1 cm4gZWMyNTY7Ci0rCQkJYnJlYWs7Ci0rCQljYXNlIE5JU1RfUDM4NF9DT01QUkVTU0VEX0xFTjoK LSsJCWNhc2UgTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU46Ci0rCQkJcmV0dXJuIGVjMzg0Owot KwkJCWJyZWFrOwotKwl9Ci0rCXJldHVybiBOVUxMOwotK30KLSsKLStzdGF0aWMgRVZQX1BLRVkg KgotK2J1ZjJuaXN0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICpwdWJfa2V5X2J1Ziwgc2l6ZV90 IHB1Yl9rZXlfbGVuKQotK3sKLSsJRVZQX1BLRVkgKnBrZXkgPSBOVUxMOwotKwlFVlBfUEtFWV9D VFggKmN0eCA9IE5VTEw7Ci0rCU9TU0xfUEFSQU0gcGFyYW1zWzNdOwotKwljb25zdCBjaGFyICpj dXJ2ZV9uYW1lID0gbGVuMmN1cnZlX25hbWUocHViX2tleV9sZW4pOwotKwotKwlpZiAoY3VydmVf bmFtZSA9PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCWN0eCA9IEVWUF9QS0VZX0NUWF9u ZXdfZnJvbV9uYW1lKE5VTEwsICJFQyIsIE5VTEwpOwotKwlpZiAoIWN0eCkKLSsJCWdvdG8gZXJy OwotKwotKwlpZiAoRVZQX1BLRVlfZnJvbWRhdGFfaW5pdChjdHgpIDw9IDApCi0rCQlnb3RvIGVy cjsKLSsKLSsJcGFyYW1zWzBdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3RfdXRmOF9zdHJpbmcoT1NT TF9QS0VZX1BBUkFNX0dST1VQX05BTUUsIGN1cnZlX25hbWUsIDApOwotKwlwYXJhbXNbMV0gPSBP U1NMX1BBUkFNX2NvbnN0cnVjdF9vY3RldF9zdHJpbmcoCi0rCQkJT1NTTF9QS0VZX1BBUkFNX1BV Ql9LRVksICh2b2lkICopcHViX2tleV9idWYsIHB1Yl9rZXlfbGVuKTsKLSsJcGFyYW1zWzJdID0g T1NTTF9QQVJBTV9jb25zdHJ1Y3RfZW5kKCk7Ci0rCi0rCWlmIChFVlBfUEtFWV9mcm9tZGF0YShj dHgsICZwa2V5LCBFVlBfUEtFWV9QVUJMSUNfS0VZLCBwYXJhbXMpIDw9IDApCi0rCQlnb3RvIGVy cjsKLSsKLSsJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKLSsJcmV0dXJuIHBrZXk7Ci0rCi0rZXJy OgotKwlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOwotKwlFVlBfUEtFWV9mcmVlKHBrZXkpOwotKwly ZXR1cm4gTlVMTDsKLSt9Ci0rCi0rc3RhdGljIGludAotK2tleF9uaXN0X3NoYXJlZF9rZXlfZXh0 KEVWUF9QS0VZICpwcml2X2tleSwKLSsgICAgY29uc3QgdV9jaGFyICpwdWJfa2V5X2J1Ziwgc2l6 ZV90IHB1Yl9rZXlfbGVuLCBzdHJ1Y3Qgc3NoYnVmICpvdXQpCi0rewotKwlFVlBfUEtFWV9DVFgg KmN0eCA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKnNoYXJlZF9zZWNyZXQgPSBOVUxMOwotKwlz aXplX3Qgc2hhcmVkX3NlY3JldF9sZW4gPSAwOwotKwlFVlBfUEtFWSAqcGVlcl9rZXkgPSBidWYy bmlzdF9rZXkocHViX2tleV9idWYsIHB1Yl9rZXlfbGVuKTsKLSsJaW50IHIgPSBTU0hfRVJSX0lO VEVSTkFMX0VSUk9SOwotKwotKwlpZiAocGVlcl9rZXkgPT0gTlVMTCkKLSsJCXJldHVybiBTU0hf RVJSX0tFWV9MRU5HVEg7Ci0rCi0rCWN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5V TEwsIHByaXZfa2V5LCBOVUxMKTsKLSsJaWYgKCFjdHgpCi0rCQlnb3RvIGVuZDsKLSsKLSsJaWYg KChFVlBfUEtFWV9kZXJpdmVfaW5pdChjdHgpIDw9IDApCi0rCQl8fCBFVlBfUEtFWV9kZXJpdmVf c2V0X3BlZXIoY3R4LCBwZWVyX2tleSkgPD0gMAotKwkJfHwgRVZQX1BLRVlfZGVyaXZlKGN0eCwg TlVMTCwgJnNoYXJlZF9zZWNyZXRfbGVuKSA8PSAwKQotKwkJZ290byBlbmQ7Ci0rCi0rCXNoYXJl ZF9zZWNyZXQgPSBPUEVOU1NMX21hbGxvYyhzaGFyZWRfc2VjcmV0X2xlbik7Ci0rCWlmIChzaGFy ZWRfc2VjcmV0ID09IE5VTEwpCi0rCQlnb3RvIGVuZDsKLSsKLSsJaWYgKEVWUF9QS0VZX2Rlcml2 ZShjdHgsIHNoYXJlZF9zZWNyZXQsICZzaGFyZWRfc2VjcmV0X2xlbikgPD0gMCkKLSsJCWdvdG8g ZW5kOwotKwotKwlpZiAoKHIgPSBzc2hidWZfcHV0KG91dCwgc2hhcmVkX3NlY3JldCwgc2hhcmVk X3NlY3JldF9sZW4pKSAhPSAwKQotKwkJZ290byBlbmQ7Ci0rCi0rCXIgPSAwOwotKwotK2VuZDoK LSsJRVZQX1BLRVlfZnJlZShwZWVyX2tleSk7Ci0rCWlmIChzaGFyZWRfc2VjcmV0KQotKwkJT1BF TlNTTF9jbGVhcl9mcmVlKHNoYXJlZF9zZWNyZXQsIHNoYXJlZF9zZWNyZXRfbGVuKTsKLSsJRVZQ X1BLRVlfQ1RYX2ZyZWUoY3R4KTsKLSsKLSsJcmV0dXJuIHI7Ci0rfQotKwotK3N0YXRpYyBFVlBf UEtFWSAqCi0rbmlzdF9wa2V5X2tleWdlbihzaXplX3QgcHViX2tleV9sZW4pCi0rewotKwljb25z dCBjaGFyICpjdXJ2ZV9uYW1lID0gbGVuMmN1cnZlX25hbWUocHViX2tleV9sZW4pOwotKwlFVlBf UEtFWV9DVFggKnBjdHggPSBOVUxMOwotKwlFVlBfUEtFWSAqcGtleSA9IE5VTEw7Ci0rCU9TU0xf UEFSQU0gcGFyYW1zWzJdOwotKwotKwlpZiAoY3VydmVfbmFtZSA9PSBOVUxMKQotKwkJcmV0dXJu IE5VTEw7Ci0rCi0rCXBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiRUMi LCBOVUxMKTsKLSsJaWYgKCFwY3R4KQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCWlmIChFVlBfUEtF WV9rZXlnZW5faW5pdChwY3R4KSA8PSAwKSB7Ci0rCQlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsK LSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCXBhcmFtc1swXSA9IE9TU0xfUEFSQU1fY29uc3Ry dWN0X3V0Zjhfc3RyaW5nKE9TU0xfUEtFWV9QQVJBTV9HUk9VUF9OQU1FLCBjdXJ2ZV9uYW1lLCAw KTsKLSsJcGFyYW1zWzFdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3RfZW5kKCk7Ci0rCi0rCWlmIChF VlBfUEtFWV9DVFhfc2V0X3BhcmFtcyhwY3R4LCBwYXJhbXMpIDw9IDAKLSsJICAgIHx8IEVWUF9Q S0VZX2tleWdlbihwY3R4LCAmcGtleSkgPD0gMCkgewotKwkJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0 eCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsK LSsJcmV0dXJuIHBrZXk7Ci0rfQotKwotK3N0YXRpYyBzaXplX3QgZGVjb21wcmVzc19wdWJfa2V5 KHZvaWQgKnB1Yiwgc2l6ZV90IGNvbXByZXNzZWRfbGVuLCBzaXplX3QgZGVjb21wcmVzc2VkX2xl bikKLSt7Ci0rICAgIEVDX0dST1VQICpncm91cCA9IE5VTEw7Ci0rICAgIEVDX1BPSU5UICpwb2lu dCA9IE5VTEw7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgc2l6ZV90IGxlbiA9IDA7 Ci0rICAgIGludCBncm91cF9uaWQgPSBOSURfdW5kZWY7Ci0rCi0rICAgIHN3aXRjaCAoY29tcHJl c3NlZF9sZW4pIHsKLSsgICAgY2FzZSBOSVNUX1AyNTZfQ09NUFJFU1NFRF9MRU46Ci0rICAgICAg ICAgZ3JvdXBfbmlkID0gTklEX1g5XzYyX3ByaW1lMjU2djE7Ci0rICAgICAgIGJyZWFrOwotKyAg ICBjYXNlIE5JU1RfUDM4NF9DT01QUkVTU0VEX0xFTjoKLSsgICAgICAgICBncm91cF9uaWQgPSBO SURfc2VjcDM4NHIxOwotKyAgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICAgcmV0 dXJuIDA7Ci0rICAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIGN0eCA9IEJOX0NUWF9uZXco KTsKLSsgICAgZ3JvdXAgPSBFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShncm91cF9uaWQpOwot KyAgICBpZiAoY3R4ID09IE5VTEwgfHwgZ3JvdXAgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJy OwotKwotKyAgICBwb2ludCA9IEVDX1BPSU5UX25ldyhncm91cCk7Ci0rICAgIGlmIChwb2ludCA9 PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmICghRUNfUE9JTlRfb2N0MnBv aW50KGdyb3VwLCBwb2ludCwgcHViLCBjb21wcmVzc2VkX2xlbiwgY3R4KSkKLSsgICAgICAgIGdv dG8gZXJyOwotKwotKyAgICBsZW4gPSBFQ19QT0lOVF9wb2ludDJvY3QoZ3JvdXAsIHBvaW50LCBQ T0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCwgcHViLCBkZWNvbXByZXNzZWRfbGVuLCBjdHgp OwotKwotK2VycjoKLSsgICAgRUNfUE9JTlRfZnJlZShwb2ludCk7Ci0rICAgIEVDX0dST1VQX2Zy ZWUoZ3JvdXApOwotKyAgICBCTl9DVFhfZnJlZShjdHgpOwotKwotKyAgICByZXR1cm4gbGVuOwot K30KLSsKLStzdGF0aWMgaW50Ci0rZ2V0X3VuY29tcHJlc3NlZF9lY19wdWJrZXkoRVZQX1BLRVkg KnBrZXksIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCi0rewotKyAgICBPU1NM X1BBUkFNIHBhcmFtc1syXTsKLSsgICAgc2l6ZV90IHJlcXVpcmVkX2xlbiA9IDAsIG91dF9sZW4g PSAwOwotKwotKyAgICBwYXJhbXNbMF0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF91dGY4X3N0cmlu ZygKLSsgICAgICAgIE9TU0xfUEtFWV9QQVJBTV9FQ19QT0lOVF9DT05WRVJTSU9OX0ZPUk1BVCwK LSsgICAgICAgICJ1bmNvbXByZXNzZWQiLCAwKTsKLSsgICAgcGFyYW1zWzFdID0gT1NTTF9QQVJB TV9jb25zdHJ1Y3RfZW5kKCk7Ci0rCi0rICAgIGlmIChFVlBfUEtFWV9zZXRfcGFyYW1zKHBrZXks IHBhcmFtcykgPD0gMAotKwkgICAgfHwgRVZQX1BLRVlfZ2V0X29jdGV0X3N0cmluZ19wYXJhbShw a2V5LCBPU1NMX1BLRVlfUEFSQU1fUFVCX0tFWSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBidWYsIGJ1Zl9sZW4sICZyZXF1aXJlZF9sZW4pIDw9IDApIHsKLSsg ICAgICAgIHJldHVybiBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsgICAgfQotKwotKyAgICBp ZiAocmVxdWlyZWRfbGVuICE9IGJ1Zl9sZW4pIHsKLSsgICAgICAgIC8qIFJlZCBIYXQgY2VydGlm aWVkIEZJUFMgcHJvdmlkZXIgaWdub3JlcyBPU1NMX1BLRVlfUEFSQU1fRUNfUE9JTlRfQ09OVkVS U0lPTl9GT1JNQVQKLSsJICogV2UgbWF5IGhhdmUgdG8gcGVyZm9ybSB0aGUgY29udmVyc2lvbiBt YW51YWxseSAqLwotKyAgICAgICAgaWYgKGxlbjJjdXJ2ZV9uYW1lKHJlcXVpcmVkX2xlbikgPT0g bGVuMmN1cnZlX25hbWUoYnVmX2xlbikpIHsKLSsJICAgIG91dF9sZW4gPSBkZWNvbXByZXNzX3B1 Yl9rZXkoYnVmLCByZXF1aXJlZF9sZW4sIGJ1Zl9sZW4pOwotKwkgICAgaWYgKG91dF9sZW4gIT0g YnVmX2xlbikgewotKwkgICAgICAgIGRlYnVnX2YoIkVycm9yIGRlY29tcHJlc3NpbmcgdGhlIGNv bXByZXNzZWQgcHVibGljIGtleSIpOwotKwkgICAgICAgIHJldHVybiBTU0hfRVJSX0xJQkNSWVBU T19FUlJPUjsKLSsJICAgIH0gZWxzZSB7Ci0rCQlyZXR1cm4gMDsKLSsJICAgIH0KLSsJfSBlbHNl IHsKLSsJICAgIGRlYnVnX2YoIlVuZXhwZWN0ZWQgbGVuZ3RoIG9mIHVuY29tcHJlc3NlZCBwdWJs aWMga2V5OiBleHBlY3RlZCAlZCwgZ290ICVkIiwgYnVmX2xlbiwgcmVxdWlyZWRfbGVuKTsKLSsJ ICAgIHJldHVybiBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsJfQotKyAgICB9Ci0rCi0rICAg IHJldHVybiAwOwotK30KLSsvKiBuaXN0X2J5dGVzX2xlbiBzaG91bGQgYWx3YXlzIGJlIHVuY29t cHJlc3NlZCAqLwotK3N0YXRpYyBpbnQKLStrZXhfa2VtX21sa2VtX25pc3Rfa2V5cGFpcihzdHJ1 Y3Qga2V4ICprZXgsIHNpemVfdCBtbGtlbV9ieXRlc19sZW4sIHNpemVfdCBuaXN0X2J5dGVzX2xl bikKLSt7Ci0rCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7Ci0rCXVfY2hhciAqY3AgPSBOVUxM OwotKwlzaXplX3QgbmVlZDsKLSsJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwl1 X2NoYXIgKmNsaWVudF9rZXkgPSBOVUxMOwotKwotKwlpZiAoKGJ1ZiA9IHNzaGJ1Zl9uZXcoKSkg PT0gTlVMTCkKLSsJCXJldHVybiBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci0rCW5lZWQgPSBtbGtlbV9i eXRlc19sZW4gKyBuaXN0X2J5dGVzX2xlbjsKLSsJaWYgKChyID0gc3NoYnVmX3Jlc2VydmUoYnVm LCBuZWVkLCAmY3ApKSAhPSAwKQotKwkJZ290byBvdXQ7Ci0rCi0rCWlmIChtbGtlbV9ieXRlc19s ZW4gPT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUykgewotKwkJY2xpZW50X2tl eSA9IGtleC0+bWxrZW03NjhfY2xpZW50X2tleTsKLSsJCXIgPSBtbGtlbTc2OF9rZXlwYWlyX2dl bihjcCwgY2xpZW50X2tleSk7Ci0rCX0KLSsKLSsJaWYgKG1sa2VtX2J5dGVzX2xlbiA9PSBjcnlw dG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUykgewotKwkJY2xpZW50X2tleSA9IGtleC0+ bWxrZW0xMDI0X2NsaWVudF9rZXk7Ci0rCQlyID0gbWxrZW0xMDI0X2tleXBhaXJfZ2VuKGNwLCBj bGllbnRfa2V5KTsKLSsJfQotKwotKwlpZiAoY2xpZW50X2tleSA9PSBOVUxMKQotKwkJZ290byBv dXQ7Ci0rCi0rCWlmIChyICE9IDApCi0rCQlnb3RvIG91dDsKLSsjaWZkZWYgREVCVUdfS0VYRUNE SAotKwlkdW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgbWxrZW1YWFg6IiwgY3AsIG1sa2Vt X2J5dGVzX2xlbik7Ci0rI2VuZGlmCi0rCWNwICs9IG1sa2VtX2J5dGVzX2xlbjsKLSsJaWYgKChr ZXgtPmVjX2h5YnJpZF9jbGllbnRfa2V5ID0gbmlzdF9wa2V5X2tleWdlbihuaXN0X2J5dGVzX2xl bikpID09IE5VTEwpCi0rCQlnb3RvIG91dDsKLSsKLSsJaWYgKChyID0gZ2V0X3VuY29tcHJlc3Nl ZF9lY19wdWJrZXkoa2V4LT5lY19oeWJyaWRfY2xpZW50X2tleSwgY3AsIG5pc3RfYnl0ZXNfbGVu KSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKwotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0rCWR1bXBf ZGlnZXN0KCJjbGllbnQgcHVibGljIGtleSBOSVNUOiIsIGNwLCBuaXN0X2J5dGVzX2xlbik7Ci0r I2VuZGlmCi0rCS8qIHN1Y2Nlc3MgKi8KLSsJciA9IDA7Ci0rCWtleC0+Y2xpZW50X3B1YiA9IGJ1 ZjsKLSsJYnVmID0gTlVMTDsKLSsgb3V0OgotKwlzc2hidWZfZnJlZShidWYpOwotKyAgICAgICAg aWYgKHIgPT0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1IpCi0rCSAgIEVSUl9wcmludF9lcnJvcnNf ZnAoc3RkZXJyKTsKLSsKLSsJcmV0dXJuIHI7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStrZXhfa2Vt X21sa2VtX25pc3RfZW5jKHN0cnVjdCBrZXggKmtleCwgY29uc3QgY2hhciAqbmlzdF9jdXJ2ZSwK LSsgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNl cnZlcl9ibG9icCwKLSsgICBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCi0rewotKwlz dHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYiA9IE5VTEw7Ci0rCXN0cnVjdCBzc2hidWYgKmJ1ZiA9 IE5VTEw7Ci0rCWNvbnN0IHVfY2hhciAqY2xpZW50X3B1YjsKLSsJdV9jaGFyIHNlcnZlcl9wdWJb TklTVF9CVUZfTUFYX1NJWkVdOwotKwl1X2NoYXIgZW5jX291dFtjcnlwdG9fa2VtX21sa2VtMTAy NF9DSVBIRVJURVhUQllURVNdOwotKwl1X2NoYXIgc2VjcmV0W2NyeXB0b19rZW1fbWxrZW03Njhf QllURVNdOwotKwlFVlBfUEtFWSAqc2VydmVyX2tleSA9IE5VTEw7Ci0rCXVfY2hhciBoYXNoW1NT SF9ESUdFU1RfTUFYX0xFTkdUSF07Ci0rCXNpemVfdCBjbGllbnRfYnVmX2xlbiwgbWxrZW1fYnVm X2xlbiwgZWNkaF9idWZfbGVuLCBzZXJ2ZXJfa2V5X2xlbiwgZW5jX291dF9sZW47Ci0rCWludCBy ID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsKLSsJKnNlcnZlcl9ibG9icCA9IE5VTEw7Ci0r CSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7Ci0rCi0rCWNsaWVudF9idWZfbGVuID0gc3NoYnVmX2xl bihjbGllbnRfYmxvYik7Ci0rCS8qIGNsaWVudF9ibG9iIGNvbnRhaW5zIGJvdGggS0VNIGFuZCBF Q0RIIGNsaWVudCBwdWJrZXlzICovCi0rCWlmIChzdHJjbXAobmlzdF9jdXJ2ZSwgIlAtMjU2Iikg PT0gMCkgewotKwkJaWYgKGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMgPiBjbGll bnRfYnVmX2xlbikKLSsJCQlyZXR1cm4gcjsKLSsKLSsJCWVjZGhfYnVmX2xlbiA9IGNsaWVudF9i dWZfbGVuIC0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUzsKLSsJCWlmIChlY2Ro X2J1Zl9sZW4gIT0gTklTVF9QMjU2X0NPTVBSRVNTRURfTEVOICYmCi0rCQkJZWNkaF9idWZfbGVu ICE9IE5JU1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOKQotKwkJCXJldHVybiByOwotKwkJbWxrZW1f YnVmX2xlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVM7Ci0rCQllbmNfb3V0 X2xlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTOwotKwkJc2VydmVyX2tl eV9sZW4gPSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTjsKLSsJfSBlbHNlIGlmIChzdHJjbXAo bmlzdF9jdXJ2ZSwgIlAtMzg0IikgPT0gMCkgewotKwkJaWYgKGNyeXB0b19rZW1fbWxrZW0xMDI0 X1BVQkxJQ0tFWUJZVEVTID4gY2xpZW50X2J1Zl9sZW4pCi0rCQkJcmV0dXJuIHI7Ci0rCi0rCQll Y2RoX2J1Zl9sZW4gPSBjbGllbnRfYnVmX2xlbiAtIGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJ Q0tFWUJZVEVTOwotKwkJaWYgKGVjZGhfYnVmX2xlbiAhPSBOSVNUX1AzODRfQ09NUFJFU1NFRF9M RU4gJiYKLSsJCQllY2RoX2J1Zl9sZW4gIT0gTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU4pCi0r CQkJcmV0dXJuIHI7Ci0rCQltbGtlbV9idWZfbGVuID0gY3J5cHRvX2tlbV9tbGtlbTEwMjRfUFVC TElDS0VZQllURVM7Ci0rCQllbmNfb3V0X2xlbiA9IGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhF UlRFWFRCWVRFUzsKLSsJCXNlcnZlcl9rZXlfbGVuID0gTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9M RU47Ci0rCX0gZWxzZQotKwkJcmV0dXJuIHI7Ci0rCi0rCWNsaWVudF9wdWIgPSBzc2hidWZfcHRy KGNsaWVudF9ibG9iKTsKLSsjaWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2RpZ2VzdCgiY2xp ZW50IHB1YmxpYyBrZXkgbWxrZW06IiwgY2xpZW50X3B1YiwgbWxrZW1fYnVmX2xlbik7Ci0rCWR1 bXBfZGlnZXN0KCJjbGllbnQgcHVibGljIGtleSBOSVNUOiIsIGNsaWVudF9wdWIgKyBtbGtlbV9i dWZfbGVuLCBlY2RoX2J1Zl9sZW4pOwotKyNlbmRpZgotKwotKwkvKiBhbGxvY2F0ZSBidWZmZXIg Zm9yIGNvbmNhdGVuYXRpb24gb2YgS0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5ICovCi0rCS8q IHRoZSBidWZmZXIgd2lsbCBiZSBoYXNoZWQgYW5kIHRoZSByZXN1bHQgaXMgdGhlIHNoYXJlZCBz ZWNyZXQgKi8KLSsJaWYgKChidWYgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKLSsJCXIgPSBT U0hfRVJSX0FMTE9DX0ZBSUw7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwkvKiBhbGxvY2F0ZSBzcGFj ZSBmb3IgZW5jcnlwdGVkIEtFTSBrZXkgYW5kIEVDREggcHViIGtleSAqLwotKwlpZiAoKHNlcnZl cl9ibG9iID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKSB7Ci0rCQlyID0gU1NIX0VSUl9BTExPQ19G QUlMOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJciA9IChtbGtlbV9idWZfbGVuID09IGNyeXB0b19r ZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMpID8KLSsJCW1sa2VtNzY4X2VuY2FwX3NlY3JldChj bGllbnRfcHViLCBzZWNyZXQsIGVuY19vdXQpIDoKLSsJCW1sa2VtMTAyNF9lbmNhcF9zZWNyZXQo Y2xpZW50X3B1Yiwgc2VjcmV0LCBlbmNfb3V0KTsKLSsKLSsJaWYgKHIgIT0gMCkKLSsJCWdvdG8g b3V0OwotKwotKwkvKiBnZW5lcmF0ZSBFQ0RIIGtleSBwYWlyLCBzdG9yZSBzZXJ2ZXIgcHVia2V5 IGFmdGVyIGNpcGhlcnRleHQgKi8KLSsJc2VydmVyX2tleSA9IG5pc3RfcGtleV9rZXlnZW4oc2Vy dmVyX2tleV9sZW4pOwotKwotKwlpZiAoKHNlcnZlcl9rZXkgPT0gTlVMTCkgfHwKLSsJICAgIChy ID0gZ2V0X3VuY29tcHJlc3NlZF9lY19wdWJrZXkoc2VydmVyX2tleSwgc2VydmVyX3B1Yiwgc2Vy dmVyX2tleV9sZW4pICE9IDApIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9wdXQoYnVmLCBzZWNyZXQs IHNpemVvZihzZWNyZXQpKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hidWZfcHV0KHNlcnZlcl9i bG9iLCBlbmNfb3V0LCBlbmNfb3V0X2xlbikgIT0gMCl8fAotKwkgICAgKHIgPSBzc2hidWZfcHV0 KHNlcnZlcl9ibG9iLCBzZXJ2ZXJfcHViLCBzZXJ2ZXJfa2V5X2xlbikpICE9IDApCi0rCQlnb3Rv IG91dDsKLSsKLSsJLyogYXBwZW5kIEVDREggc2hhcmVkIGtleSAqLwotKwljbGllbnRfcHViICs9 IG1sa2VtX2J1Zl9sZW47Ci0rCWlmICgociA9IGtleF9uaXN0X3NoYXJlZF9rZXlfZXh0KHNlcnZl cl9rZXksIGNsaWVudF9wdWIsIGVjZGhfYnVmX2xlbiwgYnVmKSkgPCAwKQotKwkJZ290byBvdXQ7 Ci0rCWlmICgociA9IHNzaF9kaWdlc3RfYnVmZmVyKGtleC0+aGFzaF9hbGcsIGJ1ZiwgaGFzaCwg c2l6ZW9mKGhhc2gpKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKyNpZmRlZiBERUJVR19LRVhFQ0RI Ci0rCWR1bXBfZGlnZXN0KCJzZXJ2ZXIgcHVibGljIE5JU1Q6Iiwgc2VydmVyX3B1Yiwgc2VydmVy X2tleV9sZW4pOwotKwlkdW1wX2RpZ2VzdCgic2VydmVyIGNpcGhlciB0ZXh0OiIsIGVuY19vdXQs IGVuY19vdXRfbGVuKTsKLSsJZHVtcF9kaWdlc3QoInNlcnZlciBrZW0ga2V5OiIsIHNlY3JldCwg c2l6ZW9mKHNlY3JldCkpOwotKwlkdW1wX2RpZ2VzdCgiY29uY2F0ZW5hdGlvbiBvZiBLRU0ga2V5 IGFuZCBFQ0RIIHNoYXJlZCBrZXk6IiwKLSsJICAgIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVmX2xl bihidWYpKTsKLSsjZW5kaWYKLSsJLyogc3RyaW5nLWVuY29kZWQgaGFzaCBpcyByZXN1bHRpbmcg c2hhcmVkIHNlY3JldCAqLwotKwlzc2hidWZfcmVzZXQoYnVmKTsKLSsJaWYgKChyID0gc3NoYnVm X3B1dF9zdHJpbmcoYnVmLCBoYXNoLAotKwkgICAgc3NoX2RpZ2VzdF9ieXRlcyhrZXgtPmhhc2hf YWxnKSkpICE9IDApCi0rCQlnb3RvIG91dDsKLSsjaWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1w X2RpZ2VzdCgiZW5jb2RlZCBzaGFyZWQgc2VjcmV0OiIsIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVm X2xlbihidWYpKTsKLSsjZW5kaWYKLSsJLyogc3VjY2VzcyAqLwotKwlyID0gMDsKLSsJKnNlcnZl cl9ibG9icCA9IHNlcnZlcl9ibG9iOwotKwkqc2hhcmVkX3NlY3JldHAgPSBidWY7Ci0rCXNlcnZl cl9ibG9iID0gTlVMTDsKLSsJYnVmID0gTlVMTDsKLSsgb3V0OgotKwlleHBsaWNpdF9iemVybyho YXNoLCBzaXplb2YoaGFzaCkpOwotKwlFVlBfUEtFWV9mcmVlKHNlcnZlcl9rZXkpOwotKwlleHBs aWNpdF9iemVybyhlbmNfb3V0LCBzaXplb2YoZW5jX291dCkpOwotKwlleHBsaWNpdF9iemVybyhz ZWNyZXQsIHNpemVvZihzZWNyZXQpKTsKLSsJc3NoYnVmX2ZyZWUoc2VydmVyX2Jsb2IpOwotKwlz c2hidWZfZnJlZShidWYpOwotKwlyZXR1cm4gcjsKLSt9Ci0rCi0rc3RhdGljIGludAotK2tleF9r ZW1fbWxrZW1fbmlzdF9kZWMoc3RydWN0IGtleCAqa2V4LAotKyAgICBjb25zdCBzdHJ1Y3Qgc3No YnVmICpzZXJ2ZXJfYmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwLAotKyAgICBz aXplX3QgbWxrZW1fbGVuKQotK3sKLSsJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKLSsJY29u c3QgdV9jaGFyICpjaXBoZXJ0ZXh0LCAqc2VydmVyX3B1YjsKLSsJdV9jaGFyIGhhc2hbU1NIX0RJ R0VTVF9NQVhfTEVOR1RIXTsKLSsJdV9jaGFyIGRlY2FwW2NyeXB0b19rZW1fbWxrZW03NjhfQllU RVNdOwotKwlpbnQgcjsKLSsJc2l6ZV90IG5pc3RfbGVuOwotKwotKwkqc2hhcmVkX3NlY3JldHAg PSBOVUxMOwotKwotKwlpZiAoc3NoYnVmX2xlbihzZXJ2ZXJfYmxvYikgPCBtbGtlbV9sZW4pIHsK LSsJCXIgPSBTU0hfRVJSX1NJR05BVFVSRV9JTlZBTElEOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsK LSsJbmlzdF9sZW4gPSBzc2hidWZfbGVuKHNlcnZlcl9ibG9iKSAtIG1sa2VtX2xlbjsKLSsKLSsJ c3dpdGNoIChtbGtlbV9sZW4pIHsKLSsJCWNhc2UgY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJU RVhUQllURVM6Ci0rCQkJaWYgKG5pc3RfbGVuICE9IE5JU1RfUDI1Nl9DT01QUkVTU0VEX0xFTgot KwkJCQkmJiBuaXN0X2xlbiAhPSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTikgewotKwkJCQly ID0gU1NIX0VSUl9TSUdOQVRVUkVfSU5WQUxJRDsKLSsJCQkJZ290byBvdXQ7Ci0rCQkJfQotKwkJ YnJlYWs7Ci0rCQljYXNlIGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUzoKLSsJ CQlpZiAobmlzdF9sZW4gIT0gTklTVF9QMzg0X0NPTVBSRVNTRURfTEVOCi0rCQkJCSYmIG5pc3Rf bGVuICE9IE5JU1RfUDM4NF9VTkNPTVBSRVNTRURfTEVOKSB7Ci0rCQkJCXIgPSBTU0hfRVJSX1NJ R05BVFVSRV9JTlZBTElEOwotKwkJCQlnb3RvIG91dDsKLSsJCQl9Ci0rCQlicmVhazsKLSsJfQot KwotKwljaXBoZXJ0ZXh0ID0gc3NoYnVmX3B0cihzZXJ2ZXJfYmxvYik7Ci0rCXNlcnZlcl9wdWIg PSBjaXBoZXJ0ZXh0ICsgbWxrZW1fbGVuOwotKwkvKiBoYXNoIGNvbmNhdGVuYXRpb24gb2YgS0VN IGtleSBhbmQgRUNESCBzaGFyZWQga2V5ICovCi0rCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9 PSBOVUxMKSB7Ci0rCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOwotKwkJZ290byBvdXQ7Ci0rCX0K LSsjaWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2RpZ2VzdCgic2VydmVyIGNpcGhlciB0ZXh0 OiIsIGNpcGhlcnRleHQsIG1sa2VtX2xlbik7Ci0rCWR1bXBfZGlnZXN0KCJzZXJ2ZXIgcHVibGlj IGtleSBOSVNUOiIsIHNlcnZlcl9wdWIsIG5pc3RfbGVuKTsKLSsjZW5kaWYKLSsJciA9IChtbGtl bV9sZW4gPT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMpID8KLSsJCW1sa2Vt NzY4X2RlY2FwX3NlY3JldChrZXgtPm1sa2VtNzY4X2NsaWVudF9rZXksIGNpcGhlcnRleHQsIGRl Y2FwKSA6Ci0rCQltbGtlbTEwMjRfZGVjYXBfc2VjcmV0KGtleC0+bWxrZW0xMDI0X2NsaWVudF9r ZXksIGNpcGhlcnRleHQsIGRlY2FwKTsKLSsKLSsJaWYgKHIgIT0gMCkKLSsJCWdvdG8gb3V0Owot KwlpZiAoKHIgPSBzc2hidWZfcHV0KGJ1ZiwgZGVjYXAsIHNpemVvZihkZWNhcCkpKSAhPSAwKQot KwkJZ290byBvdXQ7Ci0rCWlmICgociA9IGtleF9uaXN0X3NoYXJlZF9rZXlfZXh0KGtleC0+ZWNf aHlicmlkX2NsaWVudF9rZXksIHNlcnZlcl9wdWIsCi0rCQluaXN0X2xlbiwgYnVmKSkgPCAwKQot KwkJZ290byBvdXQ7Ci0rCWlmICgociA9IHNzaF9kaWdlc3RfYnVmZmVyKGtleC0+aGFzaF9hbGcs IGJ1ZiwKLSsJICAgIGhhc2gsIHNpemVvZihoYXNoKSkpICE9IDApCi0rCQlnb3RvIG91dDsKLSsj aWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2RpZ2VzdCgiY2xpZW50IGtlbSBrZXk6IiwgZGVj YXAsIHNpemVvZihkZWNhcCkpOwotKwlkdW1wX2RpZ2VzdCgiY29uY2F0ZW5hdGlvbiBvZiBLRU0g a2V5IGFuZCBFQ0RIIHNoYXJlZCBrZXk6IiwKLSsJICAgIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVm X2xlbihidWYpKTsKLSsjZW5kaWYKLSsJc3NoYnVmX3Jlc2V0KGJ1Zik7Ci0rCWlmICgociA9IHNz aGJ1Zl9wdXRfc3RyaW5nKGJ1ZiwgaGFzaCwKLSsJICAgIHNzaF9kaWdlc3RfYnl0ZXMoa2V4LT5o YXNoX2FsZykpKSAhPSAwKQotKwkJZ290byBvdXQ7Ci0rI2lmZGVmIERFQlVHX0tFWEVDREgKLSsJ ZHVtcF9kaWdlc3QoImVuY29kZWQgc2hhcmVkIHNlY3JldDoiLCBzc2hidWZfcHRyKGJ1ZiksIHNz aGJ1Zl9sZW4oYnVmKSk7Ci0rI2VuZGlmCi0rCS8qIHN1Y2Nlc3MgKi8KLSsJciA9IDA7Ci0rCSpz aGFyZWRfc2VjcmV0cCA9IGJ1ZjsKLSsJYnVmID0gTlVMTDsKLSsgb3V0OgotKwlleHBsaWNpdF9i emVybyhoYXNoLCBzaXplb2YoaGFzaCkpOwotKwlleHBsaWNpdF9iemVybyhkZWNhcCwgc2l6ZW9m KGRlY2FwKSk7Ci0rCXNzaGJ1Zl9mcmVlKGJ1Zik7Ci0rCXJldHVybiByOwotK30KLSsKLStpbnQK LStrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCi0rewot KwlyZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2tleXBhaXIoa2V4LCBjcnlwdG9fa2VtX21sa2Vt NzY4X1BVQkxJQ0tFWUJZVEVTLCBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTik7Ci0rfQotKwot K2ludAotK2tleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9lbmMoc3RydWN0IGtleCAqa2V4LCBjb25z dCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKnNlcnZl cl9ibG9icCwgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwKQotK3sKLSsJcmV0dXJuIGtl eF9rZW1fbWxrZW1fbmlzdF9lbmMoa2V4LCAiUC0yNTYiLCBjbGllbnRfYmxvYiwgc2VydmVyX2Js b2JwLCBzaGFyZWRfc2VjcmV0cCk7Ci0rfQotKwotK2ludAotK2tleF9rZW1fbWxrZW03NjhuaXN0 cDI1Nl9kZWMoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxv YiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwKQotK3sKLSsJcmV0dXJuIGtl eF9rZW1fbWxrZW1fbmlzdF9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwgc2hhcmVkX3NlY3JldHAsCi0r CQljcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUyk7Ci0rfQotKwotK2ludAotK2tl eF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCi0rewotKwly ZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2tleXBhaXIoa2V4LCBjcnlwdG9fa2VtX21sa2VtMTAy NF9QVUJMSUNLRVlCWVRFUywgTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU4pOwotK30KLSsKLStp bnQKLStrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2VuYyhzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0 IHN0cnVjdCBzc2hidWYgKmNsaWVudF9ibG9iLAotKyAgICBzdHJ1Y3Qgc3NoYnVmICoqc2VydmVy X2Jsb2JwLCBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCi0rewotKwlyZXR1cm4ga2V4 X2tlbV9tbGtlbV9uaXN0X2VuYyhrZXgsICJQLTM4NCIsIGNsaWVudF9ibG9iLCBzZXJ2ZXJfYmxv YnAsIHNoYXJlZF9zZWNyZXRwKTsKLSt9Ci0rCi0raW50Ci0ra2V4X2tlbV9tbGtlbTEwMjRuaXN0 cDM4NF9kZWMoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxv YiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwKQotK3sKLSsJcmV0dXJuIGtl eF9rZW1fbWxrZW1fbmlzdF9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwgc2hhcmVkX3NlY3JldHAsCi0r CQljcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVMpOwotK30KLSsKLSAjZWxzZSAv KiBVU0VfTUxLRU03NjhYMjU1MTkgKi8KLSBpbnQKLSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tl eXBhaXIoc3RydWN0IGtleCAqa2V4KQotQEAgLTU2Nyw0ICsxMTY1LDM5IEBAIGtleF9rZW1fbWxr ZW03Njh4MjU1MTlfZGVjKHN0cnVjdCBrZXggKmtleCwKLSB7Ci0gCXJldHVybiBTU0hfRVJSX1NJ R05fQUxHX1VOU1VQUE9SVEVEOwotIH0KLSsKLStpbnQJIGtleF9rZW1fbWxrZW03NjhuaXN0cDI1 Nl9rZXlwYWlyKHN0cnVjdCBrZXggKikKLSt7Ci0rCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VO U1VQUE9SVEVEOwotK30KLSsKLStpbnQJIGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9lbmMoc3Ry dWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAgIHN0cnVjdCBzc2hidWYgKios IHN0cnVjdCBzc2hidWYgKiopCi0rewotKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBP UlRFRDsKLSt9Ci0rCi0raW50CSBrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfZGVjKHN0cnVjdCBr ZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAotKyAgICBzdHJ1Y3Qgc3NoYnVmICoqKQotK3sK LSsJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7Ci0rfQotKwotK2ludAkga2V4 X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9rZXlwYWlyKHN0cnVjdCBrZXggKikKLSt7Ci0rCXJldHVy biBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOwotK30KLSsKLStpbnQJIGtleF9rZW1fbWxr ZW0xMDI0bmlzdHAzODRfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAot KyAgICBzdHJ1Y3Qgc3NoYnVmICoqLCBzdHJ1Y3Qgc3NoYnVmICoqKQotK3sKLSsJcmV0dXJuIFNT SF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7Ci0rfQotKwotK2ludAkga2V4X2tlbV9tbGtlbTEw MjRuaXN0cDM4NF9kZWMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAg IHN0cnVjdCBzc2hidWYgKiopCi0rewotKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBP UlRFRDsKLSt9Ci0rCi0gI2VuZGlmIC8qIFVTRV9NTEtFTTc2OFgyNTUxOSAqLwotZGlmZiAtLWdp dCBhL21vbml0b3IuYyBiL21vbml0b3IuYwotaW5kZXggYmY1YTUxMDViLi4zNmRiMWFmZWUgMTAw NjQ0Ci0tLS0gYS9tb25pdG9yLmMKLSsrKyBiL21vbml0b3IuYwotQEAgLTIwNTAsNiArMjA1MCw4 IEBAIG1vbml0b3JfYXBwbHlfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRv ciAqcG1vbml0b3IpCi0gCWtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2Vy dmVyOwotIAlrZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dl bl9zZXJ2ZXI7Ci0gCWtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2XSA9IGtl eF9nZW5fc2VydmVyOwotKwlrZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2 XSA9IGtleF9nZW5fc2VydmVyOwotKwlrZXgtPmtleFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0 X1NIQTM4NF0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJa2V4LT5sb2FkX2hvc3RfcHVibGljX2tleT0m Z2V0X2hvc3RrZXlfcHVibGljX2J5X3R5cGU7Ci0gCWtleC0+bG9hZF9ob3N0X3ByaXZhdGVfa2V5 PSZnZXRfaG9zdGtleV9wcml2YXRlX2J5X3R5cGU7Ci0gCWtleC0+aG9zdF9rZXlfaW5kZXg9Jmdl dF9ob3N0a2V5X2luZGV4OwotZGlmZiAtLWdpdCBhL215cHJvcG9zYWwuaCBiL215cHJvcG9zYWwu aAotaW5kZXggNjQzM2UwODIwLi41MWUzZWY1YzggMTAwNjQ0Ci0tLS0gYS9teXByb3Bvc2FsLmgK LSsrKyBiL215cHJvcG9zYWwuaAotQEAgLTI2LDYgKzI2LDggQEAKLSAKLSAjZGVmaW5lIEtFWF9T RVJWRVJfS0VYCVwKLSAJIm1sa2VtNzY4eDI1NTE5LXNoYTI1NiwiIFwKLSsJIm1sa2VtNzY4bmlz dHAyNTYtc2hhMjU2LCIgXAotKwkibWxrZW0xMDI0bmlzdHAzODQtc2hhMzg0LCIgXAotIAkic250 cnVwNzYxeDI1NTE5LXNoYTUxMiwiIFwKLSAJInNudHJ1cDc2MXgyNTUxOS1zaGE1MTJAb3BlbnNz aC5jb20sIiBcCi0gCSJjdXJ2ZTI1NTE5LXNoYTI1NiwiIFwKLUBAIC05OSw2ICsxMDEsOCBAQAot IAkiYWVzMTkyLWNiYyxhZXMyNTYtY2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSwiIFwK LSAJImFlczEyOC1nY21Ab3BlbnNzaC5jb20sYWVzMjU2LWdjbUBvcGVuc3NoLmNvbSIKLSAjZGVm aW5lIEtFWF9ERUZBVUxUX0tFWF9GSVBTCQlcCi0rCSJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1Niwi IFwKLSsJIm1sa2VtMTAyNG5pc3RwMzg0LXNoYTM4NCwiIFwKLSAJImVjZGgtc2hhMi1uaXN0cDI1 NiwiIFwKLSAJImVjZGgtc2hhMi1uaXN0cDM4NCwiIFwKLSAJImVjZGgtc2hhMi1uaXN0cDUyMSwi IFwKLWRpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYyBiL3JlZ3Jl c3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCi1pbmRleCBmNDcwMGRlZWIuLjk5YThlM2I0NiAx MDA2NDQKLS0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCi0rKysgYi9yZWdy ZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYwotQEAgLTE3MSw2ICsxNzEsOCBAQCBkb19rZXhf d2l0aF9rZXkoY2hhciAqa2V4LCBjaGFyICpjaXBoZXIsIGNoYXIgKm1hYywKLSAJc2VydmVyMi0+ a2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gCXNlcnZlcjIt PmtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX3NlcnZl cjsKLSAJc2VydmVyMi0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0g a2V4X2dlbl9zZXJ2ZXI7Ci0rCXNlcnZlcjItPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhOSVNU UDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCXNlcnZlcjItPmtleC0+a2V4W0tFWF9L RU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fc2VydmVyOwotIAlzZXJ2ZXIy LT5rZXgtPmxvYWRfaG9zdF9wdWJsaWNfa2V5ID0gc2VydmVyLT5rZXgtPmxvYWRfaG9zdF9wdWJs aWNfa2V5OwotIAlzZXJ2ZXIyLT5rZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tleSA9IHNlcnZlci0+ a2V4LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXk7Ci0gCXNlcnZlcjItPmtleC0+c2lnbiA9IHNlcnZl ci0+a2V4LT5zaWduOwotQEAgLTI0OCw2ICsyNTAsOCBAQCBrZXhfdGVzdHModm9pZCkKLSAJfQot ICMgaWZkZWYgVVNFX01MS0VNNzY4WDI1NTE5Ci0gCWRvX2tleCgibWxrZW03Njh4MjU1MTktc2hh MjU2Iik7Ci0rCWRvX2tleCgibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYiKTsKLSsJZG9fa2V4KCJt bGtlbTEwMjRuaXN0cDM4NC1zaGEzODQiKTsKLSAjIGVuZGlmIC8qIFVTRV9NTEtFTTc2OFgyNTUx OSAqLwotICMgaWZkZWYgVVNFX1NOVFJVUDc2MVgyNTUxOQotIAlkb19rZXgoInNudHJ1cDc2MXgy NTUxOS1zaGE1MTIiKTsKLWRpZmYgLS1naXQgYS9zc2gta2V5c2Nhbi5jIGIvc3NoLWtleXNjYW4u YwotaW5kZXggM2NlYTFkYWFjLi5mNWNlOTA0MzQgMTAwNjQ0Ci0tLS0gYS9zc2gta2V5c2Nhbi5j Ci0rKysgYi9zc2gta2V5c2Nhbi5jCi1AQCAtMzAwLDYgKzMwMCw4IEBAIGtleWdyYWJfc3NoMihj b24gKmMpCi0gCWMtPmNfc3NoLT5rZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2Vu X2NsaWVudDsKLSAJYy0+Y19zc2gtPmtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NI QTUxMl0gPSBrZXhfZ2VuX2NsaWVudDsKLSAJYy0+Y19zc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxL RU03NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OwotKwljLT5jX3NzaC0+a2V4LT5r ZXhbS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKLSsJ Yy0+Y19zc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtl eF9nZW5fY2xpZW50OwotIAlzc2hfc2V0X3ZlcmlmeV9ob3N0X2tleV9jYWxsYmFjayhjLT5jX3Nz aCwga2V5X3ByaW50X3dyYXBwZXIpOwotIAkvKgotIAkgKiBkbyB0aGUga2V5LWV4Y2hhbmdlIHVu dGlsIGFuIGVycm9yIG9jY3VycyBvciB1bnRpbAotZGlmZiAtLWdpdCBhL3NzaF9hcGkuYyBiL3Nz aF9hcGkuYwotaW5kZXggMzhhYzE3ZGExLi5iMTc4NTgyYjMgMTAwNjQ0Ci0tLS0gYS9zc2hfYXBp LmMKLSsrKyBiL3NzaF9hcGkuYwotQEAgLTEzNSw2ICsxMzUsOCBAQCBzc2hfaW5pdChzdHJ1Y3Qg c3NoICoqc3NocCwgaW50IGlzX3NlcnZlciwgc3RydWN0IGtleF9wYXJhbXMgKmtleF9wYXJhbXMp Ci0gCQlzc2gtPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwot IAkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dl bl9zZXJ2ZXI7Ci0gCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2 XSA9IGtleF9nZW5fc2VydmVyOwotKwkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4TklT VFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwotKwkJc3NoLT5rZXgtPmtleFtLRVhfS0VN X01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJCXNzaC0+a2V4 LT5sb2FkX2hvc3RfcHVibGljX2tleT0mX3NzaF9ob3N0X3B1YmxpY19rZXk7Ci0gCQlzc2gtPmtl eC0+bG9hZF9ob3N0X3ByaXZhdGVfa2V5PSZfc3NoX2hvc3RfcHJpdmF0ZV9rZXk7Ci0gCQlzc2gt PmtleC0+c2lnbj0mX3NzaF9ob3N0X2tleV9zaWduOwotQEAgLTE1NCw2ICsxNTYsOCBAQCBzc2hf aW5pdChzdHJ1Y3Qgc3NoICoqc3NocCwgaW50IGlzX3NlcnZlciwgc3RydWN0IGtleF9wYXJhbXMg KmtleF9wYXJhbXMpCi0gCQlzc2gtPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9n ZW5fY2xpZW50OwotIAkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1 MTJdID0ga2V4X2dlbl9jbGllbnQ7Ci0gCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhY MjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OwotKwkJc3NoLT5rZXgtPmtleFtLRVhfS0VN X01MS0VNNzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OwotKwkJc3NoLT5rZXgt PmtleFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX2NsaWVudDsK LSAJCXNzaC0+a2V4LT52ZXJpZnlfaG9zdF9rZXkgPSZfc3NoX3ZlcmlmeV9ob3N0X2tleTsKLSAJ fQotIAkqc3NocCA9IHNzaDsKLWRpZmYgLS1naXQgYS9zc2hjb25uZWN0Mi5jIGIvc3NoY29ubmVj dDIuYwotaW5kZXggZWVlMWY5Nzk0Li41MGMyMjg4MDIgMTAwNjQ0Ci0tLS0gYS9zc2hjb25uZWN0 Mi5jCi0rKysgYi9zc2hjb25uZWN0Mi5jCi1AQCAtMzUwLDYgKzM1MCw4IEBAIHNzaF9rZXgyKHN0 cnVjdCBzc2ggKnNzaCwgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICpob3N0YWRkciwgdV9z aG9ydCBwb3J0LAotIAlzc2gtPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5f Y2xpZW50OwotIAlzc2gtPmtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0g PSBrZXhfZ2VuX2NsaWVudDsKLSAJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5 X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKLSsJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VN NzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OwotKwlzc2gtPmtleC0+a2V4W0tF WF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fY2xpZW50OwotIAlzc2gt PmtleC0+dmVyaWZ5X2hvc3Rfa2V5PSZ2ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2s7Ci0gCi0gI2lm IGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkKLWRpZmYgLS1naXQgYS9z c2hkLWF1dGguYyBiL3NzaGQtYXV0aC5jCi1pbmRleCA4ODVjZDgyODEuLmE1ZDJhMWE2ZSAxMDA2 NDQKLS0tLSBhL3NzaGQtYXV0aC5jCi0rKysgYi9zc2hkLWF1dGguYwotQEAgLTg5Myw2ICs4OTMs OCBAQCBkb19zc2gyX2tleChzdHJ1Y3Qgc3NoICpzc2gpCi0gCWtleC0+a2V4W0tFWF9DMjU1MTlf U0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwotIAlrZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgy NTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gCWtleC0+a2V4W0tFWF9LRU1fTUxLRU03 NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwotKwlrZXgtPmtleFtLRVhfS0VNX01M S0VNNzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwotKwlrZXgtPmtleFtLRVhf S0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJa2V4LT5s b2FkX2hvc3RfcHVibGljX2tleT0mZ2V0X2hvc3RrZXlfcHVibGljX2J5X3R5cGU7Ci0gCWtleC0+ bG9hZF9ob3N0X3ByaXZhdGVfa2V5PSZnZXRfaG9zdGtleV9wcml2YXRlX2J5X3R5cGU7Ci0gCWtl eC0+aG9zdF9rZXlfaW5kZXg9JmdldF9ob3N0a2V5X2luZGV4OwotLS0gCi0yLjUzLjAKLQoKZGlm ZiAtLWdpdCBhLzAwNDgtb3BlbnNzaC03LjNwMS14MTEtbWF4LWRpc3BsYXlzLnBhdGNoIGIvMDA0 OC1vcGVuc3NoLTcuM3AxLXgxMS1tYXgtZGlzcGxheXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYzM4NTU4NgotLS0gL2Rldi9udWxsCisrKyBiLzAwNDgtb3BlbnNz aC03LjNwMS14MTEtbWF4LWRpc3BsYXlzLnBhdGNoCkBAIC0wLDAgKzEsMTUwIEBACitGcm9tIDll OTUyMzQ5YjZiNjRmZjI5MTYxOTkzMjNiMWRiOTA5YzNmMWQ2ZjMgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRl OiBGcmksIDEyIERlYyAyMDI1IDE1OjM1OjE0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNDgvNTNd IG9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNwbGF5cworCitNb3ZlIE1BWF9ESVNQTEFZUyB0byBh IGNvbmZpZ3VyYXRpb24gb3B0aW9uICgjMTM0MTMwMikKKy0tLQorIGNoYW5uZWxzLmMgICAgfCA5 ICsrKysrKy0tLQorIGNoYW5uZWxzLmggICAgfCAyICstCisgc2VydmNvbmYuYyAgICB8IDUgKysr KysKKyBzZXJ2Y29uZi5oICAgIHwgMiArKworIHNlc3Npb24uYyAgICAgfCA1ICsrKy0tCisgc3No ZF9jb25maWcuNSB8IDcgKysrKysrKworIDYgZmlsZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygr KSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NoYW5uZWxzLmMgYi9jaGFubmVscy5j CitpbmRleCBiYWU4NGU1ZjkuLjQ4ZWMwYWI4MyAxMDA2NDQKKy0tLSBhL2NoYW5uZWxzLmMKKysr KyBiL2NoYW5uZWxzLmMKK0BAIC01MDg1LDcgKzUwODUsNyBAQCByZHluYW1pY19jb25uZWN0X2Zp bmlzaChzdHJ1Y3Qgc3NoICpzc2gsIENoYW5uZWwgKmMpCisgICovCisgaW50CisgeDExX2NyZWF0 ZV9kaXNwbGF5X2luZXQoc3RydWN0IHNzaCAqc3NoLCBpbnQgeDExX2Rpc3BsYXlfb2Zmc2V0LAor LSAgICBpbnQgeDExX3VzZV9sb2NhbGhvc3QsIGludCBzaW5nbGVfY29ubmVjdGlvbiwKKysgICAg aW50IHgxMV91c2VfbG9jYWxob3N0LCBpbnQgeDExX21heF9kaXNwbGF5cywgaW50IHNpbmdsZV9j b25uZWN0aW9uLAorICAgICB1X2ludCAqZGlzcGxheV9udW1iZXJwLCBpbnQgKipjaGFuaWRzKQor IHsKKyAJQ2hhbm5lbCAqbmMgPSBOVUxMOworQEAgLTUwOTgsOCArNTA5OCwxMSBAQCB4MTFfY3Jl YXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQs CisgCSAgICB4MTFfZGlzcGxheV9vZmZzZXQgPiBVSU5UMTZfTUFYIC0gWDExX0JBU0VfUE9SVCAt IE1BWF9ESVNQTEFZUykKKyAJCXJldHVybiAtMTsKKyAKKysJLyogVHJ5IHRvIGJpbmQgcG9ydHMg c3RhcnRpbmcgYXQgNjAwMCtYMTFEaXNwbGF5T2Zmc2V0ICovCisrCXgxMV9tYXhfZGlzcGxheXMg PSB4MTFfbWF4X2Rpc3BsYXlzICsgeDExX2Rpc3BsYXlfb2Zmc2V0OworKworIAlmb3IgKGRpc3Bs YXlfbnVtYmVyID0geDExX2Rpc3BsYXlfb2Zmc2V0OworLQkgICAgZGlzcGxheV9udW1iZXIgPCB4 MTFfZGlzcGxheV9vZmZzZXQgKyBNQVhfRElTUExBWVM7CisrCSAgICBkaXNwbGF5X251bWJlciA8 IHgxMV9tYXhfZGlzcGxheXM7CisgCSAgICBkaXNwbGF5X251bWJlcisrKSB7CisgCQlwb3J0ID0g WDExX0JBU0VfUE9SVCArIGRpc3BsYXlfbnVtYmVyOworIAkJbWVtc2V0KCZoaW50cywgMCwgc2l6 ZW9mKGhpbnRzKSk7CitAQCAtNTE2NCw3ICs1MTY3LDcgQEAgeDExX2NyZWF0ZV9kaXNwbGF5X2lu ZXQoc3RydWN0IHNzaCAqc3NoLCBpbnQgeDExX2Rpc3BsYXlfb2Zmc2V0LAorIAkJaWYgKG51bV9z b2NrcyA+IDApCisgCQkJYnJlYWs7CisgCX0KKy0JaWYgKGRpc3BsYXlfbnVtYmVyID49IHgxMV9k aXNwbGF5X29mZnNldCArIE1BWF9ESVNQTEFZUykgeworKwlpZiAoZGlzcGxheV9udW1iZXIgPj0g eDExX21heF9kaXNwbGF5cyB8fCBwb3J0IDwgWDExX0JBU0VfUE9SVCApIHsKKyAJCWVycm9yKCJG YWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJuZXQtZG9tYWluIFgxMSBkaXNwbGF5IHNvY2tldC4iKTsK KyAJCXJldHVybiAtMTsKKyAJfQorZGlmZiAtLWdpdCBhL2NoYW5uZWxzLmggYi9jaGFubmVscy5o CitpbmRleCBmNjkwOTY0OTguLmJjM2I1MmFhMiAxMDA2NDQKKy0tLSBhL2NoYW5uZWxzLmgKKysr KyBiL2NoYW5uZWxzLmgKK0BAIC0zOTEsNyArMzkxLDcgQEAgaW50CSBwZXJtaXRvcGVuX3BvcnQo Y29uc3QgY2hhciAqKTsKKyAKKyB2b2lkCSBjaGFubmVsX3NldF94MTFfcmVmdXNlX3RpbWUoc3Ry dWN0IHNzaCAqLCB0aW1lX3QpOworIGludAkgeDExX2Nvbm5lY3RfZGlzcGxheShzdHJ1Y3Qgc3No ICopOworLWludAkgeDExX2NyZWF0ZV9kaXNwbGF5X2luZXQoc3RydWN0IHNzaCAqLCBpbnQsIGlu dCwgaW50LCB1X2ludCAqLCBpbnQgKiopOworK2ludAkgeDExX2NyZWF0ZV9kaXNwbGF5X2luZXQo c3RydWN0IHNzaCAqLCBpbnQsIGludCwgaW50LCBpbnQsIHVfaW50ICosIGludCAqKik7Cisgdm9p ZAkgeDExX3JlcXVlc3RfZm9yd2FyZGluZ193aXRoX3Nwb29maW5nKHN0cnVjdCBzc2ggKiwgaW50 LAorIAkgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsK KyBpbnQgICAgICB4MTFfY2hhbm5lbF91c2VkX3JlY2VudGx5KHN0cnVjdCBzc2ggKnNzaCk7Citk aWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKK2luZGV4IGQ5Y2NjYzE3Yy4uODc0 NmEyNDE3IDEwMDY0NAorLS0tIGEvc2VydmNvbmYuYworKysrIGIvc2VydmNvbmYuYworQEAgLTE1 MzMsNiArMTUzMywxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJP cHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAorIAkJCSppbnRwdHIgPSB2YWx1ZTsKKyAJCWJy ZWFrOworIAorKwljYXNlIHNYMTFNYXhEaXNwbGF5czoKKysJCWludHB0ciA9ICZvcHRpb25zLT54 MTFfbWF4X2Rpc3BsYXlzOworKwkJZ290byBwYXJzZV9pbnQ7CisrCisgCWNhc2Ugc1gxMVVzZUxv Y2FsaG9zdDoKKyAJCWludHB0ciA9ICZvcHRpb25zLT54MTFfdXNlX2xvY2FsaG9zdDsKKyAJCWdv dG8gcGFyc2VfZmxhZzsKK0BAIC00MjQ5LDYgKzQyNTMsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJP cHRpb25zICpvKQorICNlbmRpZgorIAlkdW1wX2NmZ19pbnQoc0xvZ2luR3JhY2VUaW1lLCBvLT5s b2dpbl9ncmFjZV90aW1lKTsKKyAJZHVtcF9jZmdfaW50KHNYMTFEaXNwbGF5T2Zmc2V0LCBvLT54 MTFfZGlzcGxheV9vZmZzZXQpOworKwlkdW1wX2NmZ19pbnQoc1gxMU1heERpc3BsYXlzLCBvLT54 MTFfbWF4X2Rpc3BsYXlzKTsKKyAJZHVtcF9jZmdfaW50KHNNYXhBdXRoVHJpZXMsIG8tPm1heF9h dXRodHJpZXMpOworIAlkdW1wX2NmZ19pbnQoc01heFNlc3Npb25zLCBvLT5tYXhfc2Vzc2lvbnMp OworIAlkdW1wX2NmZ19pbnQoc0NsaWVudEFsaXZlSW50ZXJ2YWwsIG8tPmNsaWVudF9hbGl2ZV9p bnRlcnZhbCk7CitkaWZmIC0tZ2l0IGEvc2VydmNvbmYuaCBiL3NlcnZjb25mLmgKK2luZGV4IDgx ZTY5OTY1NS4uNGU1ZjdlZGM2IDEwMDY0NAorLS0tIGEvc2VydmNvbmYuaAorKysrIGIvc2VydmNv bmYuaAorQEAgLTQwLDYgKzQwLDcgQEAgc3RydWN0IHNzaGJ1ZjsKKyAKKyAjZGVmaW5lIERFRkFV TFRfQVVUSF9GQUlMX01BWAk2CS8qIERlZmF1bHQgZm9yIE1heEF1dGhUcmllcyAqLworICNkZWZp bmUgREVGQVVMVF9TRVNTSU9OU19NQVgJMTAJLyogRGVmYXVsdCBmb3IgTWF4U2Vzc2lvbnMgKi8K KysjZGVmaW5lIERFRkFVTFRfTUFYX0RJU1BMQVlTCTEwMDAgLyogTWF4aW11bSBudW1iZXIgb2Yg ZmFrZSBYMTEgZGlzcGxheXMgdG8gdHJ5LiAqLworIAorIC8qIE1hZ2ljIG5hbWUgZm9yIGludGVy bmFsIHNmdHAtc2VydmVyICovCisgI2RlZmluZSBJTlRFUk5BTF9TRlRQX05BTUUJImludGVybmFs LXNmdHAiCitAQCAtMTcyLDYgKzE3Myw3IEBAIFNTSENPTkZfSU5URkxBRyhpZ25vcmVfdXNlcl9r bm93bl9ob3N0cywgSWdub3JlVXNlcktub3duSG9zdHMsIFNTSENGR19HTE9CQUwsIDAsCisgU1NI Q09ORl9JTlRGTEFHKHByaW50X21vdGQsIFByaW50TW90ZCwgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NI Q0ZHX0NPUFlfTk9ORSkgXAorIFNTSENPTkZfSU5URkxBRyh4MTFfZm9yd2FyZGluZywgWDExRm9y d2FyZGluZywgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFUQ0gpIFwKKyBTU0hDT05GX0lO VCh4MTFfZGlzcGxheV9vZmZzZXQsIFgxMURpc3BsYXlPZmZzZXQsIFNTSENGR19BTEwsIE5VTEws IFNTSERfREVGQVVMVF9YMTFfRElTUExBWV9PRkZTRVQsIFNTSENGR19DT1BZX01BVENIKSBcCisr U1NIQ09ORl9JTlQoeDExX21heF9kaXNwbGF5cywgWDExTWF4RGlzcGxheXMsIFNTSENGR19BTEws IE5VTEwsIERFRkFVTFRfTUFYX0RJU1BMQVlTLCBTU0hDRkdfQ09QWV9NQVRDSCkgXAorIFNTSENP TkZfSU5URkxBRyh4MTFfdXNlX2xvY2FsaG9zdCwgWDExVXNlTG9jYWxob3N0LCBTU0hDRkdfQUxM LCAxLCBTU0hDRkdfQ09QWV9NQVRDSCkgXAorIFNTSENPTkZfU1RSSU5HKHhhdXRoX2xvY2F0aW9u LCBYQXV0aExvY2F0aW9uLCBTU0hDRkdfR0xPQkFMLCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NI Q09ORl9JTlRGTEFHKHBlcm1pdF90dHksIFBlcm1pdFRUWSwgU1NIQ0ZHX0FMTCwgMSwgU1NIQ0ZH X0NPUFlfTUFUQ0gpIFwKK2RpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNzaW9uLmMKK2luZGV4 IGJkOGRjODA4Yy4uZTJjZjEzYmRjIDEwMDY0NAorLS0tIGEvc2Vzc2lvbi5jCisrKysgYi9zZXNz aW9uLmMKK0BAIC0yNjkzLDggKzI2OTMsOSBAQCBzZXNzaW9uX3NldHVwX3gxMWZ3ZChzdHJ1Y3Qg c3NoICpzc2gsIFNlc3Npb24gKnMpCisgCQlyZXR1cm4gMDsKKyAJfQorIAlpZiAoeDExX2NyZWF0 ZV9kaXNwbGF5X2luZXQoc3NoLCBvcHRpb25zLngxMV9kaXNwbGF5X29mZnNldCwKKy0JICAgIG9w dGlvbnMueDExX3VzZV9sb2NhbGhvc3QsIHMtPnNpbmdsZV9jb25uZWN0aW9uLAorLQkgICAgJnMt PmRpc3BsYXlfbnVtYmVyLCAmcy0+eDExX2NoYW5pZHMpID09IC0xKSB7CisrCSAgICBvcHRpb25z LngxMV91c2VfbG9jYWxob3N0LCBvcHRpb25zLngxMV9tYXhfZGlzcGxheXMsCisrCSAgICBzLT5z aW5nbGVfY29ubmVjdGlvbiwgJnMtPmRpc3BsYXlfbnVtYmVyLAorKwkgICAgJnMtPngxMV9jaGFu aWRzKSA9PSAtMSkgeworIAkJZGVidWcoIngxMV9jcmVhdGVfZGlzcGxheV9pbmV0IGZhaWxlZC4i KTsKKyAJCXJldHVybiAwOworIAl9CitkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRf Y29uZmlnLjUKK2luZGV4IDJhOGYzYWJlYS4uYmY5ZWZjODk3IDEwMDY0NAorLS0tIGEvc3NoZF9j b25maWcuNQorKysrIGIvc3NoZF9jb25maWcuNQorQEAgLTE0MzAsNiArMTQzMCw3IEBAIEF2YWls YWJsZSBrZXl3b3JkcyBhcmUKKyAuQ20gVHJ1c3RlZFVzZXJDQUtleXMgLAorIC5DbSBVbnVzZWRD b25uZWN0aW9uVGltZW91dCAsCisgLkNtIFgxMURpc3BsYXlPZmZzZXQgLAorKy5DbSBYMTFNYXhE aXNwbGF5cyAsCisgLkNtIFgxMUZvcndhcmRpbmcKKyBhbmQKKyAuQ20gWDExVXNlTG9jYWxob3N0 IC4KK0BAIC0yMTQ3LDYgKzIxNDgsMTIgQEAgU3BlY2lmaWVzIHRoZSBmaXJzdCBkaXNwbGF5IG51 bWJlciBhdmFpbGFibGUgZm9yCisgWDExIGZvcndhcmRpbmcuCisgVGhpcyBwcmV2ZW50cyBzc2hk IGZyb20gaW50ZXJmZXJpbmcgd2l0aCByZWFsIFgxMSBzZXJ2ZXJzLgorIFRoZSBkZWZhdWx0IGlz IDEwLgorKy5JdCBDbSBYMTFNYXhEaXNwbGF5cworK1NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1i ZXIgb2YgZGlzcGxheXMgYXZhaWxhYmxlIGZvcgorKy5YciBzc2hkIDggTnMgJ3MKKytYMTEgZm9y d2FyZGluZy4KKytUaGlzIHByZXZlbnRzIHNzaGQgZnJvbSBleGhhdXN0aW5nIGxvY2FsIHBvcnRz LgorK1RoZSBkZWZhdWx0IGlzIDEwMDAuCisgLkl0IENtIFgxMUZvcndhcmRpbmcKKyBTcGVjaWZp ZXMgd2hldGhlciBYMTEgZm9yd2FyZGluZyBpcyBwZXJtaXR0ZWQuCisgVGhlIGFyZ3VtZW50IG11 c3QgYmUKKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQgYS8wMDQ5LUZpeC1zc2gtcGtjczExLWNs aWVudC1oZWxwZXItdGVybWluYXRpb24ucGF0Y2ggYi8wMDQ5LUZpeC1zc2gtcGtjczExLWNsaWVu dC1oZWxwZXItdGVybWluYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYmExZDJkNwotLS0gL2Rldi9udWxsCisrKyBiLzAwNDktRml4LXNzaC1wa2NzMTEtY2xp ZW50LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIDNiYjMw NWUyNTJiZWQ1MzA4NzU1OWNjZWRmZTYzMWEwOWI4NzBhOWMgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBN b24sIDEzIEFwciAyMDI2IDE0OjU5OjI2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNDkvNTNdIEZp eCBzc2gtcGtjczExLWNsaWVudCBoZWxwZXIgdGVybWluYXRpb24KKworRG9uJ3QgdGVybWluYXRl IHRoZSBQS0NTIzExIGhlbHBlciB3aGVuIFNTSDJfQUdFTlRfRkFJTFVSRSBpcyByZXR1cm5lZC4K K1RoaXMgaXMgYSBsZWdpdGltYXRlIHJlc3BvbnNlIHdoZW4gYSB0b2tlbiByZXF1aXJlcyBQSU4g YXV0aGVudGljYXRpb24uCitUaGUgaGVscGVyIG11c3QgcmVtYWluIGFjdGl2ZSBzbyBpdCBjYW4g cHJvbXB0IGZvciBQSU4gZHVyaW5nIGFjdHVhbCBrZXkgdXNlLgorCitPbmx5IHRlcm1pbmF0ZSB0 aGUgaGVscGVyIG9uIHVuZXhwZWN0ZWQgcmVzcG9uc2VzIG9yIGNvbW11bmljYXRpb24gZmFpbHVy ZXMuCisKK0NvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9yZXBseUBhbnRocm9w aWMuY29tPgorLS0tCisgc3NoLXBrY3MxMS1jbGllbnQuYyB8IDE4ICsrKysrKysrKysrKy0tLS0t LQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitk aWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS1jbGllbnQuYyBiL3NzaC1wa2NzMTEtY2xpZW50LmMKK2lu ZGV4IDZkNzRkNzI4MC4uMzBhNGNmNWRjIDEwMDY0NAorLS0tIGEvc3NoLXBrY3MxMS1jbGllbnQu YworKysrIGIvc3NoLXBrY3MxMS1jbGllbnQuYworQEAgLTQyOSwxMiArNDI5LDE4IEBAIHBrY3Mx MV9hZGRfcHJvdmlkZXIoY2hhciAqbmFtZSwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtl eXNwLAorIAkJfQorIAkJLyogc3VjY2VzcyAqLworIAkJcmV0ID0gMDsKKy0JfSBlbHNlIGlmICh0 eXBlID09IFNTSDJfQUdFTlRfRkFJTFVSRSkgeworLQkJaWYgKChyID0gc3NoYnVmX2dldF91MzIo bXNnLCAmbmtleXMpKSAhPSAwKQorLQkJCWVycm9yX2ZyKHIsICJmYWlsZWQgdG8gcGFyc2UgZmFp bHVyZSByZXNwb25zZSIpOworLQl9CistCWlmIChyZXQgIT0gMCkgeworLQkJZGVidWdfZigibm8g a2V5czsgdGVybWluYXRlIGhlbHBlciIpOworKwl9IGVsc2UgaWYgKHR5cGUgPT0gU1NIX0FHRU5U X0ZBSUxVUkUgfHwgdHlwZSA9PSBTU0gyX0FHRU5UX0ZBSUxVUkUpIHsKKysJCWlmICh0eXBlID09 IFNTSDJfQUdFTlRfRkFJTFVSRSkgeworKwkJCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKG1zZywg Jm5rZXlzKSkgIT0gMCkKKysJCQkJZXJyb3JfZnIociwgImZhaWxlZCB0byBwYXJzZSBmYWlsdXJl IHJlc3BvbnNlIik7CisrCQl9CisrCQkvKiBQcm92aWRlciByZWdpc3RlcmVkIGJ1dCByZXR1cm5l ZCBubyBrZXlzIChtYXkgbmVlZCBQSU4pICovCisrCQkvKiBEb24ndCB0ZXJtaW5hdGUgaGVscGVy IC0ga2VlcCBpdCBmb3IgbGF0ZXIgdXNlICovCisrCQlyZXQgPSAwOworKwkJbmtleXMgPSAwOwor Kwl9IGVsc2UgeworKwkJLyogVW5leHBlY3RlZCByZXNwb25zZSAtIHRlcm1pbmF0ZSBoZWxwZXIg Ki8KKysJCWRlYnVnX2YoInVuZXhwZWN0ZWQgcmVzcG9uc2UgJWQ7IHRlcm1pbmF0ZSBoZWxwZXIi LCB0eXBlKTsKKyAJCWhlbHBlcl90ZXJtaW5hdGUoaGVscGVyKTsKKyAJfQorIAlzc2hidWZfZnJl ZShtc2cpOworLS0gCisyLjU1LjAKKwoKZGlmZiAtLWdpdCBhLzAwNDktb3BlbnNzaC03LjNwMS14 MTEtbWF4LWRpc3BsYXlzLnBhdGNoIGIvMDA0OS1vcGVuc3NoLTcuM3AxLXgxMS1tYXgtZGlzcGxh eXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOTU5MmMuLjAwMDAwMDAK LS0tIGEvMDA0OS1vcGVuc3NoLTcuM3AxLXgxMS1tYXgtZGlzcGxheXMucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwxOTIgKzAsMCBAQAotRnJvbSBmOGEyNDQ1MzZhNzkyNWQ2MzA0NzI0NWEzNGU4 ZjA2MjIyN2FjNTZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlh dnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogRnJpLCAxMiBEZWMgMjAyNSAxNTozNTox NCArMDEwMAotU3ViamVjdDogW1BBVENIIDQ5LzU0XSBvcGVuc3NoLTcuM3AxLXgxMS1tYXgtZGlz cGxheXMKLQotTW92ZSBNQVhfRElTUExBWVMgdG8gYSBjb25maWd1cmF0aW9uIG9wdGlvbiAoIzEz NDEzMDIpCi0tLS0KLSBjaGFubmVscy5jICAgIHwgIDkgKysrKysrLS0tCi0gY2hhbm5lbHMuaCAg ICB8ICAyICstCi0gc2VydmNvbmYuYyAgICB8IDEyICsrKysrKysrKysrLQotIHNlcnZjb25mLmgg ICAgfCAgMiArKwotIHNlc3Npb24uYyAgICAgfCAgNSArKystLQotIHNzaGRfY29uZmlnLjUgfCAg NyArKysrKysrCi0gNiBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9u cygtKQotCi1kaWZmIC0tZ2l0IGEvY2hhbm5lbHMuYyBiL2NoYW5uZWxzLmMKLWluZGV4IDE0ZDUz NmQ2NC4uNzNlYWNjNWY2IDEwMDY0NAotLS0tIGEvY2hhbm5lbHMuYwotKysrIGIvY2hhbm5lbHMu YwotQEAgLTUwNzYsNyArNTA3Niw3IEBAIHJkeW5hbWljX2Nvbm5lY3RfZmluaXNoKHN0cnVjdCBz c2ggKnNzaCwgQ2hhbm5lbCAqYykKLSAgKi8KLSBpbnQKLSB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5l dChzdHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCi0tICAgIGludCB4MTFf dXNlX2xvY2FsaG9zdCwgaW50IHNpbmdsZV9jb25uZWN0aW9uLAotKyAgICBpbnQgeDExX3VzZV9s b2NhbGhvc3QsIGludCB4MTFfbWF4X2Rpc3BsYXlzLCBpbnQgc2luZ2xlX2Nvbm5lY3Rpb24sCi0g ICAgIHVfaW50ICpkaXNwbGF5X251bWJlcnAsIGludCAqKmNoYW5pZHMpCi0gewotIAlDaGFubmVs ICpuYyA9IE5VTEw7Ci1AQCAtNTA4OSw4ICs1MDg5LDExIEBAIHgxMV9jcmVhdGVfZGlzcGxheV9p bmV0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHgxMV9kaXNwbGF5X29mZnNldCwKLSAJICAgIHgxMV9k aXNwbGF5X29mZnNldCA+IFVJTlQxNl9NQVggLSBYMTFfQkFTRV9QT1JUIC0gTUFYX0RJU1BMQVlT KQotIAkJcmV0dXJuIC0xOwotIAotKwkvKiBUcnkgdG8gYmluZCBwb3J0cyBzdGFydGluZyBhdCA2 MDAwK1gxMURpc3BsYXlPZmZzZXQgKi8KLSsJeDExX21heF9kaXNwbGF5cyA9IHgxMV9tYXhfZGlz cGxheXMgKyB4MTFfZGlzcGxheV9vZmZzZXQ7Ci0rCi0gCWZvciAoZGlzcGxheV9udW1iZXIgPSB4 MTFfZGlzcGxheV9vZmZzZXQ7Ci0tCSAgICBkaXNwbGF5X251bWJlciA8IHgxMV9kaXNwbGF5X29m ZnNldCArIE1BWF9ESVNQTEFZUzsKLSsJICAgIGRpc3BsYXlfbnVtYmVyIDwgeDExX21heF9kaXNw bGF5czsKLSAJICAgIGRpc3BsYXlfbnVtYmVyKyspIHsKLSAJCXBvcnQgPSBYMTFfQkFTRV9QT1JU ICsgZGlzcGxheV9udW1iZXI7Ci0gCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsK LUBAIC01MTU1LDcgKzUxNTgsNyBAQCB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3No ICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCi0gCQlpZiAobnVtX3NvY2tzID4gMCkKLSAJ CQlicmVhazsKLSAJfQotLQlpZiAoZGlzcGxheV9udW1iZXIgPj0geDExX2Rpc3BsYXlfb2Zmc2V0 ICsgTUFYX0RJU1BMQVlTKSB7Ci0rCWlmIChkaXNwbGF5X251bWJlciA+PSB4MTFfbWF4X2Rpc3Bs YXlzIHx8IHBvcnQgPCBYMTFfQkFTRV9QT1JUICkgewotIAkJZXJyb3IoIkZhaWxlZCB0byBhbGxv Y2F0ZSBpbnRlcm5ldC1kb21haW4gWDExIGRpc3BsYXkgc29ja2V0LiIpOwotIAkJcmV0dXJuIC0x OwotIAl9Ci1kaWZmIC0tZ2l0IGEvY2hhbm5lbHMuaCBiL2NoYW5uZWxzLmgKLWluZGV4IDJmY2Y5 ZjhjYi4uN2JmMzdiMDUzIDEwMDY0NAotLS0tIGEvY2hhbm5lbHMuaAotKysrIGIvY2hhbm5lbHMu aAotQEAgLTM5MCw3ICszOTAsNyBAQCBpbnQJIHBlcm1pdG9wZW5fcG9ydChjb25zdCBjaGFyICop OwotIAotIHZvaWQJIGNoYW5uZWxfc2V0X3gxMV9yZWZ1c2VfdGltZShzdHJ1Y3Qgc3NoICosIHRp bWVfdCk7Ci0gaW50CSB4MTFfY29ubmVjdF9kaXNwbGF5KHN0cnVjdCBzc2ggKik7Ci0taW50CSB4 MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICosIGludCwgaW50LCBpbnQsIHVfaW50 ICosIGludCAqKik7Ci0raW50CSB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICos IGludCwgaW50LCBpbnQsIGludCwgdV9pbnQgKiwgaW50ICoqKTsKLSB2b2lkCSB4MTFfcmVxdWVz dF9mb3J3YXJkaW5nX3dpdGhfc3Bvb2Zpbmcoc3RydWN0IHNzaCAqLCBpbnQsCi0gCSAgICBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotIGludCAgICAgIHgx MV9jaGFubmVsX3VzZWRfcmVjZW50bHkoc3RydWN0IHNzaCAqc3NoKTsKLWRpZmYgLS1naXQgYS9z ZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5kZXggMjY4YzA5ZDFjLi5mNGQ2YjE5ZGQgMTAwNjQ0 Ci0tLS0gYS9zZXJ2Y29uZi5jCi0rKysgYi9zZXJ2Y29uZi5jCi1AQCAtMTE4LDYgKzExOCw3IEBA IGluaXRpYWxpemVfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKLSAJb3B0 aW9ucy0+cHJpbnRfbGFzdGxvZyA9IC0xOwotIAlvcHRpb25zLT54MTFfZm9yd2FyZGluZyA9IC0x OwotIAlvcHRpb25zLT54MTFfZGlzcGxheV9vZmZzZXQgPSAtMTsKLSsJb3B0aW9ucy0+eDExX21h eF9kaXNwbGF5cyA9IC0xOwotIAlvcHRpb25zLT54MTFfdXNlX2xvY2FsaG9zdCA9IC0xOwotIAlv cHRpb25zLT5wZXJtaXRfdHR5ID0gLTE7Ci0gCW9wdGlvbnMtPnBlcm1pdF91c2VyX3JjID0gLTE7 Ci1AQCAtMzU5LDYgKzM2MCw4IEBAIGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJP cHRpb25zICpvcHRpb25zKQotIAkJb3B0aW9ucy0+eDExX2ZvcndhcmRpbmcgPSAwOwotIAlpZiAo b3B0aW9ucy0+eDExX2Rpc3BsYXlfb2Zmc2V0ID09IC0xKQotIAkJb3B0aW9ucy0+eDExX2Rpc3Bs YXlfb2Zmc2V0ID0gMTA7Ci0rCWlmIChvcHRpb25zLT54MTFfbWF4X2Rpc3BsYXlzID09IC0xKQot KwkJb3B0aW9ucy0+eDExX21heF9kaXNwbGF5cyA9IERFRkFVTFRfTUFYX0RJU1BMQVlTOwotIAlp ZiAob3B0aW9ucy0+eDExX3VzZV9sb2NhbGhvc3QgPT0gLTEpCi0gCQlvcHRpb25zLT54MTFfdXNl X2xvY2FsaG9zdCA9IDE7Ci0gCWlmIChvcHRpb25zLT54YXV0aF9sb2NhdGlvbiA9PSBOVUxMKQot QEAgLTU4OCw3ICs1OTEsNyBAQCB0eXBlZGVmIGVudW0gewotIAlzS2VyYmVyb3NHZXRBRlNUb2tl biwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBzS2VyYmVyb3NVc2VLdXNlcm9rLCBzUGFzc3dvcmRB dXRoZW50aWNhdGlvbiwKLSAJc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24sIHNMaXN0ZW5B ZGRyZXNzLCBzQWRkcmVzc0ZhbWlseSwKLSAJc1ByaW50TW90ZCwgc1ByaW50TGFzdExvZywgc0ln bm9yZVJob3N0cywKLS0Jc1gxMUZvcndhcmRpbmcsIHNYMTFEaXNwbGF5T2Zmc2V0LCBzWDExVXNl TG9jYWxob3N0LAotKwlzWDExRm9yd2FyZGluZywgc1gxMURpc3BsYXlPZmZzZXQsIHNYMTFNYXhE aXNwbGF5cywgc1gxMVVzZUxvY2FsaG9zdCwKLSAJc1Blcm1pdFRUWSwgc1N0cmljdE1vZGVzLCBz RW1wdHlQYXNzd2QsIHNUQ1BLZWVwQWxpdmUsCi0gCXNQZXJtaXRVc2VyRW52aXJvbm1lbnQsIHNB bGxvd1RjcEZvcndhcmRpbmcsIHNDb21wcmVzc2lvbiwKLSAJc1Jla2V5TGltaXQsIHNBbGxvd1Vz ZXJzLCBzRGVueVVzZXJzLCBzQWxsb3dHcm91cHMsIHNEZW55R3JvdXBzLAotQEAgLTczMCw2ICs3 MzMsNyBAQCBzdGF0aWMgc3RydWN0IHsKLSAJeyAiaWdub3JldXNlcmtub3duaG9zdHMiLCBzSWdu b3JlVXNlcktub3duSG9zdHMsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAieDExZm9yd2FyZGluZyIs IHNYMTFGb3J3YXJkaW5nLCBTU0hDRkdfQUxMIH0sCi0gCXsgIngxMWRpc3BsYXlvZmZzZXQiLCBz WDExRGlzcGxheU9mZnNldCwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJ4MTFtYXhkaXNwbGF5cyIsIHNY MTFNYXhEaXNwbGF5cywgU1NIQ0ZHX0FMTCB9LAotIAl7ICJ4MTF1c2Vsb2NhbGhvc3QiLCBzWDEx VXNlTG9jYWxob3N0LCBTU0hDRkdfQUxMIH0sCi0gCXsgInhhdXRobG9jYXRpb24iLCBzWEF1dGhM b2NhdGlvbiwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJzdHJpY3Rtb2RlcyIsIHNTdHJpY3RNb2Rl cywgU1NIQ0ZHX0dMT0JBTCB9LAotQEAgLTE3ODEsNiArMTc4NSwxMCBAQCBwcm9jZXNzX3NlcnZl cl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAot IAkJCSppbnRwdHIgPSB2YWx1ZTsKLSAJCWJyZWFrOwotIAotKwljYXNlIHNYMTFNYXhEaXNwbGF5 czoKLSsJCWludHB0ciA9ICZvcHRpb25zLT54MTFfbWF4X2Rpc3BsYXlzOwotKwkJZ290byBwYXJz ZV9pbnQ7Ci0rCi0gCWNhc2Ugc1gxMVVzZUxvY2FsaG9zdDoKLSAJCWludHB0ciA9ICZvcHRpb25z LT54MTFfdXNlX2xvY2FsaG9zdDsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLUBAIC0zMDY1LDYgKzMw NzMsNyBAQCBjb3B5X3NldF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpkc3QsIFNlcnZl ck9wdGlvbnMgKnNyYywgaW50IHByZWF1dGgpCi0gCU1fQ1BfSU5UT1BUKGZ3ZF9vcHRzLnN0cmVh bWxvY2FsX2JpbmRfdW5saW5rKTsKLSAJTV9DUF9JTlRPUFQoeDExX2Rpc3BsYXlfb2Zmc2V0KTsK LSAJTV9DUF9JTlRPUFQoeDExX2ZvcndhcmRpbmcpOwotKwlNX0NQX0lOVE9QVCh4MTFfbWF4X2Rp c3BsYXlzKTsKLSAJTV9DUF9JTlRPUFQoeDExX3VzZV9sb2NhbGhvc3QpOwotIAlNX0NQX0lOVE9Q VChwZXJtaXRfdHR5KTsKLSAJTV9DUF9JTlRPUFQocGVybWl0X3VzZXJfcmMpOwotQEAgLTMzNjEs NiArMzM3MCw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCi0gI2VuZGlmCi0gCWR1 bXBfY2ZnX2ludChzTG9naW5HcmFjZVRpbWUsIG8tPmxvZ2luX2dyYWNlX3RpbWUpOwotIAlkdW1w X2NmZ19pbnQoc1gxMURpc3BsYXlPZmZzZXQsIG8tPngxMV9kaXNwbGF5X29mZnNldCk7Ci0rCWR1 bXBfY2ZnX2ludChzWDExTWF4RGlzcGxheXMsIG8tPngxMV9tYXhfZGlzcGxheXMpOwotIAlkdW1w X2NmZ19pbnQoc01heEF1dGhUcmllcywgby0+bWF4X2F1dGh0cmllcyk7Ci0gCWR1bXBfY2ZnX2lu dChzTWF4U2Vzc2lvbnMsIG8tPm1heF9zZXNzaW9ucyk7Ci0gCWR1bXBfY2ZnX2ludChzQ2xpZW50 QWxpdmVJbnRlcnZhbCwgby0+Y2xpZW50X2FsaXZlX2ludGVydmFsKTsKLWRpZmYgLS1naXQgYS9z ZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAotaW5kZXggNzgxZjIwYzYxLi5mZWEyNTk0N2UgMTAwNjQ0 Ci0tLS0gYS9zZXJ2Y29uZi5oCi0rKysgYi9zZXJ2Y29uZi5oCi1AQCAtMzgsNiArMzgsNyBAQAot IAotICNkZWZpbmUgREVGQVVMVF9BVVRIX0ZBSUxfTUFYCTYJLyogRGVmYXVsdCBmb3IgTWF4QXV0 aFRyaWVzICovCi0gI2RlZmluZSBERUZBVUxUX1NFU1NJT05TX01BWAkxMAkvKiBEZWZhdWx0IGZv ciBNYXhTZXNzaW9ucyAqLwotKyNkZWZpbmUgREVGQVVMVF9NQVhfRElTUExBWVMJMTAwMCAvKiBN YXhpbXVtIG51bWJlciBvZiBmYWtlIFgxMSBkaXNwbGF5cyB0byB0cnkuICovCi0gCi0gLyogTWFn aWMgbmFtZSBmb3IgaW50ZXJuYWwgc2Z0cC1zZXJ2ZXIgKi8KLSAjZGVmaW5lIElOVEVSTkFMX1NG VFBfTkFNRQkiaW50ZXJuYWwtc2Z0cCIKLUBAIC0xMTUsNiArMTE2LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgewotIAlpbnQgICAgIHgxMV9mb3J3YXJkaW5nOwkvKiBJZiB0cnVlLCBwZXJtaXQgaW5ldCAo c3Bvb2ZpbmcpIFgxMSBmd2QuICovCi0gCWludCAgICAgeDExX2Rpc3BsYXlfb2Zmc2V0OwkvKiBX aGF0IERJU1BMQVkgbnVtYmVyIHRvIHN0YXJ0Ci0gCQkJCQkgKiBzZWFyY2hpbmcgYXQgKi8KLSsJ aW50IAl4MTFfbWF4X2Rpc3BsYXlzOyAvKiBOdW1iZXIgb2YgZGlzcGxheXMgdG8gc2VhcmNoICov Ci0gCWludCAgICAgeDExX3VzZV9sb2NhbGhvc3Q7CS8qIElmIHRydWUsIHVzZSBsb2NhbGhvc3Qg Zm9yIGZha2UgWDExIHNlcnZlci4gKi8KLSAJY2hhciAgICp4YXV0aF9sb2NhdGlvbjsJLyogTG9j YXRpb24gb2YgeGF1dGggcHJvZ3JhbSAqLwotIAlpbnQJcGVybWl0X3R0eTsJLyogSWYgZmFsc2Us IGRlbnkgcHR5IGFsbG9jYXRpb24gKi8KLWRpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNzaW9u LmMKLWluZGV4IDFhN2Y1Y2E3YS4uNTJmODZmZDQ2IDEwMDY0NAotLS0tIGEvc2Vzc2lvbi5jCi0r KysgYi9zZXNzaW9uLmMKLUBAIC0yNjg5LDggKzI2ODksOSBAQCBzZXNzaW9uX3NldHVwX3gxMWZ3 ZChzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMpCi0gCQlyZXR1cm4gMDsKLSAJfQotIAlpZiAo eDExX2NyZWF0ZV9kaXNwbGF5X2luZXQoc3NoLCBvcHRpb25zLngxMV9kaXNwbGF5X29mZnNldCwK LS0JICAgIG9wdGlvbnMueDExX3VzZV9sb2NhbGhvc3QsIHMtPnNpbmdsZV9jb25uZWN0aW9uLAot LQkgICAgJnMtPmRpc3BsYXlfbnVtYmVyLCAmcy0+eDExX2NoYW5pZHMpID09IC0xKSB7Ci0rCSAg ICBvcHRpb25zLngxMV91c2VfbG9jYWxob3N0LCBvcHRpb25zLngxMV9tYXhfZGlzcGxheXMsCi0r CSAgICBzLT5zaW5nbGVfY29ubmVjdGlvbiwgJnMtPmRpc3BsYXlfbnVtYmVyLAotKwkgICAgJnMt PngxMV9jaGFuaWRzKSA9PSAtMSkgewotIAkJZGVidWcoIngxMV9jcmVhdGVfZGlzcGxheV9pbmV0 IGZhaWxlZC4iKTsKLSAJCXJldHVybiAwOwotIAl9Ci1kaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcu NSBiL3NzaGRfY29uZmlnLjUKLWluZGV4IDRjYTgwMDE2Yy4uYzI4MjIwMDc3IDEwMDY0NAotLS0t IGEvc3NoZF9jb25maWcuNQotKysrIGIvc3NoZF9jb25maWcuNQotQEAgLTE0MTYsNiArMTQxNiw3 IEBAIEF2YWlsYWJsZSBrZXl3b3JkcyBhcmUKLSAuQ20gVHJ1c3RlZFVzZXJDQUtleXMgLAotIC5D bSBVbnVzZWRDb25uZWN0aW9uVGltZW91dCAsCi0gLkNtIFgxMURpc3BsYXlPZmZzZXQgLAotKy5D bSBYMTFNYXhEaXNwbGF5cyAsCi0gLkNtIFgxMUZvcndhcmRpbmcKLSBhbmQKLSAuQ20gWDExVXNl TG9jYWxob3N0IC4KLUBAIC0yMTMzLDYgKzIxMzQsMTIgQEAgU3BlY2lmaWVzIHRoZSBmaXJzdCBk aXNwbGF5IG51bWJlciBhdmFpbGFibGUgZm9yCi0gWDExIGZvcndhcmRpbmcuCi0gVGhpcyBwcmV2 ZW50cyBzc2hkIGZyb20gaW50ZXJmZXJpbmcgd2l0aCByZWFsIFgxMSBzZXJ2ZXJzLgotIFRoZSBk ZWZhdWx0IGlzIDEwLgotKy5JdCBDbSBYMTFNYXhEaXNwbGF5cwotK1NwZWNpZmllcyB0aGUgbWF4 aW11bSBudW1iZXIgb2YgZGlzcGxheXMgYXZhaWxhYmxlIGZvcgotKy5YciBzc2hkIDggTnMgJ3MK LStYMTEgZm9yd2FyZGluZy4KLStUaGlzIHByZXZlbnRzIHNzaGQgZnJvbSBleGhhdXN0aW5nIGxv Y2FsIHBvcnRzLgotK1RoZSBkZWZhdWx0IGlzIDEwMDAuCi0gLkl0IENtIFgxMUZvcndhcmRpbmcK LSBTcGVjaWZpZXMgd2hldGhlciBYMTEgZm9yd2FyZGluZyBpcyBwZXJtaXR0ZWQuCi0gVGhlIGFy Z3VtZW50IG11c3QgYmUKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDUwLUZpeC1zc2gt cGtjczExLWNsaWVudC1oZWxwZXItdGVybWluYXRpb24ucGF0Y2ggYi8wMDUwLUZpeC1zc2gtcGtj czExLWNsaWVudC1oZWxwZXItdGVybWluYXRpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDFiODU2MjAuLjAwMDAwMDAKLS0tIGEvMDA1MC1GaXgtc3NoLXBrY3MxMS1jbGll bnQtaGVscGVyLXRlcm1pbmF0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBA QAotRnJvbSBmOWY2OGUzZDVlMWQ0YmYyZTk0NWExODljNjY4OGIyN2FiZjk4MTBiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwu Y29tPgotRGF0ZTogTW9uLCAxMyBBcHIgMjAyNiAxNDo1OToyNiArMDIwMAotU3ViamVjdDogW1BB VENIIDUwLzU0XSBGaXggc3NoLXBrY3MxMS1jbGllbnQgaGVscGVyIHRlcm1pbmF0aW9uCi0KLURv bid0IHRlcm1pbmF0ZSB0aGUgUEtDUyMxMSBoZWxwZXIgd2hlbiBTU0gyX0FHRU5UX0ZBSUxVUkUg aXMgcmV0dXJuZWQuCi1UaGlzIGlzIGEgbGVnaXRpbWF0ZSByZXNwb25zZSB3aGVuIGEgdG9rZW4g cmVxdWlyZXMgUElOIGF1dGhlbnRpY2F0aW9uLgotVGhlIGhlbHBlciBtdXN0IHJlbWFpbiBhY3Rp dmUgc28gaXQgY2FuIHByb21wdCBmb3IgUElOIGR1cmluZyBhY3R1YWwga2V5IHVzZS4KLQotT25s eSB0ZXJtaW5hdGUgdGhlIGhlbHBlciBvbiB1bmV4cGVjdGVkIHJlc3BvbnNlcyBvciBjb21tdW5p Y2F0aW9uIGZhaWx1cmVzLgotCi1Dby1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5v cmVwbHlAYW50aHJvcGljLmNvbT4KLS0tLQotIHNzaC1wa2NzMTEtY2xpZW50LmMgfCAxOCArKysr KysrKysrKystLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxl dGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NzaC1wa2NzMTEtY2xpZW50LmMgYi9zc2gtcGtjczEx LWNsaWVudC5jCi1pbmRleCA2ZDc0ZDcyODAuLjMwYTRjZjVkYyAxMDA2NDQKLS0tLSBhL3NzaC1w a2NzMTEtY2xpZW50LmMKLSsrKyBiL3NzaC1wa2NzMTEtY2xpZW50LmMKLUBAIC00MjksMTIgKzQy OSwxOCBAQCBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBpbiwgc3RydWN0 IHNzaGtleSAqKiprZXlzcCwKLSAJCX0KLSAJCS8qIHN1Y2Nlc3MgKi8KLSAJCXJldCA9IDA7Ci0t CX0gZWxzZSBpZiAodHlwZSA9PSBTU0gyX0FHRU5UX0ZBSUxVUkUpIHsKLS0JCWlmICgociA9IHNz aGJ1Zl9nZXRfdTMyKG1zZywgJm5rZXlzKSkgIT0gMCkKLS0JCQllcnJvcl9mcihyLCAiZmFpbGVk IHRvIHBhcnNlIGZhaWx1cmUgcmVzcG9uc2UiKTsKLS0JfQotLQlpZiAocmV0ICE9IDApIHsKLS0J CWRlYnVnX2YoIm5vIGtleXM7IHRlcm1pbmF0ZSBoZWxwZXIiKTsKLSsJfSBlbHNlIGlmICh0eXBl ID09IFNTSF9BR0VOVF9GQUlMVVJFIHx8IHR5cGUgPT0gU1NIMl9BR0VOVF9GQUlMVVJFKSB7Ci0r CQlpZiAodHlwZSA9PSBTU0gyX0FHRU5UX0ZBSUxVUkUpIHsKLSsJCQlpZiAoKHIgPSBzc2hidWZf Z2V0X3UzMihtc2csICZua2V5cykpICE9IDApCi0rCQkJCWVycm9yX2ZyKHIsICJmYWlsZWQgdG8g cGFyc2UgZmFpbHVyZSByZXNwb25zZSIpOwotKwkJfQotKwkJLyogUHJvdmlkZXIgcmVnaXN0ZXJl ZCBidXQgcmV0dXJuZWQgbm8ga2V5cyAobWF5IG5lZWQgUElOKSAqLwotKwkJLyogRG9uJ3QgdGVy bWluYXRlIGhlbHBlciAtIGtlZXAgaXQgZm9yIGxhdGVyIHVzZSAqLwotKwkJcmV0ID0gMDsKLSsJ CW5rZXlzID0gMDsKLSsJfSBlbHNlIHsKLSsJCS8qIFVuZXhwZWN0ZWQgcmVzcG9uc2UgLSB0ZXJt aW5hdGUgaGVscGVyICovCi0rCQlkZWJ1Z19mKCJ1bmV4cGVjdGVkIHJlc3BvbnNlICVkOyB0ZXJt aW5hdGUgaGVscGVyIiwgdHlwZSk7Ci0gCQloZWxwZXJfdGVybWluYXRlKGhlbHBlcik7Ci0gCX0K LSAJc3NoYnVmX2ZyZWUobXNnKTsKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDUwLW9w ZW5zc2gtMTAuMnAxLXBhbS1hdXRoLnBhdGNoIGIvMDA1MC1vcGVuc3NoLTEwLjJwMS1wYW0tYXV0 aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWViMGU2Ci0tLSAv ZGV2L251bGwKKysrIGIvMDA1MC1vcGVuc3NoLTEwLjJwMS1wYW0tYXV0aC5wYXRjaApAQCAtMCww ICsxLDQzIEBACitGcm9tIDRhOWVjZDk3NDQyMjVkMjc0ZWMwNWE0YWFiNjZhY2VmMjU0OTgyODgg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDEyIEFwciAyMDI2IDEyOjI1OjA0ICswMjAwCitTdWJq ZWN0OiBbUEFUQ0ggNTAvNTNdIG9wZW5zc2gtMTAuMnAxLXBhbS1hdXRoCisKK2h0dHBzOi8vYnVn emlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjQyMzkwMAorCitDby1BdXRob3JlZC1C eTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT4KKy0tLQorIGF1dGgt cGFtLmMgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwg NSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2F1dGgtcGFtLmMgYi9hdXRoLXBhbS5jCitp bmRleCBkM2RjZDAzN2IuLmFhYWQxNjc2NSAxMDA2NDQKKy0tLSBhL2F1dGgtcGFtLmMKKysrKyBi L2F1dGgtcGFtLmMKK0BAIC00NTUsNiArNDU1LDcgQEAgc3RhdGljIGludAorIGNoZWNrX3BhbV91 c2VyKEF1dGhjdHh0ICphdXRoY3R4dCkKKyB7CisgCWNvbnN0IGNoYXIgKnBhbV91c2VyOworKwlj b25zdCBzdHJ1Y3QgcGFzc3dkICpwYW1fcHc7CisgCisgCWlmIChhdXRoY3R4dCA9PSBOVUxMIHx8 IGF1dGhjdHh0LT5wdyA9PSBOVUxMIHx8CisgCSAgICBhdXRoY3R4dC0+cHctPnB3X25hbWUgPT0g TlVMTCkKK0BAIC00NjksMTEgKzQ3MCwxMCBAQCBjaGVja19wYW1fdXNlcihBdXRoY3R4dCAqYXV0 aGN0eHQpCisgCQlyZXR1cm4gUEFNX1VTRVJfVU5LTk9XTjsKKyAJfQorIAorLQlpZiAoc3NocGFt X2luaXRpYWxfdXNlciA9PSBOVUxMKQorLQkJZmF0YWxfZigiaW50ZXJuYWwgZXJyb3I6IHNzaHBh bV9pbml0aWFsX3VzZXIgTlVMTCIpOworLQlpZiAoc3RyY21wKHNzaHBhbV9pbml0aWFsX3VzZXIs IHBhbV91c2VyKSAhPSAwKSB7CistCQllcnJvcl9mKCJQQU0gdXNlciBcIiVzXCIgZG9lcyBub3Qg bWF0Y2ggcHJldmlvdXMgXCIlc1wiIiwKKy0JCSAgICAgIHBhbV91c2VyLCBzc2hwYW1faW5pdGlh bF91c2VyKTsKKysJcGFtX3B3ID0gZ2V0cHduYW0ocGFtX3VzZXIpOworKwlpZiAocGFtX3B3ID09 IE5VTEwgfHwgcGFtX3B3LT5wd191aWQgIT0gYXV0aGN0eHQtPnB3LT5wd191aWQpIHsKKysJCWRl YnVnKCJQQU0gdXNlciBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgXCIlc1wiIiwKKysJ CSAgICAgIHBhbV91c2VyLCBhdXRoY3R4dC0+cHctPnB3X25hbWUpOworIAkJcmV0dXJuIFBBTV9V U0VSX1VOS05PV047CisgCX0KKyAJcmV0dXJuIFBBTV9TVUNDRVNTOworLS0gCisyLjU1LjAKKwoK ZGlmZiAtLWdpdCBhLzAwNTEtZ3NzYXBpLXM0dS5wYXRjaCBiLzAwNTEtZ3NzYXBpLXM0dS5wYXRj aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYxOTE4Ci0tLSAvZGV2L251 bGwKKysrIGIvMDA1MS1nc3NhcGktczR1LnBhdGNoCkBAIC0wLDAgKzEsMTAyNyBAQAorRnJvbSAx M2RmMTQwMTdhNTMwODU2YTIwZGNjMDIwOGE2N2UxMjYxNzhkMzkyIE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0 ZTogU3VuLCAxMiBBcHIgMjAyNiAxMjoyNToyMSArMDIwMAorU3ViamVjdDogW1BBVENIIDUxLzUz XSBnc3NhcGktczR1CisKK0NvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9yZXBs eUBhbnRocm9waWMuY29tPgorLS0tCisgYXV0aC1rcmI1LmMgICAgIHwgIDEzICsrCisgY29uZmln dXJlLmFjICAgIHwgIDEwICstCisgZ3NzLXNlcnYta3JiNS5jIHwgMjI1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysKKyBnc3Mtc2Vydi5jICAgICAgfCAzODggKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgc2VydmNvbmYuYyAgICAgIHwgIDQ2ICsr KysrKworIHNlcnZjb25mLmggICAgICB8ICAgOCArLQorIHNzaC1nc3MuaCAgICAgICB8ICAxMyAr KworIHNzaGQtc2Vzc2lvbi5jICB8ICA5OCArKysrKysrKysrKysKKyBzc2hkX2NvbmZpZy41ICAg fCAgNzAgKysrKysrKysrCisgOSBmaWxlcyBjaGFuZ2VkLCA4NTEgaW5zZXJ0aW9ucygrKSwgMjAg ZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hdXRoLWtyYjUuYyBiL2F1dGgta3JiNS5jCitp bmRleCAyZTNjMWM4MGYuLjljZDM2MThiMiAxMDA2NDQKKy0tLSBhL2F1dGgta3JiNS5jCisrKysg Yi9hdXRoLWtyYjUuYworQEAgLTQ2NSw2ICs0NjUsMTkgQEAgc3NoX2tyYjVfY2NfbmV3X3VuaXF1 ZShrcmI1X2NvbnRleHQgY3R4LCBrcmI1X2NjYWNoZSAqY2NhY2hlLCBpbnQgKm5lZWRfZW52aXJv bm0KKyAJICogYSBwcmltYXJ5IGNhY2hlIGZvciB0aGlzIGNvbGxlY3Rpb24sIGlmIGl0IHN1cHBv cnRzIHRoYXQgKG5vbi1GSUxFKQorIAkgKi8KKyAJaWYgKGtyYjVfY2Nfc3VwcG9ydF9zd2l0Y2go Y3R4LCB0eXBlKSkgeworKwkJLyoKKysJCSAqIEZvciBjb2xsZWN0aW9uLXR5cGUgY2FjaGVzIChL Q00sIEtFWVJJTkcsIOKApikgcmV1c2UgdGhlCisrCQkgKiBleGlzdGluZyBwcmltYXJ5IGNjYWNo ZSB3aGVuIG9uZSBpcyBhbHJlYWR5IHByZXNlbnQuICBUaGUKKysJCSAqIGNhbGxlciB3aWxsIHJl aW5pdGlhbGlzZSBpdCB3aXRoIGtyYjVfY2NfaW5pdGlhbGl6ZSgpLCBzbworKwkJICogaXRzIG9s ZCBjb250ZW50cyBhcmUgcmVwbGFjZWQgcmF0aGVyIHRoYW4gb3JwaGFuZWQuICBPbmx5CisrCQkg KiBjcmVhdGUgYSBmcmVzaCB1bmlxdWUgY2NhY2hlIHdoZW4gbm8gcHJpbWFyeSBleGlzdHMgeWV0 LgorKwkJICovCisrCQlpZiAoa3JiNV9jY19kZWZhdWx0KGN0eCwgY2NhY2hlKSA9PSAwKSB7Cisr CQkJZGVidWczX2YoInJldXNpbmcgZXhpc3RpbmcgZGVmYXVsdCBjY2FjaGUgb2YgdHlwZSAlcyIs CisrCQkJICAgIHR5cGUpOworKwkJCWZyZWUodHlwZSk7CisrCQkJcmV0dXJuIDA7CisrCQl9Cisg CQlkZWJ1ZzNfZigiY2FsbGluZyBjY19uZXdfdW5pcXVlKCVzKSIsIGNjbmFtZSk7CisgCQlyZXQg PSBrcmI1X2NjX25ld191bmlxdWUoY3R4LCB0eXBlLCBOVUxMLCBjY2FjaGUpOworIAkJZnJlZSh0 eXBlKTsKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGQ2 Mjc0MzI4Yi4uYjJjOTU5ZmYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25m aWd1cmUuYWMKK0BAIC01MDc1LDExICs1MDc1LDE3IEBAIEFDX0FSR19XSVRIKFtrZXJiZXJvczVd LAorICMgaW5jbHVkZSA8Z3NzYXBpX2dlbmVyaWMuaD4KKyAjZWxpZiBkZWZpbmVkKEhBVkVfR1NT QVBJX0dTU0FQSV9HRU5FUklDX0gpCisgIyBpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMu aD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9HU1NBUElfRVhUX0gKKysjIGluY2x1ZGUgPGdzc2Fw aS9nc3NhcGlfZXh0Lmg+CisrI2VuZGlmCisrI2lmZGVmIEhBVkVfR1NTQVBJX0tSQjVfSAorKyMg aW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9rcmI1Lmg+CisgI2VuZGlmCisgCQldXSkKKyAJCXNhdmVk X0xJQlM9IiRMSUJTIgorLQkJTElCUz0iJExJQlMgJEs1TElCUyIKKy0JCUFDX0NIRUNLX0ZVTkNT KFtrcmI1X2NjX25ld191bmlxdWUga3JiNV9nZXRfZXJyb3JfbWVzc2FnZSBrcmI1X2ZyZWVfZXJy b3JfbWVzc2FnZV0pCisrCQlMSUJTPSIkTElCUyAkR1NTTElCUyAkSzVMSUJTICIKKysJCUFDX0NI RUNLX0ZVTkNTKFtrcmI1X2NjX25ld191bmlxdWUga3JiNV9nZXRfZXJyb3JfbWVzc2FnZSBrcmI1 X2ZyZWVfZXJyb3JfbWVzc2FnZSBnc3NfYWNxdWlyZV9jcmVkX2Zyb21dKQorIAkJTElCUz0iJHNh dmVkX0xJQlMiCisgCisgCWZpCitkaWZmIC0tZ2l0IGEvZ3NzLXNlcnYta3JiNS5jIGIvZ3NzLXNl cnYta3JiNS5jCitpbmRleCBmYzdjYWJjMDkuLjA2ZDQ1MGQ0ZCAxMDA2NDQKKy0tLSBhL2dzcy1z ZXJ2LWtyYjUuYworKysrIGIvZ3NzLXNlcnYta3JiNS5jCitAQCAtNjA5LDYgKzYwOSwyMzEgQEAg c3NoX2dzc2FwaV9rcmI1X3VwZGF0ZWNyZWRzKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSwKKyAJ cmV0dXJuIDE7CisgfQorIAorKy8qCisrICogQ2hlY2sgd2hldGhlciB0aGUgdXNlcidzIGRlZmF1 bHQgY2NhY2hlIGFscmVhZHkgY29udGFpbnMgdmFsaWQgc2VydmljZQorKyAqIHRpY2tldHMgZm9y IGFsbCBwcmluY2lwYWxzIGxpc3RlZCBpbiBzZXJ2aWNlc1tdLiAgUmV0dXJucyAxIGlmIGV2ZXJ5 CisrICogbGlzdGVkIHNlcnZpY2UgaGFzIGEgdGlja2V0IHdpdGggYXQgbGVhc3QgbWluX2xpZmV0 aW1lIHNlY29uZHMgcmVtYWluaW5nCisrICogKHBhc3MgR1NTX0NfSU5ERUZJTklURSB0byBhY2Nl cHQgYW55IHBvc2l0aXZlIHJlbWFpbmluZyBsaWZldGltZSksIDAgaWYKKysgKiBhbnkgdGlja2V0 IGlzIG1pc3Npbmcgb3IgdG9vIGNsb3NlIHRvIGV4cGlyeS4gIFJ1bnMgYXMgdGhlIHVzZXIuCisr ICoKKysgKiBVbmxpa2Ugc3NoX2dzc2FwaV91c2VyX2hhc192YWxpZF90Z3QoKSwgdGhpcyBjYW5u b3QgdXNlIGdzc19hY3F1aXJlX2NyZWQoKQorKyAqIGJlY2F1c2Ugc2VydmljZSB0aWNrZXRzIGFy ZSBub3QgaW5pdGlhdG9yIGNyZWRlbnRpYWxzIOKAlCBHU1NBUEkgb25seQorKyAqIHN1cmZhY2Vz IFRHVHMgdmlhIHRoYXQgQVBJLiAgV2UgaXRlcmF0ZSB0aGUgY2NhY2hlIHdpdGggdGhlIGtyYjUg QVBJCisrICogZGlyZWN0bHkgaW5zdGVhZC4KKysgKi8KKytpbnQKKytzc2hfZ3NzYXBpX3VzZXJf aGFzX3ZhbGlkX3Byb3h5X3RpY2tldHMoY2hhciAqKnNlcnZpY2VzLCB1X2ludCBuc2VydmljZXMs CisrICAgIHVfaW50IG1pbl9saWZldGltZSkKKyt7CisrCWtyYjVfY29udGV4dCBjdHggPSBOVUxM OworKwlrcmI1X2NjYWNoZSBjYyA9IE5VTEw7CisrCWtyYjVfY2NfY3Vyc29yIGN1cnNvcjsKKysJ a3JiNV9jcmVkcyBjcmVkOworKwlrcmI1X3ByaW5jaXBhbCBzdmNfcHJpbmM7CisrCWludCAqZm91 bmQgPSBOVUxMOworKwl1X2ludCBpOworKwlpbnQgYWxsX2ZvdW5kID0gMDsKKysJdGltZV90IG5v dzsKKysKKysJaWYgKG5zZXJ2aWNlcyA9PSAwKQorKwkJcmV0dXJuIDA7CisrCisrCWlmIChrcmI1 X2luaXRfY29udGV4dCgmY3R4KSAhPSAwKQorKwkJcmV0dXJuIDA7CisrCisrCWZvdW5kID0geGNh bGxvYyhuc2VydmljZXMsIHNpemVvZigqZm91bmQpKTsKKysJbm93ID0gdGltZShOVUxMKTsKKysK KysJaWYgKGtyYjVfY2NfZGVmYXVsdChjdHgsICZjYykgIT0gMCkKKysJCWdvdG8gb3V0OworKwor KwlpZiAoa3JiNV9jY19zdGFydF9zZXFfZ2V0KGN0eCwgY2MsICZjdXJzb3IpICE9IDApIHsKKysJ CWtyYjVfY2NfY2xvc2UoY3R4LCBjYyk7CisrCQljYyA9IE5VTEw7CisrCQlnb3RvIG91dDsKKysJ fQorKworKwl3aGlsZSAoa3JiNV9jY19uZXh0X2NyZWQoY3R4LCBjYywgJmN1cnNvciwgJmNyZWQp ID09IDApIHsKKysJCS8qCisrCQkgKiBVc2Uga3JiNV9wcmluY2lwYWxfY29tcGFyZSgpIHNvIHRo YXQgc2VydmljZSBuYW1lcworKwkJICogY29uZmlndXJlZCB3aXRob3V0IGFuIGV4cGxpY2l0IHJl YWxtIChrcmI1X3BhcnNlX25hbWUKKysJCSAqIGFwcGVuZHMgdGhlIGRlZmF1bHQgcmVhbG0pIHN0 aWxsIG1hdGNoIHRoZSBmdWxseS0KKysJCSAqIHF1YWxpZmllZCBwcmluY2lwYWwgc3RvcmVkIGlu IHRoZSBjY2FjaGUuCisrCQkgKi8KKysJCWZvciAoaSA9IDA7IGkgPCBuc2VydmljZXM7IGkrKykg eworKwkJCWlmIChmb3VuZFtpXSkKKysJCQkJY29udGludWU7CisrCQkJaWYgKGtyYjVfcGFyc2Vf bmFtZShjdHgsIHNlcnZpY2VzW2ldLAorKwkJCSAgICAmc3ZjX3ByaW5jKSAhPSAwKQorKwkJCQlj b250aW51ZTsKKysJCQlpZiAoa3JiNV9wcmluY2lwYWxfY29tcGFyZShjdHgsCisrCQkJICAgIGNy ZWQuc2VydmVyLCBzdmNfcHJpbmMpKSB7CisrCQkJCWtyYjVfZGVsdGF0IHJlbWFpbmluZyA9Cisr CQkJCSAgICBjcmVkLnRpbWVzLmVuZHRpbWUgLSBub3c7CisrCQkJCWlmIChyZW1haW5pbmcgPiAw ICYmCisrCQkJCSAgICAobWluX2xpZmV0aW1lID09IEdTU19DX0lOREVGSU5JVEUgfHwKKysJCQkJ ICAgICAoa3JiNV9kZWx0YXQpbWluX2xpZmV0aW1lIDw9IHJlbWFpbmluZykpCisrCQkJCQlmb3Vu ZFtpXSA9IDE7CisrCQkJfQorKwkJCWtyYjVfZnJlZV9wcmluY2lwYWwoY3R4LCBzdmNfcHJpbmMp OworKwkJfQorKwkJa3JiNV9mcmVlX2NyZWRfY29udGVudHMoY3R4LCAmY3JlZCk7CisrCX0KKysJ a3JiNV9jY19lbmRfc2VxX2dldChjdHgsIGNjLCAmY3Vyc29yKTsKKysJa3JiNV9jY19jbG9zZShj dHgsIGNjKTsKKysJY2MgPSBOVUxMOworKworKwlhbGxfZm91bmQgPSAxOworKwlmb3IgKGkgPSAw OyBpIDwgbnNlcnZpY2VzOyBpKyspIHsKKysJCWlmICghZm91bmRbaV0pIHsKKysJCQlhbGxfZm91 bmQgPSAwOworKwkJCWJyZWFrOworKwkJfQorKwl9Cisrb3V0OgorKwlmcmVlKGZvdW5kKTsKKysJ aWYgKGN0eCAhPSBOVUxMKQorKwkJa3JiNV9mcmVlX2NvbnRleHQoY3R4KTsKKysJcmV0dXJuIGFs bF9mb3VuZDsKKyt9CisrCisrLyogQXMgdXNlciAtIGNhbGxlZCBvbiBmYXRhbC9leGl0ICovCisr dm9pZAorK3NzaF9nc3NhcGlfY2xlYW51cF9jcmVkcyh2b2lkKQorK3sKKysJc3NoX2dzc2FwaV9j Y2FjaGUgKnN0b3JlID0gc3NoX2dzc2FwaV9nZXRfY2NhY2hlKCk7CisrCWtyYjVfY2NhY2hlIGNj YWNoZSA9IE5VTEw7CisrCWtyYjVfZXJyb3JfY29kZSBwcm9ibGVtOworKworKwlpZiAoc3RvcmUt PmRhdGEgIT0gTlVMTCkgeworKwkJaWYgKChwcm9ibGVtID0ga3JiNV9jY19yZXNvbHZlKHN0b3Jl LT5kYXRhLAorKwkJICAgIHN0b3JlLT5lbnZ2YWwsICZjY2FjaGUpKSkgeworKwkJCWRlYnVnX2Yo ImtyYjVfY2NfcmVzb2x2ZSgpOiAlLjEwMHMiLAorKwkJCSAgICBrcmI1X2dldF9lcnJfdGV4dChz dG9yZS0+ZGF0YSwgcHJvYmxlbSkpOworKwkJfSBlbHNlIGlmICgocHJvYmxlbSA9IGtyYjVfY2Nf ZGVzdHJveShzdG9yZS0+ZGF0YSwgY2NhY2hlKSkpIHsKKysJCQlkZWJ1Z19mKCJrcmI1X2NjX2Rl c3Ryb3koKTogJS4xMDBzIiwKKysJCQkgICAga3JiNV9nZXRfZXJyX3RleHQoc3RvcmUtPmRhdGEs IHByb2JsZW0pKTsKKysJCX0gZWxzZSB7CisrCQkJa3JiNV9mcmVlX2NvbnRleHQoc3RvcmUtPmRh dGEpOworKwkJCXN0b3JlLT5kYXRhID0gTlVMTDsKKysJCX0KKysJfQorK30KKysKKysvKgorKyAq IEZpbHRlciB0aGUgdXNlcidzIGNjYWNoZSBieSByZW1vdmluZyB0aGUgdGlja2V0IGNsYXNzZXMg aW5kaWNhdGVkIGJ5CisrICogZHJvcF9mbGFncyAoU1NIX0dTU0FQSV9DQ0ZJTFRFUl8qIGJpdG1h c2spLiAgRWFjaCBjcmVkZW50aWFsIGlzCisrICogY2F0ZWdvcmlzZWQgYXMgb25lIG9mOgorKyAq ICAgVEdUICAgLSBzZXJ2ZXIgcHJpbmNpcGFsIG1hdGNoZXMgImtyYnRndC8iIHByZWZpeAorKyAq ICAgUFJPWFkgLSBzZXJ2ZXIgcHJpbmNpcGFsIG1hdGNoZXMgb25lIG9mIHByb3h5X3NlcnZpY2Vz W10KKysgKiAgIFNFTEYgIC0gZXZlcnl0aGluZyBlbHNlICh0aGUgUzRVMlNlbGYgZXZpZGVuY2Ug dGlja2V0KQorKyAqIENyZWRlbnRpYWxzIGluIGEgZmxhZ2dlZCBjYXRlZ29yeSBhcmUgZGlzY2Fy ZGVkOyB0aGUgcmVzdCBhcmUgd3JpdHRlbgorKyAqIGJhY2sgYWZ0ZXIgcmVpbml0aWFsaXNpbmcg dGhlIGNjYWNoZS4gIFJ1bnMgYXMgdXNlci4KKysgKi8KKyt2b2lkCisrc3NoX2dzc2FwaV9rcmI1 X2ZpbHRlcl9jY2FjaGUodV9pbnQgZHJvcF9mbGFncywKKysgICAgY2hhciAqKnByb3h5X3NlcnZp Y2VzLCB1X2ludCBucHJveHlfc2VydmljZXMpCisreworKwlzc2hfZ3NzYXBpX2NjYWNoZSAqc3Rv cmUgPSBzc2hfZ3NzYXBpX2dldF9jY2FjaGUoKTsKKysJa3JiNV9jb250ZXh0IGN0eCA9IChrcmI1 X2NvbnRleHQpc3RvcmUtPmRhdGE7CisrCWtyYjVfY2NhY2hlIGNjID0gTlVMTDsKKysJa3JiNV9j Y19jdXJzb3IgY3Vyc29yOworKwlrcmI1X2NyZWRzICprZWVwID0gTlVMTDsKKysJa3JiNV9wcmlu Y2lwYWwgcHJpbmMgPSBOVUxMOworKwlrcmI1X2Vycm9yX2NvZGUgcHJvYmxlbTsKKysJY2hhciAq c3J2bmFtZTsKKysJdV9pbnQgaSwgbmtlZXAgPSAwLCBjYXAgPSAwOworKwlpbnQgaXNfdGd0LCBp c19wcm94eSwgZHJvcDsKKysKKysJaWYgKGN0eCA9PSBOVUxMIHx8IHN0b3JlLT5lbnZ2YWwgPT0g TlVMTCkKKysJCXJldHVybjsKKysKKysJaWYgKChwcm9ibGVtID0ga3JiNV9jY19yZXNvbHZlKGN0 eCwgc3RvcmUtPmVudnZhbCwgJmNjKSkgIT0gMCkgeworKwkJZGVidWdfZigia3JiNV9jY19yZXNv bHZlOiAlLjEwMHMiLAorKwkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KGN0eCwgcHJvYmxlbSkpOwor KwkJcmV0dXJuOworKwl9CisrCWlmICgocHJvYmxlbSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChj dHgsIGNjLCAmcHJpbmMpKSAhPSAwKSB7CisrCQlkZWJ1Z19mKCJrcmI1X2NjX2dldF9wcmluY2lw YWw6ICUuMTAwcyIsCisrCQkgICAga3JiNV9nZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVtKSk7Cisr CQlrcmI1X2NjX2Nsb3NlKGN0eCwgY2MpOworKwkJcmV0dXJuOworKwl9CisrCWlmICgocHJvYmxl bSA9IGtyYjVfY2Nfc3RhcnRfc2VxX2dldChjdHgsIGNjLCAmY3Vyc29yKSkgIT0gMCkgeworKwkJ ZGVidWdfZigia3JiNV9jY19zdGFydF9zZXFfZ2V0OiAlLjEwMHMiLAorKwkJICAgIGtyYjVfZ2V0 X2Vycl90ZXh0KGN0eCwgcHJvYmxlbSkpOworKwkJa3JiNV9mcmVlX3ByaW5jaXBhbChjdHgsIHBy aW5jKTsKKysJCWtyYjVfY2NfY2xvc2UoY3R4LCBjYyk7CisrCQlyZXR1cm47CisrCX0KKysKKysJ eworKwkJa3JiNV9jcmVkcyBjcmVkOworKwkJa3JiNV9wcmluY2lwYWwgc3ZjX3ByaW5jOworKwkJ d2hpbGUgKGtyYjVfY2NfbmV4dF9jcmVkKGN0eCwgY2MsICZjdXJzb3IsICZjcmVkKSA9PSAwKSB7 CisrCQkJaXNfdGd0ID0gaXNfcHJveHkgPSAwOworKwkJCWlmIChrcmI1X3VucGFyc2VfbmFtZShj dHgsIGNyZWQuc2VydmVyLAorKwkJCSAgICAmc3J2bmFtZSkgPT0gMCkgeworKwkJCQlpc190Z3Qg PSBzdHJuY21wKHNydm5hbWUsICJrcmJ0Z3QvIiwgNykgPT0gMDsKKysJCQkJa3JiNV9mcmVlX3Vu cGFyc2VkX25hbWUoY3R4LCBzcnZuYW1lKTsKKysJCQl9CisrCQkJaWYgKCFpc190Z3QpIHsKKysJ CQkJLyoKKysJCQkJICogVXNlIGtyYjVfcHJpbmNpcGFsX2NvbXBhcmUoKSByYXRoZXIgdGhhbgor KwkJCQkgKiBzdHJjbXAoKSBzbyB0aGF0IGEgc2VydmljZSBuYW1lIGNvbmZpZ3VyZWQKKysJCQkJ ICogd2l0aG91dCBhbiBleHBsaWNpdCByZWFsbSAoa3JiNV9wYXJzZV9uYW1lCisrCQkJCSAqIGFw cGVuZHMgdGhlIGRlZmF1bHQgcmVhbG0pIHN0aWxsIG1hdGNoZXMKKysJCQkJICogdGhlIGZ1bGx5 LXF1YWxpZmllZCBuYW1lIGluIHRoZSBjY2FjaGUuCisrCQkJCSAqLworKwkJCQlmb3IgKGkgPSAw OyBpIDwgbnByb3h5X3NlcnZpY2VzOyBpKyspIHsKKysJCQkJCWlmIChrcmI1X3BhcnNlX25hbWUo Y3R4LAorKwkJCQkJICAgIHByb3h5X3NlcnZpY2VzW2ldLCAmc3ZjX3ByaW5jKSAhPSAwKQorKwkJ CQkJCWNvbnRpbnVlOworKwkJCQkJaWYgKGtyYjVfcHJpbmNpcGFsX2NvbXBhcmUoY3R4LAorKwkJ CQkJICAgIGNyZWQuc2VydmVyLCBzdmNfcHJpbmMpKQorKwkJCQkJCWlzX3Byb3h5ID0gMTsKKysJ CQkJCWtyYjVfZnJlZV9wcmluY2lwYWwoY3R4LCBzdmNfcHJpbmMpOworKwkJCQkJaWYgKGlzX3By b3h5KQorKwkJCQkJCWJyZWFrOworKwkJCQl9CisrCQkJfQorKwkJCWlmIChpc190Z3QpCisrCQkJ CWRyb3AgPSBkcm9wX2ZsYWdzICYgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9UR1Q7CisrCQkJZWxzZSBp ZiAoaXNfcHJveHkpCisrCQkJCWRyb3AgPSBkcm9wX2ZsYWdzICYgU1NIX0dTU0FQSV9DQ0ZJTFRF Ul9QUk9YWTsKKysJCQllbHNlCisrCQkJCWRyb3AgPSBkcm9wX2ZsYWdzICYgU1NIX0dTU0FQSV9D Q0ZJTFRFUl9TRUxGOworKworKwkJCWlmICghZHJvcCkgeworKwkJCQlpZiAobmtlZXAgPj0gY2Fw KSB7CisrCQkJCQljYXAgPSBjYXAgPyBjYXAgKiAyIDogNDsKKysJCQkJCWtlZXAgPSB4cmVhbGxv Y2FycmF5KGtlZXAsIGNhcCwKKysJCQkJCSAgICBzaXplb2YoKmtlZXApKTsKKysJCQkJfQorKwkJ CQlrZWVwW25rZWVwKytdID0gY3JlZDsKKysJCQl9IGVsc2UKKysJCQkJa3JiNV9mcmVlX2NyZWRf Y29udGVudHMoY3R4LCAmY3JlZCk7CisrCQl9CisrCX0KKysJa3JiNV9jY19lbmRfc2VxX2dldChj dHgsIGNjLCAmY3Vyc29yKTsKKysKKysJaWYgKChwcm9ibGVtID0ga3JiNV9jY19pbml0aWFsaXpl KGN0eCwgY2MsIHByaW5jKSkgIT0gMCkgeworKwkJbG9naXRfZigia3JiNV9jY19pbml0aWFsaXpl OiAlLjEwMHMiLAorKwkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KGN0eCwgcHJvYmxlbSkpOworKwl9 IGVsc2UgeworKwkJZm9yIChpID0gMDsgaSA8IG5rZWVwOyBpKyspCisrCQkJa3JiNV9jY19zdG9y ZV9jcmVkKGN0eCwgY2MsICZrZWVwW2ldKTsKKysJCWRlYnVnX2YoImNjYWNoZSBmaWx0ZXIgMHgl eDogcmV0YWluZWQgJXUgdGlja2V0KHMpIiwKKysJCSAgICBkcm9wX2ZsYWdzLCBua2VlcCk7Cisr CX0KKysKKysJZm9yIChpID0gMDsgaSA8IG5rZWVwOyBpKyspCisrCQlrcmI1X2ZyZWVfY3JlZF9j b250ZW50cyhjdHgsICZrZWVwW2ldKTsKKysJZnJlZShrZWVwKTsKKysJa3JiNV9mcmVlX3ByaW5j aXBhbChjdHgsIHByaW5jKTsKKysJa3JiNV9jY19jbG9zZShjdHgsIGNjKTsKKyt9CisrCisgc3No X2dzc2FwaV9tZWNoIGdzc2FwaV9rZXJiZXJvc19tZWNoID0geworIAkidG9XTTVTbHc1RXc4TXFr YXkrYWwyZz09IiwKKyAJIktlcmJlcm9zIiwKK2RpZmYgLS1naXQgYS9nc3Mtc2Vydi5jIGIvZ3Nz LXNlcnYuYworaW5kZXggMjM3YTNjNDBhLi5kNzIwNjQ5OWQgMTAwNjQ0CistLS0gYS9nc3Mtc2Vy di5jCisrKysgYi9nc3Mtc2Vydi5jCitAQCAtNTUsNyArNTUsNyBAQCBleHRlcm4gU2VydmVyT3B0 aW9ucyBvcHRpb25zOworIAorIHN0YXRpYyBzc2hfZ3NzYXBpX2NsaWVudCBnc3NhcGlfY2xpZW50 ID0KKyAgICAgeyBHU1NfQ19FTVBUWV9CVUZGRVIsIEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0Nf Tk9fQ1JFREVOVElBTCwKKy0gICAgR1NTX0NfTk9fTkFNRSwgTlVMTCwge05VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEx9LCAwLCAwLCBOVUxMfTsKKysgICAgR1NTX0NfTk9fTkFNRSwgTlVMTCwg e05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCAwLCAwLCBOVUxMLCAwfTsKKyAKKyBzc2hf Z3NzYXBpX21lY2ggZ3NzYXBpX251bGxfbWVjaCA9CisgICAgIHsgTlVMTCwgTlVMTCwgezAsIE5V TEx9LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfTsKK0BAIC00OTIsMjYgKzQ5MiwzODIg QEAgc3NoX2dzc2FwaV9nZXRjbGllbnQoR3NzY3R4dCAqY3R4LCBzc2hfZ3NzYXBpX2NsaWVudCAq Y2xpZW50KQorIAlyZXR1cm4gKGN0eC0+bWFqb3IpOworIH0KKyAKKy0vKiBBcyB1c2VyIC0gY2Fs bGVkIG9uIGZhdGFsL2V4aXQgKi8KKysvKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEtlcmJlcm9zIGNy ZWRlbnRpYWxzIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3JlZC4gKi8KKytpbnQKKytzc2hfZ3NzYXBp X2NyZWRlbnRpYWxzX3N0b3JlZCh2b2lkKQorK3sKKysJcmV0dXJuIGdzc2FwaV9jbGllbnQuc3Rv cmUuZW52dmFsICE9IE5VTEw7CisrfQorKworKy8qIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBj cmVkZW50aWFsLWNhY2hlIGRlc2NyaXB0b3IgZm9yIHRoaXMgc2Vzc2lvbi4gKi8KKytzc2hfZ3Nz YXBpX2NjYWNoZSAqCisrc3NoX2dzc2FwaV9nZXRfY2NhY2hlKHZvaWQpCisreworKwlyZXR1cm4g Jmdzc2FwaV9jbGllbnQuc3RvcmU7CisrfQorKworKy8qIExvZyBodW1hbi1yZWFkYWJsZSBHU1NB UEkgbWFqb3IgYW5kIG1pbm9yIHN0YXR1cyBzdHJpbmdzLiAqLworK3N0YXRpYyB2b2lkCisrbG9n X2dzc19lcnJvcihPTV91aW50MzIgbWFqb3IsIE9NX3VpbnQzMiBtaW5vciwgY29uc3QgY2hhciAq bGFiZWwpCisreworKwlPTV91aW50MzIgbG1pbiwgbWN0eDsKKysJZ3NzX2J1ZmZlcl9kZXNjIGVt c2cgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCisrCW1jdHggPSAwOworKwlkbyB7CisrCQlnc3Nf ZGlzcGxheV9zdGF0dXMoJmxtaW4sIG1ham9yLCBHU1NfQ19HU1NfQ09ERSwKKysJCSAgICBHU1Nf Q19OT19PSUQsICZtY3R4LCAmZW1zZyk7CisrCQlsb2dpdCgiJXM6ICUuKnMiLCBsYWJlbCwgKGlu dCllbXNnLmxlbmd0aCwgKGNoYXIgKillbXNnLnZhbHVlKTsKKysJCWdzc19yZWxlYXNlX2J1ZmZl cigmbG1pbiwgJmVtc2cpOworKwl9IHdoaWxlIChtY3R4ICE9IDApOworKworKwltY3R4ID0gMDsK KysJZG8geworKwkJZ3NzX2Rpc3BsYXlfc3RhdHVzKCZsbWluLCBtaW5vciwgR1NTX0NfTUVDSF9D T0RFLAorKwkJICAgICZnc3NhcGlfa2VyYmVyb3NfbWVjaC5vaWQsICZtY3R4LCAmZW1zZyk7Cisr CQlpZiAoZW1zZy5sZW5ndGggPiAwKQorKwkJCWxvZ2l0KCIlczogJS4qcyIsIGxhYmVsLAorKwkJ CSAgICAoaW50KWVtc2cubGVuZ3RoLCAoY2hhciAqKWVtc2cudmFsdWUpOworKwkJZ3NzX3JlbGVh c2VfYnVmZmVyKCZsbWluLCAmZW1zZyk7CisrCX0gd2hpbGUgKG1jdHggIT0gMCk7CisrfQorKwor Ky8qIExvZyB0aGUgY2Fub25pY2FsIHN0cmluZyBmb3JtIG9mIGEgR1NTQVBJIG5hbWUgYXMgYSBk ZWJ1ZyBtZXNzYWdlLiAqLworK3N0YXRpYyB2b2lkCisrZGVidWdfZ3NzX25hbWUoY29uc3QgY2hh ciAqbGFiZWwsIGdzc19uYW1lX3QgbmFtZSkKKyt7CisrCU9NX3VpbnQzMiBsbWluOworKwlnc3Nf YnVmZmVyX2Rlc2MgYnVmID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKworKwlpZiAoZ3NzX2Rpc3Bs YXlfbmFtZSgmbG1pbiwgbmFtZSwgJmJ1ZiwgTlVMTCkgPT0gR1NTX1NfQ09NUExFVEUpIHsKKysJ CWRlYnVnX2YoIiVzOiAlLipzIiwgbGFiZWwsIChpbnQpYnVmLmxlbmd0aCwgKGNoYXIgKilidWYu dmFsdWUpOworKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmYnVmKTsKKysJfQorK30KKysK KysvKgorKyAqIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgYWxyZWFkeSBoYXMgdmFsaWQgR1NTQVBJ IGluaXRpYXRvciBjcmVkZW50aWFscworKyAqIChlLmcuIGEgS2VyYmVyb3MgVEdUKSBpbiB0aGVp ciBkZWZhdWx0IGNyZWRlbnRpYWwgc3RvcmUgd2l0aCBhdCBsZWFzdAorKyAqIG1pbl9saWZldGlt ZSBzZWNvbmRzIHJlbWFpbmluZy4gIFBhc3MgR1NTX0NfSU5ERUZJTklURSB0byBhY2NlcHQgYW55 CisrICogcG9zaXRpdmUgcmVtYWluaW5nIGxpZmV0aW1lLiAgUnVucyBhcyB0aGUgdXNlci4KKysg KiBSZXR1cm5zIDEgaWYgc3VmZmljaWVudCBjcmVkZW50aWFscyBleGlzdCwgMCBvdGhlcndpc2Uu CisrICovCisraW50Cisrc3NoX2dzc2FwaV91c2VyX2hhc192YWxpZF90Z3QodV9pbnQgbWluX2xp ZmV0aW1lKQorK3sKKysJT01fdWludDMyIG1ham9yLCBtaW5vciwgbGlmZXRpbWUgPSAwOworKwln c3NfY3JlZF9pZF90IGNyZWQgPSBHU1NfQ19OT19DUkVERU5USUFMOworKwlpbnQgZm91bmQgPSAw OworKworKwltYWpvciA9IGdzc19hY3F1aXJlX2NyZWQoJm1pbm9yLCBHU1NfQ19OT19OQU1FLCBH U1NfQ19JTkRFRklOSVRFLAorKwkgICAgR1NTX0NfTk9fT0lEX1NFVCwgR1NTX0NfSU5JVElBVEUs ICZjcmVkLCBOVUxMLCAmbGlmZXRpbWUpOworKwlpZiAoIUdTU19FUlJPUihtYWpvcikgJiYgbGlm ZXRpbWUgPiAwICYmCisrCSAgICAobWluX2xpZmV0aW1lID09IEdTU19DX0lOREVGSU5JVEUgfHwg bGlmZXRpbWUgPj0gbWluX2xpZmV0aW1lKSkKKysJCWZvdW5kID0gMTsKKysJaWYgKGNyZWQgIT0g R1NTX0NfTk9fQ1JFREVOVElBTCkKKysJCWdzc19yZWxlYXNlX2NyZWQoJm1pbm9yLCAmY3JlZCk7 CisrCXJldHVybiBmb3VuZDsKKyt9CisrCisrCisrLyoKKysgKiBQZXJmb3JtIFM0VTJTZWxmIChw cm90b2NvbCB0cmFuc2l0aW9uKTogYWNxdWlyZSBhIEtlcmJlcm9zIHNlcnZpY2UgdGlja2V0Cisr ICogZm9yIHRoZSBTU0ggdXNlciBvbiBiZWhhbGYgb2YgdGhlIGhvc3QgcHJpbmNpcGFsLiAgUnVu cyBwcml2aWxlZ2VkLgorKyAqIFBvcHVsYXRlcyBnc3NhcGlfY2xpZW50LntjcmVkcyxtZWNoLGRp c3BsYXluYW1lLGV4cG9ydGVkbmFtZX0gb24gc3VjY2Vzcy4KKysgKiBSZXR1cm5zIDAgb24gc3Vj Y2VzcywgLTEgb24gZmFpbHVyZS4KKysgKi8KKysvKiBQcml2aWxlZ2VkICovCisraW50Cisrc3No X2dzc2FwaV9zNHUyc2VsZihjb25zdCBjaGFyICp1c2VyLCB1X2ludCBsaWZldGltZSkKKyt7Cisr CU9NX3VpbnQzMiBtYWpvciwgbWlub3IsIHN0YXR1czsKKysJZ3NzX09JRF9zZXQgb2lkc2V0ID0g R1NTX0NfTk9fT0lEX1NFVDsKKysJZ3NzX25hbWVfdCBob3N0X25hbWUgPSBHU1NfQ19OT19OQU1F OworKwlnc3NfbmFtZV90IHVzZXJfbmFtZSA9IEdTU19DX05PX05BTUU7CisrCWdzc19jcmVkX2lk X3QgaG9zdF9jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7CisrCWdzc19jcmVkX2lkX3QgaW1w ZXJzb25hdGVkX2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKKysJZ3NzX2J1ZmZlcl9kZXNj IGdzc2J1ZiwgZGlzcGxheW5hbWUgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCWNoYXIgbG5hbWVb TklfTUFYSE9TVF07CisrCWNoYXIgKnZhbDsKKysKKysJaWYgKGdldGhvc3RuYW1lKGxuYW1lLCBz aXplb2YobG5hbWUpKSAhPSAwKSB7CisrCQlsb2dpdF9mKCJnZXRob3N0bmFtZTogJXMiLCBzdHJl cnJvcihlcnJubykpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCS8qIEFjcXVpcmUgYWNjZXB0 b3IgY3JlZGVudGlhbCBmb3IgaG9zdC8gZnJvbSB0aGUga2V5dGFiICovCisrCWdzc19jcmVhdGVf ZW1wdHlfb2lkX3NldCgmc3RhdHVzLCAmb2lkc2V0KTsKKysJZ3NzX2FkZF9vaWRfc2V0X21lbWJl cigmc3RhdHVzLCAmZ3NzYXBpX2tlcmJlcm9zX21lY2gub2lkLCAmb2lkc2V0KTsKKysKKysJeGFz cHJpbnRmKCZ2YWwsICJob3N0QCVzIiwgbG5hbWUpOworKwlnc3NidWYudmFsdWUgPSB2YWw7Cisr CWdzc2J1Zi5sZW5ndGggPSBzdHJsZW4odmFsKTsKKysJbWFqb3IgPSBnc3NfaW1wb3J0X25hbWUo Jm1pbm9yLCAmZ3NzYnVmLAorKwkgICAgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0UsICZob3N0 X25hbWUpOworKwlmcmVlKHZhbCk7CisrCWlmIChHU1NfRVJST1IobWFqb3IpKSB7CisrCQlsb2dp dF9mKCJnc3NfaW1wb3J0X25hbWUgKGhvc3QpIGZhaWxlZCIpOworKwkJZ3NzX3JlbGVhc2Vfb2lk X3NldCgmc3RhdHVzLCAmb2lkc2V0KTsKKysJCXJldHVybiAtMTsKKysJfQorKwlkZWJ1Z19nc3Nf bmFtZSgiaG9zdCBuYW1lIHBhcnNlZCBhcyIsIGhvc3RfbmFtZSk7CisrCisrCWRlYnVnX2YoImFj cXVpcmluZyBob3N0IGNyZWRlbnRpYWxzIGFzIHVpZD0ldSBldWlkPSV1LCBwcmluY2lwYWw9aG9z dEAlcyIsCisrCSAgICAodW5zaWduZWQpZ2V0dWlkKCksICh1bnNpZ25lZClnZXRldWlkKCksIGxu YW1lKTsKKysJI2lmZGVmIEhBVkVfR1NTX0FDUVVJUkVfQ1JFRF9GUk9NCisrCXsKKysjIGlmIGRl ZmluZWQoS1JCNSkKKysJCS8qCisrCQkgKiBSZXNvbHZlIHRoZSBrZXl0YWIgcGF0aDoga3JiNV9r dF9kZWZhdWx0X25hbWUgcmVzcGVjdHMKKysJCSAqIEtSQjVfS1ROQU1FIGFuZCBrcmI1LmNvbmYg ZGVmYXVsdF9rZXl0YWJfbmFtZS4KKysJCSAqLworKwkJY2hhciBrZXl0YWJfbmFtZVtNQVhQQVRI TEVOXTsKKysJCWtyYjVfY29udGV4dCB0bXBfY3R4OworKworKworKwkJa2V5dGFiX25hbWVbMF0g PSAnXDAnOworKwkJaWYgKGtyYjVfaW5pdF9jb250ZXh0KCZ0bXBfY3R4KSA9PSAwKSB7CisrCQkJ KHZvaWQpa3JiNV9rdF9kZWZhdWx0X25hbWUodG1wX2N0eCwga2V5dGFiX25hbWUsCisrCQkJICAg IHNpemVvZihrZXl0YWJfbmFtZSkpOworKwkJCWtyYjVfZnJlZV9jb250ZXh0KHRtcF9jdHgpOwor KwkJfQorKwkJaWYgKGtleXRhYl9uYW1lWzBdID09ICdcMCcpCisrCQkJc3RybGNweShrZXl0YWJf bmFtZSwgIkZJTEU6L2V0Yy9rcmI1LmtleXRhYiIsCisrCQkJICAgIHNpemVvZihrZXl0YWJfbmFt ZSkpOworKwkJLyoKKysJCSAqIGNsaWVudF9rZXl0YWIgbGV0cyBHU1NBUEkgZG8gQVMtUkVRIHRv IG9idGFpbiBhIFRHVCBmb3IgdGhlCisrCQkgKiBob3N0IHByaW5jaXBhbCAoaW5pdGlhdG9yIHJv bGUgbmVlZGVkIGZvciBTNFUyU2VsZikuCisrCQkgKiBrZXl0YWIgY292ZXJzIHRoZSBhY2NlcHRv ciByb2xlLgorKwkJICogY2NhY2hlOiBNRU1PUlk6IGtlZXBzIHRoZSByZXN1bHRpbmcgVEdUIHZv bGF0aWxlLgorKwkJICovCisrCQlnc3Nfa2V5X3ZhbHVlX2VsZW1lbnRfZGVzYyBzdG9yZV9lbGVt ZW50c1tdID0geworKwkJCXsgImNsaWVudF9rZXl0YWIiLCBrZXl0YWJfbmFtZSB9LAorKwkJCXsg ImtleXRhYiIsIGtleXRhYl9uYW1lIH0sCisrCQkJeyAiY2NhY2hlIiwgIk1FTU9SWToiIH0sCisr CQl9OworKwkJY29uc3QgZ3NzX2tleV92YWx1ZV9zZXRfZGVzYyBjcmVkX3N0b3JlID0geyAzLCBz dG9yZV9lbGVtZW50cyB9OworKyMgZWxzZQorKwkJZ3NzX2tleV92YWx1ZV9lbGVtZW50X2Rlc2Mg c3RvcmVfZWxlbWVudHNbXSA9IHsKKysJCQl7ICJjY2FjaGUiLCAiTUVNT1JZOiIgfSwKKysJCX07 CisrCQljb25zdCBnc3Nfa2V5X3ZhbHVlX3NldF9kZXNjIGNyZWRfc3RvcmUgPSB7IDEsIHN0b3Jl X2VsZW1lbnRzIH07CisrIyBlbmRpZgorKworKworKwkJbWFqb3IgPSBnc3NfYWNxdWlyZV9jcmVk X2Zyb20oJm1pbm9yLCBob3N0X25hbWUsIGxpZmV0aW1lLAorKwkJICAgIG9pZHNldCwgR1NTX0Nf Qk9USCwgJmNyZWRfc3RvcmUsICZob3N0X2NyZWRzLCBOVUxMLCBOVUxMKTsKKysJfQorKyNlbHNl CisrCW1ham9yID0gZ3NzX2FjcXVpcmVfY3JlZCgmbWlub3IsIGhvc3RfbmFtZSwgbGlmZXRpbWUs CisrCSAgICBvaWRzZXQsIEdTU19DX0JPVEgsICZob3N0X2NyZWRzLCBOVUxMLCBOVUxMKTsKKysj ZW5kaWYKKysJZ3NzX3JlbGVhc2VfbmFtZSgmbWlub3IsICZob3N0X25hbWUpOworKwlpZiAoR1NT X0VSUk9SKG1ham9yKSkgeworKwkJbG9naXRfZigiZ3NzX2FjcXVpcmVfY3JlZChob3N0QCVzKSBm YWlsZWQgYXMgdWlkPSV1IGV1aWQ9JXUiLAorKwkJICAgIGxuYW1lLCAodW5zaWduZWQpZ2V0dWlk KCksICh1bnNpZ25lZClnZXRldWlkKCkpOworKwkJbG9nX2dzc19lcnJvcihtYWpvciwgbWlub3Is ICJTNFUyU2VsZjogZ3NzX2FjcXVpcmVfY3JlZCIpOworKwkJZ3NzX3JlbGVhc2Vfb2lkX3NldCgm c3RhdHVzLCAmb2lkc2V0KTsKKysJCXJldHVybiAtMTsKKysJfQorKworKwkvKiBJbXBvcnQgdGhl IFNTSCB1c2VybmFtZSBhcyBhIEdTU0FQSS9LZXJiZXJvcyBuYW1lICovCisrCWdzc2J1Zi52YWx1 ZSA9ICh2b2lkICopdXNlcjsKKysJZ3NzYnVmLmxlbmd0aCA9IHN0cmxlbih1c2VyKTsKKysJbWFq b3IgPSBnc3NfaW1wb3J0X25hbWUoJm1pbm9yLCAmZ3NzYnVmLAorKwkgICAgR1NTX0NfTlRfVVNF Ul9OQU1FLCAmdXNlcl9uYW1lKTsKKysJaWYgKEdTU19FUlJPUihtYWpvcikpIHsKKysJCWxvZ2l0 X2YoImdzc19pbXBvcnRfbmFtZSAodXNlcikgZmFpbGVkIik7CisrCQlnc3NfcmVsZWFzZV9jcmVk KCZtaW5vciwgJmhvc3RfY3JlZHMpOworKwkJZ3NzX3JlbGVhc2Vfb2lkX3NldCgmc3RhdHVzLCAm b2lkc2V0KTsKKysJCXJldHVybiAtMTsKKysJfQorKwlkZWJ1Z19nc3NfbmFtZSgidXNlciBuYW1l IHBhcnNlZCBhcyIsIHVzZXJfbmFtZSk7CisrCisrCS8qIFM0VTJTZWxmOiBvYnRhaW4gYSBzZXJ2 aWNlIHRpY2tldCBmb3IgdGhlIHVzZXIgd2l0aG91dCB0aGVpciBjcmVkcyAqLworKwlkZWJ1Z19m KCJjYWxsaW5nIGdzc19hY3F1aXJlX2NyZWRfaW1wZXJzb25hdGVfbmFtZSBmb3IgdXNlciAlLjEw MHMiLCB1c2VyKTsKKysJbWFqb3IgPSBnc3NfYWNxdWlyZV9jcmVkX2ltcGVyc29uYXRlX25hbWUo Jm1pbm9yLAorKwkgICAgaG9zdF9jcmVkcywgdXNlcl9uYW1lLCBsaWZldGltZSwKKysJICAgIG9p ZHNldCwgR1NTX0NfSU5JVElBVEUsCisrCSAgICAmaW1wZXJzb25hdGVkX2NyZWRzLCBOVUxMLCBO VUxMKTsKKysKKysJZ3NzX3JlbGVhc2VfY3JlZCgmbWlub3IsICZob3N0X2NyZWRzKTsKKysJZ3Nz X3JlbGVhc2Vfb2lkX3NldCgmc3RhdHVzLCAmb2lkc2V0KTsKKysJaWYgKEdTU19FUlJPUihtYWpv cikpIHsKKysJCWxvZ2l0X2YoImdzc19hY3F1aXJlX2NyZWRfaW1wZXJzb25hdGVfbmFtZSBmYWls ZWQgZm9yICUuMTAwcyIsCisrCQkgICAgdXNlcik7CisrCQlsb2dfZ3NzX2Vycm9yKG1ham9yLCBt aW5vciwKKysJCSAgICAiUzRVMlNlbGY6IGdzc19hY3F1aXJlX2NyZWRfaW1wZXJzb25hdGVfbmFt ZSIpOworKwkJZ3NzX3JlbGVhc2VfbmFtZSgmbWlub3IsICZ1c2VyX25hbWUpOworKwkJcmV0dXJu IC0xOworKwl9CisrCisrCS8qIEdldCB0aGUgZGlzcGxheSBuYW1lIChLZXJiZXJvcyBwcmluY2lw YWwgc3RyaW5nKSBmb3Igc3RvcmVjcmVkcyAqLworKwltYWpvciA9IGdzc19kaXNwbGF5X25hbWUo Jm1pbm9yLCB1c2VyX25hbWUsICZkaXNwbGF5bmFtZSwgTlVMTCk7CisrCWdzc19yZWxlYXNlX25h bWUoJm1pbm9yLCAmdXNlcl9uYW1lKTsKKysJaWYgKEdTU19FUlJPUihtYWpvcikpIHsKKysJCWxv Z2l0X2YoImdzc19kaXNwbGF5X25hbWUgZmFpbGVkIik7CisrCQlnc3NfcmVsZWFzZV9jcmVkKCZt aW5vciwgJmltcGVyc29uYXRlZF9jcmVkcyk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJLyog UG9wdWxhdGUgZ3NzYXBpX2NsaWVudCBmb3Igc3RvcmVjcmVkc19zNHUyc2VsZiBhbmQgczR1MnBy b3h5ICovCisrCWdzc2FwaV9jbGllbnQubWVjaCA9ICZnc3NhcGlfa2VyYmVyb3NfbWVjaDsKKysJ Z3NzYXBpX2NsaWVudC5jcmVkcyA9IGltcGVyc29uYXRlZF9jcmVkczsKKysJZ3NzYXBpX2NsaWVu dC5kaXNwbGF5bmFtZS52YWx1ZSA9IHhtYWxsb2MoZGlzcGxheW5hbWUubGVuZ3RoICsgMSk7Cisr CW1lbWNweShnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1lLnZhbHVlLAorKwkgICAgZGlzcGxheW5h bWUudmFsdWUsIGRpc3BsYXluYW1lLmxlbmd0aCk7CisrCSgoY2hhciAqKWdzc2FwaV9jbGllbnQu ZGlzcGxheW5hbWUudmFsdWUpW2Rpc3BsYXluYW1lLmxlbmd0aF0gPSAnXDAnOworKwlnc3NhcGlf Y2xpZW50LmRpc3BsYXluYW1lLmxlbmd0aCA9IGRpc3BsYXluYW1lLmxlbmd0aDsKKysJLyoKKysJ ICogZXhwb3J0ZWRuYW1lIGlzIHVzZWQgYnkgc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3JlZHMg4oaS IGtyYjVfcGFyc2VfbmFtZS4KKysJICogZ3NzX2Rpc3BsYXlfbmFtZSBmb3IgYSB1c2VyLW5hbWUg cmV0dXJucyB0aGUgY2Fub25pY2FsIHByaW5jaXBhbAorKwkgKiBzdHJpbmcgKGUuZy4gdXNlckBS RUFMTSkgd2hpY2gga3JiNV9wYXJzZV9uYW1lIGNhbiBjb25zdW1lIGRpcmVjdGx5LgorKwkgKi8K KysJZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUudmFsdWUgPSB4bWFsbG9jKGRpc3BsYXluYW1l Lmxlbmd0aCArIDEpOworKwltZW1jcHkoZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUudmFsdWUs CisrCSAgICBkaXNwbGF5bmFtZS52YWx1ZSwgZGlzcGxheW5hbWUubGVuZ3RoKTsKKysJKChjaGFy ICopZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUudmFsdWUpW2Rpc3BsYXluYW1lLmxlbmd0aF0g PSAnXDAnOworKwlnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS5sZW5ndGggPSBkaXNwbGF5bmFt ZS5sZW5ndGg7CisrCisrCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3IsICZkaXNwbGF5bmFtZSk7 CisrCWRlYnVnX2YoIlM0VTJTZWxmIHN1Y2NlZWRlZCBmb3IgJS4xMDBzIiwgdXNlcik7CisrCXJl dHVybiAwOworK30KKysKKysvKiBBcyB1c2VyIOKAlCB3cml0ZSB0aGUgUzRVMlNlbGYgdGlja2V0 IGludG8gYSBuZXcgY2NhY2hlIHZpYSBtZWNoLT5zdG9yZWNyZWRzICovCisgdm9pZAorLXNzaF9n c3NhcGlfY2xlYW51cF9jcmVkcyh2b2lkKQorK3NzaF9nc3NhcGlfc3RvcmVjcmVkc19zNHUyc2Vs Zih2b2lkKQorIHsKKy0Ja3JiNV9jY2FjaGUgY2NhY2hlID0gTlVMTDsKKy0Ja3JiNV9lcnJvcl9j b2RlIHByb2JsZW07CistCistCWlmIChnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEgIT0gTlVMTCkg eworLQkJaWYgKChwcm9ibGVtID0ga3JiNV9jY19yZXNvbHZlKGdzc2FwaV9jbGllbnQuc3RvcmUu ZGF0YSwgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwsICZjY2FjaGUpKSkgeworLQkJCWRlYnVn X2YoImtyYjVfY2NfcmVzb2x2ZSgpOiAlLjEwMHMiLAorLQkJCQlrcmI1X2dldF9lcnJfdGV4dChn c3NhcGlfY2xpZW50LnN0b3JlLmRhdGEsIHByb2JsZW0pKTsKKy0JCX0gZWxzZSBpZiAoKHByb2Js ZW0gPSBrcmI1X2NjX2Rlc3Ryb3koZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhLCBjY2FjaGUpKSkg eworLQkJCWRlYnVnX2YoImtyYjVfY2NfZGVzdHJveSgpOiAlLjEwMHMiLAorLQkJCQlrcmI1X2dl dF9lcnJfdGV4dChnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEsIHByb2JsZW0pKTsKKy0JCX0gZWxz ZSB7CistCQkJa3JiNV9mcmVlX2NvbnRleHQoZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhKTsKKy0J CQlnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEgPSBOVUxMOworKwlpZiAoZ3NzYXBpX2NsaWVudC5t ZWNoID09IE5VTEwgfHwgZ3NzYXBpX2NsaWVudC5tZWNoLT5zdG9yZWNyZWRzID09IE5VTEwpIHsK KysJCWRlYnVnX2YoIm5vIEdTU0FQSSBtZWNoYW5pc20gZm9yIHN0b3JpbmcgUzRVMlNlbGYgY3Jl ZGVudGlhbHMiKTsKKysJCXJldHVybjsKKysJfQorKwkoKmdzc2FwaV9jbGllbnQubWVjaC0+c3Rv cmVjcmVkcykoJmdzc2FwaV9jbGllbnQpOworK30KKysKKysvKgorKyAqIFBlcmZvcm0gUzRVMlBy b3h5IGZvciBlYWNoIGNvbmZpZ3VyZWQgc2VydmljZSBwcmluY2lwYWwsIHRoZW4gZmx1c2ggYWxs CisrICogcmVzdWx0aW5nIHRpY2tldHMgaW50byB0aGUgdXNlcidzIGNjYWNoZS4gIFJ1bnMgYXMg dXNlciwgYWZ0ZXIKKysgKiBzc2hfZ3NzYXBpX3N0b3JlY3JlZHNfczR1MnNlbGYoKSBoYXMgY3Jl YXRlZCB0aGUgY2NhY2hlLgorKyAqCisrICogZ3NzYXBpX2NsaWVudC5jcmVkcyAodGhlIFM0VTJT ZWxmIHByb3h5IGNyZWRlbnRpYWwpIGlzIHBhc3NlZCBhcyB0aGUKKysgKiBpbml0aWF0b3IgdG8g Z3NzX2luaXRfc2VjX2NvbnRleHQoKTsgdGhlIEdTU0FQSSBsaWJyYXJ5IHByZXNlbnRzIHRoZSBU R1QKKysgKiBhbmQgZXZpZGVuY2UgdGlja2V0IHRvIHRoZSBLREMgdmlhIFM0VTJQcm94eSBUR1Mt UkVRLiAgVGhlIG91dHB1dCB0b2tlbgorKyAqIChBUC1SRVEpIGlzIGRpc2NhcmRlZCDigJQgd2Ug ZG8gbm90IGNvbm5lY3QgdG8gdGhlIHRhcmdldCBzZXJ2aWNlLgorKyAqCisrICogQWZ0ZXIgaXRl cmF0aW5nIGFsbCBzZXJ2aWNlcywgZ3NzX3N0b3JlX2NyZWQoKSBmbHVzaGVzIHRoZSBhY2N1bXVs YXRlZAorKyAqIHByb3h5IHNlcnZpY2UgdGlja2V0cyBmcm9tIHRoZSBjcmVkZW50aWFsJ3MgaW50 ZXJuYWwgY2NhY2hlIGludG8gdGhlCisrICogS1JCNUNDTkFNRSBjY2FjaGUgdGhhdCBzdG9yZWNy ZWRzX3M0dTJzZWxmKCkgYWxyZWFkeSBjcmVhdGVkLgorKyAqLworKy8qIEFzIHVzZXIgKi8KKyt2 b2lkCisrc3NoX2dzc2FwaV9zNHUycHJveHkoY2hhciAqKnNlcnZpY2VzLCB1X2ludCBuc2Vydmlj ZXMsIHVfaW50IGxpZmV0aW1lKQorK3sKKysJT01fdWludDMyIG1ham9yLCBtaW5vcjsKKysJZ3Nz X2J1ZmZlcl9kZXNjIHNlcnZpY2VfYnVmLCBvdXRwdXRfdG9rZW4gPSBHU1NfQ19FTVBUWV9CVUZG RVI7CisrCWdzc19uYW1lX3QgdGFyZ2V0X25hbWU7CisrCWdzc19jdHhfaWRfdCBjdHg7CisrCXVf aW50IGk7CisrCisrCWlmIChnc3NhcGlfY2xpZW50LmNyZWRzID09IEdTU19DX05PX0NSRURFTlRJ QUwpIHsKKysJCWRlYnVnX2YoIm5vIHByb3h5IGNyZWRlbnRpYWwgYXZhaWxhYmxlIik7CisrCQly ZXR1cm47CisrCX0KKysJaWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZW52dmFsID09IE5VTEwpIHsK KysJCWRlYnVnX2YoIm5vIGNjYWNoZSBwYXRoIHNldDsgY2Fubm90IHN0b3JlIHByb3h5IHRpY2tl dHMiKTsKKysJCXJldHVybjsKKysJfQorKworKwlkZWJ1Z19mKCJzdGFydGluZyBTNFUyUHJveHkg YXMgdWlkPSV1IGV1aWQ9JXUsICV1IHNlcnZpY2UocyksIGNjYWNoZT0lcyIsCisrCSAgICAodW5z aWduZWQpZ2V0dWlkKCksICh1bnNpZ25lZClnZXRldWlkKCksIG5zZXJ2aWNlcywKKysJICAgIGdz c2FwaV9jbGllbnQuc3RvcmUuZW52dmFsKTsKKysKKysJLyogUG9pbnQgdGhlIEdTU0FQSSBsaWJy YXJ5IGF0IHRoZSB1c2VyJ3MgY2NhY2hlIGZvciB0aWNrZXQgc3RvcmFnZSAqLworKwlzZXRlbnYo IktSQjVDQ05BTUUiLCBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCwgMSk7CisrCisrCWZvciAo aSA9IDA7IGkgPCBuc2VydmljZXM7IGkrKykgeworKwkJY3R4ID0gR1NTX0NfTk9fQ09OVEVYVDsK KysJCXRhcmdldF9uYW1lID0gR1NTX0NfTk9fTkFNRTsKKysKKysJCXNlcnZpY2VfYnVmLnZhbHVl ID0gc2VydmljZXNbaV07CisrCQlzZXJ2aWNlX2J1Zi5sZW5ndGggPSBzdHJsZW4oc2VydmljZXNb aV0pOworKworKwkJLyoKKysJCSAqIEdTU19DX05PX09JRDogbGV0IHRoZSBsaWJyYXJ5IGRldGVy bWluZSB0aGUgbmFtZSB0eXBlLgorKwkJICogV2l0aCBLZXJiZXJvcyBhcyB0aGUgYWN0aXZlIG1l Y2hhbmlzbSwgYSBmdWxseS1xdWFsaWZpZWQKKysJCSAqIHByaW5jaXBhbCBsaWtlICJzdmMvaG9z dEBSRUFMTSIgaXMgcGFyc2VkIGNvcnJlY3RseS4KKysJCSAqLworKwkJbWFqb3IgPSBnc3NfaW1w b3J0X25hbWUoJm1pbm9yLCAmc2VydmljZV9idWYsCisrCQkgICAgR1NTX0NfTk9fT0lELCAmdGFy Z2V0X25hbWUpOworKwkJaWYgKEdTU19FUlJPUihtYWpvcikpIHsKKysJCQlsb2dpdF9mKCJnc3Nf aW1wb3J0X25hbWUgZmFpbGVkIGZvciAlLjIwMHMiLAorKwkJCSAgICBzZXJ2aWNlc1tpXSk7Cisr CQkJbG9nX2dzc19lcnJvcihtYWpvciwgbWlub3IsICJTNFUyUHJveHk6IGdzc19pbXBvcnRfbmFt ZSIpOworKwkJCWNvbnRpbnVlOworIAkJfQorKwkJZGVidWdfZ3NzX25hbWUoInRhcmdldCBzZXJ2 aWNlIG5hbWUgcGFyc2VkIGFzIiwgdGFyZ2V0X25hbWUpOworKworKwkJZGVidWdfZigiY2FsbGlu ZyBnc3NfaW5pdF9zZWNfY29udGV4dCBmb3IgJS4yMDBzIiwgc2VydmljZXNbaV0pOworKwkJbWFq b3IgPSBnc3NfaW5pdF9zZWNfY29udGV4dCgmbWlub3IsCisrCQkgICAgZ3NzYXBpX2NsaWVudC5j cmVkcywJCS8qIHByb3h5IGNyZWRlbnRpYWwgKi8KKysJCSAgICAmY3R4LCB0YXJnZXRfbmFtZSwK KysJCSAgICBHU1NfQ19OT19PSUQsCQkJLyogZGVmYXVsdCBtZWNoIChLZXJiZXJvcykgKi8KKysJ CSAgICAwLAkJCQkJLyogbm8gZmxhZ3MsIG5vIG11dHVhbCBhdXRoICovCisrCQkgICAgbGlmZXRp bWUsCisrCQkgICAgR1NTX0NfTk9fQ0hBTk5FTF9CSU5ESU5HUywKKysJCSAgICBHU1NfQ19OT19C VUZGRVIsCQkJLyogbm8gaW5wdXQgdG9rZW4gKi8KKysJCSAgICBOVUxMLAkJCQkvKiBhY3R1YWxf bWVjaF90eXBlICovCisrCQkgICAgJm91dHB1dF90b2tlbiwKKysJCSAgICBOVUxMLAkJCQkvKiBy ZXRfZmxhZ3MgKi8KKysJCSAgICBOVUxMKTsJCQkJLyogdGltZV9yZWMgKi8KKysKKysJCWdzc19y ZWxlYXNlX2J1ZmZlcigmbWlub3IsICZvdXRwdXRfdG9rZW4pOworKwkJZ3NzX3JlbGVhc2VfbmFt ZSgmbWlub3IsICZ0YXJnZXRfbmFtZSk7CisrCQlpZiAoY3R4ICE9IEdTU19DX05PX0NPTlRFWFQp CisrCQkJZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmbWlub3IsICZjdHgsIEdTU19DX05PX0JVRkZF Uik7CisrCisrCQlpZiAoR1NTX0VSUk9SKG1ham9yKSkgeworKwkJCWxvZ2l0X2YoIlM0VTJQcm94 eSBmb3IgJS4yMDBzIG9uIGJlaGFsZiBvZiAlLjIwMHMgZmFpbGVkIiwKKysJCQkgICAgc2Vydmlj ZXNbaV0sCisrCQkJICAgIChjaGFyICopZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZS52YWx1ZSk7 CisrCQkJbG9nX2dzc19lcnJvcihtYWpvciwgbWlub3IsCisrCQkJICAgICJTNFUyUHJveHk6IGdz c19pbml0X3NlY19jb250ZXh0Iik7CisrCQl9IGVsc2UKKysJCQlkZWJ1Z19mKCJTNFUyUHJveHkg dGlja2V0IG9idGFpbmVkIGZvciAlLjIwMHMiLAorKwkJCSAgICBzZXJ2aWNlc1tpXSk7CisgCX0K KysKKysJLyoKKysJICogRmx1c2ggYWxsIHByb3h5IHNlcnZpY2UgdGlja2V0cyBmcm9tIHRoZSBj cmVkZW50aWFsJ3MgaW50ZXJuYWwKKysJICogY2NhY2hlIGludG8gdGhlIEtSQjVDQ05BTUUgY2Nh Y2hlIHZpYSBnc3Nfc3RvcmVfY3JlZCgpLgorKwkgKi8KKysJbWFqb3IgPSBnc3Nfc3RvcmVfY3Jl ZCgmbWlub3IsIGdzc2FwaV9jbGllbnQuY3JlZHMsIEdTU19DX0lOSVRJQVRFLAorKwkgICAgR1NT X0NfTk9fT0lELCAxIC8qIG92ZXJ3cml0ZV9jcmVkICovLCAxIC8qIGRlZmF1bHRfY3JlZCAqLywK KysJICAgIE5VTEwsIE5VTEwpOworKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgeworKwkJbG9naXRf ZigiZ3NzX3N0b3JlX2NyZWQgZmFpbGVkOyBwcm94eSB0aWNrZXRzIG1heSBiZSBtaXNzaW5nIik7 CisrCQlsb2dfZ3NzX2Vycm9yKG1ham9yLCBtaW5vciwgIlM0VTJQcm94eTogZ3NzX3N0b3JlX2Ny ZWQiKTsKKysJfQorKworKwl1bnNldGVudigiS1JCNUNDTkFNRSIpOworK30KKysKKysjaWZuZGVm IEtSQjUKKysvKiBBcyB1c2VyIC0gY2FsbGVkIG9uIGZhdGFsL2V4aXQ7IGZ1bGwgaW1wbGVtZW50 YXRpb24gaW4gZ3NzLXNlcnYta3JiNS5jICovCisrdm9pZAorK3NzaF9nc3NhcGlfY2xlYW51cF9j cmVkcyh2b2lkKQorK3sKKyt9CisrCisrLyoKKysgKiBGaWx0ZXIgdGhlIHVzZXIncyBjY2FjaGU7 IGZ1bGwgaW1wbGVtZW50YXRpb24gaW4gZ3NzLXNlcnYta3JiNS5jLgorKyAqLworK3ZvaWQKKytz c2hfZ3NzYXBpX2tyYjVfZmlsdGVyX2NjYWNoZSh1X2ludCBkcm9wX2ZsYWdzLAorKyAgICBjaGFy ICoqcHJveHlfc2VydmljZXMsIHVfaW50IG5wcm94eV9zZXJ2aWNlcykKKyt7CisgfQorKyNlbmRp ZiAvKiAhS1JCNSAqLworIAorIC8qIEFzIHVzZXIgKi8KKyBpbnQKK2RpZmYgLS1naXQgYS9zZXJ2 Y29uZi5jIGIvc2VydmNvbmYuYworaW5kZXggODc0NmEyNDE3Li42Njc0Njg1OTAgMTAwNjQ0Cist LS0gYS9zZXJ2Y29uZi5jCisrKysgYi9zZXJ2Y29uZi5jCitAQCAtMTQ5OCw2ICsxNDk4LDQzIEBA IHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMs IGNoYXIgKmxpbmUsCisgCQlpZiAob3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPT0gTlVMTCkKKyAJ CQlvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyA9IHhzdHJkdXAoYXJnKTsKKyAJCWJyZWFrOworKwor KwljYXNlIHNHU1NBUElBbGxvd1M0VTJTZWxmOgorKwkJYXJnID0gYXJndl9uZXh0KCZhYywgJmF2 KTsKKysJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykKKysJCQlmYXRhbCgiJXMgbGluZSAlZDog JXMgbWlzc2luZyBhcmd1bWVudC4iLAorKwkJCSAgICBmaWxlbmFtZSwgbGluZW51bSwga2V5d29y ZCk7CisrCQlpZiAoc3RyY2FzZWNtcChhcmcsICJubyIpID09IDApCisrCQkJdmFsdWUgPSAwOwor KwkJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmcsICJ5ZXMiKSA9PSAwKQorKwkJCXZhbHVlID0gSU5U X01BWDsKKysJCWVsc2UgaWYgKCh2YWx1ZSA9IGNvbnZ0aW1lKGFyZykpIDw9IDApCisrCQkJZmF0 YWwoIiVzIGxpbmUgJWQ6IGludmFsaWQgJXMgdmFsdWUgXCIlc1wiLiIsCisrCQkJICAgIGZpbGVu YW1lLCBsaW5lbnVtLCBrZXl3b3JkLCBhcmcpOworKwkJaWYgKCphY3RpdmVwICYmIG9wdGlvbnMt Pmdzc19hbGxvd19zNHUyc2VsZiA9PSAtMSkKKysJCQlvcHRpb25zLT5nc3NfYWxsb3dfczR1MnNl bGYgPSB2YWx1ZTsKKysJCWJyZWFrOworKworKwljYXNlIHNHU1NBUElQcm94eVM0VTJTZXJ2aWNl czoKKysJCXdoaWxlICgoYXJnID0gYXJndl9uZXh0KCZhYywgJmF2KSkgIT0gTlVMTCkgeworKwkJ CWlmICgqYXJnID09ICdcMCcpCisrCQkJCWZhdGFsKCIlcyBsaW5lICVkOiAlcyBtaXNzaW5nIGFy Z3VtZW50LiIsCisrCQkJCSAgICBmaWxlbmFtZSwgbGluZW51bSwga2V5d29yZCk7CisrCQkJaWYg KHN0cmNhc2VjbXAoYXJnLCAibm9uZSIpID09IDApIHsKKysJCQkJZm9yIChpID0gMDsgaSA8IG9w dGlvbnMtPm51bV9nc3NfcHJveHlfc2VydmljZXM7IGkrKykKKysJCQkJCWZyZWUob3B0aW9ucy0+ Z3NzX3Byb3h5X3NlcnZpY2VzW2ldKTsKKysJCQkJZnJlZShvcHRpb25zLT5nc3NfcHJveHlfc2Vy dmljZXMpOworKwkJCQlvcHRpb25zLT5nc3NfcHJveHlfc2VydmljZXMgPSBOVUxMOworKwkJCQlv cHRpb25zLT5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID0gMDsKKysJCQkJYnJlYWs7CisrCQkJfQor KwkJCWlmICghKmFjdGl2ZXApCisrCQkJCWNvbnRpbnVlOworKwkJCW9wdF9hcnJheV9hcHBlbmQo ZmlsZW5hbWUsIGxpbmVudW0sIGtleXdvcmQsCisrCQkJICAgICZvcHRpb25zLT5nc3NfcHJveHlf c2VydmljZXMsCisrCQkJICAgICZvcHRpb25zLT5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzLCBhcmcp OworKwkJfQorKwkJYnJlYWs7CisgI2VuZGlmIC8qIEdTU0FQSSAqLworIAorIAljYXNlIHNQYXNz d29yZEF1dGhlbnRpY2F0aW9uOgorQEAgLTQyOTAsNiArNDMyNywxNSBAQCBkdW1wX2NvbmZpZyhT ZXJ2ZXJPcHRpb25zICpvKQorIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSVN0b3JlQ3JlZGVudGlh bHNPblJla2V5LCBvLT5nc3Nfc3RvcmVfcmVrZXkpOworIAlkdW1wX2NmZ19zdHJpbmcoc0dTU0FQ SUtleEFsZ29yaXRobXMsIG8tPmdzc19rZXhfYWxnb3JpdGhtcyk7CisgCWR1bXBfY2ZnX3N0cmlu ZyhzR1NTQVBJSW5kaWNhdG9ycywgby0+Z3NzX2luZGljYXRvcnMpOworKwlpZiAoby0+Z3NzX2Fs bG93X3M0dTJzZWxmID09IDApCisrCQlwcmludGYoIiVzIG5vXG4iLCBsb29rdXBfb3Bjb2RlX25h bWUoc0dTU0FQSUFsbG93UzRVMlNlbGYpKTsKKysJZWxzZSBpZiAoby0+Z3NzX2FsbG93X3M0dTJz ZWxmID09IElOVF9NQVgpCisrCQlwcmludGYoIiVzIHllc1xuIiwgbG9va3VwX29wY29kZV9uYW1l KHNHU1NBUElBbGxvd1M0VTJTZWxmKSk7CisrCWVsc2UKKysJCXByaW50ZigiJXMgJWRcbiIsIGxv b2t1cF9vcGNvZGVfbmFtZShzR1NTQVBJQWxsb3dTNFUyU2VsZiksCisrCQkgICAgby0+Z3NzX2Fs bG93X3M0dTJzZWxmKTsKKysJZHVtcF9jZmdfc3RyYXJyYXlfb25lbGluZShzR1NTQVBJUHJveHlT NFUyU2VydmljZXMsCisrCSAgICBvLT5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzLCBvLT5nc3NfcHJv eHlfc2VydmljZXMpOworICNlbmRpZgorIAlkdW1wX2NmZ19mbXRpbnQoc1Bhc3N3b3JkQXV0aGVu dGljYXRpb24sIG8tPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uKTsKKyAJZHVtcF9jZmdfZm10aW50 KHNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLAorZGlmZiAtLWdpdCBhL3NlcnZjb25mLmgg Yi9zZXJ2Y29uZi5oCitpbmRleCA0ZTVmN2VkYzYuLjllZTRhMDg5ZCAxMDA2NDQKKy0tLSBhL3Nl cnZjb25mLmgKKysrKyBiL3NlcnZjb25mLmgKK0BAIC0zMjksNyArMzI5LDkgQEAgU1NIQ09ORl9J TlRGTEFHKGdzc19rZXlleCwgR1NTQVBJS2V5RXhjaGFuZ2UsIFNTSENGR19HTE9CQUwsIDAsIFNT SENGR19DT1BZX05PTkUKKyBTU0hDT05GX0lOVEZMQUcoZ3NzX3N0b3JlX3Jla2V5LCBHU1NBUElT dG9yZUNyZWRlbnRpYWxzT25SZWtleSwgU1NIQ0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlfTk9O RSkgXAorIFNTSENPTkZfU1RSSU5HKGdzc19rZXhfYWxnb3JpdGhtcywgR1NTQVBJS2V4QWxnb3Jp dGhtcywgU1NIQ0ZHX0dMT0JBTCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorIFNTSENPTkZfSU5URkxB RyhlbmFibGVfazV1c2VycywgR1NTQVBJRW5hYmxlazV1c2VycywgU1NIQ0ZHX0FMTCwgMCwgU1NI Q0ZHX0NPUFlfTUFUQ0gpIFwKKy1TU0hDT05GX1NUUklORyhnc3NfaW5kaWNhdG9ycywgR1NTQVBJ SW5kaWNhdG9ycywgU1NIQ0ZHX0FMTCwgU1NIQ0ZHX0NPUFlfTUFUQ0gpCisrU1NIQ09ORl9TVFJJ TkcoZ3NzX2luZGljYXRvcnMsIEdTU0FQSUluZGljYXRvcnMsIFNTSENGR19BTEwsIFNTSENGR19D T1BZX01BVENIKSBcCisrU1NIQ09ORl9JTlRGTEFHKGdzc19hbGxvd19zNHUyc2VsZiwgR1NTQVBJ QWxsb3dTNFUyU2VsZiwgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFUQ0gpIFwKKytTU0hD T05GX1NUUkFSUkFZKGdzc19wcm94eV9zZXJ2aWNlcywgbnVtX2dzc19wcm94eV9zZXJ2aWNlcywg R1NTQVBJUHJveHlTNFUyU2VydmljZXMsIFNTSENGR19BTEwsIFNTSENGR19DT1BZX01BVENIKQor ICNlbHNlIC8qIEdTU0FQSSAqLworICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFU19HU1MgXAor IFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGdzc19hdXRoZW50aWNhdGlvbiwgR1NTQVBJQXV0aGVu dGljYXRpb24sIFNTSENGR19BTEwpIFwKK0BAIC0zNDAsNyArMzQyLDkgQEAgU1NIQ09ORl9VTlNV UFBPUlRFRF9JTlQoZ3NzX2tleWV4LCBHU1NBUElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCkg XAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGdzc19zdG9yZV9yZWtleSwgR1NTQVBJU3RvcmVD cmVkZW50aWFsc09uUmVrZXksIFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVE X1NUUklORyhnc3Nfa2V4X2FsZ29yaXRobXMsIEdTU0FQSUtleEFsZ29yaXRobXMsIFNTSENGR19H TE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChlbmFibGVfazV1c2VycywgR1NTQVBJ RW5hYmxlazV1c2VycywgU1NIQ0ZHX0FMTCkgXAorLVNTSENPTkZfVU5TVVBQT1JURURfU1RSSU5H KGdzc19pbmRpY2F0b3JzLCBHU1NBUElJbmRpY2F0b3JzLCBTU0hDRkdfQUxMKQorK1NTSENPTkZf VU5TVVBQT1JURURfU1RSSU5HKGdzc19pbmRpY2F0b3JzLCBHU1NBUElJbmRpY2F0b3JzLCBTU0hD RkdfQUxMKSBcCisrU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2FsbG93X3M0dTJzZWxmLCBH U1NBUElBbGxvd1M0VTJTZWxmLCBTU0hDRkdfQUxMKSBcCisrU1NIQ09ORl9VTlNVUFBPUlRFRF9T VFJJTkcoZ3NzX3Byb3h5X3NlcnZpY2VzLCBHU1NBUElQcm94eVM0VTJTZXJ2aWNlcywgU1NIQ0ZH X0FMTCkKKyAjZW5kaWYgLyogR1NTQVBJICovCisgCisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRS SUVTIFwKK2RpZmYgLS1naXQgYS9zc2gtZ3NzLmggYi9zc2gtZ3NzLmgKK2luZGV4IDE1MDY3MTlh OS4uYTBkNTFjOWJlIDEwMDY0NAorLS0tIGEvc3NoLWdzcy5oCisrKysgYi9zc2gtZ3NzLmgKK0BA IC0xMTksNiArMTE5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeworIAlpbnQgdXNlZDsKKyAJaW50IHVw ZGF0ZWQ7CisgCWNoYXIgKippbmRpY2F0b3JzOyAvKiBhdXRoIGluZGljYXRvcnMgKi8KKysJaW50 IGFsbG93X3NlbGY7IC8qIGFsbG93IHByb3RvY29sIHRyYW5zaXRpb24gKi8KKyB9IHNzaF9nc3Nh cGlfY2xpZW50OworIAorIHR5cGVkZWYgc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3Qgewor QEAgLTE5OSw2ICsyMDAsMTggQEAgT01fdWludDMyIHNzaF9nc3NhcGlfY2hlY2ttaWMoR3NzY3R4 dCAqLCBnc3NfYnVmZmVyX3QsIGdzc19idWZmZXJfdCk7Cisgdm9pZCBzc2hfZ3NzYXBpX2RvX2No aWxkKGNoYXIgKioqLCB1X2ludCAqKTsKKyB2b2lkIHNzaF9nc3NhcGlfY2xlYW51cF9jcmVkcyh2 b2lkKTsKKyBpbnQgc3NoX2dzc2FwaV9zdG9yZWNyZWRzKHZvaWQpOworK2ludCAgc3NoX2dzc2Fw aV9jcmVkZW50aWFsc19zdG9yZWQodm9pZCk7Cisrc3NoX2dzc2FwaV9jY2FjaGUgKnNzaF9nc3Nh cGlfZ2V0X2NjYWNoZSh2b2lkKTsKKytpbnQgIHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfdGd0 KHVfaW50KTsKKytpbnQgIHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfcHJveHlfdGlja2V0cyhj aGFyICoqLCB1X2ludCwgdV9pbnQpOworK2ludCAgc3NoX2dzc2FwaV9zNHUyc2VsZihjb25zdCBj aGFyICosIHVfaW50KTsKKyt2b2lkIHNzaF9nc3NhcGlfc3RvcmVjcmVkc19zNHUyc2VsZih2b2lk KTsKKyt2b2lkIHNzaF9nc3NhcGlfczR1MnByb3h5KGNoYXIgKiosIHVfaW50LCB1X2ludCk7Cisr LyogRmxhZ3MgZm9yIHNzaF9nc3NhcGlfa3JiNV9maWx0ZXJfY2NhY2hlKCk6IHdoaWNoIHRpY2tl dCBjbGFzc2VzIHRvIHJlbW92ZSAqLworKyNkZWZpbmUgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9UR1Qg ICAgKDF1IDw8IDApIC8qIGtyYnRndC8uLi4gZW50cmllcyAqLworKyNkZWZpbmUgU1NIX0dTU0FQ SV9DQ0ZJTFRFUl9TRUxGICAgKDF1IDw8IDEpIC8qIFM0VTJTZWxmIGV2aWRlbmNlIHRpY2tldCAq LworKyNkZWZpbmUgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9QUk9YWSAgKDF1IDw8IDIpIC8qIFM0VTJQ cm94eSBzZXJ2aWNlIHRpY2tldHMgKi8KKyt2b2lkIHNzaF9nc3NhcGlfa3JiNV9maWx0ZXJfY2Nh Y2hlKHVfaW50LCBjaGFyICoqLCB1X2ludCk7CisgY29uc3QgY2hhciAqc3NoX2dzc2FwaV9kaXNw bGF5bmFtZSh2b2lkKTsKKyAKKyBjaGFyICpzc2hfZ3NzYXBpX3NlcnZlcl9tZWNoYW5pc21zKHZv aWQpOworZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKK2luZGV4 IGFkZjViMWI0OS4uN2QwZTI1Y2ExIDEwMDY0NAorLS0tIGEvc3NoZC1zZXNzaW9uLmMKKysrKyBi L3NzaGQtc2Vzc2lvbi5jCitAQCAtMTM5Niw2ICsxMzk2LDEwNCBAQCBtYWluKGludCBhYywgY2hh ciAqKmF2KQorIAkJYXV0aGN0eHQtPmtyYjVfc2V0X2VudiA9IHNzaF9nc3NhcGlfc3RvcmVjcmVk cygpOworIAkJcmVzdG9yZV91aWQoKTsKKyAJfQorKwkvKgorKwkgKiBHU1NBUElBbGxvd1M0VTJT ZWxmIC8gR1NTQVBJUHJveHlTNFUyU2VydmljZXM6IGlmIG5vIGNyZWRlbnRpYWxzIHdlcmUgc3Rv cmVkCisrCSAqIGFib3ZlIChpLmUuIG5vIEdTU0FQSSBhdXRoIHdpdGggZGVsZWdhdGlvbiBvY2N1 cnJlZCksIHVzZSBTNFUyU2VsZgorKwkgKiB0byBvYnRhaW4gYW4gaW1wZXJzb25hdGVkIGNyZWRl bnRpYWwgZm9yIHRoZSB1c2VyLCB0aGVuIG9wdGlvbmFsbHkKKysJICogZm9sbG93IHdpdGggUzRV MlByb3h5IGZvciBjb25maWd1cmVkIHRhcmdldCBzZXJ2aWNlcy4KKysJICoKKysJICogR1NTQVBJ QWxsb3dTNFUyU2VsZiBhbG9uZTogICAgc3RvcmUgUzRVMlNlbGYgZXZpZGVuY2UgdGlja2V0IG9u bHk7CisrCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0IFRHVCBpcyByZW1v dmVkLgorKwkgKiBHU1NBUElQcm94eVM0VTJTZXJ2aWNlcyBhbG9uZTogc3RvcmUgaG9zdCBUR1Qg YW5kIFM0VTJQcm94eSBzZXJ2aWNlCisrCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp Y2tldHM7IHRoZSBTNFUyU2VsZiBldmlkZW5jZSB0aWNrZXQKKysJICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXMgcmVtb3ZlZC4KKysJICogQm90aDogICAgICAgICAgICAgICAgICAgICBz dG9yZSBob3N0IFRHVCwgUzRVMlNlbGYgZXZpZGVuY2UgdGlja2V0LAorKwkgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbmQgYWxsIFM0VTJQcm94eSBzZXJ2aWNlIHRpY2tldHMuCisrCSAq CisrCSAqIFdoZW4gUzRVMlByb3h5IHRpY2tldHMgYXJlIHByZXNlbnQgdGhlIGhvc3QgVEdUIG11 c3QgcmVtYWluIGluIHRoZQorKwkgKiBjY2FjaGU7IGFwcGxpY2F0aW9ucyBjaGVjayBmb3IgVEdU IHByZXNlbmNlIHRvIGRldGVybWluZSB3aGV0aGVyCisrCSAqIEtlcmJlcm9zIGNyZWRlbnRpYWxz IGFyZSBhdmFpbGFibGUuICBPbmx5IGluIEdTU0FQSUFsbG93UzRVMlNlbGYtYWxvbmUKKysJICog bW9kZSAobm8gcHJveHkgdGlja2V0cykgaXMgdGhlIGhvc3QgVEdUIHJlbW92ZWQuCisrCSAqCisr CSAqIFNraXAgUzRVMlNlbGYgd2hlbiB0aGUgdXNlciBhbHJlYWR5IGhhcyBjcmVkZW50aWFscyBj b3ZlcmluZyB0aGUKKysJICogcmVxdWVzdGVkIGxpZmV0aW1lOiBjaGVjayBmb3IgYSB2YWxpZCBU R1QgaW4gdGhlIEdTU0FQSUFsbG93UzRVMlNlbGYtCisrCSAqIGFsb25lIGNhc2UsIG9yIGZvciB2 YWxpZCBwcm94eSB0aWNrZXRzIGZvciBldmVyeSBjb25maWd1cmVkIHNlcnZpY2UKKysJICogb3Ro ZXJ3aXNlLgorKwkgKi8KKysJaWYgKChvcHRpb25zLmdzc19hbGxvd19zNHUyc2VsZiB8fCBvcHRp b25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPiAwKSAmJgorKwkgICAgIXNzaF9nc3NhcGlfY3Jl ZGVudGlhbHNfc3RvcmVkKCkpIHsKKysJCXVfaW50IGxpZmV0aW1lID0gKCFvcHRpb25zLmdzc19h bGxvd19zNHUyc2VsZiB8fAorKwkJICAgIG9wdGlvbnMuZ3NzX2FsbG93X3M0dTJzZWxmID09IElO VF9NQVgpID8KKysJCSAgICBHU1NfQ19JTkRFRklOSVRFIDogKHVfaW50KW9wdGlvbnMuZ3NzX2Fs bG93X3M0dTJzZWxmOworKwkJaW50IHNraXAgPSAwOworKworKwkJdGVtcG9yYXJpbHlfdXNlX3Vp ZChhdXRoY3R4dC0+cHcpOworKwkJaWYgKG9wdGlvbnMuZ3NzX2FsbG93X3M0dTJzZWxmICYmCisr CQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID09IDApIHsKKysJCQkvKiBTNFUy U2VsZi1hbG9uZTogc2tpcCBpZiB1c2VyIGFscmVhZHkgaGFzIGEgdmFsaWQgVEdUICovCisrCQkJ c2tpcCA9IHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfdGd0KGxpZmV0aW1lKTsKKysJCX0gZWxz ZSBpZiAob3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID4gMCkgeworKwkJCS8qCisrCQkJ ICogUHJveHktb25seSBvciBib3RoOiBza2lwIGlmIGV2ZXJ5IGNvbmZpZ3VyZWQgc2VydmljZQor KwkJCSAqIGFscmVhZHkgaGFzIGEgdmFsaWQgdGlja2V0IGluIHRoZSB1c2VyJ3MgY2NhY2hlLgor KwkJCSAqIFNlcnZpY2UgdGlja2V0cyBhcmUgbm90IEdTU0FQSSBpbml0aWF0b3IgY3JlZGVudGlh bHMsCisrCQkJICogc28gZ3NzX2FjcXVpcmVfY3JlZCgpIGNhbm5vdCBiZSB1c2VkOyBpdGVyYXRl IHRoZQorKwkJCSAqIGNjYWNoZSB3aXRoIHRoZSBrcmI1IEFQSSBpbnN0ZWFkLgorKwkJCSAqLwor KwkJCXNraXAgPSBzc2hfZ3NzYXBpX3VzZXJfaGFzX3ZhbGlkX3Byb3h5X3RpY2tldHMoCisrCQkJ ICAgIG9wdGlvbnMuZ3NzX3Byb3h5X3NlcnZpY2VzLAorKwkJCSAgICBvcHRpb25zLm51bV9nc3Nf cHJveHlfc2VydmljZXMsCisrCQkJICAgIGxpZmV0aW1lKTsKKysJCX0KKysJCXJlc3RvcmVfdWlk KCk7CisrCisrCQlpZiAoc2tpcCkgeworKwkJCWRlYnVnX2YoInVzZXIgJS4xMDBzIGFscmVhZHkg aGFzIHZhbGlkIEtlcmJlcm9zICIKKysJCQkgICAgImNyZWRlbnRpYWxzLCBza2lwcGluZyBTNFUy U2VsZiIsCisrCQkJICAgIGF1dGhjdHh0LT51c2VyKTsKKysJCX0gZWxzZSBpZiAoc3NoX2dzc2Fw aV9zNHUyc2VsZihhdXRoY3R4dC0+dXNlciwgbGlmZXRpbWUpID09IDApIHsKKysJCQl1X2ludCBm aWx0ZXI7CisrCisrCQkJdGVtcG9yYXJpbHlfdXNlX3VpZChhdXRoY3R4dC0+cHcpOworKwkJCS8q CisrCQkJICogQWx3YXlzIGNyZWF0ZSB0aGUgY2NhY2hlIHZpYSBzdG9yZWNyZWRzX3M0dTJzZWxm IHNvCisrCQkJICogdGhhdCBzNHUycHJveHkgaGFzIGEgY2NhY2hlIHRvIHN0b3JlIHRpY2tldHMg aW50by4KKysJCQkgKiBnc3Nfa3JiNV9jb3B5X2NjYWNoZSgpIGNvcGllcyB0aGUgaG9zdCBzZXJ2 aWNlJ3Mgb3duCisrCQkJICogVEdUIGFsb25nIHdpdGggdGhlIGV2aWRlbmNlIHRpY2tldDsgZmls dGVyX2NjYWNoZQorKwkJCSAqIHJlbW92ZXMgdGhlIHRpY2tldCBjbGFzc2VzIHRoYXQgc2hvdWxk IG5vdCBiZSBrZXB0LgorKwkJCSAqLworKwkJCXNzaF9nc3NhcGlfc3RvcmVjcmVkc19zNHUyc2Vs ZigpOworKwkJCWlmIChvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPiAwKQorKwkJCQlz c2hfZ3NzYXBpX3M0dTJwcm94eSgKKysJCQkJICAgIG9wdGlvbnMuZ3NzX3Byb3h5X3NlcnZpY2Vz LAorKwkJCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzLAorKwkJCQkgICAgbGlm ZXRpbWUpOworKworKwkJCS8qCisrCQkJICogUmVtb3ZlIHRoZSBob3N0IFRHVCBvbmx5IGluIEdT U0FQSUFsbG93UzRVMlNlbGYtYWxvbmUKKysJCQkgKiBtb2RlOyB3aGVuIHByb3h5IHRpY2tldHMg YXJlIHByZXNlbnQgdGhlIFRHVCBtdXN0CisrCQkJICogc3RheSBzbyB0aGF0IGFwcGxpY2F0aW9u cyByZWNvZ25pc2UgdGhlIGNjYWNoZSBhcworKwkJCSAqIGhvbGRpbmcgbGl2ZSBLZXJiZXJvcyBj cmVkZW50aWFscy4KKysJCQkgKiBSZW1vdmUgdGhlIFM0VTJTZWxmIGV2aWRlbmNlIHRpY2tldCBp biBwcm94eS1vbmx5CisrCQkJICogbW9kZSAoR1NTQVBJUHJveHlTNFUyU2VydmljZXMgd2l0aG91 dCBHU1NBUElBbGxvd1M0VTJTZWxmKS4KKysJCQkgKi8KKysJCQlmaWx0ZXIgPSAwOworKwkJCWlm IChvcHRpb25zLmdzc19hbGxvd19zNHUyc2VsZiAmJgorKwkJCSAgICBvcHRpb25zLm51bV9nc3Nf cHJveHlfc2VydmljZXMgPT0gMCkKKysJCQkJZmlsdGVyID0gU1NIX0dTU0FQSV9DQ0ZJTFRFUl9U R1QgfAorKwkJCQkgICAgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9QUk9YWTsKKysJCQllbHNlIGlmICgh b3B0aW9ucy5nc3NfYWxsb3dfczR1MnNlbGYpCisrCQkJCWZpbHRlciA9IFNTSF9HU1NBUElfQ0NG SUxURVJfU0VMRjsKKysJCQlpZiAoZmlsdGVyICE9IDApCisrCQkJCXNzaF9nc3NhcGlfa3JiNV9m aWx0ZXJfY2NhY2hlKGZpbHRlciwKKysJCQkJICAgIG9wdGlvbnMuZ3NzX3Byb3h5X3NlcnZpY2Vz LAorKwkJCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzKTsKKysJCQlyZXN0b3Jl X3VpZCgpOworKwkJfSBlbHNlIHsKKysJCQlsb2dpdCgiUzRVMlNlbGYgZmFpbGVkIGZvciB1c2Vy ICUuMTAwcywgY29udGludWluZyIsCisrCQkJICAgIGF1dGhjdHh0LT51c2VyKTsKKysJCX0KKysJ fQorICNlbmRpZgorICNpZmRlZiBXSVRIX1NFTElOVVgKKyAJc3NoZF9zZWxpbnV4X3NldHVwX2V4 ZWNfY29udGV4dChhdXRoY3R4dC0+cHctPnB3X25hbWUsCitkaWZmIC0tZ2l0IGEvc3NoZF9jb25m aWcuNSBiL3NzaGRfY29uZmlnLjUKK2luZGV4IGJmOWVmYzg5Ny4uY2E4YTgxMzFlIDEwMDY0NAor LS0tIGEvc3NoZF9jb25maWcuNQorKysrIGIvc3NoZF9jb25maWcuNQorQEAgLTg1Nyw2ICs4NTcs NzYgQEAgRklETzItYmFzZWQgcHJlLWF1dGhlbnRpY2F0aW9uIGluIEZyZWVJUEEsIHVzaW5nIEZJ RE8yIFVTQiBhbmQgTkZDIHRva2VucworIFRoZSBkZWZhdWx0CisgLkRxIG5vbmUKKyBpcyB0byBu b3QgdXNlIEdTU0FQSSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGZvciBhY2Nlc3MgZGVjaXNp b25zLgorKy5JdCBDbSBHU1NBUElBbGxvd1M0VTJTZWxmCisrQ29udHJvbHMgd2hldGhlciB0aGUg U1NIIHNlcnZlciBwZXJmb3JtcyBhIEtlcmJlcm9zIHByb3RvY29sIHRyYW5zaXRpb24KKysoUzRV MlNlbGYpIGFmdGVyIGEgc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbiB1c2luZyBhbnkgb3RoZXIg bWV0aG9kLgorK0FjY2VwdGVkIHZhbHVlcyBhcmUKKysuQ20gbm8gLAorKy5DbSB5ZXMgLAorK29y IGEgdGltZSBpbnRlcnZhbCAoc2VlCisrLlN4IFRJTUUgRk9STUFUUworK2JlbG93KS4KKysuQ20g bm8KKytkaXNhYmxlcyBTNFUyU2VsZiBlbnRpcmVseS4KKysuQ20geWVzCisrZW5hYmxlcyBTNFUy U2VsZiBhbmQgcmVxdWVzdHMgYSB0aWNrZXQgd2l0aCB0aGUgbWF4aW11bSBsaWZldGltZQorK3Bl cm1pdHRlZCBieSB0aGUgS0RDLgorK0EgdGltZSBpbnRlcnZhbCAoZS5nLlwmCisrLkNtIDhoICwK KysuQ20gMWQgKQorK2VuYWJsZXMgUzRVMlNlbGYgYW5kIHJlcXVlc3RzIGEgdGlja2V0IHZhbGlk IGZvciBhdCBtb3N0IHRoYXQgZHVyYXRpb24uCisrVGhlIG9wdGlvbiBpcyBhIG5vLW9wIHdoZW4g ZGVsZWdhdGVkIEdTU0FQSSBjcmVkZW50aWFscyBhcmUgYWxyZWFkeSBhdmFpbGFibGUuCisrVGhl IG9idGFpbmVkIHNlcnZpY2UgdGlja2V0IGlzIHN0b3JlZCBpbiB0aGUgZGVmYXVsdCBjcmVkZW50 aWFscyBjYWNoZSBhbmQgaXMKKythY2Nlc3NpYmxlIHRvIGFueSBhcHBsaWNhdGlvbiB0aGF0IGhh cyBhY2Nlc3MgdG8gdGhlIEtlcmJlcm9zIGhvc3QgcHJpbmNpcGFsCisrLlBxIGhvc3QvbWFjaGlu ZS5mcWRuQFJFQUxNCisrY3JlZGVudGlhbHMgb24gdGhlIHNhbWUgaG9zdC4KKysuUHAKKytUaGUg ZGVmYXVsdCBpcworKy5DbSBubyAuCisrLkl0IENtIEdTU0FQSVByb3h5UzRVMlNlcnZpY2VzCisr U3BlY2lmaWVzIGEgbGlzdCBvZiBLZXJiZXJvcyBzZXJ2aWNlIHByaW5jaXBhbHMgZm9yIHdoaWNo IGNvbnN0cmFpbmVkCisrZGVsZWdhdGlvbiAoUzRVMlByb3h5KSB0aWNrZXRzIHNob3VsZCBiZSBv YnRhaW5lZCBhZnRlciBhIHN1Y2Nlc3NmdWwKKytTNFUyU2VsZiBwcm90b2NvbCB0cmFuc2l0aW9u LgorK0VhY2ggZW50cnkgbXVzdCBiZSBhIGZ1bGx5LXF1YWxpZmllZCBLZXJiZXJvcyBwcmluY2lw YWwgbmFtZSBvZiB0aGUgZm9ybQorKy5BciBzZXJ2aWNlL2hvc3RAUkVBTE0gLgorK011bHRpcGxl IHByaW5jaXBhbHMgbWF5IGJlIGxpc3RlZCwgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCisrVGhl IGtleXdvcmQKKysuQ20gbm9uZQorK2NsZWFycyBhbnkgcHJldmlvdXNseSBzZXQgbGlzdC4KKysu UHAKKytUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9mCisrLkNtIEdTU0FQ SUFsbG93UzRVMlNlbGYgLgorK1doZW4gUzRVMlNlbGYgc3VjY2VlZHMsIHRoZSBzZXJ2ZXIgaXRl cmF0ZXMgdGhlIGxpc3QgYW5kIGNhbGxzCisrLlhyIGdzc19pbml0X3NlY19jb250ZXh0IDMKKytm b3IgZWFjaCBwcmluY2lwYWwgd2l0aCB0aGUgcHJveHkgY3JlZGVudGlhbCBvYnRhaW5lZCBieSBT NFUyU2VsZiBhcworK3RoZSBpbml0aWF0b3IuCisrVGhlIEdTU0FQSSBsaWJyYXJ5IHByZXNlbnRz IHRoZSBldmlkZW5jZSB0aWNrZXQgdG8gdGhlIEtEQyB2aWEgYW4KKytTNFUyUHJveHkgVEdTLVJF UTsgaWYgdGhlIGhvc3Qgc2VydmljZSBob2xkcyB0aGUgbmVjZXNzYXJ5IGNvbnN0cmFpbmVkLQor K2RlbGVnYXRpb24gcGVybWlzc2lvbiBpbiB0aGUgS0RDLCBhIHNlcnZpY2UgdGlja2V0IGZyb20g dGhlIHVzZXIgdG8KKyt0aGUgdGFyZ2V0IHNlcnZpY2UgaXMgaXNzdWVkLgorK1RoZXNlIHRpY2tl dHMgYXJlIGFjY3VtdWxhdGVkIGFuZCB0aGVuIGZsdXNoZWQgaW50byB0aGUgdXNlcidzIGNjYWNo ZQorK3ZpYQorKy5YciBnc3Nfc3RvcmVfY3JlZCAzICwKKytzbyB0aGF0IGFueSBhcHBsaWNhdGlv biBydW5uaW5nIGluIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBjYW4gdXNlIHRoZW0KKyt3aXRob3V0IGZ1 cnRoZXIgaW50ZXJhY3Rpb24uCisrVGhlIEFQLVJFUSBvdXRwdXQgdG9rZW4gb2YgZWFjaAorKy5Y ciBnc3NfaW5pdF9zZWNfY29udGV4dCAzCisrY2FsbCBpcyBkaXNjYXJkZWQ7IG5vIG5ldHdvcmsg Y29ubmVjdGlvbiB0byB0aGUgdGFyZ2V0IHNlcnZpY2UgaXMgbWFkZS4KKysuUHAKKytXaGVuIHVz ZWQgdG9nZXRoZXIgd2l0aAorKy5DbSBHU1NBUElBbGxvd1M0VTJTZWxmICwKKyt0aGUgVEdUIGFu ZCBTNFUyU2VsZiB0aWNrZXQgYXJlIGFsc28gc3RvcmVkIGluIHRoZSB1c2VyJ3MgY2NhY2hlIGlu CisrYWRkaXRpb24gdG8gdGhlIFM0VTJQcm94eSBzZXJ2aWNlIHRpY2tldHMuCisrV2hlbiB1c2Vk IGFsb25lICh3aXRob3V0CisrLkNtIEdTU0FQSUFsbG93UzRVMlNlbGYgKSAsCisrb25seSB0aGUg UzRVMlByb3h5IHNlcnZpY2UgdGlja2V0cyBhcmUgc3RvcmVkOyB0aGUgaW50ZXJtZWRpYXRlIFM0 VTJTZWxmCisrY3JlZGVudGlhbCBpcyBub3QgcGxhY2VkIGluIHRoZSB1c2VyJ3MgY2NhY2hlLgor Ky5QcAorK1RoaXMgb3B0aW9uIHN1cHBvcnRzCisrLkNtIE1hdGNoCisrYmxvY2tzLCBhbGxvd2lu ZyBwZXItdXNlciBvciBwZXItaG9zdCBsaXN0cyBvZiBkZWxlZ2F0aW9uIHRhcmdldHMuCisrLlBw CisrVGhlIGRlZmF1bHQgaXMgZW1wdHkgKG5vIFM0VTJQcm94eSBkZWxlZ2F0aW9uIGlzIHBlcmZv cm1lZCkuCisgLkl0IENtIEhvc3RiYXNlZEFjY2VwdGVkQWxnb3JpdGhtcworIFRoZSBkZWZhdWx0 IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKKyAuWHIgY3J5cHRvLXBvbGljaWVzIDcgLgorLS0g CisyLjU1LjAKKwoKZGlmZiAtLWdpdCBhLzAwNTEtb3BlbnNzaC0xMC4ycDEtcGFtLWF1dGgucGF0 Y2ggYi8wMDUxLW9wZW5zc2gtMTAuMnAxLXBhbS1hdXRoLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA1MTI4YWYzLi4wMDAwMDAwCi0tLSBhLzAwNTEtb3BlbnNzaC0xMC4ycDEt cGFtLWF1dGgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1Gcm9tIDA0YzEz MzkyMjgwZDE4MzliMTljZmU2ZTRkYmE0OGRiM2E4YThlNzcgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBT dW4sIDEyIEFwciAyMDI2IDEyOjI1OjA0ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggNTEvNTRdIG9w ZW5zc2gtMTAuMnAxLXBhbS1hdXRoCi0KLWh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93 X2J1Zy5jZ2k/aWQ9MjQyMzkwMAotCi1Dby1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUg PG5vcmVwbHlAYW50aHJvcGljLmNvbT4KLS0tLQotIGF1dGgtcGFtLmMgfCAxMCArKysrKy0tLS0t Ci0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlm ZiAtLWdpdCBhL2F1dGgtcGFtLmMgYi9hdXRoLXBhbS5jCi1pbmRleCBkM2RjZDAzN2IuLmFhYWQx Njc2NSAxMDA2NDQKLS0tLSBhL2F1dGgtcGFtLmMKLSsrKyBiL2F1dGgtcGFtLmMKLUBAIC00NTUs NiArNDU1LDcgQEAgc3RhdGljIGludAotIGNoZWNrX3BhbV91c2VyKEF1dGhjdHh0ICphdXRoY3R4 dCkKLSB7Ci0gCWNvbnN0IGNoYXIgKnBhbV91c2VyOwotKwljb25zdCBzdHJ1Y3QgcGFzc3dkICpw YW1fcHc7Ci0gCi0gCWlmIChhdXRoY3R4dCA9PSBOVUxMIHx8IGF1dGhjdHh0LT5wdyA9PSBOVUxM IHx8Ci0gCSAgICBhdXRoY3R4dC0+cHctPnB3X25hbWUgPT0gTlVMTCkKLUBAIC00NjksMTEgKzQ3 MCwxMCBAQCBjaGVja19wYW1fdXNlcihBdXRoY3R4dCAqYXV0aGN0eHQpCi0gCQlyZXR1cm4gUEFN X1VTRVJfVU5LTk9XTjsKLSAJfQotIAotLQlpZiAoc3NocGFtX2luaXRpYWxfdXNlciA9PSBOVUxM KQotLQkJZmF0YWxfZigiaW50ZXJuYWwgZXJyb3I6IHNzaHBhbV9pbml0aWFsX3VzZXIgTlVMTCIp OwotLQlpZiAoc3RyY21wKHNzaHBhbV9pbml0aWFsX3VzZXIsIHBhbV91c2VyKSAhPSAwKSB7Ci0t CQllcnJvcl9mKCJQQU0gdXNlciBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXMgXCIlc1wi IiwKLS0JCSAgICAgIHBhbV91c2VyLCBzc2hwYW1faW5pdGlhbF91c2VyKTsKLSsJcGFtX3B3ID0g Z2V0cHduYW0ocGFtX3VzZXIpOwotKwlpZiAocGFtX3B3ID09IE5VTEwgfHwgcGFtX3B3LT5wd191 aWQgIT0gYXV0aGN0eHQtPnB3LT5wd191aWQpIHsKLSsJCWRlYnVnKCJQQU0gdXNlciBcIiVzXCIg ZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgXCIlc1wiIiwKLSsJCSAgICAgIHBhbV91c2VyLCBhdXRo Y3R4dC0+cHctPnB3X25hbWUpOwotIAkJcmV0dXJuIFBBTV9VU0VSX1VOS05PV047Ci0gCX0KLSAJ cmV0dXJuIFBBTV9TVUNDRVNTOwotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAwNTItZ3Nz YXBpLXM0dS5wYXRjaCBiLzAwNTItZ3NzYXBpLXM0dS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggOGIzYjJjMi4uMDAwMDAwMAotLS0gYS8wMDUyLWdzc2FwaS1zNHUucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSwxMDc3ICswLDAgQEAKLUZyb20gZjYyOWJlYjBmYjA5NGZmZWE4 MzI3Njk5YTk0MmJhM2MxODBmNWUwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERt aXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMTIgQXByIDIw MjYgMTI6MjU6MjEgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA1Mi81NF0gZ3NzYXBpLXM0dQotCi1D by1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT4K LS0tLQotIGF1dGgta3JiNS5jICAgICB8ICAxMyArKwotIGNvbmZpZ3VyZS5hYyAgICB8ICAxMCAr LQotIGdzcy1zZXJ2LWtyYjUuYyB8IDIyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0g Z3NzLXNlcnYuYyAgICAgIHwgMzg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLQotIHNlcnZjb25mLmMgICAgICB8ICA1OCArKysrKysrKwotIHNlcnZjb25m LmggICAgICB8ICAgNCArCi0gc3NoLWdzcy5oICAgICAgIHwgIDEzICsrCi0gc3NoZC1zZXNzaW9u LmMgIHwgIDk4ICsrKysrKysrKysrKwotIHNzaGRfY29uZmlnLjUgICB8ICA3MCArKysrKysrKysK LSA5IGZpbGVzIGNoYW5nZWQsIDg2MSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKLQot ZGlmZiAtLWdpdCBhL2F1dGgta3JiNS5jIGIvYXV0aC1rcmI1LmMKLWluZGV4IDI4N2JkZDM1YS4u N2Q0ZmJjYzNkIDEwMDY0NAotLS0tIGEvYXV0aC1rcmI1LmMKLSsrKyBiL2F1dGgta3JiNS5jCi1A QCAtNDYzLDYgKzQ2MywxOSBAQCBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGtyYjVfY29udGV4dCBj dHgsIGtyYjVfY2NhY2hlICpjY2FjaGUsIGludCAqbmVlZF9lbnZpcm9ubQotIAkgKiBhIHByaW1h cnkgY2FjaGUgZm9yIHRoaXMgY29sbGVjdGlvbiwgaWYgaXQgc3VwcG9ydHMgdGhhdCAobm9uLUZJ TEUpCi0gCSAqLwotIAlpZiAoa3JiNV9jY19zdXBwb3J0X3N3aXRjaChjdHgsIHR5cGUpKSB7Ci0r CQkvKgotKwkJICogRm9yIGNvbGxlY3Rpb24tdHlwZSBjYWNoZXMgKEtDTSwgS0VZUklORywg4oCm KSByZXVzZSB0aGUKLSsJCSAqIGV4aXN0aW5nIHByaW1hcnkgY2NhY2hlIHdoZW4gb25lIGlzIGFs cmVhZHkgcHJlc2VudC4gIFRoZQotKwkJICogY2FsbGVyIHdpbGwgcmVpbml0aWFsaXNlIGl0IHdp dGgga3JiNV9jY19pbml0aWFsaXplKCksIHNvCi0rCQkgKiBpdHMgb2xkIGNvbnRlbnRzIGFyZSBy ZXBsYWNlZCByYXRoZXIgdGhhbiBvcnBoYW5lZC4gIE9ubHkKLSsJCSAqIGNyZWF0ZSBhIGZyZXNo IHVuaXF1ZSBjY2FjaGUgd2hlbiBubyBwcmltYXJ5IGV4aXN0cyB5ZXQuCi0rCQkgKi8KLSsJCWlm IChrcmI1X2NjX2RlZmF1bHQoY3R4LCBjY2FjaGUpID09IDApIHsKLSsJCQlkZWJ1ZzNfZigicmV1 c2luZyBleGlzdGluZyBkZWZhdWx0IGNjYWNoZSBvZiB0eXBlICVzIiwKLSsJCQkgICAgdHlwZSk7 Ci0rCQkJZnJlZSh0eXBlKTsKLSsJCQlyZXR1cm4gMDsKLSsJCX0KLSAJCWRlYnVnM19mKCJjYWxs aW5nIGNjX25ld191bmlxdWUoJXMpIiwgY2NuYW1lKTsKLSAJCXJldCA9IGtyYjVfY2NfbmV3X3Vu aXF1ZShjdHgsIHR5cGUsIE5VTEwsIGNjYWNoZSk7Ci0gCQlmcmVlKHR5cGUpOwotZGlmZiAtLWdp dCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggMTM4OGU1ZTcyLi42MmIyYmY5 ZTcgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTUx NDUsMTEgKzUxNDUsMTcgQEAgQUNfQVJHX1dJVEgoW2tlcmJlcm9zNV0sCi0gIyBpbmNsdWRlIDxn c3NhcGlfZ2VuZXJpYy5oPgotICNlbGlmIGRlZmluZWQoSEFWRV9HU1NBUElfR1NTQVBJX0dFTkVS SUNfSCkKLSAjIGluY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgotKyNlbmRpZgotKyNp ZmRlZiBIQVZFX0dTU0FQSV9FWFRfSAotKyMgaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9leHQuaD4K LSsjZW5kaWYKLSsjaWZkZWYgSEFWRV9HU1NBUElfS1JCNV9ICi0rIyBpbmNsdWRlIDxnc3NhcGkv Z3NzYXBpX2tyYjUuaD4KLSAjZW5kaWYKLSAJCV1dKQotIAkJc2F2ZWRfTElCUz0iJExJQlMiCi0t CQlMSUJTPSIkTElCUyAkSzVMSUJTIgotLQkJQUNfQ0hFQ0tfRlVOQ1MoW2tyYjVfY2NfbmV3X3Vu aXF1ZSBrcmI1X2dldF9lcnJvcl9tZXNzYWdlIGtyYjVfZnJlZV9lcnJvcl9tZXNzYWdlXSkKLSsJ CUxJQlM9IiRMSUJTICRHU1NMSUJTICRLNUxJQlMgIgotKwkJQUNfQ0hFQ0tfRlVOQ1MoW2tyYjVf Y2NfbmV3X3VuaXF1ZSBrcmI1X2dldF9lcnJvcl9tZXNzYWdlIGtyYjVfZnJlZV9lcnJvcl9tZXNz YWdlIGdzc19hY3F1aXJlX2NyZWRfZnJvbV0pCi0gCQlMSUJTPSIkc2F2ZWRfTElCUyIKLSAKLSAJ ZmkKLWRpZmYgLS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMgYi9nc3Mtc2Vydi1rcmI1LmMKLWluZGV4 IGZjN2NhYmMwOS4uMDZkNDUwZDRkIDEwMDY0NAotLS0tIGEvZ3NzLXNlcnYta3JiNS5jCi0rKysg Yi9nc3Mtc2Vydi1rcmI1LmMKLUBAIC02MDksNiArNjA5LDIzMSBAQCBzc2hfZ3NzYXBpX2tyYjVf dXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlLAotIAlyZXR1cm4gMTsKLSB9Ci0g Ci0rLyoKLSsgKiBDaGVjayB3aGV0aGVyIHRoZSB1c2VyJ3MgZGVmYXVsdCBjY2FjaGUgYWxyZWFk eSBjb250YWlucyB2YWxpZCBzZXJ2aWNlCi0rICogdGlja2V0cyBmb3IgYWxsIHByaW5jaXBhbHMg bGlzdGVkIGluIHNlcnZpY2VzW10uICBSZXR1cm5zIDEgaWYgZXZlcnkKLSsgKiBsaXN0ZWQgc2Vy dmljZSBoYXMgYSB0aWNrZXQgd2l0aCBhdCBsZWFzdCBtaW5fbGlmZXRpbWUgc2Vjb25kcyByZW1h aW5pbmcKLSsgKiAocGFzcyBHU1NfQ19JTkRFRklOSVRFIHRvIGFjY2VwdCBhbnkgcG9zaXRpdmUg cmVtYWluaW5nIGxpZmV0aW1lKSwgMCBpZgotKyAqIGFueSB0aWNrZXQgaXMgbWlzc2luZyBvciB0 b28gY2xvc2UgdG8gZXhwaXJ5LiAgUnVucyBhcyB0aGUgdXNlci4KLSsgKgotKyAqIFVubGlrZSBz c2hfZ3NzYXBpX3VzZXJfaGFzX3ZhbGlkX3RndCgpLCB0aGlzIGNhbm5vdCB1c2UgZ3NzX2FjcXVp cmVfY3JlZCgpCi0rICogYmVjYXVzZSBzZXJ2aWNlIHRpY2tldHMgYXJlIG5vdCBpbml0aWF0b3Ig Y3JlZGVudGlhbHMg4oCUIEdTU0FQSSBvbmx5Ci0rICogc3VyZmFjZXMgVEdUcyB2aWEgdGhhdCBB UEkuICBXZSBpdGVyYXRlIHRoZSBjY2FjaGUgd2l0aCB0aGUga3JiNSBBUEkKLSsgKiBkaXJlY3Rs eSBpbnN0ZWFkLgotKyAqLwotK2ludAotK3NzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfcHJveHlf dGlja2V0cyhjaGFyICoqc2VydmljZXMsIHVfaW50IG5zZXJ2aWNlcywKLSsgICAgdV9pbnQgbWlu X2xpZmV0aW1lKQotK3sKLSsJa3JiNV9jb250ZXh0IGN0eCA9IE5VTEw7Ci0rCWtyYjVfY2NhY2hl IGNjID0gTlVMTDsKLSsJa3JiNV9jY19jdXJzb3IgY3Vyc29yOwotKwlrcmI1X2NyZWRzIGNyZWQ7 Ci0rCWtyYjVfcHJpbmNpcGFsIHN2Y19wcmluYzsKLSsJaW50ICpmb3VuZCA9IE5VTEw7Ci0rCXVf aW50IGk7Ci0rCWludCBhbGxfZm91bmQgPSAwOwotKwl0aW1lX3Qgbm93OwotKwotKwlpZiAobnNl cnZpY2VzID09IDApCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKGtyYjVfaW5pdF9jb250ZXh0KCZj dHgpICE9IDApCi0rCQlyZXR1cm4gMDsKLSsKLSsJZm91bmQgPSB4Y2FsbG9jKG5zZXJ2aWNlcywg c2l6ZW9mKCpmb3VuZCkpOwotKwlub3cgPSB0aW1lKE5VTEwpOwotKwotKwlpZiAoa3JiNV9jY19k ZWZhdWx0KGN0eCwgJmNjKSAhPSAwKQotKwkJZ290byBvdXQ7Ci0rCi0rCWlmIChrcmI1X2NjX3N0 YXJ0X3NlcV9nZXQoY3R4LCBjYywgJmN1cnNvcikgIT0gMCkgewotKwkJa3JiNV9jY19jbG9zZShj dHgsIGNjKTsKLSsJCWNjID0gTlVMTDsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0rCXdoaWxlIChr cmI1X2NjX25leHRfY3JlZChjdHgsIGNjLCAmY3Vyc29yLCAmY3JlZCkgPT0gMCkgewotKwkJLyoK LSsJCSAqIFVzZSBrcmI1X3ByaW5jaXBhbF9jb21wYXJlKCkgc28gdGhhdCBzZXJ2aWNlIG5hbWVz Ci0rCQkgKiBjb25maWd1cmVkIHdpdGhvdXQgYW4gZXhwbGljaXQgcmVhbG0gKGtyYjVfcGFyc2Vf bmFtZQotKwkJICogYXBwZW5kcyB0aGUgZGVmYXVsdCByZWFsbSkgc3RpbGwgbWF0Y2ggdGhlIGZ1 bGx5LQotKwkJICogcXVhbGlmaWVkIHByaW5jaXBhbCBzdG9yZWQgaW4gdGhlIGNjYWNoZS4KLSsJ CSAqLwotKwkJZm9yIChpID0gMDsgaSA8IG5zZXJ2aWNlczsgaSsrKSB7Ci0rCQkJaWYgKGZvdW5k W2ldKQotKwkJCQljb250aW51ZTsKLSsJCQlpZiAoa3JiNV9wYXJzZV9uYW1lKGN0eCwgc2Vydmlj ZXNbaV0sCi0rCQkJICAgICZzdmNfcHJpbmMpICE9IDApCi0rCQkJCWNvbnRpbnVlOwotKwkJCWlm IChrcmI1X3ByaW5jaXBhbF9jb21wYXJlKGN0eCwKLSsJCQkgICAgY3JlZC5zZXJ2ZXIsIHN2Y19w cmluYykpIHsKLSsJCQkJa3JiNV9kZWx0YXQgcmVtYWluaW5nID0KLSsJCQkJICAgIGNyZWQudGlt ZXMuZW5kdGltZSAtIG5vdzsKLSsJCQkJaWYgKHJlbWFpbmluZyA+IDAgJiYKLSsJCQkJICAgICht aW5fbGlmZXRpbWUgPT0gR1NTX0NfSU5ERUZJTklURSB8fAotKwkJCQkgICAgIChrcmI1X2RlbHRh dCltaW5fbGlmZXRpbWUgPD0gcmVtYWluaW5nKSkKLSsJCQkJCWZvdW5kW2ldID0gMTsKLSsJCQl9 Ci0rCQkJa3JiNV9mcmVlX3ByaW5jaXBhbChjdHgsIHN2Y19wcmluYyk7Ci0rCQl9Ci0rCQlrcmI1 X2ZyZWVfY3JlZF9jb250ZW50cyhjdHgsICZjcmVkKTsKLSsJfQotKwlrcmI1X2NjX2VuZF9zZXFf Z2V0KGN0eCwgY2MsICZjdXJzb3IpOwotKwlrcmI1X2NjX2Nsb3NlKGN0eCwgY2MpOwotKwljYyA9 IE5VTEw7Ci0rCi0rCWFsbF9mb3VuZCA9IDE7Ci0rCWZvciAoaSA9IDA7IGkgPCBuc2VydmljZXM7 IGkrKykgewotKwkJaWYgKCFmb3VuZFtpXSkgewotKwkJCWFsbF9mb3VuZCA9IDA7Ci0rCQkJYnJl YWs7Ci0rCQl9Ci0rCX0KLStvdXQ6Ci0rCWZyZWUoZm91bmQpOwotKwlpZiAoY3R4ICE9IE5VTEwp Ci0rCQlrcmI1X2ZyZWVfY29udGV4dChjdHgpOwotKwlyZXR1cm4gYWxsX2ZvdW5kOwotK30KLSsK LSsvKiBBcyB1c2VyIC0gY2FsbGVkIG9uIGZhdGFsL2V4aXQgKi8KLSt2b2lkCi0rc3NoX2dzc2Fw aV9jbGVhbnVwX2NyZWRzKHZvaWQpCi0rewotKwlzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUgPSBz c2hfZ3NzYXBpX2dldF9jY2FjaGUoKTsKLSsJa3JiNV9jY2FjaGUgY2NhY2hlID0gTlVMTDsKLSsJ a3JiNV9lcnJvcl9jb2RlIHByb2JsZW07Ci0rCi0rCWlmIChzdG9yZS0+ZGF0YSAhPSBOVUxMKSB7 Ci0rCQlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX3Jlc29sdmUoc3RvcmUtPmRhdGEsCi0rCQkgICAg c3RvcmUtPmVudnZhbCwgJmNjYWNoZSkpKSB7Ci0rCQkJZGVidWdfZigia3JiNV9jY19yZXNvbHZl KCk6ICUuMTAwcyIsCi0rCQkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KHN0b3JlLT5kYXRhLCBwcm9i bGVtKSk7Ci0rCQl9IGVsc2UgaWYgKChwcm9ibGVtID0ga3JiNV9jY19kZXN0cm95KHN0b3JlLT5k YXRhLCBjY2FjaGUpKSkgewotKwkJCWRlYnVnX2YoImtyYjVfY2NfZGVzdHJveSgpOiAlLjEwMHMi LAotKwkJCSAgICBrcmI1X2dldF9lcnJfdGV4dChzdG9yZS0+ZGF0YSwgcHJvYmxlbSkpOwotKwkJ fSBlbHNlIHsKLSsJCQlrcmI1X2ZyZWVfY29udGV4dChzdG9yZS0+ZGF0YSk7Ci0rCQkJc3RvcmUt PmRhdGEgPSBOVUxMOwotKwkJfQotKwl9Ci0rfQotKwotKy8qCi0rICogRmlsdGVyIHRoZSB1c2Vy J3MgY2NhY2hlIGJ5IHJlbW92aW5nIHRoZSB0aWNrZXQgY2xhc3NlcyBpbmRpY2F0ZWQgYnkKLSsg KiBkcm9wX2ZsYWdzIChTU0hfR1NTQVBJX0NDRklMVEVSXyogYml0bWFzaykuICBFYWNoIGNyZWRl bnRpYWwgaXMKLSsgKiBjYXRlZ29yaXNlZCBhcyBvbmUgb2Y6Ci0rICogICBUR1QgICAtIHNlcnZl ciBwcmluY2lwYWwgbWF0Y2hlcyAia3JidGd0LyIgcHJlZml4Ci0rICogICBQUk9YWSAtIHNlcnZl ciBwcmluY2lwYWwgbWF0Y2hlcyBvbmUgb2YgcHJveHlfc2VydmljZXNbXQotKyAqICAgU0VMRiAg LSBldmVyeXRoaW5nIGVsc2UgKHRoZSBTNFUyU2VsZiBldmlkZW5jZSB0aWNrZXQpCi0rICogQ3Jl ZGVudGlhbHMgaW4gYSBmbGFnZ2VkIGNhdGVnb3J5IGFyZSBkaXNjYXJkZWQ7IHRoZSByZXN0IGFy ZSB3cml0dGVuCi0rICogYmFjayBhZnRlciByZWluaXRpYWxpc2luZyB0aGUgY2NhY2hlLiAgUnVu cyBhcyB1c2VyLgotKyAqLwotK3ZvaWQKLStzc2hfZ3NzYXBpX2tyYjVfZmlsdGVyX2NjYWNoZSh1 X2ludCBkcm9wX2ZsYWdzLAotKyAgICBjaGFyICoqcHJveHlfc2VydmljZXMsIHVfaW50IG5wcm94 eV9zZXJ2aWNlcykKLSt7Ci0rCXNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSA9IHNzaF9nc3NhcGlf Z2V0X2NjYWNoZSgpOwotKwlrcmI1X2NvbnRleHQgY3R4ID0gKGtyYjVfY29udGV4dClzdG9yZS0+ ZGF0YTsKLSsJa3JiNV9jY2FjaGUgY2MgPSBOVUxMOwotKwlrcmI1X2NjX2N1cnNvciBjdXJzb3I7 Ci0rCWtyYjVfY3JlZHMgKmtlZXAgPSBOVUxMOwotKwlrcmI1X3ByaW5jaXBhbCBwcmluYyA9IE5V TEw7Ci0rCWtyYjVfZXJyb3JfY29kZSBwcm9ibGVtOwotKwljaGFyICpzcnZuYW1lOwotKwl1X2lu dCBpLCBua2VlcCA9IDAsIGNhcCA9IDA7Ci0rCWludCBpc190Z3QsIGlzX3Byb3h5LCBkcm9wOwot KwotKwlpZiAoY3R4ID09IE5VTEwgfHwgc3RvcmUtPmVudnZhbCA9PSBOVUxMKQotKwkJcmV0dXJu OwotKwotKwlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX3Jlc29sdmUoY3R4LCBzdG9yZS0+ZW52dmFs LCAmY2MpKSAhPSAwKSB7Ci0rCQlkZWJ1Z19mKCJrcmI1X2NjX3Jlc29sdmU6ICUuMTAwcyIsCi0r CQkgICAga3JiNV9nZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVtKSk7Ci0rCQlyZXR1cm47Ci0rCX0K LSsJaWYgKChwcm9ibGVtID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGN0eCwgY2MsICZwcmluYykp ICE9IDApIHsKLSsJCWRlYnVnX2YoImtyYjVfY2NfZ2V0X3ByaW5jaXBhbDogJS4xMDBzIiwKLSsJ CSAgICBrcmI1X2dldF9lcnJfdGV4dChjdHgsIHByb2JsZW0pKTsKLSsJCWtyYjVfY2NfY2xvc2Uo Y3R4LCBjYyk7Ci0rCQlyZXR1cm47Ci0rCX0KLSsJaWYgKChwcm9ibGVtID0ga3JiNV9jY19zdGFy dF9zZXFfZ2V0KGN0eCwgY2MsICZjdXJzb3IpKSAhPSAwKSB7Ci0rCQlkZWJ1Z19mKCJrcmI1X2Nj X3N0YXJ0X3NlcV9nZXQ6ICUuMTAwcyIsCi0rCQkgICAga3JiNV9nZXRfZXJyX3RleHQoY3R4LCBw cm9ibGVtKSk7Ci0rCQlrcmI1X2ZyZWVfcHJpbmNpcGFsKGN0eCwgcHJpbmMpOwotKwkJa3JiNV9j Y19jbG9zZShjdHgsIGNjKTsKLSsJCXJldHVybjsKLSsJfQotKwotKwl7Ci0rCQlrcmI1X2NyZWRz IGNyZWQ7Ci0rCQlrcmI1X3ByaW5jaXBhbCBzdmNfcHJpbmM7Ci0rCQl3aGlsZSAoa3JiNV9jY19u ZXh0X2NyZWQoY3R4LCBjYywgJmN1cnNvciwgJmNyZWQpID09IDApIHsKLSsJCQlpc190Z3QgPSBp c19wcm94eSA9IDA7Ci0rCQkJaWYgKGtyYjVfdW5wYXJzZV9uYW1lKGN0eCwgY3JlZC5zZXJ2ZXIs Ci0rCQkJICAgICZzcnZuYW1lKSA9PSAwKSB7Ci0rCQkJCWlzX3RndCA9IHN0cm5jbXAoc3J2bmFt ZSwgImtyYnRndC8iLCA3KSA9PSAwOwotKwkJCQlrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShjdHgs IHNydm5hbWUpOwotKwkJCX0KLSsJCQlpZiAoIWlzX3RndCkgewotKwkJCQkvKgotKwkJCQkgKiBV c2Uga3JiNV9wcmluY2lwYWxfY29tcGFyZSgpIHJhdGhlciB0aGFuCi0rCQkJCSAqIHN0cmNtcCgp IHNvIHRoYXQgYSBzZXJ2aWNlIG5hbWUgY29uZmlndXJlZAotKwkJCQkgKiB3aXRob3V0IGFuIGV4 cGxpY2l0IHJlYWxtIChrcmI1X3BhcnNlX25hbWUKLSsJCQkJICogYXBwZW5kcyB0aGUgZGVmYXVs dCByZWFsbSkgc3RpbGwgbWF0Y2hlcwotKwkJCQkgKiB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUg aW4gdGhlIGNjYWNoZS4KLSsJCQkJICovCi0rCQkJCWZvciAoaSA9IDA7IGkgPCBucHJveHlfc2Vy dmljZXM7IGkrKykgewotKwkJCQkJaWYgKGtyYjVfcGFyc2VfbmFtZShjdHgsCi0rCQkJCQkgICAg cHJveHlfc2VydmljZXNbaV0sICZzdmNfcHJpbmMpICE9IDApCi0rCQkJCQkJY29udGludWU7Ci0r CQkJCQlpZiAoa3JiNV9wcmluY2lwYWxfY29tcGFyZShjdHgsCi0rCQkJCQkgICAgY3JlZC5zZXJ2 ZXIsIHN2Y19wcmluYykpCi0rCQkJCQkJaXNfcHJveHkgPSAxOwotKwkJCQkJa3JiNV9mcmVlX3By aW5jaXBhbChjdHgsIHN2Y19wcmluYyk7Ci0rCQkJCQlpZiAoaXNfcHJveHkpCi0rCQkJCQkJYnJl YWs7Ci0rCQkJCX0KLSsJCQl9Ci0rCQkJaWYgKGlzX3RndCkKLSsJCQkJZHJvcCA9IGRyb3BfZmxh Z3MgJiBTU0hfR1NTQVBJX0NDRklMVEVSX1RHVDsKLSsJCQllbHNlIGlmIChpc19wcm94eSkKLSsJ CQkJZHJvcCA9IGRyb3BfZmxhZ3MgJiBTU0hfR1NTQVBJX0NDRklMVEVSX1BST1hZOwotKwkJCWVs c2UKLSsJCQkJZHJvcCA9IGRyb3BfZmxhZ3MgJiBTU0hfR1NTQVBJX0NDRklMVEVSX1NFTEY7Ci0r Ci0rCQkJaWYgKCFkcm9wKSB7Ci0rCQkJCWlmIChua2VlcCA+PSBjYXApIHsKLSsJCQkJCWNhcCA9 IGNhcCA/IGNhcCAqIDIgOiA0OwotKwkJCQkJa2VlcCA9IHhyZWFsbG9jYXJyYXkoa2VlcCwgY2Fw LAotKwkJCQkJICAgIHNpemVvZigqa2VlcCkpOwotKwkJCQl9Ci0rCQkJCWtlZXBbbmtlZXArK10g PSBjcmVkOwotKwkJCX0gZWxzZQotKwkJCQlrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhjdHgsICZj cmVkKTsKLSsJCX0KLSsJfQotKwlrcmI1X2NjX2VuZF9zZXFfZ2V0KGN0eCwgY2MsICZjdXJzb3Ip OwotKwotKwlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX2luaXRpYWxpemUoY3R4LCBjYywgcHJpbmMp KSAhPSAwKSB7Ci0rCQlsb2dpdF9mKCJrcmI1X2NjX2luaXRpYWxpemU6ICUuMTAwcyIsCi0rCQkg ICAga3JiNV9nZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVtKSk7Ci0rCX0gZWxzZSB7Ci0rCQlmb3Ig KGkgPSAwOyBpIDwgbmtlZXA7IGkrKykKLSsJCQlrcmI1X2NjX3N0b3JlX2NyZWQoY3R4LCBjYywg JmtlZXBbaV0pOwotKwkJZGVidWdfZigiY2NhY2hlIGZpbHRlciAweCV4OiByZXRhaW5lZCAldSB0 aWNrZXQocykiLAotKwkJICAgIGRyb3BfZmxhZ3MsIG5rZWVwKTsKLSsJfQotKwotKwlmb3IgKGkg PSAwOyBpIDwgbmtlZXA7IGkrKykKLSsJCWtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGN0eCwgJmtl ZXBbaV0pOwotKwlmcmVlKGtlZXApOwotKwlrcmI1X2ZyZWVfcHJpbmNpcGFsKGN0eCwgcHJpbmMp OwotKwlrcmI1X2NjX2Nsb3NlKGN0eCwgY2MpOwotK30KLSsKLSBzc2hfZ3NzYXBpX21lY2ggZ3Nz YXBpX2tlcmJlcm9zX21lY2ggPSB7Ci0gCSJ0b1dNNVNsdzVFdzhNcWtheSthbDJnPT0iLAotIAki S2VyYmVyb3MiLAotZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LmMgYi9nc3Mtc2Vydi5jCi1pbmRleCA2 ODZhYzRlYjMuLjI2ZDBhMTNhNiAxMDA2NDQKLS0tLSBhL2dzcy1zZXJ2LmMKLSsrKyBiL2dzcy1z ZXJ2LmMKLUBAIC01NSw3ICs1NSw3IEBAIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0g Ci0gc3RhdGljIHNzaF9nc3NhcGlfY2xpZW50IGdzc2FwaV9jbGllbnQgPQotICAgICB7IEdTU19D X0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFMLAot LSAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0s IDAsIDAsIE5VTEx9OwotKyAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5VTEwsIDB9OwotIAotIHNzaF9nc3NhcGlfbWVjaCBnc3Nh cGlfbnVsbF9tZWNoID0KLSAgICAgeyBOVUxMLCBOVUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEx9OwotQEAgLTQ4OCwyNiArNDg4LDM4MiBAQCBzc2hfZ3NzYXBpX2dl dGNsaWVudChHc3NjdHh0ICpjdHgsIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCi0gCXJldHVy biAoY3R4LT5tYWpvcik7Ci0gfQotIAotLS8qIEFzIHVzZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhp dCAqLwotKy8qIFJldHVybnMgbm9uLXplcm8gaWYgS2VyYmVyb3MgY3JlZGVudGlhbHMgaGF2ZSBh bHJlYWR5IGJlZW4gc3RvcmVkLiAqLwotK2ludAotK3NzaF9nc3NhcGlfY3JlZGVudGlhbHNfc3Rv cmVkKHZvaWQpCi0rewotKwlyZXR1cm4gZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwgIT0gTlVM TDsKLSt9Ci0rCi0rLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNyZWRlbnRpYWwtY2FjaGUg ZGVzY3JpcHRvciBmb3IgdGhpcyBzZXNzaW9uLiAqLwotK3NzaF9nc3NhcGlfY2NhY2hlICoKLStz c2hfZ3NzYXBpX2dldF9jY2FjaGUodm9pZCkKLSt7Ci0rCXJldHVybiAmZ3NzYXBpX2NsaWVudC5z dG9yZTsKLSt9Ci0rCi0rLyogTG9nIGh1bWFuLXJlYWRhYmxlIEdTU0FQSSBtYWpvciBhbmQgbWlu b3Igc3RhdHVzIHN0cmluZ3MuICovCi0rc3RhdGljIHZvaWQKLStsb2dfZ3NzX2Vycm9yKE9NX3Vp bnQzMiBtYWpvciwgT01fdWludDMyIG1pbm9yLCBjb25zdCBjaGFyICpsYWJlbCkKLSt7Ci0rCU9N X3VpbnQzMiBsbWluLCBtY3R4OwotKwlnc3NfYnVmZmVyX2Rlc2MgZW1zZyA9IEdTU19DX0VNUFRZ X0JVRkZFUjsKLSsKLSsJbWN0eCA9IDA7Ci0rCWRvIHsKLSsJCWdzc19kaXNwbGF5X3N0YXR1cygm bG1pbiwgbWFqb3IsIEdTU19DX0dTU19DT0RFLAotKwkJICAgIEdTU19DX05PX09JRCwgJm1jdHgs ICZlbXNnKTsKLSsJCWxvZ2l0KCIlczogJS4qcyIsIGxhYmVsLCAoaW50KWVtc2cubGVuZ3RoLCAo Y2hhciAqKWVtc2cudmFsdWUpOwotKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZW1zZyk7 Ci0rCX0gd2hpbGUgKG1jdHggIT0gMCk7Ci0rCi0rCW1jdHggPSAwOwotKwlkbyB7Ci0rCQlnc3Nf ZGlzcGxheV9zdGF0dXMoJmxtaW4sIG1pbm9yLCBHU1NfQ19NRUNIX0NPREUsCi0rCQkgICAgJmdz c2FwaV9rZXJiZXJvc19tZWNoLm9pZCwgJm1jdHgsICZlbXNnKTsKLSsJCWlmIChlbXNnLmxlbmd0 aCA+IDApCi0rCQkJbG9naXQoIiVzOiAlLipzIiwgbGFiZWwsCi0rCQkJICAgIChpbnQpZW1zZy5s ZW5ndGgsIChjaGFyICopZW1zZy52YWx1ZSk7Ci0rCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxtaW4s ICZlbXNnKTsKLSsJfSB3aGlsZSAobWN0eCAhPSAwKTsKLSt9Ci0rCi0rLyogTG9nIHRoZSBjYW5v bmljYWwgc3RyaW5nIGZvcm0gb2YgYSBHU1NBUEkgbmFtZSBhcyBhIGRlYnVnIG1lc3NhZ2UuICov Ci0rc3RhdGljIHZvaWQKLStkZWJ1Z19nc3NfbmFtZShjb25zdCBjaGFyICpsYWJlbCwgZ3NzX25h bWVfdCBuYW1lKQotK3sKLSsJT01fdWludDMyIGxtaW47Ci0rCWdzc19idWZmZXJfZGVzYyBidWYg PSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0rCi0rCWlmIChnc3NfZGlzcGxheV9uYW1lKCZsbWluLCBu YW1lLCAmYnVmLCBOVUxMKSA9PSBHU1NfU19DT01QTEVURSkgewotKwkJZGVidWdfZigiJXM6ICUu KnMiLCBsYWJlbCwgKGludClidWYubGVuZ3RoLCAoY2hhciAqKWJ1Zi52YWx1ZSk7Ci0rCQlnc3Nf cmVsZWFzZV9idWZmZXIoJmxtaW4sICZidWYpOwotKwl9Ci0rfQotKwotKy8qCi0rICogQ2hlY2sg d2hldGhlciB0aGUgdXNlciBhbHJlYWR5IGhhcyB2YWxpZCBHU1NBUEkgaW5pdGlhdG9yIGNyZWRl bnRpYWxzCi0rICogKGUuZy4gYSBLZXJiZXJvcyBUR1QpIGluIHRoZWlyIGRlZmF1bHQgY3JlZGVu dGlhbCBzdG9yZSB3aXRoIGF0IGxlYXN0Ci0rICogbWluX2xpZmV0aW1lIHNlY29uZHMgcmVtYWlu aW5nLiAgUGFzcyBHU1NfQ19JTkRFRklOSVRFIHRvIGFjY2VwdCBhbnkKLSsgKiBwb3NpdGl2ZSBy ZW1haW5pbmcgbGlmZXRpbWUuICBSdW5zIGFzIHRoZSB1c2VyLgotKyAqIFJldHVybnMgMSBpZiBz dWZmaWNpZW50IGNyZWRlbnRpYWxzIGV4aXN0LCAwIG90aGVyd2lzZS4KLSsgKi8KLStpbnQKLStz c2hfZ3NzYXBpX3VzZXJfaGFzX3ZhbGlkX3RndCh1X2ludCBtaW5fbGlmZXRpbWUpCi0rewotKwlP TV91aW50MzIgbWFqb3IsIG1pbm9yLCBsaWZldGltZSA9IDA7Ci0rCWdzc19jcmVkX2lkX3QgY3Jl ZCA9IEdTU19DX05PX0NSRURFTlRJQUw7Ci0rCWludCBmb3VuZCA9IDA7Ci0rCi0rCW1ham9yID0g Z3NzX2FjcXVpcmVfY3JlZCgmbWlub3IsIEdTU19DX05PX05BTUUsIEdTU19DX0lOREVGSU5JVEUs Ci0rCSAgICBHU1NfQ19OT19PSURfU0VULCBHU1NfQ19JTklUSUFURSwgJmNyZWQsIE5VTEwsICZs aWZldGltZSk7Ci0rCWlmICghR1NTX0VSUk9SKG1ham9yKSAmJiBsaWZldGltZSA+IDAgJiYKLSsJ ICAgIChtaW5fbGlmZXRpbWUgPT0gR1NTX0NfSU5ERUZJTklURSB8fCBsaWZldGltZSA+PSBtaW5f bGlmZXRpbWUpKQotKwkJZm91bmQgPSAxOwotKwlpZiAoY3JlZCAhPSBHU1NfQ19OT19DUkVERU5U SUFMKQotKwkJZ3NzX3JlbGVhc2VfY3JlZCgmbWlub3IsICZjcmVkKTsKLSsJcmV0dXJuIGZvdW5k OwotK30KLSsKLSsKLSsvKgotKyAqIFBlcmZvcm0gUzRVMlNlbGYgKHByb3RvY29sIHRyYW5zaXRp b24pOiBhY3F1aXJlIGEgS2VyYmVyb3Mgc2VydmljZSB0aWNrZXQKLSsgKiBmb3IgdGhlIFNTSCB1 c2VyIG9uIGJlaGFsZiBvZiB0aGUgaG9zdCBwcmluY2lwYWwuICBSdW5zIHByaXZpbGVnZWQuCi0r ICogUG9wdWxhdGVzIGdzc2FwaV9jbGllbnQue2NyZWRzLG1lY2gsZGlzcGxheW5hbWUsZXhwb3J0 ZWRuYW1lfSBvbiBzdWNjZXNzLgotKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWls dXJlLgotKyAqLwotKy8qIFByaXZpbGVnZWQgKi8KLStpbnQKLStzc2hfZ3NzYXBpX3M0dTJzZWxm KGNvbnN0IGNoYXIgKnVzZXIsIHVfaW50IGxpZmV0aW1lKQotK3sKLSsJT01fdWludDMyIG1ham9y LCBtaW5vciwgc3RhdHVzOwotKwlnc3NfT0lEX3NldCBvaWRzZXQgPSBHU1NfQ19OT19PSURfU0VU OwotKwlnc3NfbmFtZV90IGhvc3RfbmFtZSA9IEdTU19DX05PX05BTUU7Ci0rCWdzc19uYW1lX3Qg dXNlcl9uYW1lID0gR1NTX0NfTk9fTkFNRTsKLSsJZ3NzX2NyZWRfaWRfdCBob3N0X2NyZWRzID0g R1NTX0NfTk9fQ1JFREVOVElBTDsKLSsJZ3NzX2NyZWRfaWRfdCBpbXBlcnNvbmF0ZWRfY3JlZHMg PSBHU1NfQ19OT19DUkVERU5USUFMOwotKwlnc3NfYnVmZmVyX2Rlc2MgZ3NzYnVmLCBkaXNwbGF5 bmFtZSA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJY2hhciBsbmFtZVtOSV9NQVhIT1NUXTsKLSsJ Y2hhciAqdmFsOwotKwotKwlpZiAoZ2V0aG9zdG5hbWUobG5hbWUsIHNpemVvZihsbmFtZSkpICE9 IDApIHsKLSsJCWxvZ2l0X2YoImdldGhvc3RuYW1lOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0r CQlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsJLyogQWNxdWlyZSBhY2NlcHRvciBjcmVkZW50aWFsIGZv ciBob3N0LyBmcm9tIHRoZSBrZXl0YWIgKi8KLSsJZ3NzX2NyZWF0ZV9lbXB0eV9vaWRfc2V0KCZz dGF0dXMsICZvaWRzZXQpOwotKwlnc3NfYWRkX29pZF9zZXRfbWVtYmVyKCZzdGF0dXMsICZnc3Nh cGlfa2VyYmVyb3NfbWVjaC5vaWQsICZvaWRzZXQpOwotKwotKwl4YXNwcmludGYoJnZhbCwgImhv c3RAJXMiLCBsbmFtZSk7Ci0rCWdzc2J1Zi52YWx1ZSA9IHZhbDsKLSsJZ3NzYnVmLmxlbmd0aCA9 IHN0cmxlbih2YWwpOwotKwltYWpvciA9IGdzc19pbXBvcnRfbmFtZSgmbWlub3IsICZnc3NidWYs Ci0rCSAgICBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSwgJmhvc3RfbmFtZSk7Ci0rCWZyZWUo dmFsKTsKLSsJaWYgKEdTU19FUlJPUihtYWpvcikpIHsKLSsJCWxvZ2l0X2YoImdzc19pbXBvcnRf bmFtZSAoaG9zdCkgZmFpbGVkIik7Ci0rCQlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZv aWRzZXQpOwotKwkJcmV0dXJuIC0xOwotKwl9Ci0rCWRlYnVnX2dzc19uYW1lKCJob3N0IG5hbWUg cGFyc2VkIGFzIiwgaG9zdF9uYW1lKTsKLSsKLSsJZGVidWdfZigiYWNxdWlyaW5nIGhvc3QgY3Jl ZGVudGlhbHMgYXMgdWlkPSV1IGV1aWQ9JXUsIHByaW5jaXBhbD1ob3N0QCVzIiwKLSsJICAgICh1 bnNpZ25lZClnZXR1aWQoKSwgKHVuc2lnbmVkKWdldGV1aWQoKSwgbG5hbWUpOwotKwkjaWZkZWYg SEFWRV9HU1NfQUNRVUlSRV9DUkVEX0ZST00KLSsJewotKyMgaWYgZGVmaW5lZChLUkI1KQotKwkJ LyoKLSsJCSAqIFJlc29sdmUgdGhlIGtleXRhYiBwYXRoOiBrcmI1X2t0X2RlZmF1bHRfbmFtZSBy ZXNwZWN0cwotKwkJICogS1JCNV9LVE5BTUUgYW5kIGtyYjUuY29uZiBkZWZhdWx0X2tleXRhYl9u YW1lLgotKwkJICovCi0rCQljaGFyIGtleXRhYl9uYW1lW01BWFBBVEhMRU5dOwotKwkJa3JiNV9j b250ZXh0IHRtcF9jdHg7Ci0rCi0rCi0rCQlrZXl0YWJfbmFtZVswXSA9ICdcMCc7Ci0rCQlpZiAo a3JiNV9pbml0X2NvbnRleHQoJnRtcF9jdHgpID09IDApIHsKLSsJCQkodm9pZClrcmI1X2t0X2Rl ZmF1bHRfbmFtZSh0bXBfY3R4LCBrZXl0YWJfbmFtZSwKLSsJCQkgICAgc2l6ZW9mKGtleXRhYl9u YW1lKSk7Ci0rCQkJa3JiNV9mcmVlX2NvbnRleHQodG1wX2N0eCk7Ci0rCQl9Ci0rCQlpZiAoa2V5 dGFiX25hbWVbMF0gPT0gJ1wwJykKLSsJCQlzdHJsY3B5KGtleXRhYl9uYW1lLCAiRklMRTovZXRj L2tyYjUua2V5dGFiIiwKLSsJCQkgICAgc2l6ZW9mKGtleXRhYl9uYW1lKSk7Ci0rCQkvKgotKwkJ ICogY2xpZW50X2tleXRhYiBsZXRzIEdTU0FQSSBkbyBBUy1SRVEgdG8gb2J0YWluIGEgVEdUIGZv ciB0aGUKLSsJCSAqIGhvc3QgcHJpbmNpcGFsIChpbml0aWF0b3Igcm9sZSBuZWVkZWQgZm9yIFM0 VTJTZWxmKS4KLSsJCSAqIGtleXRhYiBjb3ZlcnMgdGhlIGFjY2VwdG9yIHJvbGUuCi0rCQkgKiBj Y2FjaGU6IE1FTU9SWToga2VlcHMgdGhlIHJlc3VsdGluZyBUR1Qgdm9sYXRpbGUuCi0rCQkgKi8K LSsJCWdzc19rZXlfdmFsdWVfZWxlbWVudF9kZXNjIHN0b3JlX2VsZW1lbnRzW10gPSB7Ci0rCQkJ eyAiY2xpZW50X2tleXRhYiIsIGtleXRhYl9uYW1lIH0sCi0rCQkJeyAia2V5dGFiIiwga2V5dGFi X25hbWUgfSwKLSsJCQl7ICJjY2FjaGUiLCAiTUVNT1JZOiIgfSwKLSsJCX07Ci0rCQljb25zdCBn c3Nfa2V5X3ZhbHVlX3NldF9kZXNjIGNyZWRfc3RvcmUgPSB7IDMsIHN0b3JlX2VsZW1lbnRzIH07 Ci0rIyBlbHNlCi0rCQlnc3Nfa2V5X3ZhbHVlX2VsZW1lbnRfZGVzYyBzdG9yZV9lbGVtZW50c1td ID0gewotKwkJCXsgImNjYWNoZSIsICJNRU1PUlk6IiB9LAotKwkJfTsKLSsJCWNvbnN0IGdzc19r ZXlfdmFsdWVfc2V0X2Rlc2MgY3JlZF9zdG9yZSA9IHsgMSwgc3RvcmVfZWxlbWVudHMgfTsKLSsj IGVuZGlmCi0rCi0rCi0rCQltYWpvciA9IGdzc19hY3F1aXJlX2NyZWRfZnJvbSgmbWlub3IsIGhv c3RfbmFtZSwgbGlmZXRpbWUsCi0rCQkgICAgb2lkc2V0LCBHU1NfQ19CT1RILCAmY3JlZF9zdG9y ZSwgJmhvc3RfY3JlZHMsIE5VTEwsIE5VTEwpOwotKwl9Ci0rI2Vsc2UKLSsJbWFqb3IgPSBnc3Nf YWNxdWlyZV9jcmVkKCZtaW5vciwgaG9zdF9uYW1lLCBsaWZldGltZSwKLSsJICAgIG9pZHNldCwg R1NTX0NfQk9USCwgJmhvc3RfY3JlZHMsIE5VTEwsIE5VTEwpOwotKyNlbmRpZgotKwlnc3NfcmVs ZWFzZV9uYW1lKCZtaW5vciwgJmhvc3RfbmFtZSk7Ci0rCWlmIChHU1NfRVJST1IobWFqb3IpKSB7 Ci0rCQlsb2dpdF9mKCJnc3NfYWNxdWlyZV9jcmVkKGhvc3RAJXMpIGZhaWxlZCBhcyB1aWQ9JXUg ZXVpZD0ldSIsCi0rCQkgICAgbG5hbWUsICh1bnNpZ25lZClnZXR1aWQoKSwgKHVuc2lnbmVkKWdl dGV1aWQoKSk7Ci0rCQlsb2dfZ3NzX2Vycm9yKG1ham9yLCBtaW5vciwgIlM0VTJTZWxmOiBnc3Nf YWNxdWlyZV9jcmVkIik7Ci0rCQlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQp OwotKwkJcmV0dXJuIC0xOwotKwl9Ci0rCi0rCS8qIEltcG9ydCB0aGUgU1NIIHVzZXJuYW1lIGFz IGEgR1NTQVBJL0tlcmJlcm9zIG5hbWUgKi8KLSsJZ3NzYnVmLnZhbHVlID0gKHZvaWQgKil1c2Vy OwotKwlnc3NidWYubGVuZ3RoID0gc3RybGVuKHVzZXIpOwotKwltYWpvciA9IGdzc19pbXBvcnRf bmFtZSgmbWlub3IsICZnc3NidWYsCi0rCSAgICBHU1NfQ19OVF9VU0VSX05BTUUsICZ1c2VyX25h bWUpOwotKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgewotKwkJbG9naXRfZigiZ3NzX2ltcG9ydF9u YW1lICh1c2VyKSBmYWlsZWQiKTsKLSsJCWdzc19yZWxlYXNlX2NyZWQoJm1pbm9yLCAmaG9zdF9j cmVkcyk7Ci0rCQlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOwotKwkJcmV0 dXJuIC0xOwotKwl9Ci0rCWRlYnVnX2dzc19uYW1lKCJ1c2VyIG5hbWUgcGFyc2VkIGFzIiwgdXNl cl9uYW1lKTsKLSsKLSsJLyogUzRVMlNlbGY6IG9idGFpbiBhIHNlcnZpY2UgdGlja2V0IGZvciB0 aGUgdXNlciB3aXRob3V0IHRoZWlyIGNyZWRzICovCi0rCWRlYnVnX2YoImNhbGxpbmcgZ3NzX2Fj cXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9uYW1lIGZvciB1c2VyICUuMTAwcyIsIHVzZXIpOwotKwlt YWpvciA9IGdzc19hY3F1aXJlX2NyZWRfaW1wZXJzb25hdGVfbmFtZSgmbWlub3IsCi0rCSAgICBo b3N0X2NyZWRzLCB1c2VyX25hbWUsIGxpZmV0aW1lLAotKwkgICAgb2lkc2V0LCBHU1NfQ19JTklU SUFURSwKLSsJICAgICZpbXBlcnNvbmF0ZWRfY3JlZHMsIE5VTEwsIE5VTEwpOwotKwotKwlnc3Nf cmVsZWFzZV9jcmVkKCZtaW5vciwgJmhvc3RfY3JlZHMpOwotKwlnc3NfcmVsZWFzZV9vaWRfc2V0 KCZzdGF0dXMsICZvaWRzZXQpOwotKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgewotKwkJbG9naXRf ZigiZ3NzX2FjcXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9uYW1lIGZhaWxlZCBmb3IgJS4xMDBzIiwK LSsJCSAgICB1c2VyKTsKLSsJCWxvZ19nc3NfZXJyb3IobWFqb3IsIG1pbm9yLAotKwkJICAgICJT NFUyU2VsZjogZ3NzX2FjcXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9uYW1lIik7Ci0rCQlnc3NfcmVs ZWFzZV9uYW1lKCZtaW5vciwgJnVzZXJfbmFtZSk7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsJ LyogR2V0IHRoZSBkaXNwbGF5IG5hbWUgKEtlcmJlcm9zIHByaW5jaXBhbCBzdHJpbmcpIGZvciBz dG9yZWNyZWRzICovCi0rCW1ham9yID0gZ3NzX2Rpc3BsYXlfbmFtZSgmbWlub3IsIHVzZXJfbmFt ZSwgJmRpc3BsYXluYW1lLCBOVUxMKTsKLSsJZ3NzX3JlbGVhc2VfbmFtZSgmbWlub3IsICZ1c2Vy X25hbWUpOwotKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgewotKwkJbG9naXRfZigiZ3NzX2Rpc3Bs YXlfbmFtZSBmYWlsZWQiKTsKLSsJCWdzc19yZWxlYXNlX2NyZWQoJm1pbm9yLCAmaW1wZXJzb25h dGVkX2NyZWRzKTsKLSsJCXJldHVybiAtMTsKLSsJfQotKwotKwkvKiBQb3B1bGF0ZSBnc3NhcGlf Y2xpZW50IGZvciBzdG9yZWNyZWRzX3M0dTJzZWxmIGFuZCBzNHUycHJveHkgKi8KLSsJZ3NzYXBp X2NsaWVudC5tZWNoID0gJmdzc2FwaV9rZXJiZXJvc19tZWNoOwotKwlnc3NhcGlfY2xpZW50LmNy ZWRzID0gaW1wZXJzb25hdGVkX2NyZWRzOwotKwlnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1lLnZh bHVlID0geG1hbGxvYyhkaXNwbGF5bmFtZS5sZW5ndGggKyAxKTsKLSsJbWVtY3B5KGdzc2FwaV9j bGllbnQuZGlzcGxheW5hbWUudmFsdWUsCi0rCSAgICBkaXNwbGF5bmFtZS52YWx1ZSwgZGlzcGxh eW5hbWUubGVuZ3RoKTsKLSsJKChjaGFyICopZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZS52YWx1 ZSlbZGlzcGxheW5hbWUubGVuZ3RoXSA9ICdcMCc7Ci0rCWdzc2FwaV9jbGllbnQuZGlzcGxheW5h bWUubGVuZ3RoID0gZGlzcGxheW5hbWUubGVuZ3RoOwotKwkvKgotKwkgKiBleHBvcnRlZG5hbWUg aXMgdXNlZCBieSBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcyDihpIga3JiNV9wYXJzZV9uYW1l LgotKwkgKiBnc3NfZGlzcGxheV9uYW1lIGZvciBhIHVzZXItbmFtZSByZXR1cm5zIHRoZSBjYW5v bmljYWwgcHJpbmNpcGFsCi0rCSAqIHN0cmluZyAoZS5nLiB1c2VyQFJFQUxNKSB3aGljaCBrcmI1 X3BhcnNlX25hbWUgY2FuIGNvbnN1bWUgZGlyZWN0bHkuCi0rCSAqLwotKwlnc3NhcGlfY2xpZW50 LmV4cG9ydGVkbmFtZS52YWx1ZSA9IHhtYWxsb2MoZGlzcGxheW5hbWUubGVuZ3RoICsgMSk7Ci0r CW1lbWNweShnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS52YWx1ZSwKLSsJICAgIGRpc3BsYXlu YW1lLnZhbHVlLCBkaXNwbGF5bmFtZS5sZW5ndGgpOwotKwkoKGNoYXIgKilnc3NhcGlfY2xpZW50 LmV4cG9ydGVkbmFtZS52YWx1ZSlbZGlzcGxheW5hbWUubGVuZ3RoXSA9ICdcMCc7Ci0rCWdzc2Fw aV9jbGllbnQuZXhwb3J0ZWRuYW1lLmxlbmd0aCA9IGRpc3BsYXluYW1lLmxlbmd0aDsKLSsKLSsJ Z3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vciwgJmRpc3BsYXluYW1lKTsKLSsJZGVidWdfZigiUzRV MlNlbGYgc3VjY2VlZGVkIGZvciAlLjEwMHMiLCB1c2VyKTsKLSsJcmV0dXJuIDA7Ci0rfQotKwot Ky8qIEFzIHVzZXIg4oCUIHdyaXRlIHRoZSBTNFUyU2VsZiB0aWNrZXQgaW50byBhIG5ldyBjY2Fj aGUgdmlhIG1lY2gtPnN0b3JlY3JlZHMgKi8KLSB2b2lkCi0tc3NoX2dzc2FwaV9jbGVhbnVwX2Ny ZWRzKHZvaWQpCi0rc3NoX2dzc2FwaV9zdG9yZWNyZWRzX3M0dTJzZWxmKHZvaWQpCi0gewotLQlr cmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOwotLQlrcmI1X2Vycm9yX2NvZGUgcHJvYmxlbTsKLS0K LS0JaWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSAhPSBOVUxMKSB7Ci0tCQlpZiAoKHByb2Js ZW0gPSBrcmI1X2NjX3Jlc29sdmUoZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhLCBnc3NhcGlfY2xp ZW50LnN0b3JlLmVudnZhbCwgJmNjYWNoZSkpKSB7Ci0tCQkJZGVidWdfZigia3JiNV9jY19yZXNv bHZlKCk6ICUuMTAwcyIsCi0tCQkJCWtyYjVfZ2V0X2Vycl90ZXh0KGdzc2FwaV9jbGllbnQuc3Rv cmUuZGF0YSwgcHJvYmxlbSkpOwotLQkJfSBlbHNlIGlmICgocHJvYmxlbSA9IGtyYjVfY2NfZGVz dHJveShnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEsIGNjYWNoZSkpKSB7Ci0tCQkJZGVidWdfZigi a3JiNV9jY19kZXN0cm95KCk6ICUuMTAwcyIsCi0tCQkJCWtyYjVfZ2V0X2Vycl90ZXh0KGdzc2Fw aV9jbGllbnQuc3RvcmUuZGF0YSwgcHJvYmxlbSkpOwotLQkJfSBlbHNlIHsKLS0JCQlrcmI1X2Zy ZWVfY29udGV4dChnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEpOwotLQkJCWdzc2FwaV9jbGllbnQu c3RvcmUuZGF0YSA9IE5VTEw7Ci0rCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggPT0gTlVMTCB8fCBn c3NhcGlfY2xpZW50Lm1lY2gtPnN0b3JlY3JlZHMgPT0gTlVMTCkgewotKwkJZGVidWdfZigibm8g R1NTQVBJIG1lY2hhbmlzbSBmb3Igc3RvcmluZyBTNFUyU2VsZiBjcmVkZW50aWFscyIpOwotKwkJ cmV0dXJuOwotKwl9Ci0rCSgqZ3NzYXBpX2NsaWVudC5tZWNoLT5zdG9yZWNyZWRzKSgmZ3NzYXBp X2NsaWVudCk7Ci0rfQotKwotKy8qCi0rICogUGVyZm9ybSBTNFUyUHJveHkgZm9yIGVhY2ggY29u ZmlndXJlZCBzZXJ2aWNlIHByaW5jaXBhbCwgdGhlbiBmbHVzaCBhbGwKLSsgKiByZXN1bHRpbmcg dGlja2V0cyBpbnRvIHRoZSB1c2VyJ3MgY2NhY2hlLiAgUnVucyBhcyB1c2VyLCBhZnRlcgotKyAq IHNzaF9nc3NhcGlfc3RvcmVjcmVkc19zNHUyc2VsZigpIGhhcyBjcmVhdGVkIHRoZSBjY2FjaGUu Ci0rICoKLSsgKiBnc3NhcGlfY2xpZW50LmNyZWRzICh0aGUgUzRVMlNlbGYgcHJveHkgY3JlZGVu dGlhbCkgaXMgcGFzc2VkIGFzIHRoZQotKyAqIGluaXRpYXRvciB0byBnc3NfaW5pdF9zZWNfY29u dGV4dCgpOyB0aGUgR1NTQVBJIGxpYnJhcnkgcHJlc2VudHMgdGhlIFRHVAotKyAqIGFuZCBldmlk ZW5jZSB0aWNrZXQgdG8gdGhlIEtEQyB2aWEgUzRVMlByb3h5IFRHUy1SRVEuICBUaGUgb3V0cHV0 IHRva2VuCi0rICogKEFQLVJFUSkgaXMgZGlzY2FyZGVkIOKAlCB3ZSBkbyBub3QgY29ubmVjdCB0 byB0aGUgdGFyZ2V0IHNlcnZpY2UuCi0rICoKLSsgKiBBZnRlciBpdGVyYXRpbmcgYWxsIHNlcnZp Y2VzLCBnc3Nfc3RvcmVfY3JlZCgpIGZsdXNoZXMgdGhlIGFjY3VtdWxhdGVkCi0rICogcHJveHkg c2VydmljZSB0aWNrZXRzIGZyb20gdGhlIGNyZWRlbnRpYWwncyBpbnRlcm5hbCBjY2FjaGUgaW50 byB0aGUKLSsgKiBLUkI1Q0NOQU1FIGNjYWNoZSB0aGF0IHN0b3JlY3JlZHNfczR1MnNlbGYoKSBh bHJlYWR5IGNyZWF0ZWQuCi0rICovCi0rLyogQXMgdXNlciAqLwotK3ZvaWQKLStzc2hfZ3NzYXBp X3M0dTJwcm94eShjaGFyICoqc2VydmljZXMsIHVfaW50IG5zZXJ2aWNlcywgdV9pbnQgbGlmZXRp bWUpCi0rewotKwlPTV91aW50MzIgbWFqb3IsIG1pbm9yOwotKwlnc3NfYnVmZmVyX2Rlc2Mgc2Vy dmljZV9idWYsIG91dHB1dF90b2tlbiA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJZ3NzX25hbWVf dCB0YXJnZXRfbmFtZTsKLSsJZ3NzX2N0eF9pZF90IGN0eDsKLSsJdV9pbnQgaTsKLSsKLSsJaWYg KGdzc2FwaV9jbGllbnQuY3JlZHMgPT0gR1NTX0NfTk9fQ1JFREVOVElBTCkgewotKwkJZGVidWdf Zigibm8gcHJveHkgY3JlZGVudGlhbCBhdmFpbGFibGUiKTsKLSsJCXJldHVybjsKLSsJfQotKwlp ZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwgPT0gTlVMTCkgewotKwkJZGVidWdfZigibm8g Y2NhY2hlIHBhdGggc2V0OyBjYW5ub3Qgc3RvcmUgcHJveHkgdGlja2V0cyIpOwotKwkJcmV0dXJu OwotKwl9Ci0rCi0rCWRlYnVnX2YoInN0YXJ0aW5nIFM0VTJQcm94eSBhcyB1aWQ9JXUgZXVpZD0l dSwgJXUgc2VydmljZShzKSwgY2NhY2hlPSVzIiwKLSsJICAgICh1bnNpZ25lZClnZXR1aWQoKSwg KHVuc2lnbmVkKWdldGV1aWQoKSwgbnNlcnZpY2VzLAotKwkgICAgZ3NzYXBpX2NsaWVudC5zdG9y ZS5lbnZ2YWwpOwotKwotKwkvKiBQb2ludCB0aGUgR1NTQVBJIGxpYnJhcnkgYXQgdGhlIHVzZXIn cyBjY2FjaGUgZm9yIHRpY2tldCBzdG9yYWdlICovCi0rCXNldGVudigiS1JCNUNDTkFNRSIsIGdz c2FwaV9jbGllbnQuc3RvcmUuZW52dmFsLCAxKTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IG5zZXJ2 aWNlczsgaSsrKSB7Ci0rCQljdHggPSBHU1NfQ19OT19DT05URVhUOwotKwkJdGFyZ2V0X25hbWUg PSBHU1NfQ19OT19OQU1FOwotKwotKwkJc2VydmljZV9idWYudmFsdWUgPSBzZXJ2aWNlc1tpXTsK LSsJCXNlcnZpY2VfYnVmLmxlbmd0aCA9IHN0cmxlbihzZXJ2aWNlc1tpXSk7Ci0rCi0rCQkvKgot KwkJICogR1NTX0NfTk9fT0lEOiBsZXQgdGhlIGxpYnJhcnkgZGV0ZXJtaW5lIHRoZSBuYW1lIHR5 cGUuCi0rCQkgKiBXaXRoIEtlcmJlcm9zIGFzIHRoZSBhY3RpdmUgbWVjaGFuaXNtLCBhIGZ1bGx5 LXF1YWxpZmllZAotKwkJICogcHJpbmNpcGFsIGxpa2UgInN2Yy9ob3N0QFJFQUxNIiBpcyBwYXJz ZWQgY29ycmVjdGx5LgotKwkJICovCi0rCQltYWpvciA9IGdzc19pbXBvcnRfbmFtZSgmbWlub3Is ICZzZXJ2aWNlX2J1ZiwKLSsJCSAgICBHU1NfQ19OT19PSUQsICZ0YXJnZXRfbmFtZSk7Ci0rCQlp ZiAoR1NTX0VSUk9SKG1ham9yKSkgewotKwkJCWxvZ2l0X2YoImdzc19pbXBvcnRfbmFtZSBmYWls ZWQgZm9yICUuMjAwcyIsCi0rCQkJICAgIHNlcnZpY2VzW2ldKTsKLSsJCQlsb2dfZ3NzX2Vycm9y KG1ham9yLCBtaW5vciwgIlM0VTJQcm94eTogZ3NzX2ltcG9ydF9uYW1lIik7Ci0rCQkJY29udGlu dWU7Ci0gCQl9Ci0rCQlkZWJ1Z19nc3NfbmFtZSgidGFyZ2V0IHNlcnZpY2UgbmFtZSBwYXJzZWQg YXMiLCB0YXJnZXRfbmFtZSk7Ci0rCi0rCQlkZWJ1Z19mKCJjYWxsaW5nIGdzc19pbml0X3NlY19j b250ZXh0IGZvciAlLjIwMHMiLCBzZXJ2aWNlc1tpXSk7Ci0rCQltYWpvciA9IGdzc19pbml0X3Nl Y19jb250ZXh0KCZtaW5vciwKLSsJCSAgICBnc3NhcGlfY2xpZW50LmNyZWRzLAkJLyogcHJveHkg Y3JlZGVudGlhbCAqLwotKwkJICAgICZjdHgsIHRhcmdldF9uYW1lLAotKwkJICAgIEdTU19DX05P X09JRCwJCQkvKiBkZWZhdWx0IG1lY2ggKEtlcmJlcm9zKSAqLwotKwkJICAgIDAsCQkJCQkvKiBu byBmbGFncywgbm8gbXV0dWFsIGF1dGggKi8KLSsJCSAgICBsaWZldGltZSwKLSsJCSAgICBHU1Nf Q19OT19DSEFOTkVMX0JJTkRJTkdTLAotKwkJICAgIEdTU19DX05PX0JVRkZFUiwJCQkvKiBubyBp bnB1dCB0b2tlbiAqLwotKwkJICAgIE5VTEwsCQkJCS8qIGFjdHVhbF9tZWNoX3R5cGUgKi8KLSsJ CSAgICAmb3V0cHV0X3Rva2VuLAotKwkJICAgIE5VTEwsCQkJCS8qIHJldF9mbGFncyAqLwotKwkJ ICAgIE5VTEwpOwkJCQkvKiB0aW1lX3JlYyAqLwotKwotKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZt aW5vciwgJm91dHB1dF90b2tlbik7Ci0rCQlnc3NfcmVsZWFzZV9uYW1lKCZtaW5vciwgJnRhcmdl dF9uYW1lKTsKLSsJCWlmIChjdHggIT0gR1NTX0NfTk9fQ09OVEVYVCkKLSsJCQlnc3NfZGVsZXRl X3NlY19jb250ZXh0KCZtaW5vciwgJmN0eCwgR1NTX0NfTk9fQlVGRkVSKTsKLSsKLSsJCWlmIChH U1NfRVJST1IobWFqb3IpKSB7Ci0rCQkJbG9naXRfZigiUzRVMlByb3h5IGZvciAlLjIwMHMgb24g YmVoYWxmIG9mICUuMjAwcyBmYWlsZWQiLAotKwkJCSAgICBzZXJ2aWNlc1tpXSwKLSsJCQkgICAg KGNoYXIgKilnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1lLnZhbHVlKTsKLSsJCQlsb2dfZ3NzX2Vy cm9yKG1ham9yLCBtaW5vciwKLSsJCQkgICAgIlM0VTJQcm94eTogZ3NzX2luaXRfc2VjX2NvbnRl eHQiKTsKLSsJCX0gZWxzZQotKwkJCWRlYnVnX2YoIlM0VTJQcm94eSB0aWNrZXQgb2J0YWluZWQg Zm9yICUuMjAwcyIsCi0rCQkJICAgIHNlcnZpY2VzW2ldKTsKLSAJfQotKwotKwkvKgotKwkgKiBG bHVzaCBhbGwgcHJveHkgc2VydmljZSB0aWNrZXRzIGZyb20gdGhlIGNyZWRlbnRpYWwncyBpbnRl cm5hbAotKwkgKiBjY2FjaGUgaW50byB0aGUgS1JCNUNDTkFNRSBjY2FjaGUgdmlhIGdzc19zdG9y ZV9jcmVkKCkuCi0rCSAqLwotKwltYWpvciA9IGdzc19zdG9yZV9jcmVkKCZtaW5vciwgZ3NzYXBp X2NsaWVudC5jcmVkcywgR1NTX0NfSU5JVElBVEUsCi0rCSAgICBHU1NfQ19OT19PSUQsIDEgLyog b3ZlcndyaXRlX2NyZWQgKi8sIDEgLyogZGVmYXVsdF9jcmVkICovLAotKwkgICAgTlVMTCwgTlVM TCk7Ci0rCWlmIChHU1NfRVJST1IobWFqb3IpKSB7Ci0rCQlsb2dpdF9mKCJnc3Nfc3RvcmVfY3Jl ZCBmYWlsZWQ7IHByb3h5IHRpY2tldHMgbWF5IGJlIG1pc3NpbmciKTsKLSsJCWxvZ19nc3NfZXJy b3IobWFqb3IsIG1pbm9yLCAiUzRVMlByb3h5OiBnc3Nfc3RvcmVfY3JlZCIpOwotKwl9Ci0rCi0r CXVuc2V0ZW52KCJLUkI1Q0NOQU1FIik7Ci0rfQotKwotKyNpZm5kZWYgS1JCNQotKy8qIEFzIHVz ZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhpdDsgZnVsbCBpbXBsZW1lbnRhdGlvbiBpbiBnc3Mtc2Vy di1rcmI1LmMgKi8KLSt2b2lkCi0rc3NoX2dzc2FwaV9jbGVhbnVwX2NyZWRzKHZvaWQpCi0rewot K30KLSsKLSsvKgotKyAqIEZpbHRlciB0aGUgdXNlcidzIGNjYWNoZTsgZnVsbCBpbXBsZW1lbnRh dGlvbiBpbiBnc3Mtc2Vydi1rcmI1LmMuCi0rICovCi0rdm9pZAotK3NzaF9nc3NhcGlfa3JiNV9m aWx0ZXJfY2NhY2hlKHVfaW50IGRyb3BfZmxhZ3MsCi0rICAgIGNoYXIgKipwcm94eV9zZXJ2aWNl cywgdV9pbnQgbnByb3h5X3NlcnZpY2VzKQotK3sKLSB9Ci0rI2VuZGlmIC8qICFLUkI1ICovCi0g Ci0gLyogQXMgdXNlciAqLwotIGludAotZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29u Zi5jCi1pbmRleCBmNGQ2YjE5ZGQuLmUwNWEzMTU4NCAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmMK LSsrKyBiL3NlcnZjb25mLmMKLUBAIC0xNDksNiArMTQ5LDkgQEAgaW5pdGlhbGl6ZV9zZXJ2ZXJf b3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAlvcHRpb25zLT5nc3NfaW5kaWNhdG9y cyA9IE5VTEw7Ci0gCW9wdGlvbnMtPmdzc19zdG9yZV9yZWtleSA9IC0xOwotIAlvcHRpb25zLT5n c3Nfa2V4X2FsZ29yaXRobXMgPSBOVUxMOwotKwlvcHRpb25zLT5nc3NfYWxsb3dfczR1MnNlbGYg PSAtMTsKLSsJb3B0aW9ucy0+Z3NzX3Byb3h5X3NlcnZpY2VzID0gTlVMTDsKLSsJb3B0aW9ucy0+ bnVtX2dzc19wcm94eV9zZXJ2aWNlcyA9IDA7Ci0gCW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gLTE7 Ci0gCW9wdGlvbnMtPmVuYWJsZV9rNXVzZXJzID0gLTE7Ci0gCW9wdGlvbnMtPnBhc3N3b3JkX2F1 dGhlbnRpY2F0aW9uID0gLTE7Ci1AQCAtNDA2LDYgKzQwOSw4IEBAIGZpbGxfZGVmYXVsdF9zZXJ2 ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAkJb3B0aW9ucy0+Z3NzX2RlbGVn X2NyZWRzID0gMTsKLSAJaWYgKG9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPT0gLTEpCi0g CQlvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2VwdG9yID0gMTsKLSsJaWYgKG9wdGlvbnMtPmdzc19h bGxvd19zNHUyc2VsZiA9PSAtMSkKLSsJCW9wdGlvbnMtPmdzc19hbGxvd19zNHUyc2VsZiA9IDA7 Ci0gCWlmIChvcHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkgPT0gLTEpCi0gCQlvcHRpb25zLT5nc3Nf c3RvcmVfcmVrZXkgPSAwOwotICNpZmRlZiBHU1NBUEkKLUBAIC02MDMsNiArNjA4LDcgQEAgdHlw ZWRlZiBlbnVtIHsKLSAJc0hvc3RLZXlBbGdvcml0aG1zLCBzUGVyU291cmNlTWF4U3RhcnR1cHMs IHNQZXJTb3VyY2VOZXRCbG9ja1NpemUsCi0gCXNQZXJTb3VyY2VQZW5hbHRpZXMsIHNQZXJTb3Vy Y2VQZW5hbHR5RXhlbXB0TGlzdCwKLSAJc0NsaWVudEFsaXZlSW50ZXJ2YWwsIHNDbGllbnRBbGl2 ZUNvdW50TWF4LCBzQXV0aG9yaXplZEtleXNGaWxlLAotKwlzR3NzQWxsb3dTNFUyU2VsZiwgc0dz c1Byb3h5UzRVMlNlcnZpY2VzLAotIAlzR3NzQXV0aGVudGljYXRpb24sIHNHc3NDbGVhbnVwQ3Jl ZHMsIHNHc3NEZWxlZ2F0ZUNyZWRzLCBzR3NzRW5hYmxlazV1c2Vycywgc0dzc1N0cmljdEFjY2Vw dG9yLAotIAlzR3NzSW5kaWNhdG9ycywgc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywgc0dz c1N0b3JlUmVrZXksCi0gCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCi1AQCAt NzAyLDYgKzcwOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJnc3NhcGlrZXhhbGdvcml0aG1z Iiwgc0dzc0tleEFsZ29yaXRobXMsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpZW5hYmxl azV1c2VycyIsIHNHc3NFbmFibGVrNXVzZXJzLCBTU0hDRkdfQUxMIH0sCi0gCXsgImdzc2FwaWlu ZGljYXRvcnMiLCBzR3NzSW5kaWNhdG9ycywgU1NIQ0ZHX0FMTCB9LAotKwl7ICJnc3NhcGlhbGxv d3M0dTJzZWxmIiwgc0dzc0FsbG93UzRVMlNlbGYsIFNTSENGR19BTEwgfSwKLSsJeyAiZ3NzYXBp cHJveHlzNHUyc2VydmljZXMiLCBzR3NzUHJveHlTNFUyU2VydmljZXMsIFNTSENGR19BTEwgfSwK LSAjZWxzZQotIAl7ICJnc3NhcGlhdXRoZW50aWNhdGlvbiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZH X0FMTCB9LAotIAl7ICJnc3NhcGljbGVhbnVwY3JlZGVudGlhbHMiLCBzVW5zdXBwb3J0ZWQsIFNT SENGR19HTE9CQUwgfSwKLUBAIC03MTMsNiArNzIxLDggQEAgc3RhdGljIHN0cnVjdCB7Ci0gCXsg Imdzc2FwaWtleGFsZ29yaXRobXMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJ eyAiZ3NzYXBpZW5hYmxlazV1c2VycyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotIAl7 ICJnc3NhcGlpbmRpY2F0b3JzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCi0rCXsgImdz c2FwaWFsbG93czR1MnNlbGYiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKLSsJeyAiZ3Nz YXBpcHJveHlzNHUyc2VydmljZXMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKLSAjZW5k aWYKLSAJeyAiZ3NzdXNlc2Vzc2lvbmNjYWNoZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JB TCB9LAotIAl7ICJnc3NhcGl1c2VzZXNzaW9uY3JlZGNhY2hlIiwgc1Vuc3VwcG9ydGVkLCBTU0hD RkdfR0xPQkFMIH0sCi1AQCAtMTc1NCw2ICsxNzY0LDQ0IEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZp Z19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmxpbmUsCi0gCQkJb3B0 aW9ucy0+Z3NzX2luZGljYXRvcnMgPSB4c3RyZHVwKGFyZyk7Ci0gCQlicmVhazsKLSAKLSsJY2Fz ZSBzR3NzQWxsb3dTNFUyU2VsZjoKLSsJCWFyZyA9IGFyZ3ZfbmV4dCgmYWMsICZhdik7Ci0rCQlp ZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCi0rCQkJZmF0YWwoIiVzIGxpbmUgJWQ6ICVzIG1pc3Np bmcgYXJndW1lbnQuIiwKLSsJCQkgICAgZmlsZW5hbWUsIGxpbmVudW0sIGtleXdvcmQpOwotKwkJ aWYgKHN0cmNhc2VjbXAoYXJnLCAibm8iKSA9PSAwKQotKwkJCXZhbHVlID0gMDsKLSsJCWVsc2Ug aWYgKHN0cmNhc2VjbXAoYXJnLCAieWVzIikgPT0gMCkKLSsJCQl2YWx1ZSA9IElOVF9NQVg7Ci0r CQllbHNlIGlmICgodmFsdWUgPSBjb252dGltZShhcmcpKSA8PSAwKQotKwkJCWZhdGFsKCIlcyBs aW5lICVkOiBpbnZhbGlkICVzIHZhbHVlIFwiJXNcIi4iLAotKwkJCSAgICBmaWxlbmFtZSwgbGlu ZW51bSwga2V5d29yZCwgYXJnKTsKLSsJCWlmICgqYWN0aXZlcCAmJiBvcHRpb25zLT5nc3NfYWxs b3dfczR1MnNlbGYgPT0gLTEpCi0rCQkJb3B0aW9ucy0+Z3NzX2FsbG93X3M0dTJzZWxmID0gdmFs dWU7Ci0rCQlicmVhazsKLSsKLSsJY2FzZSBzR3NzUHJveHlTNFUyU2VydmljZXM6Ci0rCQl3aGls ZSAoKGFyZyA9IGFyZ3ZfbmV4dCgmYWMsICZhdikpICE9IE5VTEwpIHsKLSsJCQlpZiAoKmFyZyA9 PSAnXDAnKQotKwkJCQlmYXRhbCgiJXMgbGluZSAlZDogJXMgbWlzc2luZyBhcmd1bWVudC4iLAot KwkJCQkgICAgZmlsZW5hbWUsIGxpbmVudW0sIGtleXdvcmQpOwotKwkJCWlmIChzdHJjYXNlY21w KGFyZywgIm5vbmUiKSA9PSAwKSB7Ci0rCQkJCS8qICJub25lIiBjbGVhcnMgYW55IHByZXZpb3Vz IGxpc3QgKi8KLSsJCQkJZm9yIChpID0gMDsgaSA8IG9wdGlvbnMtPm51bV9nc3NfcHJveHlfc2Vy dmljZXM7IGkrKykKLSsJCQkJCWZyZWUob3B0aW9ucy0+Z3NzX3Byb3h5X3NlcnZpY2VzW2ldKTsK LSsJCQkJZnJlZShvcHRpb25zLT5nc3NfcHJveHlfc2VydmljZXMpOwotKwkJCQlvcHRpb25zLT5n c3NfcHJveHlfc2VydmljZXMgPSBOVUxMOwotKwkJCQlvcHRpb25zLT5udW1fZ3NzX3Byb3h5X3Nl cnZpY2VzID0gMDsKLSsJCQkJYnJlYWs7Ci0rCQkJfQotKwkJCWlmICghKmFjdGl2ZXApCi0rCQkJ CWNvbnRpbnVlOwotKwkJCW9wdF9hcnJheV9hcHBlbmQoZmlsZW5hbWUsIGxpbmVudW0sIGtleXdv cmQsCi0rCQkJICAgICZvcHRpb25zLT5nc3NfcHJveHlfc2VydmljZXMsCi0rCQkJICAgICZvcHRp b25zLT5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzLCBhcmcpOwotKwkJfQotKwkJYnJlYWs7Ci0rCi0g CWNhc2Ugc1Bhc3N3b3JkQXV0aGVudGljYXRpb246Ci0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+cGFz c3dvcmRfYXV0aGVudGljYXRpb247Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci1AQCAtMzA1Myw2ICsz MTAxLDcgQEAgY29weV9zZXRfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqZHN0LCBTZXJ2 ZXJPcHRpb25zICpzcmMsIGludCBwcmVhdXRoKQotIAotIAlNX0NQX0lOVE9QVChwYXNzd29yZF9h dXRoZW50aWNhdGlvbik7Ci0gCU1fQ1BfSU5UT1BUKGdzc19hdXRoZW50aWNhdGlvbik7Ci0rCU1f Q1BfSU5UT1BUKGdzc19hbGxvd19zNHUyc2VsZik7Ci0gCU1fQ1BfSU5UT1BUKHB1YmtleV9hdXRo ZW50aWNhdGlvbik7Ci0gCU1fQ1BfSU5UT1BUKHB1YmtleV9hdXRoX29wdGlvbnMpOwotIAlNX0NQ X0lOVE9QVChrZXJiZXJvc19hdXRoZW50aWNhdGlvbik7Ci1AQCAtMzQwNyw2ICszNDU2LDE1IEBA IGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCi0gCWR1bXBfY2ZnX2ZtdGludChzR3NzU3Rv cmVSZWtleSwgby0+Z3NzX3N0b3JlX3Jla2V5KTsKLSAJZHVtcF9jZmdfc3RyaW5nKHNHc3NLZXhB bGdvcml0aG1zLCBvLT5nc3Nfa2V4X2FsZ29yaXRobXMpOwotIAlkdW1wX2NmZ19zdHJpbmcoc0dz c0luZGljYXRvcnMsIG8tPmdzc19pbmRpY2F0b3JzKTsKLSsJaWYgKG8tPmdzc19hbGxvd19zNHUy c2VsZiA9PSAwKQotKwkJcHJpbnRmKCIlcyBub1xuIiwgbG9va3VwX29wY29kZV9uYW1lKHNHc3NB bGxvd1M0VTJTZWxmKSk7Ci0rCWVsc2UgaWYgKG8tPmdzc19hbGxvd19zNHUyc2VsZiA9PSBJTlRf TUFYKQotKwkJcHJpbnRmKCIlcyB5ZXNcbiIsIGxvb2t1cF9vcGNvZGVfbmFtZShzR3NzQWxsb3dT NFUyU2VsZikpOwotKwllbHNlCi0rCQlwcmludGYoIiVzICVkXG4iLCBsb29rdXBfb3Bjb2RlX25h bWUoc0dzc0FsbG93UzRVMlNlbGYpLAotKwkJICAgIG8tPmdzc19hbGxvd19zNHUyc2VsZik7Ci0r CWR1bXBfY2ZnX3N0cmFycmF5X29uZWxpbmUoc0dzc1Byb3h5UzRVMlNlcnZpY2VzLCBvLT5udW1f Z3NzX3Byb3h5X3NlcnZpY2VzLAotKwkgICAgby0+Z3NzX3Byb3h5X3NlcnZpY2VzKTsKLSAjZW5k aWYKLSAJZHVtcF9jZmdfZm10aW50KHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uLCBvLT5wYXNzd29y ZF9hdXRoZW50aWNhdGlvbik7Ci0gCWR1bXBfY2ZnX2ZtdGludChzS2JkSW50ZXJhY3RpdmVBdXRo ZW50aWNhdGlvbiwKLWRpZmYgLS1naXQgYS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAotaW5kZXgg ZmVhMjU5NDdlLi45YWNlYTMyY2YgMTAwNjQ0Ci0tLS0gYS9zZXJ2Y29uZi5oCi0rKysgYi9zZXJ2 Y29uZi5oCi1AQCAtMTYxLDYgKzE2MSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKLSAJaW50ICAgICBn c3NfY2xlYW51cF9jcmVkczsJLyogSWYgdHJ1ZSwgZGVzdHJveSBjcmVkIGNhY2hlIG9uIGxvZ291 dCAqLwotIAlpbnQgICAgIGdzc19kZWxlZ19jcmVkczsJLyogSWYgdHJ1ZSwgYWNjZXB0IGRlbGVn YXRlZCBHU1MgY3JlZGVudGlhbHMgKi8KLSAJaW50ICAgICBnc3Nfc3RyaWN0X2FjY2VwdG9yOwkv KiBJZiB0cnVlLCByZXN0cmljdCB0aGUgR1NTQVBJIGFjY2VwdG9yIG5hbWUgKi8KLSsJaW50ICAg ICBnc3NfYWxsb3dfczR1MnNlbGY7IC8qIDA9bm8sIElOVF9NQVg9eWVzIChHU1NfQ19JTkRFRklO SVRFKSwgPjA9dGlja2V0IGxpZmV0aW1lIHMgKi8KLSsJY2hhciAgKipnc3NfcHJveHlfc2Vydmlj ZXM7IC8qIFM0VTJQcm94eSB0YXJnZXQgc2VydmljZSBwcmluY2lwYWxzICovCi0rCXVfaW50ICAg bnVtX2dzc19wcm94eV9zZXJ2aWNlczsKLSAJaW50IAlnc3Nfc3RvcmVfcmVrZXk7Ci0gCWNoYXIg ICAqZ3NzX2tleF9hbGdvcml0aG1zOwkvKiBHU1NBUEkga2V4IG1ldGhvZHMgdG8gYmUgb2ZmZXJl ZCBieSBjbGllbnQuICovCi0gCWludCAgICAgcGFzc3dvcmRfYXV0aGVudGljYXRpb247CS8qIElm IHRydWUsIHBlcm1pdCBwYXNzd29yZAotQEAgLTMxNCw2ICszMTcsNyBAQCBUQUlMUV9IRUFEKGlu Y2x1ZGVfbGlzdCwgaW5jbHVkZV9pdGVtKTsKLSAJCU1fQ1BfU1RST1BUKHBlcm1pdF91c2VyX2Vu dl9hbGxvd2xpc3QpOyBcCi0gCQlNX0NQX1NUUk9QVChwYW1fc2VydmljZV9uYW1lKTsgXAotIAkJ TV9DUF9TVFJPUFQoZ3NzX2luZGljYXRvcnMpOyBcCi0rCQlNX0NQX1NUUkFSUkFZT1BUKGdzc19w cm94eV9zZXJ2aWNlcywgbnVtX2dzc19wcm94eV9zZXJ2aWNlcywgMSk7IFwKLSAJCU1fQ1BfU1RS QVJSQVlPUFQoYXV0aG9yaXplZF9rZXlzX2ZpbGVzLCBudW1fYXV0aGtleXNfZmlsZXMsIDEpO1wK LSAJCU1fQ1BfU1RSQVJSQVlPUFQocmV2b2tlZF9rZXlzX2ZpbGVzLCBcCi0gCQkgICAgbnVtX3Jl dm9rZWRfa2V5c19maWxlcywgMSk7IFwKLWRpZmYgLS1naXQgYS9zc2gtZ3NzLmggYi9zc2gtZ3Nz LmgKLWluZGV4IDE1MDY3MTlhOS4uYTBkNTFjOWJlIDEwMDY0NAotLS0tIGEvc3NoLWdzcy5oCi0r KysgYi9zc2gtZ3NzLmgKLUBAIC0xMTksNiArMTE5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewotIAlp bnQgdXNlZDsKLSAJaW50IHVwZGF0ZWQ7Ci0gCWNoYXIgKippbmRpY2F0b3JzOyAvKiBhdXRoIGlu ZGljYXRvcnMgKi8KLSsJaW50IGFsbG93X3NlbGY7IC8qIGFsbG93IHByb3RvY29sIHRyYW5zaXRp b24gKi8KLSB9IHNzaF9nc3NhcGlfY2xpZW50OwotIAotIHR5cGVkZWYgc3RydWN0IHNzaF9nc3Nh cGlfbWVjaF9zdHJ1Y3QgewotQEAgLTE5OSw2ICsyMDAsMTggQEAgT01fdWludDMyIHNzaF9nc3Nh cGlfY2hlY2ttaWMoR3NzY3R4dCAqLCBnc3NfYnVmZmVyX3QsIGdzc19idWZmZXJfdCk7Ci0gdm9p ZCBzc2hfZ3NzYXBpX2RvX2NoaWxkKGNoYXIgKioqLCB1X2ludCAqKTsKLSB2b2lkIHNzaF9nc3Nh cGlfY2xlYW51cF9jcmVkcyh2b2lkKTsKLSBpbnQgc3NoX2dzc2FwaV9zdG9yZWNyZWRzKHZvaWQp OwotK2ludCAgc3NoX2dzc2FwaV9jcmVkZW50aWFsc19zdG9yZWQodm9pZCk7Ci0rc3NoX2dzc2Fw aV9jY2FjaGUgKnNzaF9nc3NhcGlfZ2V0X2NjYWNoZSh2b2lkKTsKLStpbnQgIHNzaF9nc3NhcGlf dXNlcl9oYXNfdmFsaWRfdGd0KHVfaW50KTsKLStpbnQgIHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFs aWRfcHJveHlfdGlja2V0cyhjaGFyICoqLCB1X2ludCwgdV9pbnQpOwotK2ludCAgc3NoX2dzc2Fw aV9zNHUyc2VsZihjb25zdCBjaGFyICosIHVfaW50KTsKLSt2b2lkIHNzaF9nc3NhcGlfc3RvcmVj cmVkc19zNHUyc2VsZih2b2lkKTsKLSt2b2lkIHNzaF9nc3NhcGlfczR1MnByb3h5KGNoYXIgKios IHVfaW50LCB1X2ludCk7Ci0rLyogRmxhZ3MgZm9yIHNzaF9nc3NhcGlfa3JiNV9maWx0ZXJfY2Nh Y2hlKCk6IHdoaWNoIHRpY2tldCBjbGFzc2VzIHRvIHJlbW92ZSAqLwotKyNkZWZpbmUgU1NIX0dT U0FQSV9DQ0ZJTFRFUl9UR1QgICAgKDF1IDw8IDApIC8qIGtyYnRndC8uLi4gZW50cmllcyAqLwot KyNkZWZpbmUgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9TRUxGICAgKDF1IDw8IDEpIC8qIFM0VTJTZWxm IGV2aWRlbmNlIHRpY2tldCAqLwotKyNkZWZpbmUgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9QUk9YWSAg KDF1IDw8IDIpIC8qIFM0VTJQcm94eSBzZXJ2aWNlIHRpY2tldHMgKi8KLSt2b2lkIHNzaF9nc3Nh cGlfa3JiNV9maWx0ZXJfY2NhY2hlKHVfaW50LCBjaGFyICoqLCB1X2ludCk7Ci0gY29uc3QgY2hh ciAqc3NoX2dzc2FwaV9kaXNwbGF5bmFtZSh2b2lkKTsKLSAKLSBjaGFyICpzc2hfZ3NzYXBpX3Nl cnZlcl9tZWNoYW5pc21zKHZvaWQpOwotZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3No ZC1zZXNzaW9uLmMKLWluZGV4IDcwNjRhZmQ3Yy4uZDFkMTNkODYzIDEwMDY0NAotLS0tIGEvc3No ZC1zZXNzaW9uLmMKLSsrKyBiL3NzaGQtc2Vzc2lvbi5jCi1AQCAtMTM5Myw2ICsxMzkzLDEwNCBA QCBtYWluKGludCBhYywgY2hhciAqKmF2KQotIAkJYXV0aGN0eHQtPmtyYjVfc2V0X2VudiA9IHNz aF9nc3NhcGlfc3RvcmVjcmVkcygpOwotIAkJcmVzdG9yZV91aWQoKTsKLSAJfQotKwkvKgotKwkg KiBHU1NBUElBbGxvd1M0VTJTZWxmIC8gR1NTQVBJUHJveHlTNFUyU2VydmljZXM6IGlmIG5vIGNy ZWRlbnRpYWxzIHdlcmUgc3RvcmVkCi0rCSAqIGFib3ZlIChpLmUuIG5vIEdTU0FQSSBhdXRoIHdp dGggZGVsZWdhdGlvbiBvY2N1cnJlZCksIHVzZSBTNFUyU2VsZgotKwkgKiB0byBvYnRhaW4gYW4g aW1wZXJzb25hdGVkIGNyZWRlbnRpYWwgZm9yIHRoZSB1c2VyLCB0aGVuIG9wdGlvbmFsbHkKLSsJ ICogZm9sbG93IHdpdGggUzRVMlByb3h5IGZvciBjb25maWd1cmVkIHRhcmdldCBzZXJ2aWNlcy4K LSsJICoKLSsJICogR1NTQVBJQWxsb3dTNFUyU2VsZiBhbG9uZTogICAgc3RvcmUgUzRVMlNlbGYg ZXZpZGVuY2UgdGlja2V0IG9ubHk7Ci0rCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo ZSBob3N0IFRHVCBpcyByZW1vdmVkLgotKwkgKiBHU1NBUElQcm94eVM0VTJTZXJ2aWNlcyBhbG9u ZTogc3RvcmUgaG9zdCBUR1QgYW5kIFM0VTJQcm94eSBzZXJ2aWNlCi0rCSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRpY2tldHM7IHRoZSBTNFUyU2VsZiBldmlkZW5jZSB0aWNrZXQKLSsJ ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVtb3ZlZC4KLSsJICogQm90aDogICAg ICAgICAgICAgICAgICAgICBzdG9yZSBob3N0IFRHVCwgUzRVMlNlbGYgZXZpZGVuY2UgdGlja2V0 LAotKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYWxsIFM0VTJQcm94eSBzZXJ2 aWNlIHRpY2tldHMuCi0rCSAqCi0rCSAqIFdoZW4gUzRVMlByb3h5IHRpY2tldHMgYXJlIHByZXNl bnQgdGhlIGhvc3QgVEdUIG11c3QgcmVtYWluIGluIHRoZQotKwkgKiBjY2FjaGU7IGFwcGxpY2F0 aW9ucyBjaGVjayBmb3IgVEdUIHByZXNlbmNlIHRvIGRldGVybWluZSB3aGV0aGVyCi0rCSAqIEtl cmJlcm9zIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUuICBPbmx5IGluIEdTU0FQSUFsbG93UzRV MlNlbGYtYWxvbmUKLSsJICogbW9kZSAobm8gcHJveHkgdGlja2V0cykgaXMgdGhlIGhvc3QgVEdU IHJlbW92ZWQuCi0rCSAqCi0rCSAqIFNraXAgUzRVMlNlbGYgd2hlbiB0aGUgdXNlciBhbHJlYWR5 IGhhcyBjcmVkZW50aWFscyBjb3ZlcmluZyB0aGUKLSsJICogcmVxdWVzdGVkIGxpZmV0aW1lOiBj aGVjayBmb3IgYSB2YWxpZCBUR1QgaW4gdGhlIEdTU0FQSUFsbG93UzRVMlNlbGYtCi0rCSAqIGFs b25lIGNhc2UsIG9yIGZvciB2YWxpZCBwcm94eSB0aWNrZXRzIGZvciBldmVyeSBjb25maWd1cmVk IHNlcnZpY2UKLSsJICogb3RoZXJ3aXNlLgotKwkgKi8KLSsJaWYgKChvcHRpb25zLmdzc19hbGxv d19zNHUyc2VsZiB8fCBvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPiAwKSAmJgotKwkg ICAgIXNzaF9nc3NhcGlfY3JlZGVudGlhbHNfc3RvcmVkKCkpIHsKLSsJCXVfaW50IGxpZmV0aW1l ID0gKCFvcHRpb25zLmdzc19hbGxvd19zNHUyc2VsZiB8fAotKwkJICAgIG9wdGlvbnMuZ3NzX2Fs bG93X3M0dTJzZWxmID09IElOVF9NQVgpID8KLSsJCSAgICBHU1NfQ19JTkRFRklOSVRFIDogKHVf aW50KW9wdGlvbnMuZ3NzX2FsbG93X3M0dTJzZWxmOwotKwkJaW50IHNraXAgPSAwOwotKwotKwkJ dGVtcG9yYXJpbHlfdXNlX3VpZChhdXRoY3R4dC0+cHcpOwotKwkJaWYgKG9wdGlvbnMuZ3NzX2Fs bG93X3M0dTJzZWxmICYmCi0rCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID09 IDApIHsKLSsJCQkvKiBTNFUyU2VsZi1hbG9uZTogc2tpcCBpZiB1c2VyIGFscmVhZHkgaGFzIGEg dmFsaWQgVEdUICovCi0rCQkJc2tpcCA9IHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfdGd0KGxp ZmV0aW1lKTsKLSsJCX0gZWxzZSBpZiAob3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID4g MCkgewotKwkJCS8qCi0rCQkJICogUHJveHktb25seSBvciBib3RoOiBza2lwIGlmIGV2ZXJ5IGNv bmZpZ3VyZWQgc2VydmljZQotKwkJCSAqIGFscmVhZHkgaGFzIGEgdmFsaWQgdGlja2V0IGluIHRo ZSB1c2VyJ3MgY2NhY2hlLgotKwkJCSAqIFNlcnZpY2UgdGlja2V0cyBhcmUgbm90IEdTU0FQSSBp bml0aWF0b3IgY3JlZGVudGlhbHMsCi0rCQkJICogc28gZ3NzX2FjcXVpcmVfY3JlZCgpIGNhbm5v dCBiZSB1c2VkOyBpdGVyYXRlIHRoZQotKwkJCSAqIGNjYWNoZSB3aXRoIHRoZSBrcmI1IEFQSSBp bnN0ZWFkLgotKwkJCSAqLwotKwkJCXNraXAgPSBzc2hfZ3NzYXBpX3VzZXJfaGFzX3ZhbGlkX3By b3h5X3RpY2tldHMoCi0rCQkJICAgIG9wdGlvbnMuZ3NzX3Byb3h5X3NlcnZpY2VzLAotKwkJCSAg ICBvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMsCi0rCQkJICAgIGxpZmV0aW1lKTsKLSsJ CX0KLSsJCXJlc3RvcmVfdWlkKCk7Ci0rCi0rCQlpZiAoc2tpcCkgewotKwkJCWRlYnVnX2YoInVz ZXIgJS4xMDBzIGFscmVhZHkgaGFzIHZhbGlkIEtlcmJlcm9zICIKLSsJCQkgICAgImNyZWRlbnRp YWxzLCBza2lwcGluZyBTNFUyU2VsZiIsCi0rCQkJICAgIGF1dGhjdHh0LT51c2VyKTsKLSsJCX0g ZWxzZSBpZiAoc3NoX2dzc2FwaV9zNHUyc2VsZihhdXRoY3R4dC0+dXNlciwgbGlmZXRpbWUpID09 IDApIHsKLSsJCQl1X2ludCBmaWx0ZXI7Ci0rCi0rCQkJdGVtcG9yYXJpbHlfdXNlX3VpZChhdXRo Y3R4dC0+cHcpOwotKwkJCS8qCi0rCQkJICogQWx3YXlzIGNyZWF0ZSB0aGUgY2NhY2hlIHZpYSBz dG9yZWNyZWRzX3M0dTJzZWxmIHNvCi0rCQkJICogdGhhdCBzNHUycHJveHkgaGFzIGEgY2NhY2hl IHRvIHN0b3JlIHRpY2tldHMgaW50by4KLSsJCQkgKiBnc3Nfa3JiNV9jb3B5X2NjYWNoZSgpIGNv cGllcyB0aGUgaG9zdCBzZXJ2aWNlJ3Mgb3duCi0rCQkJICogVEdUIGFsb25nIHdpdGggdGhlIGV2 aWRlbmNlIHRpY2tldDsgZmlsdGVyX2NjYWNoZQotKwkJCSAqIHJlbW92ZXMgdGhlIHRpY2tldCBj bGFzc2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBrZXB0LgotKwkJCSAqLwotKwkJCXNzaF9nc3NhcGlf c3RvcmVjcmVkc19zNHUyc2VsZigpOwotKwkJCWlmIChvcHRpb25zLm51bV9nc3NfcHJveHlfc2Vy dmljZXMgPiAwKQotKwkJCQlzc2hfZ3NzYXBpX3M0dTJwcm94eSgKLSsJCQkJICAgIG9wdGlvbnMu Z3NzX3Byb3h5X3NlcnZpY2VzLAotKwkJCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZp Y2VzLAotKwkJCQkgICAgbGlmZXRpbWUpOwotKwotKwkJCS8qCi0rCQkJICogUmVtb3ZlIHRoZSBo b3N0IFRHVCBvbmx5IGluIEdTU0FQSUFsbG93UzRVMlNlbGYtYWxvbmUKLSsJCQkgKiBtb2RlOyB3 aGVuIHByb3h5IHRpY2tldHMgYXJlIHByZXNlbnQgdGhlIFRHVCBtdXN0Ci0rCQkJICogc3RheSBz byB0aGF0IGFwcGxpY2F0aW9ucyByZWNvZ25pc2UgdGhlIGNjYWNoZSBhcwotKwkJCSAqIGhvbGRp bmcgbGl2ZSBLZXJiZXJvcyBjcmVkZW50aWFscy4KLSsJCQkgKiBSZW1vdmUgdGhlIFM0VTJTZWxm IGV2aWRlbmNlIHRpY2tldCBpbiBwcm94eS1vbmx5Ci0rCQkJICogbW9kZSAoR1NTQVBJUHJveHlT NFUyU2VydmljZXMgd2l0aG91dCBHU1NBUElBbGxvd1M0VTJTZWxmKS4KLSsJCQkgKi8KLSsJCQlm aWx0ZXIgPSAwOwotKwkJCWlmIChvcHRpb25zLmdzc19hbGxvd19zNHUyc2VsZiAmJgotKwkJCSAg ICBvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPT0gMCkKLSsJCQkJZmlsdGVyID0gU1NI X0dTU0FQSV9DQ0ZJTFRFUl9UR1QgfAotKwkJCQkgICAgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9QUk9Y WTsKLSsJCQllbHNlIGlmICghb3B0aW9ucy5nc3NfYWxsb3dfczR1MnNlbGYpCi0rCQkJCWZpbHRl ciA9IFNTSF9HU1NBUElfQ0NGSUxURVJfU0VMRjsKLSsJCQlpZiAoZmlsdGVyICE9IDApCi0rCQkJ CXNzaF9nc3NhcGlfa3JiNV9maWx0ZXJfY2NhY2hlKGZpbHRlciwKLSsJCQkJICAgIG9wdGlvbnMu Z3NzX3Byb3h5X3NlcnZpY2VzLAotKwkJCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZp Y2VzKTsKLSsJCQlyZXN0b3JlX3VpZCgpOwotKwkJfSBlbHNlIHsKLSsJCQlsb2dpdCgiUzRVMlNl bGYgZmFpbGVkIGZvciB1c2VyICUuMTAwcywgY29udGludWluZyIsCi0rCQkJICAgIGF1dGhjdHh0 LT51c2VyKTsKLSsJCX0KLSsJfQotICNlbmRpZgotICNpZmRlZiBXSVRIX1NFTElOVVgKLSAJc3No ZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChhdXRoY3R4dC0+cHctPnB3X25hbWUsCi1kaWZm IC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRfY29uZmlnLjUKLWluZGV4IGMyODIyMDA3Ny4u MzBkMWQ1OWRhIDEwMDY0NAotLS0tIGEvc3NoZF9jb25maWcuNQotKysrIGIvc3NoZF9jb25maWcu NQotQEAgLTg0Niw2ICs4NDYsNzYgQEAgRklETzItYmFzZWQgcHJlLWF1dGhlbnRpY2F0aW9uIGlu IEZyZWVJUEEsIHVzaW5nIEZJRE8yIFVTQiBhbmQgTkZDIHRva2VucwotIFRoZSBkZWZhdWx0Ci0g LkRxIG5vbmUKLSBpcyB0byBub3QgdXNlIEdTU0FQSSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3Jz IGZvciBhY2Nlc3MgZGVjaXNpb25zLgotKy5JdCBDbSBHU1NBUElBbGxvd1M0VTJTZWxmCi0rQ29u dHJvbHMgd2hldGhlciB0aGUgU1NIIHNlcnZlciBwZXJmb3JtcyBhIEtlcmJlcm9zIHByb3RvY29s IHRyYW5zaXRpb24KLSsoUzRVMlNlbGYpIGFmdGVyIGEgc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlv biB1c2luZyBhbnkgb3RoZXIgbWV0aG9kLgotK0FjY2VwdGVkIHZhbHVlcyBhcmUKLSsuQ20gbm8g LAotKy5DbSB5ZXMgLAotK29yIGEgdGltZSBpbnRlcnZhbCAoc2VlCi0rLlN4IFRJTUUgRk9STUFU UwotK2JlbG93KS4KLSsuQ20gbm8KLStkaXNhYmxlcyBTNFUyU2VsZiBlbnRpcmVseS4KLSsuQ20g eWVzCi0rZW5hYmxlcyBTNFUyU2VsZiBhbmQgcmVxdWVzdHMgYSB0aWNrZXQgd2l0aCB0aGUgbWF4 aW11bSBsaWZldGltZQotK3Blcm1pdHRlZCBieSB0aGUgS0RDLgotK0EgdGltZSBpbnRlcnZhbCAo ZS5nLlwmCi0rLkNtIDhoICwKLSsuQ20gMWQgKQotK2VuYWJsZXMgUzRVMlNlbGYgYW5kIHJlcXVl c3RzIGEgdGlja2V0IHZhbGlkIGZvciBhdCBtb3N0IHRoYXQgZHVyYXRpb24uCi0rVGhlIG9wdGlv biBpcyBhIG5vLW9wIHdoZW4gZGVsZWdhdGVkIEdTU0FQSSBjcmVkZW50aWFscyBhcmUgYWxyZWFk eSBhdmFpbGFibGUuCi0rVGhlIG9idGFpbmVkIHNlcnZpY2UgdGlja2V0IGlzIHN0b3JlZCBpbiB0 aGUgZGVmYXVsdCBjcmVkZW50aWFscyBjYWNoZSBhbmQgaXMKLSthY2Nlc3NpYmxlIHRvIGFueSBh cHBsaWNhdGlvbiB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIEtlcmJlcm9zIGhvc3QgcHJpbmNpcGFs Ci0rLlBxIGhvc3QvbWFjaGluZS5mcWRuQFJFQUxNCi0rY3JlZGVudGlhbHMgb24gdGhlIHNhbWUg aG9zdC4KLSsuUHAKLStUaGUgZGVmYXVsdCBpcwotKy5DbSBubyAuCi0rLkl0IENtIEdTU0FQSVBy b3h5UzRVMlNlcnZpY2VzCi0rU3BlY2lmaWVzIGEgbGlzdCBvZiBLZXJiZXJvcyBzZXJ2aWNlIHBy aW5jaXBhbHMgZm9yIHdoaWNoIGNvbnN0cmFpbmVkCi0rZGVsZWdhdGlvbiAoUzRVMlByb3h5KSB0 aWNrZXRzIHNob3VsZCBiZSBvYnRhaW5lZCBhZnRlciBhIHN1Y2Nlc3NmdWwKLStTNFUyU2VsZiBw cm90b2NvbCB0cmFuc2l0aW9uLgotK0VhY2ggZW50cnkgbXVzdCBiZSBhIGZ1bGx5LXF1YWxpZmll ZCBLZXJiZXJvcyBwcmluY2lwYWwgbmFtZSBvZiB0aGUgZm9ybQotKy5BciBzZXJ2aWNlL2hvc3RA UkVBTE0gLgotK011bHRpcGxlIHByaW5jaXBhbHMgbWF5IGJlIGxpc3RlZCwgc2VwYXJhdGVkIGJ5 IHdoaXRlc3BhY2UuCi0rVGhlIGtleXdvcmQKLSsuQ20gbm9uZQotK2NsZWFycyBhbnkgcHJldmlv dXNseSBzZXQgbGlzdC4KLSsuUHAKLStUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBpbmRlcGVuZGVu dGx5IG9mCi0rLkNtIEdTU0FQSUFsbG93UzRVMlNlbGYgLgotK1doZW4gUzRVMlNlbGYgc3VjY2Vl ZHMsIHRoZSBzZXJ2ZXIgaXRlcmF0ZXMgdGhlIGxpc3QgYW5kIGNhbGxzCi0rLlhyIGdzc19pbml0 X3NlY19jb250ZXh0IDMKLStmb3IgZWFjaCBwcmluY2lwYWwgd2l0aCB0aGUgcHJveHkgY3JlZGVu dGlhbCBvYnRhaW5lZCBieSBTNFUyU2VsZiBhcwotK3RoZSBpbml0aWF0b3IuCi0rVGhlIEdTU0FQ SSBsaWJyYXJ5IHByZXNlbnRzIHRoZSBldmlkZW5jZSB0aWNrZXQgdG8gdGhlIEtEQyB2aWEgYW4K LStTNFUyUHJveHkgVEdTLVJFUTsgaWYgdGhlIGhvc3Qgc2VydmljZSBob2xkcyB0aGUgbmVjZXNz YXJ5IGNvbnN0cmFpbmVkLQotK2RlbGVnYXRpb24gcGVybWlzc2lvbiBpbiB0aGUgS0RDLCBhIHNl cnZpY2UgdGlja2V0IGZyb20gdGhlIHVzZXIgdG8KLSt0aGUgdGFyZ2V0IHNlcnZpY2UgaXMgaXNz dWVkLgotK1RoZXNlIHRpY2tldHMgYXJlIGFjY3VtdWxhdGVkIGFuZCB0aGVuIGZsdXNoZWQgaW50 byB0aGUgdXNlcidzIGNjYWNoZQotK3ZpYQotKy5YciBnc3Nfc3RvcmVfY3JlZCAzICwKLStzbyB0 aGF0IGFueSBhcHBsaWNhdGlvbiBydW5uaW5nIGluIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBjYW4gdXNl IHRoZW0KLSt3aXRob3V0IGZ1cnRoZXIgaW50ZXJhY3Rpb24uCi0rVGhlIEFQLVJFUSBvdXRwdXQg dG9rZW4gb2YgZWFjaAotKy5YciBnc3NfaW5pdF9zZWNfY29udGV4dCAzCi0rY2FsbCBpcyBkaXNj YXJkZWQ7IG5vIG5ldHdvcmsgY29ubmVjdGlvbiB0byB0aGUgdGFyZ2V0IHNlcnZpY2UgaXMgbWFk ZS4KLSsuUHAKLStXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aAotKy5DbSBHU1NBUElBbGxvd1M0VTJT ZWxmICwKLSt0aGUgVEdUIGFuZCBTNFUyU2VsZiB0aWNrZXQgYXJlIGFsc28gc3RvcmVkIGluIHRo ZSB1c2VyJ3MgY2NhY2hlIGluCi0rYWRkaXRpb24gdG8gdGhlIFM0VTJQcm94eSBzZXJ2aWNlIHRp Y2tldHMuCi0rV2hlbiB1c2VkIGFsb25lICh3aXRob3V0Ci0rLkNtIEdTU0FQSUFsbG93UzRVMlNl bGYgKSAsCi0rb25seSB0aGUgUzRVMlByb3h5IHNlcnZpY2UgdGlja2V0cyBhcmUgc3RvcmVkOyB0 aGUgaW50ZXJtZWRpYXRlIFM0VTJTZWxmCi0rY3JlZGVudGlhbCBpcyBub3QgcGxhY2VkIGluIHRo ZSB1c2VyJ3MgY2NhY2hlLgotKy5QcAotK1RoaXMgb3B0aW9uIHN1cHBvcnRzCi0rLkNtIE1hdGNo Ci0rYmxvY2tzLCBhbGxvd2luZyBwZXItdXNlciBvciBwZXItaG9zdCBsaXN0cyBvZiBkZWxlZ2F0 aW9uIHRhcmdldHMuCi0rLlBwCi0rVGhlIGRlZmF1bHQgaXMgZW1wdHkgKG5vIFM0VTJQcm94eSBk ZWxlZ2F0aW9uIGlzIHBlcmZvcm1lZCkuCi0gLkl0IENtIEhvc3RiYXNlZEFjY2VwdGVkQWxnb3Jp dGhtcwotIFRoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKLSAuWHIgY3J5cHRv LXBvbGljaWVzIDcgLgotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAwNTItb3BlbnNzaC0x MC4ycDEtcGtjczExLXVyaS5wYXRjaCBiLzAwNTItb3BlbnNzaC0xMC4ycDEtcGtjczExLXVyaS5w YXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTY4MjUxCi0tLSAvZGV2 L251bGwKKysrIGIvMDA1Mi1vcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBhdGNoCkBAIC0wLDAg KzEsMzQyMyBAQAorRnJvbSBkYzRkMTM3Y2M3OWIzZWM0NWVkNzYyNGM0MzdlODY0MDk4MDg0Mzhl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRt aXRAZ21haWwuY29tPgorRGF0ZTogTW9uLCAxNSBEZWMgMjAyNSAxNDoyNDowNyArMDEwMAorU3Vi amVjdDogW1BBVENIIDUyLzUzXSBvcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpCisKKy0tLQorIC5k ZXBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBNYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICB8ICAyNiArLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAg ICAgIHwgIDM3ICsrCisgcmVncmVzcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDUgKy0K KyByZWdyZXNzL3BrY3MxMS11cmkuc2ggICAgICAgICAgICB8IDQxMCArKysrKysrKysrKysrKysr CisgcmVncmVzcy91bml0dGVzdHMvTWFrZWZpbGUgICAgICAgfCAgIDIgKy0KKyByZWdyZXNzL3Vu aXR0ZXN0cy9wa2NzMTEvdGVzdHMuYyB8IDM1MyArKysrKysrKysrKysrKworIHNzaC1hZGQuYyAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDQ4ICstCisgc3NoLWFnZW50LmMgICAgICAgICAgICAg ICAgICAgICAgfCAxMTcgKysrKy0KKyBzc2gta2V5Z2VuLmMgICAgICAgICAgICAgICAgICAgICB8 ICAgNyArLQorIHNzaC1wa2NzMTEtY2xpZW50LmMgICAgICAgICAgICAgIHwgIDE5ICsKKyBzc2gt cGtjczExLXVyaS5jICAgICAgICAgICAgICAgICB8IDQzOCArKysrKysrKysrKysrKysrKysKKyBz c2gtcGtjczExLXVyaS5oICAgICAgICAgICAgICAgICB8ICA0NiArKworIHNzaC1wa2NzMTEuYyAg ICAgICAgICAgICAgICAgICAgIHwgNzcxICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0K KyBzc2gtcGtjczExLmggICAgICAgICAgICAgICAgICAgICB8ICAgNCArCisgc3NoLmMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAxMDQgKysrKy0KKyBzc2hfY29uZmlnLjUgICAgICAgICAg ICAgICAgICAgICB8ICAxNSArCisgc3Noa2V5LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDQgKworIDE4IGZpbGVzIGNoYW5nZWQsIDIxMzQgaW5zZXJ0aW9ucygrKSwgMjczIGRlbGV0aW9u cygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCByZWdyZXNzL3BrY3MxMS11cmkuc2gKKyBjcmVhdGUg bW9kZSAxMDA2NDQgcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMKKyBjcmVhdGUgbW9k ZSAxMDA2NDQgc3NoLXBrY3MxMS11cmkuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzc2gtcGtjczEx LXVyaS5oCisKK2RpZmYgLS1naXQgYS8uZGVwZW5kIGIvLmRlcGVuZAoraW5kZXggNDVhZDJiZjRl Li5iNDMwYzdlNzcgMTAwNjQ0CistLS0gYS8uZGVwZW5kCisrKysgYi8uZGVwZW5kCitAQCAtMTQ1 LDYgKzE0NSw3IEBAIHNzaC1tbGRzYS1lZGRzYS5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmlu ZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5iCisgc3NoLXBrY3MxMS1jbGllbnQu bzogaW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNvbXBh dC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5oIG9wZW5ic2QtY29tcGF0 L3NpZ2FjdC5oIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmggb3BlbmJzZC1jb21wYXQv dmlzLmggb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaCBvcGVuYnNkLWNvbXBhdC9zaGEx Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNoYTIuaCBvcGVuYnNkLWNvbXBhdC9tZDUuaCBvcGVuYnNk LWNvbXBhdC9ibGYuaCBvcGVuYnNkLWNvbXBhdC9mbm1hdGNoLmggb3BlbmJzZC1jb21wYXQvZ2V0 b3B0Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNpZ25hbC5oIG9wZW5ic2QtY29tcGF0L2JzZC1taXNj Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNldHJlc19pZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zdGF0 dmZzLmggb3BlbmJzZC1jb21wYXQvYnNkLXdhaXRwaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2QtcG9s bC5oIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3 aW5fdXRpbC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1p cml4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtc29s YXJpcy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbmV0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC11dy5o IG9wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5oIGVudHJvcHkuaCBwYXRobmFtZXMuaCB4bWFs bG9jLmggc3NoYnVmLmggbG9nLmggc3NoZXJyLmggbWlzYy5oIHNzaGtleS5oIGF1dGhmZC5oIGF0 b21pY2lvLmggc3NoLXBrY3MxMS5oCisgc3NoLXBrY3MxMS1oZWxwZXIubzogaW5jbHVkZXMuaCBj b25maWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBh dC5oIG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5oIG9wZW5ic2QtY29tcGF0L3NpZ2FjdC5oIG9wZW5i c2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmggb3BlbmJzZC1jb21wYXQvdmlzLmggb3BlbmJzZC1j b21wYXQvZ2V0cnJzZXRieW5hbWUuaCBvcGVuYnNkLWNvbXBhdC9zaGExLmggb3BlbmJzZC1jb21w YXQvYnNkLXNoYTIuaCBvcGVuYnNkLWNvbXBhdC9tZDUuaCBvcGVuYnNkLWNvbXBhdC9ibGYuaCBv cGVuYnNkLWNvbXBhdC9mbm1hdGNoLmggb3BlbmJzZC1jb21wYXQvZ2V0b3B0Lmggb3BlbmJzZC1j b21wYXQvYnNkLXNpZ25hbC5oIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmggb3BlbmJzZC1jb21w YXQvYnNkLXNldHJlc19pZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zdGF0dmZzLmggb3BlbmJzZC1j b21wYXQvYnNkLXdhaXRwaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2QtcG9sbC5oIG9wZW5ic2QtY29t cGF0L2Zha2UtcmZjMjU1My5oIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5oIG9wZW5i c2QtY29tcGF0L3BvcnQtYWl4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1pcml4Lmggb3BlbmJzZC1j b21wYXQvcG9ydC1saW51eC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtc29sYXJpcy5oIG9wZW5ic2Qt Y29tcGF0L3BvcnQtbmV0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC11dy5oIG9wZW5ic2QtY29tcGF0 L2JzZC1uZXh0c3RlcC5oIGVudHJvcHkuaCB4bWFsbG9jLmggc3NoYnVmLmggbG9nLmggc3NoZXJy LmggbWlzYy5oIHNzaGtleS5oIGF1dGhmZC5oIHNzaC1wa2NzMTEuaAorIHNzaC1wa2NzMTEubzog aW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNvbXBhdC9v cGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5oIG9wZW5ic2QtY29tcGF0L3Np Z2FjdC5oIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmggb3BlbmJzZC1jb21wYXQvdmlz Lmggb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaCBvcGVuYnNkLWNvbXBhdC9zaGExLmgg b3BlbmJzZC1jb21wYXQvYnNkLXNoYTIuaCBvcGVuYnNkLWNvbXBhdC9tZDUuaCBvcGVuYnNkLWNv bXBhdC9ibGYuaCBvcGVuYnNkLWNvbXBhdC9mbm1hdGNoLmggb3BlbmJzZC1jb21wYXQvZ2V0b3B0 Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNpZ25hbC5oIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmgg b3BlbmJzZC1jb21wYXQvYnNkLXNldHJlc19pZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zdGF0dmZz Lmggb3BlbmJzZC1jb21wYXQvYnNkLXdhaXRwaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2QtcG9sbC5o IG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5f dXRpbC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1pcml4 Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtc29sYXJp cy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbmV0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC11dy5oIG9w ZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5oIGVudHJvcHkuaCBsb2cuaCBzc2hlcnIuaCBzc2hr ZXkuaCBzc2gtcGtjczExLmgKKytzc2gtcGtjczExLXVyaS5vOiBpbmNsdWRlcy5oIGNvbmZpZy5o IGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3Bl bmJzZC1jb21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21w YXQvcmVhZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9n ZXRycnNldGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt c2hhMi5oIG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2Qt Y29tcGF0L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9i c2Qtc2lnbmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt c2V0cmVzX2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9i c2Qtd2FpdHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFr ZS1yZmMyNTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21w YXQvcG9ydC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9w b3J0LWxpbnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQv cG9ydC1uZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5l eHRzdGVwLmggZW50cm9weS5oCisgc3NoLXJzYS5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmlu ZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1j b21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVh ZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNl dGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5o IG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0 L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2ln bmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVz X2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2Fp dHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMy NTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9y dC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxp bnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1u ZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVw LmggZW50cm9weS5oCisgc3NoLXNrLWNsaWVudC5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmlu ZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1j b21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVh ZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNl dGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5o IG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0 L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2ln bmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVz X2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2Fp dHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMy NTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9y dC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxp bnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1u ZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVw LmggZW50cm9weS5oIGxvZy5oIHNzaGVyci5oIHNzaGJ1Zi5oIHNzaGtleS5oIG1zZy5oIHBhdGhu YW1lcy5oIHNzaC1zay5oIG1pc2MuaAorIHNzaC1zay1oZWxwZXIubzogaW5jbHVkZXMuaCBjb25m aWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5o IG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5oIG9wZW5ic2QtY29tcGF0L3NpZ2FjdC5oIG9wZW5ic2Qt Y29tcGF0L3JlYWRwYXNzcGhyYXNlLmggb3BlbmJzZC1jb21wYXQvdmlzLmggb3BlbmJzZC1jb21w YXQvZ2V0cnJzZXRieW5hbWUuaCBvcGVuYnNkLWNvbXBhdC9zaGExLmggb3BlbmJzZC1jb21wYXQv YnNkLXNoYTIuaCBvcGVuYnNkLWNvbXBhdC9tZDUuaCBvcGVuYnNkLWNvbXBhdC9ibGYuaCBvcGVu YnNkLWNvbXBhdC9mbm1hdGNoLmggb3BlbmJzZC1jb21wYXQvZ2V0b3B0Lmggb3BlbmJzZC1jb21w YXQvYnNkLXNpZ25hbC5oIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmggb3BlbmJzZC1jb21wYXQv YnNkLXNldHJlc19pZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zdGF0dmZzLmggb3BlbmJzZC1jb21w YXQvYnNkLXdhaXRwaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2QtcG9sbC5oIG9wZW5ic2QtY29tcGF0 L2Zha2UtcmZjMjU1My5oIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5oIG9wZW5ic2Qt Y29tcGF0L3BvcnQtYWl4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1pcml4Lmggb3BlbmJzZC1jb21w YXQvcG9ydC1saW51eC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtc29sYXJpcy5oIG9wZW5ic2QtY29t cGF0L3BvcnQtbmV0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC11dy5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1uZXh0c3RlcC5oIGVudHJvcHkuaCB4bWFsbG9jLmggbG9nLmggc3NoZXJyLmggc3Noa2V5Lmgg YXV0aGZkLmggbWlzYy5oIHNzaGJ1Zi5oIG1zZy5oIHVpZHN3YXAuaCBzc2gtc2suaCBzc2gtcGtj czExLmgKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBmNjFm ODllNGQuLjIzZDVmOTA4YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmls ZS5pbgorQEAgLTExMywxMiArMTEzLDEyIEBAIExJQlNTSF9PQkpTPSR7TElCT1BFTlNTSF9PQkpT fSBcCisgCXNmdHAtcmVhbHBhdGgubyBwbGF0Zm9ybS1wbGVkZ2UubyBwbGF0Zm9ybS10cmFjaW5n Lm8gcGxhdGZvcm0tbWlzYy5vIFwKKyAJc3NoYnVmLWlvLm8gbWlzYy1hZ2VudC5vIHNzaGVyci1s aWJjcnlwdG8ubyBhdWRpdHN0dWIubworIAorLVAxMU9CSlM9IHNzaC1wa2NzMTEtY2xpZW50Lm8K KytQMTFPQkpTPSBzc2gtcGtjczExLWNsaWVudC5vIHNzaC1wa2NzMTEtdXJpLm8KKyAKKyBTS09C SlM9CXNzaC1zay1jbGllbnQubworIAorIFNTSE9CSlM9IHNzaC5vIHJlYWRjb25mLm8gY2xpZW50 bG9vcC5vIHNzaHR0eS5vIFwKKy0Jc3NoY29ubmVjdC5vIHNzaGNvbm5lY3QyLm8gbXV4Lm8gc3No LXBrY3MxMS5vICQoU0tPQkpTKQorKwlzc2hjb25uZWN0Lm8gc3NoY29ubmVjdDIubyBtdXgubyBz c2gtcGtjczExLm8gc3NoLXBrY3MxMS11cmkubyAkKFNLT0JKUykKKyAKKyBTU0hET0JKUz1zc2hk Lm8gXAorIAlwbGF0Zm9ybS1saXN0ZW4ubyBcCitAQCAtMTYyLDExICsxNjIsMTEgQEAgU1NIQURE X09CSlM9CXNzaC1hZGQubyAkKFAxMU9CSlMpICQoU0tPQkpTKQorIAorIFNTSEFHRU5UX09CSlM9 CXNzaC1hZ2VudC5vICQoUDExT0JKUykgJChTS09CSlMpCisgCistU1NIS0VZR0VOX09CSlM9CXNz aC1rZXlnZW4ubyBzc2hzaWcubyBzc2gtcGtjczExLm8gJChTS09CSlMpCisrU1NIS0VZR0VOX09C SlM9CXNzaC1rZXlnZW4ubyBzc2hzaWcubyBzc2gtcGtjczExLm8gc3NoLXBrY3MxMS11cmkubyAk KFNLT0JKUykKKyAKKyBTU0hLRVlTSUdOX09CSlM9c3NoLWtleXNpZ24ubyByZWFkY29uZi5vIHVp ZHN3YXAubyAkKFAxMU9CSlMpICQoU0tPQkpTKQorIAorLVAxMUhFTFBFUl9PQkpTPQlzc2gtcGtj czExLWhlbHBlci5vIHNzaC1wa2NzMTEubyAkKFNLT0JKUykKKytQMTFIRUxQRVJfT0JKUz0Jc3No LXBrY3MxMS1oZWxwZXIubyBzc2gtcGtjczExLm8gc3NoLXBrY3MxMS11cmkubyAkKFNLT0JKUykK KyAKKyBTS0hFTFBFUl9PQkpTPQlzc2gtc2staGVscGVyLm8gc3NoLXNrLm8gc2stdXNiaGlkLm8g c3NoZXJyLW5vbGliY3J5cHRvLm8KKyAKK0BAIC0zMzYsNiArMzM2LDggQEAgY2xlYW46CXJlZ3Jl c3NjbGVhbgorIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy9zc2hzaWcvdGVzdF9zc2hzaWckKEVY RUVYVCkKKyAJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvdXRmOC8qLm8KKyAJcm0gLWYgcmVncmVz cy91bml0dGVzdHMvdXRmOC90ZXN0X3V0ZjgkKEVYRUVYVCkKKysJcm0gLWYgcmVncmVzcy91bml0 dGVzdHMvcGtjczExLyoubworKwlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdF9w a2NzMTEkKEVYRUVYVCkKKyAJcm0gLWYgcmVncmVzcy9taXNjL3NrLWR1bW15LyoubworIAlybSAt ZiByZWdyZXNzL21pc2Mvc2stZHVtbXkvKi5sbworIAlybSAtZiByZWdyZXNzL21pc2Mvc3NoLXZl cmlmeS1hdHRlc3RhdGlvbi9zc2gtdmVyaWZ5LWF0dGVzdGF0aW9uJChFWEVFWFQpCitAQCAtMzc5 LDYgKzM4MSw4IEBAIGRpc3RjbGVhbjoJcmVncmVzc2NsZWFuCisgCXJtIC1mIHJlZ3Jlc3MvdW5p dHRlc3RzL3NzaHNpZy90ZXN0X3NzaHNpZworIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4 LyoubworIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOAorKwlybSAtZiBy ZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvKi5vCisrCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3Br Y3MxMS90ZXN0X3BrY3MxMQorIAlybSAtZiByZWdyZXNzL21pc2Mvc2stZHVtbXkvKi5vCisgCXJt IC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8qLmxvCisgCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zay1k dW1teS9zay1kdW1teS5zbworQEAgLTU2MSw2ICs1NjUsNyBAQCByZWdyZXNzLXByZXA6CisgCSQo TUtESVJfUCkgYHB3ZGAvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5CisgCSQoTUtESVJfUCkgYHB3 ZGAvcmVncmVzcy91bml0dGVzdHMvc3Noc2lnCisgCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy91 bml0dGVzdHMvdXRmOAorKwkkKE1LRElSX1ApIGBwd2RgL3JlZ3Jlc3MvdW5pdHRlc3RzL3BrY3Mx MQorIAkkKE1LRElSX1ApIGBwd2RgL3JlZ3Jlc3MvbWlzYy9zay1kdW1teQorIAkkKE1LRElSX1Ap IGBwd2RgL3JlZ3Jlc3MvbWlzYy9zc2gtdmVyaWZ5LWF0dGVzdGF0aW9uCisgCVsgLWYgYHB3ZGAv cmVncmVzcy9NYWtlZmlsZSBdIHx8IFwKK0BAIC03NjQsNiArNzY5LDE2IEBAIHJlZ3Jlc3MvdW5p dHRlc3RzL3V0ZjgvdGVzdF91dGY4JChFWEVFWFQpOiBcCisgCSAgICByZWdyZXNzL3VuaXR0ZXN0 cy90ZXN0X2hlbHBlci9saWJ0ZXN0X2hlbHBlci5hIFwKKyAJICAgIC1sc3NoIC1sb3BlbmJzZC1j b21wYXQgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAkKFRFU1RMSUJTKQorIAorK1VOSVRURVNUU19U RVNUX1BLQ1MxMV9PQkpTPVwKKysJcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLm8KKysK KytyZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdF9wa2NzMTEkKEVYRUVYVCk6IFwKKysgICAg JHtVTklUVEVTVFNfVEVTVF9QS0NTMTFfT0JKU30gc3NoLXBrY3MxMS11cmkubyBcCisrICAgIHJl Z3Jlc3MvdW5pdHRlc3RzL3Rlc3RfaGVscGVyL2xpYnRlc3RfaGVscGVyLmEgbGlic3NoLmEKKysJ JChMRCkgLW8gJEAgJChMREZMQUdTKSAkKFVOSVRURVNUU19URVNUX1BLQ1MxMV9PQkpTKSBcCisr CSAgICByZWdyZXNzL3VuaXR0ZXN0cy90ZXN0X2hlbHBlci9saWJ0ZXN0X2hlbHBlci5hIFwKKysJ ICAgIHNzaC1wa2NzMTEtdXJpLm8gLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAtbGNyeXB0byAkKExJ QlMpIC1sbQorKworICMgVGhlc2UgYWxsIG5lZWQgdG8gYmUgY29tcGlsZWQgLWZQSUMsIHNvIHRo ZXkgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuCisgU0tfRFVNTVlfT0JKUz1cCisgCXJlZ3Jlc3Mv bWlzYy9zay1kdW1teS9zay1kdW1teS5sbyBcCitAQCAtODExLDcgKzgyNiw4IEBAIHJlZ3Jlc3Mt dW5pdC1iaW5hcmllczogcmVncmVzcy1wcmVwICQoUkVHUkVTU0xJQlMpIFwKKyAJcmVncmVzcy91 bml0dGVzdHMvc3NoYnVmL3Rlc3Rfc3NoYnVmJChFWEVFWFQpIFwKKyAJcmVncmVzcy91bml0dGVz dHMvc3Noa2V5L3Rlc3Rfc3Noa2V5JChFWEVFWFQpIFwKKyAJcmVncmVzcy91bml0dGVzdHMvc3No c2lnL3Rlc3Rfc3Noc2lnJChFWEVFWFQpIFwKKy0JcmVncmVzcy91bml0dGVzdHMvdXRmOC90ZXN0 X3V0ZjgkKEVYRUVYVCkKKysJcmVncmVzcy91bml0dGVzdHMvdXRmOC90ZXN0X3V0ZjgkKEVYRUVY VCkgXAorKwlyZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdF9wa2NzMTEkKEVYRUVYVCkgXAor IAorIHRlc3RzOglmaWxlLXRlc3RzIHQtZXhlYyBpbnRlcm9wLXRlc3RzIGV4dHJhLXRlc3RzIHVu aXQKKyAJZWNobyBhbGwgdGVzdHMgcGFzc2VkCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIv Y29uZmlndXJlLmFjCitpbmRleCBiMmM5NTlmZjMuLmMzN2IwMmVmYiAxMDA2NDQKKy0tLSBhL2Nv bmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjMwNSwxMiArMjMwNSwxNCBAQCBB Q19MSU5LX0lGRUxTRSgKKyAJW0FDX0RFRklORShbSEFWRV9JU0JMQU5LXSwgWzFdLCBbRGVmaW5l IGlmIHlvdSBoYXZlIGlzYmxhbmsoM0MpLl0pCisgXSkKKyAKKytTQ0FSRF9NU0c9InllcyIKKyBk aXNhYmxlX3BrY3MxMT0KKyBBQ19BUkdfRU5BQkxFKFtwa2NzMTFdLAorIAlbICAtLWRpc2FibGUt cGtjczExICAgICAgICBkaXNhYmxlIFBLQ1MjMTEgc3VwcG9ydCBjb2RlIFtub11dLAorIAlbCisg CQlpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSAieG5vIiA7IHRoZW4KKyAJCQlkaXNhYmxlX3BrY3Mx MT0xCisrCQkJU0NBUkRfTVNHPSJubyIKKyAJCWZpCisgCV0KKyApCitAQCAtMjM0MCw2ICsyMzQy LDQwIEBAIEFDX1NFQVJDSF9MSUJTKFtkbG9wZW5dLCBbZGxdKQorIEFDX0NIRUNLX0ZVTkNTKFtk bG9wZW5dKQorIEFDX0NIRUNLX0RFQ0woW1JUTERfTk9XXSwgW10sIFtdLCBbI2luY2x1ZGUgPGRs ZmNuLmg+XSkKKyAKKysjIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIHAxMS1raXQsIHdlIGdvdCBk ZWZhdWx0IHByb3ZpZGVyIG9uIGNvbW1hbmQgbGluZQorK0RFRkFVTFRfUEtDUzExX1BST1ZJREVS X01TRz0ibm8iCisrQUNfQVJHX1dJVEgoW2RlZmF1bHQtcGtjczExLXByb3ZpZGVyXSwKKysJWyAg LS13aXRoLWRlZmF1bHQtcGtjczExLXByb3ZpZGVyW1s9UEFUSF1dICAgVXNlIGRlZmF1bHQgcGtj czExIHByb3ZpZGVyIChwMTEta2l0IGRldGVjdGVkIGJ5IGRlZmF1bHQpXSwKKysJWyBpZiB0ZXN0 ICJ4JHdpdGh2YWwiICE9ICJ4bm8iICYmIHRlc3QgIngkZGlzYWJsZV9wa2NzMTEiID0gIngiOyB0 aGVuCisrCQlpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiIDsgdGhlbgorKwkJCUFDX1BBVEhf VE9PTChbUEtHQ09ORklHXSwgW3BrZy1jb25maWddLCBbbm9dKQorKwkJCWlmIHRlc3QgIngkUEtH Q09ORklHIiAhPSAieG5vIjsgdGhlbgorKwkJCQlBQ19NU0dfQ0hFQ0tJTkcoW2lmICRQS0dDT05G SUcga25vd3MgYWJvdXQgcDExLWtpdF0pCisrCQkJCWlmICIkUEtHQ09ORklHIiAicDExLWtpdC0x IjsgdGhlbgorKwkJCQkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKysJCQkJCXVzZV9wa2djb25maWdf Zm9yX3AxMWtpdD15ZXMKKysJCQkJZWxzZQorKwkJCQkJQUNfTVNHX1JFU1VMVChbbm9dKQorKwkJ CQlmaQorKwkJCWZpCisrCQllbHNlCisrCQkJUEtDUzExX1BBVEg9IiR7d2l0aHZhbH0iCisrCQlm aQorKwkJaWYgdGVzdCAieCR1c2VfcGtnY29uZmlnX2Zvcl9wMTFraXQiID0gInh5ZXMiOyB0aGVu CisrCQkJUEtDUzExX1BBVEg9YCRQS0dDT05GSUcgLS12YXJpYWJsZT1wcm94eV9tb2R1bGUgcDEx LWtpdC0xYAorKwkJZmkKKysJCUFDX0NIRUNLX0ZJTEUoIiRQS0NTMTFfUEFUSCIsCisrCQkJWyBB Q19ERUZJTkVfVU5RVU9URUQoW1BLQ1MxMV9ERUZBVUxUX1BST1ZJREVSXSwgWyIkUEtDUzExX1BB VEgiXSwgW1BhdGggdG8gZGVmYXVsdCBQS0NTIzExIHByb3ZpZGVyIChwMTEta2l0IHByb3h5KV0p CisrCQkJICBERUZBVUxUX1BLQ1MxMV9QUk9WSURFUl9NU0c9IiRQS0NTMTFfUEFUSCIKKysJCQld LAorKwkJCVsgQUNfTVNHX0VSUk9SKFtSZXF1ZXN0ZWQgUEtDUzExIHByb3ZpZGVkIG5vdCBmb3Vu ZF0pIF0KKysJCSkKKysJZWxzZQorKwkJQUNfTVNHX1dBUk4oW05lZWRzIFBLQ1MxMSBzdXBwb3J0 IHRvIGVuYWJsZSBkZWZhdWx0IHBrY3MxMSBwcm92aWRlcl0pCisrCWZpIF0KKyspCisrCisrCisg IyBJUklYIGhhcyBhIGNvbnN0IGNoYXIgcmV0dXJuIHZhbHVlIGZvciBnYWlfc3RyZXJyb3IoKQor IEFDX0NIRUNLX0ZVTkNTKFtnYWlfc3RyZXJyb3JdLCBbCisgCUFDX0RFRklORShbSEFWRV9HQUlf U1RSRVJST1JdKQorQEAgLTU5MjEsNiArNTk1Nyw3IEBAIGVjaG8gIiAgICAgICAgICAgICAgICAg IEJTRCBBdXRoIHN1cHBvcnQ6ICRCU0RfQVVUSF9NU0ciCisgZWNobyAiICAgICAgICAgICAgICBS YW5kb20gbnVtYmVyIHNvdXJjZTogJFJBTkRfTVNHIgorIGVjaG8gIiAgICAgICAgICAgICBQcml2 c2VwIHNhbmRib3ggc3R5bGU6ICRTQU5EQk9YX1NUWUxFIgorIGVjaG8gIiAgICAgICAgICAgICAg ICAgICBQS0NTIzExIHN1cHBvcnQ6ICRlbmFibGVfcGtjczExIgorK2VjaG8gIiAgICAgICAgICBE ZWZhdWx0IFBLQ1MjMTEgcHJvdmlkZXI6ICRERUZBVUxUX1BLQ1MxMV9QUk9WSURFUl9NU0ciCisg ZWNobyAiICAgICAgICAgICAgICAgICAgVTJGL0ZJRE8gc3VwcG9ydDogJGVuYWJsZV9zayIKKyAK KyBlY2hvICIiCitkaWZmIC0tZ2l0IGEvcmVncmVzcy9NYWtlZmlsZSBiL3JlZ3Jlc3MvTWFrZWZp bGUKK2luZGV4IGZhMTlhZGEyOC4uNDkyMTEyZTgwIDEwMDY0NAorLS0tIGEvcmVncmVzcy9NYWtl ZmlsZQorKysrIGIvcmVncmVzcy9NYWtlZmlsZQorQEAgLTExOCw2ICsxMTgsNyBAQCBMVEVTVFM9 IAljb25uZWN0IFwKKyAJCXBlbmFsdHktZXhwaXJlIFwKKyAJCWNvbm5lY3QtYmlnY29uZiBcCisg CQlzc2gtcGtjczExIFwKKysJCXBrY3MxMS11cmkgXAorIAkJc3NoLXR0eSBcCisgCQlwcm94eWp1 bXAKKyAKK0BAIC0xNDQsNyArMTQ1LDggQEAgQ0xFQU5GSUxFUz0JKi5jb3JlIGFjdHVhbCBhZ2Vu dC1rZXkuKiBhdXRob3JpemVkX2tleXNfJHtVU0VSTkFNRX0gXAorIAkJa25vd25faG9zdHMga25v d25faG9zdHMtY2VydCBrbm93bl9ob3N0cy4qIGtybC0qIGxzLmNvcHkgXAorIAkJbW9kcGlwZSBu ZXRjYXQgbm9faWRlbnRpdHlfY29uZmlnIFwKKyAJCXBpZGZpbGUgcHV0dHkucnNhMiByZWFkeSBy ZWdyZXNzLmxvZyByZW1vdGVfcGlkIFwKKy0JCXJldm9rZWQtKiByc2EgcnNhLWFnZW50IHJzYS1h Z2VudC5wdWIgcnNhLnB1YiByc2Ffc3NoMl9jci5wcnYgXAorKwkJcmV2b2tlZC0qIHJzYSByc2Et YWdlbnQgcnNhLWFnZW50LnB1YiByc2EtYWdlbnQtY2VydC5wdWIgXAorKwkJcnNhLnB1YiByc2Ff c3NoMl9jci5wcnYgcGtjczExKi5jcnQgcGtjczExKi5rZXkgcGtjczExLmluZm8gXAorIAkJcnNh X3NzaDJfY3JubC5wcnYgc2NwLXNzaC13cmFwcGVyLmV4ZSBcCisgCQlzY3Atc3NoLXdyYXBwZXIu c2NwIHNldHVpZC1hbGxvd2VkIHNmdHAtc2VydmVyLmxvZyBcCisgCQlzZnRwLXNlcnZlci5zaCBz ZnRwLmxvZyBzc2gtbG9nLXdyYXBwZXIuc2ggc3NoLmxvZyBcCitAQCAtMjk0LDYgKzI5Niw3IEBA IHVuaXQgdW5pdC1iZW5jaDoKKyAJCXRlc3QgIngke1VOSVRURVNUX1ZFUkJPU0V9IiA9ICJ4IiB8 fCBBUkdTPSIkJEFSR1MgLXYiOyBcCisgCQl0ZXN0ICJ4JHtVTklUVEVTVF9CRU5DSF9ERVRBSUx9 IiA9ICJ4IiB8fCBBUkdTPSIkJEFSR1MgLUIiOyBcCisgCQl0ZXN0ICJ4JHtVTklUVEVTVF9CRU5D SF9PTkxZfSIgPSAieCIgfHwgQVJHUz0iJCRBUkdTIC1PICR7VU5JVFRFU1RfQkVOQ0hfT05MWX0i OyBcCisrCQkgJCRWICR7Lk9CSkRJUn0vdW5pdHRlc3RzL3BrY3MxMS90ZXN0X3BrY3MxMSA7IFwK KyAJCSAkJFYgJHsuT0JKRElSfS91bml0dGVzdHMvc3NoYnVmL3Rlc3Rfc3NoYnVmICQke0FSR1N9 OyBcCisgCQkgJCRWICR7Lk9CSkRJUn0vdW5pdHRlc3RzL3NzaGtleS90ZXN0X3NzaGtleSBcCisg CQkJLWQgJHsuQ1VSRElSfS91bml0dGVzdHMvc3Noa2V5L3Rlc3RkYXRhICQke0FSR1N9OyBcCitk aWZmIC0tZ2l0IGEvcmVncmVzcy9wa2NzMTEtdXJpLnNoIGIvcmVncmVzcy9wa2NzMTEtdXJpLnNo CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi43MmQ2OWJkYTAKKy0tLSAv ZGV2L251bGwKKysrKyBiL3JlZ3Jlc3MvcGtjczExLXVyaS5zaAorQEAgLTAsMCArMSw0MTAgQEAK KysjCisrIyAgQ29weXJpZ2h0IChjKSAyMDE3IFJlZCBIYXQKKysjCisrIyAgQXV0aG9yczogSmFr dWIgSmVsZW4gPGpqZWxlbkByZWRoYXQuY29tPgorKyMKKysjICBQZXJtaXNzaW9uIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKysjICBw dXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRo YXQgdGhlIGFib3ZlCisrIyAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysjCisrIyAgVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisrIyAg V0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO VElFUyBPRgorKyMgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisrIyAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5E SVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworKyMgIFdIQVRT T0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhF UiBJTiBBTgorKyMgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU SU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisrIyAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysKKyt0aWQ9InBrY3MxMSB0 ZXN0cyB3aXRoIHNvZnQgdG9rZW4iCisrCisrdHJ5X3Rva2VuX2xpYnMoKSB7CisrCWZvciBfbGli IGluICIkQCIgOyBkbworKwkJaWYgdGVzdCAtZiAiJF9saWIiIDsgdGhlbgorKwkJCXZlcmJvc2Ug IlVzaW5nIHRva2VuIGxpYnJhcnkgJF9saWIiCisrCQkJVEVTVF9TU0hfUEtDUzExPSIkX2xpYiIK KysJCQlyZXR1cm4KKysJCWZpCisrCWRvbmUKKysJZWNobyAic2tpcHBlZDogVW5hYmxlIHRvIGZp bmQgUEtDUyMxMSB0b2tlbiBsaWJyYXJ5IgorKwlleGl0IDAKKyt9CisrCisrdHJ5X3Rva2VuX2xp YnMgXAorKwkvdXNyL2xvY2FsL2xpYi9zb2Z0aHNtL2xpYnNvZnRoc20yLnNvIFwKKysJL3Vzci9s aWI2NC9wa2NzMTEvbGlic29mdGhzbTIuc28gXAorKwkvdXNyL2xpYi94ODZfNjQtbGludXgtZ251 L3NvZnRoc20vbGlic29mdGhzbTIuc28KKysKKytURVNUX1NTSF9QSU49MTIzNAorK1RFU1RfU1NI X1NPUElOPTEyMzQ1Njc4CisraWYgWyAieCRURVNUX1NTSF9TU0hQS0NTMTFIRUxQRVIiICE9ICJ4 IiBdOyB0aGVuCisrCVNTSF9QS0NTMTFfSEVMUEVSPSIke1RFU1RfU1NIX1NTSFBLQ1MxMUhFTFBF Un0iCisrCWV4cG9ydCBTU0hfUEtDUzExX0hFTFBFUgorK2ZpCisrCisrdGVzdCAtZiAiJFRFU1Rf U1NIX1BLQ1MxMSIgfHwgZmF0YWwgIiRURVNUX1NTSF9QS0NTMTEgZG9lcyBub3QgZXhpc3QiCisr CisrIyBzZXR1cCBlbnZpcm9ubWVudCBmb3Igc29mdGhzbSB0b2tlbgorK0RJUj0kT0JKL1NPRlRI U00KKytybSAtcmYgJERJUgorK1RPS0VOPSRESVIvdG9rZW5kaXIKKytta2RpciAtcCAkVE9LRU4K KytTT0ZUSFNNMl9DT05GPSRESVIvc29mdGhzbTIuY29uZgorK2V4cG9ydCBTT0ZUSFNNMl9DT05G CisrY2F0ID4gJFNPRlRIU00yX0NPTkYgPDwgRU9GCisrIyBTb2Z0SFNNIHYyIGNvbmZpZ3VyYXRp b24gZmlsZQorK2RpcmVjdG9yaWVzLnRva2VuZGlyID0gJHtUT0tFTn0KKytvYmplY3RzdG9yZS5i YWNrZW5kID0gZmlsZQorKyMgRVJST1IsIFdBUk5JTkcsIElORk8sIERFQlVHCisrbG9nLmxldmVs ID0gREVCVUcKKysjIElmIENLRl9SRU1PVkFCTEVfREVWSUNFIGZsYWcgc2hvdWxkIGJlIHNldAor K3Nsb3RzLnJlbW92YWJsZSA9IGZhbHNlCisrRU9GCisrb3V0PSQoc29mdGhzbTItdXRpbCAtLWlu aXQtdG9rZW4gLS1mcmVlIC0tbGFiZWwgdG9rZW4tc2xvdC0wIC0tcGluICIkVEVTVF9TU0hfUElO IiAtLXNvLXBpbiAiJFRFU1RfU1NIX1NPUElOIikKKytzbG90PSQoZWNobyAtLSAkb3V0IHwgc2Vk ICdzLy4qIC8vJykKKysKKysjIHByZXZlbnQgc3NoLWFnZW50IGZyb20gY2FsbGluZyBzc2gtYXNr cGFzcworK1NTSF9BU0tQQVNTPS91c3IvYmluL3RydWUKKytleHBvcnQgU1NIX0FTS1BBU1MKKyt1 bnNldCBESVNQTEFZCisrIyBXZSBuZWVkIGludGVyYWN0aXZlIGFjY2VzcyB0byB0ZXN0IFBLQ1Mj IHNpbmNlIGl0IHByb21wdHMgZm9yIFBJTgorKyMgQmFja3VwIHNzaF9wcm94eSBiZWZvcmUgbW9k aWZpY2F0aW9ucworK2NwICRPQkovc3NoX3Byb3h5ICRPQkovc3NoX3Byb3h5X2JhaworK3NlZCAt aSAncy8uKkJhdGNoTW9kZS4qLy9nJyAkT0JKL3NzaF9wcm94eQorKyMgUmVtb3ZlIElkZW50aXR5 RmlsZSBlbnRyaWVzIHRvIHByZXZlbnQgZXhjZWVkaW5nIE1heEF1dGhUcmllcyB3aGVuIHVzaW5n CisrIyBQS0NTMTFQcm92aWRlciAoLUkpIG9yIFBLQ1MxMSBVUklzLiBUaGUgZGVmYXVsdCBzc2hf Y29uZmlnIGluY2x1ZGVzIG11bHRpcGxlCisrIyBpZGVudGl0eSBmaWxlcyB0aGF0IHdvdWxkIGJl IHRyaWVkIGJlZm9yZSBQS0NTMTEga2V5cywgY2F1c2luZyBhdXRoZW50aWNhdGlvbgorKyMgdG8g ZmFpbCB3aXRoICJUb28gbWFueSBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcyIgYmVmb3JlIFBLQ1Mx MSBrZXlzIGFyZSByZWFjaGVkLgorK2dyZXAgLWl2IElkZW50aXR5RmlsZSAkT0JKL3NzaF9wcm94 eSA+ICRPQkovc3NoX3Byb3h5LnRtcAorK212ICRPQkovc3NoX3Byb3h5LnRtcCAkT0JKL3NzaF9w cm94eQorKworKyMgc3RhcnQgY29tbWFuZCB3L28gdHR5LCBzbyBzc2ggYWNjZXB0cyBwaW4gZnJv bSBzdGRpbiAoZnJvbSBhZ2VudC1wa2NzMTEuc2gpCisrbm90dHkoKSB7CisrCXBlcmwgLWUgJ3Vz ZSBQT1NJWDsgUE9TSVg6OnNldHNpZCgpOworKwkgICAgaWYgKGZvcmspIHsgd2FpdDsgZXhpdCgk PyA+PiA4KTsgfSBlbHNlIHsgZXhlYyhAQVJHVikgfScgIiRAIgorK30KKysKKyt0cmFjZSAiZ2Vu ZXJhdGluZyBrZXlzIgorK0lEMT0iMDIiCisrSUQyPSIwNCIKKytJRDM9IjA2IgorK1JTQT0ke0RJ Un0vUlNBCisrRUM9JHtESVJ9L0VDCisrRUQyNTUxOT0ke0RJUn0vRUQyNTUxOQorK29wZW5zc2wg Z2VucGtleSAtYWxnb3JpdGhtIHJzYSA+ICRSU0EKKytvcGVuc3NsIHBrY3M4IC1ub2NyeXB0IC1p biAkUlNBIHxcCisrICAgIHNvZnRoc20yLXV0aWwgLS1zbG90ICIkc2xvdCIgLS1sYWJlbCAiU1NI IFJTQSBLZXkgJElEMSIgLS1pZCAkSUQxIFwKKysJLS1waW4gIiRURVNUX1NTSF9QSU4iIC0taW1w b3J0IC9kZXYvc3RkaW4KKytvcGVuc3NsIGdlbnBrZXkgXAorKyAgICAtZ2VucGFyYW0gXAorKyAg ICAtYWxnb3JpdGhtIGVjIFwKKysgICAgLXBrZXlvcHQgZWNfcGFyYW1nZW5fY3VydmU6cHJpbWUy NTZ2MSB8XAorKyAgICBvcGVuc3NsIGdlbnBrZXkgXAorKyAgICAtcGFyYW1maWxlIC9kZXYvc3Rk aW4gPiAkRUMKKytvcGVuc3NsIHBrY3M4IC1ub2NyeXB0IC1pbiAkRUMgfFwKKysgICAgc29mdGhz bTItdXRpbCAtLXNsb3QgIiRzbG90IiAtLWxhYmVsICJTU0ggRUNEU0EgS2V5ICRJRDIiIC0taWQg JElEMiBcCisrCS0tcGluICIkVEVTVF9TU0hfUElOIiAtLWltcG9ydCAvZGV2L3N0ZGluCisrb3Bl bnNzbCBnZW5wa2V5IC1hbGdvcml0aG0gZWQyNTUxOSA+ICRFRDI1NTE5Cisrb3BlbnNzbCBwa2Nz OCAtbm9jcnlwdCAtaW4gJEVEMjU1MTkgfFwKKysgICAgc29mdGhzbTItdXRpbCAtLXNsb3QgIiRz bG90IiAtLWxhYmVsICJTU0ggRUQyNTUxOSBLZXkgJElEMyIgLS1pZCAkSUQzIFwKKysJLS1waW4g IiRURVNUX1NTSF9QSU4iIC0taW1wb3J0IC9kZXYvc3RkaW4KKysKKyt0cmFjZSAiTGlzdCB0aGUg a2V5cyBpbiB0aGUgc3NoLWtleWdlbiB3aXRoIFBLQ1MjMTEgVVJJcyIKKyske1NTSEtFWUdFTn0g LUQgJHtURVNUX1NTSF9QS0NTMTF9ID4gJE9CSi90b2tlbl9rZXlzCisraWYgWyAkPyAtbmUgMCBd OyB0aGVuCisrCWZhaWwgIkZBSUw6IGtleWdlbiBmYWlscyB0byBlbnVtZXJhdGUga2V5cyBvbiBQ S0NTIzExIHRva2VuIgorK2ZpCisrZ3JlcCAicGtjczExOiIgJE9CSi90b2tlbl9rZXlzID4gL2Rl di9udWxsCisraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IFRoZSBrZXlzIGZy b20gc3NoLWtleWdlbiBkbyBub3QgY29udGFpbiBQS0NTIzExIFVSSSBhcyBhIGNvbW1lbnQiCisr ZmkKKysKKysjIFNldCB0aGUgRUNEU0Ega2V5IHRvIGF1dGhvcml6ZWQga2V5cworK2dyZXAgIkVD RFNBIiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgorKworK3Ry YWNlICJTaW1wbGUgY29ubmVjdCB3aXRoIHNzaCAod2l0aG91dCBQS0NTIzExIFVSSSkiCisrZWNo byAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUkgJHtURVNUX1NTSF9QS0NTMTF9IFwK KysgICAgLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIg LW5lIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIHBrY3MxMSBmYWls ZWQgKGV4aXQgY29kZSAkcikiCisrZmkKKysKKyt0cmFjZSAiQ29ubmVjdCB3aXRoIFBLQ1MjMTEg VVJJIgorK3RyYWNlICIgIChFQ0RTQSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgorK2VjaG8gJHtURVNU X1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysgICAgLWkgInBr Y3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3Qg ZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2gg Y29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKwor K3RyYWNlICIgIChSU0Ega2V5IHNob3VsZCBmYWlsKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8 IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCisrICAgICAtaSAicGtjczExOmlkPSUk e0lEMX0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKyty PSQ/CisraWYgWyAkciAtZXEgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdp dGggUEtDUyMxMSBVUkkgc3VjY2VlZGVkIChzaG91bGQgZmFpbCkiCisrZmkKKysKKysjIFNldCB0 aGUgRUQyNTUxOSBrZXkgYXMgYXV0aG9yaXplZAorK2dyZXAgIkVEMjU1MTkiICRPQkovdG9rZW5f a2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIiAgKEVEMjU1MTkg a2V5IHNob3VsZCBzdWNjZWVkKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NI fSAtRiAkT0JKL3NzaF9wcm94eSBcCisrICAgICAtaSAicGtjczExOmlkPSUke0lEM30/bW9kdWxl LXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAk ciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBV UkkgKEVkMjU1MTkpIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworKyMgU2V0IHRoZSBF Q0RTQSBrZXkgYmFjayBhcyBhdXRob3JpemVkCisrZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5 cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIkNvbm5lY3Qgd2l0aCBQ S0NTIzExIFVSSSBpbmNsdWRpbmcgUElOIHNob3VsZCBub3QgcHJvbXB0IgorK3RyYWNlICIgIChF Q0RTQSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgorKyR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSAtaSBc CisrICAgICJwa2NzMTE6aWQ9JSR7SUQyfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0m cGluLXZhbHVlPSR7VEVTVF9TU0hfUElOfSIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsg JHIgLW5lIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEg VVJJIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworK3RyYWNlICIgIChSU0Ega2V5IHNo b3VsZCBmYWlsKSIKKyske1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgLWkgXAorKyAgICAicGtjczEx OmlkPSUke0lEMX0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9JnBpbi12YWx1ZT0ke1RF U1RfU1NIX1BJTn0iIHNvbWVob3N0IGV4aXQgNQorK3I9JD8KKytpZiBbICRyIC1lcSA1IF07IHRo ZW4KKysJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBzdWNjZWVkZWQg KHNob3VsZCBmYWlsKSIKKytmaQorKworKyMgU2V0IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3Jp emVkCisrZ3JlcCAiRUQyNTUxOSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tl eXNfJFVTRVIKKysKKyt0cmFjZSAiICAoRUQyNTUxOSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgorKyR7 U1NIfSAtRiAkT0JKL3NzaF9wcm94eSAtaSBcCisrICAgICJwa2NzMTE6aWQ9JSR7SUQzfT9tb2R1 bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0mcGluLXZhbHVlPSR7VEVTVF9TU0hfUElOfSIgc29t ZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgorKwlmYWlsICJGQUlM OiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIChFZDI1NTE5KSBmYWlsZWQgKGV4aXQgY29k ZSAkcikiCisrZmkKKysKKysjIFNldCB0aGUgRUNEU0Ega2V5IGJhY2sgYXMgYXV0aG9yaXplZAor K2dyZXAgIkVDRFNBIiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNF UgorKworK3RyYWNlICJDb25uZWN0IHdpdGggdmFyaW91cyBmaWx0ZXJpbmcgb3B0aW9ucyBpbiBQ S0NTIzExIFVSSSIKKyt0cmFjZSAiICAoYnkgb2JqZWN0IGxhYmVsLCBFQ0RTQSBzaG91bGQgc3Vj Y2VlZCkiCisrZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hf cHJveHkgXAorKyAgICAtaSAicGtjczExOm9iamVjdD1TU0glMjBFQ0RTQSUyMEtleSUyMDA0P21v ZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lm IFsgJHIgLW5lIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1Mj MTEgVVJJIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworK3RyYWNlICIgIChieSBvYmpl Y3QgbGFiZWwsIFJTQSBrZXkgc2hvdWxkIGZhaWwpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwg bm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysgICAgIC1pICJwa2NzMTE6b2JqZWN0 PVNTSCUyMFJTQSUyMEtleSUyMDAyP21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29t ZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLWVxIDUgXTsgdGhlbgorKwlmYWlsICJGQUlM OiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgor K2ZpCisrCisrIyBTZXQgdGhlIEVEMjU1MTkga2V5IGFzIGF1dGhvcml6ZWQKKytncmVwICJFRDI1 NTE5IiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgorKworK3Ry YWNlICIgIChieSBvYmplY3QgbGFiZWwsIEVEMjU1MTkga2V5IHNob3VsZCBzdWNjZWVkKSIKKytl Y2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCisr ICAgICAtaSAicGtjczExOm9iamVjdD1TU0glMjBFRDI1NTE5JTIwS2V5JTIwMDY/bW9kdWxlLXBh dGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAt bmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkg KEVkMjU1MTkpIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworKyMgU2V0IHRoZSBFQ0RT QSBrZXkgYmFjayBhcyBhdXRob3JpemVkCisrZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIiAgKGJ5IHRva2VuIGxhYmVs LCBFQ0RTQSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90 dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysgICAgLWkgInBrY3MxMTppZD0lJHtJRDJ9 O3Rva2VuPXRva2VuLXNsb3QtMD9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVo b3N0IGV4aXQgNQorK3I9JD8KKytpZiBbICRyIC1uZSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDog c3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBmYWlsZWQgKGV4aXQgY29kZSAkcikiCisrZmkK KysKKysjIFNldCB0aGUgRUQyNTUxOSBrZXkgYXMgYXV0aG9yaXplZAorK2dyZXAgIkVEMjU1MTki ICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCisrCisrdHJhY2Ug IiAgKGJ5IHRva2VuIGxhYmVsLCBFRDI1NTE5IGtleSBzaG91bGQgc3VjY2VlZCkiCisrZWNobyAk e1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAgICAt aSAicGtjczExOmlkPSUke0lEM307dG9rZW49dG9rZW4tc2xvdC0wP21vZHVsZS1wYXRoPSR7VEVT VF9TU0hfUEtDUzExfSIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsg dGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIChFZDI1NTE5 KSBmYWlsZWQgKGV4aXQgY29kZSAkcikiCisrZmkKKysKKysjIFNldCB0aGUgRUNEU0Ega2V5IGJh Y2sgYXMgYXV0aG9yaXplZAorK2dyZXAgIkVDRFNBIiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1 dGhvcml6ZWRfa2V5c18kVVNFUgorKworK3RyYWNlICIgIChieSB3cm9uZyB0b2tlbiBsYWJlbCwg c2hvdWxkIGZhaWwpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRP Qkovc3NoX3Byb3h5IFwKKysgICAgIC1pICJwa2NzMTE6dG9rZW49dG9rZW4tc2xvdC05OT9tb2R1 bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQorK3I9JD8KKytpZiBb ICRyIC1lcSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzEx IFVSSSBzdWNjZWVkZWQgKHNob3VsZCBmYWlsKSIKKytmaQorKworKworKworKworK3RyYWNlICJU ZXN0IFBLQ1MjMTEgVVJJIHNwZWNpZmljYXRpb24gaW4gY29uZmlndXJhdGlvbiBmaWxlcyIKKytl Y2hvICJJZGVudGl0eUZpbGUgXCJwa2NzMTE6aWQ9JSR7SUQyfT9tb2R1bGUtcGF0aD0ke1RFU1Rf U1NIX1BLQ1MxMX1cIiIgXAorKyAgICA+PiAkT0JKL3NzaF9wcm94eQorK3RyYWNlICIgIChFQ0RT QSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtT U0h9IC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4aXQgNQorK3I9JD8KKytpZiBbICRyIC1u ZSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBp biBjb25maWcgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2ZpCisrCisrIyBTZXQgdGhlIFJTQSBr ZXkgYXMgYXV0aG9yaXplZAorK2dyZXAgIlJTQSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRo b3JpemVkX2tleXNfJFVTRVIKKysKKyt0cmFjZSAiICAoUlNBIGtleSBzaG91bGQgZmFpbCkiCisr ZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29t ZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLWVxIDUgXTsgdGhlbgorKwlmYWlsICJGQUlM OiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGluIGNvbmZpZyBzdWNjZWVkZWQgKHNob3Vs ZCBmYWlsKSIKKytmaQorK3NlZCAtaSAtZSAiL0lkZW50aXR5RmlsZS9kIiAkT0JKL3NzaF9wcm94 eQorKworK3RyYWNlICJDb21iaW5hdGlvbiBvZiBQS0NTMTFQcm92aWRlciBhbmQgUEtDUzExVVJJ IG9uIGNvbW1hbmRsaW5lIgorK3RyYWNlICIgIChSU0Ega2V5IHNob3VsZCBzdWNjZWVkKSIKKytl Y2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCisr ICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQxfSIgLUkgJHtURVNUX1NTSF9QS0NTMTF9IHNvbWVob3N0 IGV4aXQgNQorK3I9JD8KKytpZiBbICRyIC1uZSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3No IGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBhbmQgcHJvdmlkZXIgY29tYmluYXRpb24iIFwKKysJ ICAgICJmYWlsZWQgKGV4aXQgY29kZSAkcikiCisrZmkKKysKKyt0cmFjZSAiUmVncmVzczogTWlz c2luZyBwcm92aWRlciBpbiBQS0NTMTFVUkkgb3B0aW9uIgorKyR7U1NIfSAtRiAkT0JKL3NzaF9w cm94eSBcCisrICAgIC1vIElkZW50aXR5RmlsZT1cInBrY3MxMTp0b2tlbj1zZWdmYXVsdFwiIHNv bWVob3N0IGV4aXQgNQorK3I9JD8KKytpZiBbICRyIC1lcSAxMzkgXTsgdGhlbgorKwlmYWlsICJG QUlMOiBzc2ggY29ubmVjdCB3aXRoIG1pc3NpbmcgcHJvdmlkZXJfaWQgZnJvbSBjb25maWd1cmF0 aW9uIG9wdGlvbiIgXAorKwkgICAgImNyYXNoZWQgKGV4aXQgY29kZSAkcikiCisrZmkKKysKKysK Kyt0cmFjZSAiU1NIIEFnZW50IGNhbiB3b3JrIHdpdGggUEtDUyMxMSBVUkkiCisrdHJhY2UgInN0 YXJ0IHRoZSBhZ2VudCIKKytldmFsIGAke1NTSEFHRU5UfSAtc2AgPiAgL2Rldi9udWxsCisrCisr cj0kPworK2lmIFsgJHIgLW5lIDAgXTsgdGhlbgorKwlmYWlsICJjb3VsZCBub3Qgc3RhcnQgc3No LWFnZW50OiBleGl0IGNvZGUgJHIiCisrZWxzZQorKwl0cmFjZSAiYWRkIHdob2xlIHByb3ZpZGVy IHRvIGFnZW50IgorKwllY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCisr CSAgICAicGtjczExOj9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iICM+IC9kZXYvbnVs bCAyPiYxCisrCXI9JD8KKysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlMOiBz c2gtYWRkIGZhaWxlZCB3aXRoIHdob2xlIHByb3ZpZGVyOiBleGl0IGNvZGUgJHIiCisrCWZpCisr CisrCXRyYWNlICIgcGtjczExIGxpc3QgdmlhIGFnZW50IChhbGwga2V5cykiCisrCSR7U1NIQURE fSAtbCA+IC9kZXYvbnVsbCAyPiYxCisrCXI9JD8KKysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisr CQlmYWlsICJGQUlMOiBzc2gtYWRkIC1sIGZhaWxlZCB3aXRoIHdob2xlIHByb3ZpZGVyOiBleGl0 IGNvZGUgJHIiCisrCWZpCisrCisrCXRyYWNlICIgcGtjczExIGNvbm5lY3QgdmlhIGFnZW50IChh bGwga2V5cykiCisrCSR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKKysJ cj0kPworKwlpZiBbICRyIC1uZSA1IF07IHRoZW4KKysJCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0 IGZhaWxlZCB3aXRoIHdob2xlIHByb3ZpZGVyIChleGl0IGNvZGUgJHIpIgorKwlmaQorKworKwl0 cmFjZSAiIHJlbW92ZSBwa2NzMTEga2V5cyAoYWxsIGtleXMpIgorKwkke1NTSEFERH0gLWQgInBr Y3MxMTo/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYvbnVsbCAyPiYxCisr CXI9JD8KKysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlMOiBzc2gtYWRkIC1k IGZhaWxlZCB3aXRoIHdob2xlIHByb3ZpZGVyOiBleGl0IGNvZGUgJHIiCisrCWZpCisrCisrCXRy YWNlICJhZGQgb25seSBSU0Ega2V5IHRvIHRoZSBhZ2VudCIKKysJZWNobyAke1RFU1RfU1NIX1BJ Tn0gfCBub3R0eSAke1NTSEFERH0gXAorKwkgICAgInBrY3MxMTppZD0lJHtJRDF9P21vZHVsZS1w YXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgPiAvZGV2L251bGwgMj4mMQorKwlyPSQ/CisrCWlmIFsg JHIgLW5lIDAgXTsgdGhlbgorKwkJZmFpbCAiRkFJTCBzc2gtYWRkIGZhaWxlZCB3aXRoIFJTQSBr ZXk6IGV4aXQgY29kZSAkciIKKysJZmkKKysKKysJdHJhY2UgIiBwa2NzMTEgY29ubmVjdCB2aWEg YWdlbnQgKFJTQSBrZXkpIgorKwkke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhp dCA1CisrCXI9JD8KKysJaWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCQlmYWlsICJGQUlMOiBzc2gg Y29ubmVjdCBmYWlsZWQgd2l0aCBSU0Ega2V5IChleGl0IGNvZGUgJHIpIgorKwlmaQorKworKwl0 cmFjZSAiIHJlbW92ZSBSU0EgcGtjczExIGtleSIKKysJJHtTU0hBRER9IC1kICJwa2NzMTE6aWQ9 JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIFwKKysJICAgID4gL2Rldi9u dWxsIDI+JjEKKysJcj0kPworKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KKysJCWZhaWwgIkZBSUw6 IHNzaC1hZGQgLWQgZmFpbGVkIHdpdGggUlNBIGtleTogZXhpdCBjb2RlICRyIgorKwlmaQorKwor Kwl0cmFjZSAiYWRkIG9ubHkgRUNEU0Ega2V5IHRvIHRoZSBhZ2VudCIKKysJZWNobyAke1RFU1Rf U1NIX1BJTn0gfCBub3R0eSAke1NTSEFERH0gXAorKwkgICAgInBrY3MxMTppZD0lJHtJRDJ9P21v ZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgPiAvZGV2L251bGwgMj4mMQorKwlyPSQ/Cisr CWlmIFsgJHIgLW5lIDAgXTsgdGhlbgorKwkJZmFpbCAiRkFJTDogc3NoLWFkZCBmYWlsZWQgd2l0 aCBzZWNvbmQga2V5OiBleGl0IGNvZGUgJHIiCisrCWZpCisrCisrCXRyYWNlICIgcGtjczExIGNv bm5lY3QgdmlhIGFnZW50IChFQ0RTQSBrZXkgc2hvdWxkIGZhaWwpIgorKwkke1NTSH0gLUYgJE9C Si9zc2hfcHJveHkgc29tZWhvc3QgZXhpdCA1CisrCXI9JD8KKysJaWYgWyAkciAtZXEgNSBdOyB0 aGVuCisrCQlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCBwYXNzZWQgd2l0aCBFQ0RTQSBrZXkgKHNo b3VsZCBmYWlsKSIKKysJZmkKKysKKysJdHJhY2UgImFkZCBhbHNvIHRoZSBSU0Ega2V5IHRvIHRo ZSBhZ2VudCIKKysJZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSEFERH0gXAorKwkg ICAgInBrY3MxMTppZD0lJHtJRDF9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgPiAv ZGV2L251bGwgMj4mMQorKwlyPSQ/CisrCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgorKwkJZmFpbCAi RkFJTDogc3NoLWFkZCBmYWlsZWQgd2l0aCBmaXJzdCBrZXk6IGV4aXQgY29kZSAkciIKKysJZmkK KysKKysJdHJhY2UgIiByZW1vdmUgRUNEU0EgcGtjczExIGtleSIKKysJJHtTU0hBRER9IC1kICJw a2NzMTE6aWQ9JSR7SUQyfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIFwKKysJICAg ID4gL2Rldi9udWxsIDI+JjEKKysJcj0kPworKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KKysJCWZh aWwgInNzaC1hZGQgLWQgZmFpbGVkIHdpdGggRUNEU0Ega2V5OiBleGl0IGNvZGUgJHIiCisrCWZp CisrCisrCXRyYWNlICIgcmVtb3ZlIGFscmVhZHktcmVtb3ZlZCBwa2NzMTEga2V5IHNob3VsZCBm YWlsIgorKwkke1NTSEFERH0gLWQgInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVT VF9TU0hfUEtDUzExfSIgXAorKwkgICAgPiAvZGV2L251bGwgMj4mMQorKwlyPSQ/CisrCWlmIFsg JHIgLWVxIDAgXTsgdGhlbgorKwkJZmFpbCAiRkFJTDogc3NoLWFkZCAtZCBwYXNzZWQgd2l0aCBu b24tZXhpc3Rpbmcga2V5IChzaG91bGQgZmFpbCkiCisrCWZpCisrCisrCXRyYWNlICIgcGtjczEx IGNvbm5lY3QgdmlhIGFnZW50ICh0aGUgUlNBIGtleSBzaG91bGQgYmUgc3RpbGwgdXNhYmxlKSIK KysJJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4aXQgNQorKwlyPSQ/CisrCWlm IFsgJHIgLW5lIDUgXTsgdGhlbgorKwkJZmFpbCAic3NoIGNvbm5lY3QgZmFpbGVkIHdpdGggUlNB IGtleSAoYWZ0ZXIgcmVtb3ZpbmcgRUNEU0EpOiBleGl0IGNvZGUgJHIiCisrCWZpCisrCisrCXRy YWNlICJraWxsIGFnZW50IgorKwkke1NTSEFHRU5UfSAtayA+IC9kZXYvbnVsbAorK2ZpCisrCisr IyBSZXN0b3JlIG9yaWdpbmFsIHNzaF9wcm94eQorK212ICRPQkovc3NoX3Byb3h5X2JhayAkT0JK L3NzaF9wcm94eQorZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvdW5pdHRlc3RzL01ha2VmaWxlIGIvcmVn cmVzcy91bml0dGVzdHMvTWFrZWZpbGUKK2luZGV4IDVkNDgyZWFiNC4uNTFiZWQ1YmFmIDEwMDY0 NAorLS0tIGEvcmVncmVzcy91bml0dGVzdHMvTWFrZWZpbGUKKysrKyBiL3JlZ3Jlc3MvdW5pdHRl c3RzL01ha2VmaWxlCitAQCAtMSw2ICsxLDYgQEAKKyAjCSRPcGVuQlNEOiBNYWtlZmlsZSx2IDEu MTUgMjAyNi8wNi8xNCAwNDowODowNSBkam0gRXhwICQKKyAKKyBTVUJESVI9CXRlc3RfaGVscGVy IHNzaGJ1ZiBzc2hrZXkgYml0bWFwIGtleCBob3N0a2V5cyB1dGY4IG1hdGNoIGNvbnZlcnNpb24K Ky1TVUJESVIrPWF1dGhvcHQgbWlzYyBzc2hzaWcgc2VydmNvbmYgY3J5cHRvCisrU1VCRElSKz1h dXRob3B0IG1pc2Mgc3Noc2lnIHNlcnZjb25mIGNyeXB0byBwa2NzMTEKKyAKKyAuaW5jbHVkZSA8 YnNkLnN1YmRpci5taz4KK2RpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVz dHMuYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0cy5jCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwLi44OWJhNDVjNGUKKy0tLSAvZGV2L251bGwKKysrKyBiL3Jl Z3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0cy5jCitAQCAtMCwwICsxLDM1MyBAQAorKy8qCisr ICogQ29weXJpZ2h0IChjKSAyMDE3IFJlZCBIYXQKKysgKgorKyAqIEF1dGhvcnM6IEpha3ViIEpl bGVuIDxqamVsZW5AcmVkaGF0LmNvbT4KKysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorKyAqIHB1cnBv c2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0 aGUgYWJvdmUKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IGFwcGVhciBpbiBhbGwgY29waWVzLgorKyAqCisrICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisrICogV0lU SCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElF UyBPRgorKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisrICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJF Q1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworKyAqIFdIQVRTT0VW RVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJ TiBBTgorKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9V UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisrICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBV U0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8KKysKKysjaW5jbHVkZSAi aW5jbHVkZXMuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKworKyNpbmNsdWRlICIuLi90ZXN0X2hlbHBlci90ZXN0X2hlbHBlci5oIgorKworKyNpbmNs dWRlICJzc2hidWYuaCIKKysjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKKysKKysjZGVmaW5l IEVNUFRZX1VSSSBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKQorKworKy8qIHByb3RvdHlwZXMgYXJlIG5vdCBwdWJsaWMgLS0gc3Bl Y2lmeSB0aGVtIGhlcmUgaW50ZXJuYWxseSBmb3IgdGVzdHMgKi8KKytzdHJ1Y3Qgc3NoYnVmICpw ZXJjZW50X2VuY29kZShjb25zdCBjaGFyICosIHNpemVfdCwgY2hhciAqKTsKKytpbnQgcGVyY2Vu dF9kZWNvZGUoY2hhciAqLCBjaGFyICoqKTsKKysKKyt2b2lkCisrY29tcGFyZV91cmkoc3RydWN0 IHBrY3MxMV91cmkgKmEsIHN0cnVjdCBwa2NzMTFfdXJpICpiKQorK3sKKysJQVNTRVJUX1BUUl9O RShhLCBOVUxMKTsKKysJQVNTRVJUX1BUUl9ORShiLCBOVUxMKTsKKysJQVNTRVJUX1NJWkVfVF9F UShhLT5pZF9sZW4sIGItPmlkX2xlbik7CisrCUFTU0VSVF9NRU1fRVEoYS0+aWQsIGItPmlkLCBh LT5pZF9sZW4pOworKwlpZiAoYi0+b2JqZWN0ICE9IE5VTEwpCisrCQlBU1NFUlRfU1RSSU5HX0VR KGEtPm9iamVjdCwgYi0+b2JqZWN0KTsKKysJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICov CisrCQlBU1NFUlRfUFRSX0VRKGEtPm9iamVjdCwgYi0+b2JqZWN0KTsKKysJaWYgKGItPm1vZHVs ZV9wYXRoICE9IE5VTEwpCisrCQlBU1NFUlRfU1RSSU5HX0VRKGEtPm1vZHVsZV9wYXRoLCBiLT5t b2R1bGVfcGF0aCk7CisrCWVsc2UgLyogYm90aCBzaG91bGQgYmUgbnVsbCAqLworKwkJQVNTRVJU X1BUUl9FUShhLT5tb2R1bGVfcGF0aCwgYi0+bW9kdWxlX3BhdGgpOworKwlpZiAoYi0+dG9rZW4g IT0gTlVMTCkKKysJCUFTU0VSVF9TVFJJTkdfRVEoYS0+dG9rZW4sIGItPnRva2VuKTsKKysJZWxz ZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICovCisrCQlBU1NFUlRfUFRSX0VRKGEtPnRva2VuLCBi LT50b2tlbik7CisrCWlmIChiLT5tYW51ZiAhPSBOVUxMKQorKwkJQVNTRVJUX1NUUklOR19FUShh LT5tYW51ZiwgYi0+bWFudWYpOworKwllbHNlIC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KKysJ CUFTU0VSVF9QVFJfRVEoYS0+bWFudWYsIGItPm1hbnVmKTsKKysJaWYgKGItPmxpYl9tYW51ZiAh PSBOVUxMKQorKwkJQVNTRVJUX1NUUklOR19FUShhLT5saWJfbWFudWYsIGItPmxpYl9tYW51Zik7 CisrCWVsc2UgLyogYm90aCBzaG91bGQgYmUgbnVsbCAqLworKwkJQVNTRVJUX1BUUl9FUShhLT5s aWJfbWFudWYsIGItPmxpYl9tYW51Zik7CisrCWlmIChiLT5zZXJpYWwgIT0gTlVMTCkKKysJCUFT U0VSVF9TVFJJTkdfRVEoYS0+c2VyaWFsLCBiLT5zZXJpYWwpOworKwllbHNlIC8qIGJvdGggc2hv dWxkIGJlIG51bGwgKi8KKysJCUFTU0VSVF9QVFJfRVEoYS0+c2VyaWFsLCBiLT5zZXJpYWwpOwor K30KKysKKyt2b2lkCisrY2hlY2tfcGFyc2VfcnYoY2hhciAqdXJpLCBzdHJ1Y3QgcGtjczExX3Vy aSAqZXhwZWN0LCBpbnQgZXhwZWN0X3J2KQorK3sKKysJY2hhciAqYnVmID0gTlVMTCwgKnN0cjsK KysJc3RydWN0IHBrY3MxMV91cmkgKnBrY3MxMXVyaSA9IE5VTEw7CisrCWludCBydjsKKysKKysJ aWYgKGV4cGVjdF9ydiA9PSAwKQorKwkJc3RyID0gIlZhbGlkIjsKKysJZWxzZQorKwkJc3RyID0g IkludmFsaWQiOworKwlhc3ByaW50ZigmYnVmLCAiJXMgUEtDUyMxMSBVUkkgcGFyc2luZzogJXMi LCBzdHIsIHVyaSk7CisrCVRFU1RfU1RBUlQoYnVmKTsKKysJZnJlZShidWYpOworKwlwa2NzMTF1 cmkgPSBwa2NzMTFfdXJpX2luaXQoKTsKKysJcnYgPSBwa2NzMTFfdXJpX3BhcnNlKHVyaSwgcGtj czExdXJpKTsKKysJQVNTRVJUX0lOVF9FUShydiwgZXhwZWN0X3J2KTsKKysJaWYgKHJ2ID09IDAp IC8qIGluIGNhc2Ugb2YgZmFpbHVyZSByZXN1bHQgaXMgdW5kZWZpbmVkICovCisrCQljb21wYXJl X3VyaShwa2NzMTF1cmksIGV4cGVjdCk7CisrCXBrY3MxMV91cmlfY2xlYW51cChwa2NzMTF1cmkp OworKwlmcmVlKGV4cGVjdCk7CisrCVRFU1RfRE9ORSgpOworK30KKysKKyt2b2lkCisrY2hlY2tf cGFyc2UoY2hhciAqdXJpLCBzdHJ1Y3QgcGtjczExX3VyaSAqZXhwZWN0KQorK3sKKysJY2hlY2tf cGFyc2VfcnYodXJpLCBleHBlY3QsIDApOworK30KKysKKytzdHJ1Y3QgcGtjczExX3VyaSAqCisr Y29tcG9zZV91cmkodW5zaWduZWQgY2hhciAqaWQsIHNpemVfdCBpZF9sZW4sIGNoYXIgKnRva2Vu LCBjaGFyICpsaWJfbWFudWYsCisrICAgIGNoYXIgKm1hbnVmLCBjaGFyICpzZXJpYWwsIGNoYXIg Km1vZHVsZV9wYXRoLCBjaGFyICpvYmplY3QsIGNoYXIgKnBpbikKKyt7CisrCXN0cnVjdCBwa2Nz MTFfdXJpICp1cmkgPSBwa2NzMTFfdXJpX2luaXQoKTsKKysJaWYgKGlkX2xlbiA+IDApIHsKKysJ CXVyaS0+aWRfbGVuID0gaWRfbGVuOworKwkJdXJpLT5pZCA9IGlkOworKwl9CisrCXVyaS0+bW9k dWxlX3BhdGggPSBtb2R1bGVfcGF0aDsKKysJdXJpLT50b2tlbiA9IHRva2VuOworKwl1cmktPmxp Yl9tYW51ZiA9IGxpYl9tYW51ZjsKKysJdXJpLT5tYW51ZiA9IG1hbnVmOworKwl1cmktPnNlcmlh bCA9IHNlcmlhbDsKKysJdXJpLT5vYmplY3QgPSBvYmplY3Q7CisrCXVyaS0+cGluID0gcGluOwor KwlyZXR1cm4gdXJpOworK30KKysKKytzdGF0aWMgdm9pZAorK3Rlc3RfcGFyc2VfdmFsaWQodm9p ZCkKKyt7CisrCS8qIHBhdGggYXJndW1lbnRzICovCisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6aWQ9 JTAxIiwKKysJICAgIGNvbXBvc2VfdXJpKCJceDAxIiwgMSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19wYXJzZSgicGtjczExOmlkPSUwMCUwMSIs CisrCSAgICBjb21wb3NlX3VyaSgiXHgwMFx4MDEiLCAyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9rZW49U1NIJTIw S2V5cyIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCAiU1NIIEtleXMiLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6bGlicmFy eS1tYW51ZmFjdHVyZXI9T3BlblNDIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEws ICJPcGVuU0MiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX3BhcnNl KCJwa2NzMTE6bWFudWZhY3R1cmVyPXBpdl9JSSIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAw LCBOVUxMLCBOVUxMLCAicGl2X0lJIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVj a19wYXJzZSgicGtjczExOnNlcmlhbD1JYW1TZXJpYWwiLAorKwkgICAgY29tcG9zZV91cmkoTlVM TCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgIklhbVNlcmlhbCIsIE5VTEwsIE5VTEwsIE5VTEwpKTsK KysJY2hlY2tfcGFyc2UoInBrY3MxMTpvYmplY3Q9U0lHTiUyMEtleSIsCisrCSAgICBjb21wb3Nl X3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiU0lHTiBLZXkiLCBO VUxMKSk7CisrCS8qIHF1ZXJ5IGFyZ3VtZW50cyAqLworKwljaGVja19wYXJzZSgicGtjczExOj9t b2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLAorKwkgICAgY29tcG9zZV91 cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIi91c3IvbGliNjQvcDExLWtpdC1w cm94eS5zbyIsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfcGFyc2UoInBrY3MxMTo/cGluLXZhbHVl PTEyMzQ1NiIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCAiMTIzNDU2IikpOworKworKwkvKiBjb21iaW5hdGlvbnMgKi8KKysJ LyogSUQgU0hPVUxEIGJlIHBlcmNlbnQgZW5jb2RlZCAqLworKwljaGVja19wYXJzZSgicGtjczEx OnRva2VuPVNTSCUyMEtleTtpZD0wIiwKKysJICAgIGNvbXBvc2VfdXJpKCIwIiwgMSwgIlNTSCBL ZXkiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX3BhcnNl KAorKwkgICAgInBrY3MxMTptYW51ZmFjdHVyZXI9Q0FDP21vZHVsZS1wYXRoPS91c3IvbGliNjQv cDExLWtpdC1wcm94eS5zbyIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxM LCAiQ0FDIiwgTlVMTCwKKysJICAgICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLCBOVUxM LCBOVUxMKSk7CisrCWNoZWNrX3BhcnNlKAorKwkgICAgInBrY3MxMTpvYmplY3Q9UlNBJTIwS2V5 P21vZHVsZS1wYXRoPS91c3IvbGliNjQvcGtjczExL29wZW5jcnlwdG9raS5zbyIsCisrCSAgICBj b21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkgICAgIi91c3Iv bGliNjQvcGtjczExL29wZW5jcnlwdG9raS5zbyIsICJSU0EgS2V5IiwgTlVMTCkpOworKwljaGVj a19wYXJzZSgicGtjczExOj9tb2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28m cGluLXZhbHVlPTEyMzQ1NiIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCAiL3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgIjEyMzQ1 NiIpKTsKKysKKysJLyogZW1wdHkgcGF0aCBjb21wb25lbnQgbWF0Y2hlcyBldmVyeXRoaW5nICov CisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6IiwgRU1QVFlfVVJJKTsKKysKKysJLyogZW1wdHkgc3Ry aW5nIGlzIGEgdmFsaWQgdG8gbWF0Y2ggYWdhaW5zdCAoYW5kIGRpZmZlcmVudCBmcm9tIE5VTEwp ICovCisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9rZW49IiwKKysJICAgIGNvbXBvc2VfdXJpKE5V TEwsIDAsICIiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCS8qIFBl cmNlbnQgY2hhcmFjdGVyIG5lZWRzIHRvIGJlIHBlcmNlbnQtZW5jb2RlZCAqLworKwljaGVja19w YXJzZSgicGtjczExOnRva2VuPSUyNSIsCisrCSAgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgIiUi LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrfQorKworK3N0YXRpYyB2 b2lkCisrdGVzdF9wYXJzZV9pbnZhbGlkKHZvaWQpCisreworKwkvKiBJbnZhbGlkIHBlcmNlbnQg ZW5jb2RpbmcgKi8KKysJY2hlY2tfcGFyc2VfcnYoInBrY3MxMTppZD0lMCIsIEVNUFRZX1VSSSwg LTEpOworKwkvKiBJbnZhbGlkIHBlcmNlbnQgZW5jb2RpbmcgKi8KKysJY2hlY2tfcGFyc2VfcnYo InBrY3MxMTppZD0lWloiLCBFTVBUWV9VUkksIC0xKTsKKysJLyogU3BhY2UgTVVTVCBiZSBwZXJj ZW50IGVuY29kZWQgLS0gWFhYIG5vdCBlbmZvcmNlZCB5ZXQgKi8KKysJY2hlY2tfcGFyc2UoInBr Y3MxMTp0b2tlbj1TU0ggS2V5cyIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCAiU1NIIEtl eXMiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCS8qIE1VU1QgTk9U IGNvbnRhaW4gZHVwbGljYXRlIGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgbmFtZSAqLworKwljaGVj a19wYXJzZV9ydigicGtjczExOmlkPSUwMTtpZD0lMDIiLCBFTVBUWV9VUkksIC0xKTsKKysJLyog TVVTVCBOT1QgY29udGFpbiBkdXBsaWNhdGUgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lICov CisrCWNoZWNrX3BhcnNlX3J2KCJwa2NzMTE6P3Bpbi12YWx1ZT0xMTExMTEmcGluLXZhbHVlPTEy MzQ1NiIsIEVNUFRZX1VSSSwgLTEpOworKwkvKiBVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHBh dGggYXJlIGlnbm9yZWQgd2l0aCBsb2cgbWVzc2FnZSAqLworKwljaGVja19wYXJzZSgicGtjczEx OmtleV9uYW1lPVNTSCIsIEVNUFRZX1VSSSk7CisrCS8qIFVucmVjb2duaXplZCBhdHRyaWJ1dGUg aW4gcXVlcnkgU0hPVUxEIGJlIGlnbm9yZWQgKi8KKysJY2hlY2tfcGFyc2UoInBrY3MxMTo/a2V5 X25hbWU9U1NIIiwgRU1QVFlfVVJJKTsKKyt9CisrCisrdm9pZAorK2NoZWNrX2dlbihjaGFyICpl eHBlY3QsIHN0cnVjdCBwa2NzMTFfdXJpICp1cmkpCisreworKwljaGFyICpidWYgPSBOVUxMLCAq dXJpX3N0cjsKKysKKysJYXNwcmludGYoJmJ1ZiwgIlZhbGlkIFBLQ1MjMTEgVVJJIGdlbmVyYXRp b246ICVzIiwgZXhwZWN0KTsKKysJVEVTVF9TVEFSVChidWYpOworKwlmcmVlKGJ1Zik7CisrCXVy aV9zdHIgPSBwa2NzMTFfdXJpX2dldCh1cmkpOworKwlBU1NFUlRfUFRSX05FKHVyaV9zdHIsIE5V TEwpOworKwlBU1NFUlRfU1RSSU5HX0VRKHVyaV9zdHIsIGV4cGVjdCk7CisrCWZyZWUodXJpX3N0 cik7CisrCVRFU1RfRE9ORSgpOworK30KKysKKytzdGF0aWMgdm9pZAorK3Rlc3RfZ2VuZXJhdGVf dmFsaWQodm9pZCkKKyt7CisrCS8qIHBhdGggYXJndW1lbnRzICovCisrCWNoZWNrX2dlbigicGtj czExOmlkPSUwMSIsCisrCSAgICBjb21wb3NlX3VyaSgiXHgwMSIsIDEsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfZ2VuKCJwa2NzMTE6aWQ9JTAw JTAxIiwKKysJICAgIGNvbXBvc2VfdXJpKCJceDAwXHgwMSIsIDIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfZ2VuKCJwa2NzMTE6dG9rZW49U1NI JTIwS2V5cyIsIC8qIHNwYWNlIG11c3QgYmUgcGVyY2VudCBlbmNvZGVkICovCisrCSAgICBjb21w b3NlX3VyaShOVUxMLCAwLCAiU1NIIEtleXMiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMKSk7CisrCS8qIGxpYnJhcnktbWFudWZhY3R1cmVyIGlzIG5vdCBpbXBsbWVudGVkIG5v dyAqLworKwkvKmNoZWNrX2dlbigicGtjczExOmxpYnJhcnktbWFudWZhY3R1cmVyPU9wZW5TQyIs CisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCAiT3BlblNDIiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCkpOyovCisrCWNoZWNrX2dlbigicGtjczExOm1hbnVmYWN0dXJlcj1w aXZfSUkiLAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgInBpdl9JSSIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfZ2VuKCJwa2NzMTE6c2VyaWFsPUlh bVNlcmlhbCIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAi SWFtU2VyaWFsIiwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19nZW4oInBrY3MxMTpvYmpl Y3Q9UlNBJTIwS2V5IiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsICJSU0EgS2V5IiwgTlVMTCkpOworKwkvKiBxdWVyeSBhcmd1bWVudHMg Ki8KKysJY2hlY2tfZ2VuKCJwa2NzMTE6P21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDExLWtpdC1w cm94eS5zbyIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCAiL3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVMTCkpOworKworKwkv KiBjb21iaW5hdGlvbnMgKi8KKysJY2hlY2tfZ2VuKCJwa2NzMTE6aWQ9JTAyO3Rva2VuPVNTSCUy MEtleXMiLAorKwkgICAgY29tcG9zZV91cmkoIlx4MDIiLCAxLCAiU1NIIEtleXMiLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX2dlbigicGtjczExOmlkPSVF RSUwMj9tb2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLAorKwkgICAgY29t cG9zZV91cmkoIlx4RUVceDAyIiwgMiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIi91c3IvbGli NjQvcDExLWtpdC1wcm94eS5zbyIsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfZ2VuKCJwa2NzMTE6 b2JqZWN0PUVuY3J5cHRpb24lMjBLZXk7bWFudWZhY3R1cmVyPXBpdl9JSSIsCisrCSAgICBjb21w b3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCAicGl2X0lJIiwgTlVMTCwgTlVMTCwgIkVuY3J5 cHRpb24gS2V5IiwgTlVMTCkpOworKworKwkvKiBlbXB0eSBwYXRoIGNvbXBvbmVudCBtYXRjaGVz IGV2ZXJ5dGhpbmcgKi8KKysJY2hlY2tfZ2VuKCJwa2NzMTE6IiwgRU1QVFlfVVJJKTsKKysKKyt9 CisrCisrdm9pZAorK2NoZWNrX2VuY29kZShjaGFyICpzb3VyY2UsIHNpemVfdCBsZW4sIGNoYXIg KmFsbG93X2xpc3QsIGNoYXIgKmV4cGVjdCkKKyt7CisrCWNoYXIgKmJ1ZiA9IE5VTEw7CisrCXN0 cnVjdCBzc2hidWYgKmI7CisrCisrCWFzcHJpbnRmKCZidWYsICJwZXJjZW50X2VuY29kZTogZXhw ZWN0ZWQgJXMiLCBleHBlY3QpOworKwlURVNUX1NUQVJUKGJ1Zik7CisrCWZyZWUoYnVmKTsKKysK KysJYiA9IHBlcmNlbnRfZW5jb2RlKHNvdXJjZSwgbGVuLCBhbGxvd19saXN0KTsKKysJQVNTRVJU X1NUUklOR19FUShzc2hidWZfcHRyKGIpLCBleHBlY3QpOworKwlzc2hidWZfZnJlZShiKTsKKysJ VEVTVF9ET05FKCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrdGVzdF9wZXJjZW50X2VuY29kZV9t dWx0aWJ5dGUodm9pZCkKKyt7CisrCS8qIFNIT1VMRCBiZSBlbmNvZGVkIGFzIG9jdGV0cyBhY2Nv cmRpbmcgdG8gdGhlIFVURi04IGNoYXJhY3RlciBlbmNvZGluZyAqLworKworKwkvKiBtdWx0aS1i eXRlIGNoYXJhY3RlcnMgYXJlICJmb3IgZnJlZSIgKi8KKysJY2hlY2tfZW5jb2RlKCIkIiwgMSwg IiIsICIlMjQiKTsKKysJY2hlY2tfZW5jb2RlKCLCoiIsIDIsICIiLCAiJUMyJUEyIik7CisrCWNo ZWNrX2VuY29kZSgi4oKsIiwgMywgIiIsICIlRTIlODIlQUMiKTsKKysJY2hlY2tfZW5jb2RlKCLw kI2IIiwgNCwgIiIsICIlRjAlOTAlOEQlODgiKTsKKysKKysJLyogQ0tfVVRGOENIQVIgaXMgdW5z aWduZWQgY2hhciAoMSBieXRlKSAqLworKwkvKiBsYWJlbHMgU0hPVUxEIGJlIG5vcm1hbGl6ZWQg dG8gTkZDIFtVQVgxNV0gKi8KKysKKyt9CisrCisrc3RhdGljIHZvaWQKKyt0ZXN0X3BlcmNlbnRf ZW5jb2RlKHZvaWQpCisreworKwkvKiBXaXRob3V0IGFsbG93IGxpc3QgZW5jb2RlcyBldmVyeXRo aW5nIChmb3IgQ0tBX0lEKSAqLworKwljaGVja19lbmNvZGUoIkEqIiwgMiwgIiIsICIlNDElMkEi KTsKKysJY2hlY2tfZW5jb2RlKCJceDAwIiwgMSwgIiIsICIlMDAiKTsKKysJY2hlY2tfZW5jb2Rl KCJceDdGIiwgMSwgIiIsICIlN0YiKTsKKysJY2hlY2tfZW5jb2RlKCJceDgwIiwgMSwgIiIsICIl ODAiKTsKKysJY2hlY2tfZW5jb2RlKCJceGZmIiwgMSwgIiIsICIlRkYiKTsKKysKKysJLyogRGVm YXVsdCBhbGxvdyBsaXN0IGVuY29kZXMgYW55dGhpbmcgYnV0IHNhZmUgbGV0dGVycyAqLworKwlj aGVja19lbmNvZGUoInRlc3QiICJceDAwIiAiMGFscGhhIiwgMTEsIFBLQ1MxMV9VUklfV0hJVEVM SVNULAorKwkgICAgInRlc3QlMDAwYWxwaGEiKTsKKysJY2hlY2tfZW5jb2RlKCIgIiwgMSwgUEtD UzExX1VSSV9XSElURUxJU1QsCisrCSAgICAiJTIwIik7IC8qIFNwYWNlIE1VU1QgYmUgcGVyY2Vu dCBlbmNvZGVkICovCisrCWNoZWNrX2VuY29kZSgiLyIsIDEsIFBLQ1MxMV9VUklfV0hJVEVMSVNU LAorKwkgICAgIiUyRiIpOyAvKiAnLycgZGVsaW1pdGVyIE1VU1QgYmUgcGVyY2VudCBlbmNvZGVk IChpbiB0aGUgcGF0aCkgKi8KKysJY2hlY2tfZW5jb2RlKCI/IiwgMSwgUEtDUzExX1VSSV9XSElU RUxJU1QsCisrCSAgICAiJTNGIik7IC8qIGRlbGltaXRlciAnPycgTVVTVCBiZSBwZXJjZW50IGVu Y29kZWQgKGluIHRoZSBwYXRoKSAqLworKwljaGVja19lbmNvZGUoIiMiLCAxLCBQS0NTMTFfVVJJ X1dISVRFTElTVCwKKysJICAgICIlMjMiKTsgLyogJyMnIE1VU1QgYmUgYWx3YXlzIHBlcmNlbnQg ZW5jb2RlZCAqLworKwljaGVja19lbmNvZGUoImtleT12YWx1ZTtzZXBhcmF0b3I/cXVlcnkmYW1w OyNhbmNoIiwgMzUsIFBLQ1MxMV9VUklfV0hJVEVMSVNULAorKwkgICAgImtleSUzRHZhbHVlJTNC c2VwYXJhdG9yJTNGcXVlcnklMjZhbXAlM0IlMjNhbmNoIik7CisrCisrCS8qIENvbXBvbmVudHMg aW4gcXVlcnkgY2FuIGhhdmUgJy8nIHVuZW5jb2RlZCAodXNlZnVsIGZvciBwYXRocykgKi8KKysJ Y2hlY2tfZW5jb2RlKCIvcGF0aC90by5maWxlIiwgMTMsIFBLQ1MxMV9VUklfV0hJVEVMSVNUICIv IiwKKysJICAgICIvcGF0aC90by5maWxlIik7CisrfQorKworK3ZvaWQKKytjaGVja19kZWNvZGUo Y2hhciAqc291cmNlLCBjaGFyICpleHBlY3QsIGludCBleHBlY3RfbGVuKQorK3sKKysJY2hhciAq YnVmID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCWludCBydjsKKysKKysJYXNwcmludGYoJmJ1Ziwg InBlcmNlbnRfZGVjb2RlOiAlcyIsIHNvdXJjZSk7CisrCVRFU1RfU1RBUlQoYnVmKTsKKysJZnJl ZShidWYpOworKworKwlydiA9IHBlcmNlbnRfZGVjb2RlKHNvdXJjZSwgJm91dCk7CisrCUFTU0VS VF9JTlRfRVEocnYsIGV4cGVjdF9sZW4pOworKwlpZiAocnYgPj0gMCkKKysJCUFTU0VSVF9NRU1f RVEob3V0LCBleHBlY3QsIGV4cGVjdF9sZW4pOworKwlmcmVlKG91dCk7CisrCVRFU1RfRE9ORSgp OworK30KKysKKytzdGF0aWMgdm9pZAorK3Rlc3RfcGVyY2VudF9kZWNvZGUodm9pZCkKKyt7Cisr CS8qIHNpbXBsZSB2YWxpZCBjYXNlcyAqLworKwljaGVja19kZWNvZGUoIiUwMCIsICJceDAwIiwg MSk7CisrCWNoZWNrX2RlY29kZSgiJUZGIiwgIlx4RkYiLCAxKTsKKysKKysJLyogbm9ybWFsIHN0 cmluZ3Mgc2hvbGQgYmUga2VwdCBpbnRhY3QgKi8KKysJY2hlY2tfZGVjb2RlKCJzdHJpbmdzIGFy ZSBsZWZ0IiwgInN0cmluZ3MgYXJlIGxlZnQiLCAxNik7CisrCWNoZWNrX2RlY29kZSgiMTAlMjUg b2YgdHJlZXMiLCAiMTAlIG9mIHRyZWVzIiwgMTIpOworKworKwkvKiBtYWtlIHN1cmUgbm8gbW9y ZSB0aGFuIDIgYnl0ZXMgYXJlIHBhcnNlZCAqLworKwljaGVja19kZWNvZGUoIiUyMjIiLCAiXHgy MiIgIjIiLCAyKTsKKysKKysJLyogaW52YWxpZCBleHBlY3RzIGZhaWx1cmUgKi8KKysJY2hlY2tf ZGVjb2RlKCIlMCIsICIiLCAtMSk7CisrCWNoZWNrX2RlY29kZSgiJVoiLCAiIiwgLTEpOworKwlj aGVja19kZWNvZGUoIiVGRyIsICIiLCAtMSk7CisrfQorKworK3ZvaWQKKyt0ZXN0cyh2b2lkKQor K3sKKysJdGVzdF9wZXJjZW50X2VuY29kZSgpOworKwl0ZXN0X3BlcmNlbnRfZW5jb2RlX211bHRp Ynl0ZSgpOworKwl0ZXN0X3BlcmNlbnRfZGVjb2RlKCk7CisrCXRlc3RfcGFyc2VfdmFsaWQoKTsK KysJdGVzdF9wYXJzZV9pbnZhbGlkKCk7CisrCXRlc3RfZ2VuZXJhdGVfdmFsaWQoKTsKKyt9Cisr Cisrdm9pZAorK2JlbmNobWFya3Modm9pZCkKKyt7CisrCXByaW50Zigibm8gYmVuY2htYXJrc1xu Iik7CisrfQorKworZGlmZiAtLWdpdCBhL3NzaC1hZGQuYyBiL3NzaC1hZGQuYworaW5kZXggOTIz MWM1Mjc3Li4xYjM0YmFmZmEgMTAwNjQ0CistLS0gYS9zc2gtYWRkLmMKKysrKyBiL3NzaC1hZGQu YworQEAgLTcwLDYgKzcwLDcgQEAKKyAjaW5jbHVkZSAic3NoLXNrLmgiCisgI2luY2x1ZGUgInNr LWFwaS5oIgorICNpbmNsdWRlICJob3N0ZmlsZS5oIgorKyNpbmNsdWRlICJzc2gtcGtjczExLXVy aS5oIgorIAorICNkZWZpbmUgQ0VSVF9FWFBJUllfR1JBQ0UJKDUqNjApCisgCitAQCAtMjcxLDYg KzI3MiwzOCBAQCBjaGVja19jZXJ0X2xpZmV0aW1lKGNvbnN0IHN0cnVjdCBzc2hrZXkgKmNlcnQs IGludCBjZXJ0X2xpZmV0aW1lKQorIAlyZXR1cm4gTUlOSU1VTShjZXJ0X2xpZmV0aW1lLCAoaW50 KW4pOworIH0KKyAKKysjaWZkZWYgRU5BQkxFX1BLQ1MxMQorK3N0YXRpYyBpbnQKKyt1cGRhdGVf Y2FyZChpbnQgYWdlbnRfZmQsIGludCBhZGQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgcWZsYWcsCisr ICAgIGludCBrZXlfb25seSwgaW50IGNlcnRfb25seSwKKysgICAgc3RydWN0IGRlc3RfY29uc3Ry YWludCAqKmRlc3RfY29uc3RyYWludHMsIHNpemVfdCBuZGVzdF9jb25zdHJhaW50cywKKysgICAg c3RydWN0IHNzaGtleSAqKmNlcnRzLCBzaXplX3QgbmNlcnRzLCBjaGFyICpwaW4pOworKworK2lu dAorK3VwZGF0ZV9wa2NzMTFfdXJpKGludCBhZ2VudF9mZCwgaW50IGFkZGluZywgY29uc3QgY2hh ciAqcGtjczExX3VyaSwgaW50IHFmbGFnLAorKyAgICBzdHJ1Y3QgZGVzdF9jb25zdHJhaW50ICoq ZGVzdF9jb25zdHJhaW50cywgc2l6ZV90IG5kZXN0X2NvbnN0cmFpbnRzKQorK3sKKysJY2hhciAq cGluID0gTlVMTDsKKysJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKKysKKysJLyogZHJ5LXJ1biBw YXJzZSB0byBtYWtlIHN1cmUgdGhlIFVSSSBpcyB2YWxpZCBhbmQgdG8gcmVwb3J0IGVycm9ycyAq LworKwl1cmkgPSBwa2NzMTFfdXJpX2luaXQoKTsKKysJaWYgKHBrY3MxMV91cmlfcGFyc2UoKGNo YXIgKikgcGtjczExX3VyaSwgdXJpKSAhPSAwKQorKwkJZmF0YWwoIkZhaWxlZCB0byBwYXJzZSBQ S0NTIzExIFVSSSIpOworKwlpZiAodXJpLT5waW4gIT0gTlVMTCkgeworKwkJcGluID0gc3RyZHVw KHVyaS0+cGluKTsKKysJCWlmIChwaW4gPT0gTlVMTCkgeworKwkJCWZhdGFsKCJGYWlsZWQgdG8g ZHVwcGxpY2F0ZSBzdHJpbmciKTsKKysJCX0KKysJCS8qIHBpbiBpcyBmcmVlZCBpbiB0aGUgdXBk YXRlX2NhcmQoKSAqLworKwl9CisrCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworKworKwlyZXR1 cm4gdXBkYXRlX2NhcmQoYWdlbnRfZmQsIGFkZGluZywgcGtjczExX3VyaSwgcWZsYWcsIDEsIDAs CisrCSAgICAgICAgICAgZGVzdF9jb25zdHJhaW50cywgbmRlc3RfY29uc3RyYWludHMsIE5VTEws IDAsIHBpbik7CisrfQorKyNlbmRpZgorKworIHN0YXRpYyBpbnQKKyBhZGRfZmlsZShpbnQgYWdl bnRfZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQga2V5X29ubHksIGludCBjZXJ0X29ubHks CisgICAgIGludCBxZmxhZywgaW50IE5mbGFnLCBjb25zdCBjaGFyICpza3Byb3ZpZGVyLAorQEAg LTQ2MSwxNSArNDk0LDE0IEBAIHN0YXRpYyBpbnQKKyB1cGRhdGVfY2FyZChpbnQgYWdlbnRfZmQs IGludCBhZGQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgcWZsYWcsCisgICAgIGludCBrZXlfb25seSwg aW50IGNlcnRfb25seSwKKyAgICAgc3RydWN0IGRlc3RfY29uc3RyYWludCAqKmRlc3RfY29uc3Ry YWludHMsIHNpemVfdCBuZGVzdF9jb25zdHJhaW50cywKKy0gICAgc3RydWN0IHNzaGtleSAqKmNl cnRzLCBzaXplX3QgbmNlcnRzKQorKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqY2VydHMsIHNpemVfdCBu Y2VydHMsIGNoYXIgKnBpbikKKyB7CistCWNoYXIgKnBpbiA9IE5VTEw7CisgCWludCByLCByZXQg PSAtMTsKKyAKKyAJaWYgKGtleV9vbmx5KQorIAkJbmNlcnRzID0gMDsKKyAKKy0JaWYgKGFkZCkg eworKwlpZiAoYWRkICYmIHBpbiA9PSBOVUxMKSB7CisgCQlpZiAoKHBpbiA9IHJlYWRfcGFzc3Bo cmFzZSgiRW50ZXIgcGFzc3BocmFzZSBmb3IgUEtDUyMxMTogIiwKKyAJCSAgICBSUF9BTExPV19T VERJTikpID09IE5VTEwpCisgCQkJcmV0dXJuIC0xOworQEAgLTY1MSw2ICs2ODMsMTQgQEAgZG9f ZmlsZShpbnQgYWdlbnRfZmQsIGludCBkZWxldGluZywgaW50IGtleV9vbmx5LCBpbnQgY2VydF9v bmx5LAorICAgICBjaGFyICpmaWxlLCBpbnQgcWZsYWcsIGludCBOZmxhZywgY29uc3QgY2hhciAq c2twcm92aWRlciwKKyAgICAgc3RydWN0IGRlc3RfY29uc3RyYWludCAqKmRlc3RfY29uc3RyYWlu dHMsIHNpemVfdCBuZGVzdF9jb25zdHJhaW50cykKKyB7CisrI2lmZGVmIEVOQUJMRV9QS0NTMTEK KysJaWYgKHN0cmxlbihmaWxlKSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisrCSAg ICBzdHJuY21wKGZpbGUsIFBLQ1MxMV9VUklfU0NIRU1FLAorKwkgICAgc3RybGVuKFBLQ1MxMV9V UklfU0NIRU1FKSkgPT0gMCkgeworKwkJcmV0dXJuIHVwZGF0ZV9wa2NzMTFfdXJpKGFnZW50X2Zk LCAhZGVsZXRpbmcsIGZpbGUsIHFmbGFnLAorKyAgICAgICAgICAgICAgICAgICBkZXN0X2NvbnN0 cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50cyk7CisrCX0KKysjZW5kaWYKKyAJaWYgKGRlbGV0aW5n KSB7CisgCQlpZiAoZGVsZXRlX2ZpbGUoYWdlbnRfZmQsIGZpbGUsIGtleV9vbmx5LAorIAkJICAg IGNlcnRfb25seSwgcWZsYWcpID09IC0xKQorQEAgLTEwMDMsNyArMTA0Myw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJaWYgKHVwZGF0ZV9jYXJkKGFnZW50X2ZkLCAhZGVsZXRp bmcsIHBrY3MxMXByb3ZpZGVyLAorIAkJICAgIHFmbGFnLCBrZXlfb25seSwgY2VydF9vbmx5LAor IAkJICAgIGRlc3RfY29uc3RyYWludHMsIG5kZXN0X2NvbnN0cmFpbnRzLAorLQkJICAgIGNlcnRz LCBuY2VydHMpID09IC0xKQorKwkJICAgIGNlcnRzLCBuY2VydHMsIE5VTEwpID09IC0xKQorIAkJ CXJldCA9IDE7CisgCQlmb3IgKG4gPSAwOyBuIDwgbmNlcnRzOyBuKyspCisgCQkJc3Noa2V5X2Zy ZWUoY2VydHNbbl0pOworZGlmZiAtLWdpdCBhL3NzaC1hZ2VudC5jIGIvc3NoLWFnZW50LmMKK2lu ZGV4IDRjOGUxYTRkYS4uMjhmNWM5NWY5IDEwMDY0NAorLS0tIGEvc3NoLWFnZW50LmMKKysrKyBi L3NzaC1hZ2VudC5jCitAQCAtMTU1MywxMCArMTU1Myw3NSBAQCBhZGRfcDExX2lkZW50aXR5KHN0 cnVjdCBzc2hrZXkgKmtleSwgY2hhciAqY29tbWVudCwgY29uc3QgY2hhciAqcHJvdmlkZXIsCisg CWlkdGFiLT5uZW50cmllcysrOworIH0KKyAKKytzdGF0aWMgY2hhciAqCisrc2FuaXRpemVfcGtj czExX3Byb3ZpZGVyKGNvbnN0IGNoYXIgKnByb3ZpZGVyKQorK3sKKysJc3RydWN0IHBrY3MxMV91 cmkgKnVyaSA9IE5VTEw7CisrCWNoYXIgKnNhbmVfdXJpLCAqbW9kdWxlX3BhdGggPSBOVUxMOyAv KiBkZWZhdWx0IHBhdGggKi8KKysJY2hhciBjYW5vbmljYWxfcHJvdmlkZXJbUEFUSF9NQVhdOwor KworKwlpZiAocHJvdmlkZXIgPT0gTlVMTCkKKysJCXJldHVybiBOVUxMOworKworKwltZW1zZXQo Y2Fub25pY2FsX3Byb3ZpZGVyLCAwLCBzaXplb2YoY2Fub25pY2FsX3Byb3ZpZGVyKSk7CisrCisr CWlmIChzdHJsZW4ocHJvdmlkZXIpID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKKysJ ICAgIHN0cm5jbXAocHJvdmlkZXIsIFBLQ1MxMV9VUklfU0NIRU1FLAorKwkgICAgc3RybGVuKFBL Q1MxMV9VUklfU0NIRU1FKSkgPT0gMCkgeworKwkJLyogUEtDUyMxMSBVUkkgKi8KKysJCXVyaSA9 IHBrY3MxMV91cmlfaW5pdCgpOworKwkJaWYgKHVyaSA9PSBOVUxMKSB7CisrCQkJZXJyb3IoIkZh aWxlZCB0byBpbml0IFBLQ1MjMTEgVVJJIik7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisrCisr CQlpZiAocGtjczExX3VyaV9wYXJzZShwcm92aWRlciwgdXJpKSAhPSAwKSB7CisrCQkJZXJyb3Io IkZhaWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSIpOworKwkJCXBrY3MxMV91cmlfY2xlYW51cCh1 cmkpOworKwkJCXJldHVybiBOVUxMOworKwkJfQorKwkJLyogdmFsaWRhdGUgYWxzbyBwcm92aWRl ciBmcm9tIFVSSSAqLworKwkJaWYgKHVyaS0+bW9kdWxlX3BhdGgpCisrCQkJbW9kdWxlX3BhdGgg PSBzdHJkdXAodXJpLT5tb2R1bGVfcGF0aCk7CisrCX0gZWxzZQorKwkJbW9kdWxlX3BhdGggPSBz dHJkdXAocHJvdmlkZXIpOyAvKiBzaW1wbGUgcGF0aCAqLworKworKwlpZiAobW9kdWxlX3BhdGgg IT0gTlVMTCkgeyAvKiBkbyBub3QgdmFsaWRhdGUgZGVmYXVsdCBOVUxMIHBhdGggaW4gVVJJICov CisrCQlpZiAocmVhbHBhdGgobW9kdWxlX3BhdGgsIGNhbm9uaWNhbF9wcm92aWRlcikgPT0gTlVM TCkgeworKwkJCXZlcmJvc2UoImZhaWxlZCBQS0NTIzExIHByb3ZpZGVyIFwiJS4xMDBzXCI6IHJl YWxwYXRoOiAlcyIsCisrCQkJICAgIG1vZHVsZV9wYXRoLCBzdHJlcnJvcihlcnJubykpOworKwkJ CWZyZWUobW9kdWxlX3BhdGgpOworKwkJCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworKwkJCXJl dHVybiBOVUxMOworKwkJfQorKwkJZnJlZShtb2R1bGVfcGF0aCk7CisrCQlpZiAobWF0Y2hfcGF0 dGVybl9saXN0KGNhbm9uaWNhbF9wcm92aWRlciwgYWxsb3dlZF9wcm92aWRlcnMsIDApICE9IDEp IHsKKysJCQl2ZXJib3NlKCJyZWZ1c2luZyBQS0NTIzExIHByb3ZpZGVyIFwiJS4xMDBzXCI6ICIK KysJCQkgICAgIm5vdCBhbGxvd2VkIiwgY2Fub25pY2FsX3Byb3ZpZGVyKTsKKysJCQlwa2NzMTFf dXJpX2NsZWFudXAodXJpKTsKKysJCQlyZXR1cm4gTlVMTDsKKysJCX0KKysKKysJCS8qIGNvcHkg dmVyaWZpZWQgYW5kIHNhbml0aXplZCBwcm92aWRlciBwYXRoIGJhY2sgdG8gdGhlIHVyaSAqLwor KwkJaWYgKHVyaSkgeworKwkJCWZyZWUodXJpLT5tb2R1bGVfcGF0aCk7CisrCQkJdXJpLT5tb2R1 bGVfcGF0aCA9IHhzdHJkdXAoY2Fub25pY2FsX3Byb3ZpZGVyKTsKKysJCX0KKysJfQorKworKwlp ZiAodXJpKSB7CisrCQlzYW5lX3VyaSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisrCQlwa2NzMTFf dXJpX2NsZWFudXAodXJpKTsKKysJCXJldHVybiBzYW5lX3VyaTsKKysJfSBlbHNlIHsKKysJCXJl dHVybiB4c3RyZHVwKGNhbm9uaWNhbF9wcm92aWRlcik7IC8qIHNpbXBsZSBwYXRoICovCisrCX0K Kyt9CisrCisgc3RhdGljIHZvaWQKKyBwcm9jZXNzX2FkZF9zbWFydGNhcmRfa2V5KFNvY2tldEVu dHJ5ICplKQorIHsKKy0JY2hhciAqcHJvdmlkZXIgPSBOVUxMLCAqcGluID0gTlVMTCwgY2Fub25p Y2FsX3Byb3ZpZGVyW1BBVEhfTUFYXTsKKysJY2hhciAqcHJvdmlkZXIgPSBOVUxMLCAqcGluID0g TlVMTCwgKnNhbmVfdXJpID0gTlVMTDsKKyAJY2hhciAqKmNvbW1lbnRzID0gTlVMTDsKKyAJaW50 IHIsIGksIGNvdW50ID0gMCwgc3VjY2VzcyA9IDAsIGNvbmZpcm0gPSAwOworIAl1X2ludCBzZWNv bmRzID0gMDsKK0BAIC0xNTg1LDI1ICsxNjUwLDE4IEBAIHByb2Nlc3NfYWRkX3NtYXJ0Y2FyZF9r ZXkoU29ja2V0RW50cnkgKmUpCisgCQkgICAgInByb3ZpZGVycyBpcyBkaXNhYmxlZCIsIHByb3Zp ZGVyKTsKKyAJCWdvdG8gc2VuZDsKKyAJfQorLQlpZiAocmVhbHBhdGgocHJvdmlkZXIsIGNhbm9u aWNhbF9wcm92aWRlcikgPT0gTlVMTCkgeworLQkJdmVyYm9zZSgiZmFpbGVkIFBLQ1MjMTEgYWRk IG9mIFwiJS4xMDBzXCI6IHJlYWxwYXRoOiAlcyIsCistCQkgICAgcHJvdmlkZXIsIHN0cmVycm9y KGVycm5vKSk7CistCQlnb3RvIHNlbmQ7CistCX0KKy0JaWYgKG1hdGNoX3BhdHRlcm5fbGlzdChj YW5vbmljYWxfcHJvdmlkZXIsIGFsbG93ZWRfcHJvdmlkZXJzLCAwKSAhPSAxKSB7CistCQl2ZXJi b3NlKCJyZWZ1c2luZyBQS0NTIzExIGFkZCBvZiBcIiUuMTAwc1wiOiAiCistCQkgICAgInByb3Zp ZGVyIG5vdCBhbGxvd2VkIiwgY2Fub25pY2FsX3Byb3ZpZGVyKTsKKysJc2FuZV91cmkgPSBzYW5p dGl6ZV9wa2NzMTFfcHJvdmlkZXIocHJvdmlkZXIpOworKwlpZiAoc2FuZV91cmkgPT0gTlVMTCkK KyAJCWdvdG8gc2VuZDsKKy0JfQorLQlkZWJ1Z19mKCJhZGQgJS4xMDBzIiwgY2Fub25pY2FsX3By b3ZpZGVyKTsKKyAJaWYgKGxpZmV0aW1lICYmICFkZWF0aCkKKyAJCWRlYXRoID0gbW9ub3RpbWUo KSArIGxpZmV0aW1lOworIAorLQljb3VudCA9IHBrY3MxMV9hZGRfcHJvdmlkZXIoY2Fub25pY2Fs X3Byb3ZpZGVyLCBwaW4sICZrZXlzLCAmY29tbWVudHMpOworKwlkZWJ1Z19mKCJhZGQgJS4xMDBz Iiwgc2FuZV91cmkpOworKwljb3VudCA9IHBrY3MxMV9hZGRfcHJvdmlkZXIoc2FuZV91cmksIHBp biwgJmtleXMsICZjb21tZW50cyk7CisgCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg CQlpZiAoY29tbWVudHNbaV0gPT0gTlVMTCB8fCBjb21tZW50c1tpXVswXSA9PSAnXDAnKSB7Cisg CQkJZnJlZShjb21tZW50c1tpXSk7CistCQkJY29tbWVudHNbaV0gPSB4c3RyZHVwKGNhbm9uaWNh bF9wcm92aWRlcik7CisrCQkJY29tbWVudHNbaV0gPSB4c3RyZHVwKHNhbmVfdXJpKTsKKyAJCX0K KyAJCWZvciAoaiA9IDA7IGogPCBuY2VydHM7IGorKykgeworIAkJCWlmICghc3Noa2V5X2lzX2Nl cnQoY2VydHNbal0pKQorQEAgLTE2MTMsMTMgKzE2NzEsMTMgQEAgcHJvY2Vzc19hZGRfc21hcnRj YXJkX2tleShTb2NrZXRFbnRyeSAqZSkKKyAJCQlpZiAocGtjczExX21ha2VfY2VydChrZXlzW2ld LCBjZXJ0c1tqXSwgJmspICE9IDApCisgCQkJCWNvbnRpbnVlOworIAkJCWFkZF9wMTFfaWRlbnRp dHkoaywgeHN0cmR1cChjb21tZW50c1tpXSksCistCQkJICAgIGNhbm9uaWNhbF9wcm92aWRlciwg ZGVhdGgsIGNvbmZpcm0sCisrCQkJICAgIHNhbmVfdXJpLCBkZWF0aCwgY29uZmlybSwKKyAJCQkg ICAgZGVzdF9jb25zdHJhaW50cywgbmRlc3RfY29uc3RyYWludHMpOworIAkJCXN1Y2Nlc3MgPSAx OworIAkJfQorIAkJaWYgKCFjZXJ0X29ubHkgJiYgbG9va3VwX2lkZW50aXR5KGtleXNbaV0pID09 IE5VTEwpIHsKKyAJCQlhZGRfcDExX2lkZW50aXR5KGtleXNbaV0sIGNvbW1lbnRzW2ldLAorLQkJ CSAgICBjYW5vbmljYWxfcHJvdmlkZXIsIGRlYXRoLCBjb25maXJtLAorKwkJCSAgICBzYW5lX3Vy aSwgZGVhdGgsIGNvbmZpcm0sCisgCQkJICAgIGRlc3RfY29uc3RyYWludHMsIG5kZXN0X2NvbnN0 cmFpbnRzKTsKKyAJCQlrZXlzW2ldID0gTlVMTDsJCS8qIHRyYW5zZmVycmVkICovCisgCQkJY29t bWVudHNbaV0gPSBOVUxMOwkvKiB0cmFuc2ZlcnJlZCAqLworQEAgLTE2MzIsNiArMTY5MCw3IEBA IHByb2Nlc3NfYWRkX3NtYXJ0Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUpCisgc2VuZDoKKyAJZnJl ZShwaW4pOworIAlmcmVlKHByb3ZpZGVyKTsKKysJZnJlZShzYW5lX3VyaSk7CisgCWZyZWUoa2V5 cyk7CisgCWZyZWUoY29tbWVudHMpOworIAlmcmVlX2Rlc3RfY29uc3RyYWludHMoZGVzdF9jb25z dHJhaW50cywgbmRlc3RfY29uc3RyYWludHMpOworQEAgLTE2NDQsOCArMTcwMyw4IEBAIHNlbmQ6 Cisgc3RhdGljIHZvaWQKKyBwcm9jZXNzX3JlbW92ZV9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5 ICplKQorIHsKKy0JY2hhciAqcHJvdmlkZXIgPSBOVUxMLCAqcGluID0gTlVMTCwgY2Fub25pY2Fs X3Byb3ZpZGVyW1BBVEhfTUFYXTsKKy0JaW50IHIsIHN1Y2Nlc3MgPSAwOworKwljaGFyICpwcm92 aWRlciA9IE5VTEwsICpwaW4gPSBOVUxMLCAqc2FuZV91cmkgPSBOVUxMOworKwlpbnQgciwgc3Vj Y2VzcyA9IDAsIHJlbW92ZWRfY291bnQgPSAwOworIAlJZGVudGl0eSAqaWQsICpueHQ7CisgCisg CWRlYnVnMl9mKCJlbnRlcmluZyIpOworQEAgLTE2NTYsMzAgKzE3MTUsMzggQEAgcHJvY2Vzc19y ZW1vdmVfc21hcnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkKKyAJfQorIAlmcmVlKHBpbik7Cisg CistCWlmIChyZWFscGF0aChwcm92aWRlciwgY2Fub25pY2FsX3Byb3ZpZGVyKSA9PSBOVUxMKSB7 CistCQl2ZXJib3NlKCJmYWlsZWQgUEtDUyMxMSBhZGQgb2YgXCIlLjEwMHNcIjogcmVhbHBhdGg6 ICVzIiwKKy0JCSAgICBwcm92aWRlciwgc3RyZXJyb3IoZXJybm8pKTsKKysJc2FuZV91cmkgPSBz YW5pdGl6ZV9wa2NzMTFfcHJvdmlkZXIocHJvdmlkZXIpOworKwlpZiAoc2FuZV91cmkgPT0gTlVM TCkKKyAJCWdvdG8gc2VuZDsKKy0JfQorIAorLQlkZWJ1Z19mKCJyZW1vdmUgJS4xMDBzIiwgY2Fu b25pY2FsX3Byb3ZpZGVyKTsKKysJZGVidWdfZigicmVtb3ZlICUuMTAwcyIsIHNhbmVfdXJpKTsK KyAJZm9yIChpZCA9IFRBSUxRX0ZJUlNUKCZpZHRhYi0+aWRsaXN0KTsgaWQ7IGlkID0gbnh0KSB7 CisgCQlueHQgPSBUQUlMUV9ORVhUKGlkLCBuZXh0KTsKKyAJCS8qIFNraXAgZmlsZS0tYmFzZWQg a2V5cyAqLworIAkJaWYgKGlkLT5wcm92aWRlciA9PSBOVUxMKQorIAkJCWNvbnRpbnVlOworLQkJ aWYgKCFzdHJjbXAoY2Fub25pY2FsX3Byb3ZpZGVyLCBpZC0+cHJvdmlkZXIpKSB7CisrCQlpZiAo IXN0cmNtcChzYW5lX3VyaSwgaWQtPnByb3ZpZGVyKSkgeworIAkJCVRBSUxRX1JFTU9WRSgmaWR0 YWItPmlkbGlzdCwgaWQsIG5leHQpOworIAkJCWZyZWVfaWRlbnRpdHkoaWQpOworIAkJCWlkdGFi LT5uZW50cmllcy0tOworKwkJCXJlbW92ZWRfY291bnQrKzsKKyAJCX0KKyAJfQorLQlpZiAocGtj czExX2RlbF9wcm92aWRlcihjYW5vbmljYWxfcHJvdmlkZXIpID09IDApCisrCS8qIE9ubHkgc3Vj Y2VlZCBpZiB3ZSBhY3R1YWxseSByZW1vdmVkIGtleXMgYW5kIHVubG9hZGVkIHByb3ZpZGVyICov CisrCWlmIChyZW1vdmVkX2NvdW50ID4gMCAmJiBwa2NzMTFfZGVsX3Byb3ZpZGVyKHNhbmVfdXJp KSA9PSAwKSB7CisgCQlzdWNjZXNzID0gMTsKKy0JZWxzZQorKwkJZGVidWdfZigicmVtb3ZlZCAl ZCBrZXkocykgZnJvbSBwcm92aWRlciAlcyIsCisrCQkgICAgcmVtb3ZlZF9jb3VudCwgc2FuZV91 cmkpOworKwl9IGVsc2UgaWYgKHJlbW92ZWRfY291bnQgPT0gMCkgeworKwkJZXJyb3JfZigibm8g bWF0Y2hpbmcga2V5cyBmb3VuZCBmb3IgcHJvdmlkZXIgJXMiLCBzYW5lX3VyaSk7CisrCQkvKiBT dGlsbCB0cnkgdG8gY2xlYW4gdXAgcHJvdmlkZXIgaWYgaXQgZXhpc3RzICovCisrCQlwa2NzMTFf ZGVsX3Byb3ZpZGVyKHNhbmVfdXJpKTsKKysJfSBlbHNlIHsKKyAJCWVycm9yX2YoInBrY3MxMV9k ZWxfcHJvdmlkZXIgZmFpbGVkIik7CisrCX0KKyBzZW5kOgorIAlmcmVlKHByb3ZpZGVyKTsKKysJ ZnJlZShzYW5lX3VyaSk7CisgCXNlbmRfc3RhdHVzKGUsIHN1Y2Nlc3MpOworIH0KKyAjZW5kaWYg LyogRU5BQkxFX1BLQ1MxMSAqLworZGlmZiAtLWdpdCBhL3NzaC1rZXlnZW4uYyBiL3NzaC1rZXln ZW4uYworaW5kZXggZWQxOTMyZmYwLi4zNDJiMGM1N2QgMTAwNjQ0CistLS0gYS9zc2gta2V5Z2Vu LmMKKysrKyBiL3NzaC1rZXlnZW4uYworQEAgLTgyMCw4ICs4MjAsMTEgQEAgZG9fZG93bmxvYWQo c3RydWN0IHBhc3N3ZCAqcHcpCisgCQkJZnJlZShmcCk7CisgCQl9IGVsc2UgeworIAkJCSh2b2lk KSBzc2hrZXlfd3JpdGUoa2V5c1tpXSwgc3Rkb3V0KTsgLyogWFhYIGNoZWNrICovCistCQkJZnBy aW50ZihzdGRvdXQsICIlcyVzXG4iLAorLQkJCSAgICAqKGNvbW1lbnRzW2ldKSA9PSAnXDAnID8g IiIgOiAiICIsIGNvbW1lbnRzW2ldKTsKKysJCQlpZiAoKihjb21tZW50c1tpXSkgIT0gJ1wwJykg eworKwkJCQlmcHJpbnRmKHN0ZG91dCwgIiAlcyIsIGNvbW1lbnRzW2ldKTsKKysJCQl9CisrCQkJ KHZvaWQpIHBrY3MxMV91cmlfd3JpdGUoa2V5c1tpXSwgc3Rkb3V0KTsKKysJCQlmcHJpbnRmKHN0 ZG91dCwgIlxuIik7CisgCQl9CisgCQlmcmVlKGNvbW1lbnRzW2ldKTsKKyAJCXNzaGtleV9mcmVl KGtleXNbaV0pOworZGlmZiAtLWdpdCBhL3NzaC1wa2NzMTEtY2xpZW50LmMgYi9zc2gtcGtjczEx LWNsaWVudC5jCitpbmRleCAzMGE0Y2Y1ZGMuLjNmZDA1OGEwYyAxMDA2NDQKKy0tLSBhL3NzaC1w a2NzMTEtY2xpZW50LmMKKysrKyBiL3NzaC1wa2NzMTEtY2xpZW50LmMKK0BAIC0xOCw2ICsxOCw3 IEBACisgCisgI2luY2x1ZGUgImluY2x1ZGVzLmgiCisgCisrI2lmZGVmIEVOQUJMRV9QS0NTMTEK KyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgI2luY2x1 ZGUgPHN5cy9zb2NrZXQuaD4KK0BAIC0zOCw2ICszOSw3IEBACisgI2luY2x1ZGUgImF1dGhmZC5o IgorICNpbmNsdWRlICJhdG9taWNpby5oIgorICNpbmNsdWRlICJzc2gtcGtjczExLmgiCisrI2lu Y2x1ZGUgInNzaC1wa2NzMTEtdXJpLmgiCisgI2luY2x1ZGUgInNzaGVyci5oIgorIAorIC8qIGJv cnJvd3MgY29kZSBmcm9tIHNmdHAtc2VydmVyIGFuZCBzc2gtYWdlbnQgKi8KK0BAIC0zNzksNiAr MzgxLDE5IEBAIHBrY3MxMV9zdGFydF9oZWxwZXIoY29uc3QgY2hhciAqcGF0aCkKKyAJcmV0dXJu IGhlbHBlcjsKKyB9CisgCisraW50CisrcGtjczExX2FkZF9wcm92aWRlcl9ieV91cmkoc3RydWN0 IHBrY3MxMV91cmkgKnVyaSwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsIGNoYXIg KioqbGFiZWxzcCkKKyt7CisrCWludCBua2V5cyA9IDA7CisrCWNoYXIgKnByb3ZpZGVyX3VyaSA9 IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisrCisrCWRlYnVnX2YoImNhbGxlZCwgcHJvdmlkZXJfdXJp ID0gJXMiLCBwcm92aWRlcl91cmkpOworKworKwlua2V5cyA9IHBrY3MxMV9hZGRfcHJvdmlkZXIo cHJvdmlkZXJfdXJpLCBwaW4sIGtleXAsIGxhYmVsc3ApOworKworKwlyZXR1cm4gbmtleXM7Cisr fQorKworIGludAorIHBrY3MxMV9hZGRfcHJvdmlkZXIoY2hhciAqbmFtZSwgY2hhciAqcGluLCBz dHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLAorICAgICBjaGFyICoqKmxhYmVsc3ApCitAQCAtMzkwLDYg KzQwNSw4IEBAIHBrY3MxMV9hZGRfcHJvdmlkZXIoY2hhciAqbmFtZSwgY2hhciAqcGluLCBzdHJ1 Y3Qgc3Noa2V5ICoqKmtleXNwLAorIAlzdHJ1Y3Qgc3NoYnVmICptc2c7CisgCXN0cnVjdCBoZWxw ZXIgKmhlbHBlcjsKKyAKKysJZGVidWdfZigiY2FsbGVkLCBuYW1lID0gJXMiLCBuYW1lKTsKKysK KyAJaWYgKChoZWxwZXIgPSBoZWxwZXJfYnlfcHJvdmlkZXIobmFtZSkpID09IE5VTEwgJiYKKyAJ ICAgIChoZWxwZXIgPSBwa2NzMTFfc3RhcnRfaGVscGVyKG5hbWUpKSA9PSBOVUxMKQorIAkJcmV0 dXJuIC0xOworQEAgLTQxNCw2ICs0MzEsNyBAQCBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKm5h bWUsIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtleSAqKiprZXlzcCwKKyAJCSprZXlzcCA9IHhjYWxs b2MobmtleXMsIHNpemVvZihzdHJ1Y3Qgc3Noa2V5ICopKTsKKyAJCWlmIChsYWJlbHNwKQorIAkJ CSpsYWJlbHNwID0geGNhbGxvYyhua2V5cywgc2l6ZW9mKGNoYXIgKikpOworKwkJZGVidWdfZigi bmtleXMgPSAldSIsIG5rZXlzKTsKKyAJCWZvciAoaSA9IDA7IGkgPCBua2V5czsgaSsrKSB7Cisg CQkJLyogWFhYIGNsZWFuIHVwIHByb3Blcmx5IGluc3RlYWQgb2YgZmF0YWwoKSAqLworIAkJCWlm ICgociA9IHNzaGtleV9mcm9tcyhtc2csICZrKSkgIT0gMCB8fAorQEAgLTQ5NywzICs1MTUsNCBA QCBwa2NzMTFfa2V5X2ZyZWUoc3RydWN0IHNzaGtleSAqa2V5KQorIAlpZiAoaGVscGVyLT5ua2V5 YmxvYnMgPT0gMCkKKyAJCWhlbHBlcl90ZXJtaW5hdGUoaGVscGVyKTsKKyB9CisrI2VuZGlmCitk aWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS11cmkuYyBiL3NzaC1wa2NzMTEtdXJpLmMKK25ldyBmaWxl IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLmQ1YjA3NDU5MgorLS0tIC9kZXYvbnVsbAor KysrIGIvc3NoLXBrY3MxMS11cmkuYworQEAgLTAsMCArMSw0MzggQEAKKysvKgorKyAqIENvcHly aWdodCAoYykgMjAxNyBSZWQgSGF0CisrICoKKysgKiBBdXRob3JzOiBKYWt1YiBKZWxlbiA8ampl bGVuQHJlZGhhdC5jb20+CisrICoKKysgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKysgKiBwdXJwb3NlIHdpdGgg b3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3Zl CisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIg aW4gYWxsIGNvcGllcy4KKysgKgorKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi IEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworKyAqIFdJVEggUkVHQVJE IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKysg KiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgQkUgTElBQkxFIEZPUgorKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKysgKiBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKysg KiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9O LCBBUklTSU5HIE9VVCBPRgorKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBF UkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrICovCisrCisrI2luY2x1ZGUgImluY2x1ZGVz LmgiCisrCisrI2lmZGVmIEVOQUJMRV9QS0NTMTEKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKyNpbmNsdWRlICJz c2hrZXkuaCIKKysjaW5jbHVkZSAic3NoYnVmLmgiCisrI2luY2x1ZGUgImxvZy5oIgorKworKyNk ZWZpbmUgQ1JZUFRPS0lfQ09NUEFUCisrI2luY2x1ZGUgInBrY3MxMS5oIgorKworKyNpbmNsdWRl ICJzc2gtcGtjczExLXVyaS5oIgorKworKyNkZWZpbmUgUEtDUzExX1VSSV9QQVRIX1NFUEFSQVRP UiAiOyIKKysjZGVmaW5lIFBLQ1MxMV9VUklfUVVFUllfU0VQQVJBVE9SICImIgorKyNkZWZpbmUg UEtDUzExX1VSSV9WQUxVRV9TRVBBUkFUT1IgIj0iCisrI2RlZmluZSBQS0NTMTFfVVJJX0lEICJp ZCIKKysjZGVmaW5lIFBLQ1MxMV9VUklfVE9LRU4gInRva2VuIgorKyNkZWZpbmUgUEtDUzExX1VS SV9PQkpFQ1QgIm9iamVjdCIKKysjZGVmaW5lIFBLQ1MxMV9VUklfTElCX01BTlVGICJsaWJyYXJ5 LW1hbnVmYWN0dXJlciIKKysjZGVmaW5lIFBLQ1MxMV9VUklfTUFOVUYgIm1hbnVmYWN0dXJlciIK KysjZGVmaW5lIFBLQ1MxMV9VUklfU0VSSUFMICJzZXJpYWwiCisrI2RlZmluZSBQS0NTMTFfVVJJ X01PRFVMRV9QQVRIICJtb2R1bGUtcGF0aCIKKysjZGVmaW5lIFBLQ1MxMV9VUklfUElOX1ZBTFVF ICJwaW4tdmFsdWUiCisrCisrLyogS2V5d29yZCB0b2tlbnMuICovCisrdHlwZWRlZiBlbnVtIHsK KysJcElkLCBwVG9rZW4sIHBPYmplY3QsIHBMaWJyYXJ5TWFudWZhY3R1cmVyLCBwTWFudWZhY3R1 cmVyLCBwU2VyaWFsLAorKwlwTW9kdWxlUGF0aCwgcFBpblZhbHVlLCBwQmFkT3B0aW9uCisrfSBw a2NzMTF1cmlPcENvZGVzOworKworKy8qIFRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRv a2Vucy4gKi8KKytzdGF0aWMgc3RydWN0IHsKKysJY29uc3QgY2hhciAqbmFtZTsKKysJcGtjczEx dXJpT3BDb2RlcyBvcGNvZGU7CisrfSBrZXl3b3Jkc1tdID0geworKwl7IFBLQ1MxMV9VUklfSUQs IHBJZCB9LAorKwl7IFBLQ1MxMV9VUklfVE9LRU4sIHBUb2tlbiB9LAorKwl7IFBLQ1MxMV9VUklf T0JKRUNULCBwT2JqZWN0IH0sCisrCXsgUEtDUzExX1VSSV9MSUJfTUFOVUYsIHBMaWJyYXJ5TWFu dWZhY3R1cmVyIH0sCisrCXsgUEtDUzExX1VSSV9NQU5VRiwgcE1hbnVmYWN0dXJlciB9LAorKwl7 IFBLQ1MxMV9VUklfU0VSSUFMLCBwU2VyaWFsIH0sCisrCXsgUEtDUzExX1VSSV9NT0RVTEVfUEFU SCwgcE1vZHVsZVBhdGggfSwKKysJeyBQS0NTMTFfVVJJX1BJTl9WQUxVRSwgcFBpblZhbHVlIH0s CisrCXsgTlVMTCwgcEJhZE9wdGlvbiB9CisrfTsKKysKKytzdGF0aWMgcGtjczExdXJpT3BDb2Rl cworK3BhcnNlX3Rva2VuKGNvbnN0IGNoYXIgKmNwKQorK3sKKysJdV9pbnQgaTsKKysKKysJZm9y IChpID0gMDsga2V5d29yZHNbaV0ubmFtZTsgaSsrKQorKwkJaWYgKHN0cm5jYXNlY21wKGNwLCBr ZXl3b3Jkc1tpXS5uYW1lLAorKwkJICAgIHN0cmxlbihrZXl3b3Jkc1tpXS5uYW1lKSkgPT0gMCkK KysJCQlyZXR1cm4ga2V5d29yZHNbaV0ub3Bjb2RlOworKworKwlyZXR1cm4gcEJhZE9wdGlvbjsK Kyt9CisrCisraW50CisrcGVyY2VudF9kZWNvZGUoY2hhciAqZGF0YSwgY2hhciAqKm91dHApCisr eworKwljaGFyIHRtcFszXTsKKysJY2hhciAqb3V0LCAqdG1wX2VuZDsKKysJY2hhciAqcCA9IGRh dGE7CisrCWxvbmcgdmFsdWU7CisrCXNpemVfdCBvdXRsZW4gPSAwOworKworKwlvdXQgPSBtYWxs b2Moc3RybGVuKGRhdGEpKzEpOyAvKiB1cHBlciBib3VuZCAqLworKwlpZiAob3V0ID09IE5VTEwp CisrCQlyZXR1cm4gLTE7CisrCXdoaWxlICgqcCAhPSAnXDAnKSB7CisrCQlzd2l0Y2ggKCpwKSB7 CisrCQljYXNlICclJzoKKysJCQlwKys7CisrCQkJaWYgKCpwID09ICdcMCcpCisrCQkJCWdvdG8g ZmFpbDsKKysJCQl0bXBbMF0gPSAqcCsrOworKwkJCWlmICgqcCA9PSAnXDAnKQorKwkJCQlnb3Rv IGZhaWw7CisrCQkJdG1wWzFdID0gKnArKzsKKysJCQl0bXBbMl0gPSAnXDAnOworKwkJCXRtcF9l bmQgPSBOVUxMOworKwkJCXZhbHVlID0gc3RydG9sKHRtcCwgJnRtcF9lbmQsIDE2KTsKKysJCQlp ZiAodG1wX2VuZCAhPSB0bXArMikKKysJCQkJZ290byBmYWlsOworKwkJCWVsc2UKKysJCQkJb3V0 W291dGxlbisrXSA9IChjaGFyKSB2YWx1ZTsKKysJCQlicmVhazsKKysJCWRlZmF1bHQ6CisrCQkJ b3V0W291dGxlbisrXSA9ICpwKys7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysJLyogemVy byB0ZXJtaW5hdGUgKi8KKysJb3V0W291dGxlbl0gPSAnXDAnOworKwkqb3V0cCA9IG91dDsKKysJ cmV0dXJuIG91dGxlbjsKKytmYWlsOgorKwlmcmVlKG91dCk7CisrCXJldHVybiAtMTsKKyt9Cisr Cisrc3RydWN0IHNzaGJ1ZiAqCisrcGVyY2VudF9lbmNvZGUoY29uc3QgY2hhciAqZGF0YSwgc2l6 ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqYWxsb3dfbGlzdCkKKyt7CisrCXN0cnVjdCBzc2hidWYg KmIgPSBOVUxMOworKwljaGFyIHRtcFs0XSwgKmNwOworKwlzaXplX3QgaTsKKysKKysJaWYgKChi ID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7CisrCWZvciAoaSA9IDA7 IGkgPCBsZW5ndGg7IGkrKykgeworKwkJY3AgPSBzdHJjaHIoYWxsb3dfbGlzdCwgZGF0YVtpXSk7 CisrCQkvKiBpZiBjIGlzIHNwZWNpZmllZCBhcyAnXDAnIHBvaW50ZXIgdG8gdGVybWluYXRvciBp cyByZXR1cm5lZCAhISAqLworKwkJaWYgKGNwICE9IE5VTEwgJiYgKmNwICE9ICdcMCcpIHsKKysJ CQlpZiAoc3NoYnVmX3B1dChiLCAmZGF0YVtpXSwgMSkgIT0gMCkKKysJCQkJZ290byBlcnI7Cisr CQl9IGVsc2UKKysJCQlpZiAoc25wcmludGYodG1wLCA0LCAiJSUlMDJYIiwgKHVuc2lnbmVkIGNo YXIpIGRhdGFbaV0pIDwgMworKwkJCSAgICB8fCBzc2hidWZfcHV0KGIsIHRtcCwgMykgIT0gMCkK KysJCQkJZ290byBlcnI7CisrCX0KKysJaWYgKHNzaGJ1Zl9wdXQoYiwgIlwwIiwgMSkgPT0gMCkK KysJCXJldHVybiBiOworK2VycjoKKysJc3NoYnVmX2ZyZWUoYik7CisrCXJldHVybiBOVUxMOwor K30KKysKKytjaGFyICoKKytwa2NzMTFfdXJpX2FwcGVuZChjaGFyICpwYXJ0LCBjb25zdCBjaGFy ICpzZXBhcmF0b3IsIGNvbnN0IGNoYXIgKmtleSwKKysgICAgc3RydWN0IHNzaGJ1ZiAqdmFsdWUp CisreworKwljaGFyICpuZXdfcGFydDsKKysJc2l6ZV90IHNpemUgPSAwOworKworKwlpZiAodmFs dWUgPT0gTlVMTCkKKysJCXJldHVybiBOVUxMOworKworKwlzaXplID0gYXNwcmludGYoJm5ld19w YXJ0LAorKwkgICAgIiVzJXMlcyIgIFBLQ1MxMV9VUklfVkFMVUVfU0VQQVJBVE9SICIlcyIsCisr CSAgICAocGFydCAhPSBOVUxMID8gcGFydCA6ICIiKSwKKysJICAgIChwYXJ0ICE9IE5VTEwgPyBz ZXBhcmF0b3IgOiAiIiksCisrCSAgICBrZXksIHNzaGJ1Zl9wdHIodmFsdWUpKTsKKysJc3NoYnVm X2ZyZWUodmFsdWUpOworKwlmcmVlKHBhcnQpOworKworKwlpZiAoc2l6ZSA8PSAwKQorKwkJcmV0 dXJuIE5VTEw7CisrCXJldHVybiBuZXdfcGFydDsKKyt9CisrCisrY2hhciAqCisrcGtjczExX3Vy aV9nZXQoc3RydWN0IHBrY3MxMV91cmkgKnVyaSkKKyt7CisrCXNpemVfdCBzaXplID0gMDsKKysJ Y2hhciAqcCA9IE5VTEwsICpwYXRoID0gTlVMTCwgKnF1ZXJ5ID0gTlVMTDsKKysKKysJLyogY29t cG9zZSBhIHBlcmNlbnQtZW5jb2RlZCBJRCAqLworKwlpZiAodXJpLT5pZF9sZW4gPiAwKSB7Cisr CQlzdHJ1Y3Qgc3NoYnVmICprZXlfaWQgPSBwZXJjZW50X2VuY29kZSh1cmktPmlkLCB1cmktPmlk X2xlbiwgIiIpOworKwkJcGF0aCA9IHBrY3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9VUklf UEFUSF9TRVBBUkFUT1IsCisrCQkgICAgUEtDUzExX1VSSV9JRCwga2V5X2lkKTsKKysJCWlmIChw YXRoID09IE5VTEwpCisrCQkJZ290byBlcnI7CisrCX0KKysKKysJLyogV3JpdGUgb2JqZWN0IGxh YmVsICovCisrCWlmICh1cmktPm9iamVjdCkgeworKwkJc3RydWN0IHNzaGJ1ZiAqbGFiZWwgPSBw ZXJjZW50X2VuY29kZSh1cmktPm9iamVjdCwgc3RybGVuKHVyaS0+b2JqZWN0KSwKKysJCSAgICBQ S0NTMTFfVVJJX1dISVRFTElTVCk7CisrCQlwYXRoID0gcGtjczExX3VyaV9hcHBlbmQocGF0aCwg UEtDUzExX1VSSV9QQVRIX1NFUEFSQVRPUiwKKysJCSAgICBQS0NTMTFfVVJJX09CSkVDVCwgbGFi ZWwpOworKwkJaWYgKHBhdGggPT0gTlVMTCkKKysJCQlnb3RvIGVycjsKKysJfQorKworKwkvKiBX cml0ZSB0b2tlbiBsYWJlbCAqLworKwlpZiAodXJpLT50b2tlbikgeworKwkJc3RydWN0IHNzaGJ1 ZiAqbGFiZWwgPSBwZXJjZW50X2VuY29kZSh1cmktPnRva2VuLCBzdHJsZW4odXJpLT50b2tlbiks CisrCQkgICAgUEtDUzExX1VSSV9XSElURUxJU1QpOworKwkJcGF0aCA9IHBrY3MxMV91cmlfYXBw ZW5kKHBhdGgsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IsCisrCQkgICAgUEtDUzExX1VSSV9U T0tFTiwgbGFiZWwpOworKwkJaWYgKHBhdGggPT0gTlVMTCkKKysJCQlnb3RvIGVycjsKKysJfQor KworKwkvKiBXcml0ZSBtYW51ZmFjdHVyZXIgKi8KKysJaWYgKHVyaS0+bWFudWYpIHsKKysJCXN0 cnVjdCBzc2hidWYgKm1hbnVmID0gcGVyY2VudF9lbmNvZGUodXJpLT5tYW51ZiwKKysJCSAgICBz dHJsZW4odXJpLT5tYW51ZiksIFBLQ1MxMV9VUklfV0hJVEVMSVNUKTsKKysJCXBhdGggPSBwa2Nz MTFfdXJpX2FwcGVuZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAorKwkJICAgIFBL Q1MxMV9VUklfTUFOVUYsIG1hbnVmKTsKKysJCWlmIChwYXRoID09IE5VTEwpCisrCQkJZ290byBl cnI7CisrCX0KKysKKysJLyogV3JpdGUgc2VyaWFsICovCisrCWlmICh1cmktPnNlcmlhbCkgewor KwkJc3RydWN0IHNzaGJ1ZiAqc2VyaWFsID0gcGVyY2VudF9lbmNvZGUodXJpLT5zZXJpYWwsCisr CQkgICAgc3RybGVuKHVyaS0+c2VyaWFsKSwgUEtDUzExX1VSSV9XSElURUxJU1QpOworKwkJcGF0 aCA9IHBrY3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IsCisr CQkgICAgUEtDUzExX1VSSV9TRVJJQUwsIHNlcmlhbCk7CisrCQlpZiAocGF0aCA9PSBOVUxMKQor KwkJCWdvdG8gZXJyOworKwl9CisrCisrCS8qIFdyaXRlIG1vZHVsZV9wYXRoICovCisrCWlmICh1 cmktPm1vZHVsZV9wYXRoKSB7CisrCQlzdHJ1Y3Qgc3NoYnVmICptb2R1bGUgPSBwZXJjZW50X2Vu Y29kZSh1cmktPm1vZHVsZV9wYXRoLAorKwkJICAgIHN0cmxlbih1cmktPm1vZHVsZV9wYXRoKSwg UEtDUzExX1VSSV9XSElURUxJU1QgIi8iKTsKKysJCXF1ZXJ5ID0gcGtjczExX3VyaV9hcHBlbmQo cXVlcnksIFBLQ1MxMV9VUklfUVVFUllfU0VQQVJBVE9SLAorKwkJICAgIFBLQ1MxMV9VUklfTU9E VUxFX1BBVEgsIG1vZHVsZSk7CisrCQlpZiAocXVlcnkgPT0gTlVMTCkKKysJCQlnb3RvIGVycjsK KysJfQorKworKwlzaXplID0gYXNwcmludGYoJnAsIFBLQ1MxMV9VUklfU0NIRU1FICIlcyVzJXMi LAorKwkgICAgcGF0aCAhPSBOVUxMID8gcGF0aCA6ICIiLAorKwkgICAgcXVlcnkgIT0gTlVMTCA/ ICI/IiA6ICIiLAorKwkgICAgcXVlcnkgIT0gTlVMTCA/IHF1ZXJ5IDogIiIpOworK2VycjoKKysJ ZnJlZShxdWVyeSk7CisrCWZyZWUocGF0aCk7CisrCWlmIChzaXplIDw9IDApCisrCQlyZXR1cm4g TlVMTDsKKysJcmV0dXJuIHA7CisrfQorKworK3N0cnVjdCBwa2NzMTFfdXJpICoKKytwa2NzMTFf dXJpX2luaXQoKQorK3sKKysJc3RydWN0IHBrY3MxMV91cmkgKmQgPSBjYWxsb2MoMSwgc2l6ZW9m KHN0cnVjdCBwa2NzMTFfdXJpKSk7CisrCXJldHVybiBkOworK30KKysKKyt2b2lkCisrcGtjczEx X3VyaV9jbGVhbnVwKHN0cnVjdCBwa2NzMTFfdXJpICpwa2NzMTEpCisreworKwlpZiAocGtjczEx ID09IE5VTEwpIHsKKysJCXJldHVybjsKKysJfQorKworKwlmcmVlKHBrY3MxMS0+aWQpOworKwlm cmVlKHBrY3MxMS0+bW9kdWxlX3BhdGgpOworKwlmcmVlKHBrY3MxMS0+dG9rZW4pOworKwlmcmVl KHBrY3MxMS0+b2JqZWN0KTsKKysJZnJlZShwa2NzMTEtPmxpYl9tYW51Zik7CisrCWZyZWUocGtj czExLT5tYW51Zik7CisrCWZyZWUocGtjczExLT5zZXJpYWwpOworKwlpZiAocGtjczExLT5waW4p CisrCQlmcmVlemVybyhwa2NzMTEtPnBpbiwgc3RybGVuKHBrY3MxMS0+cGluKSk7CisrCWZyZWUo cGtjczExKTsKKyt9CisrCisraW50CisrcGtjczExX3VyaV9wYXJzZShjb25zdCBjaGFyICp1cmks IHN0cnVjdCBwa2NzMTFfdXJpICpwa2NzMTEpCisreworKwljaGFyICpzYXZlcHRyMSwgKnNhdmVw dHIyLCAqc3RyMSwgKnN0cjIsICp0b2s7CisrCWludCBydiA9IDAsIGxlbjsKKysJY2hhciAqcCA9 IE5VTEw7CisrCisrCXNpemVfdCBzY2hlbWVfbGVuID0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1F KTsKKysJaWYgKHN0cmxlbih1cmkpIDwgc2NoZW1lX2xlbiB8fCAvKiBlbXB0eSBVUkkgbWF0Y2hl cyBldmVyeXRoaW5nICovCisrCSAgICBzdHJuY21wKHVyaSwgUEtDUzExX1VSSV9TQ0hFTUUsIHNj aGVtZV9sZW4pICE9IDApIHsKKysJCWVycm9yX2YoIlRoZSAnJXMnIGRvZXMgbm90IGxvb2sgbGlr ZSBQS0NTIzExIFVSSSIsIHVyaSk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJaWYgKHBrY3Mx MSA9PSBOVUxMKSB7CisrCQllcnJvcl9mKCJCYWQgYXJndW1lbnRzLiBUaGUgcGtjczExIGNhbid0 IGJlIG51bGwiKTsKKysJCXJldHVybiAtMTsKKysJfQorKworKwkvKiBza2lwIFVSSSBzY2hlbWEg bmFtZSAqLworKwlwID0gc3RyZHVwKHVyaSk7CisrCXN0cjEgPSBwOworKworKwkvKiBldmVyeXRo aW5nIGJlZm9yZSA/ICovCisrCXRvayA9IHN0cnRva19yKHN0cjEsICI/IiwgJnNhdmVwdHIxKTsK KysJaWYgKHRvayA9PSBOVUxMKSB7CisrCQllcnJvcl9mKCJwazExLXBhdGggZXhwZWN0ZWQsIGdv dCBFT0YiKTsKKysJCXJ2ID0gLTE7CisrCQlnb3RvIG91dDsKKysJfQorKworKwkvKiBza2lwIFVS SSBzY2hlbWEgbmFtZToKKysJICogdGhlIHNjaGVtZSBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgYXQg bGVhc3Qgc29tZXRoaW5nIGJlZm9yZSAiPyIKKysJICogYWxsb3dpbmcgZW1wdHkgcGsxMS1wYXRo LiBSZXN1bHRpbmcgdG9rZW4gYXQgd29yc3QgcG9pbnRpbmcgdG8KKysJICogXDAgYnl0ZSAqLwor Kwl0b2sgPSB0b2sgKyBzY2hlbWVfbGVuOworKworKwkvKiBwYXJzZSBwazExLXBhdGggKi8KKysJ Zm9yIChzdHIyID0gdG9rOyA7IHN0cjIgPSBOVUxMKSB7CisrCQljaGFyICoqY2hhcnB0ciwgKmFy ZyA9IE5VTEw7CisrCQlwa2NzMTF1cmlPcENvZGVzIG9wY29kZTsKKysJCXRvayA9IHN0cnRva19y KHN0cjIsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IsICZzYXZlcHRyMik7CisrCQlpZiAodG9r ID09IE5VTEwpCisrCQkJYnJlYWs7CisrCQlvcGNvZGUgPSBwYXJzZV90b2tlbih0b2spOworKwkJ aWYgKG9wY29kZSAhPSBwQmFkT3B0aW9uKQorKwkJCWFyZyA9IHRvayArIHN0cmxlbihrZXl3b3Jk c1tvcGNvZGVdLm5hbWUpICsgMTsgLyogc2VwYXJhdG9yICI9IiAqLworKworKwkJc3dpdGNoIChv cGNvZGUpIHsKKysJCWNhc2UgcElkOgorKwkJCS8qIENLQV9JRCAqLworKwkJCWlmIChwa2NzMTEt PmlkICE9IE5VTEwpIHsKKysJCQkJdmVyYm9zZV9mKCJUaGUgaWQgYWxyZWFkeSBzZXQgaW4gdGhl IFBLQ1MjMTEgVVJJIik7CisrCQkJCXJ2ID0gLTE7CisrCQkJCWdvdG8gb3V0OworKwkJCX0KKysJ CQlsZW4gPSBwZXJjZW50X2RlY29kZShhcmcsICZwa2NzMTEtPmlkKTsKKysJCQlpZiAobGVuIDw9 IDApIHsKKysJCQkJdmVyYm9zZV9mKCJGYWlsZWQgdG8gcGVyY2VudC1kZWNvZGUgQ0tBX0lEOiAl cyIsIGFyZyk7CisrCQkJCXJ2ID0gLTE7CisrCQkJCWdvdG8gb3V0OworKwkJCX0gZWxzZQorKwkJ CQlwa2NzMTEtPmlkX2xlbiA9IGxlbjsKKysJCQlkZWJ1ZzNfZigiU2V0dGluZyBDS0FfSUQgPSAl cyBmcm9tIFBLQ1MjMTEgVVJJIiwgYXJnKTsKKysJCQlicmVhazsKKysJCWNhc2UgcFRva2VuOgor KwkJCS8qIENLX1RPS0VOX0lORk8gLT4gbGFiZWwgKi8KKysJCQljaGFycHRyID0gJnBrY3MxMS0+ dG9rZW47CisrIHBhcnNlX3N0cmluZzoKKysJCQlpZiAoKmNoYXJwdHIgIT0gTlVMTCkgeworKwkJ CQl2ZXJib3NlX2YoIlRoZSAlcyBhbHJlYWR5IHNldCBpbiB0aGUgUEtDUyMxMSBVUkkiLAorKwkJ CQkgICAga2V5d29yZHNbb3Bjb2RlXS5uYW1lKTsKKysJCQkJcnYgPSAtMTsKKysJCQkJZ290byBv dXQ7CisrCQkJfQorKwkJCXBlcmNlbnRfZGVjb2RlKGFyZywgY2hhcnB0cik7CisrCQkJZGVidWcz X2YoIlNldHRpbmcgJXMgPSAlcyBmcm9tIFBLQ1MjMTEgVVJJIiwKKysJCQkgICAga2V5d29yZHNb b3Bjb2RlXS5uYW1lLCAqY2hhcnB0cik7CisrCQkJYnJlYWs7CisrCisrCQljYXNlIHBPYmplY3Q6 CisrCQkJLyogQ0tfVE9LRU5fSU5GTyAtPiBtYW51ZmFjdHVyZXJJRCAqLworKwkJCWNoYXJwdHIg PSAmcGtjczExLT5vYmplY3Q7CisrCQkJZ290byBwYXJzZV9zdHJpbmc7CisrCisrCQljYXNlIHBN YW51ZmFjdHVyZXI6CisrCQkJLyogQ0tfVE9LRU5fSU5GTyAtPiBtYW51ZmFjdHVyZXJJRCAqLwor KwkJCWNoYXJwdHIgPSAmcGtjczExLT5tYW51ZjsKKysJCQlnb3RvIHBhcnNlX3N0cmluZzsKKysK KysJCWNhc2UgcFNlcmlhbDoKKysJCQkvKiBDS19UT0tFTl9JTkZPIC0+IHNlcmlhbE51bWJlciAq LworKwkJCWNoYXJwdHIgPSAmcGtjczExLT5zZXJpYWw7CisrCQkJZ290byBwYXJzZV9zdHJpbmc7 CisrCisrCQljYXNlIHBMaWJyYXJ5TWFudWZhY3R1cmVyOgorKwkJCS8qIENLX0lORk8gLT4gbWFu dWZhY3R1cmVySUQgKi8KKysJCQljaGFycHRyID0gJnBrY3MxMS0+bGliX21hbnVmOworKwkJCWdv dG8gcGFyc2Vfc3RyaW5nOworKworKwkJZGVmYXVsdDoKKysJCQkvKiBVbnJlY29nbml6ZWQgYXR0 cmlidXRlIGluIHRoZSBVUkkgcGF0aCBTSE9VTEQgYmUgZXJyb3IgKi8KKysJCQl2ZXJib3NlX2Yo IlVua25vd24gcGFydCBvZiBwYXRoIGluIFBLQ1MjMTEgVVJJOiAlcyIsIHRvayk7CisrCQl9Cisr CX0KKysKKysJdG9rID0gc3RydG9rX3IoTlVMTCwgIj8iLCAmc2F2ZXB0cjEpOworKwlpZiAodG9r ID09IE5VTEwpIHsKKysJCWdvdG8gb3V0OworKwl9CisrCS8qIHBhcnNlIHBrMTEtcXVlcnkgKG9w dGlvbmFsKSAqLworKwlmb3IgKHN0cjIgPSB0b2s7IDsgc3RyMiA9IE5VTEwpIHsKKysJCWNoYXIg KmFyZzsKKysJCXBrY3MxMXVyaU9wQ29kZXMgb3Bjb2RlOworKwkJdG9rID0gc3RydG9rX3Ioc3Ry MiwgUEtDUzExX1VSSV9RVUVSWV9TRVBBUkFUT1IsICZzYXZlcHRyMik7CisrCQlpZiAodG9rID09 IE5VTEwpCisrCQkJYnJlYWs7CisrCQlvcGNvZGUgPSBwYXJzZV90b2tlbih0b2spOworKwkJaWYg KG9wY29kZSAhPSBwQmFkT3B0aW9uKQorKwkJCWFyZyA9IHRvayArIHN0cmxlbihrZXl3b3Jkc1tv cGNvZGVdLm5hbWUpICsgMTsgLyogc2VwYXJhdG9yICI9IiAqLworKworKwkJc3dpdGNoIChvcGNv ZGUpIHsKKysJCWNhc2UgcE1vZHVsZVBhdGg6CisrCQkJLyogbW9kdWxlLXBhdGggaXMgUEtDUzEx UHJvdmlkZXIgKi8KKysJCQlpZiAocGtjczExLT5tb2R1bGVfcGF0aCAhPSBOVUxMKSB7CisrCQkJ CXZlcmJvc2VfZigiTXVsdGlwbGUgbW9kdWxlLXBhdGggYXR0cmlidXRlcyBhcmUiCisrCQkJCSAg ICAibm90IHN1cHBvcnRlZCB0aGUgUEtDUyMxMSBVUkkiKTsKKysJCQkJcnYgPSAtMTsKKysJCQkJ Z290byBvdXQ7CisrCQkJfQorKwkJCXBlcmNlbnRfZGVjb2RlKGFyZywgJnBrY3MxMS0+bW9kdWxl X3BhdGgpOworKwkJCWRlYnVnM19mKCJTZXR0aW5nIFBLQ1MxMVByb3ZpZGVyID0gJXMgZnJvbSBQ S0NTIzExIFVSSSIsCisrCQkJICAgIHBrY3MxMS0+bW9kdWxlX3BhdGgpOworKwkJCWJyZWFrOwor KworKwkJY2FzZSBwUGluVmFsdWU6CisrCQkJLyogcGluLXZhbHVlICovCisrCQkJaWYgKHBrY3Mx MS0+cGluICE9IE5VTEwpIHsKKysJCQkJdmVyYm9zZV9mKCJNdWx0aXBsZSBwaW4tdmFsdWUgYXR0 cmlidXRlcyBhcmUiCisrCQkJCSAgICAibm90IHN1cHBvcnRlZCB0aGUgUEtDUyMxMSBVUkkiKTsK KysJCQkJcnYgPSAtMTsKKysJCQkJZ290byBvdXQ7CisrCQkJfQorKwkJCXBlcmNlbnRfZGVjb2Rl KGFyZywgJnBrY3MxMS0+cGluKTsKKysJCQlkZWJ1ZzNfZigiU2V0dGluZyBQSU4gZnJvbSBQS0NT IzExIFVSSSIpOworKwkJCWJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCQkvKiBVbnJlY29nbml6 ZWQgYXR0cmlidXRlIGluIHRoZSBVUkkgcXVlcnkgU0hPVUxEIGJlIGlnbm9yZWQgKi8KKysJCQl2 ZXJib3NlX2YoIlVua25vd24gcGFydCBvZiBxdWVyeSBpbiBQS0NTIzExIFVSSTogJXMiLCB0b2sp OworKwkJfQorKwl9Cisrb3V0OgorKwlmcmVlKHApOworKwlyZXR1cm4gcnY7CisrfQorKworKyNl bmRpZiAvKiBFTkFCTEVfUEtDUzExICovCitkaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS11cmkuaCBi L3NzaC1wa2NzMTEtdXJpLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAu LmJjNzU4ZTc2MAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3NoLXBrY3MxMS11cmkuaAorQEAgLTAs MCArMSw0NiBAQAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDE3IFJlZCBIYXQKKysgKgorKyAq IEF1dGhvcnM6IEpha3ViIEplbGVuIDxqamVsZW5AcmVkaGF0LmNvbT4KKysgKgorKyAqIFBlcm1p c3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUg Zm9yIGFueQorKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRl ZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorKyAqCisrICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBX QVJSQU5USUVTCisrICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxM IElNUExJRUQgV0FSUkFOVElFUyBPRgorKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4g SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisrICogQU5ZIFNQRUNJ QUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFN QUdFUworKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1Ig UFJPRklUUywgV0hFVEhFUiBJTiBBTgorKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5D RSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisrICogT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysg Ki8KKysKKysjaWZuZGVmIF9TU0hfUEtDUzExX1VSSV9ICisrI2RlZmluZSBfU1NIX1BLQ1MxMV9V UklfSAorKworKyNkZWZpbmUgUEtDUzExX1VSSV9TQ0hFTUUgInBrY3MxMToiCisrI2RlZmluZSBQ S0NTMTFfVVJJX1dISVRFTElTVAkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIFwKKysJCQkJ IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiBcCisrCQkJCSIwMTIzNDU2Nzg5Xy0uKCkiCisr Cisrc3RydWN0IHBrY3MxMV91cmkgeworKwkvKiBwYXRoICovCisrCWNoYXIgKmlkOworKwlzaXpl X3QgaWRfbGVuOworKwljaGFyICp0b2tlbjsKKysJY2hhciAqb2JqZWN0OworKwljaGFyICpsaWJf bWFudWY7CisrCWNoYXIgKm1hbnVmOworKwljaGFyICpzZXJpYWw7CisrCS8qIHF1ZXJ5ICovCisr CWNoYXIgKm1vZHVsZV9wYXRoOworKwljaGFyICpwaW47IC8qIE9ubHkgcGFyc2VkLCBidXQgbm90 IHByaW50ZWQgKi8KKyt9OworKworK3N0cnVjdAkgcGtjczExX3VyaSAqcGtjczExX3VyaV9pbml0 KCk7Cisrdm9pZAkgcGtjczExX3VyaV9jbGVhbnVwKHN0cnVjdCBwa2NzMTFfdXJpICopOworK2lu dAkgcGtjczExX3VyaV9wYXJzZShjb25zdCBjaGFyICosIHN0cnVjdCBwa2NzMTFfdXJpICopOwor K3N0cnVjdAkgcGtjczExX3VyaSAqcGtjczExX3VyaV9pbml0KCk7CisrY2hhcgkqcGtjczExX3Vy aV9nZXQoc3RydWN0IHBrY3MxMV91cmkgKnVyaSk7CisrI2VuZGlmIC8qIF9TU0hfUEtDUzExX1VS SV9IICovCitkaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS5jIGIvc3NoLXBrY3MxMS5jCitpbmRleCBi ZDQ1ZWYwOTAuLjJkMzA4ZWQ2MCAxMDA2NDQKKy0tLSBhL3NzaC1wa2NzMTEuYworKysrIGIvc3No LXBrY3MxMS5jCitAQCAtMzYsNiArMzYsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2VjZHNhLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNlbmRpZgorIAorICNkZWZpbmUgQ1JZUFRPS0lf Q09NUEFUCitAQCAtNDgsNiArNDksNyBAQAorICNpbmNsdWRlICJtaXNjLmgiCisgI2luY2x1ZGUg InNzaGJ1Zi5oIgorICNpbmNsdWRlICJzc2gtcGtjczExLmgiCisrI2luY2x1ZGUgInNzaC1wa2Nz MTEtdXJpLmgiCisgI2luY2x1ZGUgImRpZ2VzdC5oIgorICNpbmNsdWRlICJ4bWFsbG9jLmgiCisg I2luY2x1ZGUgImNyeXB0b19hcGkuaCIKK0BAIC01OCw4ICs2MCw4IEBAIHN0cnVjdCBwa2NzMTFf c2xvdGluZm8geworIAlpbnQJCQlsb2dnZWRfaW47CisgfTsKKyAKKy1zdHJ1Y3QgcGtjczExX3By b3ZpZGVyIHsKKy0JY2hhcgkJCSpuYW1lOworK3N0cnVjdCBwa2NzMTFfbW9kdWxlIHsKKysJY2hh cgkJCSptb2R1bGVfcGF0aDsKKyAJdm9pZAkJCSpoYW5kbGU7CisgCUNLX0ZVTkNUSU9OX0xJU1QJ KmZ1bmN0aW9uX2xpc3Q7CisgCUNLX0lORk8JCQlpbmZvOworQEAgLTY4LDYgKzcwLDEzIEBAIHN0 cnVjdCBwa2NzMTFfcHJvdmlkZXIgeworIAlzdHJ1Y3QgcGtjczExX3Nsb3RpbmZvCSpzbG90aW5m bzsKKyAJaW50CQkJdmFsaWQ7CisgCWludAkJCXJlZmNvdW50OworK307CisrCisrc3RydWN0IHBr Y3MxMV9wcm92aWRlciB7CisrCWNoYXIJCQkqbmFtZTsKKysJc3RydWN0IHBrY3MxMV9tb2R1bGUJ Km1vZHVsZTsgLyogY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgcHJvdmlkZXJzICovCisr CWludAkJCXJlZmNvdW50OworKwlpbnQJCQl2YWxpZDsKKyAJVEFJTFFfRU5UUlkocGtjczExX3By b3ZpZGVyKSBuZXh0OworIH07CisgCitAQCAtNzksNiArODgsNyBAQCBzdHJ1Y3QgcGtjczExX2tl eSB7CisgCUNLX1VMT05HCQlzbG90aWR4OworIAljaGFyCQkJKmtleWlkOworIAlpbnQJCQlrZXlp ZF9sZW47CisrCWNoYXIJCQkqbGFiZWw7CisgCVRBSUxRX0VOVFJZKHBrY3MxMV9rZXkpCW5leHQ7 CisgfTsKKyAKK0BAIC0xMDUsMjYgKzExNSw2MSBAQCBvc3NsX2Vycm9yKGNvbnN0IGNoYXIgKm1z ZykKKyAgKiB0aGlzIGlzIGNhbGxlZCB3aGVuIGEgcHJvdmlkZXIgZ2V0cyB1bnJlZ2lzdGVyZWQu CisgICovCisgc3RhdGljIHZvaWQKKy1wa2NzMTFfcHJvdmlkZXJfZmluYWxpemUoc3RydWN0IHBr Y3MxMV9wcm92aWRlciAqcCkKKytwa2NzMTFfbW9kdWxlX2ZpbmFsaXplKHN0cnVjdCBwa2NzMTFf bW9kdWxlICptKQorIHsKKyAJQ0tfUlYgcnY7CisgCUNLX1VMT05HIGk7CisgCistCWRlYnVnX2Yo InByb3ZpZGVyIFwiJXNcIiByZWZjb3VudCAlZCB2YWxpZCAlZCIsCistCSAgICBwLT5uYW1lLCBw LT5yZWZjb3VudCwgcC0+dmFsaWQpOworLQlpZiAoIXAtPnZhbGlkKQorKwlkZWJ1Z19mKCIlcCBy ZWZjb3VudCAlZCB2YWxpZCAlZCIsIG0sIG0tPnJlZmNvdW50LCBtLT52YWxpZCk7CisrCWlmICgh bS0+dmFsaWQpCisgCQlyZXR1cm47CistCWZvciAoaSA9IDA7IGkgPCBwLT5uc2xvdHM7IGkrKykg eworLQkJaWYgKHAtPnNsb3RpbmZvW2ldLnNlc3Npb24gJiYKKy0JCSAgICAocnYgPSBwLT5mdW5j dGlvbl9saXN0LT5DX0Nsb3NlU2Vzc2lvbigKKy0JCSAgICBwLT5zbG90aW5mb1tpXS5zZXNzaW9u KSkgIT0gQ0tSX09LKQorKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnNsb3RzOyBpKyspIHsKKysJCWlm IChtLT5zbG90aW5mb1tpXS5zZXNzaW9uICYmCisrCQkgICAgKHJ2ID0gbS0+ZnVuY3Rpb25fbGlz dC0+Q19DbG9zZVNlc3Npb24oCisrCQkgICAgbS0+c2xvdGluZm9baV0uc2Vzc2lvbikpICE9IENL Ul9PSykKKyAJCQllcnJvcigiQ19DbG9zZVNlc3Npb24gZmFpbGVkOiAlbHUiLCBydik7CisgCX0K Ky0JaWYgKChydiA9IHAtPmZ1bmN0aW9uX2xpc3QtPkNfRmluYWxpemUoTlVMTCkpICE9IENLUl9P SykKKysJaWYgKChydiA9IG0tPmZ1bmN0aW9uX2xpc3QtPkNfRmluYWxpemUoTlVMTCkpICE9IENL Ul9PSykKKyAJCWVycm9yKCJDX0ZpbmFsaXplIGZhaWxlZDogJWx1IiwgcnYpOworKwltLT52YWxp ZCA9IDA7CisrCW0tPmZ1bmN0aW9uX2xpc3QgPSBOVUxMOworKwlkbGNsb3NlKG0tPmhhbmRsZSk7 CisrfQorKworKy8qCisrICogcmVtb3ZlIGEgcmVmZXJlbmNlIHRvIHRoZSBwa2NzMTEgbW9kdWxl LgorKyAqIGNhbGxlZCB3aGVuIGEgcHJvdmlkZXIgaXMgdW5yZWdpc3RlcmVkLgorKyAqLworK3N0 YXRpYyB2b2lkCisrcGtjczExX21vZHVsZV91bnJlZihzdHJ1Y3QgcGtjczExX21vZHVsZSAqbSkK Kyt7CisrCWRlYnVnX2YoIiVwIHJlZmNvdW50ICVkIiwgbSwgbS0+cmVmY291bnQpOworKwlpZiAo LS1tLT5yZWZjb3VudCA8PSAwKSB7CisrCQlwa2NzMTFfbW9kdWxlX2ZpbmFsaXplKG0pOworKwkJ aWYgKG0tPnZhbGlkKQorKwkJCWVycm9yX2YoIiVwIHN0aWxsIHZhbGlkIiwgbSk7CisrCQlmcmVl KG0tPnNsb3RsaXN0KTsKKysJCWZyZWUobS0+c2xvdGluZm8pOworKwkJZnJlZShtLT5tb2R1bGVf cGF0aCk7CisrCQlmcmVlKG0pOworKwl9CisrfQorKworKy8qCisrICogZmluYWxpemUgYSBwcm92 aWRlciBzaGFyZWQgbGlicmFyeSwgaXQncyBubyBsb25nZXIgdXNhYmxlLgorKyAqIGhvd2V2ZXIs IHRoZXJlIG1pZ2h0IHN0aWxsIGJlIGtleXMgcmVmZXJlbmNpbmcgdGhpcyBwcm92aWRlciwKKysg KiBzbyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgbWVtb3J5IGlzIGhhbmRsZWQgYnkgcGtjczExX3By b3ZpZGVyX3VucmVmKCkuCisrICogdGhpcyBpcyBjYWxsZWQgd2hlbiBhIHByb3ZpZGVyIGdldHMg dW5yZWdpc3RlcmVkLgorKyAqLworK3N0YXRpYyB2b2lkCisrcGtjczExX3Byb3ZpZGVyX2ZpbmFs aXplKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnApCisreworKwlkZWJ1Z19mKCIlcCByZWZjb3Vu dCAlZCB2YWxpZCAlZCIsIHAsIHAtPnJlZmNvdW50LCBwLT52YWxpZCk7CisrCWlmICghcC0+dmFs aWQpCisrCQlyZXR1cm47CisrCXBrY3MxMV9tb2R1bGVfdW5yZWYocC0+bW9kdWxlKTsKKysJcC0+ bW9kdWxlID0gTlVMTDsKKyAJcC0+dmFsaWQgPSAwOworLQlwLT5mdW5jdGlvbl9saXN0ID0gTlVM TDsKKy0JZGxjbG9zZShwLT5oYW5kbGUpOworIH0KKyAKKyAvKgorQEAgLTEzNiwxNSArMTgxLDI3 IEBAIHBrY3MxMV9wcm92aWRlcl91bnJlZihzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwKQorIHsK KyAJZGVidWdfZigicHJvdmlkZXIgXCIlc1wiIHJlZmNvdW50ICVkIiwgcC0+bmFtZSwgcC0+cmVm Y291bnQpOworIAlpZiAoLS1wLT5yZWZjb3VudCA8PSAwKSB7CistCQlpZiAocC0+dmFsaWQpCist CQkJZXJyb3JfZigicHJvdmlkZXIgXCIlc1wiIHN0aWxsIHZhbGlkIiwgcC0+bmFtZSk7CisgCQlm cmVlKHAtPm5hbWUpOworLQkJZnJlZShwLT5zbG90bGlzdCk7CistCQlmcmVlKHAtPnNsb3RpbmZv KTsKKysJCWlmIChwLT5tb2R1bGUpCisrCQkJcGtjczExX21vZHVsZV91bnJlZihwLT5tb2R1bGUp OworIAkJZnJlZShwKTsKKyAJfQorIH0KKyAKKysvKiBsb29rdXAgcHJvdmlkZXIgYnkgbW9kdWxl IHBhdGggKi8KKytzdGF0aWMgc3RydWN0IHBrY3MxMV9tb2R1bGUgKgorK3BrY3MxMV9wcm92aWRl cl9sb29rdXBfbW9kdWxlKGNoYXIgKm1vZHVsZV9wYXRoKQorK3sKKysJc3RydWN0IHBrY3MxMV9w cm92aWRlciAqcDsKKysKKysJVEFJTFFfRk9SRUFDSChwLCAmcGtjczExX3Byb3ZpZGVycywgbmV4 dCkgeworKwkJZGVidWcoImNoZWNrICVwICVzICglcykiLCBwLCBwLT5uYW1lLCBwLT5tb2R1bGUt Pm1vZHVsZV9wYXRoKTsKKysJCWlmICghc3RyY21wKG1vZHVsZV9wYXRoLCBwLT5tb2R1bGUtPm1v ZHVsZV9wYXRoKSkKKysJCQlyZXR1cm4gKHAtPm1vZHVsZSk7CisrCX0KKysJcmV0dXJuIChOVUxM KTsKKyt9CisrCisgLyogbG9va3VwIHByb3ZpZGVyIGJ5IG5hbWUgKi8KKyBzdGF0aWMgc3RydWN0 IHBrY3MxMV9wcm92aWRlciAqCisgcGtjczExX3Byb3ZpZGVyX2xvb2t1cChjaGFyICpwcm92aWRl cl9pZCkKK0BAIC0xNTksMTkgKzIxNiw1NSBAQCBwa2NzMTFfcHJvdmlkZXJfbG9va3VwKGNoYXIg KnByb3ZpZGVyX2lkKQorIAlyZXR1cm4gKE5VTEwpOworIH0KKyAKKytpbnQgcGtjczExX2RlbF9w cm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKik7CisrCisgLyogdW5yZWdpc3RlciBw cm92aWRlciBieSBuYW1lICovCisgaW50CisgcGtjczExX2RlbF9wcm92aWRlcihjaGFyICpwcm92 aWRlcl9pZCkKKyt7CisrCWludCBydjsKKysJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKKysKKysJ ZGVidWdfZigiY2FsbGVkLCBwcm92aWRlcl9pZCA9ICVzIiwgcHJvdmlkZXJfaWQpOworKworKyAg ICAgIGlmIChwcm92aWRlcl9pZCA9PSBOVUxMKQorKyAgICAgICAgICByZXR1cm4gMDsKKysKKysJ dXJpID0gcGtjczExX3VyaV9pbml0KCk7CisrCWlmICh1cmkgPT0gTlVMTCkKKysJCWZhdGFsKCJG YWlsZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIpOworKworKwlpZiAoc3RybGVuKHByb3ZpZGVyX2lk KSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisrCSAgICBzdHJuY21wKHByb3ZpZGVy X2lkLCBQS0NTMTFfVVJJX1NDSEVNRSwgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkg eworKwkJaWYgKHBrY3MxMV91cmlfcGFyc2UocHJvdmlkZXJfaWQsIHVyaSkgIT0gMCkKKysJCQlm YXRhbCgiRmFpbGVkIHRvIHBhcnNlIFBLQ1MjMTEgVVJJIik7CisrCX0gZWxzZSB7CisrCQl1cmkt Pm1vZHVsZV9wYXRoID0gc3RyZHVwKHByb3ZpZGVyX2lkKTsKKysJfQorKworKwlydiA9IHBrY3Mx MV9kZWxfcHJvdmlkZXJfYnlfdXJpKHVyaSk7CisrCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwor KwlyZXR1cm4gcnY7CisrfQorKworKy8qIHVucmVnaXN0ZXIgcHJvdmlkZXIgYnkgUEtDUyMxMSBV UkkgKi8KKytpbnQKKytwa2NzMTFfZGVsX3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtjczExX3Vy aSAqdXJpKQorIHsKKyAJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcDsKKysJaW50IHJ2ID0gLTE7 CisrCWNoYXIgKnByb3ZpZGVyX3VyaSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisgCistCWlmICgo cCA9IHBrY3MxMV9wcm92aWRlcl9sb29rdXAocHJvdmlkZXJfaWQpKSAhPSBOVUxMKSB7CisrCWRl YnVnM19mKCJjYWxsZWQgd2l0aCBwcm92aWRlciAlcyIsIHByb3ZpZGVyX3VyaSk7CisrCisrCWlm ICgocCA9IHBrY3MxMV9wcm92aWRlcl9sb29rdXAocHJvdmlkZXJfdXJpKSkgIT0gTlVMTCkgewor IAkJVEFJTFFfUkVNT1ZFKCZwa2NzMTFfcHJvdmlkZXJzLCBwLCBuZXh0KTsKKyAJCXBrY3MxMV9w cm92aWRlcl9maW5hbGl6ZShwKTsKKyAJCXBrY3MxMV9wcm92aWRlcl91bnJlZihwKTsKKy0JCXJl dHVybiAoMCk7CisrCQlydiA9IDA7CisgCX0KKy0JcmV0dXJuICgtMSk7CisrCWZyZWUocHJvdmlk ZXJfdXJpKTsKKysJcmV0dXJuIHJ2OworIH0KKyAKKyAvKiByZWxlYXNlIGEgd3JhcHBlZCBvYmpl Y3QgKi8KK0BAIC0xODMsNiArMjc2LDcgQEAgcGtjczExX2sxMV9mcmVlKHN0cnVjdCBwa2NzMTFf a2V5ICprMTEpCisgCWlmIChrMTEtPnByb3ZpZGVyKQorIAkJcGtjczExX3Byb3ZpZGVyX3VucmVm KGsxMS0+cHJvdmlkZXIpOworIAlmcmVlKGsxMS0+a2V5aWQpOworKwlmcmVlKGsxMS0+bGFiZWwp OworIAlzc2hidWZfZnJlZShrMTEtPmtleWJsb2IpOworIAlmcmVlKGsxMSk7CisgfQorQEAgLTE5 OCw4ICsyOTIsOCBAQCBwa2NzMTFfZmluZChzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19V TE9ORyBzbG90aWR4LCBDS19BVFRSSUJVVEUgKmF0dHIsCisgCUNLX1JWCQkJcnY7CisgCWludAkJ CXJldCA9IC0xOworIAorLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsKKy0Jc2Vzc2lvbiA9IHAtPnNs b3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7 CisrCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CisgCWlm ICgocnYgPSBmLT5DX0ZpbmRPYmplY3RzSW5pdChzZXNzaW9uLCBhdHRyLCBuYXR0cikpICE9IENL Ul9PSykgeworIAkJZXJyb3IoIkNfRmluZE9iamVjdHNJbml0IGZhaWxlZCAobmF0dHIgJWx1KTog JWx1IiwgbmF0dHIsIHJ2KTsKKyAJCXJldHVybiAoLTEpOworQEAgLTIzNiwxNCArMzMwLDE0IEBA IHBrY3MxMV9sb2dpbl9zbG90KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnByb3ZpZGVyLCBzdHJ1 Y3QgcGtjczExX3Nsb3RpbmZvICpzaSwKKyAJaWYgKHNpLT50b2tlbi5mbGFncyAmIENLRl9QUk9U RUNURURfQVVUSEVOVElDQVRJT05fUEFUSCkKKyAJCXZlcmJvc2UoIkRlZmVycmluZyBQSU4gZW50 cnkgdG8gcmVhZGVyIGtleXBhZC4iKTsKKyAJZWxzZSB7CistCQlzbnByaW50Zihwcm9tcHQsIHNp emVvZihwcm9tcHQpLCAiRW50ZXIgUElOIGZvciAnJXMnOiAiLAorKwkJc25wcmludGYocHJvbXB0 LCBzaXplb2YocHJvbXB0KSwgIkVudGVyIFBJTiBmb3IgJyUuMzJzJzogIiwKKyAJCSAgICBzaS0+ dG9rZW4ubGFiZWwpOworLQkJaWYgKChwaW4gPSByZWFkX3Bhc3NwaHJhc2UocHJvbXB0LCBSUF9B TExPV19FT0YpKSA9PSBOVUxMKSB7CisrCQlpZiAoKHBpbiA9IHJlYWRfcGFzc3BocmFzZShwcm9t cHQsIFJQX0FMTE9XX0VPRnxSUF9BTExPV19TVERJTikpID09IE5VTEwpIHsKKyAJCQlkZWJ1Z19m KCJubyBwaW4gc3BlY2lmaWVkIik7CisgCQkJcmV0dXJuICgtMSk7CS8qIGJhaWwgb3V0ICovCisg CQl9CisgCX0KKy0JcnYgPSBwcm92aWRlci0+ZnVuY3Rpb25fbGlzdC0+Q19Mb2dpbihzaS0+c2Vz c2lvbiwgdHlwZSwgKHVfY2hhciAqKXBpbiwKKysJcnYgPSBwcm92aWRlci0+bW9kdWxlLT5mdW5j dGlvbl9saXN0LT5DX0xvZ2luKHNpLT5zZXNzaW9uLCB0eXBlLCAodV9jaGFyICopcGluLAorIAkg ICAgKHBpbiAhPSBOVUxMKSA/IHN0cmxlbihwaW4pIDogMCk7CisgCWlmIChwaW4gIT0gTlVMTCkK KyAJCWZyZWV6ZXJvKHBpbiwgc3RybGVuKHBpbikpOworQEAgLTI3MywxMyArMzY3LDE0IEBAIHBr Y3MxMV9sb2dpbl9zbG90KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnByb3ZpZGVyLCBzdHJ1Y3Qg cGtjczExX3Nsb3RpbmZvICpzaSwKKyBzdGF0aWMgaW50CisgcGtjczExX2xvZ2luKHN0cnVjdCBw a2NzMTFfa2V5ICprMTEsIENLX1VTRVJfVFlQRSB0eXBlKQorIHsKKy0JaWYgKGsxMSA9PSBOVUxM IHx8IGsxMS0+cHJvdmlkZXIgPT0gTlVMTCB8fCAhazExLT5wcm92aWRlci0+dmFsaWQpIHsKKysJ aWYgKGsxMSA9PSBOVUxMIHx8IGsxMS0+cHJvdmlkZXIgPT0gTlVMTCB8fCAhazExLT5wcm92aWRl ci0+dmFsaWQgfHwKKysJICAgIGsxMS0+cHJvdmlkZXItPm1vZHVsZSA9PSBOVUxMIHx8ICFrMTEt PnByb3ZpZGVyLT5tb2R1bGUtPnZhbGlkKSB7CisgCQllcnJvcigibm8gcGtjczExICh2YWxpZCkg cHJvdmlkZXIgZm91bmQiKTsKKyAJCXJldHVybiAoLTEpOworIAl9CisgCisgCXJldHVybiBwa2Nz MTFfbG9naW5fc2xvdChrMTEtPnByb3ZpZGVyLAorLQkgICAgJmsxMS0+cHJvdmlkZXItPnNsb3Rp bmZvW2sxMS0+c2xvdGlkeF0sIHR5cGUpOworKwkgICAgJmsxMS0+cHJvdmlkZXItPm1vZHVsZS0+ c2xvdGluZm9bazExLT5zbG90aWR4XSwgdHlwZSk7CisgfQorIAorIAorQEAgLTI5NSwxMyArMzkw LDE0IEBAIHBrY3MxMV9jaGVja19vYmpfYm9vbF9hdHRyaWIoc3RydWN0IHBrY3MxMV9rZXkgKmsx MSwgQ0tfT0JKRUNUX0hBTkRMRSBvYmosCisgCisgCSp2YWwgPSAwOworIAorLQlpZiAoIWsxMS0+ cHJvdmlkZXIgfHwgIWsxMS0+cHJvdmlkZXItPnZhbGlkKSB7CisrCWlmICghazExLT5wcm92aWRl ciB8fCAhazExLT5wcm92aWRlci0+dmFsaWQgfHwKKysJICAgICFrMTEtPnByb3ZpZGVyLT5tb2R1 bGUgfHwgIWsxMS0+cHJvdmlkZXItPm1vZHVsZS0+dmFsaWQpIHsKKyAJCWVycm9yKCJubyBwa2Nz MTEgKHZhbGlkKSBwcm92aWRlciBmb3VuZCIpOworIAkJcmV0dXJuICgtMSk7CisgCX0KKyAKKy0J ZiA9IGsxMS0+cHJvdmlkZXItPmZ1bmN0aW9uX2xpc3Q7CistCXNpID0gJmsxMS0+cHJvdmlkZXIt PnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07CisrCWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmZ1 bmN0aW9uX2xpc3Q7CisrCXNpID0gJmsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazEx LT5zbG90aWR4XTsKKyAKKyAJYXR0ci50eXBlID0gdHlwZTsKKyAJYXR0ci5wVmFsdWUgPSAmZmxh ZzsKK0BAIC0zMzIsMTMgKzQyOCwxNCBAQCBwa2NzMTFfZ2V0X2tleShzdHJ1Y3QgcGtjczExX2tl eSAqazExLCBDS19NRUNIQU5JU01fVFlQRSBtZWNoX3R5cGUpCisgCWludAkJCSBhbHdheXNfYXV0 aCA9IDA7CisgCWludAkJCSBkaWRfbG9naW4gPSAwOworIAorLQlpZiAoIWsxMS0+cHJvdmlkZXIg fHwgIWsxMS0+cHJvdmlkZXItPnZhbGlkKSB7CisrCWlmICghazExLT5wcm92aWRlciB8fCAhazEx LT5wcm92aWRlci0+dmFsaWQgfHwKKysJICAgICFrMTEtPnByb3ZpZGVyLT5tb2R1bGUgfHwgIWsx MS0+cHJvdmlkZXItPm1vZHVsZS0+dmFsaWQpIHsKKyAJCWVycm9yKCJubyBwa2NzMTEgKHZhbGlk KSBwcm92aWRlciBmb3VuZCIpOworIAkJcmV0dXJuICgtMSk7CisgCX0KKyAKKy0JZiA9IGsxMS0+ cHJvdmlkZXItPmZ1bmN0aW9uX2xpc3Q7CistCXNpID0gJmsxMS0+cHJvdmlkZXItPnNsb3RpbmZv W2sxMS0+c2xvdGlkeF07CisrCWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xp c3Q7CisrCXNpID0gJmsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4 XTsKKyAKKyAJaWYgKChzaS0+dG9rZW4uZmxhZ3MgJiBDS0ZfTE9HSU5fUkVRVUlSRUQpICYmICFz aS0+bG9nZ2VkX2luKSB7CisgCQlpZiAocGtjczExX2xvZ2luKGsxMSwgQ0tVX1VTRVIpIDwgMCkg eworQEAgLTQzNyw2ICs1MzQsMTIgQEAgcGtjczExX3JlY29yZF9rZXkoc3RydWN0IHBrY3MxMV9w cm92aWRlciAqcHJvdmlkZXIsIENLX1VMT05HIHNsb3RpZHgsCisgCQlrMTEtPmtleWlkID0geG1h bGxvYyhrMTEtPmtleWlkX2xlbik7CisgCQltZW1jcHkoazExLT5rZXlpZCwga2V5aWRfYXR0cmli LT5wVmFsdWUsIGsxMS0+a2V5aWRfbGVuKTsKKyAJfQorKwlpZiAoa2V5aWRfYXR0cmliLT51bFZh bHVlTGVuID4gMCApIHsKKysJCWsxMS0+bGFiZWwgPSB4bWFsbG9jKGtleWlkX2F0dHJpYi0+dWxW YWx1ZUxlbisxKTsKKysJCW1lbWNweShrMTEtPmxhYmVsLCBrZXlpZF9hdHRyaWItPnBWYWx1ZSwg a2V5aWRfYXR0cmliLT51bFZhbHVlTGVuKTsKKysJCWsxMS0+bGFiZWxba2V5aWRfYXR0cmliLT51 bFZhbHVlTGVuXSA9IDA7CisrCX0KKysKKyAJVEFJTFFfSU5TRVJUX1RBSUwoJnBrY3MxMV9rZXlz LCBrMTEsIG5leHQpOworIAorIAlyZXR1cm4gMDsKK0BAIC00NjQsNiArNTY3LDQyIEBAIHBrY3Mx MV9sb29rdXBfa2V5KHN0cnVjdCBzc2hrZXkgKmtleSkKKyAJcmV0dXJuIGZvdW5kOworIH0KKyAK KysvKgorKyAqIFRoaXMgY2FuJ3QgYmUgaW4gdGhlIHNzaC1wa2NzMTEtdXJpLCBiZWNhc2Ugd2Ug Y2FuIG5vdCBkZXBlbmQgb24KKysgKiBQS0NTIzExIHN0cnVjdHVyZXMgaW4gc3NoLWFnZW50ICh1 c2luZyBjbGllbnQtaGVscGVyIGNvbW11bmljYXRpb24pCisrICovCisraW50CisrcGtjczExX3Vy aV93cml0ZShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksIEZJTEUgKmYpCisreworKwljaGFyICpw ID0gTlVMTDsKKysJc3RydWN0IHBrY3MxMV91cmkgdXJpOworKwlzdHJ1Y3QgcGtjczExX2tleSAq azExID0gcGtjczExX2xvb2t1cF9rZXkoa2V5KTsKKysKKysJaWYgKGsxMSA9PSBOVUxMKSB7Cisr CQllcnJvcigiRmFpbGVkIHRvIGdldCBleF9kYXRhIGZvciBrZXkgdHlwZSAlZCIsIGtleS0+dHlw ZSk7CisrCQlyZXR1cm4gKC0xKTsKKysJfQorKworKwkvKiBvbWl0IHR5cGUgLS0gd2UgYXJlIGxv b2tpbmcgZm9yIHByaXZhdGUtcHVibGljIG9yIHByaXZhdGUtY2VydGlmaWNhdGUgcGFpcnMgKi8K KysJdXJpLmlkID0gazExLT5rZXlpZDsKKysJdXJpLmlkX2xlbiA9IGsxMS0+a2V5aWRfbGVuOwor Kwl1cmkudG9rZW4gPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlk eF0udG9rZW4ubGFiZWw7CisrCXVyaS5vYmplY3QgPSBrMTEtPmxhYmVsOworKwl1cmkubW9kdWxl X3BhdGggPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPm1vZHVsZV9wYXRoOworKwl1cmkubGliX21h bnVmID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5pbmZvLm1hbnVmYWN0dXJlcklEOworKwl1cmku bWFudWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF0udG9r ZW4ubWFudWZhY3R1cmVySUQ7CisrCXVyaS5zZXJpYWwgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUt PnNsb3RpbmZvW2sxMS0+c2xvdGlkeF0udG9rZW4uc2VyaWFsTnVtYmVyOworKworKwlwID0gcGtj czExX3VyaV9nZXQoJnVyaSk7CisrCS8qIGRvIG5vdCBjbGVhbnVwIC0tIHdlIGRvIG5vdCBhbGxv Y2F0ZSBoZXJlLCBvbmx5IHJlZmVyZW5jZSAqLworKwlpZiAocCA9PSBOVUxMKQorKwkJcmV0dXJu IC0xOworKworKwlmcHJpbnRmKGYsICIgJXMiLCBwKTsKKysJZnJlZShwKTsKKysJcmV0dXJuIDA7 CisrfQorKworICNpZmRlZiBXSVRIX09QRU5TU0wKKyAvKgorICAqIFNlZToKK0BAIC01NjgsOCAr NzA3LDggQEAgcGtjczExX3NpZ25fcnNhKHN0cnVjdCBzc2hrZXkgKmtleSwKKyAJCXJldHVybiBT U0hfRVJSX0FHRU5UX0ZBSUxVUkU7CisgCX0KKyAKKy0JZiA9IGsxMS0+cHJvdmlkZXItPmZ1bmN0 aW9uX2xpc3Q7CistCXNpID0gJmsxMS0+cHJvdmlkZXItPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07 CisrCWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisrCXNpID0gJmsx MS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKKyAKKyAJaWYgKChz aWdsZW4gPSBFVlBfUEtFWV9zaXplKGtleS0+cGtleSkpIDw9IDApCisgCQlyZXR1cm4gU1NIX0VS Ul9JTlZBTElEX0FSR1VNRU5UOworQEAgLTY1Nyw4ICs3OTYsOCBAQCBwa2NzMTFfc2lnbl9lY2Rz YShzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCWRlYnVnM19mKCJzaWduIHVzaW5nIHByb3ZpZGVyICVz IHNsb3RpZHggJWx1IiwKKyAJICAgIGsxMS0+cHJvdmlkZXItPm5hbWUsICh1X2xvbmcpazExLT5z bG90aWR4KTsKKyAKKy0JZiA9IGsxMS0+cHJvdmlkZXItPmZ1bmN0aW9uX2xpc3Q7CistCXNpID0g JmsxMS0+cHJvdmlkZXItPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07CisrCWYgPSBrMTEtPnByb3Zp ZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisrCXNpID0gJmsxMS0+cHJvdmlkZXItPm1vZHVs ZS0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKKyAKKyAJLyogUHJlcGFyZSBkaWdlc3QgdG8gYmUg c2lnbmVkICovCisgCWlmICgoaGFzaGFsZyA9IHNzaGtleV9lY19uaWRfdG9faGFzaF9hbGcoa2V5 LT5lY2RzYV9uaWQpKSA9PSAtMSkKK0BAIC03NDEsOCArODgwLDggQEAgcGtjczExX3NpZ25fZWQy NTUxOShzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCWRlYnVnM19mKCJzaWduIHVzaW5nIHByb3ZpZGVy ICVzIHNsb3RpZHggJWx1IiwKKyAJICAgIGsxMS0+cHJvdmlkZXItPm5hbWUsICh1X2xvbmcpazEx LT5zbG90aWR4KTsKKyAKKy0JZiA9IGsxMS0+cHJvdmlkZXItPmZ1bmN0aW9uX2xpc3Q7CistCXNp ID0gJmsxMS0+cHJvdmlkZXItPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07CisrCWYgPSBrMTEtPnBy b3ZpZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisrCXNpID0gJmsxMS0+cHJvdmlkZXItPm1v ZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKKyAKKyAJeGRhdGEgPSB4bWFsbG9jKGRhdGFs ZW4pOworIAltZW1jcHkoeGRhdGEsIGRhdGEsIGRhdGFsZW4pOworQEAgLTc3MCw3ICs5MDksOCBA QCBwa2NzMTFfc2lnbl9lZDI1NTE5KHN0cnVjdCBzc2hrZXkgKmtleSwKKyAJcmV0dXJuIHJldDsK KyB9CisgCistLyogcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcyAqLworKy8qIHJlbW92ZSB0cmFpbGlu ZyBzcGFjZXMuIE5vdGUsIHRoYXQgdGhpcyBkb2VzIE5PVCBndWFyYW50ZWUgdGhlIGJ1ZmZlcgor KyAqIHdpbGwgYmUgbnVsbCB0ZXJtaW5hdGVkIGlmIHRoZXJlIGFyZSBubyB0cmFpbGluZyBzcGFj ZXMhICovCisgc3RhdGljIGNoYXIgKgorIHJtc3BhY2UodV9jaGFyICpidWYsIHNpemVfdCBsZW4p CisgeworQEAgLTgwMiw4ICs5NDIsOCBAQCBwa2NzMTFfb3Blbl9zZXNzaW9uKHN0cnVjdCBwa2Nz MTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsIGNoYXIgKnBpbiwKKyAJQ0tfU0VTU0lP Tl9IQU5ETEUJc2Vzc2lvbjsKKyAJaW50CQkJbG9naW5fcmVxdWlyZWQsIHJldDsKKyAKKy0JZiA9 IHAtPmZ1bmN0aW9uX2xpc3Q7CistCXNpID0gJnAtPnNsb3RpbmZvW3Nsb3RpZHhdOworKwlmID0g cC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworKwlzaSA9ICZwLT5tb2R1bGUtPnNsb3RpbmZvW3Ns b3RpZHhdOworIAorIAlsb2dpbl9yZXF1aXJlZCA9IHNpLT50b2tlbi5mbGFncyAmIENLRl9MT0dJ Tl9SRVFVSVJFRDsKKyAKK0BAIC04MTMsOSArOTUzLDkgQEAgcGtjczExX29wZW5fc2Vzc2lvbihz dHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LCBjaGFyICpwaW4sCisg CQllcnJvcigicGluIHJlcXVpcmVkIik7CisgCQlyZXR1cm4gKC1TU0hfUEtDUzExX0VSUl9QSU5f UkVRVUlSRUQpOworIAl9CistCWlmICgocnYgPSBmLT5DX09wZW5TZXNzaW9uKHAtPnNsb3RsaXN0 W3Nsb3RpZHhdLCBDS0ZfUldfU0VTU0lPTnwKKysJaWYgKChydiA9IGYtPkNfT3BlblNlc3Npb24o cC0+bW9kdWxlLT5zbG90bGlzdFtzbG90aWR4XSwgQ0tGX1JXX1NFU1NJT058CisgCSAgICBDS0Zf U0VSSUFMX1NFU1NJT04sIE5VTEwsIE5VTEwsICZzZXNzaW9uKSkgIT0gQ0tSX09LKSB7CistCQll cnJvcigiQ19PcGVuU2Vzc2lvbiBmYWlsZWQ6ICVsdSIsIHJ2KTsKKysJCWVycm9yKCJDX09wZW5T ZXNzaW9uIGZhaWxlZCBmb3Igc2xvdCAlbHU6ICVsdSIsIHNsb3RpZHgsIHJ2KTsKKyAJCXJldHVy biAoLTEpOworIAl9CisgCWlmIChsb2dpbl9yZXF1aXJlZCAmJiBwaW4gIT0gTlVMTCAmJiBzdHJs ZW4ocGluKSAhPSAwKSB7CitAQCAtODUxLDcgKzk5MSw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc3Noa2V5 ICoKKyBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAs IENLX1VMT05HIHNsb3RpZHgsCisgICAgIENLX09CSkVDVF9IQU5ETEUgKm9iaikKKyB7CistCUNL X0FUVFJJQlVURQkJIGtleV9hdHRyWzNdOworKwlDS19BVFRSSUJVVEUJCSBrZXlfYXR0cls0XTsK KysJaW50CQkJIG5hdHRyID0gNDsKKyAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247CisgCUNL X0ZVTkNUSU9OX0xJU1QJKmYgPSBOVUxMOworIAlDS19SVgkJCSBydjsKK0BAIC04NjQsMTQgKzEw MDUsMTUgQEAgcGtjczExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVy ICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAorIAltZW1zZXQoJmtleV9hdHRyLCAwLCBzaXplb2Yo a2V5X2F0dHIpKTsKKyAJa2V5X2F0dHJbMF0udHlwZSA9IENLQV9JRDsKKy0Ja2V5X2F0dHJbMV0u dHlwZSA9IENLQV9FQ19QT0lOVDsKKy0Ja2V5X2F0dHJbMl0udHlwZSA9IENLQV9FQ19QQVJBTVM7 CisrCWtleV9hdHRyWzFdLnR5cGUgPSBDS0FfTEFCRUw7CisrCWtleV9hdHRyWzJdLnR5cGUgPSBD S0FfRUNfUE9JTlQ7CisrCWtleV9hdHRyWzNdLnR5cGUgPSBDS0FfRUNfUEFSQU1TOworIAorLQlz ZXNzaW9uID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKKy0JZiA9IHAtPmZ1bmN0aW9u X2xpc3Q7CisrCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247 CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisgCisgCS8qIGZpZ3VyZSBvdXQgc2l6 ZSBvZiB0aGUgYXR0cmlidXRlcyAqLworLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vz c2lvbiwgKm9iaiwga2V5X2F0dHIsIDMpOworKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUo c2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIG5hdHRyKTsKKyAJaWYgKHJ2ICE9IENLUl9PSykgewor IAkJZXJyb3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7CisgCQlyZXR1 cm4gKE5VTEwpOworQEAgLTg4MiwxOSArMTAyNCwxOSBAQCBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVi a2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCSAqIGVu c3VyZSB0aGF0IG5vbmUgb2YgdGhlIG90aGVycyBhcmUgemVybyBsZW5ndGguCisgCSAqIFhYWCBh c3N1bWVzIENLQV9JRCBpcyBhbHdheXMgZmlyc3QuCisgCSAqLworLQlpZiAoa2V5X2F0dHJbMV0u dWxWYWx1ZUxlbiA9PSAwIHx8CistCSAgICBrZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDApIHsK KysJaWYgKGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCB8fAorKwkgICAga2V5X2F0dHJbM10u dWxWYWx1ZUxlbiA9PSAwKSB7CisgCQllcnJvcigiaW52YWxpZCBhdHRyaWJ1dGUgbGVuZ3RoIik7 CisgCQlyZXR1cm4gKE5VTEwpOworIAl9CisgCisgCS8qIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGF0 dHJpYnV0ZXMgKi8KKy0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKysJZm9yIChpID0gMDsgaSA8 IG5hdHRyOyBpKyspCisgCQlpZiAoa2V5X2F0dHJbaV0udWxWYWx1ZUxlbiA+IDApCisgCQkJa2V5 X2F0dHJbaV0ucFZhbHVlID0geGNhbGxvYygxLCBrZXlfYXR0cltpXS51bFZhbHVlTGVuKTsKKyAK KyAJLyogcmV0cmlldmUgSUQsIHB1YmxpYyBwb2ludCBhbmQgY3VydmUgcGFyYW1ldGVycyBvZiBF QyBrZXkgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtl eV9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmos IGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1JfT0spIHsKKyAJCWVycm9yKCJDX0dl dEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOworIAkJZ290byBmYWlsOworQEAgLTkw Niw4ICsxMDQ4LDggQEAgcGtjczExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3By b3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkJZ290byBmYWlsOworIAl9CisgCistCWF0 dHJwID0ga2V5X2F0dHJbMl0ucFZhbHVlOworLQlncm91cCA9IGQyaV9FQ1BLUGFyYW1ldGVycyhO VUxMLCAmYXR0cnAsIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4pOworKwlhdHRycCA9IGtleV9hdHRy WzNdLnBWYWx1ZTsKKysJZ3JvdXAgPSBkMmlfRUNQS1BhcmFtZXRlcnMoTlVMTCwgJmF0dHJwLCBr ZXlfYXR0clszXS51bFZhbHVlTGVuKTsKKyAJaWYgKGdyb3VwID09IE5VTEwpIHsKKyAJCW9zc2xf ZXJyb3IoImQyaV9FQ1BLUGFyYW1ldGVycyBmYWlsZWQiKTsKKyAJCWdvdG8gZmFpbDsKK0BAIC05 MTgsMTMgKzEwNjAsMTMgQEAgcGtjczExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczEx X3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkJZ290byBmYWlsOworIAl9CisgCist CWlmIChrZXlfYXR0clsxXS51bFZhbHVlTGVuIDw9IDIpIHsKKysJaWYgKGtleV9hdHRyWzJdLnVs VmFsdWVMZW4gPD0gMikgeworIAkJZXJyb3IoIkNLQV9FQ19QT0lOVCB0b28gc21hbGwiKTsKKyAJ CWdvdG8gZmFpbDsKKyAJfQorIAorLQlhdHRycCA9IGtleV9hdHRyWzFdLnBWYWx1ZTsKKy0Jb2N0 ZXQgPSBkMmlfQVNOMV9PQ1RFVF9TVFJJTkcoTlVMTCwgJmF0dHJwLCBrZXlfYXR0clsxXS51bFZh bHVlTGVuKTsKKysJYXR0cnAgPSBrZXlfYXR0clsyXS5wVmFsdWU7CisrCW9jdGV0ID0gZDJpX0FT TjFfT0NURVRfU1RSSU5HKE5VTEwsICZhdHRycCwga2V5X2F0dHJbMl0udWxWYWx1ZUxlbik7Cisg CWlmIChvY3RldCA9PSBOVUxMKSB7CisgCQlvc3NsX2Vycm9yKCJkMmlfQVNOMV9PQ1RFVF9TVFJJ TkcgZmFpbGVkIik7CisgCQlnb3RvIGZhaWw7CitAQCAtOTg1LDcgKzExMjcsOCBAQCBzdGF0aWMg c3RydWN0IHNzaGtleSAqCisgcGtjczExX2ZldGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9w cm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2Jq KQorIHsKKy0JQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbM107CisrCUNLX0FUVFJJQlVURQkJIGtl eV9hdHRyWzRdOworKwlpbnQJCQkgbmF0dHIgPSA0OworIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vz c2lvbjsKKyAJQ0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2OworQEAg LTk5NiwxNCArMTEzOSwxNSBAQCBwa2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1Y3QgcGtjczEx X3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAorIAltZW1zZXQoJmtleV9hdHRyLCAw LCBzaXplb2Yoa2V5X2F0dHIpKTsKKyAJa2V5X2F0dHJbMF0udHlwZSA9IENLQV9JRDsKKy0Ja2V5 X2F0dHJbMV0udHlwZSA9IENLQV9NT0RVTFVTOworLQlrZXlfYXR0clsyXS50eXBlID0gQ0tBX1BV QkxJQ19FWFBPTkVOVDsKKysJa2V5X2F0dHJbMV0udHlwZSA9IENLQV9MQUJFTDsKKysJa2V5X2F0 dHJbMl0udHlwZSA9IENLQV9NT0RVTFVTOworKwlrZXlfYXR0clszXS50eXBlID0gQ0tBX1BVQkxJ Q19FWFBPTkVOVDsKKyAKKy0Jc2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247 CistCWYgPSBwLT5mdW5jdGlvbl9saXN0OworKwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5m b1tzbG90aWR4XS5zZXNzaW9uOworKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworIAor IAkvKiBmaWd1cmUgb3V0IHNpemUgb2YgdGhlIGF0dHJpYnV0ZXMgKi8KKy0JcnYgPSBmLT5DX0dl dEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsKKysJcnYgPSBmLT5D X0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBuYXR0cik7CisgCWlm IChydiAhPSBDS1JfT0spIHsKKyAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDog JWx1IiwgcnYpOworIAkJcmV0dXJuIChOVUxMKTsKK0BAIC0xMDE0LDE5ICsxMTU4LDE5IEBAIHBr Y3MxMV9mZXRjaF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05H IHNsb3RpZHgsCisgCSAqIGVuc3VyZSB0aGF0IG5vbmUgb2YgdGhlIG90aGVycyBhcmUgemVybyBs ZW5ndGguCisgCSAqIFhYWCBhc3N1bWVzIENLQV9JRCBpcyBhbHdheXMgZmlyc3QuCisgCSAqLwor LQlpZiAoa2V5X2F0dHJbMV0udWxWYWx1ZUxlbiA9PSAwIHx8CistCSAgICBrZXlfYXR0clsyXS51 bFZhbHVlTGVuID09IDApIHsKKysJaWYgKGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCB8fAor KwkgICAga2V5X2F0dHJbM10udWxWYWx1ZUxlbiA9PSAwKSB7CisgCQllcnJvcigiaW52YWxpZCBh dHRyaWJ1dGUgbGVuZ3RoIik7CisgCQlyZXR1cm4gKE5VTEwpOworIAl9CisgCisgCS8qIGFsbG9j YXRlIGJ1ZmZlcnMgZm9yIGF0dHJpYnV0ZXMgKi8KKy0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykK KysJZm9yIChpID0gMDsgaSA8IG5hdHRyOyBpKyspCisgCQlpZiAoa2V5X2F0dHJbaV0udWxWYWx1 ZUxlbiA+IDApCisgCQkJa2V5X2F0dHJbaV0ucFZhbHVlID0geGNhbGxvYygxLCBrZXlfYXR0cltp XS51bFZhbHVlTGVuKTsKKyAKKyAJLyogcmV0cmlldmUgSUQsIG1vZHVsdXMgYW5kIHB1YmxpYyBl eHBvbmVudCBvZiBSU0Ega2V5ICovCistCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNz aW9uLCAqb2JqLCBrZXlfYXR0ciwgMyk7CisrCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShz ZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7Cisg CQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCWdvdG8g ZmFpbDsKK0BAIC0xMDM4LDggKzExODIsOCBAQCBwa2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1 Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkJZ290byBmYWlsOwor IAl9CisgCistCXJzYV9uID0gQk5fYmluMmJuKGtleV9hdHRyWzFdLnBWYWx1ZSwga2V5X2F0dHJb MV0udWxWYWx1ZUxlbiwgTlVMTCk7CistCXJzYV9lID0gQk5fYmluMmJuKGtleV9hdHRyWzJdLnBW YWx1ZSwga2V5X2F0dHJbMl0udWxWYWx1ZUxlbiwgTlVMTCk7CisrCXJzYV9uID0gQk5fYmluMmJu KGtleV9hdHRyWzJdLnBWYWx1ZSwga2V5X2F0dHJbMl0udWxWYWx1ZUxlbiwgTlVMTCk7CisrCXJz YV9lID0gQk5fYmluMmJuKGtleV9hdHRyWzNdLnBWYWx1ZSwga2V5X2F0dHJbM10udWxWYWx1ZUxl biwgTlVMTCk7CisgCWlmIChyc2FfbiA9PSBOVUxMIHx8IHJzYV9lID09IE5VTEwpIHsKKyAJCWVy cm9yKCJCTl9iaW4yYm4gZmFpbGVkIik7CisgCQlnb3RvIGZhaWw7CitAQCAtMTA3MSw3ICsxMjE1 LDcgQEAgcGtjczExX2ZldGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwg Q0tfVUxPTkcgc2xvdGlkeCwKKyAJLyogc3VjY2VzcyAqLworIAlzdWNjZXNzID0gMDsKKyBmYWls OgorLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkr KykKKyAJCWZyZWUoa2V5X2F0dHJbaV0ucFZhbHVlKTsKKyAJUlNBX2ZyZWUocnNhKTsKKyAJaWYg KHN1Y2Nlc3MgIT0gMCkgeworQEAgLTEwODYsNyArMTIzMCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc3No a2V5ICoKKyBwa2NzMTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRl ciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2JqKQorIHsK Ky0JQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbM107CisrCUNLX0FUVFJJQlVURQkJIGtleV9hdHRy WzRdOworKwlpbnQJCQkgbmF0dHIgPSA0OworIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsK KyAJQ0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2OworQEAgLTExMDYs MTQgKzEyNTEsMTUgQEAgcGtjczExX2ZldGNoX2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCisgCW1lbXNldCgma2V5X2F0dHIsIDAs IHNpemVvZihrZXlfYXR0cikpOworIAlrZXlfYXR0clswXS50eXBlID0gQ0tBX0lEOworLQlrZXlf YXR0clsxXS50eXBlID0gQ0tBX0VDX1BPSU5UOyAvKiBYWFggb3IgQ0tBX1ZBTFVFID8gKi8KKy0J a2V5X2F0dHJbMl0udHlwZSA9IENLQV9FQ19QQVJBTVM7CisrCWtleV9hdHRyWzFdLnR5cGUgPSBD S0FfTEFCRUw7CisrCWtleV9hdHRyWzJdLnR5cGUgPSBDS0FfRUNfUE9JTlQ7IC8qIFhYWCBvciBD S0FfVkFMVUUgPyAqLworKwlrZXlfYXR0clszXS50eXBlID0gQ0tBX0VDX1BBUkFNUzsKKyAKKy0J c2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CistCWYgPSBwLT5mdW5jdGlv bl9saXN0OworKwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9u OworKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworIAorIAkvKiBmaWd1cmUgb3V0IHNp emUgb2YgdGhlIGF0dHJpYnV0ZXMgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNl c3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVl KHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1JfT0spIHsK KyAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOworIAkJcmV0 dXJuIChOVUxMKTsKK0BAIC0xMTI0LDI4ICsxMjcwLDI4IEBAIHBrY3MxMV9mZXRjaF9lZDI1NTE5 X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkg KiBlbnN1cmUgdGhhdCBub25lIG9mIHRoZSBvdGhlcnMgYXJlIHplcm8gbGVuZ3RoLgorIAkgKiBY WFggYXNzdW1lcyBDS0FfSUQgaXMgYWx3YXlzIGZpcnN0LgorIAkgKi8KKy0JaWYgKGtleV9hdHRy WzFdLnVsVmFsdWVMZW4gPT0gMCB8fAorLQkgICAga2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAw KSB7CisrCWlmIChrZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDAgfHwKKysJICAgIGtleV9hdHRy WzNdLnVsVmFsdWVMZW4gPT0gMCkgeworIAkJZXJyb3IoImludmFsaWQgYXR0cmlidXRlIGxlbmd0 aCIpOworIAkJcmV0dXJuIChOVUxMKTsKKyAJfQorIAorIAkvKiBhbGxvY2F0ZSBidWZmZXJzIGZv ciBhdHRyaWJ1dGVzICovCistCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKysJZm9yIChpID0g MDsgaSA8IG5hdHRyOyBpKyspIHsKKyAJCWlmIChrZXlfYXR0cltpXS51bFZhbHVlTGVuID4gMCkK KyAJCQlrZXlfYXR0cltpXS5wVmFsdWUgPSB4Y2FsbG9jKDEsIGtleV9hdHRyW2ldLnVsVmFsdWVM ZW4pOworIAl9CisgCisgCS8qIHJldHJpZXZlIElELCBwdWJsaWMgcG9pbnQgYW5kIGN1cnZlIHBh cmFtZXRlcnMgb2YgRUMga2V5ICovCistCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNz aW9uLCAqb2JqLCBrZXlfYXR0ciwgMyk7CisrCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShz ZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7Cisg CQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCWdvdG8g ZmFpbDsKKyAJfQorIAorIAkvKiBFeHBlY3Qgb25lIG9mIHRoZSBzdXBwb3J0ZWQgaWRlbnRpZmll cnMgaW4gQ0tBX0VDX1BBUkFNUyAqLworLQlkID0gKHVfY2hhciAqKWtleV9hdHRyWzJdLnBWYWx1 ZTsKKy0JbGVuID0ga2V5X2F0dHJbMl0udWxWYWx1ZUxlbjsKKysJZCA9ICh1X2NoYXIgKilrZXlf YXR0clszXS5wVmFsdWU7CisrCWxlbiA9IGtleV9hdHRyWzNdLnVsVmFsdWVMZW47CisgCWlmICgo bGVuICE9IHNpemVvZihpZDEpIHx8IG1lbWNtcChkLCBpZDEsIHNpemVvZihpZDEpKSAhPSAwKSAm JgorIAkgICAgKGxlbiAhPSBzaXplb2YoaWQyKSB8fCBtZW1jbXAoZCwgaWQyLCBzaXplb2YoaWQy KSkgIT0gMCkpIHsKKyAJCWhleCA9IHRvaGV4KGQsIGxlbik7CitAQCAtMTE1NywxNiArMTMwMywx NiBAQCBwa2NzMTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAq cCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAJICogRXhwZWN0IGVpdGhlciBhIHJhdyAzMiBieXRlIHB1 YmtleSBvciBhbiBPQ1RFVCBTVFJJTkcgd2l0aAorIAkgKiBhIDMyIGJ5dGUgcHVia2V5IGluIENL QV9WQUxVRQorIAkgKi8KKy0JZCA9ICh1X2NoYXIgKilrZXlfYXR0clsxXS5wVmFsdWU7CistCWxl biA9IGtleV9hdHRyWzFdLnVsVmFsdWVMZW47CisrCWQgPSAodV9jaGFyICopa2V5X2F0dHJbMl0u cFZhbHVlOworKwlsZW4gPSBrZXlfYXR0clsyXS51bFZhbHVlTGVuOworIAlpZiAobGVuID09IEVE MjU1MTlfUEtfU1ogKyAyICYmIGRbMF0gPT0gMHgwNCAmJiBkWzFdID09IEVEMjU1MTlfUEtfU1op IHsKKyAJCWQgKz0gMjsKKyAJCWxlbiAtPSAyOworIAl9CisgCWlmIChsZW4gIT0gRUQyNTUxOV9Q S19TWikgeworLQkJaGV4ID0gdG9oZXgoa2V5X2F0dHJbMV0ucFZhbHVlLCBrZXlfYXR0clsxXS51 bFZhbHVlTGVuKTsKKysJCWhleCA9IHRvaGV4KGtleV9hdHRyWzJdLnBWYWx1ZSwga2V5X2F0dHJb Ml0udWxWYWx1ZUxlbik7CisgCQlsb2dpdF9mKCJDS0FfRUNfUE9JTlQgaW52YWxpZCBvY3RldCBz dHI6ICVzIChsZW4gJWx1KSIsCistCQkgICAgaGV4LCAodV9sb25nKWtleV9hdHRyWzFdLnVsVmFs dWVMZW4pOworKwkJICAgIGhleCwgKHVfbG9uZylrZXlfYXR0clsyXS51bFZhbHVlTGVuKTsKKyAJ CWdvdG8gZmFpbDsKKyAJfQorIAorQEAgLTExODYsNyArMTMzMiw3IEBAIHBrY3MxMV9mZXRjaF9l ZDI1NTE5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4 LAorIAkJa2V5ID0gTlVMTDsKKyAJfQorIAlmcmVlKGhleCk7CistCWZvciAoaSA9IDA7IGkgPCAz OyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQorIAkJZnJlZShrZXlfYXR0cltp XS5wVmFsdWUpOworIAlyZXR1cm4ga2V5OworIH0KK0BAIC0xMTk2LDcgKzEzNDIsOCBAQCBzdGF0 aWMgaW50CisgcGtjczExX2ZldGNoX3g1MDlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnAsIENLX1VMT05HIHNsb3RpZHgsCisgICAgIENLX09CSkVDVF9IQU5ETEUgKm9iaiwgc3RydWN0 IHNzaGtleSAqKmtleXAsIGNoYXIgKipsYWJlbHApCisgeworLQlDS19BVFRSSUJVVEUJCSBjZXJ0 X2F0dHJbM107CisrCUNLX0FUVFJJQlVURQkJIGNlcnRfYXR0cls0XTsKKysJaW50CQkJIG5hdHRy ID0gNDsKKyAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247CisgCUNLX0ZVTkNUSU9OX0xJU1QJ KmYgPSBOVUxMOworIAlDS19SVgkJCSBydjsKK0BAIC0xMjE4LDE0ICsxMzY1LDE1IEBAIHBrY3Mx MV9mZXRjaF94NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBz bG90aWR4LAorIAorIAltZW1zZXQoJmNlcnRfYXR0ciwgMCwgc2l6ZW9mKGNlcnRfYXR0cikpOwor IAljZXJ0X2F0dHJbMF0udHlwZSA9IENLQV9JRDsKKy0JY2VydF9hdHRyWzFdLnR5cGUgPSBDS0Ff U1VCSkVDVDsKKy0JY2VydF9hdHRyWzJdLnR5cGUgPSBDS0FfVkFMVUU7CisrCWNlcnRfYXR0clsx XS50eXBlID0gQ0tBX0xBQkVMOworKwljZXJ0X2F0dHJbMl0udHlwZSA9IENLQV9TVUJKRUNUOwor KwljZXJ0X2F0dHJbM10udHlwZSA9IENLQV9WQUxVRTsKKyAKKy0Jc2Vzc2lvbiA9IHAtPnNsb3Rp bmZvW3Nsb3RpZHhdLnNlc3Npb247CistCWYgPSBwLT5mdW5jdGlvbl9saXN0OworKwlzZXNzaW9u ID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOworKwlmID0gcC0+bW9kdWxl LT5mdW5jdGlvbl9saXN0OworIAorIAkvKiBmaWd1cmUgb3V0IHNpemUgb2YgdGhlIGF0dHJpYnV0 ZXMgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRf YXR0ciwgMyk7CisrCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBj ZXJ0X2F0dHIsIG5hdHRyKTsKKyAJaWYgKHJ2ICE9IENLUl9PSykgeworIAkJZXJyb3IoIkNfR2V0 QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7CisgCQlyZXR1cm4gLTE7CitAQCAtMTIz NywxOCArMTM4NSwxOSBAQCBwa2NzMTFfZmV0Y2hfeDUwOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9w cm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAJICogWFhYIGFzc3VtZXMgQ0tBX0lEIGlz IGFsd2F5cyBmaXJzdC4KKyAJICovCisgCWlmIChjZXJ0X2F0dHJbMV0udWxWYWx1ZUxlbiA9PSAw IHx8CistCSAgICBjZXJ0X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwKSB7CisrCSAgICBjZXJ0X2F0 dHJbMl0udWxWYWx1ZUxlbiA9PSAwIHx8CisrCSAgICBjZXJ0X2F0dHJbM10udWxWYWx1ZUxlbiA9 PSAwKSB7CisgCQllcnJvcigiaW52YWxpZCBhdHRyaWJ1dGUgbGVuZ3RoIik7CisgCQlyZXR1cm4g LTE7CisgCX0KKyAKKyAJLyogYWxsb2NhdGUgYnVmZmVycyBmb3IgYXR0cmlidXRlcyAqLworLQlm b3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykKKyAJ CWlmIChjZXJ0X2F0dHJbaV0udWxWYWx1ZUxlbiA+IDApCisgCQkJY2VydF9hdHRyW2ldLnBWYWx1 ZSA9IHhjYWxsb2MoMSwgY2VydF9hdHRyW2ldLnVsVmFsdWVMZW4pOworIAorIAkvKiByZXRyaWV2 ZSBJRCwgc3ViamVjdCBhbmQgdmFsdWUgb2YgY2VydGlmaWNhdGUgKi8KKy0JcnYgPSBmLT5DX0dl dEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRfYXR0ciwgMyk7CisrCXJ2ID0gZi0+ Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBjZXJ0X2F0dHIsIG5hdHRyKTsKKyAJ aWYgKHJ2ICE9IENLUl9PSykgeworIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVk OiAlbHUiLCBydik7CisgCQlnb3RvIG91dDsKK0BAIC0xMjYyLDggKzE0MTEsOCBAQCBwa2NzMTFf ZmV0Y2hfeDUwOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xv dGlkeCwKKyAJCXN1YmplY3QgPSB4c3RyZHVwKCJpbnZhbGlkIHN1YmplY3QiKTsKKyAJWDUwOV9O QU1FX2ZyZWUoeDUwOV9uYW1lKTsKKyAKKy0JY3AgPSBjZXJ0X2F0dHJbMl0ucFZhbHVlOworLQlp ZiAoKHg1MDkgPSBkMmlfWDUwOShOVUxMLCAmY3AsIGNlcnRfYXR0clsyXS51bFZhbHVlTGVuKSkg PT0gTlVMTCkgeworKwljcCA9IGNlcnRfYXR0clszXS5wVmFsdWU7CisrCWlmICgoeDUwOSA9IGQy aV9YNTA5KE5VTEwsICZjcCwgY2VydF9hdHRyWzNdLnVsVmFsdWVMZW4pKSA9PSBOVUxMKSB7Cisg CQllcnJvcigiZDJpX3g1MDkgZmFpbGVkIik7CisgCQlnb3RvIG91dDsKKyAJfQorQEAgLTEzNzEs NyArMTUyMCw3IEBAIHBrY3MxMV9mZXRjaF94NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkJZ290byBvdXQ7CisgCX0KKyAgb3V0OgorLQlm b3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykKKyAJ CWZyZWUoY2VydF9hdHRyW2ldLnBWYWx1ZSk7CisgCVg1MDlfZnJlZSh4NTA5KTsKKyAJUlNBX2Zy ZWUocnNhKTsKK0BAIC0xNDEyLDExICsxNTYxLDEyIEBAIG5vdGVfa2V5KHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsIGNvbnN0IGNoYXIgKmNvbnRleHQsCisgICov Cisgc3RhdGljIGludAorIHBrY3MxMV9mZXRjaF9jZXJ0cyhzdHJ1Y3QgcGtjczExX3Byb3ZpZGVy ICpwLCBDS19VTE9ORyBzbG90aWR4LAorLSAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLCBjaGFy ICoqKmxhYmVsc3AsIGludCAqbmtleXMpCisrICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNo YXIgKioqbGFiZWxzcCwgaW50ICpua2V5cywgc3RydWN0IHBrY3MxMV91cmkgKnVyaSkKKyB7Cisg CXN0cnVjdCBzc2hrZXkJCSprZXkgPSBOVUxMOworIAlDS19PQkpFQ1RfQ0xBU1MJCSBrZXlfY2xh c3M7CistCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzFdOworKwlDS19BVFRSSUJVVEUJCSBrZXlf YXR0clszXTsKKysJaW50CQkJIG5hdHRyID0gMTsKKyAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Np b247CisgCUNLX0ZVTkNUSU9OX0xJU1QJKmYgPSBOVUxMOworIAlDS19SVgkJCSBydjsKK0BAIC0x NDMzLDEwICsxNTgzLDIzIEBAIHBrY3MxMV9mZXRjaF9jZXJ0cyhzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAlrZXlfYXR0clswXS5wVmFsdWUgPSAma2V5X2Ns YXNzOworIAlrZXlfYXR0clswXS51bFZhbHVlTGVuID0gc2l6ZW9mKGtleV9jbGFzcyk7CisgCist CXNlc3Npb24gPSBwLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOworLQlmID0gcC0+ZnVuY3Rp b25fbGlzdDsKKysJaWYgKHVyaS0+aWQgIT0gTlVMTCkgeworKwkJa2V5X2F0dHJbbmF0dHJdLnR5 cGUgPSBDS0FfSUQ7CisrCQlrZXlfYXR0cltuYXR0cl0ucFZhbHVlID0gdXJpLT5pZDsKKysJCWtl eV9hdHRyW25hdHRyXS51bFZhbHVlTGVuID0gdXJpLT5pZF9sZW47CisrCQluYXR0cisrOworKwl9 CisrCWlmICh1cmktPm9iamVjdCAhPSBOVUxMKSB7CisrCQlrZXlfYXR0cltuYXR0cl0udHlwZSA9 IENLQV9MQUJFTDsKKysJCWtleV9hdHRyW25hdHRyXS5wVmFsdWUgPSB1cmktPm9iamVjdDsKKysJ CWtleV9hdHRyW25hdHRyXS51bFZhbHVlTGVuID0gc3RybGVuKHVyaS0+b2JqZWN0KTsKKysJCW5h dHRyKys7CisrCX0KKysKKysJc2Vzc2lvbiA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0u c2Vzc2lvbjsKKysJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKKyAKKy0JcnYgPSBmLT5D X0ZpbmRPYmplY3RzSW5pdChzZXNzaW9uLCBrZXlfYXR0ciwgMSk7CisrCXJ2ID0gZi0+Q19GaW5k T2JqZWN0c0luaXQoc2Vzc2lvbiwga2V5X2F0dHIsIG5hdHRyKTsKKyAJaWYgKHJ2ICE9IENLUl9P SykgeworIAkJZXJyb3IoIkNfRmluZE9iamVjdHNJbml0IGZhaWxlZDogJWx1IiwgcnYpOworIAkJ Z290byBmYWlsOworQEAgLTE1MDksNiArMTY3MiwxMyBAQCBmYWlsOgorIAorIAlyZXR1cm4gKHJl dCk7CisgfQorKyNlbHNlCisrc3RhdGljIGludAorK3BrY3MxMV9mZXRjaF9jZXJ0cyhzdHJ1Y3Qg cGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorKyAgICBzdHJ1Y3Qgc3Noa2V5 ICoqKmtleXNwLCBjaGFyICoqKmxhYmVsc3AsIGludCAqbmtleXMsIHN0cnVjdCBwa2NzMTFfdXJp ICp1cmkpCisreworKwlyZXR1cm4gMDsKKyt9CisgI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwor IAorIC8qCitAQCAtMTUxOCwxMSArMTY4OCwxMiBAQCBmYWlsOgorICAqLworIHN0YXRpYyBpbnQK KyBwa2NzMTFfZmV0Y2hfa2V5cyhzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBz bG90aWR4LAorLSAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLCBjaGFyICoqKmxhYmVsc3AsIGlu dCAqbmtleXMpCisrICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFiZWxzcCwg aW50ICpua2V5cywgc3RydWN0IHBrY3MxMV91cmkgKnVyaSkKKyB7CisgCXN0cnVjdCBzc2hrZXkJ CSprZXkgPSBOVUxMOworIAlDS19PQkpFQ1RfQ0xBU1MJCSBrZXlfY2xhc3M7CistCUNLX0FUVFJJ QlVURQkJIGtleV9hdHRyWzJdOworKwlDS19BVFRSSUJVVEUJCSBrZXlfYXR0clszXTsKKysJaW50 CQkJIG5hdHRyID0gMTsKKyAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247CisgCUNLX0ZVTkNU SU9OX0xJU1QJKmYgPSBOVUxMOworIAlDS19SVgkJCSBydjsKK0BAIC0xNTM4LDEwICsxNzA5LDIz IEBAIHBrY3MxMV9mZXRjaF9rZXlzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05H IHNsb3RpZHgsCisgCWtleV9hdHRyWzBdLnBWYWx1ZSA9ICZrZXlfY2xhc3M7CisgCWtleV9hdHRy WzBdLnVsVmFsdWVMZW4gPSBzaXplb2Yoa2V5X2NsYXNzKTsKKyAKKy0Jc2Vzc2lvbiA9IHAtPnNs b3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CistCWYgPSBwLT5mdW5jdGlvbl9saXN0OworKwlpZiAo dXJpLT5pZCAhPSBOVUxMKSB7CisrCQlrZXlfYXR0cltuYXR0cl0udHlwZSA9IENLQV9JRDsKKysJ CWtleV9hdHRyW25hdHRyXS5wVmFsdWUgPSB1cmktPmlkOworKwkJa2V5X2F0dHJbbmF0dHJdLnVs VmFsdWVMZW4gPSB1cmktPmlkX2xlbjsKKysJCW5hdHRyKys7CisrCX0KKysJaWYgKHVyaS0+b2Jq ZWN0ICE9IE5VTEwpIHsKKysJCWtleV9hdHRyW25hdHRyXS50eXBlID0gQ0tBX0xBQkVMOworKwkJ a2V5X2F0dHJbbmF0dHJdLnBWYWx1ZSA9IHVyaS0+b2JqZWN0OworKwkJa2V5X2F0dHJbbmF0dHJd LnVsVmFsdWVMZW4gPSBzdHJsZW4odXJpLT5vYmplY3QpOworKwkJbmF0dHIrKzsKKysJfQorKwor KwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOworKwlmID0g cC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworIAorLQlydiA9IGYtPkNfRmluZE9iamVjdHNJbml0 KHNlc3Npb24sIGtleV9hdHRyLCAxKTsKKysJcnYgPSBmLT5DX0ZpbmRPYmplY3RzSW5pdChzZXNz aW9uLCBrZXlfYXR0ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7CisgCQllcnJvcigi Q19GaW5kT2JqZWN0c0luaXQgZmFpbGVkOiAlbHUiLCBydik7CisgCQlnb3RvIGZhaWw7CitAQCAt MTgyNywxNiArMjAxMSwxMCBAQCBwa2NzMTFfZWNkc2FfZ2VuZXJhdGVfcHJpdmF0ZV9rZXkoc3Ry dWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyB9CisgI2VuZGlmIC8q IFdJVEhfUEtDUzExX0tFWUdFTiAqLworIAorLS8qCistICogcmVnaXN0ZXIgYSBuZXcgcHJvdmlk ZXIsIGZhaWxzIGlmIHByb3ZpZGVyIGFscmVhZHkgZXhpc3RzLiBpZgorLSAqIGtleXAgaXMgcHJv dmlkZWQsIGZldGNoIGtleXMuCistICovCisgc3RhdGljIGludAorLXBrY3MxMV9yZWdpc3Rlcl9w cm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLAorLSAgICBzdHJ1Y3Qgc3Noa2V5 ICoqKmtleXAsIGNoYXIgKioqbGFiZWxzcCwKKy0gICAgc3RydWN0IHBrY3MxMV9wcm92aWRlciAq KnByb3ZpZGVycCwgQ0tfVUxPTkcgdXNlcikKKytwa2NzMTFfaW5pdGlhbGl6ZV9wcm92aWRlcihz dHJ1Y3QgcGtjczExX3VyaSAqdXJpLCBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoqcHJvdmlkZXJw KQorIHsKKy0JaW50IG5rZXlzLCBuZWVkX2ZpbmFsaXplID0gMDsKKysJaW50IG5lZWRfZmluYWxp emUgPSAwOworIAlpbnQgcmV0ID0gLTE7CisgCXN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAgPSBO VUxMOworIAl2b2lkICpoYW5kbGUgPSBOVUxMOworQEAgLTE4NDUsMTI4ICsyMDIzLDEyNiBAQCBw a2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXIoY2hhciAqcHJvdmlkZXJfaWQsIGNoYXIgKnBpbiwKKyAJ Q0tfRlVOQ1RJT05fTElTVCAqZiA9IE5VTEw7CisgCUNLX1RPS0VOX0lORk8gKnRva2VuOworIAlD S19VTE9ORyBpOworKwljaGFyICpwcm92aWRlcl9tb2R1bGUgPSBOVUxMOworKwlzdHJ1Y3QgcGtj czExX21vZHVsZSAqbSA9IE5VTEw7CisrCisrCS8qIGlmIG5vIHByb3ZpZGVyIHNwZWNpZmllZCwg ZmFsbGJhY2sgdG8gcDExLWtpdCAqLworKwlpZiAodXJpLT5tb2R1bGVfcGF0aCA9PSBOVUxMKSB7 CisrI2lmZGVmIFBLQ1MxMV9ERUZBVUxUX1BST1ZJREVSCisrCQlwcm92aWRlcl9tb2R1bGUgPSBz dHJkdXAoUEtDUzExX0RFRkFVTFRfUFJPVklERVIpOworKyNlbHNlCisrCQllcnJvcl9mKCJObyBt b2R1bGUgcGF0aCBwcm92aWRlZCIpOworKyAJCWdvdG8gZmFpbDsKKysjZW5kaWYKKysJfSBlbHNl IHsKKysJCXByb3ZpZGVyX21vZHVsZSA9IHN0cmR1cCh1cmktPm1vZHVsZV9wYXRoKTsKKysJfQor KwlwID0geGNhbGxvYygxLCBzaXplb2YoKnApKTsKKysJcC0+bmFtZSA9IHBrY3MxMV91cmlfZ2V0 KHVyaSk7CisgCistCWlmIChwcm92aWRlcnAgPT0gTlVMTCkKKy0JCWdvdG8gZmFpbDsKKy0JKnBy b3ZpZGVycCA9IE5VTEw7CistCistCWlmIChrZXlwICE9IE5VTEwpCistCQkqa2V5cCA9IE5VTEw7 CistCWlmIChsYWJlbHNwICE9IE5VTEwpCistCQkqbGFiZWxzcCA9IE5VTEw7CistCistCWlmIChw a2NzMTFfcHJvdmlkZXJfbG9va3VwKHByb3ZpZGVyX2lkKSAhPSBOVUxMKSB7CistCQlkZWJ1Z19m KCJwcm92aWRlciBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICVzIiwgcHJvdmlkZXJfaWQpOworKwlpZiAo bGliX2NvbnRhaW5zX3N5bWJvbChwcm92aWRlcl9tb2R1bGUsICJDX0dldEZ1bmN0aW9uTGlzdCIp ICE9IDApIHsKKysJCWVycm9yKCJwcm92aWRlciAlcyBpcyBub3QgYSBQS0NTMTEgbGlicmFyeSIs IHByb3ZpZGVyX21vZHVsZSk7CisgCQlnb3RvIGZhaWw7CisgCX0KKy0JaWYgKGxpYl9jb250YWlu c19zeW1ib2wocHJvdmlkZXJfaWQsICJDX0dldEZ1bmN0aW9uTGlzdCIpICE9IDApIHsKKy0JCWVy cm9yKCJwcm92aWRlciAlcyBpcyBub3QgYSBQS0NTMTEgbGlicmFyeSIsIHByb3ZpZGVyX2lkKTsK Ky0JCWdvdG8gZmFpbDsKKysJaWYgKChtID0gcGtjczExX3Byb3ZpZGVyX2xvb2t1cF9tb2R1bGUo cHJvdmlkZXJfbW9kdWxlKSkgIT0gTlVMTAorKwkgICAmJiBtLT52YWxpZCkgeworKwkJZGVidWdf ZigicHJvdmlkZXIgbW9kdWxlIGFscmVhZHkgaW5pdGlhbGl6ZWQ6ICVzIiwgcHJvdmlkZXJfbW9k dWxlKTsKKysJCWZyZWUocHJvdmlkZXJfbW9kdWxlKTsKKysJCS8qIFNraXAgdGhlIGluaXRpYWxp emF0aW9uIG9mIFBLQ1MjMTEgbW9kdWxlICovCisrCQltLT5yZWZjb3VudCsrOworKwkJcC0+bW9k dWxlID0gbTsKKysJCXAtPnZhbGlkID0gMTsKKysJCVRBSUxRX0lOU0VSVF9UQUlMKCZwa2NzMTFf cHJvdmlkZXJzLCBwLCBuZXh0KTsKKysJCXAtPnJlZmNvdW50Kys7CS8qIGFkZCB0byBwcm92aWRl ciBsaXN0ICovCisrCQkqcHJvdmlkZXJwID0gcDsKKysJCXJldHVybiAwOworKwl9IGVsc2Ugewor KwkJbSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCptKSk7CisrCQlwLT5tb2R1bGUgPSBtOworKwkJbS0+ cmVmY291bnQrKzsKKyAJfQorKworIAkvKiBvcGVuIHNoYXJlZCBwa2NzMTEtbGlicmFyeSAqLwor LQlpZiAoKGhhbmRsZSA9IGRsb3Blbihwcm92aWRlcl9pZCwgUlRMRF9OT1cpKSA9PSBOVUxMKSB7 CistCQllcnJvcigiZGxvcGVuICVzIGZhaWxlZDogJXMiLCBwcm92aWRlcl9pZCwgZGxlcnJvcigp KTsKKysJaWYgKChoYW5kbGUgPSBkbG9wZW4ocHJvdmlkZXJfbW9kdWxlLCBSVExEX05PVykpID09 IE5VTEwpIHsKKysJCWVycm9yKCJkbG9wZW4gJXMgZmFpbGVkOiAlcyIsIHByb3ZpZGVyX21vZHVs ZSwgZGxlcnJvcigpKTsKKyAJCWdvdG8gZmFpbDsKKyAJfQorIAlpZiAoKGdldGZ1bmN0aW9ubGlz dCA9IGRsc3ltKGhhbmRsZSwgIkNfR2V0RnVuY3Rpb25MaXN0IikpID09IE5VTEwpCisgCQlmYXRh bCgiZGxzeW0oQ19HZXRGdW5jdGlvbkxpc3QpIGZhaWxlZDogJXMiLCBkbGVycm9yKCkpOworLQlw ID0geGNhbGxvYygxLCBzaXplb2YoKnApKTsKKy0JcC0+bmFtZSA9IHhzdHJkdXAocHJvdmlkZXJf aWQpOworLQlwLT5oYW5kbGUgPSBoYW5kbGU7CistCS8qIHNldCB1cCB0aGUgcGtjczExIGNhbGxi YWNrcyAqLworKwlwLT5tb2R1bGUtPmhhbmRsZSA9IGhhbmRsZTsKKysJLyogc2V0dXAgdGhlIHBr Y3MxMSBjYWxsYmFja3MgKi8KKyAJaWYgKChydiA9ICgqZ2V0ZnVuY3Rpb25saXN0KSgmZikpICE9 IENLUl9PSykgeworIAkJZXJyb3IoIkNfR2V0RnVuY3Rpb25MaXN0IGZvciBwcm92aWRlciAlcyBm YWlsZWQ6ICVsdSIsCistCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKKysJCSAgICBwcm92aWRlcl9t b2R1bGUsIHJ2KTsKKyAJCWdvdG8gZmFpbDsKKyAJfQorLQlwLT5mdW5jdGlvbl9saXN0ID0gZjsK KysJbS0+ZnVuY3Rpb25fbGlzdCA9IGY7CisgCWlmICgocnYgPSBmLT5DX0luaXRpYWxpemUoTlVM TCkpICE9IENLUl9PSykgeworIAkJZXJyb3IoIkNfSW5pdGlhbGl6ZSBmb3IgcHJvdmlkZXIgJXMg ZmFpbGVkOiAlbHUiLAorLQkJICAgIHByb3ZpZGVyX2lkLCBydik7CisrCQkgICAgcHJvdmlkZXJf bW9kdWxlLCBydik7CisgCQlnb3RvIGZhaWw7CisgCX0KKyAJbmVlZF9maW5hbGl6ZSA9IDE7Cist CWlmICgocnYgPSBmLT5DX0dldEluZm8oJnAtPmluZm8pKSAhPSBDS1JfT0spIHsKKysJaWYgKChy diA9IGYtPkNfR2V0SW5mbygmbS0+aW5mbykpICE9IENLUl9PSykgeworIAkJZXJyb3IoIkNfR2V0 SW5mbyBmb3IgcHJvdmlkZXIgJXMgZmFpbGVkOiAlbHUiLAorLQkJICAgIHByb3ZpZGVyX2lkLCBy dik7CisrCQkgICAgcHJvdmlkZXJfbW9kdWxlLCBydik7CisgCQlnb3RvIGZhaWw7CisgCX0KKy0J ZGVidWcoInByb3ZpZGVyICVzOiBtYW51ZmFjdHVyZXJJRCA8JS4qcz4gY3J5cHRva2lWZXJzaW9u ICVkLiVkIgorLQkgICAgIiBsaWJyYXJ5RGVzY3JpcHRpb24gPCUuKnM+IGxpYnJhcnlWZXJzaW9u ICVkLiVkIiwKKy0JICAgIHByb3ZpZGVyX2lkLAorLQkgICAgUk1TUEFDRShwLT5pbmZvLm1hbnVm YWN0dXJlcklEKSwKKy0JICAgIHAtPmluZm8uY3J5cHRva2lWZXJzaW9uLm1ham9yLAorLQkgICAg cC0+aW5mby5jcnlwdG9raVZlcnNpb24ubWlub3IsCistCSAgICBSTVNQQUNFKHAtPmluZm8ubGli cmFyeURlc2NyaXB0aW9uKSwKKy0JICAgIHAtPmluZm8ubGlicmFyeVZlcnNpb24ubWFqb3IsCist CSAgICBwLT5pbmZvLmxpYnJhcnlWZXJzaW9uLm1pbm9yKTsKKy0JaWYgKChydiA9IGYtPkNfR2V0 U2xvdExpc3QoQ0tfVFJVRSwgTlVMTCwgJnAtPm5zbG90cykpICE9IENLUl9PSykgeworKwlybXNw YWNlKG0tPmluZm8ubWFudWZhY3R1cmVySUQsIHNpemVvZihtLT5pbmZvLm1hbnVmYWN0dXJlcklE KSk7CisrCWlmICh1cmktPmxpYl9tYW51ZiAhPSBOVUxMICYmCisrCSAgICBzdHJuY21wKHVyaS0+ bGliX21hbnVmLCBtLT5pbmZvLm1hbnVmYWN0dXJlcklELCAzMikpIHsKKysJCWRlYnVnX2YoIlNr aXBwaW5nIHByb3ZpZGVyICVzIG5vdCBtYXRjaGluZyBsaWJyYXJ5X21hbnVmYWN0dXJlciIsCisr CQkgICAgbS0+aW5mby5tYW51ZmFjdHVyZXJJRCk7CisrIAkJZ290byBmYWlsOworKyAJfQorKwly bXNwYWNlKG0tPmluZm8ubGlicmFyeURlc2NyaXB0aW9uLCBzaXplb2YobS0+aW5mby5saWJyYXJ5 RGVzY3JpcHRpb24pKTsKKysJZGVidWcoInByb3ZpZGVyICVzOiBtYW51ZmFjdHVyZXJJRCA8JS4z MnM+IGNyeXB0b2tpVmVyc2lvbiAlZC4lZCIKKysJICAgICIgbGlicmFyeURlc2NyaXB0aW9uIDwl LjMycz4gbGlicmFyeVZlcnNpb24gJWQuJWQiLAorKwkgICAgcHJvdmlkZXJfbW9kdWxlLAorKwkg ICAgbS0+aW5mby5tYW51ZmFjdHVyZXJJRCwKKysJICAgIG0tPmluZm8uY3J5cHRva2lWZXJzaW9u Lm1ham9yLAorKwkgICAgbS0+aW5mby5jcnlwdG9raVZlcnNpb24ubWlub3IsCisrCSAgICBtLT5p bmZvLmxpYnJhcnlEZXNjcmlwdGlvbiwKKysJICAgIG0tPmluZm8ubGlicmFyeVZlcnNpb24ubWFq b3IsCisrCSAgICBtLT5pbmZvLmxpYnJhcnlWZXJzaW9uLm1pbm9yKTsKKysKKysJaWYgKChydiA9 IGYtPkNfR2V0U2xvdExpc3QoQ0tfVFJVRSwgTlVMTCwgJm0tPm5zbG90cykpICE9IENLUl9PSykg eworIAkJZXJyb3IoIkNfR2V0U2xvdExpc3QgZmFpbGVkOiAlbHUiLCBydik7CisgCQlnb3RvIGZh aWw7CisgCX0KKy0JaWYgKHAtPm5zbG90cyA9PSAwKSB7CistCQlkZWJ1Z19mKCJwcm92aWRlciAl cyByZXR1cm5lZCBubyBzbG90cyIsIHByb3ZpZGVyX2lkKTsKKysJaWYgKG0tPm5zbG90cyA9PSAw KSB7CisrCQlkZWJ1Z19mKCJwcm92aWRlciAlcyByZXR1cm5lZCBubyBzbG90cyIsIHByb3ZpZGVy X21vZHVsZSk7CisgCQlyZXQgPSAtU1NIX1BLQ1MxMV9FUlJfTk9fU0xPVFM7CisgCQlnb3RvIGZh aWw7CisgCX0KKy0JcC0+c2xvdGxpc3QgPSB4Y2FsbG9jKHAtPm5zbG90cywgc2l6ZW9mKENLX1NM T1RfSUQpKTsKKy0JaWYgKChydiA9IGYtPkNfR2V0U2xvdExpc3QoQ0tfVFJVRSwgcC0+c2xvdGxp c3QsICZwLT5uc2xvdHMpKQorKwltLT5zbG90bGlzdCA9IHhjYWxsb2MobS0+bnNsb3RzLCBzaXpl b2YoQ0tfU0xPVF9JRCkpOworKwlpZiAoKHJ2ID0gZi0+Q19HZXRTbG90TGlzdChDS19UUlVFLCBt LT5zbG90bGlzdCwgJm0tPm5zbG90cykpCisgCSAgICAhPSBDS1JfT0spIHsKKyAJCWVycm9yKCJD X0dldFNsb3RMaXN0IGZvciBwcm92aWRlciAlcyBmYWlsZWQ6ICVsdSIsCistCQkgICAgcHJvdmlk ZXJfaWQsIHJ2KTsKKysJCSAgICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsKKyAJCWdvdG8gZmFpbDsK KyAJfQorLQlwLT5zbG90aW5mbyA9IHhjYWxsb2MocC0+bnNsb3RzLCBzaXplb2Yoc3RydWN0IHBr Y3MxMV9zbG90aW5mbykpOworKwltLT5zbG90aW5mbyA9IHhjYWxsb2MobS0+bnNsb3RzLCBzaXpl b2Yoc3RydWN0IHBrY3MxMV9zbG90aW5mbykpOworIAlwLT52YWxpZCA9IDE7CistCW5rZXlzID0g MDsKKy0JZm9yIChpID0gMDsgaSA8IHAtPm5zbG90czsgaSsrKSB7CistCQl0b2tlbiA9ICZwLT5z bG90aW5mb1tpXS50b2tlbjsKKy0JCWlmICgocnYgPSBmLT5DX0dldFRva2VuSW5mbyhwLT5zbG90 bGlzdFtpXSwgdG9rZW4pKQorKwltLT52YWxpZCA9IDE7CisrCWZvciAoaSA9IDA7IGkgPCBtLT5u c2xvdHM7IGkrKykgeworKwkJdG9rZW4gPSAmbS0+c2xvdGluZm9baV0udG9rZW47CisrCQlpZiAo KHJ2ID0gZi0+Q19HZXRUb2tlbkluZm8obS0+c2xvdGxpc3RbaV0sIHRva2VuKSkKKyAJCSAgICAh PSBDS1JfT0spIHsKKyAJCQllcnJvcigiQ19HZXRUb2tlbkluZm8gZm9yIHByb3ZpZGVyICVzIHNs b3QgJWx1ICIKKy0JCQkgICAgImZhaWxlZDogJWx1IiwgcHJvdmlkZXJfaWQsICh1X2xvbmcpaSwg cnYpOworLQkJCWNvbnRpbnVlOworLQkJfQorLQkJaWYgKCh0b2tlbi0+ZmxhZ3MgJiBDS0ZfVE9L RU5fSU5JVElBTElaRUQpID09IDApIHsKKy0JCQlkZWJ1ZzJfZigiaWdub3JpbmcgdW5pbml0aWFs aXNlZCB0b2tlbiBpbiAiCistCQkJICAgICJwcm92aWRlciAlcyBzbG90ICVsdSIsIHByb3ZpZGVy X2lkLCAodV9sb25nKWkpOworKwkJCSAgICAiZmFpbGVkOiAlbHUiLCBwcm92aWRlcl9tb2R1bGUs ICh1X2xvbmcpaSwgcnYpOworIAkJCWNvbnRpbnVlOworIAkJfQorIAkJZGVidWcoInByb3ZpZGVy ICVzIHNsb3QgJWx1OiBsYWJlbCA8JS4qcz4gIgorIAkJICAgICJtYW51ZmFjdHVyZXJJRCA8JS4q cz4gbW9kZWwgPCUuKnM+IHNlcmlhbCA8JS4qcz4gIgorIAkJICAgICJmbGFncyAweCVseCIsCist CQkgICAgcHJvdmlkZXJfaWQsICh1bnNpZ25lZCBsb25nKWksCisrCQkgICAgcHJvdmlkZXJfbW9k dWxlLCAodW5zaWduZWQgbG9uZylpLAorIAkJICAgIFJNU1BBQ0UodG9rZW4tPmxhYmVsKSwgUk1T UEFDRSh0b2tlbi0+bWFudWZhY3R1cmVySUQpLAorIAkJICAgIFJNU1BBQ0UodG9rZW4tPm1vZGVs KSwgUk1TUEFDRSh0b2tlbi0+c2VyaWFsTnVtYmVyKSwKKyAJCSAgICB0b2tlbi0+ZmxhZ3MpOwor LQkJLyoKKy0JCSAqIG9wZW4gc2Vzc2lvbiwgbG9naW4gd2l0aCBwaW4gYW5kIHJldHJpZXZlIHB1 YmxpYworLQkJICoga2V5cyAoaWYga2V5cCBpcyBwcm92aWRlZCkKKy0JCSAqLworLQkJaWYgKChy ZXQgPSBwa2NzMTFfb3Blbl9zZXNzaW9uKHAsIGksIHBpbiwgdXNlcikpICE9IDAgfHwKKy0JCSAg ICBrZXlwID09IE5VTEwpCistCQkJY29udGludWU7CistCQlwa2NzMTFfZmV0Y2hfa2V5cyhwLCBp LCBrZXlwLCBsYWJlbHNwLCAmbmtleXMpOworLSNpZmRlZiBXSVRIX09QRU5TU0wKKy0JCXBrY3Mx MV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMpOworLSNlbmRpZgorLQkJ aWYgKG5rZXlzID09IDAgJiYgIXAtPnNsb3RpbmZvW2ldLmxvZ2dlZF9pbiAmJgorLQkJICAgIHBr Y3MxMV9pbnRlcmFjdGl2ZSkgeworLQkJCS8qCistCQkJICogU29tZSB0b2tlbnMgcmVxdWlyZSBs b2dpbiBiZWZvcmUgdGhleSB3aWxsCistCQkJICogZXhwb3NlIGtleXMuCistCQkJICovCistCQkJ aWYgKHBrY3MxMV9sb2dpbl9zbG90KHAsICZwLT5zbG90aW5mb1tpXSwKKy0JCQkgICAgQ0tVX1VT RVIpIDwgMCkgeworLQkJCQllcnJvcigibG9naW4gZmFpbGVkIik7CistCQkJCWNvbnRpbnVlOwor LQkJCX0KKy0JCQlwa2NzMTFfZmV0Y2hfa2V5cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMp OworLSNpZmRlZiBXSVRIX09QRU5TU0wKKy0JCQlwa2NzMTFfZmV0Y2hfY2VydHMocCwgaSwga2V5 cCwgbGFiZWxzcCwgJm5rZXlzKTsKKy0jZW5kaWYKKy0JCX0KKyAJfQorKwltLT5tb2R1bGVfcGF0 aCA9IHByb3ZpZGVyX21vZHVsZTsKKysJcHJvdmlkZXJfbW9kdWxlID0gTlVMTDsKKyAKKyAJLyog bm93IG93bmVkIGJ5IGNhbGxlciAqLworIAkqcHJvdmlkZXJwID0gcDsKK0BAIC0xOTc0LDIxICsy MTUwLDIyIEBAIHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hh ciAqcGluLAorIAlUQUlMUV9JTlNFUlRfVEFJTCgmcGtjczExX3Byb3ZpZGVycywgcCwgbmV4dCk7 CisgCXAtPnJlZmNvdW50Kys7CS8qIGFkZCB0byBwcm92aWRlciBsaXN0ICovCisgCistCXJldHVy biAobmtleXMpOworKwlyZXR1cm4gMDsKKyBmYWlsOgorIAlpZiAobmVlZF9maW5hbGl6ZSAmJiAo cnYgPSBmLT5DX0ZpbmFsaXplKE5VTEwpKSAhPSBDS1JfT0spCisgCQllcnJvcigiQ19GaW5hbGl6 ZSBmb3IgcHJvdmlkZXIgJXMgZmFpbGVkOiAlbHUiLAorLQkJICAgIHByb3ZpZGVyX2lkLCBydik7 CisrCQkgICAgcHJvdmlkZXJfbW9kdWxlLCBydik7CisrCWZyZWUocHJvdmlkZXJfbW9kdWxlKTsK KysJaWYgKG0pIHsKKysJCWZyZWUobS0+c2xvdGxpc3QpOworKwkJZnJlZShtKTsKKysJfQorIAlp ZiAocCkgeworIAkJZnJlZShwLT5uYW1lKTsKKy0JCWZyZWUocC0+c2xvdGxpc3QpOworLQkJZnJl ZShwLT5zbG90aW5mbyk7CisgCQlmcmVlKHApOworIAl9CisgCWlmIChoYW5kbGUpCisgCQlkbGNs b3NlKGhhbmRsZSk7CistCWlmIChyZXQgPiAwKQorLQkJcmV0ID0gLTE7CisgCXJldHVybiAocmV0 KTsKKyB9CisgCitAQCAtMjAyNCwxOCArMjIwMSwxNjMgQEAgcGtjczExX3Rlcm1pbmF0ZSh2b2lk KQorIH0KKyAKKyAvKgorLSAqIHJlZ2lzdGVyIGEgbmV3IHByb3ZpZGVyIGFuZCBnZXQgbnVtYmVy IG9mIGtleXMgaG9sZCBieSB0aGUgdG9rZW4sCistICogZmFpbHMgaWYgcHJvdmlkZXIgYWxyZWFk eSBleGlzdHMKKysgKiByZWdpc3RlciBhIG5ldyBwcm92aWRlciwgZmFpbHMgaWYgcHJvdmlkZXIg YWxyZWFkeSBleGlzdHMuIGlmCisrICoga2V5cCBpcyBwcm92aWRlZCwgZmV0Y2gga2V5cy4KKyAg Ki8KKytzdGF0aWMgaW50CisrcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3Qg cGtjczExX3VyaSAqdXJpLCBjaGFyICpwaW4sCisrICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwg Y2hhciAqKipsYWJlbHNwLCBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoqcHJvdmlkZXJwLAorKyAg ICBDS19VTE9ORyB1c2VyKQorK3sKKysJaW50IG5rZXlzOworKwlpbnQgcmV0ID0gLTE7CisrCXN0 cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAgPSBOVUxMOworKwlDS19VTE9ORyBpOworKwlDS19UT0tF Tl9JTkZPICp0b2tlbjsKKysJY2hhciAqcHJvdmlkZXJfdXJpID0gTlVMTDsKKysKKysJaWYgKHBy b3ZpZGVycCA9PSBOVUxMKQorKwkJZ290byBmYWlsOworKwkqcHJvdmlkZXJwID0gTlVMTDsKKysK KysJaWYgKGtleXAgIT0gTlVMTCkKKysJCSprZXlwID0gTlVMTDsKKysKKysJaWYgKChyZXQgPSBw a2NzMTFfaW5pdGlhbGl6ZV9wcm92aWRlcih1cmksICZwKSkgIT0gMCkgeworKwkJZ290byBmYWls OworKwl9CisrCisrCXByb3ZpZGVyX3VyaSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisrCWlmIChw aW4gPT0gTlVMTCAmJiB1cmktPnBpbiAhPSBOVUxMKSB7CisrCQlwaW4gPSB1cmktPnBpbjsKKysJ fQorKwlua2V5cyA9IDA7CisrCWZvciAoaSA9IDA7IGkgPCBwLT5tb2R1bGUtPm5zbG90czsgaSsr KSB7CisrCQl0b2tlbiA9ICZwLT5tb2R1bGUtPnNsb3RpbmZvW2ldLnRva2VuOworKwkJaWYgKCh0 b2tlbi0+ZmxhZ3MgJiBDS0ZfVE9LRU5fSU5JVElBTElaRUQpID09IDApIHsKKysJCQlkZWJ1ZzJf ZigiaWdub3JpbmcgdW5pbml0aWFsaXNlZCB0b2tlbiBpbiAiCisrCQkJICAgICJwcm92aWRlciAl cyBzbG90ICVsdSIsIHByb3ZpZGVyX3VyaSwgKHVfbG9uZylpKTsKKysJCQljb250aW51ZTsKKysJ CX0KKysJCWlmICh1cmktPnRva2VuICE9IE5VTEwgJiYKKysJCSAgICBzdHJuY21wKHRva2VuLT5s YWJlbCwgdXJpLT50b2tlbiwgMzIpICE9IDApIHsKKysJCQlkZWJ1ZzJfZigiaWdub3JpbmcgdG9r ZW4gbm90IG1hdGNoaW5nIGxhYmVsICglLjMycykgIgorKwkJCSAgICAic3BlY2lmaWVkIGJ5IFBL Q1MjMTEgVVJJIGluIHNsb3QgJWx1IiwKKysJCQkgICAgdG9rZW4tPmxhYmVsLCAodW5zaWduZWQg bG9uZylpKTsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmICh1cmktPm1hbnVmICE9IE5VTEwg JiYKKysJCSAgICBzdHJuY21wKHRva2VuLT5tYW51ZmFjdHVyZXJJRCwgdXJpLT5tYW51ZiwgMzIp ICE9IDApIHsKKysJCQlkZWJ1ZzJfZigiaWdub3JpbmcgdG9rZW4gbm90IG1hdGNoaW5nIHJlcXVy ZXN0ZWQgIgorKwkJCSAgICAibWFudWZhY3R1cmVySUQgKCUuMzJzKSBzcGVjaWZpZWQgYnkgUEtD UyMxMSBVUkkgaW4gIgorKwkJCSAgICAic2xvdCAlbHUiLCB0b2tlbi0+bWFudWZhY3R1cmVySUQs ICh1bnNpZ25lZCBsb25nKWkpOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKHVyaS0+c2Vy aWFsICE9IE5VTEwgJiYKKysJCSAgICBzdHJuY21wKHRva2VuLT5zZXJpYWxOdW1iZXIsIHVyaS0+ c2VyaWFsLCAxNikgIT0gMCkgeworKwkJCWRlYnVnMl9mKCJpZ25vcmluZyB0b2tlbiBub3QgbWF0 Y2hpbmcgcmVxdXJlc3RlZCAiCisrCQkJICAgICJzZXJpYWxOdW1iZXIgKCVzKSBzcGVjaWZpZWQg YnkgUEtDUyMxMSBVUkkgaW4gIgorKwkJCSAgICAic2xvdCAlbHUiLCB0b2tlbi0+c2VyaWFsTnVt YmVyLCAodW5zaWduZWQgbG9uZylpKTsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWRlYnVnKCJw cm92aWRlciAlcyBzbG90ICVsdTogbGFiZWwgPCUuMzJzPiBtYW51ZmFjdHVyZXJJRCA8JS4zMnM+ ICIKKysJCSAgICAibW9kZWwgPCUuMTZzPiBzZXJpYWwgPCUuMTZzPiBmbGFncyAweCVseCIsCisr CQkgICAgcHJvdmlkZXJfdXJpLCAodW5zaWduZWQgbG9uZylpLAorKwkJICAgIHRva2VuLT5sYWJl bCwgdG9rZW4tPm1hbnVmYWN0dXJlcklELCB0b2tlbi0+bW9kZWwsCisrCQkgICAgdG9rZW4tPnNl cmlhbE51bWJlciwgdG9rZW4tPmZsYWdzKTsKKysJCS8qCisrCQkgKiBvcGVuIHNlc3Npb24gaWYg bm90IHlldCBvcGVuZWQsIGxvZ2luIHdpdGggcGluIGFuZAorKwkJICogcmV0cmlldmUgcHVibGlj IGtleXMgKGlmIGtleXAgaXMgcHJvdmlkZWQpCisrCQkgKi8KKysJCWlmICgocC0+bW9kdWxlLT5z bG90aW5mb1tpXS5zZXNzaW9uICE9IDAgfHwKKysJCSAgICAocmV0ID0gcGtjczExX29wZW5fc2Vz c2lvbihwLCBpLCBwaW4sIHVzZXIpKSAhPSAwKSAmJiAvKiA/Pz8gKi8KKysJCSAgICBrZXlwID09 IE5VTEwpCisrCQkJY29udGludWU7CisrCQlwa2NzMTFfZmV0Y2hfa2V5cyhwLCBpLCBrZXlwLCBs YWJlbHNwLCAmbmtleXMsIHVyaSk7CisrCQlwa2NzMTFfZmV0Y2hfY2VydHMocCwgaSwga2V5cCwg bGFiZWxzcCwgJm5rZXlzLCB1cmkpOworKwkJaWYgKG5rZXlzID09IDAgJiYgIXAtPm1vZHVsZS0+ c2xvdGluZm9baV0ubG9nZ2VkX2luICYmCisrCQkgICAgcGtjczExX2ludGVyYWN0aXZlKSB7Cisr CQkJLyoKKysJCQkgKiBTb21lIHRva2VucyByZXF1aXJlIGxvZ2luIGJlZm9yZSB0aGV5IHdpbGwK KysJCQkgKiBleHBvc2Uga2V5cy4KKysJCQkgKi8KKysJCQlkZWJ1ZzNfZigiVHJ5aW5nIHRvIGxv Z2luIGFzIHRoZXJlIHdlcmUgbm8ga2V5cyBmb3VuZCIpOworKwkJCWlmIChwa2NzMTFfbG9naW5f c2xvdChwLCAmcC0+bW9kdWxlLT5zbG90aW5mb1tpXSwKKysJCQkgICAgQ0tVX1VTRVIpIDwgMCkg eworKwkJCQllcnJvcigibG9naW4gZmFpbGVkIik7CisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysJ CQlwa2NzMTFfZmV0Y2hfa2V5cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMsIHVyaSk7Cisr CQkJcGtjczExX2ZldGNoX2NlcnRzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cywgdXJpKTsK KysJCX0KKysJCWlmIChua2V5cyA9PSAwICYmIHVyaS0+b2JqZWN0ICE9IE5VTEwpIHsKKysJCQlk ZWJ1ZzNfZigiTm8ga2V5cyBmb3VuZC4gUmV0cnlpbmcgd2l0aG91dCBsYWJlbCAoJS4zMnMpICIs CisrCQkJICAgIHVyaS0+b2JqZWN0KTsKKysJCQkvKiBUcnkgb25jZSBtb3JlIHdpdGhvdXQgdGhl IGxhYmVsIGZpbHRlciAqLworKwkJCWNoYXIgKmxhYmVsID0gdXJpLT5vYmplY3Q7CisrCQkJdXJp LT5vYmplY3QgPSBOVUxMOyAvKiBYWFggY2xvbmUgdXJpPyAqLworKwkJCXBrY3MxMV9mZXRjaF9r ZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cywgdXJpKTsKKysJCQlwa2NzMTFfZmV0Y2hf Y2VydHMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOworKwkJCXVyaS0+b2JqZWN0 ID0gbGFiZWw7CisrCQl9CisrCX0KKysJcGluID0gTlVMTDsgLyogV2lsbCBiZSBjbGVhbmVkIHVw IHdpdGggVVJJICovCisrCisrCS8qIG5vdyBvd25lZCBieSBjYWxsZXIgKi8KKysJKnByb3ZpZGVy cCA9IHA7CisrCisrCWZyZWUocHJvdmlkZXJfdXJpKTsKKysJcmV0dXJuIChua2V5cyk7CisrIGZh aWw6CisrCWlmIChwKSB7CisrCQlUQUlMUV9SRU1PVkUoJnBrY3MxMV9wcm92aWRlcnMsIHAsIG5l eHQpOworKwkgICAgIAlwa2NzMTFfcHJvdmlkZXJfdW5yZWYocCk7CisrCX0KKysJaWYgKHJldCA+ IDApCisrCQlyZXQgPSAtMTsKKysJcmV0dXJuIChyZXQpOworK30KKysKKysjaWZkZWYgV0lUSF9Q S0NTMTFfS0VZR0VOCisrc3RhdGljIGludAorK3BrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcihjaGFy ICpwcm92aWRlcl9pZCwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsCisrICAgIGNo YXIgKioqbGFiZWxzcCwgc3RydWN0IHBrY3MxMV9wcm92aWRlciAqKnByb3ZpZGVycCwgQ0tfVUxP TkcgdXNlcikKKyt7CisrCXN0cnVjdCBwa2NzMTFfdXJpICp1cmkgPSBOVUxMOworKwlpbnQgcjsK KysKKysJZGVidWdfZigiY2FsbGVkLCBwcm92aWRlcl9pZCA9ICVzIiwgcHJvdmlkZXJfaWQpOwor KworKwl1cmkgPSBwa2NzMTFfdXJpX2luaXQoKTsKKysJaWYgKHVyaSA9PSBOVUxMKQorKwkJZmF0 YWwoImZhaWxlZCB0byBpbml0IFBLQ1MjMTEgVVJJIik7CisrCisrCWlmIChzdHJsZW4ocHJvdmlk ZXJfaWQpID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKKysJICAgIHN0cm5jbXAocHJv dmlkZXJfaWQsIFBLQ1MxMV9VUklfU0NIRU1FLCBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9 PSAwKSB7CisrCQlpZiAocGtjczExX3VyaV9wYXJzZShwcm92aWRlcl9pZCwgdXJpKSAhPSAwKQor KwkJCWZhdGFsKCJGYWlsZWQgdG8gcGFyc2UgUEtDUyMxMSBVUkkiKTsKKysJfSBlbHNlIHsKKysJ CXVyaS0+bW9kdWxlX3BhdGggPSBzdHJkdXAocHJvdmlkZXJfaWQpOworKwl9CisrCisrCXIgPSBw a2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXJfYnlfdXJpKHVyaSwgcGluLCBrZXlwLCBsYWJlbHNwLCBw cm92aWRlcnAsIHVzZXIpOworKwlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKKysKKysJcmV0dXJu IHI7CisrfQorKyNlbmRpZgorKworIGludAorLXBrY3MxMV9hZGRfcHJvdmlkZXIoY2hhciAqcHJv dmlkZXJfaWQsIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtleSAqKiprZXlwLAorLSAgICBjaGFyICoq KmxhYmVsc3ApCisrcGtjczExX2FkZF9wcm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkg KnVyaSwgY2hhciAqcGluLAorKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsIGNoYXIgKioqbGFi ZWxzcCkKKyB7CisgCXN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAgPSBOVUxMOworIAlpbnQgbmtl eXM7CisrCWNoYXIgKnByb3ZpZGVyX3VyaSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisgCistCW5r ZXlzID0gcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyKHByb3ZpZGVyX2lkLCBwaW4sIGtleXAsIGxh YmVsc3AsCistCSAgICAmcCwgQ0tVX1VTRVIpOworKwlkZWJ1Z19mKCJjYWxsZWQsIHByb3ZpZGVy X3VyaSA9ICVzIiwgcHJvdmlkZXJfdXJpKTsKKysKKysJbmtleXMgPSBwa2NzMTFfcmVnaXN0ZXJf cHJvdmlkZXJfYnlfdXJpKHVyaSwgcGluLCBrZXlwLCBsYWJlbHNwLCAmcCwgQ0tVX1VTRVIpOwor IAorIAkvKiBubyBrZXlzIGZvdW5kIG9yIHNvbWUgb3RoZXIgZXJyb3IsIGRlLXJlZ2lzdGVyIHBy b3ZpZGVyICovCisgCWlmIChua2V5cyA8PSAwICYmIHAgIT0gTlVMTCkgeworQEAgLTIwNDQsMTEg KzIzNjYsMzggQEAgcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAq cGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsCisgCQlwa2NzMTFfcHJvdmlkZXJfdW5yZWYocCk7 CisgCX0KKyAJaWYgKG5rZXlzID09IDApCistCQlkZWJ1Z19mKCJwcm92aWRlciAlcyByZXR1cm5l ZCBubyBrZXlzIiwgcHJvdmlkZXJfaWQpOworKwkJZGVidWdfZigicHJvdmlkZXIgJXMgcmV0dXJu ZWQgbm8ga2V5cyIsIHByb3ZpZGVyX3VyaSk7CisgCisrCWZyZWUocHJvdmlkZXJfdXJpKTsKKyAJ cmV0dXJuIChua2V5cyk7CisgfQorIAorK2ludAorK3BrY3MxMV9hZGRfcHJvdmlkZXIoY2hhciAq cHJvdmlkZXJfaWQsIGNoYXIgKnBpbiwKKysgICAgc3RydWN0IHNzaGtleSAqKiprZXlwLCBjaGFy ICoqKmxhYmVsc3ApCisreworKwlzdHJ1Y3QgcGtjczExX3VyaSAqdXJpOworKwlpbnQgbmtleXM7 CisrCisrCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwlpZiAodXJpID09IE5VTEwpCisrCQlm YXRhbCgiRmFpbGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKKysKKysJaWYgKHN0cmxlbihwcm92 aWRlcl9pZCkgPj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgorKwkgICAgc3RybmNtcChw cm92aWRlcl9pZCwgUEtDUzExX1VSSV9TQ0hFTUUsIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkp ID09IDApIHsKKysJCWlmIChwa2NzMTFfdXJpX3BhcnNlKHByb3ZpZGVyX2lkLCB1cmkpICE9IDAp CisrCQkJZmF0YWwoIkZhaWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSIpOworKwl9IGVsc2Ugewor KwkJdXJpLT5tb2R1bGVfcGF0aCA9IHN0cmR1cChwcm92aWRlcl9pZCk7CisrCX0KKysKKysJbmtl eXMgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyX2J5X3VyaSh1cmksIHBpbiwga2V5cCwgbGFiZWxzcCk7 CisrCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworKworKyAJcmV0dXJuIChua2V5cyk7CisrfQor KworKworIGludAorIHBrY3MxMV9zaWduKHN0cnVjdCBzc2hrZXkgKmtleSwKKyAgICAgdV9jaGFy ICoqc2lncCwgc2l6ZV90ICpsZW5wLAorZGlmZiAtLWdpdCBhL3NzaC1wa2NzMTEuaCBiL3NzaC1w a2NzMTEuaAoraW5kZXggMWQwMjc3YTZkLi4xMzQ1OTY0NGMgMTAwNjQ0CistLS0gYS9zc2gtcGtj czExLmgKKysrKyBiL3NzaC1wa2NzMTEuaAorQEAgLTI0LDEyICsyNCwxNiBAQAorICNkZWZpbmUJ U1NIX1BLQ1MxMV9FUlJfUElOX1JFUVVJUkVECQk0CisgI2RlZmluZQlTU0hfUEtDUzExX0VSUl9Q SU5fTE9DS0VECQk1CisgCisrI2luY2x1ZGUgInNzaC1wa2NzMTEtdXJpLmgiCisrCisgc3RydWN0 IHNzaGtleTsKKyAKKyBpbnQJcGtjczExX2luaXQoaW50KTsKKyB2b2lkCXBrY3MxMV90ZXJtaW5h dGUodm9pZCk7CisgaW50CXBrY3MxMV9hZGRfcHJvdmlkZXIoY2hhciAqLCBjaGFyICosIHN0cnVj dCBzc2hrZXkgKioqLCBjaGFyICoqKik7CisraW50CXBrY3MxMV9hZGRfcHJvdmlkZXJfYnlfdXJp KHN0cnVjdCBwa2NzMTFfdXJpICosIGNoYXIgKiwgc3RydWN0IHNzaGtleSAqKiosIGNoYXIgKioq KTsKKyBpbnQJcGtjczExX2RlbF9wcm92aWRlcihjaGFyICopOworK2ludAlwa2NzMTFfdXJpX3dy aXRlKGNvbnN0IHN0cnVjdCBzc2hrZXkgKiwgRklMRSAqKTsKKyBpbnQJcGtjczExX3NpZ24oc3Ry dWN0IHNzaGtleSAqLCB1X2NoYXIgKiosIHNpemVfdCAqLAorIAkgICAgY29uc3QgdV9jaGFyICos IHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgCSAgICBjb25zdCBjaGFyICos IHVfaW50KTsKK2RpZmYgLS1naXQgYS9zc2guYyBiL3NzaC5jCitpbmRleCAwMTgyY2M1NjcuLmM4 ZjM1NDVhZiAxMDA2NDQKKy0tLSBhL3NzaC5jCisrKysgYi9zc2guYworQEAgLTg0OCw2ICs4NDgs MTQgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKKyAJCQlvcHRpb25zLmdzc19kZWxlZ19jcmVk cyA9IDE7CisgCQkJYnJlYWs7CisgCQljYXNlICdpJzoKKysjaWZkZWYgRU5BQkxFX1BLQ1MxMQor KwkJCWlmIChzdHJsZW4ob3B0YXJnKSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisr CQkJICAgIHN0cm5jbXAob3B0YXJnLCBQS0NTMTFfVVJJX1NDSEVNRSwKKysJCQkgICAgc3RybGVu KFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkgeworKwkJCQlhZGRfaWRlbnRpdHlfZmlsZSgmb3B0 aW9ucywgTlVMTCwgb3B0YXJnLCAxKTsKKysJCQkJYnJlYWs7CisrCQkJfQorKyNlbmRpZgorIAkJ CXAgPSB0aWxkZV9leHBhbmRfZmlsZW5hbWUob3B0YXJnLCBnZXR1aWQoKSk7CisgCQkJaWYgKHN0 YXQocCwgJnN0KSA9PSAtMSkKKyAJCQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBJZGVudGl0 eSBmaWxlICVzICIKK0BAIC0xODMyLDYgKzE4NDAsNyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2 KQorIAorICNpZmRlZiBFTkFCTEVfUEtDUzExCisgCSh2b2lkKXBrY3MxMV9kZWxfcHJvdmlkZXIo b3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIpOworKwlwa2NzMTFfdGVybWluYXRlKCk7CisgI2VuZGlm CisgCisgIHNraXBfY29ubmVjdDoKK0BAIC0yMzU2LDYgKzIzNjUsNDUgQEAgc3NoX3Nlc3Npb24y KHN0cnVjdCBzc2ggKnNzaCwgY29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQorIAkg ICAgb3B0aW9ucy5lc2NhcGVfY2hhciA6IFNTSF9FU0NBUEVDSEFSX05PTkUsIGlkKTsKKyB9Cisg CisrI2lmZGVmIEVOQUJMRV9QS0NTMTEKKytzdGF0aWMgdm9pZAorK2xvYWRfcGtjczExX2lkZW50 aXR5KGNoYXIgKnBrY3MxMV91cmksIGNoYXIgKmlkZW50aXR5X2ZpbGVzW10sCisrICAgIHN0cnVj dCBzc2hrZXkgKmlkZW50aXR5X2tleXNbXSwgaW50ICpuX2lkcykKKyt7CisrCWludCBua2V5cywg aTsKKysJc3RydWN0IHNzaGtleSAqKmtleXM7CisrCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7Cisr CisrCWRlYnVnKCJpZGVudGl0eSBmaWxlICclcycgZnJvbSBwa2NzIzExIiwgcGtjczExX3VyaSk7 CisrCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwlpZiAodXJpID09IE5VTEwpCisrCQlmYXRh bCgiRmFpbGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKKysKKysJaWYgKHBrY3MxMV91cmlfcGFy c2UocGtjczExX3VyaSwgdXJpKSAhPSAwKQorKwlmYXRhbCgiRmFpbGVkIHRvIHBhcnNlIFBLQ1Mj MTEgVVJJICVzIiwgcGtjczExX3VyaSk7CisrCisrCS8qIHdlIG5lZWQgdG8gbWVyZ2UgVVJJIGFu ZCBwcm92aWRlciB0b2dldGhlciAqLworKwlpZiAob3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIgIT0g TlVMTCAmJiB1cmktPm1vZHVsZV9wYXRoID09IE5VTEwpCisrCQl1cmktPm1vZHVsZV9wYXRoID0g c3RyZHVwKG9wdGlvbnMucGtjczExX3Byb3ZpZGVyKTsKKysKKysJaWYgKG9wdGlvbnMubnVtX2lk ZW50aXR5X2ZpbGVzIDwgU1NIX01BWF9JREVOVElUWV9GSUxFUyAmJgorKwkgICAgKG5rZXlzID0g cGtjczExX2FkZF9wcm92aWRlcl9ieV91cmkodXJpLCBOVUxMLCAma2V5cywgTlVMTCkpID4gMCkg eworKwkJZm9yIChpID0gMDsgaSA8IG5rZXlzOyBpKyspIHsKKysJCQlpZiAoKm5faWRzID49IFNT SF9NQVhfSURFTlRJVFlfRklMRVMpIHsKKysJCQkJc3Noa2V5X2ZyZWUoa2V5c1tpXSk7CisrCQkJ CWNvbnRpbnVlOworKwkJCX0KKysJCQlpZGVudGl0eV9rZXlzWypuX2lkc10gPSBrZXlzW2ldOwor KwkJCWlkZW50aXR5X2ZpbGVzWypuX2lkc10gPSBwa2NzMTFfdXJpX2dldCh1cmkpOworKwkJCSgq bl9pZHMpKys7CisrCQl9CisrCQlmcmVlKGtleXMpOworKwl9CisrCisrCXBrY3MxMV91cmlfY2xl YW51cCh1cmkpOworK30KKysjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAqLworKworIC8qIExvYWRz IGFsbCBJZGVudGl0eUZpbGUgYW5kIENlcnRpZmljYXRlRmlsZSBrZXlzICovCisgc3RhdGljIHZv aWQKKyBsb2FkX3B1YmxpY19pZGVudGl0eV9maWxlcyhjb25zdCBzdHJ1Y3Qgc3NoX2Nvbm5faW5m byAqY2luZm8pCitAQCAtMjM3MCwxMSArMjQxOCw2IEBAIGxvYWRfcHVibGljX2lkZW50aXR5X2Zp bGVzKGNvbnN0IHN0cnVjdCBzc2hfY29ubl9pbmZvICpjaW5mbykKKyAJY2hhciAqY2VydGlmaWNh dGVfZmlsZXNbU1NIX01BWF9DRVJUSUZJQ0FURV9GSUxFU107CisgCXN0cnVjdCBzc2hrZXkgKmNl cnRpZmljYXRlc1tTU0hfTUFYX0NFUlRJRklDQVRFX0ZJTEVTXTsKKyAJaW50IGNlcnRpZmljYXRl X2ZpbGVfdXNlcnByb3ZpZGVkW1NTSF9NQVhfQ0VSVElGSUNBVEVfRklMRVNdOworLSNpZmRlZiBF TkFCTEVfUEtDUzExCistCXN0cnVjdCBzc2hrZXkgKiprZXlzID0gTlVMTDsKKy0JY2hhciAqKmNv bW1lbnRzID0gTlVMTDsKKy0JaW50IG5rZXlzOworLSNlbmRpZiAvKiBQS0NTMTEgKi8KKyAKKyAJ bl9pZHMgPSBuX2NlcnRzID0gMDsKKyAJbWVtc2V0KGlkZW50aXR5X2ZpbGVzLCAwLCBzaXplb2Yo aWRlbnRpdHlfZmlsZXMpKTsKK0BAIC0yMzg3LDMzICsyNDMwLDQ2IEBAIGxvYWRfcHVibGljX2lk ZW50aXR5X2ZpbGVzKGNvbnN0IHN0cnVjdCBzc2hfY29ubl9pbmZvICpjaW5mbykKKyAJICAgIHNp emVvZihjZXJ0aWZpY2F0ZV9maWxlX3VzZXJwcm92aWRlZCkpOworIAorICNpZmRlZiBFTkFCTEVf UEtDUzExCistCWlmIChvcHRpb25zLnBrY3MxMV9wcm92aWRlciAhPSBOVUxMICYmCistCSAgICBv cHRpb25zLm51bV9pZGVudGl0eV9maWxlcyA8IFNTSF9NQVhfSURFTlRJVFlfRklMRVMgJiYKKy0J ICAgIChwa2NzMTFfaW5pdCghb3B0aW9ucy5iYXRjaF9tb2RlKSA9PSAwKSAmJgorLQkgICAgKG5r ZXlzID0gcGtjczExX2FkZF9wcm92aWRlcihvcHRpb25zLnBrY3MxMV9wcm92aWRlciwgTlVMTCwK Ky0JICAgICZrZXlzLCAmY29tbWVudHMpKSA+IDApIHsKKy0JCWZvciAoaSA9IDA7IGkgPCBua2V5 czsgaSsrKSB7CistCQkJaWYgKG5faWRzID49IFNTSF9NQVhfSURFTlRJVFlfRklMRVMpIHsKKy0J CQkJc3Noa2V5X2ZyZWUoa2V5c1tpXSk7CistCQkJCWZyZWUoY29tbWVudHNbaV0pOworLQkJCQlj b250aW51ZTsKKy0JCQl9CistCQkJaWRlbnRpdHlfa2V5c1tuX2lkc10gPSBrZXlzW2ldOworLQkJ CWlkZW50aXR5X2ZpbGVzW25faWRzXSA9IGNvbW1lbnRzW2ldOyAvKiB0cmFuc2ZlcnJlZCAqLwor LQkJCW5faWRzKys7CistCQl9CistCQlmcmVlKGtleXMpOworLQkJZnJlZShjb21tZW50cyk7Cisr CS8qIGhhbmRsZSBmYWxsYmFjayBmcm9tIFBLQ1MxMVByb3ZpZGVyIG9wdGlvbiAqLworKwlwa2Nz MTFfaW5pdCghb3B0aW9ucy5iYXRjaF9tb2RlKTsKKysKKysJaWYgKG9wdGlvbnMucGtjczExX3By b3ZpZGVyICE9IE5VTEwpIHsKKysJCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7CisrCisrCQl1cmkg PSBwa2NzMTFfdXJpX2luaXQoKTsKKysJCWlmICh1cmkgPT0gTlVMTCkKKysJCQlmYXRhbCgiRmFp bGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKKysKKysJCS8qIENvbnN0cnVjdCBzaW1wbGUgUEtD UyMxMSBVUkkgdG8gc2ltcGxpZnkgYWNjZXNzICovCisrCQl1cmktPm1vZHVsZV9wYXRoID0gc3Ry ZHVwKG9wdGlvbnMucGtjczExX3Byb3ZpZGVyKTsKKysKKysJCS8qIEFkZCBpdCBhcyBhbnkgb3Ro ZXIgSWRlbnRpdHlGaWxlICovCisrCQljcCA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisrCQlhZGRf aWRlbnRpdHlfZmlsZSgmb3B0aW9ucywgTlVMTCwgY3AsIDEpOworKwkJZnJlZShjcCk7CisrCisr CQlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKKyAJfQorICNlbmRpZiAvKiBFTkFCTEVfUEtDUzEx ICovCisgCWZvciAoaSA9IDA7IGkgPCBvcHRpb25zLm51bV9pZGVudGl0eV9maWxlczsgaSsrKSB7 CisrCQljaGFyICpuYW1lID0gb3B0aW9ucy5pZGVudGl0eV9maWxlc1tpXTsKKyAJCWlmIChuX2lk cyA+PSBTU0hfTUFYX0lERU5USVRZX0ZJTEVTIHx8CistCQkgICAgc3RyY2FzZWNtcChvcHRpb25z LmlkZW50aXR5X2ZpbGVzW2ldLCAibm9uZSIpID09IDApIHsKKysJCSAgICBzdHJjYXNlY21wKG5h bWUsICJub25lIikgPT0gMCkgeworIAkJCWZyZWUob3B0aW9ucy5pZGVudGl0eV9maWxlc1tpXSk7 CisgCQkJb3B0aW9ucy5pZGVudGl0eV9maWxlc1tpXSA9IE5VTEw7CisgCQkJY29udGludWU7Cisg CQl9CistCQljcCA9IHRpbGRlX2V4cGFuZF9maWxlbmFtZShvcHRpb25zLmlkZW50aXR5X2ZpbGVz W2ldLCBnZXR1aWQoKSk7CisrI2lmZGVmIEVOQUJMRV9QS0NTMTEKKysJCWlmIChzdHJsZW4obmFt ZSkgPj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgorKwkJICAgIHN0cm5jbXAobmFtZSwg UEtDUzExX1VSSV9TQ0hFTUUsCisrCQkgICAgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0g MCkgeworKwkJCWxvYWRfcGtjczExX2lkZW50aXR5KG5hbWUsIGlkZW50aXR5X2ZpbGVzLAorKwkJ CSAgICBpZGVudGl0eV9rZXlzLCAmbl9pZHMpOworKwkJCWZyZWUob3B0aW9ucy5pZGVudGl0eV9m aWxlc1tpXSk7CisrCQkJY29udGludWU7CisrCQl9CisrI2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEg Ki8KKysJCWNwID0gdGlsZGVfZXhwYW5kX2ZpbGVuYW1lKG5hbWUsIGdldHVpZCgpKTsKKyAJCWZp bGVuYW1lID0gZGVmYXVsdF9jbGllbnRfcGVyY2VudF9kb2xsYXJfZXhwYW5kKGNwLCBjaW5mbyk7 CisgCQlmcmVlKGNwKTsKKyAJCWNoZWNrX2xvYWQoc3Noa2V5X2xvYWRfcHVibGljKGZpbGVuYW1l LCAmcHVibGljLCBOVUxMKSwKK2RpZmYgLS1naXQgYS9zc2hfY29uZmlnLjUgYi9zc2hfY29uZmln LjUKK2luZGV4IGYyZmY4NTg1Yy4uZjE2ZWI2MWVhIDEwMDY0NAorLS0tIGEvc3NoX2NvbmZpZy41 CisrKysgYi9zc2hfY29uZmlnLjUKK0BAIC0xMzA0LDYgKzEzMDQsMjEgQEAgbWF5IGFsc28gYmUg dXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgLkNtIENlcnRpZmljYXRlRmlsZQorIGluIG9yZGVy IHRvIHByb3ZpZGUgYW55IGNlcnRpZmljYXRlIGFsc28gbmVlZGVkIGZvciBhdXRoZW50aWNhdGlv biB3aXRoCisgdGhlIGlkZW50aXR5LgorKy5QcAorK1RoZSBhdXRoZW50aWNhdGlvbiBpZGVudGl0 eSBjYW4gYmUgYWxzbyBzcGVjaWZpZWQgaW4gYSBmb3JtIG9mIFBLQ1MjMTEgVVJJCisrc3RhcnRp bmcgd2l0aCBhIHN0cmluZworKy5DbSBwa2NzMTE6IC4KKytUaGVyZSBpcyBzdXBwb3J0ZWQgYSBz dWJzZXQgb2YgdGhlIFBLQ1MjMTEgVVJJIGFzIGRlZmluZWQKKytpbiBSRkMgNzUxMiAoaW1wbGVt ZW50ZWQgcGF0aCBhcmd1bWVudHMKKysuQ20gaWQgLAorKy5DbSBtYW51ZmFjdHVyZXIgLAorKy5D bSBvYmplY3QgLAorKy5DbSB0b2tlbgorK2FuZCBxdWVyeSBhcmd1bWVudHMKKysuQ20gbW9kdWxl LXBhdGgKKythbmQKKysuQ20gcGluLXZhbHVlCisrKS4gVGhlIFVSSSBjYW4gbm90IGJlIGluIHF1 b3Rlcy4KKyAuSXQgQ20gSWdub3JlVW5rbm93bgorIFNwZWNpZmllcyBhIHBhdHRlcm4tbGlzdCBv ZiB1bmtub3duIG9wdGlvbnMgdG8gYmUgaWdub3JlZCBpZiB0aGV5IGFyZQorIGVuY291bnRlcmVk IGluIGNvbmZpZ3VyYXRpb24gcGFyc2luZy4KK2RpZmYgLS1naXQgYS9zc2hrZXkuYyBiL3NzaGtl eS5jCitpbmRleCAyMzgwYzgwODEuLjA4NGZmM2I1NSAxMDA2NDQKKy0tLSBhL3NzaGtleS5jCisr KysgYi9zc2hrZXkuYworQEAgLTg1Miw4ICs4NTIsMTAgQEAgc3Noa2V5X2ZyZWVfY29udGVudHMo c3RydWN0IHNzaGtleSAqaykKKyAKKyAJaWYgKGsgPT0gTlVMTCkKKyAJCXJldHVybjsKKysjaWZk ZWYgRU5BQkxFX1BLQ1MxMQorIAlpZiAoKGstPmZsYWdzICYgU1NIS0VZX0ZMQUdfRVhUKSAhPSAw KQorIAkJcGtjczExX2tleV9mcmVlKGspOworKyNlbmRpZgorIAlpZiAoKGltcGwgPSBzc2hrZXlf aW1wbF9mcm9tX3R5cGUoay0+dHlwZSkpICE9IE5VTEwgJiYKKyAJICAgIGltcGwtPmZ1bmNzLT5j bGVhbnVwICE9IE5VTEwpCisgCQlpbXBsLT5mdW5jcy0+Y2xlYW51cChrKTsKK0BAIC0yMzAwLDkg KzIzMDIsMTEgQEAgc3Noa2V5X3NpZ24oc3RydWN0IHNzaGtleSAqa2V5LAorIAlpZiAoc3Noa2V5 X2lzX3NrKGtleSkpIHsKKyAJCXIgPSBzc2hza19zaWduKHNrX3Byb3ZpZGVyLCBrZXksIHNpZ3As IGxlbnAsIGRhdGEsCisgCQkgICAgZGF0YWxlbiwgY29tcGF0LCBza19waW4pOworKyNpZmRlZiBF TkFCTEVfUEtDUzExCisgCX0gZWxzZSBpZiAoKGtleS0+ZmxhZ3MgJiBTU0hLRVlfRkxBR19FWFQp ICE9IDApIHsKKyAJCXIgPSBwa2NzMTFfc2lnbihrZXksIHNpZ3AsIGxlbnAsIGRhdGEsIGRhdGFs ZW4sCisgCQkgICAgYWxnLCBza19wcm92aWRlciwgc2tfcGluLCBjb21wYXQpOworKyNlbmRpZgor IAl9IGVsc2UgeworIAkJaWYgKGltcGwtPmZ1bmNzLT5zaWduID09IE5VTEwpCisgCQkJciA9IFNT SF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7CistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEv MDA1My1nc3NhcGktdGVzdHMucGF0Y2ggYi8wMDUzLWdzc2FwaS10ZXN0cy5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZhNzg0Ci0tLSAvZGV2L251bGwKKysrIGIv MDA1My1nc3NhcGktdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMzAgQEAKK0Zyb20gOTBmNDdmMzdh YTFiMTZkMjAzOWYzZWQxYTM3YWI0MThiZTA5YTJlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwg MTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA1My81M10gZ3NzYXBp LXRlc3RzCisKKy0tLQorIHJlZ3Jlc3MvTWFrZWZpbGUgICB8ICAgMSArCisgcmVncmVzcy9nc3Mt a2V4LnNoIHwgMTk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KworIDIgZmlsZXMgY2hhbmdlZCwgMTk5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2 NDQgcmVncmVzcy9nc3Mta2V4LnNoCisKK2RpZmYgLS1naXQgYS9yZWdyZXNzL01ha2VmaWxlIGIv cmVncmVzcy9NYWtlZmlsZQoraW5kZXggNDkyMTEyZTgwLi4yMDExZjg3YTcgMTAwNjQ0CistLS0g YS9yZWdyZXNzL01ha2VmaWxlCisrKysgYi9yZWdyZXNzL01ha2VmaWxlCitAQCAtMTI3LDYgKzEy Nyw3IEBAIElOVEVST1BfVEVTVFMrPQlkcm9wYmVhci1jaXBoZXJzIGRyb3BiZWFyLWtleCBkcm9w YmVhci1zZXJ2ZXIKKyAjSU5URVJPUF9URVNUUys9c3NoLWNvbSBzc2gtY29tLWNsaWVudCBzc2gt Y29tLWtleWdlbiBzc2gtY29tLXNmdHAKKyAKKyBFWFRSQV9URVNUUz0JYWdlbnQtcGtjczExCisr RVhUUkFfVEVTVFMrPQlnc3MtYXV0aCBnc3Mta2V4CisgI0VYVFJBX1RFU1RTKz0gCWNpcGhlci1z cGVlZAorIAorIFVTRVJOQU1FPQkJJHtMT0dOQU1FfQorZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvZ3Nz LWtleC5zaCBiL3JlZ3Jlc3MvZ3NzLWtleC5zaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4 IDAwMDAwMDAwMC4uNjNiMmUxNzhiCistLS0gL2Rldi9udWxsCisrKysgYi9yZWdyZXNzL2dzcy1r ZXguc2gKK0BAIC0wLDAgKzEsMTk4IEBACisrdGlkPSJHU1MtQVBJIEtleSBFeGNoYW5nZSIKKysK KysjIFNraXAgdGhlIHRlc3QgaWYgR1NTQVBJIHN1cHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQKKytp ZiAhIGdyZXAgLUUgJ14jZGVmaW5lIEdTU0FQSScgIiRCVUlMRERJUi9jb25maWcuaCIgPi9kZXYv bnVsbCAyPiYxOyB0aGVuCisrICAgIHNraXAgIkdTU0FQSSBub3QgZW5hYmxlZCIKKytmaQorKwor KyMgV2UgdGVzdCB3aXRoIE1JVCBLZXJiZXJvcyBLREMsIHNraXAgaWYgbm90IGluc3RhbGxlZAor K2lmICEgd2hpY2gga3JiNWtkYyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgc2tpcCAiTUlU IEtlcmJlcm9zIEtEQyBub3QgaW5zdGFsbGVkIgorK2ZpCisrCisrIyBUaGUgdGVzdCBuZWVkcyBu c3Nfd3JhcHBlciB0byBlbXVsYXRlIGdldGhvc3RuYW1lKCkgYW5kIC9ldGMvaG9zdHMsCisrIyB3 ZSBza2lwIGlmIHRoZSBzaGFyZWQgbGlicmFyeSBpcyBub3QgaW5zdGFsbGVkCisrbnNzX3dyYXBw ZXI9ImxpYm5zc193cmFwcGVyLnNvIgorK2lmICEgbGRjb25maWcgLXAgfCBncmVwICIkbnNzX3dy YXBwZXIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBza2lwICIkbnNzX3dyYXBwZXIgbm90 IGluc3RhbGxlZCIKKytmaQorKworKyMgU2V0IHVwIHRoZSB1c2VybmFtZSBvZiB0aGUgU1NIIGNs aWVudAorK2NsaWVudD0iJExPR05BTUUiCisraWYgWyAieCRjbGllbnQiID0gIngiIF07IHRoZW4K KysJY2xpZW50PSIkKHdob2FtaSkiCisrZmkKKysKKysjIFNldCB1cCBTU0hEIGFuZCBLREMgaG9z dG5hbWVzIGFuZCByZXNvbHZlIGJvdGggdG8gbG9jYWxob3N0Cisrc3NoZF9ob3N0bmFtZT0ic3No ZC5leGFtcGxlLm9yZyIKKytrZGNfaG9zdG5hbWU9ImtkYy5leGFtcGxlLm9yZyIKKytrZGNfcG9y dD0yMDg4CisraG9zdHM9IiRPQkovaG9zdHMiCisrZWNobyAiMTI3LjAuMC4xICRzc2hkX2hvc3Ru YW1lICRrZGNfaG9zdG5hbWUiID4gIiRob3N0cyIKKysKKysjIFNldCB1cCBhIGRpcmVjdG9yeSB0 byBzdG9yZSBLZXJiZXJvcyBkYXRhCisrZ3NzZGlyPSIkT0JKL2dzcyIKKytta2RpciAtcCAiJGdz c2RpciIKKytleHBvcnQgS1JCNUNDTkFNRT0iJGdzc2Rpci9jYyIKKytleHBvcnQgS1JCNV9DT05G SUc9IiRnc3NkaXIva3JiNS5jb25mIgorK2V4cG9ydCBLUkI1X0tEQ19QUk9GSUxFPSIkZ3NzZGly L2tkYy5jb25mIgorK2V4cG9ydCBLUkI1X0tUTkFNRT0iJGdzc2Rpci9zc2gua2V5dGFiIgorK2V4 cG9ydCBLUkI1UkNBQ0hFVFlQRT0ibm9uZSIKKytrZGNfcGlkZmlsZT0iJGdzc2Rpci9waWQiCisr CisrIyBDb25maWd1cmUgS2VyYmVyb3MKKytjYXQ8PEVPRiA+ICIkS1JCNV9LRENfUFJPRklMRSIK KytbcmVhbG1zXQorKyAgICBFWEFNUExFLk9SRyA9IHsKKysgICAgICAgIGRhdGFiYXNlX25hbWUg PSAkZ3NzZGlyL3ByaW5jaXBhbAorKyAgICAgICAga2V5X3N0YXNoX2ZpbGUgPSAkZ3NzZGlyL3N0 YXNoCisrICAgICAgICBrZGNfbGlzdGVuID0gJGtkY19ob3N0bmFtZToka2RjX3BvcnQKKysgICAg ICAgIGtkY190Y3BfbGlzdGVuID0gJGtkY19ob3N0bmFtZToka2RjX3BvcnQKKysgICAgfQorK1ts b2dnaW5nXQorKyAgICBrZGMgPSBGSUxFOiRnc3NkaXIva2RjLmxvZworKyAgICBkZWJ1ZyA9IHRy dWUKKytFT0YKKysKKytjYXQ8PEVPRiA+ICIkS1JCNV9DT05GSUciCisrW2xpYmRlZmF1bHRzXQor KyAgICBkZWZhdWx0X3JlYWxtID0gRVhBTVBMRS5PUkcKKytbcmVhbG1zXQorKyAgICBFWEFNUExF Lk9SRyA9IHsKKysgICAgICAgIGtkYyA9ICRrZGNfaG9zdG5hbWU6JGtkY19wb3J0CisrICAgIH0K KytFT0YKKysKKysjIEJhY2sgdXAgdGhlIGRlZmF1bHQgc3NoZF9jb25maWcKKytjcCAiJE9CSi9z c2hkX2NvbmZpZyIgIiRPQkovc3NoZF9jb25maWcub3JpZyIKKysKKytzZXR1cF9zc2hkKCkgewor KyAgICBrZXhfYWxnPSIkMSIKKysKKysgICAgY3AgIiRPQkovc3NoZF9jb25maWcub3JpZyIgIiRP Qkovc3NoZF9jb25maWciCisrCisrICAgIGNhdDw8RU9GID4+ICIkT0JKL3NzaGRfY29uZmlnIgor K1B1YmtleUF1dGhlbnRpY2F0aW9uIG5vCisrUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBubworK0dT U0FQSUF1dGhlbnRpY2F0aW9uIHllcworK0dTU0FQSUtleUV4Y2hhbmdlIHllcworK0dTU0FQSUtl eEFsZ29yaXRobXMgJGtleF9hbGcKKytHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrIG5vCisrRU9G CisrCisrICAgIHRlc3Rfc3NoX3NzaGRfZW52X2JhY2t1cD0iJFRFU1RfU1NIX1NTSERfRU5WIgor KyAgICBURVNUX1NTSF9TU0hEX0VOVj0iJFRFU1RfU1NIX1NTSERfRU5WICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgTERfUFJFTE9BRD0kbnNzX3dyYXBwZXIgICAg ICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgTlNTX1dSQVBQRVJfSE9TVFM9JGhv c3RzICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgTlNTX1dSQVBQRVJfSE9T VE5BTUU9JHNzaGRfaG9zdG5hbWUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9DT05G SUc9JEtSQjVfQ09ORklHICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgS1JC NV9LRENfUFJPRklMRT0kS1JCNV9LRENfUFJPRklMRSAgXAorKyAgICAgICAgICAgICAgICAgICAg ICAgS1JCNUNDTkFNRT0kS1JCNUNDTkFNRSAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAg ICAgICAgICAgS1JCNV9LVE5BTUU9JEtSQjVfS1ROQU1FICAgICAgICAgICAgXAorKyAgICAgICAg ICAgICAgICAgICAgICAgS1JCNVJDQUNIRVRZUEU9JEtSQjVSQ0FDSEVUWVBFIgorKyAgICBzdGFy dF9zc2hkCisrfQorKworK3RlYXJkb3duX3NzaGQoKSB7CisrICAgIFRFU1RfU1NIX1NTSERfRU5W PSIkdGVzdF9zc2hfc3NoZF9lbnZfYmFja3VwIgorKyAgICBzdG9wX3NzaGQKKyt9CisrCisrc2V0 dXBfa2RjKCkgeworKyAgICBrZGI1X3V0aWwgY3JlYXRlIC1QICJmb28iIC1zCisrICAgIGtyYjVr ZGMgLXcgMSAtUCAiJGtkY19waWRmaWxlIgorKyAgICBpPTA7CisrICAgIHdoaWxlIFsgISAtZiAi JGtkY19waWRmaWxlIiAtYSAkaSAtbHQgMTAgXTsgZG8KKysgICAgICAgIGk9JCgoaSArIDEpKQor KyAgICAgICAgc2xlZXAgMQorKyAgICBkb25lCisrICAgIHRlc3QgLWYgIiRrZGNfcGlkZmlsZSIg fHwgZmF0YWwgIktEQyBmYWlsZWQgdG8gc3RhcnQiCisrfQorKworK3RlYXJkb3duX2tkYygpIHsK KysgICAga2lsbCAiJChjYXQgIiRrZGNfcGlkZmlsZSIpIgorKyAgICBrZGVzdHJveQorKyAgICBy bSAtZiAiJEtSQjVfS1ROQU1FIiAiJGtkY19waWRmaWxlIgorKyAgICBrZGI1X3V0aWwgZGVzdHJv eSAtZgorK30KKysKKytzZXR1cF9uc3NfZW11bGF0aW9uKCkgeworKyAgICBleHBvcnQgTERfUFJF TE9BRD0iJG5zc193cmFwcGVyIgorKyAgICBleHBvcnQgTlNTX1dSQVBQRVJfSE9TVFM9IiRob3N0 cyIKKyt9CisrCisrdGVhcmRvd25fbnNzX2VtdWxhdGlvbigpIHsKKysgICAgdW5zZXQgTERfUFJF TE9BRAorKyAgICB1bnNldCBOU1NfV1JBUFBFUl9IT1NUUworK30KKysKKyt0ZXN0X2dzc19rZXgo KSB7CisrICAgIGtleF9mYW1pbHk9IiQxIgorKyAgICBhdXRoX3NzaGQ9IiQyIgorKyAgICBleHBl Y3Q9IiQzIgorKworKyAgICAjIENoZWNrIGlmIHRoZSBhbGdvcml0aG0gZmFtaWx5IGlzIHJlY29n bml6ZWQgYnkgc3NoCisrICAgIGlmICEgJHtSRUFMX1NTSH0gLUcgLUYgIiRPQkovc3NoX2NvbmZp ZyIgXAorKyAgICAgICAgLW8gIkdTU0FQSUtleUV4Y2hhbmdlIHllcyIgXAorKyAgICAgICAgLW8g IkdTU0FQSUtleEFsZ29yaXRobXMgJGtleF9mYW1pbHkiIFwKKysgICAgICAgICIkY2xpZW50QCRz c2hkX2hvc3RuYW1lIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICAgIHZlcmJvc2UgImdz cyBrZXggJGtleF9mYW1pbHkgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmciCisrICAgICAgICByZXR1 cm4gMAorKyAgICBmaQorKworKyAgICBzZXR1cF9zc2hkICIka2V4X2ZhbWlseSIKKysgICAgc2V0 dXBfbnNzX2VtdWxhdGlvbgorKyAgICBzZXR1cF9rZGMKKysKKysgICAga2FkbWluLmxvY2FsIGFk ZF9wcmluY2lwYWwgLXJhbmRrZXkgImhvc3QvJHNzaGRfaG9zdG5hbWUiCisrICAgIGlmICRhdXRo X3NzaGQ7IHRoZW4KKysgICAgICAgIGthZG1pbi5sb2NhbCBrdGFkZCAiaG9zdC8kc3NoZF9ob3N0 bmFtZSIKKysgICAgZmkKKysgICAga2FkbWluLmxvY2FsIGFkZF9wcmluY2lwYWwgLXB3ICJmb28i ICIkY2xpZW50IgorKyAgICBlY2hvICJmb28iIHwga2luaXQgIiRjbGllbnQiCisrCisrICAgICR7 U1NIfSAtRiAiJE9CSi9zc2hfY29uZmlnIiBcCisrICAgICAgICAtbyAiR1NTQVBJQXV0aGVudGlj YXRpb24geWVzIiBcCisrICAgICAgICAtbyAiR1NTQVBJS2V5RXhjaGFuZ2UgeWVzIiBcCisrICAg ICAgICAtbyAiR1NTQVBJS2V4QWxnb3JpdGhtcyAka2V4X2ZhbWlseSIgXAorKyAgICAgICAgLW8g IkdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMgbm8iIFwKKysgICAgICAgICIkY2xpZW50QCRzc2hk X2hvc3RuYW1lIiB0cnVlCisrICAgIHN0YXR1cz0kPworKworKyAgICB0ZWFyZG93bl9rZGMKKysg ICAgdGVhcmRvd25fbnNzX2VtdWxhdGlvbgorKyAgICB0ZWFyZG93bl9zc2hkCisrCisrICAgIFsg JHN0YXR1cyAtZXEgJGV4cGVjdCBdCisrfQorKworKyMgR1NTIGtleCBmYW1pbHkgcHJlZml4ZXMg dG8gdGVzdC4KKysjIEdTU0FQSUtleEFsZ29yaXRobXMgYWNjZXB0cyB0aGVzZSBwcmVmaXhlczsg dGhlIGZ1bGwgYWxnb3JpdGhtIG5hbWVzCisrIyAocHJlZml4ICsgQmFzZTY0KE1ENShPSUQpKSkg YXJlIGNvbnN0cnVjdGVkIGR1cmluZyBuZWdvdGlhdGlvbi4KKytnc3Nfa2V4X2ZhbWlsaWVzPSIK KysgICAgZ3NzLWdyb3VwMTQtc2hhMjU2LQorKyAgICBnc3MtZ3JvdXAxNi1zaGE1MTItCisrICAg IGdzcy1uaXN0cDI1Ni1zaGEyNTYtCisrICAgIGdzcy1jdXJ2ZTI1NTE5LXNoYTI1Ni0KKysgICAg Z3NzLWdyb3VwMTQtc2hhMS0KKysgICAgZ3NzLWdleC1zaGExLQorKyIKKysKKysjIFBvc2l0aXZl IHRlc3RzOiBlYWNoIEdTUyBrZXggYWxnb3JpdGhtIGNvbm5lY3RzIHN1Y2Nlc3NmdWxseQorK2Zv ciBrZXhfZmFtaWx5IGluICRnc3Nfa2V4X2ZhbWlsaWVzOyBkbworKyAgICB2ZXJib3NlICJnc3Mg a2V4ICRrZXhfZmFtaWx5IgorKyAgICB0ZXN0X2dzc19rZXggIiRrZXhfZmFtaWx5IiB0cnVlIDAg XAorKyAgICAgICAgfHwgZmFpbCAiZ3NzIGtleCAka2V4X2ZhbWlseSBmYWlsZWQiCisrZG9uZQor KworKyMgTmVnYXRpdmUgdGVzdDogY29ubmVjdGlvbiBtdXN0IGZhaWwgd2hlbiBrZXl0YWIgaXMg bWlzc2luZworK3ZlcmJvc2UgImdzcyBrZXggbmVnYXRpdmUgdGVzdDogbm8ga2V5dGFiIgorK3Rl c3RfZ3NzX2tleCAiZ3NzLWdyb3VwMTQtc2hhMjU2LSIgZmFsc2UgMjU1IFwKKysgICAgfHwgZmFp bCAiZ3NzIGtleCBzdWNjZWVkZWQgd2l0aG91dCBrZXl0YWIiCisrCisrdW5zZXQgS1JCNUNDTkFN RQorK3Vuc2V0IEtSQjVfQ09ORklHCisrdW5zZXQgS1JCNV9LRENfUFJPRklMRQorK3Vuc2V0IEtS QjVfS1ROQU1FCisrdW5zZXQgS1JCNVJDQUNIRVRZUEUKKytybSAtcmYgIiRnc3NkaXIiCistLSAK KzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMDA1My1vcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBh dGNoIGIvMDA1My1vcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBhdGNoCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBjYmFlYWYzLi4wMDAwMDAwCi0tLSBhLzAwNTMtb3BlbnNzaC0xMC4y cDEtcGtjczExLXVyaS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM0MTAgKzAsMCBAQAotRnJv bSA1MGE0YTRhZGRlMGZmOTY1YWZlMzRkYmMwNTk5OTZkODZkNGZjZmM2IE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgot RGF0ZTogTW9uLCAxNSBEZWMgMjAyNSAxNDoyNDowNyArMDEwMAotU3ViamVjdDogW1BBVENIIDUz LzU0XSBvcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpCi0KLS0tLQotIE1ha2VmaWxlLmluICAgICAg ICAgICAgICAgICAgICAgIHwgIDI2ICstCi0gY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAg ICAgfCAgMzcgKysKLSByZWdyZXNzL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgNSArLQot IHJlZ3Jlc3MvcGtjczExLXVyaS5zaCAgICAgICAgICAgIHwgNDEwICsrKysrKysrKysrKysrKysK LSByZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZSAgICAgICB8ICAgMiArLQotIHJlZ3Jlc3MvdW5p dHRlc3RzL3BrY3MxMS90ZXN0cy5jIHwgMzUzICsrKysrKysrKysrKysrCi0gc3NoLWFkZC5jICAg ICAgICAgICAgICAgICAgICAgICAgfCAgNDggKy0KLSBzc2gtYWdlbnQuYyAgICAgICAgICAgICAg ICAgICAgICB8IDExNyArKysrLQotIHNzaC1rZXlnZW4uYyAgICAgICAgICAgICAgICAgICAgIHwg ICA3ICstCi0gc3NoLXBrY3MxMS1jbGllbnQuYyAgICAgICAgICAgICAgfCAgMTkgKwotIHNzaC1w a2NzMTEtdXJpLmMgICAgICAgICAgICAgICAgIHwgNDM4ICsrKysrKysrKysrKysrKysrKwotIHNz aC1wa2NzMTEtdXJpLmggICAgICAgICAgICAgICAgIHwgIDQ2ICsrCi0gc3NoLXBrY3MxMS5jICAg ICAgICAgICAgICAgICAgICAgfCA3NzEgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQot IHNzaC1wa2NzMTEuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKLSBzc2guYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDEwNCArKysrLQotIHNzaF9jb25maWcuNSAgICAgICAgICAg ICAgICAgICAgIHwgIDE1ICsKLSBzc2hrZXkuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NCArCi0gMTcgZmlsZXMgY2hhbmdlZCwgMjEzMyBpbnNlcnRpb25zKCspLCAyNzMgZGVsZXRpb25z KC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHJlZ3Jlc3MvcGtjczExLXVyaS5zaAotIGNyZWF0ZSBt b2RlIDEwMDY0NCByZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdHMuYwotIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzc2gtcGtjczExLXVyaS5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNzaC1wa2NzMTEt dXJpLmgKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IGY4 MGM5NTg0Ni4uYzNjOGRhODYzIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuaW4KLSsrKyBiL01ha2Vm aWxlLmluCi1AQCAtMTEyLDEyICsxMTIsMTIgQEAgTElCU1NIX09CSlM9JHtMSUJPUEVOU1NIX09C SlN9IFwKLSAJc2Z0cC1yZWFscGF0aC5vIHBsYXRmb3JtLXBsZWRnZS5vIHBsYXRmb3JtLXRyYWNp bmcubyBwbGF0Zm9ybS1taXNjLm8gXAotIAlzc2hidWYtaW8ubyBtaXNjLWFnZW50Lm8gc3NoZXJy LWxpYmNyeXB0by5vIGF1ZGl0c3R1Yi5vCi0gCi0tUDExT0JKUz0gc3NoLXBrY3MxMS1jbGllbnQu bwotK1AxMU9CSlM9IHNzaC1wa2NzMTEtY2xpZW50Lm8gc3NoLXBrY3MxMS11cmkubwotIAotIFNL T0JKUz0Jc3NoLXNrLWNsaWVudC5vCi0gCi0gU1NIT0JKUz0gc3NoLm8gcmVhZGNvbmYubyBjbGll bnRsb29wLm8gc3NodHR5Lm8gXAotLQlzc2hjb25uZWN0Lm8gc3NoY29ubmVjdDIubyBtdXgubyBz c2gtcGtjczExLm8gJChTS09CSlMpCi0rCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5vIG11eC5v IHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQotIAotIFNTSERPQkpTPXNz aGQubyBcCi0gCXBsYXRmb3JtLWxpc3Rlbi5vIFwKLUBAIC0xNjEsMTEgKzE2MSwxMSBAQCBTU0hB RERfT0JKUz0Jc3NoLWFkZC5vICQoUDExT0JKUykgJChTS09CSlMpCi0gCi0gU1NIQUdFTlRfT0JK Uz0Jc3NoLWFnZW50Lm8gJChQMTFPQkpTKSAkKFNLT0JKUykKLSAKLS1TU0hLRVlHRU5fT0JKUz0J c3NoLWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEubyAkKFNLT0JKUykKLStTU0hLRVlHRU5f T0JKUz0Jc3NoLWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5v ICQoU0tPQkpTKQotIAotIFNTSEtFWVNJR05fT0JKUz1zc2gta2V5c2lnbi5vIHJlYWRjb25mLm8g dWlkc3dhcC5vICQoUDExT0JKUykgJChTS09CSlMpCi0gCi0tUDExSEVMUEVSX09CSlM9CXNzaC1w a2NzMTEtaGVscGVyLm8gc3NoLXBrY3MxMS5vICQoU0tPQkpTKQotK1AxMUhFTFBFUl9PQkpTPQlz c2gtcGtjczExLWhlbHBlci5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpT KQotIAotIFNLSEVMUEVSX09CSlM9CXNzaC1zay1oZWxwZXIubyBzc2gtc2subyBzay11c2JoaWQu byBzc2hlcnItbm9saWJjcnlwdG8ubwotIAotQEAgLTMzMSw2ICszMzEsOCBAQCBjbGVhbjoJcmVn cmVzc2NsZWFuCi0gCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3NzaHNpZy90ZXN0X3NzaHNpZyQo RVhFRVhUKQotIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4LyoubwotIAlybSAtZiByZWdy ZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKQotKwlybSAtZiByZWdyZXNzL3Vu aXR0ZXN0cy9wa2NzMTEvKi5vCi0rCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0 X3BrY3MxMSQoRVhFRVhUKQotIAlybSAtZiByZWdyZXNzL21pc2Mvc2stZHVtbXkvKi5vCi0gCXJt IC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8qLmxvCi0gCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zc2gt dmVyaWZ5LWF0dGVzdGF0aW9uL3NzaC12ZXJpZnktYXR0ZXN0YXRpb24kKEVYRUVYVCkKLUBAIC0z NzAsNiArMzcyLDggQEAgZGlzdGNsZWFuOglyZWdyZXNzY2xlYW4KLSAJcm0gLWYgcmVncmVzcy91 bml0dGVzdHMvc3Noc2lnL3Rlc3Rfc3Noc2lnCi0gCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3V0 ZjgvKi5vCi0gCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3V0ZjgvdGVzdF91dGY4Ci0rCXJtIC1m IHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS8qLm8KLSsJcm0gLWYgcmVncmVzcy91bml0dGVzdHMv cGtjczExL3Rlc3RfcGtjczExCi0gCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8qLm8KLSAJ cm0gLWYgcmVncmVzcy9taXNjL3NrLWR1bW15LyoubG8KLSAJcm0gLWYgcmVncmVzcy9taXNjL3Nr LWR1bW15L3NrLWR1bW15LnNvCi1AQCAtNTUwLDYgKzU1NCw3IEBAIHJlZ3Jlc3MtcHJlcDoKLSAJ JChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkKLSAJJChNS0RJUl9QKSBg cHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hzaWcKLSAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNz L3VuaXR0ZXN0cy91dGY4Ci0rCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy91bml0dGVzdHMvcGtj czExCi0gCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy9taXNjL3NrLWR1bW15Ci0gCSQoTUtESVJf UCkgYHB3ZGAvcmVncmVzcy9taXNjL3NzaC12ZXJpZnktYXR0ZXN0YXRpb24KLSAJWyAtZiBgcHdk YC9yZWdyZXNzL01ha2VmaWxlIF0gfHwgXAotQEAgLTcyNSw2ICs3MzAsMTYgQEAgcmVncmVzcy91 bml0dGVzdHMvdXRmOC90ZXN0X3V0ZjgkKEVYRUVYVCk6IFwKLSAJICAgIHJlZ3Jlc3MvdW5pdHRl c3RzL3Rlc3RfaGVscGVyL2xpYnRlc3RfaGVscGVyLmEgXAotIAkgICAgLWxzc2ggLWxvcGVuYnNk LWNvbXBhdCAtbHNzaCAtbG9wZW5ic2QtY29tcGF0ICQoVEVTVExJQlMpCi0gCi0rVU5JVFRFU1RT X1RFU1RfUEtDUzExX09CSlM9XAotKwlyZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdHMubwot KwotK3JlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0X3BrY3MxMSQoRVhFRVhUKTogXAotKyAg ICAke1VOSVRURVNUU19URVNUX1BLQ1MxMV9PQkpTfSBzc2gtcGtjczExLXVyaS5vIFwKLSsgICAg cmVncmVzcy91bml0dGVzdHMvdGVzdF9oZWxwZXIvbGlidGVzdF9oZWxwZXIuYSBsaWJzc2guYQot KwkkKExEKSAtbyAkQCAkKExERkxBR1MpICQoVU5JVFRFU1RTX1RFU1RfUEtDUzExX09CSlMpIFwK LSsJICAgIHJlZ3Jlc3MvdW5pdHRlc3RzL3Rlc3RfaGVscGVyL2xpYnRlc3RfaGVscGVyLmEgXAot KwkgICAgc3NoLXBrY3MxMS11cmkubyAtbHNzaCAtbG9wZW5ic2QtY29tcGF0IC1sY3J5cHRvICQo TElCUykgLWxtCi0rCi0gIyBUaGVzZSBhbGwgbmVlZCB0byBiZSBjb21waWxlZCAtZlBJQywgc28g dGhleSBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4KLSBTS19EVU1NWV9PQkpTPVwKLSAJcmVncmVz cy9taXNjL3NrLWR1bW15L3NrLWR1bW15LmxvIFwKLUBAIC03NzAsNyArNzg1LDggQEAgcmVncmVz cy11bml0LWJpbmFyaWVzOiByZWdyZXNzLXByZXAgJChSRUdSRVNTTElCUykgXAotIAlyZWdyZXNz L3VuaXR0ZXN0cy9zc2hidWYvdGVzdF9zc2hidWYkKEVYRUVYVCkgXAotIAlyZWdyZXNzL3VuaXR0 ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkkKEVYRUVYVCkgXAotIAlyZWdyZXNzL3VuaXR0ZXN0cy9z c2hzaWcvdGVzdF9zc2hzaWckKEVYRUVYVCkgXAotLQlyZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rl c3RfdXRmOCQoRVhFRVhUKQotKwlyZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhF RVhUKSBcCi0rCXJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0X3BrY3MxMSQoRVhFRVhUKSBc Ci0gCi0gdGVzdHM6CWZpbGUtdGVzdHMgdC1leGVjIGludGVyb3AtdGVzdHMgZXh0cmEtdGVzdHMg dW5pdAotIAllY2hvIGFsbCB0ZXN0cyBwYXNzZWQKLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMg Yi9jb25maWd1cmUuYWMKLWluZGV4IDYyYjJiZjllNy4uZjU4MWE5ODAxIDEwMDY0NAotLS0tIGEv Y29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0yMzA1LDEyICsyMzA1LDE0IEBA IEFDX0xJTktfSUZFTFNFKAotIAlbQUNfREVGSU5FKFtIQVZFX0lTQkxBTktdLCBbMV0sIFtEZWZp bmUgaWYgeW91IGhhdmUgaXNibGFuaygzQykuXSkKLSBdKQotIAotK1NDQVJEX01TRz0ieWVzIgot IGRpc2FibGVfcGtjczExPQotIEFDX0FSR19FTkFCTEUoW3BrY3MxMV0sCi0gCVsgIC0tZGlzYWJs ZS1wa2NzMTEgICAgICAgIGRpc2FibGUgUEtDUyMxMSBzdXBwb3J0IGNvZGUgW25vXV0sCi0gCVsK LSAJCWlmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4bm8iIDsgdGhlbgotIAkJCWRpc2FibGVfcGtj czExPTEKLSsJCQlTQ0FSRF9NU0c9Im5vIgotIAkJZmkKLSAJXQotICkKLUBAIC0yMzQwLDYgKzIz NDIsNDAgQEAgQUNfU0VBUkNIX0xJQlMoW2Rsb3Blbl0sIFtkbF0pCi0gQUNfQ0hFQ0tfRlVOQ1Mo W2Rsb3Blbl0pCi0gQUNfQ0hFQ0tfREVDTChbUlRMRF9OT1ddLCBbXSwgW10sIFsjaW5jbHVkZSA8 ZGxmY24uaD5dKQotIAotKyMgQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgcDExLWtpdCwgd2UgZ290 IGRlZmF1bHQgcHJvdmlkZXIgb24gY29tbWFuZCBsaW5lCi0rREVGQVVMVF9QS0NTMTFfUFJPVklE RVJfTVNHPSJubyIKLStBQ19BUkdfV0lUSChbZGVmYXVsdC1wa2NzMTEtcHJvdmlkZXJdLAotKwlb ICAtLXdpdGgtZGVmYXVsdC1wa2NzMTEtcHJvdmlkZXJbWz1QQVRIXV0gICBVc2UgZGVmYXVsdCBw a2NzMTEgcHJvdmlkZXIgKHAxMS1raXQgZGV0ZWN0ZWQgYnkgZGVmYXVsdCldLAotKwlbIGlmIHRl c3QgIngkd2l0aHZhbCIgIT0gInhubyIgJiYgdGVzdCAieCRkaXNhYmxlX3BrY3MxMSIgPSAieCI7 IHRoZW4KLSsJCWlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyIgOyB0aGVuCi0rCQkJQUNfUEFU SF9UT09MKFtQS0dDT05GSUddLCBbcGtnLWNvbmZpZ10sIFtub10pCi0rCQkJaWYgdGVzdCAieCRQ S0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCi0rCQkJCUFDX01TR19DSEVDS0lORyhbaWYgJFBLR0NP TkZJRyBrbm93cyBhYm91dCBwMTEta2l0XSkKLSsJCQkJaWYgIiRQS0dDT05GSUciICJwMTEta2l0 LTEiOyB0aGVuCi0rCQkJCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQotKwkJCQkJdXNlX3BrZ2NvbmZp Z19mb3JfcDExa2l0PXllcwotKwkJCQllbHNlCi0rCQkJCQlBQ19NU0dfUkVTVUxUKFtub10pCi0r CQkJCWZpCi0rCQkJZmkKLSsJCWVsc2UKLSsJCQlQS0NTMTFfUEFUSD0iJHt3aXRodmFsfSIKLSsJ CWZpCi0rCQlpZiB0ZXN0ICJ4JHVzZV9wa2djb25maWdfZm9yX3AxMWtpdCIgPSAieHllcyI7IHRo ZW4KLSsJCQlQS0NTMTFfUEFUSD1gJFBLR0NPTkZJRyAtLXZhcmlhYmxlPXByb3h5X21vZHVsZSBw MTEta2l0LTFgCi0rCQlmaQotKwkJQUNfQ0hFQ0tfRklMRSgiJFBLQ1MxMV9QQVRIIiwKLSsJCQlb IEFDX0RFRklORV9VTlFVT1RFRChbUEtDUzExX0RFRkFVTFRfUFJPVklERVJdLCBbIiRQS0NTMTFf UEFUSCJdLCBbUGF0aCB0byBkZWZhdWx0IFBLQ1MjMTEgcHJvdmlkZXIgKHAxMS1raXQgcHJveHkp XSkKLSsJCQkgIERFRkFVTFRfUEtDUzExX1BST1ZJREVSX01TRz0iJFBLQ1MxMV9QQVRIIgotKwkJ CV0sCi0rCQkJWyBBQ19NU0dfRVJST1IoW1JlcXVlc3RlZCBQS0NTMTEgcHJvdmlkZWQgbm90IGZv dW5kXSkgXQotKwkJKQotKwllbHNlCi0rCQlBQ19NU0dfV0FSTihbTmVlZHMgUEtDUzExIHN1cHBv cnQgdG8gZW5hYmxlIGRlZmF1bHQgcGtjczExIHByb3ZpZGVyXSkKLSsJZmkgXQotKykKLSsKLSsK LSAjIElSSVggaGFzIGEgY29uc3QgY2hhciByZXR1cm4gdmFsdWUgZm9yIGdhaV9zdHJlcnJvcigp Ci0gQUNfQ0hFQ0tfRlVOQ1MoW2dhaV9zdHJlcnJvcl0sIFsKLSAJQUNfREVGSU5FKFtIQVZFX0dB SV9TVFJFUlJPUl0pCi1AQCAtNTk5MSw2ICs2MDI3LDcgQEAgZWNobyAiICAgICAgICAgICAgICAg ICAgQlNEIEF1dGggc3VwcG9ydDogJEJTRF9BVVRIX01TRyIKLSBlY2hvICIgICAgICAgICAgICAg IFJhbmRvbSBudW1iZXIgc291cmNlOiAkUkFORF9NU0ciCi0gZWNobyAiICAgICAgICAgICAgIFBy aXZzZXAgc2FuZGJveCBzdHlsZTogJFNBTkRCT1hfU1RZTEUiCi0gZWNobyAiICAgICAgICAgICAg ICAgICAgIFBLQ1MjMTEgc3VwcG9ydDogJGVuYWJsZV9wa2NzMTEiCi0rZWNobyAiICAgICAgICAg IERlZmF1bHQgUEtDUyMxMSBwcm92aWRlcjogJERFRkFVTFRfUEtDUzExX1BST1ZJREVSX01TRyIK LSBlY2hvICIgICAgICAgICAgICAgICAgICBVMkYvRklETyBzdXBwb3J0OiAkZW5hYmxlX3NrIgot IAotIGVjaG8gIiIKLWRpZmYgLS1naXQgYS9yZWdyZXNzL01ha2VmaWxlIGIvcmVncmVzcy9NYWtl ZmlsZQotaW5kZXggYWU0NWJkNDYzLi5jYmU3YTk2MTAgMTAwNjQ0Ci0tLS0gYS9yZWdyZXNzL01h a2VmaWxlCi0rKysgYi9yZWdyZXNzL01ha2VmaWxlCi1AQCAtMTE4LDYgKzExOCw3IEBAIExURVNU Uz0gCWNvbm5lY3QgXAotIAkJcGVuYWx0eS1leHBpcmUgXAotIAkJY29ubmVjdC1iaWdjb25mIFwK LSAJCXNzaC1wa2NzMTEgXAotKwkJcGtjczExLXVyaSBcCi0gCQlzc2gtdHR5IFwKLSAJCXByb3h5 anVtcAotIAotQEAgLTE0NCw3ICsxNDUsOCBAQCBDTEVBTkZJTEVTPQkqLmNvcmUgYWN0dWFsIGFn ZW50LWtleS4qIGF1dGhvcml6ZWRfa2V5c18ke1VTRVJOQU1FfSBcCi0gCQlrbm93bl9ob3N0cyBr bm93bl9ob3N0cy1jZXJ0IGtub3duX2hvc3RzLioga3JsLSogbHMuY29weSBcCi0gCQltb2RwaXBl IG5ldGNhdCBub19pZGVudGl0eV9jb25maWcgXAotIAkJcGlkZmlsZSBwdXR0eS5yc2EyIHJlYWR5 IHJlZ3Jlc3MubG9nIHJlbW90ZV9waWQgXAotLQkJcmV2b2tlZC0qIHJzYSByc2EtYWdlbnQgcnNh LWFnZW50LnB1YiByc2EucHViIHJzYV9zc2gyX2NyLnBydiBcCi0rCQlyZXZva2VkLSogcnNhIHJz YS1hZ2VudCByc2EtYWdlbnQucHViIHJzYS1hZ2VudC1jZXJ0LnB1YiBcCi0rCQlyc2EucHViIHJz YV9zc2gyX2NyLnBydiBwa2NzMTEqLmNydCBwa2NzMTEqLmtleSBwa2NzMTEuaW5mbyBcCi0gCQly c2Ffc3NoMl9jcm5sLnBydiBzY3Atc3NoLXdyYXBwZXIuZXhlIFwKLSAJCXNjcC1zc2gtd3JhcHBl ci5zY3Agc2V0dWlkLWFsbG93ZWQgc2Z0cC1zZXJ2ZXIubG9nIFwKLSAJCXNmdHAtc2VydmVyLnNo IHNmdHAubG9nIHNzaC1sb2ctd3JhcHBlci5zaCBzc2gubG9nIFwKLUBAIC0yOTQsNiArMjk2LDcg QEAgdW5pdCB1bml0LWJlbmNoOgotIAkJdGVzdCAieCR7VU5JVFRFU1RfVkVSQk9TRX0iID0gIngi IHx8IEFSR1M9IiQkQVJHUyAtdiI7IFwKLSAJCXRlc3QgIngke1VOSVRURVNUX0JFTkNIX0RFVEFJ TH0iID0gIngiIHx8IEFSR1M9IiQkQVJHUyAtQiI7IFwKLSAJCXRlc3QgIngke1VOSVRURVNUX0JF TkNIX09OTFl9IiA9ICJ4IiB8fCBBUkdTPSIkJEFSR1MgLU8gJHtVTklUVEVTVF9CRU5DSF9PTkxZ fSI7IFwKLSsJCSAkJFYgJHsuT0JKRElSfS91bml0dGVzdHMvcGtjczExL3Rlc3RfcGtjczExIDsg XAotIAkJICQkViAkey5PQkpESVJ9L3VuaXR0ZXN0cy9zc2hidWYvdGVzdF9zc2hidWYgJCR7QVJH U307IFwKLSAJCSAkJFYgJHsuT0JKRElSfS91bml0dGVzdHMvc3Noa2V5L3Rlc3Rfc3Noa2V5IFwK LSAJCQktZCAkey5DVVJESVJ9L3VuaXR0ZXN0cy9zc2hrZXkvdGVzdGRhdGEgJCR7QVJHU307IFwK LWRpZmYgLS1naXQgYS9yZWdyZXNzL3BrY3MxMS11cmkuc2ggYi9yZWdyZXNzL3BrY3MxMS11cmku c2gKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAuLjcyZDY5YmRhMAotLS0t IC9kZXYvbnVsbAotKysrIGIvcmVncmVzcy9wa2NzMTEtdXJpLnNoCi1AQCAtMCwwICsxLDQxMCBA QAotKyMKLSsjICBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdAotKyMKLSsjICBBdXRob3JzOiBK YWt1YiBKZWxlbiA8amplbGVuQHJlZGhhdC5jb20+Ci0rIwotKyMgIFBlcm1pc3Npb24gdG8gdXNl LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyMg IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQg dGhhdCB0aGUgYWJvdmUKLSsjICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotKyMKLSsjICBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSsj ICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJS QU5USUVTIE9GCi0rIyAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSsjICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJ TkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0rIyAgV0hB VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU SEVSIElOIEFOCi0rIyAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRP UlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSsjICBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotKwotK3RpZD0icGtjczEx IHRlc3RzIHdpdGggc29mdCB0b2tlbiIKLSsKLSt0cnlfdG9rZW5fbGlicygpIHsKLSsJZm9yIF9s aWIgaW4gIiRAIiA7IGRvCi0rCQlpZiB0ZXN0IC1mICIkX2xpYiIgOyB0aGVuCi0rCQkJdmVyYm9z ZSAiVXNpbmcgdG9rZW4gbGlicmFyeSAkX2xpYiIKLSsJCQlURVNUX1NTSF9QS0NTMTE9IiRfbGli IgotKwkJCXJldHVybgotKwkJZmkKLSsJZG9uZQotKwllY2hvICJza2lwcGVkOiBVbmFibGUgdG8g ZmluZCBQS0NTIzExIHRva2VuIGxpYnJhcnkiCi0rCWV4aXQgMAotK30KLSsKLSt0cnlfdG9rZW5f bGlicyBcCi0rCS91c3IvbG9jYWwvbGliL3NvZnRoc20vbGlic29mdGhzbTIuc28gXAotKwkvdXNy L2xpYjY0L3BrY3MxMS9saWJzb2Z0aHNtMi5zbyBcCi0rCS91c3IvbGliL3g4Nl82NC1saW51eC1n bnUvc29mdGhzbS9saWJzb2Z0aHNtMi5zbwotKwotK1RFU1RfU1NIX1BJTj0xMjM0Ci0rVEVTVF9T U0hfU09QSU49MTIzNDU2NzgKLStpZiBbICJ4JFRFU1RfU1NIX1NTSFBLQ1MxMUhFTFBFUiIgIT0g IngiIF07IHRoZW4KLSsJU1NIX1BLQ1MxMV9IRUxQRVI9IiR7VEVTVF9TU0hfU1NIUEtDUzExSEVM UEVSfSIKLSsJZXhwb3J0IFNTSF9QS0NTMTFfSEVMUEVSCi0rZmkKLSsKLSt0ZXN0IC1mICIkVEVT VF9TU0hfUEtDUzExIiB8fCBmYXRhbCAiJFRFU1RfU1NIX1BLQ1MxMSBkb2VzIG5vdCBleGlzdCIK LSsKLSsjIHNldHVwIGVudmlyb25tZW50IGZvciBzb2Z0aHNtIHRva2VuCi0rRElSPSRPQkovU09G VEhTTQotK3JtIC1yZiAkRElSCi0rVE9LRU49JERJUi90b2tlbmRpcgotK21rZGlyIC1wICRUT0tF TgotK1NPRlRIU00yX0NPTkY9JERJUi9zb2Z0aHNtMi5jb25mCi0rZXhwb3J0IFNPRlRIU00yX0NP TkYKLStjYXQgPiAkU09GVEhTTTJfQ09ORiA8PCBFT0YKLSsjIFNvZnRIU00gdjIgY29uZmlndXJh dGlvbiBmaWxlCi0rZGlyZWN0b3JpZXMudG9rZW5kaXIgPSAke1RPS0VOfQotK29iamVjdHN0b3Jl LmJhY2tlbmQgPSBmaWxlCi0rIyBFUlJPUiwgV0FSTklORywgSU5GTywgREVCVUcKLStsb2cubGV2 ZWwgPSBERUJVRwotKyMgSWYgQ0tGX1JFTU9WQUJMRV9ERVZJQ0UgZmxhZyBzaG91bGQgYmUgc2V0 Ci0rc2xvdHMucmVtb3ZhYmxlID0gZmFsc2UKLStFT0YKLStvdXQ9JChzb2Z0aHNtMi11dGlsIC0t aW5pdC10b2tlbiAtLWZyZWUgLS1sYWJlbCB0b2tlbi1zbG90LTAgLS1waW4gIiRURVNUX1NTSF9Q SU4iIC0tc28tcGluICIkVEVTVF9TU0hfU09QSU4iKQotK3Nsb3Q9JChlY2hvIC0tICRvdXQgfCBz ZWQgJ3MvLiogLy8nKQotKwotKyMgcHJldmVudCBzc2gtYWdlbnQgZnJvbSBjYWxsaW5nIHNzaC1h c2twYXNzCi0rU1NIX0FTS1BBU1M9L3Vzci9iaW4vdHJ1ZQotK2V4cG9ydCBTU0hfQVNLUEFTUwot K3Vuc2V0IERJU1BMQVkKLSsjIFdlIG5lZWQgaW50ZXJhY3RpdmUgYWNjZXNzIHRvIHRlc3QgUEtD UyMgc2luY2UgaXQgcHJvbXB0cyBmb3IgUElOCi0rIyBCYWNrdXAgc3NoX3Byb3h5IGJlZm9yZSBt b2RpZmljYXRpb25zCi0rY3AgJE9CSi9zc2hfcHJveHkgJE9CSi9zc2hfcHJveHlfYmFrCi0rc2Vk IC1pICdzLy4qQmF0Y2hNb2RlLiovL2cnICRPQkovc3NoX3Byb3h5Ci0rIyBSZW1vdmUgSWRlbnRp dHlGaWxlIGVudHJpZXMgdG8gcHJldmVudCBleGNlZWRpbmcgTWF4QXV0aFRyaWVzIHdoZW4gdXNp bmcKLSsjIFBLQ1MxMVByb3ZpZGVyICgtSSkgb3IgUEtDUzExIFVSSXMuIFRoZSBkZWZhdWx0IHNz aF9jb25maWcgaW5jbHVkZXMgbXVsdGlwbGUKLSsjIGlkZW50aXR5IGZpbGVzIHRoYXQgd291bGQg YmUgdHJpZWQgYmVmb3JlIFBLQ1MxMSBrZXlzLCBjYXVzaW5nIGF1dGhlbnRpY2F0aW9uCi0rIyB0 byBmYWlsIHdpdGggIlRvbyBtYW55IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzIiBiZWZvcmUgUEtD UzExIGtleXMgYXJlIHJlYWNoZWQuCi0rZ3JlcCAtaXYgSWRlbnRpdHlGaWxlICRPQkovc3NoX3By b3h5ID4gJE9CSi9zc2hfcHJveHkudG1wCi0rbXYgJE9CSi9zc2hfcHJveHkudG1wICRPQkovc3No X3Byb3h5Ci0rCi0rIyBzdGFydCBjb21tYW5kIHcvbyB0dHksIHNvIHNzaCBhY2NlcHRzIHBpbiBm cm9tIHN0ZGluIChmcm9tIGFnZW50LXBrY3MxMS5zaCkKLStub3R0eSgpIHsKLSsJcGVybCAtZSAn dXNlIFBPU0lYOyBQT1NJWDo6c2V0c2lkKCk7Ci0rCSAgICBpZiAoZm9yaykgeyB3YWl0OyBleGl0 KCQ/ID4+IDgpOyB9IGVsc2UgeyBleGVjKEBBUkdWKSB9JyAiJEAiCi0rfQotKwotK3RyYWNlICJn ZW5lcmF0aW5nIGtleXMiCi0rSUQxPSIwMiIKLStJRDI9IjA0IgotK0lEMz0iMDYiCi0rUlNBPSR7 RElSfS9SU0EKLStFQz0ke0RJUn0vRUMKLStFRDI1NTE5PSR7RElSfS9FRDI1NTE5Ci0rb3BlbnNz bCBnZW5wa2V5IC1hbGdvcml0aG0gcnNhID4gJFJTQQotK29wZW5zc2wgcGtjczggLW5vY3J5cHQg LWluICRSU0EgfFwKLSsgICAgc29mdGhzbTItdXRpbCAtLXNsb3QgIiRzbG90IiAtLWxhYmVsICJT U0ggUlNBIEtleSAkSUQxIiAtLWlkICRJRDEgXAotKwktLXBpbiAiJFRFU1RfU1NIX1BJTiIgLS1p bXBvcnQgL2Rldi9zdGRpbgotK29wZW5zc2wgZ2VucGtleSBcCi0rICAgIC1nZW5wYXJhbSBcCi0r ICAgIC1hbGdvcml0aG0gZWMgXAotKyAgICAtcGtleW9wdCBlY19wYXJhbWdlbl9jdXJ2ZTpwcmlt ZTI1NnYxIHxcCi0rICAgIG9wZW5zc2wgZ2VucGtleSBcCi0rICAgIC1wYXJhbWZpbGUgL2Rldi9z dGRpbiA+ICRFQwotK29wZW5zc2wgcGtjczggLW5vY3J5cHQgLWluICRFQyB8XAotKyAgICBzb2Z0 aHNtMi11dGlsIC0tc2xvdCAiJHNsb3QiIC0tbGFiZWwgIlNTSCBFQ0RTQSBLZXkgJElEMiIgLS1p ZCAkSUQyIFwKLSsJLS1waW4gIiRURVNUX1NTSF9QSU4iIC0taW1wb3J0IC9kZXYvc3RkaW4KLStv cGVuc3NsIGdlbnBrZXkgLWFsZ29yaXRobSBlZDI1NTE5ID4gJEVEMjU1MTkKLStvcGVuc3NsIHBr Y3M4IC1ub2NyeXB0IC1pbiAkRUQyNTUxOSB8XAotKyAgICBzb2Z0aHNtMi11dGlsIC0tc2xvdCAi JHNsb3QiIC0tbGFiZWwgIlNTSCBFRDI1NTE5IEtleSAkSUQzIiAtLWlkICRJRDMgXAotKwktLXBp biAiJFRFU1RfU1NIX1BJTiIgLS1pbXBvcnQgL2Rldi9zdGRpbgotKwotK3RyYWNlICJMaXN0IHRo ZSBrZXlzIGluIHRoZSBzc2gta2V5Z2VuIHdpdGggUEtDUyMxMSBVUklzIgotKyR7U1NIS0VZR0VO fSAtRCAke1RFU1RfU1NIX1BLQ1MxMX0gPiAkT0JKL3Rva2VuX2tleXMKLStpZiBbICQ/IC1uZSAw IF07IHRoZW4KLSsJZmFpbCAiRkFJTDoga2V5Z2VuIGZhaWxzIHRvIGVudW1lcmF0ZSBrZXlzIG9u IFBLQ1MjMTEgdG9rZW4iCi0rZmkKLStncmVwICJwa2NzMTE6IiAkT0JKL3Rva2VuX2tleXMgPiAv ZGV2L251bGwKLStpZiBbICQ/IC1uZSAwIF07IHRoZW4KLSsJZmFpbCAiRkFJTDogVGhlIGtleXMg ZnJvbSBzc2gta2V5Z2VuIGRvIG5vdCBjb250YWluIFBLQ1MjMTEgVVJJIGFzIGEgY29tbWVudCIK LStmaQotKwotKyMgU2V0IHRoZSBFQ0RTQSBrZXkgdG8gYXV0aG9yaXplZCBrZXlzCi0rZ3JlcCAi RUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCi0rCi0r dHJhY2UgIlNpbXBsZSBjb25uZWN0IHdpdGggc3NoICh3aXRob3V0IFBLQ1MjMTEgVVJJKSIKLStl Y2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtSSAke1RFU1RfU1NIX1BLQ1MxMX0g XAotKyAgICAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAk ciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggcGtjczExIGZh aWxlZCAoZXhpdCBjb2RlICRyKSIKLStmaQotKwotK3RyYWNlICJDb25uZWN0IHdpdGggUEtDUyMx MSBVUkkiCi0rdHJhY2UgIiAgKEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCi0rZWNobyAke1RF U1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAtaSAi cGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9z dCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNz aCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0r Ci0rdHJhY2UgIiAgKFJTQSBrZXkgc2hvdWxkIGZhaWwpIgotK2VjaG8gJHtURVNUX1NTSF9QSU59 IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKLSsgICAgIC1pICJwa2NzMTE6aWQ9 JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQot K3I9JD8KLStpZiBbICRyIC1lcSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qg d2l0aCBQS0NTIzExIFVSSSBzdWNjZWVkZWQgKHNob3VsZCBmYWlsKSIKLStmaQotKwotKyMgU2V0 IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3JpemVkCi0rZ3JlcCAiRUQyNTUxOSIgJE9CSi90b2tl bl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKLSsKLSt0cmFjZSAiICAoRUQyNTUx OSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgotK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtT U0h9IC1GICRPQkovc3NoX3Byb3h5IFwKLSsgICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQzfT9tb2R1 bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBb ICRyIC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzEx IFVSSSAoRWQyNTUxOSkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rIyBTZXQgdGhl IEVDRFNBIGtleSBiYWNrIGFzIGF1dGhvcml6ZWQKLStncmVwICJFQ0RTQSIgJE9CSi90b2tlbl9r ZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKLSsKLSt0cmFjZSAiQ29ubmVjdCB3aXRo IFBLQ1MjMTEgVVJJIGluY2x1ZGluZyBQSU4gc2hvdWxkIG5vdCBwcm9tcHQiCi0rdHJhY2UgIiAg KEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCi0rJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1p IFwKLSsgICAgInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzEx fSZwaW4tdmFsdWU9JHtURVNUX1NTSF9QSU59IiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYg WyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMx MSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rdHJhY2UgIiAgKFJTQSBrZXkg c2hvdWxkIGZhaWwpIgotKyR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSAtaSBcCi0rICAgICJwa2Nz MTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0mcGluLXZhbHVlPSR7 VEVTVF9TU0hfUElOfSIgc29tZWhvc3QgZXhpdCA1Ci0rcj0kPwotK2lmIFsgJHIgLWVxIDUgXTsg dGhlbgotKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIHN1Y2NlZWRl ZCAoc2hvdWxkIGZhaWwpIgotK2ZpCi0rCi0rIyBTZXQgdGhlIEVEMjU1MTkga2V5IGFzIGF1dGhv cml6ZWQKLStncmVwICJFRDI1NTE5IiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRf a2V5c18kVVNFUgotKwotK3RyYWNlICIgIChFRDI1NTE5IGtleSBzaG91bGQgc3VjY2VlZCkiCi0r JHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1pIFwKLSsgICAgInBrY3MxMTppZD0lJHtJRDN9P21v ZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSZwaW4tdmFsdWU9JHtURVNUX1NTSF9QSU59IiBz b21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZB SUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgKEVkMjU1MTkpIGZhaWxlZCAoZXhpdCBj b2RlICRyKSIKLStmaQotKwotKyMgU2V0IHRoZSBFQ0RTQSBrZXkgYmFjayBhcyBhdXRob3JpemVk Ci0rZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRV U0VSCi0rCi0rdHJhY2UgIkNvbm5lY3Qgd2l0aCB2YXJpb3VzIGZpbHRlcmluZyBvcHRpb25zIGlu IFBLQ1MjMTEgVVJJIgotK3RyYWNlICIgIChieSBvYmplY3QgbGFiZWwsIEVDRFNBIHNob3VsZCBz dWNjZWVkKSIKLStlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3Nz aF9wcm94eSBcCi0rICAgIC1pICJwa2NzMTE6b2JqZWN0PVNTSCUyMEVDRFNBJTIwS2V5JTIwMDQ/ bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0r aWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtD UyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rdHJhY2UgIiAgKGJ5IG9i amVjdCBsYWJlbCwgUlNBIGtleSBzaG91bGQgZmFpbCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0g fCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAgLWkgInBrY3MxMTpvYmpl Y3Q9U1NIJTIwUlNBJTIwS2V5JTIwMDI/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBz b21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtZXEgNSBdOyB0aGVuCi0rCWZhaWwgIkZB SUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgc3VjY2VlZGVkIChzaG91bGQgZmFpbCki Ci0rZmkKLSsKLSsjIFNldCB0aGUgRUQyNTUxOSBrZXkgYXMgYXV0aG9yaXplZAotK2dyZXAgIkVE MjU1MTkiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCi0rCi0r dHJhY2UgIiAgKGJ5IG9iamVjdCBsYWJlbCwgRUQyNTUxOSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgot K2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwK LSsgICAgIC1pICJwa2NzMTE6b2JqZWN0PVNTSCUyMEVEMjU1MTklMjBLZXklMjAwNj9tb2R1bGUt cGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRy IC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVS SSAoRWQyNTUxOSkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rIyBTZXQgdGhlIEVD RFNBIGtleSBiYWNrIGFzIGF1dGhvcml6ZWQKLStncmVwICJFQ0RTQSIgJE9CSi90b2tlbl9rZXlz ID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKLSsKLSt0cmFjZSAiICAoYnkgdG9rZW4gbGFi ZWwsIEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBu b3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAtaSAicGtjczExOmlkPSUke0lE Mn07dG9rZW49dG9rZW4tc2xvdC0wP21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29t ZWhvc3QgZXhpdCA1Ci0rcj0kPwotK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwlmYWlsICJGQUlM OiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKLStm aQotKwotKyMgU2V0IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3JpemVkCi0rZ3JlcCAiRUQyNTUx OSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKLSsKLSt0cmFj ZSAiICAoYnkgdG9rZW4gbGFiZWwsIEVEMjU1MTkga2V5IHNob3VsZCBzdWNjZWVkKSIKLStlY2hv ICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCi0rICAg IC1pICJwa2NzMTE6aWQ9JSR7SUQzfTt0b2tlbj10b2tlbi1zbG90LTA/bW9kdWxlLXBhdGg9JHtU RVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtbmUgNSBd OyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgKEVkMjU1 MTkpIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKLStmaQotKwotKyMgU2V0IHRoZSBFQ0RTQSBrZXkg YmFjayBhcyBhdXRob3JpemVkCi0rZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ICRPQkov YXV0aG9yaXplZF9rZXlzXyRVU0VSCi0rCi0rdHJhY2UgIiAgKGJ5IHdyb25nIHRva2VuIGxhYmVs LCBzaG91bGQgZmFpbCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYg JE9CSi9zc2hfcHJveHkgXAotKyAgICAgLWkgInBrY3MxMTp0b2tlbj10b2tlbi1zbG90LTk5P21v ZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3QgZXhpdCA1Ci0rcj0kPwotK2lm IFsgJHIgLWVxIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1Mj MTEgVVJJIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgotK2ZpCi0rCi0rCi0rCi0rCi0rdHJhY2Ug IlRlc3QgUEtDUyMxMSBVUkkgc3BlY2lmaWNhdGlvbiBpbiBjb25maWd1cmF0aW9uIGZpbGVzIgot K2VjaG8gIklkZW50aXR5RmlsZSBcInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVT VF9TU0hfUEtDUzExfVwiIiBcCi0rICAgID4+ICRPQkovc3NoX3Byb3h5Ci0rdHJhY2UgIiAgKEVD RFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAk e1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhpdCA1Ci0rcj0kPwotK2lmIFsgJHIg LW5lIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJ IGluIGNvbmZpZyBmYWlsZWQgKGV4aXQgY29kZSAkcikiCi0rZmkKLSsKLSsjIFNldCB0aGUgUlNB IGtleSBhcyBhdXRob3JpemVkCi0rZ3JlcCAiUlNBIiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1 dGhvcml6ZWRfa2V5c18kVVNFUgotKwotK3RyYWNlICIgIChSU0Ega2V5IHNob3VsZCBmYWlsKSIK LStlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBz b21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtZXEgNSBdOyB0aGVuCi0rCWZhaWwgIkZB SUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgaW4gY29uZmlnIHN1Y2NlZWRlZCAoc2hv dWxkIGZhaWwpIgotK2ZpCi0rc2VkIC1pIC1lICIvSWRlbnRpdHlGaWxlL2QiICRPQkovc3NoX3By b3h5Ci0rCi0rdHJhY2UgIkNvbWJpbmF0aW9uIG9mIFBLQ1MxMVByb3ZpZGVyIGFuZCBQS0NTMTFV Ukkgb24gY29tbWFuZGxpbmUiCi0rdHJhY2UgIiAgKFJTQSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgot K2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwK LSsgICAgLWkgInBrY3MxMTppZD0lJHtJRDF9IiAtSSAke1RFU1RfU1NIX1BLQ1MxMX0gc29tZWhv c3QgZXhpdCA1Ci0rcj0kPwotK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBz c2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGFuZCBwcm92aWRlciBjb21iaW5hdGlvbiIgXAot KwkgICAgImZhaWxlZCAoZXhpdCBjb2RlICRyKSIKLStmaQotKwotK3RyYWNlICJSZWdyZXNzOiBN aXNzaW5nIHByb3ZpZGVyIGluIFBLQ1MxMVVSSSBvcHRpb24iCi0rJHtTU0h9IC1GICRPQkovc3No X3Byb3h5IFwKLSsgICAgLW8gSWRlbnRpdHlGaWxlPVwicGtjczExOnRva2VuPXNlZ2ZhdWx0XCIg c29tZWhvc3QgZXhpdCA1Ci0rcj0kPwotK2lmIFsgJHIgLWVxIDEzOSBdOyB0aGVuCi0rCWZhaWwg IkZBSUw6IHNzaCBjb25uZWN0IHdpdGggbWlzc2luZyBwcm92aWRlcl9pZCBmcm9tIGNvbmZpZ3Vy YXRpb24gb3B0aW9uIiBcCi0rCSAgICAiY3Jhc2hlZCAoZXhpdCBjb2RlICRyKSIKLStmaQotKwot KwotK3RyYWNlICJTU0ggQWdlbnQgY2FuIHdvcmsgd2l0aCBQS0NTIzExIFVSSSIKLSt0cmFjZSAi c3RhcnQgdGhlIGFnZW50IgotK2V2YWwgYCR7U1NIQUdFTlR9IC1zYCA+ICAvZGV2L251bGwKLSsK LStyPSQ/Ci0raWYgWyAkciAtbmUgMCBdOyB0aGVuCi0rCWZhaWwgImNvdWxkIG5vdCBzdGFydCBz c2gtYWdlbnQ6IGV4aXQgY29kZSAkciIKLStlbHNlCi0rCXRyYWNlICJhZGQgd2hvbGUgcHJvdmlk ZXIgdG8gYWdlbnQiCi0rCWVjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0hBRER9IFwK LSsJICAgICJwa2NzMTE6P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgIz4gL2Rldi9u dWxsIDI+JjEKLSsJcj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUw6 IHNzaC1hZGQgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXI6IGV4aXQgY29kZSAkciIKLSsJZmkK LSsKLSsJdHJhY2UgIiBwa2NzMTEgbGlzdCB2aWEgYWdlbnQgKGFsbCBrZXlzKSIKLSsJJHtTU0hB RER9IC1sID4gL2Rldi9udWxsIDI+JjEKLSsJcj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4K LSsJCWZhaWwgIkZBSUw6IHNzaC1hZGQgLWwgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXI6IGV4 aXQgY29kZSAkciIKLSsJZmkKLSsKLSsJdHJhY2UgIiBwa2NzMTEgY29ubmVjdCB2aWEgYWdlbnQg KGFsbCBrZXlzKSIKLSsJJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4aXQgNQot KwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwkJZmFpbCAiRkFJTDogc3NoIGNvbm5l Y3QgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXIgKGV4aXQgY29kZSAkcikiCi0rCWZpCi0rCi0r CXRyYWNlICIgcmVtb3ZlIHBrY3MxMSBrZXlzIChhbGwga2V5cykiCi0rCSR7U1NIQUREfSAtZCAi cGtjczExOj9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iID4gL2Rldi9udWxsIDI+JjEK LSsJcj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUw6IHNzaC1hZGQg LWQgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXI6IGV4aXQgY29kZSAkciIKLSsJZmkKLSsKLSsJ dHJhY2UgImFkZCBvbmx5IFJTQSBrZXkgdG8gdGhlIGFnZW50IgotKwllY2hvICR7VEVTVF9TU0hf UElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCi0rCSAgICAicGtjczExOmlkPSUke0lEMX0/bW9kdWxl LXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8KLSsJaWYg WyAkciAtbmUgMCBdOyB0aGVuCi0rCQlmYWlsICJGQUlMIHNzaC1hZGQgZmFpbGVkIHdpdGggUlNB IGtleTogZXhpdCBjb2RlICRyIgotKwlmaQotKwotKwl0cmFjZSAiIHBrY3MxMSBjb25uZWN0IHZp YSBhZ2VudCAoUlNBIGtleSkiCi0rCSR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBl eGl0IDUKLSsJcj0kPwotKwlpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJCWZhaWwgIkZBSUw6IHNz aCBjb25uZWN0IGZhaWxlZCB3aXRoIFJTQSBrZXkgKGV4aXQgY29kZSAkcikiCi0rCWZpCi0rCi0r CXRyYWNlICIgcmVtb3ZlIFJTQSBwa2NzMTEga2V5IgotKwkke1NTSEFERH0gLWQgInBrY3MxMTpp ZD0lJHtJRDF9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgXAotKwkgICAgPiAvZGV2 L251bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgotKwkJZmFpbCAiRkFJ TDogc3NoLWFkZCAtZCBmYWlsZWQgd2l0aCBSU0Ega2V5OiBleGl0IGNvZGUgJHIiCi0rCWZpCi0r Ci0rCXRyYWNlICJhZGQgb25seSBFQ0RTQSBrZXkgdG8gdGhlIGFnZW50IgotKwllY2hvICR7VEVT VF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCi0rCSAgICAicGtjczExOmlkPSUke0lEMn0/ bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8K LSsJaWYgWyAkciAtbmUgMCBdOyB0aGVuCi0rCQlmYWlsICJGQUlMOiBzc2gtYWRkIGZhaWxlZCB3 aXRoIHNlY29uZCBrZXk6IGV4aXQgY29kZSAkciIKLSsJZmkKLSsKLSsJdHJhY2UgIiBwa2NzMTEg Y29ubmVjdCB2aWEgYWdlbnQgKEVDRFNBIGtleSBzaG91bGQgZmFpbCkiCi0rCSR7U1NIfSAtRiAk T0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKLSsJcj0kPwotKwlpZiBbICRyIC1lcSA1IF07 IHRoZW4KLSsJCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHBhc3NlZCB3aXRoIEVDRFNBIGtleSAo c2hvdWxkIGZhaWwpIgotKwlmaQotKwotKwl0cmFjZSAiYWRkIGFsc28gdGhlIFJTQSBrZXkgdG8g dGhlIGFnZW50IgotKwllY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCi0r CSAgICAicGtjczExOmlkPSUke0lEMX0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+ IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8KLSsJaWYgWyAkciAtbmUgMCBdOyB0aGVuCi0rCQlmYWls ICJGQUlMOiBzc2gtYWRkIGZhaWxlZCB3aXRoIGZpcnN0IGtleTogZXhpdCBjb2RlICRyIgotKwlm aQotKwotKwl0cmFjZSAiIHJlbW92ZSBFQ0RTQSBwa2NzMTEga2V5IgotKwkke1NTSEFERH0gLWQg InBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgXAotKwkg ICAgPiAvZGV2L251bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgotKwkJ ZmFpbCAic3NoLWFkZCAtZCBmYWlsZWQgd2l0aCBFQ0RTQSBrZXk6IGV4aXQgY29kZSAkciIKLSsJ ZmkKLSsKLSsJdHJhY2UgIiByZW1vdmUgYWxyZWFkeS1yZW1vdmVkIHBrY3MxMSBrZXkgc2hvdWxk IGZhaWwiCi0rCSR7U1NIQUREfSAtZCAicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtU RVNUX1NTSF9QS0NTMTF9IiBcCi0rCSAgICA+IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8KLSsJaWYg WyAkciAtZXEgMCBdOyB0aGVuCi0rCQlmYWlsICJGQUlMOiBzc2gtYWRkIC1kIHBhc3NlZCB3aXRo IG5vbi1leGlzdGluZyBrZXkgKHNob3VsZCBmYWlsKSIKLSsJZmkKLSsKLSsJdHJhY2UgIiBwa2Nz MTEgY29ubmVjdCB2aWEgYWdlbnQgKHRoZSBSU0Ega2V5IHNob3VsZCBiZSBzdGlsbCB1c2FibGUp IgotKwkke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhpdCA1Ci0rCXI9JD8KLSsJ aWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCQlmYWlsICJzc2ggY29ubmVjdCBmYWlsZWQgd2l0aCBS U0Ega2V5IChhZnRlciByZW1vdmluZyBFQ0RTQSk6IGV4aXQgY29kZSAkciIKLSsJZmkKLSsKLSsJ dHJhY2UgImtpbGwgYWdlbnQiCi0rCSR7U1NIQUdFTlR9IC1rID4gL2Rldi9udWxsCi0rZmkKLSsK LSsjIFJlc3RvcmUgb3JpZ2luYWwgc3NoX3Byb3h5Ci0rbXYgJE9CSi9zc2hfcHJveHlfYmFrICRP Qkovc3NoX3Byb3h5Ci1kaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0dGVzdHMvTWFrZWZpbGUgYi9y ZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZQotaW5kZXggZTM3MDkwMGU0Li5kNmM4OWMxMjkgMTAw NjQ0Ci0tLS0gYS9yZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZQotKysrIGIvcmVncmVzcy91bml0 dGVzdHMvTWFrZWZpbGUKLUBAIC0xLDYgKzEsNiBAQAotICMJJE9wZW5CU0Q6IE1ha2VmaWxlLHYg MS4xMyAyMDIzLzA5LzI0IDA4OjE0OjEzIGNsYXVkaW8gRXhwICQKLSAKLSBTVUJESVI9CXRlc3Rf aGVscGVyIHNzaGJ1ZiBzc2hrZXkgYml0bWFwIGtleCBob3N0a2V5cyB1dGY4IG1hdGNoIGNvbnZl cnNpb24KLS1TVUJESVIrPWF1dGhvcHQgbWlzYyBzc2hzaWcKLStTVUJESVIrPWF1dGhvcHQgbWlz YyBzc2hzaWcgcGtjczExCi0gCi0gLmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+Ci1kaWZmIC0tZ2l0 IGEvcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMgYi9yZWdyZXNzL3VuaXR0ZXN0cy9w a2NzMTEvdGVzdHMuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMC4uODli YTQ1YzRlCi0tLS0gL2Rldi9udWxsCi0rKysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVz dHMuYwotQEAgLTAsMCArMSwzNTMgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAxNyBSZWQg SGF0Ci0rICoKLSsgKiBBdXRob3JzOiBKYWt1YiBKZWxlbiA8amplbGVuQHJlZGhhdC5jb20+Ci0r ICoKLSsgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0 aGlzIHNvZnR3YXJlIGZvciBhbnkKLSsgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMg aGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0rICogY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSsg KgotKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJ U0NMQUlNUyBBTEwgV0FSUkFOVElFUwotKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUg SU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSsgKiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgot KyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgT1IgQU5ZIERBTUFHRVMKLSsgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0Yg VVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSsgKiBBQ1RJT04gT0YgQ09OVFJB Q1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgot KyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMg U09GVFdBUkUuCi0rICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rCi0rI2luY2x1ZGUg PGxvY2FsZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLSsjaW5jbHVkZSAiLi4vdGVzdF9o ZWxwZXIvdGVzdF9oZWxwZXIuaCIKLSsKLSsjaW5jbHVkZSAic3NoYnVmLmgiCi0rI2luY2x1ZGUg InNzaC1wa2NzMTEtdXJpLmgiCi0rCi0rI2RlZmluZSBFTVBUWV9VUkkgY29tcG9zZV91cmkoTlVM TCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSsKLSsvKiBw cm90b3R5cGVzIGFyZSBub3QgcHVibGljIC0tIHNwZWNpZnkgdGhlbSBoZXJlIGludGVybmFsbHkg Zm9yIHRlc3RzICovCi0rc3RydWN0IHNzaGJ1ZiAqcGVyY2VudF9lbmNvZGUoY29uc3QgY2hhciAq LCBzaXplX3QsIGNoYXIgKik7Ci0raW50IHBlcmNlbnRfZGVjb2RlKGNoYXIgKiwgY2hhciAqKik7 Ci0rCi0rdm9pZAotK2NvbXBhcmVfdXJpKHN0cnVjdCBwa2NzMTFfdXJpICphLCBzdHJ1Y3QgcGtj czExX3VyaSAqYikKLSt7Ci0rCUFTU0VSVF9QVFJfTkUoYSwgTlVMTCk7Ci0rCUFTU0VSVF9QVFJf TkUoYiwgTlVMTCk7Ci0rCUFTU0VSVF9TSVpFX1RfRVEoYS0+aWRfbGVuLCBiLT5pZF9sZW4pOwot KwlBU1NFUlRfTUVNX0VRKGEtPmlkLCBiLT5pZCwgYS0+aWRfbGVuKTsKLSsJaWYgKGItPm9iamVj dCAhPSBOVUxMKQotKwkJQVNTRVJUX1NUUklOR19FUShhLT5vYmplY3QsIGItPm9iamVjdCk7Ci0r CWVsc2UgLyogYm90aCBzaG91bGQgYmUgbnVsbCAqLwotKwkJQVNTRVJUX1BUUl9FUShhLT5vYmpl Y3QsIGItPm9iamVjdCk7Ci0rCWlmIChiLT5tb2R1bGVfcGF0aCAhPSBOVUxMKQotKwkJQVNTRVJU X1NUUklOR19FUShhLT5tb2R1bGVfcGF0aCwgYi0+bW9kdWxlX3BhdGgpOwotKwllbHNlIC8qIGJv dGggc2hvdWxkIGJlIG51bGwgKi8KLSsJCUFTU0VSVF9QVFJfRVEoYS0+bW9kdWxlX3BhdGgsIGIt Pm1vZHVsZV9wYXRoKTsKLSsJaWYgKGItPnRva2VuICE9IE5VTEwpCi0rCQlBU1NFUlRfU1RSSU5H X0VRKGEtPnRva2VuLCBiLT50b2tlbik7Ci0rCWVsc2UgLyogYm90aCBzaG91bGQgYmUgbnVsbCAq LwotKwkJQVNTRVJUX1BUUl9FUShhLT50b2tlbiwgYi0+dG9rZW4pOwotKwlpZiAoYi0+bWFudWYg IT0gTlVMTCkKLSsJCUFTU0VSVF9TVFJJTkdfRVEoYS0+bWFudWYsIGItPm1hbnVmKTsKLSsJZWxz ZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICovCi0rCQlBU1NFUlRfUFRSX0VRKGEtPm1hbnVmLCBi LT5tYW51Zik7Ci0rCWlmIChiLT5saWJfbWFudWYgIT0gTlVMTCkKLSsJCUFTU0VSVF9TVFJJTkdf RVEoYS0+bGliX21hbnVmLCBiLT5saWJfbWFudWYpOwotKwllbHNlIC8qIGJvdGggc2hvdWxkIGJl IG51bGwgKi8KLSsJCUFTU0VSVF9QVFJfRVEoYS0+bGliX21hbnVmLCBiLT5saWJfbWFudWYpOwot KwlpZiAoYi0+c2VyaWFsICE9IE5VTEwpCi0rCQlBU1NFUlRfU1RSSU5HX0VRKGEtPnNlcmlhbCwg Yi0+c2VyaWFsKTsKLSsJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICovCi0rCQlBU1NFUlRf UFRSX0VRKGEtPnNlcmlhbCwgYi0+c2VyaWFsKTsKLSt9Ci0rCi0rdm9pZAotK2NoZWNrX3BhcnNl X3J2KGNoYXIgKnVyaSwgc3RydWN0IHBrY3MxMV91cmkgKmV4cGVjdCwgaW50IGV4cGVjdF9ydikK LSt7Ci0rCWNoYXIgKmJ1ZiA9IE5VTEwsICpzdHI7Ci0rCXN0cnVjdCBwa2NzMTFfdXJpICpwa2Nz MTF1cmkgPSBOVUxMOwotKwlpbnQgcnY7Ci0rCi0rCWlmIChleHBlY3RfcnYgPT0gMCkKLSsJCXN0 ciA9ICJWYWxpZCI7Ci0rCWVsc2UKLSsJCXN0ciA9ICJJbnZhbGlkIjsKLSsJYXNwcmludGYoJmJ1 ZiwgIiVzIFBLQ1MjMTEgVVJJIHBhcnNpbmc6ICVzIiwgc3RyLCB1cmkpOwotKwlURVNUX1NUQVJU KGJ1Zik7Ci0rCWZyZWUoYnVmKTsKLSsJcGtjczExdXJpID0gcGtjczExX3VyaV9pbml0KCk7Ci0r CXJ2ID0gcGtjczExX3VyaV9wYXJzZSh1cmksIHBrY3MxMXVyaSk7Ci0rCUFTU0VSVF9JTlRfRVEo cnYsIGV4cGVjdF9ydik7Ci0rCWlmIChydiA9PSAwKSAvKiBpbiBjYXNlIG9mIGZhaWx1cmUgcmVz dWx0IGlzIHVuZGVmaW5lZCAqLwotKwkJY29tcGFyZV91cmkocGtjczExdXJpLCBleHBlY3QpOwot Kwlwa2NzMTFfdXJpX2NsZWFudXAocGtjczExdXJpKTsKLSsJZnJlZShleHBlY3QpOwotKwlURVNU X0RPTkUoKTsKLSt9Ci0rCi0rdm9pZAotK2NoZWNrX3BhcnNlKGNoYXIgKnVyaSwgc3RydWN0IHBr Y3MxMV91cmkgKmV4cGVjdCkKLSt7Ci0rCWNoZWNrX3BhcnNlX3J2KHVyaSwgZXhwZWN0LCAwKTsK LSt9Ci0rCi0rc3RydWN0IHBrY3MxMV91cmkgKgotK2NvbXBvc2VfdXJpKHVuc2lnbmVkIGNoYXIg KmlkLCBzaXplX3QgaWRfbGVuLCBjaGFyICp0b2tlbiwgY2hhciAqbGliX21hbnVmLAotKyAgICBj aGFyICptYW51ZiwgY2hhciAqc2VyaWFsLCBjaGFyICptb2R1bGVfcGF0aCwgY2hhciAqb2JqZWN0 LCBjaGFyICpwaW4pCi0rewotKwlzdHJ1Y3QgcGtjczExX3VyaSAqdXJpID0gcGtjczExX3VyaV9p bml0KCk7Ci0rCWlmIChpZF9sZW4gPiAwKSB7Ci0rCQl1cmktPmlkX2xlbiA9IGlkX2xlbjsKLSsJ CXVyaS0+aWQgPSBpZDsKLSsJfQotKwl1cmktPm1vZHVsZV9wYXRoID0gbW9kdWxlX3BhdGg7Ci0r CXVyaS0+dG9rZW4gPSB0b2tlbjsKLSsJdXJpLT5saWJfbWFudWYgPSBsaWJfbWFudWY7Ci0rCXVy aS0+bWFudWYgPSBtYW51ZjsKLSsJdXJpLT5zZXJpYWwgPSBzZXJpYWw7Ci0rCXVyaS0+b2JqZWN0 ID0gb2JqZWN0OwotKwl1cmktPnBpbiA9IHBpbjsKLSsJcmV0dXJuIHVyaTsKLSt9Ci0rCi0rc3Rh dGljIHZvaWQKLSt0ZXN0X3BhcnNlX3ZhbGlkKHZvaWQpCi0rewotKwkvKiBwYXRoIGFyZ3VtZW50 cyAqLwotKwljaGVja19wYXJzZSgicGtjczExOmlkPSUwMSIsCi0rCSAgICBjb21wb3NlX3VyaSgi XHgwMSIsIDEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKLSsJ Y2hlY2tfcGFyc2UoInBrY3MxMTppZD0lMDAlMDEiLAotKwkgICAgY29tcG9zZV91cmkoIlx4MDBc eDAxIiwgMiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOwotKwlj aGVja19wYXJzZSgicGtjczExOnRva2VuPVNTSCUyMEtleXMiLAotKwkgICAgY29tcG9zZV91cmko TlVMTCwgMCwgIlNTSCBLZXlzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkp OwotKwljaGVja19wYXJzZSgicGtjczExOmxpYnJhcnktbWFudWZhY3R1cmVyPU9wZW5TQyIsCi0r CSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCAiT3BlblNDIiwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCkpOwotKwljaGVja19wYXJzZSgicGtjczExOm1hbnVmYWN0dXJlcj1waXZf SUkiLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgInBpdl9JSSIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKLSsJY2hlY2tfcGFyc2UoInBrY3MxMTpzZXJpYWw9SWFt U2VyaWFsIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsICJJ YW1TZXJpYWwiLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6b2Jq ZWN0PVNJR04lMjBLZXkiLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgIlNJR04gS2V5IiwgTlVMTCkpOwotKwkvKiBxdWVyeSBhcmd1bWVu dHMgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMTo/bW9kdWxlLXBhdGg9L3Vzci9saWI2NC9wMTEt a2l0LXByb3h5LnNvIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLCBOVUxMLCBOVUxMKSk7Ci0r CWNoZWNrX3BhcnNlKCJwa2NzMTE6P3Bpbi12YWx1ZT0xMjM0NTYiLAotKwkgICAgY29tcG9zZV91 cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIjEyMzQ1NiIp KTsKLSsKLSsJLyogY29tYmluYXRpb25zICovCi0rCS8qIElEIFNIT1VMRCBiZSBwZXJjZW50IGVu Y29kZWQgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMTp0b2tlbj1TU0glMjBLZXk7aWQ9MCIsCi0r CSAgICBjb21wb3NlX3VyaSgiMCIsIDEsICJTU0ggS2V5IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCkpOwotKwljaGVja19wYXJzZSgKLSsJICAgICJwa2NzMTE6bWFudWZhY3R1 cmVyPUNBQz9tb2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLAotKwkgICAg Y29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgIkNBQyIsIE5VTEwsCi0rCSAgICAiL3Vz ci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVMTCkpOwotKwljaGVja19wYXJzZSgK LSsJICAgICJwa2NzMTE6b2JqZWN0PVJTQSUyMEtleT9tb2R1bGUtcGF0aD0vdXNyL2xpYjY0L3Br Y3MxMS9vcGVuY3J5cHRva2kuc28iLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwKLSsJICAgICIvdXNyL2xpYjY0L3BrY3MxMS9vcGVuY3J5cHRva2ku c28iLCAiUlNBIEtleSIsIE5VTEwpKTsKLSsJY2hlY2tfcGFyc2UoInBrY3MxMTo/bW9kdWxlLXBh dGg9L3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvJnBpbi12YWx1ZT0xMjM0NTYiLAotKwkgICAg Y29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIi91c3IvbGliNjQv cDExLWtpdC1wcm94eS5zbyIsIE5VTEwsICIxMjM0NTYiKSk7Ci0rCi0rCS8qIGVtcHR5IHBhdGgg Y29tcG9uZW50IG1hdGNoZXMgZXZlcnl0aGluZyAqLwotKwljaGVja19wYXJzZSgicGtjczExOiIs IEVNUFRZX1VSSSk7Ci0rCi0rCS8qIGVtcHR5IHN0cmluZyBpcyBhIHZhbGlkIHRvIG1hdGNoIGFn YWluc3QgKGFuZCBkaWZmZXJlbnQgZnJvbSBOVUxMKSAqLwotKwljaGVja19wYXJzZSgicGtjczEx OnRva2VuPSIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCAiIiwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkpOwotKwkvKiBQZXJjZW50IGNoYXJhY3RlciBuZWVkcyB0byBi ZSBwZXJjZW50LWVuY29kZWQgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMTp0b2tlbj0lMjUiLAot KwkgICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsICIlIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCkpOwotK30KLSsKLStzdGF0aWMgdm9pZAotK3Rlc3RfcGFyc2VfaW52YWxpZCh2 b2lkKQotK3sKLSsJLyogSW52YWxpZCBwZXJjZW50IGVuY29kaW5nICovCi0rCWNoZWNrX3BhcnNl X3J2KCJwa2NzMTE6aWQ9JTAiLCBFTVBUWV9VUkksIC0xKTsKLSsJLyogSW52YWxpZCBwZXJjZW50 IGVuY29kaW5nICovCi0rCWNoZWNrX3BhcnNlX3J2KCJwa2NzMTE6aWQ9JVpaIiwgRU1QVFlfVVJJ LCAtMSk7Ci0rCS8qIFNwYWNlIE1VU1QgYmUgcGVyY2VudCBlbmNvZGVkIC0tIFhYWCBub3QgZW5m b3JjZWQgeWV0ICovCi0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9rZW49U1NIIEtleXMiLAotKwkg ICAgY29tcG9zZV91cmkoTlVMTCwgMCwgIlNTSCBLZXlzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCkpOwotKwkvKiBNVVNUIE5PVCBjb250YWluIGR1cGxpY2F0ZSBhdHRyaWJ1 dGVzIG9mIHRoZSBzYW1lIG5hbWUgKi8KLSsJY2hlY2tfcGFyc2VfcnYoInBrY3MxMTppZD0lMDE7 aWQ9JTAyIiwgRU1QVFlfVVJJLCAtMSk7Ci0rCS8qIE1VU1QgTk9UIGNvbnRhaW4gZHVwbGljYXRl IGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgbmFtZSAqLwotKwljaGVja19wYXJzZV9ydigicGtjczEx Oj9waW4tdmFsdWU9MTExMTExJnBpbi12YWx1ZT0xMjM0NTYiLCBFTVBUWV9VUkksIC0xKTsKLSsJ LyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiBwYXRoIGFyZSBpZ25vcmVkIHdpdGggbG9nIG1l c3NhZ2UgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMTprZXlfbmFtZT1TU0giLCBFTVBUWV9VUkkp OwotKwkvKiBVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHF1ZXJ5IFNIT1VMRCBiZSBpZ25vcmVk ICovCi0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6P2tleV9uYW1lPVNTSCIsIEVNUFRZX1VSSSk7Ci0r fQotKwotK3ZvaWQKLStjaGVja19nZW4oY2hhciAqZXhwZWN0LCBzdHJ1Y3QgcGtjczExX3VyaSAq dXJpKQotK3sKLSsJY2hhciAqYnVmID0gTlVMTCwgKnVyaV9zdHI7Ci0rCi0rCWFzcHJpbnRmKCZi dWYsICJWYWxpZCBQS0NTIzExIFVSSSBnZW5lcmF0aW9uOiAlcyIsIGV4cGVjdCk7Ci0rCVRFU1Rf U1RBUlQoYnVmKTsKLSsJZnJlZShidWYpOwotKwl1cmlfc3RyID0gcGtjczExX3VyaV9nZXQodXJp KTsKLSsJQVNTRVJUX1BUUl9ORSh1cmlfc3RyLCBOVUxMKTsKLSsJQVNTRVJUX1NUUklOR19FUSh1 cmlfc3RyLCBleHBlY3QpOwotKwlmcmVlKHVyaV9zdHIpOwotKwlURVNUX0RPTkUoKTsKLSt9Ci0r Ci0rc3RhdGljIHZvaWQKLSt0ZXN0X2dlbmVyYXRlX3ZhbGlkKHZvaWQpCi0rewotKwkvKiBwYXRo IGFyZ3VtZW50cyAqLwotKwljaGVja19nZW4oInBrY3MxMTppZD0lMDEiLAotKwkgICAgY29tcG9z ZV91cmkoIlx4MDEiLCAxLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KSk7Ci0rCWNoZWNrX2dlbigicGtjczExOmlkPSUwMCUwMSIsCi0rCSAgICBjb21wb3NlX3VyaSgi XHgwMFx4MDEiLCAyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7 Ci0rCWNoZWNrX2dlbigicGtjczExOnRva2VuPVNTSCUyMEtleXMiLCAvKiBzcGFjZSBtdXN0IGJl IHBlcmNlbnQgZW5jb2RlZCAqLwotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgIlNTSCBLZXlz IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOwotKwkvKiBsaWJyYXJ5LW1h bnVmYWN0dXJlciBpcyBub3QgaW1wbG1lbnRlZCBub3cgKi8KLSsJLypjaGVja19nZW4oInBrY3Mx MTpsaWJyYXJ5LW1hbnVmYWN0dXJlcj1PcGVuU0MiLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwg MCwgTlVMTCwgIk9wZW5TQyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsqLwotKwlj aGVja19nZW4oInBrY3MxMTptYW51ZmFjdHVyZXI9cGl2X0lJIiwKLSsJICAgIGNvbXBvc2VfdXJp KE5VTEwsIDAsIE5VTEwsIE5VTEwsICJwaXZfSUkiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7 Ci0rCWNoZWNrX2dlbigicGtjczExOnNlcmlhbD1JYW1TZXJpYWwiLAotKwkgICAgY29tcG9zZV91 cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgIklhbVNlcmlhbCIsIE5VTEwsIE5VTEwsIE5V TEwpKTsKLSsJY2hlY2tfZ2VuKCJwa2NzMTE6b2JqZWN0PVJTQSUyMEtleSIsCi0rCSAgICBjb21w b3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiUlNBIEtleSIs IE5VTEwpKTsKLSsJLyogcXVlcnkgYXJndW1lbnRzICovCi0rCWNoZWNrX2dlbigicGtjczExOj9t b2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLAotKwkgICAgY29tcG9zZV91 cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIi91c3IvbGliNjQvcDExLWtpdC1w cm94eS5zbyIsIE5VTEwsIE5VTEwpKTsKLSsKLSsJLyogY29tYmluYXRpb25zICovCi0rCWNoZWNr X2dlbigicGtjczExOmlkPSUwMjt0b2tlbj1TU0glMjBLZXlzIiwKLSsJICAgIGNvbXBvc2VfdXJp KCJceDAyIiwgMSwgIlNTSCBLZXlzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCkpOwotKwljaGVja19nZW4oInBrY3MxMTppZD0lRUUlMDI/bW9kdWxlLXBhdGg9L3Vzci9saWI2 NC9wMTEta2l0LXByb3h5LnNvIiwKLSsJICAgIGNvbXBvc2VfdXJpKCJceEVFXHgwMiIsIDIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLCBOVUxM LCBOVUxMKSk7Ci0rCWNoZWNrX2dlbigicGtjczExOm9iamVjdD1FbmNyeXB0aW9uJTIwS2V5O21h bnVmYWN0dXJlcj1waXZfSUkiLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVM TCwgInBpdl9JSSIsIE5VTEwsIE5VTEwsICJFbmNyeXB0aW9uIEtleSIsIE5VTEwpKTsKLSsKLSsJ LyogZW1wdHkgcGF0aCBjb21wb25lbnQgbWF0Y2hlcyBldmVyeXRoaW5nICovCi0rCWNoZWNrX2dl bigicGtjczExOiIsIEVNUFRZX1VSSSk7Ci0rCi0rfQotKwotK3ZvaWQKLStjaGVja19lbmNvZGUo Y2hhciAqc291cmNlLCBzaXplX3QgbGVuLCBjaGFyICphbGxvd19saXN0LCBjaGFyICpleHBlY3Qp Ci0rewotKwljaGFyICpidWYgPSBOVUxMOwotKwlzdHJ1Y3Qgc3NoYnVmICpiOwotKwotKwlhc3By aW50ZigmYnVmLCAicGVyY2VudF9lbmNvZGU6IGV4cGVjdGVkICVzIiwgZXhwZWN0KTsKLSsJVEVT VF9TVEFSVChidWYpOwotKwlmcmVlKGJ1Zik7Ci0rCi0rCWIgPSBwZXJjZW50X2VuY29kZShzb3Vy Y2UsIGxlbiwgYWxsb3dfbGlzdCk7Ci0rCUFTU0VSVF9TVFJJTkdfRVEoc3NoYnVmX3B0cihiKSwg ZXhwZWN0KTsKLSsJc3NoYnVmX2ZyZWUoYik7Ci0rCVRFU1RfRE9ORSgpOwotK30KLSsKLStzdGF0 aWMgdm9pZAotK3Rlc3RfcGVyY2VudF9lbmNvZGVfbXVsdGlieXRlKHZvaWQpCi0rewotKwkvKiBT SE9VTEQgYmUgZW5jb2RlZCBhcyBvY3RldHMgYWNjb3JkaW5nIHRvIHRoZSBVVEYtOCBjaGFyYWN0 ZXIgZW5jb2RpbmcgKi8KLSsKLSsJLyogbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSAiZm9yIGZy ZWUiICovCi0rCWNoZWNrX2VuY29kZSgiJCIsIDEsICIiLCAiJTI0Iik7Ci0rCWNoZWNrX2VuY29k ZSgiwqIiLCAyLCAiIiwgIiVDMiVBMiIpOwotKwljaGVja19lbmNvZGUoIuKCrCIsIDMsICIiLCAi JUUyJTgyJUFDIik7Ci0rCWNoZWNrX2VuY29kZSgi8JCNiCIsIDQsICIiLCAiJUYwJTkwJThEJTg4 Iik7Ci0rCi0rCS8qIENLX1VURjhDSEFSIGlzIHVuc2lnbmVkIGNoYXIgKDEgYnl0ZSkgKi8KLSsJ LyogbGFiZWxzIFNIT1VMRCBiZSBub3JtYWxpemVkIHRvIE5GQyBbVUFYMTVdICovCi0rCi0rfQot KwotK3N0YXRpYyB2b2lkCi0rdGVzdF9wZXJjZW50X2VuY29kZSh2b2lkKQotK3sKLSsJLyogV2l0 aG91dCBhbGxvdyBsaXN0IGVuY29kZXMgZXZlcnl0aGluZyAoZm9yIENLQV9JRCkgKi8KLSsJY2hl Y2tfZW5jb2RlKCJBKiIsIDIsICIiLCAiJTQxJTJBIik7Ci0rCWNoZWNrX2VuY29kZSgiXHgwMCIs IDEsICIiLCAiJTAwIik7Ci0rCWNoZWNrX2VuY29kZSgiXHg3RiIsIDEsICIiLCAiJTdGIik7Ci0r CWNoZWNrX2VuY29kZSgiXHg4MCIsIDEsICIiLCAiJTgwIik7Ci0rCWNoZWNrX2VuY29kZSgiXHhm ZiIsIDEsICIiLCAiJUZGIik7Ci0rCi0rCS8qIERlZmF1bHQgYWxsb3cgbGlzdCBlbmNvZGVzIGFu eXRoaW5nIGJ1dCBzYWZlIGxldHRlcnMgKi8KLSsJY2hlY2tfZW5jb2RlKCJ0ZXN0IiAiXHgwMCIg IjBhbHBoYSIsIDExLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKLSsJICAgICJ0ZXN0JTAwMGFscGhh Iik7Ci0rCWNoZWNrX2VuY29kZSgiICIsIDEsIFBLQ1MxMV9VUklfV0hJVEVMSVNULAotKwkgICAg IiUyMCIpOyAvKiBTcGFjZSBNVVNUIGJlIHBlcmNlbnQgZW5jb2RlZCAqLwotKwljaGVja19lbmNv ZGUoIi8iLCAxLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKLSsJICAgICIlMkYiKTsgLyogJy8nIGRl bGltaXRlciBNVVNUIGJlIHBlcmNlbnQgZW5jb2RlZCAoaW4gdGhlIHBhdGgpICovCi0rCWNoZWNr X2VuY29kZSgiPyIsIDEsIFBLQ1MxMV9VUklfV0hJVEVMSVNULAotKwkgICAgIiUzRiIpOyAvKiBk ZWxpbWl0ZXIgJz8nIE1VU1QgYmUgcGVyY2VudCBlbmNvZGVkIChpbiB0aGUgcGF0aCkgKi8KLSsJ Y2hlY2tfZW5jb2RlKCIjIiwgMSwgUEtDUzExX1VSSV9XSElURUxJU1QsCi0rCSAgICAiJTIzIik7 IC8qICcjJyBNVVNUIGJlIGFsd2F5cyBwZXJjZW50IGVuY29kZWQgKi8KLSsJY2hlY2tfZW5jb2Rl KCJrZXk9dmFsdWU7c2VwYXJhdG9yP3F1ZXJ5JmFtcDsjYW5jaCIsIDM1LCBQS0NTMTFfVVJJX1dI SVRFTElTVCwKLSsJICAgICJrZXklM0R2YWx1ZSUzQnNlcGFyYXRvciUzRnF1ZXJ5JTI2YW1wJTNC JTIzYW5jaCIpOwotKwotKwkvKiBDb21wb25lbnRzIGluIHF1ZXJ5IGNhbiBoYXZlICcvJyB1bmVu Y29kZWQgKHVzZWZ1bCBmb3IgcGF0aHMpICovCi0rCWNoZWNrX2VuY29kZSgiL3BhdGgvdG8uZmls ZSIsIDEzLCBQS0NTMTFfVVJJX1dISVRFTElTVCAiLyIsCi0rCSAgICAiL3BhdGgvdG8uZmlsZSIp OwotK30KLSsKLSt2b2lkCi0rY2hlY2tfZGVjb2RlKGNoYXIgKnNvdXJjZSwgY2hhciAqZXhwZWN0 LCBpbnQgZXhwZWN0X2xlbikKLSt7Ci0rCWNoYXIgKmJ1ZiA9IE5VTEwsICpvdXQgPSBOVUxMOwot KwlpbnQgcnY7Ci0rCi0rCWFzcHJpbnRmKCZidWYsICJwZXJjZW50X2RlY29kZTogJXMiLCBzb3Vy Y2UpOwotKwlURVNUX1NUQVJUKGJ1Zik7Ci0rCWZyZWUoYnVmKTsKLSsKLSsJcnYgPSBwZXJjZW50 X2RlY29kZShzb3VyY2UsICZvdXQpOwotKwlBU1NFUlRfSU5UX0VRKHJ2LCBleHBlY3RfbGVuKTsK LSsJaWYgKHJ2ID49IDApCi0rCQlBU1NFUlRfTUVNX0VRKG91dCwgZXhwZWN0LCBleHBlY3RfbGVu KTsKLSsJZnJlZShvdXQpOwotKwlURVNUX0RPTkUoKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLSt0 ZXN0X3BlcmNlbnRfZGVjb2RlKHZvaWQpCi0rewotKwkvKiBzaW1wbGUgdmFsaWQgY2FzZXMgKi8K LSsJY2hlY2tfZGVjb2RlKCIlMDAiLCAiXHgwMCIsIDEpOwotKwljaGVja19kZWNvZGUoIiVGRiIs ICJceEZGIiwgMSk7Ci0rCi0rCS8qIG5vcm1hbCBzdHJpbmdzIHNob2xkIGJlIGtlcHQgaW50YWN0 ICovCi0rCWNoZWNrX2RlY29kZSgic3RyaW5ncyBhcmUgbGVmdCIsICJzdHJpbmdzIGFyZSBsZWZ0 IiwgMTYpOwotKwljaGVja19kZWNvZGUoIjEwJTI1IG9mIHRyZWVzIiwgIjEwJSBvZiB0cmVlcyIs IDEyKTsKLSsKLSsJLyogbWFrZSBzdXJlIG5vIG1vcmUgdGhhbiAyIGJ5dGVzIGFyZSBwYXJzZWQg Ki8KLSsJY2hlY2tfZGVjb2RlKCIlMjIyIiwgIlx4MjIiICIyIiwgMik7Ci0rCi0rCS8qIGludmFs aWQgZXhwZWN0cyBmYWlsdXJlICovCi0rCWNoZWNrX2RlY29kZSgiJTAiLCAiIiwgLTEpOwotKwlj aGVja19kZWNvZGUoIiVaIiwgIiIsIC0xKTsKLSsJY2hlY2tfZGVjb2RlKCIlRkciLCAiIiwgLTEp OwotK30KLSsKLSt2b2lkCi0rdGVzdHModm9pZCkKLSt7Ci0rCXRlc3RfcGVyY2VudF9lbmNvZGUo KTsKLSsJdGVzdF9wZXJjZW50X2VuY29kZV9tdWx0aWJ5dGUoKTsKLSsJdGVzdF9wZXJjZW50X2Rl Y29kZSgpOwotKwl0ZXN0X3BhcnNlX3ZhbGlkKCk7Ci0rCXRlc3RfcGFyc2VfaW52YWxpZCgpOwot Kwl0ZXN0X2dlbmVyYXRlX3ZhbGlkKCk7Ci0rfQotKwotK3ZvaWQKLStiZW5jaG1hcmtzKHZvaWQp Ci0rewotKwlwcmludGYoIm5vIGJlbmNobWFya3NcbiIpOwotK30KLSsKLWRpZmYgLS1naXQgYS9z c2gtYWRkLmMgYi9zc2gtYWRkLmMKLWluZGV4IDFlOWVkZGY5MC4uZTQ3NmZhNjYyIDEwMDY0NAot LS0tIGEvc3NoLWFkZC5jCi0rKysgYi9zc2gtYWRkLmMKLUBAIC03MCw2ICs3MCw3IEBACi0gI2lu Y2x1ZGUgInNzaC1zay5oIgotICNpbmNsdWRlICJzay1hcGkuaCIKLSAjaW5jbHVkZSAiaG9zdGZp bGUuaCIKLSsjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKLSAKLSAjZGVmaW5lIENFUlRfRVhQ SVJZX0dSQUNFCSg1KjYwKQotIAotQEAgLTI3Miw2ICsyNzMsMzggQEAgY2hlY2tfY2VydF9saWZl dGltZShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICpjZXJ0LCBpbnQgY2VydF9saWZldGltZSkKLSAJcmV0 dXJuIE1JTklNVU0oY2VydF9saWZldGltZSwgKGludCluKTsKLSB9Ci0gCi0rI2lmZGVmIEVOQUJM RV9QS0NTMTEKLStzdGF0aWMgaW50Ci0rdXBkYXRlX2NhcmQoaW50IGFnZW50X2ZkLCBpbnQgYWRk LCBjb25zdCBjaGFyICppZCwgaW50IHFmbGFnLAotKyAgICBpbnQga2V5X29ubHksIGludCBjZXJ0 X29ubHksCi0rICAgIHN0cnVjdCBkZXN0X2NvbnN0cmFpbnQgKipkZXN0X2NvbnN0cmFpbnRzLCBz aXplX3QgbmRlc3RfY29uc3RyYWludHMsCi0rICAgIHN0cnVjdCBzc2hrZXkgKipjZXJ0cywgc2l6 ZV90IG5jZXJ0cywgY2hhciAqcGluKTsKLSsKLStpbnQKLSt1cGRhdGVfcGtjczExX3VyaShpbnQg YWdlbnRfZmQsIGludCBhZGRpbmcsIGNvbnN0IGNoYXIgKnBrY3MxMV91cmksIGludCBxZmxhZywK LSsgICAgc3RydWN0IGRlc3RfY29uc3RyYWludCAqKmRlc3RfY29uc3RyYWludHMsIHNpemVfdCBu ZGVzdF9jb25zdHJhaW50cykKLSt7Ci0rCWNoYXIgKnBpbiA9IE5VTEw7Ci0rCXN0cnVjdCBwa2Nz MTFfdXJpICp1cmk7Ci0rCi0rCS8qIGRyeS1ydW4gcGFyc2UgdG8gbWFrZSBzdXJlIHRoZSBVUkkg aXMgdmFsaWQgYW5kIHRvIHJlcG9ydCBlcnJvcnMgKi8KLSsJdXJpID0gcGtjczExX3VyaV9pbml0 KCk7Ci0rCWlmIChwa2NzMTFfdXJpX3BhcnNlKChjaGFyICopIHBrY3MxMV91cmksIHVyaSkgIT0g MCkKLSsJCWZhdGFsKCJGYWlsZWQgdG8gcGFyc2UgUEtDUyMxMSBVUkkiKTsKLSsJaWYgKHVyaS0+ cGluICE9IE5VTEwpIHsKLSsJCXBpbiA9IHN0cmR1cCh1cmktPnBpbik7Ci0rCQlpZiAocGluID09 IE5VTEwpIHsKLSsJCQlmYXRhbCgiRmFpbGVkIHRvIGR1cHBsaWNhdGUgc3RyaW5nIik7Ci0rCQl9 Ci0rCQkvKiBwaW4gaXMgZnJlZWQgaW4gdGhlIHVwZGF0ZV9jYXJkKCkgKi8KLSsJfQotKwlwa2Nz MTFfdXJpX2NsZWFudXAodXJpKTsKLSsKLSsJcmV0dXJuIHVwZGF0ZV9jYXJkKGFnZW50X2ZkLCBh ZGRpbmcsIHBrY3MxMV91cmksIHFmbGFnLCAxLCAwLAotKwkgICAgICAgICAgIGRlc3RfY29uc3Ry YWludHMsIG5kZXN0X2NvbnN0cmFpbnRzLCBOVUxMLCAwLCBwaW4pOwotK30KLSsjZW5kaWYKLSsK LSBzdGF0aWMgaW50Ci0gYWRkX2ZpbGUoaW50IGFnZW50X2ZkLCBjb25zdCBjaGFyICpmaWxlbmFt ZSwgaW50IGtleV9vbmx5LCBpbnQgY2VydF9vbmx5LAotICAgICBpbnQgcWZsYWcsIGludCBOZmxh ZywgY29uc3QgY2hhciAqc2twcm92aWRlciwKLUBAIC00NjIsMTUgKzQ5NSwxNCBAQCBzdGF0aWMg aW50Ci0gdXBkYXRlX2NhcmQoaW50IGFnZW50X2ZkLCBpbnQgYWRkLCBjb25zdCBjaGFyICppZCwg aW50IHFmbGFnLAotICAgICBpbnQga2V5X29ubHksIGludCBjZXJ0X29ubHksCi0gICAgIHN0cnVj dCBkZXN0X2NvbnN0cmFpbnQgKipkZXN0X2NvbnN0cmFpbnRzLCBzaXplX3QgbmRlc3RfY29uc3Ry YWludHMsCi0tICAgIHN0cnVjdCBzc2hrZXkgKipjZXJ0cywgc2l6ZV90IG5jZXJ0cykKLSsgICAg c3RydWN0IHNzaGtleSAqKmNlcnRzLCBzaXplX3QgbmNlcnRzLCBjaGFyICpwaW4pCi0gewotLQlj aGFyICpwaW4gPSBOVUxMOwotIAlpbnQgciwgcmV0ID0gLTE7Ci0gCi0gCWlmIChrZXlfb25seSkK LSAJCW5jZXJ0cyA9IDA7Ci0gCi0tCWlmIChhZGQpIHsKLSsJaWYgKGFkZCAmJiBwaW4gPT0gTlVM TCkgewotIAkJaWYgKChwaW4gPSByZWFkX3Bhc3NwaHJhc2UoIkVudGVyIHBhc3NwaHJhc2UgZm9y IFBLQ1MjMTE6ICIsCi0gCQkgICAgUlBfQUxMT1dfU1RESU4pKSA9PSBOVUxMKQotIAkJCXJldHVy biAtMTsKLUBAIC02NTIsNiArNjg0LDE0IEBAIGRvX2ZpbGUoaW50IGFnZW50X2ZkLCBpbnQgZGVs ZXRpbmcsIGludCBrZXlfb25seSwgaW50IGNlcnRfb25seSwKLSAgICAgY2hhciAqZmlsZSwgaW50 IHFmbGFnLCBpbnQgTmZsYWcsIGNvbnN0IGNoYXIgKnNrcHJvdmlkZXIsCi0gICAgIHN0cnVjdCBk ZXN0X2NvbnN0cmFpbnQgKipkZXN0X2NvbnN0cmFpbnRzLCBzaXplX3QgbmRlc3RfY29uc3RyYWlu dHMpCi0gewotKyNpZmRlZiBFTkFCTEVfUEtDUzExCi0rCWlmIChzdHJsZW4oZmlsZSkgPj0gc3Ry bGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgotKwkgICAgc3RybmNtcChmaWxlLCBQS0NTMTFfVVJJ X1NDSEVNRSwKLSsJICAgIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsKLSsJCXJl dHVybiB1cGRhdGVfcGtjczExX3VyaShhZ2VudF9mZCwgIWRlbGV0aW5nLCBmaWxlLCBxZmxhZywK LSsgICAgICAgICAgICAgICAgICAgZGVzdF9jb25zdHJhaW50cywgbmRlc3RfY29uc3RyYWludHMp OwotKwl9Ci0rI2VuZGlmCi0gCWlmIChkZWxldGluZykgewotIAkJaWYgKGRlbGV0ZV9maWxlKGFn ZW50X2ZkLCBmaWxlLCBrZXlfb25seSwKLSAJCSAgICBjZXJ0X29ubHksIHFmbGFnKSA9PSAtMSkK LUBAIC0xMDAzLDcgKzEwNDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCWlm ICh1cGRhdGVfY2FyZChhZ2VudF9mZCwgIWRlbGV0aW5nLCBwa2NzMTFwcm92aWRlciwKLSAJCSAg ICBxZmxhZywga2V5X29ubHksIGNlcnRfb25seSwKLSAJCSAgICBkZXN0X2NvbnN0cmFpbnRzLCBu ZGVzdF9jb25zdHJhaW50cywKLS0JCSAgICBjZXJ0cywgbmNlcnRzKSA9PSAtMSkKLSsJCSAgICBj ZXJ0cywgbmNlcnRzLCBOVUxMKSA9PSAtMSkKLSAJCQlyZXQgPSAxOwotIAkJZm9yIChuID0gMDsg biA8IG5jZXJ0czsgbisrKQotIAkJCXNzaGtleV9mcmVlKGNlcnRzW25dKTsKLWRpZmYgLS1naXQg YS9zc2gtYWdlbnQuYyBiL3NzaC1hZ2VudC5jCi1pbmRleCA3NzczYTRiMDcuLjM0NTFkN2ExNCAx MDA2NDQKLS0tLSBhL3NzaC1hZ2VudC5jCi0rKysgYi9zc2gtYWdlbnQuYwotQEAgLTE1NDYsMTAg KzE1NDYsNzUgQEAgYWRkX3AxMV9pZGVudGl0eShzdHJ1Y3Qgc3Noa2V5ICprZXksIGNoYXIgKmNv bW1lbnQsIGNvbnN0IGNoYXIgKnByb3ZpZGVyLAotIAlpZHRhYi0+bmVudHJpZXMrKzsKLSB9Ci0g Ci0rc3RhdGljIGNoYXIgKgotK3Nhbml0aXplX3BrY3MxMV9wcm92aWRlcihjb25zdCBjaGFyICpw cm92aWRlcikKLSt7Ci0rCXN0cnVjdCBwa2NzMTFfdXJpICp1cmkgPSBOVUxMOwotKwljaGFyICpz YW5lX3VyaSwgKm1vZHVsZV9wYXRoID0gTlVMTDsgLyogZGVmYXVsdCBwYXRoICovCi0rCWNoYXIg Y2Fub25pY2FsX3Byb3ZpZGVyW1BBVEhfTUFYXTsKLSsKLSsJaWYgKHByb3ZpZGVyID09IE5VTEwp Ci0rCQlyZXR1cm4gTlVMTDsKLSsKLSsJbWVtc2V0KGNhbm9uaWNhbF9wcm92aWRlciwgMCwgc2l6 ZW9mKGNhbm9uaWNhbF9wcm92aWRlcikpOwotKwotKwlpZiAoc3RybGVuKHByb3ZpZGVyKSA+PSBz dHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCi0rCSAgICBzdHJuY21wKHByb3ZpZGVyLCBQS0NT MTFfVVJJX1NDSEVNRSwKLSsJICAgIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsK LSsJCS8qIFBLQ1MjMTEgVVJJICovCi0rCQl1cmkgPSBwa2NzMTFfdXJpX2luaXQoKTsKLSsJCWlm ICh1cmkgPT0gTlVMTCkgewotKwkJCWVycm9yKCJGYWlsZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIp OwotKwkJCXJldHVybiBOVUxMOwotKwkJfQotKwotKwkJaWYgKHBrY3MxMV91cmlfcGFyc2UocHJv dmlkZXIsIHVyaSkgIT0gMCkgewotKwkJCWVycm9yKCJGYWlsZWQgdG8gcGFyc2UgUEtDUyMxMSBV UkkiKTsKLSsJCQlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKLSsJCQlyZXR1cm4gTlVMTDsKLSsJ CX0KLSsJCS8qIHZhbGlkYXRlIGFsc28gcHJvdmlkZXIgZnJvbSBVUkkgKi8KLSsJCWlmICh1cmkt Pm1vZHVsZV9wYXRoKQotKwkJCW1vZHVsZV9wYXRoID0gc3RyZHVwKHVyaS0+bW9kdWxlX3BhdGgp OwotKwl9IGVsc2UKLSsJCW1vZHVsZV9wYXRoID0gc3RyZHVwKHByb3ZpZGVyKTsgLyogc2ltcGxl IHBhdGggKi8KLSsKLSsJaWYgKG1vZHVsZV9wYXRoICE9IE5VTEwpIHsgLyogZG8gbm90IHZhbGlk YXRlIGRlZmF1bHQgTlVMTCBwYXRoIGluIFVSSSAqLwotKwkJaWYgKHJlYWxwYXRoKG1vZHVsZV9w YXRoLCBjYW5vbmljYWxfcHJvdmlkZXIpID09IE5VTEwpIHsKLSsJCQl2ZXJib3NlKCJmYWlsZWQg UEtDUyMxMSBwcm92aWRlciBcIiUuMTAwc1wiOiByZWFscGF0aDogJXMiLAotKwkJCSAgICBtb2R1 bGVfcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLSsJCQlmcmVlKG1vZHVsZV9wYXRoKTsKLSsJCQlw a2NzMTFfdXJpX2NsZWFudXAodXJpKTsKLSsJCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsJCWZyZWUo bW9kdWxlX3BhdGgpOwotKwkJaWYgKG1hdGNoX3BhdHRlcm5fbGlzdChjYW5vbmljYWxfcHJvdmlk ZXIsIGFsbG93ZWRfcHJvdmlkZXJzLCAwKSAhPSAxKSB7Ci0rCQkJdmVyYm9zZSgicmVmdXNpbmcg UEtDUyMxMSBwcm92aWRlciBcIiUuMTAwc1wiOiAiCi0rCQkJICAgICJub3QgYWxsb3dlZCIsIGNh bm9uaWNhbF9wcm92aWRlcik7Ci0rCQkJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7Ci0rCQkJcmV0 dXJuIE5VTEw7Ci0rCQl9Ci0rCi0rCQkvKiBjb3B5IHZlcmlmaWVkIGFuZCBzYW5pdGl6ZWQgcHJv dmlkZXIgcGF0aCBiYWNrIHRvIHRoZSB1cmkgKi8KLSsJCWlmICh1cmkpIHsKLSsJCQlmcmVlKHVy aS0+bW9kdWxlX3BhdGgpOwotKwkJCXVyaS0+bW9kdWxlX3BhdGggPSB4c3RyZHVwKGNhbm9uaWNh bF9wcm92aWRlcik7Ci0rCQl9Ci0rCX0KLSsKLSsJaWYgKHVyaSkgewotKwkJc2FuZV91cmkgPSBw a2NzMTFfdXJpX2dldCh1cmkpOwotKwkJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7Ci0rCQlyZXR1 cm4gc2FuZV91cmk7Ci0rCX0gZWxzZSB7Ci0rCQlyZXR1cm4geHN0cmR1cChjYW5vbmljYWxfcHJv dmlkZXIpOyAvKiBzaW1wbGUgcGF0aCAqLwotKwl9Ci0rfQotKwotIHN0YXRpYyB2b2lkCi0gcHJv Y2Vzc19hZGRfc21hcnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkKLSB7Ci0tCWNoYXIgKnByb3Zp ZGVyID0gTlVMTCwgKnBpbiA9IE5VTEwsIGNhbm9uaWNhbF9wcm92aWRlcltQQVRIX01BWF07Ci0r CWNoYXIgKnByb3ZpZGVyID0gTlVMTCwgKnBpbiA9IE5VTEwsICpzYW5lX3VyaSA9IE5VTEw7Ci0g CWNoYXIgKipjb21tZW50cyA9IE5VTEw7Ci0gCWludCByLCBpLCBjb3VudCA9IDAsIHN1Y2Nlc3Mg PSAwLCBjb25maXJtID0gMDsKLSAJdV9pbnQgc2Vjb25kcyA9IDA7Ci1AQCAtMTU3OCwyNSArMTY0 MywxOCBAQCBwcm9jZXNzX2FkZF9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5ICplKQotIAkJICAg ICJwcm92aWRlcnMgaXMgZGlzYWJsZWQiLCBwcm92aWRlcik7Ci0gCQlnb3RvIHNlbmQ7Ci0gCX0K LS0JaWYgKHJlYWxwYXRoKHByb3ZpZGVyLCBjYW5vbmljYWxfcHJvdmlkZXIpID09IE5VTEwpIHsK LS0JCXZlcmJvc2UoImZhaWxlZCBQS0NTIzExIGFkZCBvZiBcIiUuMTAwc1wiOiByZWFscGF0aDog JXMiLAotLQkJICAgIHByb3ZpZGVyLCBzdHJlcnJvcihlcnJubykpOwotLQkJZ290byBzZW5kOwot LQl9Ci0tCWlmIChtYXRjaF9wYXR0ZXJuX2xpc3QoY2Fub25pY2FsX3Byb3ZpZGVyLCBhbGxvd2Vk X3Byb3ZpZGVycywgMCkgIT0gMSkgewotLQkJdmVyYm9zZSgicmVmdXNpbmcgUEtDUyMxMSBhZGQg b2YgXCIlLjEwMHNcIjogIgotLQkJICAgICJwcm92aWRlciBub3QgYWxsb3dlZCIsIGNhbm9uaWNh bF9wcm92aWRlcik7Ci0rCXNhbmVfdXJpID0gc2FuaXRpemVfcGtjczExX3Byb3ZpZGVyKHByb3Zp ZGVyKTsKLSsJaWYgKHNhbmVfdXJpID09IE5VTEwpCi0gCQlnb3RvIHNlbmQ7Ci0tCX0KLS0JZGVi dWdfZigiYWRkICUuMTAwcyIsIGNhbm9uaWNhbF9wcm92aWRlcik7Ci0gCWlmIChsaWZldGltZSAm JiAhZGVhdGgpCi0gCQlkZWF0aCA9IG1vbm90aW1lKCkgKyBsaWZldGltZTsKLSAKLS0JY291bnQg PSBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNhbm9uaWNhbF9wcm92aWRlciwgcGluLCAma2V5cywgJmNv bW1lbnRzKTsKLSsJZGVidWdfZigiYWRkICUuMTAwcyIsIHNhbmVfdXJpKTsKLSsJY291bnQgPSBw a2NzMTFfYWRkX3Byb3ZpZGVyKHNhbmVfdXJpLCBwaW4sICZrZXlzLCAmY29tbWVudHMpOwotIAlm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotIAkJaWYgKGNvbW1lbnRzW2ldID09IE5VTEwg fHwgY29tbWVudHNbaV1bMF0gPT0gJ1wwJykgewotIAkJCWZyZWUoY29tbWVudHNbaV0pOwotLQkJ CWNvbW1lbnRzW2ldID0geHN0cmR1cChjYW5vbmljYWxfcHJvdmlkZXIpOwotKwkJCWNvbW1lbnRz W2ldID0geHN0cmR1cChzYW5lX3VyaSk7Ci0gCQl9Ci0gCQlmb3IgKGogPSAwOyBqIDwgbmNlcnRz OyBqKyspIHsKLSAJCQlpZiAoIXNzaGtleV9pc19jZXJ0KGNlcnRzW2pdKSkKLUBAIC0xNjA2LDEz ICsxNjY0LDEzIEBAIHByb2Nlc3NfYWRkX3NtYXJ0Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUpCi0g CQkJaWYgKHBrY3MxMV9tYWtlX2NlcnQoa2V5c1tpXSwgY2VydHNbal0sICZrKSAhPSAwKQotIAkJ CQljb250aW51ZTsKLSAJCQlhZGRfcDExX2lkZW50aXR5KGssIHhzdHJkdXAoY29tbWVudHNbaV0p LAotLQkJCSAgICBjYW5vbmljYWxfcHJvdmlkZXIsIGRlYXRoLCBjb25maXJtLAotKwkJCSAgICBz YW5lX3VyaSwgZGVhdGgsIGNvbmZpcm0sCi0gCQkJICAgIGRlc3RfY29uc3RyYWludHMsIG5kZXN0 X2NvbnN0cmFpbnRzKTsKLSAJCQlzdWNjZXNzID0gMTsKLSAJCX0KLSAJCWlmICghY2VydF9vbmx5 ICYmIGxvb2t1cF9pZGVudGl0eShrZXlzW2ldKSA9PSBOVUxMKSB7Ci0gCQkJYWRkX3AxMV9pZGVu dGl0eShrZXlzW2ldLCBjb21tZW50c1tpXSwKLS0JCQkgICAgY2Fub25pY2FsX3Byb3ZpZGVyLCBk ZWF0aCwgY29uZmlybSwKLSsJCQkgICAgc2FuZV91cmksIGRlYXRoLCBjb25maXJtLAotIAkJCSAg ICBkZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50cyk7Ci0gCQkJa2V5c1tpXSA9IE5V TEw7CQkvKiB0cmFuc2ZlcnJlZCAqLwotIAkJCWNvbW1lbnRzW2ldID0gTlVMTDsJLyogdHJhbnNm ZXJyZWQgKi8KLUBAIC0xNjI1LDYgKzE2ODMsNyBAQCBwcm9jZXNzX2FkZF9zbWFydGNhcmRfa2V5 KFNvY2tldEVudHJ5ICplKQotIHNlbmQ6Ci0gCWZyZWUocGluKTsKLSAJZnJlZShwcm92aWRlcik7 Ci0rCWZyZWUoc2FuZV91cmkpOwotIAlmcmVlKGtleXMpOwotIAlmcmVlKGNvbW1lbnRzKTsKLSAJ ZnJlZV9kZXN0X2NvbnN0cmFpbnRzKGRlc3RfY29uc3RyYWludHMsIG5kZXN0X2NvbnN0cmFpbnRz KTsKLUBAIC0xNjM3LDggKzE2OTYsOCBAQCBzZW5kOgotIHN0YXRpYyB2b2lkCi0gcHJvY2Vzc19y ZW1vdmVfc21hcnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkKLSB7Ci0tCWNoYXIgKnByb3ZpZGVy ID0gTlVMTCwgKnBpbiA9IE5VTEwsIGNhbm9uaWNhbF9wcm92aWRlcltQQVRIX01BWF07Ci0tCWlu dCByLCBzdWNjZXNzID0gMDsKLSsJY2hhciAqcHJvdmlkZXIgPSBOVUxMLCAqcGluID0gTlVMTCwg KnNhbmVfdXJpID0gTlVMTDsKLSsJaW50IHIsIHN1Y2Nlc3MgPSAwLCByZW1vdmVkX2NvdW50ID0g MDsKLSAJSWRlbnRpdHkgKmlkLCAqbnh0OwotIAotIAlkZWJ1ZzJfZigiZW50ZXJpbmciKTsKLUBA IC0xNjQ5LDMwICsxNzA4LDM4IEBAIHByb2Nlc3NfcmVtb3ZlX3NtYXJ0Y2FyZF9rZXkoU29ja2V0 RW50cnkgKmUpCi0gCX0KLSAJZnJlZShwaW4pOwotIAotLQlpZiAocmVhbHBhdGgocHJvdmlkZXIs IGNhbm9uaWNhbF9wcm92aWRlcikgPT0gTlVMTCkgewotLQkJdmVyYm9zZSgiZmFpbGVkIFBLQ1Mj MTEgYWRkIG9mIFwiJS4xMDBzXCI6IHJlYWxwYXRoOiAlcyIsCi0tCQkgICAgcHJvdmlkZXIsIHN0 cmVycm9yKGVycm5vKSk7Ci0rCXNhbmVfdXJpID0gc2FuaXRpemVfcGtjczExX3Byb3ZpZGVyKHBy b3ZpZGVyKTsKLSsJaWYgKHNhbmVfdXJpID09IE5VTEwpCi0gCQlnb3RvIHNlbmQ7Ci0tCX0KLSAK LS0JZGVidWdfZigicmVtb3ZlICUuMTAwcyIsIGNhbm9uaWNhbF9wcm92aWRlcik7Ci0rCWRlYnVn X2YoInJlbW92ZSAlLjEwMHMiLCBzYW5lX3VyaSk7Ci0gCWZvciAoaWQgPSBUQUlMUV9GSVJTVCgm aWR0YWItPmlkbGlzdCk7IGlkOyBpZCA9IG54dCkgewotIAkJbnh0ID0gVEFJTFFfTkVYVChpZCwg bmV4dCk7Ci0gCQkvKiBTa2lwIGZpbGUtLWJhc2VkIGtleXMgKi8KLSAJCWlmIChpZC0+cHJvdmlk ZXIgPT0gTlVMTCkKLSAJCQljb250aW51ZTsKLS0JCWlmICghc3RyY21wKGNhbm9uaWNhbF9wcm92 aWRlciwgaWQtPnByb3ZpZGVyKSkgewotKwkJaWYgKCFzdHJjbXAoc2FuZV91cmksIGlkLT5wcm92 aWRlcikpIHsKLSAJCQlUQUlMUV9SRU1PVkUoJmlkdGFiLT5pZGxpc3QsIGlkLCBuZXh0KTsKLSAJ CQlmcmVlX2lkZW50aXR5KGlkKTsKLSAJCQlpZHRhYi0+bmVudHJpZXMtLTsKLSsJCQlyZW1vdmVk X2NvdW50Kys7Ci0gCQl9Ci0gCX0KLS0JaWYgKHBrY3MxMV9kZWxfcHJvdmlkZXIoY2Fub25pY2Fs X3Byb3ZpZGVyKSA9PSAwKQotKwkvKiBPbmx5IHN1Y2NlZWQgaWYgd2UgYWN0dWFsbHkgcmVtb3Zl ZCBrZXlzIGFuZCB1bmxvYWRlZCBwcm92aWRlciAqLwotKwlpZiAocmVtb3ZlZF9jb3VudCA+IDAg JiYgcGtjczExX2RlbF9wcm92aWRlcihzYW5lX3VyaSkgPT0gMCkgewotIAkJc3VjY2VzcyA9IDE7 Ci0tCWVsc2UKLSsJCWRlYnVnX2YoInJlbW92ZWQgJWQga2V5KHMpIGZyb20gcHJvdmlkZXIgJXMi LAotKwkJICAgIHJlbW92ZWRfY291bnQsIHNhbmVfdXJpKTsKLSsJfSBlbHNlIGlmIChyZW1vdmVk X2NvdW50ID09IDApIHsKLSsJCWVycm9yX2YoIm5vIG1hdGNoaW5nIGtleXMgZm91bmQgZm9yIHBy b3ZpZGVyICVzIiwgc2FuZV91cmkpOwotKwkJLyogU3RpbGwgdHJ5IHRvIGNsZWFuIHVwIHByb3Zp ZGVyIGlmIGl0IGV4aXN0cyAqLwotKwkJcGtjczExX2RlbF9wcm92aWRlcihzYW5lX3VyaSk7Ci0r CX0gZWxzZSB7Ci0gCQllcnJvcl9mKCJwa2NzMTFfZGVsX3Byb3ZpZGVyIGZhaWxlZCIpOwotKwl9 Ci0gc2VuZDoKLSAJZnJlZShwcm92aWRlcik7Ci0rCWZyZWUoc2FuZV91cmkpOwotIAlzZW5kX3N0 YXR1cyhlLCBzdWNjZXNzKTsKLSB9Ci0gI2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEgKi8KLWRpZmYg LS1naXQgYS9zc2gta2V5Z2VuLmMgYi9zc2gta2V5Z2VuLmMKLWluZGV4IDEyNDMwZTZhNC4uMjY2 NDYyZjA3IDEwMDY0NAotLS0tIGEvc3NoLWtleWdlbi5jCi0rKysgYi9zc2gta2V5Z2VuLmMKLUBA IC04MzEsOCArODMxLDExIEBAIGRvX2Rvd25sb2FkKHN0cnVjdCBwYXNzd2QgKnB3KQotIAkJCWZy ZWUoZnApOwotIAkJfSBlbHNlIHsKLSAJCQkodm9pZCkgc3Noa2V5X3dyaXRlKGtleXNbaV0sIHN0 ZG91dCk7IC8qIFhYWCBjaGVjayAqLwotLQkJCWZwcmludGYoc3Rkb3V0LCAiJXMlc1xuIiwKLS0J CQkgICAgKihjb21tZW50c1tpXSkgPT0gJ1wwJyA/ICIiIDogIiAiLCBjb21tZW50c1tpXSk7Ci0r CQkJaWYgKCooY29tbWVudHNbaV0pICE9ICdcMCcpIHsKLSsJCQkJZnByaW50ZihzdGRvdXQsICIg JXMiLCBjb21tZW50c1tpXSk7Ci0rCQkJfQotKwkJCSh2b2lkKSBwa2NzMTFfdXJpX3dyaXRlKGtl eXNbaV0sIHN0ZG91dCk7Ci0rCQkJZnByaW50ZihzdGRvdXQsICJcbiIpOwotIAkJfQotIAkJZnJl ZShjb21tZW50c1tpXSk7Ci0gCQlzc2hrZXlfZnJlZShrZXlzW2ldKTsKLWRpZmYgLS1naXQgYS9z c2gtcGtjczExLWNsaWVudC5jIGIvc3NoLXBrY3MxMS1jbGllbnQuYwotaW5kZXggMzBhNGNmNWRj Li4zZmQwNThhMGMgMTAwNjQ0Ci0tLS0gYS9zc2gtcGtjczExLWNsaWVudC5jCi0rKysgYi9zc2gt cGtjczExLWNsaWVudC5jCi1AQCAtMTgsNiArMTgsNyBAQAotIAotICNpbmNsdWRlICJpbmNsdWRl cy5oIgotIAotKyNpZmRlZiBFTkFCTEVfUEtDUzExCi0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgot ICNpbmNsdWRlIDxzeXMvdGltZS5oPgotICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci1AQCAtMzgs NiArMzksNyBAQAotICNpbmNsdWRlICJhdXRoZmQuaCIKLSAjaW5jbHVkZSAiYXRvbWljaW8uaCIK LSAjaW5jbHVkZSAic3NoLXBrY3MxMS5oIgotKyNpbmNsdWRlICJzc2gtcGtjczExLXVyaS5oIgot ICNpbmNsdWRlICJzc2hlcnIuaCIKLSAKLSAvKiBib3Jyb3dzIGNvZGUgZnJvbSBzZnRwLXNlcnZl ciBhbmQgc3NoLWFnZW50ICovCi1AQCAtMzc5LDYgKzM4MSwxOSBAQCBwa2NzMTFfc3RhcnRfaGVs cGVyKGNvbnN0IGNoYXIgKnBhdGgpCi0gCXJldHVybiBoZWxwZXI7Ci0gfQotIAotK2ludAotK3Br Y3MxMV9hZGRfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBwa2NzMTFfdXJpICp1cmksIGNoYXIgKnBp biwgc3RydWN0IHNzaGtleSAqKiprZXlwLCBjaGFyICoqKmxhYmVsc3ApCi0rewotKwlpbnQgbmtl eXMgPSAwOwotKwljaGFyICpwcm92aWRlcl91cmkgPSBwa2NzMTFfdXJpX2dldCh1cmkpOwotKwot KwlkZWJ1Z19mKCJjYWxsZWQsIHByb3ZpZGVyX3VyaSA9ICVzIiwgcHJvdmlkZXJfdXJpKTsKLSsK LSsJbmtleXMgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyKHByb3ZpZGVyX3VyaSwgcGluLCBrZXlwLCBs YWJlbHNwKTsKLSsKLSsJcmV0dXJuIG5rZXlzOwotK30KLSsKLSBpbnQKLSBwa2NzMTFfYWRkX3By b3ZpZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtleSAqKiprZXlzcCwKLSAg ICAgY2hhciAqKipsYWJlbHNwKQotQEAgLTM5MCw2ICs0MDUsOCBAQCBwa2NzMTFfYWRkX3Byb3Zp ZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtleSAqKiprZXlzcCwKLSAJc3Ry dWN0IHNzaGJ1ZiAqbXNnOwotIAlzdHJ1Y3QgaGVscGVyICpoZWxwZXI7Ci0gCi0rCWRlYnVnX2Yo ImNhbGxlZCwgbmFtZSA9ICVzIiwgbmFtZSk7Ci0rCi0gCWlmICgoaGVscGVyID0gaGVscGVyX2J5 X3Byb3ZpZGVyKG5hbWUpKSA9PSBOVUxMICYmCi0gCSAgICAoaGVscGVyID0gcGtjczExX3N0YXJ0 X2hlbHBlcihuYW1lKSkgPT0gTlVMTCkKLSAJCXJldHVybiAtMTsKLUBAIC00MTQsNiArNDMxLDcg QEAgcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpuYW1lLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hr ZXkgKioqa2V5c3AsCi0gCQkqa2V5c3AgPSB4Y2FsbG9jKG5rZXlzLCBzaXplb2Yoc3RydWN0IHNz aGtleSAqKSk7Ci0gCQlpZiAobGFiZWxzcCkKLSAJCQkqbGFiZWxzcCA9IHhjYWxsb2MobmtleXMs IHNpemVvZihjaGFyICopKTsKLSsJCWRlYnVnX2YoIm5rZXlzID0gJXUiLCBua2V5cyk7Ci0gCQlm b3IgKGkgPSAwOyBpIDwgbmtleXM7IGkrKykgewotIAkJCS8qIFhYWCBjbGVhbiB1cCBwcm9wZXJs eSBpbnN0ZWFkIG9mIGZhdGFsKCkgKi8KLSAJCQlpZiAoKHIgPSBzc2hrZXlfZnJvbXMobXNnLCAm aykpICE9IDAgfHwKLUBAIC00OTcsMyArNTE1LDQgQEAgcGtjczExX2tleV9mcmVlKHN0cnVjdCBz c2hrZXkgKmtleSkKLSAJaWYgKGhlbHBlci0+bmtleWJsb2JzID09IDApCi0gCQloZWxwZXJfdGVy bWluYXRlKGhlbHBlcik7Ci0gfQotKyNlbmRpZgotZGlmZiAtLWdpdCBhL3NzaC1wa2NzMTEtdXJp LmMgYi9zc2gtcGtjczExLXVyaS5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAw MDAwLi5kNWIwNzQ1OTIKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NzaC1wa2NzMTEtdXJpLmMKLUBA IC0wLDAgKzEsNDM4IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdAotKyAq Ci0rICogQXV0aG9yczogSmFrdWIgSmVsZW4gPGpqZWxlbkByZWRoYXQuY29tPgotKyAqCi0rICog UGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0 d2FyZSBmb3IgYW55Ci0rICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBn cmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotKyAqIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0rICoKLSsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMg QUxMIFdBUlJBTlRJRVMKLSsgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElO RyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0rICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSsgKiBBTlkg U1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFO WSBEQU1BR0VTCi0rICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0rICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdM SUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSsgKiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJF LgotKyAqLwotKwotKyNpbmNsdWRlICJpbmNsdWRlcy5oIgotKwotKyNpZmRlZiBFTkFCTEVfUEtD UzExCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxzdGRsaWIuaD4KLSsKLSsjaW5jbHVkZSAic3Noa2V5LmgiCi0rI2luY2x1ZGUgInNzaGJ1 Zi5oIgotKyNpbmNsdWRlICJsb2cuaCIKLSsKLSsjZGVmaW5lIENSWVBUT0tJX0NPTVBBVAotKyNp bmNsdWRlICJwa2NzMTEuaCIKLSsKLSsjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKLSsKLSsj ZGVmaW5lIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IgIjsiCi0rI2RlZmluZSBQS0NTMTFfVVJJ X1FVRVJZX1NFUEFSQVRPUiAiJiIKLSsjZGVmaW5lIFBLQ1MxMV9VUklfVkFMVUVfU0VQQVJBVE9S ICI9IgotKyNkZWZpbmUgUEtDUzExX1VSSV9JRCAiaWQiCi0rI2RlZmluZSBQS0NTMTFfVVJJX1RP S0VOICJ0b2tlbiIKLSsjZGVmaW5lIFBLQ1MxMV9VUklfT0JKRUNUICJvYmplY3QiCi0rI2RlZmlu ZSBQS0NTMTFfVVJJX0xJQl9NQU5VRiAibGlicmFyeS1tYW51ZmFjdHVyZXIiCi0rI2RlZmluZSBQ S0NTMTFfVVJJX01BTlVGICJtYW51ZmFjdHVyZXIiCi0rI2RlZmluZSBQS0NTMTFfVVJJX1NFUklB TCAic2VyaWFsIgotKyNkZWZpbmUgUEtDUzExX1VSSV9NT0RVTEVfUEFUSCAibW9kdWxlLXBhdGgi Ci0rI2RlZmluZSBQS0NTMTFfVVJJX1BJTl9WQUxVRSAicGluLXZhbHVlIgotKwotKy8qIEtleXdv cmQgdG9rZW5zLiAqLwotK3R5cGVkZWYgZW51bSB7Ci0rCXBJZCwgcFRva2VuLCBwT2JqZWN0LCBw TGlicmFyeU1hbnVmYWN0dXJlciwgcE1hbnVmYWN0dXJlciwgcFNlcmlhbCwKLSsJcE1vZHVsZVBh dGgsIHBQaW5WYWx1ZSwgcEJhZE9wdGlvbgotK30gcGtjczExdXJpT3BDb2RlczsKLSsKLSsvKiBU ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0b2tlbnMuICovCi0rc3RhdGljIHN0cnVjdCB7 Ci0rCWNvbnN0IGNoYXIgKm5hbWU7Ci0rCXBrY3MxMXVyaU9wQ29kZXMgb3Bjb2RlOwotK30ga2V5 d29yZHNbXSA9IHsKLSsJeyBQS0NTMTFfVVJJX0lELCBwSWQgfSwKLSsJeyBQS0NTMTFfVVJJX1RP S0VOLCBwVG9rZW4gfSwKLSsJeyBQS0NTMTFfVVJJX09CSkVDVCwgcE9iamVjdCB9LAotKwl7IFBL Q1MxMV9VUklfTElCX01BTlVGLCBwTGlicmFyeU1hbnVmYWN0dXJlciB9LAotKwl7IFBLQ1MxMV9V UklfTUFOVUYsIHBNYW51ZmFjdHVyZXIgfSwKLSsJeyBQS0NTMTFfVVJJX1NFUklBTCwgcFNlcmlh bCB9LAotKwl7IFBLQ1MxMV9VUklfTU9EVUxFX1BBVEgsIHBNb2R1bGVQYXRoIH0sCi0rCXsgUEtD UzExX1VSSV9QSU5fVkFMVUUsIHBQaW5WYWx1ZSB9LAotKwl7IE5VTEwsIHBCYWRPcHRpb24gfQot K307Ci0rCi0rc3RhdGljIHBrY3MxMXVyaU9wQ29kZXMKLStwYXJzZV90b2tlbihjb25zdCBjaGFy ICpjcCkKLSt7Ci0rCXVfaW50IGk7Ci0rCi0rCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldLm5hbWU7 IGkrKykKLSsJCWlmIChzdHJuY2FzZWNtcChjcCwga2V5d29yZHNbaV0ubmFtZSwKLSsJCSAgICBz dHJsZW4oa2V5d29yZHNbaV0ubmFtZSkpID09IDApCi0rCQkJcmV0dXJuIGtleXdvcmRzW2ldLm9w Y29kZTsKLSsKLSsJcmV0dXJuIHBCYWRPcHRpb247Ci0rfQotKwotK2ludAotK3BlcmNlbnRfZGVj b2RlKGNoYXIgKmRhdGEsIGNoYXIgKipvdXRwKQotK3sKLSsJY2hhciB0bXBbM107Ci0rCWNoYXIg Km91dCwgKnRtcF9lbmQ7Ci0rCWNoYXIgKnAgPSBkYXRhOwotKwlsb25nIHZhbHVlOwotKwlzaXpl X3Qgb3V0bGVuID0gMDsKLSsKLSsJb3V0ID0gbWFsbG9jKHN0cmxlbihkYXRhKSsxKTsgLyogdXBw ZXIgYm91bmQgKi8KLSsJaWYgKG91dCA9PSBOVUxMKQotKwkJcmV0dXJuIC0xOwotKwl3aGlsZSAo KnAgIT0gJ1wwJykgewotKwkJc3dpdGNoICgqcCkgewotKwkJY2FzZSAnJSc6Ci0rCQkJcCsrOwot KwkJCWlmICgqcCA9PSAnXDAnKQotKwkJCQlnb3RvIGZhaWw7Ci0rCQkJdG1wWzBdID0gKnArKzsK LSsJCQlpZiAoKnAgPT0gJ1wwJykKLSsJCQkJZ290byBmYWlsOwotKwkJCXRtcFsxXSA9ICpwKys7 Ci0rCQkJdG1wWzJdID0gJ1wwJzsKLSsJCQl0bXBfZW5kID0gTlVMTDsKLSsJCQl2YWx1ZSA9IHN0 cnRvbCh0bXAsICZ0bXBfZW5kLCAxNik7Ci0rCQkJaWYgKHRtcF9lbmQgIT0gdG1wKzIpCi0rCQkJ CWdvdG8gZmFpbDsKLSsJCQllbHNlCi0rCQkJCW91dFtvdXRsZW4rK10gPSAoY2hhcikgdmFsdWU7 Ci0rCQkJYnJlYWs7Ci0rCQlkZWZhdWx0OgotKwkJCW91dFtvdXRsZW4rK10gPSAqcCsrOwotKwkJ CWJyZWFrOwotKwkJfQotKwl9Ci0rCi0rCS8qIHplcm8gdGVybWluYXRlICovCi0rCW91dFtvdXRs ZW5dID0gJ1wwJzsKLSsJKm91dHAgPSBvdXQ7Ci0rCXJldHVybiBvdXRsZW47Ci0rZmFpbDoKLSsJ ZnJlZShvdXQpOwotKwlyZXR1cm4gLTE7Ci0rfQotKwotK3N0cnVjdCBzc2hidWYgKgotK3BlcmNl bnRfZW5jb2RlKGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKmFs bG93X2xpc3QpCi0rewotKwlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVMTDsKLSsJY2hhciB0bXBbNF0s ICpjcDsKLSsJc2l6ZV90IGk7Ci0rCi0rCWlmICgoYiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkK LSsJCXJldHVybiBOVUxMOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSsJCWNw ID0gc3RyY2hyKGFsbG93X2xpc3QsIGRhdGFbaV0pOwotKwkJLyogaWYgYyBpcyBzcGVjaWZpZWQg YXMgJ1wwJyBwb2ludGVyIHRvIHRlcm1pbmF0b3IgaXMgcmV0dXJuZWQgISEgKi8KLSsJCWlmIChj cCAhPSBOVUxMICYmICpjcCAhPSAnXDAnKSB7Ci0rCQkJaWYgKHNzaGJ1Zl9wdXQoYiwgJmRhdGFb aV0sIDEpICE9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJfSBlbHNlCi0rCQkJaWYgKHNucHJpbnRm KHRtcCwgNCwgIiUlJTAyWCIsICh1bnNpZ25lZCBjaGFyKSBkYXRhW2ldKSA8IDMKLSsJCQkgICAg fHwgc3NoYnVmX3B1dChiLCB0bXAsIDMpICE9IDApCi0rCQkJCWdvdG8gZXJyOwotKwl9Ci0rCWlm IChzc2hidWZfcHV0KGIsICJcMCIsIDEpID09IDApCi0rCQlyZXR1cm4gYjsKLStlcnI6Ci0rCXNz aGJ1Zl9mcmVlKGIpOwotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0rY2hhciAqCi0rcGtjczExX3Vy aV9hcHBlbmQoY2hhciAqcGFydCwgY29uc3QgY2hhciAqc2VwYXJhdG9yLCBjb25zdCBjaGFyICpr ZXksCi0rICAgIHN0cnVjdCBzc2hidWYgKnZhbHVlKQotK3sKLSsJY2hhciAqbmV3X3BhcnQ7Ci0r CXNpemVfdCBzaXplID0gMDsKLSsKLSsJaWYgKHZhbHVlID09IE5VTEwpCi0rCQlyZXR1cm4gTlVM TDsKLSsKLSsJc2l6ZSA9IGFzcHJpbnRmKCZuZXdfcGFydCwKLSsJICAgICIlcyVzJXMiICBQS0NT MTFfVVJJX1ZBTFVFX1NFUEFSQVRPUiAiJXMiLAotKwkgICAgKHBhcnQgIT0gTlVMTCA/IHBhcnQg OiAiIiksCi0rCSAgICAocGFydCAhPSBOVUxMID8gc2VwYXJhdG9yIDogIiIpLAotKwkgICAga2V5 LCBzc2hidWZfcHRyKHZhbHVlKSk7Ci0rCXNzaGJ1Zl9mcmVlKHZhbHVlKTsKLSsJZnJlZShwYXJ0 KTsKLSsKLSsJaWYgKHNpemUgPD0gMCkKLSsJCXJldHVybiBOVUxMOwotKwlyZXR1cm4gbmV3X3Bh cnQ7Ci0rfQotKwotK2NoYXIgKgotK3BrY3MxMV91cmlfZ2V0KHN0cnVjdCBwa2NzMTFfdXJpICp1 cmkpCi0rewotKwlzaXplX3Qgc2l6ZSA9IDA7Ci0rCWNoYXIgKnAgPSBOVUxMLCAqcGF0aCA9IE5V TEwsICpxdWVyeSA9IE5VTEw7Ci0rCi0rCS8qIGNvbXBvc2UgYSBwZXJjZW50LWVuY29kZWQgSUQg Ki8KLSsJaWYgKHVyaS0+aWRfbGVuID4gMCkgewotKwkJc3RydWN0IHNzaGJ1ZiAqa2V5X2lkID0g cGVyY2VudF9lbmNvZGUodXJpLT5pZCwgdXJpLT5pZF9sZW4sICIiKTsKLSsJCXBhdGggPSBwa2Nz MTFfdXJpX2FwcGVuZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAotKwkJICAgIFBL Q1MxMV9VUklfSUQsIGtleV9pZCk7Ci0rCQlpZiAocGF0aCA9PSBOVUxMKQotKwkJCWdvdG8gZXJy OwotKwl9Ci0rCi0rCS8qIFdyaXRlIG9iamVjdCBsYWJlbCAqLwotKwlpZiAodXJpLT5vYmplY3Qp IHsKLSsJCXN0cnVjdCBzc2hidWYgKmxhYmVsID0gcGVyY2VudF9lbmNvZGUodXJpLT5vYmplY3Qs IHN0cmxlbih1cmktPm9iamVjdCksCi0rCQkgICAgUEtDUzExX1VSSV9XSElURUxJU1QpOwotKwkJ cGF0aCA9IHBrY3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1Is Ci0rCQkgICAgUEtDUzExX1VSSV9PQkpFQ1QsIGxhYmVsKTsKLSsJCWlmIChwYXRoID09IE5VTEwp Ci0rCQkJZ290byBlcnI7Ci0rCX0KLSsKLSsJLyogV3JpdGUgdG9rZW4gbGFiZWwgKi8KLSsJaWYg KHVyaS0+dG9rZW4pIHsKLSsJCXN0cnVjdCBzc2hidWYgKmxhYmVsID0gcGVyY2VudF9lbmNvZGUo dXJpLT50b2tlbiwgc3RybGVuKHVyaS0+dG9rZW4pLAotKwkJICAgIFBLQ1MxMV9VUklfV0hJVEVM SVNUKTsKLSsJCXBhdGggPSBwa2NzMTFfdXJpX2FwcGVuZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhf U0VQQVJBVE9SLAotKwkJICAgIFBLQ1MxMV9VUklfVE9LRU4sIGxhYmVsKTsKLSsJCWlmIChwYXRo ID09IE5VTEwpCi0rCQkJZ290byBlcnI7Ci0rCX0KLSsKLSsJLyogV3JpdGUgbWFudWZhY3R1cmVy ICovCi0rCWlmICh1cmktPm1hbnVmKSB7Ci0rCQlzdHJ1Y3Qgc3NoYnVmICptYW51ZiA9IHBlcmNl bnRfZW5jb2RlKHVyaS0+bWFudWYsCi0rCQkgICAgc3RybGVuKHVyaS0+bWFudWYpLCBQS0NTMTFf VVJJX1dISVRFTElTVCk7Ci0rCQlwYXRoID0gcGtjczExX3VyaV9hcHBlbmQocGF0aCwgUEtDUzEx X1VSSV9QQVRIX1NFUEFSQVRPUiwKLSsJCSAgICBQS0NTMTFfVVJJX01BTlVGLCBtYW51Zik7Ci0r CQlpZiAocGF0aCA9PSBOVUxMKQotKwkJCWdvdG8gZXJyOwotKwl9Ci0rCi0rCS8qIFdyaXRlIHNl cmlhbCAqLwotKwlpZiAodXJpLT5zZXJpYWwpIHsKLSsJCXN0cnVjdCBzc2hidWYgKnNlcmlhbCA9 IHBlcmNlbnRfZW5jb2RlKHVyaS0+c2VyaWFsLAotKwkJICAgIHN0cmxlbih1cmktPnNlcmlhbCks IFBLQ1MxMV9VUklfV0hJVEVMSVNUKTsKLSsJCXBhdGggPSBwa2NzMTFfdXJpX2FwcGVuZChwYXRo LCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAotKwkJICAgIFBLQ1MxMV9VUklfU0VSSUFMLCBz ZXJpYWwpOwotKwkJaWYgKHBhdGggPT0gTlVMTCkKLSsJCQlnb3RvIGVycjsKLSsJfQotKwotKwkv KiBXcml0ZSBtb2R1bGVfcGF0aCAqLwotKwlpZiAodXJpLT5tb2R1bGVfcGF0aCkgewotKwkJc3Ry dWN0IHNzaGJ1ZiAqbW9kdWxlID0gcGVyY2VudF9lbmNvZGUodXJpLT5tb2R1bGVfcGF0aCwKLSsJ CSAgICBzdHJsZW4odXJpLT5tb2R1bGVfcGF0aCksIFBLQ1MxMV9VUklfV0hJVEVMSVNUICIvIik7 Ci0rCQlxdWVyeSA9IHBrY3MxMV91cmlfYXBwZW5kKHF1ZXJ5LCBQS0NTMTFfVVJJX1FVRVJZX1NF UEFSQVRPUiwKLSsJCSAgICBQS0NTMTFfVVJJX01PRFVMRV9QQVRILCBtb2R1bGUpOwotKwkJaWYg KHF1ZXJ5ID09IE5VTEwpCi0rCQkJZ290byBlcnI7Ci0rCX0KLSsKLSsJc2l6ZSA9IGFzcHJpbnRm KCZwLCBQS0NTMTFfVVJJX1NDSEVNRSAiJXMlcyVzIiwKLSsJICAgIHBhdGggIT0gTlVMTCA/IHBh dGggOiAiIiwKLSsJICAgIHF1ZXJ5ICE9IE5VTEwgPyAiPyIgOiAiIiwKLSsJICAgIHF1ZXJ5ICE9 IE5VTEwgPyBxdWVyeSA6ICIiKTsKLStlcnI6Ci0rCWZyZWUocXVlcnkpOwotKwlmcmVlKHBhdGgp OwotKwlpZiAoc2l6ZSA8PSAwKQotKwkJcmV0dXJuIE5VTEw7Ci0rCXJldHVybiBwOwotK30KLSsK LStzdHJ1Y3QgcGtjczExX3VyaSAqCi0rcGtjczExX3VyaV9pbml0KCkKLSt7Ci0rCXN0cnVjdCBw a2NzMTFfdXJpICpkID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcGtjczExX3VyaSkpOwotKwly ZXR1cm4gZDsKLSt9Ci0rCi0rdm9pZAotK3BrY3MxMV91cmlfY2xlYW51cChzdHJ1Y3QgcGtjczEx X3VyaSAqcGtjczExKQotK3sKLSsJaWYgKHBrY3MxMSA9PSBOVUxMKSB7Ci0rCQlyZXR1cm47Ci0r CX0KLSsKLSsJZnJlZShwa2NzMTEtPmlkKTsKLSsJZnJlZShwa2NzMTEtPm1vZHVsZV9wYXRoKTsK LSsJZnJlZShwa2NzMTEtPnRva2VuKTsKLSsJZnJlZShwa2NzMTEtPm9iamVjdCk7Ci0rCWZyZWUo cGtjczExLT5saWJfbWFudWYpOwotKwlmcmVlKHBrY3MxMS0+bWFudWYpOwotKwlmcmVlKHBrY3Mx MS0+c2VyaWFsKTsKLSsJaWYgKHBrY3MxMS0+cGluKQotKwkJZnJlZXplcm8ocGtjczExLT5waW4s IHN0cmxlbihwa2NzMTEtPnBpbikpOwotKwlmcmVlKHBrY3MxMSk7Ci0rfQotKwotK2ludAotK3Br Y3MxMV91cmlfcGFyc2UoY29uc3QgY2hhciAqdXJpLCBzdHJ1Y3QgcGtjczExX3VyaSAqcGtjczEx KQotK3sKLSsJY2hhciAqc2F2ZXB0cjEsICpzYXZlcHRyMiwgKnN0cjEsICpzdHIyLCAqdG9rOwot KwlpbnQgcnYgPSAwLCBsZW47Ci0rCWNoYXIgKnAgPSBOVUxMOwotKwotKwlzaXplX3Qgc2NoZW1l X2xlbiA9IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSk7Ci0rCWlmIChzdHJsZW4odXJpKSA8IHNj aGVtZV9sZW4gfHwgLyogZW1wdHkgVVJJIG1hdGNoZXMgZXZlcnl0aGluZyAqLwotKwkgICAgc3Ry bmNtcCh1cmksIFBLQ1MxMV9VUklfU0NIRU1FLCBzY2hlbWVfbGVuKSAhPSAwKSB7Ci0rCQllcnJv cl9mKCJUaGUgJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgUEtDUyMxMSBVUkkiLCB1cmkpOwotKwkJ cmV0dXJuIC0xOwotKwl9Ci0rCi0rCWlmIChwa2NzMTEgPT0gTlVMTCkgewotKwkJZXJyb3JfZigi QmFkIGFyZ3VtZW50cy4gVGhlIHBrY3MxMSBjYW4ndCBiZSBudWxsIik7Ci0rCQlyZXR1cm4gLTE7 Ci0rCX0KLSsKLSsJLyogc2tpcCBVUkkgc2NoZW1hIG5hbWUgKi8KLSsJcCA9IHN0cmR1cCh1cmkp OwotKwlzdHIxID0gcDsKLSsKLSsJLyogZXZlcnl0aGluZyBiZWZvcmUgPyAqLwotKwl0b2sgPSBz dHJ0b2tfcihzdHIxLCAiPyIsICZzYXZlcHRyMSk7Ci0rCWlmICh0b2sgPT0gTlVMTCkgewotKwkJ ZXJyb3JfZigicGsxMS1wYXRoIGV4cGVjdGVkLCBnb3QgRU9GIik7Ci0rCQlydiA9IC0xOwotKwkJ Z290byBvdXQ7Ci0rCX0KLSsKLSsJLyogc2tpcCBVUkkgc2NoZW1hIG5hbWU6Ci0rCSAqIHRoZSBz Y2hlbWUgZW5zdXJlcyB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IHNvbWV0aGluZyBiZWZvcmUgIj8i Ci0rCSAqIGFsbG93aW5nIGVtcHR5IHBrMTEtcGF0aC4gUmVzdWx0aW5nIHRva2VuIGF0IHdvcnN0 IHBvaW50aW5nIHRvCi0rCSAqIFwwIGJ5dGUgKi8KLSsJdG9rID0gdG9rICsgc2NoZW1lX2xlbjsK LSsKLSsJLyogcGFyc2UgcGsxMS1wYXRoICovCi0rCWZvciAoc3RyMiA9IHRvazsgOyBzdHIyID0g TlVMTCkgewotKwkJY2hhciAqKmNoYXJwdHIsICphcmcgPSBOVUxMOwotKwkJcGtjczExdXJpT3BD b2RlcyBvcGNvZGU7Ci0rCQl0b2sgPSBzdHJ0b2tfcihzdHIyLCBQS0NTMTFfVVJJX1BBVEhfU0VQ QVJBVE9SLCAmc2F2ZXB0cjIpOwotKwkJaWYgKHRvayA9PSBOVUxMKQotKwkJCWJyZWFrOwotKwkJ b3Bjb2RlID0gcGFyc2VfdG9rZW4odG9rKTsKLSsJCWlmIChvcGNvZGUgIT0gcEJhZE9wdGlvbikK LSsJCQlhcmcgPSB0b2sgKyBzdHJsZW4oa2V5d29yZHNbb3Bjb2RlXS5uYW1lKSArIDE7IC8qIHNl cGFyYXRvciAiPSIgKi8KLSsKLSsJCXN3aXRjaCAob3Bjb2RlKSB7Ci0rCQljYXNlIHBJZDoKLSsJ CQkvKiBDS0FfSUQgKi8KLSsJCQlpZiAocGtjczExLT5pZCAhPSBOVUxMKSB7Ci0rCQkJCXZlcmJv c2VfZigiVGhlIGlkIGFscmVhZHkgc2V0IGluIHRoZSBQS0NTIzExIFVSSSIpOwotKwkJCQlydiA9 IC0xOwotKwkJCQlnb3RvIG91dDsKLSsJCQl9Ci0rCQkJbGVuID0gcGVyY2VudF9kZWNvZGUoYXJn LCAmcGtjczExLT5pZCk7Ci0rCQkJaWYgKGxlbiA8PSAwKSB7Ci0rCQkJCXZlcmJvc2VfZigiRmFp bGVkIHRvIHBlcmNlbnQtZGVjb2RlIENLQV9JRDogJXMiLCBhcmcpOwotKwkJCQlydiA9IC0xOwot KwkJCQlnb3RvIG91dDsKLSsJCQl9IGVsc2UKLSsJCQkJcGtjczExLT5pZF9sZW4gPSBsZW47Ci0r CQkJZGVidWczX2YoIlNldHRpbmcgQ0tBX0lEID0gJXMgZnJvbSBQS0NTIzExIFVSSSIsIGFyZyk7 Ci0rCQkJYnJlYWs7Ci0rCQljYXNlIHBUb2tlbjoKLSsJCQkvKiBDS19UT0tFTl9JTkZPIC0+IGxh YmVsICovCi0rCQkJY2hhcnB0ciA9ICZwa2NzMTEtPnRva2VuOwotKyBwYXJzZV9zdHJpbmc6Ci0r CQkJaWYgKCpjaGFycHRyICE9IE5VTEwpIHsKLSsJCQkJdmVyYm9zZV9mKCJUaGUgJXMgYWxyZWFk eSBzZXQgaW4gdGhlIFBLQ1MjMTEgVVJJIiwKLSsJCQkJICAgIGtleXdvcmRzW29wY29kZV0ubmFt ZSk7Ci0rCQkJCXJ2ID0gLTE7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0KLSsJCQlwZXJjZW50X2Rl Y29kZShhcmcsIGNoYXJwdHIpOwotKwkJCWRlYnVnM19mKCJTZXR0aW5nICVzID0gJXMgZnJvbSBQ S0NTIzExIFVSSSIsCi0rCQkJICAgIGtleXdvcmRzW29wY29kZV0ubmFtZSwgKmNoYXJwdHIpOwot KwkJCWJyZWFrOwotKwotKwkJY2FzZSBwT2JqZWN0OgotKwkJCS8qIENLX1RPS0VOX0lORk8gLT4g bWFudWZhY3R1cmVySUQgKi8KLSsJCQljaGFycHRyID0gJnBrY3MxMS0+b2JqZWN0OwotKwkJCWdv dG8gcGFyc2Vfc3RyaW5nOwotKwotKwkJY2FzZSBwTWFudWZhY3R1cmVyOgotKwkJCS8qIENLX1RP S0VOX0lORk8gLT4gbWFudWZhY3R1cmVySUQgKi8KLSsJCQljaGFycHRyID0gJnBrY3MxMS0+bWFu dWY7Ci0rCQkJZ290byBwYXJzZV9zdHJpbmc7Ci0rCi0rCQljYXNlIHBTZXJpYWw6Ci0rCQkJLyog Q0tfVE9LRU5fSU5GTyAtPiBzZXJpYWxOdW1iZXIgKi8KLSsJCQljaGFycHRyID0gJnBrY3MxMS0+ c2VyaWFsOwotKwkJCWdvdG8gcGFyc2Vfc3RyaW5nOwotKwotKwkJY2FzZSBwTGlicmFyeU1hbnVm YWN0dXJlcjoKLSsJCQkvKiBDS19JTkZPIC0+IG1hbnVmYWN0dXJlcklEICovCi0rCQkJY2hhcnB0 ciA9ICZwa2NzMTEtPmxpYl9tYW51ZjsKLSsJCQlnb3RvIHBhcnNlX3N0cmluZzsKLSsKLSsJCWRl ZmF1bHQ6Ci0rCQkJLyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiB0aGUgVVJJIHBhdGggU0hP VUxEIGJlIGVycm9yICovCi0rCQkJdmVyYm9zZV9mKCJVbmtub3duIHBhcnQgb2YgcGF0aCBpbiBQ S0NTIzExIFVSSTogJXMiLCB0b2spOwotKwkJfQotKwl9Ci0rCi0rCXRvayA9IHN0cnRva19yKE5V TEwsICI/IiwgJnNhdmVwdHIxKTsKLSsJaWYgKHRvayA9PSBOVUxMKSB7Ci0rCQlnb3RvIG91dDsK LSsJfQotKwkvKiBwYXJzZSBwazExLXF1ZXJ5IChvcHRpb25hbCkgKi8KLSsJZm9yIChzdHIyID0g dG9rOyA7IHN0cjIgPSBOVUxMKSB7Ci0rCQljaGFyICphcmc7Ci0rCQlwa2NzMTF1cmlPcENvZGVz IG9wY29kZTsKLSsJCXRvayA9IHN0cnRva19yKHN0cjIsIFBLQ1MxMV9VUklfUVVFUllfU0VQQVJB VE9SLCAmc2F2ZXB0cjIpOwotKwkJaWYgKHRvayA9PSBOVUxMKQotKwkJCWJyZWFrOwotKwkJb3Bj b2RlID0gcGFyc2VfdG9rZW4odG9rKTsKLSsJCWlmIChvcGNvZGUgIT0gcEJhZE9wdGlvbikKLSsJ CQlhcmcgPSB0b2sgKyBzdHJsZW4oa2V5d29yZHNbb3Bjb2RlXS5uYW1lKSArIDE7IC8qIHNlcGFy YXRvciAiPSIgKi8KLSsKLSsJCXN3aXRjaCAob3Bjb2RlKSB7Ci0rCQljYXNlIHBNb2R1bGVQYXRo OgotKwkJCS8qIG1vZHVsZS1wYXRoIGlzIFBLQ1MxMVByb3ZpZGVyICovCi0rCQkJaWYgKHBrY3Mx MS0+bW9kdWxlX3BhdGggIT0gTlVMTCkgewotKwkJCQl2ZXJib3NlX2YoIk11bHRpcGxlIG1vZHVs ZS1wYXRoIGF0dHJpYnV0ZXMgYXJlIgotKwkJCQkgICAgIm5vdCBzdXBwb3J0ZWQgdGhlIFBLQ1Mj MTEgVVJJIik7Ci0rCQkJCXJ2ID0gLTE7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0KLSsJCQlwZXJj ZW50X2RlY29kZShhcmcsICZwa2NzMTEtPm1vZHVsZV9wYXRoKTsKLSsJCQlkZWJ1ZzNfZigiU2V0 dGluZyBQS0NTMTFQcm92aWRlciA9ICVzIGZyb20gUEtDUyMxMSBVUkkiLAotKwkJCSAgICBwa2Nz MTEtPm1vZHVsZV9wYXRoKTsKLSsJCQlicmVhazsKLSsKLSsJCWNhc2UgcFBpblZhbHVlOgotKwkJ CS8qIHBpbi12YWx1ZSAqLwotKwkJCWlmIChwa2NzMTEtPnBpbiAhPSBOVUxMKSB7Ci0rCQkJCXZl cmJvc2VfZigiTXVsdGlwbGUgcGluLXZhbHVlIGF0dHJpYnV0ZXMgYXJlIgotKwkJCQkgICAgIm5v dCBzdXBwb3J0ZWQgdGhlIFBLQ1MjMTEgVVJJIik7Ci0rCQkJCXJ2ID0gLTE7Ci0rCQkJCWdvdG8g b3V0OwotKwkJCX0KLSsJCQlwZXJjZW50X2RlY29kZShhcmcsICZwa2NzMTEtPnBpbik7Ci0rCQkJ ZGVidWczX2YoIlNldHRpbmcgUElOIGZyb20gUEtDUyMxMSBVUkkiKTsKLSsJCQlicmVhazsKLSsK LSsJCWRlZmF1bHQ6Ci0rCQkJLyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiB0aGUgVVJJIHF1 ZXJ5IFNIT1VMRCBiZSBpZ25vcmVkICovCi0rCQkJdmVyYm9zZV9mKCJVbmtub3duIHBhcnQgb2Yg cXVlcnkgaW4gUEtDUyMxMSBVUkk6ICVzIiwgdG9rKTsKLSsJCX0KLSsJfQotK291dDoKLSsJZnJl ZShwKTsKLSsJcmV0dXJuIHJ2OwotK30KLSsKLSsjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAqLwot ZGlmZiAtLWdpdCBhL3NzaC1wa2NzMTEtdXJpLmggYi9zc2gtcGtjczExLXVyaS5oCi1uZXcgZmls ZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwLi5iYzc1OGU3NjAKLS0tLSAvZGV2L251bGwK LSsrKyBiL3NzaC1wa2NzMTEtdXJpLmgKLUBAIC0wLDAgKzEsNDYgQEAKLSsvKgotKyAqIENvcHly aWdodCAoYykgMjAxNyBSZWQgSGF0Ci0rICoKLSsgKiBBdXRob3JzOiBKYWt1YiBKZWxlbiA8ampl bGVuQHJlZGhhdC5jb20+Ci0rICoKLSsgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSsgKiBwdXJwb3NlIHdpdGgg b3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3Zl Ci0rICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIg aW4gYWxsIGNvcGllcy4KLSsgKgotKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi IEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotKyAqIFdJVEggUkVHQVJE IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSsg KiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgQkUgTElBQkxFIEZPUgotKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSsgKiBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSsg KiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9O LCBBUklTSU5HIE9VVCBPRgotKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBF UkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0rICovCi0rCi0rI2lmbmRlZiBfU1NIX1BLQ1Mx MV9VUklfSAotKyNkZWZpbmUgX1NTSF9QS0NTMTFfVVJJX0gKLSsKLSsjZGVmaW5lIFBLQ1MxMV9V UklfU0NIRU1FICJwa2NzMTE6IgotKyNkZWZpbmUgUEtDUzExX1VSSV9XSElURUxJU1QJImFiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiBcCi0rCQkJCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ WiIgXAotKwkJCQkiMDEyMzQ1Njc4OV8tLigpIgotKwotK3N0cnVjdCBwa2NzMTFfdXJpIHsKLSsJ LyogcGF0aCAqLwotKwljaGFyICppZDsKLSsJc2l6ZV90IGlkX2xlbjsKLSsJY2hhciAqdG9rZW47 Ci0rCWNoYXIgKm9iamVjdDsKLSsJY2hhciAqbGliX21hbnVmOwotKwljaGFyICptYW51ZjsKLSsJ Y2hhciAqc2VyaWFsOwotKwkvKiBxdWVyeSAqLwotKwljaGFyICptb2R1bGVfcGF0aDsKLSsJY2hh ciAqcGluOyAvKiBPbmx5IHBhcnNlZCwgYnV0IG5vdCBwcmludGVkICovCi0rfTsKLSsKLStzdHJ1 Y3QJIHBrY3MxMV91cmkgKnBrY3MxMV91cmlfaW5pdCgpOwotK3ZvaWQJIHBrY3MxMV91cmlfY2xl YW51cChzdHJ1Y3QgcGtjczExX3VyaSAqKTsKLStpbnQJIHBrY3MxMV91cmlfcGFyc2UoY29uc3Qg Y2hhciAqLCBzdHJ1Y3QgcGtjczExX3VyaSAqKTsKLStzdHJ1Y3QJIHBrY3MxMV91cmkgKnBrY3Mx MV91cmlfaW5pdCgpOwotK2NoYXIJKnBrY3MxMV91cmlfZ2V0KHN0cnVjdCBwa2NzMTFfdXJpICp1 cmkpOwotKyNlbmRpZiAvKiBfU1NIX1BLQ1MxMV9VUklfSCAqLwotZGlmZiAtLWdpdCBhL3NzaC1w a2NzMTEuYyBiL3NzaC1wa2NzMTEuYwotaW5kZXggN2E3ZDNiOGVhLi42ZjIzZmMzOGIgMTAwNjQ0 Ci0tLS0gYS9zc2gtcGtjczExLmMKLSsrKyBiL3NzaC1wa2NzMTEuYwotQEAgLTM2LDYgKzM2LDcg QEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9lY2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDku aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSAjZW5kaWYKLSAKLSAjZGVmaW5lIENSWVBUT0tJX0NPTVBBVAotQEAgLTQ4LDYgKzQ5LDcgQEAK LSAjaW5jbHVkZSAibWlzYy5oIgotICNpbmNsdWRlICJzc2hidWYuaCIKLSAjaW5jbHVkZSAic3No LXBrY3MxMS5oIgotKyNpbmNsdWRlICJzc2gtcGtjczExLXVyaS5oIgotICNpbmNsdWRlICJkaWdl c3QuaCIKLSAjaW5jbHVkZSAieG1hbGxvYy5oIgotICNpbmNsdWRlICJjcnlwdG9fYXBpLmgiCi1A QCAtNTgsOCArNjAsOCBAQCBzdHJ1Y3QgcGtjczExX3Nsb3RpbmZvIHsKLSAJaW50CQkJbG9nZ2Vk X2luOwotIH07Ci0gCi0tc3RydWN0IHBrY3MxMV9wcm92aWRlciB7Ci0tCWNoYXIJCQkqbmFtZTsK LStzdHJ1Y3QgcGtjczExX21vZHVsZSB7Ci0rCWNoYXIJCQkqbW9kdWxlX3BhdGg7Ci0gCXZvaWQJ CQkqaGFuZGxlOwotIAlDS19GVU5DVElPTl9MSVNUCSpmdW5jdGlvbl9saXN0OwotIAlDS19JTkZP CQkJaW5mbzsKLUBAIC02OCw2ICs3MCwxMyBAQCBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyIHsKLSAJ c3RydWN0IHBrY3MxMV9zbG90aW5mbwkqc2xvdGluZm87Ci0gCWludAkJCXZhbGlkOwotIAlpbnQJ CQlyZWZjb3VudDsKLSt9OwotKwotK3N0cnVjdCBwa2NzMTFfcHJvdmlkZXIgewotKwljaGFyCQkJ Km5hbWU7Ci0rCXN0cnVjdCBwa2NzMTFfbW9kdWxlCSptb2R1bGU7IC8qIGNhbiBiZSBzaGFyZWQg YmV0d2VlbiB2YXJpb3VzIHByb3ZpZGVycyAqLwotKwlpbnQJCQlyZWZjb3VudDsKLSsJaW50CQkJ dmFsaWQ7Ci0gCVRBSUxRX0VOVFJZKHBrY3MxMV9wcm92aWRlcikgbmV4dDsKLSB9OwotIAotQEAg LTc5LDYgKzg4LDcgQEAgc3RydWN0IHBrY3MxMV9rZXkgewotIAlDS19VTE9ORwkJc2xvdGlkeDsK LSAJY2hhcgkJCSprZXlpZDsKLSAJaW50CQkJa2V5aWRfbGVuOwotKwljaGFyCQkJKmxhYmVsOwot IAlUQUlMUV9FTlRSWShwa2NzMTFfa2V5KQluZXh0OwotIH07Ci0gCi1AQCAtMTA1LDI2ICsxMTUs NjEgQEAgb3NzbF9lcnJvcihjb25zdCBjaGFyICptc2cpCi0gICogdGhpcyBpcyBjYWxsZWQgd2hl biBhIHByb3ZpZGVyIGdldHMgdW5yZWdpc3RlcmVkLgotICAqLwotIHN0YXRpYyB2b2lkCi0tcGtj czExX3Byb3ZpZGVyX2ZpbmFsaXplKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnApCi0rcGtjczEx X21vZHVsZV9maW5hbGl6ZShzdHJ1Y3QgcGtjczExX21vZHVsZSAqbSkKLSB7Ci0gCUNLX1JWIHJ2 OwotIAlDS19VTE9ORyBpOwotIAotLQlkZWJ1Z19mKCJwcm92aWRlciBcIiVzXCIgcmVmY291bnQg JWQgdmFsaWQgJWQiLAotLQkgICAgcC0+bmFtZSwgcC0+cmVmY291bnQsIHAtPnZhbGlkKTsKLS0J aWYgKCFwLT52YWxpZCkKLSsJZGVidWdfZigiJXAgcmVmY291bnQgJWQgdmFsaWQgJWQiLCBtLCBt LT5yZWZjb3VudCwgbS0+dmFsaWQpOwotKwlpZiAoIW0tPnZhbGlkKQotIAkJcmV0dXJuOwotLQlm b3IgKGkgPSAwOyBpIDwgcC0+bnNsb3RzOyBpKyspIHsKLS0JCWlmIChwLT5zbG90aW5mb1tpXS5z ZXNzaW9uICYmCi0tCQkgICAgKHJ2ID0gcC0+ZnVuY3Rpb25fbGlzdC0+Q19DbG9zZVNlc3Npb24o Ci0tCQkgICAgcC0+c2xvdGluZm9baV0uc2Vzc2lvbikpICE9IENLUl9PSykKLSsJZm9yIChpID0g MDsgaSA8IG0tPm5zbG90czsgaSsrKSB7Ci0rCQlpZiAobS0+c2xvdGluZm9baV0uc2Vzc2lvbiAm JgotKwkJICAgIChydiA9IG0tPmZ1bmN0aW9uX2xpc3QtPkNfQ2xvc2VTZXNzaW9uKAotKwkJICAg IG0tPnNsb3RpbmZvW2ldLnNlc3Npb24pKSAhPSBDS1JfT0spCi0gCQkJZXJyb3IoIkNfQ2xvc2VT ZXNzaW9uIGZhaWxlZDogJWx1IiwgcnYpOwotIAl9Ci0tCWlmICgocnYgPSBwLT5mdW5jdGlvbl9s aXN0LT5DX0ZpbmFsaXplKE5VTEwpKSAhPSBDS1JfT0spCi0rCWlmICgocnYgPSBtLT5mdW5jdGlv bl9saXN0LT5DX0ZpbmFsaXplKE5VTEwpKSAhPSBDS1JfT0spCi0gCQllcnJvcigiQ19GaW5hbGl6 ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSsJbS0+dmFsaWQgPSAwOwotKwltLT5mdW5jdGlvbl9saXN0 ID0gTlVMTDsKLSsJZGxjbG9zZShtLT5oYW5kbGUpOwotK30KLSsKLSsvKgotKyAqIHJlbW92ZSBh IHJlZmVyZW5jZSB0byB0aGUgcGtjczExIG1vZHVsZS4KLSsgKiBjYWxsZWQgd2hlbiBhIHByb3Zp ZGVyIGlzIHVucmVnaXN0ZXJlZC4KLSsgKi8KLStzdGF0aWMgdm9pZAotK3BrY3MxMV9tb2R1bGVf dW5yZWYoc3RydWN0IHBrY3MxMV9tb2R1bGUgKm0pCi0rewotKwlkZWJ1Z19mKCIlcCByZWZjb3Vu dCAlZCIsIG0sIG0tPnJlZmNvdW50KTsKLSsJaWYgKC0tbS0+cmVmY291bnQgPD0gMCkgewotKwkJ cGtjczExX21vZHVsZV9maW5hbGl6ZShtKTsKLSsJCWlmIChtLT52YWxpZCkKLSsJCQllcnJvcl9m KCIlcCBzdGlsbCB2YWxpZCIsIG0pOwotKwkJZnJlZShtLT5zbG90bGlzdCk7Ci0rCQlmcmVlKG0t PnNsb3RpbmZvKTsKLSsJCWZyZWUobS0+bW9kdWxlX3BhdGgpOwotKwkJZnJlZShtKTsKLSsJfQot K30KLSsKLSsvKgotKyAqIGZpbmFsaXplIGEgcHJvdmlkZXIgc2hhcmVkIGxpYnJhcnksIGl0J3Mg bm8gbG9uZ2VyIHVzYWJsZS4KLSsgKiBob3dldmVyLCB0aGVyZSBtaWdodCBzdGlsbCBiZSBrZXlz IHJlZmVyZW5jaW5nIHRoaXMgcHJvdmlkZXIsCi0rICogc28gdGhlIGFjdHVhbCBmcmVlaW5nIG9m IG1lbW9yeSBpcyBoYW5kbGVkIGJ5IHBrY3MxMV9wcm92aWRlcl91bnJlZigpLgotKyAqIHRoaXMg aXMgY2FsbGVkIHdoZW4gYSBwcm92aWRlciBnZXRzIHVucmVnaXN0ZXJlZC4KLSsgKi8KLStzdGF0 aWMgdm9pZAotK3BrY3MxMV9wcm92aWRlcl9maW5hbGl6ZShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVy ICpwKQotK3sKLSsJZGVidWdfZigiJXAgcmVmY291bnQgJWQgdmFsaWQgJWQiLCBwLCBwLT5yZWZj b3VudCwgcC0+dmFsaWQpOwotKwlpZiAoIXAtPnZhbGlkKQotKwkJcmV0dXJuOwotKwlwa2NzMTFf bW9kdWxlX3VucmVmKHAtPm1vZHVsZSk7Ci0rCXAtPm1vZHVsZSA9IE5VTEw7Ci0gCXAtPnZhbGlk ID0gMDsKLS0JcC0+ZnVuY3Rpb25fbGlzdCA9IE5VTEw7Ci0tCWRsY2xvc2UocC0+aGFuZGxlKTsK LSB9Ci0gCi0gLyoKLUBAIC0xMzYsMTUgKzE4MSwyNyBAQCBwa2NzMTFfcHJvdmlkZXJfdW5yZWYo c3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCkKLSB7Ci0gCWRlYnVnX2YoInByb3ZpZGVyIFwiJXNc IiByZWZjb3VudCAlZCIsIHAtPm5hbWUsIHAtPnJlZmNvdW50KTsKLSAJaWYgKC0tcC0+cmVmY291 bnQgPD0gMCkgewotLQkJaWYgKHAtPnZhbGlkKQotLQkJCWVycm9yX2YoInByb3ZpZGVyIFwiJXNc IiBzdGlsbCB2YWxpZCIsIHAtPm5hbWUpOwotIAkJZnJlZShwLT5uYW1lKTsKLS0JCWZyZWUocC0+ c2xvdGxpc3QpOwotLQkJZnJlZShwLT5zbG90aW5mbyk7Ci0rCQlpZiAocC0+bW9kdWxlKQotKwkJ CXBrY3MxMV9tb2R1bGVfdW5yZWYocC0+bW9kdWxlKTsKLSAJCWZyZWUocCk7Ci0gCX0KLSB9Ci0g Ci0rLyogbG9va3VwIHByb3ZpZGVyIGJ5IG1vZHVsZSBwYXRoICovCi0rc3RhdGljIHN0cnVjdCBw a2NzMTFfbW9kdWxlICoKLStwa2NzMTFfcHJvdmlkZXJfbG9va3VwX21vZHVsZShjaGFyICptb2R1 bGVfcGF0aCkKLSt7Ci0rCXN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnA7Ci0rCi0rCVRBSUxRX0ZP UkVBQ0gocCwgJnBrY3MxMV9wcm92aWRlcnMsIG5leHQpIHsKLSsJCWRlYnVnKCJjaGVjayAlcCAl cyAoJXMpIiwgcCwgcC0+bmFtZSwgcC0+bW9kdWxlLT5tb2R1bGVfcGF0aCk7Ci0rCQlpZiAoIXN0 cmNtcChtb2R1bGVfcGF0aCwgcC0+bW9kdWxlLT5tb2R1bGVfcGF0aCkpCi0rCQkJcmV0dXJuIChw LT5tb2R1bGUpOwotKwl9Ci0rCXJldHVybiAoTlVMTCk7Ci0rfQotKwotIC8qIGxvb2t1cCBwcm92 aWRlciBieSBuYW1lICovCi0gc3RhdGljIHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKgotIHBrY3Mx MV9wcm92aWRlcl9sb29rdXAoY2hhciAqcHJvdmlkZXJfaWQpCi1AQCAtMTU5LDE5ICsyMTYsNTUg QEAgcGtjczExX3Byb3ZpZGVyX2xvb2t1cChjaGFyICpwcm92aWRlcl9pZCkKLSAJcmV0dXJuIChO VUxMKTsKLSB9Ci0gCi0raW50IHBrY3MxMV9kZWxfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBwa2Nz MTFfdXJpICopOwotKwotIC8qIHVucmVnaXN0ZXIgcHJvdmlkZXIgYnkgbmFtZSAqLwotIGludAot IHBrY3MxMV9kZWxfcHJvdmlkZXIoY2hhciAqcHJvdmlkZXJfaWQpCi0rewotKwlpbnQgcnY7Ci0r CXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7Ci0rCi0rCWRlYnVnX2YoImNhbGxlZCwgcHJvdmlkZXJf aWQgPSAlcyIsIHByb3ZpZGVyX2lkKTsKLSsKLSsgICAgICBpZiAocHJvdmlkZXJfaWQgPT0gTlVM TCkKLSsgICAgICAgICAgcmV0dXJuIDA7Ci0rCi0rCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOwot KwlpZiAodXJpID09IE5VTEwpCi0rCQlmYXRhbCgiRmFpbGVkIHRvIGluaXQgUEtDUyMxMSBVUkki KTsKLSsKLSsJaWYgKHN0cmxlbihwcm92aWRlcl9pZCkgPj0gc3RybGVuKFBLQ1MxMV9VUklfU0NI RU1FKSAmJgotKwkgICAgc3RybmNtcChwcm92aWRlcl9pZCwgUEtDUzExX1VSSV9TQ0hFTUUsIHN0 cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsKLSsJCWlmIChwa2NzMTFfdXJpX3BhcnNl KHByb3ZpZGVyX2lkLCB1cmkpICE9IDApCi0rCQkJZmF0YWwoIkZhaWxlZCB0byBwYXJzZSBQS0NT IzExIFVSSSIpOwotKwl9IGVsc2UgewotKwkJdXJpLT5tb2R1bGVfcGF0aCA9IHN0cmR1cChwcm92 aWRlcl9pZCk7Ci0rCX0KLSsKLSsJcnYgPSBwa2NzMTFfZGVsX3Byb3ZpZGVyX2J5X3VyaSh1cmkp OwotKwlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKLSsJcmV0dXJuIHJ2OwotK30KLSsKLSsvKiB1 bnJlZ2lzdGVyIHByb3ZpZGVyIGJ5IFBLQ1MjMTEgVVJJICovCi0raW50Ci0rcGtjczExX2RlbF9w cm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKnVyaSkKLSB7Ci0gCXN0cnVjdCBwa2Nz MTFfcHJvdmlkZXIgKnA7Ci0rCWludCBydiA9IC0xOwotKwljaGFyICpwcm92aWRlcl91cmkgPSBw a2NzMTFfdXJpX2dldCh1cmkpOwotIAotLQlpZiAoKHAgPSBwa2NzMTFfcHJvdmlkZXJfbG9va3Vw KHByb3ZpZGVyX2lkKSkgIT0gTlVMTCkgewotKwlkZWJ1ZzNfZigiY2FsbGVkIHdpdGggcHJvdmlk ZXIgJXMiLCBwcm92aWRlcl91cmkpOwotKwotKwlpZiAoKHAgPSBwa2NzMTFfcHJvdmlkZXJfbG9v a3VwKHByb3ZpZGVyX3VyaSkpICE9IE5VTEwpIHsKLSAJCVRBSUxRX1JFTU9WRSgmcGtjczExX3By b3ZpZGVycywgcCwgbmV4dCk7Ci0gCQlwa2NzMTFfcHJvdmlkZXJfZmluYWxpemUocCk7Ci0gCQlw a2NzMTFfcHJvdmlkZXJfdW5yZWYocCk7Ci0tCQlyZXR1cm4gKDApOwotKwkJcnYgPSAwOwotIAl9 Ci0tCXJldHVybiAoLTEpOwotKwlmcmVlKHByb3ZpZGVyX3VyaSk7Ci0rCXJldHVybiBydjsKLSB9 Ci0gCi0gLyogcmVsZWFzZSBhIHdyYXBwZWQgb2JqZWN0ICovCi1AQCAtMTgzLDYgKzI3Niw3IEBA IHBrY3MxMV9rMTFfZnJlZShzdHJ1Y3QgcGtjczExX2tleSAqazExKQotIAlpZiAoazExLT5wcm92 aWRlcikKLSAJCXBrY3MxMV9wcm92aWRlcl91bnJlZihrMTEtPnByb3ZpZGVyKTsKLSAJZnJlZShr MTEtPmtleWlkKTsKLSsJZnJlZShrMTEtPmxhYmVsKTsKLSAJc3NoYnVmX2ZyZWUoazExLT5rZXli bG9iKTsKLSAJZnJlZShrMTEpOwotIH0KLUBAIC0xOTgsOCArMjkyLDggQEAgcGtjczExX2ZpbmQo c3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwgQ0tfQVRUUklCVVRF ICphdHRyLAotIAlDS19SVgkJCXJ2OwotIAlpbnQJCQlyZXQgPSAtMTsKLSAKLS0JZiA9IHAtPmZ1 bmN0aW9uX2xpc3Q7Ci0tCXNlc3Npb24gPSBwLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwot KwlmID0gcC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OwotKwlzZXNzaW9uID0gcC0+bW9kdWxlLT5z bG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotIAlpZiAoKHJ2ID0gZi0+Q19GaW5kT2JqZWN0c0lu aXQoc2Vzc2lvbiwgYXR0ciwgbmF0dHIpKSAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0ZpbmRP YmplY3RzSW5pdCBmYWlsZWQgKG5hdHRyICVsdSk6ICVsdSIsIG5hdHRyLCBydik7Ci0gCQlyZXR1 cm4gKC0xKTsKLUBAIC0yMzYsMTQgKzMzMCwxNCBAQCBwa2NzMTFfbG9naW5fc2xvdChzdHJ1Y3Qg cGtjczExX3Byb3ZpZGVyICpwcm92aWRlciwgc3RydWN0IHBrY3MxMV9zbG90aW5mbyAqc2ksCi0g CWlmIChzaS0+dG9rZW4uZmxhZ3MgJiBDS0ZfUFJPVEVDVEVEX0FVVEhFTlRJQ0FUSU9OX1BBVEgp Ci0gCQl2ZXJib3NlKCJEZWZlcnJpbmcgUElOIGVudHJ5IHRvIHJlYWRlciBrZXlwYWQuIik7Ci0g CWVsc2UgewotLQkJc25wcmludGYocHJvbXB0LCBzaXplb2YocHJvbXB0KSwgIkVudGVyIFBJTiBm b3IgJyVzJzogIiwKLSsJCXNucHJpbnRmKHByb21wdCwgc2l6ZW9mKHByb21wdCksICJFbnRlciBQ SU4gZm9yICclLjMycyc6ICIsCi0gCQkgICAgc2ktPnRva2VuLmxhYmVsKTsKLS0JCWlmICgocGlu ID0gcmVhZF9wYXNzcGhyYXNlKHByb21wdCwgUlBfQUxMT1dfRU9GKSkgPT0gTlVMTCkgewotKwkJ aWYgKChwaW4gPSByZWFkX3Bhc3NwaHJhc2UocHJvbXB0LCBSUF9BTExPV19FT0Z8UlBfQUxMT1df U1RESU4pKSA9PSBOVUxMKSB7Ci0gCQkJZGVidWdfZigibm8gcGluIHNwZWNpZmllZCIpOwotIAkJ CXJldHVybiAoLTEpOwkvKiBiYWlsIG91dCAqLwotIAkJfQotIAl9Ci0tCXJ2ID0gcHJvdmlkZXIt PmZ1bmN0aW9uX2xpc3QtPkNfTG9naW4oc2ktPnNlc3Npb24sIHR5cGUsICh1X2NoYXIgKilwaW4s Ci0rCXJ2ID0gcHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdC0+Q19Mb2dpbihzaS0+c2Vz c2lvbiwgdHlwZSwgKHVfY2hhciAqKXBpbiwKLSAJICAgIChwaW4gIT0gTlVMTCkgPyBzdHJsZW4o cGluKSA6IDApOwotIAlpZiAocGluICE9IE5VTEwpCi0gCQlmcmVlemVybyhwaW4sIHN0cmxlbihw aW4pKTsKLUBAIC0yNzMsMTMgKzM2NywxNCBAQCBwa2NzMTFfbG9naW5fc2xvdChzdHJ1Y3QgcGtj czExX3Byb3ZpZGVyICpwcm92aWRlciwgc3RydWN0IHBrY3MxMV9zbG90aW5mbyAqc2ksCi0gc3Rh dGljIGludAotIHBrY3MxMV9sb2dpbihzdHJ1Y3QgcGtjczExX2tleSAqazExLCBDS19VU0VSX1RZ UEUgdHlwZSkKLSB7Ci0tCWlmIChrMTEgPT0gTlVMTCB8fCBrMTEtPnByb3ZpZGVyID09IE5VTEwg fHwgIWsxMS0+cHJvdmlkZXItPnZhbGlkKSB7Ci0rCWlmIChrMTEgPT0gTlVMTCB8fCBrMTEtPnBy b3ZpZGVyID09IE5VTEwgfHwgIWsxMS0+cHJvdmlkZXItPnZhbGlkIHx8Ci0rCSAgICBrMTEtPnBy b3ZpZGVyLT5tb2R1bGUgPT0gTlVMTCB8fCAhazExLT5wcm92aWRlci0+bW9kdWxlLT52YWxpZCkg ewotIAkJZXJyb3IoIm5vIHBrY3MxMSAodmFsaWQpIHByb3ZpZGVyIGZvdW5kIik7Ci0gCQlyZXR1 cm4gKC0xKTsKLSAJfQotIAotIAlyZXR1cm4gcGtjczExX2xvZ2luX3Nsb3QoazExLT5wcm92aWRl ciwKLS0JICAgICZrMTEtPnByb3ZpZGVyLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdLCB0eXBlKTsK LSsJICAgICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF0sIHR5 cGUpOwotIH0KLSAKLSAKLUBAIC0yOTUsMTMgKzM5MCwxNCBAQCBwa2NzMTFfY2hlY2tfb2JqX2Jv b2xfYXR0cmliKHN0cnVjdCBwa2NzMTFfa2V5ICprMTEsIENLX09CSkVDVF9IQU5ETEUgb2JqLAot IAotIAkqdmFsID0gMDsKLSAKLS0JaWYgKCFrMTEtPnByb3ZpZGVyIHx8ICFrMTEtPnByb3ZpZGVy LT52YWxpZCkgewotKwlpZiAoIWsxMS0+cHJvdmlkZXIgfHwgIWsxMS0+cHJvdmlkZXItPnZhbGlk IHx8Ci0rCSAgICAhazExLT5wcm92aWRlci0+bW9kdWxlIHx8ICFrMTEtPnByb3ZpZGVyLT5tb2R1 bGUtPnZhbGlkKSB7Ci0gCQllcnJvcigibm8gcGtjczExICh2YWxpZCkgcHJvdmlkZXIgZm91bmQi KTsKLSAJCXJldHVybiAoLTEpOwotIAl9Ci0gCi0tCWYgPSBrMTEtPnByb3ZpZGVyLT5mdW5jdGlv bl9saXN0OwotLQlzaSA9ICZrMTEtPnByb3ZpZGVyLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOwot KwlmID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OwotKwlzaSA9ICZrMTEt PnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07Ci0gCi0gCWF0dHIudHlw ZSA9IHR5cGU7Ci0gCWF0dHIucFZhbHVlID0gJmZsYWc7Ci1AQCAtMzMyLDEzICs0MjgsMTQgQEAg cGtjczExX2dldF9rZXkoc3RydWN0IHBrY3MxMV9rZXkgKmsxMSwgQ0tfTUVDSEFOSVNNX1RZUEUg bWVjaF90eXBlKQotIAlpbnQJCQkgYWx3YXlzX2F1dGggPSAwOwotIAlpbnQJCQkgZGlkX2xvZ2lu ID0gMDsKLSAKLS0JaWYgKCFrMTEtPnByb3ZpZGVyIHx8ICFrMTEtPnByb3ZpZGVyLT52YWxpZCkg ewotKwlpZiAoIWsxMS0+cHJvdmlkZXIgfHwgIWsxMS0+cHJvdmlkZXItPnZhbGlkIHx8Ci0rCSAg ICAhazExLT5wcm92aWRlci0+bW9kdWxlIHx8ICFrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnZhbGlk KSB7Ci0gCQllcnJvcigibm8gcGtjczExICh2YWxpZCkgcHJvdmlkZXIgZm91bmQiKTsKLSAJCXJl dHVybiAoLTEpOwotIAl9Ci0gCi0tCWYgPSBrMTEtPnByb3ZpZGVyLT5mdW5jdGlvbl9saXN0Owot LQlzaSA9ICZrMTEtPnByb3ZpZGVyLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOwotKwlmID0gazEx LT5wcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OwotKwlzaSA9ICZrMTEtPnByb3ZpZGVy LT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07Ci0gCi0gCWlmICgoc2ktPnRva2VuLmZs YWdzICYgQ0tGX0xPR0lOX1JFUVVJUkVEKSAmJiAhc2ktPmxvZ2dlZF9pbikgewotIAkJaWYgKHBr Y3MxMV9sb2dpbihrMTEsIENLVV9VU0VSKSA8IDApIHsKLUBAIC00MzcsNiArNTM0LDEyIEBAIHBr Y3MxMV9yZWNvcmRfa2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnByb3ZpZGVyLCBDS19VTE9O RyBzbG90aWR4LAotIAkJazExLT5rZXlpZCA9IHhtYWxsb2MoazExLT5rZXlpZF9sZW4pOwotIAkJ bWVtY3B5KGsxMS0+a2V5aWQsIGtleWlkX2F0dHJpYi0+cFZhbHVlLCBrMTEtPmtleWlkX2xlbik7 Ci0gCX0KLSsJaWYgKGtleWlkX2F0dHJpYi0+dWxWYWx1ZUxlbiA+IDAgKSB7Ci0rCQlrMTEtPmxh YmVsID0geG1hbGxvYyhrZXlpZF9hdHRyaWItPnVsVmFsdWVMZW4rMSk7Ci0rCQltZW1jcHkoazEx LT5sYWJlbCwga2V5aWRfYXR0cmliLT5wVmFsdWUsIGtleWlkX2F0dHJpYi0+dWxWYWx1ZUxlbik7 Ci0rCQlrMTEtPmxhYmVsW2tleWlkX2F0dHJpYi0+dWxWYWx1ZUxlbl0gPSAwOwotKwl9Ci0rCi0g CVRBSUxRX0lOU0VSVF9UQUlMKCZwa2NzMTFfa2V5cywgazExLCBuZXh0KTsKLSAKLSAJcmV0dXJu IDA7Ci1AQCAtNDY0LDYgKzU2Nyw0MiBAQCBwa2NzMTFfbG9va3VwX2tleShzdHJ1Y3Qgc3Noa2V5 ICprZXkpCi0gCXJldHVybiBmb3VuZDsKLSB9Ci0gCi0rLyoKLSsgKiBUaGlzIGNhbid0IGJlIGlu IHRoZSBzc2gtcGtjczExLXVyaSwgYmVjYXNlIHdlIGNhbiBub3QgZGVwZW5kIG9uCi0rICogUEtD UyMxMSBzdHJ1Y3R1cmVzIGluIHNzaC1hZ2VudCAodXNpbmcgY2xpZW50LWhlbHBlciBjb21tdW5p Y2F0aW9uKQotKyAqLwotK2ludAotK3BrY3MxMV91cmlfd3JpdGUoY29uc3Qgc3RydWN0IHNzaGtl eSAqa2V5LCBGSUxFICpmKQotK3sKLSsJY2hhciAqcCA9IE5VTEw7Ci0rCXN0cnVjdCBwa2NzMTFf dXJpIHVyaTsKLSsJc3RydWN0IHBrY3MxMV9rZXkgKmsxMSA9IHBrY3MxMV9sb29rdXBfa2V5KGtl eSk7Ci0rCi0rCWlmIChrMTEgPT0gTlVMTCkgewotKwkJZXJyb3IoIkZhaWxlZCB0byBnZXQgZXhf ZGF0YSBmb3Iga2V5IHR5cGUgJWQiLCBrZXktPnR5cGUpOwotKwkJcmV0dXJuICgtMSk7Ci0rCX0K LSsKLSsJLyogb21pdCB0eXBlIC0tIHdlIGFyZSBsb29raW5nIGZvciBwcml2YXRlLXB1YmxpYyBv ciBwcml2YXRlLWNlcnRpZmljYXRlIHBhaXJzICovCi0rCXVyaS5pZCA9IGsxMS0+a2V5aWQ7Ci0r CXVyaS5pZF9sZW4gPSBrMTEtPmtleWlkX2xlbjsKLSsJdXJpLnRva2VuID0gazExLT5wcm92aWRl ci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdLnRva2VuLmxhYmVsOwotKwl1cmkub2Jq ZWN0ID0gazExLT5sYWJlbDsKLSsJdXJpLm1vZHVsZV9wYXRoID0gazExLT5wcm92aWRlci0+bW9k dWxlLT5tb2R1bGVfcGF0aDsKLSsJdXJpLmxpYl9tYW51ZiA9IGsxMS0+cHJvdmlkZXItPm1vZHVs ZS0+aW5mby5tYW51ZmFjdHVyZXJJRDsKLSsJdXJpLm1hbnVmID0gazExLT5wcm92aWRlci0+bW9k dWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdLnRva2VuLm1hbnVmYWN0dXJlcklEOwotKwl1cmku c2VyaWFsID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdLnRv a2VuLnNlcmlhbE51bWJlcjsKLSsKLSsJcCA9IHBrY3MxMV91cmlfZ2V0KCZ1cmkpOwotKwkvKiBk byBub3QgY2xlYW51cCAtLSB3ZSBkbyBub3QgYWxsb2NhdGUgaGVyZSwgb25seSByZWZlcmVuY2Ug Ki8KLSsJaWYgKHAgPT0gTlVMTCkKLSsJCXJldHVybiAtMTsKLSsKLSsJZnByaW50ZihmLCAiICVz IiwgcCk7Ci0rCWZyZWUocCk7Ci0rCXJldHVybiAwOwotK30KLSsKLSAjaWZkZWYgV0lUSF9PUEVO U1NMCi0gLyoKLSAgKiBTZWU6Ci1AQCAtNTY4LDggKzcwNyw4IEBAIHBrY3MxMV9zaWduX3JzYShz dHJ1Y3Qgc3Noa2V5ICprZXksCi0gCQlyZXR1cm4gU1NIX0VSUl9BR0VOVF9GQUlMVVJFOwotIAl9 Ci0gCi0tCWYgPSBrMTEtPnByb3ZpZGVyLT5mdW5jdGlvbl9saXN0OwotLQlzaSA9ICZrMTEtPnBy b3ZpZGVyLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOwotKwlmID0gazExLT5wcm92aWRlci0+bW9k dWxlLT5mdW5jdGlvbl9saXN0OwotKwlzaSA9ICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3Rp bmZvW2sxMS0+c2xvdGlkeF07Ci0gCi0gCWlmICgoc2lnbGVuID0gRVZQX1BLRVlfc2l6ZShrZXkt PnBrZXkpKSA8PSAwKQotIAkJcmV0dXJuIFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLUBAIC02 NTgsOCArNzk3LDggQEAgcGtjczExX3NpZ25fZWNkc2Eoc3RydWN0IHNzaGtleSAqa2V5LAotIAlk ZWJ1ZzNfZigic2lnbiB1c2luZyBwcm92aWRlciAlcyBzbG90aWR4ICVsdSIsCi0gCSAgICBrMTEt PnByb3ZpZGVyLT5uYW1lLCAodV9sb25nKWsxMS0+c2xvdGlkeCk7Ci0gCi0tCWYgPSBrMTEtPnBy b3ZpZGVyLT5mdW5jdGlvbl9saXN0OwotLQlzaSA9ICZrMTEtPnByb3ZpZGVyLT5zbG90aW5mb1tr MTEtPnNsb3RpZHhdOwotKwlmID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9saXN0 OwotKwlzaSA9ICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07 Ci0gCi0gCS8qIFByZXBhcmUgZGlnZXN0IHRvIGJlIHNpZ25lZCAqLwotIAlpZiAoKGhhc2hhbGcg PSBzc2hrZXlfZWNfbmlkX3RvX2hhc2hfYWxnKGtleS0+ZWNkc2FfbmlkKSkgPT0gLTEpCi1AQCAt NzQzLDggKzg4Miw4IEBAIHBrY3MxMV9zaWduX2VkMjU1MTkoc3RydWN0IHNzaGtleSAqa2V5LAot IAlkZWJ1ZzNfZigic2lnbiB1c2luZyBwcm92aWRlciAlcyBzbG90aWR4ICVsdSIsCi0gCSAgICBr MTEtPnByb3ZpZGVyLT5uYW1lLCAodV9sb25nKWsxMS0+c2xvdGlkeCk7Ci0gCi0tCWYgPSBrMTEt PnByb3ZpZGVyLT5mdW5jdGlvbl9saXN0OwotLQlzaSA9ICZrMTEtPnByb3ZpZGVyLT5zbG90aW5m b1trMTEtPnNsb3RpZHhdOwotKwlmID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9s aXN0OwotKwlzaSA9ICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlk eF07Ci0gCi0gCXhkYXRhID0geG1hbGxvYyhkYXRhbGVuKTsKLSAJbWVtY3B5KHhkYXRhLCBkYXRh LCBkYXRhbGVuKTsKLUBAIC03NzIsNyArOTExLDggQEAgcGtjczExX3NpZ25fZWQyNTUxOShzdHJ1 Y3Qgc3Noa2V5ICprZXksCi0gCXJldHVybiByZXQ7Ci0gfQotIAotLS8qIHJlbW92ZSB0cmFpbGlu ZyBzcGFjZXMgKi8KLSsvKiByZW1vdmUgdHJhaWxpbmcgc3BhY2VzLiBOb3RlLCB0aGF0IHRoaXMg ZG9lcyBOT1QgZ3VhcmFudGVlIHRoZSBidWZmZXIKLSsgKiB3aWxsIGJlIG51bGwgdGVybWluYXRl ZCBpZiB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgc3BhY2VzISAqLwotIHN0YXRpYyBjaGFyICoKLSBy bXNwYWNlKHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQotIHsKLUBAIC04MDQsOCArOTQ0LDggQEAg cGtjczExX29wZW5fc2Vzc2lvbihzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBz bG90aWR4LCBjaGFyICpwaW4sCi0gCUNLX1NFU1NJT05fSEFORExFCXNlc3Npb247Ci0gCWludAkJ CWxvZ2luX3JlcXVpcmVkLCByZXQ7Ci0gCi0tCWYgPSBwLT5mdW5jdGlvbl9saXN0OwotLQlzaSA9 ICZwLT5zbG90aW5mb1tzbG90aWR4XTsKLSsJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsK LSsJc2kgPSAmcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XTsKLSAKLSAJbG9naW5fcmVxdWly ZWQgPSBzaS0+dG9rZW4uZmxhZ3MgJiBDS0ZfTE9HSU5fUkVRVUlSRUQ7Ci0gCi1AQCAtODE1LDkg Kzk1NSw5IEBAIHBrY3MxMV9vcGVuX3Nlc3Npb24oc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwg Q0tfVUxPTkcgc2xvdGlkeCwgY2hhciAqcGluLAotIAkJZXJyb3IoInBpbiByZXF1aXJlZCIpOwot IAkJcmV0dXJuICgtU1NIX1BLQ1MxMV9FUlJfUElOX1JFUVVJUkVEKTsKLSAJfQotLQlpZiAoKHJ2 ID0gZi0+Q19PcGVuU2Vzc2lvbihwLT5zbG90bGlzdFtzbG90aWR4XSwgQ0tGX1JXX1NFU1NJT058 Ci0rCWlmICgocnYgPSBmLT5DX09wZW5TZXNzaW9uKHAtPm1vZHVsZS0+c2xvdGxpc3Rbc2xvdGlk eF0sIENLRl9SV19TRVNTSU9OfAotIAkgICAgQ0tGX1NFUklBTF9TRVNTSU9OLCBOVUxMLCBOVUxM LCAmc2Vzc2lvbikpICE9IENLUl9PSykgewotLQkJZXJyb3IoIkNfT3BlblNlc3Npb24gZmFpbGVk OiAlbHUiLCBydik7Ci0rCQllcnJvcigiQ19PcGVuU2Vzc2lvbiBmYWlsZWQgZm9yIHNsb3QgJWx1 OiAlbHUiLCBzbG90aWR4LCBydik7Ci0gCQlyZXR1cm4gKC0xKTsKLSAJfQotIAlpZiAobG9naW5f cmVxdWlyZWQgJiYgcGluICE9IE5VTEwgJiYgc3RybGVuKHBpbikgIT0gMCkgewotQEAgLTg1NCw3 ICs5OTQsOCBAQCBzdGF0aWMgc3RydWN0IHNzaGtleSAqCi0gcGtjczExX2ZldGNoX2VjZHNhX3B1 YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotICAgICBD S19PQkpFQ1RfSEFORExFICpvYmopCi0gewotLQlDS19BVFRSSUJVVEUJCSBrZXlfYXR0clszXTsK LSsJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbNF07Ci0rCWludAkJCSBuYXR0ciA9IDQ7Ci0gCUNL X1NFU1NJT05fSEFORExFCSBzZXNzaW9uOwotIAlDS19GVU5DVElPTl9MSVNUCSpmID0gTlVMTDsK LSAJQ0tfUlYJCQkgcnY7Ci1AQCAtODY3LDE0ICsxMDA4LDE1IEBAIHBrY3MxMV9mZXRjaF9lY2Rz YV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAK LSAJbWVtc2V0KCZrZXlfYXR0ciwgMCwgc2l6ZW9mKGtleV9hdHRyKSk7Ci0gCWtleV9hdHRyWzBd LnR5cGUgPSBDS0FfSUQ7Ci0tCWtleV9hdHRyWzFdLnR5cGUgPSBDS0FfRUNfUE9JTlQ7Ci0tCWtl eV9hdHRyWzJdLnR5cGUgPSBDS0FfRUNfUEFSQU1TOwotKwlrZXlfYXR0clsxXS50eXBlID0gQ0tB X0xBQkVMOwotKwlrZXlfYXR0clsyXS50eXBlID0gQ0tBX0VDX1BPSU5UOwotKwlrZXlfYXR0clsz XS50eXBlID0gQ0tBX0VDX1BBUkFNUzsKLSAKLS0Jc2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Nsb3Rp ZHhdLnNlc3Npb247Ci0tCWYgPSBwLT5mdW5jdGlvbl9saXN0OwotKwlzZXNzaW9uID0gcC0+bW9k dWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlv bl9saXN0OwotIAotIAkvKiBmaWd1cmUgb3V0IHNpemUgb2YgdGhlIGF0dHJpYnV0ZXMgKi8KLS0J cnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsK LSsJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBu YXR0cik7Ci0gCWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZh bHVlIGZhaWxlZDogJWx1IiwgcnYpOwotIAkJcmV0dXJuIChOVUxMKTsKLUBAIC04ODUsMTkgKzEw MjcsMTkgQEAgcGtjczExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVy ICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkgKiBlbnN1cmUgdGhhdCBub25lIG9mIHRoZSBvdGhl cnMgYXJlIHplcm8gbGVuZ3RoLgotIAkgKiBYWFggYXNzdW1lcyBDS0FfSUQgaXMgYWx3YXlzIGZp cnN0LgotIAkgKi8KLS0JaWYgKGtleV9hdHRyWzFdLnVsVmFsdWVMZW4gPT0gMCB8fAotLQkgICAg a2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwKSB7Ci0rCWlmIChrZXlfYXR0clsyXS51bFZhbHVl TGVuID09IDAgfHwKLSsJICAgIGtleV9hdHRyWzNdLnVsVmFsdWVMZW4gPT0gMCkgewotIAkJZXJy b3IoImludmFsaWQgYXR0cmlidXRlIGxlbmd0aCIpOwotIAkJcmV0dXJuIChOVUxMKTsKLSAJfQot IAotIAkvKiBhbGxvY2F0ZSBidWZmZXJzIGZvciBhdHRyaWJ1dGVzICovCi0tCWZvciAoaSA9IDA7 IGkgPCAzOyBpKyspCi0rCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQotIAkJaWYgKGtleV9h dHRyW2ldLnVsVmFsdWVMZW4gPiAwKQotIAkJCWtleV9hdHRyW2ldLnBWYWx1ZSA9IHhjYWxsb2Mo MSwga2V5X2F0dHJbaV0udWxWYWx1ZUxlbik7Ci0gCi0gCS8qIHJldHJpZXZlIElELCBwdWJsaWMg cG9pbnQgYW5kIGN1cnZlIHBhcmFtZXRlcnMgb2YgRUMga2V5ICovCi0tCXJ2ID0gZi0+Q19HZXRB dHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgMyk7Ci0rCXJ2ID0gZi0+Q19H ZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgbmF0dHIpOwotIAlpZiAo cnYgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVs dSIsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLUBAIC05MDksOCArMTA1MSw4IEBAIHBrY3MxMV9mZXRj aF9lY2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlk eCwKLSAJCWdvdG8gZmFpbDsKLSAJfQotIAotLQlhdHRycCA9IGtleV9hdHRyWzJdLnBWYWx1ZTsK LS0JZ3JvdXAgPSBkMmlfRUNQS1BhcmFtZXRlcnMoTlVMTCwgJmF0dHJwLCBrZXlfYXR0clsyXS51 bFZhbHVlTGVuKTsKLSsJYXR0cnAgPSBrZXlfYXR0clszXS5wVmFsdWU7Ci0rCWdyb3VwID0gZDJp X0VDUEtQYXJhbWV0ZXJzKE5VTEwsICZhdHRycCwga2V5X2F0dHJbM10udWxWYWx1ZUxlbik7Ci0g CWlmIChncm91cCA9PSBOVUxMKSB7Ci0gCQlvc3NsX2Vycm9yKCJkMmlfRUNQS1BhcmFtZXRlcnMg ZmFpbGVkIik7Ci0gCQlnb3RvIGZhaWw7Ci1AQCAtOTIxLDEzICsxMDYzLDEzIEBAIHBrY3MxMV9m ZXRjaF9lY2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xv dGlkeCwKLSAJCWdvdG8gZmFpbDsKLSAJfQotIAotLQlpZiAoa2V5X2F0dHJbMV0udWxWYWx1ZUxl biA8PSAyKSB7Ci0rCWlmIChrZXlfYXR0clsyXS51bFZhbHVlTGVuIDw9IDIpIHsKLSAJCWVycm9y KCJDS0FfRUNfUE9JTlQgdG9vIHNtYWxsIik7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0KLSAKLS0JYXR0 cnAgPSBrZXlfYXR0clsxXS5wVmFsdWU7Ci0tCW9jdGV0ID0gZDJpX0FTTjFfT0NURVRfU1RSSU5H KE5VTEwsICZhdHRycCwga2V5X2F0dHJbMV0udWxWYWx1ZUxlbik7Ci0rCWF0dHJwID0ga2V5X2F0 dHJbMl0ucFZhbHVlOwotKwlvY3RldCA9IGQyaV9BU04xX09DVEVUX1NUUklORyhOVUxMLCAmYXR0 cnAsIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4pOwotIAlpZiAob2N0ZXQgPT0gTlVMTCkgewotIAkJ b3NzbF9lcnJvcigiZDJpX0FTTjFfT0NURVRfU1RSSU5HIGZhaWxlZCIpOwotIAkJZ290byBmYWls OwotQEAgLTk4OSw3ICsxMTMxLDggQEAgc3RhdGljIHN0cnVjdCBzc2hrZXkgKgotIHBrY3MxMV9m ZXRjaF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3Rp ZHgsCi0gICAgIENLX09CSkVDVF9IQU5ETEUgKm9iaikKLSB7Ci0tCUNLX0FUVFJJQlVURQkJIGtl eV9hdHRyWzNdOwotKwlDS19BVFRSSUJVVEUJCSBrZXlfYXR0cls0XTsKLSsJaW50CQkJIG5hdHRy ID0gNDsKLSAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247Ci0gCUNLX0ZVTkNUSU9OX0xJU1QJ KmYgPSBOVUxMOwotIAlDS19SVgkJCSBydjsKLUBAIC0xMDAwLDE0ICsxMTQzLDE1IEBAIHBrY3Mx MV9mZXRjaF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNs b3RpZHgsCi0gCi0gCW1lbXNldCgma2V5X2F0dHIsIDAsIHNpemVvZihrZXlfYXR0cikpOwotIAlr ZXlfYXR0clswXS50eXBlID0gQ0tBX0lEOwotLQlrZXlfYXR0clsxXS50eXBlID0gQ0tBX01PRFVM VVM7Ci0tCWtleV9hdHRyWzJdLnR5cGUgPSBDS0FfUFVCTElDX0VYUE9ORU5UOwotKwlrZXlfYXR0 clsxXS50eXBlID0gQ0tBX0xBQkVMOwotKwlrZXlfYXR0clsyXS50eXBlID0gQ0tBX01PRFVMVVM7 Ci0rCWtleV9hdHRyWzNdLnR5cGUgPSBDS0FfUFVCTElDX0VYUE9ORU5UOwotIAotLQlzZXNzaW9u ID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLS0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7 Ci0rCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0rCWYg PSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0gCi0gCS8qIGZpZ3VyZSBvdXQgc2l6ZSBvZiB0 aGUgYXR0cmlidXRlcyAqLwotLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwg Km9iaiwga2V5X2F0dHIsIDMpOwotKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lv biwgKm9iaiwga2V5X2F0dHIsIG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJy b3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlyZXR1cm4gKE5V TEwpOwotQEAgLTEwMTgsMTkgKzExNjIsMTkgQEAgcGtjczExX2ZldGNoX3JzYV9wdWJrZXkoc3Ry dWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJICogZW5zdXJlIHRo YXQgbm9uZSBvZiB0aGUgb3RoZXJzIGFyZSB6ZXJvIGxlbmd0aC4KLSAJICogWFhYIGFzc3VtZXMg Q0tBX0lEIGlzIGFsd2F5cyBmaXJzdC4KLSAJICovCi0tCWlmIChrZXlfYXR0clsxXS51bFZhbHVl TGVuID09IDAgfHwKLS0JICAgIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCkgewotKwlpZiAo a2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwIHx8Ci0rCSAgICBrZXlfYXR0clszXS51bFZhbHVl TGVuID09IDApIHsKLSAJCWVycm9yKCJpbnZhbGlkIGF0dHJpYnV0ZSBsZW5ndGgiKTsKLSAJCXJl dHVybiAoTlVMTCk7Ci0gCX0KLSAKLSAJLyogYWxsb2NhdGUgYnVmZmVycyBmb3IgYXR0cmlidXRl cyAqLwotLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7 IGkrKykKLSAJCWlmIChrZXlfYXR0cltpXS51bFZhbHVlTGVuID4gMCkKLSAJCQlrZXlfYXR0cltp XS5wVmFsdWUgPSB4Y2FsbG9jKDEsIGtleV9hdHRyW2ldLnVsVmFsdWVMZW4pOwotIAotIAkvKiBy ZXRyaWV2ZSBJRCwgbW9kdWx1cyBhbmQgcHVibGljIGV4cG9uZW50IG9mIFJTQSBrZXkgKi8KLS0J cnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsK LSsJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBu YXR0cik7Ci0gCWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZh bHVlIGZhaWxlZDogJWx1IiwgcnYpOwotIAkJZ290byBmYWlsOwotQEAgLTEwNDIsOCArMTE4Niw4 IEBAIHBrY3MxMV9mZXRjaF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENL X1VMT05HIHNsb3RpZHgsCi0gCQlnb3RvIGZhaWw7Ci0gCX0KLSAKLS0JcnNhX24gPSBCTl9iaW4y Ym4oa2V5X2F0dHJbMV0ucFZhbHVlLCBrZXlfYXR0clsxXS51bFZhbHVlTGVuLCBOVUxMKTsKLS0J cnNhX2UgPSBCTl9iaW4yYm4oa2V5X2F0dHJbMl0ucFZhbHVlLCBrZXlfYXR0clsyXS51bFZhbHVl TGVuLCBOVUxMKTsKLSsJcnNhX24gPSBCTl9iaW4yYm4oa2V5X2F0dHJbMl0ucFZhbHVlLCBrZXlf YXR0clsyXS51bFZhbHVlTGVuLCBOVUxMKTsKLSsJcnNhX2UgPSBCTl9iaW4yYm4oa2V5X2F0dHJb M10ucFZhbHVlLCBrZXlfYXR0clszXS51bFZhbHVlTGVuLCBOVUxMKTsKLSAJaWYgKHJzYV9uID09 IE5VTEwgfHwgcnNhX2UgPT0gTlVMTCkgewotIAkJZXJyb3IoIkJOX2JpbjJibiBmYWlsZWQiKTsK LSAJCWdvdG8gZmFpbDsKLUBAIC0xMDc1LDcgKzEyMTksNyBAQCBwa2NzMTFfZmV0Y2hfcnNhX3B1 YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkvKiBz dWNjZXNzICovCi0gCXN1Y2Nlc3MgPSAwOwotIGZhaWw6Ci0tCWZvciAoaSA9IDA7IGkgPCAzOyBp KyspCi0rCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQotIAkJZnJlZShrZXlfYXR0cltpXS5w VmFsdWUpOwotIAlSU0FfZnJlZShyc2EpOwotIAlpZiAoc3VjY2VzcyAhPSAwKSB7Ci1AQCAtMTA5 MCw3ICsxMjM0LDggQEAgc3RhdGljIHN0cnVjdCBzc2hrZXkgKgotIHBrY3MxMV9mZXRjaF9lZDI1 NTE5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAot ICAgICBDS19PQkpFQ1RfSEFORExFICpvYmopCi0gewotLQlDS19BVFRSSUJVVEUJCSBrZXlfYXR0 clszXTsKLSsJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbNF07Ci0rCWludAkJCSBuYXR0ciA9IDQ7 Ci0gCUNLX1NFU1NJT05fSEFORExFCSBzZXNzaW9uOwotIAlDS19GVU5DVElPTl9MSVNUCSpmID0g TlVMTDsKLSAJQ0tfUlYJCQkgcnY7Ci1AQCAtMTExMCwxNCArMTI1NSwxNSBAQCBwa2NzMTFfZmV0 Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xv dGlkeCwKLSAKLSAJbWVtc2V0KCZrZXlfYXR0ciwgMCwgc2l6ZW9mKGtleV9hdHRyKSk7Ci0gCWtl eV9hdHRyWzBdLnR5cGUgPSBDS0FfSUQ7Ci0tCWtleV9hdHRyWzFdLnR5cGUgPSBDS0FfRUNfUE9J TlQ7IC8qIFhYWCBvciBDS0FfVkFMVUUgPyAqLwotLQlrZXlfYXR0clsyXS50eXBlID0gQ0tBX0VD X1BBUkFNUzsKLSsJa2V5X2F0dHJbMV0udHlwZSA9IENLQV9MQUJFTDsKLSsJa2V5X2F0dHJbMl0u dHlwZSA9IENLQV9FQ19QT0lOVDsgLyogWFhYIG9yIENLQV9WQUxVRSA/ICovCi0rCWtleV9hdHRy WzNdLnR5cGUgPSBDS0FfRUNfUEFSQU1TOwotIAotLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xv dGlkeF0uc2Vzc2lvbjsKLS0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7Ci0rCXNlc3Npb24gPSBwLT5t b2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0rCWYgPSBwLT5tb2R1bGUtPmZ1bmN0 aW9uX2xpc3Q7Ci0gCi0gCS8qIGZpZ3VyZSBvdXQgc2l6ZSBvZiB0aGUgYXR0cmlidXRlcyAqLwot LQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIDMp OwotKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIs IG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRl VmFsdWUgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlyZXR1cm4gKE5VTEwpOwotQEAgLTExMjgsMjgg KzEyNzQsMjggQEAgcGtjczExX2ZldGNoX2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJv dmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0gCSAqIGVuc3VyZSB0aGF0IG5vbmUgb2YgdGhl IG90aGVycyBhcmUgemVybyBsZW5ndGguCi0gCSAqIFhYWCBhc3N1bWVzIENLQV9JRCBpcyBhbHdh eXMgZmlyc3QuCi0gCSAqLwotLQlpZiAoa2V5X2F0dHJbMV0udWxWYWx1ZUxlbiA9PSAwIHx8Ci0t CSAgICBrZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDApIHsKLSsJaWYgKGtleV9hdHRyWzJdLnVs VmFsdWVMZW4gPT0gMCB8fAotKwkgICAga2V5X2F0dHJbM10udWxWYWx1ZUxlbiA9PSAwKSB7Ci0g CQllcnJvcigiaW52YWxpZCBhdHRyaWJ1dGUgbGVuZ3RoIik7Ci0gCQlyZXR1cm4gKE5VTEwpOwot IAl9Ci0gCi0gCS8qIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGF0dHJpYnV0ZXMgKi8KLS0JZm9yIChp ID0gMDsgaSA8IDM7IGkrKykgewotKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykgewotIAkJ aWYgKGtleV9hdHRyW2ldLnVsVmFsdWVMZW4gPiAwKQotIAkJCWtleV9hdHRyW2ldLnBWYWx1ZSA9 IHhjYWxsb2MoMSwga2V5X2F0dHJbaV0udWxWYWx1ZUxlbik7Ci0gCX0KLSAKLSAJLyogcmV0cmll dmUgSUQsIHB1YmxpYyBwb2ludCBhbmQgY3VydmUgcGFyYW1ldGVycyBvZiBFQyBrZXkgKi8KLS0J cnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsK LSsJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBu YXR0cik7Ci0gCWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZh bHVlIGZhaWxlZDogJWx1IiwgcnYpOwotIAkJZ290byBmYWlsOwotIAl9Ci0gCi0gCS8qIEV4cGVj dCBvbmUgb2YgdGhlIHN1cHBvcnRlZCBpZGVudGlmaWVycyBpbiBDS0FfRUNfUEFSQU1TICovCi0t CWQgPSAodV9jaGFyICopa2V5X2F0dHJbMl0ucFZhbHVlOwotLQlsZW4gPSBrZXlfYXR0clsyXS51 bFZhbHVlTGVuOwotKwlkID0gKHVfY2hhciAqKWtleV9hdHRyWzNdLnBWYWx1ZTsKLSsJbGVuID0g a2V5X2F0dHJbM10udWxWYWx1ZUxlbjsKLSAJaWYgKChsZW4gIT0gc2l6ZW9mKGlkMSkgfHwgbWVt Y21wKGQsIGlkMSwgc2l6ZW9mKGlkMSkpICE9IDApICYmCi0gCSAgICAobGVuICE9IHNpemVvZihp ZDIpIHx8IG1lbWNtcChkLCBpZDIsIHNpemVvZihpZDIpKSAhPSAwKSkgewotIAkJaGV4ID0gdG9o ZXgoZCwgbGVuKTsKLUBAIC0xMTYxLDE2ICsxMzA3LDE2IEBAIHBrY3MxMV9mZXRjaF9lZDI1NTE5 X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkg KiBFeHBlY3QgZWl0aGVyIGEgcmF3IDMyIGJ5dGUgcHVia2V5IG9yIGFuIE9DVEVUIFNUUklORyB3 aXRoCi0gCSAqIGEgMzIgYnl0ZSBwdWJrZXkgaW4gQ0tBX1ZBTFVFCi0gCSAqLwotLQlkID0gKHVf Y2hhciAqKWtleV9hdHRyWzFdLnBWYWx1ZTsKLS0JbGVuID0ga2V5X2F0dHJbMV0udWxWYWx1ZUxl bjsKLSsJZCA9ICh1X2NoYXIgKilrZXlfYXR0clsyXS5wVmFsdWU7Ci0rCWxlbiA9IGtleV9hdHRy WzJdLnVsVmFsdWVMZW47Ci0gCWlmIChsZW4gPT0gRUQyNTUxOV9QS19TWiArIDIgJiYgZFswXSA9 PSAweDA0ICYmIGRbMV0gPT0gRUQyNTUxOV9QS19TWikgewotIAkJZCArPSAyOwotIAkJbGVuIC09 IDI7Ci0gCX0KLSAJaWYgKGxlbiAhPSBFRDI1NTE5X1BLX1NaKSB7Ci0tCQloZXggPSB0b2hleChr ZXlfYXR0clsxXS5wVmFsdWUsIGtleV9hdHRyWzFdLnVsVmFsdWVMZW4pOwotKwkJaGV4ID0gdG9o ZXgoa2V5X2F0dHJbMl0ucFZhbHVlLCBrZXlfYXR0clsyXS51bFZhbHVlTGVuKTsKLSAJCWxvZ2l0 X2YoIkNLQV9FQ19QT0lOVCBpbnZhbGlkIG9jdGV0IHN0cjogJXMgKGxlbiAlbHUpIiwKLS0JCSAg ICBoZXgsICh1X2xvbmcpa2V5X2F0dHJbMV0udWxWYWx1ZUxlbik7Ci0rCQkgICAgaGV4LCAodV9s b25nKWtleV9hdHRyWzJdLnVsVmFsdWVMZW4pOwotIAkJZ290byBmYWlsOwotIAl9Ci0gCi1AQCAt MTE5MCw3ICsxMzM2LDcgQEAgcGtjczExX2ZldGNoX2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2Nz MTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0gCQlrZXkgPSBOVUxMOwotIAl9Ci0g CWZyZWUoaGV4KTsKLS0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLSsJZm9yIChpID0gMDsgaSA8 IG5hdHRyOyBpKyspCi0gCQlmcmVlKGtleV9hdHRyW2ldLnBWYWx1ZSk7Ci0gCXJldHVybiBrZXk7 Ci0gfQotQEAgLTEyMDAsNyArMTM0Niw4IEBAIHN0YXRpYyBpbnQKLSBwa2NzMTFfZmV0Y2hfeDUw OV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAg ICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2JqLCBzdHJ1Y3Qgc3Noa2V5ICoqa2V5cCwgY2hhciAqKmxh YmVscCkKLSB7Ci0tCUNLX0FUVFJJQlVURQkJIGNlcnRfYXR0clszXTsKLSsJQ0tfQVRUUklCVVRF CQkgY2VydF9hdHRyWzRdOwotKwlpbnQJCQkgbmF0dHIgPSA0OwotIAlDS19TRVNTSU9OX0hBTkRM RQkgc2Vzc2lvbjsKLSAJQ0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7Ci0gCUNLX1JWCQkJIHJ2 OwotQEAgLTEyMjYsMTQgKzEzNzMsMTUgQEAgcGtjczExX2ZldGNoX3g1MDlfcHVia2V5KHN0cnVj dCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0gCi0gCW1lbXNldCgmY2Vy dF9hdHRyLCAwLCBzaXplb2YoY2VydF9hdHRyKSk7Ci0gCWNlcnRfYXR0clswXS50eXBlID0gQ0tB X0lEOwotLQljZXJ0X2F0dHJbMV0udHlwZSA9IENLQV9TVUJKRUNUOwotLQljZXJ0X2F0dHJbMl0u dHlwZSA9IENLQV9WQUxVRTsKLSsJY2VydF9hdHRyWzFdLnR5cGUgPSBDS0FfTEFCRUw7Ci0rCWNl cnRfYXR0clsyXS50eXBlID0gQ0tBX1NVQkpFQ1Q7Ci0rCWNlcnRfYXR0clszXS50eXBlID0gQ0tB X1ZBTFVFOwotIAotLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLS0J ZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7Ci0rCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Ns b3RpZHhdLnNlc3Npb247Ci0rCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0gCi0gCS8q IGZpZ3VyZSBvdXQgc2l6ZSBvZiB0aGUgYXR0cmlidXRlcyAqLwotLQlydiA9IGYtPkNfR2V0QXR0 cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwgY2VydF9hdHRyLCAzKTsKLSsJcnYgPSBmLT5DX0dl dEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRfYXR0ciwgbmF0dHIpOwotIAlpZiAo cnYgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVs dSIsIHJ2KTsKLSAJCXJldHVybiAtMTsKLUBAIC0xMjQ1LDE4ICsxMzkzLDE5IEBAIHBrY3MxMV9m ZXRjaF94NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90 aWR4LAotIAkgKiBYWFggYXNzdW1lcyBDS0FfSUQgaXMgYWx3YXlzIGZpcnN0LgotIAkgKi8KLSAJ aWYgKGNlcnRfYXR0clsxXS51bFZhbHVlTGVuID09IDAgfHwKLS0JICAgIGNlcnRfYXR0clsyXS51 bFZhbHVlTGVuID09IDApIHsKLSsJICAgIGNlcnRfYXR0clsyXS51bFZhbHVlTGVuID09IDAgfHwK LSsJICAgIGNlcnRfYXR0clszXS51bFZhbHVlTGVuID09IDApIHsKLSAJCWVycm9yKCJpbnZhbGlk IGF0dHJpYnV0ZSBsZW5ndGgiKTsKLSAJCXJldHVybiAtMTsKLSAJfQotIAotIAkvKiBhbGxvY2F0 ZSBidWZmZXJzIGZvciBhdHRyaWJ1dGVzICovCi0tCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0r CWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQotIAkJaWYgKGNlcnRfYXR0cltpXS51bFZhbHVl TGVuID4gMCkKLSAJCQljZXJ0X2F0dHJbaV0ucFZhbHVlID0geGNhbGxvYygxLCBjZXJ0X2F0dHJb aV0udWxWYWx1ZUxlbik7Ci0gCi0gCS8qIHJldHJpZXZlIElELCBzdWJqZWN0IGFuZCB2YWx1ZSBv ZiBjZXJ0aWZpY2F0ZSAqLwotLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwg Km9iaiwgY2VydF9hdHRyLCAzKTsKLSsJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Np b24sICpvYmosIGNlcnRfYXR0ciwgbmF0dHIpOwotIAlpZiAocnYgIT0gQ0tSX09LKSB7Ci0gCQll cnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCWdvdG8gb3V0 OwotQEAgLTEyNzAsOCArMTQxOSw4IEBAIHBrY3MxMV9mZXRjaF94NTA5X3B1YmtleShzdHJ1Y3Qg cGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkJc3ViamVjdCA9IHhzdHJk dXAoImludmFsaWQgc3ViamVjdCIpOwotIAlYNTA5X05BTUVfZnJlZSh4NTA5X25hbWUpOwotIAot LQljcCA9IGNlcnRfYXR0clsyXS5wVmFsdWU7Ci0tCWlmICgoeDUwOSA9IGQyaV9YNTA5KE5VTEws ICZjcCwgY2VydF9hdHRyWzJdLnVsVmFsdWVMZW4pKSA9PSBOVUxMKSB7Ci0rCWNwID0gY2VydF9h dHRyWzNdLnBWYWx1ZTsKLSsJaWYgKCh4NTA5ID0gZDJpX1g1MDkoTlVMTCwgJmNwLCBjZXJ0X2F0 dHJbM10udWxWYWx1ZUxlbikpID09IE5VTEwpIHsKLSAJCWVycm9yKCJkMmlfeDUwOSBmYWlsZWQi KTsKLSAJCWdvdG8gb3V0OwotIAl9Ci1AQCAtMTM4MSw3ICsxNTMwLDcgQEAgcGtjczExX2ZldGNo X3g1MDlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgs Ci0gCQlnb3RvIG91dDsKLSAJfQotICBvdXQ6Ci0tCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0r CWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQotIAkJZnJlZShjZXJ0X2F0dHJbaV0ucFZhbHVl KTsKLSAJWDUwOV9mcmVlKHg1MDkpOwotIAlSU0FfZnJlZShyc2EpOwotQEAgLTE0MjQsMTEgKzE1 NzMsMTIgQEAgbm90ZV9rZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xv dGlkeCwgY29uc3QgY2hhciAqY29udGV4dCwKLSAgKi8KLSBzdGF0aWMgaW50Ci0gcGtjczExX2Zl dGNoX2NlcnRzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0t ICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFiZWxzcCwgaW50ICpua2V5cykK LSsgICAgc3RydWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAqKipsYWJlbHNwLCBpbnQgKm5rZXlz LCBzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKQotIHsKLSAJc3RydWN0IHNzaGtleQkJKmtleSA9IE5V TEw7Ci0gCUNLX09CSkVDVF9DTEFTUwkJIGtleV9jbGFzczsKLS0JQ0tfQVRUUklCVVRFCQkga2V5 X2F0dHJbMV07Ci0rCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzNdOwotKwlpbnQJCQkgbmF0dHIg PSAxOwotIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKLSAJQ0tfRlVOQ1RJT05fTElTVAkq ZiA9IE5VTEw7Ci0gCUNLX1JWCQkJIHJ2OwotQEAgLTE0NDUsMTAgKzE1OTUsMjMgQEAgcGtjczEx X2ZldGNoX2NlcnRzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgs Ci0gCWtleV9hdHRyWzBdLnBWYWx1ZSA9ICZrZXlfY2xhc3M7Ci0gCWtleV9hdHRyWzBdLnVsVmFs dWVMZW4gPSBzaXplb2Yoa2V5X2NsYXNzKTsKLSAKLS0Jc2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Ns b3RpZHhdLnNlc3Npb247Ci0tCWYgPSBwLT5mdW5jdGlvbl9saXN0OwotKwlpZiAodXJpLT5pZCAh PSBOVUxMKSB7Ci0rCQlrZXlfYXR0cltuYXR0cl0udHlwZSA9IENLQV9JRDsKLSsJCWtleV9hdHRy W25hdHRyXS5wVmFsdWUgPSB1cmktPmlkOwotKwkJa2V5X2F0dHJbbmF0dHJdLnVsVmFsdWVMZW4g PSB1cmktPmlkX2xlbjsKLSsJCW5hdHRyKys7Ci0rCX0KLSsJaWYgKHVyaS0+b2JqZWN0ICE9IE5V TEwpIHsKLSsJCWtleV9hdHRyW25hdHRyXS50eXBlID0gQ0tBX0xBQkVMOwotKwkJa2V5X2F0dHJb bmF0dHJdLnBWYWx1ZSA9IHVyaS0+b2JqZWN0OwotKwkJa2V5X2F0dHJbbmF0dHJdLnVsVmFsdWVM ZW4gPSBzdHJsZW4odXJpLT5vYmplY3QpOwotKwkJbmF0dHIrKzsKLSsJfQotKwotKwlzZXNzaW9u ID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotKwlmID0gcC0+bW9kdWxl LT5mdW5jdGlvbl9saXN0OwotIAotLQlydiA9IGYtPkNfRmluZE9iamVjdHNJbml0KHNlc3Npb24s IGtleV9hdHRyLCAxKTsKLSsJcnYgPSBmLT5DX0ZpbmRPYmplY3RzSW5pdChzZXNzaW9uLCBrZXlf YXR0ciwgbmF0dHIpOwotIAlpZiAocnYgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19GaW5kT2Jq ZWN0c0luaXQgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlnb3RvIGZhaWw7Ci1AQCAtMTUyMSw2ICsx Njg0LDEzIEBAIGZhaWw6Ci0gCi0gCXJldHVybiAocmV0KTsKLSB9Ci0rI2Vsc2UKLStzdGF0aWMg aW50Ci0rcGtjczExX2ZldGNoX2NlcnRzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VM T05HIHNsb3RpZHgsCi0rICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFiZWxz cCwgaW50ICpua2V5cywgc3RydWN0IHBrY3MxMV91cmkgKnVyaSkKLSt7Ci0rCXJldHVybiAwOwot K30KLSAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCi0gCi0gLyoKLUBAIC0xNTMwLDExICsxNzAw LDEyIEBAIGZhaWw6Ci0gICovCi0gc3RhdGljIGludAotIHBrY3MxMV9mZXRjaF9rZXlzKHN0cnVj dCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0tICAgIHN0cnVjdCBzc2hr ZXkgKioqa2V5c3AsIGNoYXIgKioqbGFiZWxzcCwgaW50ICpua2V5cykKLSsgICAgc3RydWN0IHNz aGtleSAqKiprZXlzcCwgY2hhciAqKipsYWJlbHNwLCBpbnQgKm5rZXlzLCBzdHJ1Y3QgcGtjczEx X3VyaSAqdXJpKQotIHsKLSAJc3RydWN0IHNzaGtleQkJKmtleSA9IE5VTEw7Ci0gCUNLX09CSkVD VF9DTEFTUwkJIGtleV9jbGFzczsKLS0JQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbMl07Ci0rCUNL X0FUVFJJQlVURQkJIGtleV9hdHRyWzNdOwotKwlpbnQJCQkgbmF0dHIgPSAxOwotIAlDS19TRVNT SU9OX0hBTkRMRQkgc2Vzc2lvbjsKLSAJQ0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7Ci0gCUNL X1JWCQkJIHJ2OwotQEAgLTE1NTAsMTAgKzE3MjEsMjMgQEAgcGtjczExX2ZldGNoX2tleXMoc3Ry dWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJa2V5X2F0dHJbMF0u cFZhbHVlID0gJmtleV9jbGFzczsKLSAJa2V5X2F0dHJbMF0udWxWYWx1ZUxlbiA9IHNpemVvZihr ZXlfY2xhc3MpOwotIAotLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsK LS0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7Ci0rCWlmICh1cmktPmlkICE9IE5VTEwpIHsKLSsJCWtl eV9hdHRyW25hdHRyXS50eXBlID0gQ0tBX0lEOwotKwkJa2V5X2F0dHJbbmF0dHJdLnBWYWx1ZSA9 IHVyaS0+aWQ7Ci0rCQlrZXlfYXR0cltuYXR0cl0udWxWYWx1ZUxlbiA9IHVyaS0+aWRfbGVuOwot KwkJbmF0dHIrKzsKLSsJfQotKwlpZiAodXJpLT5vYmplY3QgIT0gTlVMTCkgewotKwkJa2V5X2F0 dHJbbmF0dHJdLnR5cGUgPSBDS0FfTEFCRUw7Ci0rCQlrZXlfYXR0cltuYXR0cl0ucFZhbHVlID0g dXJpLT5vYmplY3Q7Ci0rCQlrZXlfYXR0cltuYXR0cl0udWxWYWx1ZUxlbiA9IHN0cmxlbih1cmkt Pm9iamVjdCk7Ci0rCQluYXR0cisrOwotKwl9Ci0rCi0rCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNs b3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0rCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7 Ci0gCi0tCXJ2ID0gZi0+Q19GaW5kT2JqZWN0c0luaXQoc2Vzc2lvbiwga2V5X2F0dHIsIDEpOwot KwlydiA9IGYtPkNfRmluZE9iamVjdHNJbml0KHNlc3Npb24sIGtleV9hdHRyLCBuYXR0cik7Ci0g CWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0ZpbmRPYmplY3RzSW5pdCBmYWlsZWQ6 ICVsdSIsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLUBAIC0xODQxLDE2ICsyMDI1LDEwIEBAIHBrY3Mx MV9lY2RzYV9nZW5lcmF0ZV9wcml2YXRlX2tleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBD S19VTE9ORyBzbG90aWR4LAotIH0KLSAjZW5kaWYgLyogV0lUSF9QS0NTMTFfS0VZR0VOICovCi0g Ci0tLyoKLS0gKiByZWdpc3RlciBhIG5ldyBwcm92aWRlciwgZmFpbHMgaWYgcHJvdmlkZXIgYWxy ZWFkeSBleGlzdHMuIGlmCi0tICoga2V5cCBpcyBwcm92aWRlZCwgZmV0Y2gga2V5cy4KLS0gKi8K LSBzdGF0aWMgaW50Ci0tcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lk LCBjaGFyICpwaW4sCi0tICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwgY2hhciAqKipsYWJlbHNw LAotLSAgICBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoqcHJvdmlkZXJwLCBDS19VTE9ORyB1c2Vy KQotK3BrY3MxMV9pbml0aWFsaXplX3Byb3ZpZGVyKHN0cnVjdCBwa2NzMTFfdXJpICp1cmksIHN0 cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipwcm92aWRlcnApCi0gewotLQlpbnQgbmtleXMsIG5lZWRf ZmluYWxpemUgPSAwOwotKwlpbnQgbmVlZF9maW5hbGl6ZSA9IDA7Ci0gCWludCByZXQgPSAtMTsK LSAJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCA9IE5VTEw7Ci0gCXZvaWQgKmhhbmRsZSA9IE5V TEw7Ci1AQCAtMTg1OSwxMjggKzIwMzcsMTI2IEBAIHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcihj aGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLAotIAlDS19GVU5DVElPTl9MSVNUICpmID0gTlVM TDsKLSAJQ0tfVE9LRU5fSU5GTyAqdG9rZW47Ci0gCUNLX1VMT05HIGk7Ci0rCWNoYXIgKnByb3Zp ZGVyX21vZHVsZSA9IE5VTEw7Ci0rCXN0cnVjdCBwa2NzMTFfbW9kdWxlICptID0gTlVMTDsKLSsK LSsJLyogaWYgbm8gcHJvdmlkZXIgc3BlY2lmaWVkLCBmYWxsYmFjayB0byBwMTEta2l0ICovCi0r CWlmICh1cmktPm1vZHVsZV9wYXRoID09IE5VTEwpIHsKLSsjaWZkZWYgUEtDUzExX0RFRkFVTFRf UFJPVklERVIKLSsJCXByb3ZpZGVyX21vZHVsZSA9IHN0cmR1cChQS0NTMTFfREVGQVVMVF9QUk9W SURFUik7Ci0rI2Vsc2UKLSsJCWVycm9yX2YoIk5vIG1vZHVsZSBwYXRoIHByb3ZpZGVkIik7Ci0r IAkJZ290byBmYWlsOwotKyNlbmRpZgotKwl9IGVsc2UgewotKwkJcHJvdmlkZXJfbW9kdWxlID0g c3RyZHVwKHVyaS0+bW9kdWxlX3BhdGgpOwotKwl9Ci0rCXAgPSB4Y2FsbG9jKDEsIHNpemVvZigq cCkpOwotKwlwLT5uYW1lID0gcGtjczExX3VyaV9nZXQodXJpKTsKLSAKLS0JaWYgKHByb3ZpZGVy cCA9PSBOVUxMKQotLQkJZ290byBmYWlsOwotLQkqcHJvdmlkZXJwID0gTlVMTDsKLS0KLS0JaWYg KGtleXAgIT0gTlVMTCkKLS0JCSprZXlwID0gTlVMTDsKLS0JaWYgKGxhYmVsc3AgIT0gTlVMTCkK LS0JCSpsYWJlbHNwID0gTlVMTDsKLS0KLS0JaWYgKHBrY3MxMV9wcm92aWRlcl9sb29rdXAocHJv dmlkZXJfaWQpICE9IE5VTEwpIHsKLS0JCWRlYnVnX2YoInByb3ZpZGVyIGFscmVhZHkgcmVnaXN0 ZXJlZDogJXMiLCBwcm92aWRlcl9pZCk7Ci0rCWlmIChsaWJfY29udGFpbnNfc3ltYm9sKHByb3Zp ZGVyX21vZHVsZSwgIkNfR2V0RnVuY3Rpb25MaXN0IikgIT0gMCkgewotKwkJZXJyb3IoInByb3Zp ZGVyICVzIGlzIG5vdCBhIFBLQ1MxMSBsaWJyYXJ5IiwgcHJvdmlkZXJfbW9kdWxlKTsKLSAJCWdv dG8gZmFpbDsKLSAJfQotLQlpZiAobGliX2NvbnRhaW5zX3N5bWJvbChwcm92aWRlcl9pZCwgIkNf R2V0RnVuY3Rpb25MaXN0IikgIT0gMCkgewotLQkJZXJyb3IoInByb3ZpZGVyICVzIGlzIG5vdCBh IFBLQ1MxMSBsaWJyYXJ5IiwgcHJvdmlkZXJfaWQpOwotLQkJZ290byBmYWlsOwotKwlpZiAoKG0g PSBwa2NzMTFfcHJvdmlkZXJfbG9va3VwX21vZHVsZShwcm92aWRlcl9tb2R1bGUpKSAhPSBOVUxM Ci0rCSAgICYmIG0tPnZhbGlkKSB7Ci0rCQlkZWJ1Z19mKCJwcm92aWRlciBtb2R1bGUgYWxyZWFk eSBpbml0aWFsaXplZDogJXMiLCBwcm92aWRlcl9tb2R1bGUpOwotKwkJZnJlZShwcm92aWRlcl9t b2R1bGUpOwotKwkJLyogU2tpcCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgUEtDUyMxMSBtb2R1bGUg Ki8KLSsJCW0tPnJlZmNvdW50Kys7Ci0rCQlwLT5tb2R1bGUgPSBtOwotKwkJcC0+dmFsaWQgPSAx OwotKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnBrY3MxMV9wcm92aWRlcnMsIHAsIG5leHQpOwotKwkJ cC0+cmVmY291bnQrKzsJLyogYWRkIHRvIHByb3ZpZGVyIGxpc3QgKi8KLSsJCSpwcm92aWRlcnAg PSBwOwotKwkJcmV0dXJuIDA7Ci0rCX0gZWxzZSB7Ci0rCQltID0geGNhbGxvYygxLCBzaXplb2Yo Km0pKTsKLSsJCXAtPm1vZHVsZSA9IG07Ci0rCQltLT5yZWZjb3VudCsrOwotIAl9Ci0rCi0gCS8q IG9wZW4gc2hhcmVkIHBrY3MxMS1saWJyYXJ5ICovCi0tCWlmICgoaGFuZGxlID0gZGxvcGVuKHBy b3ZpZGVyX2lkLCBSVExEX05PVykpID09IE5VTEwpIHsKLS0JCWVycm9yKCJkbG9wZW4gJXMgZmFp bGVkOiAlcyIsIHByb3ZpZGVyX2lkLCBkbGVycm9yKCkpOwotKwlpZiAoKGhhbmRsZSA9IGRsb3Bl bihwcm92aWRlcl9tb2R1bGUsIFJUTERfTk9XKSkgPT0gTlVMTCkgewotKwkJZXJyb3IoImRsb3Bl biAlcyBmYWlsZWQ6ICVzIiwgcHJvdmlkZXJfbW9kdWxlLCBkbGVycm9yKCkpOwotIAkJZ290byBm YWlsOwotIAl9Ci0gCWlmICgoZ2V0ZnVuY3Rpb25saXN0ID0gZGxzeW0oaGFuZGxlLCAiQ19HZXRG dW5jdGlvbkxpc3QiKSkgPT0gTlVMTCkKLSAJCWZhdGFsKCJkbHN5bShDX0dldEZ1bmN0aW9uTGlz dCkgZmFpbGVkOiAlcyIsIGRsZXJyb3IoKSk7Ci0tCXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqcCkp OwotLQlwLT5uYW1lID0geHN0cmR1cChwcm92aWRlcl9pZCk7Ci0tCXAtPmhhbmRsZSA9IGhhbmRs ZTsKLS0JLyogc2V0IHVwIHRoZSBwa2NzMTEgY2FsbGJhY2tzICovCi0rCXAtPm1vZHVsZS0+aGFu ZGxlID0gaGFuZGxlOwotKwkvKiBzZXR1cCB0aGUgcGtjczExIGNhbGxiYWNrcyAqLwotIAlpZiAo KHJ2ID0gKCpnZXRmdW5jdGlvbmxpc3QpKCZmKSkgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19H ZXRGdW5jdGlvbkxpc3QgZm9yIHByb3ZpZGVyICVzIGZhaWxlZDogJWx1IiwKLS0JCSAgICBwcm92 aWRlcl9pZCwgcnYpOwotKwkJICAgIHByb3ZpZGVyX21vZHVsZSwgcnYpOwotIAkJZ290byBmYWls OwotIAl9Ci0tCXAtPmZ1bmN0aW9uX2xpc3QgPSBmOwotKwltLT5mdW5jdGlvbl9saXN0ID0gZjsK LSAJaWYgKChydiA9IGYtPkNfSW5pdGlhbGl6ZShOVUxMKSkgIT0gQ0tSX09LKSB7Ci0gCQllcnJv cigiQ19Jbml0aWFsaXplIGZvciBwcm92aWRlciAlcyBmYWlsZWQ6ICVsdSIsCi0tCQkgICAgcHJv dmlkZXJfaWQsIHJ2KTsKLSsJCSAgICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsKLSAJCWdvdG8gZmFp bDsKLSAJfQotIAluZWVkX2ZpbmFsaXplID0gMTsKLS0JaWYgKChydiA9IGYtPkNfR2V0SW5mbygm cC0+aW5mbykpICE9IENLUl9PSykgewotKwlpZiAoKHJ2ID0gZi0+Q19HZXRJbmZvKCZtLT5pbmZv KSkgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19HZXRJbmZvIGZvciBwcm92aWRlciAlcyBmYWls ZWQ6ICVsdSIsCi0tCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKLSsJCSAgICBwcm92aWRlcl9tb2R1 bGUsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLSAJfQotLQlkZWJ1ZygicHJvdmlkZXIgJXM6IG1hbnVm YWN0dXJlcklEIDwlLipzPiBjcnlwdG9raVZlcnNpb24gJWQuJWQiCi0tCSAgICAiIGxpYnJhcnlE ZXNjcmlwdGlvbiA8JS4qcz4gbGlicmFyeVZlcnNpb24gJWQuJWQiLAotLQkgICAgcHJvdmlkZXJf aWQsCi0tCSAgICBSTVNQQUNFKHAtPmluZm8ubWFudWZhY3R1cmVySUQpLAotLQkgICAgcC0+aW5m by5jcnlwdG9raVZlcnNpb24ubWFqb3IsCi0tCSAgICBwLT5pbmZvLmNyeXB0b2tpVmVyc2lvbi5t aW5vciwKLS0JICAgIFJNU1BBQ0UocC0+aW5mby5saWJyYXJ5RGVzY3JpcHRpb24pLAotLQkgICAg cC0+aW5mby5saWJyYXJ5VmVyc2lvbi5tYWpvciwKLS0JICAgIHAtPmluZm8ubGlicmFyeVZlcnNp b24ubWlub3IpOwotLQlpZiAoKHJ2ID0gZi0+Q19HZXRTbG90TGlzdChDS19UUlVFLCBOVUxMLCAm cC0+bnNsb3RzKSkgIT0gQ0tSX09LKSB7Ci0rCXJtc3BhY2UobS0+aW5mby5tYW51ZmFjdHVyZXJJ RCwgc2l6ZW9mKG0tPmluZm8ubWFudWZhY3R1cmVySUQpKTsKLSsJaWYgKHVyaS0+bGliX21hbnVm ICE9IE5VTEwgJiYKLSsJICAgIHN0cm5jbXAodXJpLT5saWJfbWFudWYsIG0tPmluZm8ubWFudWZh Y3R1cmVySUQsIDMyKSkgewotKwkJZGVidWdfZigiU2tpcHBpbmcgcHJvdmlkZXIgJXMgbm90IG1h dGNoaW5nIGxpYnJhcnlfbWFudWZhY3R1cmVyIiwKLSsJCSAgICBtLT5pbmZvLm1hbnVmYWN0dXJl cklEKTsKLSsgCQlnb3RvIGZhaWw7Ci0rIAl9Ci0rCXJtc3BhY2UobS0+aW5mby5saWJyYXJ5RGVz Y3JpcHRpb24sIHNpemVvZihtLT5pbmZvLmxpYnJhcnlEZXNjcmlwdGlvbikpOwotKwlkZWJ1Zygi cHJvdmlkZXIgJXM6IG1hbnVmYWN0dXJlcklEIDwlLjMycz4gY3J5cHRva2lWZXJzaW9uICVkLiVk IgotKwkgICAgIiBsaWJyYXJ5RGVzY3JpcHRpb24gPCUuMzJzPiBsaWJyYXJ5VmVyc2lvbiAlZC4l ZCIsCi0rCSAgICBwcm92aWRlcl9tb2R1bGUsCi0rCSAgICBtLT5pbmZvLm1hbnVmYWN0dXJlcklE LAotKwkgICAgbS0+aW5mby5jcnlwdG9raVZlcnNpb24ubWFqb3IsCi0rCSAgICBtLT5pbmZvLmNy eXB0b2tpVmVyc2lvbi5taW5vciwKLSsJICAgIG0tPmluZm8ubGlicmFyeURlc2NyaXB0aW9uLAot KwkgICAgbS0+aW5mby5saWJyYXJ5VmVyc2lvbi5tYWpvciwKLSsJICAgIG0tPmluZm8ubGlicmFy eVZlcnNpb24ubWlub3IpOwotKwotKwlpZiAoKHJ2ID0gZi0+Q19HZXRTbG90TGlzdChDS19UUlVF LCBOVUxMLCAmbS0+bnNsb3RzKSkgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19HZXRTbG90TGlz dCBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLSAJfQotLQlpZiAocC0+bnNsb3Rz ID09IDApIHsKLS0JCWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVybmVkIG5vIHNsb3RzIiwgcHJv dmlkZXJfaWQpOwotKwlpZiAobS0+bnNsb3RzID09IDApIHsKLSsJCWRlYnVnX2YoInByb3ZpZGVy ICVzIHJldHVybmVkIG5vIHNsb3RzIiwgcHJvdmlkZXJfbW9kdWxlKTsKLSAJCXJldCA9IC1TU0hf UEtDUzExX0VSUl9OT19TTE9UUzsKLSAJCWdvdG8gZmFpbDsKLSAJfQotLQlwLT5zbG90bGlzdCA9 IHhjYWxsb2MocC0+bnNsb3RzLCBzaXplb2YoQ0tfU0xPVF9JRCkpOwotLQlpZiAoKHJ2ID0gZi0+ Q19HZXRTbG90TGlzdChDS19UUlVFLCBwLT5zbG90bGlzdCwgJnAtPm5zbG90cykpCi0rCW0tPnNs b3RsaXN0ID0geGNhbGxvYyhtLT5uc2xvdHMsIHNpemVvZihDS19TTE9UX0lEKSk7Ci0rCWlmICgo cnYgPSBmLT5DX0dldFNsb3RMaXN0KENLX1RSVUUsIG0tPnNsb3RsaXN0LCAmbS0+bnNsb3RzKSkK LSAJICAgICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0U2xvdExpc3QgZm9yIHByb3ZpZGVy ICVzIGZhaWxlZDogJWx1IiwKLS0JCSAgICBwcm92aWRlcl9pZCwgcnYpOwotKwkJICAgIHByb3Zp ZGVyX21vZHVsZSwgcnYpOwotIAkJZ290byBmYWlsOwotIAl9Ci0tCXAtPnNsb3RpbmZvID0geGNh bGxvYyhwLT5uc2xvdHMsIHNpemVvZihzdHJ1Y3QgcGtjczExX3Nsb3RpbmZvKSk7Ci0rCW0tPnNs b3RpbmZvID0geGNhbGxvYyhtLT5uc2xvdHMsIHNpemVvZihzdHJ1Y3QgcGtjczExX3Nsb3RpbmZv KSk7Ci0gCXAtPnZhbGlkID0gMTsKLS0JbmtleXMgPSAwOwotLQlmb3IgKGkgPSAwOyBpIDwgcC0+ bnNsb3RzOyBpKyspIHsKLS0JCXRva2VuID0gJnAtPnNsb3RpbmZvW2ldLnRva2VuOwotLQkJaWYg KChydiA9IGYtPkNfR2V0VG9rZW5JbmZvKHAtPnNsb3RsaXN0W2ldLCB0b2tlbikpCi0rCW0tPnZh bGlkID0gMTsKLSsJZm9yIChpID0gMDsgaSA8IG0tPm5zbG90czsgaSsrKSB7Ci0rCQl0b2tlbiA9 ICZtLT5zbG90aW5mb1tpXS50b2tlbjsKLSsJCWlmICgocnYgPSBmLT5DX0dldFRva2VuSW5mbyht LT5zbG90bGlzdFtpXSwgdG9rZW4pKQotIAkJICAgICE9IENLUl9PSykgewotIAkJCWVycm9yKCJD X0dldFRva2VuSW5mbyBmb3IgcHJvdmlkZXIgJXMgc2xvdCAlbHUgIgotLQkJCSAgICAiZmFpbGVk OiAlbHUiLCBwcm92aWRlcl9pZCwgKHVfbG9uZylpLCBydik7Ci0tCQkJY29udGludWU7Ci0tCQl9 Ci0tCQlpZiAoKHRva2VuLT5mbGFncyAmIENLRl9UT0tFTl9JTklUSUFMSVpFRCkgPT0gMCkgewot LQkJCWRlYnVnMl9mKCJpZ25vcmluZyB1bmluaXRpYWxpc2VkIHRva2VuIGluICIKLS0JCQkgICAg InByb3ZpZGVyICVzIHNsb3QgJWx1IiwgcHJvdmlkZXJfaWQsICh1X2xvbmcpaSk7Ci0rCQkJICAg ICJmYWlsZWQ6ICVsdSIsIHByb3ZpZGVyX21vZHVsZSwgKHVfbG9uZylpLCBydik7Ci0gCQkJY29u dGludWU7Ci0gCQl9Ci0gCQlkZWJ1ZygicHJvdmlkZXIgJXMgc2xvdCAlbHU6IGxhYmVsIDwlLipz PiAiCi0gCQkgICAgIm1hbnVmYWN0dXJlcklEIDwlLipzPiBtb2RlbCA8JS4qcz4gc2VyaWFsIDwl LipzPiAiCi0gCQkgICAgImZsYWdzIDB4JWx4IiwKLS0JCSAgICBwcm92aWRlcl9pZCwgKHVuc2ln bmVkIGxvbmcpaSwKLSsJCSAgICBwcm92aWRlcl9tb2R1bGUsICh1bnNpZ25lZCBsb25nKWksCi0g CQkgICAgUk1TUEFDRSh0b2tlbi0+bGFiZWwpLCBSTVNQQUNFKHRva2VuLT5tYW51ZmFjdHVyZXJJ RCksCi0gCQkgICAgUk1TUEFDRSh0b2tlbi0+bW9kZWwpLCBSTVNQQUNFKHRva2VuLT5zZXJpYWxO dW1iZXIpLAotIAkJICAgIHRva2VuLT5mbGFncyk7Ci0tCQkvKgotLQkJICogb3BlbiBzZXNzaW9u LCBsb2dpbiB3aXRoIHBpbiBhbmQgcmV0cmlldmUgcHVibGljCi0tCQkgKiBrZXlzIChpZiBrZXlw IGlzIHByb3ZpZGVkKQotLQkJICovCi0tCQlpZiAoKHJldCA9IHBrY3MxMV9vcGVuX3Nlc3Npb24o cCwgaSwgcGluLCB1c2VyKSkgIT0gMCB8fAotLQkJICAgIGtleXAgPT0gTlVMTCkKLS0JCQljb250 aW51ZTsKLS0JCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cyk7 Ci0tI2lmZGVmIFdJVEhfT1BFTlNTTAotLQkJcGtjczExX2ZldGNoX2NlcnRzKHAsIGksIGtleXAs IGxhYmVsc3AsICZua2V5cyk7Ci0tI2VuZGlmCi0tCQlpZiAobmtleXMgPT0gMCAmJiAhcC0+c2xv dGluZm9baV0ubG9nZ2VkX2luICYmCi0tCQkgICAgcGtjczExX2ludGVyYWN0aXZlKSB7Ci0tCQkJ LyoKLS0JCQkgKiBTb21lIHRva2VucyByZXF1aXJlIGxvZ2luIGJlZm9yZSB0aGV5IHdpbGwKLS0J CQkgKiBleHBvc2Uga2V5cy4KLS0JCQkgKi8KLS0JCQlpZiAocGtjczExX2xvZ2luX3Nsb3QocCwg JnAtPnNsb3RpbmZvW2ldLAotLQkJCSAgICBDS1VfVVNFUikgPCAwKSB7Ci0tCQkJCWVycm9yKCJs b2dpbiBmYWlsZWQiKTsKLS0JCQkJY29udGludWU7Ci0tCQkJfQotLQkJCXBrY3MxMV9mZXRjaF9r ZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cyk7Ci0tI2lmZGVmIFdJVEhfT1BFTlNTTAot LQkJCXBrY3MxMV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMpOwotLSNl bmRpZgotLQkJfQotIAl9Ci0rCW0tPm1vZHVsZV9wYXRoID0gcHJvdmlkZXJfbW9kdWxlOwotKwlw cm92aWRlcl9tb2R1bGUgPSBOVUxMOwotIAotIAkvKiBub3cgb3duZWQgYnkgY2FsbGVyICovCi0g CSpwcm92aWRlcnAgPSBwOwotQEAgLTE5ODgsMjEgKzIxNjQsMjIgQEAgcGtjczExX3JlZ2lzdGVy X3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sCi0gCVRBSUxRX0lOU0VSVF9U QUlMKCZwa2NzMTFfcHJvdmlkZXJzLCBwLCBuZXh0KTsKLSAJcC0+cmVmY291bnQrKzsJLyogYWRk IHRvIHByb3ZpZGVyIGxpc3QgKi8KLSAKLS0JcmV0dXJuIChua2V5cyk7Ci0rCXJldHVybiAwOwot IGZhaWw6Ci0gCWlmIChuZWVkX2ZpbmFsaXplICYmIChydiA9IGYtPkNfRmluYWxpemUoTlVMTCkp ICE9IENLUl9PSykKLSAJCWVycm9yKCJDX0ZpbmFsaXplIGZvciBwcm92aWRlciAlcyBmYWlsZWQ6 ICVsdSIsCi0tCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKLSsJCSAgICBwcm92aWRlcl9tb2R1bGUs IHJ2KTsKLSsJZnJlZShwcm92aWRlcl9tb2R1bGUpOwotKwlpZiAobSkgewotKwkJZnJlZShtLT5z bG90bGlzdCk7Ci0rCQlmcmVlKG0pOwotKwl9Ci0gCWlmIChwKSB7Ci0gCQlmcmVlKHAtPm5hbWUp OwotLQkJZnJlZShwLT5zbG90bGlzdCk7Ci0tCQlmcmVlKHAtPnNsb3RpbmZvKTsKLSAJCWZyZWUo cCk7Ci0gCX0KLSAJaWYgKGhhbmRsZSkKLSAJCWRsY2xvc2UoaGFuZGxlKTsKLS0JaWYgKHJldCA+ IDApCi0tCQlyZXQgPSAtMTsKLSAJcmV0dXJuIChyZXQpOwotIH0KLSAKLUBAIC0yMDM4LDE4ICsy MjE1LDE2MyBAQCBwa2NzMTFfdGVybWluYXRlKHZvaWQpCi0gfQotIAotIC8qCi0tICogcmVnaXN0 ZXIgYSBuZXcgcHJvdmlkZXIgYW5kIGdldCBudW1iZXIgb2Yga2V5cyBob2xkIGJ5IHRoZSB0b2tl biwKLS0gKiBmYWlscyBpZiBwcm92aWRlciBhbHJlYWR5IGV4aXN0cwotKyAqIHJlZ2lzdGVyIGEg bmV3IHByb3ZpZGVyLCBmYWlscyBpZiBwcm92aWRlciBhbHJlYWR5IGV4aXN0cy4gaWYKLSsgKiBr ZXlwIGlzIHByb3ZpZGVkLCBmZXRjaCBrZXlzLgotICAqLwotK3N0YXRpYyBpbnQKLStwa2NzMTFf cmVnaXN0ZXJfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBwa2NzMTFfdXJpICp1cmksIGNoYXIgKnBp biwKLSsgICAgc3RydWN0IHNzaGtleSAqKiprZXlwLCBjaGFyICoqKmxhYmVsc3AsIHN0cnVjdCBw a2NzMTFfcHJvdmlkZXIgKipwcm92aWRlcnAsCi0rICAgIENLX1VMT05HIHVzZXIpCi0rewotKwlp bnQgbmtleXM7Ci0rCWludCByZXQgPSAtMTsKLSsJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCA9 IE5VTEw7Ci0rCUNLX1VMT05HIGk7Ci0rCUNLX1RPS0VOX0lORk8gKnRva2VuOwotKwljaGFyICpw cm92aWRlcl91cmkgPSBOVUxMOwotKwotKwlpZiAocHJvdmlkZXJwID09IE5VTEwpCi0rCQlnb3Rv IGZhaWw7Ci0rCSpwcm92aWRlcnAgPSBOVUxMOwotKwotKwlpZiAoa2V5cCAhPSBOVUxMKQotKwkJ KmtleXAgPSBOVUxMOwotKwotKwlpZiAoKHJldCA9IHBrY3MxMV9pbml0aWFsaXplX3Byb3ZpZGVy KHVyaSwgJnApKSAhPSAwKSB7Ci0rCQlnb3RvIGZhaWw7Ci0rCX0KLSsKLSsJcHJvdmlkZXJfdXJp ID0gcGtjczExX3VyaV9nZXQodXJpKTsKLSsJaWYgKHBpbiA9PSBOVUxMICYmIHVyaS0+cGluICE9 IE5VTEwpIHsKLSsJCXBpbiA9IHVyaS0+cGluOwotKwl9Ci0rCW5rZXlzID0gMDsKLSsJZm9yIChp ID0gMDsgaSA8IHAtPm1vZHVsZS0+bnNsb3RzOyBpKyspIHsKLSsJCXRva2VuID0gJnAtPm1vZHVs ZS0+c2xvdGluZm9baV0udG9rZW47Ci0rCQlpZiAoKHRva2VuLT5mbGFncyAmIENLRl9UT0tFTl9J TklUSUFMSVpFRCkgPT0gMCkgewotKwkJCWRlYnVnMl9mKCJpZ25vcmluZyB1bmluaXRpYWxpc2Vk IHRva2VuIGluICIKLSsJCQkgICAgInByb3ZpZGVyICVzIHNsb3QgJWx1IiwgcHJvdmlkZXJfdXJp LCAodV9sb25nKWkpOwotKwkJCWNvbnRpbnVlOwotKwkJfQotKwkJaWYgKHVyaS0+dG9rZW4gIT0g TlVMTCAmJgotKwkJICAgIHN0cm5jbXAodG9rZW4tPmxhYmVsLCB1cmktPnRva2VuLCAzMikgIT0g MCkgewotKwkJCWRlYnVnMl9mKCJpZ25vcmluZyB0b2tlbiBub3QgbWF0Y2hpbmcgbGFiZWwgKCUu MzJzKSAiCi0rCQkJICAgICJzcGVjaWZpZWQgYnkgUEtDUyMxMSBVUkkgaW4gc2xvdCAlbHUiLAot KwkJCSAgICB0b2tlbi0+bGFiZWwsICh1bnNpZ25lZCBsb25nKWkpOwotKwkJCWNvbnRpbnVlOwot KwkJfQotKwkJaWYgKHVyaS0+bWFudWYgIT0gTlVMTCAmJgotKwkJICAgIHN0cm5jbXAodG9rZW4t Pm1hbnVmYWN0dXJlcklELCB1cmktPm1hbnVmLCAzMikgIT0gMCkgewotKwkJCWRlYnVnMl9mKCJp Z25vcmluZyB0b2tlbiBub3QgbWF0Y2hpbmcgcmVxdXJlc3RlZCAiCi0rCQkJICAgICJtYW51ZmFj dHVyZXJJRCAoJS4zMnMpIHNwZWNpZmllZCBieSBQS0NTIzExIFVSSSBpbiAiCi0rCQkJICAgICJz bG90ICVsdSIsIHRva2VuLT5tYW51ZmFjdHVyZXJJRCwgKHVuc2lnbmVkIGxvbmcpaSk7Ci0rCQkJ Y29udGludWU7Ci0rCQl9Ci0rCQlpZiAodXJpLT5zZXJpYWwgIT0gTlVMTCAmJgotKwkJICAgIHN0 cm5jbXAodG9rZW4tPnNlcmlhbE51bWJlciwgdXJpLT5zZXJpYWwsIDE2KSAhPSAwKSB7Ci0rCQkJ ZGVidWcyX2YoImlnbm9yaW5nIHRva2VuIG5vdCBtYXRjaGluZyByZXF1cmVzdGVkICIKLSsJCQkg ICAgInNlcmlhbE51bWJlciAoJXMpIHNwZWNpZmllZCBieSBQS0NTIzExIFVSSSBpbiAiCi0rCQkJ ICAgICJzbG90ICVsdSIsIHRva2VuLT5zZXJpYWxOdW1iZXIsICh1bnNpZ25lZCBsb25nKWkpOwot KwkJCWNvbnRpbnVlOwotKwkJfQotKwkJZGVidWcoInByb3ZpZGVyICVzIHNsb3QgJWx1OiBsYWJl bCA8JS4zMnM+IG1hbnVmYWN0dXJlcklEIDwlLjMycz4gIgotKwkJICAgICJtb2RlbCA8JS4xNnM+ IHNlcmlhbCA8JS4xNnM+IGZsYWdzIDB4JWx4IiwKLSsJCSAgICBwcm92aWRlcl91cmksICh1bnNp Z25lZCBsb25nKWksCi0rCQkgICAgdG9rZW4tPmxhYmVsLCB0b2tlbi0+bWFudWZhY3R1cmVySUQs IHRva2VuLT5tb2RlbCwKLSsJCSAgICB0b2tlbi0+c2VyaWFsTnVtYmVyLCB0b2tlbi0+ZmxhZ3Mp OwotKwkJLyoKLSsJCSAqIG9wZW4gc2Vzc2lvbiBpZiBub3QgeWV0IG9wZW5lZCwgbG9naW4gd2l0 aCBwaW4gYW5kCi0rCQkgKiByZXRyaWV2ZSBwdWJsaWMga2V5cyAoaWYga2V5cCBpcyBwcm92aWRl ZCkKLSsJCSAqLwotKwkJaWYgKChwLT5tb2R1bGUtPnNsb3RpbmZvW2ldLnNlc3Npb24gIT0gMCB8 fAotKwkJICAgIChyZXQgPSBwa2NzMTFfb3Blbl9zZXNzaW9uKHAsIGksIHBpbiwgdXNlcikpICE9 IDApICYmIC8qID8/PyAqLwotKwkJICAgIGtleXAgPT0gTlVMTCkKLSsJCQljb250aW51ZTsKLSsJ CXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cywgdXJpKTsKLSsJ CXBrY3MxMV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMsIHVyaSk7Ci0r CQlpZiAobmtleXMgPT0gMCAmJiAhcC0+bW9kdWxlLT5zbG90aW5mb1tpXS5sb2dnZWRfaW4gJiYK LSsJCSAgICBwa2NzMTFfaW50ZXJhY3RpdmUpIHsKLSsJCQkvKgotKwkJCSAqIFNvbWUgdG9rZW5z IHJlcXVpcmUgbG9naW4gYmVmb3JlIHRoZXkgd2lsbAotKwkJCSAqIGV4cG9zZSBrZXlzLgotKwkJ CSAqLwotKwkJCWRlYnVnM19mKCJUcnlpbmcgdG8gbG9naW4gYXMgdGhlcmUgd2VyZSBubyBrZXlz IGZvdW5kIik7Ci0rCQkJaWYgKHBrY3MxMV9sb2dpbl9zbG90KHAsICZwLT5tb2R1bGUtPnNsb3Rp bmZvW2ldLAotKwkJCSAgICBDS1VfVVNFUikgPCAwKSB7Ci0rCQkJCWVycm9yKCJsb2dpbiBmYWls ZWQiKTsKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGks IGtleXAsIGxhYmVsc3AsICZua2V5cywgdXJpKTsKLSsJCQlwa2NzMTFfZmV0Y2hfY2VydHMocCwg aSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOwotKwkJfQotKwkJaWYgKG5rZXlzID09IDAg JiYgdXJpLT5vYmplY3QgIT0gTlVMTCkgewotKwkJCWRlYnVnM19mKCJObyBrZXlzIGZvdW5kLiBS ZXRyeWluZyB3aXRob3V0IGxhYmVsICglLjMycykgIiwKLSsJCQkgICAgdXJpLT5vYmplY3QpOwot KwkJCS8qIFRyeSBvbmNlIG1vcmUgd2l0aG91dCB0aGUgbGFiZWwgZmlsdGVyICovCi0rCQkJY2hh ciAqbGFiZWwgPSB1cmktPm9iamVjdDsKLSsJCQl1cmktPm9iamVjdCA9IE5VTEw7IC8qIFhYWCBj bG9uZSB1cmk/ICovCi0rCQkJcGtjczExX2ZldGNoX2tleXMocCwgaSwga2V5cCwgbGFiZWxzcCwg Jm5rZXlzLCB1cmkpOwotKwkJCXBrY3MxMV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNw LCAmbmtleXMsIHVyaSk7Ci0rCQkJdXJpLT5vYmplY3QgPSBsYWJlbDsKLSsJCX0KLSsJfQotKwlw aW4gPSBOVUxMOyAvKiBXaWxsIGJlIGNsZWFuZWQgdXAgd2l0aCBVUkkgKi8KLSsKLSsJLyogbm93 IG93bmVkIGJ5IGNhbGxlciAqLwotKwkqcHJvdmlkZXJwID0gcDsKLSsKLSsJZnJlZShwcm92aWRl cl91cmkpOwotKwlyZXR1cm4gKG5rZXlzKTsKLSsgZmFpbDoKLSsJaWYgKHApIHsKLSsJCVRBSUxR X1JFTU9WRSgmcGtjczExX3Byb3ZpZGVycywgcCwgbmV4dCk7Ci0rCSAgICAgCXBrY3MxMV9wcm92 aWRlcl91bnJlZihwKTsKLSsJfQotKwlpZiAocmV0ID4gMCkKLSsJCXJldCA9IC0xOwotKwlyZXR1 cm4gKHJldCk7Ci0rfQotKwotKyNpZmRlZiBXSVRIX1BLQ1MxMV9LRVlHRU4KLStzdGF0aWMgaW50 Ci0rcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4s IHN0cnVjdCBzc2hrZXkgKioqa2V5cCwKLSsgICAgY2hhciAqKipsYWJlbHNwLCBzdHJ1Y3QgcGtj czExX3Byb3ZpZGVyICoqcHJvdmlkZXJwLCBDS19VTE9ORyB1c2VyKQotK3sKLSsJc3RydWN0IHBr Y3MxMV91cmkgKnVyaSA9IE5VTEw7Ci0rCWludCByOwotKwotKwlkZWJ1Z19mKCJjYWxsZWQsIHBy b3ZpZGVyX2lkID0gJXMiLCBwcm92aWRlcl9pZCk7Ci0rCi0rCXVyaSA9IHBrY3MxMV91cmlfaW5p dCgpOwotKwlpZiAodXJpID09IE5VTEwpCi0rCQlmYXRhbCgiZmFpbGVkIHRvIGluaXQgUEtDUyMx MSBVUkkiKTsKLSsKLSsJaWYgKHN0cmxlbihwcm92aWRlcl9pZCkgPj0gc3RybGVuKFBLQ1MxMV9V UklfU0NIRU1FKSAmJgotKwkgICAgc3RybmNtcChwcm92aWRlcl9pZCwgUEtDUzExX1VSSV9TQ0hF TUUsIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsKLSsJCWlmIChwa2NzMTFfdXJp X3BhcnNlKHByb3ZpZGVyX2lkLCB1cmkpICE9IDApCi0rCQkJZmF0YWwoIkZhaWxlZCB0byBwYXJz ZSBQS0NTIzExIFVSSSIpOwotKwl9IGVsc2UgewotKwkJdXJpLT5tb2R1bGVfcGF0aCA9IHN0cmR1 cChwcm92aWRlcl9pZCk7Ci0rCX0KLSsKLSsJciA9IHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcl9i eV91cmkodXJpLCBwaW4sIGtleXAsIGxhYmVsc3AsIHByb3ZpZGVycCwgdXNlcik7Ci0rCXBrY3Mx MV91cmlfY2xlYW51cCh1cmkpOwotKwotKwlyZXR1cm4gcjsKLSt9Ci0rI2VuZGlmCi0rCi0gaW50 Ci0tcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLCBzdHJ1 Y3Qgc3Noa2V5ICoqKmtleXAsCi0tICAgIGNoYXIgKioqbGFiZWxzcCkKLStwa2NzMTFfYWRkX3By b3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqdXJpLCBjaGFyICpwaW4sCi0rICAgIHN0 cnVjdCBzc2hrZXkgKioqa2V5cCwgY2hhciAqKipsYWJlbHNwKQotIHsKLSAJc3RydWN0IHBrY3Mx MV9wcm92aWRlciAqcCA9IE5VTEw7Ci0gCWludCBua2V5czsKLSsJY2hhciAqcHJvdmlkZXJfdXJp ID0gcGtjczExX3VyaV9nZXQodXJpKTsKLSAKLS0JbmtleXMgPSBwa2NzMTFfcmVnaXN0ZXJfcHJv dmlkZXIocHJvdmlkZXJfaWQsIHBpbiwga2V5cCwgbGFiZWxzcCwKLS0JICAgICZwLCBDS1VfVVNF Uik7Ci0rCWRlYnVnX2YoImNhbGxlZCwgcHJvdmlkZXJfdXJpID0gJXMiLCBwcm92aWRlcl91cmkp OwotKwotKwlua2V5cyA9IHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcl9ieV91cmkodXJpLCBwaW4s IGtleXAsIGxhYmVsc3AsICZwLCBDS1VfVVNFUik7Ci0gCi0gCS8qIG5vIGtleXMgZm91bmQgb3Ig c29tZSBvdGhlciBlcnJvciwgZGUtcmVnaXN0ZXIgcHJvdmlkZXIgKi8KLSAJaWYgKG5rZXlzIDw9 IDAgJiYgcCAhPSBOVUxMKSB7Ci1AQCAtMjA1OCwxMSArMjM4MCwzOCBAQCBwa2NzMTFfYWRkX3By b3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5 cCwKLSAJCXBrY3MxMV9wcm92aWRlcl91bnJlZihwKTsKLSAJfQotIAlpZiAobmtleXMgPT0gMCkK LS0JCWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVybmVkIG5vIGtleXMiLCBwcm92aWRlcl9pZCk7 Ci0rCQlkZWJ1Z19mKCJwcm92aWRlciAlcyByZXR1cm5lZCBubyBrZXlzIiwgcHJvdmlkZXJfdXJp KTsKLSAKLSsJZnJlZShwcm92aWRlcl91cmkpOwotIAlyZXR1cm4gKG5rZXlzKTsKLSB9Ci0gCi0r aW50Ci0rcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLAot KyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsIGNoYXIgKioqbGFiZWxzcCkKLSt7Ci0rCXN0cnVj dCBwa2NzMTFfdXJpICp1cmk7Ci0rCWludCBua2V5czsKLSsKLSsJdXJpID0gcGtjczExX3VyaV9p bml0KCk7Ci0rCWlmICh1cmkgPT0gTlVMTCkKLSsJCWZhdGFsKCJGYWlsZWQgdG8gaW5pdCBQS0NT IzExIFVSSSIpOwotKwotKwlpZiAoc3RybGVuKHByb3ZpZGVyX2lkKSA+PSBzdHJsZW4oUEtDUzEx X1VSSV9TQ0hFTUUpICYmCi0rCSAgICBzdHJuY21wKHByb3ZpZGVyX2lkLCBQS0NTMTFfVVJJX1ND SEVNRSwgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkgewotKwkJaWYgKHBrY3MxMV91 cmlfcGFyc2UocHJvdmlkZXJfaWQsIHVyaSkgIT0gMCkKLSsJCQlmYXRhbCgiRmFpbGVkIHRvIHBh cnNlIFBLQ1MjMTEgVVJJIik7Ci0rCX0gZWxzZSB7Ci0rCQl1cmktPm1vZHVsZV9wYXRoID0gc3Ry ZHVwKHByb3ZpZGVyX2lkKTsKLSsJfQotKwotKwlua2V5cyA9IHBrY3MxMV9hZGRfcHJvdmlkZXJf YnlfdXJpKHVyaSwgcGluLCBrZXlwLCBsYWJlbHNwKTsKLSsJcGtjczExX3VyaV9jbGVhbnVwKHVy aSk7Ci0rCi0rIAlyZXR1cm4gKG5rZXlzKTsKLSt9Ci0rCi0rCi0gaW50Ci0gcGtjczExX3NpZ24o c3RydWN0IHNzaGtleSAqa2V5LAotICAgICB1X2NoYXIgKipzaWdwLCBzaXplX3QgKmxlbnAsCi1k aWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS5oIGIvc3NoLXBrY3MxMS5oCi1pbmRleCAxZDAyNzdhNmQu LjEzNDU5NjQ0YyAxMDA2NDQKLS0tLSBhL3NzaC1wa2NzMTEuaAotKysrIGIvc3NoLXBrY3MxMS5o Ci1AQCAtMjQsMTIgKzI0LDE2IEBACi0gI2RlZmluZQlTU0hfUEtDUzExX0VSUl9QSU5fUkVRVUlS RUQJCTQKLSAjZGVmaW5lCVNTSF9QS0NTMTFfRVJSX1BJTl9MT0NLRUQJCTUKLSAKLSsjaW5jbHVk ZSAic3NoLXBrY3MxMS11cmkuaCIKLSsKLSBzdHJ1Y3Qgc3Noa2V5OwotIAotIGludAlwa2NzMTFf aW5pdChpbnQpOwotIHZvaWQJcGtjczExX3Rlcm1pbmF0ZSh2b2lkKTsKLSBpbnQJcGtjczExX2Fk ZF9wcm92aWRlcihjaGFyICosIGNoYXIgKiwgc3RydWN0IHNzaGtleSAqKiosIGNoYXIgKioqKTsK LStpbnQJcGtjczExX2FkZF9wcm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKiwgY2hh ciAqLCBzdHJ1Y3Qgc3Noa2V5ICoqKiwgY2hhciAqKiopOwotIGludAlwa2NzMTFfZGVsX3Byb3Zp ZGVyKGNoYXIgKik7Ci0raW50CXBrY3MxMV91cmlfd3JpdGUoY29uc3Qgc3RydWN0IHNzaGtleSAq LCBGSUxFICopOwotIGludAlwa2NzMTFfc2lnbihzdHJ1Y3Qgc3Noa2V5ICosIHVfY2hhciAqKiwg c2l6ZV90ICosCi0gCSAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwKLSAJICAgIGNvbnN0IGNoYXIgKiwgdV9pbnQpOwotZGlmZiAtLWdpdCBhL3Nz aC5jIGIvc3NoLmMKLWluZGV4IDRhMTdjMGE3ZC4uYjQxYWU4MmQyIDEwMDY0NAotLS0tIGEvc3No LmMKLSsrKyBiL3NzaC5jCi1AQCAtODYyLDYgKzg2MiwxNCBAQCBtYWluKGludCBhYywgY2hhciAq KmF2KQotIAkJCW9wdGlvbnMuZ3NzX2RlbGVnX2NyZWRzID0gMTsKLSAJCQlicmVhazsKLSAJCWNh c2UgJ2knOgotKyNpZmRlZiBFTkFCTEVfUEtDUzExCi0rCQkJaWYgKHN0cmxlbihvcHRhcmcpID49 IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKLSsJCQkgICAgc3RybmNtcChvcHRhcmcsIFBL Q1MxMV9VUklfU0NIRU1FLAotKwkJCSAgICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAw KSB7Ci0rCQkJCWFkZF9pZGVudGl0eV9maWxlKCZvcHRpb25zLCBOVUxMLCBvcHRhcmcsIDEpOwot KwkJCQlicmVhazsKLSsJCQl9Ci0rI2VuZGlmCi0gCQkJcCA9IHRpbGRlX2V4cGFuZF9maWxlbmFt ZShvcHRhcmcsIGdldHVpZCgpKTsKLSAJCQlpZiAoc3RhdChwLCAmc3QpID09IC0xKQotIAkJCQlm cHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IElkZW50aXR5IGZpbGUgJXMgIgotQEAgLTE4MzgsNiAr MTg0Niw3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCi0gCi0gI2lmZGVmIEVOQUJMRV9QS0NT MTEKLSAJKHZvaWQpcGtjczExX2RlbF9wcm92aWRlcihvcHRpb25zLnBrY3MxMV9wcm92aWRlcik7 Ci0rCXBrY3MxMV90ZXJtaW5hdGUoKTsKLSAjZW5kaWYKLSAKLSAgc2tpcF9jb25uZWN0OgotQEAg LTIzNDksNiArMjM1OCw0NSBAQCBzc2hfc2Vzc2lvbjIoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBz dHJ1Y3Qgc3NoX2Nvbm5faW5mbyAqY2luZm8pCi0gCSAgICBvcHRpb25zLmVzY2FwZV9jaGFyIDog U1NIX0VTQ0FQRUNIQVJfTk9ORSwgaWQpOwotIH0KLSAKLSsjaWZkZWYgRU5BQkxFX1BLQ1MxMQot K3N0YXRpYyB2b2lkCi0rbG9hZF9wa2NzMTFfaWRlbnRpdHkoY2hhciAqcGtjczExX3VyaSwgY2hh ciAqaWRlbnRpdHlfZmlsZXNbXSwKLSsgICAgc3RydWN0IHNzaGtleSAqaWRlbnRpdHlfa2V5c1td LCBpbnQgKm5faWRzKQotK3sKLSsJaW50IG5rZXlzLCBpOwotKwlzdHJ1Y3Qgc3Noa2V5ICoqa2V5 czsKLSsJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKLSsKLSsJZGVidWcoImlkZW50aXR5IGZpbGUg JyVzJyBmcm9tIHBrY3MjMTEiLCBwa2NzMTFfdXJpKTsKLSsJdXJpID0gcGtjczExX3VyaV9pbml0 KCk7Ci0rCWlmICh1cmkgPT0gTlVMTCkKLSsJCWZhdGFsKCJGYWlsZWQgdG8gaW5pdCBQS0NTIzEx IFVSSSIpOwotKwotKwlpZiAocGtjczExX3VyaV9wYXJzZShwa2NzMTFfdXJpLCB1cmkpICE9IDAp Ci0rCWZhdGFsKCJGYWlsZWQgdG8gcGFyc2UgUEtDUyMxMSBVUkkgJXMiLCBwa2NzMTFfdXJpKTsK LSsKLSsJLyogd2UgbmVlZCB0byBtZXJnZSBVUkkgYW5kIHByb3ZpZGVyIHRvZ2V0aGVyICovCi0r CWlmIChvcHRpb25zLnBrY3MxMV9wcm92aWRlciAhPSBOVUxMICYmIHVyaS0+bW9kdWxlX3BhdGgg PT0gTlVMTCkKLSsJCXVyaS0+bW9kdWxlX3BhdGggPSBzdHJkdXAob3B0aW9ucy5wa2NzMTFfcHJv dmlkZXIpOwotKwotKwlpZiAob3B0aW9ucy5udW1faWRlbnRpdHlfZmlsZXMgPCBTU0hfTUFYX0lE RU5USVRZX0ZJTEVTICYmCi0rCSAgICAobmtleXMgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyX2J5X3Vy aSh1cmksIE5VTEwsICZrZXlzLCBOVUxMKSkgPiAwKSB7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgbmtl eXM7IGkrKykgewotKwkJCWlmICgqbl9pZHMgPj0gU1NIX01BWF9JREVOVElUWV9GSUxFUykgewot KwkJCQlzc2hrZXlfZnJlZShrZXlzW2ldKTsKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJCWlk ZW50aXR5X2tleXNbKm5faWRzXSA9IGtleXNbaV07Ci0rCQkJaWRlbnRpdHlfZmlsZXNbKm5faWRz XSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7Ci0rCQkJKCpuX2lkcykrKzsKLSsJCX0KLSsJCWZyZWUo a2V5cyk7Ci0rCX0KLSsKLSsJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7Ci0rfQotKyNlbmRpZiAv KiBFTkFCTEVfUEtDUzExICovCi0rCi0gLyogTG9hZHMgYWxsIElkZW50aXR5RmlsZSBhbmQgQ2Vy dGlmaWNhdGVGaWxlIGtleXMgKi8KLSBzdGF0aWMgdm9pZAotIGxvYWRfcHVibGljX2lkZW50aXR5 X2ZpbGVzKGNvbnN0IHN0cnVjdCBzc2hfY29ubl9pbmZvICpjaW5mbykKLUBAIC0yMzYzLDExICsy NDExLDYgQEAgbG9hZF9wdWJsaWNfaWRlbnRpdHlfZmlsZXMoY29uc3Qgc3RydWN0IHNzaF9jb25u X2luZm8gKmNpbmZvKQotIAljaGFyICpjZXJ0aWZpY2F0ZV9maWxlc1tTU0hfTUFYX0NFUlRJRklD QVRFX0ZJTEVTXTsKLSAJc3RydWN0IHNzaGtleSAqY2VydGlmaWNhdGVzW1NTSF9NQVhfQ0VSVElG SUNBVEVfRklMRVNdOwotIAlpbnQgY2VydGlmaWNhdGVfZmlsZV91c2VycHJvdmlkZWRbU1NIX01B WF9DRVJUSUZJQ0FURV9GSUxFU107Ci0tI2lmZGVmIEVOQUJMRV9QS0NTMTEKLS0Jc3RydWN0IHNz aGtleSAqKmtleXMgPSBOVUxMOwotLQljaGFyICoqY29tbWVudHMgPSBOVUxMOwotLQlpbnQgbmtl eXM7Ci0tI2VuZGlmIC8qIFBLQ1MxMSAqLwotIAotIAluX2lkcyA9IG5fY2VydHMgPSAwOwotIAlt ZW1zZXQoaWRlbnRpdHlfZmlsZXMsIDAsIHNpemVvZihpZGVudGl0eV9maWxlcykpOwotQEAgLTIz ODAsMzMgKzI0MjMsNDYgQEAgbG9hZF9wdWJsaWNfaWRlbnRpdHlfZmlsZXMoY29uc3Qgc3RydWN0 IHNzaF9jb25uX2luZm8gKmNpbmZvKQotIAkgICAgc2l6ZW9mKGNlcnRpZmljYXRlX2ZpbGVfdXNl cnByb3ZpZGVkKSk7Ci0gCi0gI2lmZGVmIEVOQUJMRV9QS0NTMTEKLS0JaWYgKG9wdGlvbnMucGtj czExX3Byb3ZpZGVyICE9IE5VTEwgJiYKLS0JICAgIG9wdGlvbnMubnVtX2lkZW50aXR5X2ZpbGVz IDwgU1NIX01BWF9JREVOVElUWV9GSUxFUyAmJgotLQkgICAgKHBrY3MxMV9pbml0KCFvcHRpb25z LmJhdGNoX21vZGUpID09IDApICYmCi0tCSAgICAobmtleXMgPSBwa2NzMTFfYWRkX3Byb3ZpZGVy KG9wdGlvbnMucGtjczExX3Byb3ZpZGVyLCBOVUxMLAotLQkgICAgJmtleXMsICZjb21tZW50cykp ID4gMCkgewotLQkJZm9yIChpID0gMDsgaSA8IG5rZXlzOyBpKyspIHsKLS0JCQlpZiAobl9pZHMg Pj0gU1NIX01BWF9JREVOVElUWV9GSUxFUykgewotLQkJCQlzc2hrZXlfZnJlZShrZXlzW2ldKTsK LS0JCQkJZnJlZShjb21tZW50c1tpXSk7Ci0tCQkJCWNvbnRpbnVlOwotLQkJCX0KLS0JCQlpZGVu dGl0eV9rZXlzW25faWRzXSA9IGtleXNbaV07Ci0tCQkJaWRlbnRpdHlfZmlsZXNbbl9pZHNdID0g Y29tbWVudHNbaV07IC8qIHRyYW5zZmVycmVkICovCi0tCQkJbl9pZHMrKzsKLS0JCX0KLS0JCWZy ZWUoa2V5cyk7Ci0tCQlmcmVlKGNvbW1lbnRzKTsKLSsJLyogaGFuZGxlIGZhbGxiYWNrIGZyb20g UEtDUzExUHJvdmlkZXIgb3B0aW9uICovCi0rCXBrY3MxMV9pbml0KCFvcHRpb25zLmJhdGNoX21v ZGUpOwotKwotKwlpZiAob3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIgIT0gTlVMTCkgewotKwkJc3Ry dWN0IHBrY3MxMV91cmkgKnVyaTsKLSsKLSsJCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOwotKwkJ aWYgKHVyaSA9PSBOVUxMKQotKwkJCWZhdGFsKCJGYWlsZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIp OwotKwotKwkJLyogQ29uc3RydWN0IHNpbXBsZSBQS0NTIzExIFVSSSB0byBzaW1wbGlmeSBhY2Nl c3MgKi8KLSsJCXVyaS0+bW9kdWxlX3BhdGggPSBzdHJkdXAob3B0aW9ucy5wa2NzMTFfcHJvdmlk ZXIpOwotKwotKwkJLyogQWRkIGl0IGFzIGFueSBvdGhlciBJZGVudGl0eUZpbGUgKi8KLSsJCWNw ID0gcGtjczExX3VyaV9nZXQodXJpKTsKLSsJCWFkZF9pZGVudGl0eV9maWxlKCZvcHRpb25zLCBO VUxMLCBjcCwgMSk7Ci0rCQlmcmVlKGNwKTsKLSsKLSsJCXBrY3MxMV91cmlfY2xlYW51cCh1cmkp OwotIAl9Ci0gI2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEgKi8KLSAJZm9yIChpID0gMDsgaSA8IG9w dGlvbnMubnVtX2lkZW50aXR5X2ZpbGVzOyBpKyspIHsKLSsJCWNoYXIgKm5hbWUgPSBvcHRpb25z LmlkZW50aXR5X2ZpbGVzW2ldOwotIAkJaWYgKG5faWRzID49IFNTSF9NQVhfSURFTlRJVFlfRklM RVMgfHwKLS0JCSAgICBzdHJjYXNlY21wKG9wdGlvbnMuaWRlbnRpdHlfZmlsZXNbaV0sICJub25l IikgPT0gMCkgewotKwkJICAgIHN0cmNhc2VjbXAobmFtZSwgIm5vbmUiKSA9PSAwKSB7Ci0gCQkJ ZnJlZShvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ldKTsKLSAJCQlvcHRpb25zLmlkZW50aXR5X2Zp bGVzW2ldID0gTlVMTDsKLSAJCQljb250aW51ZTsKLSAJCX0KLS0JCWNwID0gdGlsZGVfZXhwYW5k X2ZpbGVuYW1lKG9wdGlvbnMuaWRlbnRpdHlfZmlsZXNbaV0sIGdldHVpZCgpKTsKLSsjaWZkZWYg RU5BQkxFX1BLQ1MxMQotKwkJaWYgKHN0cmxlbihuYW1lKSA+PSBzdHJsZW4oUEtDUzExX1VSSV9T Q0hFTUUpICYmCi0rCQkgICAgc3RybmNtcChuYW1lLCBQS0NTMTFfVVJJX1NDSEVNRSwKLSsJCSAg ICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7Ci0rCQkJbG9hZF9wa2NzMTFfaWRl bnRpdHkobmFtZSwgaWRlbnRpdHlfZmlsZXMsCi0rCQkJICAgIGlkZW50aXR5X2tleXMsICZuX2lk cyk7Ci0rCQkJZnJlZShvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ldKTsKLSsJCQljb250aW51ZTsK LSsJCX0KLSsjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAqLwotKwkJY3AgPSB0aWxkZV9leHBhbmRf ZmlsZW5hbWUobmFtZSwgZ2V0dWlkKCkpOwotIAkJZmlsZW5hbWUgPSBkZWZhdWx0X2NsaWVudF9w ZXJjZW50X2RvbGxhcl9leHBhbmQoY3AsIGNpbmZvKTsKLSAJCWZyZWUoY3ApOwotIAkJY2hlY2tf bG9hZChzc2hrZXlfbG9hZF9wdWJsaWMoZmlsZW5hbWUsICZwdWJsaWMsIE5VTEwpLAotZGlmZiAt LWdpdCBhL3NzaF9jb25maWcuNSBiL3NzaF9jb25maWcuNQotaW5kZXggYWI5OGMxNzJmLi42OTli M2Y2N2QgMTAwNjQ0Ci0tLS0gYS9zc2hfY29uZmlnLjUKLSsrKyBiL3NzaF9jb25maWcuNQotQEAg LTEyNjIsNiArMTI2MiwyMSBAQCBtYXkgYWxzbyBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgK LSAuQ20gQ2VydGlmaWNhdGVGaWxlCi0gaW4gb3JkZXIgdG8gcHJvdmlkZSBhbnkgY2VydGlmaWNh dGUgYWxzbyBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGgKLSB0aGUgaWRlbnRpdHkuCi0r LlBwCi0rVGhlIGF1dGhlbnRpY2F0aW9uIGlkZW50aXR5IGNhbiBiZSBhbHNvIHNwZWNpZmllZCBp biBhIGZvcm0gb2YgUEtDUyMxMSBVUkkKLStzdGFydGluZyB3aXRoIGEgc3RyaW5nCi0rLkNtIHBr Y3MxMTogLgotK1RoZXJlIGlzIHN1cHBvcnRlZCBhIHN1YnNldCBvZiB0aGUgUEtDUyMxMSBVUkkg YXMgZGVmaW5lZAotK2luIFJGQyA3NTEyIChpbXBsZW1lbnRlZCBwYXRoIGFyZ3VtZW50cwotKy5D bSBpZCAsCi0rLkNtIG1hbnVmYWN0dXJlciAsCi0rLkNtIG9iamVjdCAsCi0rLkNtIHRva2VuCi0r YW5kIHF1ZXJ5IGFyZ3VtZW50cwotKy5DbSBtb2R1bGUtcGF0aAotK2FuZAotKy5DbSBwaW4tdmFs dWUKLSspLiBUaGUgVVJJIGNhbiBub3QgYmUgaW4gcXVvdGVzLgotIC5JdCBDbSBJZ25vcmVVbmtu b3duCi0gU3BlY2lmaWVzIGEgcGF0dGVybi1saXN0IG9mIHVua25vd24gb3B0aW9ucyB0byBiZSBp Z25vcmVkIGlmIHRoZXkgYXJlCi0gZW5jb3VudGVyZWQgaW4gY29uZmlndXJhdGlvbiBwYXJzaW5n LgotZGlmZiAtLWdpdCBhL3NzaGtleS5jIGIvc3Noa2V5LmMKLWluZGV4IDUyMjVlYWJmMi4uNTgz ZjY0MjFkIDEwMDY0NAotLS0tIGEvc3Noa2V5LmMKLSsrKyBiL3NzaGtleS5jCi1AQCAtODU2LDgg Kzg1NiwxMCBAQCBzc2hrZXlfZnJlZV9jb250ZW50cyhzdHJ1Y3Qgc3Noa2V5ICprKQotIAotIAlp ZiAoayA9PSBOVUxMKQotIAkJcmV0dXJuOwotKyNpZmRlZiBFTkFCTEVfUEtDUzExCi0gCWlmICgo ay0+ZmxhZ3MgJiBTU0hLRVlfRkxBR19FWFQpICE9IDApCi0gCQlwa2NzMTFfa2V5X2ZyZWUoayk7 Ci0rI2VuZGlmCi0gCWlmICgoaW1wbCA9IHNzaGtleV9pbXBsX2Zyb21fdHlwZShrLT50eXBlKSkg IT0gTlVMTCAmJgotIAkgICAgaW1wbC0+ZnVuY3MtPmNsZWFudXAgIT0gTlVMTCkKLSAJCWltcGwt PmZ1bmNzLT5jbGVhbnVwKGspOwotQEAgLTIzMDQsOSArMjMwNiwxMSBAQCBzc2hrZXlfc2lnbihz dHJ1Y3Qgc3Noa2V5ICprZXksCi0gCWlmIChzc2hrZXlfaXNfc2soa2V5KSkgewotIAkJciA9IHNz aHNrX3NpZ24oc2tfcHJvdmlkZXIsIGtleSwgc2lncCwgbGVucCwgZGF0YSwKLSAJCSAgICBkYXRh bGVuLCBjb21wYXQsIHNrX3Bpbik7Ci0rI2lmZGVmIEVOQUJMRV9QS0NTMTEKLSAJfSBlbHNlIGlm ICgoa2V5LT5mbGFncyAmIFNTSEtFWV9GTEFHX0VYVCkgIT0gMCkgewotIAkJciA9IHBrY3MxMV9z aWduKGtleSwgc2lncCwgbGVucCwgZGF0YSwgZGF0YWxlbiwKLSAJCSAgICBhbGcsIHNrX3Byb3Zp ZGVyLCBza19waW4sIGNvbXBhdCk7Ci0rI2VuZGlmCi0gCX0gZWxzZSB7Ci0gCQlpZiAoaW1wbC0+ ZnVuY3MtPnNpZ24gPT0gTlVMTCkKLSAJCQlyID0gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRF RDsKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDU0LWdzc2FwaS10ZXN0cy5wYXRjaCBi LzAwNTQtZ3NzYXBpLXRlc3RzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw ZjJiNTU0Li4wMDAwMDAwCi0tLSBhLzAwNTQtZ3NzYXBpLXRlc3RzLnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMjQwICswLDAgQEAKLWRpZmYgLS1naXQgYS9yZWdyZXNzL01ha2VmaWxlIGIvcmVn cmVzcy9NYWtlZmlsZQotaW5kZXggY2JlN2E5NjEwLi5lYjlmN2FkMDAgMTAwNjQ0Ci0tLS0gYS9y ZWdyZXNzL01ha2VmaWxlCi0rKysgYi9yZWdyZXNzL01ha2VmaWxlCi1AQCAtMTI3LDYgKzEyNyw3 IEBAIElOVEVST1BfVEVTVFMrPQlkcm9wYmVhci1jaXBoZXJzIGRyb3BiZWFyLWtleCBkcm9wYmVh ci1zZXJ2ZXIKLSAjSU5URVJPUF9URVNUUys9c3NoLWNvbSBzc2gtY29tLWNsaWVudCBzc2gtY29t LWtleWdlbiBzc2gtY29tLXNmdHAKLSAKLSBFWFRSQV9URVNUUz0JYWdlbnQtcGtjczExCi0rRVhU UkFfVEVTVFMrPQlnc3MtYXV0aCBnc3Mta2V4Ci0gI0VYVFJBX1RFU1RTKz0gCWNpcGhlci1zcGVl ZAotIAotIFVTRVJOQU1FPQkJJHtMT0dOQU1FfQotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvZ3NzLWtl eC5zaCBiL3JlZ3Jlc3MvZ3NzLWtleC5zaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAw MDAwMDAwMC4uMTdhM2JmNmYxCi0tLS0gL2Rldi9udWxsCi0rKysgYi9yZWdyZXNzL2dzcy1rZXgu c2gKLUBAIC0wLDAgKzEsMjIyIEBACi0rdGlkPSJHU1MtQVBJIEtleSBFeGNoYW5nZSIKLSsKLSsj IFNraXAgdGhlIHRlc3QgaWYgR1NTQVBJIHN1cHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQKLStpZiAh IGdyZXAgLUUgJ14jZGVmaW5lIEdTU0FQSScgIiRCVUlMRERJUi9jb25maWcuaCIgPi9kZXYvbnVs bCAyPiYxOyB0aGVuCi0rICAgIHNraXAgIkdTU0FQSSBub3QgZW5hYmxlZCIKLStmaQotKwotKyMg V2UgdGVzdCB3aXRoIE1JVCBLZXJiZXJvcyBLREMsIHNraXAgaWYgbm90IGluc3RhbGxlZAotK2lm ICEgd2hpY2gga3JiNWtkYyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgc2tpcCAiTUlUIEtl cmJlcm9zIEtEQyBub3QgaW5zdGFsbGVkIgotK2ZpCi0rCi0rIyBUaGUgdGVzdCBuZWVkcyBuc3Nf d3JhcHBlciB0byBlbXVsYXRlIGdldGhvc3RuYW1lKCkgYW5kIC9ldGMvaG9zdHMsCi0rIyB3ZSBz a2lwIGlmIHRoZSBzaGFyZWQgbGlicmFyeSBpcyBub3QgaW5zdGFsbGVkCi0rbnNzX3dyYXBwZXI9 ImxpYm5zc193cmFwcGVyLnNvIgotK2lmICEgbGRjb25maWcgLXAgfCBncmVwICIkbnNzX3dyYXBw ZXIiID4vZGV2L251bGwgMj4mMTsgdGhlbgotKyAgICBza2lwICIkbnNzX3dyYXBwZXIgbm90IGlu c3RhbGxlZCIKLStmaQotKwotKyMgU2V0IHVwIHRoZSB1c2VybmFtZSBvZiB0aGUgU1NIIGNsaWVu dAotK2NsaWVudD0iJExPR05BTUUiCi0raWYgWyAieCRjbGllbnQiID0gIngiIF07IHRoZW4KLSsJ Y2xpZW50PSIkKHdob2FtaSkiCi0rZmkKLSsKLSsjIFNldCB1cCBTU0hEIGFuZCBLREMgaG9zdG5h bWVzIGFuZCByZXNvbHZlIGJvdGggdG8gbG9jYWxob3N0Ci0rc3NoZF9ob3N0bmFtZT0ic3NoZC5l eGFtcGxlLm9yZyIKLStrZGNfaG9zdG5hbWU9ImtkYy5leGFtcGxlLm9yZyIKLStrZGNfcG9ydD0y MDg4Ci0raG9zdHM9IiRPQkovaG9zdHMiCi0rZWNobyAiMTI3LjAuMC4xICRzc2hkX2hvc3RuYW1l ICRrZGNfaG9zdG5hbWUiID4gIiRob3N0cyIKLSsKLSsjIFNldCB1cCBhIGRpcmVjdG9yeSB0byBz dG9yZSBLZXJiZXJvcyBkYXRhCi0rZ3NzZGlyPSIkT0JKL2dzcyIKLStta2RpciAtcCAiJGdzc2Rp ciIKLStleHBvcnQgS1JCNUNDTkFNRT0iJGdzc2Rpci9jYyIKLStleHBvcnQgS1JCNV9DT05GSUc9 IiRnc3NkaXIva3JiNS5jb25mIgotK2V4cG9ydCBLUkI1X0tEQ19QUk9GSUxFPSIkZ3NzZGlyL2tk Yy5jb25mIgotK2V4cG9ydCBLUkI1X0tUTkFNRT0iJGdzc2Rpci9zc2gua2V5dGFiIgotK2V4cG9y dCBLUkI1UkNBQ0hFVFlQRT0ibm9uZSIKLStrZGNfcGlkZmlsZT0iJGdzc2Rpci9waWQiCi0rCi0r IyBDb25maWd1cmUgS2VyYmVyb3MKLStjYXQ8PEVPRiA+ICIkS1JCNV9LRENfUFJPRklMRSIKLStb cmVhbG1zXQotKyAgICBFWEFNUExFLk9SRyA9IHsKLSsgICAgICAgIGRhdGFiYXNlX25hbWUgPSAk Z3NzZGlyL3ByaW5jaXBhbAotKyAgICAgICAga2V5X3N0YXNoX2ZpbGUgPSAkZ3NzZGlyL3N0YXNo Ci0rICAgICAgICBrZGNfbGlzdGVuID0gJGtkY19ob3N0bmFtZToka2RjX3BvcnQKLSsgICAgICAg IGtkY190Y3BfbGlzdGVuID0gJGtkY19ob3N0bmFtZToka2RjX3BvcnQKLSsgICAgfQotK1tsb2dn aW5nXQotKyAgICBrZGMgPSBGSUxFOiRnc3NkaXIva2RjLmxvZwotKyAgICBkZWJ1ZyA9IHRydWUK LStFT0YKLSsKLStjYXQ8PEVPRiA+ICIkS1JCNV9DT05GSUciCi0rW2xpYmRlZmF1bHRzXQotKyAg ICBkZWZhdWx0X3JlYWxtID0gRVhBTVBMRS5PUkcKLStbcmVhbG1zXQotKyAgICBFWEFNUExFLk9S RyA9IHsKLSsgICAgICAgIGtkYyA9ICRrZGNfaG9zdG5hbWU6JGtkY19wb3J0Ci0rICAgIH0KLStF T0YKLSsKLSsjIEJhY2sgdXAgdGhlIGRlZmF1bHQgc3NoZF9jb25maWcKLStjcCAiJE9CSi9zc2hk X2NvbmZpZyIgIiRPQkovc3NoZF9jb25maWcub3JpZyIKLSsKLStzZXR1cF9zc2hkKCkgewotKyAg ICBrZXhfYWxnPSIkMSIKLSsKLSsgICAgY3AgIiRPQkovc3NoZF9jb25maWcub3JpZyIgIiRPQkov c3NoZF9jb25maWciCi0rCi0rICAgIGNhdDw8RU9GID4+ICIkT0JKL3NzaGRfY29uZmlnIgotK1B1 YmtleUF1dGhlbnRpY2F0aW9uIG5vCi0rUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBubwotK0dTU0FQ SUF1dGhlbnRpY2F0aW9uIHllcwotK0dTU0FQSUtleUV4Y2hhbmdlIHllcwotK0dTU0FQSUtleEFs Z29yaXRobXMgJGtleF9hbGcKLStHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrIG5vCi0rRU9GCi0r Ci0rICAgIHRlc3Rfc3NoX3NzaGRfZW52X2JhY2t1cD0iJFRFU1RfU1NIX1NTSERfRU5WIgotKyAg ICBURVNUX1NTSF9TU0hEX0VOVj0iJFRFU1RfU1NIX1NTSERfRU5WICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgICAgICAgICAgICAgICAgTERfUFJFTE9BRD0kbnNzX3dyYXBwZXIgICAgICAg ICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgTlNTX1dSQVBQRVJfSE9TVFM9JGhvc3Rz ICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgTlNTX1dSQVBQRVJfSE9TVE5B TUU9JHNzaGRfaG9zdG5hbWUgXAotKyAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9DT05GSUc9 JEtSQjVfQ09ORklHICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9L RENfUFJPRklMRT0kS1JCNV9LRENfUFJPRklMRSAgXAotKyAgICAgICAgICAgICAgICAgICAgICAg S1JCNUNDTkFNRT0kS1JCNUNDTkFNRSAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAg ICAgICAgS1JCNV9LVE5BTUU9JEtSQjVfS1ROQU1FICAgICAgICAgICAgXAotKyAgICAgICAgICAg ICAgICAgICAgICAgS1JCNVJDQUNIRVRZUEU9JEtSQjVSQ0FDSEVUWVBFIgotKyAgICBzdGFydF9z c2hkCi0rfQotKwotK3RlYXJkb3duX3NzaGQoKSB7Ci0rICAgIFRFU1RfU1NIX1NTSERfRU5WPSIk dGVzdF9zc2hfc3NoZF9lbnZfYmFja3VwIgotKyAgICBzdG9wX3NzaGQKLSt9Ci0rCi0rc2V0dXBf a2RjKCkgewotKyAgICBrZGI1X3V0aWwgY3JlYXRlIC1QICJmb28iIC1zCi0rICAgIGtyYjVrZGMg LXcgMSAtUCAiJGtkY19waWRmaWxlIgotKyAgICBpPTA7Ci0rICAgIHdoaWxlIFsgISAtZiAiJGtk Y19waWRmaWxlIiAtYSAkaSAtbHQgMTAgXTsgZG8KLSsgICAgICAgIGk9JCgoaSArIDEpKQotKyAg ICAgICAgc2xlZXAgMQotKyAgICBkb25lCi0rICAgIHRlc3QgLWYgIiRrZGNfcGlkZmlsZSIgfHwg ZmF0YWwgIktEQyBmYWlsZWQgdG8gc3RhcnQiCi0rfQotKwotK3RlYXJkb3duX2tkYygpIHsKLSsg ICAga2lsbCAiJChjYXQgIiRrZGNfcGlkZmlsZSIpIgotKyAgICBrZGVzdHJveQotKyAgICBybSAt ZiAiJEtSQjVfS1ROQU1FIiAiJGtkY19waWRmaWxlIgotKyAgICBrZGI1X3V0aWwgZGVzdHJveSAt ZgotK30KLSsKLStzZXR1cF9uc3NfZW11bGF0aW9uKCkgewotKyAgICBleHBvcnQgTERfUFJFTE9B RD0iJG5zc193cmFwcGVyIgotKyAgICBleHBvcnQgTlNTX1dSQVBQRVJfSE9TVFM9IiRob3N0cyIK LSt9Ci0rCi0rdGVhcmRvd25fbnNzX2VtdWxhdGlvbigpIHsKLSsgICAgdW5zZXQgTERfUFJFTE9B RAotKyAgICB1bnNldCBOU1NfV1JBUFBFUl9IT1NUUwotK30KLSsKLSsjIEdTUyBrZXggZmFtaWx5 IHByZWZpeGVzIHRvIHRlc3QuCi0rIyBHU1NBUElLZXhBbGdvcml0aG1zIGFjY2VwdHMgdGhlc2Ug cHJlZml4ZXM7IHRoZSBmdWxsIGFsZ29yaXRobSBuYW1lcwotKyMgKHByZWZpeCArIEJhc2U2NChN RDUoT0lEKSkpIGFyZSBjb25zdHJ1Y3RlZCBkdXJpbmcgbmVnb3RpYXRpb24uCi0rZ3NzX2tleF9m YW1pbGllcz0iCi0rICAgIGdzcy1ncm91cDE0LXNoYTI1Ni0KLSsgICAgZ3NzLWdyb3VwMTYtc2hh NTEyLQotKyAgICBnc3MtbmlzdHAyNTYtc2hhMjU2LQotKyAgICBnc3MtY3VydmUyNTUxOS1zaGEy NTYtCi0rICAgIGdzcy1ncm91cDE0LXNoYTEtCi0rICAgIGdzcy1nZXgtc2hhMS0KLSsiCi0rCi0r IyBQb3NpdGl2ZSB0ZXN0czogZWFjaCBHU1Mga2V4IGFsZ29yaXRobSBjb25uZWN0cyBzdWNjZXNz ZnVsbHkKLStmb3Iga2V4X2ZhbWlseSBpbiAkZ3NzX2tleF9mYW1pbGllczsgZG8KLSsgICAgIyBD aGVjayBpZiB0aGUgYWxnb3JpdGhtIGZhbWlseSBpcyByZWNvZ25pemVkIGJ5IHNzaAotKyAgICBp ZiAhICR7U1NIfSAtRyAtRiAiJE9CSi9zc2hfY29uZmlnIiBcCi0rICAgICAgICAtbyAiR1NTQVBJ S2V5RXhjaGFuZ2UgeWVzIiBcCi0rICAgICAgICAtbyAiR1NTQVBJS2V4QWxnb3JpdGhtcyAka2V4 X2ZhbWlseSIgXAotKyAgICAgICAgIiRjbGllbnRAJHNzaGRfaG9zdG5hbWUiID4vZGV2L251bGwg Mj4mMTsgdGhlbgotKyAgICAgICAgdmVyYm9zZSAiZ3NzIGtleCAka2V4X2ZhbWlseSBub3Qgc3Vw cG9ydGVkLCBza2lwcGluZyIKLSsgICAgICAgIGNvbnRpbnVlCi0rICAgIGZpCi0rCi0rICAgIHZl cmJvc2UgImdzcyBrZXggJGtleF9mYW1pbHkiCi0rCi0rICAgIHNldHVwX25zc19lbXVsYXRpb24K LSsgICAgc2V0dXBfa2RjCi0rCi0rICAgIGthZG1pbi5sb2NhbCBhZGRfcHJpbmNpcGFsIC1yYW5k a2V5ICJob3N0LyRzc2hkX2hvc3RuYW1lIgotKyAgICBrYWRtaW4ubG9jYWwga3RhZGQgImhvc3Qv JHNzaGRfaG9zdG5hbWUiCi0rICAgIGthZG1pbi5sb2NhbCBhZGRfcHJpbmNpcGFsIC1wdyAiZm9v IiAiJGNsaWVudCIKLSsgICAgZWNobyAiZm9vIiB8IGtpbml0ICIkY2xpZW50IgotKwotKyAgICBz ZXR1cF9zc2hkICIka2V4X2ZhbWlseSIKLSsKLSsgICAgJHtTU0h9IC1GICIkT0JKL3NzaF9jb25m aWciIFwKLSsgICAgICAgIC1vICJHU1NBUElBdXRoZW50aWNhdGlvbiB5ZXMiIFwKLSsgICAgICAg IC1vICJHU1NBUElLZXlFeGNoYW5nZSB5ZXMiIFwKLSsgICAgICAgIC1vICJHU1NBUElLZXhBbGdv cml0aG1zICRrZXhfZmFtaWx5IiBcCi0rICAgICAgICAtbyAiR1NTQVBJRGVsZWdhdGVDcmVkZW50 aWFscyBubyIgXAotKyAgICAgICAgIiRjbGllbnRAJHNzaGRfaG9zdG5hbWUiIHRydWUKLSsgICAg c3RhdHVzPSQ/Ci0rCi0rICAgIHRlYXJkb3duX3NzaGQKLSsgICAgdGVhcmRvd25fa2RjCi0rICAg IHRlYXJkb3duX25zc19lbXVsYXRpb24KLSsKLSsgICAgaWYgWyAkc3RhdHVzIC1uZSAwIF07IHRo ZW4KLSsgICAgICAgIGZhaWwgImdzcyBrZXggJGtleF9mYW1pbHkgZmFpbGVkIgotKyAgICBmaQot K2RvbmUKLSsKLSsjIE5lZ2F0aXZlIHRlc3Q6IGNvbm5lY3Rpb24gbXVzdCBmYWlsIHdoZW4ga2V5 dGFiIGlzIG1pc3NpbmcKLSt2ZXJib3NlICJnc3Mga2V4IG5lZ2F0aXZlIHRlc3Q6IG5vIGtleXRh YiIKLStrZXhfbmVnPSJnc3MtZ3JvdXAxNC1zaGEyNTYtIgotKwotK2lmICR7U1NIfSAtRyAtRiAi JE9CSi9zc2hfY29uZmlnIiBcCi0rICAgIC1vICJHU1NBUElLZXlFeGNoYW5nZSB5ZXMiIFwKLSsg ICAgLW8gIkdTU0FQSUtleEFsZ29yaXRobXMgJGtleF9uZWciIFwKLSsgICAgIiRjbGllbnRAJHNz aGRfaG9zdG5hbWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgotKwotKyAgICBzZXR1cF9uc3NfZW11 bGF0aW9uCi0rICAgIHNldHVwX2tkYwotKwotKyAgICAjIENyZWF0ZSBob3N0IHByaW5jaXBhbCBi dXQgZG8gTk9UIGV4cG9ydCB0byBrZXl0YWIKLSsgICAga2FkbWluLmxvY2FsIGFkZF9wcmluY2lw YWwgLXJhbmRrZXkgImhvc3QvJHNzaGRfaG9zdG5hbWUiCi0rICAgIGthZG1pbi5sb2NhbCBhZGRf cHJpbmNpcGFsIC1wdyAiZm9vIiAiJGNsaWVudCIKLSsgICAgZWNobyAiZm9vIiB8IGtpbml0ICIk Y2xpZW50IgotKwotKyAgICBzZXR1cF9zc2hkICIka2V4X25lZyIKLSsKLSsgICAgJHtTU0h9IC1G ICIkT0JKL3NzaF9jb25maWciIFwKLSsgICAgICAgIC1vICJHU1NBUElBdXRoZW50aWNhdGlvbiB5 ZXMiIFwKLSsgICAgICAgIC1vICJHU1NBUElLZXlFeGNoYW5nZSB5ZXMiIFwKLSsgICAgICAgIC1v ICJHU1NBUElLZXhBbGdvcml0aG1zICRrZXhfbmVnIiBcCi0rICAgICAgICAtbyAiR1NTQVBJRGVs ZWdhdGVDcmVkZW50aWFscyBubyIgXAotKyAgICAgICAgIiRjbGllbnRAJHNzaGRfaG9zdG5hbWUi IHRydWUKLSsgICAgc3RhdHVzPSQ/Ci0rCi0rICAgIHRlYXJkb3duX3NzaGQKLSsgICAgdGVhcmRv d25fa2RjCi0rICAgIHRlYXJkb3duX25zc19lbXVsYXRpb24KLSsKLSsgICAgaWYgWyAkc3RhdHVz IC1lcSAwIF07IHRoZW4KLSsgICAgICAgIGZhaWwgImdzcyBrZXggc3VjY2VlZGVkIHdpdGhvdXQg a2V5dGFiIgotKyAgICBmaQotK2ZpCi0rCi0rdW5zZXQgS1JCNUNDTkFNRQotK3Vuc2V0IEtSQjVf Q09ORklHCi0rdW5zZXQgS1JCNV9LRENfUFJPRklMRQotK3Vuc2V0IEtSQjVfS1ROQU1FCi0rdW5z ZXQgS1JCNVJDQUNIRVRZUEUKLStybSAtcmYgIiRnc3NkaXIiCgpkaWZmIC0tZ2l0IGEvMTAwMC1v cGVuc3NoLTYuN3AxLWNvdmVyaXR5LnBhdGNoIGIvMTAwMC1vcGVuc3NoLTYuN3AxLWNvdmVyaXR5 LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODU1NTcxLi4wMDAwMDAwCi0t LSBhLzEwMDAtb3BlbnNzaC02LjdwMS1jb3Zlcml0eS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDIzMCArMCwwIEBACi1Gcm9tIGQwMjI1YmNkYmMwZDc4M2RmODc4Y2NmYjUxMjhiZGNiNzg3ZDgy ZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVs ZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDEyIERlYyAyMDI1IDE0OjI1OjQxICswMTAwCi1T dWJqZWN0OiBbUEFUQ0ggNTQvNTRdIG9wZW5zc2gtNi43cDEtY292ZXJpdHkKLQotaHR0cHM6Ly9i dWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4MQotLS0tCi0gYXV0aC1rcmI1 LmMgICAgICAgICAgICAgICAgICAgfCAyICsrCi0gZ3NzLWdlbnIuYyAgICAgICAgICAgICAgICAg ICAgfCAzICsrLQotIGtybC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyArKysKLSBsb2dp bnJlYy5jICAgICAgICAgICAgICAgICAgICB8IDIgKysKLSBtaXNjLmMgICAgICAgICAgICAgICAg ICAgICAgICB8IDMgKysrCi0gbW9uaXRvci5jICAgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0K LSBvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYyB8IDIgKy0KLSBvcGVuYnNkLWNvbXBhdC9i c2QtcHNlbGVjdC5jICB8IDggKysrKy0tLS0KLSByZWFkY29uZi5jICAgICAgICAgICAgICAgICAg ICB8IDEgKwotIHNlcnZjb25mLmMgICAgICAgICAgICAgICAgICAgIHwgNSArKystLQotIHNlcnZl cmxvb3AuYyAgICAgICAgICAgICAgICAgIHwgMiArLQotIDExIGZpbGVzIGNoYW5nZWQsIDI0IGlu c2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYXV0aC1rcmI1LmMg Yi9hdXRoLWtyYjUuYwotaW5kZXggN2Q0ZmJjYzNkLi45Y2QzNjE4YjIgMTAwNjQ0Ci0tLS0gYS9h dXRoLWtyYjUuYwotKysrIGIvYXV0aC1rcmI1LmMKLUBAIC00MjcsNiArNDI3LDcgQEAgc3NoX2ty YjVfY2NfbmV3X3VuaXF1ZShrcmI1X2NvbnRleHQgY3R4LCBrcmI1X2NjYWNoZSAqY2NhY2hlLCBp bnQgKm5lZWRfZW52aXJvbm0KLSAJCXVtYXNrKG9sZF91bWFzayk7Ci0gCQlpZiAodG1wZmQgPT0g LTEpIHsKLSAJCQlsb2dpdCgibWtzdGVtcCgpOiAlLjEwMHMiLCBzdHJlcnJvcihvZXJybm8pKTsK LSsJCQlmcmVlKGNjbmFtZSk7Ci0gCQkJcmV0dXJuIG9lcnJubzsKLSAJCX0KLSAKLUBAIC00MzQs NiArNDM1LDcgQEAgc3NoX2tyYjVfY2NfbmV3X3VuaXF1ZShrcmI1X2NvbnRleHQgY3R4LCBrcmI1 X2NjYWNoZSAqY2NhY2hlLCBpbnQgKm5lZWRfZW52aXJvbm0KLSAJCQlvZXJybm8gPSBlcnJubzsK LSAJCQlsb2dpdCgiZmNobW9kKCk6ICUuMTAwcyIsIHN0cmVycm9yKG9lcnJubykpOwotIAkJCWNs b3NlKHRtcGZkKTsKLSsJCQlmcmVlKGNjbmFtZSk7Ci0gCQkJcmV0dXJuIG9lcnJubzsKLSAJCX0K LSAJCS8qIG1ha2Ugc3VyZSB0aGUgS1JCNUNDTkFNRSBpcyBzZXQgZm9yIG5vbi1zdGFuZGFyZCBs b2NhdGlvbiAqLwotZGlmZiAtLWdpdCBhL2dzcy1nZW5yLmMgYi9nc3MtZ2Vuci5jCi1pbmRleCBh MDdkYmY1MTIuLmVjMmM5YzZkZCAxMDA2NDQKLS0tLSBhL2dzcy1nZW5yLmMKLSsrKyBiL2dzcy1n ZW5yLmMKLUBAIC0xNzgsOCArMTc4LDkgQEAgc3NoX2dzc2FwaV9rZXhfbWVjaHMoZ3NzX09JRF9z ZXQgZ3NzX3N1cHBvcnRlZCwgc3NoX2dzc2FwaV9jaGVja19mbiAqY2hlY2ssCi0gCQkJZW5jbGVu ID0gX19iNjRfbnRvcChkaWdlc3QsCi0gCQkJICAgIHNzaF9kaWdlc3RfYnl0ZXMoU1NIX0RJR0VT VF9NRDUpLCBlbmNvZGVkLAotIAkJCSAgICBzc2hfZGlnZXN0X2J5dGVzKFNTSF9ESUdFU1RfTUQ1 KSAqIDIpOwotLQotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzdHJpbmdvcC1v dmVyZmxvdyIKLSAJCQljcCA9IHN0cm5jcHkocywga2V4LCBzdHJsZW4oa2V4KSk7Ci0rI3ByYWdt YSBHQ0MgZGlhZ25vc3RpYyBwb3AKLSAJCQlmb3IgKChwID0gc3Ryc2VwKCZjcCwgIiwiKSk7IHAg JiYgKnAgIT0gJ1wwJzsKLSAJCQkJKHAgPSBzdHJzZXAoJmNwLCAiLCIpKSkgewotIAkJCQlpZiAo c3NoYnVmX2xlbihidWYpICE9IDAgJiYKLWRpZmYgLS1naXQgYS9rcmwuYyBiL2tybC5jCi1pbmRl eCAwZTJiNWYxNTUuLmYyZDEwNWYyMyAxMDA2NDQKLS0tLSBhL2tybC5jCi0rKysgYi9rcmwuYwot QEAgLTEyMDIsNiArMTIwMiw3IEBAIGlzX2tleV9yZXZva2VkKHN0cnVjdCBzc2hfa3JsICprcmws IGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSkKLSAJCXJldHVybiByOwotIAllcmIgPSBSQl9GSU5E KHJldm9rZWRfYmxvYl90cmVlLCAma3JsLT5yZXZva2VkX3NoYTFzLCAmcmIpOwotIAlmcmVlKHJi LmJsb2IpOwotKwlyYi5ibG9iID0gTlVMTDsgLyogbWFrZSBjb3Zlcml0eSBoYXBweSAqLwotIAlp ZiAoZXJiICE9IE5VTEwpIHsKLSAJCUtSTF9EQkcoKCJyZXZva2VkIGJ5IGtleSBTSEExIikpOwot IAkJcmV0dXJuIFNTSF9FUlJfS0VZX1JFVk9LRUQ7Ci1AQCAtMTIxMiw2ICsxMjEzLDcgQEAgaXNf a2V5X3Jldm9rZWQoc3RydWN0IHNzaF9rcmwgKmtybCwgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5 KQotIAkJcmV0dXJuIHI7Ci0gCWVyYiA9IFJCX0ZJTkQocmV2b2tlZF9ibG9iX3RyZWUsICZrcmwt PnJldm9rZWRfc2hhMjU2cywgJnJiKTsKLSAJZnJlZShyYi5ibG9iKTsKLSsJcmIuYmxvYiA9IE5V TEw7IC8qIG1ha2UgY292ZXJpdHkgaGFwcHkgKi8KLSAJaWYgKGVyYiAhPSBOVUxMKSB7Ci0gCQlL UkxfREJHKCgicmV2b2tlZCBieSBrZXkgU0hBMjU2IikpOwotIAkJcmV0dXJuIFNTSF9FUlJfS0VZ X1JFVk9LRUQ7Ci1AQCAtMTIyMyw2ICsxMjI1LDcgQEAgaXNfa2V5X3Jldm9rZWQoc3RydWN0IHNz aF9rcmwgKmtybCwgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5KQotIAkJcmV0dXJuIHI7Ci0gCWVy YiA9IFJCX0ZJTkQocmV2b2tlZF9ibG9iX3RyZWUsICZrcmwtPnJldm9rZWRfa2V5cywgJnJiKTsK LSAJZnJlZShyYi5ibG9iKTsKLSsJcmIuYmxvYiA9IE5VTEw7IC8qIG1ha2UgY292ZXJpdHkgaGFw cHkgKi8KLSAJaWYgKGVyYiAhPSBOVUxMKSB7Ci0gCQlLUkxfREJHKCgicmV2b2tlZCBieSBleHBs aWNpdCBrZXkiKSk7Ci0gCQlyZXR1cm4gU1NIX0VSUl9LRVlfUkVWT0tFRDsKLWRpZmYgLS1naXQg YS9sb2dpbnJlYy5jIGIvbG9naW5yZWMuYwotaW5kZXggNzQ5OWFhOTc1Li4yODA3Y2FkNGEgMTAw NjQ0Ci0tLS0gYS9sb2dpbnJlYy5jCi0rKysgYi9sb2dpbnJlYy5jCi1AQCAtNjgwLDkgKzY4MCwx MSBAQCBjb25zdHJ1Y3RfdXRtcChzdHJ1Y3QgbG9naW5pbmZvICpsaSwKLSAJICovCi0gCi0gCS8q IFVzZSBzdHJuY3B5IGJlY2F1c2Ugd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCBudWxsIHRlcm1p bmF0aW9uICovCi0rCS8qIGNvdmVyaXR5W2J1ZmZlcl9zaXplX3dhcm5pbmcgOiBGQUxTRV0gKi8K LSAJc3RybmNweSh1dC0+dXRfbmFtZSwgbGktPnVzZXJuYW1lLAotIAkgICAgTUlOX1NJWkVPRih1 dC0+dXRfbmFtZSwgbGktPnVzZXJuYW1lKSk7Ci0gIyBpZmRlZiBIQVZFX0hPU1RfSU5fVVRNUAot KwkvKiBjb3Zlcml0eVtidWZmZXJfc2l6ZV93YXJuaW5nIDogRkFMU0VdICovCi0gCXN0cm5jcHko dXQtPnV0X2hvc3QsIGxpLT5ob3N0bmFtZSwKLSAJICAgIE1JTl9TSVpFT0YodXQtPnV0X2hvc3Qs IGxpLT5ob3N0bmFtZSkpOwotICMgZW5kaWYKLWRpZmYgLS1naXQgYS9taXNjLmMgYi9taXNjLmMK LWluZGV4IGU5NmZhOGQ2MS4uNTU2YzExMmMzIDEwMDY0NAotLS0tIGEvbWlzYy5jCi0rKysgYi9t aXNjLmMKLUBAIC0xNjIwLDYgKzE2MjAsOCBAQCBzYW5pdGlzZV9zdGRmZCh2b2lkKQotIAl9Ci0g CWlmIChudWxsZmQgPiBTVERFUlJfRklMRU5PKQotIAkJY2xvc2UobnVsbGZkKTsKLSsJLyogY292 ZXJpdHlbbGVha2VkX2hhbmRsZSA6IEZBTFNFXSovCi0rCS8qIGNvdmVyaXR5W2xlYWtlZF9oYW5k bGUgOiBGQUxTRV0qLwotIH0KLSAKLSBjaGFyICoKLUBAIC0yODIxLDYgKzI4MjMsNyBAQCBzdGRm ZF9kZXZudWxsKGludCBkb19zdGRpbiwgaW50IGRvX3N0ZG91dCwgaW50IGRvX3N0ZGVycikKLSAJ fQotIAlpZiAoZGV2bnVsbCA+IFNUREVSUl9GSUxFTk8pCi0gCQljbG9zZShkZXZudWxsKTsKLSsJ LyogY292ZXJpdHlbbGVha2VkX2hhbmRsZSA6IEZBTFNFXSovCi0gCXJldHVybiByZXQ7Ci0gfQot IAotZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0b3IuYwotaW5kZXggMzZkYjFhZmVlLi4z YjYwMDU5YTkgMTAwNjQ0Ci0tLS0gYS9tb25pdG9yLmMKLSsrKyBiL21vbml0b3IuYwotQEAgLTQx MCw3ICs0MTAsNyBAQCBtb25pdG9yX2NoaWxkX3ByZWF1dGgoc3RydWN0IHNzaCAqc3NoLCBzdHJ1 Y3QgbW9uaXRvciAqcG1vbml0b3IpCi0gCW1tX2dldF9rZXlzdGF0ZShzc2gsIHBtb25pdG9yKTsK LSAKLSAJLyogRHJhaW4gYW55IGJ1ZmZlcmVkIG1lc3NhZ2VzIGZyb20gdGhlIGNoaWxkICovCi0t CXdoaWxlIChwbW9uaXRvci0+bV9sb2dfcmVjdmZkICE9IC0xICYmIG1vbml0b3JfcmVhZF9sb2co cG1vbml0b3IpID09IDApCi0rCXdoaWxlIChwbW9uaXRvci0+bV9sb2dfcmVjdmZkID49IDAgJiYg bW9uaXRvcl9yZWFkX2xvZyhwbW9uaXRvcikgPT0gMCkKLSAJCTsKLSAKLSAJLyogV2FpdCBmb3Ig dGhlIGNoaWxkJ3MgZXhpdCBzdGF0dXMgKi8KLUBAIC0xODU1LDcgKzE4NTUsNyBAQCBtbV9hbnN3 ZXJfcHR5KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCi0gCXMt PnB0eW1hc3RlciA9IHMtPnB0eWZkOwotIAotIAlkZWJ1ZzNfZigidHR5ICVzIHB0eWZkICVkIiwg cy0+dHR5LCBzLT50dHlmZCk7Ci0tCi0rCS8qIGNvdmVyaXR5W2xlYWtlZF9oYW5kbGUgOiBGQUxT RV0gKi8KLSAJcmV0dXJuICgwKTsKLSAKLSAgZXJyb3I6Ci1kaWZmIC0tZ2l0IGEvb3BlbmJzZC1j b21wYXQvYmluZHJlc3Zwb3J0LmMgYi9vcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYwotaW5k ZXggMzQ2YzdmZTU2Li5mNDI3OTJmZGUgMTAwNjQ0Ci0tLS0gYS9vcGVuYnNkLWNvbXBhdC9iaW5k cmVzdnBvcnQuYwotKysrIGIvb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmMKLUBAIC01OSw3 ICs1OSw3IEBAIGJpbmRyZXN2cG9ydF9zYShpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqc2EpCi0g CXN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNjsKLSAJdV9pbnQxNl90ICpwb3J0cDsKLSAJdV9pbnQx Nl90IHBvcnQ7Ci0tCXNvY2tsZW5fdCBzYWxlbjsKLSsJc29ja2xlbl90IHNhbGVuID0gc2l6ZW9m KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKLSAJaW50IGk7Ci0gCi0gCWlmIChzYSA9PSBOVUxM KSB7Ci1kaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvYnNkLXBzZWxlY3QuYyBiL29wZW5ic2Qt Y29tcGF0L2JzZC1wc2VsZWN0LmMKLWluZGV4IDI2YmRjM2UwOC4uOGUyOTM5Yjk1IDEwMDY0NAot LS0tIGEvb3BlbmJzZC1jb21wYXQvYnNkLXBzZWxlY3QuYwotKysrIGIvb3BlbmJzZC1jb21wYXQv YnNkLXBzZWxlY3QuYwotQEAgLTg1LDEzICs4NSwxMyBAQCBwc2VsZWN0X25vdGlmeV9zZXR1cCh2 b2lkKQotIHN0YXRpYyB2b2lkCi0gcHNlbGVjdF9ub3RpZnlfcGFyZW50KHZvaWQpCi0gewotLQlp ZiAobm90aWZ5X3BpcGVbMV0gIT0gLTEpCi0rCWlmIChub3RpZnlfcGlwZVsxXSA+PSAwKQotIAkJ KHZvaWQpd3JpdGUobm90aWZ5X3BpcGVbMV0sICIiLCAxKTsKLSB9Ci0gc3RhdGljIHZvaWQKLSBw c2VsZWN0X25vdGlmeV9wcmVwYXJlKGZkX3NldCAqcmVhZHNldCkKLSB7Ci0tCWlmIChub3RpZnlf cGlwZVswXSAhPSAtMSkKLSsJaWYgKG5vdGlmeV9waXBlWzBdID49IDApCi0gCQlGRF9TRVQobm90 aWZ5X3BpcGVbMF0sIHJlYWRzZXQpOwotIH0KLSBzdGF0aWMgdm9pZAotQEAgLTk5LDggKzk5LDgg QEAgcHNlbGVjdF9ub3RpZnlfZG9uZShmZF9zZXQgKnJlYWRzZXQpCi0gewotIAljaGFyIGM7Ci0g Ci0tCWlmIChub3RpZnlfcGlwZVswXSAhPSAtMSAmJiBGRF9JU1NFVChub3RpZnlfcGlwZVswXSwg cmVhZHNldCkpIHsKLS0JCXdoaWxlIChyZWFkKG5vdGlmeV9waXBlWzBdLCAmYywgMSkgIT0gLTEp Ci0rCWlmIChub3RpZnlfcGlwZVswXSA+PSAwICYmIEZEX0lTU0VUKG5vdGlmeV9waXBlWzBdLCBy ZWFkc2V0KSkgewotKwkJd2hpbGUgKHJlYWQobm90aWZ5X3BpcGVbMF0sICZjLCAxKSA+PSAwKQot IAkJCWRlYnVnMl9mKCJyZWFkaW5nIik7Ci0gCQlGRF9DTFIobm90aWZ5X3BpcGVbMF0sIHJlYWRz ZXQpOwotIAl9Ci1kaWZmIC0tZ2l0IGEvcmVhZGNvbmYuYyBiL3JlYWRjb25mLmMKLWluZGV4IDA1 OGU1M2NmMS4uMTRmMTQ5Y2MxIDEwMDY0NAotLS0tIGEvcmVhZGNvbmYuYwotKysrIGIvcmVhZGNv bmYuYwotQEAgLTIxNjQsNiArMjE2NCw3IEBAIHBhcnNlX3B1YmtleV9hbGdvczoKLSAJCQl9IGVs c2UgaWYgKHIgIT0gMCkgewotIAkJCQllcnJvcigiJS4yMDBzIGxpbmUgJWQ6IGdsb2IgZmFpbGVk IGZvciAlcy4iLAotIAkJCQkgICAgZmlsZW5hbWUsIGxpbmVudW0sIGFyZzIpOwotKwkJCQlmcmVl KGFyZzIpOwotIAkJCQlnb3RvIG91dDsKLSAJCQl9Ci0gCQkJZnJlZShhcmcyKTsKLWRpZmYgLS1n aXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5kZXggZTA1YTMxNTg0Li4zZmZhNDljM2Eg MTAwNjQ0Ci0tLS0gYS9zZXJ2Y29uZi5jCi0rKysgYi9zZXJ2Y29uZi5jCi1AQCAtMjM4Miw4ICsy MzgyLDkgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAq b3B0aW9ucywgY2hhciAqbGluZSwKLSAJCWlmICgqYWN0aXZlcCAmJiAqY2hhcnB0ciA9PSBOVUxM KSB7Ci0gCQkJKmNoYXJwdHIgPSB0aWxkZV9leHBhbmRfZmlsZW5hbWUoYXJnLCBnZXR1aWQoKSk7 Ci0gCQkJLyogaW5jcmVhc2Ugb3B0aW9uYWwgY291bnRlciAqLwotLQkJCWlmIChpbnRwdHIgIT0g TlVMTCkKLS0JCQkJKmludHB0ciA9ICppbnRwdHIgKyAxOwotKwkJCS8qIERFQUQgQ09ERSBpbnRw dHIgaXMgc3RpbGwgTlVMTCA7KQotKyAgCQkJIGlmIChpbnRwdHIgIT0gTlVMTCkKLSsJCQkJKmlu dHB0ciA9ICppbnRwdHIgKyAxOyAqLwotIAkJfQotIAkJYnJlYWs7Ci0gCi1kaWZmIC0tZ2l0IGEv c2VydmVybG9vcC5jIGIvc2VydmVybG9vcC5jCi1pbmRleCAxMDg3YTZjN2QuLmI2NWM5ZGQ2NiAx MDA2NDQKLS0tLSBhL3NlcnZlcmxvb3AuYwotKysrIGIvc2VydmVybG9vcC5jCi1AQCAtNTM2LDcg KzUzNiw3IEBAIHNlcnZlcl9yZXF1ZXN0X3R1bihzdHJ1Y3Qgc3NoICpzc2gpCi0gCQlkZWJ1Z19m KCJpbnZhbGlkIHR1biIpOwotIAkJZ290byBkb25lOwotIAl9Ci0tCWlmIChhdXRoX29wdHMtPmZv cmNlX3R1bl9kZXZpY2UgIT0gLTEpIHsKLSsJaWYgKGF1dGhfb3B0cy0+Zm9yY2VfdHVuX2Rldmlj ZSA+PSAwKSB7Ci0gCQlpZiAodHVuICE9IFNTSF9UVU5JRF9BTlkgJiYKLSAJCSAgICBhdXRoX29w dHMtPmZvcmNlX3R1bl9kZXZpY2UgIT0gKGludCl0dW4pCi0gCQkJZ290byBkb25lOwotLS0gCi0y LjUzLjAKLQoKZGlmZiAtLWdpdCBhLzIwMDAtb3BlbnNzaC0xMC4zcDEtZ3Npc3NoLnBhdGNoIGIv MjAwMC1vcGVuc3NoLTEwLjNwMS1nc2lzc2gucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGM1MDAwODkuLjAwMDAwMDAKLS0tIGEvMjAwMC1vcGVuc3NoLTEwLjNwMS1nc2lzc2gu cGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNDM2ICswLDAgQEAKLWRpZmYgLU51ciBvcGVuc3No LTEwLjNwMS5vcmlnL2F1dGgyLmMgb3BlbnNzaC0xMC4zcDEvYXV0aDIuYwotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvYXV0aDIuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjYyMTg2NjAyOSArMDIwMAot KysrIG9wZW5zc2gtMTAuM3AxL2F1dGgyLmMJMjAyNi0wNy0wMSAxMDo1NDo1Ni40NzY4MDI3NjYg KzAyMDAKLUBAIC0yODYsNyArMjg2LDI4IEBACi0gCSAgICAociA9IHNzaHBrdF9nZXRfY3N0cmlu Zyhzc2gsICZzZXJ2aWNlLCBOVUxMKSkgIT0gMCB8fAotIAkgICAgKHIgPSBzc2hwa3RfZ2V0X2Nz dHJpbmcoc3NoLCAmbWV0aG9kLCBOVUxMKSkgIT0gMCkKLSAJCWdvdG8gb3V0OwotLQlkZWJ1Zygi dXNlcmF1dGgtcmVxdWVzdCBmb3IgdXNlciAlcyBzZXJ2aWNlICVzIG1ldGhvZCAlcyIsIHVzZXIs IHNlcnZpY2UsIG1ldGhvZCk7Ci0rCi0rI2lmZGVmIEdTU0FQSQotKwlpZiAodXNlclswXSA9PSAn XDAnKSB7Ci0rCQlkZWJ1ZygicmVjZWl2ZWQgZW1wdHkgdXNlcm5hbWUgZm9yICVzIiwgbWV0aG9k KTsKLSsJCWlmIChzdHJjbXAobWV0aG9kLCAiZ3NzYXBpLWtleWV4IikgPT0gMCkgewotKwkJCWNo YXIgKmxuYW1lID0gTlVMTDsKLSsJCQltbV9zc2hfZ3NzYXBpX2xvY2FsbmFtZSgmbG5hbWUpOwot KwkJCWlmIChsbmFtZSAmJiBsbmFtZVswXSAhPSAnXDAnKSB7Ci0rCQkJCWZyZWUodXNlcik7Ci0r CQkJCXVzZXIgPSBsbmFtZTsKLSsJCQkJZGVidWcoInNldCB1c2VybmFtZSB0byAlcyBmcm9tIGdz c2FwaSBjb250ZXh0IiwgdXNlcik7Ci0rCQkJfSBlbHNlIHsKLSsJCQkJZGVidWcoImZhaWxlZCB0 byBzZXQgdXNlcm5hbWUgZnJvbSBnc3NhcGkgY29udGV4dCIpOwotKwkJCQlzc2hfcGFja2V0X3Nl bmRfZGVidWcoc3NoLAotKwkJCQkgICAgImZhaWxlZCB0byBzZXQgdXNlcm5hbWUgZnJvbSBnc3Nh cGkgY29udGV4dCIpOwotKwkJCX0KLSsJCX0KLSsJfQotKyNlbmRpZgotKwotKwlkZWJ1ZygidXNl cmF1dGgtcmVxdWVzdCBmb3IgdXNlciAlcyBzZXJ2aWNlICVzIG1ldGhvZCAlcyIsCi0rCSAgICB1 c2VyWzBdID8gdXNlciA6ICI8aW1wbGljaXQ+Iiwgc2VydmljZSwgbWV0aG9kKTsKLSAJZGVidWco ImF0dGVtcHQgJWQgZmFpbHVyZXMgJWQiLCBhdXRoY3R4dC0+YXR0ZW1wdCwgYXV0aGN0eHQtPmZh aWx1cmVzKTsKLSAKLSAjaWZkZWYgV0lUSF9TRUxJTlVYCi1AQCAtMjk5LDE2ICszMjAsMzggQEAK LSAKLSAJaWYgKGF1dGhjdHh0LT5hdHRlbXB0ID49IDEwMjQpCi0gCQlhdXRoX21heHRyaWVzX2V4 Y2VlZGVkKHNzaCk7Ci0tCWlmIChhdXRoY3R4dC0+YXR0ZW1wdCsrID09IDApIHsKLS0JCS8qIHNl dHVwIGF1dGggY29udGV4dCAqLwotLQkJYXV0aGN0eHQtPnB3ID0gbW1fZ2V0cHduYW1hbGxvdyhz c2gsIHVzZXIpOwotKwkvKiBJZiBmaXJzdCB0aW1lIG9yIHVzZXJuYW1lIGNoYW5nZWQgb3IgZW1w dHkgdXNlcm5hbWUsCi0rCSAgIHNldHVwL3Jlc2V0IGF1dGhlbnRpY2F0aW9uIGNvbnRleHQuICov Ci0rCWlmICgoYXV0aGN0eHQtPmF0dGVtcHQrKyA9PSAwKSB8fAotKwkgICAgKHN0cmNtcCh1c2Vy LCBhdXRoY3R4dC0+dXNlcikgIT0gMCkgfHwKLSsJICAgIChzdHJjbXAodXNlciwgIiIpID09IDAp KSB7Ci0rCQlpZiAoYXV0aGN0eHQtPnVzZXIpIHsKLSsJCQlmcmVlKGF1dGhjdHh0LT51c2VyKTsK LSsJCQlhdXRoY3R4dC0+dXNlciA9IE5VTEw7Ci0rCQl9Ci0rCQlhdXRoY3R4dC0+dmFsaWQgPSAw OwotIAkJYXV0aGN0eHQtPnVzZXIgPSB4c3RyZHVwKHVzZXIpOwotIAkJYXV0aGN0eHQtPnNlcnZp Y2UgPSB4c3RyZHVwKHNlcnZpY2UpOwotIAkJYXV0aGN0eHQtPnN0eWxlID0gc3R5bGUgPyB4c3Ry ZHVwKHN0eWxlKSA6IE5VTEw7Ci0gI2lmZGVmIFdJVEhfU0VMSU5VWAotIAkJYXV0aGN0eHQtPnJv bGUgPSByb2xlID8geHN0cmR1cChyb2xlKSA6IE5VTEw7Ci0gI2VuZGlmCi0tCQlpZiAoYXV0aGN0 eHQtPnB3ICYmIHN0cmNtcChzZXJ2aWNlLCAic3NoLWNvbm5lY3Rpb24iKT09MCkgewotKwkJaWYg KHN0cmNtcChzZXJ2aWNlLCAic3NoLWNvbm5lY3Rpb24iKSAhPSAwKSB7Ci0rCQkJc3NoX3BhY2tl dF9kaXNjb25uZWN0KHNzaCwgIlVuc3VwcG9ydGVkIHNlcnZpY2UgJXMiLAotKwkJCSAgICBzZXJ2 aWNlKTsKLSsJCX0KLSsjaWZkZWYgR1NTQVBJCi0rCQkvKiBJZiB3ZSdyZSBnb2luZyB0byBzZXQg dGhlIHVzZXJuYW1lIGJhc2VkIG9uIHRoZQotKwkJICAgR1NTQVBJIGNvbnRleHQgbGF0ZXIsIHRo ZW4gd2FpdCB1bnRpbCB0aGVuIHRvCi0rCQkgICB2ZXJpZnkgaXQuIEp1c3QgcHV0IGluIHBsYWNl aG9sZGVycyBmb3Igbm93LiAqLwotKwkJaWYgKChzdHJjbXAodXNlciwgIiIpID09IDApICYmCi0r CQkgICAgKChzdHJjbXAobWV0aG9kLCAiZ3NzYXBpIikgPT0gMCkgfHwKLSsJCSAgICAgKHN0cmNt cChtZXRob2QsICJnc3NhcGktd2l0aC1taWMiKSA9PSAwKSkpIHsKLSsJCQlhdXRoY3R4dC0+cHcg PSBmYWtlcHcoKTsKLSsJCX0gZWxzZSB7Ci0rI2VuZGlmCi0rCQlhdXRoY3R4dC0+cHcgPSBtbV9n ZXRwd25hbWFsbG93KHNzaCwgdXNlcik7Ci0rCQlpZiAoYXV0aGN0eHQtPnB3KSB7Ci0gCQkJYXV0 aGN0eHQtPnZhbGlkID0gMTsKLSAJCQlkZWJ1ZzJfZigic2V0dGluZyB1cCBhdXRoY3R4dCBmb3Ig JXMiLCB1c2VyKTsKLSAJCX0gZWxzZSB7Ci1AQCAtMzE2LDYgKzM1OSw5IEBACi0gCQkJLyogSW52 YWxpZCB1c2VyLCBmYWtlIHBhc3N3b3JkIGluZm9ybWF0aW9uICovCi0gCQkJYXV0aGN0eHQtPnB3 ID0gZmFrZXB3KCk7Ci0gCQl9Ci0rI2lmZGVmIEdTU0FQSQotKwkJfSAvKiBlbmRpZiBmb3Igc2V0 dGluZyB1c2VybmFtZSBiYXNlZCBvbiBHU1NBUEkgY29udGV4dCAqLwotKyNlbmRpZgotICNpZmRl ZiBVU0VfUEFNCi0gCQlpZiAob3B0aW9ucy51c2VfcGFtKQotIAkJCW1tX3N0YXJ0X3BhbShzc2gp OwotQEAgLTMyMyw2ICszNjksNyBAQAotIAkJc3NoX3BhY2tldF9zZXRfbG9nX3ByZWFtYmxlKHNz aCwgIiVzdXNlciAlcyIsCi0gCQkgICAgYXV0aGN0eHQtPnZhbGlkID8gImF1dGhlbnRpY2F0aW5n ICIgOiAiaW52YWxpZCAiLCB1c2VyKTsKLSAJCXNldHByb2N0aXRsZSgiJXMgW25ldF0iLCBhdXRo Y3R4dC0+dmFsaWQgPyB1c2VyIDogInVua25vd24iKTsKLSsJCWlmIChhdXRoY3R4dC0+YXR0ZW1w dCA9PSAxKSB7Ci0gCQltbV9pbmZvcm1fYXV0aHNlcnYoc2VydmljZSwgc3R5bGUpOwotICNpZmRl ZiBXSVRIX1NFTElOVVgKLSAgICAgICAgICAJbW1faW5mb3JtX2F1dGhyb2xlKHJvbGUpOwotQEAg LTMzMyw5ICszODAsMTAgQEAKLSAJCWlmIChhdXRoMl9zZXR1cF9tZXRob2RzX2xpc3RzKGF1dGhj dHh0KSAhPSAwKQotIAkJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsCi0gCQkJICAgICJubyBh dXRoZW50aWNhdGlvbiBtZXRob2RzIGVuYWJsZWQiKTsKLS0JfSBlbHNlIGlmIChzdHJjbXAodXNl ciwgYXV0aGN0eHQtPnVzZXIpICE9IDAgfHwKLS0JICAgIHN0cmNtcChzZXJ2aWNlLCBhdXRoY3R4 dC0+c2VydmljZSkgIT0gMCkgewotLQkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwgIkNoYW5n ZSBvZiB1c2VybmFtZSBvciBzZXJ2aWNlICIKLSsJCX0KLSsJfQotKwlpZiAoc3RyY21wKHNlcnZp Y2UsIGF1dGhjdHh0LT5zZXJ2aWNlKSAhPSAwKSB7Ci0rCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qo c3NoLCAiQ2hhbmdlIG9mIHNlcnZpY2UgIgotIAkJICAgICJub3QgYWxsb3dlZDogKCVzLCVzKSAt PiAoJXMsJXMpIiwKLSAJCSAgICBhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQtPnNlcnZpY2UsIHVz ZXIsIHNlcnZpY2UpOwotIAl9Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoMi1n c3MuYyBvcGVuc3NoLTEwLjNwMS9hdXRoMi1nc3MuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcv YXV0aDItZ3NzLmMJMjAyNi0wNy0wMSAwOTozODowMC4zMTg0ODEwMDIgKzAyMDAKLSsrKyBvcGVu c3NoLTEwLjNwMS9hdXRoMi1nc3MuYwkyMDI2LTA3LTAxIDEwOjU2OjUxLjQ3OTcwODQ1MyArMDIw MAotQEAgLTU0LDYgKzU0LDcgQEAKLSBleHRlcm4gc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1ldGhv ZGNmZ19nc3NrZXlleDsKLSBleHRlcm4gc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1ldGhvZGNmZ19n c3NhcGk7Ci0gCi0rc3RhdGljIHZvaWQgc3NoX2dzc2FwaV91c2VyYXV0aF9lcnJvcihHc3NjdHh0 ICpjdHh0LCBzdHJ1Y3Qgc3NoICpzc2gpOwotIHN0YXRpYyBpbnQgaW5wdXRfZ3NzYXBpX3Rva2Vu KGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpOwotIHN0YXRpYyBpbnQg aW5wdXRfZ3NzYXBpX21pYyhpbnQgdHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3No KTsKLSBzdGF0aWMgaW50IGlucHV0X2dzc2FwaV9leGNoYW5nZV9jb21wbGV0ZShpbnQgdHlwZSwg dWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKTsKLUBAIC02Nyw4ICs2OCw4IEBACi0gewot IAlBdXRoY3R4dCAqYXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OwotIAlpbnQgciwgYXV0aGVudGlj YXRlZCA9IDA7Ci0tCXN0cnVjdCBzc2hidWYgKmIgPSBOVUxMOwotLQlnc3NfYnVmZmVyX2Rlc2Mg bWljLCBnc3NidWY7Ci0rCXN0cnVjdCBzc2hidWYgKmIgPSBOVUxMLCAqYjIgPSBOVUxMOwotKwln c3NfYnVmZmVyX2Rlc2MgbWljLCBnc3NidWYsIGdzc2J1ZjI7Ci0gCXVfY2hhciAqcDsKLSAJc2l6 ZV90IGxlbjsKLSAKLUBAIC03OSw2ICs4MCw5IEBACi0gCWlmICgoYiA9IHNzaGJ1Zl9uZXcoKSkg PT0gTlVMTCkKLSAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0gCi0rCWlmICgoYjIg PSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIp OwotKwotIAltaWMudmFsdWUgPSBwOwotIAltaWMubGVuZ3RoID0gbGVuOwotIAotQEAgLTg5LDEz ICs5MywyOCBAQAotIAkJZmF0YWxfZigic3NoYnVmX211dGFibGVfcHRyIGZhaWxlZCIpOwotIAln c3NidWYubGVuZ3RoID0gc3NoYnVmX2xlbihiKTsKLSAKLSsJLyogY2xpZW50IG1heSBoYXZlIHVz ZWQgZW1wdHkgdXNlcm5hbWUgdG8gZGV0ZXJtaW5lIHRhcmdldAotKwkgICBuYW1lIGZyb20gR1NT QVBJIGNvbnRleHQgKi8KLSsJc3NoX2dzc2FwaV9idWlsZG1pYyhiMiwgIiIsIGF1dGhjdHh0LT5z ZXJ2aWNlLCAiZ3NzYXBpLWtleWV4IiwKLSsJICAgIHNzaC0+a2V4LT5zZXNzaW9uX2lkKTsKLSsK LSsJaWYgKChnc3NidWYyLnZhbHVlID0gc3NoYnVmX211dGFibGVfcHRyKGIyKSkgPT0gTlVMTCkK LSsJCWZhdGFsX2YoInNzaGJ1Zl9tdXRhYmxlX3B0ciBmYWlsZWQiKTsKLSsJZ3NzYnVmMi5sZW5n dGggPSBzc2hidWZfbGVuKGIyKTsKLSsKLSAJLyogZ3NzX2tleF9jb250ZXh0IGlzIE5VTEwgd2l0 aCBwcml2c2VwLCBzbyB3ZSBjYW4ndCBjaGVjayBpdCBoZXJlICovCi0gCWlmICghR1NTX0VSUk9S KG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzX2tleF9jb250ZXh0LAotLQkgICAgJmdzc2J1Ziwg Jm1pYykpKQotLQkJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0 LT51c2VyLAotLQkJICAgIGF1dGhjdHh0LT5wdywgMSk7Ci0rCSAgICAmZ3NzYnVmLCAmbWljKSkg fHwKLSsJICAgICFHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9jaGVja21pYyhnc3Nfa2V4X2NvbnRl eHQsCi0rCSAgICAmZ3NzYnVmMiwgJm1pYykpKSB7Ci0rCQlpZiAoYXV0aGN0eHQtPnZhbGlkICYm IGF1dGhjdHh0LT51c2VyICYmIGF1dGhjdHh0LT51c2VyWzBdKSB7Ci0rCQkJYXV0aGVudGljYXRl ZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLAotKwkJCSAgICBhdXRoY3R4 dC0+cHcsIDEpOwotKwkJfQotKwl9Ci0gCi0gCXNzaGJ1Zl9mcmVlKGIpOwotKwlzc2hidWZfZnJl ZShiMik7Ci0gCWZyZWUobWljLnZhbHVlKTsKLSAKLSAJcmV0dXJuIChhdXRoZW50aWNhdGVkKTsK LUBAIC0xNTQsNyArMTczLDkgQEAKLSAJCXJldHVybiAoMCk7Ci0gCX0KLSAKLS0JaWYgKCFhdXRo Y3R4dC0+dmFsaWQgfHwgYXV0aGN0eHQtPnVzZXIgPT0gTlVMTCkgewotKwkvKiBhdXRoY3R4dC0+ dmFsaWQgbWF5IGJlIDAgaWYgd2UgaGF2ZW4ndCB5ZXQgZGV0ZXJtaW5lZAotKwkgICB1c2VybmFt ZSBmcm9tIGdzc2FwaSBjb250ZXh0LiAqLwotKwlpZiAoYXV0aGN0eHQtPnVzZXIgPT0gTlVMTCkg ewotIAkJZGVidWcyX2YoImRpc2FibGVkIGJlY2F1c2Ugb2YgaW52YWxpZCB1c2VyIik7Ci0gCQlm cmVlKGRvaWQpOwotIAkJcmV0dXJuICgwKTsKLUBAIC0xOTIsNyArMjEzLDcgQEAKLSAJR3NzY3R4 dCAqZ3NzY3R4dDsKLSAJZ3NzX2J1ZmZlcl9kZXNjIHNlbmRfdG9rID0gR1NTX0NfRU1QVFlfQlVG RkVSOwotIAlnc3NfYnVmZmVyX2Rlc2MgcmVjdl90b2s7Ci0tCU9NX3VpbnQzMiBtYWpfc3RhdHVz LCBtaW5fc3RhdHVzLCBmbGFnczsKLSsJT01fdWludDMyIG1hal9zdGF0dXMsIG1pbl9zdGF0dXMs IGZsYWdzID0gMDsKLSAJdV9jaGFyICpwOwotIAlzaXplX3QgbGVuOwotIAlpbnQgcjsKLUBAIC0y MTMsNiArMjM0LDcgQEAKLSAJZnJlZShwKTsKLSAKLSAJaWYgKEdTU19FUlJPUihtYWpfc3RhdHVz KSkgewotKwkJc3NoX2dzc2FwaV91c2VyYXV0aF9lcnJvcihnc3NjdHh0LCBzc2gpOwotIAkJaWYg KHNlbmRfdG9rLmxlbmd0aCAhPSAwKSB7Ci0gCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwK LSAJCQkgICAgU1NIMl9NU0dfVVNFUkFVVEhfR1NTQVBJX0VSUlRPSykpICE9IDAgfHwKLUBAIC0y ODcsNiArMzA5LDM0IEBACi0gCXJldHVybiAwOwotIH0KLSAKLStzdGF0aWMgdm9pZAotK2dzc2Fw aV9zZXRfdXNlcm5hbWUoc3RydWN0IHNzaCAqc3NoKQotK3sKLSsJQXV0aGN0eHQgKmF1dGhjdHh0 ID0gc3NoLT5hdXRoY3R4dDsKLSsJY2hhciAqbG5hbWUgPSBOVUxMOwotKwotKwlpZiAoKGF1dGhj dHh0LT51c2VyID09IE5VTEwpIHx8IChhdXRoY3R4dC0+dXNlclswXSA9PSAnXDAnKSkgewotKwkJ bW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUoJmxuYW1lKTsKLSsJCWlmIChsbmFtZSAmJiBsbmFtZVsw XSAhPSAnXDAnKSB7Ci0rCQkJaWYgKGF1dGhjdHh0LT51c2VyKSBmcmVlKGF1dGhjdHh0LT51c2Vy KTsKLSsJCQlhdXRoY3R4dC0+dXNlciA9IGxuYW1lOwotKwkJCWRlYnVnKCJzZXQgdXNlcm5hbWUg dG8gJXMgZnJvbSBnc3NhcGkgY29udGV4dCIsIGxuYW1lKTsKLSsJCQlhdXRoY3R4dC0+cHcgPSBt bV9nZXRwd25hbWFsbG93KHNzaCwgYXV0aGN0eHQtPnVzZXIpOwotKwkJCWlmIChhdXRoY3R4dC0+ cHcpIHsKLSsJCQkJYXV0aGN0eHQtPnZhbGlkID0gMTsKLSsjaWZkZWYgVVNFX1BBTQotKwkJCQlp ZiAob3B0aW9ucy51c2VfcGFtKQotKwkJCQkJbW1fc3RhcnRfcGFtKHNzaCk7Ci0rI2VuZGlmCi0r CQkJfQotKwkJfSBlbHNlIHsKLSsJCQlkZWJ1ZygiZmFpbGVkIHRvIHNldCB1c2VybmFtZSBmcm9t IGdzc2FwaSBjb250ZXh0Iik7Ci0rCQkJc3NoX3BhY2tldF9zZW5kX2RlYnVnKHNzaCwKLSsJCQkg ICAgImZhaWxlZCB0byBzZXQgdXNlcm5hbWUgZnJvbSBnc3NhcGkgY29udGV4dCIpOwotKwkJfQot Kwl9Ci0rfQotKwotIC8qCi0gICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY2xpZW50IHRoaW5r cyB3ZSd2ZSBjb21wbGV0ZWQgYXV0aGVudGljYXRpb24uCi0gICogSXQgc2hvdWxkIG9ubHkgYmUg ZW5hYmxlZCBpbiB0aGUgZGlzcGF0Y2ggaGFuZGxlciBieSB0aGUgZnVuY3Rpb24gYWJvdmUsCi1A QCAtMjk3LDExICszNDcsMTMgQEAKLSBpbnB1dF9nc3NhcGlfZXhjaGFuZ2VfY29tcGxldGUoaW50 IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKLSB7Ci0gCUF1dGhjdHh0ICph dXRoY3R4dCA9IHNzaC0+YXV0aGN0eHQ7Ci0tCWludCByLCBhdXRoZW50aWNhdGVkOwotKwlpbnQg ciwgYXV0aGVudGljYXRlZCA9IDA7Ci0gCi0gCWlmIChhdXRoY3R4dCA9PSBOVUxMKQotIAkJZmF0 YWwoIk5vIGF1dGhlbnRpY2F0aW9uIG9yIEdTU0FQSSBjb250ZXh0Iik7Ci0gCi0rCWdzc2FwaV9z ZXRfdXNlcm5hbWUoc3NoKTsKLSsKLSAJLyoKLSAJICogV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0 aGUgc3RhdHVzLCBiZWNhdXNlIHdlJ3JlIG9ubHkgZW5hYmxlZCBpbgotIAkgKiB0aGUgZGlzcGF0 Y2hlciBvbmNlIHRoZSBleGNoYW5nZSBpcyBjb21wbGV0ZQotQEAgLTMxMCw3ICszNjIsMTEgQEAK LSAJaWYgKChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0gMCkKLSAJCWZhdGFsX2ZyKHIsICJw YXJzZSBwYWNrZXQiKTsKLSAKLS0gCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJv ayhhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQtPnB3LCAxKTsKLSsJLyogdXNlciBzaG91bGQgYmUg c2V0IGlmIHZhbGlkIGJ1dCB3ZSBkb3VibGUtY2hlY2sgaGVyZSAqLwotKwlpZiAoYXV0aGN0eHQt PnZhbGlkICYmIGF1dGhjdHh0LT51c2VyICYmIGF1dGhjdHh0LT51c2VyWzBdKSB7Ci0rCQlhdXRo ZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsCi0rCQkgICAg YXV0aGN0eHQtPnB3LCAxKTsKLSsJfQotIAotIAlhdXRoY3R4dC0+cG9zdHBvbmVkID0gMDsKLSAJ c3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX1VTRVJBVVRIX0dTU0FQSV9UT0tFTiwgTlVM TCk7Ci1AQCAtMzU3LDEwICs0MTMsMTYgQEAKLSAJCWZhdGFsX2YoInNzaGJ1Zl9tdXRhYmxlX3B0 ciBmYWlsZWQiKTsKLSAJZ3NzYnVmLmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYik7Ci0gCi0tCWlmICgh R1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzY3R4dCwgJmdzc2J1ZiwgJm1pYykp KQotLQkJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2Vy LCBhdXRoY3R4dC0+cHcsIDApOwotLQllbHNlCi0rCWdzc2FwaV9zZXRfdXNlcm5hbWUoc3NoKTsK LSsKLSsJaWYgKCFHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9jaGVja21pYyhnc3NjdHh0LCAmZ3Nz YnVmLCAmbWljKSkpIHsKLSsJCWlmIChhdXRoY3R4dC0+dmFsaWQgJiYgYXV0aGN0eHQtPnVzZXIg JiYgYXV0aGN0eHQtPnVzZXJbMF0pIHsKLSsJCQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2Fw aV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsCi0rCQkJICAgIGF1dGhjdHh0LT5wdywgMCk7Ci0rCQl9 Ci0rCX0gZWxzZSB7Ci0gCQlsb2dpdCgiR1NTQVBJIE1JQyBjaGVjayBmYWlsZWQiKTsKLSsJfQot IAotIAlzc2hidWZfZnJlZShiKTsKLSAJaWYgKG1pY3VzZXIgIT0gYXV0aGN0eHQtPnVzZXIpCi1A QCAtMzc2LDYgKzQzOCwyNiBAQAotIAlyZXR1cm4gMDsKLSB9Ci0gCi0rc3RhdGljIHZvaWQgc3No X2dzc2FwaV91c2VyYXV0aF9lcnJvcihHc3NjdHh0ICpjdHh0LCBzdHJ1Y3Qgc3NoICpzc2gpIHsK LSsJY2hhciAqZXJyc3RyOwotKwlPTV91aW50MzIgbWFqLCBtaW47Ci0rCWludCByOwotKwotKwll cnJzdHIgPSBtbV9zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoY3R4dCwgJm1haiwgJm1pbik7Ci0rCWlm IChlcnJzdHIpIHsKLSsJCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsCi0rCQkgICAgU1NIMl9N U0dfVVNFUkFVVEhfR1NTQVBJX0VSUk9SKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3NocGt0X3B1 dF91MzIoc3NoLCBtYWopKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gs IG1pbikpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGVycnN0 cikpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsICIiKSkgIT0g MCB8fAotKwkJICAgIChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCB8fAotKwkJICAgIChyID0g c3NoX3BhY2tldF93cml0ZV93YWl0KHNzaCkpICE9IDApCi0rCQkJZmF0YWxfZnIociwgIiIpOwot KwkJZnJlZShlcnJzdHIpOwotKwl9Ci0rfQotKwotIEF1dGhtZXRob2QgbWV0aG9kX2dzc2tleWV4 ID0gewotIAkmbWV0aG9kY2ZnX2dzc2tleWV4LAotIAl1c2VyYXV0aF9nc3NrZXlleCwKLWRpZmYg LU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2F1dGguYyBvcGVuc3NoLTEwLjNwMS9hdXRoLmMKLS0t LSBvcGVuc3NoLTEwLjNwMS5vcmlnL2F1dGguYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjYyMTQ0OTEz MyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2F1dGguYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU2 ODU2NTExMSArMDIwMAotQEAgLTI5Niw3ICsyOTYsOCBAQAotIAkgICAgbWV0aG9kLAotIAkgICAg c3VibWV0aG9kICE9IE5VTEwgPyAiLyIgOiAiIiwgc3VibWV0aG9kID09IE5VTEwgPyAiIiA6IHN1 Ym1ldGhvZCwKLSAJICAgIGF1dGhjdHh0LT52YWxpZCA/ICIiIDogImludmFsaWQgdXNlciAiLAot LQkgICAgYXV0aGN0eHQtPnVzZXIsCi0rCSAgICAoYXV0aGN0eHQtPnVzZXIgJiYgYXV0aGN0eHQt PnVzZXJbMF0pID8KLSsJCWF1dGhjdHh0LT51c2VyIDogInVua25vd24iLAotIAkgICAgc3NoX3Jl bW90ZV9pcGFkZHIoc3NoKSwKLSAJICAgIHNzaF9yZW1vdGVfcG9ydChzc2gpLAotIAkgICAgZXh0 cmEgIT0gTlVMTCA/ICI6ICIgOiAiIiwKLUBAIC00ODgsMTMgKzQ4OSwxOCBAQAotICNlbmRpZgot IAotIAlwdyA9IGdldHB3bmFtKHVzZXIpOwotKyNpZmRlZiBVU0VfUEFNCi0rCWlmIChvcHRpb25z LnVzZV9wYW0gJiYgb3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlICYmIHB3ID09IE5VTEwp Ci0rCQlwdyA9IHNzaHBhbV9nZXRwdyh1c2VyKTsKLSsjZW5kaWYKLSAKLSAjaWYgZGVmaW5lZChf QUlYKSAmJiBkZWZpbmVkKEhBVkVfU0VUQVVUSERCKQotIAlhaXhfcmVzdG9yZWF1dGhkYigpOwot ICNlbmRpZgotIAlpZiAocHcgPT0gTlVMTCkgewotIAkJbG9naXQoIkludmFsaWQgdXNlciAlLjEw MHMgZnJvbSAlLjEwMHMgcG9ydCAlZCIsCi0tCQkgICAgdXNlciwgc3NoX3JlbW90ZV9pcGFkZHIo c3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCkpOwotKwkJICAgICh1c2VyICYmIHVzZXJbMF0pID8g dXNlciA6ICJ1bmtub3duIiwKLSsJCSAgICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVt b3RlX3BvcnQoc3NoKSk7Ci0gI2lmZGVmIENVU1RPTV9GQUlMRURfTE9HSU4KLSAJCXJlY29yZF9m YWlsZWRfbG9naW4oc3NoLCB1c2VyLAotIAkJICAgIGF1dGhfZ2V0X2Nhbm9uaWNhbF9ob3N0bmFt ZShzc2gsIG9wdGlvbnMudXNlX2RucyksICJzc2giKTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNw MS5vcmlnL2F1dGguaCBvcGVuc3NoLTEwLjNwMS9hdXRoLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL2F1dGguaAkyMDI2LTA3LTAxIDA5OjM4OjAwLjYyMTU1MTYxOSArMDIwMAotKysrIG9wZW5z c2gtMTAuM3AxL2F1dGguaAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU2OTY0ODQ5OCArMDIwMAotQEAg LTg1LDYgKzg1LDggQEAKLSAJa3JiNV9wcmluY2lwYWwJIGtyYjVfdXNlcjsKLSAJY2hhcgkJKmty YjVfdGlja2V0X2ZpbGU7Ci0gCWNoYXIJCSprcmI1X2NjbmFtZTsKLSsjZW5kaWYKLSsjaWZkZWYg R1NTQVBJCi0gCWludAkJIGtyYjVfc2V0X2VudjsKLSAjZW5kaWYKLSAJc3RydWN0IHNzaGJ1Zgkq bG9naW5tc2c7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoLXBhbS5jIG9wZW5z c2gtMTAuM3AxL2F1dGgtcGFtLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2F1dGgtcGFtLmMJ MjAyNi0wNy0wMSAwOTozODowMC44NTcxMjAwNjMgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9h dXRoLXBhbS5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTcwMzk3MzI2ICswMjAwCi1AQCAtMjU0LDYg KzI1NCw3IEBACi0gc3RhdGljIGNvbnN0IGNoYXIgKnNzaHBhbV9wYXNzd29yZCA9IE5VTEw7Ci0g c3RhdGljIGNoYXIgKnNzaHBhbV9yaG9zdCA9IE5VTEw7Ci0gc3RhdGljIGNoYXIgKnNzaHBhbV9s YWRkciA9IE5VTEw7Ci0rc3RhdGljIHN0cnVjdCBzc2ggKnNzaHBhbV9zc2ggPSBOVUxMOwotIAot IC8qIFNvbWUgUEFNIGltcGxlbWVudGF0aW9ucyBkb24ndCBpbXBsZW1lbnQgdGhpcyAqLwotICNp Zm5kZWYgSEFWRV9QQU1fR0VURU5WTElTVAotQEAgLTI3Nyw2ICsyNzgsNTYgQEAKLSB9Ci0gI2Vu ZGlmIC8qIEhBVkVfUEFNX1BVVEVOViAqLwotIAotK3N0cnVjdCBwYXNzd2QgKgotK3NzaHBhbV9n ZXRwdyhjb25zdCBjaGFyICp1c2VyKQotK3sKLSsJc3RydWN0IHBhc3N3ZCAqcHc7Ci0rCi0rCWlm ICgocHcgPSBnZXRwd25hbSh1c2VyKSkgIT0gTlVMTCkKLSsJCXJldHVybihwdyk7Ci0rCi0rCWRl YnVnKCJQQU06IGZha2luZyBwYXNzd2Qgc3RydWN0IGZvciB1c2VyICclLjEwMHMnIiwgdXNlcik7 Ci0rCWlmICgocHcgPSBnZXRwd25hbShTU0hfUFJJVlNFUF9VU0VSKSkgPT0gTlVMTCkKLSsJCXJl dHVybiBOVUxMOwotKwlwdy0+cHdfbmFtZSA9IHhzdHJkdXAodXNlcik7CS8qIFhYWCBsZWFrICov Ci0rCXB3LT5wd19zaGVsbCA9ICIvYmluL3RydWUiOwotKwlwdy0+cHdfZ2Vjb3MgPSAic3NoZCBm YWtlIFBBTSB1c2VyIjsKLSsJcmV0dXJuIChwdyk7Ci0rfQotKwotK3ZvaWQKLStzc2hwYW1fY2hl Y2tfdXNlcmNoYW5nZWQodm9pZCkKLSt7Ci0rCWludCBzc2hwYW1fZXJyOwotKwlzdHJ1Y3QgcGFz c3dkICpwdzsKLSsJY29uc3QgY2hhciAqdXNlcjsKLSsKLSsJZGVidWcoInNzaHBhbV9jaGVja191 c2VyY2hhbmdlZCIpOwotKwlzc2hwYW1fZXJyID0gcGFtX2dldF9pdGVtKHNzaHBhbV9oYW5kbGUs IFBBTV9VU0VSLAotKwkJCQkgIChzc2hwYW1fY29uc3Qgdm9pZCAqKikmdXNlcik7Ci0rCWlmIChz c2hwYW1fZXJyICE9IFBBTV9TVUNDRVNTKQotKwkJZmF0YWwoIlBBTTogY291bGQgbm90IGdldCBQ QU1fVVNFUjogJXMiLAotKwkJICAgIHBhbV9zdHJlcnJvcihzc2hwYW1faGFuZGxlLCBzc2hwYW1f ZXJyKSk7Ci0rCWRlYnVnKCJzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQ6IHVzZXIgd2FzICclLjEw MHMnIiwKLSsJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3X25hbWUpOwotKwlpZiAoc3RyY21w KHVzZXIsIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3X25hbWUpICE9IDApIHsKLSsJCWRlYnVnKCJQ QU06IHVzZXIgbWFwcGVkIGZyb20gJyUuMTAwcycgdG8gJyUuMTAwcyciLAotKwkJICAgIHNzaHBh bV9hdXRoY3R4dC0+cHctPnB3X25hbWUsIHVzZXIpOwotKwkJaWYgKChwdyA9IGdldHB3bmFtKHVz ZXIpKSA9PSBOVUxMKQotKwkJCWZhdGFsKCJQQU06IGNvdWxkIG5vdCBnZXQgcGFzc3dkIGVudHJ5 IGZvciB1c2VyICIKLSsJCQkgICAgIiclLjEwMHMnIHByb3ZpZGVkIGJ5IFBBTV9VU0VSIiwgdXNl cik7Ci0rCQlwd2ZyZWUoc3NocGFtX2F1dGhjdHh0LT5wdyk7Ci0rCQlzc2hwYW1fYXV0aGN0eHQt PnB3ID0gcHdjb3B5KHB3KTsKLSsJCXNzaHBhbV9hdXRoY3R4dC0+dmFsaWQgPSBhbGxvd2VkX3Vz ZXIoc3NocGFtX3NzaCwgcHcpOwotKwkJZnJlZShzc2hwYW1fYXV0aGN0eHQtPnVzZXIpOwotKwkJ c3NocGFtX2F1dGhjdHh0LT51c2VyID0geHN0cmR1cCh1c2VyKTsKLSsJCWRlYnVnKCJQQU06IHVz ZXIgJyUuMTAwcycgbm93ICVzdmFsaWQiLCB1c2VyLAotKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+ dmFsaWQgPyAiIiA6ICJpbiIpOwotKwl9Ci0rCWRlYnVnKCJzc2hwYW1fY2hlY2tfdXNlcmNoYW5n ZWQ6IHVzZXIgaXMgJyUuMTAwcyciLAotKwkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFt ZSk7Ci0rfQotKwotIHN0YXRpYyB2b2lkCi0gc3NocGFtX3Bhc3N3b3JkX2NoYW5nZV9yZXF1aXJl ZChpbnQgcmVxZCkKLSB7Ci1AQCAtMzA4LDcgKzM1OSw3IEBACi0gc3RhdGljIHZvaWQKLSBpbXBv cnRfZW52aXJvbm1lbnRzKHN0cnVjdCBzc2hidWYgKmIpCi0gewotLQljaGFyICplbnY7Ci0rCWNo YXIgKmVudiwgKnVzZXI7Ci0gCXVfaW50IG4sIGksIG51bV9lbnY7Ci0gCWludCByOwotIAotQEAg LTMyNCw2ICszNzUsMTkgQEAKLSAJaWYgKChyID0gc3NoYnVmX2dldF91MzIoYiwgJm4pKSAhPSAw KQotIAkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotIAlzc2hwYW1fcGFzc3dvcmRfY2hh bmdlX3JlcXVpcmVkKG4gIT0gMCk7Ci0rCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFu Z2UpIHsKLSsJCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhiLCAmdXNlciwgTlVMTCkpICE9 IDApCi0rCQkJZmF0YWwoIiVzOiBidWZmZXIgZXJyb3I6ICVzIiwgX19mdW5jX18sIHNzaF9lcnIo cikpOwotKwkJZGVidWcoIlBBTTogdXNlciBpcyAnJS4xMDBzJyIsCi0rCQkgICAgc3NocGFtX2F1 dGhjdHh0LT5wdy0+cHdfbmFtZSk7Ci0rCQlkZWJ1ZygiUEFNOiBnb3QgdXNlcm5hbWUgJyUuMTAw cycgZnJvbSB0aHJlYWQiLCB1c2VyKTsKLSsJCWlmICgoc3NocGFtX2VyciA9IHBhbV9zZXRfaXRl bShzc2hwYW1faGFuZGxlLCBQQU1fVVNFUiwgdXNlcikpCi0rCQkgICAgIT0gUEFNX1NVQ0NFU1Mp Ci0rCQkJZmF0YWwoIlBBTTogZmFpbGVkIHRvIHNldCBQQU1fVVNFUjogJXMiLAotKwkJCSAgICBw YW1fc3RyZXJyb3Ioc3NocGFtX2hhbmRsZSwgc3NocGFtX2VycikpOwotKwkJcHdmcmVlKHNzaHBh bV9hdXRoY3R4dC0+cHcpOwotKwkJc3NocGFtX2F1dGhjdHh0LT5wdyA9IHB3Y29weShzc2hwYW1f Z2V0cHcodXNlcikpOwotKwl9Ci0gCi0gCS8qIEltcG9ydCBlbnZpcm9ubWVudCBmcm9tIHN1YnBy b2Nlc3MgKi8KLSAJaWYgKChyID0gc3NoYnVmX2dldF91MzIoYiwgJm51bV9lbnYpKSAhPSAwKQot QEAgLTUzNiw2ICs2MDAsMTMgQEAKLSAJaWYgKChzc2hwYW1fZXJyID0gY2hlY2tfcGFtX3VzZXIo c3NocGFtX2F1dGhjdHh0KSkgIT0gUEFNX1NVQ0NFU1MpCi0gCQlnb3RvIGF1dGhfZmFpbDsKLSAK LSsJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSkgewotKwkJZGVidWcoInNzaHBh bV90aHJlYWQ6IHVzZXIgaXMgJyUuMTAwcyciLAotKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHct PnB3X25hbWUpOwotKwkJc3NocGFtX2NoZWNrX3VzZXJjaGFuZ2VkKCk7Ci0rCQlkZWJ1Zygic3No cGFtX3RocmVhZDogdXNlciBpcyAnJS4xMDBzJyIsCi0rCQkgICAgc3NocGFtX2F1dGhjdHh0LT5w dy0+cHdfbmFtZSk7Ci0rCX0KLSAJaWYgKCFkb19wYW1fYWNjb3VudCgpKSB7Ci0gCQkvKiBQcmVz ZXJ2ZSBQQU1fUEVSTV9ERU5JRUQgYW5kIFBBTV9VU0VSX1VOS05PV04uCi0gCQkgKiBCYWNrd2Fy ZCBjb21wYXRpYmlsaXR5IGZvciBvdGhlciBlcnJvcnMuICovCi1AQCAtNTYwLDYgKzYzMSwxMyBA QAotIAlpZiAoKHIgPSBzc2hidWZfcHV0X3UzMihidWZmZXIsIHNzaHBhbV9hY2NvdW50X3N0YXR1 cykpICE9IDAgfHwKLSAJICAgIChyID0gc3NoYnVmX3B1dF91MzIoYnVmZmVyLCBzc2hwYW1fYXV0 aGN0eHQtPmZvcmNlX3B3Y2hhbmdlKSkgIT0gMCkKLSAJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJy b3IiKTsKLSsJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSkgewotKwkJZGVidWco InNzaHBhbV90aHJlYWQ6IHVzZXIgaXMgJyUuMTAwcyciLAotKwkJICAgIHNzaHBhbV9hdXRoY3R4 dC0+cHctPnB3X25hbWUpOwotKwkJaWYgKChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKGJ1ZmZlciwK LSsJCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKSkgIT0gMCkKLSsJCQlmYXRhbCgi JXM6IGJ1ZmZlciBlcnJvcjogJXMiLCBfX2Z1bmNfXywgc3NoX2VycihyKSk7Ci0rCX0KLSAKLSAJ LyogRXhwb3J0IGFueSBlbnZpcm9ubWVudCBzdHJpbmdzIHNldCBpbiBjaGlsZCAqLwotIAlmb3Ig KGkgPSAwOyBlbnZpcm9uW2ldICE9IE5VTEw7IGkrKykgewotQEAgLTc0OSw2ICs4MjcsOCBAQAot IAkJICAgIG9wdGlvbnMudXNlX2RucykpOwotIAkJc3NocGFtX2xhZGRyID0gZ2V0X2xvY2FsX2lw YWRkcigKLSAJCSAgICBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX2luKHNzaCkpOwotKwkJLyog U2F2ZSBzbyBhbGxvd2VkX3VzZXIgY2FuIGJlIGNhbGxlZCBsYXRlciAqLwotKwkJc3NocGFtX3Nz aCA9IHNzaDsKLSAJfQotIAlpZiAoc3NocGFtX3Job3N0ICE9IE5VTEwgJiYgc3RyY21wKHNzaHBh bV9yaG9zdCwgIlVOS05PV04iKSAhPSAwKSB7Ci0gCQlkZWJ1ZygiUEFNOiBzZXR0aW5nIFBBTV9S SE9TVCB0byBcIiVzXCIiLCBzc2hwYW1fcmhvc3QpOwotQEAgLTEwODMsNiArMTE2MywxOCBAQAot IAlkZWJ1ZzMoIlBBTTogJXMgcGFtX2FjY3RfbWdtdCA9ICVkICglcykiLCBfX2Z1bmNfXywgc3No cGFtX2VyciwKLSAJICAgIHBhbV9zdHJlcnJvcihzc2hwYW1faGFuZGxlLCBzc2hwYW1fZXJyKSk7 Ci0gCi0rCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsKLSsJCWRlYnVnKCJk b19wYW1fYWNjb3VudDogdXNlciBpcyAnJS4xMDBzJyIsCi0rCQkgICAgc3NocGFtX2F1dGhjdHh0 LT5wdy0+cHdfbmFtZSk7Ci0rCQlzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQoKTsKLSsJCWRlYnVn KCJkb19wYW1fYWNjb3VudDogdXNlciBpcyAnJS4xMDBzJyIsCi0rCQkgICAgc3NocGFtX2F1dGhj dHh0LT5wdy0+cHdfbmFtZSk7Ci0rCQlpZiAoZ2V0cHduYW0oc3NocGFtX2F1dGhjdHh0LT5wdy0+ cHdfbmFtZSkgPT0gTlVMTCkKLSsJCQlmYXRhbCgiUEFNOiBjb21wbGV0ZWQgYXV0aGVudGljYXRp b24gYnV0IFBBTSBhY2NvdW50IGludmFsaWQiKTsKLSsJCWRlYnVnKCJkb19wYW1fYWNjb3VudDog dXNlciBpcyAnJS4xMDBzJyIsCi0rCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7 Ci0rCX0KLSsKLSAJaWYgKHNzaHBhbV9lcnIgIT0gUEFNX1NVQ0NFU1MgJiYgc3NocGFtX2VyciAh PSBQQU1fTkVXX0FVVEhUT0tfUkVRRCkgewotIAkJc3NocGFtX2FjY291bnRfc3RhdHVzID0gMDsK LSAJCXJldHVybiAoc3NocGFtX2FjY291bnRfc3RhdHVzKTsKLUBAIC0xMjkxLDYgKzEzODMsOSBA QAotIAlleHBvc2VfYXV0aGluZm8oX19mdW5jX18pOwotIAotIAlzc2hwYW1fZXJyID0gcGFtX2F1 dGhlbnRpY2F0ZShzc2hwYW1faGFuZGxlLCBmbGFncyk7Ci0rCWlmIChvcHRpb25zLnBlcm1pdF9w YW1fdXNlcl9jaGFuZ2UpIHsKLSsJCXNzaHBhbV9jaGVja191c2VyY2hhbmdlZCgpOwotKwl9Ci0g CXNzaHBhbV9wYXNzd29yZCA9IE5VTEw7Ci0gCWZyZWUoZmFrZSk7Ci0gCWlmIChzc2hwYW1fZXJy ID09IFBBTV9TVUNDRVNTKQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvYXV0aC1wYW0u aCBvcGVuc3NoLTEwLjNwMS9hdXRoLXBhbS5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRo LXBhbS5oCTIwMjYtMDctMDEgMDk6Mzg6MDAuMTg0MDQyMzQxICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvYXV0aC1wYW0uaAkyMDI2LTA3LTAxIDEwOjU4OjEwLjA0OTY0NDAyMSArMDIwMAotQEAg LTQ0LDUgKzQ0LDYgQEAKLSB2b2lkIHNzaHBhbV9zZXRfbWF4dHJpZXNfcmVhY2hlZChpbnQpOwot IGludCBpc19wYW1fc2Vzc2lvbl9vcGVuKHZvaWQpOwotIGludCBzc2hwYW1fcHJpdl9rYmRpbnRf YXV0aGRvbmUodm9pZCAqY3R4dHApOwotK3N0cnVjdCBwYXNzd2QgKnNzaHBhbV9nZXRwdyhjb25z dCBjaGFyICopOwotIAotICNlbmRpZiAvKiBVU0VfUEFNICovCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4zcDEub3JpZy9jYW5vaG9zdC5jIG9wZW5zc2gtMTAuM3AxL2Nhbm9ob3N0LmMKLS0tLSBvcGVu c3NoLTEwLjNwMS5vcmlnL2Nhbm9ob3N0LmMJMjAyNi0wNy0wMSAwOTozODowMC4zMTg3MjQ2ODEg KzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9jYW5vaG9zdC5jCTIwMjYtMDctMDEgMTA6Mzk6NDMu NTcxMjk4NjgyICswMjAwCi1AQCAtMTcsNiArMTcsNyBAQAotICNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KLSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotICNpbmNsdWRlIDxzeXMvdW4uaD4KLSsjaW5j bHVkZSA8c3lzL3BhcmFtLmg+ICAgICAgICAgIC8qIGZvciBNQVhIT1NUTkFNRUxFTiAqLwotIAot ICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0gI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotQEAgLTMw MCwzICszMDEsMzMgQEAKLSB7Ci0gCXJldHVybiBnZXRfc29ja19wb3J0KHNvY2ssIDEpOwotIH0K LSsKLSt2b2lkCi0rcmVzb2x2ZV9sb2NhbGhvc3QoY2hhciAqKmhvc3QpCi0rewotKwlzdHJ1Y3Qg aG9zdGVudCAqaG9zdGluZm87Ci0rCi0rCWhvc3RpbmZvID0gZ2V0aG9zdGJ5bmFtZSgqaG9zdCk7 Ci0rCWlmIChob3N0aW5mbyA9PSBOVUxMIHx8IGhvc3RpbmZvLT5oX25hbWUgPT0gTlVMTCkgewot KwkJZGVidWcoImdldGhvc3RieW5hbWUoJXMpIGZhaWxlZCIsICpob3N0KTsKLSsJCXJldHVybjsK LSsJfQotKwlpZiAoaG9zdGluZm8tPmhfYWRkcnR5cGUgPT0gQUZfSU5FVCkgewotKwkJc3RydWN0 IGluX2FkZHIgYWRkcjsKLSsJCWFkZHIgPSAqKHN0cnVjdCBpbl9hZGRyICopKGhvc3RpbmZvLT5o X2FkZHIpOwotKwkJaWYgKG50b2hsKGFkZHIuc19hZGRyKSA9PSBJTkFERFJfTE9PUEJBQ0spIHsK LSsJCQljaGFyIGJ1ZltNQVhIT1NUTkFNRUxFTl07Ci0rCQkJaWYgKGdldGhvc3RuYW1lKGJ1Ziwg c2l6ZW9mKGJ1ZikpIDwgMCkgewotKwkJCQlkZWJ1ZygiZ2V0aG9zdG5hbWUoKSBmYWlsZWQiKTsK LSsJCQkJcmV0dXJuOwotKwkJCX0KLSsJCQlob3N0aW5mbyA9IGdldGhvc3RieW5hbWUoYnVmKTsK LSsJCQlmcmVlKCpob3N0KTsKLSsJCQlpZiAoaG9zdGluZm8gPT0gTlVMTCB8fCBob3N0aW5mby0+ aF9uYW1lID09IE5VTEwpIHsKLSsJCQkJKmhvc3QgPSB4c3RyZHVwKGJ1Zik7Ci0rCQkJfSBlbHNl IHsKLSsJCQkJKmhvc3QgPSB4c3RyZHVwKGhvc3RpbmZvLT5oX25hbWUpOwotKwkJCX0KLSsJCX0K LSsJfQotK30KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2Nhbm9ob3N0Lmggb3BlbnNz aC0xMC4zcDEvY2Fub2hvc3QuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2Fub2hvc3QuaAky MDI2LTA3LTAxIDA5OjM4OjAwLjMxODc3NzM3OCArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2Nh bm9ob3N0LmgJMjAyNi0wNy0wMSAxMDozOTo0My41NzE2MTk2NTYgKzAyMDAKLUBAIC0yNiw0ICsy Niw2IEBACi0gCi0gI2VuZGlmIC8qIF9DQU5PSE9TVF9IICovCi0gCi0rdm9pZAkJIHJlc29sdmVf bG9jYWxob3N0KGNoYXIgKipob3N0KTsKLSsKLSB2b2lkCQkgaXB2NjRfbm9ybWFsaXNlX21hcHBl ZChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqLCBzb2NrbGVuX3QgKik7Ci1kaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9jb25maWd1cmUuYWMgb3BlbnNzaC0xMC4zcDEvY29uZmlndXJlLmFj Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jb25maWd1cmUuYWMJMjAyNi0wNy0wMSAwOTozODow MC44ODUxMjk5NTkgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9jb25maWd1cmUuYWMJMjAyNi0w Ny0wMSAxMDozOTo0My41NzI1NzA4NjEgKzAyMDAKLUBAIC01MTUzLDYgKzUxNTMsMTQgQEAKLSAJ CQkJQUNfQ0hFQ0tfSEVBREVSKFtnc3NhcGlfa3JiNS5oXSwgLAotIAkJCQkJCVsgQ1BQRkxBR1M9 IiRvbGRDUFAiIF0pCi0gCi0rCQkJCSMgSWYgd2UncmUgdXNpbmcgc29tZSBvdGhlciBHU1NBUEkK LSsJCQkJaWYgdGVzdCAtbiAiJEdTU0FQSSIgOyB0aGVuCi0rCQkJCQlBQ19NU0dfRVJST1IoW1By ZXZpb3VzbHkgY29uZmlndXJlZCBHU1NBUEkgbGlicmFyeSBjb25mbGljdHMgd2l0aCBLZXJiZXJv cyBHU0kuXSkKLSsJCQkJZmkKLSsJCi0rCQkJCWlmIHRlc3QgLXogIiRHU1NBUEkiOyB0aGVuCi0r CQkJCQlHU1NBUEk9IktSQjUiOwotKwkJCQlmaQotIAkJCWZpCi0gCQlmaQotIAkJaWYgdGVzdCAt biAiJHtycGF0aF9vcHR9IiA7IHRoZW4KLUBAIC01MjAxLDYgKzUyMDksNDAgQEAKLSBBQ19TVUJT VChbSzVMSUJTXSkKLSBBQ19TVUJTVChbQ0hBTk5FTExJQlNdKQotIAotKyMgQ2hlY2sgd2hldGhl ciB0aGUgdXNlciB3YW50cyBHU0kgKEdsb2J1cykgc3VwcG9ydAotK2dzaT0ibm8iCi0rQUNfQVJH X1dJVEgoZ3NpLAotKwlbICAtLXdpdGgtZ3NpICAgICAgICAgICAgICBFbmFibGUgR2xvYnVzIEdT SSBhdXRoZW50aWNhdGlvbiBzdXBwb3J0XSwKLSsJWwotKwkJZ3NpPSIkd2l0aHZhbCIKLSsJXQot KykKLSsKLStpZiB0ZXN0ICJ4JGdzaSIgIT0gInhubyIgOyB0aGVuCi0rCSMgR2xvYnVzIEdTU0FQ SSBjb25maWd1cmF0aW9uCi0rCUFDX01TR19DSEVDS0lORyhmb3IgR2xvYnVzIEdTSSkKLSsJQUNf REVGSU5FKEdTSSwgMSwgW0RlZmluZSBpZiB5b3Ugd2FudCBHU0kvR2xvYnVzIGF1dGhlbnRpY2F0 aW9uIHN1cHBvcnQuXSkKLSsKLSsJaWYgdGVzdCAtbiAiJEdTU0FQSSIgOyB0aGVuCi0rCQlBQ19N U0dfRVJST1IoW1ByZXZpb3VzbHkgY29uZmlndXJlZCBHU1NBUEkgbGlicmFyeSBjb25mbGljdHMg d2l0aCBHbG9idXMgR1NJLl0pCi0rCWZpCi0rCi0rCWlmIHRlc3QgLXogIiRHU1NBUEkiIDsgdGhl bgotKwkJR1NTQVBJPSJHU0kiCi0rCWZpCi0rCi0rCUFDX1BBVEhfVE9PTChbUEtHQ09ORklHXSwg W3BrZy1jb25maWddLCBbbm9dKQotKwlpZiB0ZXN0ICJ4JFBLR0NPTkZJRyIgIT0gInhubyI7IHRo ZW4KLSsJCUxJQlM9IiRMSUJTIGAkUEtHQ09ORklHIC0tbGlicyBnbG9idXMtZ3NzLWFzc2lzdCBn bG9idXMtZ3NzYXBpLWdzaSBnbG9idXMtY29tbW9uYCIKLSsJCUNQUEZMQUdTPSIkQ1BQRkxBR1Mg YCRQS0dDT05GSUcgLS1jZmxhZ3MgZ2xvYnVzLWdzcy1hc3Npc3QgZ2xvYnVzLWdzc2FwaS1nc2kg Z2xvYnVzLWNvbW1vbmAiCi0rCWZpCi0rCi0rCUFDX0RFRklORShHU1NBUEkpCi0rCUFDX0RFRklO RShIQVZFX0dTU0FQSV9IKQotKwotKwlBQ19DSEVDS19GVU5DUyhnbG9idXNfZ3NzX2Fzc2lzdF9t YXBfYW5kX2F1dGhvcml6ZSkKLStmaQotKwotICMgTG9va2luZyBmb3IgcHJvZ3JhbXMsIHBhdGhz IGFuZCBmaWxlcwotIAotIFBSSVZTRVBfUEFUSD0vdmFyL2VtcHR5Ci1kaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy9nc3MtZ2Vuci5jIG9wZW5zc2gtMTAuM3AxL2dzcy1nZW5yLmMKLS0tLSBv cGVuc3NoLTEwLjNwMS5vcmlnL2dzcy1nZW5yLmMJMjAyNi0wNy0wMSAwOTozODowMC45MTI4MzE1 MDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9nc3MtZ2Vuci5jCTIwMjYtMDctMDEgMTA6Mzk6 NDMuNTczMzQ2ODg0ICswMjAwCi1AQCAtNDEsNiArNDEsNyBAQAotICNpbmNsdWRlICJzc2hlcnIu aCIKLSAjaW5jbHVkZSAic3NoYnVmLmgiCi0gI2luY2x1ZGUgImxvZy5oIgotKyNpbmNsdWRlICJj YW5vaG9zdC5oIgotICNpbmNsdWRlICJzc2gyLmgiCi0gI2luY2x1ZGUgImNpcGhlci5oIgotICNp bmNsdWRlICJzc2hrZXkuaCIKLUBAIC00MjYsOSArNDI3LDE4IEBACi0gc3NoX2dzc2FwaV9pbXBv cnRfbmFtZShHc3NjdHh0ICpjdHgsIGNvbnN0IGNoYXIgKmhvc3QpCi0gewotIAlnc3NfYnVmZmVy X2Rlc2MgZ3NzYnVmOwotKwljaGFyICp4aG9zdDsKLSAJY2hhciAqdmFsOwotIAotLQl4YXNwcmlu dGYoJnZhbCwgImhvc3RAJXMiLCBob3N0KTsKLSsJLyogTWFrZSBhIGNvcHkgb2YgdGhlIGhvc3Qg bmFtZSwgaW4gY2FzZSBpdCB3YXMgcmV0dXJuZWQgYnkgYQotKwkgKiBwcmV2aW91cyBjYWxsIHRv IGdldGhvc3RieW5hbWUoKS4gKi8KLSsJeGhvc3QgPSB4c3RyZHVwKGhvc3QpOwotKwotKwkvKiBN YWtlIHN1cmUgd2UgaGF2ZSB0aGUgRlFETi4gU29tZSBHU1NBUEkgaW1wbGVtZW50YXRpb25zIGRv bid0IGRvCi0rCSAqIHRoaXMgZm9yIHVzIHRoZW1zZWx2ZXMgKi8KLSsJcmVzb2x2ZV9sb2NhbGhv c3QoJnhob3N0KTsKLSsKLSsJeGFzcHJpbnRmKCZ2YWwsICJob3N0QCVzIiwgeGhvc3QpOwotIAln c3NidWYudmFsdWUgPSB2YWw7Ci0gCWdzc2J1Zi5sZW5ndGggPSBzdHJsZW4oZ3NzYnVmLnZhbHVl KTsKLSAKLUBAIC00MzYsNiArNDQ2LDcgQEAKLSAJICAgICZnc3NidWYsIEdTU19DX05UX0hPU1RC QVNFRF9TRVJWSUNFLCAmY3R4LT5uYW1lKSkpCi0gCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0g Ci0rCWZyZWUoeGhvc3QpOwotIAlmcmVlKGdzc2J1Zi52YWx1ZSk7Ci0gCXJldHVybiAoY3R4LT5t YWpvcik7Ci0gfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLXNlcnYuYyBvcGVu c3NoLTEwLjNwMS9nc3Mtc2Vydi5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9nc3Mtc2Vydi5j CTIwMjYtMDctMDEgMDk6Mzg6MDAuODY4MjE0NzgyICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEv Z3NzLXNlcnYuYwkyMDI2LTA3LTAxIDE0OjA1OjM5LjA0NTY0MDA1OSArMDIwMAotQEAgLTUyLDEw ICs1MiwxMiBAQAotICNpbmNsdWRlICJtb25pdG9yX3dyYXAuaCIKLSAKLSBleHRlcm4gU2VydmVy T3B0aW9ucyBvcHRpb25zOwotK2V4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OwotIAotIHN0 YXRpYyBzc2hfZ3NzYXBpX2NsaWVudCBnc3NhcGlfY2xpZW50ID0KLS0gICAgeyBHU1NfQ19FTVBU WV9CVUZGRVIsIEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfTk9fQ1JFREVOVElBTCwKLS0gICAg R1NTX0NfTk9fTkFNRSwgTlVMTCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCAwLCAw LCBOVUxMLCAwfTsKLSsgICAgeyB7MCwgTlVMTH0sIEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0Nf RU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFMLAotKyAgICAgIEdTU19DX05PX05BTUUs IEdTU19DX05PX05BTUUsIE5VTEwsIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwKLSsg ICAgICBHU1NfQ19OT19DT05URVhULCAwLCAwLCBOVUxMLCAwfTsKLSAKLSBzc2hfZ3NzYXBpX21l Y2ggZ3NzYXBpX251bGxfbWVjaCA9Ci0gICAgIHsgTlVMTCwgTlVMTCwgezAsIE5VTEx9LCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfTsKLUBAIC02MywxNCArNjUsMjYgQEAKLSAjaWZkZWYg S1JCNQotIGV4dGVybiBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2tlcmJlcm9zX21lY2g7Ci0gI2Vu ZGlmCi0rI2lmZGVmIEdTSQotK2V4dGVybiBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNo OwotK2V4dGVybiBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoX21pY3YyOwotKyNlbmRp ZgotIAotIHNzaF9nc3NhcGlfbWVjaCogc3VwcG9ydGVkX21lY2hzW109IHsKLSAjaWZkZWYgS1JC NQotIAkmZ3NzYXBpX2tlcmJlcm9zX21lY2gsCi0gI2VuZGlmCi0rI2lmZGVmIEdTSQotKwkmZ3Nz YXBpX2dzaV9tZWNoX21pY3YyLAotKwkmZ3NzYXBpX2dzaV9tZWNoLAotKyNlbmRpZgotIAkmZ3Nz YXBpX251bGxfbWVjaCwKLSB9OwotIAotKyNpZmRlZiBHU1NfQ19HTE9CVVNfTElNSVRFRF9QUk9Y WV9GTEFHCi0rc3RhdGljIGludCBsaW1pdGVkID0gMDsKLSsjZW5kaWYKLSsKLSAvKgotICAqIHNz aF9nc3NhcGlfc3VwcG9ydGVkX29pZHMoKSBjYW4gY2F1c2Ugc2FuZGJveCB2aW9sYXRpb25zLCBz byBwcmVwYXJlIHRoZQotICAqIGxpc3Qgb2Ygc3VwcG9ydGVkIG1lY2hhbmlzbXMgYmVmb3JlIHBy aXZzZXAgaXMgc2V0IHVwLgotQEAgLTIzMSw2ICsyNDUsMTAgQEAKLSAJICAgICgqZmxhZ3MgJiBH U1NfQ19JTlRFR19GTEFHKSkpICYmIChjdHgtPm1ham9yID09IEdTU19TX0NPTVBMRVRFKSkgewot IAkJaWYgKHNzaF9nc3NhcGlfZ2V0Y2xpZW50KGN0eCwgJmdzc2FwaV9jbGllbnQpKQotIAkJCWZh dGFsKCJDb3VsZG4ndCBjb252ZXJ0IGNsaWVudCBuYW1lIik7Ci0rI2lmZGVmIEdTU19DX0dMT0JV U19MSU1JVEVEX1BST1hZX0ZMQUcKLSsJCWlmIChmbGFncyAmJiAoKmZsYWdzICYgR1NTX0NfR0xP QlVTX0xJTUlURURfUFJPWFlfRkxBRykpCi0rCQkJbGltaXRlZD0xOwotKyNlbmRpZgotIAl9Ci0g Ci0gCXJldHVybiAoc3RhdHVzKTsKLUBAIC0yNTAsNiArMjY4LDIwIEBACi0gCi0gCXRvayA9IGVu YW1lLT52YWx1ZTsKLSAKLSsjaWZkZWYgR1NJIC8qIEdTSSBnc3NfZXhwb3J0X25hbWUoKSBpcyBi cm9rZW4uICovCi0rCWlmICgoKGN0eC0+b2lkLT5sZW5ndGggPT0gZ3NzYXBpX2dzaV9tZWNoLm9p ZC5sZW5ndGgpICYmCi0rCSAgICAgKG1lbWNtcChjdHgtPm9pZC0+ZWxlbWVudHMsIGdzc2FwaV9n c2lfbWVjaC5vaWQuZWxlbWVudHMsCi0rCQkgICAgIGdzc2FwaV9nc2lfbWVjaC5vaWQubGVuZ3Ro KSA9PSAwKSkgfHwKLSsJICAgICgoY3R4LT5vaWQtPmxlbmd0aCA9PSBnc3NhcGlfZ3NpX21lY2hf bWljdjIub2lkLmxlbmd0aCkgJiYKLSsJICAgICAobWVtY21wKGN0eC0+b2lkLT5lbGVtZW50cywg Z3NzYXBpX2dzaV9tZWNoX21pY3YyLm9pZC5lbGVtZW50cywKLSsJCSAgICAgZ3NzYXBpX2dzaV9t ZWNoX21pY3YyLm9pZC5sZW5ndGgpID09IDApKSkgewotKwkJbmFtZS0+bGVuZ3RoID0gZW5hbWUt Pmxlbmd0aDsKLSsJCW5hbWUtPnZhbHVlID0geG1hbGxvYyhlbmFtZS0+bGVuZ3RoKzEpOwotKwkJ bWVtY3B5KG5hbWUtPnZhbHVlLCBlbmFtZS0+dmFsdWUsIGVuYW1lLT5sZW5ndGgpOwotKwkJcmV0 dXJuIEdTU19TX0NPTVBMRVRFOwotKwl9Ci0rI2VuZGlmCi0rCi0gCS8qCi0gCSAqIENoZWNrIHRo YXQgZW5hbWUgaXMgbG9uZyBlbm91Z2ggZm9yIGFsbCBvZiB0aGUgZml4ZWQgbGVuZ3RoCi0gCSAq IGhlYWRlciwgYW5kIHRoYXQgdGhlIGluaXRpYWwgSUQgYnl0ZXMgYXJlIGNvcnJlY3QKLUBAIC0y OTgsNiArMzMwLDcgQEAKLSB9Ci0gCi0gCi0rI2lmZGVmIEtSQjUKLSAvKiBFeHRyYWN0IGF1dGhl bnRpY2F0aW9uIGluZGljYXRvcnMgZnJvbSB0aGUgS2VyYmVyb3MgdGlja2V0LiBBdXRoZW50aWNh dGlvbgotICAqIGluZGljYXRvcnMgYXJlIEdTU0FQSSBuYW1lIGF0dHJpYnV0ZXMgZm9yIHRoZSBu YW1lICJhdXRoLWluZGljYXRvcnMiLgotICAqIE11bHRpcGxlIGluZGljYXRvcnMgbWlnaHQgYmUg cHJlc2VudCBpbiB0aGUgdGlja2V0LgotQEAgLTM4NSw2ICs0MTgsNyBAQAotIAlnc3NfcmVsZWFz ZV9idWZmZXJfc2V0KCZjdHgtPm1pbm9yLCAmYXR0cnMpOwotIAlyZXR1cm4gY3R4LT5tYWpvcjsK LSB9Ci0rI2VuZGlmCi0gCi0gLyogRXh0cmFjdCB0aGUgY2xpZW50IGRldGFpbHMgZnJvbSBhIGdp dmVuIGNvbnRleHQuIFRoaXMgY2FuIG9ubHkgcmVsaWFibHkKLSAgKiBiZSBjYWxsZWQgb25jZSBm b3IgYSBjb250ZXh0ICovCi1AQCAtMzk5LDIxICs0MzMsMjQgQEAKLSAJZ3NzX2J1ZmZlcl9kZXNj IGVuYW1lID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotIAotIAlpZiAob3B0aW9ucy5nc3Nfc3RvcmVf cmVrZXkgJiYgY2xpZW50LT51c2VkICYmIGN0eC0+Y2xpZW50X2NyZWRzKSB7Ci0tCQlpZiAoY2xp ZW50LT5tZWNoLT5vaWQubGVuZ3RoICE9IGN0eC0+b2lkLT5sZW5ndGggfHwKLS0JCSAgICAobWVt Y21wKGNsaWVudC0+bWVjaC0+b2lkLmVsZW1lbnRzLAotKwkJaWYgKGNsaWVudC0+b2lkLmxlbmd0 aCAhPSBjdHgtPm9pZC0+bGVuZ3RoIHx8Ci0rCQkgICAgKG1lbWNtcChjbGllbnQtPm9pZC5lbGVt ZW50cywKLSAJCSAgICAgY3R4LT5vaWQtPmVsZW1lbnRzLCBjdHgtPm9pZC0+bGVuZ3RoKSAhPTAp KSB7Ci0gCQkJZGVidWcoIlJla2V5ZWQgY3JlZGVudGlhbHMgaGF2ZSBkaWZmZXJlbnQgbWVjaGFu aXNtIik7Ci0gCQkJcmV0dXJuIEdTU19TX0NPTVBMRVRFOwotIAkJfQotIAotLQkJaWYgKChjdHgt Pm1ham9yID0gZ3NzX2lucXVpcmVfY3JlZF9ieV9tZWNoKCZjdHgtPm1pbm9yLAotLQkJICAgIGN0 eC0+Y2xpZW50X2NyZWRzLCBjdHgtPm9pZCwgJm5ld19uYW1lLAotKwkJLyogQ2FsbCBnc3NfaW5x dWlyZV9jcmVkIHJhdGhlciB0aGFuIGdzc19pbnF1aXJlX2NyZWRfYnlfbWVjaAotKwkJICAgYmVj YXVzZSBHU0kgZG9lc24ndCBzdXBwb3J0IHRoZSBsYXR0ZXIuIC1qYmFzbmV5ICovCi0rCi0rCQlp ZiAoKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVkKCZjdHgtPm1pbm9yLAotKwkJICAgIGN0 eC0+Y2xpZW50X2NyZWRzLCAmbmV3X25hbWUsCi0gCQkgICAgTlVMTCwgTlVMTCwgTlVMTCkpKSB7 Ci0gCQkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOwotIAkJCXJldHVybiAoY3R4LT5tYWpvcik7Ci0g CQl9Ci0gCi0tCQljdHgtPm1ham9yID0gZ3NzX2NvbXBhcmVfbmFtZSgmY3R4LT5taW5vciwgY2xp ZW50LT5uYW1lLAotKwkJY3R4LT5tYWpvciA9IGdzc19jb21wYXJlX25hbWUoJmN0eC0+bWlub3Is IGNsaWVudC0+Y3JlZF9uYW1lLAotIAkJICAgIG5ld19uYW1lLCAmZXF1YWwpOwotIAotIAkJaWYg KEdTU19FUlJPUihjdHgtPm1ham9yKSkgewotQEAgLTQyOCw5ICs0NjUsOSBAQAotIAotIAkJZGVi dWcoIk1hcmtpbmcgcmVrZXllZCBjcmVkZW50aWFscyBmb3IgZXhwb3J0Iik7Ci0gCi0tCQlnc3Nf cmVsZWFzZV9uYW1lKCZjdHgtPm1pbm9yLCAmY2xpZW50LT5uYW1lKTsKLSsJCWdzc19yZWxlYXNl X25hbWUoJmN0eC0+bWlub3IsICZjbGllbnQtPmNyZWRfbmFtZSk7Ci0gCQlnc3NfcmVsZWFzZV9j cmVkKCZjdHgtPm1pbm9yLCAmY2xpZW50LT5jcmVkcyk7Ci0tCQljbGllbnQtPm5hbWUgPSBuZXdf bmFtZTsKLSsJCWNsaWVudC0+Y3JlZF9uYW1lID0gbmV3X25hbWU7Ci0gCQljbGllbnQtPmNyZWRz ID0gY3R4LT5jbGllbnRfY3JlZHM7Ci0gCQljdHgtPmNsaWVudF9jcmVkcyA9IEdTU19DX05PX0NS RURFTlRJQUw7Ci0gCQljbGllbnQtPnVwZGF0ZWQgPSAxOwotQEAgLTQ0NywxMiArNDg0LDE3IEBA Ci0gCQlpKys7Ci0gCX0KLSAKLSsJaWYgKGNsaWVudC0+b2lkLmVsZW1lbnRzID09IE5VTEwpCi0r CQljbGllbnQtPm9pZCA9ICpjdHgtPm9pZDsKLSAJaWYgKGNsaWVudC0+bWVjaCA9PSBOVUxMKQot IAkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7Ci0gCi0rCS8qIENhbGwgZ3NzX2lucXVpcmVfY3JlZCBy YXRoZXIgdGhhbiBnc3NfaW5xdWlyZV9jcmVkX2J5X21lY2gKLSsJICAgYmVjYXVzZSBHU0kgZG9l c24ndCBzdXBwb3J0IHRoZSBsYXR0ZXIuIC1qYmFzbmV5ICovCi0rCi0gCWlmIChjdHgtPmNsaWVu dF9jcmVkcyAmJgotLQkgICAgKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVkX2J5X21lY2go JmN0eC0+bWlub3IsCi0tCSAgICAgY3R4LT5jbGllbnRfY3JlZHMsIGN0eC0+b2lkLCAmY2xpZW50 LT5uYW1lLCBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKLSsJICAgIChjdHgtPm1ham9yID0gZ3NzX2lu cXVpcmVfY3JlZCgmY3R4LT5taW5vciwKLSsJICAgICBjdHgtPmNsaWVudF9jcmVkcywgJmNsaWVu dC0+Y3JlZF9uYW1lLCBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKLSAJCXNzaF9nc3NhcGlfZXJyb3Io Y3R4KTsKLSAJCXJldHVybiAoY3R4LT5tYWpvcik7Ci0gCX0KLUBAIC00NjksMjUgKzUxMSwzNyBA QAotIAkJcmV0dXJuIChjdHgtPm1ham9yKTsKLSAJfQotIAotLQlpZiAoKGN0eC0+bWFqb3IgPSBz c2hfZ3NzYXBpX3BhcnNlX2VuYW1lKGN0eCwmZW5hbWUsCi0rCWlmICgoY2xpZW50LT5tZWNoLT5v aWQuZWxlbWVudHMgIT0gTlVMTCkgJiYKLSsJICAgIChjdHgtPm1ham9yID0gc3NoX2dzc2FwaV9w YXJzZV9lbmFtZShjdHgsJmVuYW1lLAotIAkgICAgJmNsaWVudC0+ZXhwb3J0ZWRuYW1lKSkpIHsK LSAJCXJldHVybiAoY3R4LT5tYWpvcik7Ci0gCX0KLSAKLSsJaWYgKChjdHgtPm1ham9yID0gZ3Nz X2R1cGxpY2F0ZV9uYW1lKCZjdHgtPm1pbm9yLCBjdHgtPmNsaWVudCwKLSsJICAgICZjbGllbnQt PmN0eF9uYW1lKSkpCi0rCQlyZXR1cm4gY3R4LT5tYWpvcjsKLSsKLSAJZ3NzX3JlbGVhc2VfYnVm ZmVyKCZjdHgtPm1pbm9yLCAmZW5hbWUpOwotKyNpZmRlZiBLUkI1Ci0gCS8qIFJldHJpZXZlIGF1 dGhlbnRpY2F0aW9uIGluZGljYXRvcnMsIGlmIHRoZXkgZXhpc3QgKi8KLSAJaWYgKChjdHgtPm1h am9yID0gc3NoX2dzc2FwaV9nZXRpbmRpY2F0b3JzKGN0eCwKLSAJICAgIGN0eC0+Y2xpZW50LCBj bGllbnQpKSkgewotIAkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOwotIAkJcmV0dXJuIChjdHgtPm1h am9yKTsKLSAJfQotKyNlbmRpZgotIAotIAkvKiBXZSBjYW4ndCBjb3B5IHRoaXMgc3RydWN0dXJl LCBzbyB3ZSBqdXN0IG1vdmUgdGhlIHBvaW50ZXIgdG8gaXQgKi8KLSAJY2xpZW50LT5jcmVkcyA9 IGN0eC0+Y2xpZW50X2NyZWRzOwotIAljdHgtPmNsaWVudF9jcmVkcyA9IEdTU19DX05PX0NSRURF TlRJQUw7Ci0rCi0rCS8qIG5lZWRlZCBmb3IgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRo b3JpemUoKSAqLwotKwljbGllbnQtPmNvbnRleHQgPSBjdHgtPmNvbnRleHQ7Ci0rCi0gCXJldHVy biAoY3R4LT5tYWpvcik7Ci0gfQotIAotKyNpZmRlZiBLUkI1Ci0gLyogUmV0dXJucyBub24temVy byBpZiBLZXJiZXJvcyBjcmVkZW50aWFscyBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQuICovCi0g aW50Ci0gc3NoX2dzc2FwaV9jcmVkZW50aWFsc19zdG9yZWQodm9pZCkKLUBAIC04NDcsMTIgKzkw MSwxOSBAQAotIAotIAl1bnNldGVudigiS1JCNUNDTkFNRSIpOwotIH0KLSsjZW5kaWYKLSAKLSAj aWZuZGVmIEtSQjUKLSAvKiBBcyB1c2VyIC0gY2FsbGVkIG9uIGZhdGFsL2V4aXQ7IGZ1bGwgaW1w bGVtZW50YXRpb24gaW4gZ3NzLXNlcnYta3JiNS5jICovCi0gdm9pZAotIHNzaF9nc3NhcGlfY2xl YW51cF9jcmVkcyh2b2lkKQotIHsKLSsJaWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZmlsZW5hbWUg IT0gTlVMTCkgewotKwkJLyogVW5saW5rIHByb2JhYmx5IGlzbid0IHN1ZmZpY2llbnQgKi8KLSsJ CWRlYnVnKCJyZW1vdmluZyBnc3NhcGkgY3JlZCBmaWxlXCIlc1wiIiwKLSsJCSAgICBnc3NhcGlf Y2xpZW50LnN0b3JlLmZpbGVuYW1lKTsKLSsJCXVubGluayhnc3NhcGlfY2xpZW50LnN0b3JlLmZp bGVuYW1lKTsKLSsJfQotIH0KLSAKLSAvKgotQEAgLTg3NSw2ICs5MzYsMTEgQEAKLSAJfQotIAot IAlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdzc2FwaV9jbGllbnQubWVjaC0+c3RvcmVjcmVk cykgewotKwkJaWYgKG9wdGlvbnMuZ3NzX2NyZWRzX3BhdGgpIHsKLSsJCQlnc3NhcGlfY2xpZW50 LnN0b3JlLmZpbGVuYW1lID0KLSsJCQkgICAgZXhwYW5kX2F1dGhvcml6ZWRfa2V5cyhvcHRpb25z Lmdzc19jcmVkc19wYXRoLAotKwkJCSAgICB0aGVfYXV0aGN0eHQtPnB3KTsKLSsJCX0KLSAJCXJl dHVybiAoKmdzc2FwaV9jbGllbnQubWVjaC0+c3RvcmVjcmVkcykoJmdzc2FwaV9jbGllbnQpOwot IAl9IGVsc2UKLSAJCWRlYnVnKCJzc2hfZ3NzYXBpX3N0b3JlY3JlZHM6IE5vdCBhIEdTU0FQSSBt ZWNoYW5pc20iKTsKLUBAIC05MDgsMTEgKzk3NCwxMyBAQAotIAotIAkodm9pZCkga2V4OyAvKiB1 c2VkIGluIHByaXZpbGVnZSBzZXBhcmF0aW9uICovCi0gCi0tCWlmIChnc3NhcGlfY2xpZW50LmV4 cG9ydGVkbmFtZS5sZW5ndGggPT0gMCB8fAotLQkgICAgZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5h bWUudmFsdWUgPT0gTlVMTCkgewotLQkJZGVidWcoIk5vIHN1aXRhYmxlIGNsaWVudCBkYXRhIik7 Ci0rI2lmZGVmIEdTU19DX0dMT0JVU19MSU1JVEVEX1BST1hZX0ZMQUcKLSsJaWYgKGxpbWl0ZWQg JiYgb3B0aW9ucy5nc2lfYWxsb3dfbGltaXRlZF9wcm94eSAhPSAxKSB7Ci0rCQlkZWJ1ZygibGlt aXRlZCBwcm94eSBub3QgYWNjZXB0YWJsZSBmb3IgcmVtb3RlIGxvZ2luIik7Ci0gCQlyZXR1cm4g MDsKLSAJfQotKyNlbmRpZgotKwotIAlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdzc2FwaV9j bGllbnQubWVjaC0+dXNlcm9rKQotIAkJaWYgKCgqZ3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2sp KCZnc3NhcGlfY2xpZW50LCB1c2VyKSkgewotIAkJCWdzc2FwaV9jbGllbnQudXNlZCA9IDE7Ci1A QCAtOTIzLDYgKzk5MSw3IEBACi0gCQkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZ3NzYXBp X2NsaWVudC5kaXNwbGF5bmFtZSk7Ci0gCQkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZ3Nz YXBpX2NsaWVudC5leHBvcnRlZG5hbWUpOwotIAkJCWdzc19yZWxlYXNlX2NyZWQoJmxtaW4sICZn c3NhcGlfY2xpZW50LmNyZWRzKTsKLSsJCQlnc3NfcmVsZWFzZV9uYW1lKCZsbWluLCAmZ3NzYXBp X2NsaWVudC5jdHhfbmFtZSk7Ci0gCi0gCQkJaWYgKGdzc2FwaV9jbGllbnQuaW5kaWNhdG9ycyAh PSBOVUxMKSB7Ci0gCQkJCWZvciAoaSA9IDA7IGdzc2FwaV9jbGllbnQuaW5kaWNhdG9yc1tpXSAh PSBOVUxMOyBpKyspCi1AQCAtOTM4LDYgKzEwMDcsMjQgQEAKLSAJcmV0dXJuICgwKTsKLSB9Ci0g Ci0rLyogUHJpdmlsZWRnZWQgKi8KLStpbnQKLStzc2hfZ3NzYXBpX2xvY2FsbmFtZShjaGFyICoq dXNlcikKLSt7Ci0rCSp1c2VyID0gTlVMTDsKLSsJaWYgKGdzc2FwaV9jbGllbnQuZGlzcGxheW5h bWUubGVuZ3RoID09IDAgfHwKLSsJICAgIGdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUudmFsdWUg PT0gTlVMTCkgewotKwkJZGVidWcoIk5vIHN1aXRhYmxlIGNsaWVudCBkYXRhIik7Ci0rCQlyZXR1 cm4gKDApOwotKwl9Ci0rCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5t ZWNoLT5sb2NhbG5hbWUpIHsKLSsJCXJldHVybigoKmdzc2FwaV9jbGllbnQubWVjaC0+bG9jYWxu YW1lKSgmZ3NzYXBpX2NsaWVudCx1c2VyKSk7Ci0rCX0gZWxzZSB7Ci0rCQlkZWJ1ZygiVW5rbm93 biBjbGllbnQgYXV0aGVudGljYXRpb24gdHlwZSIpOwotKwl9Ci0rCXJldHVybiAoMCk7Ci0rfQot KwotIC8qIFRoZXNlIGJpdHMgYXJlIG9ubHkgdXNlZCBmb3IgcmVrZXlpbmcuIFRoZSB1bnByaXZp bGVkZ2VkIGNoaWxkIGlzIHJ1bm5pbmcKLSAgKiBhcyB0aGUgdXNlciwgdGhlIG1vbml0b3IgaXMg cm9vdC4KLSAgKgotQEAgLTk2NCw5ICsxMDUxLDExIEBACi0gCXBhbV9oYW5kbGVfdCAqcGFtaCA9 IE5VTEw7Ci0gCXN0cnVjdCBwYW1fY29udiBwYW1jb252ID0ge3NzaF9nc3NhcGlfc2ltcGxlX2Nv bnYsIE5VTEx9OwotIAljaGFyICplbnZzdHI7Ci0rCWNoYXIgKipwOyBjaGFyICoqcHc7Ci0gI2Vu ZGlmCi0gCi0tCWlmIChnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCA9PSBOVUxMKQotKwlpZiAo Z3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSA9PSBOVUxMICYmCi0rCSAgICBnc3NhcGlfY2xp ZW50LnN0b3JlLmVudnZhbCA9PSBOVUxMKQotIAkJcmV0dXJuOwotIAotIAlvayA9IG1tX3NzaF9n c3NhcGlfdXBkYXRlX2NyZWRzKCZnc3NhcGlfY2xpZW50LnN0b3JlKTsKLUBAIC05ODYsNiArMTA3 NSwxOCBAQAotIAlpZiAocmV0KQotIAkJcmV0dXJuOwotIAotKwkvKiBQdXQgc3NoIHBhbSBzdGFj ayBlbnYgdmFyaWFibGVzIGluIHRoaXMgbmV3IHBhbSBzdGFjayBlbnYKLSsJICogVXNpbmcgcGFt LXBraW5pdCwgS1JCNUNDTkFNRSBpcyBzZXQgZHVyaW5nIGRvX3BhbV9zZXNzaW9uCi0rCSAqIHRo aXMgYWRkaXRpb24gZW5hYmxlcyBwYW0tcGtpbml0IHRvIGFjY2VzcyBLUkI1Q0NOQU1FIGlmIHVz ZWQKLSsJICogaW4gc3NoZC1yZWtleSBzdGFjayB0b28KLSsJICovCi0rCXB3ID0gcCA9IGZldGNo X3BhbV9lbnZpcm9ubWVudCgpOwotKwl3aGlsZSAoICpwdyAhPSBOVUxMICkgewotKwkJcGFtX3B1 dGVudihwYW1oLCAqcHcpOwotKwkJcHcrKzsKLSsJfQotKwlmcmVlX3BhbV9lbnZpcm9ubWVudChw KTsKLSsKLSAJeGFzcHJpbnRmKCZlbnZzdHIsICIlcz0lcyIsIGdzc2FwaV9jbGllbnQuc3RvcmUu ZW52dmFyLAotIAkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwpOwotIAotZGlmZiAtTnVy IG9wZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLXNlcnYtZ3NpLmMgb3BlbnNzaC0xMC4zcDEvZ3NzLXNl cnYtZ3NpLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2dzcy1zZXJ2LWdzaS5jCTE5NzAtMDEt MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvZ3NzLXNlcnYt Z3NpLmMJMjAyNi0wNy0wMSAxMDozOTo0My41NzQ0NDg1NzggKzAyMDAKLUBAIC0wLDAgKzEsMzI4 IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMyBTaW1vbiBXaWxraW5zb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S Ci0rICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFIElNUExJRUQgV0FSUkFOVElFUwotKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0rICogSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAot KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSsgKiBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkKLSsgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUCi0rICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0rICogVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg Ki8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsjaWZkZWYgR1NTQVBJCi0rI2lmZGVm IEdTSQotKwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsKLSsjaW5jbHVkZSA8c3RkYXJnLmg+ Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKwotKyNpbmNsdWRlICJ4bWFsbG9jLmgiCi0rI2luY2x1 ZGUgImhvc3RmaWxlLmgiCi0rI2luY2x1ZGUgImF1dGguaCIKLSsjaW5jbHVkZSAibG9nLmgiCi0r I2luY2x1ZGUgIm1pc2MuaCIKLSsjaW5jbHVkZSAic2VydmNvbmYuaCIKLSsjaW5jbHVkZSAic3No LWdzcy5oIgotKwotK2V4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0rCi0rI2luY2x1ZGUg PGdsb2J1c19nc3NfYXNzaXN0Lmg+Ci0rCi0rc3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV91c2Vy b2soc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSk7Ci0rc3RhdGljIGludCBz c2hfZ3NzYXBpX2dzaV9sb2NhbG5hbWUoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAq KnVzZXIpOwotK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkcyhzc2hfZ3NzYXBp X2NsaWVudCAqY2xpZW50KTsKLStzdGF0aWMgaW50IHNzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHNf bWljdjIoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCk7Ci0rc3RhdGljIGludCBzc2hfZ3NzYXBp X2dzaV91cGRhdGVjcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsCi0rICAgIHNzaF9nc3Nh cGlfY2xpZW50ICpjbGllbnQpOwotK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3Jl ZHNfbWljdjIoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlLAotKyAgICBzc2hfZ3NzYXBpX2NsaWVu dCAqY2xpZW50KTsKLSsKLStzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoID0gewotKwki ZFp1SWViTWpnVXFheHZiRjdoRGJBdz09IiwKLSsJIkdTSSIsCi0rCXs5LCAiXHgyQlx4MDZceDAx XHgwNFx4MDFceDlCXHg1MFx4MDFceDAxIn0sCi0rCU5VTEwsCi0rCSZzc2hfZ3NzYXBpX2dzaV91 c2Vyb2ssCi0rCSZzc2hfZ3NzYXBpX2dzaV9sb2NhbG5hbWUsCi0rCSZzc2hfZ3NzYXBpX2dzaV9z dG9yZWNyZWRzLAotKwkmc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHMKLSt9OwotKwotK3NzaF9n c3NhcGlfbWVjaCBnc3NhcGlfZ3NpX21lY2hfbWljdjIgPSB7Ci0rCSJ2ejhKMUU5UHpMcjhiMUsr MHJlbVRnPT0iLAotKwkiR1NJIiwKLSsJezEwLCAiXHgyYlx4MDZceDAxXHgwNFx4MDFceDliXHg1 MFx4MDFceDAxXHgwMSJ9LAotKwlOVUxMLAotKwkmc3NoX2dzc2FwaV9nc2lfdXNlcm9rLAotKwkm c3NoX2dzc2FwaV9nc2lfbG9jYWxuYW1lLAotKwkmc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkc19t aWN2MiwKLSsJJnNzaF9nc3NhcGlfZ3NpX3VwZGF0ZWNyZWRzX21pY3YyCi0rfTsKLSsKLSsvKgot KyAqIENoZWNrIGlmIHRoaXMgdXNlciBpcyBPSyB0byBsb2dpbiB1bmRlciBHU0kuIFVzZXIgaGFz IGJlZW4gYXV0aGVudGljYXRlZAotKyAqIGFzIGlkZW50aXR5IGluIGdsb2JhbCAnY2xpZW50X25h bWUudmFsdWUnIGFuZCBpcyB0cnlpbmcgdG8gbG9nIGluIGFzIHBhc3NlZAotKyAqIHVzZXJuYW1l IGluICduYW1lJy4KLSsgKgotKyAqIFJldHVybnMgbm9uLXplcm8gaWYgdXNlciBpcyBhdXRob3Jp emVkLCAwIG90aGVyd2lzZS4KLSsgKi8KLStzdGF0aWMgaW50Ci0rc3NoX2dzc2FwaV9nc2lfdXNl cm9rKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpCi0rewotKyAgICBpbnQg YXV0aG9yaXplZCA9IDA7Ci0rICAgIGdsb2J1c19yZXN1bHRfdCByZXM7Ci0rI2lmZGVmIEhBVkVf R0xPQlVTX0dTU19BU1NJU1RfTUFQX0FORF9BVVRIT1JJWkUKLSsgICAgY2hhciBsbmFtZVsyNTZd ID0gIiI7Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIEdMT0JVU19HU0lfR1NTX0FTU0lTVF9NT0RVTEUK LSsgICAgaWYgKGdsb2J1c19tb2R1bGVfYWN0aXZhdGUoR0xPQlVTX0dTSV9HU1NfQVNTSVNUX01P RFVMRSkgIT0gMCkgewotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSsv KiB1c2UgbmV3IGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKCkgaW50ZXJmYWNl IGlmIGF2YWlsYWJsZSAqLwotKyNpZmRlZiBIQVZFX0dMT0JVU19HU1NfQVNTSVNUX01BUF9BTkRf QVVUSE9SSVpFCi0rICAgIGRlYnVnKCJjYWxsaW5nIGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRf YXV0aG9yaXplKCkiKTsKLSsgICAgaWYgKEdMT0JVU19TVUNDRVNTICE9Ci0rICAgICAgICAocmVz ID0gZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoY2xpZW50LT5jb250ZXh0LCAi c3NoIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lLCBsbmFtZSwgMjU2KSkpIHsKLSsgICAgICAgIGRlYnVnKCIlcyIsIGdsb2J1c19lcnJv cl9wcmludF9jaGFpbihnbG9idXNfZXJyb3JfZ2V0KHJlcykpKTsKLSsgICAgfSBlbHNlIGlmIChs bmFtZVswXSAmJiBzdHJjbXAobmFtZSwgbG5hbWUpICE9IDApIHsKLSsgICAgICAgIGRlYnVnKCJH U0kgdXNlciBtYXBzIHRvICVzLCBub3QgJXMiLCBsbmFtZSwgbmFtZSk7Ci0rICAgIH0gZWxzZSB7 Ci0rICAgICAgICBhdXRob3JpemVkID0gMTsKLSsgICAgfQotKyNlbHNlCi0rICAgIGRlYnVnKCJj YWxsaW5nIGdsb2J1c19nc3NfYXNzaXN0X3VzZXJvaygpIik7Ci0rICAgIGlmIChHTE9CVVNfU1VD Q0VTUyAhPQotKyAgICAgICAgKHJlcyA9IChnbG9idXNfZ3NzX2Fzc2lzdF91c2Vyb2soY2xpZW50 LT5kaXNwbGF5bmFtZS52YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5hbWUpKSkpIHsKLSsgICAgICAgIGRlYnVnKCIlcyIsIGdsb2J1c19lcnJvcl9wcmlu dF9jaGFpbihnbG9idXNfZXJyb3JfZ2V0KHJlcykpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAg IGF1dGhvcml6ZWQgPSAxOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0rICAgIGxvZ2l0KCJHU0kgdXNl ciAlcyBpcyVzIGF1dGhvcml6ZWQgYXMgdGFyZ2V0IHVzZXIgJXMiLAotKyAgICAgICAgKGNoYXIg KikgY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSwgKGF1dGhvcml6ZWQgPyAiIiA6ICIgbm90Iiks IG5hbWUpOwotKwotKyAgICByZXR1cm4gYXV0aG9yaXplZDsKLSt9Ci0rCi0rLyoKLSsgKiBSZXR1 cm4gdGhlIGxvY2FsIHVzZXJuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgR1NJIGNyZWRlbnRpYWxz LgotKyAqLwotK2ludAotK3NzaF9nc3NhcGlfZ3NpX2xvY2FsbmFtZShzc2hfZ3NzYXBpX2NsaWVu dCAqY2xpZW50LCBjaGFyICoqdXNlcikKLSt7Ci0rICAgIGdsb2J1c19yZXN1bHRfdCByZXM7Ci0r I2lmZGVmIEhBVkVfR0xPQlVTX0dTU19BU1NJU1RfTUFQX0FORF9BVVRIT1JJWkUKLSsgICAgY2hh ciBsbmFtZVsyNTZdID0gIiI7Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIEdMT0JVU19HU0lfR1NTX0FT U0lTVF9NT0RVTEUKLSsgICAgaWYgKGdsb2J1c19tb2R1bGVfYWN0aXZhdGUoR0xPQlVTX0dTSV9H U1NfQVNTSVNUX01PRFVMRSkgIT0gMCkgewotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsj ZW5kaWYKLSsKLSsvKiB1c2UgbmV3IGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXpl KCkgaW50ZXJmYWNlIGlmIGF2YWlsYWJsZSAqLwotKyNpZmRlZiBIQVZFX0dMT0JVU19HU1NfQVNT SVNUX01BUF9BTkRfQVVUSE9SSVpFCi0rICAgIGRlYnVnKCJjYWxsaW5nIGdsb2J1c19nc3NfYXNz aXN0X21hcF9hbmRfYXV0aG9yaXplKCkiKTsKLSsgICAgaWYgKEdMT0JVU19TVUNDRVNTICE9Ci0r ICAgICAgICAocmVzID0gZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoY2xpZW50 LT5jb250ZXh0LCAic3NoIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCBsbmFtZSwgMjU2KSkpIHsKLSsgICAgICAgIGRlYnVnKCIlcyIs IGdsb2J1c19lcnJvcl9wcmludF9jaGFpbihnbG9idXNfZXJyb3JfZ2V0KHJlcykpKTsKLSsgICAg ICAgIGxvZ2l0KCJmYWlsZWQgdG8gbWFwIEdTSSB1c2VyICVzIiwgKGNoYXIgKiljbGllbnQtPmRp c3BsYXluYW1lLnZhbHVlKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgICp1c2Vy ID0gc3RyZHVwKGxuYW1lKTsKLSsjZWxzZQotKyAgICBkZWJ1ZygiY2FsbGluZyBnbG9idXNfZ3Nz X2Fzc2lzdF9ncmlkbWFwKCkiKTsKLSsgICAgaWYgKEdMT0JVU19TVUNDRVNTICE9Ci0rICAgICAg ICAocmVzID0gZ2xvYnVzX2dzc19hc3Npc3RfZ3JpZG1hcChjbGllbnQtPmRpc3BsYXluYW1lLnZh bHVlLCB1c2VyKSkpIHsKLSsgICAgICAgIGRlYnVnKCIlcyIsIGdsb2J1c19lcnJvcl9wcmludF9j aGFpbihnbG9idXNfZXJyb3JfZ2V0KHJlcykpKTsKLSsgICAgICAgIGxvZ2l0KCJmYWlsZWQgdG8g bWFwIEdTSSB1c2VyICVzIiwgKGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0rICAgIGxvZ2l0KCJHU0kgdXNl ciAlcyBtYXBwZWQgdG8gdGFyZ2V0IHVzZXIgJXMiLAotKyAgICAgICAgKGNoYXIgKikgY2xpZW50 LT5kaXNwbGF5bmFtZS52YWx1ZSwgKnVzZXIpOwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0r LyoKLSsgKiBFeHBvcnQgR1NJIGNyZWRlbnRpYWxzIHRvIGRpc2suCi0rICovCi0rc3RhdGljIGlu dAotK3NzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkK LSt7Ci0rCU9NX3VpbnQzMgltYWpvcl9zdGF0dXM7Ci0rCU9NX3VpbnQzMgltaW5vcl9zdGF0dXM7 Ci0rCWdzc19idWZmZXJfZGVzYwlleHBvcnRfY3JlZCA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJ Y2hhciAqCQlwOwotKwotKwlpZiAoIWNsaWVudCB8fCAhY2xpZW50LT5jcmVkcykgewotKwkJcmV0 dXJuIDA7Ci0rCX0KLSsKLSsJbWFqb3Jfc3RhdHVzID0gZ3NzX2V4cG9ydF9jcmVkKCZtaW5vcl9z dGF0dXMsCi0rCQkJCSAgICAgICBjbGllbnQtPmNyZWRzLAotKwkJCQkgICAgICAgR1NTX0NfTk9f T0lELAotKwkJCQkgICAgICAgMSwKLSsJCQkJICAgICAgICZleHBvcnRfY3JlZCk7Ci0rCWlmIChH U1NfRVJST1IobWFqb3Jfc3RhdHVzKSAmJiBtYWpvcl9zdGF0dXMgIT0gR1NTX1NfVU5BVkFJTEFC TEUpIHsKLSsJCUdzc2N0eHQgKmN0eDsKLSsJCXNzaF9nc3NhcGlfYnVpbGRfY3R4KCZjdHgpOwot KwkJY3R4LT5tYWpvciA9IG1ham9yX3N0YXR1czsKLSsJCWN0eC0+bWlub3IgPSBtaW5vcl9zdGF0 dXM7Ci0rCQlzc2hfZ3NzYXBpX3NldF9vaWQoY3R4LCAmZ3NzYXBpX2dzaV9tZWNoLm9pZCk7Ci0r CQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0rCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmN0eCk7 Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotKwlwID0gc3RyY2hyKChjaGFyICopIGV4cG9ydF9jcmVk LnZhbHVlLCAnPScpOwotKwlpZiAocCA9PSBOVUxMKSB7Ci0rCQlsb2dpdCgiRmFpbGVkIHRvIHBh cnNlIGV4cG9ydGVkIGNyZWRlbnRpYWxzIHN0cmluZyAnJS4xMDBzJyIsCi0rCQkgICAgKGNoYXIg KilleHBvcnRfY3JlZC52YWx1ZSk7Ci0rCQlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yX3N0YXR1 cywgJmV4cG9ydF9jcmVkKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCSpwKysgPSAnXDAnOwotKwlp ZiAoc3RyY21wKChjaGFyICopZXhwb3J0X2NyZWQudmFsdWUsIlg1MDlfVVNFUl9ERUxFR19QUk9Y WSIpID09IDApIHsKLSsJCWNsaWVudC0+c3RvcmUuZW52dmFyID0gc3RyZHVwKCJYNTA5X1VTRVJf UFJPWFkiKTsKLSsJfSBlbHNlIHsKLSsJCWNsaWVudC0+c3RvcmUuZW52dmFyID0gc3RyZHVwKChj aGFyICopZXhwb3J0X2NyZWQudmFsdWUpOwotKwl9Ci0rCWlmIChhY2Nlc3MocCwgUl9PSykgPT0g MCkgewotKwkJaWYgKGNsaWVudC0+c3RvcmUuZmlsZW5hbWUpIHsKLSsJCQlpZiAocmVuYW1lKHAs IGNsaWVudC0+c3RvcmUuZmlsZW5hbWUpIDwgMCkgewotKwkJCQlsb2dpdCgiRmFpbGVkIHRvIHJl bmFtZSAlcyB0byAlczogJXMiLCBwLAotKwkJCQkgICAgY2xpZW50LT5zdG9yZS5maWxlbmFtZSwg c3RyZXJyb3IoZXJybm8pKTsKLSsJCQkJZnJlZShjbGllbnQtPnN0b3JlLmZpbGVuYW1lKTsKLSsJ CQkJY2xpZW50LT5zdG9yZS5maWxlbmFtZSA9IHN0cmR1cChwKTsKLSsJCQl9IGVsc2UgewotKwkJ CQlwID0gY2xpZW50LT5zdG9yZS5maWxlbmFtZTsKLSsJCQl9Ci0rCQl9IGVsc2UgewotKwkJCWNs aWVudC0+c3RvcmUuZmlsZW5hbWUgPSBzdHJkdXAocCk7Ci0rCQl9Ci0rCX0KLSsJY2xpZW50LT5z dG9yZS5lbnZ2YWwgPSBzdHJkdXAocCk7Ci0rI2lmZGVmIFVTRV9QQU0KLSsJaWYgKG9wdGlvbnMu dXNlX3BhbSkKLSsJCWRvX3BhbV9wdXRlbnYoY2xpZW50LT5zdG9yZS5lbnZ2YXIsIGNsaWVudC0+ c3RvcmUuZW52dmFsKTsKLSsjZW5kaWYKLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vcl9zdGF0 dXMsICZleHBvcnRfY3JlZCk7Ci0rCi0rCXJldHVybiAxOwotK30KLSsKLSsvKgotKyAqIEV4cG9y dCBHU0kgY3JlZGVudGlhbHMgdG8gZGlzay4KLSsgKi8KLStzdGF0aWMgaW50Ci0rc3NoX2dzc2Fw aV9nc2lfc3RvcmVjcmVkc19taWN2Mihzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQotK3sKLSsJ T01fdWludDMyCW1ham9yX3N0YXR1czsKLSsJT01fdWludDMyCW1pbm9yX3N0YXR1czsKLSsJZ3Nz X2J1ZmZlcl9kZXNjCWV4cG9ydF9jcmVkID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwljaGFyICoJ CXA7Ci0rCi0rCWlmICghY2xpZW50IHx8ICFjbGllbnQtPmNyZWRzKSB7Ci0rCQlyZXR1cm4gMDsK LSsJfQotKwotKwltYWpvcl9zdGF0dXMgPSBnc3NfZXhwb3J0X2NyZWQoJm1pbm9yX3N0YXR1cywK LSsJCQkJICAgICAgIGNsaWVudC0+Y3JlZHMsCi0rCQkJCSAgICAgICBHU1NfQ19OT19PSUQsCi0r CQkJCSAgICAgICAxLAotKwkJCQkgICAgICAgJmV4cG9ydF9jcmVkKTsKLSsJaWYgKEdTU19FUlJP UihtYWpvcl9zdGF0dXMpICYmIG1ham9yX3N0YXR1cyAhPSBHU1NfU19VTkFWQUlMQUJMRSkgewot KwkJR3NzY3R4dCAqY3R4OwotKwkJc3NoX2dzc2FwaV9idWlsZF9jdHgoJmN0eCk7Ci0rCQljdHgt Pm1ham9yID0gbWFqb3Jfc3RhdHVzOwotKwkJY3R4LT5taW5vciA9IG1pbm9yX3N0YXR1czsKLSsJ CXNzaF9nc3NhcGlfc2V0X29pZChjdHgsICZnc3NhcGlfZ3NpX21lY2hfbWljdjIub2lkKTsKLSsJ CXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKLSsJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgmY3R4KTsK LSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCXAgPSBzdHJjaHIoKGNoYXIgKikgZXhwb3J0X2NyZWQu dmFsdWUsICc9Jyk7Ci0rCWlmIChwID09IE5VTEwpIHsKLSsJCWxvZ2l0KCJGYWlsZWQgdG8gcGFy c2UgZXhwb3J0ZWQgY3JlZGVudGlhbHMgc3RyaW5nICclLjEwMHMnIiwKLSsJCSAgICAoY2hhciAq KWV4cG9ydF9jcmVkLnZhbHVlKTsKLSsJCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3Jfc3RhdHVz LCAmZXhwb3J0X2NyZWQpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsJKnArKyA9ICdcMCc7Ci0rCWlm IChzdHJjbXAoKGNoYXIgKilleHBvcnRfY3JlZC52YWx1ZSwiWDUwOV9VU0VSX0RFTEVHX1BST1hZ IikgPT0gMCkgewotKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSBzdHJkdXAoIlg1MDlfVVNFUl9Q Uk9YWSIpOwotKwl9IGVsc2UgewotKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSBzdHJkdXAoKGNo YXIgKilleHBvcnRfY3JlZC52YWx1ZSk7Ci0rCX0KLSsJaWYgKGFjY2VzcyhwLCBSX09LKSA9PSAw KSB7Ci0rCQlpZiAoY2xpZW50LT5zdG9yZS5maWxlbmFtZSkgewotKwkJCWlmIChyZW5hbWUocCwg Y2xpZW50LT5zdG9yZS5maWxlbmFtZSkgPCAwKSB7Ci0rCQkJCWxvZ2l0KCJGYWlsZWQgdG8gcmVu YW1lICVzIHRvICVzOiAlcyIsIHAsCi0rCQkJCSAgICBjbGllbnQtPnN0b3JlLmZpbGVuYW1lLCBz dHJlcnJvcihlcnJubykpOwotKwkJCQlmcmVlKGNsaWVudC0+c3RvcmUuZmlsZW5hbWUpOwotKwkJ CQljbGllbnQtPnN0b3JlLmZpbGVuYW1lID0gc3RyZHVwKHApOwotKwkJCX0gZWxzZSB7Ci0rCQkJ CXAgPSBjbGllbnQtPnN0b3JlLmZpbGVuYW1lOwotKwkJCX0KLSsJCX0gZWxzZSB7Ci0rCQkJY2xp ZW50LT5zdG9yZS5maWxlbmFtZSA9IHN0cmR1cChwKTsKLSsJCX0KLSsJfQotKwljbGllbnQtPnN0 b3JlLmVudnZhbCA9IHN0cmR1cChwKTsKLSsjaWZkZWYgVVNFX1BBTQotKwlpZiAob3B0aW9ucy51 c2VfcGFtKQotKwkJZG9fcGFtX3B1dGVudihjbGllbnQtPnN0b3JlLmVudnZhciwgY2xpZW50LT5z dG9yZS5lbnZ2YWwpOwotKyNlbmRpZgotKwlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yX3N0YXR1 cywgJmV4cG9ydF9jcmVkKTsKLSsKLSsJcmV0dXJuIDE7Ci0rfQotKwotKy8qCi0rICogRXhwb3J0 IHVwZGF0ZWQgR1NJIGNyZWRlbnRpYWxzIHRvIGRpc2suCi0rICovCi0rc3RhdGljIGludAotK3Nz aF9nc3NhcGlfZ3NpX3VwZGF0ZWNyZWRzKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSxzc2hfZ3Nz YXBpX2NsaWVudCAqY2xpZW50KQotK3sKLSsJcmV0dXJuIHNzaF9nc3NhcGlfZ3NpX3N0b3JlY3Jl ZHMoY2xpZW50KTsKLSt9Ci0rCi0rLyoKLSsgKiBFeHBvcnQgdXBkYXRlZCBHU0kgY3JlZGVudGlh bHMgdG8gZGlzay4KLSsgKi8KLStzdGF0aWMgaW50Ci0rc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3Jl ZHNfbWljdjIoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlLHNzaF9nc3NhcGlfY2xpZW50ICpjbGll bnQpCi0rewotKwlyZXR1cm4gc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkc19taWN2MihjbGllbnQp OwotK30KLSsKLSsjZW5kaWYgLyogR1NJICovCi0rI2VuZGlmIC8qIEdTU0FQSSAqLwotZGlmZiAt TnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLXNlcnYta3JiNS5jIG9wZW5zc2gtMTAuM3AxL2dz cy1zZXJ2LWtyYjUuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLXNlcnYta3JiNS5jCTIw MjYtMDctMDEgMDk6Mzg6MDAuODY4MDQ5OTI4ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvZ3Nz LXNlcnYta3JiNS5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc0ODA4NjM0ICswMjAwCi1AQCAtNDUw LDYgKzQ1MCwzNCBAQAotIAlyZXR1cm4gZm91bmRfcHJpbmNpcGFsOwotIH0KLSAgCi0rLyogUmV0 cmlldmUgdGhlIGxvY2FsIHVzZXJuYW1lIGFzc29jaWF0ZWQgd2l0aCBhIHNldCBvZiBLZXJiZXJv cwotKyAqIGNyZWRlbnRpYWxzLiBIb3BlZnVsbHkgd2UgY2FuIHVzZSB0aGlzIGZvciB0aGUgJ2Vt cHR5JyB1c2VybmFtZQotKyAqIGxvZ2lucyBkaXNjdXNzZWQgaW4gdGhlIGRyYWZ0ICAqLwotK3N0 YXRpYyBpbnQKLStzc2hfZ3NzYXBpX2tyYjVfbG9jYWxuYW1lKHNzaF9nc3NhcGlfY2xpZW50ICpj bGllbnQsIGNoYXIgKip1c2VyKSB7Ci0rCWtyYjVfcHJpbmNpcGFsIHByaW5jOwotKwlpbnQgcmV0 dmFsOwotKwotKwlpZiAoc3NoX2dzc2FwaV9rcmI1X2luaXQoKSA9PSAwKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCWlmICgocmV0dmFsPWtyYjVfcGFyc2VfbmFtZShrcmJfY29udGV4dCwgY2xpZW50LT5k aXNwbGF5bmFtZS52YWx1ZSwKLSsJICAgICZwcmluYykpKSB7Ci0rCQlsb2dpdCgia3JiNV9wYXJz ZV9uYW1lKCk6ICUuMTAwcyIsCi0rCQkgICAga3JiNV9nZXRfZXJyX3RleHQoa3JiX2NvbnRleHQs cmV0dmFsKSk7Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotKwkvKiBXZSd2ZSBnb3QgdG8gcmV0dXJu IGEgbWFsbG9jJ2Qgc3RyaW5nICovCi0rCSp1c2VyID0gKGNoYXIgKil4bWFsbG9jKDI1Nik7Ci0r CWlmIChrcmI1X2FuYW1lX3RvX2xvY2FsbmFtZShrcmJfY29udGV4dCwgcHJpbmMsIDI1NiwgKnVz ZXIpKSB7Ci0rCQlmcmVlKCp1c2VyKTsKLSsJCSp1c2VyID0gTlVMTDsKLSsJCXJldHVybigwKTsK LSsJfQotKwotKwlyZXR1cm4oMSk7Ci0rfQotIAotIC8qIFRoaXMgd3JpdGVzIG91dCBhbnkgZm9y d2FyZGVkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHN0cnVjdHVyZSBwb3B1bGF0ZWQKLSAgKiBkdXJp bmcgdXNlcmF1dGguIENhbGxlZCBhZnRlciB3ZSBoYXZlIHNldHVpZCB0byB0aGUgdXNlciAqLwot QEAgLTU0NCw3ICs1NzIsNyBAQAotIAlyZXR1cm4gc2V0X2VudjsKLSB9Ci0gCi0taW50Ci0rc3Rh dGljIGludAotIHNzaF9nc3NhcGlfa3JiNV91cGRhdGVjcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAq c3RvcmUsCi0gICAgIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCi0gewotQEAgLTg0MCw3ICs4 NjgsNyBAQAotIAl7OSwgIlx4MkFceDg2XHg0OFx4ODZceEY3XHgxMlx4MDFceDAyXHgwMiJ9LAot IAlOVUxMLAotIAkmc3NoX2dzc2FwaV9rcmI1X3VzZXJvaywKLS0JTlVMTCwKLSsJJnNzaF9nc3Nh cGlfa3JiNV9sb2NhbG5hbWUsCi0gCSZzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcywKLSAJJnNz aF9nc3NhcGlfa3JiNV91cGRhdGVjcmVkcwotIH07Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEu b3JpZy9rZXhnc3NzLmMgb3BlbnNzaC0xMC4zcDEva2V4Z3Nzcy5jCi0tLS0gb3BlbnNzaC0xMC4z cDEub3JpZy9rZXhnc3NzLmMJMjAyNi0wNy0wMSAwOTozODowMC4zMjA2ODAxNzIgKzAyMDAKLSsr KyBvcGVuc3NoLTEwLjNwMS9rZXhnc3NzLmMJMjAyNi0wNy0wMSAxMDozOTo0My41NzUxNjQ3MjMg KzAyMDAKLUBAIC00OCw2ICs0OCw3IEBACi0gI2luY2x1ZGUgImRpZ2VzdC5oIgotICNpbmNsdWRl ICJzc2hlcnIuaCIKLSAKLStzdGF0aWMgdm9pZCBrZXhfZ3NzX3NlbmRfZXJyb3IoR3NzY3R4dCAq Y3R4dCwgc3RydWN0IHNzaCAqc3NoKTsKLSBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOwot IAotIHN0YXRpYyBpbnQgaW5wdXRfa2V4Z3NzX2luaXQoaW50LCB1X2ludDMyX3QsIHN0cnVjdCBz c2ggKik7Ci1AQCAtODEsOCArODIsMTAgQEAKLSAKLSAJZGVidWcyX2YoIkFjcXVpcmluZyBjcmVk ZW50aWFscyIpOwotIAotLQlpZiAoR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfc2VydmVyX2N0eCgm a2V4LT5nc3MsIG9pZCkpKQotKwlpZiAoR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfc2VydmVyX2N0 eCgma2V4LT5nc3MsIG9pZCkpKSB7Ci0rCQlrZXhfZ3NzX3NlbmRfZXJyb3Ioa2V4LT5nc3MsIHNz aCk7Ci0gCQlmYXRhbCgiVW5hYmxlIHRvIGFjcXVpcmUgY3JlZGVudGlhbHMgZm9yIHRoZSBzZXJ2 ZXIiKTsKLSsJfQotIAotIAlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgma2V4LT5nc3MpOwotIAlpZiAo a2V4LT5nc3MgPT0gTlVMTCkKLUBAIC0xMzksMTMgKzE0MiwxNCBAQAotIAlzc2hfZGlzcGF0Y2hf c2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFLCBOVUxMKTsKLSAKLSAJaWYgKEdTU19F UlJPUihnc3MtPm1ham9yKSkgewotKwkJa2V4X2dzc19zZW5kX2Vycm9yKGtleC0+Z3NzLCBzc2gp OwotIAkJaWYgKHNlbmRfdG9rLT5sZW5ndGggPiAwKSB7Ci0gCQkJaWYgKChyID0gc3NocGt0X3N0 YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFKSkgIT0gMCB8fAotIAkJCSAgICAociA9 IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgc2VuZF90b2stPnZhbHVlLCBzZW5kX3Rvay0+bGVuZ3Ro KSkgIT0gMCB8fAotIAkJCSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApCi0gCQkJCWZh dGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOwotIAkJfQotLQkJZmF0YWwoImFj Y2VwdF9jdHggZGllZCIpOwotKwkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwgIkdTU0FQSSBL ZXkgRXhjaGFuZ2UgaGFuZHNoYWtlIGZhaWxlZCIpOwotIAl9Ci0gCi0gCWlmICghKCpyZXRfZmxh Z3MgJiBHU1NfQ19NVVRVQUxfRkxBRykpCi1AQCAtNjAwLDQgKzYwNCwyNiBAQAotIAlyZXR1cm4g a2V4Z3NzZ2V4X2ZpbmFsKHNzaCwgJnNlbmRfdG9rLCAmcmV0X2ZsYWdzKTsKLSB9Ci0gCi0rc3Rh dGljIHZvaWQKLStrZXhfZ3NzX3NlbmRfZXJyb3IoR3NzY3R4dCAqY3R4dCwgc3RydWN0IHNzaCAq c3NoKSB7Ci0rCWNoYXIgKmVycnN0cjsKLSsJT01fdWludDMyIG1haiwgbWluOwotKwlpbnQgcjsK LSsKLSsJZXJyc3RyID0gbW1fc3NoX2dzc2FwaV9sYXN0X2Vycm9yKGN0eHQsICZtYWosICZtaW4p OwotKwlpZiAoZXJyc3RyKSB7Ci0rCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01T R19LRVhHU1NfRVJST1IpKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gs IG1haikpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNzaCwgbWluKSkgIT0g MCB8fAotKwkJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgZXJyc3RyKSkgIT0gMCB8 fAotKwkJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgIiIpKSAhPSAwIHx8Ci0rCQkg ICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKQotKwkJCWZhdGFsKCJzc2hwa3QgZmFpbGVk OiAlcyIsIHNzaF9lcnIocikpOwotKwkJaWYgKChyID0gc3NoX3BhY2tldF93cml0ZV93YWl0KHNz aCkpICE9IDApCi0rCQkJZmF0YWwoInNzaF9wYWNrZXRfd3JpdGVfd2FpdDogJXMiLCBzc2hfZXJy KHIpKTsKLSsJCS8qIFhYWCAtIFdlIHNob3VsZCBwcm9iYWJseSBsb2cgdGhlIGVycm9yIGxvY2Fs bHkgaGVyZSAqLwotKwkJZnJlZShlcnJzdHIpOwotKwl9Ci0rfQotKwotICNlbmRpZiAvKiBkZWZp bmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpICovCi1kaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy9NYWtlZmlsZS5pbiBvcGVuc3NoLTEwLjNwMS9NYWtlZmlsZS5pbgotLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvTWFrZWZpbGUuaW4JMjAyNi0wNy0wMSAwOTozODowMC45MjE2 MDA3NjYgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9NYWtlZmlsZS5pbgkyMDI2LTA3LTAxIDEw OjM5OjQzLjU3NTQ2MDM0OSArMDIwMAotQEAgLTEzMyw3ICsxMzMsNyBAQAotIAlhdXRoLWJzZGF1 dGgubyBhdXRoMi1ob3N0YmFzZWQubyBhdXRoMi1rYmRpbnQubyBcCi0gCWF1dGgyLW5vbmUubyBh dXRoMi1wYXNzd2QubyBhdXRoMi1wdWJrZXkubyBhdXRoMi1wdWJrZXlmaWxlLm8gXAotIAltb25p dG9yLm8gbW9uaXRvcl93cmFwLm8gYXV0aC1rcmI1Lm8ga2V4Z3Nzcy5vIFwKLS0JYXV0aDItZ3Nz Lm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gXAotKwlhdXRoMi1nc3MubyBnc3Mtc2Vydi5v IGdzcy1zZXJ2LWtyYjUubyBnc3Mtc2Vydi1nc2kubyBcCi0gCWxvZ2lucmVjLm8gYXV0aC1wYW0u byBhdXRoLXNoYWRvdy5vIGF1dGgtc2lhLm8gXAotIAlzZnRwLXNlcnZlci5vIHNmdHAtY29tbW9u Lm8gXAotIAl1aWRzd2FwLm8gcGxhdGZvcm0tbGlzdGVuLm8gJChQMTFPQkpTKSAkKFNLT0JKUykK LUBAIC0xNDQsNyArMTQ0LDcgQEAKLSAJc2VydmVybG9vcC5vIGF1dGgubyBhdXRoMi5vIGF1dGgt b3B0aW9ucy5vIHNlc3Npb24ubyBhdXRoMi1jaGFsbC5vIFwKLSAJZ3JvdXBhY2Nlc3MubyBhdXRo LWJzZGF1dGgubyBhdXRoMi1ob3N0YmFzZWQubyBhdXRoMi1rYmRpbnQubyBcCi0gCWF1dGgyLW5v bmUubyBhdXRoMi1wYXNzd2QubyBhdXRoMi1wdWJrZXkubyBhdXRoMi1wdWJrZXlmaWxlLm8gXAot LQlhdXRoMi1nc3MubyBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBrZXhnc3NzLm8gXAotKwlh dXRoMi1nc3MubyBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBnc3Mtc2Vydi1nc2kubyBrZXhn c3NzLm8gXAotIAltb25pdG9yX3dyYXAubyBhdXRoLWtyYjUubyBcCi0gCWF1ZGl0Lm8gYXVkaXQt YnNtLm8gYXVkaXQtbGludXgubyBwbGF0Zm9ybS5vIFwKLSAJbG9naW5yZWMubyBhdXRoLXBhbS5v IGF1dGgtc2hhZG93Lm8gYXV0aC1zaWEubyBcCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9taXNjLmMgb3BlbnNzaC0xMC4zcDEvbWlzYy5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9t aXNjLmMJMjAyNi0wNy0wMSAwOTozODowMC45MTM2MTc3MDkgKzAyMDAKLSsrKyBvcGVuc3NoLTEw LjNwMS9taXNjLmMJMjAyNi0wNy0wMSAxMDozOTo0My41NzU1NjUxMDYgKzAyMDAKLUBAIC00NjQs MTEgKzQ2NCwxNCBAQAotICNkZWZpbmUgV0hJVEVTUEFDRSAiIFx0XHJcbiIKLSAjZGVmaW5lIFFV T1RFCSJcIiIKLSAKLSsvKiBDaGFyYWN0ZXJzIGNvbnNpZGVyZWQgYXMgcXVvdGF0aW9ucy4gKi8K LSsjZGVmaW5lIFFVT1RFUyAiJ1wiIgotKwotIC8qIHJldHVybiBuZXh0IHRva2VuIGluIGNvbmZp Z3VyYXRpb24gbGluZSAqLwotIHN0YXRpYyBjaGFyICoKLSBzdHJkZWxpbV9pbnRlcm5hbChjaGFy ICoqcywgaW50IHNwbGl0X2VxdWFscykKLSB7Ci0tCWNoYXIgKm9sZDsKLSsJY2hhciAqb2xkLCAq cCwgKnE7Ci0gCWludCB3c3BhY2UgPSAwOwotIAotIAlpZiAoKnMgPT0gTlVMTCkKLUBAIC00NzYs NiArNDc5LDIxIEBACi0gCi0gCW9sZCA9ICpzOwotIAotKwlpZiAoKHE9c3RyY2hyKFFVT1RFUywg KGludCkgKm9sZCkpICYmICpxKQotKwl7Ci0rCQkvKiBmaW5kIG5leHQgcXVvdGUgY2hhcmFjdGVy LCBwb2ludCBvbGQgdG8gc3RhcnQgb2YgcXVvdGVkCi0rCQkgKiBzdHJpbmcgKi8KLSsJCWZvciAo cCA9ICsrb2xkOyAqcCAmJiAqcCAhPSAqcTsgcCsrKQotKwkJCTsKLSsKLSsJCS8qIGZpbmQgc3Rh cnQgb2YgbmV4dCB0b2tlbiAqLwotKwkJKnMgPSAoKnApID8gcCArIHN0cnNwbihwICsgMSwgV0hJ VEVTUEFDRSkgKyAxIDogTlVMTDsKLSsKLSsJCS8qIHRlcm1pbmF0ZSAnb2xkJyB0b2tlbiAqLwot KwkJKnAgPSAnXDAnOwotKwkJcmV0dXJuIChvbGQpOwotKwl9Ci0rCi0gCSpzID0gc3RycGJyaygq cywKLSAJICAgIHNwbGl0X2VxdWFscyA/IFdISVRFU1BBQ0UgUVVPVEUgIj0iIDogV0hJVEVTUEFD RSBRVU9URSk7Ci0gCWlmICgqcyA9PSBOVUxMKQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9y aWcvbW9uaXRvci5jIG9wZW5zc2gtMTAuM3AxL21vbml0b3IuYwotLS0tIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvbW9uaXRvci5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuOTEzOTAyMDI0ICswMjAwCi0rKysg b3BlbnNzaC0xMC4zcDEvbW9uaXRvci5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc2NzQ2MjE1ICsw MjAwCi1AQCAtMTQyLDYgKzE0Miw5IEBACi0gaW50IG1tX2Fuc3dlcl9nc3NfdXNlcm9rKHN0cnVj dCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJfZ3NzX2NoZWNr bWljKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJf Z3NzX3NpZ24oc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0raW50IG1tX2Fu c3dlcl9nc3NfZXJyb3Ioc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0raW50 IG1tX2Fuc3dlcl9nc3NfaW5kaWNhdGVfbWVjaHMoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBz c2hidWYgKik7Ci0raW50IG1tX2Fuc3dlcl9nc3NfbG9jYWxuYW1lKHN0cnVjdCBzc2ggKiwgaW50 LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJfZ3NzX3VwZGF0ZWNyZWRzKHN0cnVj dCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotICNlbmRpZgotIAotQEAgLTE5OSw3ICsy MDIsNyBAQAotICNlbmRpZgotICAgICB7TU9OSVRPUl9SRVFfU0VUQ09NUEFULCBNT05fT05DRSwg bW1fYW5zd2VyX3NldGNvbXBhdH0sCi0gICAgIHtNT05JVE9SX1JFUV9TSUdOLCBNT05fT05DRSwg bW1fYW5zd2VyX3NpZ259LAotLSAgICB7TU9OSVRPUl9SRVFfUFdOQU0sIE1PTl9PTkNFLCBtbV9h bnN3ZXJfcHduYW1hbGxvd30sCi0rICAgIHtNT05JVE9SX1JFUV9QV05BTSwgTU9OX0FVVEgsIG1t X2Fuc3dlcl9wd25hbWFsbG93fSwKLSAgICAge01PTklUT1JfUkVRX0FVVEhTRVJWLCBNT05fT05D RSwgbW1fYW5zd2VyX2F1dGhzZXJ2fSwKLSAjaWZkZWYgV0lUSF9TRUxJTlVYCi0gICAgIHtNT05J VE9SX1JFUV9BVVRIUk9MRSwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9hdXRocm9sZX0sCi1AQCAtMjA3 LDcgKzIxMCw3IEBACi0gICAgIHtNT05JVE9SX1JFUV9BVVRIMl9SRUFEX0JBTk5FUiwgTU9OX09O Q0UsIG1tX2Fuc3dlcl9hdXRoMl9yZWFkX2Jhbm5lcn0sCi0gICAgIHtNT05JVE9SX1JFUV9BVVRI UEFTU1dPUkQsIE1PTl9BVVRILCBtbV9hbnN3ZXJfYXV0aHBhc3N3b3JkfSwKLSAjaWZkZWYgVVNF X1BBTQotLSAgICB7TU9OSVRPUl9SRVFfUEFNX1NUQVJULCBNT05fT05DRSwgbW1fYW5zd2VyX3Bh bV9zdGFydH0sCi0rICAgIHtNT05JVE9SX1JFUV9QQU1fU1RBUlQsIE1PTl9JU0FVVEgsIG1tX2Fu c3dlcl9wYW1fc3RhcnR9LAotICAgICB7TU9OSVRPUl9SRVFfUEFNX0FDQ09VTlQsIDAsIG1tX2Fu c3dlcl9wYW1fYWNjb3VudH0sCi0gICAgIHtNT05JVE9SX1JFUV9QQU1fSU5JVF9DVFgsIE1PTl9P TkNFLCBtbV9hbnN3ZXJfcGFtX2luaXRfY3R4fSwKLSAgICAge01PTklUT1JfUkVRX1BBTV9RVUVS WSwgMCwgbW1fYW5zd2VyX3BhbV9xdWVyeX0sCi1AQCAtMjMxLDggKzIzNCwxMSBAQAotICAgICB7 TU9OSVRPUl9SRVFfR1NTU0VUVVAsIE1PTl9JU0FVVEgsIG1tX2Fuc3dlcl9nc3Nfc2V0dXBfY3R4 fSwKLSAgICAge01PTklUT1JfUkVRX0dTU1NURVAsIDAsIG1tX2Fuc3dlcl9nc3NfYWNjZXB0X2N0 eH0sCi0gICAgIHtNT05JVE9SX1JFUV9HU1NVU0VST0ssIE1PTl9PTkNFfE1PTl9BVVRIREVDSURF LCBtbV9hbnN3ZXJfZ3NzX3VzZXJva30sCi0tICAgIHtNT05JVE9SX1JFUV9HU1NDSEVDS01JQywg TU9OX09OQ0UsIG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWN9LAotKyAgICB7TU9OSVRPUl9SRVFfR1NT Q0hFQ0tNSUMsIE1PTl9JU0FVVEgsIG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWN9LAotICAgICB7TU9O SVRPUl9SRVFfR1NTU0lHTiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9nc3Nfc2lnbn0sCi0rICAgIHtN T05JVE9SX1JFUV9HU1NFUlIsIE1PTl9JU0FVVEggfCBNT05fT05DRSwgbW1fYW5zd2VyX2dzc19l cnJvcn0sCi0rICAgIHtNT05JVE9SX1JFUV9HU1NNRUNIUywgTU9OX0lTQVVUSCwgbW1fYW5zd2Vy X2dzc19pbmRpY2F0ZV9tZWNoc30sCi0rICAgIHtNT05JVE9SX1JFUV9HU1NMT0NBTE5BTUUsIE1P Tl9JU0FVVEgsIG1tX2Fuc3dlcl9nc3NfbG9jYWxuYW1lfSwKLSAjZW5kaWYKLSAgICAgezAsIDAs IE5VTEx9Ci0gfTsKLUBAIC0yNDIsNiArMjQ4LDggQEAKLSAgICAge01PTklUT1JfUkVRX0dTU1NF VFVQLCAwLCBtbV9hbnN3ZXJfZ3NzX3NldHVwX2N0eH0sCi0gICAgIHtNT05JVE9SX1JFUV9HU1NT VEVQLCAwLCBtbV9hbnN3ZXJfZ3NzX2FjY2VwdF9jdHh9LAotICAgICB7TU9OSVRPUl9SRVFfR1NT U0lHTiwgMCwgbW1fYW5zd2VyX2dzc19zaWdufSwKLSsgICAge01PTklUT1JfUkVRX0dTU0VSUiwg MCwgbW1fYW5zd2VyX2dzc19lcnJvcn0sCi0rICAgIHtNT05JVE9SX1JFUV9HU1NNRUNIUywgMCwg bW1fYW5zd2VyX2dzc19pbmRpY2F0ZV9tZWNoc30sCi0gICAgIHtNT05JVE9SX1JFUV9HU1NVUENS RURTLCAwLCBtbV9hbnN3ZXJfZ3NzX3VwZGF0ZWNyZWRzfSwKLSAjZW5kaWYKLSAgICAge01PTklU T1JfUkVRX1NUQVRFLCBNT05fT05DRSwgbW1fYW5zd2VyX3N0YXRlfSwKLUBAIC0zMjMsNiArMzMx LDggQEAKLSAjaWZkZWYgR1NTQVBJCi0gCS8qIGFuZCBmb3IgdGhlIEdTU0FQSSBrZXkgZXhjaGFu Z2UgKi8KLSAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NTRVRV UCwgMSk7Ci0rCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTRVJS LCAxKTsKLSsJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NNRUNI UywgMSk7Ci0gI2VuZGlmCi0gCi0gCS8qIFRoZSBmaXJzdCBmZXcgcmVxdWVzdHMgZG8gbm90IHJl cXVpcmUgYXN5bmNocm9ub3VzIGFjY2VzcyAqLwotQEAgLTQ3NCw2ICs0ODQsOCBAQAotICNpZmRl ZiBHU1NBUEkKLSAJLyogYW5kIGZvciB0aGUgR1NTQVBJIGtleSBleGNoYW5nZSAqLwotIAltb25p dG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU1NFVFVQLCAxKTsKLSsJbW9u aXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NFUlIsIDEpOwotKwltb25p dG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU01FQ0hTLCAxKTsKLSAjZW5k aWYKLSAKLSAJaWYgKGF1dGhfb3B0cy0+cGVybWl0X3B0eV9mbGFnKSB7Ci1AQCAtOTM2LDE0ICs5 NDgsMTcgQEAKLSAJaWYgKCFjb21wYXRfc2V0KQotIAkJZmF0YWxfZigic3RhdGUgZXJyb3I6IHNl dGNvbXBhdCBuZXZlciBjYWxsZWQiKTsKLSAKLS0JaWYgKGF1dGhjdHh0LT5hdHRlbXB0KysgIT0g MCkKLS0JCWZhdGFsX2YoIm11bHRpcGxlIGF0dGVtcHRzIGZvciBnZXRwd25hbSIpOwotLQotKwlp ZiAoYXV0aGN0eHQtPnVzZXIpIGZyZWUoYXV0aGN0eHQtPnVzZXIpOwotIAlpZiAoKHIgPSBzc2hi dWZfZ2V0X2NzdHJpbmcobSwgJmF1dGhjdHh0LT51c2VyLCBOVUxMKSkgIT0gMCkKLSAJCWZhdGFs X2ZyKHIsICJwYXJzZSIpOwotIAotIAlwd2VudCA9IGdldHB3bmFtYWxsb3coc3NoLCBhdXRoY3R4 dC0+dXNlcik7Ci0gCi0rI2lmZGVmIFVTRV9QQU0KLSsJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91 c2VyX2NoYW5nZSkKLSsJCXNldHByb2N0aXRsZSgiJXMgW3ByaXZdIiwgcHdlbnQgPyAiW3BhbV0i IDogInVua25vd24iKTsKLSsJZWxzZQotKyNlbmRpZgotIAlzZXRwcm9jdGl0bGUoIiVzIFtwcml2 XSIsIHB3ZW50ID8gYXV0aGN0eHQtPnVzZXIgOiAidW5rbm93biIpOwotIAotIAlzc2hidWZfcmVz ZXQobSk7Ci1AQCAtMjI5OSw2ICsyMzE0LDc5IEBACi0gfQotIAotIGludAotK21tX2Fuc3dlcl9n c3NfZXJyb3Ioc3RydWN0IHNzaCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVmICptKQot K3sKLSsJT01fdWludDMyIG1ham9yLCBtaW5vcjsKLSsJY2hhciAqbXNnOwotKwlpbnQgcjsKLSsK LSsJbXNnPXNzaF9nc3NhcGlfbGFzdF9lcnJvcihnc3Njb250ZXh0LCAmbWFqb3IsICZtaW5vcik7 Ci0rCXNzaGJ1Zl9yZXNldChtKTsKLSsJaWYgKChyID0gc3NoYnVmX3B1dF91MzIobSwgbWFqb3Ip KSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIG1pbm9yKSkgIT0gMCB8fAot KwkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgbXNnKSkgIT0gMCkKLSsJCWZhdGFsX2Zy KHIsICJidWZmZXIgZXJyb3IiKTsKLSsKLSsJbW1fcmVxdWVzdF9zZW5kKHNvY2tldCwgTU9OSVRP Ul9BTlNfR1NTRVJSLCBtKTsKLSsKLSsJZnJlZShtc2cpOwotKwotKwlyZXR1cm4oMCk7Ci0rfQot KwotK2ludAotK21tX2Fuc3dlcl9nc3NfaW5kaWNhdGVfbWVjaHMoc3RydWN0IHNzaCAqc3NoLCBp bnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVmICptKQotK3sKLSsJT01fdWludDMyIG1ham9yLCBtaW5v cjsKLSsJZ3NzX09JRF9zZXQgbWVjaF9zZXQ7Ci0rCXNpemVfdCBpOwotKwlpbnQgcjsKLSsKLSsJ bWFqb3I9Z3NzX2luZGljYXRlX21lY2hzKCZtaW5vciwgJm1lY2hfc2V0KTsKLSsKLSsJc3NoYnVm X3Jlc2V0KG0pOwotKwlpZiAoKHIgPSBzc2hidWZfcHV0X3UzMihtLCBtYWpvcikpICE9IDAgfHwK LSsJICAgIChyID0gc3NoYnVmX3B1dF91MzIobSwgbWVjaF9zZXQtPmNvdW50KSkgIT0gMCkKLSsJ CWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKLSsJZm9yIChpID0gMDsgaSA8IG1lY2hfc2V0 LT5jb3VudDsgaSsrKSB7Ci0rCQlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZyhtLCBtZWNoX3Nl dC0+ZWxlbWVudHNbaV0uZWxlbWVudHMsCi0rCQkgICAgbWVjaF9zZXQtPmVsZW1lbnRzW2ldLmxl bmd0aCkpICE9IDApCi0rCQkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwl9Ci0rCi0r CWdzc19yZWxlYXNlX29pZF9zZXQoJm1pbm9yLCAmbWVjaF9zZXQpOwotKwotKwltbV9yZXF1ZXN0 X3NlbmQoc29ja2V0LCBNT05JVE9SX0FOU19HU1NNRUNIUywgbSk7Ci0rCi0rCXJldHVybigwKTsK LSt9Ci0rCi0raW50Ci0rbW1fYW5zd2VyX2dzc19sb2NhbG5hbWUoc3RydWN0IHNzaCAqc3NoLCBp bnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVmICptKQotK3sKLSsJY2hhciAqbmFtZTsKLSsJaW50IHI7 Ci0rCi0rCXNzaF9nc3NhcGlfbG9jYWxuYW1lKCZuYW1lKTsKLSsKLSsJc3NoYnVmX3Jlc2V0KG0p OwotKwlpZiAobmFtZSkgewotKwkJaWYgKChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sIG5hbWUp KSAhPSAwKQotKwkJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKLSsJCWRlYnVnM19mKCJz ZW5kaW5nIHJlc3VsdCAlcyIsIG5hbWUpOwotKwkJZnJlZShuYW1lKTsKLSsJfSBlbHNlIHsKLSsJ CWlmICgociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCAiIikpICE9IDApCi0rCQkJZmF0YWxfZnIo ciwgImJ1ZmZlciBlcnJvciIpOwotKwkJZGVidWczX2YoInNlbmRpbmcgcmVzdWx0IFwiXCIiKTsK LSsJfQotKwotKwltbV9yZXF1ZXN0X3NlbmQoc29ja2V0LCBNT05JVE9SX0FOU19HU1NMT0NBTE5B TUUsIG0pOwotKwotKwlyZXR1cm4oMCk7Ci0rfQotKwotK2ludAotIG1tX2Fuc3dlcl9nc3Nfc2ln bihzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCi0gewotIAln c3NfYnVmZmVyX2Rlc2MgZGF0YTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL21vbml0 b3IuaCBvcGVuc3NoLTEwLjNwMS9tb25pdG9yLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL21v bml0b3IuaAkyMDI2LTA3LTAxIDA5OjM4OjAwLjYyMjkxMTg5MiArMDIwMAotKysrIG9wZW5zc2gt MTAuM3AxL21vbml0b3IuaAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3NzA3MDQxMCArMDIwMAotQEAg LTc3LDYgKzc3LDEwIEBACi0gCi0gCU1PTklUT1JfUkVRX0dTU1NJR04gPSAxNTAsIE1PTklUT1Jf QU5TX0dTU1NJR04gPSAxNTEsCi0gCU1PTklUT1JfUkVRX0dTU1VQQ1JFRFMgPSAxNTIsIE1PTklU T1JfQU5TX0dTU1VQQ1JFRFMgPSAxNTMsCi0rCi0rCU1PTklUT1JfUkVRX0dTU01FQ0hTID0gMjAw LCBNT05JVE9SX0FOU19HU1NNRUNIUyA9IDIwMSwKLSsJTU9OSVRPUl9SRVFfR1NTTE9DQUxOQU1F ID0gMjAyLCBNT05JVE9SX0FOU19HU1NMT0NBTE5BTUUgPSAyMDMsCi0rCU1PTklUT1JfUkVRX0dT U0VSUiA9IDIwNCwgTU9OSVRPUl9BTlNfR1NTRVJSID0gMjA1Ci0gfTsKLSAKLSBzdHJ1Y3Qgc3No OwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvbW9uaXRvcl93cmFwLmMgb3BlbnNzaC0x MC4zcDEvbW9uaXRvcl93cmFwLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL21vbml0b3Jfd3Jh cC5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuNjQyNjY2OTcxICswMjAwCi0rKysgb3BlbnNzaC0xMC4z cDEvbW9uaXRvcl93cmFwLmMJMjAyNi0wNy0wMSAxMDozOTo0My41Nzc3Njg4MDcgKzAyMDAKLUBA IC0xMjI2LDYgKzEyMjYsOTQgQEAKLSAJcmV0dXJuIChhdXRoZW50aWNhdGVkKTsKLSB9Ci0gCi0r Y2hhciAqCi0rbW1fc3NoX2dzc2FwaV9sYXN0X2Vycm9yKEdzc2N0eHQgKmN0eCwgT01fdWludDMy ICptYWpvciwgT01fdWludDMyICptaW5vcikKLSt7Ci0rCXN0cnVjdCBzc2hidWYgKm0gPSBOVUxM OwotKwlPTV91aW50MzIgbWFqLG1pbjsKLSsJY2hhciAqZXJyc3RyOwotKwlpbnQgcjsKLSsKLSsJ aWYgKChtID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotKwkJZmF0YWxfZigic3NoYnVmX25ldyBm YWlsZWQiKTsKLSsKLSsJbW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRP Ul9SRVFfR1NTRVJSLCBtKTsKLSsJbW1fcmVxdWVzdF9yZWNlaXZlX2V4cGVjdChwbW9uaXRvci0+ bV9yZWN2ZmQsIE1PTklUT1JfQU5TX0dTU0VSUiwgbSk7Ci0rCi0rCWlmICgociA9IHNzaGJ1Zl9n ZXRfdTMyKG0sICZtYWopKSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZt aW4pKSAhPSAwKQotKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwotKwlpZiAobWFq b3IpICptYWpvcj1tYWo7Ci0rCWlmIChtaW5vcikgKm1pbm9yPW1pbjsKLSsKLSsJaWYgKChyID0g c3NoYnVmX2dldF9jc3RyaW5nKG0sICZlcnJzdHIsIE5VTEwpKSAhPSAwKQotKwkJZmF0YWxfZnIo ciwgImJ1ZmZlciBlcnJvciIpOwotKwotKwlzc2hidWZfZnJlZShtKTsKLSsKLSsJcmV0dXJuKGVy cnN0cik7Ci0rfQotKwotK09NX3VpbnQzMgotK21tX2dzc19pbmRpY2F0ZV9tZWNocyhPTV91aW50 MzIgKm1pbm9yX3N0YXR1cywgZ3NzX09JRF9zZXQgKm1lY2hfc2V0KQotK3sKLSsJc3RydWN0IHNz aGJ1ZiAqbSA9IE5VTEw7Ci0rCU9NX3VpbnQzMiBtYWpvcixtaW5vcjsKLSsJaW50IGNvdW50Owot Kwlnc3NfT0lEX2Rlc2Mgb2lkOwotKwlzaXplX3QgbGVuZ3RoOwotKwlpbnQgcjsKLSsKLSsJaWYg KChtID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWls ZWQiKTsKLSsKLSsJbW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9S RVFfR1NTTUVDSFMsIG0pOwotKwltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5t X3JlY3ZmZCwgTU9OSVRPUl9BTlNfR1NTTUVDSFMsIG0pOwotKwlpZiAoKHIgPSBzc2hidWZfZ2V0 X3UzMihtLCAmbWFqb3IpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZj b3VudCkpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCi0rCWdzc19j cmVhdGVfZW1wdHlfb2lkX3NldCgmbWlub3IsIG1lY2hfc2V0KTsKLSsJd2hpbGUoY291bnQtLT4w KSB7Ci0rCSAgICBpZiAoKHIgPSBzc2hidWZfZ2V0X3N0cmluZyhtLCAodV9jaGFyICoqKSZvaWQu ZWxlbWVudHMsICZsZW5ndGgpKSAhPSAwKQotKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIp OwotKwkgICAgb2lkLmxlbmd0aCA9IGxlbmd0aDsKLSsJICAgIGdzc19hZGRfb2lkX3NldF9tZW1i ZXIoJm1pbm9yLCAmb2lkLCBtZWNoX3NldCk7Ci0rCX0KLSsKLSsJc3NoYnVmX2ZyZWUobSk7Ci0r Ci0rCXJldHVybihtYWpvcik7Ci0rfQotKwotK2ludAotK21tX3NzaF9nc3NhcGlfbG9jYWxuYW1l KGNoYXIgKipsbmFtZSkKLSt7Ci0rCXN0cnVjdCBzc2hidWYgKm0gPSBOVUxMOwotKwlpbnQgcjsK LSsKLSsJaWYgKChtID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotKwkJZmF0YWxfZigic3NoYnVm X25ldyBmYWlsZWQiKTsKLSsJbW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9O SVRPUl9SRVFfR1NTTE9DQUxOQU1FLCBtKTsKLSsKLSsJZGVidWczX2YoIndhaXRpbmcgZm9yIE1P TklUT1JfQU5TX0dTU0xPQ0FMTkFNRSIpOwotKwltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBt b25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9BTlNfR1NTTE9DQUxOQU1FLAotKwkgICAgbSk7Ci0r Ci0rCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhtLCBsbmFtZSwgTlVMTCkpICE9IDApCi0r CQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCi0rCXNzaGJ1Zl9mcmVlKG0pOwotKwlp ZiAoKCpsbmFtZSA9PSBOVUxMKSB8fCAoKmxuYW1lWzBdID09ICdcMCcpKSB7Ci0rCQlkZWJ1ZzNf ZigiZ3NzYXBpIGlkZW50aXR5IG1hcHBpbmcgZmFpbGVkIik7Ci0rCX0gZWxzZSB7Ci0rCQlkZWJ1 ZzNfZigiZ3NzYXBpIGlkZW50aXR5IG1hcHBlZCB0byAlcyIsICpsbmFtZSk7Ci0rCX0KLSsKLSsJ cmV0dXJuKDApOwotK30KLSsKLSBPTV91aW50MzIKLSBtbV9zc2hfZ3NzYXBpX3NpZ24oR3NzY3R4 dCAqY3R4LCBnc3NfYnVmZmVyX2Rlc2MgKmRhdGEsIGdzc19idWZmZXJfZGVzYyAqaGFzaCkKLSB7 Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9tb25pdG9yX3dyYXAuaCBvcGVuc3NoLTEw LjNwMS9tb25pdG9yX3dyYXAuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvbW9uaXRvcl93cmFw LmgJMjAyNi0wNy0wMSAwOTozODowMC42NDI4MzA0MTcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNw MS9tb25pdG9yX3dyYXAuaAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3ODQ4MzE2NSArMDIwMAotQEAg LTc3LDYgKzc3LDEwIEBACi0gaW50IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGNoYXIgKnVzZXIsIHN0 cnVjdCBwYXNzd2QgKiwgaW50IGtleCk7Ci0gT01fdWludDMyIG1tX3NzaF9nc3NhcGlfY2hlY2tt aWMoR3NzY3R4dCAqLCBnc3NfYnVmZmVyX3QsIGdzc19idWZmZXJfdCk7Ci0gT01fdWludDMyIG1t X3NzaF9nc3NhcGlfc2lnbihHc3NjdHh0ICosIGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90KTsK LStpbnQgbW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUoY2hhciAqKnVzZXIpOwotK09NX3VpbnQzMiBt bV9nc3NfaW5kaWNhdGVfbWVjaHMoT01fdWludDMyICptaW5vcl9zdGF0dXMsCi0rICAgIGdzc19P SURfc2V0ICptZWNoX3NldCk7Ci0rY2hhciAqbW1fc3NoX2dzc2FwaV9sYXN0X2Vycm9yKEdzc2N0 eHQgKmN0eHQsIE9NX3VpbnQzMiAqbWFqLCBPTV91aW50MzIgKm1pbik7Ci0gaW50IG1tX3NzaF9n c3NhcGlfdXBkYXRlX2NyZWRzKHNzaF9nc3NhcGlfY2NhY2hlICopOwotICNlbmRpZgotIAotZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcmVhZGNvbmYuYyBvcGVuc3NoLTEwLjNwMS9yZWFk Y29uZi5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9yZWFkY29uZi5jCTIwMjYtMDctMDEgMDk6 Mzg6MDAuOTE0MzQ2MjUxICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvcmVhZGNvbmYuYwkyMDI2 LTA3LTAxIDEwOjM5OjQzLjU3ODU2NTEwMyArMDIwMAotQEAgLTI5NDMsMTEgKzI5NDMsMTEgQEAK LSAJaWYgKG9wdGlvbnMtPnB1YmtleV9hdXRoZW50aWNhdGlvbiA9PSAtMSkKLSAJCW9wdGlvbnMt PnB1YmtleV9hdXRoZW50aWNhdGlvbiA9IFNTSF9QVUJLRVlfQVVUSF9BTEw7Ci0gCWlmIChvcHRp b25zLT5nc3NfYXV0aGVudGljYXRpb24gPT0gLTEpCi0tCQlvcHRpb25zLT5nc3NfYXV0aGVudGlj YXRpb24gPSAwOwotKwkJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID0gMTsKLSAJaWYgKG9w dGlvbnMtPmdzc19rZXlleCA9PSAtMSkKLS0JCW9wdGlvbnMtPmdzc19rZXlleCA9IDA7Ci0rCQlv cHRpb25zLT5nc3Nfa2V5ZXggPSAxOwotIAlpZiAob3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID09 IC0xKQotLQkJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0gMDsKLSsJCW9wdGlvbnMtPmdzc19k ZWxlZ19jcmVkcyA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3NfdHJ1c3RfZG5zID09IC0xKQotIAkJ b3B0aW9ucy0+Z3NzX3RydXN0X2RucyA9IDA7Ci0gCWlmIChvcHRpb25zLT5nc3NfcmVuZXdhbF9y ZWtleSA9PSAtMSkKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3JlYWRjb25mLmggb3Bl bnNzaC0xMC4zcDEvcmVhZGNvbmYuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvcmVhZGNvbmYu aAkyMDI2LTA3LTAxIDA5OjM4OjAwLjMyMTYzNjIzMiArMDIwMAotKysrIG9wZW5zc2gtMTAuM3Ax L3JlYWRjb25mLmgJMjAyNi0wNy0wMSAxMDozOTo0My41Nzk1NjUxMDIgKzAyMDAKLUBAIC04MCw2 ICs4MCw4IEBACi0gCWNoYXIgICAqaG9zdF9rZXlfYWxpYXM7CS8qIGhvc3RuYW1lIGFsaWFzIGZv ciAuc3NoL2tub3duX2hvc3RzICovCi0gCWNoYXIgICAqcHJveHlfY29tbWFuZDsJLyogUHJveHkg Y29tbWFuZCBmb3IgY29ubmVjdGluZyB0aGUgaG9zdC4gKi8KLSAJY2hhciAgICp1c2VyOwkJLyog VXNlciB0byBsb2cgaW4gYXMuICovCi0rCWludCAgICAgaW1wbGljaXQ7CS8qIExvZ2luIHVzZXIg d2FzIG5vdCBzcGVjaWZpZWQuCi0rCQkJCSAgIFNlcnZlciBtYXkgY2hvb3NlIGJhc2VkIG9uIGF1 dGhjdHh0LiAqLwotIAlpbnQgICAgIGVzY2FwZV9jaGFyOwkvKiBFc2NhcGUgY2hhcmFjdGVyOyAt MiA9IG5vbmUgKi8KLSAKLSAJdV9pbnQJbnVtX3N5c3RlbV9ob3N0ZmlsZXM7CS8qIFBhdGhzIGZv ciAvZXRjL3NzaC9zc2hfa25vd25faG9zdHMgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5v cmlnL3NlcnZjb25mLmMgb3BlbnNzaC0xMC4zcDEvc2VydmNvbmYuYwotLS0tIG9wZW5zc2gtMTAu M3AxLm9yaWcvc2VydmNvbmYuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjkxNDYzNzg1MCArMDIwMAot KysrIG9wZW5zc2gtMTAuM3AxL3NlcnZjb25mLmMJMjAyNi0wNy0wMSAxMTo0Njo0Mi40ODI5ODYx ODggKzAyMDAKLUBAIC05Niw2ICs5Niw3IEBACi0gCS8qIFBvcnRhYmxlLXNwZWNpZmljIG9wdGlv bnMgKi8KLSAJb3B0aW9ucy0+dXNlX3BhbSA9IC0xOwotIAlvcHRpb25zLT5wYW1fc2VydmljZV9u YW1lID0gTlVMTDsKLSsJb3B0aW9ucy0+cGVybWl0X3BhbV91c2VyX2NoYW5nZSA9IC0xOwotIAot IAkvKiBTdGFuZGFyZCBPcHRpb25zICovCi0gCW9wdGlvbnMtPm51bV9wb3J0cyA9IDA7Ci1AQCAt MTQ2LDYgKzE0Nyw3IEBACi0gCW9wdGlvbnMtPmdzc19jbGVhbnVwX2NyZWRzID0gLTE7Ci0gCW9w dGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9IC0xOwotIAlvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2Vw dG9yID0gLTE7Ci0rCW9wdGlvbnMtPmdzaV9hbGxvd19saW1pdGVkX3Byb3h5ID0gLTE7Ci0gCW9w dGlvbnMtPmdzc19pbmRpY2F0b3JzID0gTlVMTDsKLSAJb3B0aW9ucy0+Z3NzX3N0b3JlX3Jla2V5 ID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IE5VTEw7Ci1AQCAtMzIzLDYg KzMyNSw4IEBACi0gCQlvcHRpb25zLT51c2VfcGFtID0gMDsKLSAJaWYgKG9wdGlvbnMtPnBhbV9z ZXJ2aWNlX25hbWUgPT0gTlVMTCkKLSAJCW9wdGlvbnMtPnBhbV9zZXJ2aWNlX25hbWUgPSB4c3Ry ZHVwKFNTSERfUEFNX1NFUlZJQ0UpOwotKwlpZiAob3B0aW9ucy0+cGVybWl0X3BhbV91c2VyX2No YW5nZSA9PSAtMSkKLSsJCW9wdGlvbnMtPnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UgPSAwOwotIAot IAkvKiBTdGFuZGFyZCBPcHRpb25zICovCi0gCWlmIChvcHRpb25zLT5udW1faG9zdF9rZXlfZmls ZXMgPT0gMCkgewotQEAgLTQwMCwxNSArNDA0LDE3IEBACi0gCWlmIChvcHRpb25zLT5rZXJiZXJv c191bmlxdWVfY2NhY2hlID09IC0xKQotIAkJb3B0aW9ucy0+a2VyYmVyb3NfdW5pcXVlX2NjYWNo ZSA9IDA7Ci0gCWlmIChvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPT0gLTEpCi0tCQlvcHRp b25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAwOwotKwkJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0 aW9uID0gMTsKLSAJaWYgKG9wdGlvbnMtPmdzc19rZXlleCA9PSAtMSkKLS0JCW9wdGlvbnMtPmdz c19rZXlleCA9IDA7Ci0rCQlvcHRpb25zLT5nc3Nfa2V5ZXggPSAxOwotIAlpZiAob3B0aW9ucy0+ Z3NzX2NsZWFudXBfY3JlZHMgPT0gLTEpCi0gCQlvcHRpb25zLT5nc3NfY2xlYW51cF9jcmVkcyA9 IDE7Ci0gCWlmIChvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPT0gLTEpCi0gCQlvcHRpb25zLT5n c3NfZGVsZWdfY3JlZHMgPSAxOwotIAlpZiAob3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9 PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAxOwotKwlpZiAob3B0aW9u cy0+Z3NpX2FsbG93X2xpbWl0ZWRfcHJveHkgPT0gLTEpCi0rCQlvcHRpb25zLT5nc2lfYWxsb3df bGltaXRlZF9wcm94eSA9IDA7Ci0gCWlmIChvcHRpb25zLT5nc3NfYWxsb3dfczR1MnNlbGYgPT0g LTEpCi0gCQlvcHRpb25zLT5nc3NfYWxsb3dfczR1MnNlbGYgPSAwOwotIAlpZiAob3B0aW9ucy0+ Z3NzX3N0b3JlX3Jla2V5ID09IC0xKQotQEAgLTU4OCw3ICs1OTQsNyBAQAotIHR5cGVkZWYgZW51 bSB7Ci0gCXNCYWRPcHRpb24sCQkvKiA9PSB1bmtub3duIG9wdGlvbiAqLwotIAkvKiBQb3J0YWJs ZS1zcGVjaWZpYyBvcHRpb25zICovCi0tCXNVc2VQQU0sIHNQQU1TZXJ2aWNlTmFtZSwKLSsJc1Vz ZVBBTSwgc1BBTVNlcnZpY2VOYW1lLCBzUGVybWl0UEFNVXNlckNoYW5nZSwKLSAJLyogU3RhbmRh cmQgT3B0aW9ucyAqLwotIAlzUG9ydCwgc0hvc3RLZXlGaWxlLCBzTG9naW5HcmFjZVRpbWUsCi0g CXNQZXJtaXRSb290TG9naW4sIHNMb2dGYWNpbGl0eSwgc0xvZ0xldmVsLCBzTG9nVmVyYm9zZSwK LUBAIC02MTAsNiArNjE2LDggQEAKLSAJc0NsaWVudEFsaXZlSW50ZXJ2YWwsIHNDbGllbnRBbGl2 ZUNvdW50TWF4LCBzQXV0aG9yaXplZEtleXNGaWxlLAotIAlzR3NzQWxsb3dTNFUyU2VsZiwgc0dz c1Byb3h5UzRVMlNlcnZpY2VzLAotIAlzR3NzQXV0aGVudGljYXRpb24sIHNHc3NDbGVhbnVwQ3Jl ZHMsIHNHc3NEZWxlZ2F0ZUNyZWRzLCBzR3NzRW5hYmxlazV1c2Vycywgc0dzc1N0cmljdEFjY2Vw dG9yLAotKwlzR3NzQ3JlZHNQYXRoLAotKwlzR3NpQWxsb3dMaW1pdGVkUHJveHksCi0gCXNHc3NJ bmRpY2F0b3JzLCBzR3NzS2V5RXgsIHNHc3NLZXhBbGdvcml0aG1zLCBzR3NzU3RvcmVSZWtleSwK LSAJc0FjY2VwdEVudiwgc1NldEVudiwgc1Blcm1pdFR1bm5lbCwKLSAJc01hdGNoLCBzUGVybWl0 T3Blbiwgc1Blcm1pdExpc3Rlbiwgc0ZvcmNlQ29tbWFuZCwgc0Nocm9vdERpcmVjdG9yeSwKLUBA IC02NDQsOSArNjUyLDExIEBACi0gI2lmZGVmIFVTRV9QQU0KLSAJeyAidXNlcGFtIiwgc1VzZVBB TSwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJwYW1zZXJ2aWNlbmFtZSIsIHNQQU1TZXJ2aWNlTmFt ZSwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJwZXJtaXRwYW11c2VyY2hhbmdlIiwgc1Blcm1pdFBBTVVz ZXJDaGFuZ2UsIFNTSENGR19HTE9CQUwgfSwKLSAjZWxzZQotIAl7ICJ1c2VwYW0iLCBzVW5zdXBw b3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAicGFtc2VydmljZW5hbWUiLCBzVW5zdXBwb3J0 ZWQsIFNTSENGR19BTEwgfSwKLSsJeyAicGVybWl0cGFtdXNlcmNoYW5nZSIsIHNVbnN1cHBvcnRl ZCwgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbmRpZgotIAl7ICJwYW1hdXRoZW50aWNhdGlvbnZpYWti ZGludCIsIHNEZXByZWNhdGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCS8qIFN0YW5kYXJkIE9wdGlv bnMgKi8KLUBAIC03MDIsNiArNzEyLDEyIEBACi0gCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFs cyIsIHNHc3NDbGVhbnVwQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpY2xlYW51 cGNyZWRzIiwgc0dzc0NsZWFudXBDcmVkcywgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlk ZWxlZ2F0ZWNyZWRlbnRpYWxzIiwgc0dzc0RlbGVnYXRlQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwK LSsJeyAiZ3NzYXBpY3JlZGVudGlhbHNwYXRoIiwgc0dzc0NyZWRzUGF0aCwgU1NIQ0ZHX0dMT0JB TCB9LAotKyNpZmRlZiBHU0kKLSsJeyAiZ3NpYWxsb3dsaW1pdGVkcHJveHkiLCBzR3NpQWxsb3dM aW1pdGVkUHJveHksIFNTSENGR19HTE9CQUwgfSwKLSsjZWxzZQotKwl7ICJnc2lhbGxvd2xpbWl0 ZWRwcm94eSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKyNlbmRpZgotIAl7ICJn c3NhcGlzdHJpY3RhY2NlcHRvcmNoZWNrIiwgc0dzc1N0cmljdEFjY2VwdG9yLCBTU0hDRkdfR0xP QkFMIH0sCi0gCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwgc0dzc0tleUV4LCBTU0hDRkdfR0xPQkFM IH0sCi0gCXsgImdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc0dzc1N0b3JlUmVrZXks IFNTSENGR19HTE9CQUwgfSwKLUBAIC03MTUsNiArNzMxLDggQEAKLSAJeyAiZ3NzYXBpY2xlYW51 cGNyZWRlbnRpYWxzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2Fw aWNsZWFudXBjcmVkcyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3Nh cGlkZWxlZ2F0ZWNyZWRlbnRpYWxzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0r CXsgImdzc2FwaWNyZWRlbnRpYWxzcGF0aCIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9 LAotKwl7ICJnc2lhbGxvd2xpbWl0ZWRwcm94eSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JB TCB9LAotIAl7ICJnc3NhcGlzdHJpY3RhY2NlcHRvcmNoZWNrIiwgc1Vuc3VwcG9ydGVkLCBTU0hD RkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwgc1Vuc3VwcG9ydGVkLCBTU0hD RkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc1Vuc3Vw cG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi1AQCAtNzkxLDYgKzgwOSw4IEBACi0gCXsgInBlcm1p dGxpc3RlbiIsIHNQZXJtaXRMaXN0ZW4sIFNTSENGR19BTEwgfSwKLSAJeyAiZm9yY2Vjb21tYW5k Iiwgc0ZvcmNlQ29tbWFuZCwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJjaHJvb3RkaXJlY3RvcnkiLCBz Q2hyb290RGlyZWN0b3J5LCBTU0hDRkdfQUxMIH0sCi0rCXsgImRpc2FibGV1c2FnZXN0YXRzIiwg c1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMfSwKLSsJeyAidXNhZ2VzdGF0c3RhcmdldHMiLCBz VW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUx9LAotIAl7ICJob3N0Y2VydGlmaWNhdGUiLCBzSG9z dENlcnRpZmljYXRlLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgInJldm9rZWRrZXlzIiwgc1Jldm9r ZWRLZXlzLCBTU0hDRkdfQUxMIH0sCi0gCXsgInRydXN0ZWR1c2VyY2FrZXlzIiwgc1RydXN0ZWRV c2VyQ0FLZXlzLCBTU0hDRkdfQUxMIH0sCi1AQCAtMTQ3Miw2ICsxNDkyLDEwIEBACi0gCQkJKmNo YXJwdHIgPSB4c3RyZHVwKGFyZyk7Ci0gCQlicmVhazsKLSAKLSsJY2FzZSBzUGVybWl0UEFNVXNl ckNoYW5nZToKLSsJCWludHB0ciA9ICZvcHRpb25zLT5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlOwot KwkJZ290byBwYXJzZV9mbGFnOwotKwotIAkvKiBTdGFuZGFyZCBPcHRpb25zICovCi0gCWNhc2Ug c0JhZE9wdGlvbjoKLSAJCWdvdG8gb3V0OwotQEAgLTE3MzUsNiArMTc1OSwxMCBAQAotIAkJaW50 cHRyID0gJm9wdGlvbnMtPmdzc19kZWxlZ19jcmVkczsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLSAK LSsJY2FzZSBzR3NzQ3JlZHNQYXRoOgotKwkJY2hhcnB0ciA9ICZvcHRpb25zLT5nc3NfY3JlZHNf cGF0aDsKLSsJCWdvdG8gcGFyc2VfZmlsZW5hbWU7Ci0rCi0gCWNhc2Ugc0dzc1N0cmljdEFjY2Vw dG9yOgotIAkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3I7Ci0gCQlnb3Rv IHBhcnNlX2ZsYWc7Ci1AQCAtMTgwMiw2ICsxODMwLDEyIEBACi0gCQl9Ci0gCQlicmVhazsKLSAK LSsjaWZkZWYgR1NJCi0rCWNhc2Ugc0dzaUFsbG93TGltaXRlZFByb3h5OgotKwkJaW50cHRyID0g Jm9wdGlvbnMtPmdzaV9hbGxvd19saW1pdGVkX3Byb3h5OwotKwkJZ290byBwYXJzZV9mbGFnOwot KyNlbmRpZgotKwotIAljYXNlIHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uOgotIAkJaW50cHRyID0g Jm9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uOwotIAkJZ290byBwYXJzZV9mbGFnOwot QEAgLTMxMDMsNiArMzEzNyw3IEBACi0gCU1fQ1BfSU5UT1BUKHBhc3N3b3JkX2F1dGhlbnRpY2F0 aW9uKTsKLSAJTV9DUF9JTlRPUFQoZ3NzX2F1dGhlbnRpY2F0aW9uKTsKLSAJTV9DUF9JTlRPUFQo Z3NzX2FsbG93X3M0dTJzZWxmKTsKLSsJTV9DUF9JTlRPUFQoZ3NzX2RlbGVnX2NyZWRzKTsKLSAJ TV9DUF9JTlRPUFQocHVia2V5X2F1dGhlbnRpY2F0aW9uKTsKLSAJTV9DUF9JTlRPUFQocHVia2V5 X2F1dGhfb3B0aW9ucyk7Ci0gCU1fQ1BfSU5UT1BUKGtlcmJlcm9zX2F1dGhlbnRpY2F0aW9uKTsK LWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NlcnZjb25mLmggb3BlbnNzaC0xMC4zcDEv c2VydmNvbmYuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2VydmNvbmYuaAkyMDI2LTA3LTAx IDA5OjM4OjAwLjg2ODY1MDgzMyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NlcnZjb25mLmgJ MjAyNi0wNy0wMSAxMDozOTo0My41ODEzNTg0OTcgKzAyMDAKLUBAIC0xNTYsMTAgKzE1NiwxMiBA QAotIAkJCQkJCSAqIGJlIHN0b3JlZCBpbiBwZXItc2Vzc2lvbiBjY2FjaGUgKi8KLSAJaW50CXVz ZV9rdXNlcm9rOwotIAlpbnQJCWVuYWJsZV9rNXVzZXJzOwotKwlpbnQgICAgIGdzaV9hbGxvd19s aW1pdGVkX3Byb3h5OwkvKiBJZiB0cnVlLCBhY2NlcHQgbGltaXRlZCBwcm94aWVzICovCi0gCWlu dCAgICAgZ3NzX2F1dGhlbnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1dGhl bnRpY2F0aW9uICovCi0gCWludCAgICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0IEdT U0FQSSBrZXkgZXhjaGFuZ2UgKi8KLSAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyogSWYg dHJ1ZSwgZGVzdHJveSBjcmVkIGNhY2hlIG9uIGxvZ291dCAqLwotIAlpbnQgICAgIGdzc19kZWxl Z19jcmVkczsJLyogSWYgdHJ1ZSwgYWNjZXB0IGRlbGVnYXRlZCBHU1MgY3JlZGVudGlhbHMgKi8K LSsJY2hhciAgICpnc3NfY3JlZHNfcGF0aDsJCS8qIFVzZSBub24tZGVmYXVsdCBjcmVkZW50aWFs cyBwYXRoICovCi0gCWludCAgICAgZ3NzX3N0cmljdF9hY2NlcHRvcjsJLyogSWYgdHJ1ZSwgcmVz dHJpY3QgdGhlIEdTU0FQSSBhY2NlcHRvciBuYW1lICovCi0gCWludCAgICAgZ3NzX2FsbG93X3M0 dTJzZWxmOyAvKiAwPW5vLCBJTlRfTUFYPXllcyAoR1NTX0NfSU5ERUZJTklURSksID4wPXRpY2tl dCBsaWZldGltZSBzICovCi0gCWNoYXIgICoqZ3NzX3Byb3h5X3NlcnZpY2VzOyAvKiBTNFUyUHJv eHkgdGFyZ2V0IHNlcnZpY2UgcHJpbmNpcGFscyAqLwotQEAgLTIyNyw2ICsyMjksNyBAQAotIAot IAlpbnQJdXNlX3BhbTsJCS8qIEVuYWJsZSBhdXRoIHZpYSBQQU0gKi8KLSAJY2hhciAgICpwYW1f c2VydmljZV9uYW1lOwotKwlpbnQJcGVybWl0X3BhbV91c2VyX2NoYW5nZTsJLyogQWxsb3cgUEFN IHRvIGNoYW5nZSB1c2VyIG5hbWUgKi8KLSAKLSAJaW50CXBlcm1pdF90dW47Ci0gCi1kaWZmIC1O dXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2guMSBvcGVuc3NoLTEwLjNwMS9zc2guMQotLS0tIG9w ZW5zc2gtMTAuM3AxLm9yaWcvc3NoLjEJMjAyNi0wNy0wMSAwOTozODowMC4zMjI0MzcyOTIgKzAy MDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2guMQkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4MTg0MDA5 MiArMDIwMAotQEAgLTE1MzEsNiArMTUzMSwxOCBAQAotIG9uIHRvIG5ldyBjb25uZWN0aW9ucyku Ci0gLkl0IEV2IFVTRVIKLSBTZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHVzZXIgbG9nZ2luZyBpbi4K LSsuSXQgRXYgWDUwOV9DRVJUX0RJUgotK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3Bl Y2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKLStDQSBjZXJ0aWZpY2F0ZXMg ZGlyZWN0b3J5LgotKy5JdCBFdiBYNTA5X1VTRVJfQ0VSVAotK1VzZWQgZm9yIEdTSSBhdXRoZW50 aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKLStjZXJ0 aWZpY2F0ZSB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB0byB0aGUgc2VydmVyLgotKy5J dCBFdiBYNTA5X1VTRVJfS0VZCi0rVXNlZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZp ZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQotK3ByaXZhdGUga2V5IHRvIGJlIHVz ZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBzZXJ2ZXIuCi0rLkl0IEV2IFg1MDlfVVNFUl9Q Uk9YWQotK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5k YXJkIGxvY2F0aW9uIGZvciB0aGUKLStwcm94eSBjcmVkZW50aWFsIHRvIGJlIHVzZWQgZm9yIGF1 dGhlbnRpY2F0aW9uIHRvIHRoZSBzZXJ2ZXIuCi0gLkVsCi0gLlBwCi0gQWRkaXRpb25hbGx5LAot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoLmMgb3BlbnNzaC0xMC4zcDEvc3NoLmMK LS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuODg2NDY1 OTMyICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoLmMJMjAyNi0wNy0wMSAxMDozOTo0My41 ODI0NjU3NTEgKzAyMDAKLUBAIC01NzksNiArNTc5LDM4IEBACi0gCQkJZmF0YWwoIkNhbid0IG9w ZW4gdXNlciBjb25maWcgZmlsZSAlLjEwMHM6ICIKLSAJCQkgICAgIiUuMTAwcyIsIGNvbmZpZywg c3RyZXJyb3IoZXJybm8pKTsKLSAJfSBlbHNlIHsKLSsJICAgIC8qCi0rCSAgICAgKiBTaW5jZSB0 aGUgY29uZmlnIGZpbGUgcGFyc2luZyBjb2RlIGFib3J0cyBpZiBpdCBzZWVzCi0rCSAgICAgKiBv cHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplLCBhbGxvdyB1c2VycyB0byBwdXQKLSsJICAgICAq IG9wdGlvbnMgc3BlY2lmaWMgdG8gY29tcGlsZS10aW1lIGFkZC1vbnMgaW4gYWx0ZXJuYXRlCi0r CSAgICAgKiBjb25maWcgZmlsZXMgc28gdGhlaXIgcHJpbWFyeSBjb25maWcgZmlsZSB3aWxsCi0r CSAgICAgKiBpbnRlcm9wZXJhdGUgU1NIIHZlcnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aG9z ZQotKwkgICAgICogb3B0aW9ucy4KLSsJICAgICAqLwotKyNpZmRlZiBHU1NBUEkKLSsJCXIgPSBz bnByaW50ZihidWYsIHNpemVvZiBidWYsICIlcy8lcy5nc3NhcGkiLCBwdy0+cHdfZGlyLAotKwkJ ICAgIF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxFKTsKLSsJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIg PCBzaXplb2YoYnVmKSkKLSsJCQkodm9pZClyZWFkX2NvbmZpZ19maWxlKGJ1ZiwgcHcsIGhvc3Qs IGhvc3RfbmFtZSwgY21kLAotKwkJCSAgICAmb3B0aW9ucywgU1NIQ09ORl9DSEVDS1BFUk0gfCBT U0hDT05GX1VTRVJDT05GIHwKLSsJCQkgICAgKGZpbmFsX3Bhc3MgPyBTU0hDT05GX0ZJTkFMIDog MCksIHdhbnRfZmluYWxfcGFzcyk7Ci0rI2lmZGVmIEdTSQotKwkJciA9IHNucHJpbnRmKGJ1Ziwg c2l6ZW9mIGJ1ZiwgIiVzLyVzLmdzaSIsIHB3LT5wd19kaXIsCi0rCQkgICAgX1BBVEhfU1NIX1VT RVJfQ09ORkZJTEUpOwotKwkJaWYgKHIgPiAwICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQot KwkJCSh2b2lkKXJlYWRfY29uZmlnX2ZpbGUoYnVmLCBwdywgaG9zdCwgaG9zdF9uYW1lLCBjbWQs Ci0rCQkJICAgICZvcHRpb25zLCBTU0hDT05GX0NIRUNLUEVSTSB8IFNTSENPTkZfVVNFUkNPTkYg fAotKwkJCSAgICAoZmluYWxfcGFzcyA/IFNTSENPTkZfRklOQUwgOiAwKSwgd2FudF9maW5hbF9w YXNzKTsKLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChLUkI1KQotKwkJciA9IHNucHJpbnRmKGJ1Ziwg c2l6ZW9mIGJ1ZiwgIiVzLyVzLmtyYiIsIHB3LT5wd19kaXIsCi0rCQkgICAgX1BBVEhfU1NIX1VT RVJfQ09ORkZJTEUpOwotKwkJaWYgKHIgPiAwICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQot KwkJCSh2b2lkKXJlYWRfY29uZmlnX2ZpbGUoYnVmLCBwdywgaG9zdCwgaG9zdF9uYW1lLCBjbWQs Ci0rCQkJICAgICZvcHRpb25zLCBTU0hDT05GX0NIRUNLUEVSTSB8IFNTSENPTkZfVVNFUkNPTkYg fAotKwkJCSAgICAoZmluYWxfcGFzcyA/IFNTSENPTkZfRklOQUwgOiAwKSwgd2FudF9maW5hbF9w YXNzKTsKLSsjZW5kaWYKLSsjZW5kaWYKLSAJCXIgPSBzbnByaW50ZihidWYsIHNpemVvZiBidWYs ICIlcy8lcyIsIHB3LT5wd19kaXIsCi0gCQkgICAgX1BBVEhfU1NIX1VTRVJfQ09ORkZJTEUpOwot IAkJaWYgKHIgPiAwICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQotQEAgLTEyOTcsNiArMTMy OSw5IEBACi0gCWlmIChvcHRpb25zLnVzZXIgPT0gTlVMTCkgewotIAkJdXNlcl93YXNfZGVmYXVs dCA9IDE7Ci0gCQlvcHRpb25zLnVzZXIgPSB4c3RyZHVwKHB3LT5wd19uYW1lKTsKLSsJCW9wdGlv bnMuaW1wbGljaXQgPSAxOwotKwl9IGVsc2UgewotKwkJb3B0aW9ucy5pbXBsaWNpdCA9IDA7Ci0g CX0KLSAKLSAJLyoKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaF9jb25maWcgb3Bl bnNzaC0xMC4zcDEvc3NoX2NvbmZpZwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoX2NvbmZp ZwkyMDI2LTA3LTAxIDA5OjM4OjAwLjMyMjc2ODU4OCArMDIwMAotKysrIG9wZW5zc2gtMTAuM3Ax L3NzaF9jb25maWcJMjAyNi0wNy0wMSAxMDozOTo0My41ODI3MjU0OTYgKzAyMDAKLUBAIC0yMiw5 ICsyMiw5IEBACi0gIyAgIEZvcndhcmRYMTEgbm8KLSAjICAgUGFzc3dvcmRBdXRoZW50aWNhdGlv biB5ZXMKLSAjICAgSG9zdGJhc2VkQXV0aGVudGljYXRpb24gbm8KLS0jICAgR1NTQVBJQXV0aGVu dGljYXRpb24gbm8KLS0jICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubwotLSMgICBHU1NB UElLZXlFeGNoYW5nZSBubwotKyMgICBHU1NBUElBdXRoZW50aWNhdGlvbiB5ZXMKLSsjICAgR1NT QVBJRGVsZWdhdGVDcmVkZW50aWFscyB5ZXMKLSsjICAgR1NTQVBJS2V5RXhjaGFuZ2UgeWVzCi0g IyAgIEdTU0FQSVRydXN0RE5TIG5vCi0gIyAgIEJhdGNoTW9kZSBubwotICMgICBDaGVja0hvc3RJ UCBubwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoX2NvbmZpZy41IG9wZW5zc2gt MTAuM3AxL3NzaF9jb25maWcuNQotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoX2NvbmZpZy41 CTIwMjYtMDctMDEgMDk6Mzg6MDAuODg2NjEwMTcwICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEv c3NoX2NvbmZpZy41CTIwMjYtMDctMDEgMTA6Mzk6NDMuNTgzMjMyNDM4ICswMjAwCi1AQCAtNTIs NiArNTIsMTIgQEAKLSB1c2VyJ3MgY29uZmlndXJhdGlvbiBmaWxlCi0gLlBxIFBhIH4vLnNzaC9j b25maWcKLSAuSXQKLStHU1NBUEkgY29uZmlndXJhdGlvbiBmaWxlCi0rLlBxIFBhICRIT01FLy5z c2gvY29uZmlnLmdzc2FwaQotKy5JdAotK0tlcmJlcm9zIGNvbmZpZ3VyYXRpb24gZmlsZQotKy5Q cSBQYSAkSE9NRS8uc3NoL2NvbmZpZy5rcmIKLSsuSXQKLSBzeXN0ZW0td2lkZSBjb25maWd1cmF0 aW9uIGZpbGUKLSAuUHEgUGEgL2V0Yy9zc2gvc3NoX2NvbmZpZwotIC5FbAotQEAgLTk2OSw3ICs5 NzUsNyBAQAotIC5JdCBDbSBHU1NBUElBdXRoZW50aWNhdGlvbgotIFNwZWNpZmllcyB3aGV0aGVy IHVzZXIgYXV0aGVudGljYXRpb24gYmFzZWQgb24gR1NTQVBJIGlzIGFsbG93ZWQuCi0gVGhlIGRl ZmF1bHQgaXMKLS0uQ20gbm8gLgotKy5DbSB5ZXMgLgotIC5JdCBDbSBHU1NBUElDbGllbnRJZGVu dGl0eQotIElmIHNldCwgc3BlY2lmaWVzIHRoZSBHU1NBUEkgY2xpZW50IGlkZW50aXR5IHRoYXQg c3NoIHNob3VsZCB1c2Ugd2hlbgotIGNvbm5lY3RpbmcgdG8gdGhlIHNlcnZlci4gVGhlIGRlZmF1 bHQgaXMgdW5zZXQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQKLUBAIC05NzcsMTIgKzk4 MywxMiBAQAotIC5JdCBDbSBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCi0gRm9yd2FyZCAoZGVs ZWdhdGUpIGNyZWRlbnRpYWxzIHRvIHRoZSBzZXJ2ZXIuCi0gVGhlIGRlZmF1bHQgaXMKLS0uQ20g bm8gLgotKy5DbSB5ZXMgLgotIC5JdCBDbSBHU1NBUElLZXlFeGNoYW5nZQotIFNwZWNpZmllcyB3 aGV0aGVyIGtleSBleGNoYW5nZSBiYXNlZCBvbiBHU1NBUEkgbWF5IGJlIHVzZWQuIFdoZW4gdXNp bmcKLSBHU1NBUEkga2V5IGV4Y2hhbmdlIHRoZSBzZXJ2ZXIgbmVlZCBub3QgaGF2ZSBhIGhvc3Qg a2V5LgotIFRoZSBkZWZhdWx0IGlzCi0tLkRxIG5vIC4KLSsuRHEgeWVzIC4KLSAuSXQgQ20gR1NT QVBJUmVuZXdhbEZvcmNlc1Jla2V5Ci0gSWYgc2V0IHRvCi0gLkRxIHllcwotQEAgLTE2NDYsNyAr MTY1Miw3IEBACi0gLkNtIHBhc3N3b3JkICkgLgotIFRoZSBkZWZhdWx0IGlzOgotIC5CZCAtbGl0 ZXJhbCAtb2Zmc2V0IGluZGVudAotLWdzc2FwaS13aXRoLW1pYyxob3N0YmFzZWQscHVibGlja2V5 LAotK2dzc2FwaS1rZXlleCxnc3NhcGktd2l0aC1taWMsaG9zdGJhc2VkLHB1YmxpY2tleSwKLSBr ZXlib2FyZC1pbnRlcmFjdGl2ZSxwYXNzd29yZAotIC5FZAotIC5JdCBDbSBQcm94eUNvbW1hbmQK LWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGNvbm5lY3QyLmMgb3BlbnNzaC0xMC4z cDEvc3NoY29ubmVjdDIuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoY29ubmVjdDIuYwky MDI2LTA3LTAxIDA5OjM4OjAwLjgxMjI3ODcxOSArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3Nz aGNvbm5lY3QyLmMJMjAyNi0wNy0wMSAxMDozOTo0My41ODM4NjcwMzIgKzAyMDAKLUBAIC04NjMs NiArODYzLDExIEBACi0gCWdzc19PSUQgbWVjaCA9IE5VTEw7Ci0gCWNoYXIgKmdzc19ob3N0ID0g TlVMTDsKLSAKLSsJaWYgKCFvcHRpb25zLmdzc19hdXRoZW50aWNhdGlvbikgewotKwkJdmVyYm9z ZSgiR1NTQVBJIGF1dGhlbnRpY2F0aW9uIGRpc2FibGVkLiIpOwotKwkJcmV0dXJuIDA7Ci0rCX0K LSsKLSAJaWYgKG9wdGlvbnMuZ3NzX3NlcnZlcl9pZGVudGl0eSkgewotIAkJZ3NzX2hvc3QgPSB4 c3RyZHVwKG9wdGlvbnMuZ3NzX3NlcnZlcl9pZGVudGl0eSk7Ci0gCX0gZWxzZSBpZiAob3B0aW9u cy5nc3NfdHJ1c3RfZG5zKSB7Ci1AQCAtOTcxLDcgKzk3Niw4IEBACi0gCi0gCWlmIChzdGF0dXMg PT0gR1NTX1NfQ09NUExFVEUpIHsKLSAJCS8qIHNlbmQgZWl0aGVyIGNvbXBsZXRlIG9yIE1JQywg ZGVwZW5kaW5nIG9uIG1lY2hhbmlzbSAqLwotLQkJaWYgKCEoZmxhZ3MgJiBHU1NfQ19JTlRFR19G TEFHKSkgewotKwkJaWYgKHN0cmNtcChhdXRoY3R4dC0+bWV0aG9kLT5uYW1lLCAiZ3NzYXBpIikg PT0gMCB8fAotKwkJICAgICEoZmxhZ3MgJiBHU1NfQ19JTlRFR19GTEFHKSkgewotIAkJCWlmICgo ciA9IHNzaHBrdF9zdGFydChzc2gsCi0gCQkJICAgIFNTSDJfTVNHX1VTRVJBVVRIX0dTU0FQSV9F WENIQU5HRV9DT01QTEVURSkpICE9IDAgfHwKLSAJCQkgICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gp KSAhPSAwKQotQEAgLTExMzgsNiArMTE0NCwyMCBAQAotIAlyZXR1cm4gcjsKLSB9Ci0gCi0rI2lm ZGVmIEdTSQotK2V4dGVybgotK2NvbnN0IGdzc19PSURfZGVzYyAqIGNvbnN0IGdzc19tZWNoX2ds b2J1c19nc3NhcGlfb3BlbnNzbDsKLStleHRlcm4KLStjb25zdCBnc3NfT0lEX2Rlc2MgKiBjb25z dCBnc3NfbWVjaF9nbG9idXNfZ3NzYXBpX29wZW5zc2xfbWljdjI7Ci0rI2RlZmluZSBpc19nc2lf b2lkKG9pZCkgXAotKyAgKChvaWQtPmxlbmd0aCA9PSBnc3NfbWVjaF9nbG9idXNfZ3NzYXBpX29w ZW5zc2wtPmxlbmd0aCAmJiBcCi0rICAgIChtZW1jbXAob2lkLT5lbGVtZW50cywgZ3NzX21lY2hf Z2xvYnVzX2dzc2FwaV9vcGVuc3NsLT5lbGVtZW50cywgXAotKwkgICAgb2lkLT5sZW5ndGgpID09 IDApKSB8fCBcCi0rICAgKG9pZC0+bGVuZ3RoID09IGdzc19tZWNoX2dsb2J1c19nc3NhcGlfb3Bl bnNzbF9taWN2Mi0+bGVuZ3RoICYmIFwKLSsgICAgKG1lbWNtcChvaWQtPmVsZW1lbnRzLCBnc3Nf bWVjaF9nbG9idXNfZ3NzYXBpX29wZW5zc2xfbWljdjItPmVsZW1lbnRzLCBcCi0rCSAgICBvaWQt Pmxlbmd0aCkgPT0gMCkpKQotKyNlbmRpZgotKwotIGludAotIHVzZXJhdXRoX2dzc2tleWV4KHN0 cnVjdCBzc2ggKnNzaCkKLSB7Ci1AQCAtMTE2MCw2ICsxMTgwLDEyIEBACi0gCWlmICgoYiA9IHNz aGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0g Ci0rI2lmZGVmIEdTSQotKwlpZiAob3B0aW9ucy5pbXBsaWNpdCAmJiBpc19nc2lfb2lkKGdzc19r ZXhfY29udGV4dC0+b2lkKSkKLSsJCXNzaF9nc3NhcGlfYnVpbGRtaWMoYiwgIiIsIGF1dGhjdHh0 LT5zZXJ2aWNlLAotKwkJICAgICJnc3NhcGkta2V5ZXgiLCBzc2gtPmtleC0+c2Vzc2lvbl9pZCk7 Ci0rCWVsc2UKLSsjZW5kaWYKLSAJc3NoX2dzc2FwaV9idWlsZG1pYyhiLCBhdXRoY3R4dC0+c2Vy dmVyX3VzZXIsIGF1dGhjdHh0LT5zZXJ2aWNlLAotIAkgICAgImdzc2FwaS1rZXlleCIsIHNzaC0+ a2V4LT5zZXNzaW9uX2lkKTsKLSAKLUBAIC0xMTczLDcgKzExOTksOSBAQAotIAl9Ci0gCi0gCWlm ICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVFU1QpKSAhPSAw IHx8Ci0tCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGF1dGhjdHh0LT5zZXJ2ZXJf dXNlcikpICE9IDAgfHwKLSsJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwKLSsJCShv cHRpb25zLmltcGxpY2l0ICYmIGlzX2dzaV9vaWQoZ3NzX2tleF9jb250ZXh0LT5vaWQpKSA/Ci0r CQkiIiA6IGF1dGhjdHh0LT5zZXJ2ZXJfdXNlcikpICE9IDAgfHwKLSAJICAgIChyID0gc3NocGt0 X3B1dF9jc3RyaW5nKHNzaCwgYXV0aGN0eHQtPnNlcnZpY2UpKSAhPSAwIHx8Ci0gCSAgICAociA9 IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGF1dGhjdHh0LT5tZXRob2QtPm5hbWUpKSAhPSAwIHx8 Ci0gCSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgbWljLnZhbHVlLCBtaWMubGVuZ3Ro KSkgIT0gMCB8fAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZC44IG9wZW5zc2gt MTAuM3AxL3NzaGQuOAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZC44CTIwMjYtMDctMDEg MDk6Mzg6MDAuMzc1OTg0MTc0ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoZC44CTIwMjYt MDctMDEgMTA6Mzk6NDMuNTg0NDEyNzQ0ICswMjAwCi1AQCAtODQwLDYgKzg0MCwyOSBAQAotICMg QSBDQSBrZXksIGFjY2VwdGVkIGZvciBhbnkgaG9zdCBpbiAqLm15ZG9tYWluLmNvbSBvciAqLm15 ZG9tYWluLm9yZwotIEBjZXJ0LWF1dGhvcml0eSAqLm15ZG9tYWluLm9yZywqLm15ZG9tYWluLmNv bSBzc2gtcnNhIEFBQUFCNVcuLi4KLSAuRWQKLSsuU2ggRU5WSVJPTk1FTlQKLSsuTm0KLSt3aWxs IG5vcm1hbGx5IHNldCB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczoKLSsuQmwg LXRhZyAtd2lkdGggIlNTSF9PUklHSU5BTF9DT01NQU5EIgotKy5JdCBFdiBHUklETUFQCi0rQXBw bGllcyB0byBHU0kgYXV0aGVudGljYXRpb24vYXV0aG9yaXphdGlvbi4gU3BlY2lmaWVzIHRoZSBs b2NhdGlvbiBvZiB0aGUKLStncmlkbWFwZmlsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGdyaWRt YXAgZmlsZSBpcyBhc3N1bWVkIHRvIGJlIGF2YWlsYWJsZSBhdAotKy9ldGMvZ3JpZC1zZWN1cml0 eS9ncmlkLW1hcGZpbGUgZm9yIHNlcnZpY2VzIHJ1bm5pbmcgYXMgcm9vdCBhbmQgYXQKLStIT01F Ly5ncmlkbWFwIGZvciBzZXJ2aWNlcyBydW5uaW5nIGFzIG5vbi1yb290IHdoZXJlIEhPTUUgaXMg dGhlIGhvbWUgZGlyZWN0b3J5Ci0rb2YgdGhlIGVmZmVjdGl2ZSB1c2VyIGZyb20gdGhlIHBhc3N3 b3JkIGZpbGUgZW50cnkuCi0rLkl0IEV2IFg1MDlfQ0VSVF9ESVIKLStVc2VkIGZvciBHU0kgYXV0 aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCi0r Q0EgY2VydGlmaWNhdGVzIGRpcmVjdG9yeS4KLSsuSXQgRXYgWDUwOV9VU0VSX0NFUlQKLStVc2Vk IGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlv biBmb3IgdGhlCi0rY2VydGlmaWNhdGUgdG8gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8g dGhlIGNsaWVudC4KLSsuSXQgRXYgWDUwOV9VU0VSX0tFWQotK1VzZWQgZm9yIEdTSSBhdXRoZW50 aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKLStwcml2 YXRlIGtleSB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB0byB0aGUgY2xpZW50LgotKy5J dCBFdiBYNTA5X1VTRVJfUFJPWFkKLStVc2VkIGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNp ZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCi0rcHJveHkgY3JlZGVudGlhbCB0 byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB0byB0aGUgY2xpZW50LgotKy5FbAotIC5TaCBG SUxFUwotIC5CbCAtdGFnIC13aWR0aCBEcyAtY29tcGFjdAotIC5JdCBQYSB+Ly5odXNobG9naW4K LWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGRfY29uZmlnIG9wZW5zc2gtMTAuM3Ax L3NzaGRfY29uZmlnCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkX2NvbmZpZwkyMDI2LTA3 LTAxIDA5OjM4OjAwLjQ0MTk1NDEzOCArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NzaGRfY29u ZmlnCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTg0ODA3OTg4ICswMjAwCi1AQCAtNzgsMTAgKzc4LDEx IEBACi0gI0tlcmJlcm9zVXNlS3VzZXJvayB5ZXMKLSAKLSAjIEdTU0FQSSBvcHRpb25zCi0tI0dT U0FQSUF1dGhlbnRpY2F0aW9uIG5vCi0rI0dTU0FQSUF1dGhlbnRpY2F0aW9uIHllcwotKyNHU1NB UElEZWxlZ2F0ZUNyZWRlbnRpYWxzIHllcwotICNHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVz Ci0gI0dTU0FQSVN0cmljdEFjY2VwdG9yQ2hlY2sgeWVzCi0tI0dTU0FQSUtleUV4Y2hhbmdlIG5v Ci0rI0dTU0FQSUtleUV4Y2hhbmdlIHllcwotICNHU1NBUElFbmFibGVrNXVzZXJzIG5vCi0gCi0g IyBTZXQgdGhpcyB0byAneWVzJyB0byBlbmFibGUgUEFNIGF1dGhlbnRpY2F0aW9uLCBhY2NvdW50 IHByb2Nlc3NpbmcsCi1AQCAtOTcsNiArOTgsMTAgQEAKLSAjIHByb2JsZW1zLgotICNVc2VQQU0g bm8KLSAKLSsjIFNldCB0byAneWVzJyB0byBhbGxvdyB0aGUgUEFNIHN0YWNrIHRvIGNoYW5nZSB0 aGUgdXNlciBuYW1lIGR1cmluZwotKyMgY2FsbHMgdG8gYXV0aGVudGljYXRpb24KLSsjUGVybWl0 UEFNVXNlckNoYW5nZSBubwotKwotICNBbGxvd0FnZW50Rm9yd2FyZGluZyB5ZXMKLSAjQWxsb3dU Y3BGb3J3YXJkaW5nIHllcwotICNHYXRld2F5UG9ydHMgbm8KLWRpZmYgLU51ciBvcGVuc3NoLTEw LjNwMS5vcmlnL3NzaGRfY29uZmlnLjUgb3BlbnNzaC0xMC4zcDEvc3NoZF9jb25maWcuNQotLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZF9jb25maWcuNQkyMDI2LTA3LTAxIDA5OjM4OjAwLjg2 OTAxOTA3MiArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NzaGRfY29uZmlnLjUJMjAyNi0wNy0w MSAxMDozOTo0My41ODUyNDYwODkgKzAyMDAKLUBAIC03MzYsMTUgKzczNiwzMCBAQAotIHRvIGFs bG93IHRoZSBjbGllbnQgdG8gc2VsZWN0IHRoZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBmb3J3YXJk aW5nIGlzIGJvdW5kLgotIFRoZSBkZWZhdWx0IGlzCi0gLkNtIG5vIC4KLSsuSXQgQ20gR1NJQWxs b3dMaW1pdGVkUHJveHkKLStTcGVjaWZpZXMgd2hldGhlciB0byBhY2NlcHQgbGltaXRlZCBwcm94 eSBjcmVkZW50aWFscyBmb3IgYXV0aGVudGljYXRpb24uCi0rVGhlIGRlZmF1bHQgaXMKLSsuQ20g bm8gLgotIC5JdCBDbSBHU1NBUElBdXRoZW50aWNhdGlvbgotIFNwZWNpZmllcyB3aGV0aGVyIHVz ZXIgYXV0aGVudGljYXRpb24gYmFzZWQgb24gR1NTQVBJIGlzIGFsbG93ZWQuCi0gVGhlIGRlZmF1 bHQgaXMKLS0uQ20gbm8gLgotKy5DbSB5ZXMgLgotIC5JdCBDbSBHU1NBUElDbGVhbnVwQ3JlZGVu dGlhbHMKLSBTcGVjaWZpZXMgd2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGRlc3Ryb3kgdGhlIHVz ZXIncyBjcmVkZW50aWFscyBjYWNoZQotIG9uIGxvZ291dC4KLSBUaGUgZGVmYXVsdCBpcwotIC5D bSB5ZXMgLgotKy5JdCBDbSBHU1NBUElDcmVkZW50aWFsc1BhdGgKLStJZiBzcGVjaWZpZWQsIHRo ZSBkZWxlZ2F0ZWQgR1NTQVBJIGNyZWRlbnRpYWwgaXMgc3RvcmVkIGluIHRoZQotK2dpdmVuIHBh dGgsIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZyBjcmVkZW50aWFscy4KLStQYXRocyBjYW4gYmUg c3BlY2lmaWVkIHdpdGggc3ludGF4IHNpbWlsYXIgdG8gdGhlIEF1dGhvcml6ZWRLZXlzRmlsZQot K29wdGlvbiAoaS5lLiwgYWNjZXB0aW5nICVoIGFuZCAldSB0b2tlbnMpLgotK1doZW4gdXNpbmcg dGhpcyBvcHRpb24sCi0rc2V0dGluZyAnR3NzYXBpQ2xlYW51cENyZWRlbnRpYWxzIG5vJyBpcyBy ZWNvbW1lbmRlZCwKLStzbyBsb2dnaW5nIG91dCBvZiBvbmUgc2Vzc2lvbgotK2RvZXNuJ3QgcmVt b3ZlIHRoZSBjcmVkZW50aWFscyBpbiB1c2UgYnkgYW5vdGhlciBzZXNzaW9uIG9mCi0rdGhlIHNh bWUgdXNlci4KLStDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIEdTSSBtZWNoYW5p c20uCi0gLkl0IENtIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMKLSBBY2NlcHQgZGVsZWdhdGVk IGNyZWRlbnRpYWxzIG9uIHRoZSBzZXJ2ZXIgc2lkZS4gIFRoZSBkZWZhdWx0IGlzCi0gLkNNIHll cyAuCi1AQCAtNzU4LDcgKzc3Myw3IEBACi0gU3BlY2lmaWVzIHdoZXRoZXIga2V5IGV4Y2hhbmdl IGJhc2VkIG9uIEdTU0FQSSBpcyBhbGxvd2VkLiBHU1NBUEkga2V5IGV4Y2hhbmdlCi0gZG9lc24n dCByZWx5IG9uIHNzaCBrZXlzIHRvIHZlcmlmeSBob3N0IGlkZW50aXR5LgotIFRoZSBkZWZhdWx0 IGlzCi0tLkNtIG5vIC4KLSsuQ20geWVzIC4KLSAuSXQgQ20gR1NTQVBJU3RyaWN0QWNjZXB0b3JD aGVjawotIERldGVybWluZXMgd2hldGhlciB0byBiZSBzdHJpY3QgYWJvdXQgdGhlIGlkZW50aXR5 IG9mIHRoZSBHU1NBUEkgYWNjZXB0b3IKLSBhIGNsaWVudCBhdXRoZW50aWNhdGVzIGFnYWluc3Qu Ci1AQCAtMjE5Myw2ICsyMjA4LDEyIEBACi0gYXMgYSBub24tcm9vdCB1c2VyLgotIFRoZSBkZWZh dWx0IGlzCi0gLkNtIG5vIC4KLSsuSXQgQ20gUGVybWl0UEFNVXNlckNoYW5nZQotK0lmIHNldCB0 bwotKy5DbSB5ZXMKLSt0aGlzIHdpbGwgZW5hYmxlIFBBTSBhdXRoZW50aWNhdGlvbiB0byBjaGFu Z2UgdGhlIG5hbWUgb2YgdGhlIHVzZXIgYmVpbmcKLSthdXRoZW50aWNhdGVkLiAgVGhlIGRlZmF1 bHQgaXMKLSsuQ20gbm8gLgotIC5JdCBDbSBWZXJzaW9uQWRkZW5kdW0KLSBPcHRpb25hbGx5IHNw ZWNpZmllcyBhZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSBTU0ggcHJvdG9jb2wgYmFu bmVyCi0gc2VudCBieSB0aGUgc2VydmVyIHVwb24gY29ubmVjdGlvbi4KLWRpZmYgLU51ciBvcGVu c3NoLTEwLjNwMS5vcmlnL3NzaGRfY29uZmlnX3JlZGhhdCBvcGVuc3NoLTEwLjNwMS9zc2hkX2Nv bmZpZ19yZWRoYXQKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGRfY29uZmlnX3JlZGhhdAky MDI2LTA3LTAxIDA5OjM4OjAwLjkyMzI2NjI5MCArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3Nz aGRfY29uZmlnX3JlZGhhdAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4NTUyMDQxOSArMDIwMAotQEAg LTIsOSArMiw2IEBACi0gCi0gS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiBubwotIAotLUdT U0FQSUF1dGhlbnRpY2F0aW9uIHllcwotLUdTU0FQSUNsZWFudXBDcmVkZW50aWFscyBubwotLQot IFVzZVBBTSB5ZXMKLSAKLSBYMTFGb3J3YXJkaW5nIHllcwotZGlmZiAtTnVyIG9wZW5zc2gtMTAu M3AxLm9yaWcvc3NoZC1zZXNzaW9uLmMgb3BlbnNzaC0xMC4zcDEvc3NoZC1zZXNzaW9uLmMKLS0t LSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGQtc2Vzc2lvbi5jCTIwMjYtMDctMDEgMDk6Mzg6MDAu ODY4ODMwODYzICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoZC1zZXNzaW9uLmMJMjAyNi0w Ny0wMSAxNDoyNDozNC4wODU3NDg5NjQgKzAyMDAKLUBAIC0xMzg4LDExICsxMzg4LDEyIEBACi0g I2VuZGlmCi0gCi0gI2lmZGVmIEdTU0FQSQotLQlpZiAob3B0aW9ucy5nc3NfYXV0aGVudGljYXRp b24pIHsKLSsJaWYgKG9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuZ3NzX2Rl bGVnX2NyZWRzKSB7Ci0gCQl0ZW1wb3JhcmlseV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7Ci0gCQlh dXRoY3R4dC0+a3JiNV9zZXRfZW52ID0gc3NoX2dzc2FwaV9zdG9yZWNyZWRzKCk7Ci0gCQlyZXN0 b3JlX3VpZCgpOwotIAl9Ci0rI2lmZGVmIEtSQjUKLSAJLyoKLSAJICogR1NTQVBJQWxsb3dTNFUy U2VsZiAvIEdTU0FQSVByb3h5UzRVMlNlcnZpY2VzOiBpZiBubyBjcmVkZW50aWFscyB3ZXJlIHN0 b3JlZAotIAkgKiBhYm92ZSAoaS5lLiBubyBHU1NBUEkgYXV0aCB3aXRoIGRlbGVnYXRpb24gb2Nj dXJyZWQpLCB1c2UgUzRVMlNlbGYKLUBAIC0xNDkyLDYgKzE0OTMsNyBAQAotIAkJfQotIAl9Ci0g I2VuZGlmCi0rI2VuZGlmCi0gI2lmZGVmIFdJVEhfU0VMSU5VWAotIAlzc2hkX3NlbGludXhfc2V0 dXBfZXhlY19jb250ZXh0KGF1dGhjdHh0LT5wdy0+cHdfbmFtZSwKLSAJICAgIGluZXRkX2ZsYWcs IGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRoY3R4dCwKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5v cmlnL3NzaC1nc3MuaCBvcGVuc3NoLTEwLjNwMS9zc2gtZ3NzLmgKLS0tLSBvcGVuc3NoLTEwLjNw MS5vcmlnL3NzaC1nc3MuaAkyMDI2LTA3LTAxIDA5OjM4OjAwLjg2ODcyMTYxMiArMDIwMAotKysr IG9wZW5zc2gtMTAuM3AxL3NzaC1nc3MuaAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4NjI5NzUyMiAr MDIwMAotQEAgLTExMCwxMiArMTEwLDE0IEBACi0gfSBzc2hfZ3NzYXBpX2NjYWNoZTsKLSAKLSB0 eXBlZGVmIHN0cnVjdCB7Ci0rCWdzc19PSURfZGVzYyBvaWQ7Ci0gCWdzc19idWZmZXJfZGVzYyBk aXNwbGF5bmFtZTsKLSAJZ3NzX2J1ZmZlcl9kZXNjIGV4cG9ydGVkbmFtZTsKLSAJZ3NzX2NyZWRf aWRfdCBjcmVkczsKLS0JZ3NzX25hbWVfdCBuYW1lOwotKwlnc3NfbmFtZV90IGNyZWRfbmFtZSwg Y3R4X25hbWU7Ci0gCXN0cnVjdCBzc2hfZ3NzYXBpX21lY2hfc3RydWN0ICptZWNoOwotIAlzc2hf Z3NzYXBpX2NjYWNoZSBzdG9yZTsKLSsJZ3NzX2N0eF9pZF90IGNvbnRleHQ7IC8qIG5lZWRlZCBm b3IgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoKSAqLwotIAlpbnQgdXNlZDsK LSAJaW50IHVwZGF0ZWQ7Ci0gCWNoYXIgKippbmRpY2F0b3JzOyAvKiBhdXRoIGluZGljYXRvcnMg Ki8KLUBAIC0xMzgsNyArMTQwLDcgQEAKLSAJT01fdWludDMyCW1pbm9yOyAvKiBib3RoICovCi0g CWdzc19jdHhfaWRfdAljb250ZXh0OyAvKiBib3RoICovCi0gCWdzc19uYW1lX3QJbmFtZTsgLyog Ym90aCAqLwotLQlnc3NfT0lECQlvaWQ7IC8qIGNsaWVudCAqLwotKwlnc3NfT0lECQlvaWQ7IC8q IGJvdGggKi8KLSAJZ3NzX2NyZWRfaWRfdAljcmVkczsgLyogc2VydmVyICovCi0gCWdzc19uYW1l X3QJY2xpZW50OyAvKiBzZXJ2ZXIgKi8KLSAJZ3NzX2NyZWRfaWRfdAljbGllbnRfY3JlZHM7IC8q IGJvdGggKi8KLUBAIC0xODUsNiArMTg3LDkgQEAKLSBPTV91aW50MzIgc3NoX2dzc2FwaV9jbGll bnRfaWRlbnRpdHkoR3NzY3R4dCAqLCBjb25zdCBjaGFyICopOwotIGludCBzc2hfZ3NzYXBpX2Ny ZWRlbnRpYWxzX3VwZGF0ZWQoR3NzY3R4dCAqKTsKLSAKLStpbnQgc3NoX2dzc2FwaV9sb2NhbG5h bWUoY2hhciAqKm5hbWUpOwotK3ZvaWQgc3NoX2dzc2FwaV9yZWtleV9jcmVkcygpOwotKwotIC8q IEluIHRoZSBzZXJ2ZXIgKi8KLSB0eXBlZGVmIGludCBzc2hfZ3NzYXBpX2NoZWNrX2ZuKEdzc2N0 eHQgKiosIGdzc19PSUQsIGNvbnN0IGNoYXIgKiwKLSAgICAgY29uc3QgY2hhciAqKTsKLWRpZmYg LU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3ZlcnNpb24uaCBvcGVuc3NoLTEwLjNwMS92ZXJzaW9u LmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3ZlcnNpb24uaAkyMDI2LTA0LTAyIDEwOjA5OjAz LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3ZlcnNpb24uaAkyMDI2LTA3LTAx IDEwOjM5OjQzLjU4NjQ3OTEyMyArMDIwMAotQEAgLTIsNSArMiwxOSBAQAotIAotICNkZWZpbmUg U1NIX1ZFUlNJT04JIk9wZW5TU0hfMTAuMyIKLSAKLSsjaWZkZWYgR1NJCi0rI2RlZmluZSBHU0lf VkVSU0lPTgkiIEdTSSIKLSsjZWxzZQotKyNkZWZpbmUgR1NJX1ZFUlNJT04JIiIKLSsjZW5kaWYK LSsKLSsjaWZkZWYgS1JCNQotKyNkZWZpbmUgS1JCNV9WRVJTSU9OCSIgS1JCNSIKLSsjZWxzZQot KyNkZWZpbmUgS1JCNV9WRVJTSU9OCSIiCi0rI2VuZGlmCi0rCi0gI2RlZmluZSBTU0hfUE9SVEFC TEUJInAxIgotLSNkZWZpbmUgU1NIX1JFTEVBU0UJU1NIX1ZFUlNJT04gU1NIX1BPUlRBQkxFCi0r I2RlZmluZSBHU0lfUE9SVEFCTEUJImMtR1NJIgotKyNkZWZpbmUgU1NIX1JFTEVBU0UJU1NIX1ZF UlNJT04gU1NIX1BPUlRBQkxFIEdTSV9QT1JUQUJMRSBcCi0rCQkJR1NJX1ZFUlNJT04gS1JCNV9W RVJTSU9OCgpkaWZmIC0tZ2l0IGEvMjAwMC1vcGVuc3NoLTEwLjVwMS1nc2lzc2gucGF0Y2ggYi8y MDAwLW9wZW5zc2gtMTAuNXAxLWdzaXNzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5hMDM2NDNhCi0tLSAvZGV2L251bGwKKysrIGIvMjAwMC1vcGVuc3NoLTEwLjVw MS1nc2lzc2gucGF0Y2gKQEAgLTAsMCArMSwyNDAxIEBACitkaWZmIC1OdXIgb3BlbnNzaC0xMC41 cDEub3JpZy9hdXRoMi5jIG9wZW5zc2gtMTAuNXAxL2F1dGgyLmMKKy0tLSBvcGVuc3NoLTEwLjVw MS5vcmlnL2F1dGgyLmMJMjAyNi0wOS0yMSAwNTo0MDo1OC4xNTg3MzMxNTIgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjVwMS9hdXRoMi5jCTIwMjYtMDktMjEgMDU6NDE6MzAuODI3MjQ4ODA2ICswMjAw CitAQCAtMjkyLDcgKzI5MiwyOCBAQAorIAkgICAgKHIgPSBzc2hwa3RfZ2V0X2NzdHJpbmcoc3No LCAmc2VydmljZSwgTlVMTCkpICE9IDAgfHwKKyAJICAgIChyID0gc3NocGt0X2dldF9jc3RyaW5n KHNzaCwgJm1ldGhvZCwgTlVMTCkpICE9IDApCisgCQlnb3RvIG91dDsKKy0JZGVidWcoInVzZXJh dXRoLXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMiLCB1c2VyLCBzZXJ2 aWNlLCBtZXRob2QpOworKworKyNpZmRlZiBHU1NBUEkKKysJaWYgKHVzZXJbMF0gPT0gJ1wwJykg eworKwkJZGVidWcoInJlY2VpdmVkIGVtcHR5IHVzZXJuYW1lIGZvciAlcyIsIG1ldGhvZCk7Cisr CQlpZiAoc3RyY21wKG1ldGhvZCwgImdzc2FwaS1rZXlleCIpID09IDApIHsKKysJCQljaGFyICps bmFtZSA9IE5VTEw7CisrCQkJbW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUoJmxuYW1lKTsKKysJCQlp ZiAobG5hbWUgJiYgbG5hbWVbMF0gIT0gJ1wwJykgeworKwkJCQlmcmVlKHVzZXIpOworKwkJCQl1 c2VyID0gbG5hbWU7CisrCQkJCWRlYnVnKCJzZXQgdXNlcm5hbWUgdG8gJXMgZnJvbSBnc3NhcGkg Y29udGV4dCIsIHVzZXIpOworKwkJCX0gZWxzZSB7CisrCQkJCWRlYnVnKCJmYWlsZWQgdG8gc2V0 IHVzZXJuYW1lIGZyb20gZ3NzYXBpIGNvbnRleHQiKTsKKysJCQkJc3NoX3BhY2tldF9zZW5kX2Rl YnVnKHNzaCwKKysJCQkJICAgICJmYWlsZWQgdG8gc2V0IHVzZXJuYW1lIGZyb20gZ3NzYXBpIGNv bnRleHQiKTsKKysJCQl9CisrCQl9CisrCX0KKysjZW5kaWYKKysKKysJZGVidWcoInVzZXJhdXRo LXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMiLAorKwkgICAgdXNlclsw XSA/IHVzZXIgOiAiPGltcGxpY2l0PiIsIHNlcnZpY2UsIG1ldGhvZCk7CisgCWRlYnVnKCJhdHRl bXB0ICVkIGZhaWx1cmVzICVkIiwgYXV0aGN0eHQtPmF0dGVtcHQsIGF1dGhjdHh0LT5mYWlsdXJl cyk7CisgCisgI2lmZGVmIFdJVEhfU0VMSU5VWAorQEAgLTMwNSwxNiArMzI2LDM4IEBACisgCisg CWlmIChhdXRoY3R4dC0+YXR0ZW1wdCA+PSAxMDI0KQorIAkJYXV0aF9tYXh0cmllc19leGNlZWRl ZChzc2gpOworLQlpZiAoYXV0aGN0eHQtPmF0dGVtcHQrKyA9PSAwKSB7CistCQkvKiBzZXR1cCBh dXRoIGNvbnRleHQgKi8KKy0JCWF1dGhjdHh0LT5wdyA9IG1tX2dldHB3bmFtYWxsb3coc3NoLCB1 c2VyKTsKKysJLyogSWYgZmlyc3QgdGltZSBvciB1c2VybmFtZSBjaGFuZ2VkIG9yIGVtcHR5IHVz ZXJuYW1lLAorKwkgICBzZXR1cC9yZXNldCBhdXRoZW50aWNhdGlvbiBjb250ZXh0LiAqLworKwlp ZiAoKGF1dGhjdHh0LT5hdHRlbXB0KysgPT0gMCkgfHwKKysJICAgIChzdHJjbXAodXNlciwgYXV0 aGN0eHQtPnVzZXIpICE9IDApIHx8CisrCSAgICAoc3RyY21wKHVzZXIsICIiKSA9PSAwKSkgewor KwkJaWYgKGF1dGhjdHh0LT51c2VyKSB7CisrCQkJZnJlZShhdXRoY3R4dC0+dXNlcik7CisrCQkJ YXV0aGN0eHQtPnVzZXIgPSBOVUxMOworKwkJfQorKwkJYXV0aGN0eHQtPnZhbGlkID0gMDsKKyAJ CWF1dGhjdHh0LT51c2VyID0geHN0cmR1cCh1c2VyKTsKKyAJCWF1dGhjdHh0LT5zZXJ2aWNlID0g eHN0cmR1cChzZXJ2aWNlKTsKKyAJCWF1dGhjdHh0LT5zdHlsZSA9IHN0eWxlID8geHN0cmR1cChz dHlsZSkgOiBOVUxMOworICNpZmRlZiBXSVRIX1NFTElOVVgKKyAJCWF1dGhjdHh0LT5yb2xlID0g cm9sZSA/IHhzdHJkdXAocm9sZSkgOiBOVUxMOworICNlbmRpZgorLQkJaWYgKGF1dGhjdHh0LT5w dyAmJiBzdHJjbXAoc2VydmljZSwgInNzaC1jb25uZWN0aW9uIik9PTApIHsKKysJCWlmIChzdHJj bXAoc2VydmljZSwgInNzaC1jb25uZWN0aW9uIikgIT0gMCkgeworKwkJCXNzaF9wYWNrZXRfZGlz Y29ubmVjdChzc2gsICJVbnN1cHBvcnRlZCBzZXJ2aWNlICVzIiwKKysJCQkgICAgc2VydmljZSk7 CisrCQl9CisrI2lmZGVmIEdTU0FQSQorKwkJLyogSWYgd2UncmUgZ29pbmcgdG8gc2V0IHRoZSB1 c2VybmFtZSBiYXNlZCBvbiB0aGUKKysJCSAgIEdTU0FQSSBjb250ZXh0IGxhdGVyLCB0aGVuIHdh aXQgdW50aWwgdGhlbiB0bworKwkJICAgdmVyaWZ5IGl0LiBKdXN0IHB1dCBpbiBwbGFjZWhvbGRl cnMgZm9yIG5vdy4gKi8KKysJCWlmICgoc3RyY21wKHVzZXIsICIiKSA9PSAwKSAmJgorKwkJICAg ICgoc3RyY21wKG1ldGhvZCwgImdzc2FwaSIpID09IDApIHx8CisrCQkgICAgIChzdHJjbXAobWV0 aG9kLCAiZ3NzYXBpLXdpdGgtbWljIikgPT0gMCkpKSB7CisrCQkJYXV0aGN0eHQtPnB3ID0gZmFr ZXB3KCk7CisrCQl9IGVsc2UgeworKyNlbmRpZgorKwkJYXV0aGN0eHQtPnB3ID0gbW1fZ2V0cHdu YW1hbGxvdyhzc2gsIHVzZXIpOworKwkJaWYgKGF1dGhjdHh0LT5wdykgeworIAkJCWF1dGhjdHh0 LT52YWxpZCA9IDE7CisgCQkJZGVidWcyX2YoInNldHRpbmcgdXAgYXV0aGN0eHQgZm9yICVzIiwg dXNlcik7CisgCQl9IGVsc2UgeworQEAgLTMyMiw2ICszNjUsOSBAQAorIAkJCS8qIEludmFsaWQg dXNlciwgZmFrZSBwYXNzd29yZCBpbmZvcm1hdGlvbiAqLworIAkJCWF1dGhjdHh0LT5wdyA9IGZh a2VwdygpOworIAkJfQorKyNpZmRlZiBHU1NBUEkKKysJCX0gLyogZW5kaWYgZm9yIHNldHRpbmcg dXNlcm5hbWUgYmFzZWQgb24gR1NTQVBJIGNvbnRleHQgKi8KKysjZW5kaWYKKyAjaWZkZWYgVVNF X1BBTQorIAkJaWYgKG9wdGlvbnMudXNlX3BhbSkKKyAJCQltbV9zdGFydF9wYW0oc3NoKTsKK0BA IC0zMjksNiArMzc1LDcgQEAKKyAJCXNzaF9wYWNrZXRfc2V0X2xvZ19wcmVhbWJsZShzc2gsICIl c3VzZXIgJXMiLAorIAkJICAgIGF1dGhjdHh0LT52YWxpZCA/ICJhdXRoZW50aWNhdGluZyAiIDog ImludmFsaWQgIiwgdXNlcik7CisgCQlzZXRwcm9jdGl0bGUoIiVzIFtuZXRdIiwgYXV0aGN0eHQt PnZhbGlkID8gdXNlciA6ICJ1bmtub3duIik7CisrCQlpZiAoYXV0aGN0eHQtPmF0dGVtcHQgPT0g MSkgeworIAkJbW1faW5mb3JtX2F1dGhzZXJ2KHNlcnZpY2UsIHN0eWxlKTsKKyAjaWZkZWYgV0lU SF9TRUxJTlVYCisgICAgICAgICAgCW1tX2luZm9ybV9hdXRocm9sZShyb2xlKTsKK0BAIC0zMzks OSArMzg2LDEwIEBACisgCQlpZiAoYXV0aDJfc2V0dXBfbWV0aG9kc19saXN0cyhhdXRoY3R4dCkg IT0gMCkKKyAJCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLAorIAkJCSAgICAibm8gYXV0aGVu dGljYXRpb24gbWV0aG9kcyBlbmFibGVkIik7CistCX0gZWxzZSBpZiAoc3RyY21wKHVzZXIsIGF1 dGhjdHh0LT51c2VyKSAhPSAwIHx8CistCSAgICBzdHJjbXAoc2VydmljZSwgYXV0aGN0eHQtPnNl cnZpY2UpICE9IDApIHsKKy0JCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsICJDaGFuZ2Ugb2Yg dXNlcm5hbWUgb3Igc2VydmljZSAiCisrCQl9CisrCX0KKysJaWYgKHN0cmNtcChzZXJ2aWNlLCBh dXRoY3R4dC0+c2VydmljZSkgIT0gMCkgeworKwkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwg IkNoYW5nZSBvZiBzZXJ2aWNlICIKKyAJCSAgICAibm90IGFsbG93ZWQ6ICglcywlcykgLT4gKCVz LCVzKSIsCisgCQkgICAgYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5zZXJ2aWNlLCB1c2VyLCBz ZXJ2aWNlKTsKKyAJfQorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvYXV0aDItZ3NzLmMg b3BlbnNzaC0xMC41cDEvYXV0aDItZ3NzLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2F1dGgy LWdzcy5jCTIwMjYtMDktMjEgMDU6NDA6NTcuODY3NzM5MjcxICswMjAwCisrKysgb3BlbnNzaC0x MC41cDEvYXV0aDItZ3NzLmMJMjAyNi0wOS0yMSAwNTo0MTozMC44Mjc5ODg4NzAgKzAyMDAKK0BA IC01NCw2ICs1NCw3IEBACisgZXh0ZXJuIHN0cnVjdCBhdXRobWV0aG9kX2NmZyBtZXRob2RjZmdf Z3Nza2V5ZXg7CisgZXh0ZXJuIHN0cnVjdCBhdXRobWV0aG9kX2NmZyBtZXRob2RjZmdfZ3NzYXBp OworIAorK3N0YXRpYyB2b2lkIHNzaF9nc3NhcGlfdXNlcmF1dGhfZXJyb3IoR3NzY3R4dCAqY3R4 dCwgc3RydWN0IHNzaCAqc3NoKTsKKyBzdGF0aWMgaW50IGlucHV0X2dzc2FwaV90b2tlbihpbnQg dHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKTsKKyBzdGF0aWMgaW50IGlucHV0 X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCk7Cisg c3RhdGljIGludCBpbnB1dF9nc3NhcGlfZXhjaGFuZ2VfY29tcGxldGUoaW50IHR5cGUsIHVpbnQz Ml90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCk7CitAQCAtNjcsOCArNjgsOCBAQAorIHsKKyAJQXV0 aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRoY3R4dDsKKyAJaW50IHIsIGF1dGhlbnRpY2F0ZWQg PSAwOworLQlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVMTDsKKy0JZ3NzX2J1ZmZlcl9kZXNjIG1pYywg Z3NzYnVmOworKwlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVMTCwgKmIyID0gTlVMTDsKKysJZ3NzX2J1 ZmZlcl9kZXNjIG1pYywgZ3NzYnVmLCBnc3NidWYyOworIAl1X2NoYXIgKnA7CisgCXNpemVfdCBs ZW47CisgCitAQCAtNzksNiArODAsOSBAQAorIAlpZiAoKGIgPSBzc2hidWZfbmV3KCkpID09IE5V TEwpCisgCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworIAorKwlpZiAoKGIyID0gc3No YnVmX25ldygpKSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKKysK KyAJbWljLnZhbHVlID0gcDsKKyAJbWljLmxlbmd0aCA9IGxlbjsKKyAKK0BAIC04OSwxMyArOTMs MjggQEAKKyAJCWZhdGFsX2YoInNzaGJ1Zl9tdXRhYmxlX3B0ciBmYWlsZWQiKTsKKyAJZ3NzYnVm Lmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYik7CisgCisrCS8qIGNsaWVudCBtYXkgaGF2ZSB1c2VkIGVt cHR5IHVzZXJuYW1lIHRvIGRldGVybWluZSB0YXJnZXQKKysJICAgbmFtZSBmcm9tIEdTU0FQSSBj b250ZXh0ICovCisrCXNzaF9nc3NhcGlfYnVpbGRtaWMoYjIsICIiLCBhdXRoY3R4dC0+c2Vydmlj ZSwgImdzc2FwaS1rZXlleCIsCisrCSAgICBzc2gtPmtleC0+c2Vzc2lvbl9pZCk7CisrCisrCWlm ICgoZ3NzYnVmMi52YWx1ZSA9IHNzaGJ1Zl9tdXRhYmxlX3B0cihiMikpID09IE5VTEwpCisrCQlm YXRhbF9mKCJzc2hidWZfbXV0YWJsZV9wdHIgZmFpbGVkIik7CisrCWdzc2J1ZjIubGVuZ3RoID0g c3NoYnVmX2xlbihiMik7CisrCisgCS8qIGdzc19rZXhfY29udGV4dCBpcyBOVUxMIHdpdGggcHJp dnNlcCwgc28gd2UgY2FuJ3QgY2hlY2sgaXQgaGVyZSAqLworIAlpZiAoIUdTU19FUlJPUihtbV9z c2hfZ3NzYXBpX2NoZWNrbWljKGdzc19rZXhfY29udGV4dCwKKy0JICAgICZnc3NidWYsICZtaWMp KSkKKy0JCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNl ciwKKy0JCSAgICBhdXRoY3R4dC0+cHcsIDEpOworKwkgICAgJmdzc2J1ZiwgJm1pYykpIHx8Cisr CSAgICAhR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzX2tleF9jb250ZXh0LAor KwkgICAgJmdzc2J1ZjIsICZtaWMpKSkgeworKwkJaWYgKGF1dGhjdHh0LT52YWxpZCAmJiBhdXRo Y3R4dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNlclswXSkgeworKwkJCWF1dGhlbnRpY2F0ZWQgPSBt bV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlciwKKysJCQkgICAgYXV0aGN0eHQtPnB3 LCAxKTsKKysJCX0KKysJfQorIAorIAlzc2hidWZfZnJlZShiKTsKKysJc3NoYnVmX2ZyZWUoYjIp OworIAlmcmVlKG1pYy52YWx1ZSk7CisgCisgCXJldHVybiAoYXV0aGVudGljYXRlZCk7CitAQCAt MTg2LDcgKzIwNSw3IEBACisgCUdzc2N0eHQgKmdzc2N0eHQ7CisgCWdzc19idWZmZXJfZGVzYyBz ZW5kX3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKyAJZ3NzX2J1ZmZlcl9kZXNjIHJlY3ZfdG9r OworLQlPTV91aW50MzIgbWFqX3N0YXR1cywgbWluX3N0YXR1cywgZmxhZ3M7CisrCU9NX3VpbnQz MiBtYWpfc3RhdHVzLCBtaW5fc3RhdHVzLCBmbGFncyA9IDA7CisgCXVfY2hhciAqcDsKKyAJc2l6 ZV90IGxlbjsKKyAJaW50IHI7CitAQCAtMjA3LDYgKzIyNiw3IEBACisgCWZyZWUocCk7CisgCisg CWlmIChHU1NfRVJST1IobWFqX3N0YXR1cykpIHsKKysJCXNzaF9nc3NhcGlfdXNlcmF1dGhfZXJy b3IoZ3NzY3R4dCwgc3NoKTsKKyAJCWlmIChzZW5kX3Rvay5sZW5ndGggIT0gMCkgeworIAkJCWlm ICgociA9IHNzaHBrdF9zdGFydChzc2gsCisgCQkJICAgIFNTSDJfTVNHX1VTRVJBVVRIX0dTU0FQ SV9FUlJUT0spKSAhPSAwIHx8CitAQCAtMjgwLDYgKzMwMCwzNCBAQAorIAlyZXR1cm4gMDsKKyB9 CisgCisrc3RhdGljIHZvaWQKKytnc3NhcGlfc2V0X3VzZXJuYW1lKHN0cnVjdCBzc2ggKnNzaCkK Kyt7CisrCUF1dGhjdHh0ICphdXRoY3R4dCA9IHNzaC0+YXV0aGN0eHQ7CisrCWNoYXIgKmxuYW1l ID0gTlVMTDsKKysKKysJaWYgKChhdXRoY3R4dC0+dXNlciA9PSBOVUxMKSB8fCAoYXV0aGN0eHQt PnVzZXJbMF0gPT0gJ1wwJykpIHsKKysJCW1tX3NzaF9nc3NhcGlfbG9jYWxuYW1lKCZsbmFtZSk7 CisrCQlpZiAobG5hbWUgJiYgbG5hbWVbMF0gIT0gJ1wwJykgeworKwkJCWlmIChhdXRoY3R4dC0+ dXNlcikgZnJlZShhdXRoY3R4dC0+dXNlcik7CisrCQkJYXV0aGN0eHQtPnVzZXIgPSBsbmFtZTsK KysJCQlkZWJ1Zygic2V0IHVzZXJuYW1lIHRvICVzIGZyb20gZ3NzYXBpIGNvbnRleHQiLCBsbmFt ZSk7CisrCQkJYXV0aGN0eHQtPnB3ID0gbW1fZ2V0cHduYW1hbGxvdyhzc2gsIGF1dGhjdHh0LT51 c2VyKTsKKysJCQlpZiAoYXV0aGN0eHQtPnB3KSB7CisrCQkJCWF1dGhjdHh0LT52YWxpZCA9IDE7 CisrI2lmZGVmIFVTRV9QQU0KKysJCQkJaWYgKG9wdGlvbnMudXNlX3BhbSkKKysJCQkJCW1tX3N0 YXJ0X3BhbShzc2gpOworKyNlbmRpZgorKwkJCX0KKysJCX0gZWxzZSB7CisrCQkJZGVidWcoImZh aWxlZCB0byBzZXQgdXNlcm5hbWUgZnJvbSBnc3NhcGkgY29udGV4dCIpOworKwkJCXNzaF9wYWNr ZXRfc2VuZF9kZWJ1Zyhzc2gsCisrCQkJICAgICJmYWlsZWQgdG8gc2V0IHVzZXJuYW1lIGZyb20g Z3NzYXBpIGNvbnRleHQiKTsKKysJCX0KKysJfQorK30KKysKKyAvKgorICAqIFRoaXMgaXMgY2Fs bGVkIHdoZW4gdGhlIGNsaWVudCB0aGlua3Mgd2UndmUgY29tcGxldGVkIGF1dGhlbnRpY2F0aW9u LgorICAqIEl0IHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgaW4gdGhlIGRpc3BhdGNoIGhhbmRsZXIg YnkgdGhlIGZ1bmN0aW9uIGFib3ZlLAorQEAgLTI5MCwxMiArMzM4LDE0IEBACisgaW5wdXRfZ3Nz YXBpX2V4Y2hhbmdlX2NvbXBsZXRlKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3No ICpzc2gpCisgeworIAlBdXRoY3R4dCAqYXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OworLQlpbnQg ciwgYXV0aGVudGljYXRlZDsKKysJaW50IHIsIGF1dGhlbnRpY2F0ZWQgPSAwOworIAlkb3VibGUg dHN0YXJ0ID0gbW9ub3RpbWVfZG91YmxlKCk7CisgCisgCWlmIChhdXRoY3R4dCA9PSBOVUxMKQor IAkJZmF0YWwoIk5vIGF1dGhlbnRpY2F0aW9uIG9yIEdTU0FQSSBjb250ZXh0Iik7CisgCisrCWdz c2FwaV9zZXRfdXNlcm5hbWUoc3NoKTsKKysKKyAJLyoKKyAJICogV2UgZG9uJ3QgbmVlZCB0byBj aGVjayB0aGUgc3RhdHVzLCBiZWNhdXNlIHdlJ3JlIG9ubHkgZW5hYmxlZCBpbgorIAkgKiB0aGUg ZGlzcGF0Y2hlciBvbmNlIHRoZSBleGNoYW5nZSBpcyBjb21wbGV0ZQorQEAgLTMwNCw3ICszNTQs MTIgQEAKKyAJaWYgKChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0gMCkKKyAJCWZhdGFsX2Zy KHIsICJwYXJzZSBwYWNrZXQiKTsKKyAKKy0gCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBp X3VzZXJvayhhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQtPnB3LCAxKTsKKysJLyogdXNlciBzaG91 bGQgYmUgc2V0IGlmIHZhbGlkIGJ1dCB3ZSBkb3VibGUtY2hlY2sgaGVyZSAqLworKwlpZiAoYXV0 aGN0eHQtPnZhbGlkICYmIGF1dGhjdHh0LT51c2VyICYmIGF1dGhjdHh0LT51c2VyWzBdKSB7Cisr CQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsCisr CQkgICAgYXV0aGN0eHQtPnB3LCAxKTsKKysJfQorKworIAlpZiAoIWF1dGhlbnRpY2F0ZWQpCisg CQlhdXRoX2ZhaWx1cmVfZGVsYXkoYXV0aGN0eHQsIHRzdGFydCk7CisgCitAQCAtMzU0LDEwICs0 MDksMTYgQEAKKyAJCWZhdGFsX2YoInNzaGJ1Zl9tdXRhYmxlX3B0ciBmYWlsZWQiKTsKKyAJZ3Nz YnVmLmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYik7CisgCistCWlmICghR1NTX0VSUk9SKG1tX3NzaF9n c3NhcGlfY2hlY2ttaWMoZ3NzY3R4dCwgJmdzc2J1ZiwgJm1pYykpKQorLQkJYXV0aGVudGljYXRl ZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+cHcsIDAp OworLQllbHNlCisrCWdzc2FwaV9zZXRfdXNlcm5hbWUoc3NoKTsKKysKKysJaWYgKCFHU1NfRVJS T1IobW1fc3NoX2dzc2FwaV9jaGVja21pYyhnc3NjdHh0LCAmZ3NzYnVmLCAmbWljKSkpIHsKKysJ CWlmIChhdXRoY3R4dC0+dmFsaWQgJiYgYXV0aGN0eHQtPnVzZXIgJiYgYXV0aGN0eHQtPnVzZXJb MF0pIHsKKysJCQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQt PnVzZXIsCisrCQkJICAgIGF1dGhjdHh0LT5wdywgMCk7CisrCQl9CisrCX0gZWxzZSB7CisgCQls b2dpdCgiR1NTQVBJIE1JQyBjaGVjayBmYWlsZWQiKTsKKysJfQorIAorIAlzc2hidWZfZnJlZShi KTsKKyAJaWYgKG1pY3VzZXIgIT0gYXV0aGN0eHQtPnVzZXIpCitAQCAtMzc2LDYgKzQzNywyNiBA QAorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIHZvaWQgc3NoX2dzc2FwaV91c2VyYXV0aF9l cnJvcihHc3NjdHh0ICpjdHh0LCBzdHJ1Y3Qgc3NoICpzc2gpIHsKKysJY2hhciAqZXJyc3RyOwor KwlPTV91aW50MzIgbWFqLCBtaW47CisrCWludCByOworKworKwllcnJzdHIgPSBtbV9zc2hfZ3Nz YXBpX2xhc3RfZXJyb3IoY3R4dCwgJm1haiwgJm1pbik7CisrCWlmIChlcnJzdHIpIHsKKysJCWlm ICgociA9IHNzaHBrdF9zdGFydChzc2gsCisrCQkgICAgU1NIMl9NU0dfVVNFUkFVVEhfR1NTQVBJ X0VSUk9SKSkgIT0gMCB8fAorKwkJICAgIChyID0gc3NocGt0X3B1dF91MzIoc3NoLCBtYWopKSAh PSAwIHx8CisrCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gsIG1pbikpICE9IDAgfHwKKysJ CSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGVycnN0cikpICE9IDAgfHwKKysJCSAg ICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsICIiKSkgIT0gMCB8fAorKwkJICAgIChyID0g c3NocGt0X3NlbmQoc3NoKSkgIT0gMCB8fAorKwkJICAgIChyID0gc3NoX3BhY2tldF93cml0ZV93 YWl0KHNzaCkpICE9IDApCisrCQkJZmF0YWxfZnIociwgIiIpOworKwkJZnJlZShlcnJzdHIpOwor Kwl9CisrfQorKworIEF1dGhtZXRob2QgbWV0aG9kX2dzc2tleWV4ID0geworIAkmbWV0aG9kY2Zn X2dzc2tleWV4LAorIAl1c2VyYXV0aF9nc3NrZXlleCwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVw MS5vcmlnL2F1dGguYyBvcGVuc3NoLTEwLjVwMS9hdXRoLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5v cmlnL2F1dGguYwkyMDI2LTA5LTIxIDA1OjQwOjU4LjE1ODMzNDU1NyArMDIwMAorKysrIG9wZW5z c2gtMTAuNXAxL2F1dGguYwkyMDI2LTA5LTIxIDA1OjQxOjMwLjgyODY0ODMwOCArMDIwMAorQEAg LTI5Niw3ICsyOTYsOCBAQAorIAkgICAgbWV0aG9kLAorIAkgICAgc3VibWV0aG9kICE9IE5VTEwg PyAiLyIgOiAiIiwgc3VibWV0aG9kID09IE5VTEwgPyAiIiA6IHN1Ym1ldGhvZCwKKyAJICAgIGF1 dGhjdHh0LT52YWxpZCA/ICIiIDogImludmFsaWQgdXNlciAiLAorLQkgICAgYXV0aGN0eHQtPnVz ZXIsCisrCSAgICAoYXV0aGN0eHQtPnVzZXIgJiYgYXV0aGN0eHQtPnVzZXJbMF0pID8KKysJCWF1 dGhjdHh0LT51c2VyIDogInVua25vd24iLAorIAkgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwK KyAJICAgIHNzaF9yZW1vdGVfcG9ydChzc2gpLAorIAkgICAgZXh0cmEgIT0gTlVMTCA/ICI6ICIg OiAiIiwKK0BAIC00OTEsMTMgKzQ5MiwxOCBAQAorICNlbmRpZgorIAorIAlwdyA9IGdldHB3bmFt KHVzZXIpOworKyNpZmRlZiBVU0VfUEFNCisrCWlmIChvcHRpb25zLnVzZV9wYW0gJiYgb3B0aW9u cy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlICYmIHB3ID09IE5VTEwpCisrCQlwdyA9IHNzaHBhbV9n ZXRwdyh1c2VyKTsKKysjZW5kaWYKKyAKKyAjaWYgZGVmaW5lZChfQUlYKSAmJiBkZWZpbmVkKEhB VkVfU0VUQVVUSERCKQorIAlhaXhfcmVzdG9yZWF1dGhkYigpOworICNlbmRpZgorIAlpZiAocHcg PT0gTlVMTCkgeworIAkJbG9naXQoIkludmFsaWQgdXNlciAlLjEwMHMgZnJvbSAlLjEwMHMgcG9y dCAlZCIsCistCQkgICAgdXNlciwgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9w b3J0KHNzaCkpOworKwkJICAgICh1c2VyICYmIHVzZXJbMF0pID8gdXNlciA6ICJ1bmtub3duIiwK KysJCSAgICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSk7Cisg I2lmZGVmIENVU1RPTV9GQUlMRURfTE9HSU4KKyAJCXJlY29yZF9mYWlsZWRfbG9naW4oc3NoLCB1 c2VyLAorIAkJICAgIGF1dGhfZ2V0X2Nhbm9uaWNhbF9ob3N0bmFtZShzc2gsIG9wdGlvbnMudXNl X2RucyksICJzc2giKTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2F1dGguaCBvcGVu c3NoLTEwLjVwMS9hdXRoLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2F1dGguaAkyMDI2LTA5 LTIxIDA1OjQwOjU4LjE1ODQyNzk5MyArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2F1dGguaAky MDI2LTA5LTIxIDA1OjQxOjMwLjgyOTI1NzMxOCArMDIwMAorQEAgLTg1LDYgKzg1LDggQEAKKyAJ a3JiNV9wcmluY2lwYWwJIGtyYjVfdXNlcjsKKyAJY2hhcgkJKmtyYjVfdGlja2V0X2ZpbGU7Cisg CWNoYXIJCSprcmI1X2NjbmFtZTsKKysjZW5kaWYKKysjaWZkZWYgR1NTQVBJCisgCWludAkJIGty YjVfc2V0X2VudjsKKyAjZW5kaWYKKyAJc3RydWN0IHNzaGJ1ZgkqbG9naW5tc2c7CitkaWZmIC1O dXIgb3BlbnNzaC0xMC41cDEub3JpZy9hdXRoLXBhbS5jIG9wZW5zc2gtMTAuNXAxL2F1dGgtcGFt LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2F1dGgtcGFtLmMJMjAyNi0wOS0yMSAwNTo0MDo1 OC4zNzE1NzcyNDggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9hdXRoLXBhbS5jCTIwMjYtMDkt MjEgMDU6NDE6MzAuODI5NTk4NDg3ICswMjAwCitAQCAtMjU0LDYgKzI1NCw3IEBACisgc3RhdGlj IGNvbnN0IGNoYXIgKnNzaHBhbV9wYXNzd29yZCA9IE5VTEw7Cisgc3RhdGljIGNoYXIgKnNzaHBh bV9yaG9zdCA9IE5VTEw7Cisgc3RhdGljIGNoYXIgKnNzaHBhbV9sYWRkciA9IE5VTEw7Cisrc3Rh dGljIHN0cnVjdCBzc2ggKnNzaHBhbV9zc2ggPSBOVUxMOworIAorIC8qIFNvbWUgUEFNIGltcGxl bWVudGF0aW9ucyBkb24ndCBpbXBsZW1lbnQgdGhpcyAqLworICNpZm5kZWYgSEFWRV9QQU1fR0VU RU5WTElTVAorQEAgLTI3Nyw2ICsyNzgsNTYgQEAKKyB9CisgI2VuZGlmIC8qIEhBVkVfUEFNX1BV VEVOViAqLworIAorK3N0cnVjdCBwYXNzd2QgKgorK3NzaHBhbV9nZXRwdyhjb25zdCBjaGFyICp1 c2VyKQorK3sKKysJc3RydWN0IHBhc3N3ZCAqcHc7CisrCisrCWlmICgocHcgPSBnZXRwd25hbSh1 c2VyKSkgIT0gTlVMTCkKKysJCXJldHVybihwdyk7CisrCisrCWRlYnVnKCJQQU06IGZha2luZyBw YXNzd2Qgc3RydWN0IGZvciB1c2VyICclLjEwMHMnIiwgdXNlcik7CisrCWlmICgocHcgPSBnZXRw d25hbShTU0hfUFJJVlNFUF9VU0VSKSkgPT0gTlVMTCkKKysJCXJldHVybiBOVUxMOworKwlwdy0+ cHdfbmFtZSA9IHhzdHJkdXAodXNlcik7CS8qIFhYWCBsZWFrICovCisrCXB3LT5wd19zaGVsbCA9 ICIvYmluL3RydWUiOworKwlwdy0+cHdfZ2Vjb3MgPSAic3NoZCBmYWtlIFBBTSB1c2VyIjsKKysJ cmV0dXJuIChwdyk7CisrfQorKworK3ZvaWQKKytzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQodm9p ZCkKKyt7CisrCWludCBzc2hwYW1fZXJyOworKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKysJY29uc3Qg Y2hhciAqdXNlcjsKKysKKysJZGVidWcoInNzaHBhbV9jaGVja191c2VyY2hhbmdlZCIpOworKwlz c2hwYW1fZXJyID0gcGFtX2dldF9pdGVtKHNzaHBhbV9oYW5kbGUsIFBBTV9VU0VSLAorKwkJCQkg IChzc2hwYW1fY29uc3Qgdm9pZCAqKikmdXNlcik7CisrCWlmIChzc2hwYW1fZXJyICE9IFBBTV9T VUNDRVNTKQorKwkJZmF0YWwoIlBBTTogY291bGQgbm90IGdldCBQQU1fVVNFUjogJXMiLAorKwkJ ICAgIHBhbV9zdHJlcnJvcihzc2hwYW1faGFuZGxlLCBzc2hwYW1fZXJyKSk7CisrCWRlYnVnKCJz c2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQ6IHVzZXIgd2FzICclLjEwMHMnIiwKKysJICAgIHNzaHBh bV9hdXRoY3R4dC0+cHctPnB3X25hbWUpOworKwlpZiAoc3RyY21wKHVzZXIsIHNzaHBhbV9hdXRo Y3R4dC0+cHctPnB3X25hbWUpICE9IDApIHsKKysJCWRlYnVnKCJQQU06IHVzZXIgbWFwcGVkIGZy b20gJyUuMTAwcycgdG8gJyUuMTAwcyciLAorKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3 X25hbWUsIHVzZXIpOworKwkJaWYgKChwdyA9IGdldHB3bmFtKHVzZXIpKSA9PSBOVUxMKQorKwkJ CWZhdGFsKCJQQU06IGNvdWxkIG5vdCBnZXQgcGFzc3dkIGVudHJ5IGZvciB1c2VyICIKKysJCQkg ICAgIiclLjEwMHMnIHByb3ZpZGVkIGJ5IFBBTV9VU0VSIiwgdXNlcik7CisrCQlwd2ZyZWUoc3No cGFtX2F1dGhjdHh0LT5wdyk7CisrCQlzc2hwYW1fYXV0aGN0eHQtPnB3ID0gcHdjb3B5KHB3KTsK KysJCXNzaHBhbV9hdXRoY3R4dC0+dmFsaWQgPSBhbGxvd2VkX3VzZXIoc3NocGFtX3NzaCwgcHcp OworKwkJZnJlZShzc2hwYW1fYXV0aGN0eHQtPnVzZXIpOworKwkJc3NocGFtX2F1dGhjdHh0LT51 c2VyID0geHN0cmR1cCh1c2VyKTsKKysJCWRlYnVnKCJQQU06IHVzZXIgJyUuMTAwcycgbm93ICVz dmFsaWQiLCB1c2VyLAorKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+dmFsaWQgPyAiIiA6ICJpbiIp OworKwl9CisrCWRlYnVnKCJzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQ6IHVzZXIgaXMgJyUuMTAw cyciLAorKwkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7CisrfQorKworIHN0YXRp YyB2b2lkCisgc3NocGFtX3Bhc3N3b3JkX2NoYW5nZV9yZXF1aXJlZChpbnQgcmVxZCkKKyB7CitA QCAtMzA4LDcgKzM1OSw3IEBACisgc3RhdGljIHZvaWQKKyBpbXBvcnRfZW52aXJvbm1lbnRzKHN0 cnVjdCBzc2hidWYgKmIpCisgeworLQljaGFyICplbnY7CisrCWNoYXIgKmVudiwgKnVzZXI7Cisg CXVfaW50IG4sIGksIG51bV9lbnY7CisgCWludCByOworIAorQEAgLTMyNCw2ICszNzUsMTkgQEAK KyAJaWYgKChyID0gc3NoYnVmX2dldF91MzIoYiwgJm4pKSAhPSAwKQorIAkJZmF0YWxfZnIociwg ImJ1ZmZlciBlcnJvciIpOworIAlzc2hwYW1fcGFzc3dvcmRfY2hhbmdlX3JlcXVpcmVkKG4gIT0g MCk7CisrCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsKKysJCWlmICgociA9 IHNzaGJ1Zl9nZXRfY3N0cmluZyhiLCAmdXNlciwgTlVMTCkpICE9IDApCisrCQkJZmF0YWwoIiVz OiBidWZmZXIgZXJyb3I6ICVzIiwgX19mdW5jX18sIHNzaF9lcnIocikpOworKwkJZGVidWcoIlBB TTogdXNlciBpcyAnJS4xMDBzJyIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFt ZSk7CisrCQlkZWJ1ZygiUEFNOiBnb3QgdXNlcm5hbWUgJyUuMTAwcycgZnJvbSB0aHJlYWQiLCB1 c2VyKTsKKysJCWlmICgoc3NocGFtX2VyciA9IHBhbV9zZXRfaXRlbShzc2hwYW1faGFuZGxlLCBQ QU1fVVNFUiwgdXNlcikpCisrCQkgICAgIT0gUEFNX1NVQ0NFU1MpCisrCQkJZmF0YWwoIlBBTTog ZmFpbGVkIHRvIHNldCBQQU1fVVNFUjogJXMiLAorKwkJCSAgICBwYW1fc3RyZXJyb3Ioc3NocGFt X2hhbmRsZSwgc3NocGFtX2VycikpOworKwkJcHdmcmVlKHNzaHBhbV9hdXRoY3R4dC0+cHcpOwor KwkJc3NocGFtX2F1dGhjdHh0LT5wdyA9IHB3Y29weShzc2hwYW1fZ2V0cHcodXNlcikpOworKwl9 CisgCisgCS8qIEltcG9ydCBlbnZpcm9ubWVudCBmcm9tIHN1YnByb2Nlc3MgKi8KKyAJaWYgKChy ID0gc3NoYnVmX2dldF91MzIoYiwgJm51bV9lbnYpKSAhPSAwKQorQEAgLTUzNiw2ICs2MDAsMTMg QEAKKyAJaWYgKChzc2hwYW1fZXJyID0gY2hlY2tfcGFtX3VzZXIoc3NocGFtX2F1dGhjdHh0KSkg IT0gUEFNX1NVQ0NFU1MpCisgCQlnb3RvIGF1dGhfZmFpbDsKKyAKKysJaWYgKG9wdGlvbnMucGVy bWl0X3BhbV91c2VyX2NoYW5nZSkgeworKwkJZGVidWcoInNzaHBhbV90aHJlYWQ6IHVzZXIgaXMg JyUuMTAwcyciLAorKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3X25hbWUpOworKwkJc3No cGFtX2NoZWNrX3VzZXJjaGFuZ2VkKCk7CisrCQlkZWJ1Zygic3NocGFtX3RocmVhZDogdXNlciBp cyAnJS4xMDBzJyIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7CisrCX0K KyAJaWYgKCFkb19wYW1fYWNjb3VudCgpKSB7CisgCQkvKiBQcmVzZXJ2ZSBQQU1fUEVSTV9ERU5J RUQgYW5kIFBBTV9VU0VSX1VOS05PV04uCisgCQkgKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZv ciBvdGhlciBlcnJvcnMuICovCitAQCAtNTYwLDYgKzYzMSwxMyBAQAorIAlpZiAoKHIgPSBzc2hi dWZfcHV0X3UzMihidWZmZXIsIHNzaHBhbV9hY2NvdW50X3N0YXR1cykpICE9IDAgfHwKKyAJICAg IChyID0gc3NoYnVmX3B1dF91MzIoYnVmZmVyLCBzc2hwYW1fYXV0aGN0eHQtPmZvcmNlX3B3Y2hh bmdlKSkgIT0gMCkKKyAJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKKysJaWYgKG9wdGlv bnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSkgeworKwkJZGVidWcoInNzaHBhbV90aHJlYWQ6IHVz ZXIgaXMgJyUuMTAwcyciLAorKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3X25hbWUpOwor KwkJaWYgKChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKGJ1ZmZlciwKKysJCSAgICBzc2hwYW1fYXV0 aGN0eHQtPnB3LT5wd19uYW1lKSkgIT0gMCkKKysJCQlmYXRhbCgiJXM6IGJ1ZmZlciBlcnJvcjog JXMiLCBfX2Z1bmNfXywgc3NoX2VycihyKSk7CisrCX0KKyAKKyAJLyogRXhwb3J0IGFueSBlbnZp cm9ubWVudCBzdHJpbmdzIHNldCBpbiBjaGlsZCAqLworIAlmb3IgKGkgPSAwOyBlbnZpcm9uW2ld ICE9IE5VTEw7IGkrKykgeworQEAgLTc0OSw2ICs4MjcsOCBAQAorIAkJICAgIG9wdGlvbnMudXNl X2RucykpOworIAkJc3NocGFtX2xhZGRyID0gZ2V0X2xvY2FsX2lwYWRkcigKKyAJCSAgICBzc2hf cGFja2V0X2dldF9jb25uZWN0aW9uX2luKHNzaCkpOworKwkJLyogU2F2ZSBzbyBhbGxvd2VkX3Vz ZXIgY2FuIGJlIGNhbGxlZCBsYXRlciAqLworKwkJc3NocGFtX3NzaCA9IHNzaDsKKyAJfQorIAlp ZiAoc3NocGFtX3Job3N0ICE9IE5VTEwgJiYgc3RyY21wKHNzaHBhbV9yaG9zdCwgIlVOS05PV04i KSAhPSAwKSB7CisgCQlkZWJ1ZygiUEFNOiBzZXR0aW5nIFBBTV9SSE9TVCB0byBcIiVzXCIiLCBz c2hwYW1fcmhvc3QpOworQEAgLTEwODMsNiArMTE2MywxOCBAQAorIAlkZWJ1ZzMoIlBBTTogJXMg cGFtX2FjY3RfbWdtdCA9ICVkICglcykiLCBfX2Z1bmNfXywgc3NocGFtX2VyciwKKyAJICAgIHBh bV9zdHJlcnJvcihzc2hwYW1faGFuZGxlLCBzc2hwYW1fZXJyKSk7CisgCisrCWlmIChvcHRpb25z LnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsKKysJCWRlYnVnKCJkb19wYW1fYWNjb3VudDogdXNl ciBpcyAnJS4xMDBzJyIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7Cisr CQlzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQoKTsKKysJCWRlYnVnKCJkb19wYW1fYWNjb3VudDog dXNlciBpcyAnJS4xMDBzJyIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7 CisrCQlpZiAoZ2V0cHduYW0oc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSkgPT0gTlVMTCkK KysJCQlmYXRhbCgiUEFNOiBjb21wbGV0ZWQgYXV0aGVudGljYXRpb24gYnV0IFBBTSBhY2NvdW50 IGludmFsaWQiKTsKKysJCWRlYnVnKCJkb19wYW1fYWNjb3VudDogdXNlciBpcyAnJS4xMDBzJyIs CisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7CisrCX0KKysKKyAJaWYgKHNz aHBhbV9lcnIgIT0gUEFNX1NVQ0NFU1MgJiYgc3NocGFtX2VyciAhPSBQQU1fTkVXX0FVVEhUT0tf UkVRRCkgeworIAkJc3NocGFtX2FjY291bnRfc3RhdHVzID0gMDsKKyAJCXJldHVybiAoc3NocGFt X2FjY291bnRfc3RhdHVzKTsKK0BAIC0xMjkxLDYgKzEzODMsOSBAQAorIAlleHBvc2VfYXV0aGlu Zm8oX19mdW5jX18pOworIAorIAlzc2hwYW1fZXJyID0gcGFtX2F1dGhlbnRpY2F0ZShzc2hwYW1f aGFuZGxlLCBmbGFncyk7CisrCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsK KysJCXNzaHBhbV9jaGVja191c2VyY2hhbmdlZCgpOworKwl9CisgCXNzaHBhbV9wYXNzd29yZCA9 IE5VTEw7CisgCWZyZWUoZmFrZSk7CisgCWlmIChzc2hwYW1fZXJyID09IFBBTV9TVUNDRVNTKQor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvYXV0aC1wYW0uaCBvcGVuc3NoLTEwLjVwMS9h dXRoLXBhbS5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9hdXRoLXBhbS5oCTIwMjYtMDktMjEg MDU6NDA6NTcuNzQ2NjQ2MzY3ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvYXV0aC1wYW0uaAky MDI2LTA5LTIxIDA1OjQxOjMwLjgzMDMzNTE0MCArMDIwMAorQEAgLTQ0LDUgKzQ0LDYgQEAKKyB2 b2lkIHNzaHBhbV9zZXRfbWF4dHJpZXNfcmVhY2hlZChpbnQpOworIGludCBpc19wYW1fc2Vzc2lv bl9vcGVuKHZvaWQpOworIGludCBzc2hwYW1fcHJpdl9rYmRpbnRfYXV0aGRvbmUodm9pZCAqY3R4 dHApOworK3N0cnVjdCBwYXNzd2QgKnNzaHBhbV9nZXRwdyhjb25zdCBjaGFyICopOworIAorICNl bmRpZiAvKiBVU0VfUEFNICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jYW5vaG9z dC5jIG9wZW5zc2gtMTAuNXAxL2Nhbm9ob3N0LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2Nh bm9ob3N0LmMJMjAyNi0wOS0yMSAwNTo0MDo1Ny44NjgwMDQxNzIgKzAyMDAKKysrKyBvcGVuc3No LTEwLjVwMS9jYW5vaG9zdC5jCTIwMjYtMDktMjEgMDU6NDE6MzAuODMwNTIwMTY4ICswMjAwCitA QCAtMTcsNiArMTcsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lz L3NvY2tldC5oPgorICNpbmNsdWRlIDxzeXMvdW4uaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ ICAgICAgICAgIC8qIGZvciBNQVhIT1NUTkFNRUxFTiAqLworIAorICNpbmNsdWRlIDxuZXRpbmV0 L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorQEAgLTMwMCwzICszMDEsMzMgQEAKKyB7 CisgCXJldHVybiBnZXRfc29ja19wb3J0KHNvY2ssIDEpOworIH0KKysKKyt2b2lkCisrcmVzb2x2 ZV9sb2NhbGhvc3QoY2hhciAqKmhvc3QpCisreworKwlzdHJ1Y3QgaG9zdGVudCAqaG9zdGluZm87 CisrCisrCWhvc3RpbmZvID0gZ2V0aG9zdGJ5bmFtZSgqaG9zdCk7CisrCWlmIChob3N0aW5mbyA9 PSBOVUxMIHx8IGhvc3RpbmZvLT5oX25hbWUgPT0gTlVMTCkgeworKwkJZGVidWcoImdldGhvc3Ri eW5hbWUoJXMpIGZhaWxlZCIsICpob3N0KTsKKysJCXJldHVybjsKKysJfQorKwlpZiAoaG9zdGlu Zm8tPmhfYWRkcnR5cGUgPT0gQUZfSU5FVCkgeworKwkJc3RydWN0IGluX2FkZHIgYWRkcjsKKysJ CWFkZHIgPSAqKHN0cnVjdCBpbl9hZGRyICopKGhvc3RpbmZvLT5oX2FkZHIpOworKwkJaWYgKG50 b2hsKGFkZHIuc19hZGRyKSA9PSBJTkFERFJfTE9PUEJBQ0spIHsKKysJCQljaGFyIGJ1ZltNQVhI T1NUTkFNRUxFTl07CisrCQkJaWYgKGdldGhvc3RuYW1lKGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCkg eworKwkJCQlkZWJ1ZygiZ2V0aG9zdG5hbWUoKSBmYWlsZWQiKTsKKysJCQkJcmV0dXJuOworKwkJ CX0KKysJCQlob3N0aW5mbyA9IGdldGhvc3RieW5hbWUoYnVmKTsKKysJCQlmcmVlKCpob3N0KTsK KysJCQlpZiAoaG9zdGluZm8gPT0gTlVMTCB8fCBob3N0aW5mby0+aF9uYW1lID09IE5VTEwpIHsK KysJCQkJKmhvc3QgPSB4c3RyZHVwKGJ1Zik7CisrCQkJfSBlbHNlIHsKKysJCQkJKmhvc3QgPSB4 c3RyZHVwKGhvc3RpbmZvLT5oX25hbWUpOworKwkJCX0KKysJCX0KKysJfQorK30KK2RpZmYgLU51 ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2Nhbm9ob3N0Lmggb3BlbnNzaC0xMC41cDEvY2Fub2hvc3Qu aAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2Fub2hvc3QuaAkyMDI2LTA5LTIxIDA1OjQwOjU3 Ljg2ODA2MTE5MiArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2Nhbm9ob3N0LmgJMjAyNi0wOS0y MSAwNTo0MTozMC44MzA4Mzc5MTEgKzAyMDAKK0BAIC0yNiw0ICsyNiw2IEBACisgCisgI2VuZGlm IC8qIF9DQU5PSE9TVF9IICovCisgCisrdm9pZAkJIHJlc29sdmVfbG9jYWxob3N0KGNoYXIgKipo b3N0KTsKKysKKyB2b2lkCQkgaXB2NjRfbm9ybWFsaXNlX21hcHBlZChzdHJ1Y3Qgc29ja2FkZHJf c3RvcmFnZSAqLCBzb2NrbGVuX3QgKik7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9j b25maWd1cmUuYWMgb3BlbnNzaC0xMC41cDEvY29uZmlndXJlLmFjCistLS0gb3BlbnNzaC0xMC41 cDEub3JpZy9jb25maWd1cmUuYWMJMjAyNi0wOS0yMSAwNTo0MDo1OC40MDcxNzYxNTUgKzAyMDAK KysrKyBvcGVuc3NoLTEwLjVwMS9jb25maWd1cmUuYWMJMjAyNi0wOS0yMSAwNTo0MTozMC44MzEy NTYwNDkgKzAyMDAKK0BAIC01MDgzLDYgKzUwODMsMTQgQEAKKyAJCQkJQUNfQ0hFQ0tfSEVBREVS KFtnc3NhcGlfa3JiNS5oXSwgLAorIAkJCQkJCVsgQ1BQRkxBR1M9IiRvbGRDUFAiIF0pCisgCisr CQkJCSMgSWYgd2UncmUgdXNpbmcgc29tZSBvdGhlciBHU1NBUEkKKysJCQkJaWYgdGVzdCAtbiAi JEdTU0FQSSIgOyB0aGVuCisrCQkJCQlBQ19NU0dfRVJST1IoW1ByZXZpb3VzbHkgY29uZmlndXJl ZCBHU1NBUEkgbGlicmFyeSBjb25mbGljdHMgd2l0aCBLZXJiZXJvcyBHU0kuXSkKKysJCQkJZmkK KysJCisrCQkJCWlmIHRlc3QgLXogIiRHU1NBUEkiOyB0aGVuCisrCQkJCQlHU1NBUEk9IktSQjUi OworKwkJCQlmaQorIAkJCWZpCisgCQlmaQorIAkJaWYgdGVzdCAtbiAiJHtycGF0aF9vcHR9IiA7 IHRoZW4KK0BAIC01MTMxLDYgKzUxMzksNDAgQEAKKyBBQ19TVUJTVChbSzVMSUJTXSkKKyBBQ19T VUJTVChbQ0hBTk5FTExJQlNdKQorIAorKyMgQ2hlY2sgd2hldGhlciB0aGUgdXNlciB3YW50cyBH U0kgKEdsb2J1cykgc3VwcG9ydAorK2dzaT0ibm8iCisrQUNfQVJHX1dJVEgoZ3NpLAorKwlbICAt LXdpdGgtZ3NpICAgICAgICAgICAgICBFbmFibGUgR2xvYnVzIEdTSSBhdXRoZW50aWNhdGlvbiBz dXBwb3J0XSwKKysJWworKwkJZ3NpPSIkd2l0aHZhbCIKKysJXQorKykKKysKKytpZiB0ZXN0ICJ4 JGdzaSIgIT0gInhubyIgOyB0aGVuCisrCSMgR2xvYnVzIEdTU0FQSSBjb25maWd1cmF0aW9uCisr CUFDX01TR19DSEVDS0lORyhmb3IgR2xvYnVzIEdTSSkKKysJQUNfREVGSU5FKEdTSSwgMSwgW0Rl ZmluZSBpZiB5b3Ugd2FudCBHU0kvR2xvYnVzIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQuXSkKKysK KysJaWYgdGVzdCAtbiAiJEdTU0FQSSIgOyB0aGVuCisrCQlBQ19NU0dfRVJST1IoW1ByZXZpb3Vz bHkgY29uZmlndXJlZCBHU1NBUEkgbGlicmFyeSBjb25mbGljdHMgd2l0aCBHbG9idXMgR1NJLl0p CisrCWZpCisrCisrCWlmIHRlc3QgLXogIiRHU1NBUEkiIDsgdGhlbgorKwkJR1NTQVBJPSJHU0ki CisrCWZpCisrCisrCUFDX1BBVEhfVE9PTChbUEtHQ09ORklHXSwgW3BrZy1jb25maWddLCBbbm9d KQorKwlpZiB0ZXN0ICJ4JFBLR0NPTkZJRyIgIT0gInhubyI7IHRoZW4KKysJCUxJQlM9IiRMSUJT IGAkUEtHQ09ORklHIC0tbGlicyBnbG9idXMtZ3NzLWFzc2lzdCBnbG9idXMtZ3NzYXBpLWdzaSBn bG9idXMtY29tbW9uYCIKKysJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCRQS0dDT05GSUcgLS1jZmxh Z3MgZ2xvYnVzLWdzcy1hc3Npc3QgZ2xvYnVzLWdzc2FwaS1nc2kgZ2xvYnVzLWNvbW1vbmAiCisr CWZpCisrCisrCUFDX0RFRklORShHU1NBUEkpCisrCUFDX0RFRklORShIQVZFX0dTU0FQSV9IKQor KworKwlBQ19DSEVDS19GVU5DUyhnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSkK KytmaQorKworICMgTG9va2luZyBmb3IgcHJvZ3JhbXMsIHBhdGhzIGFuZCBmaWxlcworIAorIFBS SVZTRVBfUEFUSD0vdmFyL2VtcHR5CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9nc3Mt Z2Vuci5jIG9wZW5zc2gtMTAuNXAxL2dzcy1nZW5yLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L2dzcy1nZW5yLmMJMjAyNi0wOS0yMSAwNTo0MDo1Ny44Njg4OTA2NjcgKzAyMDAKKysrKyBvcGVu c3NoLTEwLjVwMS9nc3MtZ2Vuci5jCTIwMjYtMDktMjEgMDU6NDE6MzAuODMzNDcxMzE0ICswMjAw CitAQCAtNDEsNiArNDEsNyBAQAorICNpbmNsdWRlICJzc2hlcnIuaCIKKyAjaW5jbHVkZSAic3No YnVmLmgiCisgI2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRlICJjYW5vaG9zdC5oIgorICNpbmNs dWRlICJzc2gyLmgiCisgI2luY2x1ZGUgImNpcGhlci5oIgorICNpbmNsdWRlICJzc2hrZXkuaCIK K0BAIC00MjYsOSArNDI3LDE4IEBACisgc3NoX2dzc2FwaV9pbXBvcnRfbmFtZShHc3NjdHh0ICpj dHgsIGNvbnN0IGNoYXIgKmhvc3QpCisgeworIAlnc3NfYnVmZmVyX2Rlc2MgZ3NzYnVmOworKwlj aGFyICp4aG9zdDsKKyAJY2hhciAqdmFsOworIAorLQl4YXNwcmludGYoJnZhbCwgImhvc3RAJXMi LCBob3N0KTsKKysJLyogTWFrZSBhIGNvcHkgb2YgdGhlIGhvc3QgbmFtZSwgaW4gY2FzZSBpdCB3 YXMgcmV0dXJuZWQgYnkgYQorKwkgKiBwcmV2aW91cyBjYWxsIHRvIGdldGhvc3RieW5hbWUoKS4g Ki8KKysJeGhvc3QgPSB4c3RyZHVwKGhvc3QpOworKworKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSB0 aGUgRlFETi4gU29tZSBHU1NBUEkgaW1wbGVtZW50YXRpb25zIGRvbid0IGRvCisrCSAqIHRoaXMg Zm9yIHVzIHRoZW1zZWx2ZXMgKi8KKysJcmVzb2x2ZV9sb2NhbGhvc3QoJnhob3N0KTsKKysKKysJ eGFzcHJpbnRmKCZ2YWwsICJob3N0QCVzIiwgeGhvc3QpOworIAlnc3NidWYudmFsdWUgPSB2YWw7 CisgCWdzc2J1Zi5sZW5ndGggPSBzdHJsZW4oZ3NzYnVmLnZhbHVlKTsKKyAKK0BAIC00MzYsNiAr NDQ2LDcgQEAKKyAJICAgICZnc3NidWYsIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLCAmY3R4 LT5uYW1lKSkpCisgCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7CisgCisrCWZyZWUoeGhvc3QpOwor IAlmcmVlKGdzc2J1Zi52YWx1ZSk7CisgCXJldHVybiAoY3R4LT5tYWpvcik7CisgfQorZGlmZiAt TnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvZ3NzLXNlcnYuYyBvcGVuc3NoLTEwLjVwMS9nc3Mtc2Vy di5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9nc3Mtc2Vydi5jCTIwMjYtMDktMjEgMDU6NDA6 NTguMzg4MDc2MDczICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvZ3NzLXNlcnYuYwkyMDI2LTA5 LTIxIDA1OjQxOjMwLjgzMzc5NTcyMCArMDIwMAorQEAgLTUyLDEwICs1MiwxMiBAQAorICNpbmNs dWRlICJtb25pdG9yX3dyYXAuaCIKKyAKKyBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOwor K2V4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OworIAorIHN0YXRpYyBzc2hfZ3NzYXBpX2Ns aWVudCBnc3NhcGlfY2xpZW50ID0KKy0gICAgeyBHU1NfQ19FTVBUWV9CVUZGRVIsIEdTU19DX0VN UFRZX0JVRkZFUiwgR1NTX0NfTk9fQ1JFREVOVElBTCwKKy0gICAgR1NTX0NfTk9fTkFNRSwgTlVM TCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCAwLCAwLCBOVUxMLCAwfTsKKysgICAg eyB7MCwgTlVMTH0sIEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1Nf Q19OT19DUkVERU5USUFMLAorKyAgICAgIEdTU19DX05PX05BTUUsIEdTU19DX05PX05BTUUsIE5V TEwsIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwKKysgICAgICBHU1NfQ19OT19DT05U RVhULCAwLCAwLCBOVUxMLCAwfTsKKyAKKyBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX251bGxfbWVj aCA9CisgICAgIHsgTlVMTCwgTlVMTCwgezAsIE5VTEx9LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMfTsKK0BAIC02MywxNCArNjUsMjYgQEAKKyAjaWZkZWYgS1JCNQorIGV4dGVybiBzc2hf Z3NzYXBpX21lY2ggZ3NzYXBpX2tlcmJlcm9zX21lY2g7CisgI2VuZGlmCisrI2lmZGVmIEdTSQor K2V4dGVybiBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoOworK2V4dGVybiBzc2hfZ3Nz YXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoX21pY3YyOworKyNlbmRpZgorIAorIHNzaF9nc3NhcGlf bWVjaCogc3VwcG9ydGVkX21lY2hzW109IHsKKyAjaWZkZWYgS1JCNQorIAkmZ3NzYXBpX2tlcmJl cm9zX21lY2gsCisgI2VuZGlmCisrI2lmZGVmIEdTSQorKwkmZ3NzYXBpX2dzaV9tZWNoX21pY3Yy LAorKwkmZ3NzYXBpX2dzaV9tZWNoLAorKyNlbmRpZgorIAkmZ3NzYXBpX251bGxfbWVjaCwKKyB9 OworIAorKyNpZmRlZiBHU1NfQ19HTE9CVVNfTElNSVRFRF9QUk9YWV9GTEFHCisrc3RhdGljIGlu dCBsaW1pdGVkID0gMDsKKysjZW5kaWYKKysKKyAvKgorICAqIHNzaF9nc3NhcGlfc3VwcG9ydGVk X29pZHMoKSBjYW4gY2F1c2Ugc2FuZGJveCB2aW9sYXRpb25zLCBzbyBwcmVwYXJlIHRoZQorICAq IGxpc3Qgb2Ygc3VwcG9ydGVkIG1lY2hhbmlzbXMgYmVmb3JlIHByaXZzZXAgaXMgc2V0IHVwLgor QEAgLTIzMSw2ICsyNDUsMTAgQEAKKyAJICAgICgqZmxhZ3MgJiBHU1NfQ19JTlRFR19GTEFHKSkp ICYmIChjdHgtPm1ham9yID09IEdTU19TX0NPTVBMRVRFKSkgeworIAkJaWYgKHNzaF9nc3NhcGlf Z2V0Y2xpZW50KGN0eCwgJmdzc2FwaV9jbGllbnQpKQorIAkJCWZhdGFsKCJDb3VsZG4ndCBjb252 ZXJ0IGNsaWVudCBuYW1lIik7CisrI2lmZGVmIEdTU19DX0dMT0JVU19MSU1JVEVEX1BST1hZX0ZM QUcKKysJCWlmIChmbGFncyAmJiAoKmZsYWdzICYgR1NTX0NfR0xPQlVTX0xJTUlURURfUFJPWFlf RkxBRykpCisrCQkJbGltaXRlZD0xOworKyNlbmRpZgorIAl9CisgCisgCXJldHVybiAoc3RhdHVz KTsKK0BAIC0yNTAsNiArMjY4LDIwIEBACisgCisgCXRvayA9IGVuYW1lLT52YWx1ZTsKKyAKKysj aWZkZWYgR1NJIC8qIEdTSSBnc3NfZXhwb3J0X25hbWUoKSBpcyBicm9rZW4uICovCisrCWlmICgo KGN0eC0+b2lkLT5sZW5ndGggPT0gZ3NzYXBpX2dzaV9tZWNoLm9pZC5sZW5ndGgpICYmCisrCSAg ICAgKG1lbWNtcChjdHgtPm9pZC0+ZWxlbWVudHMsIGdzc2FwaV9nc2lfbWVjaC5vaWQuZWxlbWVu dHMsCisrCQkgICAgIGdzc2FwaV9nc2lfbWVjaC5vaWQubGVuZ3RoKSA9PSAwKSkgfHwKKysJICAg ICgoY3R4LT5vaWQtPmxlbmd0aCA9PSBnc3NhcGlfZ3NpX21lY2hfbWljdjIub2lkLmxlbmd0aCkg JiYKKysJICAgICAobWVtY21wKGN0eC0+b2lkLT5lbGVtZW50cywgZ3NzYXBpX2dzaV9tZWNoX21p Y3YyLm9pZC5lbGVtZW50cywKKysJCSAgICAgZ3NzYXBpX2dzaV9tZWNoX21pY3YyLm9pZC5sZW5n dGgpID09IDApKSkgeworKwkJbmFtZS0+bGVuZ3RoID0gZW5hbWUtPmxlbmd0aDsKKysJCW5hbWUt PnZhbHVlID0geG1hbGxvYyhlbmFtZS0+bGVuZ3RoKzEpOworKwkJbWVtY3B5KG5hbWUtPnZhbHVl LCBlbmFtZS0+dmFsdWUsIGVuYW1lLT5sZW5ndGgpOworKwkJcmV0dXJuIEdTU19TX0NPTVBMRVRF OworKwl9CisrI2VuZGlmCisrCisgCS8qCisgCSAqIENoZWNrIHRoYXQgZW5hbWUgaXMgbG9uZyBl bm91Z2ggZm9yIGFsbCBvZiB0aGUgZml4ZWQgbGVuZ3RoCisgCSAqIGhlYWRlciwgYW5kIHRoYXQg dGhlIGluaXRpYWwgSUQgYnl0ZXMgYXJlIGNvcnJlY3QKK0BAIC0yOTgsNiArMzMwLDcgQEAKKyB9 CisgCisgCisrI2lmZGVmIEtSQjUKKyAvKiBFeHRyYWN0IGF1dGhlbnRpY2F0aW9uIGluZGljYXRv cnMgZnJvbSB0aGUgS2VyYmVyb3MgdGlja2V0LiBBdXRoZW50aWNhdGlvbgorICAqIGluZGljYXRv cnMgYXJlIEdTU0FQSSBuYW1lIGF0dHJpYnV0ZXMgZm9yIHRoZSBuYW1lICJhdXRoLWluZGljYXRv cnMiLgorICAqIE11bHRpcGxlIGluZGljYXRvcnMgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgdGlj a2V0LgorQEAgLTM4OSw2ICs0MjIsNyBAQAorIAlnc3NfcmVsZWFzZV9idWZmZXJfc2V0KCZjdHgt Pm1pbm9yLCAmYXR0cnMpOworIAlyZXR1cm4gY3R4LT5tYWpvcjsKKyB9CisrI2VuZGlmCisgCisg LyogRXh0cmFjdCB0aGUgY2xpZW50IGRldGFpbHMgZnJvbSBhIGdpdmVuIGNvbnRleHQuIFRoaXMg Y2FuIG9ubHkgcmVsaWFibHkKKyAgKiBiZSBjYWxsZWQgb25jZSBmb3IgYSBjb250ZXh0ICovCitA QCAtNDAzLDIxICs0MzcsMjQgQEAKKyAJZ3NzX2J1ZmZlcl9kZXNjIGVuYW1lID0gR1NTX0NfRU1Q VFlfQlVGRkVSOworIAorIAlpZiAob3B0aW9ucy5nc3Nfc3RvcmVfcmVrZXkgJiYgY2xpZW50LT51 c2VkICYmIGN0eC0+Y2xpZW50X2NyZWRzKSB7CistCQlpZiAoY2xpZW50LT5tZWNoLT5vaWQubGVu Z3RoICE9IGN0eC0+b2lkLT5sZW5ndGggfHwKKy0JCSAgICAobWVtY21wKGNsaWVudC0+bWVjaC0+ b2lkLmVsZW1lbnRzLAorKwkJaWYgKGNsaWVudC0+b2lkLmxlbmd0aCAhPSBjdHgtPm9pZC0+bGVu Z3RoIHx8CisrCQkgICAgKG1lbWNtcChjbGllbnQtPm9pZC5lbGVtZW50cywKKyAJCSAgICAgY3R4 LT5vaWQtPmVsZW1lbnRzLCBjdHgtPm9pZC0+bGVuZ3RoKSAhPTApKSB7CisgCQkJZGVidWcoIlJl a2V5ZWQgY3JlZGVudGlhbHMgaGF2ZSBkaWZmZXJlbnQgbWVjaGFuaXNtIik7CisgCQkJcmV0dXJu IEdTU19TX0NPTVBMRVRFOworIAkJfQorIAorLQkJaWYgKChjdHgtPm1ham9yID0gZ3NzX2lucXVp cmVfY3JlZF9ieV9tZWNoKCZjdHgtPm1pbm9yLAorLQkJICAgIGN0eC0+Y2xpZW50X2NyZWRzLCBj dHgtPm9pZCwgJm5ld19uYW1lLAorKwkJLyogQ2FsbCBnc3NfaW5xdWlyZV9jcmVkIHJhdGhlciB0 aGFuIGdzc19pbnF1aXJlX2NyZWRfYnlfbWVjaAorKwkJICAgYmVjYXVzZSBHU0kgZG9lc24ndCBz dXBwb3J0IHRoZSBsYXR0ZXIuIC1qYmFzbmV5ICovCisrCisrCQlpZiAoKGN0eC0+bWFqb3IgPSBn c3NfaW5xdWlyZV9jcmVkKCZjdHgtPm1pbm9yLAorKwkJICAgIGN0eC0+Y2xpZW50X2NyZWRzLCAm bmV3X25hbWUsCisgCQkgICAgTlVMTCwgTlVMTCwgTlVMTCkpKSB7CisgCQkJc3NoX2dzc2FwaV9l cnJvcihjdHgpOworIAkJCXJldHVybiAoY3R4LT5tYWpvcik7CisgCQl9CisgCistCQljdHgtPm1h am9yID0gZ3NzX2NvbXBhcmVfbmFtZSgmY3R4LT5taW5vciwgY2xpZW50LT5uYW1lLAorKwkJY3R4 LT5tYWpvciA9IGdzc19jb21wYXJlX25hbWUoJmN0eC0+bWlub3IsIGNsaWVudC0+Y3JlZF9uYW1l LAorIAkJICAgIG5ld19uYW1lLCAmZXF1YWwpOworIAorIAkJaWYgKEdTU19FUlJPUihjdHgtPm1h am9yKSkgeworQEAgLTQzMiw5ICs0NjksOSBAQAorIAorIAkJZGVidWcoIk1hcmtpbmcgcmVrZXll ZCBjcmVkZW50aWFscyBmb3IgZXhwb3J0Iik7CisgCistCQlnc3NfcmVsZWFzZV9uYW1lKCZjdHgt Pm1pbm9yLCAmY2xpZW50LT5uYW1lKTsKKysJCWdzc19yZWxlYXNlX25hbWUoJmN0eC0+bWlub3Is ICZjbGllbnQtPmNyZWRfbmFtZSk7CisgCQlnc3NfcmVsZWFzZV9jcmVkKCZjdHgtPm1pbm9yLCAm Y2xpZW50LT5jcmVkcyk7CistCQljbGllbnQtPm5hbWUgPSBuZXdfbmFtZTsKKysJCWNsaWVudC0+ Y3JlZF9uYW1lID0gbmV3X25hbWU7CisgCQljbGllbnQtPmNyZWRzID0gY3R4LT5jbGllbnRfY3Jl ZHM7CisgCQljdHgtPmNsaWVudF9jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7CisgCQljbGll bnQtPnVwZGF0ZWQgPSAxOworQEAgLTQ1MSwxMiArNDg4LDE3IEBACisgCQlpKys7CisgCX0KKyAK KysJaWYgKGNsaWVudC0+b2lkLmVsZW1lbnRzID09IE5VTEwpCisrCQljbGllbnQtPm9pZCA9ICpj dHgtPm9pZDsKKyAJaWYgKGNsaWVudC0+bWVjaCA9PSBOVUxMKQorIAkJcmV0dXJuIEdTU19TX0ZB SUxVUkU7CisgCisrCS8qIENhbGwgZ3NzX2lucXVpcmVfY3JlZCByYXRoZXIgdGhhbiBnc3NfaW5x dWlyZV9jcmVkX2J5X21lY2gKKysJICAgYmVjYXVzZSBHU0kgZG9lc24ndCBzdXBwb3J0IHRoZSBs YXR0ZXIuIC1qYmFzbmV5ICovCisrCisgCWlmIChjdHgtPmNsaWVudF9jcmVkcyAmJgorLQkgICAg KGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVkX2J5X21lY2goJmN0eC0+bWlub3IsCistCSAg ICAgY3R4LT5jbGllbnRfY3JlZHMsIGN0eC0+b2lkLCAmY2xpZW50LT5uYW1lLCBOVUxMLCBOVUxM LCBOVUxMKSkpIHsKKysJICAgIChjdHgtPm1ham9yID0gZ3NzX2lucXVpcmVfY3JlZCgmY3R4LT5t aW5vciwKKysJICAgICBjdHgtPmNsaWVudF9jcmVkcywgJmNsaWVudC0+Y3JlZF9uYW1lLCBOVUxM LCBOVUxMLCBOVUxMKSkpIHsKKyAJCXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKKyAJCXJldHVybiAo Y3R4LT5tYWpvcik7CisgCX0KK0BAIC00NzMsMjUgKzUxNSwzNyBAQAorIAkJcmV0dXJuIChjdHgt Pm1ham9yKTsKKyAJfQorIAorLQlpZiAoKGN0eC0+bWFqb3IgPSBzc2hfZ3NzYXBpX3BhcnNlX2Vu YW1lKGN0eCwmZW5hbWUsCisrCWlmICgoY2xpZW50LT5tZWNoLT5vaWQuZWxlbWVudHMgIT0gTlVM TCkgJiYKKysJICAgIChjdHgtPm1ham9yID0gc3NoX2dzc2FwaV9wYXJzZV9lbmFtZShjdHgsJmVu YW1lLAorIAkgICAgJmNsaWVudC0+ZXhwb3J0ZWRuYW1lKSkpIHsKKyAJCXJldHVybiAoY3R4LT5t YWpvcik7CisgCX0KKyAKKysJaWYgKChjdHgtPm1ham9yID0gZ3NzX2R1cGxpY2F0ZV9uYW1lKCZj dHgtPm1pbm9yLCBjdHgtPmNsaWVudCwKKysJICAgICZjbGllbnQtPmN0eF9uYW1lKSkpCisrCQly ZXR1cm4gY3R4LT5tYWpvcjsKKysKKyAJZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAm ZW5hbWUpOworKyNpZmRlZiBLUkI1CisgCS8qIFJldHJpZXZlIGF1dGhlbnRpY2F0aW9uIGluZGlj YXRvcnMsIGlmIHRoZXkgZXhpc3QgKi8KKyAJaWYgKChjdHgtPm1ham9yID0gc3NoX2dzc2FwaV9n ZXRpbmRpY2F0b3JzKGN0eCwKKyAJICAgIGN0eC0+Y2xpZW50LCBjbGllbnQpKSkgeworIAkJc3No X2dzc2FwaV9lcnJvcihjdHgpOworIAkJcmV0dXJuIChjdHgtPm1ham9yKTsKKyAJfQorKyNlbmRp ZgorIAorIAkvKiBXZSBjYW4ndCBjb3B5IHRoaXMgc3RydWN0dXJlLCBzbyB3ZSBqdXN0IG1vdmUg dGhlIHBvaW50ZXIgdG8gaXQgKi8KKyAJY2xpZW50LT5jcmVkcyA9IGN0eC0+Y2xpZW50X2NyZWRz OworIAljdHgtPmNsaWVudF9jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7CisrCisrCS8qIG5l ZWRlZCBmb3IgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoKSAqLworKwljbGll bnQtPmNvbnRleHQgPSBjdHgtPmNvbnRleHQ7CisrCisgCXJldHVybiAoY3R4LT5tYWpvcik7Cisg fQorIAorKyNpZmRlZiBLUkI1CisgLyogUmV0dXJucyBub24temVybyBpZiBLZXJiZXJvcyBjcmVk ZW50aWFscyBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQuICovCisgaW50Cisgc3NoX2dzc2FwaV9j cmVkZW50aWFsc19zdG9yZWQodm9pZCkKK0BAIC04NTEsMTIgKzkwNSwxOSBAQAorIAorIAl1bnNl dGVudigiS1JCNUNDTkFNRSIpOworIH0KKysjZW5kaWYKKyAKKyAjaWZuZGVmIEtSQjUKKyAvKiBB cyB1c2VyIC0gY2FsbGVkIG9uIGZhdGFsL2V4aXQ7IGZ1bGwgaW1wbGVtZW50YXRpb24gaW4gZ3Nz LXNlcnYta3JiNS5jICovCisgdm9pZAorIHNzaF9nc3NhcGlfY2xlYW51cF9jcmVkcyh2b2lkKQor IHsKKysJaWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZmlsZW5hbWUgIT0gTlVMTCkgeworKwkJLyog VW5saW5rIHByb2JhYmx5IGlzbid0IHN1ZmZpY2llbnQgKi8KKysJCWRlYnVnKCJyZW1vdmluZyBn c3NhcGkgY3JlZCBmaWxlXCIlc1wiIiwKKysJCSAgICBnc3NhcGlfY2xpZW50LnN0b3JlLmZpbGVu YW1lKTsKKysJCXVubGluayhnc3NhcGlfY2xpZW50LnN0b3JlLmZpbGVuYW1lKTsKKysJfQorIH0K KyAKKyAvKgorQEAgLTg3OSw2ICs5NDAsMTEgQEAKKyAJfQorIAorIAlpZiAoZ3NzYXBpX2NsaWVu dC5tZWNoICYmIGdzc2FwaV9jbGllbnQubWVjaC0+c3RvcmVjcmVkcykgeworKwkJaWYgKG9wdGlv bnMuZ3NzX2NyZWRzX3BhdGgpIHsKKysJCQlnc3NhcGlfY2xpZW50LnN0b3JlLmZpbGVuYW1lID0K KysJCQkgICAgZXhwYW5kX2F1dGhvcml6ZWRfa2V5cyhvcHRpb25zLmdzc19jcmVkc19wYXRoLAor KwkJCSAgICB0aGVfYXV0aGN0eHQtPnB3KTsKKysJCX0KKyAJCXJldHVybiAoKmdzc2FwaV9jbGll bnQubWVjaC0+c3RvcmVjcmVkcykoJmdzc2FwaV9jbGllbnQpOworIAl9IGVsc2UKKyAJCWRlYnVn KCJzc2hfZ3NzYXBpX3N0b3JlY3JlZHM6IE5vdCBhIEdTU0FQSSBtZWNoYW5pc20iKTsKK0BAIC05 MTIsMTEgKzk3OCwxMyBAQAorIAorIAkodm9pZCkga2V4OyAvKiB1c2VkIGluIHByaXZpbGVnZSBz ZXBhcmF0aW9uICovCisgCistCWlmIChnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS5sZW5ndGgg PT0gMCB8fAorLQkgICAgZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUudmFsdWUgPT0gTlVMTCkg eworLQkJZGVidWcoIk5vIHN1aXRhYmxlIGNsaWVudCBkYXRhIik7CisrI2lmZGVmIEdTU19DX0dM T0JVU19MSU1JVEVEX1BST1hZX0ZMQUcKKysJaWYgKGxpbWl0ZWQgJiYgb3B0aW9ucy5nc2lfYWxs b3dfbGltaXRlZF9wcm94eSAhPSAxKSB7CisrCQlkZWJ1ZygibGltaXRlZCBwcm94eSBub3QgYWNj ZXB0YWJsZSBmb3IgcmVtb3RlIGxvZ2luIik7CisgCQlyZXR1cm4gMDsKKyAJfQorKyNlbmRpZgor KworIAlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdzc2FwaV9jbGllbnQubWVjaC0+dXNlcm9r KQorIAkJaWYgKCgqZ3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2spKCZnc3NhcGlfY2xpZW50LCB1 c2VyKSkgeworIAkJCWdzc2FwaV9jbGllbnQudXNlZCA9IDE7CitAQCAtOTI3LDYgKzk5NSw3IEBA CisgCQkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFt ZSk7CisgCQkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5leHBvcnRl ZG5hbWUpOworIAkJCWdzc19yZWxlYXNlX2NyZWQoJmxtaW4sICZnc3NhcGlfY2xpZW50LmNyZWRz KTsKKysJCQlnc3NfcmVsZWFzZV9uYW1lKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5jdHhfbmFtZSk7 CisgCisgCQkJaWYgKGdzc2FwaV9jbGllbnQuaW5kaWNhdG9ycyAhPSBOVUxMKSB7CisgCQkJCWZv ciAoaSA9IDA7IGdzc2FwaV9jbGllbnQuaW5kaWNhdG9yc1tpXSAhPSBOVUxMOyBpKyspCitAQCAt OTQyLDYgKzEwMTEsMjQgQEAKKyAJcmV0dXJuICgwKTsKKyB9CisgCisrLyogUHJpdmlsZWRnZWQg Ki8KKytpbnQKKytzc2hfZ3NzYXBpX2xvY2FsbmFtZShjaGFyICoqdXNlcikKKyt7CisrCSp1c2Vy ID0gTlVMTDsKKysJaWYgKGdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUubGVuZ3RoID09IDAgfHwK KysJICAgIGdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUudmFsdWUgPT0gTlVMTCkgeworKwkJZGVi dWcoIk5vIHN1aXRhYmxlIGNsaWVudCBkYXRhIik7CisrCQlyZXR1cm4gKDApOworKwl9CisrCWlm IChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNoLT5sb2NhbG5hbWUpIHsK KysJCXJldHVybigoKmdzc2FwaV9jbGllbnQubWVjaC0+bG9jYWxuYW1lKSgmZ3NzYXBpX2NsaWVu dCx1c2VyKSk7CisrCX0gZWxzZSB7CisrCQlkZWJ1ZygiVW5rbm93biBjbGllbnQgYXV0aGVudGlj YXRpb24gdHlwZSIpOworKwl9CisrCXJldHVybiAoMCk7CisrfQorKworIC8qIFRoZXNlIGJpdHMg YXJlIG9ubHkgdXNlZCBmb3IgcmVrZXlpbmcuIFRoZSB1bnByaXZpbGVkZ2VkIGNoaWxkIGlzIHJ1 bm5pbmcKKyAgKiBhcyB0aGUgdXNlciwgdGhlIG1vbml0b3IgaXMgcm9vdC4KKyAgKgorQEAgLTk2 OCw5ICsxMDU1LDExIEBACisgCXBhbV9oYW5kbGVfdCAqcGFtaCA9IE5VTEw7CisgCXN0cnVjdCBw YW1fY29udiBwYW1jb252ID0ge3NzaF9nc3NhcGlfc2ltcGxlX2NvbnYsIE5VTEx9OworIAljaGFy ICplbnZzdHI7CisrCWNoYXIgKipwOyBjaGFyICoqcHc7CisgI2VuZGlmCisgCistCWlmIChnc3Nh cGlfY2xpZW50LnN0b3JlLmVudnZhbCA9PSBOVUxMKQorKwlpZiAoZ3NzYXBpX2NsaWVudC5zdG9y ZS5maWxlbmFtZSA9PSBOVUxMICYmCisrCSAgICBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCA9 PSBOVUxMKQorIAkJcmV0dXJuOworIAorIAlvayA9IG1tX3NzaF9nc3NhcGlfdXBkYXRlX2NyZWRz KCZnc3NhcGlfY2xpZW50LnN0b3JlKTsKK0BAIC05OTAsNiArMTA3OSwxOCBAQAorIAlpZiAocmV0 KQorIAkJcmV0dXJuOworIAorKwkvKiBQdXQgc3NoIHBhbSBzdGFjayBlbnYgdmFyaWFibGVzIGlu IHRoaXMgbmV3IHBhbSBzdGFjayBlbnYKKysJICogVXNpbmcgcGFtLXBraW5pdCwgS1JCNUNDTkFN RSBpcyBzZXQgZHVyaW5nIGRvX3BhbV9zZXNzaW9uCisrCSAqIHRoaXMgYWRkaXRpb24gZW5hYmxl cyBwYW0tcGtpbml0IHRvIGFjY2VzcyBLUkI1Q0NOQU1FIGlmIHVzZWQKKysJICogaW4gc3NoZC1y ZWtleSBzdGFjayB0b28KKysJICovCisrCXB3ID0gcCA9IGZldGNoX3BhbV9lbnZpcm9ubWVudCgp OworKwl3aGlsZSAoICpwdyAhPSBOVUxMICkgeworKwkJcGFtX3B1dGVudihwYW1oLCAqcHcpOwor KwkJcHcrKzsKKysJfQorKwlmcmVlX3BhbV9lbnZpcm9ubWVudChwKTsKKysKKyAJeGFzcHJpbnRm KCZlbnZzdHIsICIlcz0lcyIsIGdzc2FwaV9jbGllbnQuc3RvcmUuZW52dmFyLAorIAkgICAgZ3Nz YXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwpOworIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9y aWcvZ3NzLXNlcnYtZ3NpLmMgb3BlbnNzaC0xMC41cDEvZ3NzLXNlcnYtZ3NpLmMKKy0tLSBvcGVu c3NoLTEwLjVwMS5vcmlnL2dzcy1zZXJ2LWdzaS5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvZ3NzLXNlcnYtZ3NpLmMJMjAyNi0wOS0yMSAw NTo0MTozMC44MzQyNTMwMTcgKzAyMDAKK0BAIC0wLDAgKzEsMzI4IEBACisrLyoKKysgKiBDb3B5 cmlnaHQgKGMpIDIwMDEtMjAwMyBTaW1vbiBXaWxraW5zb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZSBkaXN0cmlidXRpb24uCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBBVVRIT1IgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisrICogSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO VElFUworKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisrICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorKyAqIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKysgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKysgKiBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU CisrICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisrICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKi8KKysKKysjaW5jbHVkZSAi aW5jbHVkZXMuaCIKKysKKysjaWZkZWYgR1NTQVBJCisrI2lmZGVmIEdTSQorKworKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKworKyNpbmNsdWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUgImhvc3RmaWxlLmgiCisr I2luY2x1ZGUgImF1dGguaCIKKysjaW5jbHVkZSAibG9nLmgiCisrI2luY2x1ZGUgIm1pc2MuaCIK KysjaW5jbHVkZSAic2VydmNvbmYuaCIKKysjaW5jbHVkZSAic3NoLWdzcy5oIgorKworK2V4dGVy biBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisrCisrI2luY2x1ZGUgPGdsb2J1c19nc3NfYXNzaXN0 Lmg+CisrCisrc3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV91c2Vyb2soc3NoX2dzc2FwaV9jbGll bnQgKmNsaWVudCwgY2hhciAqbmFtZSk7Cisrc3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV9sb2Nh bG5hbWUoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqKnVzZXIpOworK3N0YXRpYyBp bnQgc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KTsK KytzdGF0aWMgaW50IHNzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHNfbWljdjIoc3NoX2dzc2FwaV9j bGllbnQgKmNsaWVudCk7Cisrc3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV91cGRhdGVjcmVkcyhz c2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsCisrICAgIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQp OworK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHNfbWljdjIoc3NoX2dzc2Fw aV9jY2FjaGUgKnN0b3JlLAorKyAgICBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KTsKKysKKytz c2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoID0geworKwkiZFp1SWViTWpnVXFheHZiRjdo RGJBdz09IiwKKysJIkdTSSIsCisrCXs5LCAiXHgyQlx4MDZceDAxXHgwNFx4MDFceDlCXHg1MFx4 MDFceDAxIn0sCisrCU5VTEwsCisrCSZzc2hfZ3NzYXBpX2dzaV91c2Vyb2ssCisrCSZzc2hfZ3Nz YXBpX2dzaV9sb2NhbG5hbWUsCisrCSZzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzLAorKwkmc3No X2dzc2FwaV9nc2lfdXBkYXRlY3JlZHMKKyt9OworKworK3NzaF9nc3NhcGlfbWVjaCBnc3NhcGlf Z3NpX21lY2hfbWljdjIgPSB7CisrCSJ2ejhKMUU5UHpMcjhiMUsrMHJlbVRnPT0iLAorKwkiR1NJ IiwKKysJezEwLCAiXHgyYlx4MDZceDAxXHgwNFx4MDFceDliXHg1MFx4MDFceDAxXHgwMSJ9LAor KwlOVUxMLAorKwkmc3NoX2dzc2FwaV9nc2lfdXNlcm9rLAorKwkmc3NoX2dzc2FwaV9nc2lfbG9j YWxuYW1lLAorKwkmc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkc19taWN2MiwKKysJJnNzaF9nc3Nh cGlfZ3NpX3VwZGF0ZWNyZWRzX21pY3YyCisrfTsKKysKKysvKgorKyAqIENoZWNrIGlmIHRoaXMg dXNlciBpcyBPSyB0byBsb2dpbiB1bmRlciBHU0kuIFVzZXIgaGFzIGJlZW4gYXV0aGVudGljYXRl ZAorKyAqIGFzIGlkZW50aXR5IGluIGdsb2JhbCAnY2xpZW50X25hbWUudmFsdWUnIGFuZCBpcyB0 cnlpbmcgdG8gbG9nIGluIGFzIHBhc3NlZAorKyAqIHVzZXJuYW1lIGluICduYW1lJy4KKysgKgor KyAqIFJldHVybnMgbm9uLXplcm8gaWYgdXNlciBpcyBhdXRob3JpemVkLCAwIG90aGVyd2lzZS4K KysgKi8KKytzdGF0aWMgaW50Cisrc3NoX2dzc2FwaV9nc2lfdXNlcm9rKHNzaF9nc3NhcGlfY2xp ZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpCisreworKyAgICBpbnQgYXV0aG9yaXplZCA9IDA7Cisr ICAgIGdsb2J1c19yZXN1bHRfdCByZXM7CisrI2lmZGVmIEhBVkVfR0xPQlVTX0dTU19BU1NJU1Rf TUFQX0FORF9BVVRIT1JJWkUKKysgICAgY2hhciBsbmFtZVsyNTZdID0gIiI7CisrI2VuZGlmCisr CisrI2lmZGVmIEdMT0JVU19HU0lfR1NTX0FTU0lTVF9NT0RVTEUKKysgICAgaWYgKGdsb2J1c19t b2R1bGVfYWN0aXZhdGUoR0xPQlVTX0dTSV9HU1NfQVNTSVNUX01PRFVMRSkgIT0gMCkgeworKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKKysKKysvKiB1c2UgbmV3IGdsb2J1c19n c3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKCkgaW50ZXJmYWNlIGlmIGF2YWlsYWJsZSAqLwor KyNpZmRlZiBIQVZFX0dMT0JVU19HU1NfQVNTSVNUX01BUF9BTkRfQVVUSE9SSVpFCisrICAgIGRl YnVnKCJjYWxsaW5nIGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKCkiKTsKKysg ICAgaWYgKEdMT0JVU19TVUNDRVNTICE9CisrICAgICAgICAocmVzID0gZ2xvYnVzX2dzc19hc3Np c3RfbWFwX2FuZF9hdXRob3JpemUoY2xpZW50LT5jb250ZXh0LCAic3NoIiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBsbmFtZSwgMjU2 KSkpIHsKKysgICAgICAgIGRlYnVnKCIlcyIsIGdsb2J1c19lcnJvcl9wcmludF9jaGFpbihnbG9i dXNfZXJyb3JfZ2V0KHJlcykpKTsKKysgICAgfSBlbHNlIGlmIChsbmFtZVswXSAmJiBzdHJjbXAo bmFtZSwgbG5hbWUpICE9IDApIHsKKysgICAgICAgIGRlYnVnKCJHU0kgdXNlciBtYXBzIHRvICVz LCBub3QgJXMiLCBsbmFtZSwgbmFtZSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBhdXRob3Jp emVkID0gMTsKKysgICAgfQorKyNlbHNlCisrICAgIGRlYnVnKCJjYWxsaW5nIGdsb2J1c19nc3Nf YXNzaXN0X3VzZXJvaygpIik7CisrICAgIGlmIChHTE9CVVNfU1VDQ0VTUyAhPQorKyAgICAgICAg KHJlcyA9IChnbG9idXNfZ3NzX2Fzc2lzdF91c2Vyb2soY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1 ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpKSkpIHsK KysgICAgICAgIGRlYnVnKCIlcyIsIGdsb2J1c19lcnJvcl9wcmludF9jaGFpbihnbG9idXNfZXJy b3JfZ2V0KHJlcykpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAgIGF1dGhvcml6ZWQgPSAxOwor KyAgICB9CisrI2VuZGlmCisrCisrICAgIGxvZ2l0KCJHU0kgdXNlciAlcyBpcyVzIGF1dGhvcml6 ZWQgYXMgdGFyZ2V0IHVzZXIgJXMiLAorKyAgICAgICAgKGNoYXIgKikgY2xpZW50LT5kaXNwbGF5 bmFtZS52YWx1ZSwgKGF1dGhvcml6ZWQgPyAiIiA6ICIgbm90IiksIG5hbWUpOworKworKyAgICBy ZXR1cm4gYXV0aG9yaXplZDsKKyt9CisrCisrLyoKKysgKiBSZXR1cm4gdGhlIGxvY2FsIHVzZXJu YW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgR1NJIGNyZWRlbnRpYWxzLgorKyAqLworK2ludAorK3Nz aF9nc3NhcGlfZ3NpX2xvY2FsbmFtZShzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICoq dXNlcikKKyt7CisrICAgIGdsb2J1c19yZXN1bHRfdCByZXM7CisrI2lmZGVmIEhBVkVfR0xPQlVT X0dTU19BU1NJU1RfTUFQX0FORF9BVVRIT1JJWkUKKysgICAgY2hhciBsbmFtZVsyNTZdID0gIiI7 CisrI2VuZGlmCisrCisrI2lmZGVmIEdMT0JVU19HU0lfR1NTX0FTU0lTVF9NT0RVTEUKKysgICAg aWYgKGdsb2J1c19tb2R1bGVfYWN0aXZhdGUoR0xPQlVTX0dTSV9HU1NfQVNTSVNUX01PRFVMRSkg IT0gMCkgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKKysKKysvKiB1c2Ug bmV3IGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKCkgaW50ZXJmYWNlIGlmIGF2 YWlsYWJsZSAqLworKyNpZmRlZiBIQVZFX0dMT0JVU19HU1NfQVNTSVNUX01BUF9BTkRfQVVUSE9S SVpFCisrICAgIGRlYnVnKCJjYWxsaW5nIGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9y aXplKCkiKTsKKysgICAgaWYgKEdMT0JVU19TVUNDRVNTICE9CisrICAgICAgICAocmVzID0gZ2xv YnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoY2xpZW50LT5jb250ZXh0LCAic3NoIiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBsbmFtZSwgMjU2KSkpIHsKKysgICAgICAgIGRlYnVnKCIlcyIsIGdsb2J1c19lcnJvcl9wcmlu dF9jaGFpbihnbG9idXNfZXJyb3JfZ2V0KHJlcykpKTsKKysgICAgICAgIGxvZ2l0KCJmYWlsZWQg dG8gbWFwIEdTSSB1c2VyICVzIiwgKGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsK KysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgICp1c2VyID0gc3RyZHVwKGxuYW1lKTsK KysjZWxzZQorKyAgICBkZWJ1ZygiY2FsbGluZyBnbG9idXNfZ3NzX2Fzc2lzdF9ncmlkbWFwKCki KTsKKysgICAgaWYgKEdMT0JVU19TVUNDRVNTICE9CisrICAgICAgICAocmVzID0gZ2xvYnVzX2dz c19hc3Npc3RfZ3JpZG1hcChjbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlLCB1c2VyKSkpIHsKKysg ICAgICAgIGRlYnVnKCIlcyIsIGdsb2J1c19lcnJvcl9wcmludF9jaGFpbihnbG9idXNfZXJyb3Jf Z2V0KHJlcykpKTsKKysgICAgICAgIGxvZ2l0KCJmYWlsZWQgdG8gbWFwIEdTSSB1c2VyICVzIiwg KGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKKysgICAgICAgIHJldHVybiAwOwor KyAgICB9CisrI2VuZGlmCisrCisrICAgIGxvZ2l0KCJHU0kgdXNlciAlcyBtYXBwZWQgdG8gdGFy Z2V0IHVzZXIgJXMiLAorKyAgICAgICAgKGNoYXIgKikgY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1 ZSwgKnVzZXIpOworKworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyoKKysgKiBFeHBvcnQgR1NJ IGNyZWRlbnRpYWxzIHRvIGRpc2suCisrICovCisrc3RhdGljIGludAorK3NzaF9nc3NhcGlfZ3Np X3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyt7CisrCU9NX3VpbnQzMglt YWpvcl9zdGF0dXM7CisrCU9NX3VpbnQzMgltaW5vcl9zdGF0dXM7CisrCWdzc19idWZmZXJfZGVz YwlleHBvcnRfY3JlZCA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJY2hhciAqCQlwOworKworKwlp ZiAoIWNsaWVudCB8fCAhY2xpZW50LT5jcmVkcykgeworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJ bWFqb3Jfc3RhdHVzID0gZ3NzX2V4cG9ydF9jcmVkKCZtaW5vcl9zdGF0dXMsCisrCQkJCSAgICAg ICBjbGllbnQtPmNyZWRzLAorKwkJCQkgICAgICAgR1NTX0NfTk9fT0lELAorKwkJCQkgICAgICAg MSwKKysJCQkJICAgICAgICZleHBvcnRfY3JlZCk7CisrCWlmIChHU1NfRVJST1IobWFqb3Jfc3Rh dHVzKSAmJiBtYWpvcl9zdGF0dXMgIT0gR1NTX1NfVU5BVkFJTEFCTEUpIHsKKysJCUdzc2N0eHQg KmN0eDsKKysJCXNzaF9nc3NhcGlfYnVpbGRfY3R4KCZjdHgpOworKwkJY3R4LT5tYWpvciA9IG1h am9yX3N0YXR1czsKKysJCWN0eC0+bWlub3IgPSBtaW5vcl9zdGF0dXM7CisrCQlzc2hfZ3NzYXBp X3NldF9vaWQoY3R4LCAmZ3NzYXBpX2dzaV9tZWNoLm9pZCk7CisrCQlzc2hfZ3NzYXBpX2Vycm9y KGN0eCk7CisrCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmN0eCk7CisrCQlyZXR1cm4gMDsKKysJ fQorKworKwlwID0gc3RyY2hyKChjaGFyICopIGV4cG9ydF9jcmVkLnZhbHVlLCAnPScpOworKwlp ZiAocCA9PSBOVUxMKSB7CisrCQlsb2dpdCgiRmFpbGVkIHRvIHBhcnNlIGV4cG9ydGVkIGNyZWRl bnRpYWxzIHN0cmluZyAnJS4xMDBzJyIsCisrCQkgICAgKGNoYXIgKilleHBvcnRfY3JlZC52YWx1 ZSk7CisrCQlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yX3N0YXR1cywgJmV4cG9ydF9jcmVkKTsK KysJCXJldHVybiAwOworKwl9CisrCSpwKysgPSAnXDAnOworKwlpZiAoc3RyY21wKChjaGFyICop ZXhwb3J0X2NyZWQudmFsdWUsIlg1MDlfVVNFUl9ERUxFR19QUk9YWSIpID09IDApIHsKKysJCWNs aWVudC0+c3RvcmUuZW52dmFyID0gc3RyZHVwKCJYNTA5X1VTRVJfUFJPWFkiKTsKKysJfSBlbHNl IHsKKysJCWNsaWVudC0+c3RvcmUuZW52dmFyID0gc3RyZHVwKChjaGFyICopZXhwb3J0X2NyZWQu dmFsdWUpOworKwl9CisrCWlmIChhY2Nlc3MocCwgUl9PSykgPT0gMCkgeworKwkJaWYgKGNsaWVu dC0+c3RvcmUuZmlsZW5hbWUpIHsKKysJCQlpZiAocmVuYW1lKHAsIGNsaWVudC0+c3RvcmUuZmls ZW5hbWUpIDwgMCkgeworKwkJCQlsb2dpdCgiRmFpbGVkIHRvIHJlbmFtZSAlcyB0byAlczogJXMi LCBwLAorKwkJCQkgICAgY2xpZW50LT5zdG9yZS5maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsK KysJCQkJZnJlZShjbGllbnQtPnN0b3JlLmZpbGVuYW1lKTsKKysJCQkJY2xpZW50LT5zdG9yZS5m aWxlbmFtZSA9IHN0cmR1cChwKTsKKysJCQl9IGVsc2UgeworKwkJCQlwID0gY2xpZW50LT5zdG9y ZS5maWxlbmFtZTsKKysJCQl9CisrCQl9IGVsc2UgeworKwkJCWNsaWVudC0+c3RvcmUuZmlsZW5h bWUgPSBzdHJkdXAocCk7CisrCQl9CisrCX0KKysJY2xpZW50LT5zdG9yZS5lbnZ2YWwgPSBzdHJk dXAocCk7CisrI2lmZGVmIFVTRV9QQU0KKysJaWYgKG9wdGlvbnMudXNlX3BhbSkKKysJCWRvX3Bh bV9wdXRlbnYoY2xpZW50LT5zdG9yZS5lbnZ2YXIsIGNsaWVudC0+c3RvcmUuZW52dmFsKTsKKysj ZW5kaWYKKysJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vcl9zdGF0dXMsICZleHBvcnRfY3JlZCk7 CisrCisrCXJldHVybiAxOworK30KKysKKysvKgorKyAqIEV4cG9ydCBHU0kgY3JlZGVudGlhbHMg dG8gZGlzay4KKysgKi8KKytzdGF0aWMgaW50Cisrc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkc19t aWN2Mihzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQorK3sKKysJT01fdWludDMyCW1ham9yX3N0 YXR1czsKKysJT01fdWludDMyCW1pbm9yX3N0YXR1czsKKysJZ3NzX2J1ZmZlcl9kZXNjCWV4cG9y dF9jcmVkID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwljaGFyICoJCXA7CisrCisrCWlmICghY2xp ZW50IHx8ICFjbGllbnQtPmNyZWRzKSB7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwltYWpvcl9z dGF0dXMgPSBnc3NfZXhwb3J0X2NyZWQoJm1pbm9yX3N0YXR1cywKKysJCQkJICAgICAgIGNsaWVu dC0+Y3JlZHMsCisrCQkJCSAgICAgICBHU1NfQ19OT19PSUQsCisrCQkJCSAgICAgICAxLAorKwkJ CQkgICAgICAgJmV4cG9ydF9jcmVkKTsKKysJaWYgKEdTU19FUlJPUihtYWpvcl9zdGF0dXMpICYm IG1ham9yX3N0YXR1cyAhPSBHU1NfU19VTkFWQUlMQUJMRSkgeworKwkJR3NzY3R4dCAqY3R4Owor KwkJc3NoX2dzc2FwaV9idWlsZF9jdHgoJmN0eCk7CisrCQljdHgtPm1ham9yID0gbWFqb3Jfc3Rh dHVzOworKwkJY3R4LT5taW5vciA9IG1pbm9yX3N0YXR1czsKKysJCXNzaF9nc3NhcGlfc2V0X29p ZChjdHgsICZnc3NhcGlfZ3NpX21lY2hfbWljdjIub2lkKTsKKysJCXNzaF9nc3NhcGlfZXJyb3Io Y3R4KTsKKysJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgmY3R4KTsKKysJCXJldHVybiAwOworKwl9 CisrCisrCXAgPSBzdHJjaHIoKGNoYXIgKikgZXhwb3J0X2NyZWQudmFsdWUsICc9Jyk7CisrCWlm IChwID09IE5VTEwpIHsKKysJCWxvZ2l0KCJGYWlsZWQgdG8gcGFyc2UgZXhwb3J0ZWQgY3JlZGVu dGlhbHMgc3RyaW5nICclLjEwMHMnIiwKKysJCSAgICAoY2hhciAqKWV4cG9ydF9jcmVkLnZhbHVl KTsKKysJCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3Jfc3RhdHVzLCAmZXhwb3J0X2NyZWQpOwor KwkJcmV0dXJuIDA7CisrCX0KKysJKnArKyA9ICdcMCc7CisrCWlmIChzdHJjbXAoKGNoYXIgKill eHBvcnRfY3JlZC52YWx1ZSwiWDUwOV9VU0VSX0RFTEVHX1BST1hZIikgPT0gMCkgeworKwkJY2xp ZW50LT5zdG9yZS5lbnZ2YXIgPSBzdHJkdXAoIlg1MDlfVVNFUl9QUk9YWSIpOworKwl9IGVsc2Ug eworKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSBzdHJkdXAoKGNoYXIgKilleHBvcnRfY3JlZC52 YWx1ZSk7CisrCX0KKysJaWYgKGFjY2VzcyhwLCBSX09LKSA9PSAwKSB7CisrCQlpZiAoY2xpZW50 LT5zdG9yZS5maWxlbmFtZSkgeworKwkJCWlmIChyZW5hbWUocCwgY2xpZW50LT5zdG9yZS5maWxl bmFtZSkgPCAwKSB7CisrCQkJCWxvZ2l0KCJGYWlsZWQgdG8gcmVuYW1lICVzIHRvICVzOiAlcyIs IHAsCisrCQkJCSAgICBjbGllbnQtPnN0b3JlLmZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwor KwkJCQlmcmVlKGNsaWVudC0+c3RvcmUuZmlsZW5hbWUpOworKwkJCQljbGllbnQtPnN0b3JlLmZp bGVuYW1lID0gc3RyZHVwKHApOworKwkJCX0gZWxzZSB7CisrCQkJCXAgPSBjbGllbnQtPnN0b3Jl LmZpbGVuYW1lOworKwkJCX0KKysJCX0gZWxzZSB7CisrCQkJY2xpZW50LT5zdG9yZS5maWxlbmFt ZSA9IHN0cmR1cChwKTsKKysJCX0KKysJfQorKwljbGllbnQtPnN0b3JlLmVudnZhbCA9IHN0cmR1 cChwKTsKKysjaWZkZWYgVVNFX1BBTQorKwlpZiAob3B0aW9ucy51c2VfcGFtKQorKwkJZG9fcGFt X3B1dGVudihjbGllbnQtPnN0b3JlLmVudnZhciwgY2xpZW50LT5zdG9yZS5lbnZ2YWwpOworKyNl bmRpZgorKwlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yX3N0YXR1cywgJmV4cG9ydF9jcmVkKTsK KysKKysJcmV0dXJuIDE7CisrfQorKworKy8qCisrICogRXhwb3J0IHVwZGF0ZWQgR1NJIGNyZWRl bnRpYWxzIHRvIGRpc2suCisrICovCisrc3RhdGljIGludAorK3NzaF9nc3NhcGlfZ3NpX3VwZGF0 ZWNyZWRzKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSxzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50 KQorK3sKKysJcmV0dXJuIHNzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHMoY2xpZW50KTsKKyt9Cisr CisrLyoKKysgKiBFeHBvcnQgdXBkYXRlZCBHU0kgY3JlZGVudGlhbHMgdG8gZGlzay4KKysgKi8K KytzdGF0aWMgaW50Cisrc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHNfbWljdjIoc3NoX2dzc2Fw aV9jY2FjaGUgKnN0b3JlLHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCisreworKwlyZXR1cm4g c3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkc19taWN2MihjbGllbnQpOworK30KKysKKysjZW5kaWYg LyogR1NJICovCisrI2VuZGlmIC8qIEdTU0FQSSAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAx Lm9yaWcvZ3NzLXNlcnYta3JiNS5jIG9wZW5zc2gtMTAuNXAxL2dzcy1zZXJ2LWtyYjUuYworLS0t IG9wZW5zc2gtMTAuNXAxLm9yaWcvZ3NzLXNlcnYta3JiNS5jCTIwMjYtMDktMjEgMDU6NDA6NTgu Mzg3ODkyMzk4ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvZ3NzLXNlcnYta3JiNS5jCTIwMjYt MDktMjEgMDU6NDE6MzAuODM0MzU4MzU2ICswMjAwCitAQCAtNDUwLDYgKzQ1MCwzNCBAQAorIAly ZXR1cm4gZm91bmRfcHJpbmNpcGFsOworIH0KKyAgCisrLyogUmV0cmlldmUgdGhlIGxvY2FsIHVz ZXJuYW1lIGFzc29jaWF0ZWQgd2l0aCBhIHNldCBvZiBLZXJiZXJvcworKyAqIGNyZWRlbnRpYWxz LiBIb3BlZnVsbHkgd2UgY2FuIHVzZSB0aGlzIGZvciB0aGUgJ2VtcHR5JyB1c2VybmFtZQorKyAq IGxvZ2lucyBkaXNjdXNzZWQgaW4gdGhlIGRyYWZ0ICAqLworK3N0YXRpYyBpbnQKKytzc2hfZ3Nz YXBpX2tyYjVfbG9jYWxuYW1lKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKip1c2Vy KSB7CisrCWtyYjVfcHJpbmNpcGFsIHByaW5jOworKwlpbnQgcmV0dmFsOworKworKwlpZiAoc3No X2dzc2FwaV9rcmI1X2luaXQoKSA9PSAwKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICgocmV0dmFs PWtyYjVfcGFyc2VfbmFtZShrcmJfY29udGV4dCwgY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSwK KysJICAgICZwcmluYykpKSB7CisrCQlsb2dpdCgia3JiNV9wYXJzZV9uYW1lKCk6ICUuMTAwcyIs CisrCQkgICAga3JiNV9nZXRfZXJyX3RleHQoa3JiX2NvbnRleHQscmV0dmFsKSk7CisrCQlyZXR1 cm4gMDsKKysJfQorKworKwkvKiBXZSd2ZSBnb3QgdG8gcmV0dXJuIGEgbWFsbG9jJ2Qgc3RyaW5n ICovCisrCSp1c2VyID0gKGNoYXIgKil4bWFsbG9jKDI1Nik7CisrCWlmIChrcmI1X2FuYW1lX3Rv X2xvY2FsbmFtZShrcmJfY29udGV4dCwgcHJpbmMsIDI1NiwgKnVzZXIpKSB7CisrCQlmcmVlKCp1 c2VyKTsKKysJCSp1c2VyID0gTlVMTDsKKysJCXJldHVybigwKTsKKysJfQorKworKwlyZXR1cm4o MSk7CisrfQorIAorIC8qIFRoaXMgd3JpdGVzIG91dCBhbnkgZm9yd2FyZGVkIGNyZWRlbnRpYWxz IGZyb20gdGhlIHN0cnVjdHVyZSBwb3B1bGF0ZWQKKyAgKiBkdXJpbmcgdXNlcmF1dGguIENhbGxl ZCBhZnRlciB3ZSBoYXZlIHNldHVpZCB0byB0aGUgdXNlciAqLworQEAgLTU0NCw3ICs1NzIsNyBA QAorIAlyZXR1cm4gc2V0X2VudjsKKyB9CisgCistaW50Cisrc3RhdGljIGludAorIHNzaF9nc3Nh cGlfa3JiNV91cGRhdGVjcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsCisgICAgIHNzaF9n c3NhcGlfY2xpZW50ICpjbGllbnQpCisgeworQEAgLTg0MCw3ICs4NjgsNyBAQAorIAl7OSwgIlx4 MkFceDg2XHg0OFx4ODZceEY3XHgxMlx4MDFceDAyXHgwMiJ9LAorIAlOVUxMLAorIAkmc3NoX2dz c2FwaV9rcmI1X3VzZXJvaywKKy0JTlVMTCwKKysJJnNzaF9nc3NhcGlfa3JiNV9sb2NhbG5hbWUs CisgCSZzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcywKKyAJJnNzaF9nc3NhcGlfa3JiNV91cGRh dGVjcmVkcworIH07CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9rZXhnc3NzLmMgb3Bl bnNzaC0xMC41cDEva2V4Z3Nzcy5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9rZXhnc3NzLmMJ MjAyNi0wOS0yMSAwNTo0MDo1Ny44Njk3NzkxNDggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9r ZXhnc3NzLmMJMjAyNi0wOS0yMSAwNTo0MTozMC44MzQ4OTI0MzQgKzAyMDAKK0BAIC00OCw2ICs0 OCw3IEBACisgI2luY2x1ZGUgImRpZ2VzdC5oIgorICNpbmNsdWRlICJzc2hlcnIuaCIKKyAKKytz dGF0aWMgdm9pZCBrZXhfZ3NzX3NlbmRfZXJyb3IoR3NzY3R4dCAqY3R4dCwgc3RydWN0IHNzaCAq c3NoKTsKKyBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOworIAorIHN0YXRpYyBpbnQgaW5w dXRfa2V4Z3NzX2luaXQoaW50LCB1X2ludDMyX3QsIHN0cnVjdCBzc2ggKik7CitAQCAtODEsOCAr ODIsMTAgQEAKKyAKKyAJZGVidWcyX2YoIkFjcXVpcmluZyBjcmVkZW50aWFscyIpOworIAorLQlp ZiAoR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfc2VydmVyX2N0eCgma2V4LT5nc3MsIG9pZCkpKQor KwlpZiAoR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfc2VydmVyX2N0eCgma2V4LT5nc3MsIG9pZCkp KSB7CisrCQlrZXhfZ3NzX3NlbmRfZXJyb3Ioa2V4LT5nc3MsIHNzaCk7CisgCQlmYXRhbCgiVW5h YmxlIHRvIGFjcXVpcmUgY3JlZGVudGlhbHMgZm9yIHRoZSBzZXJ2ZXIiKTsKKysJfQorIAorIAlz c2hfZ3NzYXBpX2J1aWxkX2N0eCgma2V4LT5nc3MpOworIAlpZiAoa2V4LT5nc3MgPT0gTlVMTCkK K0BAIC0xMzksMTMgKzE0MiwxNCBAQAorIAlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0df S0VYR1NTX0NPTlRJTlVFLCBOVUxMKTsKKyAKKyAJaWYgKEdTU19FUlJPUihnc3MtPm1ham9yKSkg eworKwkJa2V4X2dzc19zZW5kX2Vycm9yKGtleC0+Z3NzLCBzc2gpOworIAkJaWYgKHNlbmRfdG9r LT5sZW5ndGggPiAwKSB7CisgCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0df S0VYR1NTX0NPTlRJTlVFKSkgIT0gMCB8fAorIAkJCSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5n KHNzaCwgc2VuZF90b2stPnZhbHVlLCBzZW5kX3Rvay0+bGVuZ3RoKSkgIT0gMCB8fAorIAkJCSAg ICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApCisgCQkJCWZhdGFsKCJzc2hwa3QgZmFpbGVk OiAlcyIsIHNzaF9lcnIocikpOworIAkJfQorLQkJZmF0YWwoImFjY2VwdF9jdHggZGllZCIpOwor KwkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwgIkdTU0FQSSBLZXkgRXhjaGFuZ2UgaGFuZHNo YWtlIGZhaWxlZCIpOworIAl9CisgCisgCWlmICghKCpyZXRfZmxhZ3MgJiBHU1NfQ19NVVRVQUxf RkxBRykpCitAQCAtNjAwLDQgKzYwNCwyNiBAQAorIAlyZXR1cm4ga2V4Z3NzZ2V4X2ZpbmFsKHNz aCwgJnNlbmRfdG9rLCAmcmV0X2ZsYWdzKTsKKyB9CisgCisrc3RhdGljIHZvaWQKKytrZXhfZ3Nz X3NlbmRfZXJyb3IoR3NzY3R4dCAqY3R4dCwgc3RydWN0IHNzaCAqc3NoKSB7CisrCWNoYXIgKmVy cnN0cjsKKysJT01fdWludDMyIG1haiwgbWluOworKwlpbnQgcjsKKysKKysJZXJyc3RyID0gbW1f c3NoX2dzc2FwaV9sYXN0X2Vycm9yKGN0eHQsICZtYWosICZtaW4pOworKwlpZiAoZXJyc3RyKSB7 CisrCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1NfRVJST1IpKSAh PSAwIHx8CisrCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gsIG1haikpICE9IDAgfHwKKysJ CSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNzaCwgbWluKSkgIT0gMCB8fAorKwkJICAgIChyID0g c3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgZXJyc3RyKSkgIT0gMCB8fAorKwkJICAgIChyID0gc3No cGt0X3B1dF9jc3RyaW5nKHNzaCwgIiIpKSAhPSAwIHx8CisrCQkgICAgKHIgPSBzc2hwa3Rfc2Vu ZChzc2gpKSAhPSAwKQorKwkJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikp OworKwkJaWYgKChyID0gc3NoX3BhY2tldF93cml0ZV93YWl0KHNzaCkpICE9IDApCisrCQkJZmF0 YWwoInNzaF9wYWNrZXRfd3JpdGVfd2FpdDogJXMiLCBzc2hfZXJyKHIpKTsKKysJCS8qIFhYWCAt IFdlIHNob3VsZCBwcm9iYWJseSBsb2cgdGhlIGVycm9yIGxvY2FsbHkgaGVyZSAqLworKwkJZnJl ZShlcnJzdHIpOworKwl9CisrfQorKworICNlbmRpZiAvKiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVm aW5lZChXSVRIX09QRU5TU0wpICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9NYWtl ZmlsZS5pbiBvcGVuc3NoLTEwLjVwMS9NYWtlZmlsZS5pbgorLS0tIG9wZW5zc2gtMTAuNXAxLm9y aWcvTWFrZWZpbGUuaW4JMjAyNi0wOS0yMSAwNTo0MDo1OC40MDY1NDA3MTggKzAyMDAKKysrKyBv cGVuc3NoLTEwLjVwMS9NYWtlZmlsZS5pbgkyMDI2LTA5LTIxIDA1OjQxOjMwLjgzNTE3ODgyMCAr MDIwMAorQEAgLTEzNCw3ICsxMzQsNyBAQAorIAlhdXRoLWJzZGF1dGgubyBhdXRoMi1ob3N0YmFz ZWQubyBhdXRoMi1rYmRpbnQubyBcCisgCWF1dGgyLW5vbmUubyBhdXRoMi1wYXNzd2QubyBhdXRo Mi1wdWJrZXkubyBhdXRoMi1wdWJrZXlmaWxlLm8gXAorIAltb25pdG9yLm8gbW9uaXRvcl93cmFw Lm8gYXV0aC1rcmI1Lm8ga2V4Z3Nzcy5vIFwKKy0JYXV0aDItZ3NzLm8gZ3NzLXNlcnYubyBnc3Mt c2Vydi1rcmI1Lm8gXAorKwlhdXRoMi1nc3MubyBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBn c3Mtc2Vydi1nc2kubyBcCisgCWxvZ2lucmVjLm8gYXV0aC1wYW0ubyBhdXRoLXNoYWRvdy5vIGF1 dGgtc2lhLm8gXAorIAlzZnRwLXNlcnZlci5vIHNmdHAtY29tbW9uLm8gXAorIAl1aWRzd2FwLm8g cGxhdGZvcm0tbGlzdGVuLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKK0BAIC0xNDUsNyArMTQ1LDcg QEAKKyAJc2VydmVybG9vcC5vIGF1dGgubyBhdXRoMi5vIGF1dGgtb3B0aW9ucy5vIHNlc3Npb24u byBhdXRoMi1jaGFsbC5vIFwKKyAJZ3JvdXBhY2Nlc3MubyBhdXRoLWJzZGF1dGgubyBhdXRoMi1o b3N0YmFzZWQubyBhdXRoMi1rYmRpbnQubyBcCisgCWF1dGgyLW5vbmUubyBhdXRoMi1wYXNzd2Qu byBhdXRoMi1wdWJrZXkubyBhdXRoMi1wdWJrZXlmaWxlLm8gXAorLQlhdXRoMi1nc3MubyBnc3Mt c2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBrZXhnc3NzLm8gXAorKwlhdXRoMi1nc3MubyBnc3Mtc2Vy di5vIGdzcy1zZXJ2LWtyYjUubyBnc3Mtc2Vydi1nc2kubyBrZXhnc3NzLm8gXAorIAltb25pdG9y X3dyYXAubyBhdXRoLWtyYjUubyBcCisgCWF1ZGl0Lm8gYXVkaXQtYnNtLm8gYXVkaXQtbGludXgu byBwbGF0Zm9ybS5vIFwKKyAJbG9naW5yZWMubyBhdXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0 aC1zaWEubyBcCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9taXNjLmMgb3BlbnNzaC0x MC41cDEvbWlzYy5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9taXNjLmMJMjAyNi0wOS0yMSAw NTo0MDo1Ny43MzIxNDAwNTYgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9taXNjLmMJMjAyNi0w OS0yMSAwNTo0MTozMC44MzU1NjA3NTMgKzAyMDAKK0BAIC00NjQsMTEgKzQ2NCwxNCBAQAorICNk ZWZpbmUgV0hJVEVTUEFDRSAiIFx0XHJcbiIKKyAjZGVmaW5lIFFVT1RFCSJcIiIKKyAKKysvKiBD aGFyYWN0ZXJzIGNvbnNpZGVyZWQgYXMgcXVvdGF0aW9ucy4gKi8KKysjZGVmaW5lIFFVT1RFUyAi J1wiIgorKworIC8qIHJldHVybiBuZXh0IHRva2VuIGluIGNvbmZpZ3VyYXRpb24gbGluZSAqLwor IHN0YXRpYyBjaGFyICoKKyBzdHJkZWxpbV9pbnRlcm5hbChjaGFyICoqcywgaW50IHNwbGl0X2Vx dWFscykKKyB7CistCWNoYXIgKm9sZDsKKysJY2hhciAqb2xkLCAqcCwgKnE7CisgCWludCB3c3Bh Y2UgPSAwOworIAorIAlpZiAoKnMgPT0gTlVMTCkKK0BAIC00NzYsNiArNDc5LDIxIEBACisgCisg CW9sZCA9ICpzOworIAorKwlpZiAoKHE9c3RyY2hyKFFVT1RFUywgKGludCkgKm9sZCkpICYmICpx KQorKwl7CisrCQkvKiBmaW5kIG5leHQgcXVvdGUgY2hhcmFjdGVyLCBwb2ludCBvbGQgdG8gc3Rh cnQgb2YgcXVvdGVkCisrCQkgKiBzdHJpbmcgKi8KKysJCWZvciAocCA9ICsrb2xkOyAqcCAmJiAq cCAhPSAqcTsgcCsrKQorKwkJCTsKKysKKysJCS8qIGZpbmQgc3RhcnQgb2YgbmV4dCB0b2tlbiAq LworKwkJKnMgPSAoKnApID8gcCArIHN0cnNwbihwICsgMSwgV0hJVEVTUEFDRSkgKyAxIDogTlVM TDsKKysKKysJCS8qIHRlcm1pbmF0ZSAnb2xkJyB0b2tlbiAqLworKwkJKnAgPSAnXDAnOworKwkJ cmV0dXJuIChvbGQpOworKwl9CisrCisgCSpzID0gc3RycGJyaygqcywKKyAJICAgIHNwbGl0X2Vx dWFscyA/IFdISVRFU1BBQ0UgUVVPVEUgIj0iIDogV0hJVEVTUEFDRSBRVU9URSk7CisgCWlmICgq cyA9PSBOVUxMKQorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvbW9uaXRvci5jIG9wZW5z c2gtMTAuNXAxL21vbml0b3IuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbW9uaXRvci5jCTIw MjYtMDktMjEgMDU6NDA6NTguMzMwNDAzNjQ4ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvbW9u aXRvci5jCTIwMjYtMDktMjEgMDU6NDE6MzAuODM2MjE0MjcxICswMjAwCitAQCAtMTQyLDYgKzE0 Miw5IEBACisgaW50IG1tX2Fuc3dlcl9nc3NfdXNlcm9rKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1 Y3Qgc3NoYnVmICopOworIGludCBtbV9hbnN3ZXJfZ3NzX2NoZWNrbWljKHN0cnVjdCBzc2ggKiwg aW50LCBzdHJ1Y3Qgc3NoYnVmICopOworIGludCBtbV9hbnN3ZXJfZ3NzX3NpZ24oc3RydWN0IHNz aCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisraW50IG1tX2Fuc3dlcl9nc3NfZXJyb3Ioc3Ry dWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisraW50IG1tX2Fuc3dlcl9nc3NfaW5k aWNhdGVfbWVjaHMoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisraW50IG1t X2Fuc3dlcl9nc3NfbG9jYWxuYW1lKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICop OworIGludCBtbV9hbnN3ZXJfZ3NzX3VwZGF0ZWNyZWRzKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1 Y3Qgc3NoYnVmICopOworICNlbmRpZgorIAorQEAgLTE5OSw3ICsyMDIsNyBAQAorICNlbmRpZgor ICAgICB7TU9OSVRPUl9SRVFfU0VUQ09NUEFULCBNT05fT05DRSwgbW1fYW5zd2VyX3NldGNvbXBh dH0sCisgICAgIHtNT05JVE9SX1JFUV9TSUdOLCBNT05fT05DRSwgbW1fYW5zd2VyX3NpZ259LAor LSAgICB7TU9OSVRPUl9SRVFfUFdOQU0sIE1PTl9PTkNFLCBtbV9hbnN3ZXJfcHduYW1hbGxvd30s CisrICAgIHtNT05JVE9SX1JFUV9QV05BTSwgTU9OX0FVVEgsIG1tX2Fuc3dlcl9wd25hbWFsbG93 fSwKKyAgICAge01PTklUT1JfUkVRX0FVVEhTRVJWLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGhz ZXJ2fSwKKyAjaWZkZWYgV0lUSF9TRUxJTlVYCisgICAgIHtNT05JVE9SX1JFUV9BVVRIUk9MRSwg TU9OX09OQ0UsIG1tX2Fuc3dlcl9hdXRocm9sZX0sCitAQCAtMjA3LDcgKzIxMCw3IEBACisgICAg IHtNT05JVE9SX1JFUV9BVVRIMl9SRUFEX0JBTk5FUiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9hdXRo Ml9yZWFkX2Jhbm5lcn0sCisgICAgIHtNT05JVE9SX1JFUV9BVVRIUEFTU1dPUkQsIE1PTl9BVVRI LCBtbV9hbnN3ZXJfYXV0aHBhc3N3b3JkfSwKKyAjaWZkZWYgVVNFX1BBTQorLSAgICB7TU9OSVRP Ul9SRVFfUEFNX1NUQVJULCBNT05fT05DRSwgbW1fYW5zd2VyX3BhbV9zdGFydH0sCisrICAgIHtN T05JVE9SX1JFUV9QQU1fU1RBUlQsIE1PTl9JU0FVVEgsIG1tX2Fuc3dlcl9wYW1fc3RhcnR9LAor ICAgICB7TU9OSVRPUl9SRVFfUEFNX0FDQ09VTlQsIDAsIG1tX2Fuc3dlcl9wYW1fYWNjb3VudH0s CisgICAgIHtNT05JVE9SX1JFUV9QQU1fSU5JVF9DVFgsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfcGFt X2luaXRfY3R4fSwKKyAgICAge01PTklUT1JfUkVRX1BBTV9RVUVSWSwgMCwgbW1fYW5zd2VyX3Bh bV9xdWVyeX0sCitAQCAtMjMxLDggKzIzNCwxMSBAQAorICAgICB7TU9OSVRPUl9SRVFfR1NTU0VU VVAsIE1PTl9JU0FVVEgsIG1tX2Fuc3dlcl9nc3Nfc2V0dXBfY3R4fSwKKyAgICAge01PTklUT1Jf UkVRX0dTU1NURVAsIDAsIG1tX2Fuc3dlcl9nc3NfYWNjZXB0X2N0eH0sCisgICAgIHtNT05JVE9S X1JFUV9HU1NVU0VST0ssIE1PTl9PTkNFfE1PTl9BVVRIREVDSURFLCBtbV9hbnN3ZXJfZ3NzX3Vz ZXJva30sCistICAgIHtNT05JVE9SX1JFUV9HU1NDSEVDS01JQywgTU9OX09OQ0UsIG1tX2Fuc3dl cl9nc3NfY2hlY2ttaWN9LAorKyAgICB7TU9OSVRPUl9SRVFfR1NTQ0hFQ0tNSUMsIE1PTl9JU0FV VEgsIG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWN9LAorICAgICB7TU9OSVRPUl9SRVFfR1NTU0lHTiwg TU9OX09OQ0UsIG1tX2Fuc3dlcl9nc3Nfc2lnbn0sCisrICAgIHtNT05JVE9SX1JFUV9HU1NFUlIs IE1PTl9JU0FVVEggfCBNT05fT05DRSwgbW1fYW5zd2VyX2dzc19lcnJvcn0sCisrICAgIHtNT05J VE9SX1JFUV9HU1NNRUNIUywgTU9OX0lTQVVUSCwgbW1fYW5zd2VyX2dzc19pbmRpY2F0ZV9tZWNo c30sCisrICAgIHtNT05JVE9SX1JFUV9HU1NMT0NBTE5BTUUsIE1PTl9JU0FVVEgsIG1tX2Fuc3dl cl9nc3NfbG9jYWxuYW1lfSwKKyAjZW5kaWYKKyAgICAgezAsIDAsIE5VTEx9CisgfTsKK0BAIC0y NDIsNiArMjQ4LDggQEAKKyAgICAge01PTklUT1JfUkVRX0dTU1NFVFVQLCAwLCBtbV9hbnN3ZXJf Z3NzX3NldHVwX2N0eH0sCisgICAgIHtNT05JVE9SX1JFUV9HU1NTVEVQLCAwLCBtbV9hbnN3ZXJf Z3NzX2FjY2VwdF9jdHh9LAorICAgICB7TU9OSVRPUl9SRVFfR1NTU0lHTiwgMCwgbW1fYW5zd2Vy X2dzc19zaWdufSwKKysgICAge01PTklUT1JfUkVRX0dTU0VSUiwgMCwgbW1fYW5zd2VyX2dzc19l cnJvcn0sCisrICAgIHtNT05JVE9SX1JFUV9HU1NNRUNIUywgMCwgbW1fYW5zd2VyX2dzc19pbmRp Y2F0ZV9tZWNoc30sCisgICAgIHtNT05JVE9SX1JFUV9HU1NVUENSRURTLCAwLCBtbV9hbnN3ZXJf Z3NzX3VwZGF0ZWNyZWRzfSwKKyAjZW5kaWYKKyAgICAge01PTklUT1JfUkVRX1NUQVRFLCBNT05f T05DRSwgbW1fYW5zd2VyX3N0YXRlfSwKK0BAIC0zMjMsNiArMzMxLDggQEAKKyAjaWZkZWYgR1NT QVBJCisgCS8qIGFuZCBmb3IgdGhlIEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8KKyAJbW9uaXRvcl9w ZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NTRVRVUCwgMSk7CisrCW1vbml0b3Jf cGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTRVJSLCAxKTsKKysJbW9uaXRvcl9w ZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NNRUNIUywgMSk7CisgI2VuZGlmCisg CisgCS8qIFRoZSBmaXJzdCBmZXcgcmVxdWVzdHMgZG8gbm90IHJlcXVpcmUgYXN5bmNocm9ub3Vz IGFjY2VzcyAqLworQEAgLTQ3NCw2ICs0ODQsOCBAQAorICNpZmRlZiBHU1NBUEkKKyAJLyogYW5k IGZvciB0aGUgR1NTQVBJIGtleSBleGNoYW5nZSAqLworIAltb25pdG9yX3Blcm1pdChtb25fZGlz cGF0Y2gsIE1PTklUT1JfUkVRX0dTU1NFVFVQLCAxKTsKKysJbW9uaXRvcl9wZXJtaXQobW9uX2Rp c3BhdGNoLCBNT05JVE9SX1JFUV9HU1NFUlIsIDEpOworKwltb25pdG9yX3Blcm1pdChtb25fZGlz cGF0Y2gsIE1PTklUT1JfUkVRX0dTU01FQ0hTLCAxKTsKKyAjZW5kaWYKKyAKKyAJaWYgKGF1dGhf b3B0cy0+cGVybWl0X3B0eV9mbGFnKSB7CitAQCAtOTIyLDE0ICs5MzQsMTcgQEAKKyAJaWYgKCFj b21wYXRfc2V0KQorIAkJZmF0YWxfZigic3RhdGUgZXJyb3I6IHNldGNvbXBhdCBuZXZlciBjYWxs ZWQiKTsKKyAKKy0JaWYgKGF1dGhjdHh0LT5hdHRlbXB0KysgIT0gMCkKKy0JCWZhdGFsX2YoIm11 bHRpcGxlIGF0dGVtcHRzIGZvciBnZXRwd25hbSIpOworLQorKwlpZiAoYXV0aGN0eHQtPnVzZXIp IGZyZWUoYXV0aGN0eHQtPnVzZXIpOworIAlpZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcobSwg JmF1dGhjdHh0LT51c2VyLCBOVUxMKSkgIT0gMCkKKyAJCWZhdGFsX2ZyKHIsICJwYXJzZSIpOwor IAorIAlwd2VudCA9IGdldHB3bmFtYWxsb3coc3NoLCBhdXRoY3R4dC0+dXNlcik7CisgCisrI2lm ZGVmIFVTRV9QQU0KKysJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSkKKysJCXNl dHByb2N0aXRsZSgiJXMgW3ByaXZdIiwgcHdlbnQgPyAiW3BhbV0iIDogInVua25vd24iKTsKKysJ ZWxzZQorKyNlbmRpZgorIAlzZXRwcm9jdGl0bGUoIiVzIFtwcml2XSIsIHB3ZW50ID8gYXV0aGN0 eHQtPnVzZXIgOiAidW5rbm93biIpOworIAorIAlzc2hidWZfcmVzZXQobSk7CitAQCAtMjI4Myw2 ICsyMjk4LDc5IEBACisgfQorIAorIGludAorK21tX2Fuc3dlcl9nc3NfZXJyb3Ioc3RydWN0IHNz aCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVmICptKQorK3sKKysJT01fdWludDMyIG1h am9yLCBtaW5vcjsKKysJY2hhciAqbXNnOworKwlpbnQgcjsKKysKKysJbXNnPXNzaF9nc3NhcGlf bGFzdF9lcnJvcihnc3Njb250ZXh0LCAmbWFqb3IsICZtaW5vcik7CisrCXNzaGJ1Zl9yZXNldCht KTsKKysJaWYgKChyID0gc3NoYnVmX3B1dF91MzIobSwgbWFqb3IpKSAhPSAwIHx8CisrCSAgICAo ciA9IHNzaGJ1Zl9wdXRfdTMyKG0sIG1pbm9yKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hidWZf cHV0X2NzdHJpbmcobSwgbXNnKSkgIT0gMCkKKysJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3Ii KTsKKysKKysJbW1fcmVxdWVzdF9zZW5kKHNvY2tldCwgTU9OSVRPUl9BTlNfR1NTRVJSLCBtKTsK KysKKysJZnJlZShtc2cpOworKworKwlyZXR1cm4oMCk7CisrfQorKworK2ludAorK21tX2Fuc3dl cl9nc3NfaW5kaWNhdGVfbWVjaHMoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qg c3NoYnVmICptKQorK3sKKysJT01fdWludDMyIG1ham9yLCBtaW5vcjsKKysJZ3NzX09JRF9zZXQg bWVjaF9zZXQ7CisrCXNpemVfdCBpOworKwlpbnQgcjsKKysKKysJbWFqb3I9Z3NzX2luZGljYXRl X21lY2hzKCZtaW5vciwgJm1lY2hfc2V0KTsKKysKKysJc3NoYnVmX3Jlc2V0KG0pOworKwlpZiAo KHIgPSBzc2hidWZfcHV0X3UzMihtLCBtYWpvcikpICE9IDAgfHwKKysJICAgIChyID0gc3NoYnVm X3B1dF91MzIobSwgbWVjaF9zZXQtPmNvdW50KSkgIT0gMCkKKysJCWZhdGFsX2ZyKHIsICJidWZm ZXIgZXJyb3IiKTsKKysJZm9yIChpID0gMDsgaSA8IG1lY2hfc2V0LT5jb3VudDsgaSsrKSB7Cisr CQlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZyhtLCBtZWNoX3NldC0+ZWxlbWVudHNbaV0uZWxl bWVudHMsCisrCQkgICAgbWVjaF9zZXQtPmVsZW1lbnRzW2ldLmxlbmd0aCkpICE9IDApCisrCQkJ ZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOworKwl9CisrCisrCWdzc19yZWxlYXNlX29pZF9z ZXQoJm1pbm9yLCAmbWVjaF9zZXQpOworKworKwltbV9yZXF1ZXN0X3NlbmQoc29ja2V0LCBNT05J VE9SX0FOU19HU1NNRUNIUywgbSk7CisrCisrCXJldHVybigwKTsKKyt9CisrCisraW50CisrbW1f YW5zd2VyX2dzc19sb2NhbG5hbWUoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qg c3NoYnVmICptKQorK3sKKysJY2hhciAqbmFtZTsKKysJaW50IHI7CisrCisrCXNzaF9nc3NhcGlf bG9jYWxuYW1lKCZuYW1lKTsKKysKKysJc3NoYnVmX3Jlc2V0KG0pOworKwlpZiAobmFtZSkgewor KwkJaWYgKChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sIG5hbWUpKSAhPSAwKQorKwkJCWZhdGFs X2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKKysJCWRlYnVnM19mKCJzZW5kaW5nIHJlc3VsdCAlcyIs IG5hbWUpOworKwkJZnJlZShuYW1lKTsKKysJfSBlbHNlIHsKKysJCWlmICgociA9IHNzaGJ1Zl9w dXRfY3N0cmluZyhtLCAiIikpICE9IDApCisrCQkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIp OworKwkJZGVidWczX2YoInNlbmRpbmcgcmVzdWx0IFwiXCIiKTsKKysJfQorKworKwltbV9yZXF1 ZXN0X3NlbmQoc29ja2V0LCBNT05JVE9SX0FOU19HU1NMT0NBTE5BTUUsIG0pOworKworKwlyZXR1 cm4oMCk7CisrfQorKworK2ludAorIG1tX2Fuc3dlcl9nc3Nfc2lnbihzdHJ1Y3Qgc3NoICpzc2gs IGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCisgeworIAlnc3NfYnVmZmVyX2Rlc2MgZGF0 YTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL21vbml0b3IuaCBvcGVuc3NoLTEwLjVw MS9tb25pdG9yLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL21vbml0b3IuaAkyMDI2LTA5LTIx IDA1OjQwOjU4LjE1OTYyMzYyNSArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL21vbml0b3IuaAky MDI2LTA5LTIxIDA1OjQxOjMwLjgzNjcwNjAyMiArMDIwMAorQEAgLTc3LDYgKzc3LDEwIEBACisg CisgCU1PTklUT1JfUkVRX0dTU1NJR04gPSAxNTAsIE1PTklUT1JfQU5TX0dTU1NJR04gPSAxNTEs CisgCU1PTklUT1JfUkVRX0dTU1VQQ1JFRFMgPSAxNTIsIE1PTklUT1JfQU5TX0dTU1VQQ1JFRFMg PSAxNTMsCisrCisrCU1PTklUT1JfUkVRX0dTU01FQ0hTID0gMjAwLCBNT05JVE9SX0FOU19HU1NN RUNIUyA9IDIwMSwKKysJTU9OSVRPUl9SRVFfR1NTTE9DQUxOQU1FID0gMjAyLCBNT05JVE9SX0FO U19HU1NMT0NBTE5BTUUgPSAyMDMsCisrCU1PTklUT1JfUkVRX0dTU0VSUiA9IDIwNCwgTU9OSVRP Ul9BTlNfR1NTRVJSID0gMjA1CisgfTsKKyAKKyBzdHJ1Y3Qgc3NoOworZGlmZiAtTnVyIG9wZW5z c2gtMTAuNXAxLm9yaWcvbW9uaXRvcl93cmFwLmMgb3BlbnNzaC0xMC41cDEvbW9uaXRvcl93cmFw LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL21vbml0b3Jfd3JhcC5jCTIwMjYtMDktMjEgMDU6 NDA6NTguMTc2MzA4NDExICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvbW9uaXRvcl93cmFwLmMJ MjAyNi0wOS0yMSAwNTo0MTozMC44MzY4OTYwMjYgKzAyMDAKK0BAIC0xMTc2LDYgKzExNzYsOTQg QEAKKyAJcmV0dXJuIChhdXRoZW50aWNhdGVkKTsKKyB9CisgCisrY2hhciAqCisrbW1fc3NoX2dz c2FwaV9sYXN0X2Vycm9yKEdzc2N0eHQgKmN0eCwgT01fdWludDMyICptYWpvciwgT01fdWludDMy ICptaW5vcikKKyt7CisrCXN0cnVjdCBzc2hidWYgKm0gPSBOVUxMOworKwlPTV91aW50MzIgbWFq LG1pbjsKKysJY2hhciAqZXJyc3RyOworKwlpbnQgcjsKKysKKysJaWYgKChtID0gc3NoYnVmX25l dygpKSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKKysKKysJbW1f cmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9SRVFfR1NTRVJSLCBtKTsK KysJbW1fcmVxdWVzdF9yZWNlaXZlX2V4cGVjdChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1Jf QU5TX0dTU0VSUiwgbSk7CisrCisrCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZtYWopKSAh PSAwIHx8CisrCSAgICAociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZtaW4pKSAhPSAwKQorKwkJZmF0 YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOworKworKwlpZiAobWFqb3IpICptYWpvcj1tYWo7Cisr CWlmIChtaW5vcikgKm1pbm9yPW1pbjsKKysKKysJaWYgKChyID0gc3NoYnVmX2dldF9jc3RyaW5n KG0sICZlcnJzdHIsIE5VTEwpKSAhPSAwKQorKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIp OworKworKwlzc2hidWZfZnJlZShtKTsKKysKKysJcmV0dXJuKGVycnN0cik7CisrfQorKworK09N X3VpbnQzMgorK21tX2dzc19pbmRpY2F0ZV9tZWNocyhPTV91aW50MzIgKm1pbm9yX3N0YXR1cywg Z3NzX09JRF9zZXQgKm1lY2hfc2V0KQorK3sKKysJc3RydWN0IHNzaGJ1ZiAqbSA9IE5VTEw7Cisr CU9NX3VpbnQzMiBtYWpvcixtaW5vcjsKKysJaW50IGNvdW50OworKwlnc3NfT0lEX2Rlc2Mgb2lk OworKwlzaXplX3QgbGVuZ3RoOworKwlpbnQgcjsKKysKKysJaWYgKChtID0gc3NoYnVmX25ldygp KSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKKysKKysJbW1fcmVx dWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9SRVFfR1NTTUVDSFMsIG0pOwor KwltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9B TlNfR1NTTUVDSFMsIG0pOworKwlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihtLCAmbWFqb3IpKSAh PSAwIHx8CisrCSAgICAociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZjb3VudCkpICE9IDApCisrCQlm YXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCWdzc19jcmVhdGVfZW1wdHlfb2lkX3Nl dCgmbWlub3IsIG1lY2hfc2V0KTsKKysJd2hpbGUoY291bnQtLT4wKSB7CisrCSAgICBpZiAoKHIg PSBzc2hidWZfZ2V0X3N0cmluZyhtLCAodV9jaGFyICoqKSZvaWQuZWxlbWVudHMsICZsZW5ndGgp KSAhPSAwKQorKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOworKwkgICAgb2lkLmxlbmd0 aCA9IGxlbmd0aDsKKysJICAgIGdzc19hZGRfb2lkX3NldF9tZW1iZXIoJm1pbm9yLCAmb2lkLCBt ZWNoX3NldCk7CisrCX0KKysKKysJc3NoYnVmX2ZyZWUobSk7CisrCisrCXJldHVybihtYWpvcik7 CisrfQorKworK2ludAorK21tX3NzaF9nc3NhcGlfbG9jYWxuYW1lKGNoYXIgKipsbmFtZSkKKyt7 CisrCXN0cnVjdCBzc2hidWYgKm0gPSBOVUxMOworKwlpbnQgcjsKKysKKysJaWYgKChtID0gc3No YnVmX25ldygpKSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKKysJ bW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9SRVFfR1NTTE9DQUxO QU1FLCBtKTsKKysKKysJZGVidWczX2YoIndhaXRpbmcgZm9yIE1PTklUT1JfQU5TX0dTU0xPQ0FM TkFNRSIpOworKwltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5tX3JlY3ZmZCwg TU9OSVRPUl9BTlNfR1NTTE9DQUxOQU1FLAorKwkgICAgbSk7CisrCisrCWlmICgociA9IHNzaGJ1 Zl9nZXRfY3N0cmluZyhtLCBsbmFtZSwgTlVMTCkpICE9IDApCisrCQlmYXRhbF9mcihyLCAiYnVm ZmVyIGVycm9yIik7CisrCisrCXNzaGJ1Zl9mcmVlKG0pOworKwlpZiAoKCpsbmFtZSA9PSBOVUxM KSB8fCAoKmxuYW1lWzBdID09ICdcMCcpKSB7CisrCQlkZWJ1ZzNfZigiZ3NzYXBpIGlkZW50aXR5 IG1hcHBpbmcgZmFpbGVkIik7CisrCX0gZWxzZSB7CisrCQlkZWJ1ZzNfZigiZ3NzYXBpIGlkZW50 aXR5IG1hcHBlZCB0byAlcyIsICpsbmFtZSk7CisrCX0KKysKKysJcmV0dXJuKDApOworK30KKysK KyBPTV91aW50MzIKKyBtbV9zc2hfZ3NzYXBpX3NpZ24oR3NzY3R4dCAqY3R4LCBnc3NfYnVmZmVy X2Rlc2MgKmRhdGEsIGdzc19idWZmZXJfZGVzYyAqaGFzaCkKKyB7CitkaWZmIC1OdXIgb3BlbnNz aC0xMC41cDEub3JpZy9tb25pdG9yX3dyYXAuaCBvcGVuc3NoLTEwLjVwMS9tb25pdG9yX3dyYXAu aAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbW9uaXRvcl93cmFwLmgJMjAyNi0wOS0yMSAwNTo0 MDo1OC4xNzY1NzY5OTQgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9tb25pdG9yX3dyYXAuaAky MDI2LTA5LTIxIDA1OjQxOjMwLjgzNzY1ODQ2NyArMDIwMAorQEAgLTc3LDYgKzc3LDEwIEBACisg aW50IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGNoYXIgKnVzZXIsIHN0cnVjdCBwYXNzd2QgKiwgaW50 IGtleCk7CisgT01fdWludDMyIG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoR3NzY3R4dCAqLCBnc3Nf YnVmZmVyX3QsIGdzc19idWZmZXJfdCk7CisgT01fdWludDMyIG1tX3NzaF9nc3NhcGlfc2lnbihH c3NjdHh0ICosIGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90KTsKKytpbnQgbW1fc3NoX2dzc2Fw aV9sb2NhbG5hbWUoY2hhciAqKnVzZXIpOworK09NX3VpbnQzMiBtbV9nc3NfaW5kaWNhdGVfbWVj aHMoT01fdWludDMyICptaW5vcl9zdGF0dXMsCisrICAgIGdzc19PSURfc2V0ICptZWNoX3NldCk7 CisrY2hhciAqbW1fc3NoX2dzc2FwaV9sYXN0X2Vycm9yKEdzc2N0eHQgKmN0eHQsIE9NX3VpbnQz MiAqbWFqLCBPTV91aW50MzIgKm1pbik7CisgaW50IG1tX3NzaF9nc3NhcGlfdXBkYXRlX2NyZWRz KHNzaF9nc3NhcGlfY2NhY2hlICopOworICNlbmRpZgorIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAu NXAxLm9yaWcvcmVhZGNvbmYuYyBvcGVuc3NoLTEwLjVwMS9yZWFkY29uZi5jCistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9yZWFkY29uZi5jCTIwMjYtMDktMjEgMDU6NDA6NTguMjAwOTcxMzMzICsw MjAwCisrKysgb3BlbnNzaC0xMC41cDEvcmVhZGNvbmYuYwkyMDI2LTA5LTIxIDA1OjQxOjMwLjgz ODI5NjgyNCArMDIwMAorQEAgLTI5NDMsMTEgKzI5NDMsMTEgQEAKKyAJaWYgKG9wdGlvbnMtPnB1 YmtleV9hdXRoZW50aWNhdGlvbiA9PSAtMSkKKyAJCW9wdGlvbnMtPnB1YmtleV9hdXRoZW50aWNh dGlvbiA9IFNTSF9QVUJLRVlfQVVUSF9BTEw7CisgCWlmIChvcHRpb25zLT5nc3NfYXV0aGVudGlj YXRpb24gPT0gLTEpCistCQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAwOworKwkJb3B0 aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID0gMTsKKyAJaWYgKG9wdGlvbnMtPmdzc19rZXlleCA9 PSAtMSkKKy0JCW9wdGlvbnMtPmdzc19rZXlleCA9IDA7CisrCQlvcHRpb25zLT5nc3Nfa2V5ZXgg PSAxOworIAlpZiAob3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID09IC0xKQorLQkJb3B0aW9ucy0+ Z3NzX2RlbGVnX2NyZWRzID0gMDsKKysJCW9wdGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9IDE7Cisg CWlmIChvcHRpb25zLT5nc3NfdHJ1c3RfZG5zID09IC0xKQorIAkJb3B0aW9ucy0+Z3NzX3RydXN0 X2RucyA9IDA7CisgCWlmIChvcHRpb25zLT5nc3NfcmVuZXdhbF9yZWtleSA9PSAtMSkKK2RpZmYg LU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3JlYWRjb25mLmggb3BlbnNzaC0xMC41cDEvcmVhZGNv bmYuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvcmVhZGNvbmYuaAkyMDI2LTA5LTIxIDA1OjQw OjU3Ljg3MDQxNDY2MiArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3JlYWRjb25mLmgJMjAyNi0w OS0yMSAwNTo0MTozMC44Mzk3NDU3MDUgKzAyMDAKK0BAIC04MCw2ICs4MCw4IEBACisgCWNoYXIg ICAqaG9zdF9rZXlfYWxpYXM7CS8qIGhvc3RuYW1lIGFsaWFzIGZvciAuc3NoL2tub3duX2hvc3Rz ICovCisgCWNoYXIgICAqcHJveHlfY29tbWFuZDsJLyogUHJveHkgY29tbWFuZCBmb3IgY29ubmVj dGluZyB0aGUgaG9zdC4gKi8KKyAJY2hhciAgICp1c2VyOwkJLyogVXNlciB0byBsb2cgaW4gYXMu ICovCisrCWludCAgICAgaW1wbGljaXQ7CS8qIExvZ2luIHVzZXIgd2FzIG5vdCBzcGVjaWZpZWQu CisrCQkJCSAgIFNlcnZlciBtYXkgY2hvb3NlIGJhc2VkIG9uIGF1dGhjdHh0LiAqLworIAlpbnQg ICAgIGVzY2FwZV9jaGFyOwkvKiBFc2NhcGUgY2hhcmFjdGVyOyAtMiA9IG5vbmUgKi8KKyAKKyAJ dV9pbnQJbnVtX3N5c3RlbV9ob3N0ZmlsZXM7CS8qIFBhdGhzIGZvciAvZXRjL3NzaC9zc2hfa25v d25faG9zdHMgKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NlcnZjb25mLmMgb3Bl bnNzaC0xMC41cDEvc2VydmNvbmYuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2VydmNvbmYu YwkyMDI2LTA5LTIxIDA1OjQwOjU4LjM4ODM0MzA5MCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAx L3NlcnZjb25mLmMJMjAyNi0wOS0yMSAwNjo0MToyMi41MzIzOTU4OTQgKzAyMDAKK0BAIC0xMjAx LDYgKzEyMDEsOSBAQAorIAkJaWYgKCphY3RpdmVwICYmICpjaGFycHRyID09IE5VTEwpCisgCQkJ KmNoYXJwdHIgPSB4c3RyZHVwKGFyZyk7CisgCQlicmVhazsKKysJY2FzZSBzUGVybWl0UEFNVXNl ckNoYW5nZToKKysJCWludHB0ciA9ICZvcHRpb25zLT5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlOwor KwkJZ290byBwYXJzZV9mbGFnOworICNlbmRpZgorIAorIAkvKiBTdGFuZGFyZCBPcHRpb25zICov CitAQCAtMTQ0MiwxOCArMTQ0NSwyOSBAQAorIAljYXNlIHNLZXJiZXJvc1RpY2tldENsZWFudXA6 CisgCQlpbnRwdHIgPSAmb3B0aW9ucy0+a2VyYmVyb3NfdGlja2V0X2NsZWFudXA7CisgCQlnb3Rv IHBhcnNlX2ZsYWc7CisrCisgI2lmZGVmIFVTRV9BRlMKKyAJY2FzZSBzS2VyYmVyb3NHZXRBRlNU b2tlbjoKKyAJCWludHB0ciA9ICZvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuOworIAkJ Z290byBwYXJzZV9mbGFnOworICNlbmRpZiAvKiBVU0VfQUZTICovCistI2VuZGlmIC8qIEtSQjUg Ki8KKyAKKyAJY2FzZSBzS2VyYmVyb3NVbmlxdWVDQ2FjaGU6CisgCQlpbnRwdHIgPSAmb3B0aW9u cy0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZTsKKyAJCWdvdG8gcGFyc2VfZmxhZzsKKyAKKysJY2Fz ZSBzS2VyYmVyb3NVc2VLdXNlcm9rOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPnVzZV9rdXNlcm9r OworKwkJZ290byBwYXJzZV9mbGFnOworKyNlbmRpZiAvKiBLUkI1ICovCisrCisgI2lmZGVmIEdT U0FQSQorKyNpZmRlZiBHU0kKKysJY2FzZSBzR1NJQWxsb3dMaW1pdGVkUHJveHk6CisrCQlpbnRw dHIgPSAmb3B0aW9ucy0+Z3NpX2FsbG93X2xpbWl0ZWRfcHJveHk7CisrCQlnb3RvIHBhcnNlX2Zs YWc7CisrI2VuZGlmCisrCisgCWNhc2Ugc0dTU0FQSUF1dGhlbnRpY2F0aW9uOgorIAkJaW50cHRy ID0gJm9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbjsKKyAJCWdvdG8gcGFyc2VfZmxhZzsKK0BA IC0xNDcwLDYgKzE0ODQsMTAgQEAKKyAJCWludHB0ciA9ICZvcHRpb25zLT5nc3NfZGVsZWdfY3Jl ZHM7CisgCQlnb3RvIHBhcnNlX2ZsYWc7CisgCisrCWNhc2Ugc0dTU0FQSUNyZWRlbnRpYWxzUGF0 aDoKKysJCWNoYXJwdHIgPSAmb3B0aW9ucy0+Z3NzX2NyZWRzX3BhdGg7CisrCQlnb3RvIHBhcnNl X2ZpbGVuYW1lOworKworIAljYXNlIHNHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrOgorIAkJaW50 cHRyID0gJm9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3I7CisgCQlnb3RvIHBhcnNlX2ZsYWc7 CitAQCAtMjI5MywxMCArMjMxMSw2IEBACisgCQl9CisgCQlicmVhazsKKyAKKy0JY2FzZSBzS2Vy YmVyb3NVc2VLdXNlcm9rOgorLQkJaW50cHRyID0gJm9wdGlvbnMtPnVzZV9rdXNlcm9rOworLQkJ Z290byBwYXJzZV9mbGFnOworLQorIAljYXNlIHNHU1NBUElFbmFibGVrNXVzZXJzOgorIAkJaW50 cHRyID0gJm9wdGlvbnMtPmVuYWJsZV9rNXVzZXJzOworIAkJZ290byBwYXJzZV9mbGFnOworQEAg LTQyODcsNiArNDMwMSw3IEBACisgI2lmZGVmIFVTRV9QQU0KKyAJZHVtcF9jZmdfZm10aW50KHNV c2VQQU0sIG8tPnVzZV9wYW0pOworIAlkdW1wX2NmZ19zdHJpbmcoc1BBTVNlcnZpY2VOYW1lLCBv LT5wYW1fc2VydmljZV9uYW1lKTsKKysJZHVtcF9jZmdfZm10aW50KHNQZXJtaXRQQU1Vc2VyQ2hh bmdlLCBvLT5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKTsKKyAjZW5kaWYKKyAJZHVtcF9jZmdfaW50 KHNMb2dpbkdyYWNlVGltZSwgby0+bG9naW5fZ3JhY2VfdGltZSk7CisgCWR1bXBfY2ZnX2ludChz WDExRGlzcGxheU9mZnNldCwgby0+eDExX2Rpc3BsYXlfb2Zmc2V0KTsKK0BAIC00MzE5LDkgKzQz MzQsMTMgQEAKKyAJZHVtcF9jZmdfZm10aW50KHNHU1NBUElFbmFibGVrNXVzZXJzLCBvLT5lbmFi bGVfazV1c2Vycyk7CisgI2VuZGlmCisgI2lmZGVmIEdTU0FQSQorKyNpZmRlZiBHU0kKKysJZHVt cF9jZmdfZm10aW50KHNHU0lBbGxvd0xpbWl0ZWRQcm94eSwgby0+Z3NpX2FsbG93X2xpbWl0ZWRf cHJveHkpOworKyNlbmRpZgorIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSUF1dGhlbnRpY2F0aW9u LCBvLT5nc3NfYXV0aGVudGljYXRpb24pOworIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSUNsZWFu dXBDcmVkZW50aWFscywgby0+Z3NzX2NsZWFudXBfY3JlZHMpOworIAlkdW1wX2NmZ19mbXRpbnQo c0dTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMsIG8tPmdzc19kZWxlZ19jcmVkcyk7CisrCWR1bXBf Y2ZnX3N0cmluZyhzR1NTQVBJQ3JlZGVudGlhbHNQYXRoLCBvLT5nc3NfY3JlZHNfcGF0aCk7Cisg CWR1bXBfY2ZnX2ZtdGludChzR1NTQVBJS2V5RXhjaGFuZ2UsIG8tPmdzc19rZXlleCk7CisgCWR1 bXBfY2ZnX2ZtdGludChzR1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjaywgby0+Z3NzX3N0cmljdF9h Y2NlcHRvcik7CisgCWR1bXBfY2ZnX2ZtdGludChzR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVr ZXksIG8tPmdzc19zdG9yZV9yZWtleSk7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9z ZXJ2Y29uZi5oIG9wZW5zc2gtMTAuNXAxL3NlcnZjb25mLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5v cmlnL3NlcnZjb25mLmgJMjAyNi0wOS0yMSAwNTo0MDo1OC4zODg1NzA1NzMgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjVwMS9zZXJ2Y29uZi5oCTIwMjYtMDktMjEgMDY6MzM6MDQuNzUyMTU2MDIzICsw MjAwCitAQCAtMjc1LDExICsyNzUsMTMgQEAKKyAjaWZkZWYgVVNFX1BBTQorICNkZWZpbmUgU1NI RF9DT05GSUdfRU5UUklFU19QQU0gXAorIFNTSENPTkZfSU5URkxBRyh1c2VfcGFtLCBVc2VQQU0s IFNTSENGR19HTE9CQUwsIDAsIFNTSENGR19DT1BZX05PTkUpIFwKKy1TU0hDT05GX1NUUklORyhw YW1fc2VydmljZV9uYW1lLCBQQU1TZXJ2aWNlTmFtZSwgU1NIQ0ZHX0FMTCwgU1NIQ0ZHX0NPUFlf Tk9ORSkKKytTU0hDT05GX1NUUklORyhwYW1fc2VydmljZV9uYW1lLCBQQU1TZXJ2aWNlTmFtZSwg U1NIQ0ZHX0FMTCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorK1NTSENPTkZfSU5URkxBRyhwZXJtaXRf cGFtX3VzZXJfY2hhbmdlLCBQZXJtaXRQQU1Vc2VyQ2hhbmdlLCBTU0hDRkdfR0xPQkFMLCAwLCBT U0hDRkdfQ09QWV9OT05FKQorICNlbHNlCisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTX1BB TSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQodXNlX3BhbSwgVXNlUEFNLCBTU0hDRkdfR0xP QkFMKSBcCistU1NIQ09ORl9VTlNVUFBPUlRFRF9TVFJJTkcocGFtX3NlcnZpY2VfbmFtZSwgUEFN U2VydmljZU5hbWUsIFNTSENGR19BTEwpCisrU1NIQ09ORl9VTlNVUFBPUlRFRF9TVFJJTkcocGFt X3NlcnZpY2VfbmFtZSwgUEFNU2VydmljZU5hbWUsIFNTSENGR19BTEwpIFwKKytTU0hDT05GX1VO U1VQUE9SVEVEX0lOVChwZXJtaXRfcGFtX3VzZXJfY2hhbmdlLCBQZXJtaXRQQU1Vc2VyQ2hhbmdl LCBTU0hDRkdfR0xPQkFMKQorICNlbmRpZgorIAorICNpZmRlZiBESVNBQkxFX0xBU1RMT0cKK0BA IC0zMTgsMTQgKzMyMCwyMyBAQAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGtlcmJlcm9zX2dl dF9hZnNfdG9rZW4sIEtlcmJlcm9zR2V0QUZTVG9rZW4sIFNTSENGR19HTE9CQUwpCisgI2VuZGlm IC8qIEtSQjUgKi8KKyAKKysjaWZkZWYgR1NJCisrI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVT X0dTSSBcCisrU1NIQ09ORl9JTlRGTEFHKGdzaV9hbGxvd19saW1pdGVkX3Byb3h5LCBHU0lBbGxv d0xpbWl0ZWRQcm94eSwgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORSkKKysjZWxzZQor KyNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFU19HU0kgXAorK1NTSENPTkZfVU5TVVBQT1JURURf SU5UKGdzaV9hbGxvd19saW1pdGVkX3Byb3h5LCBHU0lBbGxvd0xpbWl0ZWRQcm94eSwgU1NIQ0ZH X0FMTCkKKysjZW5kaWYKKysKKyAjaWZkZWYgR1NTQVBJCisgI2RlZmluZSBTU0hEX0NPTkZJR19F TlRSSUVTX0dTUyBcCistU1NIQ09ORl9JTlRGTEFHKGdzc19hdXRoZW50aWNhdGlvbiwgR1NTQVBJ QXV0aGVudGljYXRpb24sIFNTSENGR19BTEwsIDAsIFNTSENGR19DT1BZX01BVENIKSBcCisrU1NI Q09ORl9JTlRGTEFHKGdzc19hdXRoZW50aWNhdGlvbiwgR1NTQVBJQXV0aGVudGljYXRpb24sIFNT SENGR19BTEwsIDEsIFNTSENGR19DT1BZX01BVENIKSBcCisgU1NIQ09ORl9JTlRGTEFHKGdzc19j bGVhbnVwX2NyZWRzLCBHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQUwsIDEs IFNTSENGR19DT1BZX05PTkUpIFwKKyBTU0hDT05GX0FMSUFTKEdTU0FQSUNsZWFudXBDcmVkcywg R1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzLCBTU0hDRkdfR0xPQkFMKSBcCistU1NIQ09ORl9JTlRG TEFHKGdzc19kZWxlZ19jcmVkcywgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscywgU1NIQ0ZHX0dM T0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorK1NTSENPTkZfSU5URkxBRyhnc3NfZGVsZWdf Y3JlZHMsIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQUwsIDEsIFNTSENG R19DT1BZX01BVENIKSBcCisrU1NIQ09ORl9TVFJJTkcoZ3NzX2NyZWRzX3BhdGgsIEdTU0FQSUNy ZWRlbnRpYWxzUGF0aCwgU1NIQ0ZHX0dMT0JBTCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorIFNTSENP TkZfSU5URkxBRyhnc3Nfc3RyaWN0X2FjY2VwdG9yLCBHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNr LCBTU0hDRkdfR0xPQkFMLCAxLCBTU0hDRkdfQ09QWV9OT05FKSBcCistU1NIQ09ORl9JTlRGTEFH KGdzc19rZXlleCwgR1NTQVBJS2V5RXhjaGFuZ2UsIFNTSENGR19HTE9CQUwsIDAsIFNTSENGR19D T1BZX05PTkUpIFwKKytTU0hDT05GX0lOVEZMQUcoZ3NzX2tleWV4LCBHU1NBUElLZXlFeGNoYW5n ZSwgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorIFNTSENPTkZfSU5URkxB Ryhnc3Nfc3RvcmVfcmVrZXksIEdTU0FQSVN0b3JlQ3JlZGVudGlhbHNPblJla2V5LCBTU0hDRkdf R0xPQkFMLCAwLCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NIQ09ORl9TVFJJTkcoZ3NzX2tleF9h bGdvcml0aG1zLCBHU1NBUElLZXhBbGdvcml0aG1zLCBTU0hDRkdfR0xPQkFMLCBTU0hDRkdfQ09Q WV9OT05FKSBcCisgU1NIQ09ORl9JTlRGTEFHKGVuYWJsZV9rNXVzZXJzLCBHU1NBUElFbmFibGVr NXVzZXJzLCBTU0hDRkdfQUxMLCAwLCBTU0hDRkdfQ09QWV9NQVRDSCkgXAorQEAgLTMzNyw2ICsz NDgsNyBAQAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGdzc19hdXRoZW50aWNhdGlvbiwgR1NT QVBJQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lO VChnc3NfY2xlYW51cF9jcmVkcywgR1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzLCBTU0hDRkdfR0xP QkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2RlbGVnX2NyZWRzLCBHU1NBUElE ZWxlZ2F0ZUNyZWRlbnRpYWxzLCBTU0hDRkdfR0xPQkFMKSBcCisrU1NIQ09ORl9VTlNVUFBPUlRF RF9TVFJJTkcoZ3NzX2NyZWRzX3BhdGgsIEdTU0FQSUNyZWRlbnRpYWxzUGF0aCwgU1NIQ0ZHX0dM T0JBTCkgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdT U0FQSVN0cmljdEFjY2VwdG9yQ2hlY2ssIFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQ UE9SVEVEX0lOVChnc3Nfa2V5ZXgsIEdTU0FQSUtleUV4Y2hhbmdlLCBTU0hDRkdfR0xPQkFMKSBc CisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX3N0b3JlX3Jla2V5LCBHU1NBUElTdG9yZUNy ZWRlbnRpYWxzT25SZWtleSwgU1NIQ0ZHX0dMT0JBTCkgXAorQEAgLTM1MCw2ICszNjIsNyBAQAor ICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFUyBcCisgCVNTSERfQ09ORklHX0VOVFJJRVNfQkFT RSBcCisgCVNTSERfQ09ORklHX0VOVFJJRVNfS1JCNSBcCisrCVNTSERfQ09ORklHX0VOVFJJRVNf R1NJIFwKKyAJU1NIRF9DT05GSUdfRU5UUklFU19HU1MgXAorIAorIC8qIE1hY3JvcyB0byBkZWNs YXJlIFNlcnZlck9wdGlvbnMgbWVtYmVyIHZhcmlhYmxlcyAqLworZGlmZiAtTnVyIG9wZW5zc2gt MTAuNXAxLm9yaWcvc3NoLjEgb3BlbnNzaC0xMC41cDEvc3NoLjEKKy0tLSBvcGVuc3NoLTEwLjVw MS5vcmlnL3NzaC4xCTIwMjYtMDktMjEgMDU6NDA6NTcuODcwOTY3MDI1ICswMjAwCisrKysgb3Bl bnNzaC0xMC41cDEvc3NoLjEJMjAyNi0wOS0yMSAwNTo0MTozMC44NDEwNDY2OTIgKzAyMDAKK0BA IC0xNDMyLDYgKzE0MzIsMTggQEAKKyBvbiB0byBuZXcgY29ubmVjdGlvbnMpLgorIC5JdCBFdiBV U0VSCisgU2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB1c2VyIGxvZ2dpbmcgaW4uCisrLkl0IEV2IFg1 MDlfQ0VSVF9ESVIKKytVc2VkIGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5v bi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCisrQ0EgY2VydGlmaWNhdGVzIGRpcmVjdG9yeS4K KysuSXQgRXYgWDUwOV9VU0VSX0NFUlQKKytVc2VkIGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNw ZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCisrY2VydGlmaWNhdGUgdG8g YmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhlIHNlcnZlci4KKysuSXQgRXYgWDUwOV9V U0VSX0tFWQorK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0 YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKKytwcml2YXRlIGtleSB0byBiZSB1c2VkIGZvciBhdXRo ZW50aWNhdGlvbiB0byB0aGUgc2VydmVyLgorKy5JdCBFdiBYNTA5X1VTRVJfUFJPWFkKKytVc2Vk IGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlv biBmb3IgdGhlCisrcHJveHkgY3JlZGVudGlhbCB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlv biB0byB0aGUgc2VydmVyLgorIC5FbAorIC5QcAorIEFkZGl0aW9uYWxseSwKK2RpZmYgLU51ciBv cGVuc3NoLTEwLjVwMS5vcmlnL3NzaC5jIG9wZW5zc2gtMTAuNXAxL3NzaC5jCistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9zc2guYwkyMDI2LTA5LTIxIDA1OjQwOjU4LjQwOTgwNDYzMiArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL3NzaC5jCTIwMjYtMDktMjEgMDU6NDE6MzAuODQxNDAzMDI5ICsw MjAwCitAQCAtNTgwLDYgKzU4MCwzOCBAQAorIAkJCWZhdGFsKCJDYW4ndCBvcGVuIHVzZXIgY29u ZmlnIGZpbGUgJS4xMDBzOiAiCisgCQkJICAgICIlLjEwMHMiLCBjb25maWcsIHN0cmVycm9yKGVy cm5vKSk7CisgCX0gZWxzZSB7CisrCSAgICAvKgorKwkgICAgICogU2luY2UgdGhlIGNvbmZpZyBm aWxlIHBhcnNpbmcgY29kZSBhYm9ydHMgaWYgaXQgc2VlcworKwkgICAgICogb3B0aW9ucyBpdCBk b2Vzbid0IHJlY29nbml6ZSwgYWxsb3cgdXNlcnMgdG8gcHV0CisrCSAgICAgKiBvcHRpb25zIHNw ZWNpZmljIHRvIGNvbXBpbGUtdGltZSBhZGQtb25zIGluIGFsdGVybmF0ZQorKwkgICAgICogY29u ZmlnIGZpbGVzIHNvIHRoZWlyIHByaW1hcnkgY29uZmlnIGZpbGUgd2lsbAorKwkgICAgICogaW50 ZXJvcGVyYXRlIFNTSCB2ZXJzaW9ucyB0aGF0IGRvbid0IHN1cHBvcnQgdGhvc2UKKysJICAgICAq IG9wdGlvbnMuCisrCSAgICAgKi8KKysjaWZkZWYgR1NTQVBJCisrCQlyID0gc25wcmludGYoYnVm LCBzaXplb2YgYnVmLCAiJXMvJXMuZ3NzYXBpIiwgcHctPnB3X2RpciwKKysJCSAgICBfUEFUSF9T U0hfVVNFUl9DT05GRklMRSk7CisrCQlpZiAociA+IDAgJiYgKHNpemVfdClyIDwgc2l6ZW9mKGJ1 ZikpCisrCQkJKHZvaWQpcmVhZF9jb25maWdfZmlsZShidWYsIHB3LCBob3N0LCBob3N0X25hbWUs IGNtZCwKKysJCQkgICAgJm9wdGlvbnMsIFNTSENPTkZfQ0hFQ0tQRVJNIHwgU1NIQ09ORl9VU0VS Q09ORiB8CisrCQkJICAgIChmaW5hbF9wYXNzID8gU1NIQ09ORl9GSU5BTCA6IDApLCB3YW50X2Zp bmFsX3Bhc3MpOworKyNpZmRlZiBHU0kKKysJCXIgPSBzbnByaW50ZihidWYsIHNpemVvZiBidWYs ICIlcy8lcy5nc2kiLCBwdy0+cHdfZGlyLAorKwkJICAgIF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxF KTsKKysJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIgPCBzaXplb2YoYnVmKSkKKysJCQkodm9pZCly ZWFkX2NvbmZpZ19maWxlKGJ1ZiwgcHcsIGhvc3QsIGhvc3RfbmFtZSwgY21kLAorKwkJCSAgICAm b3B0aW9ucywgU1NIQ09ORl9DSEVDS1BFUk0gfCBTU0hDT05GX1VTRVJDT05GIHwKKysJCQkgICAg KGZpbmFsX3Bhc3MgPyBTU0hDT05GX0ZJTkFMIDogMCksIHdhbnRfZmluYWxfcGFzcyk7CisrI2Vu ZGlmCisrI2lmIGRlZmluZWQoS1JCNSkKKysJCXIgPSBzbnByaW50ZihidWYsIHNpemVvZiBidWYs ICIlcy8lcy5rcmIiLCBwdy0+cHdfZGlyLAorKwkJICAgIF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxF KTsKKysJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIgPCBzaXplb2YoYnVmKSkKKysJCQkodm9pZCly ZWFkX2NvbmZpZ19maWxlKGJ1ZiwgcHcsIGhvc3QsIGhvc3RfbmFtZSwgY21kLAorKwkJCSAgICAm b3B0aW9ucywgU1NIQ09ORl9DSEVDS1BFUk0gfCBTU0hDT05GX1VTRVJDT05GIHwKKysJCQkgICAg KGZpbmFsX3Bhc3MgPyBTU0hDT05GX0ZJTkFMIDogMCksIHdhbnRfZmluYWxfcGFzcyk7CisrI2Vu ZGlmCisrI2VuZGlmCisgCQlyID0gc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJXMvJXMiLCBw dy0+cHdfZGlyLAorIAkJICAgIF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxFKTsKKyAJCWlmIChyID4g MCAmJiAoc2l6ZV90KXIgPCBzaXplb2YoYnVmKSkKK0BAIC0xMjgzLDYgKzEzMTUsOSBAQAorIAlp ZiAob3B0aW9ucy51c2VyID09IE5VTEwpIHsKKyAJCXVzZXJfd2FzX2RlZmF1bHQgPSAxOworIAkJ b3B0aW9ucy51c2VyID0geHN0cmR1cChwdy0+cHdfbmFtZSk7CisrCQlvcHRpb25zLmltcGxpY2l0 ID0gMTsKKysJfSBlbHNlIHsKKysJCW9wdGlvbnMuaW1wbGljaXQgPSAwOworIAl9CisgCisgCS8q CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hfY29uZmlnIG9wZW5zc2gtMTAuNXAx L3NzaF9jb25maWcKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaF9jb25maWcJMjAyNi0wOS0y MSAwNTo0MDo1Ny44NzExNzE3MjUgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hfY29uZmln CTIwMjYtMDktMjEgMDU6NDE6MzAuODQxODQzMjgyICswMjAwCitAQCAtMjIsOSArMjIsOSBAQAor ICMgICBGb3J3YXJkWDExIG5vCisgIyAgIFBhc3N3b3JkQXV0aGVudGljYXRpb24geWVzCisgIyAg IEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vCistIyAgIEdTU0FQSUF1dGhlbnRpY2F0aW9uIG5v CistIyAgIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMgbm8KKy0jICAgR1NTQVBJS2V5RXhjaGFu Z2Ugbm8KKysjICAgR1NTQVBJQXV0aGVudGljYXRpb24geWVzCisrIyAgIEdTU0FQSURlbGVnYXRl Q3JlZGVudGlhbHMgeWVzCisrIyAgIEdTU0FQSUtleUV4Y2hhbmdlIHllcworICMgICBHU1NBUElU cnVzdEROUyBubworICMgICBCYXRjaE1vZGUgbm8KKyAjICAgQ2hlY2tIb3N0SVAgbm8KK2RpZmYg LU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaF9jb25maWcuNSBvcGVuc3NoLTEwLjVwMS9zc2hf Y29uZmlnLjUKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaF9jb25maWcuNQkyMDI2LTA5LTIx IDA1OjQwOjU4LjQxMDA2Mjk3OCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaF9jb25maWcu NQkyMDI2LTA5LTIxIDA1OjQxOjMwLjg0MjAzMjk5NCArMDIwMAorQEAgLTUyLDYgKzUyLDEyIEBA CisgdXNlcidzIGNvbmZpZ3VyYXRpb24gZmlsZQorIC5QcSBQYSB+Ly5zc2gvY29uZmlnCisgLkl0 CisrR1NTQVBJIGNvbmZpZ3VyYXRpb24gZmlsZQorKy5QcSBQYSAkSE9NRS8uc3NoL2NvbmZpZy5n c3NhcGkKKysuSXQKKytLZXJiZXJvcyBjb25maWd1cmF0aW9uIGZpbGUKKysuUHEgUGEgJEhPTUUv LnNzaC9jb25maWcua3JiCisrLkl0Cisgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlCisg LlBxIFBhIC9ldGMvc3NoL3NzaF9jb25maWcKKyAuRWwKK0BAIC0xMDA2LDcgKzEwMTIsNyBAQAor IC5JdCBDbSBHU1NBUElBdXRoZW50aWNhdGlvbgorIFNwZWNpZmllcyB3aGV0aGVyIHVzZXIgYXV0 aGVudGljYXRpb24gYmFzZWQgb24gR1NTQVBJIGlzIGFsbG93ZWQuCisgVGhlIGRlZmF1bHQgaXMK Ky0uQ20gbm8gLgorKy5DbSB5ZXMgLgorIC5JdCBDbSBHU1NBUElDbGllbnRJZGVudGl0eQorIElm IHNldCwgc3BlY2lmaWVzIHRoZSBHU1NBUEkgY2xpZW50IGlkZW50aXR5IHRoYXQgc3NoIHNob3Vs ZCB1c2Ugd2hlbgorIGNvbm5lY3RpbmcgdG8gdGhlIHNlcnZlci4gVGhlIGRlZmF1bHQgaXMgdW5z ZXQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQKK0BAIC0xMDE0LDEyICsxMDIwLDEyIEBA CisgLkl0IENtIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMKKyBGb3J3YXJkIChkZWxlZ2F0ZSkg Y3JlZGVudGlhbHMgdG8gdGhlIHNlcnZlci4KKyBUaGUgZGVmYXVsdCBpcworLS5DbSBubyAuCisr LkNtIHllcyAuCisgLkl0IENtIEdTU0FQSUtleUV4Y2hhbmdlCisgU3BlY2lmaWVzIHdoZXRoZXIg a2V5IGV4Y2hhbmdlIGJhc2VkIG9uIEdTU0FQSSBtYXkgYmUgdXNlZC4gV2hlbiB1c2luZworIEdT U0FQSSBrZXkgZXhjaGFuZ2UgdGhlIHNlcnZlciBuZWVkIG5vdCBoYXZlIGEgaG9zdCBrZXkuCisg VGhlIGRlZmF1bHQgaXMKKy0uRHEgbm8gLgorKy5EcSB5ZXMgLgorIC5JdCBDbSBHU1NBUElSZW5l d2FsRm9yY2VzUmVrZXkKKyBJZiBzZXQgdG8KKyAuRHEgeWVzCitAQCAtMTY2Myw3ICsxNjY5LDcg QEAKKyAuQ20gcGFzc3dvcmQgKSAuCisgVGhlIGRlZmF1bHQgaXM6CisgLkJkIC1saXRlcmFsIC1v ZmZzZXQgaW5kZW50CistZ3NzYXBpLXdpdGgtbWljLGhvc3RiYXNlZCxwdWJsaWNrZXksCisrZ3Nz YXBpLWtleWV4LGdzc2FwaS13aXRoLW1pYyxob3N0YmFzZWQscHVibGlja2V5LAorIGtleWJvYXJk LWludGVyYWN0aXZlLHBhc3N3b3JkCisgLkVkCisgLkl0IENtIFByb3h5Q29tbWFuZAorZGlmZiAt TnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoY29ubmVjdDIuYyBvcGVuc3NoLTEwLjVwMS9zc2hj b25uZWN0Mi5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hjb25uZWN0Mi5jCTIwMjYtMDkt MjEgMDU6NDA6NTguMzMwOTc4NDQwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoY29ubmVj dDIuYwkyMDI2LTA5LTIxIDA1OjQxOjMwLjg0MjQ3NTk3NiArMDIwMAorQEAgLTg2Miw2ICs4NjIs MTEgQEAKKyAJZ3NzX09JRCBtZWNoID0gTlVMTDsKKyAJY2hhciAqZ3NzX2hvc3QgPSBOVUxMOwor IAorKwlpZiAoIW9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uKSB7CisrCQl2ZXJib3NlKCJHU1NB UEkgYXV0aGVudGljYXRpb24gZGlzYWJsZWQuIik7CisrCQlyZXR1cm4gMDsKKysJfQorKworIAlp ZiAob3B0aW9ucy5nc3Nfc2VydmVyX2lkZW50aXR5KSB7CisgCQlnc3NfaG9zdCA9IHhzdHJkdXAo b3B0aW9ucy5nc3Nfc2VydmVyX2lkZW50aXR5KTsKKyAJfSBlbHNlIGlmIChvcHRpb25zLmdzc190 cnVzdF9kbnMpIHsKK0BAIC05NzAsNyArOTc1LDggQEAKKyAKKyAJaWYgKHN0YXR1cyA9PSBHU1Nf U19DT01QTEVURSkgeworIAkJLyogc2VuZCBlaXRoZXIgY29tcGxldGUgb3IgTUlDLCBkZXBlbmRp bmcgb24gbWVjaGFuaXNtICovCistCQlpZiAoIShmbGFncyAmIEdTU19DX0lOVEVHX0ZMQUcpKSB7 CisrCQlpZiAoc3RyY21wKGF1dGhjdHh0LT5tZXRob2QtPm5hbWUsICJnc3NhcGkiKSA9PSAwIHx8 CisrCQkgICAgIShmbGFncyAmIEdTU19DX0lOVEVHX0ZMQUcpKSB7CisgCQkJaWYgKChyID0gc3No cGt0X3N0YXJ0KHNzaCwKKyAJCQkgICAgU1NIMl9NU0dfVVNFUkFVVEhfR1NTQVBJX0VYQ0hBTkdF X0NPTVBMRVRFKSkgIT0gMCB8fAorIAkJCSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDAp CitAQCAtMTEzNyw2ICsxMTQzLDIwIEBACisgCXJldHVybiByOworIH0KKyAKKysjaWZkZWYgR1NJ CisrZXh0ZXJuCisrY29uc3QgZ3NzX09JRF9kZXNjICogY29uc3QgZ3NzX21lY2hfZ2xvYnVzX2dz c2FwaV9vcGVuc3NsOworK2V4dGVybgorK2NvbnN0IGdzc19PSURfZGVzYyAqIGNvbnN0IGdzc19t ZWNoX2dsb2J1c19nc3NhcGlfb3BlbnNzbF9taWN2MjsKKysjZGVmaW5lIGlzX2dzaV9vaWQob2lk KSBcCisrICAoKG9pZC0+bGVuZ3RoID09IGdzc19tZWNoX2dsb2J1c19nc3NhcGlfb3BlbnNzbC0+ bGVuZ3RoICYmIFwKKysgICAgKG1lbWNtcChvaWQtPmVsZW1lbnRzLCBnc3NfbWVjaF9nbG9idXNf Z3NzYXBpX29wZW5zc2wtPmVsZW1lbnRzLCBcCisrCSAgICBvaWQtPmxlbmd0aCkgPT0gMCkpIHx8 IFwKKysgICAob2lkLT5sZW5ndGggPT0gZ3NzX21lY2hfZ2xvYnVzX2dzc2FwaV9vcGVuc3NsX21p Y3YyLT5sZW5ndGggJiYgXAorKyAgICAobWVtY21wKG9pZC0+ZWxlbWVudHMsIGdzc19tZWNoX2ds b2J1c19nc3NhcGlfb3BlbnNzbF9taWN2Mi0+ZWxlbWVudHMsIFwKKysJICAgIG9pZC0+bGVuZ3Ro KSA9PSAwKSkpCisrI2VuZGlmCisrCisgaW50CisgdXNlcmF1dGhfZ3Nza2V5ZXgoc3RydWN0IHNz aCAqc3NoKQorIHsKK0BAIC0xMTU5LDYgKzExNzksMTIgQEAKKyAJaWYgKChiID0gc3NoYnVmX25l dygpKSA9PSBOVUxMKQorIAkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKKyAKKysjaWZk ZWYgR1NJCisrCWlmIChvcHRpb25zLmltcGxpY2l0ICYmIGlzX2dzaV9vaWQoZ3NzX2tleF9jb250 ZXh0LT5vaWQpKQorKwkJc3NoX2dzc2FwaV9idWlsZG1pYyhiLCAiIiwgYXV0aGN0eHQtPnNlcnZp Y2UsCisrCQkgICAgImdzc2FwaS1rZXlleCIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKTsKKysJZWxz ZQorKyNlbmRpZgorIAlzc2hfZ3NzYXBpX2J1aWxkbWljKGIsIGF1dGhjdHh0LT5zZXJ2ZXJfdXNl ciwgYXV0aGN0eHQtPnNlcnZpY2UsCisgCSAgICAiZ3NzYXBpLWtleWV4Iiwgc3NoLT5rZXgtPnNl c3Npb25faWQpOworIAorQEAgLTExNzIsNyArMTE5OCw5IEBACisgCX0KKyAKKyAJaWYgKChyID0g c3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfVVNFUkFVVEhfUkVRVUVTVCkpICE9IDAgfHwKKy0J ICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgYXV0aGN0eHQtPnNlcnZlcl91c2VyKSkg IT0gMCB8fAorKwkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLAorKwkJKG9wdGlvbnMu aW1wbGljaXQgJiYgaXNfZ3NpX29pZChnc3Nfa2V4X2NvbnRleHQtPm9pZCkpID8KKysJCSIiIDog YXV0aGN0eHQtPnNlcnZlcl91c2VyKSkgIT0gMCB8fAorIAkgICAgKHIgPSBzc2hwa3RfcHV0X2Nz dHJpbmcoc3NoLCBhdXRoY3R4dC0+c2VydmljZSkpICE9IDAgfHwKKyAJICAgIChyID0gc3NocGt0 X3B1dF9jc3RyaW5nKHNzaCwgYXV0aGN0eHQtPm1ldGhvZC0+bmFtZSkpICE9IDAgfHwKKyAJICAg IChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBtaWMudmFsdWUsIG1pYy5sZW5ndGgpKSAhPSAw IHx8CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLjggb3BlbnNzaC0xMC41cDEv c3NoZC44CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLjgJMjAyNi0wOS0yMSAwNTo0MDo1 Ny45MjcxOTMwMDIgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hkLjgJMjAyNi0wOS0yMSAw NTo0MTozMC44NDI4NjkyMDkgKzAyMDAKK0BAIC04NDQsNiArODQ0LDI5IEBACisgIyBBIENBIGtl eSwgYWNjZXB0ZWQgZm9yIGFueSBob3N0IGluICoubXlkb21haW4uY29tIG9yICoubXlkb21haW4u b3JnCisgQGNlcnQtYXV0aG9yaXR5ICoubXlkb21haW4ub3JnLCoubXlkb21haW4uY29tIHNzaC1y c2EgQUFBQUI1Vy4uLgorIC5FZAorKy5TaCBFTlZJUk9OTUVOVAorKy5ObQorK3dpbGwgbm9ybWFs bHkgc2V0IHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorKy5CbCAtdGFnIC13 aWR0aCAiU1NIX09SSUdJTkFMX0NPTU1BTkQiCisrLkl0IEV2IEdSSURNQVAKKytBcHBsaWVzIHRv IEdTSSBhdXRoZW50aWNhdGlvbi9hdXRob3JpemF0aW9uLiBTcGVjaWZpZXMgdGhlIGxvY2F0aW9u IG9mIHRoZQorK2dyaWRtYXBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ3JpZG1hcCBmaWxl IGlzIGFzc3VtZWQgdG8gYmUgYXZhaWxhYmxlIGF0CisrL2V0Yy9ncmlkLXNlY3VyaXR5L2dyaWQt bWFwZmlsZSBmb3Igc2VydmljZXMgcnVubmluZyBhcyByb290IGFuZCBhdAorK0hPTUUvLmdyaWRt YXAgZm9yIHNlcnZpY2VzIHJ1bm5pbmcgYXMgbm9uLXJvb3Qgd2hlcmUgSE9NRSBpcyB0aGUgaG9t ZSBkaXJlY3RvcnkKKytvZiB0aGUgZWZmZWN0aXZlIHVzZXIgZnJvbSB0aGUgcGFzc3dvcmQgZmls ZSBlbnRyeS4KKysuSXQgRXYgWDUwOV9DRVJUX0RJUgorK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNh dGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKKytDQSBjZXJ0 aWZpY2F0ZXMgZGlyZWN0b3J5LgorKy5JdCBFdiBYNTA5X1VTRVJfQ0VSVAorK1VzZWQgZm9yIEdT SSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0 aGUKKytjZXJ0aWZpY2F0ZSB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB0byB0aGUgY2xp ZW50LgorKy5JdCBFdiBYNTA5X1VTRVJfS0VZCisrVXNlZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9u LiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQorK3ByaXZhdGUga2V5 IHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBjbGllbnQuCisrLkl0IEV2IFg1 MDlfVVNFUl9QUk9YWQorK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEg bm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKKytwcm94eSBjcmVkZW50aWFsIHRvIGJlIHVz ZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBjbGllbnQuCisrLkVsCisgLlNoIEZJTEVTCisg LkJsIC10YWcgLXdpZHRoIERzIC1jb21wYWN0CisgLkl0IFBhIH4vLmh1c2hsb2dpbgorZGlmZiAt TnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoZF9jb25maWcgb3BlbnNzaC0xMC41cDEvc3NoZF9j b25maWcKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGRfY29uZmlnCTIwMjYtMDktMjEgMDU6 NDA6NTcuOTg4NTk3Mjk1ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoZF9jb25maWcJMjAy Ni0wOS0yMSAwNTo0MTozMC44NDMwOTY0MzggKzAyMDAKK0BAIC03OSwxMCArNzksMTEgQEAKKyAj S2VyYmVyb3NVc2VLdXNlcm9rIHllcworIAorICMgR1NTQVBJIG9wdGlvbnMKKy0jR1NTQVBJQXV0 aGVudGljYXRpb24gbm8KKysjR1NTQVBJQXV0aGVudGljYXRpb24geWVzCisrI0dTU0FQSURlbGVn YXRlQ3JlZGVudGlhbHMgeWVzCisgI0dTU0FQSUNsZWFudXBDcmVkZW50aWFscyB5ZXMKKyAjR1NT QVBJU3RyaWN0QWNjZXB0b3JDaGVjayB5ZXMKKy0jR1NTQVBJS2V5RXhjaGFuZ2Ugbm8KKysjR1NT QVBJS2V5RXhjaGFuZ2UgeWVzCisgI0dTU0FQSUVuYWJsZWs1dXNlcnMgbm8KKyAKKyAjIFNldCB0 aGlzIHRvICd5ZXMnIHRvIGVuYWJsZSBQQU0gYXV0aGVudGljYXRpb24sIGFjY291bnQgcHJvY2Vz c2luZywKK0BAIC05OCw2ICs5OSwxMCBAQAorICMgcHJvYmxlbXMuCisgI1VzZVBBTSBubworIAor KyMgU2V0IHRvICd5ZXMnIHRvIGFsbG93IHRoZSBQQU0gc3RhY2sgdG8gY2hhbmdlIHRoZSB1c2Vy IG5hbWUgZHVyaW5nCisrIyBjYWxscyB0byBhdXRoZW50aWNhdGlvbgorKyNQZXJtaXRQQU1Vc2Vy Q2hhbmdlIG5vCisrCisgI0FsbG93QWdlbnRGb3J3YXJkaW5nIHllcworICNBbGxvd1RjcEZvcndh cmRpbmcgeWVzCisgI0dhdGV3YXlQb3J0cyBubworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9y aWcvc3NoZF9jb25maWcuNSBvcGVuc3NoLTEwLjVwMS9zc2hkX2NvbmZpZy41CistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9zc2hkX2NvbmZpZy41CTIwMjYtMDktMjEgMDU6NDA6NTguMzg4OTc1OTA5 ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoZF9jb25maWcuNQkyMDI2LTA5LTIxIDA1OjQx OjMwLjg0MzI0NTY1NSArMDIwMAorQEAgLTc0MywxNSArNzQzLDMwIEBACisgdG8gYWxsb3cgdGhl IGNsaWVudCB0byBzZWxlY3QgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIGZvcndhcmRpbmcgaXMg Ym91bmQuCisgVGhlIGRlZmF1bHQgaXMKKyAuQ20gbm8gLgorKy5JdCBDbSBHU0lBbGxvd0xpbWl0 ZWRQcm94eQorK1NwZWNpZmllcyB3aGV0aGVyIHRvIGFjY2VwdCBsaW1pdGVkIHByb3h5IGNyZWRl bnRpYWxzIGZvciBhdXRoZW50aWNhdGlvbi4KKytUaGUgZGVmYXVsdCBpcworKy5DbSBubyAuCisg Lkl0IENtIEdTU0FQSUF1dGhlbnRpY2F0aW9uCisgU3BlY2lmaWVzIHdoZXRoZXIgdXNlciBhdXRo ZW50aWNhdGlvbiBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4KKyBUaGUgZGVmYXVsdCBpcwor LS5DbSBubyAuCisrLkNtIHllcyAuCisgLkl0IENtIEdTU0FQSUNsZWFudXBDcmVkZW50aWFscwor IFNwZWNpZmllcyB3aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgZGVzdHJveSB0aGUgdXNlcidzIGNy ZWRlbnRpYWxzIGNhY2hlCisgb24gbG9nb3V0LgorIFRoZSBkZWZhdWx0IGlzCisgLkNtIHllcyAu CisrLkl0IENtIEdTU0FQSUNyZWRlbnRpYWxzUGF0aAorK0lmIHNwZWNpZmllZCwgdGhlIGRlbGVn YXRlZCBHU1NBUEkgY3JlZGVudGlhbCBpcyBzdG9yZWQgaW4gdGhlCisrZ2l2ZW4gcGF0aCwgb3Zl cndyaXRpbmcgYW55IGV4aXN0aW5nIGNyZWRlbnRpYWxzLgorK1BhdGhzIGNhbiBiZSBzcGVjaWZp ZWQgd2l0aCBzeW50YXggc2ltaWxhciB0byB0aGUgQXV0aG9yaXplZEtleXNGaWxlCisrb3B0aW9u IChpLmUuLCBhY2NlcHRpbmcgJWggYW5kICV1IHRva2VucykuCisrV2hlbiB1c2luZyB0aGlzIG9w dGlvbiwKKytzZXR0aW5nICdHc3NhcGlDbGVhbnVwQ3JlZGVudGlhbHMgbm8nIGlzIHJlY29tbWVu ZGVkLAorK3NvIGxvZ2dpbmcgb3V0IG9mIG9uZSBzZXNzaW9uCisrZG9lc24ndCByZW1vdmUgdGhl IGNyZWRlbnRpYWxzIGluIHVzZSBieSBhbm90aGVyIHNlc3Npb24gb2YKKyt0aGUgc2FtZSB1c2Vy LgorK0N1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgR1NJIG1lY2hhbmlzbS4KKyAu SXQgQ20gR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscworIEFjY2VwdCBkZWxlZ2F0ZWQgY3JlZGVu dGlhbHMgb24gdGhlIHNlcnZlciBzaWRlLiAgVGhlIGRlZmF1bHQgaXMKKyAuQ00geWVzIC4KK0BA IC03NjUsNyArNzgwLDcgQEAKKyBTcGVjaWZpZXMgd2hldGhlciBrZXkgZXhjaGFuZ2UgYmFzZWQg b24gR1NTQVBJIGlzIGFsbG93ZWQuIEdTU0FQSSBrZXkgZXhjaGFuZ2UKKyBkb2Vzbid0IHJlbHkg b24gc3NoIGtleXMgdG8gdmVyaWZ5IGhvc3QgaWRlbnRpdHkuCisgVGhlIGRlZmF1bHQgaXMKKy0u Q20gbm8gLgorKy5DbSB5ZXMgLgorIC5JdCBDbSBHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrCisg RGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGJlIHN0cmljdCBhYm91dCB0aGUgaWRlbnRpdHkgb2YgdGhl IEdTU0FQSSBhY2NlcHRvcgorIGEgY2xpZW50IGF1dGhlbnRpY2F0ZXMgYWdhaW5zdC4KK0BAIC0y MjA3LDYgKzIyMjIsMTIgQEAKKyBhcyBhIG5vbi1yb290IHVzZXIuCisgVGhlIGRlZmF1bHQgaXMK KyAuQ20gbm8gLgorKy5JdCBDbSBQZXJtaXRQQU1Vc2VyQ2hhbmdlCisrSWYgc2V0IHRvCisrLkNt IHllcworK3RoaXMgd2lsbCBlbmFibGUgUEFNIGF1dGhlbnRpY2F0aW9uIHRvIGNoYW5nZSB0aGUg bmFtZSBvZiB0aGUgdXNlciBiZWluZworK2F1dGhlbnRpY2F0ZWQuICBUaGUgZGVmYXVsdCBpcwor Ky5DbSBubyAuCisgLkl0IENtIFZlcnNpb25BZGRlbmR1bQorIE9wdGlvbmFsbHkgc3BlY2lmaWVz IGFkZGl0aW9uYWwgdGV4dCB0byBhcHBlbmQgdG8gdGhlIFNTSCBwcm90b2NvbCBiYW5uZXIKKyBz ZW50IGJ5IHRoZSBzZXJ2ZXIgdXBvbiBjb25uZWN0aW9uLgorZGlmZiAtTnVyIG9wZW5zc2gtMTAu NXAxLm9yaWcvc3NoZF9jb25maWdfcmVkaGF0IG9wZW5zc2gtMTAuNXAxL3NzaGRfY29uZmlnX3Jl ZGhhdAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoZF9jb25maWdfcmVkaGF0CTIwMjYtMDkt MjEgMDU6NDA6NTcuODQ0MDAwNjcwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoZF9jb25m aWdfcmVkaGF0CTIwMjYtMDktMjEgMDU6NDE6MzAuODQzNTk5NjMwICswMjAwCitAQCAtMiw5ICsy LDYgQEAKKyAKKyBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uIG5vCisgCistR1NTQVBJQXV0 aGVudGljYXRpb24geWVzCistR1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzIG5vCistCisgVXNlUEFN IHllcworIAorIFgxMUZvcndhcmRpbmcgeWVzCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3Jp Zy9zc2hkLXNlc3Npb24uYyBvcGVuc3NoLTEwLjVwMS9zc2hkLXNlc3Npb24uYworLS0tIG9wZW5z c2gtMTAuNXAxLm9yaWcvc3NoZC1zZXNzaW9uLmMJMjAyNi0wOS0yMSAwNTo0MDo1OC4zODg3NzMy MzMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hkLXNlc3Npb24uYwkyMDI2LTA5LTIxIDA1 OjQxOjMwLjg0MzcxMDA0NiArMDIwMAorQEAgLTEzOTEsMTEgKzEzOTEsMTIgQEAKKyAjZW5kaWYK KyAKKyAjaWZkZWYgR1NTQVBJCistCWlmIChvcHRpb25zLmdzc19hdXRoZW50aWNhdGlvbikgewor KwlpZiAob3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5nc3NfZGVsZWdfY3Jl ZHMpIHsKKyAJCXRlbXBvcmFyaWx5X3VzZV91aWQoYXV0aGN0eHQtPnB3KTsKKyAJCWF1dGhjdHh0 LT5rcmI1X3NldF9lbnYgPSBzc2hfZ3NzYXBpX3N0b3JlY3JlZHMoKTsKKyAJCXJlc3RvcmVfdWlk KCk7CisgCX0KKysjaWZkZWYgS1JCNQorIAkvKgorIAkgKiBHU1NBUElBbGxvd1M0VTJTZWxmIC8g R1NTQVBJUHJveHlTNFUyU2VydmljZXM6IGlmIG5vIGNyZWRlbnRpYWxzIHdlcmUgc3RvcmVkCisg CSAqIGFib3ZlIChpLmUuIG5vIEdTU0FQSSBhdXRoIHdpdGggZGVsZWdhdGlvbiBvY2N1cnJlZCks IHVzZSBTNFUyU2VsZgorQEAgLTE0OTUsNiArMTQ5Niw3IEBACisgCQl9CisgCX0KKyAjZW5kaWYK KysjZW5kaWYKKyAjaWZkZWYgV0lUSF9TRUxJTlVYCisgCXNzaGRfc2VsaW51eF9zZXR1cF9leGVj X2NvbnRleHQoYXV0aGN0eHQtPnB3LT5wd19uYW1lLAorIAkgICAgaW5ldGRfZmxhZywgZG9fcGFt X3B1dGVudiwgdGhlX2F1dGhjdHh0LAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3No LWdzcy5oIG9wZW5zc2gtMTAuNXAxL3NzaC1nc3MuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcv c3NoLWdzcy5oCTIwMjYtMDktMjEgMDU6NDA6NTguMzg4NjUyODAwICswMjAwCisrKysgb3BlbnNz aC0xMC41cDEvc3NoLWdzcy5oCTIwMjYtMDktMjEgMDU6NDE6MzAuODQ0MDAxOTI2ICswMjAwCitA QCAtMTEwLDEyICsxMTAsMTQgQEAKKyB9IHNzaF9nc3NhcGlfY2NhY2hlOworIAorIHR5cGVkZWYg c3RydWN0IHsKKysJZ3NzX09JRF9kZXNjIG9pZDsKKyAJZ3NzX2J1ZmZlcl9kZXNjIGRpc3BsYXlu YW1lOworIAlnc3NfYnVmZmVyX2Rlc2MgZXhwb3J0ZWRuYW1lOworIAlnc3NfY3JlZF9pZF90IGNy ZWRzOworLQlnc3NfbmFtZV90IG5hbWU7CisrCWdzc19uYW1lX3QgY3JlZF9uYW1lLCBjdHhfbmFt ZTsKKyAJc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3QgKm1lY2g7CisgCXNzaF9nc3NhcGlf Y2NhY2hlIHN0b3JlOworKwlnc3NfY3R4X2lkX3QgY29udGV4dDsgLyogbmVlZGVkIGZvciBnbG9i dXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpICovCisgCWludCB1c2VkOworIAlpbnQg dXBkYXRlZDsKKyAJY2hhciAqKmluZGljYXRvcnM7IC8qIGF1dGggaW5kaWNhdG9ycyAqLworQEAg LTEzOCw3ICsxNDAsNyBAQAorIAlPTV91aW50MzIJbWlub3I7IC8qIGJvdGggKi8KKyAJZ3NzX2N0 eF9pZF90CWNvbnRleHQ7IC8qIGJvdGggKi8KKyAJZ3NzX25hbWVfdAluYW1lOyAvKiBib3RoICov CistCWdzc19PSUQJCW9pZDsgLyogY2xpZW50ICovCisrCWdzc19PSUQJCW9pZDsgLyogYm90aCAq LworIAlnc3NfY3JlZF9pZF90CWNyZWRzOyAvKiBzZXJ2ZXIgKi8KKyAJZ3NzX25hbWVfdAljbGll bnQ7IC8qIHNlcnZlciAqLworIAlnc3NfY3JlZF9pZF90CWNsaWVudF9jcmVkczsgLyogYm90aCAq LworQEAgLTE4NSw2ICsxODcsOSBAQAorIE9NX3VpbnQzMiBzc2hfZ3NzYXBpX2NsaWVudF9pZGVu dGl0eShHc3NjdHh0ICosIGNvbnN0IGNoYXIgKik7CisgaW50IHNzaF9nc3NhcGlfY3JlZGVudGlh bHNfdXBkYXRlZChHc3NjdHh0ICopOworIAorK2ludCBzc2hfZ3NzYXBpX2xvY2FsbmFtZShjaGFy ICoqbmFtZSk7Cisrdm9pZCBzc2hfZ3NzYXBpX3Jla2V5X2NyZWRzKCk7CisrCisgLyogSW4gdGhl IHNlcnZlciAqLworIHR5cGVkZWYgaW50IHNzaF9nc3NhcGlfY2hlY2tfZm4oR3NzY3R4dCAqKiwg Z3NzX09JRCwgY29uc3QgY2hhciAqLAorICAgICBjb25zdCBjaGFyICopOworZGlmZiAtTnVyIG9w ZW5zc2gtMTAuNXAxLm9yaWcvdmVyc2lvbi5oIG9wZW5zc2gtMTAuNXAxL3ZlcnNpb24uaAorLS0t IG9wZW5zc2gtMTAuNXAxLm9yaWcvdmVyc2lvbi5oCTIwMjYtMDgtMTEgMDQ6MjI6MTcuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvdmVyc2lvbi5oCTIwMjYtMDktMjEgMDU6NDE6 MzAuODQ0MTE4ODEyICswMjAwCitAQCAtMiw1ICsyLDE5IEBACisgCisgI2RlZmluZSBTU0hfVkVS U0lPTgkiT3BlblNTSF8xMC41IgorIAorKyNpZmRlZiBHU0kKKysjZGVmaW5lIEdTSV9WRVJTSU9O CSIgR1NJIgorKyNlbHNlCisrI2RlZmluZSBHU0lfVkVSU0lPTgkiIgorKyNlbmRpZgorKworKyNp ZmRlZiBLUkI1CisrI2RlZmluZSBLUkI1X1ZFUlNJT04JIiBLUkI1IgorKyNlbHNlCisrI2RlZmlu ZSBLUkI1X1ZFUlNJT04JIiIKKysjZW5kaWYKKysKKyAjZGVmaW5lIFNTSF9QT1JUQUJMRQkicDEi CistI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hfVkVSU0lPTiBTU0hfUE9SVEFCTEUKKysjZGVmaW5l IEdTSV9QT1JUQUJMRQkiYy1HU0kiCisrI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hfVkVSU0lPTiBT U0hfUE9SVEFCTEUgR1NJX1BPUlRBQkxFIFwKKysJCQlHU0lfVkVSU0lPTiBLUkI1X1ZFUlNJT04K CmRpZmYgLS1naXQgYS8yMDAxLW9wZW5zc2gtMTAuM3AxLWhwbi0xOC45LjAucGF0Y2ggYi8yMDAx LW9wZW5zc2gtMTAuM3AxLWhwbi0xOC45LjAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGM2NjFjM2UuLjAwMDAwMDAKLS0tIGEvMjAwMS1vcGVuc3NoLTEwLjNwMS1ocG4tMTgu OS4wLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTU2NzkgKzAsMCBAQAotZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcvYXV0aDIuYyBvcGVuc3NoLTEwLjNwMS9hdXRoMi5jCi0tLS0gb3Bl bnNzaC0xMC4zcDEub3JpZy9hdXRoMi5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICsw MjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvYXV0aDIuYwkyMDI2LTA3LTAyIDA3OjAyOjA0LjI2MDkx MDMyMCArMDIwMAotQEAgLTUyLDYgKzUyLDggQEAKLSAjaW5jbHVkZSAiZGlzcGF0Y2guaCIKLSAj aW5jbHVkZSAicGF0aG5hbWVzLmgiCi0gI2luY2x1ZGUgInNzaGVyci5oIgotKyNpbmNsdWRlICJj YW5vaG9zdC5oIgotKwotICNpZmRlZiBHU1NBUEkKLSAjaW5jbHVkZSAic3NoLWdzcy5oIgotICNl bmRpZgotQEAgLTc1LDYgKzc3LDggQEAKLSBleHRlcm4gQXV0aG1ldGhvZCBtZXRob2RfZ3NzYXBp OwotICNlbmRpZgotIAotK3N0YXRpYyBpbnQgbG9nX2ZsYWcgPSAwOwotKwotIEF1dGhtZXRob2Qg KmF1dGhtZXRob2RzW10gPSB7Ci0gCSZtZXRob2Rfbm9uZSwKLSAJJm1ldGhvZF9wdWJrZXksCi1A QCAtMTA0LDYgKzEwOCw5IEBACi0gI2RlZmluZSBNQVRDSF9QQVJUSUFMCTMJLyogbWV0aG9kIG1h dGNoZXMsIHN1Ym1ldGhvZCBjYW4ndCBiZSBjaGVja2VkICovCi0gc3RhdGljIGludCBsaXN0X3N0 YXJ0c193aXRoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotIAot Ky8qIHJlYWQgdGhlIHVzZXIgYmFubmVyIGZyb20gdGhlIHBhdGggaW4gc3NoZF9jb25maWcKLSsg KiB0aGlzIGlzbid0IHRvIHJlYWQgaXQgb24gdGhlIGNsaWVudCBzaWRlIGJ1dCB0byByZWFkCi0r ICogaXQgaW50byB3aGF0IHdlIGFyZSBnb2luZyB0byBzZW5kIG9uIHRoZSBzZXJ2ZXIgc2lkZSAq LwotIGNoYXIgKgotIGF1dGgyX3JlYWRfYmFubmVyKHZvaWQpCi0gewotQEAgLTMwOCw2ICszMTUs MTEgQEAKLSAKLSAJZGVidWcoInVzZXJhdXRoLXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAl cyBtZXRob2QgJXMiLAotIAkgICAgdXNlclswXSA/IHVzZXIgOiAiPGltcGxpY2l0PiIsIHNlcnZp Y2UsIG1ldGhvZCk7Ci0rCWlmICghbG9nX2ZsYWcpIHsKLSsJCWxvZ2l0KCJTU0g6IFNlcnZlcjtM dHlwZTogQXV0aG5hbWU7UmVtb3RlOiAlcy0lZDtOYW1lOiAlcyIsCi0rCQkgICAgc3NoX3JlbW90 ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksIHVzZXIpOwotKwkJbG9nX2ZsYWcg PSAxOwotKwl9Ci0gCWRlYnVnKCJhdHRlbXB0ICVkIGZhaWx1cmVzICVkIiwgYXV0aGN0eHQtPmF0 dGVtcHQsIGF1dGhjdHh0LT5mYWlsdXJlcyk7Ci0gCi0gI2lmZGVmIFdJVEhfU0VMSU5VWAotZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvYmlubi5jIG9wZW5zc2gtMTAuM3AxL2Jpbm4uYwot LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvYmlubi5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvYmlubi5jCTIwMjYtMDctMDIgMDA6Mjc6Mjku NzE4NjA0NjQwICswMjAwCi1AQCAtMCwwICsxLDM1NDEgQEAKLSsjaW5jbHVkZSA8c3RkaW8uaD4K LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0ZGludC5oPgotKyNpbmNsdWRlIDxz dHJpbmcuaD4KLSsjaW5jbHVkZSA8bWVtb3J5Lmg+Ci0rI2luY2x1ZGUgImJpbm4uaCIKLSsKLSsj ZGVmaW5lIFVOVVNFRCh4KSAodm9pZCkoeCkKLSsjZGVmaW5lIHJvdW5kdmFsKGRibCkgZGJsID49 IDAuMCA/IChpbnQpKGRibCArIDAuNSkgOiAoKGRibCAtIChkb3VibGUpKGludClkYmwpIDw9IC0w LjUgPyAoaW50KWRibCA6IChpbnQpKGRibCAtIDAuNSkpCi0rCi0rLy8gbWFnaWMgbnVtYmVyOiAg MHgxRiAweGIxIDB4MjIgMHgxRiAgPT4gIDB4MUZCMTIyMUYgb3IgMHgxRjIyQjExRgotKy8vIGJl Y2F1c2UgdGhlIEJJTk5fU1RPUkFHRV9OT0JZVEVTIChiaW5hcnkgMDAwKSBtYXkgbm90IGhhdmUg c28gbWFueSBzdWItdHlwZXMgKEJJTk5fU1RPUkFHRV9IQVNfTU9SRSA9IDB4MTApCi0rI2RlZmlu ZSBCSU5OX01BR0lDICAgICAgICAgICAgMHgxRjIyQjExRgotKwotKyNkZWZpbmUgTUFYX0JJTk5f SEVBREVSICAgICAgIDkgIC8vIFsxOnR5cGVdWzQ6c2l6ZV1bNDpjb3VudF0KLSsjZGVmaW5lIE1J Tl9CSU5OX1NJWkUgICAgICAgICAzICAvLyBbMTp0eXBlXVsxOnNpemVdWzE6Y291bnRdCi0rI2Rl ZmluZSBDSFVOS19TSVpFICAgICAgICAgICAgMjU2ICAvLyAxMDI0Ci0rCi0rI2RlZmluZSBCSU5O X1NUUlVDVCAgICAgICAgMQotKyNkZWZpbmUgQklOTl9CVUZGRVIgICAgICAgIDIKLSsKLSt2b2lk KiAoKm1hbGxvY19mbikoc2l6ZV90IGxlbikgPSAwOwotK3ZvaWQqICgqcmVhbGxvY19mbikodm9p ZCAqcHRyLCBzaXplX3QgbGVuKSA9IDA7Ci0rdm9pZCAgKCpmcmVlX2ZuKSh2b2lkICpwdHIpID0g MDsKLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykg fHwgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX3Bv d2VycGNfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pCi0rI2RlZmluZSBCSU5OX09OTFlfQUxJR05F RF9BQ0NFU1MKLSsjZWxpZiAoIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRf XykgKSAmJiAhZGVmaW5lZChfX0FSTV9GRUFUVVJFX1VOQUxJR05FRCkKLSsjZGVmaW5lIEJJTk5f T05MWV9BTElHTkVEX0FDQ0VTUwotKyNlbmRpZgotKwotKyNpZiBkZWZpbmVkKF9XSU4zMikKLSsj ZGVmaW5lIEJJR19FTkRJQU4gICAgICAweDEwMDAKLSsjZGVmaW5lIExJVFRMRV9FTkRJQU4gICAw eDAwMDEKLSsjZGVmaW5lIEJZVEVfT1JERVIgICAgICBMSVRUTEVfRU5ESUFOCi0rI2VsaWYgZGVm aW5lZChfX0FQUExFX18pCi0rLyogbWFjcm9zIGFscmVhZHkgZGVmaW5lZCAqLwotKyNlbGlmIGRl ZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0Zy ZWVCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQotKyNpbmNsdWRlIDxzeXMvZW5kaWFu Lmg+Ci0rI2VsaWYgZGVmaW5lZChfQUlYKQotKyNpbmNsdWRlIDxzeXMvbWFjaGluZS5oPgotKyNl bHNlCi0rI2luY2x1ZGUgPGVuZGlhbi5oPgotKyNlbmRpZgotKwotKyNpZm5kZWYgQllURV9PUkRF UgotKyNlcnJvciAiQllURV9PUkRFUiBub3QgZGVmaW5lZCIKLSsjZW5kaWYKLSsjaWZuZGVmIEJJ R19FTkRJQU4KLSsjZXJyb3IgIkJJR19FTkRJQU4gbm90IGRlZmluZWQiCi0rI2VuZGlmCi0rI2lm bmRlZiBMSVRUTEVfRU5ESUFOCi0rI2Vycm9yICJMSVRUTEVfRU5ESUFOIG5vdCBkZWZpbmVkIgot KyNlbmRpZgotKyNpZiBCSUdfRU5ESUFOID09IExJVFRMRV9FTkRJQU4KLSsjZXJyb3IgIkJJR19F TkRJQU4gPT0gTElUVExFX0VORElBTiIKLSsjZW5kaWYKLSsjaWYgQllURV9PUkRFUiE9QklHX0VO RElBTiAmJiBCWVRFX09SREVSIT1MSVRUTEVfRU5ESUFOCi0rI2Vycm9yICJCWVRFX09SREVSIG5v dCBzdXBwb3J0ZWQiCi0rI2VuZGlmCi0rCi0rdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgICAg IHUxNjsKLSt0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgdTMyOwotK3R5cGVkZWYgdW5z aWduZWQgbG9uZyBsb25nIGludCB1NjQ7Ci0rCi0rQklOTl9QUklWQVRFIHZvaWQgY29weV9iZTE2 KHUxNiAqcGRlc3QsIHUxNiAqcHNvdXJjZSkgewotKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9F TkRJQU4KLSsgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICopIHBzb3Vy Y2U7Ci0rICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIgKikgcGRlc3Q7Ci0r ICBkZXN0WzBdID0gc291cmNlWzFdOwotKyAgZGVzdFsxXSA9IHNvdXJjZVswXTsKLSsjZWxzZSAv LyBpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLSsjaWZkZWYgQklOTl9PTkxZX0FMSUdORURf QUNDRVNTCi0rICBpZiAoKHVpbnRwdHJfdClwc291cmNlICUgMiA9PSAwKXsgIC8vIGFkZHJlc3Mg YWxpZ25lZCB0byAxNiBiaXQKLSsgICAgKnBkZXN0ID0gKnBzb3VyY2U7Ci0rICB9IGVsc2Ugewot KyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNlOwot KyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIgKikgcGRlc3Q7Ci0rICAg IGRlc3RbMF0gPSBzb3VyY2VbMF07ICAvLyBpbmRleGVzIGFyZSB0aGUgc2FtZQotKyAgICBkZXN0 WzFdID0gc291cmNlWzFdOwotKyAgfQotKyNlbHNlCi0rICAqcGRlc3QgPSAqcHNvdXJjZTsKLSsj ZW5kaWYKLSsjZW5kaWYKLSt9Ci0rCi0rQklOTl9QUklWQVRFIHZvaWQgY29weV9iZTMyKHUzMiAq cGRlc3QsIHUzMiAqcHNvdXJjZSkgewotKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4K LSsgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICopIHBzb3VyY2U7Ci0r ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIgKikgcGRlc3Q7Ci0rICBkZXN0 WzBdID0gc291cmNlWzNdOwotKyAgZGVzdFsxXSA9IHNvdXJjZVsyXTsKLSsgIGRlc3RbMl0gPSBz b3VyY2VbMV07Ci0rICBkZXN0WzNdID0gc291cmNlWzBdOwotKyNlbHNlIC8vIGlmIEJZVEVfT1JE RVIgPT0gQklHX0VORElBTgotKyNpZmRlZiBCSU5OX09OTFlfQUxJR05FRF9BQ0NFU1MKLSsgIGlm ICgodWludHB0cl90KXBzb3VyY2UgJSA0ID09IDApeyAgLy8gYWRkcmVzcyBhbGlnbmVkIHRvIDMy IGJpdAotKyAgICAqcGRlc3QgPSAqcHNvdXJjZTsKLSsgIH0gZWxzZSB7Ci0rICAgIHVuc2lnbmVk IGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICopIHBzb3VyY2U7Ci0rICAgIHVuc2lnbmVk IGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVzdDsKLSsgICAgZGVzdFswXSA9IHNv dXJjZVswXTsgIC8vIGluZGV4ZXMgYXJlIHRoZSBzYW1lCi0rICAgIGRlc3RbMV0gPSBzb3VyY2Vb MV07Ci0rICAgIGRlc3RbMl0gPSBzb3VyY2VbMl07Ci0rICAgIGRlc3RbM10gPSBzb3VyY2VbM107 Ci0rICB9Ci0rI2Vsc2UKLSsgICpwZGVzdCA9ICpwc291cmNlOwotKyNlbmRpZgotKyNlbmRpZgot K30KLSsKLStCSU5OX1BSSVZBVEUgdm9pZCBjb3B5X2JlNjQodTY0ICpwZGVzdCwgdTY0ICpwc291 cmNlKSB7Ci0rI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotKyAgdW5zaWduZWQgY2hh ciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKLSsgIHVuc2lnbmVkIGNoYXIg KmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVzdDsKLSsgIGludCBpOwotKyAgZm9yIChpPTA7 IGkgPCA4OyBpKyspIHsKLSsgICAgZGVzdFtpXSA9IHNvdXJjZVs3LWldOwotKyAgfQotKyNlbHNl IC8vIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotKyNpZmRlZiBCSU5OX09OTFlfQUxJR05F RF9BQ0NFU1MKLSsgIGlmICgodWludHB0cl90KXBzb3VyY2UgJSA4ID09IDApeyAgLy8gYWRkcmVz cyBhbGlnbmVkIHRvIDY0IGJpdAotKyAgICAqcGRlc3QgPSAqcHNvdXJjZTsKLSsgIH0gZWxzZSB7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICopIHBzb3VyY2U7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVzdDsKLSsg ICAgaW50IGk7Ci0rICAgIGZvciAoaT0wOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgZGVzdFtpXSA9 IHNvdXJjZVtpXTsgIC8vIGluZGV4ZXMgYXJlIHRoZSBzYW1lCi0rICAgIH0KLSsgIH0KLSsjZWxz ZQotKyAgKnBkZXN0ID0gKnBzb3VyY2U7Ci0rI2VuZGlmCi0rI2VuZGlmCi0rfQotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rI2lmbmRlZiBfTVNDX1ZFUgotKyNkZWZpbmUgc3RyaWNtcCBz dHJjYXNlY21wCi0rI2RlZmluZSBzdHJuaWNtcCBzdHJuY2FzZWNtcAotKyNlbmRpZgotKwotK0JJ Tk5fUFJJVkFURSBCT09MIElzVmFsaWRCaW5uSGVhZGVyKGNvbnN0IHZvaWQgKnBidWYsIGludCAq cHR5cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXplLCBpbnQgKnBoZWFkZXJzaXplKTsKLSsKLSsv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotKwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX3ZlcnNpb24oKSB7 Ci0rICByZXR1cm4gQklOTl9WRVJTSU9OOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK3ZvaWQgQVBJRU5UUlkgYmlubl9zZXRfYWxsb2NfZnVuY3Rpb25zKHZvaWQqICgqbmV3X21h bGxvYykoc2l6ZV90KSwgdm9pZCogKCpuZXdfcmVhbGxvYykodm9pZCosc2l6ZV90KSwgdm9pZCAo Km5ld19mcmVlKSh2b2lkKikpIHsKLSsKLSsgIG1hbGxvY19mbiA9IG5ld19tYWxsb2M7Ci0rICBy ZWFsbG9jX2ZuID0gbmV3X3JlYWxsb2M7Ci0rICBmcmVlX2ZuID0gbmV3X2ZyZWU7Ci0rCi0rfQot KwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIHZvaWQgY2hlY2tfYWxs b2NfZnVuY3Rpb25zKCkgewotKwotKyAgaWYgKG1hbGxvY19mbiA9PSAwKSBtYWxsb2NfZm4gPSAm bWFsbG9jOwotKyAgaWYgKHJlYWxsb2NfZm4gPT0gMCkgcmVhbGxvY19mbiA9ICZyZWFsbG9jOwot KyAgaWYgKGZyZWVfZm4gPT0gMCkgZnJlZV9mbiA9ICZmcmVlOwotKwotK30KLSsKLSsvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSB2b2lkICogYmlubl9tYWxsb2MoaW50IHNp emUpIHsKLSsgIGNoZWNrX2FsbG9jX2Z1bmN0aW9ucygpOwotKyAgcmV0dXJuIG1hbGxvY19mbihz aXplKTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdm9p ZCAqIGJpbm5fbWVtZHVwKGNvbnN0IHZvaWQgKnNyYywgaW50IHNpemUpIHsKLSsgIHZvaWQgKmRl c3Q7Ci0rCi0rICBpZiAoc3JjID09IE5VTEwgfHwgc2l6ZSA8PSAwKSByZXR1cm4gTlVMTDsKLSsg IGRlc3QgPSBiaW5uX21hbGxvYyhzaXplKTsKLSsgIGlmIChkZXN0ID09IE5VTEwpIHJldHVybiBO VUxMOwotKyAgbWVtY3B5KGRlc3QsIHNyYywgc2l6ZSk7Ci0rICByZXR1cm4gZGVzdDsKLSsKLSt9 Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgc2l6ZV90IHN0cmxl bjIoY2hhciAqc3RyKSB7Ci0rCi0rICBpZiAoc3RyID09IE5VTEwpIHJldHVybiAwOwotKyAgcmV0 dXJuIHN0cmxlbihzdHIpOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK2lu dCBBUElFTlRSWSBiaW5uX2NyZWF0ZV90eXBlKGludCBzdG9yYWdlX3R5cGUsIGludCBkYXRhX3R5 cGVfaW5kZXgpIHsKLSsgIGlmIChkYXRhX3R5cGVfaW5kZXggPCAwKSByZXR1cm4gLTE7Ci0rICBp ZiAoc3RvcmFnZV90eXBlIDwgQklOTl9TVE9SQUdFX01JTiB8fCBzdG9yYWdlX3R5cGUgPiBCSU5O X1NUT1JBR0VfTUFYKSByZXR1cm4gLTE7Ci0rICBpZiAoZGF0YV90eXBlX2luZGV4IDwgMTYpCi0r ICAgIHJldHVybiBzdG9yYWdlX3R5cGUgfCBkYXRhX3R5cGVfaW5kZXg7Ci0rICBlbHNlIGlmIChk YXRhX3R5cGVfaW5kZXggPCA0MDk2KSB7Ci0rICAgIHN0b3JhZ2VfdHlwZSB8PSBCSU5OX1NUT1JB R0VfSEFTX01PUkU7Ci0rICAgIHN0b3JhZ2VfdHlwZSA8PD0gODsKLSsgICAgZGF0YV90eXBlX2lu ZGV4ID4+PSA0OwotKyAgICByZXR1cm4gc3RvcmFnZV90eXBlIHwgZGF0YV90eXBlX2luZGV4Owot KyAgfSBlbHNlCi0rICAgIHJldHVybiAtMTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LSsKLStCT09MIEFQSUVOVFJZIGJpbm5fZ2V0X3R5cGVfaW5mbyhpbnQgbG9uZ190eXBlLCBpbnQg KnBzdG9yYWdlX3R5cGUsIGludCAqcGV4dHJhX3R5cGUpIHsKLSsgIGludCBzdG9yYWdlX3R5cGUs IGV4dHJhX3R5cGU7Ci0rICBCT09MIHJldHZhbD1UUlVFOwotKwotK2FnYWluOgotKwotKyAgaWYg KGxvbmdfdHlwZSA8IDApIHsKLSsgICAgZ290byBsb2NfaW52YWxpZDsKLSsgIH0gZWxzZSBpZiAo bG9uZ190eXBlIDw9IDB4ZmYpIHsKLSsgICAgc3RvcmFnZV90eXBlID0gbG9uZ190eXBlICYgQklO Tl9TVE9SQUdFX01BU0s7Ci0rICAgIGV4dHJhX3R5cGUgPSBsb25nX3R5cGUgJiBCSU5OX1RZUEVf TUFTSzsKLSsgIH0gZWxzZSBpZiAobG9uZ190eXBlIDw9IDB4ZmZmZikgewotKyAgICBzdG9yYWdl X3R5cGUgPSBsb25nX3R5cGUgJiBCSU5OX1NUT1JBR0VfTUFTSzE2OwotKyAgICBzdG9yYWdlX3R5 cGUgPj49IDg7Ci0rICAgIGV4dHJhX3R5cGUgPSBsb25nX3R5cGUgJiBCSU5OX1RZUEVfTUFTSzE2 OwotKyAgICBleHRyYV90eXBlID4+PSA0OwotKyAgfSBlbHNlIGlmIChsb25nX3R5cGUgJiBCSU5O X1NUT1JBR0VfVklSVFVBTCkgewotKyAgICAvL3N0b3JhZ2VfdHlwZSA9IEJJTk5fU1RPUkFHRV9W SVJUVUFMOwotKyAgICAvL2V4dHJhX3R5cGUgPSB4eHg7Ci0rICAgIGxvbmdfdHlwZSAmPSAweGZm ZmY7Ci0rICAgIGdvdG8gYWdhaW47Ci0rICB9IGVsc2UgewotK2xvY19pbnZhbGlkOgotKyAgICBz dG9yYWdlX3R5cGUgPSAtMTsKLSsgICAgZXh0cmFfdHlwZSA9IC0xOwotKyAgICByZXR2YWwgPSBG QUxTRTsKLSsgIH0KLSsKLSsgIGlmIChwc3RvcmFnZV90eXBlKSAqcHN0b3JhZ2VfdHlwZSA9IHN0 b3JhZ2VfdHlwZTsKLSsgIGlmIChwZXh0cmFfdHlwZSkgKnBleHRyYV90eXBlID0gZXh0cmFfdHlw ZTsKLSsKLSsgIHJldHVybiByZXR2YWw7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZShiaW5uICppdGVtLCBpbnQgdHlwZSwgaW50 IHNpemUsIHZvaWQgKnBvaW50ZXIpIHsKLSsgIEJPT0wgcmV0dmFsPUZBTFNFOwotKwotKyAgc3dp dGNoICh0eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9MSVNUOgotKyAgICBjYXNlIEJJTk5fTUFQOgot KyAgICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAg ICAgIGdvdG8gbG9jX2V4aXQ7Ci0rICB9Ci0rCi0rICBpZiAoaXRlbSA9PSBOVUxMIHx8IHNpemUg PCAwKSBnb3RvIGxvY19leGl0OwotKyAgaWYgKHNpemUgPCBNSU5fQklOTl9TSVpFKSB7Ci0rICAg IGlmIChwb2ludGVyKSBnb3RvIGxvY19leGl0OwotKyAgICBlbHNlIHNpemUgPSAwOwotKyAgfQot KwotKyAgbWVtc2V0KGl0ZW0sIDAsIHNpemVvZihiaW5uKSk7Ci0rCi0rICBpZiAocG9pbnRlcikg ewotKyAgICBpdGVtLT5wcmVfYWxsb2NhdGVkID0gVFJVRTsKLSsgIH0gZWxzZSB7Ci0rICAgIGl0 ZW0tPnByZV9hbGxvY2F0ZWQgPSBGQUxTRTsKLSsgICAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IENI VU5LX1NJWkU7Ci0rICAgIHBvaW50ZXIgPSBiaW5uX21hbGxvYyhzaXplKTsKLSsgICAgaWYgKHBv aW50ZXIgPT0gMCkgcmV0dXJuIElOVkFMSURfQklOTjsKLSsgIH0KLSsKLSsgIGl0ZW0tPnBidWYg PSBwb2ludGVyOwotKyAgaXRlbS0+YWxsb2Nfc2l6ZSA9IHNpemU7Ci0rCi0rICBpdGVtLT5oZWFk ZXIgPSBCSU5OX01BR0lDOwotKyAgLy9pdGVtLT5hbGxvY2F0ZWQgPSBGQUxTRTsgICAtLSBhbHJl YWR5IHplcm9lZAotKyAgaXRlbS0+d3JpdGFibGUgPSBUUlVFOwotKyAgaXRlbS0+dXNlZF9zaXpl ID0gTUFYX0JJTk5fSEVBREVSOyAgLy8gc2F2ZSBzcGFjZSBmb3IgdGhlIGhlYWRlcgotKyAgaXRl bS0+dHlwZSA9IHR5cGU7Ci0rICAvL2l0ZW0tPmNvdW50ID0gMDsgICAgICAgICAgIC0tIGFscmVh ZHkgemVyb2VkCi0rICBpdGVtLT5kaXJ0eSA9IFRSVUU7ICAgICAgICAgIC8vIHRoZSBoZWFkZXIg aXMgbm90IHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlcgotKwotKyAgcmV0dmFsID0gVFJVRTsKLSsKLSts b2NfZXhpdDoKLSsgIHJldHVybiByZXR2YWw7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbmV3KGludCB0eXBlLCBpbnQgc2l6ZSwgdm9p ZCAqcG9pbnRlcikgewotKyAgYmlubiAqaXRlbTsKLSsKLSsgIGl0ZW0gPSAoYmlubiopIGJpbm5f bWFsbG9jKHNpemVvZihiaW5uKSk7Ci0rCi0rICBpZiAoYmlubl9jcmVhdGUoaXRlbSwgdHlwZSwg c2l6ZSwgcG9pbnRlcikgPT0gRkFMU0UpIHsKLSsgICAgZnJlZV9mbihpdGVtKTsKLSsgICAgcmV0 dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICBpdGVtLT5hbGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJu IGl0ZW07Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JP T0wgQVBJRU5UUlkgYmlubl9jcmVhdGVfbGlzdChiaW5uICpsaXN0KSB7Ci0rCi0rICByZXR1cm4g Ymlubl9jcmVhdGUobGlzdCwgQklOTl9MSVNULCAwLCBOVUxMKTsKLSsKLSt9Ci0rCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9t YXAoYmlubiAqbWFwKSB7Ci0rCi0rICByZXR1cm4gYmlubl9jcmVhdGUobWFwLCBCSU5OX01BUCwg MCwgTlVMTCk7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwot K0JPT0wgQVBJRU5UUlkgYmlubl9jcmVhdGVfb2JqZWN0KGJpbm4gKm9iamVjdCkgewotKwotKyAg cmV0dXJuIGJpbm5fY3JlYXRlKG9iamVjdCwgQklOTl9PQkpFQ1QsIDAsIE5VTEwpOwotKwotK30K LSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3Qo KSB7Ci0rICByZXR1cm4gYmlubl9uZXcoQklOTl9MSVNULCAwLCAwKTsKLSt9Ci0rCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9tYXAoKSB7Ci0rICByZXR1 cm4gYmlubl9uZXcoQklOTl9NQVAsIDAsIDApOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdCgpIHsKLSsgIHJldHVybiBiaW5uX25l dyhCSU5OX09CSkVDVCwgMCwgMCk7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r YmlubiAqIEFQSUVOVFJZIGJpbm5fY29weShjb25zdCB2b2lkICpvbGQpIHsKLSsgIGludCB0eXBl LCBjb3VudCwgc2l6ZSwgaGVhZGVyX3NpemU7Ci0rICB1bnNpZ25lZCBjaGFyICpvbGRfcHRyID0g Ymlubl9wdHIob2xkKTsKLSsgIGJpbm4gKml0ZW07Ci0rCi0rICBzaXplID0gMDsKLSsgIGlmICgh SXNWYWxpZEJpbm5IZWFkZXIob2xkX3B0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJf c2l6ZSkpIHJldHVybiBOVUxMOwotKwotKyAgaXRlbSA9IGJpbm5fbmV3KHR5cGUsIHNpemUgLSBo ZWFkZXJfc2l6ZSArIE1BWF9CSU5OX0hFQURFUiwgTlVMTCk7Ci0rICBpZiggaXRlbSApewotKyAg ICB1bnNpZ25lZCBjaGFyICpkZXN0OwotKyAgICBkZXN0ID0gKCh1bnNpZ25lZCBjaGFyICopIGl0 ZW0tPnBidWYpICsgTUFYX0JJTk5fSEVBREVSOwotKyAgICBtZW1jcHkoZGVzdCwgb2xkX3B0ciAr IGhlYWRlcl9zaXplLCBzaXplIC0gaGVhZGVyX3NpemUpOwotKyAgICBpdGVtLT51c2VkX3NpemUg PSBNQVhfQklOTl9IRUFERVIgKyBzaXplIC0gaGVhZGVyX3NpemU7Ci0rICAgIGl0ZW0tPmNvdW50 ID0gY291bnQ7Ci0rICB9Ci0rICByZXR1cm4gaXRlbTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rLy8gZGVwcmVjYXRlZDogdW5zZWN1cmUuIHRoZSBzaXpl IGNhbiBiZSBjb3JydXB0ZWQgYWNjaWRlbnRhbGx5IG9yIGludGVudGlvbmFsbHkKLStCT09MIEFQ SUVOVFJZIGJpbm5fbG9hZChjb25zdCB2b2lkICpkYXRhLCBiaW5uICp2YWx1ZSkgewotKwotKyAg aWYgKGRhdGEgPT0gTlVMTCB8fCB2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rICBtZW1z ZXQodmFsdWUsIDAsIHNpemVvZihiaW5uKSk7Ci0rICB2YWx1ZS0+aGVhZGVyID0gQklOTl9NQUdJ QzsKLSsgIC8vdmFsdWUtPmFsbG9jYXRlZCA9IEZBTFNFOyAgLS0gIGFscmVhZHkgemVyb2VkCi0r ICAvL3ZhbHVlLT53cml0YWJsZSA9IEZBTFNFOwotKwotKyAgaWYgKGJpbm5faXNfdmFsaWQoZGF0 YSwgJnZhbHVlLT50eXBlLCAmdmFsdWUtPmNvdW50LCAmdmFsdWUtPnNpemUpID09IEZBTFNFKSBy ZXR1cm4gRkFMU0U7Ci0rICB2YWx1ZS0+cHRyID0gKHZvaWQqKSBkYXRhOwotKyAgcmV0dXJuIFRS VUU7Ci0rCi0rfQotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9sb2FkX2V4KGNvbnN0IHZvaWQgKmRh dGEsIGludCBzaXplLCBiaW5uICp2YWx1ZSkgewotKwotKyAgaWYgKGRhdGEgPT0gTlVMTCB8fCB2 YWx1ZSA9PSBOVUxMIHx8IHNpemUgPD0gMCkgcmV0dXJuIEZBTFNFOwotKyAgbWVtc2V0KHZhbHVl LCAwLCBzaXplb2YoYmlubikpOwotKyAgdmFsdWUtPmhlYWRlciA9IEJJTk5fTUFHSUM7Ci0rICAv L3ZhbHVlLT5hbGxvY2F0ZWQgPSBGQUxTRTsgIC0tICBhbHJlYWR5IHplcm9lZAotKyAgLy92YWx1 ZS0+d3JpdGFibGUgPSBGQUxTRTsKLSsKLSsgIGlmIChiaW5uX2lzX3ZhbGlkX2V4KGRhdGEsICZ2 YWx1ZS0+dHlwZSwgJnZhbHVlLT5jb3VudCwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7 Ci0rICB2YWx1ZS0+cHRyID0gKHZvaWQqKSBkYXRhOwotKyAgdmFsdWUtPnNpemUgPSBzaXplOwot KyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29wZW4oY29uc3Qgdm9pZCAqZGF0YSkgewotKyAg YmlubiAqaXRlbTsKLSsKLSsgIGl0ZW0gPSAoYmlubiopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5u KSk7Ci0rCi0rICBpZiAoYmlubl9sb2FkKGRhdGEsIGl0ZW0pID09IEZBTFNFKSB7Ci0rICAgIGZy ZWVfZm4oaXRlbSk7Ci0rICAgIHJldHVybiBOVUxMOwotKyAgfQotKwotKyAgaXRlbS0+YWxsb2Nh dGVkID0gVFJVRTsKLSsgIHJldHVybiBpdGVtOwotKwotK30KLSsKLStiaW5uICogQVBJRU5UUlkg Ymlubl9vcGVuX2V4KGNvbnN0IHZvaWQgKmRhdGEsIGludCBzaXplKSB7Ci0rICBiaW5uICppdGVt OwotKwotKyAgaXRlbSA9IChiaW5uKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsg IGlmIChiaW5uX2xvYWRfZXgoZGF0YSwgc2l6ZSwgaXRlbSkgPT0gRkFMU0UpIHsKLSsgICAgZnJl ZV9mbihpdGVtKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICBpdGVtLT5hbGxvY2F0 ZWQgPSBUUlVFOwotKyAgcmV0dXJuIGl0ZW07Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rCi0rQklOTl9QUklWQVRFIGludCBiaW5uX2dldF9wdHJfdHlwZShjb25zdCB2b2lkICpw dHIpIHsKLSsKLSsgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0rCi0rICBzd2l0Y2ggKCoo dW5zaWduZWQgaW50ICopcHRyKSB7Ci0rICBjYXNlIEJJTk5fTUFHSUM6Ci0rICAgIHJldHVybiBC SU5OX1NUUlVDVDsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiBCSU5OX0JVRkZFUjsKLSsgIH0K LSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5f aXNfc3RydWN0KGNvbnN0IHZvaWQgKnB0cikgewotKwotKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1 cm4gRkFMU0U7Ci0rCi0rICBpZiAoKCoodW5zaWduZWQgaW50ICopcHRyKSA9PSBCSU5OX01BR0lD KSB7Ci0rICAgIHJldHVybiBUUlVFOwotKyAgfSBlbHNlIHsKLSsgICAgcmV0dXJuIEZBTFNFOwot KyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBp bnQgQ2FsY0FsbG9jYXRpb24oaW50IG5lZWRlZF9zaXplLCBpbnQgYWxsb2Nfc2l6ZSkgewotKyAg aW50IGNhbGNfc2l6ZTsKLSsKLSsgIGNhbGNfc2l6ZSA9IGFsbG9jX3NpemU7Ci0rICB3aGlsZSAo Y2FsY19zaXplIDwgbmVlZGVkX3NpemUpIHsKLSsgICAgY2FsY19zaXplIDw8PSAxOyAgLy8gc2Ft ZSBhcyAqPSAyCi0rICAgIC8vY2FsY19zaXplICs9IENIVU5LX1NJWkU7ICAtLSB0aGlzIGlzIHNs b3dlciB0aGFuIHRoZSBhYm92ZSBsaW5lLCBiZWNhdXNlIHRoZXJlIGFyZSBtb3JlIHJlYWxsb2Nh dGlvbnMKLSsgIH0KLSsgIHJldHVybiBjYWxjX3NpemU7Ci0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgQ2hlY2tBbGxvY2F0aW9uKGJpbm4gKml0 ZW0sIGludCBhZGRfc2l6ZSkgewotKyAgaW50ICBhbGxvY19zaXplOwotKyAgdm9pZCAqcHRyOwot KwotKyAgaWYgKGl0ZW0tPnVzZWRfc2l6ZSArIGFkZF9zaXplID4gaXRlbS0+YWxsb2Nfc2l6ZSkg ewotKyAgICBpZiAoaXRlbS0+cHJlX2FsbG9jYXRlZCkgcmV0dXJuIEZBTFNFOwotKyAgICBhbGxv Y19zaXplID0gQ2FsY0FsbG9jYXRpb24oaXRlbS0+dXNlZF9zaXplICsgYWRkX3NpemUsIGl0ZW0t PmFsbG9jX3NpemUpOwotKyAgICBwdHIgPSByZWFsbG9jX2ZuKGl0ZW0tPnBidWYsIGFsbG9jX3Np emUpOwotKyAgICBpZiAocHRyID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsgICAgaXRlbS0+cGJ1 ZiA9IHB0cjsKLSsgICAgaXRlbS0+YWxsb2Nfc2l6ZSA9IGFsbG9jX3NpemU7Ci0rICB9Ci0rCi0r ICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsjaWYg QllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0rCi0rQklOTl9QUklWQVRFIGludCBnZXRfc3RvcmFn ZV9zaXplKGludCBzdG9yYWdlX3R5cGUpIHsKLSsKLSsgIHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7 Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgotKyAgICByZXR1cm4gMDsKLSsgIGNhc2Ug QklOTl9TVE9SQUdFX0JZVEU6Ci0rICAgIHJldHVybiAxOwotKyAgY2FzZSBCSU5OX1NUT1JBR0Vf V09SRDoKLSsgICAgcmV0dXJuIDI7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9EV09SRDoKLSsgICAg cmV0dXJuIDQ7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgcmV0dXJuIDg7Ci0r ICBkZWZhdWx0OgotKyAgICByZXR1cm4gMDsKLSsgIH0KLSsKLSt9Ci0rCi0rI2VuZGlmCi0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdW5zaWduZWQgY2hhciAqIEFk dmFuY2VEYXRhUG9zKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKnBsaW1pdCkgewot KyAgdW5zaWduZWQgY2hhciBieXRlOwotKyAgaW50ICBzdG9yYWdlX3R5cGUsIERhdGFTaXplOwot KwotKyAgaWYgKHAgPiBwbGltaXQpIHJldHVybiAwOwotKwotKyAgYnl0ZSA9ICpwOyBwKys7Ci0r ICBzdG9yYWdlX3R5cGUgPSBieXRlICYgQklOTl9TVE9SQUdFX01BU0s7Ci0rICBpZiAoYnl0ZSAm IEJJTk5fU1RPUkFHRV9IQVNfTU9SRSkgcCsrOwotKwotKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUp IHsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAgIC8vcCArPSAwOwotKyAgICBi cmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6Ci0rICAgIHAgKys7Ci0rICAgIGJyZWFr OwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfV09SRDoKLSsgICAgcCArPSAyOwotKyAgICBicmVhazsK LSsgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgotKyAgICBwICs9IDQ7Ci0rICAgIGJyZWFrOwot KyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6Ci0rICAgIHAgKz0gODsKLSsgICAgYnJlYWs7Ci0r ICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgot KyAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIDA7Ci0rICAgIERhdGFTaXplID0gKigodW5zaWdu ZWQgY2hhciopcCk7Ci0rICAgIGlmIChEYXRhU2l6ZSAmIDB4ODApIHsKLSsgICAgICBpZiAocCAr IHNpemVvZihpbnQpIC0gMSA+IHBsaW1pdCkgcmV0dXJuIDA7Ci0rICAgICAgY29weV9iZTMyKCh1 MzIqKSZEYXRhU2l6ZSwgKHUzMiopcCk7Ci0rICAgICAgRGF0YVNpemUgJj0gMHg3RkZGRkZGRjsK LSsgICAgICBwKz00OwotKyAgICB9IGVsc2UgewotKyAgICAgIHArKzsKLSsgICAgfQotKyAgICBw ICs9IERhdGFTaXplOwotKyAgICBpZiAoc3RvcmFnZV90eXBlID09IEJJTk5fU1RPUkFHRV9TVFJJ TkcpIHsKLSsgICAgICBwKys7ICAvLyBudWxsIHRlcm1pbmF0b3IuCi0rICAgIH0KLSsgICAgYnJl YWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6Ci0rICAgIGlmIChwID4gcGxpbWl0 KSByZXR1cm4gMDsKLSsgICAgRGF0YVNpemUgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsKLSsgICAg aWYgKERhdGFTaXplICYgMHg4MCkgewotKyAgICAgIGlmIChwICsgc2l6ZW9mKGludCkgLSAxID4g cGxpbWl0KSByZXR1cm4gMDsKLSsgICAgICBjb3B5X2JlMzIoKHUzMiopJkRhdGFTaXplLCAodTMy KilwKTsKLSsgICAgICBEYXRhU2l6ZSAmPSAweDdGRkZGRkZGOwotKyAgICB9Ci0rICAgIERhdGFT aXplLS07ICAvLyByZW1vdmUgdGhlIHR5cGUgYnl0ZSBhbHJlYWR5IGFkZGVkIGJlZm9yZQotKyAg ICBwICs9IERhdGFTaXplOwotKyAgICBicmVhazsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiAw OwotKyAgfQotKwotKyAgcmV0dXJuIHA7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rLyoKLSsKLStUaGUgaWQgY2FuIGJlIHN0b3JlZCB3aXRoIDEgdG8gNSBieXRlcwotKwot K1MgPSBzaWduYWwgYml0Ci0rWCA9IGJpdCBwYXJ0IG9mIGlkCi0rCi0rICAwU1hYIFhYWFgKLSsg IDEwMFMgWFhYWCArIDEgYnl0ZQotKyAgMTAxUyBYWFhYICsgMiBieXRlcwotKyAgMTEwUyBYWFhY ICsgMyBieXRlcwotKyAgMTExMCAwMDAwICsgNCBieXRlcwotKwotKyovCi0rQklOTl9QUklWQVRF IGludCByZWFkX21hcF9pZCh1bnNpZ25lZCBjaGFyICoqcHAsIHVuc2lnbmVkIGNoYXIgKnBsaW1p dCkgewotKyAgdW5zaWduZWQgY2hhciAqcCwgYywgc2lnbiwgdHlwZTsKLSsgIGludCBpZCwgZXh0 cmFfYnl0ZXM7Ci0rCi0rICBwID0gKnBwOwotKyAgaWYgKHAgPiBwbGltaXQpIHJldHVybiAwOwot KwotKyAgYyA9ICpwKys7Ci0rCi0rICBpZiAoYyAmIDB4ODApIHsKLSsgICAgZXh0cmFfYnl0ZXMg PSAoKGMgJiAweDYwKSA+PiA1KSArIDE7Ci0rICAgIGlmIChwICsgZXh0cmFfYnl0ZXMgPiBwbGlt aXQgKSB7Ci0rICAgICAgKnBwID0gcCArIGV4dHJhX2J5dGVzOwotKyAgICAgIHJldHVybiAwOwot KyAgICB9Ci0rICB9Ci0rCi0rICB0eXBlID0gYyAmIDB4RTA7Ci0rICBzaWduID0gYyAmIDB4MTA7 Ci0rCi0rICBpZiAoKGMgJiAweDgwKSA9PSAwKSB7Ci0rICAgIHNpZ24gPSBjICYgMHg0MDsKLSsg ICAgaWQgPSBjICYgMHgzRjsKLSsgIH0gZWxzZSBpZiAodHlwZSA9PSAweDgwKSB7Ci0rICAgIGlk ID0gYyAmIDB4MEY7Ci0rICAgIGlkID0gKGlkIDw8IDgpIHwgKnArKzsKLSsgIH0gZWxzZSBpZiAo dHlwZSA9PSAweEEwKSB7Ci0rICAgIGlkID0gYyAmIDB4MEY7Ci0rICAgIGlkID0gKGlkIDw8IDgp IHwgKnArKzsKLSsgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOwotKyAgfSBlbHNlIGlmICh0eXBl ID09IDB4QzApIHsKLSsgICAgaWQgPSBjICYgMHgwRjsKLSsgICAgaWQgPSAoaWQgPDwgOCkgfCAq cCsrOwotKyAgICBpZCA9IChpZCA8PCA4KSB8ICpwKys7Ci0rICAgIGlkID0gKGlkIDw8IDgpIHwg KnArKzsKLSsgIH0gZWxzZSBpZiAodHlwZSA9PSAweEUwKSB7Ci0rICAgIGNvcHlfYmUzMigodTMy KikmaWQsICh1MzIqKXApOwotKyAgICBwICs9IDQ7Ci0rICB9IGVsc2UgewotKyAgICAqcHAgPSBw bGltaXQgKyAyOwotKyAgICByZXR1cm4gMDsKLSsgIH0KLSsKLSsgIGlmIChzaWduKSBpZCA9IC1p ZDsKLSsKLSsgICpwcCA9IHA7Ci0rCi0rICByZXR1cm4gaWQ7Ci0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIHVuc2lnbmVkIGNoYXIgKiBTZWFyY2hGb3JJRCh1 bnNpZ25lZCBjaGFyICpwLCBpbnQgaGVhZGVyX3NpemUsIGludCBzaXplLCBpbnQgbnVtaXRlbXMs IGludCBpZCkgewotKyAgdW5zaWduZWQgY2hhciAqcGxpbWl0LCAqYmFzZTsKLSsgIGludCAgaSwg aW50MzI7Ci0rCi0rICBiYXNlID0gcDsKLSsgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKLSsgIHAg Kz0gaGVhZGVyX3NpemU7Ci0rCi0rICAvLyBzZWFyY2ggZm9yIHRoZSBJRCBpbiBhbGwgdGhlIGFy Z3VtZW50cy4KLSsgIGZvciAoaSA9IDA7IGkgPCBudW1pdGVtczsgaSsrKSB7Ci0rICAgIGludDMy ID0gcmVhZF9tYXBfaWQoJnAsIHBsaW1pdCk7Ci0rICAgIGlmIChwID4gcGxpbWl0KSBicmVhazsK LSsgICAgLy8gQ29tcGFyZSBpZiB0aGUgSURzIGFyZSBlcXVhbC4KLSsgICAgaWYgKGludDMyID09 IGlkKSByZXR1cm4gcDsKLSsgICAgLy8geHh4Ci0rICAgIHAgPSBBZHZhbmNlRGF0YVBvcyhwLCBw bGltaXQpOwotKyAgICBpZiAocCA9PSAwIHx8IHAgPCBiYXNlKSBicmVhazsKLSsgIH0KLSsKLSsg IHJldHVybiBOVUxMOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5f UFJJVkFURSB1bnNpZ25lZCBjaGFyICogU2VhcmNoRm9yS2V5KHVuc2lnbmVkIGNoYXIgKnAsIGlu dCBoZWFkZXJfc2l6ZSwgaW50IHNpemUsIGludCBudW1pdGVtcywgY29uc3QgY2hhciAqa2V5KSB7 Ci0rICB1bnNpZ25lZCBjaGFyIGxlbiwgKnBsaW1pdCwgKmJhc2U7Ci0rICBpbnQgIGksIGtleWxl bjsKLSsKLSsgIGJhc2UgPSBwOwotKyAgcGxpbWl0ID0gcCArIHNpemUgLSAxOwotKyAgcCArPSBo ZWFkZXJfc2l6ZTsKLSsKLSsgIGtleWxlbiA9IHN0cmxlbihrZXkpOwotKwotKyAgLy8gc2VhcmNo IGZvciB0aGUga2V5IGluIGFsbCB0aGUgYXJndW1lbnRzLgotKyAgZm9yIChpID0gMDsgaSA8IG51 bWl0ZW1zOyBpKyspIHsKLSsgICAgaWYgKHAgPiBwbGltaXQpIGJyZWFrOwotKyAgICBsZW4gPSAq KCh1bnNpZ25lZCBjaGFyICopcCk7Ci0rICAgIHArKzsKLSsgICAgaWYgKHAgKyBsZW4gPiBwbGlt aXQpIGJyZWFrOwotKyAgICAvLyBDb21wYXJlIGlmIHRoZSBzdHJpbmdzIGFyZSBlcXVhbC4KLSsg ICAgaWYgKGxlbiA+IDApIHsKLSsgICAgICBpZiAoc3RybmljbXAoKGNoYXIqKXAsIGtleSwgbGVu KSA9PSAwKSB7ICAgLy8gbm90ZSB0aGF0IHRoZXJlIGlzIG5vIG51bGwgdGVybWluYXRvciBoZXJl Ci0rICAgICAgICBpZiAoa2V5bGVuID09IGxlbikgewotKyAgICAgICAgICBwICs9IGxlbjsKLSsg ICAgICAgICAgcmV0dXJuIHA7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIHAgKz0gbGVu OwotKyAgICB9IGVsc2UgaWYgKGxlbiA9PSBrZXlsZW4pIHsgICAvLyBpbiB0aGUgY2FzZSBvZiBl bXB0eSBzdHJpbmc6ICIiCi0rICAgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsgICAgLy8geHh4Ci0r ICAgIHAgPSBBZHZhbmNlRGF0YVBvcyhwLCBwbGltaXQpOwotKyAgICBpZiAocCA9PSAwIHx8IHAg PCBiYXNlKSBicmVhazsKLSsgIH0KLSsKLSsgIHJldHVybiBOVUxMOwotKwotK30KLSsKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBCT09MIEFkZFZhbHVlKGJpbm4gKml0 ZW0sIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKTsKLSsKLSsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotKwotK0JJTk5fUFJJVkFURSBCT09MIGJpbm5fbGlzdF9hZGRfcmF3KGJpbm4gKml0 ZW0sIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7Ci0rCi0rICBpZiAoaXRlbSA9 PSBOVUxMIHx8IGl0ZW0tPnR5cGUgIT0gQklOTl9MSVNUIHx8IGl0ZW0tPndyaXRhYmxlID09IEZB TFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvL2lmIChDaGVja0FsbG9jYXRpb24oaXRlbSwgNCkg PT0gRkFMU0UpIHJldHVybiBGQUxTRTsgIC8vIDQgYnl0ZXMgdXNlZCBmb3IgZGF0YV9zdG9yZSBh bmQgZGF0YV9mb3JtYXQuCi0rCi0rICBpZiAoQWRkVmFsdWUoaXRlbSwgdHlwZSwgcHZhbHVlLCBz aXplKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaXRlbS0+Y291bnQrKzsKLSsKLSsg IHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5f UFJJVkFURSBCT09MIGJpbm5fb2JqZWN0X3NldF9yYXcoYmlubiAqaXRlbSwgY29uc3QgY2hhciAq a2V5LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgewotKyAgdW5zaWduZWQgY2hh ciAqcCwgbGVuOwotKyAgaW50IGludDMyOwotKwotKyAgaWYgKGl0ZW0gPT0gTlVMTCB8fCBpdGVt LT50eXBlICE9IEJJTk5fT0JKRUNUIHx8IGl0ZW0tPndyaXRhYmxlID09IEZBTFNFKSByZXR1cm4g RkFMU0U7Ci0rCi0rICBpZiAoa2V5ID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsgIGludDMyID0g c3RybGVuKGtleSk7Ci0rICBpZiAoaW50MzIgPiAyNTUpIHJldHVybiBGQUxTRTsKLSsKLSsgIC8v IGlzIHRoZSBrZXkgYWxyZWFkeSBpbiBpdD8KLSsgIHAgPSBTZWFyY2hGb3JLZXkoaXRlbS0+cGJ1 ZiwgTUFYX0JJTk5fSEVBREVSLCBpdGVtLT51c2VkX3NpemUsIGl0ZW0tPmNvdW50LCBrZXkpOwot KyAgaWYgKHApIHJldHVybiBGQUxTRTsKLSsKLSsgIC8vIHN0YXJ0IGFkZGluZyBpdAotKwotKyAg aWYgKENoZWNrQWxsb2NhdGlvbihpdGVtLCAxICsgaW50MzIpID09IEZBTFNFKSByZXR1cm4gRkFM U0U7ICAvLyBieXRlcyB1c2VkIGZvciB0aGUga2V5IHNpemUgYW5kIHRoZSBrZXkgaXRzZWxmLgot KwotKyAgcCA9ICgodW5zaWduZWQgY2hhciAqKSBpdGVtLT5wYnVmKSArIGl0ZW0tPnVzZWRfc2l6 ZTsKLSsgIGxlbiA9IGludDMyOwotKyAgKnAgPSBsZW47Ci0rICBwKys7Ci0rICBtZW1jcHkocCwg a2V5LCBpbnQzMik7Ci0rICBpbnQzMisrOyAgLy8gbm93IGNvbnRhaW5zIHRoZSBzdHJsZW4gKyAx IGJ5dGUgZm9yIHRoZSBsZW4KLSsgIGl0ZW0tPnVzZWRfc2l6ZSArPSBpbnQzMjsKLSsKLSsgIGlm IChBZGRWYWx1ZShpdGVtLCB0eXBlLCBwdmFsdWUsIHNpemUpID09IEZBTFNFKSB7Ci0rICAgIGl0 ZW0tPnVzZWRfc2l6ZSAtPSBpbnQzMjsKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAgfQotKwotKyAg aXRlbS0+Y291bnQrKzsKLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBCT09MIGJpbm5fbWFwX3NldF9yYXcoYmlubiAq aXRlbSwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgewotKyAgdW5z aWduZWQgY2hhciAqYmFzZSwgKnAsIHNpZ247Ci0rICBpbnQgaWRfc2l6ZTsKLSsKLSsgIGlmIChp dGVtID09IE5VTEwgfHwgaXRlbS0+dHlwZSAhPSBCSU5OX01BUCB8fCBpdGVtLT53cml0YWJsZSA9 PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgLy8gaXMgdGhlIElEIGFscmVhZHkgaW4gaXQ/ Ci0rICBwID0gU2VhcmNoRm9ySUQoaXRlbS0+cGJ1ZiwgTUFYX0JJTk5fSEVBREVSLCBpdGVtLT51 c2VkX3NpemUsIGl0ZW0tPmNvdW50LCBpZCk7Ci0rICBpZiAocCkgcmV0dXJuIEZBTFNFOwotKwot KyAgLy8gc3RhcnQgYWRkaW5nIGl0Ci0rCi0rICBpZiAoQ2hlY2tBbGxvY2F0aW9uKGl0ZW0sIDUp ID09IEZBTFNFKSByZXR1cm4gRkFMU0U7ICAvLyBtYXggNSBieXRlcyB1c2VkIGZvciB0aGUgaWQu Ci0rCi0rICBwID0gYmFzZSA9ICgodW5zaWduZWQgY2hhciAqKSBpdGVtLT5wYnVmKSArIGl0ZW0t PnVzZWRfc2l6ZTsKLSsKLSsgIHNpZ24gPSAoaWQgPCAwKTsKLSsgIGlmIChzaWduKSBpZCA9IC1p ZDsKLSsKLSsgIGlmIChpZCA8PSAweDNGKSB7Ci0rICAgICpwKysgPSAoc2lnbiA8PCA2KSB8IGlk OwotKyAgfSBlbHNlIGlmIChpZCA8PSAweEZGRikgewotKyAgICAqcCsrID0gMHg4MCB8IChzaWdu IDw8IDQpIHwgKChpZCAmIDB4RjAwKSA+PiA4KTsKLSsgICAgKnArKyA9IGlkICYgMHhGRjsKLSsg IH0gZWxzZSBpZiAoaWQgPD0gMHhGRkZGRikgewotKyAgICAqcCsrID0gMHhBMCB8IChzaWduIDw8 IDQpIHwgKChpZCAmIDB4RjAwMDApID4+IDE2KTsKLSsgICAgKnArKyA9IChpZCAmIDB4RkYwMCkg Pj4gODsKLSsgICAgKnArKyA9IGlkICYgMHhGRjsKLSsgIH0gZWxzZSBpZiAoaWQgPD0gMHhGRkZG RkZGKSB7Ci0rICAgICpwKysgPSAweEMwIHwgKHNpZ24gPDwgNCkgfCAoKGlkICYgMHhGMDAwMDAw KSA+PiAyNCk7Ci0rICAgICpwKysgPSAoaWQgJiAweEZGMDAwMCkgPj4gMTY7Ci0rICAgICpwKysg PSAoaWQgJiAweEZGMDApID4+IDg7Ci0rICAgICpwKysgPSBpZCAmIDB4RkY7Ci0rICB9IGVsc2Ug ewotKyAgICAqcCsrID0gMHhFMDsKLSsgICAgaWYgKHNpZ24pIGlkID0gLWlkOwotKyAgICBjb3B5 X2JlMzIoKHUzMiopcCwgKHUzMiopJmlkKTsKLSsgICAgcCArPSA0OwotKyAgfQotKwotKyAgaWRf c2l6ZSA9IChwIC0gYmFzZSk7Ci0rICBpdGVtLT51c2VkX3NpemUgKz0gaWRfc2l6ZTsKLSsKLSsg IGlmIChBZGRWYWx1ZShpdGVtLCB0eXBlLCBwdmFsdWUsIHNpemUpID09IEZBTFNFKSB7Ci0rICAg IGl0ZW0tPnVzZWRfc2l6ZSAtPSBpZF9zaXplOwotKyAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0r Ci0rICBpdGVtLT5jb3VudCsrOwotKwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIHZvaWQgKiBjb21wcmVzc19pbnQoaW50 ICpwc3RvcmFnZV90eXBlLCBpbnQgKnB0eXBlLCB2b2lkICpwc291cmNlKSB7Ci0rICBpbnQgc3Rv cmFnZV90eXBlLCBzdG9yYWdlX3R5cGUyLCB0eXBlLCB0eXBlMj0wOwotKyAgaW50NjQgIHZpbnQg PSAwOwotKyAgdWludDY0IHZ1aW50OwotKyAgY2hhciAqcHZhbHVlOwotKyNpZiBCWVRFX09SREVS ID09IEJJR19FTkRJQU4KLSsgIGludCBzaXplMSwgc2l6ZTI7Ci0rI2VuZGlmCi0rCi0rICBzdG9y YWdlX3R5cGUgPSAqcHN0b3JhZ2VfdHlwZTsKLSsgIGlmIChzdG9yYWdlX3R5cGUgPT0gQklOTl9T VE9SQUdFX0JZVEUpIHJldHVybiBwc291cmNlOwotKwotKyAgdHlwZSA9ICpwdHlwZTsKLSsKLSsg IHN3aXRjaCAodHlwZSkgewotKyAgY2FzZSBCSU5OX0lOVDY0OgotKyAgICB2aW50ID0gKihpbnQ2 NCopcHNvdXJjZTsKLSsgICAgZ290byBsb2Nfc2lnbmVkOwotKyAgY2FzZSBCSU5OX0lOVDMyOgot KyAgICB2aW50ID0gKihpbnQqKXBzb3VyY2U7Ci0rICAgIGdvdG8gbG9jX3NpZ25lZDsKLSsgIGNh c2UgQklOTl9JTlQxNjoKLSsgICAgdmludCA9ICooc2hvcnQqKXBzb3VyY2U7Ci0rICAgIGdvdG8g bG9jX3NpZ25lZDsKLSsgIGNhc2UgQklOTl9VSU5UNjQ6Ci0rICAgIHZ1aW50ID0gKih1aW50NjQq KXBzb3VyY2U7Ci0rICAgIGdvdG8gbG9jX3Bvc2l0aXZlOwotKyAgY2FzZSBCSU5OX1VJTlQzMjoK LSsgICAgdnVpbnQgPSAqKHVuc2lnbmVkIGludCopcHNvdXJjZTsKLSsgICAgZ290byBsb2NfcG9z aXRpdmU7Ci0rICBjYXNlIEJJTk5fVUlOVDE2OgotKyAgICB2dWludCA9ICoodW5zaWduZWQgc2hv cnQqKXBzb3VyY2U7Ci0rICAgIGdvdG8gbG9jX3Bvc2l0aXZlOwotKyAgfQotKwotK2xvY19zaWdu ZWQ6Ci0rCi0rICBpZiAodmludCA+PSAwKSB7Ci0rICAgIHZ1aW50ID0gdmludDsKLSsgICAgZ290 byBsb2NfcG9zaXRpdmU7Ci0rICB9Ci0rCi0rLy9sb2NfbmVnYXRpdmU6Ci0rCi0rICBpZiAodmlu dCA+PSBJTlQ4X01JTikgewotKyAgICB0eXBlMiA9IEJJTk5fSU5UODsKLSsgIH0gZWxzZQotKyAg aWYgKHZpbnQgPj0gSU5UMTZfTUlOKSB7Ci0rICAgIHR5cGUyID0gQklOTl9JTlQxNjsKLSsgIH0g ZWxzZQotKyAgaWYgKHZpbnQgPj0gSU5UMzJfTUlOKSB7Ci0rICAgIHR5cGUyID0gQklOTl9JTlQz MjsKLSsgIH0KLSsgIGdvdG8gbG9jX2V4aXQ7Ci0rCi0rbG9jX3Bvc2l0aXZlOgotKwotKyAgaWYg KHZ1aW50IDw9IFVJTlQ4X01BWCkgewotKyAgICB0eXBlMiA9IEJJTk5fVUlOVDg7Ci0rICB9IGVs c2UKLSsgIGlmICh2dWludCA8PSBVSU5UMTZfTUFYKSB7Ci0rICAgIHR5cGUyID0gQklOTl9VSU5U MTY7Ci0rICB9IGVsc2UKLSsgIGlmICh2dWludCA8PSBVSU5UMzJfTUFYKSB7Ci0rICAgIHR5cGUy ID0gQklOTl9VSU5UMzI7Ci0rICB9Ci0rCi0rbG9jX2V4aXQ6Ci0rCi0rICBwdmFsdWUgPSAoY2hh ciAqKSBwc291cmNlOwotKwotKyAgaWYgKHR5cGUyICYmIHR5cGUyICE9IHR5cGUpIHsKLSsgICAg KnB0eXBlID0gdHlwZTI7Ci0rICAgIHN0b3JhZ2VfdHlwZTIgPSBiaW5uX2dldF93cml0ZV9zdG9y YWdlKHR5cGUyKTsKLSsgICAgKnBzdG9yYWdlX3R5cGUgPSBzdG9yYWdlX3R5cGUyOwotKyNpZiBC WVRFX09SREVSID09IEJJR19FTkRJQU4KLSsgICAgc2l6ZTEgPSBnZXRfc3RvcmFnZV9zaXplKHN0 b3JhZ2VfdHlwZSk7Ci0rICAgIHNpemUyID0gZ2V0X3N0b3JhZ2Vfc2l6ZShzdG9yYWdlX3R5cGUy KTsKLSsgICAgcHZhbHVlICs9IChzaXplMSAtIHNpemUyKTsKLSsjZW5kaWYKLSsgIH0KLSsKLSsg IHJldHVybiBwdmFsdWU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklO Tl9QUklWQVRFIGludCB0eXBlX2ZhbWlseShpbnQgdHlwZSk7Ci0rCi0rQklOTl9QUklWQVRFIEJP T0wgQWRkVmFsdWUoYmlubiAqaXRlbSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUp IHsKLSsgIGludCBpbnQzMiwgQXJnU2l6ZSwgc3RvcmFnZV90eXBlLCBleHRyYV90eXBlOwotKyAg dW5zaWduZWQgY2hhciAqcDsKLSsKLSsgIGJpbm5fZ2V0X3R5cGVfaW5mbyh0eXBlLCAmc3RvcmFn ZV90eXBlLCAmZXh0cmFfdHlwZSk7Ci0rCi0rICBpZiAocHZhbHVlID09IE5VTEwpIHsKLSsgICAg c3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKLSsgICAgICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVT OgotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKLSsgICAg ICBjYXNlIEJJTk5fU1RPUkFHRV9TVFJJTkc6Ci0rICAgICAgICBpZiAoc2l6ZSA9PSAwKSBicmVh azsgLy8gdGhlIDIgYWJvdmUgYXJlIGFsbG93ZWQgdG8gaGF2ZSAwIGxlbmd0aAotKwkvKiBmYWxs IHRocm91Z2ggKi8KLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgcmV0dXJuIEZBTFNFOwotKyAg ICB9Ci0rICB9Ci0rCi0rICBpZiAodHlwZV9mYW1pbHkodHlwZSkgPT0gQklOTl9GQU1JTFlfSU5U ICYmIGl0ZW0tPmRpc2FibGVfaW50X2NvbXByZXNzaW9uID09IEZBTFNFKQotKyAgICBwdmFsdWUg PSBjb21wcmVzc19pbnQoJnN0b3JhZ2VfdHlwZSwgJnR5cGUsIHB2YWx1ZSk7Ci0rCi0rICBzd2l0 Y2ggKHN0b3JhZ2VfdHlwZSkgewotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgotKyAg ICAgIHNpemUgPSAwOwotKyAgICAgIEFyZ1NpemUgPSBzaXplOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRFOgotKyAgICAgIHNpemUgPSAxOwotKyAgICAgIEFyZ1Np emUgPSBzaXplOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgot KyAgICAgIHNpemUgPSAyOwotKyAgICAgIEFyZ1NpemUgPSBzaXplOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIEJJTk5fU1RPUkFHRV9EV09SRDoKLSsgICAgICBzaXplID0gNDsKLSsgICAgICBB cmdTaXplID0gc2l6ZTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfUVdP UkQ6Ci0rICAgICAgc2l6ZSA9IDg7Ci0rICAgICAgQXJnU2l6ZSA9IHNpemU7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6Ci0rICAgICAgaWYgKHNpemUgPCAwKSBy ZXR1cm4gRkFMU0U7Ci0rICAgICAgLy9pZiAoc2l6ZSA9PSAwKSAuLi4KLSsgICAgICBBcmdTaXpl ID0gc2l6ZSArIDQ7IC8vIGF0IGxlYXN0IHRoaXMgc2l6ZQotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIEJJTk5fU1RPUkFHRV9TVFJJTkc6Ci0rICAgICAgaWYgKHNpemUgPCAwKSByZXR1cm4gRkFM U0U7Ci0rICAgICAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IHN0cmxlbjIoIChjaGFyICopIHB2YWx1 ZSk7Ci0rICAgICAgQXJnU2l6ZSA9IHNpemUgKyA1OyAvLyBhdCBsZWFzdCB0aGlzIHNpemUKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgotKyAgICAgIGlm IChzaXplIDw9IDApIHJldHVybiBGQUxTRTsKLSsgICAgICBBcmdTaXplID0gc2l6ZTsKLSsgICAg ICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0r ICBBcmdTaXplICs9IDI7ICAvLyBhdCBsZWFzdCAyIGJ5dGVzIHVzZWQgZm9yIGRhdGFfdHlwZS4K LSsgIGlmIChDaGVja0FsbG9jYXRpb24oaXRlbSwgQXJnU2l6ZSkgPT0gRkFMU0UpIHJldHVybiBG QUxTRTsKLSsKLSsgIC8vIEdldHMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgcGxhY2UgaW4gYnVm ZmVyCi0rICBwID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWYpICsgaXRlbS0+dXNlZF9z aXplOwotKwotKyAgLy8gSWYgdGhlIGRhdGEgaXMgbm90IGEgY29udGFpbmVyLCBzdG9yZSB0aGUg ZGF0YSB0eXBlCi0rICBpZiAoc3RvcmFnZV90eXBlICE9IEJJTk5fU1RPUkFHRV9DT05UQUlORVIp IHsKLSsgICAgaWYgKHR5cGUgPiAyNTUpIHsKLSsgICAgICB1MTYgdHlwZTE2ID0gdHlwZTsKLSsg ICAgICBjb3B5X2JlMTYoKHUxNiopcCwgKHUxNiopJnR5cGUxNik7Ci0rICAgICAgcCArPSAyOwot KyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSAyOwotKyAgICB9IGVsc2UgewotKyAgICAgICpwID0g dHlwZTsKLSsgICAgICBwKys7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplKys7Ci0rICAgIH0KLSsg IH0KLSsKLSsgIHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdF X05PQllURVM6Ci0rICAgICAgLy8gTm90aGluZyB0byBkby4KLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSBCSU5OX1NUT1JBR0VfQllURToKLSsgICAgICAqKChjaGFyICopIHApID0gKigoY2hhciAq KSBwdmFsdWUpOwotKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSAxOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgotKyAgICAgIGNvcHlfYmUxNigodTE2KilwLCAo dTE2KilwdmFsdWUpOwotKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSAyOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9EV09SRDoKLSsgICAgICBjb3B5X2JlMzIoKHUzMiop cCwgKHUzMiopcHZhbHVlKTsKLSsgICAgICBpdGVtLT51c2VkX3NpemUgKz0gNDsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6Ci0rICAgICAgY29weV9iZTY0KCh1 NjQqKXAsICh1NjQqKXB2YWx1ZSk7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDg7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6Ci0rICAgIGNhc2UgQklOTl9T VE9SQUdFX1NUUklORzoKLSsgICAgICBpZiAoc2l6ZSA+IDEyNykgewotKyAgICAgICAgaW50MzIg PSBzaXplIHwgMHg4MDAwMDAwMDsKLSsgICAgICAgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKikm aW50MzIpOwotKyAgICAgICAgcCArPSA0OwotKyAgICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDQ7 Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikgcCkgPSBzaXpl OwotKyAgICAgICAgcCsrOwotKyAgICAgICAgaXRlbS0+dXNlZF9zaXplKys7Ci0rICAgICAgfQot KyAgICAgIG1lbWNweShwLCBwdmFsdWUsIHNpemUpOwotKyAgICAgIGlmIChzdG9yYWdlX3R5cGUg PT0gQklOTl9TVE9SQUdFX1NUUklORykgewotKyAgICAgICAgcCArPSBzaXplOwotKyAgICAgICAg KigoY2hhciAqKSBwKSA9IChjaGFyKSAwOwotKyAgICAgICAgc2l6ZSsrOyAgLy8gbnVsbCB0ZXJt aW5hdG9yCi0rICAgICAgfQotKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSBzaXplOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6Ci0rICAgICAgbWVtY3B5 KHAsIHB2YWx1ZSwgc2l6ZSk7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9IHNpemU7Ci0rICAg ICAgYnJlYWs7Ci0rICB9Ci0rCi0rICBpdGVtLT5kaXJ0eSA9IFRSVUU7Ci0rCi0rICByZXR1cm4g VFJVRTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9P TCBiaW5uX3NhdmVfaGVhZGVyKGJpbm4gKml0ZW0pIHsKLSsgIHVuc2lnbmVkIGNoYXIgYnl0ZSwg KnA7Ci0rICBpbnQgaW50MzIsIHNpemU7Ci0rCi0rICBpZiAoaXRlbSA9PSBOVUxMKSByZXR1cm4g RkFMU0U7Ci0rCi0rI2lmbmRlZiBCSU5OX0RJU0FCTEVfU01BTExfSEVBREVSCi0rCi0rICBwID0g KCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWYpICsgTUFYX0JJTk5fSEVBREVSOwotKyAgc2l6 ZSA9IGl0ZW0tPnVzZWRfc2l6ZSAtIE1BWF9CSU5OX0hFQURFUiArIDM7ICAvLyBhdCBsZWFzdCAz IGJ5dGVzIGZvciB0aGUgaGVhZGVyCi0rCi0rICAvLyB3cml0ZSB0aGUgY291bnQKLSsgIGlmIChp dGVtLT5jb3VudCA+IDEyNykgewotKyAgICBwIC09IDQ7Ci0rICAgIHNpemUgKz0gMzsKLSsgICAg aW50MzIgPSBpdGVtLT5jb3VudCB8IDB4ODAwMDAwMDA7Ci0rICAgIGNvcHlfYmUzMigodTMyKilw LCAodTMyKikmaW50MzIpOwotKyAgfSBlbHNlIHsKLSsgICAgcC0tOwotKyAgICAqcCA9ICh1bnNp Z25lZCBjaGFyKSBpdGVtLT5jb3VudDsKLSsgIH0KLSsKLSsgIC8vIHdyaXRlIHRoZSBzaXplCi0r ICBpZiAoc2l6ZSA+IDEyNykgewotKyAgICBwIC09IDQ7Ci0rICAgIHNpemUgKz0gMzsKLSsgICAg aW50MzIgPSBzaXplIHwgMHg4MDAwMDAwMDsKLSsgICAgY29weV9iZTMyKCh1MzIqKXAsICh1MzIq KSZpbnQzMik7Ci0rICB9IGVsc2UgewotKyAgICBwLS07Ci0rICAgICpwID0gKHVuc2lnbmVkIGNo YXIpIHNpemU7Ci0rICB9Ci0rCi0rICAvLyB3cml0ZSB0aGUgdHlwZS4KLSsgIHAtLTsKLSsgICpw ID0gKHVuc2lnbmVkIGNoYXIpIGl0ZW0tPnR5cGU7Ci0rCi0rICAvLyBzZXQgdGhlIHZhbHVlcwot KyAgaXRlbS0+cHRyID0gcDsKLSsgIGl0ZW0tPnNpemUgPSBzaXplOwotKwotKyAgVU5VU0VEKGJ5 dGUpOwotKwotKyNlbHNlCi0rCi0rICBwID0gKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZjsK LSsKLSsgIC8vIHdyaXRlIHRoZSB0eXBlLgotKyAgYnl0ZSA9IGl0ZW0tPnR5cGU7Ci0rICAqcCA9 IGJ5dGU7IHArKzsKLSsgIC8vIHdyaXRlIHRoZSBzaXplCi0rICBpbnQzMiA9IGl0ZW0tPnVzZWRf c2l6ZSB8IDB4ODAwMDAwMDA7Ci0rICBjb3B5X2JlMzIoKHUzMiopcCwgKHUzMiopJmludDMyKTsK LSsgIHArPTQ7Ci0rICAvLyB3cml0ZSB0aGUgY291bnQKLSsgIGludDMyID0gaXRlbS0+Y291bnQg fCAweDgwMDAwMDAwOwotKyAgY29weV9iZTMyKCh1MzIqKXAsICh1MzIqKSZpbnQzMik7Ci0rCi0r ICBpdGVtLT5wdHIgPSBpdGVtLT5wYnVmOwotKyAgaXRlbS0+c2l6ZSA9IGl0ZW0tPnVzZWRfc2l6 ZTsKLSsKLSsjZW5kaWYKLSsKLSsgIGl0ZW0tPmRpcnR5ID0gRkFMU0U7Ci0rCi0rICByZXR1cm4g VFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSt2b2lkIEFQSUVOVFJZ IGJpbm5fZnJlZShiaW5uICppdGVtKSB7Ci0rCi0rICBpZiAoaXRlbSA9PSBOVUxMKSByZXR1cm47 Ci0rCi0rICBpZiAoaXRlbS0+d3JpdGFibGUgJiYgaXRlbS0+cHJlX2FsbG9jYXRlZCA9PSBGQUxT RSkgewotKyAgICBmcmVlX2ZuKGl0ZW0tPnBidWYpOwotKyAgfQotKwotKyAgaWYgKGl0ZW0tPmZy ZWVmbikgaXRlbS0+ZnJlZWZuKGl0ZW0tPnB0cik7Ci0rCi0rICBpZiAoaXRlbS0+YWxsb2NhdGVk KSB7Ci0rICAgIGZyZWVfZm4oaXRlbSk7Ci0rICB9IGVsc2UgewotKyAgICBtZW1zZXQoaXRlbSwg MCwgc2l6ZW9mKGJpbm4pKTsKLSsgICAgaXRlbS0+aGVhZGVyID0gQklOTl9NQUdJQzsKLSsgIH0K LSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvLyBmcmVlIHRoZSBiaW5uIHN0cnVj dHVyZSBidXQga2VlcHMgdGhlIGJpbm4gYnVmZmVyIGFsbG9jYXRlZCwgcmV0dXJuaW5nIGEgcG9p bnRlciB0byBpdC4gdXNlIHRoZSBmcmVlIGZ1bmN0aW9uIHRvIHJlbGVhc2UgdGhlIGJ1ZmZlciBs YXRlcgotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX3JlbGVhc2UoYmlubiAqaXRlbSkgewotKyAgdm9p ZCAqZGF0YTsKLSsKLSsgIGlmIChpdGVtID09IE5VTEwpIHJldHVybiBOVUxMOwotKwotKyAgZGF0 YSA9IGJpbm5fcHRyKGl0ZW0pOwotKwotKyAgaWYgKGRhdGEgPiBpdGVtLT5wYnVmKSB7Ci0rICAg IG1lbW1vdmUoaXRlbS0+cGJ1ZiwgZGF0YSwgaXRlbS0+c2l6ZSk7Ci0rICAgIGRhdGEgPSBpdGVt LT5wYnVmOwotKyAgfQotKwotKyAgaWYgKGl0ZW0tPmFsbG9jYXRlZCkgewotKyAgICBmcmVlX2Zu KGl0ZW0pOwotKyAgfSBlbHNlIHsKLSsgICAgbWVtc2V0KGl0ZW0sIDAsIHNpemVvZihiaW5uKSk7 Ci0rICAgIGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7Ci0rICB9Ci0rCi0rICByZXR1cm4gZGF0 YTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9P TCBJc1ZhbGlkQmlubkhlYWRlcihjb25zdCB2b2lkICpwYnVmLCBpbnQgKnB0eXBlLCBpbnQgKnBj b3VudCwgaW50ICpwc2l6ZSwgaW50ICpwaGVhZGVyc2l6ZSkgewotKyAgdW5zaWduZWQgY2hhciBi eXRlLCAqcCwgKnBsaW1pdD0wOwotKyAgaW50IGludDMyLCB0eXBlLCBzaXplLCBjb3VudDsKLSsK LSsgIGlmIChwYnVmID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIHAgPSAodW5zaWduZWQg Y2hhciAqKSBwYnVmOwotKwotKyAgaWYgKHBzaXplICYmICpwc2l6ZSA+IDApIHsKLSsgICAgaWYg KCpwc2l6ZSA8IE1JTl9CSU5OX1NJWkUpIHJldHVybiBGQUxTRTsKLSsgICAgcGxpbWl0ID0gcCAr ICpwc2l6ZSAtIDE7Ci0rICB9Ci0rCi0rICAvLyBnZXQgdGhlIHR5cGUKLSsgIGJ5dGUgPSAqcDsg cCsrOwotKyAgaWYgKChieXRlICYgQklOTl9TVE9SQUdFX01BU0spICE9IEJJTk5fU1RPUkFHRV9D T05UQUlORVIpIHJldHVybiBGQUxTRTsKLSsgIGlmIChieXRlICYgQklOTl9TVE9SQUdFX0hBU19N T1JFKSByZXR1cm4gRkFMU0U7Ci0rICB0eXBlID0gYnl0ZTsKLSsKLSsgIHN3aXRjaCAodHlwZSkg ewotKyAgICBjYXNlIEJJTk5fTElTVDoKLSsgICAgY2FzZSBCSU5OX01BUDoKLSsgICAgY2FzZSBC SU5OX09CSkVDVDoKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICByZXR1cm4g RkFMU0U7Ci0rICB9Ci0rCi0rICAvLyBnZXQgdGhlIHNpemUKLSsgIGlmIChwbGltaXQgJiYgcCA+ IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgaW50MzIgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsK LSsgIGlmIChpbnQzMiAmIDB4ODApIHsKLSsgICAgaWYgKHBsaW1pdCAmJiBwICsgc2l6ZW9mKGlu dCkgLSAxID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0rICAgIGNvcHlfYmUzMigodTMyKikmaW50 MzIsICh1MzIqKXApOwotKyAgICBpbnQzMiAmPSAweDdGRkZGRkZGOwotKyAgICBwKz00OwotKyAg fSBlbHNlIHsKLSsgICAgcCsrOwotKyAgfQotKyAgc2l6ZSA9IGludDMyOwotKwotKyAgLy8gZ2V0 IHRoZSBjb3VudAotKyAgaWYgKHBsaW1pdCAmJiBwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0r ICBpbnQzMiA9ICooKHVuc2lnbmVkIGNoYXIqKXApOwotKyAgaWYgKGludDMyICYgMHg4MCkgewot KyAgICBpZiAocGxpbWl0ICYmIHAgKyBzaXplb2YoaW50KSAtIDEgPiBwbGltaXQpIHJldHVybiBG QUxTRTsKLSsgICAgY29weV9iZTMyKCh1MzIqKSZpbnQzMiwgKHUzMiopcCk7Ci0rICAgIGludDMy ICY9IDB4N0ZGRkZGRkY7Ci0rICAgIHArPTQ7Ci0rICB9IGVsc2UgewotKyAgICBwKys7Ci0rICB9 Ci0rICBjb3VudCA9IGludDMyOwotKwotKyAgaWYgKHNpemUgPCBNSU5fQklOTl9TSVpFIHx8IGNv dW50IDwgMCkgcmV0dXJuIEZBTFNFOwotKwotKyAgLy8gcmV0dXJuIHRoZSB2YWx1ZXMKLSsgIGlm IChwdHlwZSkgICpwdHlwZSAgPSB0eXBlOwotKyAgaWYgKHBjb3VudCkgKnBjb3VudCA9IGNvdW50 OwotKyAgaWYgKHBzaXplKSAgKnBzaXplICA9IHNpemU7Ci0rICBpZiAocGhlYWRlcnNpemUpICpw aGVhZGVyc2l6ZSA9IChpbnQpIChwIC0gKHVuc2lnbmVkIGNoYXIqKXBidWYpOwotKyAgcmV0dXJu IFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIGlu dCBiaW5uX2J1Zl90eXBlKGNvbnN0IHZvaWQgKnBidWYpIHsKLSsgIGludCAgdHlwZTsKLSsKLSsg IGlmICghSXNWYWxpZEJpbm5IZWFkZXIocGJ1ZiwgJnR5cGUsIE5VTEwsIE5VTEwsIE5VTEwpKSBy ZXR1cm4gSU5WQUxJRF9CSU5OOwotKwotKyAgcmV0dXJuIHR5cGU7Ci0rCi0rfQotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIGludCBiaW5uX2J1Zl9jb3VudChjb25z dCB2b2lkICpwYnVmKSB7Ci0rICBpbnQgIG5pdGVtczsKLSsKLSsgIGlmICghSXNWYWxpZEJpbm5I ZWFkZXIocGJ1ZiwgTlVMTCwgJm5pdGVtcywgTlVMTCwgTlVMTCkpIHJldHVybiAwOwotKwotKyAg cmV0dXJuIG5pdGVtczsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5O X1BSSVZBVEUgaW50IGJpbm5fYnVmX3NpemUoY29uc3Qgdm9pZCAqcGJ1ZikgewotKyAgaW50ICBz aXplPTA7Ci0rCi0rICBpZiAoIUlzVmFsaWRCaW5uSGVhZGVyKHBidWYsIE5VTEwsIE5VTEwsICZz aXplLCBOVUxMKSkgcmV0dXJuIDA7Ci0rCi0rICByZXR1cm4gc2l6ZTsKLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9wdHIoY29uc3Qgdm9p ZCAqcHRyKSB7Ci0rICBiaW5uICppdGVtOwotKwotKyAgc3dpdGNoIChiaW5uX2dldF9wdHJfdHlw ZShwdHIpKSB7Ci0rICBjYXNlIEJJTk5fU1RSVUNUOgotKyAgICBpdGVtID0gKGJpbm4qKSBwdHI7 Ci0rICAgIGlmIChpdGVtLT53cml0YWJsZSAmJiBpdGVtLT5kaXJ0eSkgewotKyAgICAgIGJpbm5f c2F2ZV9oZWFkZXIoaXRlbSk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIGl0ZW0tPnB0cjsKLSsgIGNh c2UgQklOTl9CVUZGRVI6Ci0rICAgIHJldHVybiAodm9pZCopcHRyOwotKyAgZGVmYXVsdDoKLSsg ICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r Ci0raW50IEFQSUVOVFJZIGJpbm5fc2l6ZShjb25zdCB2b2lkICpwdHIpIHsKLSsgIGJpbm4gKml0 ZW07Ci0rCi0rICBzd2l0Y2ggKGJpbm5fZ2V0X3B0cl90eXBlKHB0cikpIHsKLSsgIGNhc2UgQklO Tl9TVFJVQ1Q6Ci0rICAgIGl0ZW0gPSAoYmlubiopIHB0cjsKLSsgICAgaWYgKGl0ZW0tPndyaXRh YmxlICYmIGl0ZW0tPmRpcnR5KSB7Ci0rICAgICAgYmlubl9zYXZlX2hlYWRlcihpdGVtKTsKLSsg ICAgfQotKyAgICByZXR1cm4gaXRlbS0+c2l6ZTsKLSsgIGNhc2UgQklOTl9CVUZGRVI6Ci0rICAg IHJldHVybiBiaW5uX2J1Zl9zaXplKHB0cik7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gMDsK LSsgIH0KLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStpbnQgQVBJRU5UUlkg Ymlubl90eXBlKGNvbnN0IHZvaWQgKnB0cikgewotKyAgYmlubiAqaXRlbTsKLSsKLSsgIHN3aXRj aCAoYmlubl9nZXRfcHRyX3R5cGUocHRyKSkgewotKyAgY2FzZSBCSU5OX1NUUlVDVDoKLSsgICAg aXRlbSA9IChiaW5uKikgcHRyOwotKyAgICByZXR1cm4gaXRlbS0+dHlwZTsKLSsgIGNhc2UgQklO Tl9CVUZGRVI6Ci0rICAgIHJldHVybiBiaW5uX2J1Zl90eXBlKHB0cik7Ci0rICBkZWZhdWx0Ogot KyAgICByZXR1cm4gLTE7Ci0rICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r Ci0raW50IEFQSUVOVFJZIGJpbm5fY291bnQoY29uc3Qgdm9pZCAqcHRyKSB7Ci0rICBiaW5uICpp dGVtOwotKwotKyAgc3dpdGNoIChiaW5uX2dldF9wdHJfdHlwZShwdHIpKSB7Ci0rICBjYXNlIEJJ Tk5fU1RSVUNUOgotKyAgICBpdGVtID0gKGJpbm4qKSBwdHI7Ci0rICAgIHJldHVybiBpdGVtLT5j b3VudDsKLSsgIGNhc2UgQklOTl9CVUZGRVI6Ci0rICAgIHJldHVybiBiaW5uX2J1Zl9jb3VudChw dHIpOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIC0xOwotKyAgfQotKwotK30KLSsKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotKy8vIHRoZSBjb250YWluZXIgY2FuIGJlIHNtYWxsZXIgdGhh biB0aGUgaW5mb3JtZWQgc2l6ZQotK0JJTk5fUFJJVkFURSBCT09MIGJpbm5faXNfdmFsaWRfZXgy KGNvbnN0IHZvaWQgKnB0ciwgaW50ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAqcHNpemUpIHsK LSsgIGludCAgaSwgdHlwZSwgY291bnQsIHNpemUsIGhlYWRlcl9zaXplOwotKyAgdW5zaWduZWQg Y2hhciAqcCwgKnBsaW1pdCwgKmJhc2UsIGxlbjsKLSsKLSsgIGlmIChwdHIgPT0gTlVMTCkgcmV0 dXJuIEZBTFNFOwotKwotKyAgLy8gaXMgdGhlcmUgYW4gaW5mb3JtZWQgc2l6ZT8KLSsgIGlmIChw c2l6ZSAmJiAqcHNpemUgPiAwKSB7Ci0rICAgIHNpemUgPSAqcHNpemU7Ci0rICB9IGVsc2Ugewot KyAgICBzaXplID0gMDsKLSsgIH0KLSsKLSsgIGlmICghSXNWYWxpZEJpbm5IZWFkZXIocHRyLCAm dHlwZSwgJmNvdW50LCAmc2l6ZSwgJmhlYWRlcl9zaXplKSkgcmV0dXJuIEZBTFNFOwotKwotKyAg Ly8gaXMgdGhlcmUgYW4gaW5mb3JtZWQgc2l6ZT8KLSsgIGlmIChwc2l6ZSAmJiAqcHNpemUgPiAw KSB7Ci0rICAgIC8vIGlzIGl0IGJpZ2dlciB0aGFuIHRoZSBidWZmZXI/Ci0rICAgIGlmIChzaXpl ID4gKnBzaXplKSByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1l ZCBjb3VudD8KLSsgIGlmIChwY291bnQgJiYgKnBjb3VudCA+IDApIHsKLSsgICAgLy8gaXMgaXQg dGhlIHNhbWUgYXMgdGhlIG9uZSBpbiB0aGUgYnVmZmVyPwotKyAgICBpZiAoY291bnQgIT0gKnBj b3VudCkgcmV0dXJuIEZBTFNFOwotKyAgfQotKyAgLy8gaXMgdGhlcmUgYW4gaW5mb3JtZWQgdHlw ZT8KLSsgIGlmIChwdHlwZSAmJiAqcHR5cGUgIT0gMCkgewotKyAgICAvLyBpcyBpdCB0aGUgc2Ft ZSBhcyB0aGUgb25lIGluIHRoZSBidWZmZXI/Ci0rICAgIGlmICh0eXBlICE9ICpwdHlwZSkgcmV0 dXJuIEZBTFNFOwotKyAgfQotKwotKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopcHRyOwotKyAgYmFz ZSA9IHA7Ci0rICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7Ci0rCi0rICBwICs9IGhlYWRlcl9zaXpl OwotKwotKyAgLy8gcHJvY2VzcyBlYWNoIChrZXkgYW5kKSB2YWx1ZQotKyAgZm9yIChpID0gMDsg aSA8IGNvdW50OyBpKyspIHsKLSsgICAgc3dpdGNoICh0eXBlKSB7Ci0rICAgICAgY2FzZSBCSU5O X09CSkVDVDoKLSsgICAgICAgIGlmIChwID4gcGxpbWl0KSBnb3RvIEludmFsaWQ7Ci0rICAgICAg ICAvLyBnZXQgdGhlIGtleSAoc3RyaW5nKSBzaXplCi0rICAgICAgICBsZW4gPSAqcDsKLSsgICAg ICAgIHArKzsKLSsgICAgICAgIC8vaWYgKGxlbiA9PSAwKSBnb3RvIEludmFsaWQ7Ci0rICAgICAg ICAvLyBhZHZhbmNlIG92ZXIgdGhlIGtleQotKyAgICAgICAgcCArPSBsZW47Ci0rICAgICAgICBi cmVhazsKLSsgICAgICBjYXNlIEJJTk5fTUFQOgotKyAgICAgICAgLy8gYWR2YW5jZSBvdmVyIHRo ZSBrZXkKLSsgICAgICAgIHJlYWRfbWFwX2lkKCZwLCBwbGltaXQpOwotKyAgICAgICAgYnJlYWs7 Ci0rICAgICAgY2FzZSBCSU5OX0xJU1Q6Ci0rICAgICAgICAvLyBubyBrZXkKLSsgICAgICAgIGJy ZWFrOwotKyAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICBnb3RvIEludmFsaWQ7Ci0rICAgIH0KLSsg ICAgLy8gY2hlY2sgdGhlIHZhbHVlCi0rICAgIGlmIChwID4gcGxpbWl0KSBnb3RvIEludmFsaWQ7 Ci0rICAgIGlmICgoKnAgJiBCSU5OX1NUT1JBR0VfTUFTSykgPT0gQklOTl9TVE9SQUdFX0NPTlRB SU5FUikgewotKyAgICAgIC8vIHJlY3Vyc2l2ZWx5IGNoZWNrIHRoZSBpbnRlcm5hbCBjb250YWlu ZXIKLSsgICAgICBpbnQgc2l6ZTIgPSBwbGltaXQgLSBwICsgMTsgIC8vIG1heGltdW0gY29udGFp bmVyIHNpemUKLSsgICAgICBpZiAoYmlubl9pc192YWxpZF9leDIocCwgTlVMTCwgTlVMTCwgJnNp emUyKSA9PSBGQUxTRSkgZ290byBJbnZhbGlkOwotKyAgICAgIHAgKz0gc2l6ZTI7Ci0rICAgIH0g ZWxzZSB7Ci0rICAgICAgLy8gYWR2YW5jZSBvdmVyIHRoZSB2YWx1ZQotKyAgICAgIHAgPSBBZHZh bmNlRGF0YVBvcyhwLCBwbGltaXQpOwotKyAgICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIGdv dG8gSW52YWxpZDsKLSsgICAgfQotKyAgfQotKwotKyAgaWYgKHB0eXBlICAmJiAqcHR5cGU9PTAp ICpwdHlwZSA9IHR5cGU7Ci0rICBpZiAocGNvdW50ICYmICpwY291bnQ9PTApICpwY291bnQgPSBj b3VudDsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gc2l6ZTsKLSsgIHJldHVybiBUUlVFOwotKwot K0ludmFsaWQ6Ci0rICByZXR1cm4gRkFMU0U7Ci0rCi0rfQotKwotKy8vIHRoZSBjb250YWluZXIg bXVzdCBoYXZlIHRoZSBpbmZvcm1lZCBzaXplLCBpZiBpbmZvcm1lZAotK0JPT0wgQVBJRU5UUlkg Ymlubl9pc192YWxpZF9leChjb25zdCB2b2lkICpwdHIsIGludCAqcHR5cGUsIGludCAqcGNvdW50 LCBpbnQgKnBzaXplKSB7Ci0rICBpbnQgc2l6ZTsKLSsKLSsgIGlmIChwc2l6ZSAmJiAqcHNpemUg PiAwKSB7Ci0rICAgIHNpemUgPSAqcHNpemU7Ci0rICB9IGVsc2UgewotKyAgICBzaXplID0gMDsK LSsgIH0KLSsKLSsgIGlmIChiaW5uX2lzX3ZhbGlkX2V4MihwdHIsIHB0eXBlLCBwY291bnQsICZz aXplKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKHBzaXplKSB7Ci0rICAgIGlm ICgqcHNpemUgPiAwKSB7Ci0rICAgICAgaWYgKHNpemUgIT0gKnBzaXplKSByZXR1cm4gRkFMU0U7 Ci0rICAgIH0gZWxzZSBpZiAoKnBzaXplPT0wKSB7Ci0rICAgICAgKnBzaXplID0gc2l6ZTsKLSsg ICAgfQotKyAgfQotKwotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2lzX3ZhbGlkKGNvbnN0IHZvaWQgKnB0ciwgaW50 ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAqcHNpemUpIHsKLSsKLSsgIGlmIChwdHlwZSkgICpw dHlwZSAgPSAwOwotKyAgaWYgKHBjb3VudCkgKnBjb3VudCA9IDA7Ci0rICBpZiAocHNpemUpICAq cHNpemUgID0gMDsKLSsKLSsgIHJldHVybiBiaW5uX2lzX3ZhbGlkX2V4KHB0ciwgcHR5cGUsIHBj b3VudCwgcHNpemUpOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKiogSU5U RVJOQUwgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9P TCBHZXRWYWx1ZSh1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBjaGFyICpwbGltaXQsIGJpbm4g KnZhbHVlKSB7Ci0rICB1bnNpZ25lZCBjaGFyIGJ5dGU7Ci0rICBpbnQgICBkYXRhX3R5cGUsIHN0 b3JhZ2VfdHlwZTsgIC8vLCBleHRyYV90eXBlOwotKyAgaW50ICAgRGF0YVNpemU7Ci0rICB2b2lk ICpwMjsKLSsKLSsgIGlmICh2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rICBtZW1zZXQo dmFsdWUsIDAsIHNpemVvZihiaW5uKSk7Ci0rICB2YWx1ZS0+aGVhZGVyID0gQklOTl9NQUdJQzsK LSsgIC8vdmFsdWUtPmFsbG9jYXRlZCA9IEZBTFNFOyAgLS0gIGFscmVhZHkgemVyb2VkCi0rICAv L3ZhbHVlLT53cml0YWJsZSA9IEZBTFNFOwotKwotKyAgLy8gc2F2ZXMgZm9yIHVzZSB3aXRoIEJJ Tk5fU1RPUkFHRV9DT05UQUlORVIKLSsgIHAyID0gcDsKLSsKLSsgIC8vIHJlYWQgdGhlIGRhdGEg dHlwZQotKyAgaWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgIGJ5dGUgPSAqcDsgcCsr OwotKyAgc3RvcmFnZV90eXBlID0gYnl0ZSAmIEJJTk5fU1RPUkFHRV9NQVNLOwotKyAgaWYgKGJ5 dGUgJiBCSU5OX1NUT1JBR0VfSEFTX01PUkUpIHsKLSsgICAgZGF0YV90eXBlID0gYnl0ZSA8PCA4 OwotKyAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICBieXRlID0gKnA7IHAr KzsKLSsgICAgZGF0YV90eXBlIHw9IGJ5dGU7Ci0rICAgIC8vZXh0cmFfdHlwZSA9IGRhdGFfdHlw ZSAmIEJJTk5fVFlQRV9NQVNLMTY7Ci0rICB9IGVsc2UgewotKyAgICBkYXRhX3R5cGUgPSBieXRl OwotKyAgICAvL2V4dHJhX3R5cGUgPSBieXRlICYgQklOTl9UWVBFX01BU0s7Ci0rICB9Ci0rCi0r ICAvL3ZhbHVlLT5zdG9yYWdlX3R5cGUgPSBzdG9yYWdlX3R5cGU7Ci0rICB2YWx1ZS0+dHlwZSA9 IGRhdGFfdHlwZTsKLSsKLSsgIHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7Ci0rICBjYXNlIEJJTk5f U1RPUkFHRV9OT0JZVEVTOgotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6 Ci0rICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0rICAgIHZhbHVlLT52dWludDgg PSAqKCh1bnNpZ25lZCBjaGFyICopIHApOwotKyAgICB2YWx1ZS0+cHRyID0gcDsgICAvL3ZhbHVl LT5wdHIgPSAmdmFsdWUtPnZ1aW50ODsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFH RV9XT1JEOgotKyAgICBpZiAocCArIDEgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgY29w eV9iZTE2KCh1MTYqKSZ2YWx1ZS0+dmludDE2LCAodTE2KilwKTsKLSsgICAgdmFsdWUtPnB0ciA9 ICZ2YWx1ZS0+dmludDE2OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JE OgotKyAgICBpZiAocCArIDMgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgY29weV9iZTMy KCh1MzIqKSZ2YWx1ZS0+dmludDMyLCAodTMyKilwKTsKLSsgICAgdmFsdWUtPnB0ciA9ICZ2YWx1 ZS0+dmludDMyOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgotKyAg ICBpZiAocCArIDcgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgY29weV9iZTY0KCh1NjQq KSZ2YWx1ZS0+dmludDY0LCAodTY0KilwKTsKLSsgICAgdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dmlu dDY0OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6Ci0rICBjYXNlIEJJ Tk5fU1RPUkFHRV9TVFJJTkc6Ci0rICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0r ICAgIERhdGFTaXplID0gKigodW5zaWduZWQgY2hhciopcCk7Ci0rICAgIGlmIChEYXRhU2l6ZSAm IDB4ODApIHsKLSsgICAgICBpZiAocCArIDMgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAg ICBjb3B5X2JlMzIoKHUzMiopJkRhdGFTaXplLCAodTMyKilwKTsKLSsgICAgICBEYXRhU2l6ZSAm PSAweDdGRkZGRkZGOwotKyAgICAgIHArPTQ7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgcCsrOwot KyAgICB9Ci0rICAgIGlmIChwICsgRGF0YVNpemUgLSAxID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7 Ci0rICAgIHZhbHVlLT5zaXplID0gRGF0YVNpemU7Ci0rICAgIHZhbHVlLT5wdHIgPSBwOwotKyAg ICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKLSsgICAgdmFsdWUtPnB0 ciA9IHAyOyAgLy8gPC0tIGl0IHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lciwg bm90IHRoZSBkYXRhCi0rICAgIGlmIChJc1ZhbGlkQmlubkhlYWRlcihwMiwgTlVMTCwgJnZhbHVl LT5jb3VudCwgJnZhbHVlLT5zaXplLCBOVUxMKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKyAg ICBicmVhazsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIC8v IGNvbnZlcnQgdGhlIHJldHVybmVkIHZhbHVlLCBpZiBuZWVkZWQKLSsKLSsgIHN3aXRjaCAodmFs dWUtPnR5cGUpIHsKLSsgICAgY2FzZSBCSU5OX1RSVUU6Ci0rICAgICAgdmFsdWUtPnR5cGUgPSBC SU5OX0JPT0w7Ci0rICAgICAgdmFsdWUtPnZib29sID0gVFJVRTsKLSsgICAgICB2YWx1ZS0+cHRy ID0gJnZhbHVlLT52Ym9vbDsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBCSU5OX0ZBTFNFOgot KyAgICAgIHZhbHVlLT50eXBlID0gQklOTl9CT09MOwotKyAgICAgIHZhbHVlLT52Ym9vbCA9IEZB TFNFOwotKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFsdWUtPnZib29sOwotKyAgICAgIGJyZWFrOwot KyNpZmRlZiBCSU5OX0VYVEVOREVECi0rICAgIGNhc2UgQklOTl9TSU5HTEVfU1RSOgotKyAgICAg IHZhbHVlLT50eXBlID0gQklOTl9TSU5HTEU7Ci0rICAgICAgdmFsdWUtPnZmbG9hdCA9IChmbG9h dCkgYXRvZigoY29uc3QgY2hhciopdmFsdWUtPnB0cik7ICAvLyBjb252ZXJ0cyBmcm9tIHN0cmlu ZyB0byBkb3VibGUsIGFuZCB0aGVuIHRvIGZsb2F0Ci0rICAgICAgdmFsdWUtPnB0ciA9ICZ2YWx1 ZS0+dmZsb2F0OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fRE9VQkxFX1NUUjoKLSsg ICAgICB2YWx1ZS0+dHlwZSA9IEJJTk5fRE9VQkxFOwotKyAgICAgIHZhbHVlLT52ZG91YmxlID0g YXRvZigoY29uc3QgY2hhciopdmFsdWUtPnB0cik7ICAvLyBjb252ZXJ0cyBmcm9tIHN0cmluZyB0 byBkb3VibGUKLSsgICAgICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52ZG91YmxlOwotKyAgICAgIGJy ZWFrOwotKyNlbmRpZgotKyAgICAvKgotKyAgICBjYXNlIEJJTk5fREVDSU1BTDoKLSsgICAgY2Fz ZSBCSU5OX0NVUlJFTkNZU1RSOgotKyAgICBjYXNlIEJJTk5fREFURToKLSsgICAgY2FzZSBCSU5O X0RBVEVUSU1FOgotKyAgICBjYXNlIEJJTk5fVElNRToKLSsgICAgKi8KLSsgIH0KLSsKLSsgIHJl dHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKyNpZiBCWVRF X09SREVSID09IExJVFRMRV9FTkRJQU4KLSsKLSsvLyBvbiBsaXR0bGUtZW5kaWFuIGRldmljZXMg d2Ugc3RvcmUgdGhlIHZhbHVlIHNvIHdlIGNhbiByZXR1cm4gYSBwb2ludGVyIHRvIGludGVnZXJz LgotKy8vIGl0J3MgdmFsaWQgb25seSBmb3Igc2luZ2xlLXRocmVhZGVkIGFwcHMuIG11bHRpLXRo cmVhZGVkIGFwcHMgbXVzdCB1c2UgdGhlIF9nZXRfIGZ1bmN0aW9ucyBpbnN0ZWFkLgotKwotK2Jp bm4gbG9jYWxfdmFsdWU7Ci0rCi0rQklOTl9QUklWQVRFIHZvaWQgKiBzdG9yZV92YWx1ZShiaW5u ICp2YWx1ZSkgewotKwotKyAgbWVtY3B5KCZsb2NhbF92YWx1ZSwgdmFsdWUsIHNpemVvZihiaW5u KSk7Ci0rCi0rICBzd2l0Y2ggKGJpbm5fZ2V0X3JlYWRfc3RvcmFnZSh2YWx1ZS0+dHlwZSkpIHsK LSsgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAgIC8vIHJldHVybiBhIHZhbGlkIHBv aW50ZXIKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9E V09SRDoKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgotKyAgICByZXR1cm4gJmxvY2FsX3Zh bHVlLnZpbnQzMjsgIC8vIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGNvbnZlcnRlZCB2YWx1 ZSwgZnJvbSBiaWctZW5kaWFuIHRvIGxpdHRsZS1lbmRpYW4KLSsgIH0KLSsKLSsgIHJldHVybiB2 YWx1ZS0+cHRyOyAgIC8vIHJldHVybnMgZnJvbSB0aGUgb24gc3RhY2sgdmFsdWUgdG8gYmUgdGhy ZWFkLXNhZmUgKGZvciBsaXN0LCBtYXAsIG9iamVjdCwgc3RyaW5nIGFuZCBibG9iKQotKwotK30K LSsKLSsjZW5kaWYKLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKiogUkVBRCBGVU5DVElP TlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0 X2dldF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGNvbnN0IGNoYXIgKmtleSwgYmlubiAqdmFsdWUp IHsKLSsgIGludCB0eXBlLCBjb3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKLSsgIHVuc2lnbmVk IGNoYXIgKnAsICpwbGltaXQ7Ci0rCi0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwotKyAgaWYgKHB0 ciA9PSBOVUxMIHx8IGtleSA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsK LSsKLSsgIC8vIGNoZWNrIHRoZSBoZWFkZXIKLSsgIGlmIChJc1ZhbGlkQmlubkhlYWRlcihwdHIs ICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpID09IEZBTFNFKSByZXR1cm4gRkFM U0U7Ci0rCi0rICBpZiAodHlwZSAhPSBCSU5OX09CSkVDVCkgcmV0dXJuIEZBTFNFOwotKyAgaWYg KGNvdW50ID09IDApIHJldHVybiBGQUxTRTsKLSsKLSsgIHAgPSAodW5zaWduZWQgY2hhciAqKSBw dHI7Ci0rICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7Ci0rCi0rICBwID0gU2VhcmNoRm9yS2V5KHAs IGhlYWRlcl9zaXplLCBzaXplLCBjb3VudCwga2V5KTsKLSsgIGlmIChwID09IEZBTFNFKSByZXR1 cm4gRkFMU0U7Ci0rCi0rICByZXR1cm4gR2V0VmFsdWUocCwgcGxpbWl0LCB2YWx1ZSk7Ci0rCi0r fQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX21hcF9n ZXRfdmFsdWUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgaWQsIGJpbm4gKnZhbHVlKSB7Ci0rICBpbnQg dHlwZSwgY291bnQsIHNpemU9MCwgaGVhZGVyX3NpemU7Ci0rICB1bnNpZ25lZCBjaGFyICpwLCAq cGxpbWl0OwotKwotKyAgcHRyID0gYmlubl9wdHIocHRyKTsKLSsgIGlmIChwdHIgPT0gTlVMTCB8 fCB2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBjaGVjayB0aGUgaGVhZGVy Ci0rICBpZiAoSXNWYWxpZEJpbm5IZWFkZXIocHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6ZSwgJmhl YWRlcl9zaXplKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKHR5cGUgIT0gQklO Tl9NQVApIHJldHVybiBGQUxTRTsKLSsgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gRkFMU0U7Ci0r Ci0rICBwID0gKHVuc2lnbmVkIGNoYXIgKikgcHRyOwotKyAgcGxpbWl0ID0gcCArIHNpemUgLSAx OwotKwotKyAgcCA9IFNlYXJjaEZvcklEKHAsIGhlYWRlcl9zaXplLCBzaXplLCBjb3VudCwgaWQp OwotKyAgaWYgKHAgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHVybiBHZXRWYWx1 ZShwLCBwbGltaXQsIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LStCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9nZXRfdmFsdWUoY29uc3Qgdm9pZCAqcHRyLCBpbnQg cG9zLCBiaW5uICp2YWx1ZSkgewotKyAgaW50ICBpLCB0eXBlLCBjb3VudCwgc2l6ZT0wLCBoZWFk ZXJfc2l6ZTsKLSsgIHVuc2lnbmVkIGNoYXIgKnAsICpwbGltaXQsICpiYXNlOwotKwotKyAgcHRy ID0gYmlubl9wdHIocHRyKTsKLSsgIGlmIChwdHIgPT0gTlVMTCB8fCB2YWx1ZSA9PSBOVUxMKSBy ZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBjaGVjayB0aGUgaGVhZGVyCi0rICBpZiAoSXNWYWxpZEJp bm5IZWFkZXIocHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6ZSwgJmhlYWRlcl9zaXplKSA9PSBGQUxT RSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKHR5cGUgIT0gQklOTl9MSVNUKSByZXR1cm4gRkFM U0U7Ci0rICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIEZBTFNFOwotKyAgaWYgKHBvcyA8PSAwIHx8 IHBvcyA+IGNvdW50KSByZXR1cm4gRkFMU0U7Ci0rICBwb3MtLTsgIC8vIGNvbnZlcnQgZnJvbSBi YXNlIDEgdG8gYmFzZSAwCi0rCi0rICBwID0gKHVuc2lnbmVkIGNoYXIgKikgcHRyOwotKyAgYmFz ZSA9IHA7Ci0rICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7Ci0rICBwICs9IGhlYWRlcl9zaXplOwot KwotKyAgZm9yIChpID0gMDsgaSA8IHBvczsgaSsrKSB7Ci0rICAgIHAgPSBBZHZhbmNlRGF0YVBv cyhwLCBwbGltaXQpOwotKyAgICBpZiAocCA9PSAwIHx8IHAgPCBiYXNlKSByZXR1cm4gRkFMU0U7 Ci0rICB9Ci0rCi0rICByZXR1cm4gR2V0VmFsdWUocCwgcGxpbWl0LCB2YWx1ZSk7Ci0rCi0rfQot KwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKiBSRUFEIFBBSVIgQlkgUE9TSVRJT04gKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBCT09MIGJpbm5fcmVhZF9wYWlyKGludCBl eHBlY3RlZF90eXBlLCBjb25zdCB2b2lkICpwdHIsIGludCBwb3MsIGludCAqcGlkLCBjaGFyICpw a2V5LCBiaW5uICp2YWx1ZSkgewotKyAgaW50ICB0eXBlLCBjb3VudCwgc2l6ZT0wLCBoZWFkZXJf c2l6ZTsKLSsgIGludCAgaSwgaW50MzIsIGlkID0gMCwgY291bnRlcj0wOwotKyAgdW5zaWduZWQg Y2hhciAqcCwgKnBsaW1pdCwgKmJhc2UsICprZXkgPSBOVUxMLCBsZW4gPSAwOwotKwotKyAgcHRy ID0gYmlubl9wdHIocHRyKTsKLSsKLSsgIC8vIGNoZWNrIHRoZSBoZWFkZXIKLSsgIGlmIChJc1Zh bGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpID09 IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAodHlwZSAhPSBleHBlY3RlZF90eXBlIHx8 IGNvdW50ID09IDAgfHwgcG9zIDwgMSB8fCBwb3MgPiBjb3VudCkgcmV0dXJuIEZBTFNFOwotKwot KyAgcCA9ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKLSsgIGJhc2UgPSBwOwotKyAgcGxpbWl0ID0g cCArIHNpemUgLSAxOwotKyAgcCArPSBoZWFkZXJfc2l6ZTsKLSsKLSsgIGZvciAoaSA9IDA7IGkg PCBjb3VudDsgaSsrKSB7Ci0rICAgIHN3aXRjaCAodHlwZSkgewotKyAgICAgIGNhc2UgQklOTl9N QVA6Ci0rICAgICAgICBpbnQzMiA9IHJlYWRfbWFwX2lkKCZwLCBwbGltaXQpOwotKyAgICAgICAg aWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgICAgIGlkID0gaW50MzI7Ci0rICAg ICAgICBicmVhazsKLSsgICAgICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICAgICAgbGVuID0gKigo dW5zaWduZWQgY2hhciAqKXApOyBwKys7Ci0rICAgICAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJu IEZBTFNFOwotKyAgICAgICAga2V5ID0gcDsKLSsgICAgICAgIHAgKz0gbGVuOwotKyAgICAgICAg aWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgICAgIGJyZWFrOwotKyAgICB9Ci0r ICAgIGNvdW50ZXIrKzsKLSsgICAgaWYgKGNvdW50ZXIgPT0gcG9zKSBnb3RvIGZvdW5kOwotKyAg ICAvLwotKyAgICBwID0gQWR2YW5jZURhdGFQb3MocCwgcGxpbWl0KTsKLSsgICAgaWYgKHAgPT0g MCB8fCBwIDwgYmFzZSkgcmV0dXJuIEZBTFNFOwotKyAgfQotKwotKyAgcmV0dXJuIEZBTFNFOwot KwotK2ZvdW5kOgotKwotKyAgc3dpdGNoICh0eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9NQVA6Ci0r ICAgICAgaWYgKHBpZCkgKnBpZCA9IGlkOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5f T0JKRUNUOgotKyAgICAgIGlmIChwa2V5KSB7Ci0rICAgICAgICBtZW1jcHkocGtleSwga2V5LCBs ZW4pOwotKyAgICAgICAgcGtleVtsZW5dID0gMDsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0r ICB9Ci0rCi0rICByZXR1cm4gR2V0VmFsdWUocCwgcGxpbWl0LCB2YWx1ZSk7Ci0rCi0rfQotKwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX21hcF9nZXRfcGFp cihjb25zdCB2b2lkICpwdHIsIGludCBwb3MsIGludCAqcGlkLCBiaW5uICp2YWx1ZSkgewotKwot KyAgcmV0dXJuIGJpbm5fcmVhZF9wYWlyKEJJTk5fTUFQLCBwdHIsIHBvcywgcGlkLCBOVUxMLCB2 YWx1ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRS WSBiaW5uX29iamVjdF9nZXRfcGFpcihjb25zdCB2b2lkICpwdHIsIGludCBwb3MsIGNoYXIgKnBr ZXksIGJpbm4gKnZhbHVlKSB7Ci0rCi0rICByZXR1cm4gYmlubl9yZWFkX3BhaXIoQklOTl9PQkpF Q1QsIHB0ciwgcG9zLCBOVUxMLCBwa2V5LCB2YWx1ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3BhaXIoY29uc3Qgdm9pZCAq bWFwLCBpbnQgcG9zLCBpbnQgKnBpZCkgewotKyAgYmlubiAqdmFsdWU7Ci0rCi0rICB2YWx1ZSA9 IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7Ci0rCi0rICBpZiAoYmlubl9yZWFk X3BhaXIoQklOTl9NQVAsIG1hcCwgcG9zLCBwaWQsIE5VTEwsIHZhbHVlKSA9PSBGQUxTRSkgewot KyAgICBmcmVlX2ZuKHZhbHVlKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICB2YWx1 ZS0+YWxsb2NhdGVkID0gVFJVRTsKLSsgIHJldHVybiB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfcGFpcihjb25z dCB2b2lkICpvYmosIGludCBwb3MsIGNoYXIgKnBrZXkpIHsKLSsgIGJpbm4gKnZhbHVlOwotKwot KyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOwotKwotKyAgaWYg KGJpbm5fcmVhZF9wYWlyKEJJTk5fT0JKRUNULCBvYmosIHBvcywgTlVMTCwgcGtleSwgdmFsdWUp ID09IEZBTFNFKSB7Ci0rICAgIGZyZWVfZm4odmFsdWUpOwotKyAgICByZXR1cm4gTlVMTDsKLSsg IH0KLSsKLSsgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIHZhbHVlOwotKwot K30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r dm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfcGFpcihjb25zdCB2b2lkICpwdHIsIGludCBw b3MsIGludCAqcGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5uIHZhbHVlOwot KwotKyAgaWYgKGJpbm5fbWFwX2dldF9wYWlyKHB0ciwgcG9zLCBwaWQsICZ2YWx1ZSkgPT0gRkFM U0UpIHJldHVybiBOVUxMOwotKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOwotKyAg aWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwotKyNpZiBCWVRFX09SREVSID09IExJVFRM RV9FTkRJQU4KLSsgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOwotKyNlbHNlCi0rICByZXR1 cm4gdmFsdWUucHRyOwotKyNlbmRpZgotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX29iamVjdF9yZWFkX3BhaXIoY29uc3Qgdm9pZCAqcHRy LCBpbnQgcG9zLCBjaGFyICpwa2V5LCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5u IHZhbHVlOwotKwotKyAgaWYgKGJpbm5fb2JqZWN0X2dldF9wYWlyKHB0ciwgcG9zLCBwa2V5LCAm dmFsdWUpID09IEZBTFNFKSByZXR1cm4gTlVMTDsKLSsgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFs dWUudHlwZTsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsjaWYgQllURV9P UkRFUiA9PSBMSVRUTEVfRU5ESUFOCi0rICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKLSsj ZWxzZQotKyAgcmV0dXJuIHZhbHVlLnB0cjsKLSsjZW5kaWYKLSsKLSt9Ci0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsvKioqIFNFUVVFTlRJQUwgUkVBRCBGVU5DVElPTlMgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2l0ZXJfaW5pdChiaW5uX2l0ZXIgKml0ZXIsIGNvbnN0 IHZvaWQgKnB0ciwgaW50IGV4cGVjdGVkX3R5cGUpIHsKLSsgIGludCAgdHlwZSwgY291bnQsIHNp emU9MCwgaGVhZGVyX3NpemU7Ci0rCi0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwotKyAgaWYgKHB0 ciA9PSBOVUxMIHx8IGl0ZXIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKyAgbWVtc2V0KGl0ZXIs IDAsIHNpemVvZihiaW5uX2l0ZXIpKTsKLSsKLSsgIC8vIGNoZWNrIHRoZSBoZWFkZXIKLSsgIGlm IChJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3Np emUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAodHlwZSAhPSBleHBlY3RlZF90 eXBlKSByZXR1cm4gRkFMU0U7Ci0rICAvL2lmIChjb3VudCA9PSAwKSByZXR1cm4gRkFMU0U7ICAt LSBzaG91bGQgbm90IGJlIHVzZWQKLSsKLSsgIGl0ZXItPnBsaW1pdCA9ICh1bnNpZ25lZCBjaGFy ICopcHRyICsgc2l6ZSAtIDE7Ci0rICBpdGVyLT5wbmV4dCA9ICh1bnNpZ25lZCBjaGFyICopcHRy ICsgaGVhZGVyX3NpemU7Ci0rICBpdGVyLT5jb3VudCA9IGNvdW50OwotKyAgaXRlci0+Y3VycmVu dCA9IDA7Ci0rICBpdGVyLT50eXBlID0gdHlwZTsKLSsKLSsgIHJldHVybiBUUlVFOwotK30KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X25leHQo Ymlubl9pdGVyICppdGVyLCBiaW5uICp2YWx1ZSkgewotKyAgdW5zaWduZWQgY2hhciAqcG5vdzsK LSsKLSsgIGlmIChpdGVyID09IE5VTEwgfHwgaXRlci0+cG5leHQgPT0gTlVMTCB8fCBpdGVyLT5w bmV4dCA+IGl0ZXItPnBsaW1pdCB8fCBpdGVyLT5jdXJyZW50ID4gaXRlci0+Y291bnQgfHwgaXRl ci0+dHlwZSAhPSBCSU5OX0xJU1QpIHJldHVybiBGQUxTRTsKLSsKLSsgIGl0ZXItPmN1cnJlbnQr KzsKLSsgIGlmIChpdGVyLT5jdXJyZW50ID4gaXRlci0+Y291bnQpIHJldHVybiBGQUxTRTsKLSsK LSsgIHBub3cgPSBpdGVyLT5wbmV4dDsKLSsgIGl0ZXItPnBuZXh0ID0gQWR2YW5jZURhdGFQb3Mo cG5vdywgaXRlci0+cGxpbWl0KTsKLSsgIGlmIChpdGVyLT5wbmV4dCAhPSAwICYmIGl0ZXItPnBu ZXh0IDwgcG5vdykgcmV0dXJuIEZBTFNFOwotKwotKyAgcmV0dXJuIEdldFZhbHVlKHBub3csIGl0 ZXItPnBsaW1pdCwgdmFsdWUpOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwot K0JJTk5fUFJJVkFURSBCT09MIGJpbm5fcmVhZF9uZXh0X3BhaXIoaW50IGV4cGVjdGVkX3R5cGUs IGJpbm5faXRlciAqaXRlciwgaW50ICpwaWQsIGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKSB7Ci0r ICBpbnQgIGludDMyLCBpZDsKLSsgIHVuc2lnbmVkIGNoYXIgKnAsICprZXk7Ci0rICB1bnNpZ25l ZCBzaG9ydCBsZW47Ci0rCi0rICBpZiAoaXRlciA9PSBOVUxMIHx8IGl0ZXItPnBuZXh0ID09IE5V TEwgfHwgaXRlci0+cG5leHQgPiBpdGVyLT5wbGltaXQgfHwgaXRlci0+Y3VycmVudCA+IGl0ZXIt PmNvdW50IHx8IGl0ZXItPnR5cGUgIT0gZXhwZWN0ZWRfdHlwZSkgcmV0dXJuIEZBTFNFOwotKwot KyAgaXRlci0+Y3VycmVudCsrOwotKyAgaWYgKGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5jb3VudCkg cmV0dXJuIEZBTFNFOwotKwotKyAgcCA9IGl0ZXItPnBuZXh0OwotKwotKyAgc3dpdGNoIChleHBl Y3RlZF90eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9NQVA6Ci0rICAgICAgaW50MzIgPSByZWFkX21h cF9pZCgmcCwgaXRlci0+cGxpbWl0KTsKLSsgICAgICBpZiAocCA+IGl0ZXItPnBsaW1pdCkgcmV0 dXJuIEZBTFNFOwotKyAgICAgIGlkID0gaW50MzI7Ci0rICAgICAgaWYgKHBpZCkgKnBpZCA9IGlk OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICAgIGxlbiA9ICoo KHVuc2lnbmVkIGNoYXIgKilwKTsgcCsrOwotKyAgICAgIGtleSA9IHA7Ci0rICAgICAgcCArPSBs ZW47Ci0rICAgICAgaWYgKHAgPiBpdGVyLT5wbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgICBp ZiAocGtleSkgewotKyAgICAgICAgbWVtY3B5KHBrZXksIGtleSwgbGVuKTsKLSsgICAgICAgIHBr ZXlbbGVuXSA9IDA7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgfQotKwotKyAgaXRlci0+ cG5leHQgPSBBZHZhbmNlRGF0YVBvcyhwLCBpdGVyLT5wbGltaXQpOwotKyAgaWYgKGl0ZXItPnBu ZXh0ICE9IDAgJiYgaXRlci0+cG5leHQgPCBwKSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR1cm4g R2V0VmFsdWUocCwgaXRlci0+cGxpbWl0LCB2YWx1ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX21hcF9uZXh0KGJpbm5faXRlciAqaXRl ciwgaW50ICpwaWQsIGJpbm4gKnZhbHVlKSB7Ci0rCi0rICByZXR1cm4gYmlubl9yZWFkX25leHRf cGFpcihCSU5OX01BUCwgaXRlciwgcGlkLCBOVUxMLCB2YWx1ZSk7Ci0rCi0rfQotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX29iamVjdF9uZXh0KGJpbm5f aXRlciAqaXRlciwgY2hhciAqcGtleSwgYmlubiAqdmFsdWUpIHsKLSsKLSsgIHJldHVybiBiaW5u X3JlYWRfbmV4dF9wYWlyKEJJTk5fT0JKRUNULCBpdGVyLCBOVUxMLCBwa2V5LCB2YWx1ZSk7Ci0r Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LStiaW5uICogQVBJRU5UUlkgYmlubl9saXN0X25leHRfdmFsdWUoYmlubl9pdGVyICppdGVyKSB7 Ci0rICBiaW5uICp2YWx1ZTsKLSsKLSsgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6 ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX2xpc3RfbmV4dChpdGVyLCB2YWx1ZSkgPT0gRkFM U0UpIHsKLSsgICAgZnJlZV9mbih2YWx1ZSk7Ci0rICAgIHJldHVybiBOVUxMOwotKyAgfQotKwot KyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7Ci0rICByZXR1cm4gdmFsdWU7Ci0rCi0rfQotKwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX25leHRf dmFsdWUoYmlubl9pdGVyICppdGVyLCBpbnQgKnBpZCkgewotKyAgYmlubiAqdmFsdWU7Ci0rCi0r ICB2YWx1ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7Ci0rCi0rICBpZiAo Ymlubl9tYXBfbmV4dChpdGVyLCBwaWQsIHZhbHVlKSA9PSBGQUxTRSkgewotKyAgICBmcmVlX2Zu KHZhbHVlKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICB2YWx1ZS0+YWxsb2NhdGVk ID0gVFJVRTsKLSsgIHJldHVybiB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfbmV4dF92YWx1ZShiaW5uX2l0ZXIg Kml0ZXIsIGNoYXIgKnBrZXkpIHsKLSsgIGJpbm4gKnZhbHVlOwotKwotKyAgdmFsdWUgPSAoYmlu biAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOwotKwotKyAgaWYgKGJpbm5fb2JqZWN0X25l eHQoaXRlciwgcGtleSwgdmFsdWUpID09IEZBTFNFKSB7Ci0rICAgIGZyZWVfZm4odmFsdWUpOwot KyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOwot KyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9yZWFkX25leHQo Ymlubl9pdGVyICppdGVyLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5uIHZhbHVl OwotKwotKyAgaWYgKGJpbm5fbGlzdF9uZXh0KGl0ZXIsICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVy biBOVUxMOwotKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOwotKyAgaWYgKHBzaXpl KSAqcHNpemUgPSB2YWx1ZS5zaXplOwotKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4K LSsgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOwotKyNlbHNlCi0rICByZXR1cm4gdmFsdWUu cHRyOwotKyNlbmRpZgotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK3ZvaWQg KiBBUElFTlRSWSBiaW5uX21hcF9yZWFkX25leHQoYmlubl9pdGVyICppdGVyLCBpbnQgKnBpZCwg aW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgewotKyAgYmlubiB2YWx1ZTsKLSsKLSsgIGlmIChiaW5u X21hcF9uZXh0KGl0ZXIsIHBpZCwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7Ci0rICBp ZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7Ci0rICBpZiAocHNpemUpICpwc2l6ZSA9IHZh bHVlLnNpemU7Ci0rI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotKyAgcmV0dXJuIHN0 b3JlX3ZhbHVlKCZ2YWx1ZSk7Ci0rI2Vsc2UKLSsgIHJldHVybiB2YWx1ZS5wdHI7Ci0rI2VuZGlm Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rdm9pZCAqIEFQSUVOVFJZIGJp bm5fb2JqZWN0X3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXksIGludCAqcHR5 cGUsIGludCAqcHNpemUpIHsKLSsgIGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9vYmplY3Rf bmV4dChpdGVyLCBwa2V5LCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4gTlVMTDsKLSsgIGlmIChw dHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUu c2l6ZTsKLSsjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCi0rICByZXR1cm4gc3RvcmVf dmFsdWUoJnZhbHVlKTsKLSsjZWxzZQotKyAgcmV0dXJuIHZhbHVlLnB0cjsKLSsjZW5kaWYKLSsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioqKiBFWFRFTkRF RCBJTlRFUkZBQ0UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rLyoqKioqKiBub25lIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUgY2Fs bCB0aGUgZnVuY3Rpb25zIGJlbG93ICoqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0raW50IEFQSUVOVFJZIGJpbm5fZ2V0X3dyaXRl X3N0b3JhZ2UoaW50IHR5cGUpIHsKLSsgIGludCBzdG9yYWdlX3R5cGU7Ci0rCi0rICBzd2l0Y2gg KHR5cGUpIHsKLSsgICAgY2FzZSBCSU5OX1NJTkdMRV9TVFI6Ci0rICAgIGNhc2UgQklOTl9ET1VC TEVfU1RSOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfU1RSSU5HOwotKwotKyAgICBjYXNl IEJJTk5fQk9PTDoKLSsgICAgICByZXR1cm4gQklOTl9TVE9SQUdFX05PQllURVM7Ci0rCi0rICAg IGRlZmF1bHQ6Ci0rICAgICAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUsICZzdG9yYWdlX3R5cGUs IE5VTEwpOwotKyAgICAgIHJldHVybiBzdG9yYWdlX3R5cGU7Ci0rICB9Ci0rCi0rfQotKwotKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK2ludCBBUElFTlRSWSBiaW5uX2dldF9y ZWFkX3N0b3JhZ2UoaW50IHR5cGUpIHsKLSsgIGludCBzdG9yYWdlX3R5cGU7Ci0rCi0rICBzd2l0 Y2ggKHR5cGUpIHsKLSsjaWZkZWYgQklOTl9FWFRFTkRFRAotKyAgICBjYXNlIEJJTk5fU0lOR0xF X1NUUjoKLSsgICAgICByZXR1cm4gQklOTl9TVE9SQUdFX0RXT1JEOwotKyAgICBjYXNlIEJJTk5f RE9VQkxFX1NUUjoKLSsgICAgICByZXR1cm4gQklOTl9TVE9SQUdFX1FXT1JEOwotKyNlbmRpZgot KyAgICBjYXNlIEJJTk5fQk9PTDoKLSsgICAgY2FzZSBCSU5OX1RSVUU6Ci0rICAgIGNhc2UgQklO Tl9GQUxTRToKLSsgICAgICByZXR1cm4gQklOTl9TVE9SQUdFX0RXT1JEOwotKyAgICBkZWZhdWx0 OgotKyAgICAgIGJpbm5fZ2V0X3R5cGVfaW5mbyh0eXBlLCAmc3RvcmFnZV90eXBlLCBOVUxMKTsK LSsgICAgICByZXR1cm4gc3RvcmFnZV90eXBlOwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9PTCBHZXRXcml0ZUNvbnZl cnRlZERhdGEoaW50ICpwdHlwZSwgdm9pZCAqKnBwdmFsdWUsIGludCAqcHNpemUpIHsKLSsgIGlu dCAgdHlwZTsKLSsgIGZsb2F0ICBmMTsKLSsgIGRvdWJsZSBkMTsKLSsgIGNoYXIgcHN0clsxMjhd OwotKwotKyAgVU5VU0VEKHBzdHIpOwotKyAgVU5VU0VEKGQxKTsKLSsgIFVOVVNFRChmMSk7Ci0r Ci0rICB0eXBlID0gKnB0eXBlOwotKwotKyAgaWYgKCpwcHZhbHVlID09IE5VTEwpIHsKLSsgICAg c3dpdGNoICh0eXBlKSB7Ci0rICAgICAgY2FzZSBCSU5OX05VTEw6Ci0rICAgICAgY2FzZSBCSU5O X1RSVUU6Ci0rICAgICAgY2FzZSBCSU5OX0ZBTFNFOgotKyAgICAgICAgYnJlYWs7Ci0rICAgICAg Y2FzZSBCSU5OX1NUUklORzoKLSsgICAgICBjYXNlIEJJTk5fQkxPQjoKLSsgICAgICAgIGlmICgq cHNpemUgPT0gMCkgYnJlYWs7Ci0rCS8qIGZhbGwgdGhyb3VnaCAqLwotKyAgICAgIGRlZmF1bHQ6 Ci0rICAgICAgICByZXR1cm4gRkFMU0U7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHN3aXRjaCAodHlw ZSkgewotKyNpZmRlZiBCSU5OX0VYVEVOREVECi0rICAgIGNhc2UgQklOTl9TSU5HTEU6Ci0rICAg ICAgZjEgPSAqKihmbG9hdCoqKXBwdmFsdWU7Ci0rICAgICAgZDEgPSBmMTsgIC8vIGNvbnZlcnQg ZnJvbSBmbG9hdCAoMzJiaXRzKSB0byBkb3VibGUgKDY0Yml0cykKLSsgICAgICB0eXBlID0gQklO Tl9TSU5HTEVfU1RSOwotKyAgICAgIGdvdG8gY29udl9kb3VibGU7Ci0rICAgIGNhc2UgQklOTl9E T1VCTEU6Ci0rICAgICAgZDEgPSAqKihkb3VibGUqKilwcHZhbHVlOwotKyAgICAgIHR5cGUgPSBC SU5OX0RPVUJMRV9TVFI7Ci0rY29udl9kb3VibGU6Ci0rICAgICAgLy8gdGhlICclLjE3ZScgaXMg bW9yZSBwcmVjaXNlIHRoYW4gdGhlICclZycKLSsgICAgICBzbnByaW50Zihwc3RyLCAxMjcsICIl LjE3ZSIsIGQxKTsKLSsgICAgICAqcHB2YWx1ZSA9IHBzdHI7Ci0rICAgICAgKnB0eXBlID0gdHlw ZTsKLSsgICAgICBicmVhazsKLSsjZW5kaWYKLSsgICAgY2FzZSBCSU5OX0RFQ0lNQUw6Ci0rICAg IGNhc2UgQklOTl9DVVJSRU5DWVNUUjoKLSsgICAgICAvKgotKyAgICAgIGlmIChiaW5uX21hbGxv Y19leHRwdHIoMTI4KSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rICAgICAgc25wcmludGYoc3B0 ciwgMTI3LCAiJUUiLCAqKnBwdmFsdWUpOwotKyAgICAgICpwcHZhbHVlID0gc3B0cjsKLSsgICAg ICAqLwotKyAgICAgIHJldHVybiBUUlVFOyAgLy8hIHRlbXBvcmFyeQotKyAgICAgIGJyZWFrOwot KwotKyAgICBjYXNlIEJJTk5fREFURToKLSsgICAgY2FzZSBCSU5OX0RBVEVUSU1FOgotKyAgICBj YXNlIEJJTk5fVElNRToKLSsgICAgICByZXR1cm4gVFJVRTsgIC8vISB0ZW1wb3JhcnkKLSsgICAg ICBicmVhazsKLSsKLSsgICAgY2FzZSBCSU5OX0JPT0w6Ci0rICAgICAgaWYgKCoqKChCT09MKiop cHB2YWx1ZSkgPT0gRkFMU0UpIHsKLSsgICAgICAgIHR5cGUgPSBCSU5OX0ZBTFNFOwotKyAgICAg IH0gZWxzZSB7Ci0rICAgICAgICB0eXBlID0gQklOTl9UUlVFOwotKyAgICAgIH0KLSsgICAgICAq cHR5cGUgPSB0eXBlOwotKyAgICAgIGJyZWFrOwotKwotKyAgfQotKwotKyAgcmV0dXJuIFRSVUU7 Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJ VkFURSBpbnQgdHlwZV9mYW1pbHkoaW50IHR5cGUpICB7Ci0rCi0rICBzd2l0Y2ggKHR5cGUpIHsK LSsgICAgY2FzZSBCSU5OX0xJU1Q6Ci0rICAgIGNhc2UgQklOTl9NQVA6Ci0rICAgIGNhc2UgQklO Tl9PQkpFQ1Q6Ci0rICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX0JJTk47Ci0rCi0rICAgIGNhc2Ug QklOTl9JTlQ4OgotKyAgICBjYXNlIEJJTk5fSU5UMTY6Ci0rICAgIGNhc2UgQklOTl9JTlQzMjoK LSsgICAgY2FzZSBCSU5OX0lOVDY0OgotKyAgICBjYXNlIEJJTk5fVUlOVDg6Ci0rICAgIGNhc2Ug QklOTl9VSU5UMTY6Ci0rICAgIGNhc2UgQklOTl9VSU5UMzI6Ci0rICAgIGNhc2UgQklOTl9VSU5U NjQ6Ci0rICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX0lOVDsKLSsKLSsgICAgY2FzZSBCSU5OX0ZM T0FUMzI6Ci0rICAgIGNhc2UgQklOTl9GTE9BVDY0OgotKyAgICAvL2Nhc2UgQklOTl9TSU5HTEU6 Ci0rICAgIGNhc2UgQklOTl9TSU5HTEVfU1RSOgotKyAgICAvL2Nhc2UgQklOTl9ET1VCTEU6Ci0r ICAgIGNhc2UgQklOTl9ET1VCTEVfU1RSOgotKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9GTE9B VDsKLSsKLSsgICAgY2FzZSBCSU5OX1NUUklORzoKLSsgICAgY2FzZSBCSU5OX0hUTUw6Ci0rICAg IGNhc2UgQklOTl9DU1M6Ci0rICAgIGNhc2UgQklOTl9YTUw6Ci0rICAgIGNhc2UgQklOTl9KU09O OgotKyAgICBjYXNlIEJJTk5fSkFWQVNDUklQVDoKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlf U1RSSU5HOwotKwotKyAgICBjYXNlIEJJTk5fQkxPQjoKLSsgICAgY2FzZSBCSU5OX0pQRUc6Ci0r ICAgIGNhc2UgQklOTl9HSUY6Ci0rICAgIGNhc2UgQklOTl9QTkc6Ci0rICAgIGNhc2UgQklOTl9C TVA6Ci0rICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX0JMT0I7Ci0rCi0rICAgIGNhc2UgQklOTl9E RUNJTUFMOgotKyAgICBjYXNlIEJJTk5fQ1VSUkVOQ1k6Ci0rICAgIGNhc2UgQklOTl9EQVRFOgot KyAgICBjYXNlIEJJTk5fVElNRToKLSsgICAgY2FzZSBCSU5OX0RBVEVUSU1FOgotKyAgICAgIHJl dHVybiBCSU5OX0ZBTUlMWV9TVFJJTkc7Ci0rCi0rICAgIGNhc2UgQklOTl9CT09MOgotKyAgICAg IHJldHVybiBCSU5OX0ZBTUlMWV9CT09MOwotKwotKyAgICBjYXNlIEJJTk5fTlVMTDoKLSsgICAg ICByZXR1cm4gQklOTl9GQU1JTFlfTlVMTDsKLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICAvLyBp ZiBpdCB3YXNuJ3QgZm91bmQKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlfTk9ORTsKLSsgIH0K LSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklW QVRFIGludCBpbnRfdHlwZShpbnQgdHlwZSkgIHsKLSsKLSsgIHN3aXRjaCAodHlwZSkgewotKyAg Y2FzZSBCSU5OX0lOVDg6Ci0rICBjYXNlIEJJTk5fSU5UMTY6Ci0rICBjYXNlIEJJTk5fSU5UMzI6 Ci0rICBjYXNlIEJJTk5fSU5UNjQ6Ci0rICAgIHJldHVybiBCSU5OX1NJR05FRF9JTlQ7Ci0rCi0r ICBjYXNlIEJJTk5fVUlOVDg6Ci0rICBjYXNlIEJJTk5fVUlOVDE2OgotKyAgY2FzZSBCSU5OX1VJ TlQzMjoKLSsgIGNhc2UgQklOTl9VSU5UNjQ6Ci0rICAgIHJldHVybiBCSU5OX1VOU0lHTkVEX0lO VDsKLSsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiAwOwotKyAgfQotKwotK30KLSsKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9PTCBjb3B5X3Jh d192YWx1ZShjb25zdCB2b2lkICpwc291cmNlLCB2b2lkICpwZGVzdCwgaW50IGRhdGFfc3RvcmUp IHsKLSsKLSsgIHN3aXRjaCAoZGF0YV9zdG9yZSkgewotKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9C WVRFUzoKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRFOgotKyAgICAqKChj aGFyICopIHBkZXN0KSA9ICooY2hhciAqKXBzb3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBC SU5OX1NUT1JBR0VfV09SRDoKLSsgICAgKigoc2hvcnQgKikgcGRlc3QpID0gKihzaG9ydCAqKXBz b3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6Ci0rICAgICoo KGludCAqKSBwZGVzdCkgPSAqKGludCAqKXBzb3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBC SU5OX1NUT1JBR0VfUVdPUkQ6Ci0rICAgICooKHVpbnQ2NCAqKSBwZGVzdCkgPSAqKHVpbnQ2NCAq KXBzb3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKLSsgIGNh c2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoK LSsgICAgKigoY2hhciAqKikgcGRlc3QpID0gKGNoYXIgKilwc291cmNlOwotKyAgICBicmVhazsK LSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIHJldHVybiBUUlVF OwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BS SVZBVEUgQk9PTCBjb3B5X2ludF92YWx1ZShjb25zdCB2b2lkICpwc291cmNlLCB2b2lkICpwZGVz dCwgaW50IHNvdXJjZV90eXBlLCBpbnQgZGVzdF90eXBlKSB7Ci0rICB1aW50NjQgdnVpbnQ2NCA9 IDA7IGludDY0IHZpbnQ2NCA9IDA7Ci0rCi0rICBzd2l0Y2ggKHNvdXJjZV90eXBlKSB7Ci0rICBj YXNlIEJJTk5fSU5UODoKLSsgICAgdmludDY0ID0gKihzaWduZWQgY2hhciAqKXBzb3VyY2U7Ci0r ICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX0lOVDE2OgotKyAgICB2aW50NjQgPSAqKHNob3J0ICop cHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fSU5UMzI6Ci0rICAgIHZpbnQ2NCA9 ICooaW50ICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fSU5UNjQ6Ci0rICAg IHZpbnQ2NCA9ICooaW50NjQgKilwc291cmNlOwotKyAgICBicmVhazsKLSsKLSsgIGNhc2UgQklO Tl9VSU5UODoKLSsgICAgdnVpbnQ2NCA9ICoodW5zaWduZWQgY2hhciAqKXBzb3VyY2U7Ci0rICAg IGJyZWFrOwotKyAgY2FzZSBCSU5OX1VJTlQxNjoKLSsgICAgdnVpbnQ2NCA9ICoodW5zaWduZWQg c2hvcnQgKilwc291cmNlOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9VSU5UMzI6Ci0rICAg IHZ1aW50NjQgPSAqKHVuc2lnbmVkIGludCAqKXBzb3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2Fz ZSBCSU5OX1VJTlQ2NDoKLSsgICAgdnVpbnQ2NCA9ICoodWludDY0ICopcHNvdXJjZTsKLSsgICAg YnJlYWs7Ci0rCi0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rCi0r ICAvLyBjb3B5IGZyb20gaW50NjQgdG8gdWludDY0LCBpZiBwb3NzaWJsZQotKwotKyAgaWYgKGlu dF90eXBlKHNvdXJjZV90eXBlKSA9PSBCSU5OX1VOU0lHTkVEX0lOVCAmJiBpbnRfdHlwZShkZXN0 X3R5cGUpID09IEJJTk5fU0lHTkVEX0lOVCkgewotKyAgICBpZiAodnVpbnQ2NCA+IElOVDY0X01B WCkgcmV0dXJuIEZBTFNFOwotKyAgICB2aW50NjQgPSB2dWludDY0OwotKyAgfSBlbHNlIGlmIChp bnRfdHlwZShzb3VyY2VfdHlwZSkgPT0gQklOTl9TSUdORURfSU5UICYmIGludF90eXBlKGRlc3Rf dHlwZSkgPT0gQklOTl9VTlNJR05FRF9JTlQpIHsKLSsgICAgaWYgKHZpbnQ2NCA8IDApIHJldHVy biBGQUxTRTsKLSsgICAgdnVpbnQ2NCA9IHZpbnQ2NDsKLSsgIH0KLSsKLSsKLSsgIHN3aXRjaCAo ZGVzdF90eXBlKSB7Ci0rICBjYXNlIEJJTk5fSU5UODoKLSsgICAgaWYgKHZpbnQ2NCA8IElOVDhf TUlOIHx8IHZpbnQ2NCA+IElOVDhfTUFYKSByZXR1cm4gRkFMU0U7Ci0rICAgICooc2lnbmVkIGNo YXIgKilwZGVzdCA9IChzaWduZWQgY2hhcikgdmludDY0OwotKyAgICBicmVhazsKLSsgIGNhc2Ug QklOTl9JTlQxNjoKLSsgICAgaWYgKHZpbnQ2NCA8IElOVDE2X01JTiB8fCB2aW50NjQgPiBJTlQx Nl9NQVgpIHJldHVybiBGQUxTRTsKLSsgICAgKihzaG9ydCAqKXBkZXN0ID0gKHNob3J0KSB2aW50 NjQ7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX0lOVDMyOgotKyAgICBpZiAodmludDY0IDwg SU5UMzJfTUlOIHx8IHZpbnQ2NCA+IElOVDMyX01BWCkgcmV0dXJuIEZBTFNFOwotKyAgICAqKGlu dCAqKXBkZXN0ID0gKGludCkgdmludDY0OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9JTlQ2 NDoKLSsgICAgKihpbnQ2NCAqKXBkZXN0ID0gdmludDY0OwotKyAgICBicmVhazsKLSsKLSsgIGNh c2UgQklOTl9VSU5UODoKLSsgICAgaWYgKHZ1aW50NjQgPiBVSU5UOF9NQVgpIHJldHVybiBGQUxT RTsKLSsgICAgKih1bnNpZ25lZCBjaGFyICopcGRlc3QgPSAodW5zaWduZWQgY2hhcikgdnVpbnQ2 NDsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fVUlOVDE2OgotKyAgICBpZiAodnVpbnQ2NCA+ IFVJTlQxNl9NQVgpIHJldHVybiBGQUxTRTsKLSsgICAgKih1bnNpZ25lZCBzaG9ydCAqKXBkZXN0 ID0gKHVuc2lnbmVkIHNob3J0KSB2dWludDY0OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9V SU5UMzI6Ci0rICAgIGlmICh2dWludDY0ID4gVUlOVDMyX01BWCkgcmV0dXJuIEZBTFNFOwotKyAg ICAqKHVuc2lnbmVkIGludCAqKXBkZXN0ID0gKHVuc2lnbmVkIGludCkgdnVpbnQ2NDsKLSsgICAg YnJlYWs7Ci0rICBjYXNlIEJJTk5fVUlOVDY0OgotKyAgICAqKHVpbnQ2NCAqKXBkZXN0ID0gdnVp bnQ2NDsKLSsgICAgYnJlYWs7Ci0rCi0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gRkFMU0U7Ci0r ICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgY29weV9mbG9hdF92YWx1ZShjb25zdCB2 b2lkICpwc291cmNlLCB2b2lkICpwZGVzdCwgaW50IHNvdXJjZV90eXBlLCBpbnQgZGVzdF90eXBl KSB7Ci0rCi0rICBzd2l0Y2ggKHNvdXJjZV90eXBlKSB7Ci0rICBjYXNlIEJJTk5fRkxPQVQzMjoK LSsgICAgKihkb3VibGUgKilwZGVzdCA9ICooZmxvYXQgKilwc291cmNlOwotKyAgICBicmVhazsK LSsgIGNhc2UgQklOTl9GTE9BVDY0OgotKyAgICAqKGZsb2F0ICopcGRlc3QgPSAoZmxvYXQpICoo ZG91YmxlICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4g RkFMU0U7Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIHZvaWQgemVyb192YWx1ZShjb25z dCB2b2lkICpwdmFsdWUsIGludCB0eXBlKSB7Ci0rICAvL2ludCBzaXplPTA7Ci0rCi0rICBzd2l0 Y2ggKGJpbm5fZ2V0X3JlYWRfc3RvcmFnZSh0eXBlKSkgewotKyAgY2FzZSBCSU5OX1NUT1JBR0Vf Tk9CWVRFUzoKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRFOgotKyAgICAq KChjaGFyICopIHB2YWx1ZSkgPSAwOwotKyAgICAvL3NpemU9MTsKLSsgICAgYnJlYWs7Ci0rICBj YXNlIEJJTk5fU1RPUkFHRV9XT1JEOgotKyAgICAqKChzaG9ydCAqKSBwdmFsdWUpID0gMDsKLSsg ICAgLy9zaXplPTI7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6Ci0r ICAgICooKGludCAqKSBwdmFsdWUpID0gMDsKLSsgICAgLy9zaXplPTQ7Ci0rICAgIGJyZWFrOwot KyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6Ci0rICAgICooKHVpbnQ2NCAqKSBwdmFsdWUpID0g MDsKLSsgICAgLy9zaXplPTg7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQkxP QjoKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0NP TlRBSU5FUjoKLSsgICAgKihjaGFyICoqKXB2YWx1ZSA9IE5VTEw7Ci0rICAgIGJyZWFrOwotKyAg fQotKwotKyAgLy9pZiAoc2l6ZT4wKSBtZW1zZXQocHZhbHVlLCAwLCBzaXplKTsKLSsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wg Y29weV92YWx1ZSh2b2lkICpwc291cmNlLCB2b2lkICpwZGVzdCwgaW50IHNvdXJjZV90eXBlLCBp bnQgZGVzdF90eXBlLCBpbnQgZGF0YV9zdG9yZSkgewotKwotKyAgaWYgKHR5cGVfZmFtaWx5KHNv dXJjZV90eXBlKSAhPSB0eXBlX2ZhbWlseShkZXN0X3R5cGUpKSByZXR1cm4gRkFMU0U7Ci0rCi0r ICBpZiAodHlwZV9mYW1pbHkoc291cmNlX3R5cGUpID09IEJJTk5fRkFNSUxZX0lOVCAmJiBzb3Vy Y2VfdHlwZSAhPSBkZXN0X3R5cGUpIHsKLSsgICAgcmV0dXJuIGNvcHlfaW50X3ZhbHVlKHBzb3Vy Y2UsIHBkZXN0LCBzb3VyY2VfdHlwZSwgZGVzdF90eXBlKTsKLSsgIH0gZWxzZSBpZiAodHlwZV9m YW1pbHkoc291cmNlX3R5cGUpID09IEJJTk5fRkFNSUxZX0ZMT0FUICYmIHNvdXJjZV90eXBlICE9 IGRlc3RfdHlwZSkgewotKyAgICByZXR1cm4gY29weV9mbG9hdF92YWx1ZShwc291cmNlLCBwZGVz dCwgc291cmNlX3R5cGUsIGRlc3RfdHlwZSk7Ci0rICB9IGVsc2UgewotKyAgICByZXR1cm4gY29w eV9yYXdfdmFsdWUocHNvdXJjZSwgcGRlc3QsIGRhdGFfc3RvcmUpOwotKyAgfQotKwotK30KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqIFdSSVRFIEZVTkNUSU9OUyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVO VFJZIGJpbm5fbGlzdF9hZGQoYmlubiAqbGlzdCwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50 IHNpemUpIHsKLSsKLSsgIGlmIChHZXRXcml0ZUNvbnZlcnRlZERhdGEoJnR5cGUsICZwdmFsdWUs ICZzaXplKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgcmV0dXJuIGJpbm5fbGlzdF9h ZGRfcmF3KGxpc3QsIHR5cGUsIHB2YWx1ZSwgc2l6ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfc2V0KGJpbm4g Km1hcCwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgewotKwotKyAg aWYgKEdldFdyaXRlQ29udmVydGVkRGF0YSgmdHlwZSwgJnB2YWx1ZSwgJnNpemUpID09IEZBTFNF KSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR1cm4gYmlubl9tYXBfc2V0X3JhdyhtYXAsIGlkLCB0 eXBlLCBwdmFsdWUsIHNpemUpOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3NldChiaW5uICpvYmosIGNvbnN0 IGNoYXIgKmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKLSsKLSsgIGlm IChHZXRXcml0ZUNvbnZlcnRlZERhdGEoJnR5cGUsICZwdmFsdWUsICZzaXplKSA9PSBGQUxTRSkg cmV0dXJuIEZBTFNFOwotKwotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldF9yYXcob2JqLCBrZXks IHR5cGUsIHB2YWx1ZSwgc2l6ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotKwotKy8vIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB0aGUgd3JhcHBlcnMKLStC T09MIEFQSUVOVFJZIGJpbm5fYWRkX3ZhbHVlKGJpbm4gKml0ZW0sIGludCBiaW5uX3R5cGUsIGlu dCBpZCwgY2hhciAqbmFtZSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKLSsK LSsgIHN3aXRjaCAoYmlubl90eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9MSVNUOgotKyAgICAgIHJl dHVybiBiaW5uX2xpc3RfYWRkKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSk7Ci0rICAgIGNhc2Ug QklOTl9NQVA6Ci0rICAgICAgcmV0dXJuIGJpbm5fbWFwX3NldChpdGVtLCBpZCwgdHlwZSwgcHZh bHVlLCBzaXplKTsKLSsgICAgY2FzZSBCSU5OX09CSkVDVDoKLSsgICAgICByZXR1cm4gYmlubl9v YmplY3Rfc2V0KGl0ZW0sIG5hbWUsIHR5cGUsIHB2YWx1ZSwgc2l6ZSk7Ci0rICAgIGRlZmF1bHQ6 Ci0rICAgICAgcmV0dXJuIEZBTFNFOwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09M IEFQSUVOVFJZIGJpbm5fbGlzdF9hZGRfbmV3KGJpbm4gKmxpc3QsIGJpbm4gKnZhbHVlKSB7Ci0r ICBCT09MIHJldHZhbDsKLSsKLSsgIHJldHZhbCA9IGJpbm5fbGlzdF9hZGRfdmFsdWUobGlzdCwg dmFsdWUpOwotKyAgaWYgKHZhbHVlKSBmcmVlX2ZuKHZhbHVlKTsKLSsgIHJldHVybiByZXR2YWw7 Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJ RU5UUlkgYmlubl9tYXBfc2V0X25ldyhiaW5uICptYXAsIGludCBpZCwgYmlubiAqdmFsdWUpIHsK LSsgIEJPT0wgcmV0dmFsOwotKwotKyAgcmV0dmFsID0gYmlubl9tYXBfc2V0X3ZhbHVlKG1hcCwg aWQsIHZhbHVlKTsKLSsgIGlmICh2YWx1ZSkgZnJlZV9mbih2YWx1ZSk7Ci0rICByZXR1cm4gcmV0 dmFsOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09M IEFQSUVOVFJZIGJpbm5fb2JqZWN0X3NldF9uZXcoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXks IGJpbm4gKnZhbHVlKSB7Ci0rICBCT09MIHJldHZhbDsKLSsKLSsgIHJldHZhbCA9IGJpbm5fb2Jq ZWN0X3NldF92YWx1ZShvYmosIGtleSwgdmFsdWUpOwotKyAgaWYgKHZhbHVlKSBmcmVlX2ZuKHZh bHVlKTsKLSsgIHJldHVybiByZXR2YWw7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKy8qKiogUkVBRCBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3RfdmFsdWUo Y29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zKSB7Ci0rICBiaW5uICp2YWx1ZTsKLSsKLSsgIHZhbHVl ID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX2xp c3RfZ2V0X3ZhbHVlKHB0ciwgcG9zLCB2YWx1ZSkgPT0gRkFMU0UpIHsKLSsgICAgZnJlZV9mbih2 YWx1ZSk7Ci0rICAgIHJldHVybiBOVUxMOwotKyAgfQotKwotKyAgdmFsdWUtPmFsbG9jYXRlZCA9 IFRSVUU7Ci0rICByZXR1cm4gdmFsdWU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF92YWx1ZShjb25zdCB2b2lk ICpwdHIsIGludCBpZCkgewotKyAgYmlubiAqdmFsdWU7Ci0rCi0rICB2YWx1ZSA9IChiaW5uICop IGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7Ci0rCi0rICBpZiAoYmlubl9tYXBfZ2V0X3ZhbHVl KHB0ciwgaWQsIHZhbHVlKSA9PSBGQUxTRSkgewotKyAgICBmcmVlX2ZuKHZhbHVlKTsKLSsgICAg cmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsKLSsgIHJl dHVybiB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r Ci0rYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwgY29u c3QgY2hhciAqa2V5KSB7Ci0rICBiaW5uICp2YWx1ZTsKLSsKLSsgIHZhbHVlID0gKGJpbm4gKikg Ymlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX29iamVjdF9nZXRfdmFs dWUocHRyLCBrZXksIHZhbHVlKSA9PSBGQUxTRSkgewotKyAgICBmcmVlX2ZuKHZhbHVlKTsKLSsg ICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsKLSsg IHJldHVybiB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3RfcmVhZChjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5uIHZh bHVlOwotKwotKyAgaWYgKGJpbm5fbGlzdF9nZXRfdmFsdWUobGlzdCwgcG9zLCAmdmFsdWUpID09 IEZBTFNFKSByZXR1cm4gTlVMTDsKLSsgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsK LSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsjaWYgQllURV9PUkRFUiA9PSBM SVRUTEVfRU5ESUFOCi0rICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKLSsjZWxzZQotKyAg cmV0dXJuIHZhbHVlLnB0cjsKLSsjZW5kaWYKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZChjb25zdCB2b2lkICptYXAsIGlu dCBpZCwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgewotKyAgYmlubiB2YWx1ZTsKLSsKLSsgIGlm IChiaW5uX21hcF9nZXRfdmFsdWUobWFwLCBpZCwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5V TEw7Ci0rICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7Ci0rICBpZiAocHNpemUpICpw c2l6ZSA9IHZhbHVlLnNpemU7Ci0rI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotKyAg cmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7Ci0rI2Vsc2UKLSsgIHJldHVybiB2YWx1ZS5wdHI7 Ci0rI2VuZGlmCi0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rdm9pZCAqIEFQ SUVOVFJZIGJpbm5fb2JqZWN0X3JlYWQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXks IGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKLSsgIGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlu bl9vYmplY3RfZ2V0X3ZhbHVlKG9iaiwga2V5LCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4gTlVM TDsKLSsgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKLSsgIGlmIChwc2l6ZSkgKnBz aXplID0gdmFsdWUuc2l6ZTsKLSsjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCi0rICBy ZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKLSsjZWxzZQotKyAgcmV0dXJuIHZhbHVlLnB0cjsK LSsjZW5kaWYKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2dldChjb25zdCB2b2lkICpwdHIs IGludCBwb3MsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCAqcHNpemUpIHsKLSsgIGJpbm4g dmFsdWU7Ci0rICBpbnQgc3RvcmFnZV90eXBlOwotKwotKyAgc3RvcmFnZV90eXBlID0gYmlubl9n ZXRfcmVhZF9zdG9yYWdlKHR5cGUpOwotKyAgaWYgKHN0b3JhZ2VfdHlwZSAhPSBCSU5OX1NUT1JB R0VfTk9CWVRFUyAmJiBwdmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAgemVyb192 YWx1ZShwdmFsdWUsIHR5cGUpOwotKwotKyAgaWYgKGJpbm5fbGlzdF9nZXRfdmFsdWUocHRyLCBw b3MsICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChjb3B5X3ZhbHVl KHZhbHVlLnB0ciwgcHZhbHVlLCB2YWx1ZS50eXBlLCB0eXBlLCBzdG9yYWdlX3R5cGUpID09IEZB TFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7 Ci0rCi0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldChjb25zdCB2b2lkICpwdHIsIGludCBpZCwgaW50 IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSkgewotKyAgYmlubiB2YWx1ZTsKLSsgIGlu dCBzdG9yYWdlX3R5cGU7Ci0rCi0rICBzdG9yYWdlX3R5cGUgPSBiaW5uX2dldF9yZWFkX3N0b3Jh Z2UodHlwZSk7Ci0rICBpZiAoc3RvcmFnZV90eXBlICE9IEJJTk5fU1RPUkFHRV9OT0JZVEVTICYm IHB2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICB6ZXJvX3ZhbHVlKHB2YWx1ZSwg dHlwZSk7Ci0rCi0rICBpZiAoYmlubl9tYXBfZ2V0X3ZhbHVlKHB0ciwgaWQsICZ2YWx1ZSkgPT0g RkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChjb3B5X3ZhbHVlKHZhbHVlLnB0ciwgcHZh bHVlLCB2YWx1ZS50eXBlLCB0eXBlLCBzdG9yYWdlX3R5cGUpID09IEZBTFNFKSByZXR1cm4gRkFM U0U7Ci0rCi0rICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7Ci0rCi0rICByZXR1cm4g VFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsvLyAgIGlmIChiaW5u X29iamVjdF9nZXQob2JqLCAibXVsdGlwbGllciIsIEJJTk5fSU5UMzIsICZtdWx0aXBsaWVyLCBO VUxMKSA9PSBGQUxTRSkgeHh4OwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0KGNv bnN0IHZvaWQgKnB0ciwgY29uc3QgY2hhciAqa2V5LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBp bnQgKnBzaXplKSB7Ci0rICBiaW5uIHZhbHVlOwotKyAgaW50IHN0b3JhZ2VfdHlwZTsKLSsKLSsg IHN0b3JhZ2VfdHlwZSA9IGJpbm5fZ2V0X3JlYWRfc3RvcmFnZSh0eXBlKTsKLSsgIGlmIChzdG9y YWdlX3R5cGUgIT0gQklOTl9TVE9SQUdFX05PQllURVMgJiYgcHZhbHVlID09IE5VTEwpIHJldHVy biBGQUxTRTsKLSsKLSsgIHplcm9fdmFsdWUocHZhbHVlLCB0eXBlKTsKLSsKLSsgIGlmIChiaW5u X29iamVjdF9nZXRfdmFsdWUocHRyLCBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxT RTsKLSsKLSsgIGlmIChjb3B5X3ZhbHVlKHZhbHVlLnB0ciwgcHZhbHVlLCB2YWx1ZS50eXBlLCB0 eXBlLCBzdG9yYWdlX3R5cGUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAocHNp emUpICpwc2l6ZSA9IHZhbHVlLnNpemU7Ci0rCi0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKy8vIHRoZXNl IGZ1bmN0aW9ucyBiZWxvdyBtYXkgbm90IGJlIGltcGxlbWVudGVkIGFzIGlubGluZSBmdW5jdGlv bnMsIGJlY2F1c2UKLSsvLyB0aGV5IHVzZSBhIGxvdCBvZiBzcGFjZSwgZXZlbiBmb3IgdGhlIHZh cmlhYmxlLiBzbyB0aGV5IHdpbGwgYmUgZXhwb3J0ZWQuCi0rCi0rLy8gYnV0IHdoYXQgYWJvdXQg dXNpbmcgYXMgc3RhdGljPwotKy8vICAgIGlzIHRoZXJlIGFueSBwcm9ibGVtIHdpdGggd3JhcHBl cnM/IGNhbiB0aGVzZSB3cmFwcGVycyBpbXBsZW1lbnQgdGhlc2UgZnVuY3Rpb25zIHVzaW5nIHRo ZSBoZWFkZXI/Ci0rLy8gICAgaWYgYXMgc3RhdGljLCB3aWxsIHRoZXkgYmUgcHJlc2VudCBldmVu IG9uIG1vZHVsZXMgdGhhdCBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucz8KLSsKLStzaWduZWQgY2hh ciBBUElFTlRSWSBiaW5uX2xpc3RfaW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0r ICBzaWduZWQgY2hhciB2YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5O X0lOVDgsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Nob3J0 IEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQxNihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0r ICBzaG9ydCB2YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDE2 LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStpbnQgQVBJRU5U UlkgYmlubl9saXN0X2ludDMyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIGludCB2 YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDMyLCAmdmFsdWUs IE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStpbnQ2NCBBUElFTlRSWSBiaW5u X2xpc3RfaW50NjQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgaW50NjQgdmFsdWU7 Ci0rCi0rICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9JTlQ2NCwgJnZhbHVlLCBOVUxM KTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdW5zaWduZWQgY2hhciBBUElFTlRSWSBi aW5uX2xpc3RfdWludDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgdW5zaWduZWQg Y2hhciB2YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQ4LCAm dmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt1bnNpZ25lZCBzaG9y dCBBUElFTlRSWSBiaW5uX2xpc3RfdWludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsK LSsgIHVuc2lnbmVkIHNob3J0IHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3Ms IEJJTk5fVUlOVDE2LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsK LSt1bnNpZ25lZCBpbnQgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQzMihjb25zdCB2b2lkICpsaXN0 LCBpbnQgcG9zKSB7Ci0rICB1bnNpZ25lZCBpbnQgdmFsdWU7Ci0rCi0rICBiaW5uX2xpc3RfZ2V0 KGxpc3QsIHBvcywgQklOTl9VSU5UMzIsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFs dWU7Ci0rfQotKwotK3VpbnQ2NCBBUElFTlRSWSBiaW5uX2xpc3RfdWludDY0KGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpIHsKLSsgIHVpbnQ2NCB2YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQo bGlzdCwgcG9zLCBCSU5OX1VJTlQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1 ZTsKLSt9Ci0rCi0rZmxvYXQgQVBJRU5UUlkgYmlubl9saXN0X2Zsb2F0KGNvbnN0IHZvaWQgKmxp c3QsIGludCBwb3MpIHsKLSsgIGZsb2F0IHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0 LCBwb3MsIEJJTk5fRkxPQVQzMiwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsK LSt9Ci0rCi0rZG91YmxlIEFQSUVOVFJZIGJpbm5fbGlzdF9kb3VibGUoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcykgewotKyAgZG91YmxlIHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0 LCBwb3MsIEJJTk5fRkxPQVQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsK LSt9Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfYm9vbChjb25zdCB2b2lkICpsaXN0LCBp bnQgcG9zKSB7Ci0rICBCT09MIHZhbHVlID0gVFJVRTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQobGlz dCwgcG9zLCBCSU5OX0JPT0wsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0r fQotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X251bGwoY29uc3Qgdm9pZCAqbGlzdCwgaW50 IHBvcykgewotKwotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX05VTEws IE5VTEwsIE5VTEwpOwotKwotK30KLSsKLStjaGFyICogQVBJRU5UUlkgYmlubl9saXN0X3N0cihj b25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0rICBjaGFyICp2YWx1ZTsKLSsKLSsgIGJpbm5f bGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1NUUklORywgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJl dHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9ibG9iKGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCAqcHNpemUpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwot KyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fQkxPQiwgJnZhbHVlLCBwc2l6ZSk7Ci0r Ci0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3RfbGlz dChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0rICB2b2lkICp2YWx1ZTsKLSsKLSsgIGJp bm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0xJU1QsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICBy ZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3RfbWFwKGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9saXN0 X2dldChsaXN0LCBwb3MsIEJJTk5fTUFQLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZh bHVlOwotK30KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X29iamVjdChjb25zdCB2b2lk ICpsaXN0LCBpbnQgcG9zKSB7Ci0rICB2b2lkICp2YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQo bGlzdCwgcG9zLCBCSU5OX09CSkVDVCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1 ZTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStzaWduZWQgY2hhciBBUElFTlRS WSBiaW5uX21hcF9pbnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICBzaWduZWQgY2hh ciB2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDgsICZ2YWx1ZSwg TlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Nob3J0IEFQSUVOVFJZIGJpbm5f bWFwX2ludDE2KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICBzaG9ydCB2YWx1ZTsKLSsK LSsgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDE2LCAmdmFsdWUsIE5VTEwpOwotKwot KyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStpbnQgQVBJRU5UUlkgYmlubl9tYXBfaW50MzIoY29u c3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIGludCB2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dl dChtYXAsIGlkLCBCSU5OX0lOVDMyLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVl OwotK30KLSsKLStpbnQ2NCBBUElFTlRSWSBiaW5uX21hcF9pbnQ2NChjb25zdCB2b2lkICptYXAs IGludCBpZCkgewotKyAgaW50NjQgdmFsdWU7Ci0rCi0rICBiaW5uX21hcF9nZXQobWFwLCBpZCwg QklOTl9JTlQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0r dW5zaWduZWQgY2hhciBBUElFTlRSWSBiaW5uX21hcF91aW50OChjb25zdCB2b2lkICptYXAsIGlu dCBpZCkgewotKyAgdW5zaWduZWQgY2hhciB2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dldChtYXAs IGlkLCBCSU5OX1VJTlQ4LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30K LSsKLSt1bnNpZ25lZCBzaG9ydCBBUElFTlRSWSBiaW5uX21hcF91aW50MTYoY29uc3Qgdm9pZCAq bWFwLCBpbnQgaWQpIHsKLSsgIHVuc2lnbmVkIHNob3J0IHZhbHVlOwotKwotKyAgYmlubl9tYXBf Z2V0KG1hcCwgaWQsIEJJTk5fVUlOVDE2LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZh bHVlOwotK30KLSsKLSt1bnNpZ25lZCBpbnQgQVBJRU5UUlkgYmlubl9tYXBfdWludDMyKGNvbnN0 IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICB1bnNpZ25lZCBpbnQgdmFsdWU7Ci0rCi0rICBiaW5u X21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1 cm4gdmFsdWU7Ci0rfQotKwotK3VpbnQ2NCBBUElFTlRSWSBiaW5uX21hcF91aW50NjQoY29uc3Qg dm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHVpbnQ2NCB2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dl dChtYXAsIGlkLCBCSU5OX1VJTlQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1 ZTsKLSt9Ci0rCi0rZmxvYXQgQVBJRU5UUlkgYmlubl9tYXBfZmxvYXQoY29uc3Qgdm9pZCAqbWFw LCBpbnQgaWQpIHsKLSsgIGZsb2F0IHZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQs IEJJTk5fRkxPQVQzMiwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0r Ci0rZG91YmxlIEFQSUVOVFJZIGJpbm5fbWFwX2RvdWJsZShjb25zdCB2b2lkICptYXAsIGludCBp ZCkgewotKyAgZG91YmxlIHZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5f RkxPQVQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rQk9P TCBBUElFTlRSWSBiaW5uX21hcF9ib29sKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICBC T09MIHZhbHVlID0gVFJVRTsKLSsKLSsgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0JPT0ws ICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK0JPT0wgQVBJRU5U UlkgYmlubl9tYXBfbnVsbChjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKwotKyAgcmV0dXJu IGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX05VTEwsIE5VTEwsIE5VTEwpOwotKwotK30KLSsK LStjaGFyICogQVBJRU5UUlkgYmlubl9tYXBfc3RyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7 Ci0rICBjaGFyICp2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1NUUklO RywgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQ SUVOVFJZIGJpbm5fbWFwX2Jsb2IoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGludCAqcHNpemUp IHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fQkxP QiwgJnZhbHVlLCBwc2l6ZSk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBB UElFTlRSWSBiaW5uX21hcF9saXN0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICB2b2lk ICp2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0xJU1QsICZ2YWx1ZSwg TlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5u X21hcF9tYXAoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwot KyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTUFQLCAmdmFsdWUsIE5VTEwpOwotKwotKyAg cmV0dXJuIHZhbHVlOwotK30KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfb2JqZWN0KGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICB2b2lkICp2YWx1ZTsKLSsKLSsgIGJpbm5fbWFw X2dldChtYXAsIGlkLCBCSU5OX09CSkVDVCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2 YWx1ZTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStzaWduZWQgY2hhciBBUElF TlRSWSBiaW5uX29iamVjdF9pbnQ4KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7 Ci0rICBzaWduZWQgY2hhciB2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwg QklOTl9JTlQ4LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStz aG9ydCBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQxNihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSkgewotKyAgc2hvcnQgdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2JqLCBr ZXksIEJJTk5fSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQot KwotK2ludCBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQzMihjb25zdCB2b2lkICpvYmosIGNvbnN0 IGNoYXIgKmtleSkgewotKyAgaW50IHZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwg a2V5LCBCSU5OX0lOVDMyLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30K LSsKLStpbnQ2NCBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQ2NChjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSkgewotKyAgaW50NjQgdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQo b2JqLCBrZXksIEJJTk5fSU5UNjQsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7 Ci0rfQotKwotK3Vuc2lnbmVkIGNoYXIgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDgoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKLSsgIHVuc2lnbmVkIGNoYXIgdmFsdWU7Ci0r Ci0rICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fVUlOVDgsICZ2YWx1ZSwgTlVMTCk7 Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZIGJp bm5fb2JqZWN0X3VpbnQxNihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAg dW5zaWduZWQgc2hvcnQgdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJ Tk5fVUlOVDE2LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt1 bnNpZ25lZCBpbnQgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDMyKGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5KSB7Ci0rICB1bnNpZ25lZCBpbnQgdmFsdWU7Ci0rCi0rICBiaW5uX29i amVjdF9nZXQob2JqLCBrZXksIEJJTk5fVUlOVDMyLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0 dXJuIHZhbHVlOwotK30KLSsKLSt1aW50NjQgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDY0KGNv bnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICB1aW50NjQgdmFsdWU7Ci0rCi0r ICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwpOwot KwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStmbG9hdCBBUElFTlRSWSBiaW5uX29iamVjdF9m bG9hdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgZmxvYXQgdmFsdWU7 Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fRkxPQVQzMiwgJnZhbHVlLCBO VUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rZG91YmxlIEFQSUVOVFJZIGJpbm5f b2JqZWN0X2RvdWJsZShjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgZG91 YmxlIHZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0ZMT0FUNjQs ICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK0JPT0wgQVBJRU5U UlkgYmlubl9vYmplY3RfYm9vbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewot KyAgQk9PTCB2YWx1ZSA9IFRSVUU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJ Tk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rQk9P TCBBUElFTlRSWSBiaW5uX29iamVjdF9udWxsKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAq a2V5KSB7Ci0rCi0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX05VTEws IE5VTEwsIE5VTEwpOwotKwotK30KLSsKLStjaGFyICogQVBJRU5UUlkgYmlubl9vYmplY3Rfc3Ry KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICBjaGFyICp2YWx1ZTsKLSsK LSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9TVFJJTkcsICZ2YWx1ZSwgTlVMTCk7 Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX29iamVj dF9ibG9iKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgKnBzaXplKSB7Ci0r ICB2b2lkICp2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9CTE9C LCAmdmFsdWUsIHBzaXplKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQ SUVOVFJZIGJpbm5fb2JqZWN0X2xpc3QoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkp IHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5O X0xJU1QsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQg KiBBUElFTlRSWSBiaW5uX29iamVjdF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICpr ZXkpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBC SU5OX01BUCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9p ZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X29iamVjdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSkgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2JqLCBr ZXksIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30K LSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgYmlubiAqIGJpbm5fYWxsb2NfaXRlbSgpIHsK LSsgIGJpbm4gKml0ZW07Ci0rICBpdGVtID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJp bm4pKTsKLSsgIGlmIChpdGVtKSB7Ci0rICAgIG1lbXNldChpdGVtLCAwLCBzaXplb2YoYmlubikp OwotKyAgICBpdGVtLT5oZWFkZXIgPSBCSU5OX01BR0lDOwotKyAgICBpdGVtLT5hbGxvY2F0ZWQg PSBUUlVFOwotKyAgICAvL2l0ZW0tPndyaXRhYmxlID0gRkFMU0U7ICAtLSBhbHJlYWR5IHplcm9l ZAotKyAgfQotKyAgcmV0dXJuIGl0ZW07Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX3ZhbHVlKGludCB0eXBlLCB2b2lkICpw dmFsdWUsIGludCBzaXplLCBiaW5uX21lbV9mcmVlIGZyZWVmbikgewotKyAgaW50IHN0b3JhZ2Vf dHlwZTsKLSsgIGJpbm4gKml0ZW0gPSBiaW5uX2FsbG9jX2l0ZW0oKTsKLSsgIGlmIChpdGVtKSB7 Ci0rICAgIGl0ZW0tPnR5cGUgPSB0eXBlOwotKyAgICBiaW5uX2dldF90eXBlX2luZm8odHlwZSwg JnN0b3JhZ2VfdHlwZSwgTlVMTCk7Ci0rICAgIHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7Ci0rICAg IGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklO Tl9TVE9SQUdFX1NUUklORzoKLSsgICAgICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gc3RybGVuKChj aGFyKilwdmFsdWUpICsgMTsKLSsgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSsgICAgY2FzZSBC SU5OX1NUT1JBR0VfQkxPQjoKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgotKyAg ICAgIGlmIChmcmVlZm4gPT0gQklOTl9UUkFOU0lFTlQpIHsKLSsgICAgICAgIGl0ZW0tPnB0ciA9 IGJpbm5fbWVtZHVwKHB2YWx1ZSwgc2l6ZSk7Ci0rICAgICAgICBpZiAoaXRlbS0+cHRyID09IE5V TEwpIHsKLSsgICAgICAgICAgZnJlZV9mbihpdGVtKTsKLSsgICAgICAgICAgcmV0dXJuIE5VTEw7 Ci0rICAgICAgICB9Ci0rICAgICAgICBpdGVtLT5mcmVlZm4gPSBmcmVlX2ZuOwotKyAgICAgICAg aWYgKHN0b3JhZ2VfdHlwZSA9PSBCSU5OX1NUT1JBR0VfU1RSSU5HKSBzaXplLS07Ci0rICAgICAg fSBlbHNlIHsKLSsgICAgICAgIGl0ZW0tPnB0ciA9IHB2YWx1ZTsKLSsgICAgICAgIGl0ZW0tPmZy ZWVmbiA9IGZyZWVmbjsKLSsgICAgICB9Ci0rICAgICAgaXRlbS0+c2l6ZSA9IHNpemU7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgaXRlbS0+cHRyID0gJml0ZW0tPnZpbnQz MjsKLSsgICAgICBjb3B5X3Jhd192YWx1ZShwdmFsdWUsIGl0ZW0tPnB0ciwgc3RvcmFnZV90eXBl KTsKLSsgICAgfQotKyAgfQotKyAgcmV0dXJuIGl0ZW07Ci0rfQotKwotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9zZXRfc3RyaW5nKGJpbm4g Kml0ZW0sIGNoYXIgKnN0ciwgYmlubl9tZW1fZnJlZSBwZnJlZSkgewotKwotKyAgaWYgKGl0ZW0g PT0gTlVMTCB8fCBzdHIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKHBmcmVlID09 IEJJTk5fVFJBTlNJRU5UKSB7Ci0rICAgIGl0ZW0tPnB0ciA9IGJpbm5fbWVtZHVwKHN0ciwgc3Ry bGVuKHN0cikgKyAxKTsKLSsgICAgaWYgKGl0ZW0tPnB0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7 Ci0rICAgIGl0ZW0tPmZyZWVmbiA9IGZyZWVfZm47Ci0rICB9IGVsc2UgewotKyAgICBpdGVtLT5w dHIgPSBzdHI7Ci0rICAgIGl0ZW0tPmZyZWVmbiA9IHBmcmVlOwotKyAgfQotKwotKyAgaXRlbS0+ dHlwZSA9IEJJTk5fU1RSSU5HOwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9zZXRfYmxvYihi aW5uICppdGVtLCB2b2lkICpwdHIsIGludCBzaXplLCBiaW5uX21lbV9mcmVlIHBmcmVlKSB7Ci0r Ci0rICBpZiAoaXRlbSA9PSBOVUxMIHx8IHB0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0r ICBpZiAocGZyZWUgPT0gQklOTl9UUkFOU0lFTlQpIHsKLSsgICAgaXRlbS0+cHRyID0gYmlubl9t ZW1kdXAocHRyLCBzaXplKTsKLSsgICAgaWYgKGl0ZW0tPnB0ciA9PSBOVUxMKSByZXR1cm4gRkFM U0U7Ci0rICAgIGl0ZW0tPmZyZWVmbiA9IGZyZWVfZm47Ci0rICB9IGVsc2UgewotKyAgICBpdGVt LT5wdHIgPSBwdHI7Ci0rICAgIGl0ZW0tPmZyZWVmbiA9IHBmcmVlOwotKyAgfQotKwotKyAgaXRl bS0+dHlwZSA9IEJJTk5fQkxPQjsKLSsgIGl0ZW0tPnNpemUgPSBzaXplOwotKyAgcmV0dXJuIFRS VUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKiogUkVB RCBDT05WRVJURUQgVkFMVUUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotKyNpZmRlZiBfTVNDX1ZFUgotKyNkZWZpbmUgYXRvaTY0IF9hdG9pNjQKLSsjZWxzZQotK2lu dDY0IGF0b2k2NChjaGFyICpzdHIpIHsKLSsgIGludDY0IHJldHZhbDsKLSsgIGludCBpc19uZWdh dGl2ZT0wOwotKwotKyAgaWYgKCpzdHIgPT0gJy0nKSB7Ci0rICAgIGlzX25lZ2F0aXZlID0gMTsK LSsgICAgc3RyKys7Ci0rICB9Ci0rICByZXR2YWwgPSAwOwotKyAgZm9yICg7ICpzdHI7IHN0cisr KSB7Ci0rICAgIHJldHZhbCA9IDEwICogcmV0dmFsICsgKCpzdHIgLSAnMCcpOwotKyAgfQotKyAg aWYgKGlzX25lZ2F0aXZlKSByZXR2YWwgKj0gLTE7Ci0rICByZXR1cm4gcmV0dmFsOwotK30KLSsj ZW5kaWYKLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wg aXNfaW50ZWdlcihjaGFyICpwKSB7Ci0rICBCT09MIHJldHZhbDsKLSsKLSsgIGlmIChwID09IE5V TEwpIHJldHVybiBGQUxTRTsKLSsgIGlmICgqcCA9PSAnLScpIHArKzsKLSsgIGlmICgqcCA9PSAw KSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR2YWwgPSBUUlVFOwotKwotKyAgZm9yICg7ICpwOyBw KyspIHsKLSsgICAgaWYgKCAoKnAgPCAnMCcgfHwgKnAgPiAnOScpICkgewotKyAgICAgIHJldHZh bCA9IEZBTFNFOwotKyAgICB9Ci0rICB9Ci0rCi0rICByZXR1cm4gcmV0dmFsOwotK30KLSsKLSsv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgaXNfZmxvYXQoY2hh ciAqcCkgewotKyAgQk9PTCByZXR2YWwsIG51bWJlcl9mb3VuZD1GQUxTRTsKLSsKLSsgIGlmIChw ID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsgIGlmICgqcCA9PSAnLScpIHArKzsKLSsgIGlmICgq cCA9PSAwKSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR2YWwgPSBUUlVFOwotKwotKyAgZm9yICg7 ICpwOyBwKyspIHsKLSsgICAgaWYgKCpwID09ICcuJyB8fCAqcCA9PSAnLCcpIHsKLSsgICAgICBp ZiAoIW51bWJlcl9mb3VuZCkgcmV0dmFsID0gRkFMU0U7Ci0rICAgIH0gZWxzZSBpZiAoICpwID49 ICcwJyAmJiAqcCA8PSAnOScgKSB7Ci0rICAgICAgbnVtYmVyX2ZvdW5kID0gVFJVRTsKLSsgICAg fSBlbHNlIHsKLSsgICAgICByZXR1cm4gRkFMU0U7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHJldHVy biByZXR2YWw7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJ Tk5fUFJJVkFURSBCT09MIGlzX2Jvb2xfc3RyKGNoYXIgKnN0ciwgQk9PTCAqcGJvb2wpIHsKLSsg IGludDY0ICB2aW50OwotKyAgZG91YmxlIHZkb3VibGU7Ci0rCi0rICBpZiAoc3RyID09IE5VTEwg fHwgcGJvb2wgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKHN0cmljbXAoc3RyLCAi dHJ1ZSIpID09IDApIGdvdG8gbG9jX3RydWU7Ci0rICBpZiAoc3RyaWNtcChzdHIsICJ5ZXMiKSA9 PSAwKSBnb3RvIGxvY190cnVlOwotKyAgaWYgKHN0cmljbXAoc3RyLCAib24iKSA9PSAwKSBnb3Rv IGxvY190cnVlOwotKyAgLy9pZiAoc3RyaWNtcChzdHIsICIxIikgPT0gMCkgZ290byBsb2NfdHJ1 ZTsKLSsKLSsgIGlmIChzdHJpY21wKHN0ciwgImZhbHNlIikgPT0gMCkgZ290byBsb2NfZmFsc2U7 Ci0rICBpZiAoc3RyaWNtcChzdHIsICJubyIpID09IDApIGdvdG8gbG9jX2ZhbHNlOwotKyAgaWYg KHN0cmljbXAoc3RyLCAib2ZmIikgPT0gMCkgZ290byBsb2NfZmFsc2U7Ci0rICAvL2lmIChzdHJp Y21wKHN0ciwgIjAiKSA9PSAwKSBnb3RvIGxvY19mYWxzZTsKLSsKLSsgIGlmIChpc19pbnRlZ2Vy KHN0cikpIHsKLSsgICAgdmludCA9IGF0b2k2NChzdHIpOwotKyAgICAqcGJvb2wgPSAodmludCAh PSAwKSA/IFRSVUUgOiBGQUxTRTsKLSsgICAgcmV0dXJuIFRSVUU7Ci0rICB9IGVsc2UgaWYgKGlz X2Zsb2F0KHN0cikpIHsKLSsgICAgdmRvdWJsZSA9IGF0b2Yoc3RyKTsKLSsgICAgKnBib29sID0g KHZkb3VibGUgIT0gMCkgPyBUUlVFIDogRkFMU0U7Ci0rICAgIHJldHVybiBUUlVFOwotKyAgfQot KwotKyAgcmV0dXJuIEZBTFNFOwotKwotK2xvY190cnVlOgotKyAgKnBib29sID0gVFJVRTsKLSsg IHJldHVybiBUUlVFOwotKwotK2xvY19mYWxzZToKLSsgICpwYm9vbCA9IEZBTFNFOwotKyAgcmV0 dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwot K0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfaW50MzIoYmlubiAqdmFsdWUsIGludCAqcGludCkgewot KwotKyAgaWYgKHZhbHVlID09IE5VTEwgfHwgcGludCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0r Ci0rICBpZiAodHlwZV9mYW1pbHkodmFsdWUtPnR5cGUpID09IEJJTk5fRkFNSUxZX0lOVCkgewot KyAgICByZXR1cm4gY29weV9pbnRfdmFsdWUodmFsdWUtPnB0ciwgcGludCwgdmFsdWUtPnR5cGUs IEJJTk5fSU5UMzIpOwotKyAgfQotKwotKyAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgewotKyAgY2Fz ZSBCSU5OX0ZMT0FUOgotKyAgICBpZiAodmFsdWUtPnZmbG9hdCA8IChmbG9hdClJTlQzMl9NSU4g fHwgdmFsdWUtPnZmbG9hdCA+IChmbG9hdClJTlQzMl9NQVgpIHJldHVybiBGQUxTRTsKLSsgICAg KnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmZsb2F0KTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJ Tk5fRE9VQkxFOgotKyAgICBpZiAodmFsdWUtPnZkb3VibGUgPCAoZG91YmxlKUlOVDMyX01JTiB8 fCB2YWx1ZS0+dmRvdWJsZSA+IChkb3VibGUpSU5UMzJfTUFYKSByZXR1cm4gRkFMU0U7Ci0rICAg ICpwaW50ID0gcm91bmR2YWwodmFsdWUtPnZkb3VibGUpOwotKyAgICBicmVhazsKLSsgIGNhc2Ug QklOTl9TVFJJTkc6Ci0rICAgIGlmIChpc19pbnRlZ2VyKChjaGFyKil2YWx1ZS0+cHRyKSkKLSsg ICAgICAqcGludCA9IGF0b2koKGNoYXIqKXZhbHVlLT5wdHIpOwotKyAgICBlbHNlIGlmIChpc19m bG9hdCgoY2hhciopdmFsdWUtPnB0cikpCi0rICAgICAgKnBpbnQgPSByb3VuZHZhbChhdG9mKChj aGFyKil2YWx1ZS0+cHRyKSk7Ci0rICAgIGVsc2UKLSsgICAgICByZXR1cm4gRkFMU0U7Ci0rICAg IGJyZWFrOwotKyAgY2FzZSBCSU5OX0JPT0w6Ci0rICAgICpwaW50ID0gdmFsdWUtPnZib29sOwot KyAgICBicmVhazsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsg IHJldHVybiBUUlVFOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LStCT09MIEFQSUVOVFJZIGJpbm5fZ2V0X2ludDY0KGJpbm4gKnZhbHVlLCBpbnQ2NCAqcGludCkg ewotKwotKyAgaWYgKHZhbHVlID09IE5VTEwgfHwgcGludCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7 Ci0rCi0rICBpZiAodHlwZV9mYW1pbHkodmFsdWUtPnR5cGUpID09IEJJTk5fRkFNSUxZX0lOVCkg ewotKyAgICByZXR1cm4gY29weV9pbnRfdmFsdWUodmFsdWUtPnB0ciwgcGludCwgdmFsdWUtPnR5 cGUsIEJJTk5fSU5UNjQpOwotKyAgfQotKwotKyAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgewotKyAg Y2FzZSBCSU5OX0ZMT0FUOgotKyAgICBpZiAodmFsdWUtPnZmbG9hdCA8IChmbG9hdClJTlQ2NF9N SU4gfHwgdmFsdWUtPnZmbG9hdCA+IChmbG9hdClJTlQ2NF9NQVgpIHJldHVybiBGQUxTRTsKLSsg ICAgKnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmZsb2F0KTsKLSsgICAgYnJlYWs7Ci0rICBjYXNl IEJJTk5fRE9VQkxFOgotKyAgICBpZiAodmFsdWUtPnZkb3VibGUgPCAoZG91YmxlKUlOVDY0X01J TiB8fCB2YWx1ZS0+dmRvdWJsZSA+IChkb3VibGUpSU5UNjRfTUFYKSByZXR1cm4gRkFMU0U7Ci0r ICAgICpwaW50ID0gcm91bmR2YWwodmFsdWUtPnZkb3VibGUpOwotKyAgICBicmVhazsKLSsgIGNh c2UgQklOTl9TVFJJTkc6Ci0rICAgIGlmIChpc19pbnRlZ2VyKChjaGFyKil2YWx1ZS0+cHRyKSkK LSsgICAgICAqcGludCA9IGF0b2k2NCgoY2hhciopdmFsdWUtPnB0cik7Ci0rICAgIGVsc2UgaWYg KGlzX2Zsb2F0KChjaGFyKil2YWx1ZS0+cHRyKSkKLSsgICAgICAqcGludCA9IHJvdW5kdmFsKGF0 b2YoKGNoYXIqKXZhbHVlLT5wdHIpKTsKLSsgICAgZWxzZQotKyAgICAgIHJldHVybiBGQUxTRTsK LSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fQk9PTDoKLSsgICAgKnBpbnQgPSB2YWx1ZS0+dmJv b2w7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAgfQot KwotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfZG91YmxlKGJpbm4gKnZhbHVlLCBkb3VibGUg KnBmbG9hdCkgewotKyAgaW50NjQgdmludDsKLSsKLSsgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHBm bG9hdCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAodHlwZV9mYW1pbHkodmFsdWUt PnR5cGUpID09IEJJTk5fRkFNSUxZX0lOVCkgewotKyAgICBpZiAoY29weV9pbnRfdmFsdWUodmFs dWUtPnB0ciwgJnZpbnQsIHZhbHVlLT50eXBlLCBCSU5OX0lOVDY0KSA9PSBGQUxTRSkgcmV0dXJu IEZBTFNFOwotKyAgICAqcGZsb2F0ID0gKGRvdWJsZSkgdmludDsKLSsgICAgcmV0dXJuIFRSVUU7 Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7Ci0rICBjYXNlIEJJTk5fRkxPQVQ6 Ci0rICAgICpwZmxvYXQgPSB2YWx1ZS0+dmZsb2F0OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklO Tl9ET1VCTEU6Ci0rICAgICpwZmxvYXQgPSB2YWx1ZS0+dmRvdWJsZTsKLSsgICAgYnJlYWs7Ci0r ICBjYXNlIEJJTk5fU1RSSU5HOgotKyAgICBpZiAoaXNfaW50ZWdlcigoY2hhciopdmFsdWUtPnB0 cikpCi0rICAgICAgKnBmbG9hdCA9IChkb3VibGUpIGF0b2k2NCgoY2hhciopdmFsdWUtPnB0cik7 Ci0rICAgIGVsc2UgaWYgKGlzX2Zsb2F0KChjaGFyKil2YWx1ZS0+cHRyKSkKLSsgICAgICAqcGZs b2F0ID0gYXRvZigoY2hhciopdmFsdWUtPnB0cik7Ci0rICAgIGVsc2UKLSsgICAgICByZXR1cm4g RkFMU0U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX0JPT0w6Ci0rICAgICpwZmxvYXQgPSB2 YWx1ZS0+dmJvb2w7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZBTFNF OwotKyAgfQotKwotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfYm9vbChiaW5uICp2YWx1ZSwg Qk9PTCAqcGJvb2wpIHsKLSsgIGludDY0IHZpbnQ7Ci0rCi0rICBpZiAodmFsdWUgPT0gTlVMTCB8 fCBwYm9vbCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAodHlwZV9mYW1pbHkodmFs dWUtPnR5cGUpID09IEJJTk5fRkFNSUxZX0lOVCkgewotKyAgICBpZiAoY29weV9pbnRfdmFsdWUo dmFsdWUtPnB0ciwgJnZpbnQsIHZhbHVlLT50eXBlLCBCSU5OX0lOVDY0KSA9PSBGQUxTRSkgcmV0 dXJuIEZBTFNFOwotKyAgICAqcGJvb2wgPSAodmludCAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKLSsg ICAgcmV0dXJuIFRSVUU7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7Ci0rICBj YXNlIEJJTk5fQk9PTDoKLSsgICAgKnBib29sID0gdmFsdWUtPnZib29sOwotKyAgICBicmVhazsK LSsgIGNhc2UgQklOTl9GTE9BVDoKLSsgICAgKnBib29sID0gKHZhbHVlLT52ZmxvYXQgIT0gMCkg PyBUUlVFIDogRkFMU0U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX0RPVUJMRToKLSsgICAg KnBib29sID0gKHZhbHVlLT52ZG91YmxlICE9IDApID8gVFJVRSA6IEZBTFNFOwotKyAgICBicmVh azsKLSsgIGNhc2UgQklOTl9TVFJJTkc6Ci0rICAgIHJldHVybiBpc19ib29sX3N0cigoY2hhciop dmFsdWUtPnB0ciwgcGJvb2wpOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAg fQotKwotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX2dldF9zdHIoYmlubiAqdmFsdWUpIHsKLSsg IGludDY0IHZpbnQ7Ci0rICBjaGFyIGJ1ZlsxMjhdOwotKwotKyAgaWYgKHZhbHVlID09IE5VTEwp IHJldHVybiBOVUxMOwotKwotKyAgaWYgKHR5cGVfZmFtaWx5KHZhbHVlLT50eXBlKSA9PSBCSU5O X0ZBTUlMWV9JTlQpIHsKLSsgICAgaWYgKGNvcHlfaW50X3ZhbHVlKHZhbHVlLT5wdHIsICZ2aW50 LCB2YWx1ZS0+dHlwZSwgQklOTl9JTlQ2NCkgPT0gRkFMU0UpIHJldHVybiBOVUxMOwotKyAgICBz bnByaW50ZihidWYsIHNpemVvZiBidWYsICIlIiBJTlQ2NF9GT1JNQVQsIHZpbnQpOwotKyAgICBn b3RvIGxvY19jb252ZXJ0X3ZhbHVlOwotKyAgfQotKwotKyAgc3dpdGNoICh2YWx1ZS0+dHlwZSkg ewotKyAgY2FzZSBCSU5OX0ZMT0FUOgotKyAgICB2YWx1ZS0+dmRvdWJsZSA9IHZhbHVlLT52Zmxv YXQ7Ci0rICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotKyAgY2FzZSBCSU5OX0RPVUJMRToKLSsgICAg c25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJWciLCB2YWx1ZS0+dmRvdWJsZSk7Ci0rICAgIGdv dG8gbG9jX2NvbnZlcnRfdmFsdWU7Ci0rICBjYXNlIEJJTk5fU1RSSU5HOgotKyAgICByZXR1cm4g KGNoYXIqKSB2YWx1ZS0+cHRyOwotKyAgY2FzZSBCSU5OX0JPT0w6Ci0rICAgIGlmICh2YWx1ZS0+ dmJvb2wpCi0rICAgICAgc3RyY3B5KGJ1ZiwgInRydWUiKTsKLSsgICAgZWxzZQotKyAgICAgIHN0 cmNweShidWYsICJmYWxzZSIpOwotKyAgICBnb3RvIGxvY19jb252ZXJ0X3ZhbHVlOwotKyAgfQot KwotKyAgcmV0dXJuIE5VTEw7Ci0rCi0rbG9jX2NvbnZlcnRfdmFsdWU6Ci0rCi0rICAvL3ZhbHVl LT52aW50NjQgPSAwOwotKyAgdmFsdWUtPnB0ciA9IHN0cmR1cChidWYpOwotKyAgaWYgKHZhbHVl LT5wdHIgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0rICB2YWx1ZS0+ZnJlZWZuID0gZnJlZTsKLSsg IHZhbHVlLT50eXBlID0gQklOTl9TVFJJTkc7Ci0rICByZXR1cm4gKGNoYXIqKSB2YWx1ZS0+cHRy OwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqIEdFTkVS QUwgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LStCT09MIEFQSUVOVFJZIGJpbm5faXNfY29udGFpbmVyKGJpbm4gKml0ZW0pIHsKLSsKLSsgIGlm IChpdGVtID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIHN3aXRjaCAoaXRlbS0+dHlwZSkg ewotKyAgY2FzZSBCSU5OX0xJU1Q6Ci0rICBjYXNlIEJJTk5fTUFQOgotKyAgY2FzZSBCSU5OX09C SkVDVDoKLSsgICAgcmV0dXJuIFRSVUU7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gRkFMU0U7 Ci0rICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZGlmZiAt TnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvYmlubi5oIG9wZW5zc2gtMTAuM3AxL2Jpbm4uaAotLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvYmlubi5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvYmlubi5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzE4 OTQ0MDg4ICswMjAwCi1AQCAtMCwwICsxLDk0NSBAQAotKwotKy8vIFRPIEVOQUJMRSBJTkxJTkUg RlVOQ1RJT05TOgotKy8vICAgT04gTVNWQzogZW5hYmxlIHRoZSAnSW5saW5lIEZ1bmN0aW9uIEV4 cGFuc2lvbicgKC9PYjIpIGNvbXBpbGVyIG9wdGlvbiwgYW5kIG1heWJlIHRoZQotKy8vICAgICAg ICAgICAgJ1dob2xlIFByb2dyYW0gT3B0aW1pdGF6aW9uJyAoL0dMKSwgdGhhdCByZXF1aXJlcyB0 aGUKLSsvLyAgICAgICAgICAgICdMaW5rIFRpbWUgQ29kZSBHZW5lcmF0aW9uJyAoL0xUQ0cpIGxp bmtlciBvcHRpb24gdG8gYmUgZW5hYmxlZCB0b28KLSsKLSsjaWZuZGVmIEJJTk5fSAotKyNkZWZp bmUgQklOTl9ICi0rCi0rI2lmZGVmIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlm Ci0rCi0rI2RlZmluZSBCSU5OX1ZFUlNJT04gIjMuMC4wIiAgLyogdXNpbmcgc2VtYW50aWMgdmVy c2lvbmluZyAqLwotKwotKyNpZm5kZWYgTlVMTAotKyNpZmRlZiBfX2NwbHVzcGx1cwotKyNkZWZp bmUgTlVMTCAgICAwCi0rI2Vsc2UKLSsjZGVmaW5lIE5VTEwgICAgKCh2b2lkICopMCkKLSsjZW5k aWYKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIFRSVUUKLSsjZGVmaW5lIFRSVUUgIDEKLSsjZW5kaWYK LSsKLSsjaWZuZGVmIEZBTFNFCi0rI2RlZmluZSBGQUxTRSAwCi0rI2VuZGlmCi0rCi0rI2lmbmRl ZiBCT09MCi0rdHlwZWRlZiBpbnQgQk9PTDsKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIEFQSUVOVFJZ Ci0rICNpZmRlZiBfV0lOMzIKLSsgICNkZWZpbmUgQVBJRU5UUlkgX19zdGRjYWxsCi0rICNlbHNl Ci0rICAvLyNkZWZpbmUgQVBJRU5UUlkgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpCi0rICAjZGVm aW5lIEFQSUVOVFJZIAotKyAjZW5kaWYKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIEJJTk5fUFJJVkFU RQotKyAjaWZkZWYgREVCVUcKLSsgICNkZWZpbmUgQklOTl9QUklWQVRFCi0rICNlbHNlCi0rICAj ZGVmaW5lIEJJTk5fUFJJVkFURSAgc3RhdGljCi0rICNlbmRpZgotKyNlbmRpZgotKwotKyNpZmRl ZiBfTVNDX1ZFUgotKyAgI2RlZmluZSBJTkxJTkUgICAgICAgICBfX2lubGluZQotKyAgI2RlZmlu ZSBBTFdBWVNfSU5MSU5FICBfX2ZvcmNlaW5saW5lCi0rI2Vsc2UKLSsgIC8vIHlvdSBjYW4gY2hh bmdlIHRvICdleHRlcm4gaW5saW5lJyBpZiB1c2luZyB0aGUgZ2NjIG9wdGlvbiAtZmx0bwotKyAg I2RlZmluZSBJTkxJTkUgICAgICAgICBzdGF0aWMgaW5saW5lCi0rICAjZGVmaW5lIEFMV0FZU19J TkxJTkUgIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi0rI2Vu ZGlmCi0rCi0rI2lmbmRlZiBpbnQ2NAotKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVk KF9fQk9STEFORENfXykKLSsgIHR5cGVkZWYgX19pbnQ2NCBpbnQ2NDsKLSsgIHR5cGVkZWYgdW5z aWduZWQgX19pbnQ2NCB1aW50NjQ7Ci0rI2Vsc2UKLSsgIHR5cGVkZWYgbG9uZyBsb25nIGludCBp bnQ2NDsKLSsgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjQ7Ci0rI2VuZGlm Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIF9XSU4zMgotKyNkZWZpbmUgSU5UNjRfRk9STUFUICAiSTY0 aSIKLSsjZGVmaW5lIFVJTlQ2NF9GT1JNQVQgIkk2NHUiCi0rI2RlZmluZSBJTlQ2NF9IRVhfRk9S TUFUICAiSTY0eCIKLSsjZWxzZQotKyNkZWZpbmUgSU5UNjRfRk9STUFUICAibGxpIgotKyNkZWZp bmUgVUlOVDY0X0ZPUk1BVCAibGx1IgotKyNkZWZpbmUgSU5UNjRfSEVYX0ZPUk1BVCAgImxseCIK LSsjZW5kaWYKLSsKLSsKLSsvLyBCSU5OIENPTlNUQU5UUyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKyNkZWZpbmUgSU5WQUxJRF9CSU5OICAgICAgICAgMAot KwotKy8vIFN0b3JhZ2UgRGF0YSBUeXBlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0rCi0rI2RlZmluZSBCSU5OX1NUT1JBR0VfTk9CWVRFUyAgIDB4MDAKLSsjZGVmaW5l IEJJTk5fU1RPUkFHRV9CWVRFICAgICAgMHgyMCAgLy8gIDggYml0cwotKyNkZWZpbmUgQklOTl9T VE9SQUdFX1dPUkQgICAgICAweDQwICAvLyAxNiBiaXRzIC0tIHRoZSBlbmRpYW5lc3MgKGJ5dGUg b3JkZXIpIGlzIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkCi0rI2RlZmluZSBCSU5OX1NUT1JBR0Vf RFdPUkQgICAgIDB4NjAgIC8vIDMyIGJpdHMgLS0gdGhlIGVuZGlhbmVzcyAoYnl0ZSBvcmRlcikg aXMgYXV0b21hdGljYWxseSBjb3JyZWN0ZWQKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9RV09SRCAg ICAgMHg4MCAgLy8gNjQgYml0cyAtLSB0aGUgZW5kaWFuZXNzIChieXRlIG9yZGVyKSBpcyBhdXRv bWF0aWNhbGx5IGNvcnJlY3RlZAotKyNkZWZpbmUgQklOTl9TVE9SQUdFX1NUUklORyAgICAweEEw ICAvLyBBcmUgc3RvcmVkIHdpdGggbnVsbCB0ZXJtaW5hdGlvbgotKyNkZWZpbmUgQklOTl9TVE9S QUdFX0JMT0IgICAgICAweEMwCi0rI2RlZmluZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSIDB4RTAK LSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9WSVJUVUFMICAgMHg4MDAwMAotKwotKyNkZWZpbmUgQklO Tl9TVE9SQUdFX01JTiAgICAgICBCSU5OX1NUT1JBR0VfTk9CWVRFUwotKyNkZWZpbmUgQklOTl9T VE9SQUdFX01BWCAgICAgICBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSCi0rCi0rI2RlZmluZSBCSU5O X1NUT1JBR0VfTUFTSyAgICAgIDB4RTAKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9NQVNLMTYgICAg MHhFMDAwCi0rI2RlZmluZSBCSU5OX1NUT1JBR0VfSEFTX01PUkUgIDB4MTAKLSsjZGVmaW5lIEJJ Tk5fVFlQRV9NQVNLICAgICAgICAgMHgwRgotKyNkZWZpbmUgQklOTl9UWVBFX01BU0sxNiAgICAg ICAweDBGRkYKLSsKLSsjZGVmaW5lIEJJTk5fTUFYX1ZBTFVFX01BU0sgICAgMHhGRkZGRgotKwot KwotKy8vIERhdGEgRm9ybWF0cyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0rCi0rI2RlZmluZSBCSU5OX0xJU1QgICAgICAweEUwCi0rI2RlZmluZSBCSU5OX01B UCAgICAgICAweEUxCi0rI2RlZmluZSBCSU5OX09CSkVDVCAgICAweEUyCi0rCi0rI2RlZmluZSBC SU5OX05VTEwgICAgICAweDAwCi0rI2RlZmluZSBCSU5OX1RSVUUgICAgICAweDAxCi0rI2RlZmlu ZSBCSU5OX0ZBTFNFICAgICAweDAyCi0rCi0rI2RlZmluZSBCSU5OX1VJTlQ4ICAgICAweDIwICAv LyAoQllURSkgKHVuc2lnbmVkIGJ5dGUpIElzIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgdGhlIEJZ VEUgdHlwZQotKyNkZWZpbmUgQklOTl9JTlQ4ICAgICAgMHgyMSAgLy8gKEJZVEUpIChzaWduZWQg Ynl0ZSwgZnJvbSAtMTI4IHRvICsxMjcuIFRoZSAweDgwIGlzIHRoZSBzaWduIGJpdCwgc28gdGhl IHJhbmdlIGluIGhleCBpcyBmcm9tIDB4ODAgWy0xMjhdIHRvIDB4N0YgWzEyN10sIGJlaW5nIDB4 MDAgPSAwIGFuZCAweEZGID0gLTEpCi0rI2RlZmluZSBCSU5OX1VJTlQxNiAgICAweDQwICAvLyAo V09SRCkgKHVuc2lnbmVkIGludGVnZXIpIElzIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgdGhlIFdP UkQgdHlwZQotKyNkZWZpbmUgQklOTl9JTlQxNiAgICAgMHg0MSAgLy8gKFdPUkQpIChzaWduZWQg aW50ZWdlcikKLSsjZGVmaW5lIEJJTk5fVUlOVDMyICAgIDB4NjAgIC8vIChEV09SRCkgKHVuc2ln bmVkIGludGVnZXIpIElzIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgdGhlIERXT1JEIHR5cGUKLSsj ZGVmaW5lIEJJTk5fSU5UMzIgICAgIDB4NjEgIC8vIChEV09SRCkgKHNpZ25lZCBpbnRlZ2VyKQot KyNkZWZpbmUgQklOTl9VSU5UNjQgICAgMHg4MCAgLy8gKFFXT1JEKSAodW5zaWduZWQgaW50ZWdl cikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZvciB0aGUgUVdPUkQgdHlwZQotKyNkZWZpbmUgQklO Tl9JTlQ2NCAgICAgMHg4MSAgLy8gKFFXT1JEKSAoc2lnbmVkIGludGVnZXIpCi0rCi0rI2RlZmlu ZSBCSU5OX1NDSEFSICAgICBCSU5OX0lOVDgKLSsjZGVmaW5lIEJJTk5fVUNIQVIgICAgIEJJTk5f VUlOVDgKLSsKLSsjZGVmaW5lIEJJTk5fU1RSSU5HICAgIDB4QTAgIC8vIChTVFJJTkcpIFJhdyBT dHJpbmcKLSsjZGVmaW5lIEJJTk5fREFURVRJTUUgIDB4QTEgIC8vIChTVFJJTkcpIGlzbzg2MDEg Zm9ybWF0IC0tIFlZWVktTU0tREQgSEg6TU06U1MKLSsjZGVmaW5lIEJJTk5fREFURSAgICAgIDB4 QTIgIC8vIChTVFJJTkcpIGlzbzg2MDEgZm9ybWF0IC0tIFlZWVktTU0tREQKLSsjZGVmaW5lIEJJ Tk5fVElNRSAgICAgIDB4QTMgIC8vIChTVFJJTkcpIGlzbzg2MDEgZm9ybWF0IC0tIEhIOk1NOlNT Ci0rI2RlZmluZSBCSU5OX0RFQ0lNQUwgICAweEE0ICAvLyAoU1RSSU5HKSBIaWdoIHByZWNpc2lv biBudW1iZXIgLSB1c2VkIGZvciBnZW5lcmljIGRlY2ltYWwgdmFsdWVzIGFuZCBmb3IgdGhvc2Ug b25lcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgZmxvYXQ2NCBmb3JtYXQuCi0r I2RlZmluZSBCSU5OX0NVUlJFTkNZU1RSICAweEE1ICAvLyAoU1RSSU5HKSBXaXRoIGN1cnJlbmN5 IHVuaXQvc3ltYm9sIC0gY2hlY2sgZm9yIHNvbWUgaXNvIHN0YW5kYXJkIGZvcm1hdAotKyNkZWZp bmUgQklOTl9TSU5HTEVfU1RSICAgMHhBNiAgLy8gKFNUUklORykgQ2FuIGJlIHJlc3RvcmVkIHRv IGZsb2F0MzIKLSsjZGVmaW5lIEJJTk5fRE9VQkxFX1NUUiAgIDB4QTcgIC8vIChTVFJJTkcpIE1h eSBiZSByZXN0b3JlZCB0byBmbG9hdDY0Ci0rCi0rI2RlZmluZSBCSU5OX0ZMT0FUMzIgICAweDYy ICAvLyAoRFdPUkQpIAotKyNkZWZpbmUgQklOTl9GTE9BVDY0ICAgMHg4MiAgLy8gKFFXT1JEKSAK LSsjZGVmaW5lIEJJTk5fRkxPQVQgICAgIEJJTk5fRkxPQVQzMgotKyNkZWZpbmUgQklOTl9TSU5H TEUgICAgQklOTl9GTE9BVDMyCi0rI2RlZmluZSBCSU5OX0RPVUJMRSAgICBCSU5OX0ZMT0FUNjQK LSsKLSsjZGVmaW5lIEJJTk5fQ1VSUkVOQ1kgIDB4ODMgIC8vIChRV09SRCkKLSsKLSsjZGVmaW5l IEJJTk5fQkxPQiAgICAgIDB4QzAgIC8vIChCTE9CKSBSYXcgQmxvYgotKwotKwotKy8vIHZpcnR1 YWwgdHlwZXM6Ci0rCi0rI2RlZmluZSBCSU5OX0JPT0wgICAgICAweDgwMDYxICAvLyAoRFdPUkQp IFRoZSB2YWx1ZSBtYXkgYmUgMCBvciAxCi0rCi0rI2lmZGVmIEJJTk5fRVhURU5ERUQKLSsvLyNk ZWZpbmUgQklOTl9TSU5HTEUgICAgMHg4MDBBMSAgLy8gKFNUUklORykgQ2FuIGJlIHJlc3RvcmVk IHRvIGZsb2F0MzIKLSsvLyNkZWZpbmUgQklOTl9ET1VCTEUgICAgMHg4MDBBMiAgLy8gKFNUUklO RykgTWF5IGJlIHJlc3RvcmVkIHRvIGZsb2F0NjQKLSsjZW5kaWYKLSsKLSsvLyNkZWZpbmUgQklO Tl9CSU5OICAgICAgMHg4MDBFMSAgLy8gKENPTlRBSU5FUikKLSsvLyNkZWZpbmUgQklOTl9CSU5O X0JVRkZFUiAgMHg4MDBDMSAgLy8gKEJMT0IpIHVzZXIgYmlubi4gaXQncyBub3Qgb3BlbiBieSB0 aGUgcGFyc2VyCi0rCi0rCi0rLy8gZXh0ZW5kZWQgY29udGVudCB0eXBlczoKLSsKLSsvLyBzdHJp bmdzOgotKwotKyNkZWZpbmUgQklOTl9IVE1MICAgICAgMHhCMDAxCi0rI2RlZmluZSBCSU5OX1hN TCAgICAgICAweEIwMDIKLSsjZGVmaW5lIEJJTk5fSlNPTiAgICAgIDB4QjAwMwotKyNkZWZpbmUg QklOTl9KQVZBU0NSSVBUIDB4QjAwNAotKyNkZWZpbmUgQklOTl9DU1MgICAgICAgMHhCMDA1Ci0r Ci0rLy8gYmxvYnM6Ci0rCi0rI2RlZmluZSBCSU5OX0pQRUcgICAgICAweEQwMDEKLSsjZGVmaW5l IEJJTk5fR0lGICAgICAgIDB4RDAwMgotKyNkZWZpbmUgQklOTl9QTkcgICAgICAgMHhEMDAzCi0r I2RlZmluZSBCSU5OX0JNUCAgICAgICAweEQwMDQKLSsKLSsKLSsvLyB0eXBlIGZhbWlsaWVzCi0r I2RlZmluZSBCSU5OX0ZBTUlMWV9OT05FICAgMHgwMAotKyNkZWZpbmUgQklOTl9GQU1JTFlfTlVM TCAgIDB4ZjEKLSsjZGVmaW5lIEJJTk5fRkFNSUxZX0lOVCAgICAweGYyCi0rI2RlZmluZSBCSU5O X0ZBTUlMWV9GTE9BVCAgMHhmMwotKyNkZWZpbmUgQklOTl9GQU1JTFlfU1RSSU5HIDB4ZjQKLSsj ZGVmaW5lIEJJTk5fRkFNSUxZX0JMT0IgICAweGY1Ci0rI2RlZmluZSBCSU5OX0ZBTUlMWV9CT09M ICAgMHhmNgotKyNkZWZpbmUgQklOTl9GQU1JTFlfQklOTiAgIDB4ZjcKLSsKLSsvLyBpbnRlZ2Vy IHR5cGVzIHJlbGF0ZWQgdG8gc2lnbmFsCi0rI2RlZmluZSBCSU5OX1NJR05FRF9JTlQgICAgIDEx Ci0rI2RlZmluZSBCSU5OX1VOU0lHTkVEX0lOVCAgIDIyCi0rCi0rCi0rdHlwZWRlZiB2b2lkICgq Ymlubl9tZW1fZnJlZSkodm9pZCopOwotKyNkZWZpbmUgQklOTl9TVEFUSUMgICAgICAoKGJpbm5f bWVtX2ZyZWUpMCkKLSsjZGVmaW5lIEJJTk5fVFJBTlNJRU5UICAgKChiaW5uX21lbV9mcmVlKS0x KQotKwotKwotKy8vIC0tLSBCSU5OIFNUUlVDVFVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKwotK3N0cnVjdCBiaW5u X3N0cnVjdCB7Ci0rICBpbnQgICAgaGVhZGVyOyAgICAgLy8gdGhpcyBzdHJ1Y3QgaGVhZGVyIGhv bGRzIHRoZSBtYWdpYyBudW1iZXIgKEJJTk5fTUFHSUMpIHRoYXQgaWRlbnRpZmllcyB0aGlzIG1l bW9yeSBibG9jayBhcyBhIGJpbm4gc3RydWN0dXJlCi0rICBCT09MICAgYWxsb2NhdGVkOyAgLy8g dGhlIHN0cnVjdCBjYW4gYmUgYWxsb2NhdGVkIHVzaW5nIG1hbGxvY19mbigpIG9yIGNhbiBiZSBv biB0aGUgc3RhY2sKLSsgIEJPT0wgICB3cml0YWJsZTsgICAvLyBkaWQgaXQgd2FzIGNyZWF0ZSBm b3Igd3JpdGluZz8gaXQgY2FuIHVzZSB0aGUgcGJ1ZiBpZiBub3QgdW5pZmllZCB3aXRoIHB0cgot KyAgQk9PTCAgIGRpcnR5OyAgICAgIC8vIHRoZSBjb250YWluZXIgaGVhZGVyIGlzIG5vdCB3cml0 dGVuIHRvIHRoZSBidWZmZXIKLSsgIC8vCi0rICB2b2lkICAqcGJ1ZjsgICAgICAgLy8gdXNlICpw dHIgYmVsb3c/Ci0rICBCT09MICAgcHJlX2FsbG9jYXRlZDsKLSsgIGludCAgICBhbGxvY19zaXpl OwotKyAgaW50ICAgIHVzZWRfc2l6ZTsKLSsgIC8vCi0rICBpbnQgICAgdHlwZTsKLSsgIHZvaWQg ICpwdHI7Ci0rICBpbnQgICAgc2l6ZTsKLSsgIGludCAgICBjb3VudDsKLSsgIC8vCi0rICBiaW5u X21lbV9mcmVlIGZyZWVmbjsgIC8vIHVzZWQgb25seSB3aGVuIHR5cGUgPT0gQklOTl9TVFJJTkcg b3IgQklOTl9CTE9CCi0rICAvLwotKyAgdW5pb24gewotKyAgICBzaWduZWQgY2hhciAgICB2aW50 ODsKLSsgICAgc2lnbmVkIHNob3J0ICAgdmludDE2OwotKyAgICBzaWduZWQgaW50ICAgICB2aW50 MzI7Ci0rICAgIGludDY0ICAgICAgICAgIHZpbnQ2NDsKLSsgICAgdW5zaWduZWQgY2hhciAgdnVp bnQ4OwotKyAgICB1bnNpZ25lZCBzaG9ydCB2dWludDE2OwotKyAgICB1bnNpZ25lZCBpbnQgICB2 dWludDMyOwotKyAgICB1aW50NjQgICAgICAgICB2dWludDY0OwotKyAgICAvLwotKyAgICBzaWdu ZWQgY2hhciAgICB2Y2hhcjsKLSsgICAgdW5zaWduZWQgY2hhciAgdnVjaGFyOwotKyAgICBzaWdu ZWQgc2hvcnQgICB2c2hvcnQ7Ci0rICAgIHVuc2lnbmVkIHNob3J0IHZ1c2hvcnQ7Ci0rICAgIHNp Z25lZCBpbnQgICAgIHZpbnQ7Ci0rICAgIHVuc2lnbmVkIGludCAgIHZ1aW50OwotKyAgICAvLwot KyAgICBmbG9hdCAgICAgICAgICB2ZmxvYXQ7Ci0rICAgIGRvdWJsZSAgICAgICAgIHZkb3VibGU7 Ci0rICAgIC8vCi0rICAgIEJPT0wgICAgICAgICAgIHZib29sOwotKyAgfTsKLSsgIC8vCi0rICBC T09MICAgZGlzYWJsZV9pbnRfY29tcHJlc3Npb247Ci0rfTsKLSsKLSt0eXBlZGVmIHN0cnVjdCBi aW5uX3N0cnVjdCBiaW5uOwotKwotKwotKwotKy8vIC0tLSBHRU5FUkFMIEZVTkNUSU9OUyAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot KwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX3ZlcnNpb24oKTsKLSsKLSt2b2lkICAgQVBJRU5UUlkg Ymlubl9zZXRfYWxsb2NfZnVuY3Rpb25zKHZvaWQqICgqbmV3X21hbGxvYykoc2l6ZV90KSwgdm9p ZCogKCpuZXdfcmVhbGxvYykodm9pZCosc2l6ZV90KSwgdm9pZCAoKm5ld19mcmVlKSh2b2lkKikp OwotKwotK2ludCAgICBBUElFTlRSWSBiaW5uX2NyZWF0ZV90eXBlKGludCBzdG9yYWdlX3R5cGUs IGludCBkYXRhX3R5cGVfaW5kZXgpOwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF90eXBlX2lu Zm8oaW50IGxvbmdfdHlwZSwgaW50ICpwc3RvcmFnZV90eXBlLCBpbnQgKnBleHRyYV90eXBlKTsK LSsKLStpbnQgICAgQVBJRU5UUlkgYmlubl9nZXRfd3JpdGVfc3RvcmFnZShpbnQgdHlwZSk7Ci0r aW50ICAgIEFQSUVOVFJZIGJpbm5fZ2V0X3JlYWRfc3RvcmFnZShpbnQgdHlwZSk7Ci0rCi0rQk9P TCAgIEFQSUVOVFJZIGJpbm5faXNfY29udGFpbmVyKGJpbm4gKml0ZW0pOwotKwotKwotKy8vIC0t LSBXUklURSBGVU5DVElPTlMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKy8vIGNyZWF0ZSBhIG5ldyBiaW5uIGFsbG9jYXRp bmcgbWVtb3J5IGZvciB0aGUgc3RydWN0dXJlCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbmV3KGlu dCB0eXBlLCBpbnQgc2l6ZSwgdm9pZCAqYnVmZmVyKTsKLStiaW5uICogQVBJRU5UUlkgYmlubl9s aXN0KCk7Ci0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwKCk7Ci0rYmlubiAqIEFQSUVOVFJZIGJp bm5fb2JqZWN0KCk7Ci0rCi0rLy8gY3JlYXRlIGEgbmV3IGJpbm4gc3RvcmluZyB0aGUgc3RydWN0 dXJlIG9uIHRoZSBzdGFjawotK0JPT0wgQVBJRU5UUlkgYmlubl9jcmVhdGUoYmlubiAqaXRlbSwg aW50IHR5cGUsIGludCBzaXplLCB2b2lkICpidWZmZXIpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9j cmVhdGVfbGlzdChiaW5uICpsaXN0KTsKLStCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlX21hcChi aW5uICptYXApOwotK0JPT0wgQVBJRU5UUlkgYmlubl9jcmVhdGVfb2JqZWN0KGJpbm4gKm9iamVj dCk7Ci0rCi0rLy8gY3JlYXRlIGEgbmV3IGJpbm4gYXMgYSBjb3B5IGZyb20gYW5vdGhlcgotK2Jp bm4gKiBBUElFTlRSWSBiaW5uX2NvcHkoY29uc3Qgdm9pZCAqb2xkKTsKLSsKLSsKLStCT09MIEFQ SUVOVFJZIGJpbm5fbGlzdF9hZGRfbmV3KGJpbm4gKmxpc3QsIGJpbm4gKnZhbHVlKTsKLStCT09M IEFQSUVOVFJZIGJpbm5fbWFwX3NldF9uZXcoYmlubiAqbWFwLCBpbnQgaWQsIGJpbm4gKnZhbHVl KTsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3NldF9uZXcoYmlubiAqb2JqLCBjb25zdCBj aGFyICprZXksIGJpbm4gKnZhbHVlKTsKLSsKLSsKLSsvLyBleHRlbmRlZCBpbnRlcmZhY2UKLSsK LStCT09MICAgQVBJRU5UUlkgYmlubl9saXN0X2FkZChiaW5uICpsaXN0LCBpbnQgdHlwZSwgdm9p ZCAqcHZhbHVlLCBpbnQgc2l6ZSk7Ci0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fbWFwX3NldChiaW5u ICptYXAsIGludCBpZCwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOwotK0JPT0wg ICBBUElFTlRSWSBiaW5uX29iamVjdF9zZXQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGlu dCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKTsKLSsKLSsKLSsvLyByZWxlYXNlIG1lbW9y eQotKwotK3ZvaWQgICBBUElFTlRSWSBiaW5uX2ZyZWUoYmlubiAqaXRlbSk7Ci0rdm9pZCAqIEFQ SUVOVFJZIGJpbm5fcmVsZWFzZShiaW5uICppdGVtKTsgLy8gZnJlZSB0aGUgYmlubiBzdHJ1Y3R1 cmUgYnV0IGtlZXBzIHRoZSBiaW5uIGJ1ZmZlciBhbGxvY2F0ZWQsIHJldHVybmluZyBhIHBvaW50 ZXIgdG8gaXQuIHVzZSB0aGUgZnJlZSBmdW5jdGlvbiB0byByZWxlYXNlIHRoZSBidWZmZXIgbGF0 ZXIKLSsKLSsKLSsvLyAtLS0gQ1JFQVRJTkcgVkFMVUVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX3Zh bHVlKGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplLCBiaW5uX21lbV9mcmVlIGZyZWVm bik7Ci0rCi0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9pbnQ4KHNpZ25lZCBjaGFyIHZhbHVl KSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5OX0lOVDgsICZ2YWx1ZSwgMCwgTlVMTCk7Ci0r fQotK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5faW50MTYoc2hvcnQgdmFsdWUpIHsKLSsgIHJl dHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UMTYsICZ2YWx1ZSwgMCwgTlVMTCk7Ci0rfQotK0FMV0FZ U19JTkxJTkUgYmlubiAqIGJpbm5faW50MzIoaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92 YWx1ZShCSU5OX0lOVDMyLCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJp bm4gKiBiaW5uX2ludDY0KGludDY0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5O X0lOVDY0LCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5u X3VpbnQ4KHVuc2lnbmVkIGNoYXIgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5f VUlOVDgsICZ2YWx1ZSwgMCwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5f dWludDE2KHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5O X1VJTlQxNiwgJnZhbHVlLCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlu bl91aW50MzIodW5zaWduZWQgaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5O X1VJTlQzMiwgJnZhbHVlLCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlu bl91aW50NjQodWludDY0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5OX1VJTlQ2 NCwgJnZhbHVlLCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9mbG9h dChmbG9hdCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9GTE9BVCwgJnZhbHVl LCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9kb3VibGUoZG91Ymxl IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5OX0RPVUJMRSwgJnZhbHVlLCAwLCBO VUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9ib29sKEJPT0wgdmFsdWUpIHsK LSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fQk9PTCwgJnZhbHVlLCAwLCBOVUxMKTsKLSt9Ci0r QUxXQVlTX0lOTElORSBiaW5uICogYmlubl9udWxsKCkgewotKyAgcmV0dXJuIGJpbm5fdmFsdWUo QklOTl9OVUxMLCBOVUxMLCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlu bl9zdHJpbmcoY2hhciAqc3RyLCBiaW5uX21lbV9mcmVlIGZyZWVmbikgewotKyAgcmV0dXJuIGJp bm5fdmFsdWUoQklOTl9TVFJJTkcsIHN0ciwgMCwgZnJlZWZuKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBiaW5uICogYmlubl9ibG9iKHZvaWQgKnB0ciwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgZnJl ZWZuKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5OX0JMT0IsIHB0ciwgc2l6ZSwgZnJlZWZu KTsKLSt9Ci0rCi0rCi0rLy8gLS0tIFJFQUQgRlVOQ1RJT05TICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rLy8gdGhlc2Ug ZnVuY3Rpb25zIGFjY2VwdCBwb2ludGVyIHRvIHRoZSBiaW5uIHN0cnVjdHVyZSBhbmQgcG9pbnRl ciB0byB0aGUgYmlubiBidWZmZXIKLSt2b2lkICogQVBJRU5UUlkgYmlubl9wdHIoY29uc3Qgdm9p ZCAqcHRyKTsKLStpbnQgICAgQVBJRU5UUlkgYmlubl9zaXplKGNvbnN0IHZvaWQgKnB0cik7Ci0r aW50ICAgIEFQSUVOVFJZIGJpbm5fdHlwZShjb25zdCB2b2lkICpwdHIpOwotK2ludCAgICBBUElF TlRSWSBiaW5uX2NvdW50KGNvbnN0IHZvaWQgKnB0cik7Ci0rCi0rQk9PTCAgIEFQSUVOVFJZIGJp bm5faXNfdmFsaWQoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50 ICpwc2l6ZSk7Ci0rLyogdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlcyAodHlwZSwgY291 bnQgYW5kIHNpemUpIGFuZCB0aGV5IGRvbid0IG5lZWQgdG8gYmUKLSsgICBpbml0aWFsaXplZC4g dGhlc2UgdmFsdWVzIGFyZSByZWFkIGZyb20gdGhlIGJ1ZmZlci4gZXhhbXBsZToKLSsKLSsgICBp bnQgdHlwZSwgY291bnQsIHNpemU7Ci0rICAgcmVzdWx0ID0gYmlubl9pc192YWxpZChwdHIsICZ0 eXBlLCAmY291bnQsICZzaXplKTsKLSsqLwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2lzX3ZhbGlk X2V4KGNvbnN0IHZvaWQgKnB0ciwgaW50ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAqcHNpemUp OwotKy8qIGlmIHNvbWUgdmFsdWUgaXMgaW5mb3JtZWQgKHR5cGUsIGNvdW50IG9yIHNpemUpIHRo ZW4gdGhlIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgCi0rICAgdGhlIHZhbHVlIHJldHVybmVkIGZy b20gdGhlIHNlcmlhbGl6ZWQgZGF0YSBtYXRjaGVzIHRoZSBpbmZvcm1lZCB2YWx1ZS4gb3RoZXJ3 aXNlCi0rICAgdGhlIHZhbHVlcyBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8uIGV4YW1wbGU6 Ci0rCi0rICAgaW50IHR5cGU9MCwgY291bnQ9MCwgc2l6ZSA9IGtub3duX3NpemU7Ci0rICAgcmVz dWx0ID0gYmlubl9pc192YWxpZF9leChwdHIsICZ0eXBlLCAmY291bnQsICZzaXplKTsKLSsqLwot KwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2lzX3N0cnVjdChjb25zdCB2b2lkICpwdHIpOwotKwot KwotKy8vIExvYWRpbmcgYSBiaW5uIGJ1ZmZlciBpbnRvIGEgYmlubiB2YWx1ZSAtIHRoaXMgaXMg b3B0aW9uYWwKLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vcGVuKGNvbnN0IHZvaWQgKmRhdGEp OyAgICAgICAgICAgICAgLy8gYWxsb2NhdGVkIC0gdW5zZWN1cmUKLStiaW5uICogQVBJRU5UUlkg Ymlubl9vcGVuX2V4KGNvbnN0IHZvaWQgKmRhdGEsIGludCBzaXplKTsgLy8gYWxsb2NhdGVkIC0g c2VjdXJlCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fbG9hZChjb25zdCB2b2lkICpkYXRhLCBiaW5u ICppdGVtKTsgIC8vIG9uIHN0YWNrIC0gdW5zZWN1cmUKLStCT09MICAgQVBJRU5UUlkgYmlubl9s b2FkX2V4KGNvbnN0IHZvaWQgKmRhdGEsIGludCBzaXplLCBiaW5uICp2YWx1ZSk7IC8vIHNlY3Vy ZQotKwotKwotKy8vIGVhc2llc3QgaW50ZXJmYWNlIHRvIHVzZSwgYnV0IGRvbid0IGNoZWNrIGlm IHRoZSB2YWx1ZSBpcyB0aGVyZQotKwotK3NpZ25lZCBjaGFyICAgIEFQSUVOVFJZIGJpbm5fbGlz dF9pbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK3Nob3J0ICAgICAgICAgIEFQSUVO VFJZIGJpbm5fbGlzdF9pbnQxNihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLStpbnQgICAg ICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfaW50MzIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBv cyk7Ci0raW50NjQgICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2ludDY0KGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpOwotK3Vuc2lnbmVkIGNoYXIgIEFQSUVOVFJZIGJpbm5fbGlzdF91aW50 OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLSt1bnNpZ25lZCBzaG9ydCBBUElFTlRSWSBi aW5uX2xpc3RfdWludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK3Vuc2lnbmVkIGlu dCAgIEFQSUVOVFJZIGJpbm5fbGlzdF91aW50MzIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7 Ci0rdWludDY0ICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQ2NChjb25zdCB2b2lkICps aXN0LCBpbnQgcG9zKTsKLStmbG9hdCAgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfZmxvYXQo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rZG91YmxlICAgICAgICAgQVBJRU5UUlkgYmlu bl9saXN0X2RvdWJsZShjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLStCT09MICAgICAgICAg ICBBUElFTlRSWSBiaW5uX2xpc3RfYm9vbChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLStC T09MICAgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfbnVsbChjb25zdCB2b2lkICpsaXN0LCBp bnQgcG9zKTsKLStjaGFyICogICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3Rfc3RyKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9i bG9iKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCAqcHNpemUpOwotK3ZvaWQgKiAgICAg ICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9saXN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwot K3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9tYXAoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcyk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X29iamVjdChjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLSsKLStzaWduZWQgY2hhciAgICBBUElFTlRSWSBiaW5u X21hcF9pbnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStzaG9ydCAgICAgICAgICBBUElF TlRSWSBiaW5uX21hcF9pbnQxNihjb25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0raW50ICAgICAg ICAgICAgQVBJRU5UUlkgYmlubl9tYXBfaW50MzIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwot K2ludDY0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2ludDY0KGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkKTsKLSt1bnNpZ25lZCBjaGFyICBBUElFTlRSWSBiaW5uX21hcF91aW50OChjb25zdCB2 b2lkICptYXAsIGludCBpZCk7Ci0rdW5zaWduZWQgc2hvcnQgQVBJRU5UUlkgYmlubl9tYXBfdWlu dDE2KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLSt1bnNpZ25lZCBpbnQgICBBUElFTlRSWSBi aW5uX21hcF91aW50MzIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3VpbnQ2NCAgICAgICAg IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ2NChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rZmxv YXQgICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfZmxvYXQoY29uc3Qgdm9pZCAqbWFwLCBpbnQg aWQpOwotK2RvdWJsZSAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2RvdWJsZShjb25zdCB2b2lk ICptYXAsIGludCBpZCk7Ci0rQk9PTCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfYm9vbChj b25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rQk9PTCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9t YXBfbnVsbChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rY2hhciAqICAgICAgICAgQVBJRU5U UlkgYmlubl9tYXBfc3RyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLSt2b2lkICogICAgICAg ICBBUElFTlRSWSBiaW5uX21hcF9ibG9iKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQgKnBz aXplKTsKLSt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9saXN0KGNvbnN0IHZvaWQg Km1hcCwgaW50IGlkKTsKLSt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9tYXAoY29u c3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFw X29iamVjdChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rCi0rc2lnbmVkIGNoYXIgICAgQVBJ RU5UUlkgYmlubl9vYmplY3RfaW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7 Ci0rc2hvcnQgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfaW50MTYoY29uc3Qgdm9pZCAq b2JqLCBjb25zdCBjaGFyICprZXkpOwotK2ludCAgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2Jq ZWN0X2ludDMyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKLStpbnQ2NCAgICAg ICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQ2NChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSk7Ci0rdW5zaWduZWQgY2hhciAgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDgoY29u c3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZ IGJpbm5fb2JqZWN0X3VpbnQxNihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0r dW5zaWduZWQgaW50ICAgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDMyKGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KTsKLSt1aW50NjQgICAgICAgICBBUElFTlRSWSBiaW5uX29iamVj dF91aW50NjQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK2Zsb2F0ICAgICAg ICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2Zsb2F0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5KTsKLStkb3VibGUgICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9kb3VibGUoY29u c3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK0JPT0wgICAgICAgICAgIEFQSUVOVFJZ IGJpbm5fb2JqZWN0X2Jvb2woY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK0JP T0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X251bGwoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXkpOwotK2NoYXIgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3N0 cihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rdm9pZCAqICAgICAgICAgQVBJ RU5UUlkgYmlubl9vYmplY3RfYmxvYihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwg aW50ICpwc2l6ZSk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfbGlzdChj b25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5U UlkgYmlubl9vYmplY3RfbWFwKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKLSt2 b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9vYmplY3QoY29uc3Qgdm9pZCAqb2Jq LCBjb25zdCBjaGFyICprZXkpOwotKwotKwotKy8vIHJldHVybiBhIHBvaW50ZXIgdG8gYW4gYWxs b2NhdGVkIGJpbm4gc3RydWN0dXJlIC0gbXVzdCBiZSByZWxlYXNlZCB3aXRoIHRoZSBmcmVlKCkg ZnVuY3Rpb24gb3IgZXF1aXZhbGVudCBzZXQgaW4gYmlubl9zZXRfYWxsb2NfZnVuY3Rpb25zKCkK LStiaW5uICogQVBJRU5UUlkgYmlubl9saXN0X3ZhbHVlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MpOwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF92YWx1ZShjb25zdCB2b2lkICptYXAsIGlu dCBpZCk7Ci0rYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3ZhbHVlKGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KTsKLSsKLSsvLyByZWFkIHRoZSB2YWx1ZSB0byBhIGJpbm4gc3Ry dWN0dXJlIG9uIHRoZSBzdGFjawotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2dldF92YWx1ZShj b25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBiaW5uICp2YWx1ZSk7Ci0rQk9PTCBBUElFTlRSWSBi aW5uX21hcF9nZXRfdmFsdWUoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGJpbm4gKnZhbHVlKTsK LStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldF92YWx1ZShjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSwgYmlubiAqdmFsdWUpOwotKwotKy8vIHNpbmdsZSBpbnRlcmZhY2UgLSB0 aGVzZSBmdW5jdGlvbnMgY2hlY2sgdGhlIGRhdGEgdHlwZQotK0JPT0wgQVBJRU5UUlkgYmlubl9s aXN0X2dldChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVl LCBpbnQgKnBzaXplKTsKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldChjb25zdCB2b2lkICpt YXAsIGludCBpZCwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSk7Ci0rQk9PTCBB UElFTlRSWSBiaW5uX29iamVjdF9nZXQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXks IGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCAqcHNpemUpOwotKwotKy8vIHRoZXNlIDMgZnVu Y3Rpb25zIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGFuZCB0aGUgZGF0YSB0eXBlCi0r Ly8gdGhleSBhcmUgdGhyZWFkLXNhZmUgb24gYmlnLWVuZGlhbiBkZXZpY2VzCi0rLy8gb24gbGl0 dGxlLWVuZGlhbiBkZXZpY2VzIHRoZXkgYXJlIHRocmVhZC1zYWZlIG9ubHkgdG8gcmV0dXJuIHBv aW50ZXJzIHRvIGxpc3QsIG1hcCwgb2JqZWN0LCBibG9iIGFuZCBzdHJpbmdzCi0rLy8gdGhlIHJl dHVybmVkIHBvaW50ZXIgdG8gMTYsIDMyIGFuZCA2NCBiaXRzIHZhbHVlcyBtdXN0IGJlIHVzZWQg b25seSBieSBzaW5nbGUtdGhyZWFkZWQgYXBwbGljYXRpb25zCi0rdm9pZCAqIEFQSUVOVFJZIGJp bm5fbGlzdF9yZWFkKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCAqcHR5cGUsIGludCAq cHNpemUpOwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9yZWFkKGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9v YmplY3RfcmVhZChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50ICpwdHlwZSwg aW50ICpwc2l6ZSk7Ci0rCi0rCi0rLy8gUkVBRCBQQUlSIEZVTkNUSU9OUwotKwotKy8vIHRoZXNl IGZ1bmN0aW9ucyB1c2UgYmFzZSAxIGluIHRoZSAncG9zJyBhcmd1bWVudAotKwotKy8vIG9uIHN0 YWNrCi0rQk9PTCBBUElFTlRSWSBiaW5uX21hcF9nZXRfcGFpcihjb25zdCB2b2lkICptYXAsIGlu dCBwb3MsIGludCAqcGlkLCBiaW5uICp2YWx1ZSk7Ci0rQk9PTCBBUElFTlRSWSBiaW5uX29iamVj dF9nZXRfcGFpcihjb25zdCB2b2lkICpvYmosIGludCBwb3MsIGNoYXIgKnBrZXksIGJpbm4gKnZh bHVlKTsgIC8vIHRoZSBrZXkgbXVzdCBiZSBkZWNsYXJlZCBhczogY2hhciBrZXlbMjU2XTsKLSsK LSsvLyBhbGxvY2F0ZWQKLStiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfcGFpcihjb25zdCB2b2lk ICptYXAsIGludCBwb3MsIGludCAqcGlkKTsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3Rf cGFpcihjb25zdCB2b2lkICpvYmosIGludCBwb3MsIGNoYXIgKnBrZXkpOyAgLy8gdGhlIGtleSBt dXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsyNTZdOwotKwotKy8vIHRoZXNlIDIgZnVuY3Rp b25zIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGFuZCB0aGUgZGF0YSB0eXBlCi0rLy8g dGhleSBhcmUgdGhyZWFkLXNhZmUgb24gYmlnLWVuZGlhbiBkZXZpY2VzCi0rLy8gb24gbGl0dGxl LWVuZGlhbiBkZXZpY2VzIHRoZXkgYXJlIHRocmVhZC1zYWZlIG9ubHkgdG8gcmV0dXJuIHBvaW50 ZXJzIHRvIGxpc3QsIG1hcCwgb2JqZWN0LCBibG9iIGFuZCBzdHJpbmdzCi0rLy8gdGhlIHJldHVy bmVkIHBvaW50ZXIgdG8gMTYsIDMyIGFuZCA2NCBiaXRzIHZhbHVlcyBtdXN0IGJlIHVzZWQgb25s eSBieSBzaW5nbGUtdGhyZWFkZWQgYXBwbGljYXRpb25zCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5f bWFwX3JlYWRfcGFpcihjb25zdCB2b2lkICpwdHIsIGludCBwb3MsIGludCAqcGlkLCBpbnQgKnB0 eXBlLCBpbnQgKnBzaXplKTsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZF9wYWly KGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgY2hhciAqcGtleSwgaW50ICpwdHlwZSwgaW50ICpw c2l6ZSk7Ci0rCi0rCi0rLy8gU0VRVUVOVElBTCBSRUFEIEZVTkNUSU9OUwotKwotK3R5cGVkZWYg c3RydWN0IGJpbm5faXRlcl9zdHJ1Y3QgewotKyAgICB1bnNpZ25lZCBjaGFyICpwbmV4dDsKLSsg ICAgdW5zaWduZWQgY2hhciAqcGxpbWl0OwotKyAgICBpbnQgICB0eXBlOwotKyAgICBpbnQgICBj b3VudDsKLSsgICAgaW50ICAgY3VycmVudDsKLSt9IGJpbm5faXRlcjsKLSsKLStCT09MICAgQVBJ RU5UUlkgYmlubl9pdGVyX2luaXQoYmlubl9pdGVyICppdGVyLCBjb25zdCB2b2lkICpwYnVmLCBp bnQgdHlwZSk7Ci0rCi0rLy8gYWxsb2NhdGVkCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbGlzdF9u ZXh0X3ZhbHVlKGJpbm5faXRlciAqaXRlcik7Ci0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX25l eHRfdmFsdWUoYmlubl9pdGVyICppdGVyLCBpbnQgKnBpZCk7Ci0rYmlubiAqIEFQSUVOVFJZIGJp bm5fb2JqZWN0X25leHRfdmFsdWUoYmlubl9pdGVyICppdGVyLCBjaGFyICpwa2V5KTsgIC8vIHRo ZSBrZXkgbXVzdCBiZSBkZWNsYXJlZCBhczogY2hhciBrZXlbMjU2XTsKLSsKLSsvLyBvbiBzdGFj awotK0JPT0wgICBBUElFTlRSWSBiaW5uX2xpc3RfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGJpbm4g KnZhbHVlKTsKLStCT09MICAgQVBJRU5UUlkgYmlubl9tYXBfbmV4dChiaW5uX2l0ZXIgKml0ZXIs IGludCAqcGlkLCBiaW5uICp2YWx1ZSk7Ci0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X25l eHQoYmlubl9pdGVyICppdGVyLCBjaGFyICpwa2V5LCBiaW5uICp2YWx1ZSk7ICAvLyB0aGUga2V5 IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07Ci0rCi0rLy8gdGhlc2UgMyBmdW5j dGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5kIHRoZSBkYXRhIHR5cGUKLSsv LyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRldmljZXMKLSsvLyBvbiBsaXR0 bGUtZW5kaWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUgb25seSB0byByZXR1cm4gcG9p bnRlcnMgdG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0cmluZ3MKLSsvLyB0aGUgcmV0 dXJuZWQgcG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFsdWVzIG11c3QgYmUgdXNlZCBv bmx5IGJ5IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKLSt2b2lkICogQVBJRU5UUlkgYmlu bl9saXN0X3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGludCAqcHR5cGUsIGludCAqcHNpemUp OwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9yZWFkX25leHQoYmlubl9pdGVyICppdGVyLCBp bnQgKnBpZCwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSk7Ci0rdm9pZCAqIEFQSUVOVFJZIGJpbm5f b2JqZWN0X3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXksIGludCAqcHR5cGUs IGludCAqcHNpemUpOyAgLy8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsy NTZdOwotKwotKwotKy8vIC0tLSBNQUNST1MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rCi0rI2RlZmluZSBiaW5uX2lzX3dy aXRhYmxlKGl0ZW0pIChpdGVtKS0+d3JpdGFibGU7Ci0rCi0rCi0rLy8gc2V0IHZhbHVlcyBvbiBz dGFjayBhbGxvY2F0ZWQgYmlubiBzdHJ1Y3R1cmVzCi0rCi0rI2RlZmluZSBiaW5uX3NldF9udWxs KGl0ZW0pICAgICAgICAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX05VTEw7IH0gd2hpbGUgKDAp Ci0rCi0rI2RlZmluZSBiaW5uX3NldF9ib29sKGl0ZW0sdmFsdWUpICAgZG8geyAoaXRlbSktPnR5 cGUgPSBCSU5OX0JPT0w7IChpdGVtKS0+dmJvb2wgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChp dGVtKS0+dmJvb2wpOyB9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgYmlubl9zZXRfaW50KGl0ZW0s dmFsdWUpICAgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9JTlQzMjsgKGl0ZW0pLT52aW50MzIg PSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dmludDMyKTsgfSB3aGlsZSAoMCkKLSsj ZGVmaW5lIGJpbm5fc2V0X2ludDY0KGl0ZW0sdmFsdWUpICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJ Tk5fSU5UNjQ7IChpdGVtKS0+dmludDY0ID0gdmFsdWU7IChpdGVtKS0+cHRyID0gJigoaXRlbSkt PnZpbnQ2NCk7IH0gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBiaW5uX3NldF91aW50KGl0ZW0sdmFs dWUpICAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX1VJTlQzMjsgKGl0ZW0pLT52dWludDMyID0g dmFsdWU7IChpdGVtKS0+cHRyID0gJigoaXRlbSktPnZ1aW50MzIpOyB9IHdoaWxlICgwKQotKyNk ZWZpbmUgYmlubl9zZXRfdWludDY0KGl0ZW0sdmFsdWUpIGRvIHsgKGl0ZW0pLT50eXBlID0gQklO Tl9VSU5UNjQ7IChpdGVtKS0+dnVpbnQ2NCA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0p LT52dWludDY0KTsgfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIGJpbm5fc2V0X2Zsb2F0KGl0ZW0s dmFsdWUpICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fRkxPQVQ7ICAoaXRlbSktPnZmbG9hdCAg PSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dmZsb2F0KTsgfSB3aGlsZSAoMCkKLSsj ZGVmaW5lIGJpbm5fc2V0X2RvdWJsZShpdGVtLHZhbHVlKSBkbyB7IChpdGVtKS0+dHlwZSA9IEJJ Tk5fRE9VQkxFOyAoaXRlbSktPnZkb3VibGUgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVt KS0+dmRvdWJsZSk7IH0gd2hpbGUgKDApCi0rCi0rLy8jZGVmaW5lIGJpbm5fc2V0X3N0cmluZyhp dGVtLHN0cixwZnJlZSkgICAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX1NUUklORzsgKGl0ZW0p LT5wdHIgPSBzdHI7IChpdGVtKS0+ZnJlZWZuID0gcGZyZWU7IH0gd2hpbGUgKDApCi0rLy8jZGVm aW5lIGJpbm5fc2V0X2Jsb2IoaXRlbSxwdHIsc2l6ZSxwZnJlZSkgZG8geyAoaXRlbSktPnR5cGUg PSBCSU5OX0JMT0I7ICAgKGl0ZW0pLT5wdHIgPSBwdHI7IChpdGVtKS0+ZnJlZWZuID0gcGZyZWU7 IChpdGVtKS0+c2l6ZSA9IHNpemU7IH0gd2hpbGUgKDApCi0rQk9PTCBBUElFTlRSWSBiaW5uX3Nl dF9zdHJpbmcoYmlubiAqaXRlbSwgY2hhciAqc3RyLCBiaW5uX21lbV9mcmVlIHBmcmVlKTsKLStC T09MIEFQSUVOVFJZIGJpbm5fc2V0X2Jsb2IoYmlubiAqaXRlbSwgdm9pZCAqcHRyLCBpbnQgc2l6 ZSwgYmlubl9tZW1fZnJlZSBwZnJlZSk7Ci0rCi0rCi0rLy8jZGVmaW5lIGJpbm5fZG91YmxlKHZh bHVlKSB7ICAgICAgIChpdGVtKS0+dHlwZSA9IEJJTk5fRE9VQkxFOyAoaXRlbSktPnZkb3VibGUg PSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dmRvdWJsZSkgfQotKwotKwotKwotKy8v IEZPUkVBQ0ggTUFDUk9TCi0rLy8gLS0tLS0tLS0tLS0tLS0KLSsvLwotKy8vIFdlIG11c3QgdXNl IHRoZXNlIGRlY2xhcmF0aW9ucyBpbnNpZGUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgdXNlIHRo ZSBtYWNyb3M6Ci0rLy8KLSsvLyAgYmlubl9pdGVyIGl0ZXI7Ci0rLy8gIGJpbm4gdmFsdWU7Ci0r Ly8gIGNoYXIga2V5WzI1Nl07ICAvLyBvbmx5IGZvciBvYmplY3RzCi0rLy8gIGludCAgaWQ7ICAg ICAgICAvLyBvbmx5IGZvciBtYXBzCi0rCi0rI2RlZmluZSBiaW5uX29iamVjdF9mb3JlYWNoKG9i amVjdCwga2V5LCB2YWx1ZSkgICBcCi0rICAgIGJpbm5faXRlcl9pbml0KCZpdGVyLCBvYmplY3Qs IEJJTk5fT0JKRUNUKTsgICBcCi0rICAgIHdoaWxlIChiaW5uX29iamVjdF9uZXh0KCZpdGVyLCBr ZXksICZ2YWx1ZSkpCi0rCi0rI2RlZmluZSBiaW5uX21hcF9mb3JlYWNoKG1hcCwgaWQsIHZhbHVl KSAgICAgICAgICBcCi0rICAgIGJpbm5faXRlcl9pbml0KCZpdGVyLCBtYXAsIEJJTk5fTUFQKTsg ICAgICAgICBcCi0rICAgIHdoaWxlIChiaW5uX21hcF9uZXh0KCZpdGVyLCAmaWQsICZ2YWx1ZSkp Ci0rCi0rI2RlZmluZSBiaW5uX2xpc3RfZm9yZWFjaChsaXN0LCB2YWx1ZSkgICAgICAgICAgICBc Ci0rICAgIGJpbm5faXRlcl9pbml0KCZpdGVyLCBsaXN0LCBCSU5OX0xJU1QpOyAgICAgICBcCi0r ICAgIHdoaWxlIChiaW5uX2xpc3RfbmV4dCgmaXRlciwgJnZhbHVlKSkKLSsKLSsvLyBJZiB5b3Ug bmVlZCBuZXN0ZWQgZm9yZWFjaCBsb29wcywgdXNlIHRoZSBtYWNyb3MgYmVsb3cgZm9yIHRoZSBu ZXN0ZWQgbG9vcAotKy8vIEFsc28gd2UgbmVlZCB0byBhZGQgYW4gYWRkaXRpb25hbCBkZWNsYXJh dGlvbiBvbiB0aGUgZnVuY3Rpb24gdG8gaG9sZCB0aGUgaXRlcmF0b3IKLSsvLyBXZSBjYW4gYWRk IGluIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGZpcnN0IGl0ZXJhdG9yOgotKy8vCi0rLy8gIGJpbm5f aXRlciBpdGVyLCBpdGVyMjsKLSsKLSsjZGVmaW5lIGJpbm5fb2JqZWN0X2ZvcmVhY2gyKG9iamVj dCwga2V5LCB2YWx1ZSkgICBcCi0rICAgIGJpbm5faXRlcl9pbml0KCZpdGVyMiwgb2JqZWN0LCBC SU5OX09CSkVDVCk7ICAgXAotKyAgICB3aGlsZSAoYmlubl9vYmplY3RfbmV4dCgmaXRlcjIsIGtl eSwgJnZhbHVlKSkKLSsKLSsjZGVmaW5lIGJpbm5fbWFwX2ZvcmVhY2gyKG1hcCwgaWQsIHZhbHVl KSAgICAgICAgICBcCi0rICAgIGJpbm5faXRlcl9pbml0KCZpdGVyMiwgbWFwLCBCSU5OX01BUCk7 ICAgICAgICAgXAotKyAgICB3aGlsZSAoYmlubl9tYXBfbmV4dCgmaXRlcjIsICZpZCwgJnZhbHVl KSkKLSsKLSsjZGVmaW5lIGJpbm5fbGlzdF9mb3JlYWNoMihsaXN0LCB2YWx1ZSkgICAgICAgICAg ICBcCi0rICAgIGJpbm5faXRlcl9pbml0KCZpdGVyMiwgbGlzdCwgQklOTl9MSVNUKTsgICAgICAg XAotKyAgICB3aGlsZSAoYmlubl9saXN0X25leHQoJml0ZXIyLCAmdmFsdWUpKQotKwotKwotKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKiogU0VUIEZVTkNUSU9OUyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX2xpc3RfYWRkX2ludDgoYmlubiAqbGlzdCwgc2lnbmVkIGNoYXIgdmFsdWUpIHsK LSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fSU5UOCwgJnZhbHVlLCAwKTsKLSt9 Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfaW50MTYoYmlubiAqbGlzdCwgc2hv cnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fSU5UMTYsICZ2 YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2ludDMyKGJp bm4gKmxpc3QsIGludCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklO Tl9JTlQzMiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9h ZGRfaW50NjQoYmlubiAqbGlzdCwgaW50NjQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3Rf YWRkKGxpc3QsIEJJTk5fSU5UNjQsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX2xpc3RfYWRkX3VpbnQ4KGJpbm4gKmxpc3QsIHVuc2lnbmVkIGNoYXIgdmFsdWUpIHsK LSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fVUlOVDgsICZ2YWx1ZSwgMCk7Ci0r fQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3VpbnQxNihiaW5uICpsaXN0LCB1 bnNpZ25lZCBzaG9ydCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklO Tl9VSU5UMTYsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3Rf YWRkX3VpbnQzMihiaW5uICpsaXN0LCB1bnNpZ25lZCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBi aW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fVUlOVDMyLCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF91aW50NjQoYmlubiAqbGlzdCwgdWludDY0IHZhbHVl KSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX1VJTlQ2NCwgJnZhbHVlLCAw KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfZmxvYXQoYmlubiAqbGlz dCwgZmxvYXQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fRkxP QVQzMiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRf ZG91YmxlKGJpbm4gKmxpc3QsIGRvdWJsZSB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9h ZGQobGlzdCwgQklOTl9GTE9BVDY0LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9saXN0X2FkZF9ib29sKGJpbm4gKmxpc3QsIEJPT0wgdmFsdWUpIHsKLSsgIHJldHVy biBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fQk9PTCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfbnVsbChiaW5uICpsaXN0KSB7Ci0rICByZXR1cm4g Ymlubl9saXN0X2FkZChsaXN0LCBCSU5OX05VTEwsIE5VTEwsIDApOwotK30KLStBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9saXN0X2FkZF9zdHIoYmlubiAqbGlzdCwgY2hhciAqc3RyKSB7Ci0rICBy ZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX1NUUklORywgc3RyLCAwKTsKLSt9Ci0rQUxX QVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfYmxvYihiaW5uICpsaXN0LCB2b2lkICpwdHIs IGludCBzaXplKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX0JMT0IsIHB0 ciwgc2l6ZSk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2xpc3QoYmlu biAqbGlzdCwgdm9pZCAqbGlzdDIpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJ Tk5fTElTVCwgYmlubl9wdHIobGlzdDIpLCBiaW5uX3NpemUobGlzdDIpKTsKLSt9Ci0rQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfbWFwKGJpbm4gKmxpc3QsIHZvaWQgKm1hcCkgewot KyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9NQVAsIGJpbm5fcHRyKG1hcCksIGJp bm5fc2l6ZShtYXApKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfb2Jq ZWN0KGJpbm4gKmxpc3QsIHZvaWQgKm9iaikgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlz dCwgQklOTl9PQkpFQ1QsIGJpbm5fcHRyKG9iaiksIGJpbm5fc2l6ZShvYmopKTsKLSt9Ci0rQUxX QVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdmFsdWUoYmlubiAqbGlzdCwgYmlubiAqdmFs dWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIHZhbHVlLT50eXBlLCBiaW5uX3B0 cih2YWx1ZSksIGJpbm5fc2l6ZSh2YWx1ZSkpOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsKLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2ludDgoYmlu biAqbWFwLCBpbnQgaWQsIHNpZ25lZCBjaGFyIHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBf c2V0KG1hcCwgaWQsIEJJTk5fSU5UOCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBC T09MIGJpbm5fbWFwX3NldF9pbnQxNihiaW5uICptYXAsIGludCBpZCwgc2hvcnQgdmFsdWUpIHsK LSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQxNiwgJnZhbHVlLCAwKTsK LSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9pbnQzMihiaW5uICptYXAsIGlu dCBpZCwgaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5f SU5UMzIsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRf aW50NjQoYmlubiAqbWFwLCBpbnQgaWQsIGludDY0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9t YXBfc2V0KG1hcCwgaWQsIEJJTk5fSU5UNjQsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX21hcF9zZXRfdWludDgoYmlubiAqbWFwLCBpbnQgaWQsIHVuc2lnbmVkIGNo YXIgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UOCwg JnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF91aW50MTYo YmlubiAqbWFwLCBpbnQgaWQsIHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fVUlOVDE2LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3VpbnQzMihiaW5uICptYXAsIGludCBpZCwgdW5zaWdu ZWQgaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fVUlO VDMyLCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3Vp bnQ2NChiaW5uICptYXAsIGludCBpZCwgdWludDY0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9t YXBfc2V0KG1hcCwgaWQsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9tYXBfc2V0X2Zsb2F0KGJpbm4gKm1hcCwgaW50IGlkLCBmbG9hdCB2YWx1 ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0ZMT0FUMzIsICZ2YWx1 ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfZG91YmxlKGJpbm4g Km1hcCwgaW50IGlkLCBkb3VibGUgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFw LCBpZCwgQklOTl9GTE9BVDY0LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9tYXBfc2V0X2Jvb2woYmlubiAqbWFwLCBpbnQgaWQsIEJPT0wgdmFsdWUpIHsKLSsgIHJl dHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9CT09MLCAmdmFsdWUsIDApOwotK30KLStB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X251bGwoYmlubiAqbWFwLCBpbnQgaWQpIHsK LSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9OVUxMLCBOVUxMLCAwKTsKLSt9 Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9zdHIoYmlubiAqbWFwLCBpbnQgaWQs IGNoYXIgKnN0cikgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX1NUUklO Rywgc3RyLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9ibG9iKGJp bm4gKm1hcCwgaW50IGlkLCB2b2lkICpwdHIsIGludCBzaXplKSB7Ci0rICByZXR1cm4gYmlubl9t YXBfc2V0KG1hcCwgaWQsIEJJTk5fQkxPQiwgcHRyLCBzaXplKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fbWFwX3NldF9saXN0KGJpbm4gKm1hcCwgaW50IGlkLCB2b2lkICpsaXN0KSB7 Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fTElTVCwgYmlubl9wdHIobGlz dCksIGJpbm5fc2l6ZShsaXN0KSk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9z ZXRfbWFwKGJpbm4gKm1hcCwgaW50IGlkLCB2b2lkICptYXAyKSB7Ci0rICByZXR1cm4gYmlubl9t YXBfc2V0KG1hcCwgaWQsIEJJTk5fTUFQLCBiaW5uX3B0cihtYXAyKSwgYmlubl9zaXplKG1hcDIp KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9vYmplY3QoYmlubiAqbWFw LCBpbnQgaWQsIHZvaWQgKm9iaikgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBC SU5OX09CSkVDVCwgYmlubl9wdHIob2JqKSwgYmlubl9zaXplKG9iaikpOwotK30KLStBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3ZhbHVlKGJpbm4gKm1hcCwgaW50IGlkLCBiaW5uICp2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCB2YWx1ZS0+dHlwZSwgYmlu bl9wdHIodmFsdWUpLCBiaW5uX3NpemUodmFsdWUpKTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9p bnQ4KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBzaWduZWQgY2hhciB2YWx1ZSkgewotKyAg cmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9JTlQ4LCAmdmFsdWUsIDApOwot K30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2ludDE2KGJpbm4gKm9iaiwg Y29uc3QgY2hhciAqa2V5LCBzaG9ydCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3Nl dChvYmosIGtleSwgQklOTl9JTlQxNiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBC T09MIGJpbm5fb2JqZWN0X3NldF9pbnQzMihiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50 IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDMy LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2lu dDY0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQ2NCB2YWx1ZSkgewotKyAgcmV0dXJu IGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKLSt9Ci0r QUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF91aW50OChiaW5uICpvYmosIGNvbnN0 IGNoYXIgKmtleSwgdW5zaWduZWQgY2hhciB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0 X3NldChvYmosIGtleSwgQklOTl9VSU5UOCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fb2JqZWN0X3NldF91aW50MTYoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXks IHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwg a2V5LCBCSU5OX1VJTlQxNiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fb2JqZWN0X3NldF91aW50MzIoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHVuc2lnbmVk IGludCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9V SU5UMzIsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9z ZXRfdWludDY0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCB1aW50NjQgdmFsdWUpIHsKLSsg IHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fVUlOVDY0LCAmdmFsdWUsIDAp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2Zsb2F0KGJpbm4gKm9i aiwgY29uc3QgY2hhciAqa2V5LCBmbG9hdCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0 X3NldChvYmosIGtleSwgQklOTl9GTE9BVDMyLCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2RvdWJsZShiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtl eSwgZG91YmxlIHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBC SU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29i amVjdF9zZXRfYm9vbChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgQk9PTCB2YWx1ZSkgewot KyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9CT09MLCAmdmFsdWUsIDAp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X251bGwoYmlubiAqb2Jq LCBjb25zdCBjaGFyICprZXkpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXks IEJJTk5fTlVMTCwgTlVMTCwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVj dF9zZXRfc3RyKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBjaGFyICpzdHIpIHsKLSsgIHJl dHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fU1RSSU5HLCBzdHIsIDApOwotK30K LStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2Jsb2IoYmlubiAqb2JqLCBjb25z dCBjaGFyICprZXksIHZvaWQgKnB0ciwgaW50IHNpemUpIHsKLSsgIHJldHVybiBiaW5uX29iamVj dF9zZXQob2JqLCBrZXksIEJJTk5fQkxPQiwgcHRyLCBzaXplKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fb2JqZWN0X3NldF9saXN0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCB2 b2lkICpsaXN0KSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0xJ U1QsIGJpbm5fcHRyKGxpc3QpLCBiaW5uX3NpemUobGlzdCkpOwotK30KLStBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9vYmplY3Rfc2V0X21hcChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdm9p ZCAqbWFwKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX01BUCwg Ymlubl9wdHIobWFwKSwgYmlubl9zaXplKG1hcCkpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9vYmplY3Rfc2V0X29iamVjdChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAq b2JqMikgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9PQkpFQ1Qs IGJpbm5fcHRyKG9iajIpLCBiaW5uX3NpemUob2JqMikpOwotK30KLStBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9vYmplY3Rfc2V0X3ZhbHVlKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBiaW5u ICp2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgdmFsdWUtPnR5 cGUsIGJpbm5fcHRyKHZhbHVlKSwgYmlubl9zaXplKHZhbHVlKSk7Ci0rfQotKwotKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKy8qKiogR0VUIEZVTkNUSU9OUyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX2xpc3RfZ2V0X2ludDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgc2lnbmVkIGNoYXIg KnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDgs IHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X2lu dDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHNob3J0ICpwdmFsdWUpIHsKLSsgIHJldHVy biBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9JTlQxNiwgcHZhbHVlLCBOVUxMKTsKLSt9 Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfaW50MzIoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcywgaW50ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3Qs IHBvcywgQklOTl9JTlQzMiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbGlzdF9nZXRfaW50NjQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50NjQgKnB2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDY0LCBw dmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50 OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCB1bnNpZ25lZCBjaGFyICpwdmFsdWUpIHsKLSsg IHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9VSU5UOCwgcHZhbHVlLCBOVUxM KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfdWludDE2KGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVkIHNob3J0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBi aW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9VSU5UMTYsIHB2YWx1ZSwgTlVMTCk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X3VpbnQzMihjb25zdCB2b2lkICpsaXN0 LCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9n ZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQzMiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbGlzdF9nZXRfdWludDY0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3Ms IHVpbnQ2NCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJ Tk5fVUlOVDY0LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9s aXN0X2dldF9mbG9hdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBmbG9hdCAqcHZhbHVlKSB7 Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fRkxPQVQzMiwgcHZhbHVl LCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfZG91YmxlKGNv bnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGRvdWJsZSAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fRkxPQVQ2NCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0r QUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfYm9vbChjb25zdCB2b2lkICpsaXN0LCBp bnQgcG9zLCBCT09MICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBv cywgQklOTl9CT09MLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlu bl9saXN0X2dldF9zdHIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgY2hhciAqKnB2YWx1ZSkg ewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1NUUklORywgcHZhbHVl LCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfYmxvYihjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoqcHZhbHVlLCBpbnQgKnBzaXplKSB7Ci0rICBy ZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fQkxPQiwgcHZhbHVlLCBwc2l6ZSk7 Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X2xpc3QoY29uc3Qgdm9pZCAq bGlzdCwgaW50IHBvcywgdm9pZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQo bGlzdCwgcG9zLCBCSU5OX0xJU1QsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX2xpc3RfZ2V0X21hcChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoq cHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTUFQLCBw dmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9vYmpl Y3QoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdm9pZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJu IGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX09CSkVDVCwgcHZhbHVlLCBOVUxMKTsKLSt9 Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9t YXBfZ2V0X2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHNpZ25lZCBjaGFyICpwdmFsdWUp IHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQ4LCBwdmFsdWUsIE5V TEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X2ludDE2KGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkLCBzaG9ydCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0 KG1hcCwgaWQsIEJJTk5fSU5UMTYsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX21hcF9nZXRfaW50MzIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGludCAqcHZh bHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMzIsIHB2YWx1 ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfaW50NjQoY29u c3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGludDY0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21h cF9nZXQobWFwLCBpZCwgQklOTl9JTlQ2NCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbWFwX2dldF91aW50OChjb25zdCB2b2lkICptYXAsIGludCBpZCwgdW5z aWduZWQgY2hhciAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJ Tk5fVUlOVDgsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21h cF9nZXRfdWludDE2KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBzaG9ydCAqcHZh bHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDE2LCBwdmFs dWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X3VpbnQzMihj b25zdCB2b2lkICptYXAsIGludCBpZCwgdW5zaWduZWQgaW50ICpwdmFsdWUpIHsKLSsgIHJldHVy biBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5UMzIsIHB2YWx1ZSwgTlVMTCk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfdWludDY0KGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkLCB1aW50NjQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlk LCBCSU5OX1VJTlQ2NCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbWFwX2dldF9mbG9hdChjb25zdCB2b2lkICptYXAsIGludCBpZCwgZmxvYXQgKnB2YWx1ZSkg ewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0ZMT0FUMzIsIHB2YWx1ZSwg TlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfZG91YmxlKGNvbnN0 IHZvaWQgKm1hcCwgaW50IGlkLCBkb3VibGUgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFw X2dldChtYXAsIGlkLCBCSU5OX0ZMT0FUNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfYm9vbChjb25zdCB2b2lkICptYXAsIGludCBpZCwgQk9P TCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fQk9PTCwg cHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9zdHIo Y29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGNoYXIgKipwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5u X21hcF9nZXQobWFwLCBpZCwgQklOTl9TVFJJTkcsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfYmxvYihjb25zdCB2b2lkICptYXAsIGludCBpZCwg dm9pZCAqKnB2YWx1ZSwgaW50ICpwc2l6ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAs IGlkLCBCSU5OX0JMT0IsIHB2YWx1ZSwgcHNpemUpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9tYXBfZ2V0X2xpc3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHZvaWQgKipwdmFsdWUp IHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9MSVNULCBwdmFsdWUsIE5V TEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X21hcChjb25zdCB2b2lk ICptYXAsIGludCBpZCwgdm9pZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldCht YXAsIGlkLCBCSU5OX01BUCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbWFwX2dldF9vYmplY3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHZvaWQgKipwdmFs dWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9PQkpFQ1QsIHB2YWx1 ZSwgTlVMTCk7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLy8gdXNhZ2U6Ci0r Ly8gICBpZiAoYmlubl9vYmplY3RfZ2V0X2ludDMyKG9iaiwgImtleSIsICZ2YWx1ZSkgPT0gRkFM U0UpIHh4eDsKLSsKLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2ludDgoY29u c3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHNpZ25lZCBjaGFyICpwdmFsdWUpIHsKLSsg IHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fSU5UOCwgcHZhbHVlLCBOVUxM KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9pbnQxNihjb25zdCB2 b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgc2hvcnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQxNiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0r QUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9pbnQzMihjb25zdCB2b2lkICpvYmos IGNvbnN0IGNoYXIgKmtleSwgaW50ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9n ZXQob2JqLCBrZXksIEJJTk5fSU5UMzIsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX29iamVjdF9nZXRfaW50NjQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFy ICprZXksIGludDY0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBr ZXksIEJJTk5fSU5UNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX29iamVjdF9nZXRfdWludDgoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHVu c2lnbmVkIGNoYXIgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtl eSwgQklOTl9VSU5UOCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fb2JqZWN0X2dldF91aW50MTYoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHVu c2lnbmVkIHNob3J0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBr ZXksIEJJTk5fVUlOVDE2LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9vYmplY3RfZ2V0X3VpbnQzMihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwg dW5zaWduZWQgaW50ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBr ZXksIEJJTk5fVUlOVDMyLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9vYmplY3RfZ2V0X3VpbnQ2NChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwg dWludDY0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJ Tk5fVUlOVDY0LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9v YmplY3RfZ2V0X2Zsb2F0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBmbG9hdCAq cHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0ZMT0FU MzIsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9n ZXRfZG91YmxlKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBkb3VibGUgKnB2YWx1 ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9GTE9BVDY0LCBw dmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2Jv b2woY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIEJPT0wgKnB2YWx1ZSkgewotKyAg cmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9CT09MLCBwdmFsdWUsIE5VTEwp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X3N0cihjb25zdCB2b2lk ICpvYmosIGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5f b2JqZWN0X2dldChvYmosIGtleSwgQklOTl9TVFJJTkcsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfYmxvYihjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSwgdm9pZCAqKnB2YWx1ZSwgaW50ICpwc2l6ZSkgewotKyAgcmV0dXJuIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9CTE9CLCBwdmFsdWUsIHBzaXplKTsKLSt9Ci0r QUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9saXN0KGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5LCB2b2lkICoqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rf Z2V0KG9iaiwga2V5LCBCSU5OX0xJU1QsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX29iamVjdF9nZXRfbWFwKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAq a2V5LCB2b2lkICoqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5 LCBCSU5OX01BUCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5f b2JqZWN0X2dldF9vYmplY3QoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHZvaWQg KipwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fT0JK RUNULCBwdmFsdWUsIE5VTEwpOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JP T0wgICBBUElFTlRSWSBiaW5uX2dldF9pbnQzMihiaW5uICp2YWx1ZSwgaW50ICpwaW50KTsKLStC T09MICAgQVBJRU5UUlkgYmlubl9nZXRfaW50NjQoYmlubiAqdmFsdWUsIGludDY0ICpwaW50KTsK LStCT09MICAgQVBJRU5UUlkgYmlubl9nZXRfZG91YmxlKGJpbm4gKnZhbHVlLCBkb3VibGUgKnBm bG9hdCk7Ci0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0X2Jvb2woYmlubiAqdmFsdWUsIEJPT0wg KnBib29sKTsKLStjaGFyICogQVBJRU5UUlkgYmlubl9nZXRfc3RyKGJpbm4gKnZhbHVlKTsKLSsK LSsvLyBib29sZWFuIHN0cmluZyB2YWx1ZXM6Ci0rLy8gMSwgdHJ1ZSwgeWVzLCBvbgotKy8vIDAs IGZhbHNlLCBubywgb2ZmCi0rCi0rLy8gYm9vbGVhbiBudW1iZXIgdmFsdWVzOgotKy8vICE9MCBb dHJ1ZV0KLSsvLyA9PTAgW2ZhbHNlXQotKwotKwotKyNpZmRlZiBfX2NwbHVzcGx1cwotK30KLSsj ZW5kaWYKLSsKLSsjZW5kaWYgLy9CSU5OX0gKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmln L2NoYW5uZWxzLmMgb3BlbnNzaC0xMC4zcDEvY2hhbm5lbHMuYwotLS0tIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvY2hhbm5lbHMuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAotKysr IG9wZW5zc2gtMTAuM3AxL2NoYW5uZWxzLmMJMjAyNi0wNy0wMiAwODowMTo1MS40NjMwMTA4NDkg KzAyMDAKLUBAIC05MCw2ICs5MCwxMSBAQAotIC8qIE1heGltdW0gbnVtYmVyIG9mIGZha2UgWDEx IGRpc3BsYXlzIHRvIHRyeS4gKi8KLSAjZGVmaW5lIE1BWF9ESVNQTEFZUyAgMTAwMAotIAotKy8q IGluIHZlcnNpb24gb2YgT3BlblNTSCBsYXRlciB0aGFuIDguOCBpZiB3ZSBhZHZlcnRpc2UgYSB3 aW5kb3cKLSsgKiAxNk1CIG9yIGxhcmdlciBpcyBjYXVzZXMgYSBwYXRob2xvZ2ljYWwgYmVoYXZp b3VyIHRoYXQgcmVkdWNlcwotKyAqIHRocm91Z2hwdXQuIFRoaXMgaXMgbm90IGEgZ3JlYXQgc29s dXRpb24uICovCi0rI2RlZmluZSBOT05fSFBOX1dJTkRPV19NQVggKDE1ICogMTAyNCAqIDEwMjQp Ci0rCi0gLyogUGVyLWNoYW5uZWwgY2FsbGJhY2sgZm9yIHByZS9wb3N0IElPIGFjdGlvbnMgKi8K LSB0eXBlZGVmIHZvaWQgY2hhbl9mbihzdHJ1Y3Qgc3NoICosIENoYW5uZWwgKmMpOwotIAotQEAg LTIyMiw2ICsyMjcsOSBAQAotIC8qIFNldHVwIGhlbHBlciAqLwotIHN0YXRpYyB2b2lkIGNoYW5u ZWxfaGFuZGxlcl9pbml0KHN0cnVjdCBzc2hfY2hhbm5lbHMgKnNjKTsKLSAKLSsvKiBkZWZhdWx0 IHZhbHVlcyB0byBlbmFibGUgaHBuIGFuZCB0aGUgaW5pdGlhbCBidWZmZXIgc2l6ZSAqLwotK3N0 YXRpYyBpbnQgaHBuX2Rpc2FibGVkID0gMDsKLSsKLSAvKiAtLSBjaGFubmVsIGNvcmUgKi8KLSAK LSB2b2lkCi1AQCAtNTM4LDYgKzU0NiwxNiBAQAotIAkgICAgKGMtPm91dHB1dCA9IHNzaGJ1Zl9u ZXcoKSkgPT0gTlVMTCB8fAotIAkgICAgKGMtPmV4dGVuZGVkID0gc3NoYnVmX25ldygpKSA9PSBO VUxMKQotIAkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKLSsKLSsJLyogdGhlc2UgYnVm ZmVycyBhcmUgaW1wb3J0YW50IGluIHRlcm1zIG9mIHRyYWNraW5nIGNoYW5uZWwKLSsJICogYnVm ZmVyIHVzYWdlIHNvIGxhYmVsIGFuZCB0eXBlIHRoZW0gd2l0aCBkZXNjcmlwdGl2ZSBuYW1lcyAq LwotKwlzc2hidWZfcmVsYWJlbChjLT5pbnB1dCwgImNoYW5uZWwgaW5wdXQiKTsKLSsJc3NoYnVm X3R5cGUoYy0+aW5wdXQsIEJVRl9DSEFOTkVMX0lOUFVUKTsKLSsJc3NoYnVmX3JlbGFiZWwoYy0+ b3V0cHV0LCAiY2hhbm5lbCBvdXRwdXQiKTsKLSsJc3NoYnVmX3R5cGUoYy0+b3V0cHV0LCBCVUZf Q0hBTk5FTF9PVVRQVVQpOwotKwlzc2hidWZfcmVsYWJlbChjLT5leHRlbmRlZCwgImNoYW5uZWwg ZXh0ZW5kZWQiKTsKLSsJc3NoYnVmX3R5cGUoYy0+ZXh0ZW5kZWQsIEJVRl9DSEFOTkVMX0VYVEVO REVEKTsKLSsKLSAJaWYgKChyID0gc3NoYnVmX3NldF9tYXhfc2l6ZShjLT5pbnB1dCwgQ0hBTl9J TlBVVF9NQVgpKSAhPSAwKQotIAkJZmF0YWxfZnIociwgInNzaGJ1Zl9zZXRfbWF4X3NpemUiKTsK LSAJYy0+b3N0YXRlID0gQ0hBTl9PVVRQVVRfT1BFTjsKLUBAIC01NDksNiArNTY3LDcgQEAKLSAJ Yy0+bG9jYWxfd2luZG93ID0gd2luZG93OwotIAljLT5sb2NhbF93aW5kb3dfbWF4ID0gd2luZG93 OwotIAljLT5sb2NhbF9tYXhwYWNrZXQgPSBtYXhwYWNrOwotKwljLT5keW5hbWljX3dpbmRvdyA9 IDA7Ci0gCWMtPnJlbW90ZV9uYW1lID0geHN0cmR1cChyZW1vdGVfbmFtZSk7Ci0gCWMtPmN0bF9j aGFuID0gLTE7Ci0gCWMtPmRlbGF5ZWQgPSAxOwkJLyogcHJldmVudCBjYWxsIHRvIGNoYW5uZWxf cG9zdCBoYW5kbGVyICovCi1AQCAtMTMyMyw2ICsxMzQyLDQyIEBACi0gCWMtPmlvX3dhbnQgPSBT U0hfQ0hBTl9JT19TT0NLX1c7Ci0gfQotIAotK3N0YXRpYyBpbnQKLStjaGFubmVsX3RjcHdpbnN6 KHN0cnVjdCBzc2ggKnNzaCkKLSt7Ci0rCXVfaW50MzJfdCB0Y3B3aW5zeiA9IDA7Ci0rCXNvY2ts ZW5fdCBvcHRzeiA9IHNpemVvZih0Y3B3aW5zeik7Ci0rCWludCByZXQgPSAtMTsKLSsKLSsJLyog aWYgd2UgYXJlbid0IG9uIGEgc29ja2V0IHJldHVybiAxMjhLQiAqLwotKwlpZiAoIXNzaF9wYWNr ZXRfY29ubmVjdGlvbl9pc19vbl9zb2NrZXQoc3NoKSkKLSsJCXJldHVybiAxMjggKiAxMDI0Owot KwotKwkvKiBnZXQgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KLSsJ cmV0ID0gZ2V0c29ja29wdChzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX2luKHNzaCksCi0rCSAg ICBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZ0Y3B3aW5zeiwgJm9wdHN6KTsKLSsKLSsJLyogZXJy b3Igb24gdGhlIHNvY2tldCAtIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotKwkvKiByZXR1 cm4gT3BlblNTSCdzIG1heCB3aW5kb3cgc2l6ZSAqLwotKwlpZiAocmV0ICE9IDApIHsKLSsJCWRl YnVnX2YoImdldHNvY2tvcHQgU09fUkNWQlVGIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykp OwotKwkJcmV0dXJuICgyICogMTAyNCAqIDEwMjQpOwotKwl9Ci0rCi0rCS8qIHJldHVybiBubyBt b3JlIHRoYW4gU1NIQlVGX1NJWkVfTUFYIChjdXJyZW50bHkgMTI4TUIpICovCi0rCWlmICh0Y3B3 aW5zeiA+IFNTSEJVRl9TSVpFX01BWCkKLSsJCXRjcHdpbnN6ID0gU1NIQlVGX1NJWkVfTUFYOwot KwotKwkvKiBpZiB0aGUgcmVtb3RlIHNpZGUgaXMgT3BlblNTSCBhZnRlciB2ZXJzaW9uIDguOCB3 ZSBuZWVkIHRvIHJlc3RyaWN0Ci0rCSAqIHRoZSBzaXplIG9mIHRoZSBhZHZlcnRpc2VkIHdpbmRv dy4gTm93IHRoaXMgbWVhbnMgdGhhdCBhbnkgSFBOIHRvIG5vbi1IUE4KLSsJICogY29ubmVjdGlv biB3aWxsIGJlIHdpbmRvdyBsaW1pdGVkIHRvIDE1TUIgb2YgcmVjZWl2ZSBzcGFjZS4gVGhpcyBp cyBhCi0rCSAqIG5vbi1vcHRpbWFsIHNvbHV0aW9uLgotKwkgKi8KLSsJaWYgKChzc2gtPmNvbXBh dCAmIFNTSF9SRVNUUklDVF9XSU5ET1cpICYmICh0Y3B3aW5zeiA+IE5PTl9IUE5fV0lORE9XX01B WCkpCi0rCQl0Y3B3aW5zeiA9IE5PTl9IUE5fV0lORE9XX01BWDsKLSsJcmV0dXJuICh0Y3B3aW5z eik7Ci0rfQotKwotIHN0YXRpYyB2b2lkCi0gY2hhbm5lbF9wcmVfb3BlbihzdHJ1Y3Qgc3NoICpz c2gsIENoYW5uZWwgKmMpCi0gewotQEAgLTIxNzgsOCArMjIzMyw2IEBACi0gc3RhdGljIGludAot IGNoYW5uZWxfaGFuZGxlX3JmZChzdHJ1Y3Qgc3NoICpzc2gsIENoYW5uZWwgKmMpCi0gewotLQlj aGFyIGJ1ZltDSEFOX1JCVUZdOwotLQlzc2l6ZV90IGxlbjsKLSAJaW50IHIsIGZvcmNlOwotIAlz aXplX3QgbnIgPSAwLCBoYXZlLCBhdmFpbCwgbWF4bGVuID0gQ0hBTk5FTF9NQVhfUkVBRDsKLSAJ aW50IHB0eV96ZXJvcmVhZCA9IDA7Ci1AQCAtMjIyMyw2ICsyMjc2LDMwIEBACi0gCQlyZXR1cm4g MTsKLSAJfQotIAotKwkvKgotKwkgKiBEYXRhZ3JhbSBvciBmaWx0ZXJlZCBjaGFubmVsIHBhdGg6 IG5lZWRzIGEgdGVtcG9yYXJ5IHN0YWNrIGJ1ZmZlcgotKwkgKiBiZWNhdXNlIHRoZSBkYXRhIG11 c3QgcGFzcyB0aHJvdWdoIGlucHV0X2ZpbHRlcigpIG9yIGJlIGZyYW1lZCBhcwotKwkgKiBhIGRh dGFncmFtIGJlZm9yZSBlbnRlcmluZyBjLT5pbnB1dC4KLSsJICoKLSsJICogYnVmW10gKENIQU5f UkJVRiA9IDMyS0IpIGlzIGRlY2xhcmVkIGluIHRoaXMgaW5uZXIgc2NvcGUgcmF0aGVyCi0rCSAq IHRoYW4gYXQgZnVuY3Rpb24gbGV2ZWwgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBwZW5hbHR5IGZy b20KLSsJICogLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybywgd2hpY2ggY2F1c2VzIHRoZSBj b21waWxlciB0byBlbWl0Ci0rCSAqIGEgbWVtc2V0KCkgZm9yIGV2ZXJ5IGxvY2FsIHZhcmlhYmxl IG9uIGZ1bmN0aW9uIGVudHJ5LiAgV2l0aCBidWYKLSsJICogYXQgZnVuY3Rpb24gc2NvcGUgdGhl IDMyS0IgemVyb2luZyBoYXBwZW5zIG9uIGV2ZXJ5IGNhbGwsIGV2ZW4KLSsJICogdGhvdWdoIHRo ZSBzaW1wbGUtY2hhbm5lbCBmYXN0IHBhdGggYWJvdmUgKHRoZSBjb21tb24gY2FzZSBmb3IKLSsJ ICogYnVsayBkYXRhKSBuZXZlciB0b3VjaGVzIGJ1Zi4gIENQVSBwcm9maWxpbmcgc2hvd2VkIHRo aXMgZGVhZAotKwkgKiB6ZXJvaW5nIGNvbnN1bWluZyB+MTAlIG9mIGNsaWVudCBDUFUgZHVyaW5n IGhpZ2gtdGhyb3VnaHB1dAotKwkgKiB0cmFuc2ZlcnMuICBNb3ZpbmcgYnVmIGludG8gdGhpcyBz Y29wZSBsaW1pdHMgdGhlIHplcm9pbmcgdG8KLSsJICogY2FsbHMgdGhhdCBhY3R1YWxseSB0YWtl IHRoZSBkYXRhZ3JhbS9maWx0ZXIgcGF0aC4KLSsJICoKLSsJICogU2VjdXJpdHkgbm90ZTogYnVm IGlzIHN0aWxsIHplcm9lZCBieSB0aGUgY29tcGlsZXIgYmVmb3JlIHVzZSBpbgotKwkgKiB0aGlz IHBhdGguICBUaGUgc2ltcGxlLWNoYW5uZWwgcGF0aCBuZXZlciBhbGxvY2F0ZXMgYnVmIGF0IGFs bCwKLSsJICogc28gdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuCi0r CSAqLwotKwl7Ci0rCWNoYXIgYnVmW0NIQU5fUkJVRl07Ci0rCXNzaXplX3QgbGVuOwotKwotIAll cnJubyA9IDA7Ci0gCWxlbiA9IHJlYWQoYy0+cmZkLCBidWYsIHNpemVvZihidWYpKTsKLSAJLyog Zml4dXAgQUlYIHplcm8tbGVuZ3RoIHJlYWQgd2l0aCBlcnJubyBzZXQgdG8gbG9vayBtb3JlIGxp a2UgZXJyb3JzICovCi1AQCAtMjIzNSwxNSArMjMxMiw3IEBACi0gCQlkZWJ1ZzIoImNoYW5uZWwg JWQ6IHJlYWQ8PTAgcmZkICVkIGxlbiAlemQ6ICVzIiwKLSAJCSAgICBjLT5zZWxmLCBjLT5yZmQs IGxlbiwKLSAJCSAgICBsZW4gPT0gMCA/ICJjbG9zZWQiIDogc3RyZXJyb3IoZXJybm8pKTsKLS0g cmZhaWw6Ci0tCQlpZiAoYy0+dHlwZSAhPSBTU0hfQ0hBTk5FTF9PUEVOKSB7Ci0tCQkJZGVidWcy KCJjaGFubmVsICVkOiBub3Qgb3BlbiIsIGMtPnNlbGYpOwotLQkJCWNoYW5fbWFya19kZWFkKHNz aCwgYyk7Ci0tCQkJcmV0dXJuIC0xOwotLQkJfSBlbHNlIHsKLS0JCQljaGFuX3JlYWRfZmFpbGVk KHNzaCwgYyk7Ci0tCQl9Ci0tCQlyZXR1cm4gLTE7Ci0rCQlnb3RvIHJmYWlsOwotIAl9Ci0gCWNo YW5uZWxfc2V0X3VzZWRfdGltZShzc2gsIGMpOwotIAlpZiAoYy0+aW5wdXRfZmlsdGVyICE9IE5V TEwpIHsKLUBAIC0yMjU4LDYgKzIzMjcsMTcgQEAKLSAJCWZhdGFsX2ZyKHIsICJjaGFubmVsICVp OiBwdXQgZGF0YSIsIGMtPnNlbGYpOwotIAotIAlyZXR1cm4gMTsKLSsJfSAvKiBlbmQgZGF0YWdy YW0vZmlsdGVyIGJ1ZltdIHNjb3BlICovCi0rCi0rIHJmYWlsOgotKwlpZiAoYy0+dHlwZSAhPSBT U0hfQ0hBTk5FTF9PUEVOKSB7Ci0rCQlkZWJ1ZzIoImNoYW5uZWwgJWQ6IG5vdCBvcGVuIiwgYy0+ c2VsZik7Ci0rCQljaGFuX21hcmtfZGVhZChzc2gsIGMpOwotKwkJcmV0dXJuIC0xOwotKwl9IGVs c2UgewotKwkJY2hhbl9yZWFkX2ZhaWxlZChzc2gsIGMpOwotKwl9Ci0rCXJldHVybiAtMTsKLSB9 Ci0gCi0gc3RhdGljIGludAotQEAgLTI0MzgsMTggKzI1MTgsMjkgQEAKLSAJICAgIGMtPmxvY2Fs X21heHBhY2tldCozKSB8fAotIAkgICAgYy0+bG9jYWxfd2luZG93IDwgYy0+bG9jYWxfd2luZG93 X21heC8yKSAmJgotIAkgICAgYy0+bG9jYWxfY29uc3VtZWQgPiAwKSB7Ci0rCQlpbnQgYWRkaXRp b24gPSAwOwotKwkJdV9pbnQzMl90IHRjcHdpbnN6ID0gY2hhbm5lbF90Y3B3aW5zeihzc2gpOwot KwkJLyogYWRqdXN0IG1heCB3aW5kb3cgc2l6ZSBpZiB3ZSBhcmUgaW4gYSBkeW5hbWljIGVudmly b25tZW50Ci0rCQkgKiBhbmQgdGhlIHRjcCByZWNlaXZlIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0 aGUgc3NoIHdpbmRvdyAqLwotKwkJaWYgKGMtPmR5bmFtaWNfd2luZG93ICYmICh0Y3B3aW5zeiA+ IGMtPmxvY2FsX3dpbmRvd19tYXgpKSB7Ci0rCQkJLyogYWdncmVzc2l2ZWx5IGdyb3cgdGhlIHdp bmRvdyAqLwotKwkJCWFkZGl0aW9uID0gdGNwd2luc3ogLSBjLT5sb2NhbF93aW5kb3dfbWF4Owot KwkJCWMtPmxvY2FsX3dpbmRvd19tYXggKz0gYWRkaXRpb247Ci0rCQkJZGVidWdfZigiQ2hhbm5l bCAlZDogV2luZG93IGdyb3d0aCB0byAlZCBieSAlZCBieXRlcyIsYy0+c2VsZiwKLSsJCQkgICAg ICBjLT5sb2NhbF93aW5kb3dfbWF4LCBhZGRpdGlvbik7Ci0rCQl9Ci0gCQlpZiAoIWMtPmhhdmVf cmVtb3RlX2lkKQotIAkJCWZhdGFsX2YoImNoYW5uZWwgJWQ6IG5vIHJlbW90ZSBpZCIsIGMtPnNl bGYpOwotIAkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwKLSAJCSAgICBTU0gyX01TR19DSEFO TkVMX1dJTkRPV19BREpVU1QpKSAhPSAwIHx8Ci0gCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihz c2gsIGMtPnJlbW90ZV9pZCkpICE9IDAgfHwKLS0JCSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNz aCwgYy0+bG9jYWxfY29uc3VtZWQpKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3RfcHV0X3Uz Mihzc2gsIGMtPmxvY2FsX2NvbnN1bWVkICsgYWRkaXRpb24pKSAhPSAwIHx8Ci0gCQkgICAgKHIg PSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKSB7Ci0gCQkJZmF0YWxfZnIociwgImNoYW5uZWwgJWki LCBjLT5zZWxmKTsKLSAJCX0KLSAJCWRlYnVnMigiY2hhbm5lbCAlZDogd2luZG93ICVkIHNlbnQg YWRqdXN0ICVkIiwgYy0+c2VsZiwKLS0JCSAgICBjLT5sb2NhbF93aW5kb3csIGMtPmxvY2FsX2Nv bnN1bWVkKTsKLS0JCWMtPmxvY2FsX3dpbmRvdyArPSBjLT5sb2NhbF9jb25zdW1lZDsKLSsJCSAg ICBjLT5sb2NhbF93aW5kb3csIGMtPmxvY2FsX2NvbnN1bWVkICsgYWRkaXRpb24pOwotKwkJYy0+ bG9jYWxfd2luZG93ICs9IGMtPmxvY2FsX2NvbnN1bWVkICsgYWRkaXRpb247Ci0gCQljLT5sb2Nh bF9jb25zdW1lZCA9IDA7Ci0gCX0KLSAJcmV0dXJuIDE7Ci1AQCAtMzAzOCw5ICszMTI5LDcgQEAK LSAJCQkgKiBpbiB1c2UuCi0gCQkJICovCi0gCQkJaWYgKENIQU5ORUxfRUZEX0lOUFVUX0FDVElW RShjKSkKLS0JCQkJZGVidWcyKCJjaGFubmVsICVkOiAiCi0tCQkJCSAgICAiaWJ1Zl9lbXB0eSBk ZWxheWVkIGVmZCAlZC8oJXp1KSIsCi0tCQkJCSAgICBjLT5zZWxmLCBjLT5lZmQsIHNzaGJ1Zl9s ZW4oYy0+ZXh0ZW5kZWQpKTsKLSsJCQkJe30KLSAJCQllbHNlCi0gCQkJCWNoYW5faWJ1Zl9lbXB0 eShzc2gsIGMpOwotIAkJfQotQEAgLTM3NTIsNyArMzg0MSw3IEBACi0gCQllcnJvcl9mcihyLCAi cGFyc2UgYWRqdXN0Iik7Ci0gCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiSW52YWxpZCB3 aW5kb3cgYWRqdXN0IG1lc3NhZ2UiKTsKLSAJfQotLQlkZWJ1ZzIoImNoYW5uZWwgJWQ6IHJjdmQg YWRqdXN0ICV1IiwgYy0+c2VsZiwgYWRqdXN0KTsKLSsJZGVidWczX2YoImNoYW5uZWwgJWQ6IHJj dmQgYWRqdXN0ICV1IiwgYy0+c2VsZiwgYWRqdXN0KTsKLSAJaWYgKChuZXdfcndpbiA9IGMtPnJl bW90ZV93aW5kb3cgKyBhZGp1c3QpIDwgYy0+cmVtb3RlX3dpbmRvdykgewotIAkJZmF0YWwoImNo YW5uZWwgJWQ6IGFkanVzdCAldSBvdmVyZmxvd3MgcmVtb3RlIHdpbmRvdyAldSIsCi0gCQkgICAg Yy0+c2VsZiwgYWRqdXN0LCBjLT5yZW1vdGVfd2luZG93KTsKLUBAIC0zODY3LDYgKzM5NTYsMTMg QEAKLSAJcmV0dXJuIGFkZHI7Ci0gfQotIAotK3ZvaWQKLStjaGFubmVsX3NldF9ocG5fZGlzYWJs ZWQoaW50IGV4dGVybmFsX2hwbl9kaXNhYmxlZCkKLSt7Ci0rCWhwbl9kaXNhYmxlZCA9IGV4dGVy bmFsX2hwbl9kaXNhYmxlZDsKLSsJZGVidWcoIkhQTiBEaXNhYmxlZDogJWQiLCBocG5fZGlzYWJs ZWQpOwotK30KLSsKLSBzdGF0aWMgaW50Ci0gY2hhbm5lbF9zZXR1cF9md2RfbGlzdGVuZXJfdGNw aXAoc3RydWN0IHNzaCAqc3NoLCBpbnQgdHlwZSwKLSAgICAgc3RydWN0IEZvcndhcmQgKmZ3ZCwg aW50ICphbGxvY2F0ZWRfbGlzdGVuX3BvcnQsCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9jaGFubmVscy5oIG9wZW5zc2gtMTAuM3AxL2NoYW5uZWxzLmgKLS0tLSBvcGVuc3NoLTEwLjNw MS5vcmlnL2NoYW5uZWxzLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsr KyBvcGVuc3NoLTEwLjNwMS9jaGFubmVscy5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIwNTc1NTM0 ICswMjAwCi1AQCAtMTgwLDYgKzE4MCw3IEBACi0gCXVfaW50CWxvY2FsX3dpbmRvd19tYXg7Ci0g CXVfaW50CWxvY2FsX2NvbnN1bWVkOwotIAl1X2ludAlsb2NhbF9tYXhwYWNrZXQ7Ci0rCWludAlk eW5hbWljX3dpbmRvdzsKLSAJaW50ICAgICBleHRlbmRlZF91c2FnZTsKLSAJaW50CWFnZW50X25l dzsJLyogRm9yIGFnZW50IGxpc3RlbmVycywgdXNlIFJGQyBYWFggcmVxZXN0cyAqLwotIAlpbnQJ c2luZ2xlX2Nvbm5lY3Rpb247Ci1AQCAtMjYzLDcgKzI2NCw3IEBACi0gI2RlZmluZSBTU0hfQ0hB Tl9JT19TT0NLCQkoU1NIX0NIQU5fSU9fU09DS19SfFNTSF9DSEFOX0lPX1NPQ0tfVykKLSAKLSAv KiBSZWFkIGJ1ZmZlciBzaXplICovCi0tI2RlZmluZSBDSEFOX1JCVUYJKDE2KjEwMjQpCi0rI2Rl ZmluZSBDSEFOX1JCVUYJQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQKLSAKLSAvKiBNYXhpbXVtIHNp emUgZm9yIGRpcmVjdCByZWFkcyB0byBidWZmZXJzICovCi0gI2RlZmluZSBDSEFOTkVMX01BWF9S RUFECUNIQU5fU0VTX1BBQ0tFVF9ERUZBVUxUCi1AQCAtNDEzLDQgKzQxNCw2IEBACi0gdm9pZAkg Y2hhbl93cml0ZV9mYWlsZWQoc3RydWN0IHNzaCAqLCBDaGFubmVsICopOwotIHZvaWQJIGNoYW5f b2J1Zl9lbXB0eShzdHJ1Y3Qgc3NoICosIENoYW5uZWwgKik7Ci0gCi0rLyogaHBuIGhhbmRsZXIg Ki8KLSt2b2lkCSBjaGFubmVsX3NldF9ocG5fZGlzYWJsZWQoaW50KTsKLSAjZW5kaWYKLWRpZmYg LU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci5jIG9wZW5zc2gtMTAuM3AxL2NpcGhlci5j Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXIuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEw NDE5NTQ0NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2NpcGhlci5jCTIwMjYtMDctMDIgMDg6 MDU6MzUuNjUxNzkyMTA2ICswMjAwCi1AQCAtNDcsMjMgKzQ3LDQwIEBACi0gI2luY2x1ZGUgIm1p c2MuaCIKLSAjaW5jbHVkZSAic3NoYnVmLmgiCi0gI2luY2x1ZGUgInNzaGVyci5oIgotKyNpbmNs dWRlICJkaWdlc3QuaCIKLSsjaW5jbHVkZSAibG9nLmgiCi0gCi0gI2luY2x1ZGUgIm9wZW5ic2Qt Y29tcGF0L29wZW5zc2wtY29tcGF0LmgiCi0gCi0rLyogZm9yIHByb3ZpZGVyIGZ1bmN0aW9ucyAq LwotKyNpZmRlZiBXSVRIX09QRU5TU0wzCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvcGFyYW1zLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcHJvdmlkZXIuaD4K LSsjZW5kaWYKLSsKLSAjaWZuZGVmIFdJVEhfT1BFTlNTTAotICNkZWZpbmUgRVZQX0NJUEhFUl9D VFggdm9pZAotKyNkZWZpbmUgRVZQX0NJUEhFUiB2b2lkCi0rI2Vsc2UKLSsvKiBmb3IgbXVsdGkt dGhyZWFkZWQgYWVzLWN0ciBjaXBoZXIgKi8KLStleHRlcm4gY29uc3QgRVZQX0NJUEhFUiAqZXZw X2Flc19jdHJfbXQodm9pZCk7Ci0gI2VuZGlmCi0gCi0gc3RydWN0IHNzaGNpcGhlcl9jdHggewot IAlpbnQJcGxhaW50ZXh0OwotIAlpbnQJZW5jcnlwdDsKLSAJRVZQX0NJUEhFUl9DVFggKmV2cDsK LSsJY29uc3QgRVZQX0NJUEhFUiAqbWV0aF9wdHI7IC8qdXNlZCB0byBmcmVlIG1lbW9yeSBpbiBh ZXNfY3RyX210ICovCi0gCXN0cnVjdCBjaGFjaGFwb2x5X2N0eCAqY3BfY3R4OwotKyNpZmRlZiBX SVRIX09QRU5TU0wKLSsJc3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICpjcF9jdHhfbXQ7Ci0rI2Vu ZGlmCi0gCXN0cnVjdCBhZXNjdHJfY3R4IGFjX2N0eDsgLyogWFhYIHVuaW9uIHdpdGggZXZwPyAq LwotIAljb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXI7Ci0gfTsKLSAKLS1zdGF0aWMgY29u c3Qgc3RydWN0IHNzaGNpcGhlciBjaXBoZXJzW10gPSB7Ci0rc3RhdGljIHN0cnVjdCBzc2hjaXBo ZXIgY2lwaGVyc1tdID0gewotICNpZmRlZiBXSVRIX09QRU5TU0wKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fREVTCi0gCXsgIjNkZXMtY2JjIiwJCTgsIDI0LCAwLCAwLCBDRkxBR19DQkMsIEVWUF9kZXNf ZWRlM19jYmMgfSwKLUBAIC04NSw2ICsxMDIsMTAgQEAKLSAjZW5kaWYKLSAJeyAiY2hhY2hhMjAt cG9seTEzMDVAb3BlbnNzaC5jb20iLAotIAkJCQk4LCA2NCwgMCwgMTYsIENGTEFHX0NIQUNIQVBP TFksIE5VTEwgfSwKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCXsgImNoYWNoYTIwLXBvbHkxMzA1 LW10QGhwbnNzaC5vcmciLAotKwkJCQk4LCA2NCwgMCwgMTYsIENGTEFHX0NIQUNIQVBPTFl8Q0ZM QUdfTVQsIE5VTEwgfSwKLSsjZW5kaWYKLSAJeyAibm9uZSIsCQk4LCAwLCAwLCAwLCBDRkxBR19O T05FLCBOVUxMIH0sCi0gCi0gCXsgTlVMTCwJCQkwLCAwLCAwLCAwLCAwLCBOVUxMIH0KLUBAIC0x MjEsMTIgKzE0Miw2MyBAQAotICNlbmRpZgotIH0KLSAKLSsvKiB1c2VkIHRvIGdldCB0aGUgY2lw aGVyIG5hbWUgd2hlbiB3ZSBhcmUgdGVzdGluZyB0bwotKyAqIHNlZSBpZiB3ZSBjYW4gbW92ZSBm cm9tIGEgc2VyaWFsIHRvIHBhcmFsbGVsIGNpcGhlcgotKyAqIG9ubHkgY2FsbGVkIGluIGNpcGhl ci1zd2l0Y2guYwotKyAqLwotK2NvbnN0IGNoYXIgKgotK2NpcGhlcl9jdHhfbmFtZShjb25zdCBz dHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MpCi0rewotKwlyZXR1cm4gY2MtPmNpcGhlci0+bmFtZTsK LSt9Ci0rCi0gdV9pbnQKLSBjaXBoZXJfYmxvY2tzaXplKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIg KmMpCi0gewotIAlyZXR1cm4gKGMtPmJsb2NrX3NpemUpOwotIH0KLSAKLSt1aW50NjRfdAotK2Np cGhlcl9yZWtleV9ibG9ja3MoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqYykKLSt7Ci0rCS8qCi0r CSAqIENoYWNoYTIwLVBvbHkxMzA1IGRvZXMgbm90IGJlbmVmaXQgZnJvbSBkYXRhLWJhc2VkIHJl a2V5aW5nLAotKwkgKiBwZXIgIlRoZSBTZWN1cml0eSBvZiBDaGFDaGEyMC1Qb2x5MTMwNSBpbiB0 aGUgTXVsdGktdXNlciBTZXR0aW5nIiwKLSsJICogRGVnYWJyaWVsZSwgSi4gUC4sIEdvdmluZGVu LCBKLCBHdW50aGVyLCBGLiBhbmQgUGF0ZXJzb24gSy4KLSsJICogQUNNIENDUyAyMDIxOyBodHRw czovL2VwcmludC5pYWNyLm9yZy8yMDIzLzA4NS5wZGYKLSsJICoKLSsJICogQ3J5cHRhbmFseXNp cyBhc2lkZSwgd2UgZG8gc3RpbGwgd2FudCBkbyBuZWVkIHRvIHByZXZlbnQgdGhlIFNTSAotKwkg KiBzZXF1ZW5jZSBudW1iZXIgd3JhcHBpbmcgYW5kIGFsc28gdG8gcmVrZXkgdG8gcHJvdmlkZSBz b21lCi0rCSAqIHByb3RlY3Rpb24gZm9yIGxvbmcgbGl2ZWQgc2Vzc2lvbnMgYWdhaW5zdCBrZXkg ZGlzY2xvc3VyZSBhdCB0aGUKLSsJICogZW5kcG9pbnRzLCBzbyBhcnJhbmdlIGZvciByZWtleWlu ZyBldmVyeSAyKiozMiBibG9ja3MgYXMgdGhlCi0rCSAqIDEyOC1iaXQgYmxvY2sgY2lwaGVycyBk byAoaS5lLiBldmVyeSAzMkdCIGRhdGEpLgotKwkgKi8KLSsJaWYgKChjLT5mbGFncyAmIENGTEFH X0NIQUNIQVBPTFkpICE9IDApCi0rCQlyZXR1cm4gKHVpbnQ2NF90KTEgPDwgMzI7Ci0rCi0rCS8q IHRoZXJlIGlzIG5vIGFjdHVhbCBuZWVkIHRvIHJla2V5IHRoZSBOVUxMIGNpcGhlciBidXQKLSsJ ICogcmVrZXlpbmcgaXMgYSBuZWNlc3Nhcnkgc3RlcC4gSW4gcGFydCwgYXMgbWVudGlvbmVkIGFi b3ZlLAotKwkgKiB0byBrZWVwIHRoZSBzZXFuciBmcm9tIHdyYXBwaW5nLiBTbyB3ZSBzZXQgaXQg dG8gdGhlCi0rCSAqIG1heGltdW0gcG9zc2libGUgLWNqciA0LzEwLzIzICovCi0rCWlmICgoYy0+ ZmxhZ3MgJiBDRkxBR19OT05FKSAhPSAwKQotKwkJcmV0dXJuICh1aW50NjRfdCkxIDw8IDMyOwot KwotKwkvKgotKwkgKiBUaGUgMl4oYmxvY2tzaXplKjIpIGxpbWl0IGlzIHRvbyBleHBlbnNpdmUg Zm9yIDNERVMsCi0rCSAqIHNvIGVuZm9yY2UgYSAxR0IgZGF0YSBsaW1pdCBmb3Igc21hbGwgYmxv Y2tzaXplcy4KLSsJICogU2VlIGRpc2N1c3Npb24gaW4gUkZDNDM0NCBzZWN0aW9uIDMuMi4KLSsJ ICovCi0rCWlmIChjLT5ibG9ja19zaXplIDwgMTYpCi0rCQlyZXR1cm4gKCh1aW50NjRfdCkxIDw8 IDMwKSAvIGMtPmJsb2NrX3NpemU7Ci0rCS8qCi0rCSAqIE90aGVyd2lzZSwgdXNlIHRoZSBSRkM0 MzQ0IHMzLjIgcmVjb21tZW5kYXRpb24gb2YgMioqKEwvNCkgYmxvY2tzCi0rCSAqIGJlZm9yZSBy ZWtleWluZyB3aGVyZSBMIGlzIHRoZSBibG9ja3NpemUgaW4gYml0cy4KLSsJICogTW9zdCBvdGhl ciBjaXBoZXJzIGhhdmUgYSAxMjggYml0IGJsb2Nrc2l6ZSwgc28gdGhpcyBlcXVhdGVzIHRvCi0r CSAqIDIqKjMyIGJsb2NrcyAvIDY0R0IgZGF0YS4KLSsJICovCi0rCXJldHVybiAodWludDY0X3Qp MSA8PCAoYy0+YmxvY2tfc2l6ZSAqIDIpOwotK30KLSsKLSB1X2ludAotIGNpcGhlcl9rZXlsZW4o Y29uc3Qgc3RydWN0IHNzaGNpcGhlciAqYykKLSB7Ci1AQCAtMTcwLDEwICsyNDIsMTAgQEAKLSAJ cmV0dXJuIGNjLT5wbGFpbnRleHQ7Ci0gfQotIAotLWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKgot K3N0cnVjdCBzc2hjaXBoZXIgKgotIGNpcGhlcl9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCi0g ewotLQljb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjOwotKwlzdHJ1Y3Qgc3NoY2lwaGVyICpjOwot IAlmb3IgKGMgPSBjaXBoZXJzOyBjLT5uYW1lICE9IE5VTEw7IGMrKykKLSAJCWlmIChzdHJjbXAo Yy0+bmFtZSwgbmFtZSkgPT0gMCkKLSAJCQlyZXR1cm4gYzsKLUBAIC0xOTUsNyArMjY3LDggQEAK LSAJZm9yICgocCA9IHN0cnNlcCgmY3AsIENJUEhFUl9TRVApKTsgcCAmJiAqcCAhPSAnXDAnOwot IAkgICAgKHAgPSBzdHJzZXAoJmNwLCBDSVBIRVJfU0VQKSkpIHsKLSAJCWMgPSBjaXBoZXJfYnlf bmFtZShwKTsKLS0JCWlmIChjID09IE5VTEwgfHwgKGMtPmZsYWdzICYgQ0ZMQUdfSU5URVJOQUwp ICE9IDApIHsKLSsJCWlmIChjID09IE5VTEwgfHwgKChjLT5mbGFncyAmIENGTEFHX0lOVEVSTkFM KSAhPSAwICYmCi0rCQkJCSAgKGMtPmZsYWdzICYgQ0ZMQUdfTk9ORSkgIT0gMCkpIHsKLSAJCQlm cmVlKGNpcGhlcl9saXN0KTsKLSAJCQlyZXR1cm4gMDsKLSAJCX0KLUBAIC0yMTYsNyArMjg5LDcg QEAKLSBpbnQKLSBjaXBoZXJfaW5pdChzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqKmNjcCwgY29uc3Qg c3RydWN0IHNzaGNpcGhlciAqY2lwaGVyLAotICAgICBjb25zdCB1X2NoYXIgKmtleSwgdV9pbnQg a2V5bGVuLCBjb25zdCB1X2NoYXIgKml2LCB1X2ludCBpdmxlbiwKLS0gICAgaW50IGRvX2VuY3J5 cHQpCi0rICAgIHVfaW50IHNlcW5yLCBpbnQgZG9fZW5jcnlwdCwgaW50IGVuYWJsZV90aHJlYWRz KQotIHsKLSAJc3RydWN0IHNzaGNpcGhlcl9jdHggKmNjID0gTlVMTDsKLSAJaW50IHJldCA9IFNT SF9FUlJfSU5URVJOQUxfRVJST1I7Ci1AQCAtMjMxLDYgKzMwNCw3IEBACi0gCi0gCWNjLT5wbGFp bnRleHQgPSAoY2lwaGVyLT5mbGFncyAmIENGTEFHX05PTkUpICE9IDA7Ci0gCWNjLT5lbmNyeXB0 ID0gZG9fZW5jcnlwdDsKLSsJY2MtPm1ldGhfcHRyID0gTlVMTDsKLSAKLSAJaWYgKGtleWxlbiA8 IGNpcGhlci0+a2V5X2xlbiB8fAotIAkgICAgKGl2ICE9IE5VTEwgJiYgaXZsZW4gPCBjaXBoZXJf aXZsZW4oY2lwaGVyKSkpIHsKLUBAIC0yNDAsOCArMzE0LDE5IEBACi0gCi0gCWNjLT5jaXBoZXIg PSBjaXBoZXI7Ci0gCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAh PSAwKSB7Ci0rI2lmZGVmIFdJVEhfT1BFTlNTTAotKwkJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAm IENGTEFHX01UKSAhPSAwKSB7Ci0rCQkJY2MtPmNwX2N0eF9tdCA9IGNoYWNoYXBvbHlfbmV3X210 KHNlcW5yLCBrZXksIGtleWxlbik7Ci0rCQkJcmV0ID0gY2MtPmNwX2N0eF9tdCAhPSBOVUxMID8g MCA6Ci0rCQkJICAgIFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSsJCX0gZWxzZSB7Ci0rCQkJ Y2MtPmNwX2N0eCA9IGNoYWNoYXBvbHlfbmV3KGtleSwga2V5bGVuKTsKLSsJCQlyZXQgPSBjYy0+ Y3BfY3R4ICE9IE5VTEwgPyAwIDogU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwotKwkJfQotKyNl bHNlCi0gCQljYy0+Y3BfY3R4ID0gY2hhY2hhcG9seV9uZXcoa2V5LCBrZXlsZW4pOwotIAkJcmV0 ID0gY2MtPmNwX2N0eCAhPSBOVUxMID8gMCA6IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSsj ZW5kaWYKLSAJCWdvdG8gb3V0OwotIAl9Ci0gCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxB R19OT05FKSAhPSAwKSB7Ci1AQCAtMjYzLDYgKzM0OCw1MyBAQAotIAkJcmV0ID0gU1NIX0VSUl9B TExPQ19GQUlMOwotIAkJZ290byBvdXQ7Ci0gCX0KLSsJLyogdGhlIGZvbGxvd2luZyBibG9jayBp cyBmb3IgQUVTLUNUUi1NVCBjaXBoZXIgc3dpdGNoaW5nCi0rCSAqIGlmIHdlIGFyZSB1c2luZyB0 aGUgY3RyIGNpcGhlciBhbmQgd2UgYXJlIHBvc3QtYXV0aCB0aGVuCi0rCSAqIHN0YXJ0IHRoZSB0 aHJlYWRlZCBjaXBoZXIuIElmIE9TU0wgc3VwcG9ydHMgcHJvdmlkZXJzIChPU1NMIDMuMCspIHRo ZW4KLSsJICogd2UgbG9hZCBvdXIgaHBuc3NoIHByb3ZpZGVyLiBJZiBpdCBkb2Vzbid0IChPU1NM IDwgMS4xKSB0aGVuIHdlIHVzZSB0aGUKLSsJICogX21ldGhfbmV3IHByb2Nlc3MgZm91bmQgaW4g Y2lwaGVyLWN0ci1tdC5jICovCi0rCWlmIChzdHJzdHIoY2MtPmNpcGhlci0+bmFtZSwgImN0ciIp ICYmIGVuYWJsZV90aHJlYWRzKSB7Ci0rI2lmZGVmIFdJVEhfT1BFTlNTTDMKLSsJCS8qIHRoaXMg dmVyc2lvbiBvZiBvcGVuc3NsIHVzZXMgcHJvdmlkZXJzICovCi0rCQlPU1NMX0xJQl9DVFggKmFl c19saWIgPSBOVUxMOyAvKiBwcm9iYWJseSBub3QgbmVlZGVkICovCi0rCQlPU1NMX1BST1ZJREVS ICphZXNfbXRfcHJvdmlkZXIgPSBOVUxMOwotKwkJdHlwZSA9IE5VTEw7Ci0rCi0rCQlpZiAoT1NT TF9QUk9WSURFUl9hZGRfYnVpbHRpbihhZXNfbGliLCAiaHBuc3NoIiwKLSsJCQkJCSAgICAgIE9T U0xfcHJvdmlkZXJfaW5pdCkgIT0gMSkgewotKwkJCWZhdGFsKCJGYWlsZWQgdG8gYWRkIEhQTlNT SCBwcm92aWRlciBmb3IgQUVTLUNUUiIpOwotKwkJfQotKwkJYWVzX210X3Byb3ZpZGVyID0gT1NT TF9QUk9WSURFUl9sb2FkKGFlc19saWIsICJocG5zc2giKTsKLSsKLSsJCWlmIChhZXNfbXRfcHJv dmlkZXIgIT0gTlVMTCkgewotKwkJCS8qIHVzZSB0aGUgcHJldmlvdXMga2V5IGxlbmd0aCB0byBk ZXRlcm1pbmUgd2hpY2ggY2lwaGVyIHRvIGxvYWQgKi8KLSsJCQlpZiAoY2lwaGVyLT5rZXlfbGVu ID09IDMyKQotKwkJCQl0eXBlID0gRVZQX0NJUEhFUl9mZXRjaChhZXNfbGliLCAiYWVzX2N0cl9t dF8yNTYiLCBOVUxMKTsKLSsJCQlpZiAoY2lwaGVyLT5rZXlfbGVuID09IDI0KQotKwkJCQl0eXBl ID0gRVZQX0NJUEhFUl9mZXRjaChhZXNfbGliLCAiYWVzX2N0cl9tdF8xOTIiLCBOVUxMKTsKLSsJ CQlpZiAoY2lwaGVyLT5rZXlfbGVuID09IDE2KQotKwkJCQl0eXBlID0gRVZQX0NJUEhFUl9mZXRj aChhZXNfbGliLCAiYWVzX2N0cl9tdF8xMjgiLCBOVUxMKTsKLSsJCQlpZiAodHlwZSA9PSBOVUxM KSB7Ci0rCQkJCUVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKLSsJCQkJZmF0YWwoIkZBSUxF RCBUTyBMT0FEIGFlc19jdHJfbXQiKTsKLSsJCQl9IGVsc2UgewotKwkJCQlkZWJ1ZygiTE9BREVE IGFlc19jdHJfbXQiKTsKLSsJCQl9Ci0rCQl9Ci0rCQllbHNlIHsKLSsJCQlFUlJfcHJpbnRfZXJy b3JzX2ZwKHN0ZGVycik7Ci0rCQkJZmF0YWwoIkZhaWxlZCB0byBsb2FkIEhQTi1TU0ggQUVTLUNU Ui1NVCBwcm92aWRlci4iKTsKLSsJCX0KLSsjZWxzZQotKwkJdHlwZSA9ICgqZXZwX2Flc19jdHJf bXQpKCk7IC8qIHNlZSBjaXBoZXItY3RyLW10LmMgKi8KLSsJCS8qIHdlIG5lZWQgdG8gZnJlZSB0 aGlzIGxhdGVyIGlmIHVzaW5nIGFlc19jdHJfbXQKLSsJCSAqIHVuZGVyIE9TU0wgMS4xLiBIb25l c3RseSwgd2UgY291bGQgYXZvaWQgdGhpcyBieSBtYWtpbmcKLSsJCSAqIGl0IGEgZ2xvYmFsIGlu IGNpcGhlci1jdHJfbXQuYyBhbmQgZXhwb3J0aW5nIGl0IGhlcmUKLSsJCSAqIHRoZW4gd2UnZCBv bmx5IGhhdmUgdG8gY2FsbCBFVlBfQ0lQSEVSX21ldGggb25jZSBidXQgdGhpcwotKwkJICogd29y a3MgZm9yIG5vdy4gVE9ETzogVGhpcy4gY2pyIDAyLjIyLjIwMjMgKi8KLSsJCWNjLT5tZXRoX3B0 ciA9IHR5cGU7Ci0rI2VuZGlmIC8qIFdJVEhfT1BFTlNTTDMgKi8KLSsJfSAvKiBpZiAoc3Ryc3Ry KCkpICovCi0gCWlmIChFVlBfQ2lwaGVySW5pdChjYy0+ZXZwLCB0eXBlLCBOVUxMLCAodV9jaGFy ICopaXYsCi0gCSAgICAoZG9fZW5jcnlwdCA9PSBDSVBIRVJfRU5DUllQVCkpID09IDApIHsKLSAJ CXJldCA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotQEAgLTMxNyw2ICs0NDksMTIgQEAKLSAg ICBjb25zdCB1X2NoYXIgKnNyYywgdV9pbnQgbGVuLCB1X2ludCBhYWRsZW4sIHVfaW50IGF1dGhs ZW4pCi0gewotIAlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0g MCkgewotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsJCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBD RkxBR19NVCkgIT0gMCkgewotKwkJCXJldHVybiBjaGFjaGFwb2x5X2NyeXB0X210KGNjLT5jcF9j dHhfbXQsIHNlcW5yLCBkZXN0LAotKwkJCSAgICBzcmMsIGxlbiwgYWFkbGVuLCBhdXRobGVuLCBj Yy0+ZW5jcnlwdCk7Ci0rCQl9Ci0rI2VuZGlmCi0gCQlyZXR1cm4gY2hhY2hhcG9seV9jcnlwdChj Yy0+Y3BfY3R4LCBzZXFuciwgZGVzdCwgc3JjLAotIAkJICAgIGxlbiwgYWFkbGVuLCBhdXRobGVu LCBjYy0+ZW5jcnlwdCk7Ci0gCX0KLUBAIC0zNzksOSArNTE3LDE2IEBACi0gY2lwaGVyX2dldF9s ZW5ndGgoc3RydWN0IHNzaGNpcGhlcl9jdHggKmNjLCB1X2ludCAqcGxlbnAsIHVfaW50IHNlcW5y LAotICAgICBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCBsZW4pCi0gewotLQlpZiAoKGNjLT5jaXBo ZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkKLSsJaWYgKChjYy0+Y2lwaGVyLT5m bGFncyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDApIHsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0r CQlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfTVQpICE9IDApIHsKLSsJCQlyZXR1cm4g Y2hhY2hhcG9seV9nZXRfbGVuZ3RoX210KGNjLT5jcF9jdHhfbXQsIHBsZW5wLAotKwkJCSAgICBz ZXFuciwgY3AsIGxlbik7Ci0rCQl9Ci0rI2VuZGlmCi0gCQlyZXR1cm4gY2hhY2hhcG9seV9nZXRf bGVuZ3RoKGNjLT5jcF9jdHgsIHBsZW5wLCBzZXFuciwKLSAJCSAgICBjcCwgbGVuKTsKLSsJfQot IAlpZiAobGVuIDwgNCkKLSAJCXJldHVybiBTU0hfRVJSX01FU1NBR0VfSU5DT01QTEVURTsKLSAJ KnBsZW5wID0gUEVFS19VMzIoY3ApOwotQEAgLTM5NCwxMyArNTM5LDM1IEBACi0gCWlmIChjYyA9 PSBOVUxMIHx8IGNjLT5jaXBoZXIgPT0gTlVMTCkKLSAJCXJldHVybjsKLSAJaWYgKChjYy0+Y2lw aGVyLT5mbGFncyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDApIHsKLSsjaWZkZWYgV0lUSF9PUEVO U1NMCi0rCQlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfTVQpICE9IDApIHsKLSsJCQlj aGFjaGFwb2x5X2ZyZWVfbXQoY2MtPmNwX2N0eF9tdCk7Ci0rCQkJY2MtPmNwX2N0eF9tdCA9IE5V TEw7Ci0rCQl9IGVsc2UgewotKwkJCWNoYWNoYXBvbHlfZnJlZShjYy0+Y3BfY3R4KTsKLSsJCQlj Yy0+Y3BfY3R4ID0gTlVMTDsKLSsJCX0KLSsjZWxzZQotIAkJY2hhY2hhcG9seV9mcmVlKGNjLT5j cF9jdHgpOwotIAkJY2MtPmNwX2N0eCA9IE5VTEw7Ci0rI2VuZGlmCi0gCX0gZWxzZSBpZiAoKGNj LT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfQUVTQ1RSKSAhPSAwKQotIAkJZXhwbGljaXRfYnplcm8o JmNjLT5hY19jdHgsIHNpemVvZihjYy0+YWNfY3R4KSk7Ci0gI2lmZGVmIFdJVEhfT1BFTlNTTAot IAlFVlBfQ0lQSEVSX0NUWF9mcmVlKGNjLT5ldnApOwotIAljYy0+ZXZwID0gTlVMTDsKLSsJLyog aWYgbWV0aF9wdHIgaXNuJ3QgbnVsbCB0aGVuIHdlIGFyZSB1c2luZyB0aGUgYWVzX2N0cl9tdAot KwkgKiBldnBfY2lwaGVyX21ldGhfbmV3KCkgaW4gY2lwaGVyLWN0ci1tdC5jIHVuZGVyIE9TU0wg MS4xCi0rCSAqIGlmIHdlIGRvbid0IGV4cGxpY2l0bHkgZnJlZSBpdCB0aGVuLCBldmVuIHRob3Vn aCB3ZSBmcmVlCi0rCSAqIHRoZSBjdHggaXQgaXMgYSBwYXJ0IG9mIGl0IGRvZXNuJ3QgZ2V0IGZy ZWVkLiBTby4uLgotKwkgKiBjanIgMi83LzIwMjMKLSsJICovCi0rI2lmICFkZWZpbmVkKFdJVEhf T1BFTlNTTDMpCi0rCWlmIChjYy0+bWV0aF9wdHIgIT0gTlVMTCkgewotKwkJRVZQX0NJUEhFUl9t ZXRoX2ZyZWUoKHZvaWQgKikoRVZQX0NJUEhFUiAqKWNjLT5tZXRoX3B0cik7Ci0rCQljYy0+bWV0 aF9wdHIgPSBOVUxMOwotKwl9Ci0rI2VuZGlmCi0gI2VuZGlmCi0gCWZyZWV6ZXJvKGNjLCBzaXpl b2YoKmNjKSk7Ci0gfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWNoYWNo YXBvbHkuYyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY2hhY2hhcG9seS5jCi0tLS0gb3BlbnNzaC0x MC4zcDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMDkyNTg4 NzgzICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLWNoYWNoYXBvbHkuYwkyMDI2LTA3 LTAyIDAwOjI3OjI5LjcyMTE0NDQ5NiArMDIwMAotQEAgLTg4LDcgKzg4LDcgQEAKLSAJaWYgKCFk b19lbmNyeXB0KSB7Ci0gCQljb25zdCB1X2NoYXIgKnRhZyA9IHNyYyArIGFhZGxlbiArIGxlbjsK LSAKLS0JCXBvbHkxMzA1X2F1dGgoZXhwZWN0ZWRfdGFnLCBzcmMsIGFhZGxlbiArIGxlbiwgcG9s eV9rZXkpOwotKwkJcG9seTEzMDVfYXV0aChOVUxMLCBleHBlY3RlZF90YWcsIHNyYywgYWFkbGVu ICsgbGVuLCBwb2x5X2tleSk7Ci0gCQlpZiAodGltaW5nc2FmZV9iY21wKGV4cGVjdGVkX3RhZywg dGFnLCBQT0xZMTMwNV9UQUdMRU4pICE9IDApIHsKLSAJCQlyID0gU1NIX0VSUl9NQUNfSU5WQUxJ RDsKLSAJCQlnb3RvIG91dDsKLUBAIC0xMDgsNyArMTA4LDcgQEAKLSAKLSAJLyogSWYgZW5jcnlw dGluZywgY2FsY3VsYXRlIGFuZCBhcHBlbmQgdGFnICovCi0gCWlmIChkb19lbmNyeXB0KSB7Ci0t CQlwb2x5MTMwNV9hdXRoKGRlc3QgKyBhYWRsZW4gKyBsZW4sIGRlc3QsIGFhZGxlbiArIGxlbiwK LSsJCXBvbHkxMzA1X2F1dGgoTlVMTCwgZGVzdCArIGFhZGxlbiArIGxlbiwgZGVzdCwgYWFkbGVu ICsgbGVuLAotIAkJICAgIHBvbHlfa2V5KTsKLSAJfQotIAlyID0gMDsKLWRpZmYgLU51ciBvcGVu c3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by5jIG9wZW5zc2gtMTAu M3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3Jp Zy9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8uYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5MjU4 ODc4MyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0 by5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIxMzM1MTY3ICswMjAwCi1AQCAtMzIsOCArMzIsMTgg QEAKLSAjaW5jbHVkZSAic3NoZXJyLmgiCi0gI2luY2x1ZGUgImNpcGhlci1jaGFjaGFwb2x5Lmgi Ci0gCi0rCi0rLyogdXNpbmcgdGhlIEVWUF9NQUMgaW50ZXJmYWNlIGZvciBwb2x5MTMwNSBpcyBz aWduaWZpY2FudGx5Ci0rICogZmFzdGVyIHRoYW4gdGhlIHZlcnNpb24gYnVuZGxlZCB3aXRoIE9w ZW5TU0guIEhvd2V2ZXIsCi0rICogdGhpcyBpbnRlcmZhY2UgaXMgb25seSBhdmFpbGFibGUgaW4g T3BlblNTTCAzLjArCi0rICogLWNqciAxMC8yMS8yMDIyICovCi0gc3RydWN0IGNoYWNoYXBvbHlf Y3R4IHsKLSAJRVZQX0NJUEhFUl9DVFggKm1haW5fZXZwLCAqaGVhZGVyX2V2cDsKLSsjaWZkZWYg T1BFTlNTTF9IQVZFX1BPTFlfRVZQCi0rCUVWUF9NQUNfQ1RYICAgICpwb2x5X2N0eDsKLSsjZWxz ZQotKwljaGFyICAgICAgICAgICAqcG9seV9jdHg7Ci0rI2VuZGlmCi0gfTsKLSAKLSBzdHJ1Y3Qg Y2hhY2hhcG9seV9jdHggKgotQEAgLTU0LDYgKzY0LDE1IEBACi0gCQlnb3RvIGZhaWw7Ci0gCWlm IChFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY3R4LT5oZWFkZXJfZXZwKSAhPSAxNikKLSAJCWdv dG8gZmFpbDsKLSsjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQCi0rCUVWUF9NQUMgKm1hYyA9 IE5VTEw7Ci0rCWlmICgobWFjID0gRVZQX01BQ19mZXRjaChOVUxMLCAiUE9MWTEzMDUiLCBOVUxM KSkgPT0gTlVMTCkKLSsJCWdvdG8gZmFpbDsKLSsJaWYgKChjdHgtPnBvbHlfY3R4ID0gRVZQX01B Q19DVFhfbmV3KG1hYykpID09IE5VTEwpCi0rCQlnb3RvIGZhaWw7Ci0rI2Vsc2UKLSsJY3R4LT5w b2x5X2N0eCA9IE5VTEw7Ci0rI2VuZGlmCi0gCXJldHVybiBjdHg7Ci0gIGZhaWw6Ci0gCWNoYWNo YXBvbHlfZnJlZShjdHgpOwotQEAgLTY3LDYgKzg2LDkgQEAKLSAJCXJldHVybjsKLSAJRVZQX0NJ UEhFUl9DVFhfZnJlZShjcGN0eC0+bWFpbl9ldnApOwotIAlFVlBfQ0lQSEVSX0NUWF9mcmVlKGNw Y3R4LT5oZWFkZXJfZXZwKTsKLSsjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQCi0rCUVWUF9N QUNfQ1RYX2ZyZWUoY3BjdHgtPnBvbHlfY3R4KTsKLSsjZW5kaWYKLSAJZnJlZXplcm8oY3BjdHgs IHNpemVvZigqY3BjdHgpKTsKLSB9Ci0gCi1AQCAtMTA1LDcgKzEyNyw3IEBACi0gCWlmICghZG9f ZW5jcnlwdCkgewotIAkJY29uc3QgdV9jaGFyICp0YWcgPSBzcmMgKyBhYWRsZW4gKyBsZW47Ci0g Ci0tCQlwb2x5MTMwNV9hdXRoKGV4cGVjdGVkX3RhZywgc3JjLCBhYWRsZW4gKyBsZW4sIHBvbHlf a2V5KTsKLSsJCXBvbHkxMzA1X2F1dGgoY3R4LT5wb2x5X2N0eCwgZXhwZWN0ZWRfdGFnLCBzcmMs IGFhZGxlbiArIGxlbiwgcG9seV9rZXkpOwotIAkJaWYgKHRpbWluZ3NhZmVfYmNtcChleHBlY3Rl ZF90YWcsIHRhZywgUE9MWTEzMDVfVEFHTEVOKSAhPSAwKSB7Ci0gCQkJciA9IFNTSF9FUlJfTUFD X0lOVkFMSUQ7Ci0gCQkJZ290byBvdXQ7Ci1AQCAtMTMxLDcgKzE1Myw3IEBACi0gCi0gCS8qIElm IGVuY3J5cHRpbmcsIGNhbGN1bGF0ZSBhbmQgYXBwZW5kIHRhZyAqLwotIAlpZiAoZG9fZW5jcnlw dCkgewotLQkJcG9seTEzMDVfYXV0aChkZXN0ICsgYWFkbGVuICsgbGVuLCBkZXN0LCBhYWRsZW4g KyBsZW4sCi0rCQlwb2x5MTMwNV9hdXRoKGN0eC0+cG9seV9jdHgsIGRlc3QgKyBhYWRsZW4gKyBs ZW4sIGRlc3QsIGFhZGxlbiArIGxlbiwKLSAJCSAgICBwb2x5X2tleSk7Ci0gCX0KLSAJciA9IDA7 Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlw dG8tbXQuYyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuYwot LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmMJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9j aXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyMTU0 MTAyNCArMDIwMAotQEAgLTAsMCArMSw3MDUgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAy MyBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCi0r ICoKLSsgKiAgQXV0aG9yOiBNaXRjaGVsbCBEb3JyZWxsIDxtd2RAcHNjLmVkdT4KLSsgKiAgQXV0 aG9yOiBDaHJpcyBSYXBpZXIgIDxyYXBpZXJAcHNjLmVkdT4KLSsgKgotKyAqIFRoaXMgbGlicmFy eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KLSsgKgotKyAqIFRo aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot KyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExpY2Vu c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBzZWUgaHR0cDovL29wZW5z b3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKwotKy8qIFRPRE86IGF1ZGl0IGlu Y2x1ZGVzICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rI2lmZGVmIFdJVEhfT1BFTlNT TAotKyNpbmNsdWRlICJvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oIgotKyNlbmRpZgot KwotKyNpZiBkZWZpbmVkKEhBVkVfRVZQX0NIQUNIQTIwKSAmJiAhZGVmaW5lZChIQVZFX0JST0tF Tl9DSEFDSEEyMCkKLSsKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHVuaXN0 ZC5oPiAvKiBuZWVkZWQgZm9yIGdldHBpZCB1bmRlciBDOTkgKi8KLSsjaW5jbHVkZSA8c3RkYXJn Lmg+IC8qIG5lZWRlZCBmb3IgbG9nLmggKi8KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPHN0ZGlvLmg+ICAvKiBuZWVkZWQgZm9yIG1pc2MuaCAqLwotKyNpbmNsdWRlIDxwdGhyZWFk Lmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0rI2luY2x1ZGUgImRlZmluZXMu aCIKLSsjaW5jbHVkZSAibG9nLmgiCi0rI2luY2x1ZGUgInNzaGJ1Zi5oIgotKyNpbmNsdWRlICJz c2hlcnIuaCIKLSsKLSsjaW5jbHVkZSAieG1hbGxvYy5oIgotKyNpbmNsdWRlICJjaXBoZXItY2hh Y2hhcG9seS5oIgotKyNpbmNsdWRlICJjaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuaCIK LSsKLSsjaWZuZGVmIGxpa2VseQotKyMgZGVmaW5lIGxpa2VseSh4KSAgIF9fYnVpbHRpbl9leHBl Y3QoISEoeCksIDEpCi0rI2VuZGlmCi0rI2lmbmRlZiB1bmxpa2VseQotKyMgZGVmaW5lIHVubGlr ZWx5KHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApCi0rI2VuZGlmCi0rCi0rLyogU2l6ZSBv ZiBrZXlzdHJlYW0gdG8gcHJlZ2VuZXJhdGUsIG1lYXN1cmVkIGluIGJ5dGVzCi0rICogd2Ugd2Fu dCB0byByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBjaGFjaGEgYmxvY2sgYW5kIGhhdmUKLSsgKiAx MjggYnl0ZXMgZm9yIG92ZXJoZWFkICovCi0rI2RlZmluZSBST1VORF9VUCh4LHkpICgoKCgoeCkt MSkvKHkpKSsxKSooeSkpCi0rI2RlZmluZSBLRVlTVFJFQU1MRU4gKFJPVU5EX1VQKChTU0hfSU9C VUZTWikgKyAxMjgsIChDSEFDSEFfQkxPQ0tMRU4pKSkKLSsKLSsvKiBCRUdJTiBUVU5BQkxFUyAq LwotKwotKy8qIE51bWJlciBvZiB3b3JrZXIgdGhyZWFkcyB0byBzcGF3bi4gKi8KLSsvKiB0aGUg Z29hbCBpcyB0byBlbnN1cmUgdGhhdCBtYWluIGlzIG5ldmVyCi0rICogd2FpdGluZyBvbiB0aGUg d29ya2VyIHRocmVhZHMgZm9yIGtleXN0cmVhbSBkYXRhICovCi0rI2RlZmluZSBOVU1USFJFQURT IDEKLSsKLSsvKiA2NCBzZWVtcyB0byBiZSBhIHByZXR0eSBibGFuY2UgYmV0d2VlbiBtZW1vcnkg YW5kIHBlcmZvcm1hbmNlCi0rICogMTI4IGlzIGFub3RoZXIgb3B0aW9uIHdpdGggc29tZXdoYXQg aGlnaGVyIG1lbW9yeSBjb25zdW1wdGlvbiAqLwotKyNkZWZpbmUgTlVNU1RSRUFNUyA2NAotKwot Ky8qIEVORCBUVU5BQkxFUyAqLwotKwotK3N0cnVjdCBtdF9rZXlzdHJlYW0gewotKwl1X2NoYXIg cG9seV9rZXlbUE9MWTEzMDVfS0VZTEVOXTsgICAgIC8qIFBPTFkxMzA1X0tFWUxFTiA9PSAzMiAq LwotKwl1X2NoYXIgaGVhZGVyU3RyZWFtW0NIQUNIQV9CTE9DS0xFTl07IC8qIENIQUNIQV9CTE9D S0xFTiA9PSA2NCAqLwotKwl1X2NoYXIgbWFpblN0cmVhbVtLRVlTVFJFQU1MRU5dOyAgICAgIC8q IEtFWVNUUkVBTUxFTiA9PSAzMjc2OCAqLwotK307Ci0rCi0rc3RydWN0IHRocmVhZERhdGEgewot KwlFVlBfQ0lQSEVSX0NUWCAqIG1haW5fZXZwOwotKwlFVlBfQ0lQSEVSX0NUWCAqIGhlYWRlcl9l dnA7Ci0rCXVfY2hhciBzZXFidWZbMTZdOwotK307Ci0rCi0rc3RydWN0IG10X2tleXN0cmVhbV9i YXRjaCB7Ci0rCXVfaW50IGJhdGNoSUQ7Ci0rCXN0cnVjdCB0aHJlYWREYXRhIHRkc1tOVU1USFJF QURTXTsKLSsJc3RydWN0IG10X2tleXN0cmVhbSBzdHJlYW1zW05VTVNUUkVBTVNdOwotK307Ci0r Ci0rc3RydWN0IGNoYWNoYXBvbHlfY3R4X210IHsKLSsJdV9pbnQgc2VxbnI7Ci0rCXVfaW50IGJh dGNoSUQ7Ci0rCi0rCXN0cnVjdCBtdF9rZXlzdHJlYW1fYmF0Y2ggYmF0Y2hlc1syXTsKLSsKLSsJ cHRocmVhZF90IG1hbmFnZXJfdGlkWzJdOwotKwlwdGhyZWFkX3Qgc2VsZl90aWQ7Ci0rCi0rCXBp ZF90IG1haW5waWQ7Ci0rCXVfY2hhciB6ZXJvc1tLRVlTVFJFQU1MRU5dOyAvKiBLRVlTVFJFQU1M RU4gPT0gMzI3NjggKi8KLSsKLSsgIC8qIGlmIE9wZW5TU0wgaGFzIHN1cHBvcnQgZm9yIFBvbHkx MzA1IGluIHRoZSBNQUMgRVZQcwotKyAgICogdXNlIHRoYXQgKE9TU0wgPj0gMy4wKSBpZiBub3Qg dGhlbiBpdCdzIE9TU0wgMS4xIHNvCi0rICAgKiB1c2UgdGhlIFBvbHkxMzA1IGRpZ2VzdCBtZXRo b2RzLiBGYWlsaW5nIHRoYXQgdXNlIHRoZQotKyAgICogaW50ZXJuYWwgcG9seTEzMDUgbWV0aG9k cyAqLwotKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKLSsJRVZQX01BQ19DVFggICAgKnBv bHlfY3R4OwotKyNlbGlmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQX1BL RVlfUE9MWTEzMDUpCi0rCUVWUF9QS0VZX0NUWCAgICpwb2x5X2N0eDsKLSsJRVZQX01EX0NUWCAg ICAgKm1kX2N0eDsKLSsJRVZQX1BLRVkgICAgICAgKnBrZXk7Ci0rCXNpemVfdCAgICAgICAgIHB0 YWdsZW47Ci0rI2Vsc2UKLSsJY2hhciAgICAgICAgICAgKnBvbHlfY3R4OwotKyNlbmRpZgotK307 Ci0rCi0rc3RydWN0IG1hbmFnZXJfdGhyZWFkX2FyZ3MgewotKwlzdHJ1Y3QgY2hhY2hhcG9seV9j dHhfbXQgKiBjdHhfbXQ7Ci0rCXVfaW50IG9sZEJhdGNoSUQ7Ci0rCWludCByZXR2YWw7Ci0rfTsK LSsKLStzdHJ1Y3Qgd29ya2VyX3RocmVhZF9hcmdzIHsKLSsJdV9pbnQgYmF0Y2hJRDsKLSsJc3Ry dWN0IG10X2tleXN0cmVhbV9iYXRjaCAqIGJhdGNoOwotKwlpbnQgdGhyZWFkSW5kZXg7Ci0rCXVf Y2hhciAqIHplcm9zOwotKwlpbnQgcmV0dmFsOwotK307Ci0rCi0rLyogZ2VuZXJhdGUgdGhlIGtl eXN0cmVhbSBhbmQgaGVhZGVyCi0rICogd2UgdXNlIG51bGxzIGZvciB0aGUgImRhdGEiICh0aGUg emVyb3MgdmFyaWFibGUpIGluIG9yZGVyIHRvCi0rICogZ2V0IHRoZSByYXcga2V5c3RyZWFtCi0r ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUgKi8KLStpbnQKLStnZW5l cmF0ZV9rZXlzdHJlYW0oc3RydWN0IG10X2tleXN0cmVhbSAqIGtzLCB1X2ludCBzZXFuciwKLSsg ICAgc3RydWN0IHRocmVhZERhdGEgKiB0ZCwgdV9jaGFyICogemVyb3MpCi0rewotKwkvKiBnZW5l cmF0ZSBwb2x5MTMwNSBrZXkgKi8KLSsJbWVtc2V0KHRkLT5zZXFidWYsIDAsIHNpemVvZih0ZC0+ c2VxYnVmKSk7Ci0rCVBPS0VfVTY0KHRkLT5zZXFidWYgKyA4LCBzZXFucik7Ci0rCW1lbXNldChr cy0+cG9seV9rZXkgLCAwLCBzaXplb2Yoa3MtPnBvbHlfa2V5KSk7Ci0rCWlmICghRVZQX0NpcGhl ckluaXQodGQtPm1haW5fZXZwLCBOVUxMLCBOVUxMLCB0ZC0+c2VxYnVmLCAxKSB8fAotKwkgICAg RVZQX0NpcGhlcih0ZC0+bWFpbl9ldnAsIGtzLT5wb2x5X2tleSwga3MtPnBvbHlfa2V5LAotKwkg ICAgc2l6ZW9mKGtzLT5wb2x5X2tleSkpIDwgMCkKLSsJCXJldHVybiAtMTsKLSsKLSsJLyogZ2Vu ZXJhdGUgaGVhZGVyIGtleXN0cmVhbSBmb3IgZW5jcnlwdGluZyBwYXlsb2FkIGxlbmd0aCAqLwot KwlpZiAoIUVWUF9DaXBoZXJJbml0KHRkLT5oZWFkZXJfZXZwLCBOVUxMLCBOVUxMLCB0ZC0+c2Vx YnVmLCAxKSB8fAotKwkgICAgRVZQX0NpcGhlcih0ZC0+aGVhZGVyX2V2cCwga3MtPmhlYWRlclN0 cmVhbSwgemVyb3MsIENIQUNIQV9CTE9DS0xFTikKLSsJICAgIDwgMCApCi0rCQlyZXR1cm4gLTE7 Ci0rCi0rCS8qIGdlbmVyYXRlIG1haW4ga2V5c3RyZWFtIGZvciBlbmNyeXB0aW5nIHBheWxvYWQg Ki8KLSsJdGQtPnNlcWJ1ZlswXSA9IDE7Ci0rCWlmICghRVZQX0NpcGhlckluaXQodGQtPm1haW5f ZXZwLCBOVUxMLCBOVUxMLCB0ZC0+c2VxYnVmLCAxKSB8fAotKwkgICAgRVZQX0NpcGhlcih0ZC0+ bWFpbl9ldnAsIGtzLT5tYWluU3RyZWFtLCB6ZXJvcywgS0VZU1RSRUFNTEVOKSA8IDApCi0rCQly ZXR1cm4gLTE7Ci0rCi0rCXJldHVybiAwOwotK30KLSsKLSsvKiBmcmVlIHRoZSBFVlAgY29udGV4 dHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlIHRocmVhZCAqLwotK3ZvaWQKLStmcmVlX3RocmVh ZERhdGEoc3RydWN0IHRocmVhZERhdGEgKiB0ZCkKLSt7Ci0rCWlmICh0ZCA9PSBOVUxMKQotKwkJ cmV0dXJuOwotKwlpZiAodGQtPm1haW5fZXZwKSAvKiBmYWxzZSBpZiBpbml0aWFsaXphdGlvbiBk aWRuJ3QgZ2V0IHRoaXMgZmFyICovCi0rCQlFVlBfQ0lQSEVSX0NUWF9mcmVlKHRkLT5tYWluX2V2 cCk7Ci0rCWlmICh0ZC0+aGVhZGVyX2V2cCkgLyogZmFsc2UgaWYgaW5pdGlhbGl6YXRpb24gZGlk bid0IGdldCB0aGlzIGZhciAqLwotKwkJRVZQX0NJUEhFUl9DVFhfZnJlZSh0ZC0+aGVhZGVyX2V2 cCk7Ci0rCWV4cGxpY2l0X2J6ZXJvKHRkLCBzaXplb2YoKnRkKSk7Ci0rfQotKwotKy8qIGluaXRp YWxpemUgdGhlIEVWUHMgdXNlZCBieSB0aGUgd29ya2VyIHRocmVhZAotKyAgIFJldHVybnMgMCBv biBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlICovCi0raW50Ci0raW5pdGlhbGl6ZV90aHJlYWRE YXRhKHN0cnVjdCB0aHJlYWREYXRhICogdGQsIGNvbnN0IHVfY2hhciAqa2V5KQotK3sKLSsJbWVt c2V0KHRkLDAsc2l6ZW9mKCp0ZCkpOwotKwlpZiAoKHRkLT5tYWluX2V2cCA9IEVWUF9DSVBIRVJf Q1RYX25ldygpKSA9PSBOVUxMIHx8Ci0rCSAgICAodGQtPmhlYWRlcl9ldnAgPSBFVlBfQ0lQSEVS X0NUWF9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZmFpbDsKLSsJaWYgKCFFVlBfQ2lwaGVySW5p dCh0ZC0+bWFpbl9ldnAsIEVWUF9jaGFjaGEyMCgpLCBrZXksIE5VTEwsIDEpKQotKwkJZ290byBm YWlsOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KHRkLT5oZWFkZXJfZXZwLCBFVlBfY2hhY2hhMjAo KSwga2V5ICsgMzIsIE5VTEwsIDEpKQotKwkJZ290byBmYWlsOwotKwlpZiAoRVZQX0NJUEhFUl9D VFhfaXZfbGVuZ3RoKHRkLT5oZWFkZXJfZXZwKSAhPSAxNikKLSsJCWdvdG8gZmFpbDsKLSsJcmV0 dXJuIDA7Ci0rIGZhaWw6Ci0rCWZyZWVfdGhyZWFkRGF0YSh0ZCk7Ci0rCXJldHVybiAtMTsKLSt9 Ci0rCi0rc3RydWN0IHdvcmtlcl90aHJlYWRfYXJncyAqCi0rd29ya2VyX3RocmVhZChzdHJ1Y3Qg d29ya2VyX3RocmVhZF9hcmdzICogYXJncykKLSt7Ci0rCS8qIGNoZWNrIGZpcnN0ICovCi0rCWlm IChhcmdzID09IE5VTEwpCi0rCQlyZXR1cm4gTlVMTDsKLSsJaWYgKGFyZ3MtPmJhdGNoID09IE5V TEwgfHwgYXJncy0+emVyb3MgPT0gTlVMTCkgewotKwkJYXJncy0+cmV0dmFsID0gMTsKLSsJCXJl dHVybiBhcmdzOwotKwl9Ci0rCi0rCWludCB0aHJlYWRJbmRleCA9IGFyZ3MtPnRocmVhZEluZGV4 OwotKwlzdHJ1Y3QgdGhyZWFkRGF0YSAqIHRkID0gJihhcmdzLT5iYXRjaC0+dGRzW3RocmVhZElu ZGV4XSk7Ci0rCXVfaW50IHJlZnNlcW5yID0gYXJncy0+YmF0Y2hJRCAqIE5VTVNUUkVBTVM7Ci0r Ci0rCWZvciAoaW50IGkgPSB0aHJlYWRJbmRleDsgaSA8IE5VTVNUUkVBTVM7IGkgKz0gTlVNVEhS RUFEUykgewotKwkJaWYgKGdlbmVyYXRlX2tleXN0cmVhbSgmKGFyZ3MtPmJhdGNoLT5zdHJlYW1z W2ldKSwgcmVmc2VxbnIgKyBpLAotKwkJICAgIHRkLCBhcmdzLT56ZXJvcykgPT0gLTEpIHsKLSsJ CQlhcmdzLT5yZXR2YWwgPSAxOwotKwkJCXJldHVybiBhcmdzOwotKwkJfQotKwl9Ci0rCi0rCWFy Z3MtPnJldHZhbCA9IDA7Ci0rCXJldHVybiBhcmdzOwotK30KLSsKLStpbnQKLStqb2luX21hbmFn ZXJfdGhyZWFkKHB0aHJlYWRfdCBtYW5hZ2VyX3RpZCkKLSt7Ci0rCXN0cnVjdCBtYW5hZ2VyX3Ro cmVhZF9hcmdzICogYXJnczsKLSsJaWYgKHB0aHJlYWRfam9pbihtYW5hZ2VyX3RpZCwgKHZvaWQg KiopICZhcmdzKSA9PSAwKSB7Ci0rCQlpZiAoYXJncyA9PSBOVUxMKSB7Ci0rCQkJZGVidWdfZigi TWFuYWdlciB0aHJlYWQgcmV0dXJuZWQgTlVMTCEiKTsKLSsJCQlyZXR1cm4gMTsKLSsJCX0gZWxz ZSBpZiAoYXJncyA9PSBQVEhSRUFEX0NBTkNFTEVEKSB7Ci0rCQkJZGVidWdfZigiTWFuYWdlciB0 aHJlYWQgY2FuY2VsZWQhIik7Ci0rCQkJcmV0dXJuIDE7Ci0rCQl9IGVsc2UgaWYgKGFyZ3MtPnJl dHZhbCAhPSAwKSB7Ci0rCQkJZGVidWdfZigiTWFuYWdlciB0aHJlYWQgZXJyb3IgKCVkKSIsIGFy Z3MtPnJldHZhbCk7Ci0rCQkJZnJlZShhcmdzKTsKLSsJCQlyZXR1cm4gMTsKLSsJCX0gZWxzZSB7 Ci0rCQkJZnJlZShhcmdzKTsKLSsJCQlyZXR1cm4gMDsKLSsJCX0KLSsJfSBlbHNlIHsKLSsJCWRl YnVnX2YoInB0aHJlYWRfam9pbiBlcnJvciEiKTsKLSsJCXJldHVybiAxOwotKwl9Ci0rfQotKwot K3ZvaWQKLStjaGFjaGFwb2x5X2ZyZWVfbXQoc3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICogY3R4 X210KQotK3sKLSsJaWYgKGN0eF9tdCA9PSBOVUxMKQotKwkJcmV0dXJuOwotKwotKyNpZmRlZiBP UEVOU1NMX0hBVkVfUE9MWV9FVlAKLSsJaWYgKGN0eF9tdC0+cG9seV9jdHggIT0gTlVMTCkgewot KwkJRVZQX01BQ19DVFhfZnJlZShjdHhfbXQtPnBvbHlfY3R4KTsKLSsJCWN0eF9tdC0+cG9seV9j dHggPSBOVUxMOwotKwl9Ci0rI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5l ZChFVlBfUEtFWV9QT0xZMTMwNSkKLSsJaWYgKGN0eF9tdC0+bWRfY3R4ICE9IE5VTEwpIHsKLSsJ CUVWUF9NRF9DVFhfZnJlZShjdHhfbXQtPm1kX2N0eCk7Ci0rCQljdHhfbXQtPm1kX2N0eCA9IE5V TEw7Ci0rCX0KLSsJaWYgKGN0eF9tdC0+cGtleSAhPSBOVUxMKSB7Ci0rCQlFVlBfUEtFWV9mcmVl KGN0eF9tdC0+cGtleSk7Ci0rCQljdHhfbXQtPnBrZXkgPSBOVUxMOwotKwl9Ci0rI2VuZGlmCi0r Ci0rCS8qCi0rCSAqIE9ubHkgY2xlYW51cCB0aGUgbWFuYWdlciB0aHJlYWRzIGlmIHdlIGFyZSB0 aGUgUElEIHRoYXQgaW5pdGlhbGl6ZWQKLSsJICogdGhlbSEgSWYgd2UncmUgYSBmb3JrLCB0aGUg dGhyZWFkcyBkb24ndCByZWFsbHkgZXhpc3QuCi0rCSAqLwotKwotKwlpZiAoZ2V0cGlkKCkgPT0g Y3R4X210LT5tYWlucGlkKSB7Ci0rCQlpZiAoY3R4X210LT5tYW5hZ2VyX3RpZFswXSAhPSBjdHhf bXQtPnNlbGZfdGlkKSB7Ci0rCQkJam9pbl9tYW5hZ2VyX3RocmVhZChjdHhfbXQtPm1hbmFnZXJf dGlkWzBdKTsKLSsJCQljdHhfbXQtPm1hbmFnZXJfdGlkWzBdID0gY3R4X210LT5zZWxmX3RpZDsK LSsJCX0KLSsJCWlmIChjdHhfbXQtPm1hbmFnZXJfdGlkWzFdICE9IGN0eF9tdC0+c2VsZl90aWQp IHsKLSsJCQlqb2luX21hbmFnZXJfdGhyZWFkKGN0eF9tdC0+bWFuYWdlcl90aWRbMV0pOwotKwkJ CWN0eF9tdC0+bWFuYWdlcl90aWRbMV0gPSBjdHhfbXQtPnNlbGZfdGlkOwotKwkJfQotKwl9Ci0r Ci0rCS8qIENsZWFudXAgdGhyZWFkIGRhdGEgc3RydWN0dXJlcy4gKi8KLSsJZm9yIChpbnQgaT0w OyBpPDI7IGkrKykKLSsJCWZvciAoaW50IGo9MDsgajxOVU1USFJFQURTOyBqKyspCi0rCQkJZnJl ZV90aHJlYWREYXRhKCYoY3R4X210LT5iYXRjaGVzW2ldLnRkc1tqXSkpOwotKwotKwkvKiBaZXJv IGFuZCBmcmVlIHRoZSB3aG9sZSBtdWx0aXRocmVhZGVkIGNpcGhlciBjb250ZXh0LiAqLwotKwlm cmVlemVybyhjdHhfbXQsIHNpemVvZigqY3R4X210KSk7Ci0rCi0rCXJldHVybjsKLSt9Ci0rCi0r c3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICoKLStjaGFjaGFwb2x5X25ld19tdCh1X2ludCBzdGFy dHNlcW5yLCBjb25zdCB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbikKLSt7Ci0rCXN0cnVjdCBj aGFjaGFwb2x5X2N0eF9tdCAqIGN0eF9tdCA9IHhtYWxsb2Moc2l6ZW9mKCpjdHhfbXQpKTsKLSsJ bWVtc2V0KGN0eF9tdCwgMCwgc2l6ZW9mKCpjdHhfbXQpKTsKLSsJLyogSW5pdGlhbGl6ZSB0aGUg c2VxdWVuY2UgbnVtYmVyLiBXaGVuIHJla2V5aW5nLCB0aGlzIHdvbid0IGJlIHplcm8uICovCi0r CWN0eF9tdC0+c2VxbnIgPSBzdGFydHNlcW5yOwotKwljdHhfbXQtPmJhdGNoSUQgPSBzdGFydHNl cW5yIC8gTlVNU1RSRUFNUzsKLSsJc3RydWN0IHRocmVhZERhdGEgbWFpbkRhdGE7Ci0rCWludCB0 RGF0YUk7Ci0rCWludCBnZW5LU2ZhaWxlZCA9IDA7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfSEFWRV9Q T0xZX0VWUAotKwlFVlBfTUFDICptYWMgPSBOVUxMOwotKwlpZiAoKG1hYyA9IEVWUF9NQUNfZmV0 Y2goTlVMTCwgIlBPTFkxMzA1IiwgTlVMTCkpID09IE5VTEwpCi0rCQlnb3RvIGZhaWw7Ci0rCWlm ICgoY3R4X210LT5wb2x5X2N0eCA9IEVWUF9NQUNfQ1RYX25ldyhtYWMpKSA9PSBOVUxMKQotKwkJ Z290byBmYWlsOwotKyNlbGlmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQ X1BLRVlfUE9MWTEzMDUpCi0rCWlmICgoY3R4X210LT5tZF9jdHggPSBFVlBfTURfQ1RYX25ldygp KSA9PSBOVUxMKQotKwkJZ290byBmYWlsOwotKwlpZiAoKGN0eF9tdC0+cGtleSA9IEVWUF9QS0VZ X25ld19tYWNfa2V5KEVWUF9QS0VZX1BPTFkxMzA1LCBOVUxMLAotKwkgICAgY3R4X210LT56ZXJv cywgUE9MWTEzMDVfS0VZTEVOKSkgPT0gTlVMTCkKLSsJCWdvdG8gZmFpbDsKLSsJaWYgKEVWUF9E aWdlc3RTaWduSW5pdChjdHhfbXQtPm1kX2N0eCwgJmN0eF9tdC0+cG9seV9jdHgsIE5VTEwsIE5V TEwsCi0rCSAgICBjdHhfbXQtPnBrZXkpID09IDApCi0rCQlnb3RvIGZhaWw7Ci0rI2Vsc2UKLSsJ Y3R4X210LT5wb2x5X2N0eCA9IE5VTEw7Ci0rI2VuZGlmCi0rCi0rCWN0eF9tdC0+YmF0Y2hlc1tj dHhfbXQtPmJhdGNoSUQgJSAyXS5iYXRjaElEID0gY3R4X210LT5iYXRjaElEOwotKwljdHhfbXQt PmJhdGNoZXNbKGN0eF9tdC0+YmF0Y2hJRCArIDEpICUgMl0uYmF0Y2hJRCA9Ci0rCSAgICBjdHhf bXQtPmJhdGNoSUQgKyAxOwotKwotKwkvKiBpbml0aWFsaXplIGJhdGNoZXNbMF0gdGRzICovCi0r CWZvciAodERhdGFJID0gMDsgdERhdGFJIDwgTlVNVEhSRUFEUzsgdERhdGFJKyspIHsKLSsJCWlm IChpbml0aWFsaXplX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMF0udGRzW3REYXRhSV0p LAotKwkJICAgIGtleSkgIT0gMCkKLSsJCQlicmVhazsKLSsJfQotKwlpZiAodERhdGFJIDwgTlVN VEhSRUFEUykgewotKwkJLyogQmFja3RyYWNrIHN0YXJ0aW5nIHdpdGggJ3REYXRhSSAtIDEnICov Ci0rCQlmb3IgKHREYXRhSS0tOyB0RGF0YUkgPj0gMDsgdERhdGFJLS0pCi0rCQkJZnJlZV90aHJl YWREYXRhKCYoY3R4X210LT5iYXRjaGVzWzBdLnRkc1t0RGF0YUldKSk7Ci0rCQlnb3RvIGZhaWw7 Ci0rCX0KLSsJLyogaW5pdGlhbGl6ZSBiYXRjaGVzWzFdIHRkcyAqLwotKwlmb3IgKHREYXRhSSA9 IDA7IHREYXRhSSA8IE5VTVRIUkVBRFM7IHREYXRhSSsrKSB7Ci0rCQlpZiAoaW5pdGlhbGl6ZV90 aHJlYWREYXRhKCYoY3R4X210LT5iYXRjaGVzWzFdLnRkc1t0RGF0YUldKSwKLSsJCSAgICBrZXkp ICE9IDApCi0rCQkJYnJlYWs7Ci0rCX0KLSsJaWYgKHREYXRhSSA8IE5VTVRIUkVBRFMpIHsKLSsJ CS8qIEJhY2t0cmFjayBzdGFydGluZyB3aXRoICd0RGF0YUkgLSAxJyAqLwotKwkJZm9yICh0RGF0 YUktLTsgdERhdGFJID49IDA7IHREYXRhSS0tKQotKwkJCWZyZWVfdGhyZWFkRGF0YSgmKGN0eF9t dC0+YmF0Y2hlc1sxXS50ZHNbdERhdGFJXSkpOwotKwkJLyogRnJlZSB0aGUgYmF0Y2hlc1swXSB0 ZHMgdG9vICovCi0rCQlmb3IgKHREYXRhSSA9IE5VTVRIUkVBRFM7IHREYXRhSSA+PSAwOyB0RGF0 YUktLSkKLSsJCQlmcmVlX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMF0udGRzW3REYXRh SV0pKTsKLSsJCWdvdG8gZmFpbDsKLSsJfQotKwotKwlpZiAoaW5pdGlhbGl6ZV90aHJlYWREYXRh KCZtYWluRGF0YSwga2V5KSAhPSAwKSB7Ci0rCQljaGFjaGFwb2x5X2ZyZWVfbXQoY3R4X210KTsK LSsJCWV4cGxpY2l0X2J6ZXJvKCZzdGFydHNlcW5yLCBzaXplb2Yoc3RhcnRzZXFucikpOwotKwkJ cmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJZm9yIChpbnQgaT0wOyBpPDI7IGkrKykgewotKwkJdV9p bnQgcmVmc2VxbnIgPSBjdHhfbXQtPmJhdGNoZXNbaV0uYmF0Y2hJRCAqIE5VTVNUUkVBTVM7Ci0r CQlmb3IgKGludCBqID0gc3RhcnRzZXFuciA+IHJlZnNlcW5yID8gc3RhcnRzZXFuciAtIHJlZnNl cW5yIDogMDsKLSsJCSAgICAgajxOVU1TVFJFQU1TOyBqKyspIHsKLSsJCQlpZiAoZ2VuZXJhdGVf a2V5c3RyZWFtKCYoY3R4X210LT5iYXRjaGVzW2ldLnN0cmVhbXNbal0pLAotKwkJCSAgICByZWZz ZXFuciArIGosICZtYWluRGF0YSwgY3R4X210LT56ZXJvcykgPT0gLTEpIHsKLSsJCQkJZGVidWdf ZigiZ2VuZXJhdGVfa2V5c3RyZWFtIGZhaWxlZCBpbiAiCi0rCQkJCSAgICAiY2hhY2hhMjAtcG9s eTEzMDVAaHBuc3NoLm9yZyIpOwotKwkJCQlnZW5LU2ZhaWxlZCA9IDE7Ci0rCQkJCWJyZWFrOyAv KiBpbXBlcmZlY3QsIGJ1dCBpdCBoZWxwcyAqLwotKwkJCX0KLSsJCX0KLSsJfQotKwotKwlmcmVl X3RocmVhZERhdGEoJm1haW5EYXRhKTsKLSsKLSsJaWYgKGdlbktTZmFpbGVkICE9IDApIHsKLSsJ CWNoYWNoYXBvbHlfZnJlZV9tdChjdHhfbXQpOwotKwkJZXhwbGljaXRfYnplcm8oJnN0YXJ0c2Vx bnIsIHNpemVvZihzdGFydHNlcW5yKSk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwkvKiBT dG9yZSB0aGUgUElEIHNvIHRoYXQgaW4gdGhlIGZ1dHVyZSwgd2UgY2FuIHRlbGwgaWYgd2UncmUg YSBmb3JrICovCi0rCWN0eF9tdC0+bWFpbnBpZCA9IGdldHBpZCgpOwotKwljdHhfbXQtPnNlbGZf dGlkID0gcHRocmVhZF9zZWxmKCk7Ci0rCWN0eF9tdC0+bWFuYWdlcl90aWRbMF0gPSBjdHhfbXQt PnNlbGZfdGlkOwotKwljdHhfbXQtPm1hbmFnZXJfdGlkWzFdID0gY3R4X210LT5zZWxmX3RpZDsK LSsJLyogd2FzIHJlcG9ydGluZyB0aGUgVElEIHVzaW5nIGdldHRpZCgpIGJ1dCBpdCdzIG5vdCBw b3J0YWJsZSAqLwotKwlkZWJ1ZzJfZigiPG1haW4gdGhyZWFkOiBwaWQ9JXUsIHB0aWQ9MHglbHg+ IiwgZ2V0cGlkKCksIHB0aHJlYWRfc2VsZigpKTsKLSsKLSsJLyogU3VjY2VzcyEgKi8KLSsJZXhw bGljaXRfYnplcm8oJnN0YXJ0c2VxbnIsIHNpemVvZihzdGFydHNlcW5yKSk7Ci0rCXJldHVybiBj dHhfbXQ7Ci0rCi0rIGZhaWw6Ci0rI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAotKwlpZiAo Y3R4X210LT5wb2x5X2N0eCAhPSBOVUxMKSB7Ci0rCQlFVlBfTUFDX0NUWF9mcmVlKGN0eF9tdC0+ cG9seV9jdHgpOwotKwkJY3R4X210LT5wb2x5X2N0eCA9IE5VTEw7Ci0rCX0KLSsjZWxpZiAhZGVm aW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9QS0VZX1BPTFkxMzA1KQotKwlpZiAo Y3R4X210LT5tZF9jdHggIT0gTlVMTCkgewotKwkJRVZQX01EX0NUWF9mcmVlKGN0eF9tdC0+bWRf Y3R4KTsKLSsJCWN0eF9tdC0+bWRfY3R4ID0gTlVMTDsKLSsJfQotKwlpZiAoY3R4X210LT5wa2V5 ICE9IE5VTEwpIHsKLSsJCUVWUF9QS0VZX2ZyZWUoY3R4X210LT5wa2V5KTsKLSsJCWN0eF9tdC0+ cGtleSA9IE5VTEw7Ci0rCX0KLSsjZW5kaWYKLSsJZnJlZXplcm8oY3R4X210LCBzaXplb2YoKmN0 eF9tdCkpOwotKwlleHBsaWNpdF9iemVybygmc3RhcnRzZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIp KTsKLSsJcmV0dXJuIE5VTEw7Ci0rfQotKwotKy8qIFBvcnRhYmxlIEZhc3RYT1IgdXNpbmcgbWVt Y3B5IHRvIGF2b2lkIHN0cmljdC1hbGlhc2luZyBhbmQgYWxpZ25tZW50IFVCLgotKyAqIFVzZXMg MTI4LWJpdCBjaHVua3Mgb24gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCBfX3VpbnQxMjhfdCAoR0ND L0NsYW5nIG9uCi0rICogNjQtYml0IHBsYXRmb3JtcyksIGZhbGxzIGJhY2sgdG8gdWludDY0X3Qg ZWxzZXdoZXJlLiAqLwotK3N0YXRpYyBpbmxpbmUgdm9pZAotK2Zhc3RYT1IyKHVfY2hhciAqZGVz dCwgY29uc3QgdV9jaGFyICpzcmMsIGNvbnN0IHVfY2hhciAqa2V5c3RyZWFtLCB1X2ludCBsZW4p Ci0rewotKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKQotKwl0eXBlZGVmIF9fdWludDEy OF90IGNodW5rOwotKyNlbHNlCi0rCXR5cGVkZWYgdWludDY0X3QgY2h1bms7Ci0rI2VuZGlmCi0r CXNpemVfdCBpID0gMDsKLSsJd2hpbGUgKGkgKyBzaXplb2YoY2h1bmspIDw9IGxlbikgewotKwkJ Y2h1bmsgYSwgYiwgcjsKLSsJCW1lbWNweSgmYSwgc3JjICsgaSwgc2l6ZW9mKGEpKTsKLSsJCW1l bWNweSgmYiwga2V5c3RyZWFtICsgaSwgc2l6ZW9mKGIpKTsKLSsJCXIgPSBhIF4gYjsKLSsJCW1l bWNweShkZXN0ICsgaSwgJnIsIHNpemVvZihyKSk7Ci0rCQlpICs9IHNpemVvZihjaHVuayk7Ci0r CX0KLSsJd2hpbGUgKGkgPCBsZW4pIHsKLSsJCWRlc3RbaV0gPSBzcmNbaV0gXiBrZXlzdHJlYW1b aV07Ci0rCQlpKys7Ci0rCX0KLSt9Ci0rCi0rc3RydWN0IG1hbmFnZXJfdGhyZWFkX2FyZ3MgKgot K21hbmFnZXJfdGhyZWFkKHN0cnVjdCBtYW5hZ2VyX3RocmVhZF9hcmdzICogbWFyZ3MpIHsKLSsJ LyogbWFrZSBzdXJlIHdlIGhhdmUgdmFsaWQgZGF0YSBiZWZvcmUgcHJvY2VlZGluZyAqLwotKwlp ZiAobWFyZ3MgPT0gTlVMTCkKLSsJCXJldHVybiBOVUxMOwotKwotKwlzdHJ1Y3QgY2hhY2hhcG9s eV9jdHhfbXQgKiBjdHhfbXQgPSBtYXJncy0+Y3R4X210OwotKwlpZiAoY3R4X210ID09IE5VTEwp IHsKLSsJCW1hcmdzLT5yZXR2YWwgPSAxOwotKwkJcmV0dXJuIG1hcmdzOwotKwl9Ci0rCi0rCXVf aW50IG9sZEJhdGNoSUQgPSBtYXJncy0+b2xkQmF0Y2hJRDsKLSsKLSsJc3RydWN0IG10X2tleXN0 cmVhbV9iYXRjaCAqIGJhdGNoID0gJihjdHhfbXQtPmJhdGNoZXNbb2xkQmF0Y2hJRCAlIDJdKTsK LSsJaWYgKGJhdGNoLT5iYXRjaElEICE9IG9sZEJhdGNoSUQpIHsKLSsJCWRlYnVnX2YoIlBvc3Qt Y3J5cHQgYmF0Y2ggbWlzcyEgU2Vla2luZyAldSwgZm91bmQgJXUuIEZhaWxpbmcuIiwKLSsJCSAg ICBvbGRCYXRjaElELCBiYXRjaC0+YmF0Y2hJRCk7Ci0rCQltYXJncy0+cmV0dmFsID0gMTsKLSsJ CXJldHVybiBtYXJnczsKLSsJfQotKwotKwltYXJncy0+cmV0dmFsID0gMDsKLSsJdV9pbnQgYmF0 Y2hJRCA9IG9sZEJhdGNoSUQgKyAyOwotKwotKwlwdGhyZWFkX3QgdGlkW05VTVRIUkVBRFNdOwot KwlzdHJ1Y3Qgd29ya2VyX3RocmVhZF9hcmdzICogd2FyZ3MgPSBtYWxsb2MoTlVNVEhSRUFEUyAq IHNpemVvZigqd2FyZ3MpKTsKLSsJaW50IHRpOwotKwotKwlmb3IgKHRpID0gMDsgdGkgPCBOVU1U SFJFQURTOyB0aSsrKSB7Ci0rCQl3YXJnc1t0aV0uYmF0Y2hJRCA9IGJhdGNoSUQ7Ci0rCQl3YXJn c1t0aV0uYmF0Y2ggPSBiYXRjaDsKLSsJCXdhcmdzW3RpXS50aHJlYWRJbmRleCA9IHRpOwotKwkJ d2FyZ3NbdGldLnplcm9zID0gY3R4X210LT56ZXJvczsKLSsJCWlmIChwdGhyZWFkX2NyZWF0ZSgm KHRpZFt0aV0pLCBOVUxMLCAodm9pZCAqKSB3b3JrZXJfdGhyZWFkLAotKwkJICAgICYod2FyZ3Nb dGldKSkgIT0gMCkgewotKwkJCW1hcmdzLT5yZXR2YWwgPSAxOwotKwkJCWJyZWFrOwotKwkJfQot Kwl9Ci0rCWZvciAoOyB0aSA8IE5VTVRIUkVBRFM7IHRpKyspIC8qIGZvciBlcnJvciBjb25kaXRp b24gKi8KLSsJCXRpZFt0aV0gPSBwdGhyZWFkX3NlbGYoKTsKLSsKLSsJc3RydWN0IHdvcmtlcl90 aHJlYWRfYXJncyAqIHJldHdhcmdzOwotKwotKwlmb3IgKHRpID0gMDsgdGkgPCBOVU1USFJFQURT OyB0aSsrKSB7Ci0rCQlpZiAodGlkW3RpXSA9PSBwdGhyZWFkX3NlbGYoKSkgewotKwkJCW1hcmdz LT5yZXR2YWwgPSAxOyAvKiByZWR1bmRhbnQsIGJ1dCBoYXJtbGVzcyAqLwotKwkJCWNvbnRpbnVl OwotKwkJfQotKwkJaWYgKHB0aHJlYWRfam9pbih0aWRbdGldLCAodm9pZCAqKikgJnJldHdhcmdz KSA9PSAwKSB7Ci0rCQkJaWYgKHJldHdhcmdzID09IE5VTEwpIHsKLSsJCQkJZGVidWdfZigiV29y a2VyIHRocmVhZCByZXR1cm5lZCBOVUxMISIpOwotKwkJCQltYXJncy0+cmV0dmFsID0gMTsKLSsJ CQl9IGVsc2UgaWYgKHJldHdhcmdzID09IFBUSFJFQURfQ0FOQ0VMRUQpIHsKLSsJCQkJZGVidWdf ZigiV29ya2VyIHRocmVhZCBjYW5jZWxlZCEiKTsKLSsJCQkJbWFyZ3MtPnJldHZhbCA9IDE7Ci0r CQkJfSBlbHNlIHsKLSsJCQkJaWYgKHJldHdhcmdzLT5yZXR2YWwgIT0gMCkgewotKwkJCQkJZGVi dWdfZigiV29ya2VyIHRocmVhZCBlcnJvciAoJWQpIiwKLSsJCQkJCSAgICByZXR3YXJncy0+cmV0 dmFsKTsKLSsJCQkJCW1hcmdzLT5yZXR2YWwgPSAxOwotKwkJCQl9Ci0rCQkJCWlmIChyZXR3YXJn cyAhPSAmKHdhcmdzW3RpXSkpIHsKLSsJCQkJCWRlYnVnX2YoIldvcmtlciB0aHJlYWQgZGlkbid0 IHJldHVybiAiCi0rCQkJCQkgICAgImV4cGVjdGVkIHN0cnVjdHVyZSEiKTsKLSsJCQkJCW1hcmdz LT5yZXR2YWwgPSAxOwotKwkJCQl9Ci0rCQkJfQotKwkJfSBlbHNlIHsKLSsJCQlkZWJ1Z19mKCJw dGhyZWFkX2pvaW4gZXJyb3IhIik7Ci0rCQkJbWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQl9Ci0rCX0K LSsJZnJlZSh3YXJncyk7Ci0rCi0rCWlmIChtYXJncy0+cmV0dmFsID09IDApIHsKLSsJCWJhdGNo LT5iYXRjaElEID0gYmF0Y2hJRDsKLSsJfQotKwotKwlyZXR1cm4gbWFyZ3M7Ci0rfQotKwotK2lu dAotK2NoYWNoYXBvbHlfY3J5cHRfbXQoc3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICpjdHhfbXQs IHVfaW50IHNlcW5yLCB1X2NoYXIgKmRlc3QsCi0rICAgIGNvbnN0IHVfY2hhciAqc3JjLCB1X2lu dCBsZW4sIHVfaW50IGFhZGxlbiwgdV9pbnQgYXV0aGxlbiwgaW50IGRvX2VuY3J5cHQpCi0rewot KyNpZmRlZiBTQUZFVFkKLSsJaWYgKGN0eF9tdC0+bWFpbnBpZCAhPSBnZXRwaWQoKSkgeyAvKiB3 ZSdyZSBhIGZvcmsgKi8KLSsJCS8qCi0rCQkgKiBUT0RPOiB0aGlzIGlzIEVYVFJFTUVMWSBSQVJF LCBtYXkgbmV2ZXIgaGFwcGVuIGF0IGFsbCAob25seQotKwkJICogaWYgdGhlIGZvcmsgY2FsbHMg Y3J5cHQpLCBzbyB3ZSBzaG91bGQgdGVsbCB0aGUgY29tcGlsZXIuCi0rCQkgKi8KLSsJCS8qIFRo ZSB3b3JrZXIgdGhyZWFkcyBkb24ndCBleGlzdCwgd2UgY291bGQgc3Bhd24gdGhlbT8gKi8KLSsJ CWRlYnVnX2YoIkZvcmsgY2FsbGVkIGNyeXB0IHdpdGhvdXQgd29ya2VycyEiKTsKLSsJCWNoYWNo YXBvbHlfZnJlZV9tdChjdHhfbXQpOwotKwkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7 Ci0rCX0KLSsjZW5kaWYKLSsKLSsJcHRocmVhZF90ICogbWFuYWdlcl90aWQgPSAmKGN0eF9tdC0+ bWFuYWdlcl90aWRbY3R4X210LT5iYXRjaElEICUgMl0pOwotKwlpZiAodW5saWtlbHkoKm1hbmFn ZXJfdGlkICE9IGN0eF9tdC0+c2VsZl90aWQpKSB7Ci0rCQlpbnQgcmV0ID0gam9pbl9tYW5hZ2Vy X3RocmVhZCgqbWFuYWdlcl90aWQpOwotKwkJKm1hbmFnZXJfdGlkID0gY3R4X210LT5zZWxmX3Rp ZDsKLSsJCWlmIChyZXQgIT0gMCkKLSsJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsK LSsJfQotKwotKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNoICogYmF0Y2ggPQotKwkgICAgJihj dHhfbXQtPmJhdGNoZXNbY3R4X210LT5iYXRjaElEICUgMl0pOwotKwotKwlzdHJ1Y3QgbXRfa2V5 c3RyZWFtICoga3MgPSAmKGJhdGNoLT5zdHJlYW1zW3NlcW5yICUgTlVNU1RSRUFNU10pOwotKwot KwlpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCi0rI2lmZGVmIFNBRkVUWQotKwlp ZiAoYmF0Y2gtPmJhdGNoSUQgPT0gY3R4X210LT5iYXRjaElEKSB7IC8qIFNhZmV0eSBjaGVjayAq LwotKyNlbmRpZgotKwkJLyogY2hlY2sgdGFnIGJlZm9yZSBhbnl0aGluZyBlbHNlICovCi0rCQlp ZiAoIWRvX2VuY3J5cHQpIHsKLSsJCQljb25zdCB1X2NoYXIgKnRhZyA9IHNyYyArIGFhZGxlbiAr IGxlbjsKLSsJCQl1X2NoYXIgZXhwZWN0ZWRfdGFnW1BPTFkxMzA1X1RBR0xFTl07Ci0rI2lmICFk ZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQX1BLRVlfUE9MWTEzMDUpCi0rCQkJ aWYgKChFVlBfUEtFWV9DVFhfY3RybChjdHhfbXQtPnBvbHlfY3R4LCAtMSwKLSsJCQkgICAgRVZQ X1BLRVlfT1BfU0lHTkNUWCwgRVZQX1BLRVlfQ1RSTF9TRVRfTUFDX0tFWSwKLSsJCQkgICAgUE9M WTEzMDVfS0VZTEVOLCBrcy0+cG9seV9rZXkpIDw9IDApIHx8Ci0rCQkJICAgIChFVlBfRGlnZXN0 U2lnblVwZGF0ZShjdHhfbXQtPm1kX2N0eCwgc3JjLCBhYWRsZW4gKyBsZW4pID09IDApKSB7Ci0r CQkJCWRlYnVnX2YoIlNTTCBlcnJvciB3aGlsZSBkZWNyeXB0aW5nIHBvbHkxMzA1IHRhZyIpOwot KwkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJCQl9Ci0rCQkJY3R4X210LT5w dGFnbGVuID0gUE9MWTEzMDVfVEFHTEVOOwotKwkJCWlmIChFVlBfRGlnZXN0U2lnbkZpbmFsKGN0 eF9tdC0+bWRfY3R4LCBleHBlY3RlZF90YWcsCi0rCQkJICAgICZjdHhfbXQtPnB0YWdsZW4pID09 IDApIHsKLSsJCQkJZGVidWdfZigiU1NMIGVycm9yIHdoaWxlIGZpbmFsaXppbmcgZGVjeXJwdGVk IHBvbHkxMzA1Iik7Ci0rCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwkJCX0K LSsjZWxzZQotKwkJCXBvbHkxMzA1X2F1dGgoY3R4X210LT5wb2x5X2N0eCwgZXhwZWN0ZWRfdGFn LCBzcmMsCi0rCQkJICAgIGFhZGxlbiArIGxlbiwga3MtPnBvbHlfa2V5KTsKLSsjZW5kaWYKLSsJ CQlpZiAodGltaW5nc2FmZV9iY21wKGV4cGVjdGVkX3RhZywgdGFnLCBQT0xZMTMwNV9UQUdMRU4p Ci0rCQkJICAgICE9IDApCi0rCQkJCXIgPSBTU0hfRVJSX01BQ19JTlZBTElEOwotKwkJCWV4cGxp Y2l0X2J6ZXJvKGV4cGVjdGVkX3RhZywgc2l6ZW9mKGV4cGVjdGVkX3RhZykpOwotKwkJfQotKwkJ aWYgKHIgIT0gU1NIX0VSUl9NQUNfSU5WQUxJRCkgewotKwkJCS8qIENyeXB0IGFkZGl0aW9uYWwg ZGF0YSAoaS5lLiwgcGFja2V0IGxlbmd0aCkgKi8KLSsJCQkvKiBUT0RPOiBpcyBhYWRsZW4gYWx3 YXlzIGZvdXIgYnl0ZXM/ICovCi0rCQkJLyogVE9ETzogZG8gd2UgYWx3YXlzIGhhdmUgYW4gYWFk bGVuPyAqLwotKwkJCWlmIChhYWRsZW4pCi0rCQkJCWZvciAodV9pbnQgaT0wOyBpPGFhZGxlbjsg aSsrKQotKwkJCQkJZGVzdFtpXSA9IGtzLT5oZWFkZXJTdHJlYW1baV0gXiBzcmNbaV07Ci0rCQkJ LyogQ3J5cHQgcGF5bG9hZCAqLwotKwkJCWZhc3RYT1IyKGRlc3QrYWFkbGVuLHNyYythYWRsZW4s a3MtPm1haW5TdHJlYW0sbGVuKTsKLSsJCQkvKiBjYWxjdWxhdGUgYW5kIGFwcGVuZCB0YWcgKi8K LSsjaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5lZChFVlBfUEtFWV9QT0xZMTMw NSkKLSsJCQlpZiAoZG9fZW5jcnlwdCkgewotKwkJCQlpZiAoKEVWUF9QS0VZX0NUWF9jdHJsKGN0 eF9tdC0+cG9seV9jdHgsIC0xLAotKwkJCQkgICAgRVZQX1BLRVlfT1BfU0lHTkNUWCwgRVZQX1BL RVlfQ1RSTF9TRVRfTUFDX0tFWSwKLSsJCQkJICAgIFBPTFkxMzA1X0tFWUxFTiwga3MtPnBvbHlf a2V5KSA8PTApIHx8Ci0rCQkJCSAgICAoRVZQX0RpZ2VzdFNpZ25VcGRhdGUoY3R4X210LT5tZF9j dHgsIGRlc3QsIGFhZGxlbiArIGxlbikgPT0gMCkpIHsKLSsJCQkJCWRlYnVnX2YgKCJTU0wgZXJy b3Igd2hpbGUgZW5jcnlwdGluZyBwb2x5MTMwNSB0YWciKTsKLSsJCQkJCXJldHVybiBTU0hfRVJS X0lOVEVSTkFMX0VSUk9SOwotKwkJCQl9Ci0rCQkJCWN0eF9tdC0+cHRhZ2xlbiA9IFBPTFkxMzA1 X1RBR0xFTjsKLSsJCQkJaWYgKEVWUF9EaWdlc3RTaWduRmluYWwoY3R4X210LT5tZF9jdHgsIGRl c3QrYWFkbGVuK2xlbiwKLSsJCQkJICAgICZjdHhfbXQtPnB0YWdsZW4pID09IDApIHsKLSsJCQkJ CWRlYnVnX2YoIlNTTCBlcnJvciB3aGlsZSBmaW5hbGl6aW5nIGRlY3lycHRlZCBwb2x5MTMwNSIp OwotKwkJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCQkJCX0KLSsJCQl9Ci0r I2Vsc2UKLSsJCQlpZiAoZG9fZW5jcnlwdCkKLSsJCQkJcG9seTEzMDVfYXV0aChjdHhfbXQtPnBv bHlfY3R4LCBkZXN0K2FhZGxlbitsZW4sCi0rCQkJCSAgICBkZXN0LCBhYWRsZW4rbGVuLCBrcy0+ cG9seV9rZXkpOwotKyNlbmRpZgotKwkJCXI9MDsgLyogU3VjY2VzcyEgKi8KLSsJCX0KLSsJCWlm IChyKSAvKiBBbnl0aGluZyBub256ZXJvIGlzIGFuIGVycm9yLiAqLwotKwkJCXJldHVybiByOwot KwotKwkJY3R4X210LT5zZXFuciA9IHNlcW5yICsgMTsKLSsKLSsJCWlmICh1bmxpa2VseShjdHhf bXQtPnNlcW5yIC8gTlVNU1RSRUFNUyA+IGN0eF9tdC0+YmF0Y2hJRCkpIHsKLSsJCQlzdHJ1Y3Qg bWFuYWdlcl90aHJlYWRfYXJncyAqIGFyZ3MgPQotKwkJCSAgICBtYWxsb2Moc2l6ZW9mKCphcmdz KSk7Ci0rCQkJaWYgKGFyZ3MgPT0gTlVMTCkgewotKwkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5B TF9FUlJPUjsKLSsJCQl9Ci0rCQkJYXJncy0+Y3R4X210ID0gY3R4X210OwotKwkJCWFyZ3MtPm9s ZEJhdGNoSUQgPSBjdHhfbXQtPmJhdGNoSUQ7Ci0rCQkJaWYgKHB0aHJlYWRfY3JlYXRlKCYoY3R4 X210LT5tYW5hZ2VyX3RpZFtjdHhfbXQtPmJhdGNoSUQKLSsJCQkgICAgJSAyXSksIE5VTEwsICh2 b2lkICopIG1hbmFnZXJfdGhyZWFkLCBhcmdzKSAhPSAwKSB7Ci0rCQkJCWZyZWUoYXJncyk7Ci0r CQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwkJCX0KLSsJCQljdHhfbXQtPmJh dGNoSUQgPSBjdHhfbXQtPnNlcW5yIC8gTlVNU1RSRUFNUzsKLSsJCX0KLSsKLSsJCS8qIFRPRE86 IE5vdGhpbmcgd2UgbmVlZCB0byBzYW5pdGl6ZSBoZXJlPyAqLwotKwotKwkJcmV0dXJuIDA7Ci0r I2lmZGVmIFNBRkVUWQotKwl9IGVsc2UgeyAvKiBCYWQsIGl0J3MgdGhlIHdyb25nIGJhdGNoLiAq LwotKwkJZGVidWdfZiggIlByZS1jcnlwdCBiYXRjaCBtaXNzISBTZWVraW5nICV1LCBmb3VuZCAl dS4gRmFpbGluZy4iLAotKwkJICAgIGN0eF9tdC0+YmF0Y2hJRCwgYmF0Y2gtPmJhdGNoSUQpOwot KwkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCX0KLSsjZW5kaWYKLSt9Ci0rCi0r aW50Ci0rY2hhY2hhcG9seV9nZXRfbGVuZ3RoX210KHN0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdCAq Y3R4X210LCB1X2ludCAqcGxlbnAsCi0rICAgIHVfaW50IHNlcW5yLCBjb25zdCB1X2NoYXIgKmNw LCB1X2ludCBsZW4pCi0rewotKwkvKiBUT0RPOiBhZGQgY29tcGlsZXIgaGludHMgKi8KLSsjaWZk ZWYgU0FGRVRZCi0rCWlmIChjdHhfbXQtPm1haW5waWQgIT0gZ2V0cGlkKCkpIHsgLyogVXNlIHNl cmlhbCBtb2RlIGlmIHdlJ3JlIGEgZm9yayAqLwotKwkJZGVidWdfZigiV2UncmUgYSBmb3JrLiBG YWlsaW5nLiIpOwotKwkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCX0KLSsjZW5k aWYKLSsKLSsJaWYgKGxlbiA8IDQpCi0rCQlyZXR1cm4gU1NIX0VSUl9NRVNTQUdFX0lOQ09NUExF VEU7Ci0rCi0rCXB0aHJlYWRfdCAqIG1hbmFnZXJfdGlkID0gJihjdHhfbXQtPm1hbmFnZXJfdGlk W2N0eF9tdC0+YmF0Y2hJRCAlIDJdKTsKLSsJaWYgKHVubGlrZWx5KCptYW5hZ2VyX3RpZCAhPSBj dHhfbXQtPnNlbGZfdGlkKSkgewotKwkJaW50IHJldCA9IGpvaW5fbWFuYWdlcl90aHJlYWQoKm1h bmFnZXJfdGlkKTsKLSsJCSptYW5hZ2VyX3RpZCA9IGN0eF9tdC0+c2VsZl90aWQ7Ci0rCQlpZiAo cmV0ICE9IDApCi0rCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCX0KLSsKLSsJ dV9jaGFyIGJ1Zls0XTsKLSsjaWZkZWYgU0FGRVRZCi0rCXVfaW50IHNvdWdodF9iYXRjaElEID0g c2VxbnIgLyBOVU1TVFJFQU1TOwotKyNlbmRpZgotKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNo ICogYmF0Y2ggPQotKwkgICAgJihjdHhfbXQtPmJhdGNoZXNbY3R4X210LT5iYXRjaElEICUgMl0p OwotKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtICoga3MgPSAmKGJhdGNoLT5zdHJlYW1zW3NlcW5yICUg TlVNU1RSRUFNU10pOwotKyNpZmRlZiBTQUZFVFkKLSsJaWYgKGJhdGNoLT5iYXRjaElEID09IHNv dWdodF9iYXRjaElEKSB7Ci0rI2VuZGlmCi0rCQlmb3IgKHVfaW50IGk9MDsgaSA8IHNpemVvZihi dWYpOyBpKyspCi0rCQkJYnVmW2ldPWtzLT5oZWFkZXJTdHJlYW1baV0gXiBjcFtpXTsKLSsJCSpw bGVucCA9IFBFRUtfVTMyKGJ1Zik7Ci0rCQlyZXR1cm4gMDsKLSsjaWZkZWYgU0FGRVRZCi0rCX0g ZWxzZSB7Ci0rCQlkZWJ1Z19mKCJCYXRjaCBtaXNzISBTZWVraW5nICV1LCBmb3VuZCAldS4gRmFp bGluZy4iLAotKwkJICAgIHNvdWdodF9iYXRjaElELCBiYXRjaC0+YmF0Y2hJRCk7Ci0rCQlyZXR1 cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJfQotKyNlbmRpZgotK30KLSsjZW5kaWYgLyog ZGVmaW5lZChIQVZFX0VWUF9DSEFDSEEyMCkgJiYgIWRlZmluZWQoSEFWRV9CUk9LRU5fQ0hBQ0hB MjApICovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS1s aWJjcnlwdG8tbXQuaCBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8t bXQuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRv LW10LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEw LjNwMS9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuaAkyMDI2LTA3LTAyIDAwOjI3OjI5 LjcyMTYyNzMwMiArMDIwMAotQEAgLTAsMCArMSw0NSBAQAotKy8qCi0rICogQ29weXJpZ2h0IChj KSAyMDIzIFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0 eS4KLSsgKgotKyAqICBBdXRob3I6IE1pdGNoZWxsIERvcnJlbGwgPG13ZEBwc2MuZWR1PgotKyAq ICBBdXRob3I6IENocmlzIFJhcGllciAgPHJhcGllckBwc2MuZWR1PgotKyAqCi0rICogVGhpcyBs aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgotKyAqCi0r ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0rICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0rICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0rICoKLSsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQg TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKLSsgKiBpZiBub3QsIHNlZSBodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgotKyAqCi0rICovCi0rCi0rI2lmbmRlZiBDSEFD SEFfUE9MWV9MSUJDUllQVE9fTVRfSAotKyNkZWZpbmUgQ0hBQ0hBX1BPTFlfTElCQ1JZUFRPX01U X0gKLSsKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgImNoYWNoYS5oIgotKyNp bmNsdWRlICJwb2x5MTMwNS5oIgotKwotKyNpZm5kZWYgQ0hBQ0hBX0tFWUxFTgotKyNkZWZpbmUg Q0hBQ0hBX0tFWUxFTgkzMiAvKiBPbmx5IDI1NiBiaXQga2V5cyB1c2VkIGhlcmUgKi8KLSsjZW5k aWYKLSsKLStzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQ7IC8qIGRlZmluZWQgaW4gY2lwaGVyLWNo YWNoYXBvbHktbGliY3J5cHRvLW10LmMgKi8KLSsKLStzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQg KmNoYWNoYXBvbHlfbmV3X210KHVfaW50IHN0YXJ0c2VxbnIsIGNvbnN0IHVfY2hhciAqa2V5LCB1 X2ludCBrZXlsZW4pCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX2J1ZmZlcl9fLCAyLCAzKSkpOwotKwotK3Zv aWQgICBjaGFjaGFwb2x5X2ZyZWVfbXQoc3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICpjcGN0eCk7 Ci0rCi0raW50ICAgIGNoYWNoYXBvbHlfY3J5cHRfbXQoc3RydWN0IGNoYWNoYXBvbHlfY3R4X210 ICpjcGN0eCwgdV9pbnQgc2VxbnIsCi0rCQkJICAgdV9jaGFyICpkZXN0LCBjb25zdCB1X2NoYXIg KnNyYywgdV9pbnQgbGVuLCB1X2ludCBhYWRsZW4sCi0rCQkJICAgdV9pbnQgYXV0aGxlbiwgaW50 IGRvX2VuY3J5cHQpOwotKwotK2ludCAgICBjaGFjaGFwb2x5X2dldF9sZW5ndGhfbXQoc3RydWN0 IGNoYWNoYXBvbHlfY3R4X210ICpjcGN0eCwKLSsJCQkJdV9pbnQgKnBsZW5wLCB1X2ludCBzZXFu ciwgY29uc3QgdV9jaGFyICpjcCwgdV9pbnQgbGVuKQotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19idWZmZXJfXywgNCwgNSkpKTsK LSsKLSsjZW5kaWYgLyogQ0hBQ0hBX1BPTFlfTElCQ1JZUFRPX01UX0ggKi8KLWRpZmYgLU51ciBv cGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jdHItbXQuYyBvcGVuc3NoLTEwLjNwMS9jaXBoZXIt Y3RyLW10LmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jdHItbXQuYwkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1j dHItbXQuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyMTc1NzQwNyArMDIwMAotQEAgLTAsMCArMSw2 ODEgQEAKLSsvKgotKyAqIE9wZW5TU0ggTXVsdGktdGhyZWFkZWQgQUVTLUNUUiBDaXBoZXIKLSsg KgotKyAqIEF1dGhvcjogQmVuamFtaW4gQmVubmV0dCA8YmVuQHBzYy5lZHU+Ci0rICogQXV0aG9y OiBNaWtlIFRhc290YSA8dGFzb3RhQGdtYWlsLmNvbT4KLSsgKiBBdXRob3I6IENocmlzIFJhcGll ciA8cmFwaWVyQHBzYy5lZHU+Ci0rICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMjEgUGl0dHNidXJn aCBTdXBlcmNvbXB1dGluZyBDZW50ZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBC YXNlZCBvbiBvcmlnaW5hbCBPcGVuU1NIIEFFUy1DVFIgY2lwaGVyLiBTbWFsbCBwb3J0aW9ucyBy ZW1haW4gdW5jaGFuZ2VkLAotKyAqIENvcHlyaWdodCAoYykgMjAwMyBNYXJrdXMgRnJpZWRsIDxt YXJrdXNAb3BlbmJzZC5vcmc+Ci0rICoKLSsgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSsgKiBwdXJwb3NlIHdp dGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFi b3ZlCi0rICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBl YXIgaW4gYWxsIGNvcGllcy4KLSsgKgotKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotKyAqIFdJVEggUkVH QVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YK LSsgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB VVRIT1IgQkUgTElBQkxFIEZPUgotKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSsgKiBXSEFUU09FVkVSIFJF U1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4K LSsgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNU SU9OLCBBUklTSU5HIE9VVCBPRgotKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9S IFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0rICovCi0rI2luY2x1ZGUgImluY2x1ZGVz LmgiCi0rCi0rI2lmIGRlZmluZWQoV0lUSF9PUEVOU1NMKSAmJiAhZGVmaW5lZChXSVRIX09QRU5T U0wzKQotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsKLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0r I2luY2x1ZGUgPHN0cmluZy5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotKyNp bmNsdWRlICJ4bWFsbG9jLmgiCi0rI2luY2x1ZGUgImxvZy5oIgotKyNpbmNsdWRlIDx1bmlzdGQu aD4KLSsjaW5jbHVkZSAidXRoYXNoLmgiCi0rCi0rLyogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBv ciBicm9rZW4gT3BlblNTTCB2ZXJzaW9ucyAqLwotKyNpbmNsdWRlICJvcGVuYnNkLWNvbXBhdC9v cGVuc3NsLWNvbXBhdC5oIgotKwotKyNpZm5kZWYgVVNFX0JVSUxUSU5fUklKTkRBRUwKLSsjaW5j bHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8cHRocmVhZC5oPgot KwotKyNpZmRlZiBfX0FQUExFX18KLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUg PHN5cy9zeXNjdGwuaD4KLSsjZW5kaWYKLSsKLSsvKiBub3RlIHJlZ2FyZGluZyB0aHJlYWRzIGFu ZCBxdWV1ZXMgKi8KLSsvKiBpbml0aWFsbHkgdGhpcyBjaXBoZXIgd2FzIHdyaXR0ZW4gaW4gYSB3 YXkgdGhhdAotKyAqIHRoZSBrZXkgc3RyZWFtIHdhcyBnZW5lcmF0ZWQgaW4gYSBwZXIgY2lwaGVy IGJsb2NrCi0rICogbG9vcC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBrZXkgc3RyZWFtIHF1ZXVlIGxl bmd0aCB3YXMKLSsgKiAxNmsgYW5kIHRoZSBjaXBoZXIgYmxvY2sgc2l6ZSB3YXMgMTYgYnl0ZXMg aXQgd291bGQKLSsgKiBmaWxsIHRoZSBxdWV1ZSAxNiBieXRlcyBhdCBhIHRpbWUuIE1pdGNoIERv cnJlbGwgcG9pbnRlZAotKyAqIG91dCB0aGF0IHdlIGNvdWxkIGZpbGwgdGhlIHF1ZXVlIGluIG9u Y2UgY2FsbCBlbGltaW5hdGluZwotKyAqIGxvb3AgYW5kIG11bHRpcGxlIGNhbGxzIHRvIEVWUF9F bmNyeXB0VXBkYXRlLiBEb2luZyBzbwotKyAqIGRyYW1hdGljYWxseSByZWR1Y2VkIENQVSBsb2Fk IGluIHRoZSB0aHJlYWRzIGFuZCBpbmRpY2F0ZWQKLSsgKiB0aGF0IHdlIGNvdWxkIGFsc28gZWxp bWluYXRlIG1vc3Qgb2YgdGhlIHRocmVhZHMgYW5kIHF1ZXVlcwotKyAqIGFzIGl0IHdvdWxkIHRh a2UgZmFyIGxlc3MgdGltZSBmb3IgYSBxdWV1ZSB0byBlYnRlciBLUV9GVUxMCi0rICogc3RhdGUu IEFzIHN1Y2gsIHdlJ3ZlIHJlZHVjZWQgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHRocmVhZHMKLSsg KiBhbmQgcXVldWVzIGZyb20gMiBhbmQgOCAocmVzcGVjdGl2ZWx5KSB0byAxIGFuZCAyLiBXZSd2 ZSBhbHNvCi0rICogZWxpbW5hdGVkIHRoZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcGh5c2ljYWwg bnVtYmVyIG9mIGNvcmVzIG9uCi0rICogdGhlIHN5c3RlbSBhbmQsIGlmIHRoZSB1c2VyIGRlc2ly ZXMsIGNhbiBzcGluIHVwIG1vcmUgdGhyZWFkcwotKyAqIHVzaW5nIGFuIGVudmlyb25tZW50IHZh cmlhYmxlLiBBZGRpdGlvbmFsbHksIHF1ZXVlcyBpcyBub3cgZml4ZWQKLSsgKiBhdCB0aHJlYWRf Y291bnQgKyAxLgotKyAqIGNqciAxMC8xOS8yMDIyICovCi0rCi0rLyotLS0tLS0tLS0tLS0tLS0t LS0tLSBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rLyogbWF4aW11bSBudW1iZXIg b2YgdGhyZWFkcyBhbmQgcXVldWVzICovCi0rI2RlZmluZSBNQVhfVEhSRUFEUyAgICAgIDQKLSsj ZGVmaW5lIE1BWF9OVU1LUSAgICAgICAgKE1BWF9USFJFQURTICsgMSkKLSsKLSsvKiBOdW1iZXIg b2YgcHJlZ2VuIHRocmVhZHMgdG8gdXNlICovCi0rLyogdGhpcyBpcyBhIGRlZmF1bHQgdmFsdWUu IFRoZSBhY3R1YWwgbnVtYmVyIGlzCi0rICogZGV0ZXJtaW5lZCBkdXJpbmcgaW5pdCBhcyBhIGZ1 bmN0aW9uIG9mIHRoZSBudW1iZXIKLSsgKiBvZiBhdmFpbGFibGUgY29yZXMgKi8KLStpbnQgY2lw aGVyX3RocmVhZHMgPSAxOwotKwotKy8qIE51bWJlciBvZiBrZXlzdHJlYW0gcXVldWVzICovCi0r LyogaWRlYWxseSB0aGlzIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggc28gdGhhdCB0aGVyZSBpcwot KyAqIGFsd2F5cyBhIGtleSBxdWV1ZSBmb3IgYSB0aHJlYWQgdG8gd29yayBvbgotKyAqIHNvIG1h eWJlIGRvdWJsZSBvZiB0aGUgbnVtYmVyIG9mIHRocmVhZHMuIEFnYWluIHRoaXMKLSsgKiBpcyBh IGRlZmF1bHQgYW5kIHRoZSBhY3R1YWwgdmFsdWUgaXMgZGV0ZXJtaW5lZCBpbiBpbml0Ki8KLStp bnQgbnVta3EgPSAyOwotKwotKy8qIExlbmd0aCBvZiBhIGtleXN0cmVhbSBxdWV1ZSAqLwotKy8q IG9uZSBxdWV1ZSBob2xkcyA1MTJLQiAoMTAyNCAqIDMyICogMTYpIG9mIGtleSBkYXRhCi0rICog YmVpbmcgdGhhdCB0aGUgcXVldWVzIGFyZSBkZXN0cm95ZWQgYWZ0ZXIgYSByZWtleQotKyAqIGFu ZCBhdCBsZWF0cyBvbmUgaGFzIHRvIGJlIGZ1bGx5IGZpbGxlZCBwcmlvciB0bwotKyAqIGVuY2lw aGVyaW5nIGRhdGEgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGJlIHRvbyBsYXJnZSAqLwotKyNkZWZp bmUgS1FMRU4gKDEwMjQgKiAzMikKLSsKLSsvKiBQcm9jZXNzb3IgY2FjaGVsaW5lIGxlbmd0aCAq LwotKyNkZWZpbmUgQ0FDSEVMSU5FX0xFTgk2NAotKwotKy8qIENhbiB0aGUgc3lzdGVtIGRvIHVu YWxpZ25lZCBsb2FkcyBuYXRpdmVseT8gKi8KLSsjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwg XAotKyAgICBkZWZpbmVkKF9faTM4Nl9fKSAgICB8fCBcCi0rICAgIGRlZmluZWQoX19wb3dlcnBj X18pIHx8IFwKLSsgICAgZGVmaW5lZChfX3g4Nl82NF9fKQotKyMgZGVmaW5lIENJUEhFUl9VTkFM SUdORURfT0sKLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXykKLSsjIGRl ZmluZSBDSVBIRVJfSU5UMTI4X09LCi0rI2VuZGlmCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLSBF TkQgVFVOQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNkZWZpbmUgSEFWRV9OT05F ICAgICAgIDAKLSsjZGVmaW5lIEhBVkVfS0VZICAgICAgICAxCi0rI2RlZmluZSBIQVZFX0lWICAg ICAgICAgMgotK2ludCBYID0gMDsKLSsKLStjb25zdCBFVlBfQ0lQSEVSICpldnBfYWVzX2N0cl9t dCh2b2lkKTsKLSsKLSsvKiBLZXlzdHJlYW0gUXVldWUgc3RhdGUgKi8KLStlbnVtIHsKLSsJS1FJ TklULAotKwlLUUVNUFRZLAotKwlLUUZJTExJTkcsCi0rCUtRRlVMTCwKLSsJS1FEUkFJTklORwot K307Ci0rCi0rLyogS2V5c3RyZWFtIFF1ZXVlIHN0cnVjdCAqLwotK3N0cnVjdCBrcSB7Ci0rCXVf Y2hhcgkJa2V5c1tLUUxFTl1bQUVTX0JMT0NLX1NJWkVdOyAvKiBbMzI3NjhdWzE2Ql0gKi8KLSsJ dV9jaGFyCQljdHJbQUVTX0JMT0NLX1NJWkVdOyAvKiAxNkIgKi8KLSsJdV9jaGFyICAgICAgICAg IHBhZDBbQ0FDSEVMSU5FX0xFTl07Ci0rCXB0aHJlYWRfbXV0ZXhfdAlsb2NrOwotKwlwdGhyZWFk X2NvbmRfdAljb25kOwotKwlpbnQgICAgICAgICAgICAgcXN0YXRlOwotKwl1X2NoYXIgICAgICAg ICAgcGFkMVtDQUNIRUxJTkVfTEVOXTsKLSt9OwotKwotKy8qIENvbnRleHQgc3RydWN0ICovCi0r c3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdAotK3sKLSsJbG9uZyB1bnNpZ25lZCBpbnQgc3RydWN0 X2lkOwotKwlpbnQgICAgICAgICAgICAgICBrZXlsZW47Ci0rCWludAkJICBzdGF0ZTsKLSsJaW50 CQkgIHFpZHg7Ci0rCWludAkJICByaWR4OwotKwlpbnQgICAgICAgICAgICAgICBpZFtNQVhfVEhS RUFEU107IC8qIDMyICovCi0rCUFFU19LRVkgICAgICAgICAgIGFlc19rZXk7Ci0rCWNvbnN0IHVf Y2hhciAgICAgKm9yaWdfa2V5OwotKwl1X2NoYXIJCSAgYWVzX2NvdW50ZXJbQUVTX0JMT0NLX1NJ WkVdOyAvKiAxNkIgKi8KLSsJcHRocmVhZF90CSAgdGlkW01BWF9USFJFQURTXTsgLyogMzIgKi8K LSsJcHRocmVhZF9yd2xvY2tfdCAgdGlkX2xvY2s7Ci0rCXN0cnVjdCBrcQkgIHFbTUFYX05VTUtR XTsgLyogMzMgKi8KLSsjaWZkZWYgX19BUFBMRV9fCi0rCXB0aHJlYWRfcndsb2NrX3QgIHN0b3Bf bG9jazsKLSsJaW50CQkgIGV4aXRfZmxhZzsKLSsjZW5kaWYgLyogX19BUFBMRV9fICovCi0rfTsK LSsKLSsvKiB0aGlzIGRlZmluZXMgdGhlIGhhc2ggYW5kIGVsZW1lbnRzIG9mIGV2cCBjb250ZXh0 IHBvaW50ZXJzCi0rICogdGhhdCBhcmUgY3JlYXRlZCBpbiB0aHJlYWRfbG9vcC4gV2UgdXNlIHRo aXMgdG8gY2xlYXIgYW5kCi0rICogZnJlZSB0aGUgY29udGV4dHMgaW4gc3RvcF9hbmRfcHJlam9p bgotKyAqLwotK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMgewotKwlwdGhyZWFkX3QgICAgICAgdGlk OwotKwlFVlBfQ0lQSEVSX0NUWCAqcG9pbnRlcjsgLyogMzIgKi8KLSsJVVRfaGFzaF9oYW5kbGUg aGg7Ci0rfTsKLSsKLSsvKiBnbG9iYWxzICovCi0rLyogaG93IHdlIGluY3JlbWVudCB0aGUgaWQg dGhlIHN0cnVjdHMgd2UgY3JlYXRlICovCi0rbG9uZyB1bnNpZ25lZCBpbnQgZ2xvYmFsX3N0cnVj dF9pZCA9IDA7Ci0rCi0rLyoga2VlcCBhIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGNyZWF0ZWQgaW4g dGhyZWFkX2xvb3AgdG8gZnJlZSBsYXRlciAqLwotK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKmV2 cF9wdHJzID0gTlVMTDsKLSsKLSsvKgotKyAqIEFkZCBudW0gdG8gY291bnRlciAnY3RyJwotKyAq LwotK3N0YXRpYyB2b2lkCi0rc3NoX2N0cl9hZGQodV9jaGFyICpjdHIsIHVpbnQzMl90IG51bSwg dV9pbnQgbGVuKQotK3sKLSsJaW50IGk7Ci0rCXVpbnQxNl90IG47Ci0rCi0rCWZvciAobiA9IDAs IGkgPSBsZW4gLSAxOyBpID49IDAgJiYgKG51bSB8fCBuKTsgaS0tKSB7Ci0rCQluID0gY3RyW2ld ICsgKG51bSAmIDB4ZmYpICsgbjsKLSsJCW51bSA+Pj0gODsKLSsJCWN0cltpXSA9IG4gJiAweGZm OwotKwkJbiA+Pj0gODsKLSsJfQotK30KLSsKLSsvKgotKyAqIFRocmVhZHMgbWF5IGJlIGNhbmNl bGxlZCBpbiBhIHB0aHJlYWRfY29uZF93YWl0LCB3ZSBtdXN0IGZyZWUgdGhlIG11dGV4Ci0rICov Ci0rc3RhdGljIHZvaWQKLSt0aHJlYWRfbG9vcF9jbGVhbnVwKHZvaWQgKngpCi0rewotKwlwdGhy ZWFkX211dGV4X3VubG9jaygocHRocmVhZF9tdXRleF90ICopeCk7Ci0rfQotKwotKyNpZmRlZiBf X0FQUExFX18KLSsvKiBDaGVjayBpZiB3ZSBzaG91bGQgZXhpdCwgd2UgYXJlIGRvaW5nIGJvdGgg Y2FuY2VsIGFuZCBleGl0IGNvbmRpdGlvbgotKyAqIHNpbmNlIG9uIE9TWCB0aHJlYWRzIHNlZW0g dG8gb2NjYXNpb25hbGx5IGZhaWwgdG8gbm90aWNlIHdoZW4gdGhleSBoYXZlCi0rICogYmVlbiBj YW5jZWxsZWQuIFdlIHdhbnQgdG8gaGF2ZSBhIGJhY2t1cCB0byBtYWtlIHN1cmUgdGhhdCB3ZSB3 b24ndCBoYW5nCi0rICogd2hlbiB0aGUgbWFpbiBwcm9jZXNzIGpvaW4oKS1zIHRoZSBjYW5jZWxs ZWQgdGhyZWFkLgotKyAqLwotK3N0YXRpYyB2b2lkCi0rdGhyZWFkX2xvb3BfY2hlY2tfZXhpdChz dHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjKQotK3sKLSsJaW50IGV4aXRfZmxhZzsKLSsKLSsJ cHRocmVhZF9yd2xvY2tfcmRsb2NrKCZjLT5zdG9wX2xvY2spOwotKwlleGl0X2ZsYWcgPSBjLT5l eGl0X2ZsYWc7Ci0rCXB0aHJlYWRfcndsb2NrX3VubG9jaygmYy0+c3RvcF9sb2NrKTsKLSsKLSsJ aWYgKGV4aXRfZmxhZykKLSsJCXB0aHJlYWRfZXhpdChOVUxMKTsKLSt9Ci0rI2Vsc2UKLSsjIGRl ZmluZSB0aHJlYWRfbG9vcF9jaGVja19leGl0KHMpCi0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwot KwotKy8qCi0rICogSGVscGVyIGZ1bmN0aW9uIHRvIHRlcm1pbmF0ZSB0aGUgaGVscGVyIHRocmVh ZHMKLSsgKi8KLStzdGF0aWMgdm9pZAotK3N0b3BfYW5kX2pvaW5fcHJlZ2VuX3RocmVhZHMoc3Ry dWN0IHNzaF9hZXNfY3RyX2N0eF9tdCAqYykKLSt7Ci0rCWludCBpOwotKwotKyNpZmRlZiBfX0FQ UExFX18KLSsJLyogbm90aWZ5IHRocmVhZHMgdGhhdCB0aGV5IHNob3VsZCBleGl0ICovCi0rCXB0 aHJlYWRfcndsb2NrX3dybG9jaygmYy0+c3RvcF9sb2NrKTsKLSsJYy0+ZXhpdF9mbGFnID0gVFJV RTsKLSsJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZjLT5zdG9wX2xvY2spOwotKyNlbmRpZiAvKiBf X0FQUExFX18gKi8KLSsKLSsJLyogQ2FuY2VsIHByZWdlbiB0aHJlYWRzICovCi0rCWZvciAoaSA9 IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7Ci0rCQlkZWJ1ZyAoIkNhbmNlbGVkICVsdSAo JWx1LCVkKSIsIGMtPnRpZFtpXSwgYy0+c3RydWN0X2lkLCBjLT5pZFtpXSk7Ci0rCQlwdGhyZWFk X2NhbmNlbChjLT50aWRbaV0pOwotKwl9Ci0rICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVta3E7 IGkrKykgewotKyAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmMtPnFbaV0ubG9j ayk7Ci0rICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9icm9hZGNhc3QoJmMtPnFbaV0uY29u ZCk7Ci0rICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjLT5xW2ldLmxvY2sp OwotKyAgICAgICAgfQotKwlmb3IgKGkgPSAwOyBpIDwgY2lwaGVyX3RocmVhZHM7IGkrKykgewot KwkJaWYgKHB0aHJlYWRfa2lsbChjLT50aWRbaV0sIDApICE9IDApCi0rCQkJZGVidWczKCJBRVMt Q1RSIE1UIHB0aHJlYWRfam9pbiBmYWlsdXJlOiBJbnZhbGlkIHRocmVhZCBpZCAlbHUgaW4gJXMi LAotKwkJCSAgICAgICBjLT50aWRbaV0sIF9fRlVOQ1RJT05fXyk7Ci0rCQllbHNlIHsKLSsJCQlk ZWJ1ZyAoIkpvaW5pbmcgJWx1ICglbHUsICVkKSIsIGMtPnRpZFtpXSwgYy0+c3RydWN0X2lkLCBj LT5pZFtpXSk7Ci0rCQkJcHRocmVhZF9tdXRleF9kZXN0cm95KCZjLT5xW2ldLmxvY2spOwotKyAg ICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9kZXN0cm95KCZjLT5xW2ldLmNvbmQp OwotKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfam9pbihjLT50aWRbaV0sIE5VTEwp OwotKwkJCS8qIHRoaXMgZmluZHMgdGhlIGVudHJ5IGluIHRoZSBoYXNoIHRoYXQgY29ycmVzcG9u ZGluZyB0byB0aGUKLSsJCQkgKiB0aHJlYWQgaWQuIFRoYXQncyB1c2VkIHRvIGZpbmQgdGhlIHBv aW50ZXIgdG8gdGhlIGNpcGhlciBzdHJ1Y3QKLSsJCQkgKiBjcmVhdGVkIGluIHRocmVhZF9sb29w LiAqLwotKwkJCXN0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKnB0cjsKLSsJCQlIQVNIX0ZJTkRfSU5U KGV2cF9wdHJzLCAmYy0+dGlkW2ldLCBwdHIpOwotKwkJCUVWUF9DSVBIRVJfQ1RYX2ZyZWUocHRy LT5wb2ludGVyKTsKLSsJCQlIQVNIX0RFTChldnBfcHRycywgcHRyKTsKLSsJCQlmcmVlKHB0cik7 ICAgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rCXB0aHJlYWRfcndsb2NrX2Rlc3Ryb3koJmMt PnRpZF9sb2NrKTsKLSt9Ci0rCi0rLyoKLSsgKiBUaGUgbGlmZSBvZiBhIHByZWdlbiB0aHJlYWQ6 Ci0rICogICAgRmluZCBlbXB0eSBrZXlzdHJlYW0gcXVldWVzIGFuZCBmaWxsIHRoZW0gdXNpbmcg dGhlaXIgY291bnRlci4KLSsgKiAgICBXaGVuIGRvbmUsIHVwZGF0ZSBjb3VudGVyIGZvciB0aGUg bmV4dCBmaWxsLgotKyAqLwotKy8qIHByZXZpb3VzbHkgdGhpcyB1c2VkIHRoZSBsb3cgbGV2ZWwg aW50ZXJmYWNlIHdoaWNoIGlzLCBzYWRseSwKLSsgKiBzbG93ZXIgdGhhbiB0aGUgRVZQIGludGVy ZmFjZSBieSBhIGxvbmcgc2hvdC4gVGhlIG9yaWdpbmFsIGN0eCAoZnJvbSB0aGUKLSsgKiBib2R5 IG9mIHRoZSBjb2RlKSBpc24ndCBwYXNzZWQgaW4gaGVyZSBidXQgd2UgaGF2ZSB0aGUga2V5IGFu ZCB0aGUgY291bnRlcgotKyAqIHdoaWNoIG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0 ZSB0aGUgZXhhY3Qgc2FtZSBjdHggYW5kIHVzZSB0aGF0IHRvCi0rICogZmlsbCB0aGUga2V5c3Ry ZWFtIHF1ZXVlcy4gSSdtIGNvbmNlcm5lZCBhYm91dCBhZGRpdGlvbmFsIG92ZXJoZWFkIGJ1dCB0 aGUKLSsgKiBhZGRpdGlvbmFsIHNwZWVkIGZyb20gQUVTTkkgc2hvdWxkIG1ha2UgdXAgZm9yIGl0 LiAgKi8KLSsvKiBUaGUgYWJvdmUgY29tbWVudCB3YXMgbWFkZSB3aGVuIEkgdGhvdWdodCBJIG5l ZWRlZCB0byBkbyBhIG5ldyBFVlAgaW5pdCBmb3IKLSsgKiBlYWNoIGNvdW50ZXIgaW5jcmVtZW50 LiBUdXJucyBvdXQgbm90IHRvIGJlIHRoZSBjYXNlIC1janIgMTAvMTUvMjEqLwotKwotK3N0YXRp YyB2b2lkICoKLSt0aHJlYWRfbG9vcCh2b2lkICp4KQotK3sKLSsJRVZQX0NJUEhFUl9DVFggKiB2 b2xhdGlsZSBhZXNuaV9jdHg7Ci0rCXN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmMgPSB4Owot KwlzdHJ1Y3Qga3EgKnE7Ci0rCXN0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKnB0cjsKLSsJaW50IHFp ZHg7Ci0rCXB0aHJlYWRfdCBmaXJzdF90aWQ7Ci0rCWludCBvdXRsZW47Ci0rCXVfY2hhciBteW51 bGxbS1FMRU4gKiBBRVNfQkxPQ0tfU0laRV07Ci0rCW1lbXNldCgmbXludWxsLCAwLCBLUUxFTiAq IEFFU19CTE9DS19TSVpFKTsKLSsKLSsJLyogZ2V0IHRoZSB0aHJlYWQgaWQgdG8gc2VlIGlmIHRo aXMgaXMgdGhlIGZpcnN0IG9uZSAqLwotKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmMtPnRpZF9s b2NrKTsKLSsJZmlyc3RfdGlkID0gYy0+dGlkWzBdOwotKwlwdGhyZWFkX3J3bG9ja191bmxvY2so JmMtPnRpZF9sb2NrKTsKLSsKLSsJLyogY3JlYXRlIHRoZSBjb250ZXh0IGZvciB0aGlzIHRocmVh ZCAqLwotKwlhZXNuaV9jdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKLSsKLSsJLyoga2VlcCB0 cmFjayBvZiB0aGUgcG9pbnRlciBmb3IgdGhlIGV2cCBpbiB0aGlzIHN0cnVjdAotKwkgKiBzbyB3 ZSBjYW4gZnJlZSBpdCBsYXRlci4gU28gd2UgcGxhY2UgaXQgaW4gYSBoYXNoIGluZGV4ZWQgb24g dGhlCi0rCSAqIHRocmVhZCBpZCwgd2hpY2ggaXMgYXZhaWxhYmxlIHRvIHVzIGluIHRoZSBmcmVl IGZ1bmN0aW9uLgotKwkgKiBOb3RlLCB0aGUgdGhyZWFkIGlkIGlzbid0IG5lY2Vzc2FyeSB1bmlx dWUgYWNyb3NzIHJla2V5cyBidXQKLSsJICogdGhhdCdzIG9rYXkgYXMgdGhleSBhcmUgdW5pcXVl IGR1cmluZyBhIGtleS4gKi8KLSsJcHRyID0gbWFsbG9jKHNpemVvZiAqcHRyKTsgLypmcmVlZCBp biBzdG9wICYgcHJlam9pbiAqLwotKwlwdHItPnRpZCA9IHB0aHJlYWRfc2VsZigpOyAvKiBpbmRl eCBmb3IgaGFzaCAqLwotKwlwdHItPnBvaW50ZXIgPSBhZXNuaV9jdHg7Ci0rCUhBU0hfQUREX0lO VChldnBfcHRycywgdGlkLCBwdHIpOwotKwotKwkvKiBpbml0aWFsaXplIHRoZSBjaXBoZXIgY3R4 IHdpdGggdGhlIGtleSBwcm92aWRlZAotKwkgKiBkZXRlcm1pbmUgd2hpY2ggY2lwaGVyIHRvIHVz ZSBiYXNlZCBvbiB0aGUga2V5IHNpemUgKi8KLSsJaWYgKGMtPmtleWxlbiA9PSAyNTYpCi0rCQlF VlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBFVlBfYWVzXzI1Nl9jdHIoKSwgTlVMTCwgYy0+ b3JpZ19rZXksIE5VTEwpOwotKwllbHNlIGlmIChjLT5rZXlsZW4gPT0gMTI4KQotKwkJRVZQX0Vu Y3J5cHRJbml0X2V4KGFlc25pX2N0eCwgRVZQX2Flc18xMjhfY3RyKCksIE5VTEwsIGMtPm9yaWdf a2V5LCBOVUxMKTsKLSsJZWxzZSBpZiAoYy0+a2V5bGVuID09IDE5MikKLSsJCUVWUF9FbmNyeXB0 SW5pdF9leChhZXNuaV9jdHgsIEVWUF9hZXNfMTkyX2N0cigpLCBOVUxMLCBjLT5vcmlnX2tleSwg TlVMTCk7Ci0rCWVsc2UgewotKwkJbG9naXQoIkludmFsaWQga2V5IGxlbmd0aCBvZiAlZCBpbiBB RVMgQ1RSIE1ULiBFeGl0aW5nIiwgYy0+a2V5bGVuKTsKLSsJCWV4aXQoMSk7Ci0rCX0KLSsKLSsJ LyoKLSsJICogSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2Ygc3RhcnR1cCwgb25lIHRocmVhZCBt dXN0IGZpbGwKLSsJICogdGhlIGZpcnN0IEtRIHRoZW4gbWFyayBpdCBhcyBkcmFpbmluZy4gTG9j ayBoZWxkIHRocm91Z2hvdXQuCi0rCSAqLwotKwotKwlpZiAocHRocmVhZF9lcXVhbChwdGhyZWFk X3NlbGYoKSwgZmlyc3RfdGlkKSkgewotKwkJLyogZ2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRo ZSBrZXlxdWUgc3RydWN0ICovCi0rCQlxID0gJmMtPnFbMF07Ci0rCQlwdGhyZWFkX211dGV4X2xv Y2soJnEtPmxvY2spOwotKwkJLyogaWYgd2UgYXJlIGluIHRoZSBJTklUIHN0YXRlIHRoZW4gZmls bCB0aGUgcXVldWUgKi8KLSsJCWlmIChxLT5xc3RhdGUgPT0gS1FJTklUKSB7Ci0rCQkJLyogc2V0 IHRoZSBpbml0aWFsIGNvdW50ZXIgKi8KLSsJCQlFVlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4 LCBOVUxMLCBOVUxMLCBOVUxMLCBxLT5jdHIpOwotKwotKwkJCS8qIGVuY3lwaGVyIGEgYmxvY2sg c2l6ZWQgbnVsbCBzdHJpbmcgKG15bnVsbCkgd2l0aCB0aGUga2V5LiBUaGlzCi0rCQkJICogcmV0 dXJucyB0aGUga2V5c3RyZWFtIGJlY2F1c2UgeG9yaW5nIHRoZSBrZXlzdHJlYW0KLSsJCQkgKiBh Z2FpbnN0IG51bGwgcmV0dXJucyB0aGUga2V5c3RyZWFtLiBTdG9yZSB0aGF0IGluIHRoZSBhcHBy b3ByaWF0ZSBxdWV1ZSAqLwotKwkJCUVWUF9FbmNyeXB0VXBkYXRlKGFlc25pX2N0eCwgcS0+a2V5 c1swXSwgJm91dGxlbiwgbXludWxsLCBLUUxFTiAqIEFFU19CTE9DS19TSVpFKTsKLSsKLSsJCQkv KiBhZGQgdGhlIG51bWJlciBvZiBibG9ja3MgY3JlYXRlcyB0byB0aGUgYWVzIGNvdW50ZXIgKi8K LSsJCQlzc2hfY3RyX2FkZChxLT5jdHIsIEtRTEVOICogbnVta3EsIEFFU19CTE9DS19TSVpFKTsK LSsJCQlxLT5xc3RhdGUgPSBLUURSQUlOSU5HOwotKwkJCXB0aHJlYWRfY29uZF9icm9hZGNhc3Qo JnEtPmNvbmQpOwotKwkJfQotKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOwotKwl9 Ci0rCi0rCS8qCi0rCSAqIE5vcm1hbCBjYXNlIGlzIHRvIGZpbmQgZW1wdHkgcXVldWVzIGFuZCBm aWxsIHRoZW0sIHNraXBwaW5nIG92ZXIKLSsJICogcXVldWVzIGFscmVhZHkgZmlsbGVkIGJ5IG90 aGVyIHRocmVhZHMgYW5kIHN0b3BwaW5nIHRvIHdhaXQgZm9yCi0rCSAqIGEgZHJhaW5pbmcgcXVl dWUgdG8gYmVjb21lIGVtcHR5LgotKwkgKgotKwkgKiBNdWx0aXBsZSB0aHJlYWRzIG1heSBiZSB3 YWl0aW5nIG9uIGEgZHJhaW5pbmcgcXVldWUgYW5kIGF3b2tlbgotKwkgKiB3aGVuIGVtcHR5LiAg VGhlIGZpcnN0IHRocmVhZCB0byB3YWtlIHdpbGwgbWFyayBpdCBhcyBmaWxsaW5nLAotKwkgKiBv dGhlcnMgd2lsbCBtb3ZlIG9uIHRvIGZpbGwsIHNraXAsIG9yIHdhaXQgb24gdGhlIG5leHQgcXVl dWUuCi0rCSAqLwotKwlmb3IgKHFpZHggPSAxOzsgcWlkeCA9IChxaWR4ICsgMSkgJSBudW1rcSkg ewotKwkJLyogQ2hlY2sgaWYgSSB3YXMgY2FuY2VsbGVkLCBhbHNvIGNoZWNrZWQgaW4gY29uZF93 YWl0ICovCi0rCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKLSsKLSsJCS8qIENoZWNrIGlmIHdlIHNo b3VsZCBleGl0IGFzIHdlbGwgKi8KLSsJCXRocmVhZF9sb29wX2NoZWNrX2V4aXQoYyk7Ci0rCi0r CQkvKiBMb2NrIHF1ZXVlIGFuZCBibG9jayBpZiBpdHMgZHJhaW5pbmcgKi8KLSsJCXEgPSAmYy0+ cVtxaWR4XTsKLSsJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7Ci0rCQlwdGhyZWFkX2Ns ZWFudXBfcHVzaCh0aHJlYWRfbG9vcF9jbGVhbnVwLCAmcS0+bG9jayk7Ci0rCQl3aGlsZSAocS0+ cXN0YXRlID09IEtRRFJBSU5JTkcgfHwgcS0+cXN0YXRlID09IEtRSU5JVCkgewotKwkJCXRocmVh ZF9sb29wX2NoZWNrX2V4aXQoYyk7Ci0rCQkJcHRocmVhZF9jb25kX3dhaXQoJnEtPmNvbmQsICZx LT5sb2NrKTsKLSsJCX0KLSsJCXB0aHJlYWRfY2xlYW51cF9wb3AoMCk7Ci0rCi0rCQkvKiBJZiBm aWxsaW5nIG9yIGZ1bGwsIHNvbWVib2R5IGVsc2UgZ290IGl0LCBza2lwICovCi0rCQlpZiAocS0+ cXN0YXRlICE9IEtRRU1QVFkpIHsKLSsJCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7 Ci0rCQkJY29udGludWU7Ci0rCQl9Ci0rCi0rCQkvKgotKwkJICogRW1wdHksIGxldCdzIGZpbGwg aXQuCi0rCQkgKiBRdWV1ZSBsb2NrIGlzIHJlbGlucXVpc2hlZCB3aGlsZSB3ZSBkbyB0aGlzIHNv IG90aGVycwotKwkJICogY2FuIHNlZSB0aGF0IGl0J3MgYmVpbmcgZmlsbGVkLgotKwkJICovCi0r CQlxLT5xc3RhdGUgPSBLUUZJTExJTkc7Ci0rCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5j b25kKTsKLSsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKLSsKLSsJCS8qIHNldCB0 aGUgaW5pdGlhbCBjb3VudGVyICovCi0rCQlFVlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBO VUxMLCBOVUxMLCBOVUxMLCBxLT5jdHIpOwotKwotKwkJLyogc2VlIGNvcmVzcG9uZGluZyBibG9j ayBhYm92ZSBmb3IgdXNlZnVsIGNvbW1lbnRzICovCi0rCQlFVlBfRW5jcnlwdFVwZGF0ZShhZXNu aV9jdHgsIHEtPmtleXNbMF0sICZvdXRsZW4sIG15bnVsbCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0la RSk7Ci0rCi0rCQkvKiBSZS1sb2NrLCBtYXJrIGZ1bGwgYW5kIHNpZ25hbCBjb25zdW1lciAqLwot KwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsKLSsJCXNzaF9jdHJfYWRkKHEtPmN0ciwg S1FMRU4gKiBudW1rcSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJcS0+cXN0YXRlID0gS1FGVUxMOwot KwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29uZCk7Ci0rCQlwdGhyZWFkX211dGV4X3Vu bG9jaygmcS0+bG9jayk7Ci0rCX0KLSsKLSsJcmV0dXJuIE5VTEw7Ci0rfQotKwotKy8qIHRoaXMg aXMgd2hlcmUgdGhlIGRhdGEgaXMgYWN0dWFsbHkgZW5jaXBoZXJlZCBhbmQgZGVjaXBoZXJlZCAq LwotKy8qIHRoaXMgbWF5IGFsc28gYmVuZWZpdCBmcm9tIHVwZ3JhZGluZyB0byB0aGUgRVZQIEFQ SSAqLwotK3N0YXRpYyBpbnQKLStzc2hfYWVzX2N0cihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1X2No YXIgKmRlc3QsIGNvbnN0IHVfY2hhciAqc3JjLAotKyAgICBzaXplX3QgbGVuKQotK3sKLSsJdHlw ZWRlZiB1bmlvbiB7Ci0rI2lmZGVmIENJUEhFUl9JTlQxMjhfT0sKLSsJCV9fdWludDEyOF90ICp1 MTI4OwotKyNlbmRpZgotKwkJdWludDY0X3QgKnU2NDsKLSsJCXVpbnQzMl90ICp1MzI7Ci0rCQl1 aW50OF90ICp1ODsKLSsJCWNvbnN0IHVpbnQ4X3QgKmN1ODsKLSsJCXVpbnRwdHJfdCB1OwotKwl9 IHB0cnNfdDsKLSsJcHRyc190IGRlc3RwLCBzcmNwLCBidWZwOwotKwl1aW50cHRyX3QgYWxpZ247 Ci0rCXN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmM7Ci0rCXN0cnVjdCBrcSAqcSwgKm9sZHE7 Ci0rCWludCByaWR4OwotKwl1X2NoYXIgKmJ1ZjsKLSsKLSsJaWYgKGxlbiA9PSAwKQotKwkJcmV0 dXJuIDE7Ci0rCWlmICgoYyA9IEVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjdHgpKSA9PSBO VUxMKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXEgPSAmYy0+cVtjLT5xaWR4XTsKLSsJcmlkeCA9IGMt PnJpZHg7Ci0rCi0rCS8qIHNyYyBhbHJlYWR5IHBhZGRlZCB0byBibG9jayBtdWx0aXBsZSAqLwot KwlzcmNwLmN1OCA9IHNyYzsKLSsJZGVzdHAudTggPSBkZXN0OwotKwlkbyB7IC8qIGRvIHVudGls IGxlbiBpcyAwICovCi0rCQlidWYgPSBxLT5rZXlzW3JpZHhdOwotKwkJYnVmcC51OCA9IGJ1ZjsK LSsKLSsJCS8qIGZpZ3VyZSBvdXQgdGhlIGFsaWdubWVudCBvbiB0aGUgZmx5ICovCi0rI2lmZGVm IENJUEhFUl9VTkFMSUdORURfT0sKLSsJCWFsaWduID0gMDsKLSsjZWxzZQotKwkJYWxpZ24gPSBk ZXN0cC51IHwgc3JjcC51IHwgYnVmcC51OwotKyNlbmRpZgotKwotKwkJLyogeG9yIHRoZSBzcmMg YWdhaW5zdCB0aGUga2V5IChidWYpCi0rCQkgKiBkaWZmZXJlbnQgc3lzdGVtcyBjYW4gZG8gYWxs IDE2IGJ5dGVzIGF0IG9uY2Ugb3IKLSsJCSAqIG1heSBuZWVkIHRvIGRvIGl0IGluIDggb3IgNCBi eXRlcyBjaHVua3MKLSsJCSAqIHdvcnN0IGNhc2UgaXMgZG9pbmcgaXQgYXMgYSBsb29wICovCi0r I2lmZGVmIENJUEhFUl9JTlQxMjhfT0sKLSsJCS8qIHdpdGggR0NDIDEzIHdlIGhhdmUgaGF2aW5n IGNvbnNpc3RlbnQgc2VnIGZhdWx0cwotKwkJICogaW4gdGhpcyBzZWN0aW9uIG9mIGNvZGUuIFNp bmNlIHRoaXMgaXMgYSBjcml0aWNhbAotKwkJICogY29kZSBwYXRoIHdlIGFyZSByZW1vdmluZyB0 aGlzIHVudGlsIHdlIGhhdmUgYSBzb2x1dGlvbgotKwkJICogaW4gcGxhY2UgLWNqciAwMi8yMi8y NAotKwkJICogVE9ETzogRklYIFRISVMKLSsJCSAqLwotKwkJLyogaWYgKChhbGlnbiAmIDB4Zikg PT0gMCkgeyAqLwotKwkJLyogCWRlc3RwLnUxMjhbMF0gPSBzcmNwLnUxMjhbMF0gXiBidWZwLnUx MjhbMF07ICovCi0rCQkvKiB9IGVsc2UgKi8KLSsjZW5kaWYKLSsJCS8qIHRoaXMgaXMgY2F1c2lu ZyB1bmRlZmluZWQgYmVoYXZpb3VyIGluIHNhbml0aXplcnMKLSsJCSAqIHRoaXMgaXMgYW5ub3lp bmcgYmVjYXVzZSBpdCdzIG1vcmUgZWZmaWNpZW50Ci0rCQkgKiBidXQgVUIgaXMgbm90IHNvbWV0 aGluZyBJIHdhbnQgdG8gcmV0YWluICovCi0rCQkvKiA2NCBiaXRzICovCi0rCQkvKiBpZiAoKGFs aWduICYgMHg3KSA9PSAwKSB7ICovCi0rCQkvKiAJZGVzdHAudTY0WzBdID0gc3JjcC51NjRbMF0g XiBidWZwLnU2NFswXTsgKi8KLSsJCS8qIAlkZXN0cC51NjRbMV0gPSBzcmNwLnU2NFsxXSBeIGJ1 ZnAudTY0WzFdOyAqLwotKwkJLyogL1wqIDMyIGJpdHMgKlwvICovCi0rCQkvKiB9IGVsc2UgKi8K LSsJCWlmICgoYWxpZ24gJiAweDMpID09IDApIHsKLSsJCQlkZXN0cC51MzJbMF0gPSBzcmNwLnUz MlswXSBeIGJ1ZnAudTMyWzBdOwotKwkJCWRlc3RwLnUzMlsxXSA9IHNyY3AudTMyWzFdIF4gYnVm cC51MzJbMV07Ci0rCQkJZGVzdHAudTMyWzJdID0gc3JjcC51MzJbMl0gXiBidWZwLnUzMlsyXTsK LSsJCQlkZXN0cC51MzJbM10gPSBzcmNwLnUzMlszXSBeIGJ1ZnAudTMyWzNdOwotKwkJfSBlbHNl IHsKLSsJCQkvKjEgYnl0ZSBhdCBhIHRpbWUqLwotKwkJCXNpemVfdCBpOwotKwkJCWZvciAoaSA9 IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgKytpKQotKwkJCQlkZXN0W2ldID0gc3JjW2ldIF4gYnVm W2ldOwotKwkJfQotKwotKwkJLyogaW5jL2RlY3JlbWVudCB0aGUgcG9pbnRlcnMgYnkgdGhlIGJs b2NrIHNpemUgKDE2KSovCi0rCQlkZXN0cC51ICs9IEFFU19CTE9DS19TSVpFOwotKwkJc3JjcC51 ICs9IEFFU19CTE9DS19TSVpFOwotKwotKwkJLyogSW5jcmVtZW50IHJlYWQgaW5kZXgsIHN3aXRj aCBxdWV1ZXMgb24gcm9sbG92ZXIgKi8KLSsJCWlmICgocmlkeCA9IChyaWR4ICsgMSkgJSBLUUxF TikgPT0gMCkgewotKwkJCW9sZHEgPSBxOwotKwotKwkJCS8qIE1hcmsgbmV4dCBxdWV1ZSBkcmFp bmluZywgbWF5IG5lZWQgdG8gd2FpdCAqLwotKwkJCWMtPnFpZHggPSAoYy0+cWlkeCArIDEpICUg bnVta3E7Ci0rCQkJcSA9ICZjLT5xW2MtPnFpZHhdOwotKwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygm cS0+bG9jayk7Ci0rCQkJd2hpbGUgKHEtPnFzdGF0ZSAhPSBLUUZVTEwpIHsKLSsJCQkJcHRocmVh ZF9jb25kX3dhaXQoJnEtPmNvbmQsICZxLT5sb2NrKTsKLSsJCQl9Ci0rCQkJcS0+cXN0YXRlID0g S1FEUkFJTklORzsKLSsJCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKLSsJCQlw dGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7Ci0rCi0rCQkJLyogTWFyayBjb25zdW1lZCBx dWV1ZSBlbXB0eSBhbmQgc2lnbmFsIHByb2R1Y2VycyAqLwotKwkJCXB0aHJlYWRfbXV0ZXhfbG9j aygmb2xkcS0+bG9jayk7Ci0rCQkJb2xkcS0+cXN0YXRlID0gS1FFTVBUWTsKLSsJCQlwdGhyZWFk X2NvbmRfYnJvYWRjYXN0KCZvbGRxLT5jb25kKTsKLSsJCQlwdGhyZWFkX211dGV4X3VubG9jaygm b2xkcS0+bG9jayk7Ci0rCQl9Ci0rCX0gd2hpbGUgKGxlbiAtPSBBRVNfQkxPQ0tfU0laRSk7Ci0r CWMtPnJpZHggPSByaWR4OwotKwlyZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludAotK3NzaF9h ZXNfY3RyX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdV9jaGFyICprZXksIGNvbnN0 IHVfY2hhciAqaXYsCi0rICAgIGludCBlbmMpCi0rewotKwlzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4 X210ICpjOwotKwlpbnQgaTsKLSsKLSsJY2hhciAqYWVzX3RocmVhZHMgPSBnZXRlbnYoIlNTSF9D SVBIRVJfVEhSRUFEUyIpOwotKyAgICAgICAgaWYgKGFlc190aHJlYWRzICE9IE5VTEwgJiYgc3Ry bGVuKGFlc190aHJlYWRzKSAhPSAwKQotKwkJY2lwaGVyX3RocmVhZHMgPSBhdG9pKGFlc190aHJl YWRzKTsKLSsJZWxzZQotKwkJY2lwaGVyX3RocmVhZHMgPSAxOwotKwotKwlpZiAoY2lwaGVyX3Ro cmVhZHMgPCAxKQotKyAJCWNpcGhlcl90aHJlYWRzID0gMTsKLSsKLSsJaWYgKGNpcGhlcl90aHJl YWRzID4gTUFYX1RIUkVBRFMpCi0rCQljaXBoZXJfdGhyZWFkcyA9IE1BWF9USFJFQURTOwotKwot KwludW1rcSA9IGNpcGhlcl90aHJlYWRzICsgMTsKLSsKLSsJaWYgKG51bWtxID4gTUFYX05VTUtR KQotKwkJbnVta3EgPSBNQVhfTlVNS1E7Ci0rCi0rCWRlYnVnKCJTdGFydGluZyAlZCB0aHJlYWRz IGFuZCAlZCBxdWV1ZXNcbiIsIGNpcGhlcl90aHJlYWRzLCBudW1rcSk7Ci0rCi0rCS8qIHNldCB1 cCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBjIChvdXIgY2lwaGVyIHN0cmVhbSBzdHJ1Y3QpICovCi0r IAlpZiAoKGMgPSBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEoY3R4KSkgPT0gTlVMTCkgewot KwkJYyA9IHhtYWxsb2Moc2l6ZW9mKCpjKSk7Ci0rCQlwdGhyZWFkX3J3bG9ja19pbml0KCZjLT50 aWRfbG9jaywgTlVMTCk7Ci0rI2lmZGVmIF9fQVBQTEVfXwotKwkJcHRocmVhZF9yd2xvY2tfaW5p dCgmYy0+c3RvcF9sb2NrLCBOVUxMKTsKLSsJCWMtPmV4aXRfZmxhZyA9IEZBTFNFOwotKyNlbmRp ZiAvKiBfX0FQUExFX18gKi8KLSsKLSsJCWMtPnN0YXRlID0gSEFWRV9OT05FOwotKwotKwkJLyog aW5pdGlhbGl6ZSB0aGUgbXV0ZXhzIGFuZCBjb25kaXRpb25zIGZvciBlYWNoIGxvY2sgaW4gb3Vy IHN0cnVjdCAqLwotKwkJZm9yIChpID0gMDsgaSA8IG51bWtxOyBpKyspIHsKLSsJCQlwdGhyZWFk X211dGV4X2luaXQoJmMtPnFbaV0ubG9jaywgTlVMTCk7Ci0rCQkJcHRocmVhZF9jb25kX2luaXQo JmMtPnFbaV0uY29uZCwgTlVMTCk7Ci0rCQl9Ci0rCi0rCQkvKiBhdHRhY2ggb3VyIHN0cnVjdCB0 byB0aGUgY29udGV4dCAqLwotKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGN0eCwgYyk7 Ci0rCX0KLSsKLSsJLyogd2UgYXJlIGluaXRpYWxpemluZyBidXQgdGhlIGN1cnJlbnQgc3RydWN0 dXJlIGFscmVhZHkKLSsJICAgaGFzIGFuIElWIGFuZCBrZXkgc28gd2Ugd2FudCB0byBraWxsIHRo ZSBleGlzdGluZyBrZXkgZGF0YQotKwkgICBhbmQgc3RhcnQgb3Zlci4gVGhpcyBpcyBpbXBvcnRh bnQgd2hlbiB3ZSBuZWVkIHRvIHJla2V5IHRoZSBkYXRhIHN0cmVhbSAqLwotKwlpZiAoYy0+c3Rh dGUgPT0gKEhBVkVfS0VZIHwgSEFWRV9JVikpIHsKLSsJCS8qIHRlbGwgdGhlIHByZWdlbiB0aHJl YWRzIHRvIGV4aXQgKi8KLSsJCXN0b3BfYW5kX2pvaW5fcHJlZ2VuX3RocmVhZHMoYyk7Ci0rCi0r I2lmZGVmIF9fQVBQTEVfXwotKwkJLyogcmVzZXQgdGhlIGV4aXQgZmxhZyAqLwotKwkJYy0+ZXhp dF9mbGFnID0gRkFMU0U7Ci0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKwkJLyogU3RhcnQg b3ZlciBnZXR0aW5nIGtleSAmIGl2ICovCi0rCQljLT5zdGF0ZSA9IEhBVkVfTk9ORTsKLSsJfQot KwotKwkvKiBzZXQgdGhlIGluaXRpYWwga2V5IGZvciB0aGlzIGtleSBzdHJlYW0gcXVldWUgKi8K LSsJaWYgKGtleSAhPSBOVUxMKSB7Ci0rCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwgRVZQX0NJ UEhFUl9DVFhfa2V5X2xlbmd0aChjdHgpICogOCwKLSsJCSAgICZjLT5hZXNfa2V5KTsKLSsJCWMt Pm9yaWdfa2V5ID0ga2V5OwotKwkJYy0+a2V5bGVuID0gRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0 aChjdHgpICogODsKLSsJCWMtPnN0YXRlIHw9IEhBVkVfS0VZOwotKwl9Ci0rCi0rCS8qIHNldCB0 aGUgSVYgKi8KLSsJaWYgKGl2ICE9IE5VTEwpIHsKLSsJCS8qIGluaXQgdGhlIGNvdW50ZXIgdGhp cyBpcyBqdXN0IGEgMTZieXRlIHVjaGFyICovCi0rCQltZW1jcHkoYy0+YWVzX2NvdW50ZXIsIGl2 LCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQljLT5zdGF0ZSB8PSBIQVZFX0lWOwotKwl9Ci0rCi0rCWlm IChjLT5zdGF0ZSA9PSAoSEFWRV9LRVkgfCBIQVZFX0lWKSkgewotKwkJLyogQ2xlYXIgcXVldWVz ICovCi0rCQkvKiBzZXQgdGhlIGZpcnN0IGtleSBpbiB0aGUga2V5IHF1ZXVlIHRvIHRoZSBjdXJy ZW50IGNvdW50ZXIgKi8KLSsJCW1lbWNweShjLT5xWzBdLmN0ciwgYy0+YWVzX2NvdW50ZXIsIEFF U19CTE9DS19TSVpFKTsKLSsJCS8qIGluZGljYXRlIHRoYXQgaXQgbmVlZHMgdG8gYmUgaW5pdGlh bGl6ZWQgKi8KLSsJCWMtPnFbMF0ucXN0YXRlID0gS1FJTklUOwotKwkJLyogZm9yIGVhY2ggb2Yg dGhlIHJlbWFpbmluZyBxdWV1ZXMgc2V0IHRoZSBmaXJzdCBjb3VudGVyIHRvIHRoZQotKwkJICog Y291bnRlciBhbmQgdGhlbiBhZGQgdGhlIHNpemUgb2YgdGhlIHF1ZXVlIHRvIHRoZSBjb3VudGVy ICovCi0rCQlmb3IgKGkgPSAxOyBpIDwgbnVta3E7IGkrKykgewotKwkJCW1lbWNweShjLT5xW2ld LmN0ciwgYy0+YWVzX2NvdW50ZXIsIEFFU19CTE9DS19TSVpFKTsKLSsJCQlzc2hfY3RyX2FkZChj LT5xW2ldLmN0ciwgaSAqIEtRTEVOLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQkJYy0+cVtpXS5xc3Rh dGUgPSBLUUVNUFRZOwotKwkJfQotKwkJYy0+cWlkeCA9IDA7Ci0rCQljLT5yaWR4ID0gMDsKLSsJ CWMtPnN0cnVjdF9pZCA9IGdsb2JhbF9zdHJ1Y3RfaWQrKzsKLSsKLSsKLSsJCS8qIFN0YXJ0IHRo cmVhZHMgKi8KLSsjZGVmaW5lIFNUQUNLX1NJWkUgKDEwMjQgKiAxMDI0KQotKwkJcHRocmVhZF9h dHRyX3QgYXR0cjsKLSsJCXB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKLSsJCXB0aHJlYWRfYXR0 cl9zZXRzdGFja3NpemUoJmF0dHIsIFNUQUNLX1NJWkUpOwotKwkJZm9yIChpID0gMDsgaSA8IGNp cGhlcl90aHJlYWRzOyBpKyspIHsKLSsJCQlwdGhyZWFkX3J3bG9ja193cmxvY2soJmMtPnRpZF9s b2NrKTsKLSsJCQlpZiAocHRocmVhZF9jcmVhdGUoJmMtPnRpZFtpXSwgJmF0dHIsIHRocmVhZF9s b29wLCBjKSAhPSAwKQotKwkJCQlmYXRhbCAoIkFFUy1DVFIgTVQgQ291bGQgbm90IGNyZWF0ZSB0 aHJlYWQgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLypzaG91bGQgZGllIGhlcmUgKi8KLSsJCQllbHNlIHsKLSsJCQkJYy0+aWRbaV0gPSBp OwotKwkJCQlkZWJ1ZyAoIkFFUy1DVFIgTVQgc3Bhd25lZCBhIHRocmVhZCB3aXRoIGlkICVsdSBp biAlcyAoJWx1LCAlZCkiLAotKwkJCQkgICAgICAgYy0+dGlkW2ldLCBfX0ZVTkNUSU9OX18sIGMt PnN0cnVjdF9pZCwgYy0+aWRbaV0pOwotKwkJCX0KLSsJCQlwdGhyZWFkX3J3bG9ja191bmxvY2so JmMtPnRpZF9sb2NrKTsKLSsJCX0KLSsJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYy0+cVswXS5sb2Nr KTsKLSsJCS8vIHdhaXQgZm9yIGFsbCBvZiB0aGUgdGhyZWFkcyB0byBiZSBpbml0aWFsaXplZAot KwkJd2hpbGUgKGMtPnFbMF0ucXN0YXRlID09IEtRSU5JVCkKLSsJCQlwdGhyZWFkX2NvbmRfd2Fp dCgmYy0+cVswXS5jb25kLCAmYy0+cVswXS5sb2NrKTsKLSsJCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZjLT5xWzBdLmxvY2spOwotKwl9Ci0rCXJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50Ci0r c3NoX2Flc19jdHJfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqY3R4KQotK3sKLSsJc3RydWN0IHNz aF9hZXNfY3RyX2N0eF9tdCAqYzsKLSsKLSsJaWYgKChjID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2Fw cF9kYXRhKGN0eCkpICE9IE5VTEwpIHsKLSsJCXN0b3BfYW5kX2pvaW5fcHJlZ2VuX3RocmVhZHMo Yyk7Ci0rCi0rCQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Ci0rCQlmcmVlKGMpOwotKwkJRVZQ X0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGN0eCwgTlVMTCk7Ci0rCX0KLSsJcmV0dXJuIDE7Ci0r fQotKwotKy8qIDxmcmllZGw+ICovCi0rY29uc3QgRVZQX0NJUEhFUiAqCi0rZXZwX2Flc19jdHJf bXQodm9pZCkKLSt7Ci0rCXN0YXRpYyBFVlBfQ0lQSEVSICphZXNfY3RyOwotKwlhZXNfY3RyID0g RVZQX0NJUEhFUl9tZXRoX25ldyhOSURfdW5kZWYsIDE2LypibG9jayovLCAxNi8qa2V5Ki8pOwot KwlFVlBfQ0lQSEVSX21ldGhfc2V0X2l2X2xlbmd0aChhZXNfY3RyLCBBRVNfQkxPQ0tfU0laRSk7 Ci0rCUVWUF9DSVBIRVJfbWV0aF9zZXRfaW5pdChhZXNfY3RyLCBzc2hfYWVzX2N0cl9pbml0KTsK LSsJRVZQX0NJUEhFUl9tZXRoX3NldF9jbGVhbnVwKGFlc19jdHIsIHNzaF9hZXNfY3RyX2NsZWFu dXApOwotKwlFVlBfQ0lQSEVSX21ldGhfc2V0X2RvX2NpcGhlcihhZXNfY3RyLCBzc2hfYWVzX2N0 cik7Ci0rIyAgaWZuZGVmIFNTSF9PTERfRVZQCi0rCUVWUF9DSVBIRVJfbWV0aF9zZXRfZmxhZ3Mo YWVzX2N0ciwgRVZQX0NJUEhfQ0JDX01PREUKLSsJCQkJICAgICAgfCBFVlBfQ0lQSF9WQVJJQUJM RV9MRU5HVEgKLSsJCQkJICAgICAgfCBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklUCi0rCQkJCSAg ICAgIHwgRVZQX0NJUEhfQ1VTVE9NX0lWKTsKLSsjICBlbmRpZiAvKlNTSF9PTERfRVZQKi8KLSsJ cmV0dXJuIGFlc19jdHI7Ci0rfQotKyNlbmRpZiAvKiBPU1NMIENoZWNrICovCi1kaWZmIC1OdXIg b3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5jIG9wZW5zc2gtMTAu M3AxL2NpcGhlci1jdHItbXQtZnVuY3Rpb25zLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2Np cGhlci1jdHItbXQtZnVuY3Rpb25zLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5jCTIwMjYtMDct MDIgMDA6Mjc6MjkuNzIxOTE4OTg3ICswMjAwCi1AQCAtMCwwICsxLDY4MiBAQAotKy8qCi0rICog T3BlblNTSCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RSIENpcGhlciBQcm92aWRlciBmb3IgT3BlblNT TCAzCi0rICoKLSsgKiBBdXRob3I6IEJlbmphbWluIEJlbm5ldHQgPGJlbkBwc2MuZWR1PgotKyAq IEF1dGhvcjogTWlrZSBUYXNvdGEgPHRhc290YUBnbWFpbC5jb20+Ci0rICogQXV0aG9yOiBDaHJp cyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgotKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDIyIFBp dHRzYnVyZ2ggU3VwZXJjb21wdXRpbmcgQ2VudGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogQmFzZWQgb24gb3JpZ2luYWwgT3BlblNTSCBBRVMtQ1RSIGNpcGhlci4gU21hbGwgcG9y dGlvbnMgcmVtYWluIHVuY2hhbmdlZCwKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWFya3VzIEZy aWVkbCA8bWFya3VzQG9wZW5ic2Qub3JnPgotKyAqCi0rICogUGVybWlzc2lvbiB0byB1c2UsIGNv cHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0rICogcHVy cG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0 IHRoZSBhYm92ZQotKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0rICoKLSsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSsgKiBX SVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5U SUVTIE9GCi0rICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSsgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJ UkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0rICogV0hBVFNP RVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS IElOIEFOCi0rICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJ T1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSsgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotKyAqLwotKwotKyNpbmNsdWRl ICJpbmNsdWRlcy5oIgotKwotKy8qIG9ubHkgZm9yIHN5c3RlbXMgd2l0aCBPU1NMIDMgKi8KLSsj aWZkZWYgV0lUSF9PUEVOU1NMMwotKyNpbmNsdWRlIDxzdGRhcmcuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgInhtYWxsb2MuaCIK LSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgImNpcGhlci1jdHItbXQtZnVuY3Rpb25z LmgiCi0rI2luY2x1ZGUgImxvZy5oIgotKwotKy8qIGZvciBwcm92aWRlciBlcnJvciBzdHJ1Y3Qg Ki8KLSsjaW5jbHVkZSAib3NzbDMtcHJvdmlkZXItZXJyLmgiCi0rI2luY2x1ZGUgIm51bS5oIgot KwotKy8qIG5vdGUgcmVnYXJkaW5nIHRocmVhZHMgYW5kIHF1ZXVlcyAqLwotKy8qIGluaXRpYWxs eSB0aGlzIGNpcGhlciB3YXMgd3JpdHRlbiBpbiBhIHdheSB0aGF0Ci0rICogdGhlIGtleSBzdHJl YW0gd2FzIGdlbmVyYXRlZCBpbiBhIHBlciBjaXBoZXIgYmxvY2sKLSsgKiBsb29wLiBGb3IgZXhh bXBsZSwgaWYgdGhlIGtleSBzdHJlYW0gcXVldWUgbGVuZ3RoIHdhcwotKyAqIDE2ayBhbmQgdGhl IGNpcGhlciBibG9jayBzaXplIHdhcyAxNiBieXRlcyBpdCB3b3VsZAotKyAqIGZpbGwgdGhlIHF1 ZXVlIDE2IGJ5dGVzIGF0IGEgdGltZS4gTWl0Y2ggRG9ycmVsbCBwb2ludGVkCi0rICogb3V0IHRo YXQgd2UgY291bGQgZmlsbCB0aGUgcXVldWUgaW4gb25jZSBjYWxsIGVsaW1pbmF0aW5nCi0rICog bG9vcCBhbmQgbXVsdGlwbGUgY2FsbHMgdG8gRVZQX0VuY3J5cHRVcGRhdGUuIERvaW5nIHNvCi0r ICogZHJhbWF0aWNhbGx5IHJlZHVjZWQgQ1BVIGxvYWQgaW4gdGhlIHRocmVhZHMgYW5kIGluZGlj YXRlZAotKyAqIHRoYXQgd2UgY291bGQgYWxzbyBlbGltaW5hdGUgbW9zdCBvZiB0aGUgdGhyZWFk cyBhbmQgcXVldWVzCi0rICogYXMgaXQgd291bGQgdGFrZSBmYXIgbGVzcyB0aW1lIGZvciBhIHF1 ZXVlIHRvIGVidGVyIEtRX0ZVTEwKLSsgKiBzdGF0ZS4gQXMgc3VjaCwgd2UndmUgcmVkdWNlZCB0 aGUgZGVmYXVsdCBudW1iZXIgb2YgdGhyZWFkcwotKyAqIGFuZCBxdWV1ZXMgZnJvbSAyIGFuZCA4 IChyZXNwZWN0aXZlbHkpIHRvIDEgYW5kIDIuIFdlJ3ZlIGFsc28KLSsgKiBlbGltbmF0ZWQgdGhl IG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBwaHlzaWNhbCBudW1iZXIgb2YgY29yZXMgb24KLSsgKiB0 aGUgc3lzdGVtIGFuZCwgaWYgdGhlIHVzZXIgZGVzaXJlcywgY2FuIHNwaW4gdXAgbW9yZSB0aHJl YWRzCi0rICogdXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIEFkZGl0aW9uYWxseSwgcXVl dWVzIGlzIG5vdyBmaXhlZAotKyAqIGF0IHRocmVhZF9jb3VudCArIDEuCi0rICogY2pyIDEwLzE5 LzIwMjIgKi8KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KLSsvKiBOdW1iZXIgb2YgcHJlZ2VuIHRocmVhZHMgdG8gdXNlICovCi0rLyog dGhpcyBpcyBhIGRlZmF1bHQgdmFsdWUuIFRoZSBhY3R1YWwgbnVtYmVyIGlzCi0rICogZGV0ZXJt aW5lZCBkdXJpbmcgaW5pdCBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBudW1iZXIKLSsgKiBvZiBhdmFp bGFibGUgY29yZXMgKi8KLStpbnQgY2lwaGVyX3RocmVhZHMgPSAxOwotKwotKy8qIE51bWJlciBv ZiBrZXlzdHJlYW0gcXVldWVzICovCi0rLyogaWRlYWxseSB0aGlzIHNob3VsZCBiZSBsYXJnZSBl bm91Z2ggc28gdGhhdCB0aGVyZSBpcwotKyAqIGFsd2F5cyBhIGtleSBxdWV1ZSBmb3IgYSB0aHJl YWQgdG8gd29yayBvbgotKyAqIHNvIG1heWJlIGRvdWJsZSBvZiB0aGUgbnVtYmVyIG9mIHRocmVh ZHMuIEFnYWluIHRoaXMKLSsgKiBpcyBhIGRlZmF1bHQgYW5kIHRoZSBhY3R1YWwgdmFsdWUgaXMg ZGV0ZXJtaW5lZCBpbiBpbml0Ki8KLStpbnQgbnVta3EgPSAyOwotKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0gRU5EIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsvKiBnbG9iYWxz ICovCi0rLyogaG93IHdlIGluY3JlbWVudCB0aGUgaWQgdGhlIHN0cnVjdHMgd2UgY3JlYXRlICov Ci0rbG9uZyB1bnNpZ25lZCBpbnQgZ2xvYmFsX3N0cnVjdF9pZCA9IDA7Ci0rCi0rLyoga2VlcCBh IGNvcHkgb2YgdGhlIHBvaW50ZXJzIGNyZWF0ZWQgaW4gdGhyZWFkX2xvb3AgdG8gZnJlZSBsYXRl ciAqLwotK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKmV2cF9wdHJzID0gTlVMTDsKLSsKLSsvKiBw cml2YXRlIGZ1bmN0aW9ucyAqLwotKwotKy8qCi0rICogQWRkIG51bSB0byBjb3VudGVyICdjdHIn Ci0rICovCi0rc3RhdGljIHZvaWQKLStzc2hfY3RyX2FkZCh1X2NoYXIgKmN0ciwgdWludDMyX3Qg bnVtLCB1X2ludCBsZW4pCi0rewotKwlpbnQgaTsKLSsJdWludDE2X3QgbjsKLSsKLSsJZm9yIChu ID0gMCwgaSA9IGxlbiAtIDE7IGkgPj0gMCAmJiAobnVtIHx8IG4pOyBpLS0pIHsKLSsJCW4gPSBj dHJbaV0gKyAobnVtICYgMHhmZikgKyBuOwotKwkJbnVtID4+PSA4OwotKwkJY3RyW2ldID0gbiAm IDB4ZmY7Ci0rCQluID4+PSA4OwotKwl9Ci0rfQotKwotKy8qCi0rICogVGhyZWFkcyBtYXkgYmUg Y2FuY2VsbGVkIGluIGEgcHRocmVhZF9jb25kX3dhaXQsIHdlIG11c3QgZnJlZSB0aGUgbXV0ZXgK LSsgKi8KLStzdGF0aWMgdm9pZAotK3RocmVhZF9sb29wX2NsZWFudXAodm9pZCAqeCkKLSt7Ci0r CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QgKil4KTsKLSt9Ci0rCi0rI2lm ZGVmIF9fQVBQTEVfXwotKy8qIENoZWNrIGlmIHdlIHNob3VsZCBleGl0LCB3ZSBhcmUgZG9pbmcg Ym90aCBjYW5jZWwgYW5kIGV4aXQgY29uZGl0aW9uCi0rICogc2luY2Ugb24gT1NYIHRocmVhZHMg c2VlbSB0byBvY2Nhc2lvbmFsbHkgZmFpbCB0byBub3RpY2Ugd2hlbiB0aGV5IGhhdmUKLSsgKiBi ZWVuIGNhbmNlbGxlZC4gV2Ugd2FudCB0byBoYXZlIGEgYmFja3VwIHRvIG1ha2Ugc3VyZSB0aGF0 IHdlIHdvbid0IGhhbmcKLSsgKiB3aGVuIHRoZSBtYWluIHByb2Nlc3Mgam9pbigpLXMgdGhlIGNh bmNlbGxlZCB0aHJlYWQuCi0rICovCi0rc3RhdGljIHZvaWQKLSt0aHJlYWRfbG9vcF9jaGVja19l eGl0KHN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4KQotK3sKLSsJaW50IGV4aXRfZmxh ZzsKLSsKLSsJcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZhZXNfbXRfY3R4LT5zdG9wX2xvY2spOwot KwlleGl0X2ZsYWcgPSBhZXNfbXRfY3R4LT5leGl0X2ZsYWc7Ci0rCXB0aHJlYWRfcndsb2NrX3Vu bG9jaygmYWVzX210X2N0eC0+c3RvcF9sb2NrKTsKLSsKLSsJaWYgKGV4aXRfZmxhZykKLSsJCXB0 aHJlYWRfZXhpdChOVUxMKTsKLSt9Ci0rI2Vsc2UKLSsjIGRlZmluZSB0aHJlYWRfbG9vcF9jaGVj a19leGl0KHMpCi0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKy8qCi0rICogSGVscGVyIGZ1 bmN0aW9uIHRvIHRlcm1pbmF0ZSB0aGUgaGVscGVyIHRocmVhZHMKLSsgKi8KLStzdGF0aWMgdm9p ZAotK3N0b3BfYW5kX2pvaW5fcHJlZ2VuX3RocmVhZHMoc3RydWN0IGFlc19tdF9jdHhfc3QgKmFl c19tdF9jdHgpCi0rewotKwlpbnQgaTsKLSsKLSsjaWZkZWYgX19BUFBMRV9fCi0rCS8qIG5vdGlm eSB0aHJlYWRzIHRoYXQgdGhleSBzaG91bGQgZXhpdCAqLwotKwlwdGhyZWFkX3J3bG9ja193cmxv Y2soJmFlc19tdF9jdHgtPnN0b3BfbG9jayk7Ci0rCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IFRS VUU7Ci0rCXB0aHJlYWRfcndsb2NrX3VubG9jaygmYWVzX210X2N0eC0+c3RvcF9sb2NrKTsKLSsj ZW5kaWYgLyogX19BUFBMRV9fICovCi0rCi0rCS8qIENhbmNlbCBwcmVnZW4gdGhyZWFkcyAqLwot Kwlmb3IgKGkgPSAwOyBpIDwgY2lwaGVyX3RocmVhZHM7IGkrKykgewotKwkJZGVidWdfZiAoIkNh bmNlbGVkICVsdSAoJWx1LCVkKSIsIGFlc19tdF9jdHgtPnRpZFtpXSwgYWVzX210X2N0eC0+c3Ry dWN0X2lkLAotKwkJICAgICAgIGFlc19tdF9jdHgtPmlkW2ldKTsKLSsJCXB0aHJlYWRfY2FuY2Vs KGFlc19tdF9jdHgtPnRpZFtpXSk7Ci0rCX0KLSsJZm9yIChpID0gMDsgaSA8IGNpcGhlcl90aHJl YWRzOyBpKyspIHsKLSsJCWlmIChwdGhyZWFkX2tpbGwoYWVzX210X2N0eC0+dGlkW2ldLCAwKSAh PSAwKQotKwkJCWRlYnVnMygiQUVTLUNUUiBNVCBwdGhyZWFkX2pvaW4gZmFpbHVyZTogSW52YWxp ZCB0aHJlYWQgaWQgJWx1IGluICVzIiwKLSsJCQkgICAgICAgYWVzX210X2N0eC0+dGlkW2ldLCBf X2Z1bmNfXyk7Ci0rCQllbHNlIHsKLSsJCQlkZWJ1Z19mICgiSm9pbmluZyAlbHUgKCVsdSwgJWQp IiwgYWVzX210X2N0eC0+dGlkW2ldLCBhZXNfbXRfY3R4LT5zdHJ1Y3RfaWQsCi0rCQkJCSBhZXNf bXRfY3R4LT5pZFtpXSk7Ci0rCQkJcHRocmVhZF9qb2luKGFlc19tdF9jdHgtPnRpZFtpXSwgTlVM TCk7Ci0rCQkJLyogdGhpcyBmaW5kcyB0aGUgZW50cnkgaW4gdGhlIGhhc2ggdGhhdCBjb3JyZXNw b25kaW5nIHRvIHRoZQotKwkJCSAqIHRocmVhZCBpZC4gVGhhdCdzIHVzZWQgdG8gZmluZCB0aGUg cG9pbnRlciB0byB0aGUgY2lwaGVyIHN0cnVjdAotKwkJCSAqIGNyZWF0ZWQgaW4gdGhyZWFkX2xv b3AuICovCi0rCQkJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRyOwotKwkJCUhBU0hfRklORF9J TlQoZXZwX3B0cnMsICZhZXNfbXRfY3R4LT50aWRbaV0sIHB0cik7Ci0rCQkJRVZQX0NJUEhFUl9D VFhfZnJlZShwdHItPnBvaW50ZXIpOwotKwkJCUhBU0hfREVMKGV2cF9wdHJzLCBwdHIpOwotKwkJ CWZyZWUocHRyKTsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgfQotKwlwdGhyZWFkX3J3 bG9ja19kZXN0cm95KCZhZXNfbXRfY3R4LT50aWRfbG9jayk7Ci0rfQotKwotKy8qIGRldGVybWlu ZSB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlCi0rICogVGVzdGluZyBpbmRpY2F0ZXMgdGhh dCBpbiBtb3N0IGFsbCBzaXR1YXRpb25zIHRoZSBvcHRpbWFsIG51bWJlciBvZgotKyAqIHRocmVh ZHMgaXMgMSBtZWFuaW5nIDEgZm9yIGluYm91bmQgYW5kIDEgZm9yIG91dGJvdW5kLiBUaGUgb3B0 aW1hbAotKyAqIHF1ZXVlIGNvdW50IGhhcyBhbHNvIGJlZW4gZGV0ZXJtaW5lZCB0byBiZSB0aHJl YWRfY291bnQgKyAxLgotKyAqIG5vdGUgdGhpcyBmdW5jdGlvbiB1cGRhdGVzIHR3byBnbG9iYWxz IC0gbnVta3EgYW5kIGNpcGhlcl90aHJlYWRzCi0rICogaXQgcmV0dXJucyB0aGUgdmFsdWUgb2Yg Y2lwaGVyX3RocmVhZHMgYnV0IGl0IGRvZXNuJ3QgbmVlZCB0byAqLwotK3N0YXRpYyBpbnQgZ2V0 X3RocmVhZF9jb3VudCgpIHsKLSsKLSsJY2hhciAqIGFlc190aHJlYWRzID0gZ2V0ZW52KCJTU0hf Q0lQSEVSX1RIUkVBRFMiKTsKLSsJZGVidWdfZiAoIlNTSCB0aHJlYWQgY291bnQgaXMgJXMiLCBh ZXNfdGhyZWFkcyk7Ci0rICAgICAgICBpZiAoYWVzX3RocmVhZHMgIT0gTlVMTCAmJiBzdHJsZW4o YWVzX3RocmVhZHMpICE9IDApCi0rCQljaXBoZXJfdGhyZWFkcyA9IGF0b2koYWVzX3RocmVhZHMp OwotKwllbHNlCi0rCQljaXBoZXJfdGhyZWFkcyA9IDE7Ci0rCi0rCWlmIChjaXBoZXJfdGhyZWFk cyA8IDEpCi0rIAkJY2lwaGVyX3RocmVhZHMgPSAxOwotKwotKwlpZiAoY2lwaGVyX3RocmVhZHMg PiBNQVhfVEhSRUFEUykKLSsJCWNpcGhlcl90aHJlYWRzID0gTUFYX1RIUkVBRFM7Ci0rCi0rCW51 bWtxID0gY2lwaGVyX3RocmVhZHMgKyAxOwotKwotKwlpZiAobnVta3EgPiBNQVhfTlVNS1EpCi0r CQludW1rcSA9IE1BWF9OVU1LUTsKLSsKLSsJZGVidWdfZiAoIlN0YXJ0aW5nICVkIHRocmVhZHMg YW5kICVkIHF1ZXVlc1xuIiwgY2lwaGVyX3RocmVhZHMsIG51bWtxKTsKLSsKLSsJcmV0dXJuIChj aXBoZXJfdGhyZWFkcyk7Ci0rfQotKwotKwotKy8qCi0rICogVGhlIGxpZmUgb2YgYSBwcmVnZW4g dGhyZWFkOgotKyAqICAgIEZpbmQgZW1wdHkga2V5c3RyZWFtIHF1ZXVlcyBhbmQgZmlsbCB0aGVt IHVzaW5nIHRoZWlyIGNvdW50ZXIuCi0rICogICAgV2hlbiBkb25lLCB1cGRhdGUgY291bnRlciBm b3IgdGhlIG5leHQgZmlsbC4KLSsgKi8KLStzdGF0aWMgdm9pZCAqCi0rdGhyZWFkX2xvb3Aodm9p ZCAqam9iKQotK3sKLSsJRVZQX0NJUEhFUl9DVFggKiB2b2xhdGlsZSBldnBfY3R4OwotKwlzdHJ1 Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0eCA9IGpvYjsKLSsJc3RydWN0IGtxICpxOwotKwlz dHJ1Y3QgYWVzX210X2N0eF9wdHJzICpwdHI7Ci0rCXB0aHJlYWRfdCBmaXJzdF90aWQ7Ci0rCWlu dCBvdXRsZW47Ci0rCXVfY2hhciBteW51bGxbS1FMRU4gKiBBRVNfQkxPQ0tfU0laRV07Ci0rCW1l bXNldCgmbXludWxsLCAwLCBLUUxFTiAqIEFFU19CTE9DS19TSVpFKTsKLSsKLSsJLyogZ2V0IHRo ZSB0aHJlYWQgaWQgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG9uZSAqLwotKwlwdGhyZWFk X3J3bG9ja19yZGxvY2soJmFlc19tdF9jdHgtPnRpZF9sb2NrKTsKLSsJZmlyc3RfdGlkID0gYWVz X210X2N0eC0+dGlkWzBdOwotKwlwdGhyZWFkX3J3bG9ja191bmxvY2soJmFlc19tdF9jdHgtPnRp ZF9sb2NrKTsKLSsKLSsJLyogY3JlYXRlIHRoZSBjb250ZXh0IGZvciB0aGlzIHRocmVhZCAqLwot KwlldnBfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7Ci0rCi0rCS8qIGtlZXAgdHJhY2sgb2Yg dGhlIHBvaW50ZXIgZm9yIHRoZSBldnAgaW4gdGhpcyBzdHJ1Y3QKLSsJICogc28gd2UgY2FuIGZy ZWUgaXQgbGF0ZXIuIFNvIHdlIHBsYWNlIGl0IGluIGEgaGFzaCBpbmRleGVkIG9uIHRoZQotKwkg KiB0aHJlYWQgaWQsIHdoaWNoIGlzIGF2YWlsYWJsZSB0byB1cyBpbiB0aGUgZnJlZSBmdW5jdGlv bi4KLSsJICogTm90ZSwgdGhlIHRocmVhZCBpZCBpc24ndCBuZWNlc3NhcnkgdW5pcXVlIGFjcm9z cyByZWtleXMgYnV0Ci0rCSAqIHRoYXQncyBva2F5IGFzIHRoZXkgYXJlIHVuaXF1ZSBkdXJpbmcg YSBrZXkuICovCi0rCXB0ciA9IG1hbGxvYyhzaXplb2YgKnB0cik7IC8qZnJlZWQgaW4gc3RvcCAm IHByZWpvaW4gKi8KLSsJcHRyLT50aWQgPSBwdGhyZWFkX3NlbGYoKTsgLyogaW5kZXggZm9yIGhh c2ggKi8KLSsJcHRyLT5wb2ludGVyID0gZXZwX2N0eDsKLSsJSEFTSF9BRERfSU5UKGV2cF9wdHJz LCB0aWQsIHB0cik7Ci0rCi0rCS8qIGluaXRpYWxpemUgdGhlIGNpcGhlciBjdHggd2l0aCB0aGUg a2V5IHByb3ZpZGVkCi0rCSAqIGRldGVybWluYmUgd2hpY2ggY2lwaGVyIHRvIHVzZSBiYXNlZCBv biB0aGUga2V5IHNpemUgKi8KLSsJaWYgKGFlc19tdF9jdHgtPmtleWxlbiA9PSAyNTYpCi0rCQlF VlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0eCwgRVZQX2Flc18yNTZfY3RyKCksIE5VTEwsIGFlc19t dF9jdHgtPm9yaWdfa2V5LCBOVUxMKTsKLSsJZWxzZSBpZiAoYWVzX210X2N0eC0+a2V5bGVuID09 IDEyOCkKLSsJCUVWUF9FbmNyeXB0SW5pdF9leChldnBfY3R4LCBFVlBfYWVzXzEyOF9jdHIoKSwg TlVMTCwgYWVzX210X2N0eC0+b3JpZ19rZXksIE5VTEwpOwotKwllbHNlIGlmIChhZXNfbXRfY3R4 LT5rZXlsZW4gPT0gMTkyKQotKwkJRVZQX0VuY3J5cHRJbml0X2V4KGV2cF9jdHgsIEVWUF9hZXNf MTkyX2N0cigpLCBOVUxMLCBhZXNfbXRfY3R4LT5vcmlnX2tleSwgTlVMTCk7Ci0rCWVsc2UKLSsJ CWZhdGFsKCJJbnZhbGlkIGtleSBsZW5ndGggb2YgJWQgaW4gQUVTIENUUiBNVC4gRXhpdGluZyIs IGFlc19tdF9jdHgtPmtleWxlbik7Ci0rCi0rCS8qCi0rCSAqIEhhbmRsZSB0aGUgc3BlY2lhbCBj YXNlIG9mIHN0YXJ0dXAsIG9uZSB0aHJlYWQgbXVzdCBmaWxsCi0rCSAqIHRoZSBmaXJzdCBLUSB0 aGVuIG1hcmsgaXQgYXMgZHJhaW5pbmcuIExvY2sgaGVsZCB0aHJvdWdob3V0LgotKwkgKi8KLSsJ aWYgKHB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksIGZpcnN0X3RpZCkpIHsKLSsJCS8qIGdl dCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUga2V5IHF1ZXVlIHN0cnVjdCAqLwotKwkJcSA9ICZh ZXNfbXRfY3R4LT5xWzBdOwotKwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsKLSsJCS8q IGlmIHdlIGFyZSBpbiB0aGUgSU5JVCBzdGF0ZSB0aGVuIGZpbGwgdGhlIHF1ZXVlICovCi0rCQlp ZiAocS0+cXN0YXRlID09IEtRSU5JVCkgewotKwkJCS8qIHNldCB0aGUgaW5pdGlhbCBjb3VudGVy ICovCi0rCQkJRVZQX0VuY3J5cHRJbml0X2V4KGV2cF9jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIHEt PmN0cik7Ci0rCQkJLyogZW5jeXBoZXIgYSBibG9jayBzaXplZCBudWxsIHN0cmluZyAobXludWxs KSB3aXRoIHRoZSBrZXkuIFRoaXMKLSsJCQkgKiByZXR1cm5zIHRoZSBrZXlzdHJlYW0gYmVjYXVz ZSB4b3JpbmcgdGhlIGtleXN0cmVhbQotKwkJCSAqIGFnYWluc3QgbnVsbCByZXR1cm5zIHRoZSBr ZXlzdHJlYW0uIFN0b3JlIHRoYXQgaW4gdGhlIGFwcHJvcHJpYXRlIHF1ZXVlICovCi0rCQkJRVZQ X0VuY3J5cHRVcGRhdGUoZXZwX2N0eCwgcS0+a2V5c1swXSwgJm91dGxlbiwgbXludWxsLCBLUUxF TiAqIEFFU19CTE9DS19TSVpFKTsKLSsJCQkvKiBVcGRhdGUgdGhlIGFlcyBjb3VudGVyICovCi0r CQkJc3NoX2N0cl9hZGQocS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBBRVNfQkxPQ0tfU0laRSk7Ci0r CQkJLyogc2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgdGhyZWFkIHNldCBpdCB0byBkcmFpbmluZyAq LwotKwkJCXEtPnFzdGF0ZSA9IEtRRFJBSU5JTkc7Ci0rCQkJcHRocmVhZF9jb25kX2Jyb2FkY2Fz dCgmcS0+Y29uZCk7Ci0rCQl9Ci0rCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7Ci0r CX0KLSsKLSsJLyoKLSsJICogTm9ybWFsIGNhc2UgaXMgdG8gZmluZCBlbXB0eSBxdWV1ZXMgYW5k IGZpbGwgdGhlbSwgc2tpcHBpbmcgb3ZlcgotKwkgKiBxdWV1ZXMgYWxyZWFkeSBmaWxsZWQgYnkg b3RoZXIgdGhyZWFkcyBhbmQgc3RvcHBpbmcgdG8gd2FpdCBmb3IKLSsJICogYSBkcmFpbmluZyBx dWV1ZSB0byBiZWNvbWUgZW1wdHkuCi0rCSAqCi0rCSAqIE11bHRpcGxlIHRocmVhZHMgbWF5IGJl IHdhaXRpbmcgb24gYSBkcmFpbmluZyBxdWV1ZSBhbmQgYXdva2VuCi0rCSAqIHdoZW4gZW1wdHku IFRoZSBmaXJzdCB0aHJlYWQgdG8gd2FrZSB3aWxsIG1hcmsgaXQgYXMgZmlsbGluZywKLSsJICog b3RoZXJzIHdpbGwgbW92ZSBvbiB0byBmaWxsLCBza2lwLCBvciB3YWl0IG9uIHRoZSBuZXh0IHF1 ZXVlLgotKwkgKiBXZSBpbml0IHFpZHggaGVyZSBiZWNhdXNlIGlmIHdlIGRvIGl0IGF0IHRoZSB0 b3Agb2YgdGhlIGZ1bmN0aW9uCi0rCSAqIHdlIGdldCBhIHdhcm5pbmcgYWJvdXQgaXQgcG9zc2li bHkgYmVpbmcgY2xvYmJlcmVkLiBUaGUgZXhhY3QgcmVhc29uCi0rCSAqIGRvZXNuJ3QgbWFrZSBh IGxvdCBvZiBzZW5zZSBidXQgaXQgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKLSsJICogZmlyc3Qg cHRocmVhZF9yd2xvY2tfcmRsb2NrKCkuIE1pZ2h0IGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGgK LSsJICogaW5jb3JyZWN0IGNvbXBpbGVyIG9wdGltaXphdGlvbnMuCi0rCSAqLwotKwlpbnQgcWlk eDsKLSsJZm9yIChxaWR4ID0gMTs7IHFpZHggPSAocWlkeCArIDEpICUgbnVta3EpIHsKLSsJCS8q IENoZWNrIGlmIEkgd2FzIGNhbmNlbGxlZCwgYWxzbyBjaGVja2VkIGluIGNvbmRfd2FpdCAqLwot KwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7Ci0rCi0rCQkvKiBDaGVjayBpZiB3ZSBzaG91bGQgZXhp dCBhcyB3ZWxsICovCi0rCQl0aHJlYWRfbG9vcF9jaGVja19leGl0KGFlc19tdF9jdHgpOwotKwot KwkJLyogTG9jayBxdWV1ZSBhbmQgYmxvY2sgaWYgaXRzIGRyYWluaW5nICovCi0rCQlxID0gJmFl c19tdF9jdHgtPnFbcWlkeF07Ci0rCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2spOwotKwkJ cHRocmVhZF9jbGVhbnVwX3B1c2godGhyZWFkX2xvb3BfY2xlYW51cCwgJnEtPmxvY2spOwotKwkJ d2hpbGUgKHEtPnFzdGF0ZSA9PSBLUURSQUlOSU5HIHx8IHEtPnFzdGF0ZSA9PSBLUUlOSVQpIHsK LSsJCQl0aHJlYWRfbG9vcF9jaGVja19leGl0KGFlc19tdF9jdHgpOwotKwkJCXB0aHJlYWRfY29u ZF93YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7Ci0rCQl9Ci0rCQlwdGhyZWFkX2NsZWFudXBfcG9w KDApOwotKwotKwkJLyogSWYgZmlsbGluZyBvciBmdWxsLCBzb21lYm9keSBlbHNlIGdvdCBpdCwg c2tpcCAqLwotKwkJaWYgKHEtPnFzdGF0ZSAhPSBLUUVNUFRZKSB7Ci0rCQkJcHRocmVhZF9tdXRl eF91bmxvY2soJnEtPmxvY2spOwotKwkJCWNvbnRpbnVlOwotKwkJfQotKwotKwkJLyoKLSsJCSAq IEVtcHR5LCBsZXQncyBmaWxsIGl0LgotKwkJICogUXVldWUgbG9jayBpcyByZWxpbnF1aXNoZWQg d2hpbGUgd2UgZG8gdGhpcyBzbyBvdGhlcnMKLSsJCSAqIGNhbiBzZWUgdGhhdCBpdCdzIGJlaW5n IGZpbGxlZC4KLSsJCSAqLwotKwkJcS0+cXN0YXRlID0gS1FGSUxMSU5HOwotKwkJcHRocmVhZF9j b25kX2Jyb2FkY2FzdCgmcS0+Y29uZCk7Ci0rCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9j ayk7Ci0rCi0rCQkvKiBzZXQgdGhlIGluaXRpYWwgY291bnRlciAqLwotKwkJRVZQX0VuY3J5cHRJ bml0X2V4KGV2cF9jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIHEtPmN0cik7Ci0rCi0rCQkvKiBzZWUg Y29yZXNwb25kaW5nIGJsb2NrIGFib3ZlIGZvciB1c2VmdWwgY29tbWVudHMgKi8KLSsJCUVWUF9F bmNyeXB0VXBkYXRlKGV2cF9jdHgsIHEtPmtleXNbMF0sICZvdXRsZW4sIG15bnVsbCwgS1FMRU4g KiBBRVNfQkxPQ0tfU0laRSk7Ci0rCi0rCQkvKiBSZS1sb2NrLCBtYXJrIGZ1bGwgYW5kIHNpZ25h bCBjb25zdW1lciAqLwotKwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsKLSsJCXNzaF9j dHJfYWRkKHEtPmN0ciwgS1FMRU4gKiBudW1rcSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJcS0+cXN0 YXRlID0gS1FGVUxMOwotKwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29uZCk7Ci0rCQlw dGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7Ci0rCX0KLSsKLSsJcmV0dXJuIE5VTEw7Ci0r fQotKwotKwotKy8qIE91ciB2ZXJzaW9uIG9mIHRoZSBFVlAgZnVuY3Rpb25zCi0rICogdGhlc2Ug YXJlIHB1YmxpYyBhcyB0aGV5IGFyZSB1c2VkIGJ5IHRoZSBwcm92aWRlciAqLwotKwotKy8qIGlu c3RhbnRpYXRlIHRoZSBjaXBoZXIgY29udGV4dC4KLSsgKiBpbiB0aGlzIHdlIGNyZWF0ZSB0aGUg RVZQIGN0eCBhbmQgdGhlIEFFUyBjdHgsIHNldHVwIHRoZSBBRVMgY3R4Ci0rICogaW5pdGlhbGl6 ZSB0aGUgRVZQIGFuZCB0aGVuIGF0dGFjaCB0aGUgQUVTIGN0eCB0byB0aGUgRVZQIGN0eC4KLSsg KiBUaGUgKm9ubHkqIGRpZmZlcmVuY2UgYmV0d2VlbiBhZXNfbXRfbmV3Y3R4XzI1NnwxOTJ8MTI4 IGlzIHRoZQotKyAqIGtleWxlbmd0aCBvZiB0aGUgY2lwaGVyIHVzZWQgaW4gRVZQX0NpcGhlcklu aXQKLSsgKiBwYXJhbWV0ZXJzOiBwcm92aWRlciBjb250ZXh0Ci0rICogcmV0dXJuczogRVZQIGNv bnRleHQKLSsgKi8KLSsvKiBob25lc3RseSB0aGUgd2F5IHRoaXMgd29ya3MgbWFrZXMgbWUgdGhp bmsgdGhhdCB0aGVyZSBoYXMgdG8gYmUKLSsgKiBhIGJldHRlciB3YXkgb2YgZG9pbmcgdGhpcyBo b3dldmVyLCBJJ3ZlIHlldCB0byBmaW5kIG9uZSB0aGF0IGRvZXNuJ3QKLSsgKiBpbnZvbHZlIG1v cmUgbWFkbmVzcy4gSSB0aGluayB0aGF0J3MgbW9zdGx5IGJlY2FzZSBJIGRvbid0IHVuZGVyc3Rh bmQKLSsgKiBob3cgcGFyYW1zIHdvcmsgcHJvcGVybHkuIEkgZmVlbCBsaWtlIEkgc2hvdWRsIGJl IGFibGUgdG8gdXNlIHRoZW0KLSsgKiB0byBzcGVjaWZ5IHRoZSBrZXkgbGVuZ3RoIGJ1dC4uLiBh bHNvLCBJJ2QgdGhpbmsgSSdkIGJlIGFibGUgdG8KLSsgKiBzZXQgYWVzX210X2N0eF9zdC0+a2V5 bGVuIHRvIHRoZSBrZXlsZW5ndGggYnV0IHRoYXQgZG9lc24ndCBzZWVtIHRvCi0rICogd29yayBl aXRoZXIuIFRoYXQgc2FpZCwgdGhpcyBkb2VzIHdvcmsgZXZlbiBpZiBpdCdzIGEgYml0IGNsdW5r eS4KLSsgKiAtY2pyIDA5LzA4LzIwMjIgKi8KLSt2b2lkICphZXNfbXRfbmV3Y3R4XzI1Nih2b2lk ICpwcm92Y3R4KQotK3sKLSsJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHggPSBtYWxs b2Moc2l6ZW9mKCphZXNfbXRfY3R4KSk7Ci0rCUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gRVZQ X0NJUEhFUl9DVFhfbmV3KCk7Ci0rCi0rCWlmICgoYWVzX210X2N0eCAhPSBOVUxMKSAmJiAoZXZw X2N0eCAhPSBOVUxMKSkgewotKwkJZ2V0X3RocmVhZF9jb3VudCgpOyAvKiB1cGRhdGUgY2lwaGVy X3RocmVhZHMgYW5kIG51bWtxICovCi0rCQlwdGhyZWFkX3J3bG9ja19pbml0KCZhZXNfbXRfY3R4 LT50aWRfbG9jaywgTlVMTCk7Ci0rI2lmZGVmIF9fQVBQTEVfXwotKwkJcHRocmVhZF9yd2xvY2tf aW5pdCgmYWVzX210X2N0eC0+c3RvcF9sb2NrLCBOVUxMKTsKLSsJCWFlc19tdF9jdHgtPmV4aXRf ZmxhZyA9IEZBTFNFOwotKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KLSsKLSsJCWFlc19tdF9jdHgt PnN0YXRlID0gSEFWRV9OT05FOwotKwotKwkJLyogaW5pdGlhbGl6ZSB0aGUgbXV0ZXhzIGFuZCBj b25kaXRpb25zIGZvciBlYWNoIGxvY2sgaW4gb3VyIHN0cnVjdCAqLwotKwkJZm9yIChpbnQgaSA9 IDA7IGkgPCBudW1rcTsgaSsrKSB7Ci0rCQkJcHRocmVhZF9tdXRleF9pbml0KCZhZXNfbXRfY3R4 LT5xW2ldLmxvY2ssIE5VTEwpOwotKwkJCXB0aHJlYWRfY29uZF9pbml0KCZhZXNfbXRfY3R4LT5x W2ldLmNvbmQsIE5VTEwpOwotKwkJfQotKwkJYWVzX210X2N0eC0+cHJvdmN0eCA9IHByb3ZjdHg7 Ci0rCQlFVlBfQ2lwaGVySW5pdChldnBfY3R4LCBFVlBfYWVzXzI1Nl9jdHIoKSwgTlVMTCwgTlVM TCwgMCk7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGEoZXZwX2N0eCwgYWVzX210X2N0 eCk7Ci0rCQlyZXR1cm4gZXZwX2N0eDsKLSsJfQotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0rdm9p ZCAqYWVzX210X25ld2N0eF8xOTIodm9pZCAqcHJvdmN0eCkKLSt7Ci0rCXN0cnVjdCBhZXNfbXRf Y3R4X3N0ICphZXNfbXRfY3R4ID0gbWFsbG9jKHNpemVvZigqYWVzX210X2N0eCkpOwotKwlFVlBf Q0lQSEVSX0NUWCAqZXZwX2N0eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOwotKwotKwlpZiAoKGFl c19tdF9jdHggIT0gTlVMTCkgJiYgKGV2cF9jdHggIT0gTlVMTCkpIHsKLSsJCWdldF90aHJlYWRf Y291bnQoKTsgLyogdXBkYXRlIGNpcGhlcl90aHJlYWRzIGFuZCBudW1rcSAqLwotKwkJcHRocmVh ZF9yd2xvY2tfaW5pdCgmYWVzX210X2N0eC0+dGlkX2xvY2ssIE5VTEwpOwotKyNpZmRlZiBfX0FQ UExFX18KLSsJCXB0aHJlYWRfcndsb2NrX2luaXQoJmFlc19tdF9jdHgtPnN0b3BfbG9jaywgTlVM TCk7Ci0rCQlhZXNfbXRfY3R4LT5leGl0X2ZsYWcgPSBGQUxTRTsKLSsjZW5kaWYgLyogX19BUFBM RV9fICovCi0rCi0rCQlhZXNfbXRfY3R4LT5zdGF0ZSA9IEhBVkVfTk9ORTsKLSsKLSsJCS8qIGlu aXRpYWxpemUgdGhlIG11dGV4cyBhbmQgY29uZGl0aW9ucyBmb3IgZWFjaCBsb2NrIGluIG91ciBz dHJ1Y3QgKi8KLSsJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVta3E7IGkrKykgewotKwkJCXB0aHJl YWRfbXV0ZXhfaW5pdCgmYWVzX210X2N0eC0+cVtpXS5sb2NrLCBOVUxMKTsKLSsJCQlwdGhyZWFk X2NvbmRfaW5pdCgmYWVzX210X2N0eC0+cVtpXS5jb25kLCBOVUxMKTsKLSsJCX0KLSsJCWFlc19t dF9jdHgtPnByb3ZjdHggPSBwcm92Y3R4OwotKwkJRVZQX0NpcGhlckluaXQoZXZwX2N0eCwgRVZQ X2Flc18xOTJfY3RyKCksIE5VTEwsIE5VTEwsIDApOwotKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2Fw cF9kYXRhKGV2cF9jdHgsIGFlc19tdF9jdHgpOwotKwkJcmV0dXJuIGV2cF9jdHg7Ci0rCX0KLSsJ cmV0dXJuIE5VTEw7Ci0rfQotKwotK3ZvaWQgKmFlc19tdF9uZXdjdHhfMTI4KHZvaWQgKnByb3Zj dHgpCi0rewotKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0eCA9IG1hbGxvYyhzaXpl b2YoKmFlc19tdF9jdHgpKTsKLSsJRVZQX0NJUEhFUl9DVFggKmV2cF9jdHggPSBFVlBfQ0lQSEVS X0NUWF9uZXcoKTsKLSsKLSsJaWYgKChhZXNfbXRfY3R4ICE9IE5VTEwpICYmIChldnBfY3R4ICE9 IE5VTEwpKSB7Ci0rCQlnZXRfdGhyZWFkX2NvdW50KCk7IC8qIHVwZGF0ZSBjaXBoZXJfdGhyZWFk cyBhbmQgbnVta3EgKi8KLSsJCXB0aHJlYWRfcndsb2NrX2luaXQoJmFlc19tdF9jdHgtPnRpZF9s b2NrLCBOVUxMKTsKLSsjaWZkZWYgX19BUFBMRV9fCi0rCQlwdGhyZWFkX3J3bG9ja19pbml0KCZh ZXNfbXRfY3R4LT5zdG9wX2xvY2ssIE5VTEwpOwotKwkJYWVzX210X2N0eC0+ZXhpdF9mbGFnID0g RkFMU0U7Ci0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKwkJYWVzX210X2N0eC0+c3RhdGUg PSBIQVZFX05PTkU7Ci0rCi0rCQkvKiBpbml0aWFsaXplIHRoZSBtdXRleHMgYW5kIGNvbmRpdGlv bnMgZm9yIGVhY2ggbG9jayBpbiBvdXIgc3RydWN0ICovCi0rCQlmb3IgKGludCBpID0gMDsgaSA8 IG51bWtxOyBpKyspIHsKLSsJCQlwdGhyZWFkX211dGV4X2luaXQoJmFlc19tdF9jdHgtPnFbaV0u bG9jaywgTlVMTCk7Ci0rCQkJcHRocmVhZF9jb25kX2luaXQoJmFlc19tdF9jdHgtPnFbaV0uY29u ZCwgTlVMTCk7Ci0rCQl9Ci0rCQlhZXNfbXRfY3R4LT5wcm92Y3R4ID0gcHJvdmN0eDsKLSsJCUVW UF9DaXBoZXJJbml0KGV2cF9jdHgsIEVWUF9hZXNfMTI4X2N0cigpLCBOVUxMLCBOVUxMLCAwKTsK LSsJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YShldnBfY3R4LCBhZXNfbXRfY3R4KTsKLSsJ CXJldHVybiBldnBfY3R4OwotKwl9Ci0rCXJldHVybiBOVUxMOwotK30KLSsKLSsvKiB0aGlzIGZ1 bmN0aW9uIGV4cGVjdHMgYSB2b2lkIGJ1dCB3ZSBuZWVkIHRoZSBhY3R1YWwgY29udGV4dAotKyAq IHRvIGdldCB0aGUgYXBwX2RhdGEuCi0rICovCi0rdm9pZCBhZXNfbXRfZnJlZWN0eCh2b2lkICp2 ZXZwX2N0eCkKLSt7Ci0rCUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gdmV2cF9jdHg7Ci0rCXN0 cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4OwotKwotKwlpZiAoKGFlc19tdF9jdHggPSBF VlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEoZXZwX2N0eCkpICE9IE5VTEwpIHsKLSsJCXN0b3Bf YW5kX2pvaW5fcHJlZ2VuX3RocmVhZHMoYWVzX210X2N0eCk7Ci0rCi0rCQltZW1zZXQoYWVzX210 X2N0eCwgMCwgc2l6ZW9mKCphZXNfbXRfY3R4KSk7Ci0rCQlmcmVlKGFlc19tdF9jdHgpOwotKwkJ RVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGV2cF9jdHgsIE5VTEwpOwotKwl9Ci0rCUVWUF9D SVBIRVJfQ1RYX2ZyZWUoZXZwX2N0eCk7Ci0rfQotKwotKy8qIHRoaXMgZnVuY3Rpb24gdGFrZXMg dGhlIEVWUCBjb250ZXh0LCBnZXRzIHRoZSBBRVMgY29udGV4dAotKyAqIGFuZCBzdGFydHMgdGhl IHZhcmlvdXMgdGhyZWFkcyB3ZSBuZWVkICovCi0raW50IGFlc19tdF9zdGFydF90aHJlYWRzKHZv aWQgKnZldnBfY3R4LCBjb25zdCB1X2NoYXIgKmtleSwKLSsJCQkgc2l6ZV90IGtleWxlbiwgY29u c3QgdV9jaGFyICppdiwKLSsJCQkgc2l6ZV90IGl2bGVuLCBjb25zdCBPU1NMX1BBUkFNICpvc3Ns X3BhcmFtcykKLSt7Ci0rCUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gdmV2cF9jdHg7Ci0rCXN0 cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4OwotKwotKwotKwkvKiBnZXQgdGhlIGluaXRp YWwgc3RhdGUgb2YgYWVzX210X2N0eCAob3VyIGNpcGhlciBzdHJlYW0gc3RydWN0KSAqLwotKyAJ aWYgKChhZXNfbXRfY3R4ID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGV2cF9jdHgpKSA9 PSBOVUxMKSB7Ci0rCQlmYXRhbCgiTWlzc2luZyBBRVMgTVQgY29udGV4dCBkYXRhISIpOwotKwl9 Ci0rCi0rCS8qIHdlIGFyZSBpbml0aWFsaXppbmcgYnV0IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBh bHJlYWR5Ci0rCSAqIGhhcyBhbiBJViBhbmQga2V5IHNvIHdlIHdhbnQgdG8ga2lsbCB0aGUgZXhp c3Rpbmcga2V5IGRhdGEKLSsJICogYW5kIHN0YXJ0IG92ZXIuIFRoaXMgaXMgaW1wb3J0YW50IHdo ZW4gd2UgbmVlZCB0byByZWtleSB0aGUgZGF0YSBzdHJlYW0gKi8KLSsJaWYgKGFlc19tdF9jdHgt PnN0YXRlID09IChIQVZFX0tFWSB8IEhBVkVfSVYpKSB7Ci0rCQkvKiB0ZWxsIHRoZSBwcmVnZW4g dGhyZWFkcyB0byBleGl0ICovCi0rCQlzdG9wX2FuZF9qb2luX3ByZWdlbl90aHJlYWRzKGFlc19t dF9jdHgpOwotKwotKyNpZmRlZiBfX0FQUExFX18KLSsJCS8qIHJlc2V0IHRoZSBleGl0IGZsYWcg Ki8KLSsJCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IEZBTFNFOwotKyNlbmRpZiAvKiBfX0FQUExF X18gKi8KLSsKLSsJCS8qIFN0YXJ0IG92ZXIgZ2V0dGluZyBrZXkgJiBpdiAqLwotKwkJYWVzX210 X2N0eC0+c3RhdGUgPSBIQVZFX05PTkU7Ci0rCX0KLSsKLSsJLyogc2V0IHRoZSBpbml0aWFsIGtl eSBmb3IgdGhpcyBrZXkgc3RyZWFtIHF1ZXVlICovCi0rCWlmIChrZXkgIT0gTlVMTCkgewotKwkJ YWVzX210X2N0eC0+a2V5bGVuID0gRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChldnBfY3R4KSAq IDg7Ci0rCQlhZXNfbXRfY3R4LT5vcmlnX2tleSA9IGtleTsKLSsJCWFlc19tdF9jdHgtPnN0YXRl IHw9IEhBVkVfS0VZOwotKwl9Ci0rCi0rCS8qIHNldCB0aGUgSVYgKi8KLSsJaWYgKGl2ICE9IE5V TEwpIHsKLSsJCS8qIGluaXQgdGhlIGNvdW50ZXIgdGhpcyBpcyBqdXN0IGEgMTZieXRlIHVjaGFy ICovCi0rCQltZW1jcHkoYWVzX210X2N0eC0+YWVzX2NvdW50ZXIsIGl2LCBBRVNfQkxPQ0tfU0la RSk7Ci0rCQlhZXNfbXRfY3R4LT5zdGF0ZSB8PSBIQVZFX0lWOwotKwl9Ci0rCi0rCWlmIChhZXNf bXRfY3R4LT5zdGF0ZSA9PSAoSEFWRV9LRVkgfCBIQVZFX0lWKSkgewotKwkJLyogQ2xlYXIgcXVl dWVzICovCi0rCQkvKiBzZXQgdGhlIGZpcnN0IGtleSBpbiB0aGUga2V5IHF1ZXVlIHRvIHRoZSBj dXJyZW50IGNvdW50ZXIgKi8KLSsJCW1lbWNweShhZXNfbXRfY3R4LT5xWzBdLmN0ciwgYWVzX210 X2N0eC0+YWVzX2NvdW50ZXIsIEFFU19CTE9DS19TSVpFKTsKLSsJCS8qIGluZGljYXRlIHRoYXQg aXQgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgKi8KLSsJCWFlc19tdF9jdHgtPnFbMF0ucXN0YXRl ID0gS1FJTklUOwotKwkJLyogZm9yIGVhY2ggb2YgdGhlIHJlbWFpbmluZyBxdWV1ZXMgc2V0IHRo ZSBmaXJzdCBjb3VudGVyIHRvIHRoZQotKwkJICogY291bnRlciBhbmQgdGhlbiBhZGQgdGhlIHNp emUgb2YgdGhlIHF1ZXVlIHRvIHRoZSBjb3VudGVyICovCi0rCQlmb3IgKGludCBpID0gMTsgaSA8 IG51bWtxOyBpKyspIHsKLSsJCQltZW1jcHkoYWVzX210X2N0eC0+cVtpXS5jdHIsIGFlc19tdF9j dHgtPmFlc19jb3VudGVyLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQkJc3NoX2N0cl9hZGQoYWVzX210 X2N0eC0+cVtpXS5jdHIsIGkgKiBLUUxFTiwgQUVTX0JMT0NLX1NJWkUpOwotKwkJCWFlc19tdF9j dHgtPnFbaV0ucXN0YXRlID0gS1FFTVBUWTsKLSsJCX0KLSsJCWFlc19tdF9jdHgtPnFpZHggPSAw OwotKwkJYWVzX210X2N0eC0+cmlkeCA9IDA7Ci0rCQlhZXNfbXRfY3R4LT5zdHJ1Y3RfaWQgPSBn bG9iYWxfc3RydWN0X2lkKys7Ci0rCi0rCQkvKiBTdGFydCB0aHJlYWRzLiBNYWtlIHN1cmUgd2Ug aGF2ZSBlbm91Z2ggc3RhY2sgc3BhY2UgKHVuZGVyIGFscGluZSkKLSsJCSogYW5kIGFyZW4ndCB1 c2luZyBtb3JlIHRoYW4gd2UgbmVlZCAobGludXgpLiBUaGlzIGNhbiBiZSBhcyBsb3cgYXMKLSsJ CSogNTEyS0IgYnV0IHRoYXQncyBhIG1pbmltdW0uIDEwMjRLQiBnaXZlcyB1cyBhIGxpdHRsZSBo ZWFkcm9vbSBpZiB3ZQotKwkJKiBuZWVkIGl0ICovCi0rI2RlZmluZSBTVEFDS19TSVpFICgxMDI0 ICogMTAyNCkKLSsgICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKLSsgICAgICAg ICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotKyAgICAgICAgICAgICAgICBwdGhy ZWFkX2F0dHJfc2V0c3RhY2tzaXplKCZhdHRyLCBTVEFDS19TSVpFKTsKLSsJCWZvciAoaW50IGkg PSAwOyBpIDwgY2lwaGVyX3RocmVhZHM7IGkrKykgewotKwkJCXB0aHJlYWRfcndsb2NrX3dybG9j aygmYWVzX210X2N0eC0+dGlkX2xvY2spOwotKwkJCWlmIChwdGhyZWFkX2NyZWF0ZSgmYWVzX210 X2N0eC0+dGlkW2ldLCAmYXR0ciwgdGhyZWFkX2xvb3AsIGFlc19tdF9jdHgpICE9IDApCi0rCQkJ CWZhdGFsICgiQUVTLUNUUiBNVCBDb3VsZCBub3QgY3JlYXRlIHRocmVhZCBpbiAlcyIsIF9fZnVu Y19fKTsKLSsJCQllbHNlIHsKLSsJCQkJYWVzX210X2N0eC0+aWRbaV0gPSBpOwotKwkJCQlkZWJ1 Z19mICgiQUVTLUNUUiBNVCBzcGF3bmVkIGEgdGhyZWFkIHdpdGggaWQgJWx1ICglbHUsICVkKSIs Ci0rCQkJCQkgYWVzX210X2N0eC0+dGlkW2ldLCBhZXNfbXRfY3R4LT5zdHJ1Y3RfaWQsCi0rCQkJ CQkgYWVzX210X2N0eC0+aWRbaV0pOwotKwkJCX0KLSsJCQlwdGhyZWFkX3J3bG9ja191bmxvY2so JmFlc19tdF9jdHgtPnRpZF9sb2NrKTsKLSsJCX0KLSsJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYWVz X210X2N0eC0+cVswXS5sb2NrKTsKLSsJCS8vIHdhaXQgZm9yIGFsbCBvZiB0aGUgdGhyZWFkcyB0 byBiZSBpbml0aWFsaXplZAotKwkJd2hpbGUgKGFlc19tdF9jdHgtPnFbMF0ucXN0YXRlID09IEtR SU5JVCkKLSsJCQlwdGhyZWFkX2NvbmRfd2FpdCgmYWVzX210X2N0eC0+cVswXS5jb25kLCAmYWVz X210X2N0eC0+cVswXS5sb2NrKTsKLSsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhZXNfbXRfY3R4 LT5xWzBdLmxvY2spOwotKwl9Ci0rCXJldHVybiAxOwotK30KLSsKLSsvKiB0aGlzIHNob3VsZCBj b3JyZXNwb25kIHRvIHNzaF9hZXNfY3RyCi0rICogT1NTTF9DT1JFX01BS0VfRlVOQyhpbnQsIGNp cGhlcl9jaXBoZXIsCi0rICogICAgICAgICAgICAgICAgICAgICAodm9pZCAqY2N0eCwKLSsgKiAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsLCBzaXpl X3Qgb3V0c2l6ZSwKLSsgKiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmluLCBzaXplX3QgaW5sKSkKLSsgKi8KLSsKLStpbnQgYWVzX210X2RvX2NpcGhlcih2b2lkICp2 ZXZwX2N0eCwKLSsJCQkgICAgdV9jaGFyICpkZXN0LCBzaXplX3QgKmRlc3RsZW4sIHNpemVfdCBk ZXN0c2l6ZSwKLSsJCQkgICAgY29uc3QgdV9jaGFyICpzcmMsIHNpemVfdCBsZW4pCi0rewotKwl0 eXBlZGVmIHVuaW9uIHsKLSsjaWZkZWYgQ0lQSEVSX0lOVDEyOF9PSwotKwkJX191aW50MTI4X3Qg KnUxMjg7Ci0rI2VuZGlmCi0rCQl1aW50NjRfdCAqdTY0OwotKwkJdWludDMyX3QgKnUzMjsKLSsJ CXVpbnQ4X3QgKnU4OwotKwkJY29uc3QgdWludDhfdCAqY3U4OwotKwkJdWludHB0cl90IHU7Ci0r CX0gcHRyc190OwotKwlwdHJzX3QgZGVzdHAsIHNyY3AsIGJ1ZnA7Ci0rCXVpbnRwdHJfdCBhbGln bjsKLSsJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHg7Ci0rCXN0cnVjdCBrcSAqcSwg Km9sZHE7Ci0rCWludCByaWR4OwotKwl1X2NoYXIgKmJ1ZjsKLSsJRVZQX0NJUEhFUl9DVFggKmV2 cF9jdHggPSB2ZXZwX2N0eDsKLSsJdWludDY0X3Qgc3JjX2EsIGtleV9hOwotKwkKLSsJaWYgKGxl biA9PSAwKQotKwkJcmV0dXJuIDE7Ci0rCi0rCWlmICgoYWVzX210X2N0eCA9IEVWUF9DSVBIRVJf Q1RYX2dldF9hcHBfZGF0YShldnBfY3R4KSkgPT0gTlVMTCkKLSsJCXJldHVybiAwOwotKwotKwlx ID0gJmFlc19tdF9jdHgtPnFbYWVzX210X2N0eC0+cWlkeF07Ci0rCXJpZHggPSBhZXNfbXRfY3R4 LT5yaWR4OwotKwotKwkvKiBzcmMgYWxyZWFkeSBwYWRkZWQgdG8gYmxvY2sgbXVsdGlwbGUgKi8K LSsJc3JjcC5jdTggPSBzcmM7Ci0rCWRlc3RwLnU4ID0gZGVzdDsKLSsJZG8geyAvKiBkbyB1bnRp bCBsZW4gaXMgMCAqLwotKwkJYnVmID0gcS0+a2V5c1tyaWR4XTsKLSsJCWJ1ZnAudTggPSBidWY7 Ci0rCi0rCQkvKiBmaWd1cmUgb3V0IHRoZSBhbGlnbm1lbnQgb24gdGhlIGZseSAqLwotKyNpZmRl ZiBDSVBIRVJfVU5BTElHTkVEX09LCi0rCQlhbGlnbiA9IDA7Ci0rI2Vsc2UKLSsJCWFsaWduID0g ZGVzdHAudSB8IHNyY3AudSB8IGJ1ZnAudTsKLSsjZW5kaWYKLSsKLSsJCS8qIHhvciB0aGUgc3Jj IGFnYWluc3QgdGhlIGtleSAoYnVmKQotKwkJICogZGlmZmVyZW50IHN5c3RlbXMgY2FuIGRvIGFs bCAxNiBieXRlcyBhdCBvbmNlIG9yCi0rCQkgKiBtYXkgbmVlZCB0byBkbyBpdCBpbiA4IG9yIDQg Ynl0ZXMgY2h1bmtzCi0rCQkgKiB3b3JzdCBjYXNlIGlzIGRvaW5nIGl0IGFzIGEgbG9vcCAqLwot KyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCi0rCQkvKiB3aXRoIEdDQyAxMyB3ZSBoYXZlIGhhdmlu ZyBjb25zaXN0ZW50IHNlZyBmYXVsdHMKLSsJCSAqIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBT aW5jZSB0aGlzIGlzIGEgY3JpdGljYWwKLSsJCSAqIGNvZGUgcGF0aCB3ZSBhcmUgcmVtb3Zpbmcg dGhpcyB1bnRpbCB3ZSBoYXZlIGEgc29sdXRpb24KLSsJCSAqIGluIHBsYWNlIC1janIgMDIvMjIv MjQKLSsJCSAqIFRPRE86IEZJWCBUSElTCi0rCQkgKi8KLSsJCS8qIGlmICgoYWxpZ24gJiAweGYp ID09IDApIHsgKi8KLSsJCS8qIAlkZXN0cC51MTI4WzBdID0gc3JjcC51MTI4WzBdIF4gYnVmcC51 MTI4WzBdOyAqLwotKwkJLyogfSBlbHNlICovCi0rI2VuZGlmCi0rCQkvKiA2NCBiaXRzICovCi0r CQkvKiB0aGlzIGlzIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW91ciBpbiBzYW5pdGl6ZXJzCi0r CQkgKiB0aGlzIGlzIGFubm95aW5nIGJlY2F1c2UgaXQncyBtb3JlIGVmZmljaWVudAotKwkJICog YnV0IFVCIGlzIG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIHJldGFpbiAqLwotKwkJaWYgKChhbGln biAmIDB4NykgPT0gMCkgewotKwkJCS8qIHRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIHN0cmljdCBh bGlhc2luZyBVQgotKwkJCSAqIGFuZCB0aGUgcGVyZm9ybWFuY2UgZG9lc24ndCBzZWVtIHRvIGNo YW5nZSBtdWNoCi0rCQkJICogYnV0IHRoZSBtZW1jcHlzIGFyZSBraWxsaW5nIG1lIDMtNS0yNiBj anIqLwotKwkJCW1lbWNweSgmc3JjX2EsICZzcmNwLnU2NFswXSwgc2l6ZW9mKHVpbnQ2NF90KSk7 Ci0rCQkJbWVtY3B5KCZrZXlfYSwgJmJ1ZnAudTY0WzBdLCBzaXplb2YodWludDY0X3QpKTsKLSsJ CQlkZXN0cC51NjRbMF0gPSBzcmNfYSBeIGtleV9hOwotKwkJCW1lbWNweSgmc3JjX2EsICZzcmNw LnU2NFsxXSwgc2l6ZW9mKHVpbnQ2NF90KSk7Ci0rCQkJbWVtY3B5KCZrZXlfYSwgJmJ1ZnAudTY0 WzFdLCBzaXplb2YodWludDY0X3QpKTsKLSsJCQlkZXN0cC51NjRbMV0gPSBzcmNfYSBeIGtleV9h OwotKwkJCS8qIGRlc3RwLnU2NFswXSA9IHNyY3AudTY0WzBdIF4gYnVmcC51NjRbMF07ICovCi0r CQkJLyogZGVzdHAudTY0WzFdID0gc3JjcC51NjRbMV0gXiBidWZwLnU2NFsxXTsgKi8KLSsgICAg ICAgICAgICAgICAgLyogMzIgYml0cyAqLwotKwkJfSBlbHNlCi0rCQlpZiAoKGFsaWduICYgMHgz KSA9PSAwKSB7Ci0rCQkJZGVzdHAudTMyWzBdID0gc3JjcC51MzJbMF0gXiBidWZwLnUzMlswXTsK LSsJCQlkZXN0cC51MzJbMV0gPSBzcmNwLnUzMlsxXSBeIGJ1ZnAudTMyWzFdOwotKwkJCWRlc3Rw LnUzMlsyXSA9IHNyY3AudTMyWzJdIF4gYnVmcC51MzJbMl07Ci0rCQkJZGVzdHAudTMyWzNdID0g c3JjcC51MzJbM10gXiBidWZwLnUzMlszXTsKLSsJCX0gZWxzZSB7Ci0rCQkJLyoxIGJ5dGUgYXQg YSB0aW1lKi8KLSsJCQlzaXplX3QgaTsKLSsJCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJ WkU7ICsraSkKLSsJCQkJZGVzdFtpXSA9IHNyY1tpXSBeIGJ1ZltpXTsKLSsJCX0KLSsKLSsJCS8q IGluYy9kZWNyZW1lbnQgdGhlIHBvaW50ZXJzIGJ5IHRoZSBibG9jayBzaXplICgxNikqLwotKwkJ ZGVzdHAudSArPSBBRVNfQkxPQ0tfU0laRTsKLSsJCXNyY3AudSArPSBBRVNfQkxPQ0tfU0laRTsK LSsKLSsJCS8qIEluY3JlbWVudCByZWFkIGluZGV4LCBzd2l0Y2ggcXVldWVzIG9uIHJvbGxvdmVy ICovCi0rCQlpZiAoKHJpZHggPSAocmlkeCArIDEpICUgS1FMRU4pID09IDApIHsKLSsJCQlvbGRx ID0gcTsKLSsKLSsJCQkvKiBNYXJrIG5leHQgcXVldWUgZHJhaW5pbmcsIG1heSBuZWVkIHRvIHdh aXQgKi8KLSsJCQlhZXNfbXRfY3R4LT5xaWR4ID0gKGFlc19tdF9jdHgtPnFpZHggKyAxKSAlIG51 bWtxOwotKwkJCXEgPSAmYWVzX210X2N0eC0+cVthZXNfbXRfY3R4LT5xaWR4XTsKLSsJCQlwdGhy ZWFkX211dGV4X2xvY2soJnEtPmxvY2spOwotKwkJCXdoaWxlIChxLT5xc3RhdGUgIT0gS1FGVUxM KSB7Ci0rCQkJCXB0aHJlYWRfY29uZF93YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7Ci0rCQkJfQot KwkJCXEtPnFzdGF0ZSA9IEtRRFJBSU5JTkc7Ci0rCQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgm cS0+Y29uZCk7Ci0rCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOwotKwotKwkJCS8q IE1hcmsgY29uc3VtZWQgcXVldWUgZW1wdHkgYW5kIHNpZ25hbCBwcm9kdWNlcnMgKi8KLSsJCQlw dGhyZWFkX211dGV4X2xvY2soJm9sZHEtPmxvY2spOwotKwkJCW9sZHEtPnFzdGF0ZSA9IEtRRU1Q VFk7Ci0rCQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmb2xkcS0+Y29uZCk7Ci0rCQkJcHRocmVh ZF9tdXRleF91bmxvY2soJm9sZHEtPmxvY2spOwotKwkJfQotKwl9IHdoaWxlIChsZW4gLT0gQUVT X0JMT0NLX1NJWkUpOwotKwlhZXNfbXRfY3R4LT5yaWR4ID0gcmlkeDsKLSsJcmV0dXJuIDE7Ci0r fQotKwotKyNlbmRpZiAvKldJVEhfT1BFTlNTTDMqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuaCBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY3Ry LW10LWZ1bmN0aW9ucy5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY3RyLW10LWZ1 bmN0aW9ucy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz aC0xMC4zcDEvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuaAkyMDI2LTA3LTAyIDAwOjI3OjI5Ljcy MjAxMTQ5MiArMDIwMAotQEAgLTAsMCArMSwxNDIgQEAKLSsvKgotKyAqIE9wZW5TU0ggTXVsdGkt dGhyZWFkZWQgQUVTLUNUUiBDaXBoZXIgUHJvdmlkZXIgZm9yIE9wZW5TU0wgMwotKyAqCi0rICog QXV0aG9yOiBCZW5qYW1pbiBCZW5uZXR0IDxiZW5AcHNjLmVkdT4KLSsgKiBBdXRob3I6IE1pa2Ug VGFzb3RhIDx0YXNvdGFAZ21haWwuY29tPgotKyAqIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBp ZXJAcHNjLmVkdT4KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAyMiBQaXR0c2J1cmdoIFN1cGVy Y29tcHV0aW5nIENlbnRlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIEJhc2VkIG9u IG9yaWdpbmFsIE9wZW5TU0ggQUVTLUNUUiBjaXBoZXIuIFNtYWxsIHBvcnRpb25zIHJlbWFpbiB1 bmNoYW5nZWQsCi0rICogQ29weXJpZ2h0IChjKSAyMDAzIE1hcmt1cyBGcmllZGwgPG1hcmt1c0Bv cGVuYnNkLm9yZz4KLSsgKgotKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyAqIHB1cnBvc2Ugd2l0aCBvciB3 aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSsg KiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh bGwgY29waWVzLgotKyAqCi0rICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5E IFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0rICogV0lUSCBSRUdBUkQgVE8g VEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotKyAqIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC RSBMSUFCTEUgRk9SCi0rICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5H IEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotKyAqIEFD VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS SVNJTkcgT1VUIE9GCi0rICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsKLSsjaWZuZGVmIENUUl9NVF9GVU5DUwot KyNkZWZpbmUgQ1RSX01UX0ZVTkNTCi0rCi0rLyogaW5jbHVkZXMgKi8KLSsjaW5jbHVkZSAiaW5j bHVkZXMuaCIgLyogbmVlZGVkIHRvIGdldCB2ZXJzaW9uIG51bWJlciAqLwotKyNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8cHRocmVhZC5oPgotKyNpbmNsdWRlICJjaXBoZXItYWVz Y3RyLmgiCi0rI2luY2x1ZGUgInV0aGFzaC5oIgotKwotKyNpZm5kZWYgVVNFX0JVSUxUSU5fUklK TkRBRUwKLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjZW5kaWYKLSsKLSsvKiBvbmx5IGZv ciBzeXN0ZW1zIHdpdGggT1NTTCAzICovCi0rI2lmZGVmIFdJVEhfT1BFTlNTTDMKLSsKLSsvKi0t LS0tLS0tLS0tLS0tLS0tLS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsvKiBt YXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KLSsjZGVmaW5lIE1BWF9USFJF QURTICAgICAgMzIKLSsjZGVmaW5lIE1BWF9OVU1LUSAgICAgICAgKE1BWF9USFJFQURTICsgMSkK LSsKLSsvKiBvbmUgcXVldWUgaG9sZHMgODE5MiAqIDQgKiAxNkIgKDUxMktCKSAgb2Yga2V5IGRh dGEgCi0rICogYmVpbmcgdGhhdCB0aGUgcXVldWVzIGFyZSBkZXN0cm95ZWQgYWZ0ZXIgYSByZWtl eQotKyAqIGFuZCBhdCBsZWF0cyBvbmUgaGFzIHRvIGJlIGZ1bGx5IGZpbGxlZCBwcmlvciB0bwot KyAqIGVuY2lwaGVyaW5nIGRhdGEgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGJlIHRvbyBsYXJnZSAq LwotKyNkZWZpbmUgS1FMRU4gKDgxOTIgKiA0KQotKwotKy8qIFByb2Nlc3NvciBjYWNoZWxpbmUg bGVuZ3RoICovCi0rI2RlZmluZSBDQUNIRUxJTkVfTEVOCTY0Ci0rCi0rLyogQ2FuIHRoZSBzeXN0 ZW0gZG8gdW5hbGlnbmVkIGxvYWRzIG5hdGl2ZWx5PyAqLwotKyNpZiBkZWZpbmVkKF9fYWFyY2g2 NF9fKSB8fCBcCi0rICAgIGRlZmluZWQoX19pMzg2X18pICAgIHx8IFwKLSsgICAgZGVmaW5lZChf X3Bvd2VycGNfXykgfHwgXAotKyAgICBkZWZpbmVkKF9feDg2XzY0X18pCi0rIyBkZWZpbmUgQ0lQ SEVSX1VOQUxJR05FRF9PSwotKyNlbmRpZgotKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9f KQotKyMgZGVmaW5lIENJUEhFUl9JTlQxMjhfT0sKLSsjZW5kaWYKLSsKLSsvKiBjb250ZXh0IHN0 YXRlcyAqLwotKyNkZWZpbmUgSEFWRV9OT05FICAgICAgIDAKLSsjZGVmaW5lIEhBVkVfS0VZICAg ICAgICAxCi0rI2RlZmluZSBIQVZFX0lWICAgICAgICAgMgotKwotKy8qIEtleXN0cmVhbSBRdWV1 ZSBzdGF0ZSAqLwotK2VudW0gewotKwlLUUlOSVQsCi0rCUtRRU1QVFksCi0rCUtRRklMTElORywK LSsJS1FGVUxMLAotKwlLUURSQUlOSU5HCi0rfTsKLSsKLSsvKiBzdHJ1Y3RzICovCi0rCi0rLyog cHJvdmlkZXIgc3RydWN0ICovCi0rc3RydWN0IHByb3ZpZGVyX2N0eF9zdCB7Ci0rCWNvbnN0IE9T U0xfQ09SRV9IQU5ETEUgKmNvcmVfaGFuZGxlOwotKwlzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNf c3QgKnByb3ZlcnJfaGFuZGxlOwotK307Ci0rCi0rLyogS2V5c3RyZWFtIFF1ZXVlIHN0cnVjdCAq LwotK3N0cnVjdCBrcSB7Ci0rCXVfY2hhcgkJa2V5c1tLUUxFTl1bQUVTX0JMT0NLX1NJWkVdOyAv KiBbMzI3NjhdWzE2Ql0gKi8KLSsJdV9jaGFyCQljdHJbQUVTX0JMT0NLX1NJWkVdOyAvKiAxNkIg Ki8KLSsJdV9jaGFyICAgICAgICAgIHBhZDBbQ0FDSEVMSU5FX0xFTl07Ci0rCXB0aHJlYWRfbXV0 ZXhfdAlsb2NrOwotKwlwdGhyZWFkX2NvbmRfdAljb25kOwotKwlpbnQgICAgICAgICAgICAgcXN0 YXRlOwotKwl1X2NoYXIgICAgICAgICAgcGFkMVtDQUNIRUxJTkVfTEVOXTsKLSt9OwotKwotKy8q IEFFUyBNVCBjb250ZXh0IHN0cnVjdCAqLwotK3N0cnVjdCBhZXNfbXRfY3R4X3N0IHsKLSsJc3Ry dWN0IHByb3ZpZGVyX2N0eF9zdCAqcHJvdmN0eDsKLSsJbG9uZyB1bnNpZ25lZCBpbnQgICAgICAg c3RydWN0X2lkOwotKwlpbnQgICAgICAgICAgICAgICAgICAgICBrZXlsZW47Ci0rCWludAkJICAg ICAgICBzdGF0ZTsKLSsJaW50CQkgICAgICAgIHFpZHg7Ci0rCWludAkJICAgICAgICByaWR4Owot KwlpbnQgICAgICAgICAgICAgICAgICAgICBpZFtNQVhfVEhSRUFEU107IC8qIDMyICovCi0rCUFF U19LRVkgICAgICAgICAgICAgICAgIGFlc19rZXk7Ci0rCWNvbnN0IHVfY2hhciAgICAgICAgICAg Km9yaWdfa2V5OwotKwl1X2NoYXIJCSAgICAgICAgYWVzX2NvdW50ZXJbQUVTX0JMT0NLX1NJWkVd OyAvKiAxNkIgKi8KLSsJcHRocmVhZF90CSAgICAgICAgdGlkW01BWF9USFJFQURTXTsgLyogMzIg Ki8KLSsJcHRocmVhZF9yd2xvY2tfdCAgICAgICAgdGlkX2xvY2s7Ci0rCXN0cnVjdCBrcQkgICAg ICAgIHFbTUFYX05VTUtRXTsgLyogMzMgKi8KLSsjaWZkZWYgX19BUFBMRV9fCi0rCXB0aHJlYWRf cndsb2NrX3QgICAgICAgIHN0b3BfbG9jazsKLSsJaW50CQkgICAgICAgIGV4aXRfZmxhZzsKLSsj ZW5kaWYgLyogX19BUFBMRV9fICovCi0rCWludCAgICAgICAgICAgICAgICAgICAgIG9uZ29pbmc7 IC8qIHBvc3NpYmx5IG5vdCBuZWVkZWQgKi8KLSt9OwotKwotKy8qIHRoaXMgaG9sZHMgYW4gYXJy YXkgb2YgZXZwIGNvbnRleHQgcG9pbnRlcnMgdGhhdCBhcmUKLSsgKiBjcmVhdGVkIGluIHRocmVh ZF9sb29wLiBTaW5jZSB3ZSBjYW4ndCBlZmZlY3RpdmVseSBmcmVlIHRob3NlCi0rICogY29udGV4 dHMgaW4gdGhyZWFkX2xvb3Agd2Uga2VlcCBhIGNvcHkgb2YgdGhvc2UgcG9pbnRlcnMgaGVyZQot KyAqIGFuZCB0aGVuIGZyZWUgdGhlbSBpbiBzdG9wX2FuZF9qb2luX3ByZWdlbnRocmVhZHMKLSsg KiBjanIgMi8yLzIwMjMKLSsgKi8KLStzdHJ1Y3QgYWVzX210X2N0eF9wdHJzIHsKLSsJRVZQX0NJ UEhFUl9DVFggKnBvaW50ZXI7Ci0rICAgICAgICBwdGhyZWFkX3QgICAgICAgdGlkOwotKwlVVF9o YXNoX2hhbmRsZSAgaGg7Ci0rfTsKLSsKLStpbnQgYWVzX210X2RvX2NpcGhlcih2b2lkICosIHVf Y2hhciAqLCBzaXplX3QgKiwgc2l6ZV90LCBjb25zdCB1X2NoYXIgKiwgc2l6ZV90KTsKLStpbnQg YWVzX210X3N0YXJ0X3RocmVhZHModm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25z dCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBPU1NMX1BBUkFNICopOwotK3ZvaWQgYWVzX210X2Zy ZWVjdHgodm9pZCAqKTsKLSt2b2lkICphZXNfbXRfbmV3Y3R4XzI1Nih2b2lkICopOwotK3ZvaWQg KmFlc19tdF9uZXdjdHhfMTkyKHZvaWQgKik7Ci0rdm9pZCAqYWVzX210X25ld2N0eF8xMjgodm9p ZCAqKTsKLSsKLSsjZW5kaWYgLyogV0lUSCBPUEVOU1NMICovCi0rI2VuZGlmIC8qIENUUl9NVF9G VU5DUyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWN0ci1tdC1wcm92 aWRlci5jIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jdHItbXQtcHJvdmlkZXIuYwotLS0tIG9wZW5z c2gtMTAuM3AxLm9yaWcvY2lwaGVyLWN0ci1tdC1wcm92aWRlci5jCTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLWN0ci1tdC1wcm92 aWRlci5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIyMTA1MzQ3ICswMjAwCi1AQCAtMCwwICsxLDM5 MCBAQAotKy8qCi0rICogT3BlblNTSCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RSIENpcGhlciBQcm92 aWRlciBmb3IgT3BlblNTTCAzCi0rICoKLSsgKiBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVy QHBzYy5lZHU+Ci0rICogQ29weXJpZ2h0IChjKSAyMDIyIFBpdHRzYnVyZ2ggU3VwZXJjb21wdXRp bmcgQ2VudGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUGVybWlzc2lvbiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0r ICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRl ZCB0aGF0IHRoZSBhYm92ZQotKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0rICoKLSsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMK LSsgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX QVJSQU5USUVTIE9GCi0rICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSsgKiBBTlkgU1BFQ0lBTCwgRElSRUNU LCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0rICog V0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBX SEVUSEVSIElOIEFOCi0rICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVS IFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSsgKiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotKyAqLwotKwotKy8q IGJhc2VkIG9uIHZpZW5lcmUuYyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm92aWRlci1jb3Ju ZXIvdmlnZW5lcmUgYnkKLSsgKiBSaWNoYXJkIExldml0dGUgcHJvdmlkZWQgdW5kZXIgYSBDQzAg UHVibGljIExpY2Vuc2UuICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rCi0rLyogb25s eSBmb3Igc3lzdGVtcyB3aXRoIE9TU0wgMy4wKyAqLwotKyNpZmRlZiBXSVRIX09QRU5TU0wzCi0r Ci0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9jb3JlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY29yZV9kaXNwYXRjaC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2NvcmVfbmFtZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSAieG1hbGxvYy5oIgotKyNpbmNsdWRlICJvc3NsMy1wcm92aWRlci1lcnIu aCIKLSsjaW5jbHVkZSAibnVtLmgiCi0rI2luY2x1ZGUgImNpcGhlci1jdHItbXQtZnVuY3Rpb25z LmgiCi0rCi0rI2RlZmluZSBFUlJfSEFORExFKGN0eCkgKChjdHgpLT5wcm92Y3R4LT5wcm92ZXJy X2hhbmRsZSkKLSsKLSsvKiBmb3J3YXJkIGRlY2xhcnRpb24gb2YgY2lwaGVyIGZ1bmN0aW9ucyAq LwotKy8qIGNpcGhlciBjb250ZXh0IGZ1bmN0aW9ucyAqLwotK09TU0xfRlVOQ19jaXBoZXJfbmV3 Y3R4X2ZuIGFlc19tdF9uZXdjdHhfMjU2OwotK09TU0xfRlVOQ19jaXBoZXJfbmV3Y3R4X2ZuIGFl c19tdF9uZXdjdHhfMTkyOwotK09TU0xfRlVOQ19jaXBoZXJfbmV3Y3R4X2ZuIGFlc19tdF9uZXdj dHhfMTI4OwotK09TU0xfRlVOQ19jaXBoZXJfZnJlZWN0eF9mbiBhZXNfbXRfZnJlZWN0eDsKLSsK LSsvKiBwYXJhbSByZWxhdGVkIGZ1bmN0aW9uKi8KLStzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9n ZXRfcGFyYW1zX2ZuIGFlc19tdF9nZXRfcGFyYW1zXzI1NjsKLStzdGF0aWMgT1NTTF9GVU5DX2Np cGhlcl9nZXRfcGFyYW1zX2ZuIGFlc19tdF9nZXRfcGFyYW1zXzE5MjsKLStzdGF0aWMgT1NTTF9G VU5DX2NpcGhlcl9nZXRfcGFyYW1zX2ZuIGFlc19tdF9nZXRfcGFyYW1zXzEyODsKLStzdGF0aWMg T1NTTF9GVU5DX2NpcGhlcl9nZXR0YWJsZV9wYXJhbXNfZm4gYWVzX210X2dldHRhYmxlX3BhcmFt czsKLStzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9zZXRfY3R4X3BhcmFtc19mbiBhZXNfbXRfc2V0 X2N0eF9wYXJhbXM7Ci0rc3RhdGljIE9TU0xfRlVOQ19jaXBoZXJfZ2V0X2N0eF9wYXJhbXNfZm4g YWVzX210X2dldF9jdHhfcGFyYW1zOwotK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX3NldHRhYmxl X2N0eF9wYXJhbXNfZm4gYWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXM7Ci0rc3RhdGljIE9TU0xf RlVOQ19jaXBoZXJfZ2V0dGFibGVfY3R4X3BhcmFtc19mbiBhZXNfbXRfZ2V0dGFibGVfY3R4X3Bh cmFtczsKLSsKLSsvKiBlbi9kZWNpcGhlciBmdW5jdGlvbnMgKi8KLStPU1NMX0ZVTkNfY2lwaGVy X2VuY3J5cHRfaW5pdF9mbiBhZXNfbXRfc3RhcnRfdGhyZWFkczsKLStPU1NMX0ZVTkNfY2lwaGVy X2RlY3J5cHRfaW5pdF9mbiBhZXNfbXRfc3RhcnRfdGhyZWFkczsKLStPU1NMX0ZVTkNfY2lwaGVy X3VwZGF0ZV9mbiBhZXNfbXRfZG9fY2lwaGVyOwotKwotKy8qIHByb3ZpZGVyIGNvbnRleHQgKi8K LStzdGF0aWMgT1NTTF9GVU5DX3Byb3ZpZGVyX3F1ZXJ5X29wZXJhdGlvbl9mbiBhZXNfbXRfcHJv dl9xdWVyeTsKLStzdGF0aWMgT1NTTF9GVU5DX3Byb3ZpZGVyX2dldF9yZWFzb25fc3RyaW5nc19m biBhZXNfbXRfcHJvdl9yZWFzb25zOwotK3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfdGVhcmRv d25fZm4gYWVzX210X3Byb3ZfdGVhcmRvd247Ci0rc3RhdGljIE9TU0xfRlVOQ19wcm92aWRlcl9n ZXRfcGFyYW1zX2ZuIGFlc19tdF9wcm92X2dldF9wYXJhbXM7IAotK09TU0xfcHJvdmlkZXJfaW5p dF9mbiBPU1NMX3Byb3ZpZGVyX2luaXQ7IC8qIG5lZWQgdGhpcz8gKi8KLSsKLSsvKiBlcnJvciBm dW5jdGlvbnMgKi8KLStPU1NMX0ZVTkNfY29yZV9uZXdfZXJyb3JfZm4gKmNfbmV3X2Vycm9yOwot K09TU0xfRlVOQ19jb3JlX3NldF9lcnJvcl9kZWJ1Z19mbiAqY19zZXRfZXJyb3JfZGVidWc7Ci0r T1NTTF9GVU5DX2NvcmVfdnNldF9lcnJvcl9mbiAqY192c2V0X2Vycm9yOwotK09TU0xfRlVOQ19j b3JlX3NldF9lcnJvcl9tYXJrX2ZuICpjX3NldF9lcnJvcl9tYXJrOwotK09TU0xfRlVOQ19jb3Jl X2NsZWFyX2xhc3RfZXJyb3JfbWFya19mbiAqY19jbGVhcl9sYXN0X2Vycm9yX21hcms7Ci0rT1NT TF9GVU5DX2NvcmVfcG9wX2Vycm9yX3RvX21hcmtfZm4gKmNfcG9wX2Vycm9yX3RvX21hcms7Ci0r Ci0rLyogRXJyb3JzIHVzZWQgaW4gdGhpcyBwcm92aWRlciAqLwotKyNkZWZpbmUgQUVTX01UX0Vf TUFMTE9DICAgICAgICAgICAxCi0rI2RlZmluZSBBRVNfTVRfT05HT0lOR19PUEVSQVRJT04gIDIK LSsjZGVmaW5lIEFFU19NVF9CQURfS0VZTEVOICAgICAgICAgMwotKwotKy8qIHR5cGVkZWYgZm9y IGZ1bmN0aW9uIHBvaW50ZXJzICovCi0rdHlwZWRlZiB2b2lkKCpmcHRyX3QpKHZvaWQpOwotKwot Ky8qIGFsbCBvZiB0aGUgdmFyaW91cyBhcnJheXMgd2UgbmVlZCAqLwotKwotKy8qIEJBRF9LRVlM RU4gaXNuJ3QgYmVpbmcgdXNlZCBhdCB0aGUgbW9tZW50ICovCi0rY29uc3QgT1NTTF9JVEVNIHJl YXNvbnNbXSA9IHsKLSsJeyBBRVNfTVRfRV9NQUxMT0MsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlIiB9LAotKwl7IEFFU19NVF9PTkdPSU5HX09QRVJBVElPTiwgIk9wZXJhdGlvbiB1bmRlcndh eSIgfSwKLSsJeyBBRVNfTVRfQkFEX0tFWUxFTiwgIk9ubHkgMjU2LCAxOTIsIGFuZCAxMjggS2V5 IGxlbmd0aHMgYXJlIHN1cHBvcnRlZCIgfSwKLSsJeyAwLCBOVUxMIH0gLyogVGVybWluYXRpb24g Ki8KLSt9OwotKwotKy8qIGZ1bmN0aW9uIG1hcHBpbmcgZm9yIDI1NnwxOTJ8MTI4IGtleSBsZW5n dGhzICovCi0rY29uc3QgT1NTTF9ESVNQQVRDSCBhZXNfbXRfZnVuY3NfMjU2W10gPSB7Ci0rCXsg T1NTTF9GVU5DX0NJUEhFUl9ORVdDVFgsIChmcHRyX3QpYWVzX210X25ld2N0eF8yNTYgfSAsCi0r CXsgT1NTTF9GVU5DX0NJUEhFUl9GUkVFQ1RYLCAoZnB0cl90KWFlc19tdF9mcmVlY3R4IH0sCi0r CXsgT1NTTF9GVU5DX0NJUEhFUl9FTkNSWVBUX0lOSVQsIChmcHRyX3QpYWVzX210X3N0YXJ0X3Ro cmVhZHMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0RFQ1JZUFRfSU5JVCwgKGZwdHJfdClhZXNf bXRfc3RhcnRfdGhyZWFkcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfVVBEQVRFLCAoZnB0cl90 KWFlc19tdF9kb19jaXBoZXIgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVF9QQVJBTVMsIChm cHRyX3QpYWVzX210X2dldF9wYXJhbXNfMjU2IH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRU QUJMRV9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldHRhYmxlX3BhcmFtcyB9LAotKwl7IE9TU0xf RlVOQ19DSVBIRVJfR0VUX0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldF9jdHhfcGFyYW1z IH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9DVFhfUEFSQU1TLAotKwkgIChmcHRy X3QpYWVzX210X2dldHRhYmxlX2N0eF9wYXJhbXMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX1NF VF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9zZXRfY3R4X3BhcmFtcyB9LAotKwl7IE9TU0xf RlVOQ19DSVBIRVJfU0VUVEFCTEVfQ1RYX1BBUkFNUywKLSsJICAoZnB0cl90KWFlc19tdF9zZXR0 YWJsZV9jdHhfcGFyYW1zIH0sCi0rCXsgMCwgTlVMTCB9Ci0rfTsKLSsKLStjb25zdCBPU1NMX0RJ U1BBVENIIGFlc19tdF9mdW5jc18xOTJbXSA9IHsKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX05FV0NU WCwgKGZwdHJfdClhZXNfbXRfbmV3Y3R4XzE5MiB9ICwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0ZS RUVDVFgsIChmcHRyX3QpYWVzX210X2ZyZWVjdHggfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0VO Q1JZUFRfSU5JVCwgKGZwdHJfdClhZXNfbXRfc3RhcnRfdGhyZWFkcyB9LAotKwl7IE9TU0xfRlVO Q19DSVBIRVJfREVDUllQVF9JTklULCAoZnB0cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCi0r CXsgT1NTTF9GVU5DX0NJUEhFUl9VUERBVEUsIChmcHRyX3QpYWVzX210X2RvX2NpcGhlciB9LAot Kwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X3BhcmFt c18xOTIgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVFRBQkxFX1BBUkFNUywgKGZwdHJfdClh ZXNfbXRfZ2V0dGFibGVfcGFyYW1zIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfQ1RYX1BB UkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X2N0eF9wYXJhbXMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQ SEVSX0dFVFRBQkxFX0NUWF9QQVJBTVMsCi0rCSAgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfY3R4 X3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfU0VUX0NUWF9QQVJBTVMsIChmcHRyX3Qp YWVzX210X3NldF9jdHhfcGFyYW1zIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRUQUJMRV9D VFhfUEFSQU1TLAotKwkgIChmcHRyX3QpYWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXMgfSwKLSsJ eyAwLCBOVUxMIH0KLSt9OwotKwotK2NvbnN0IE9TU0xfRElTUEFUQ0ggYWVzX210X2Z1bmNzXzEy OFtdID0gewotKwl7IE9TU0xfRlVOQ19DSVBIRVJfTkVXQ1RYLCAoZnB0cl90KWFlc19tdF9uZXdj dHhfMTI4IH0gLAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfRlJFRUNUWCwgKGZwdHJfdClhZXNfbXRf ZnJlZWN0eCB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfRU5DUllQVF9JTklULCAoZnB0cl90KWFl c19tdF9zdGFydF90aHJlYWRzIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9ERUNSWVBUX0lOSVQs IChmcHRyX3QpYWVzX210X3N0YXJ0X3RocmVhZHMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX1VQ REFURSwgKGZwdHJfdClhZXNfbXRfZG9fY2lwaGVyIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9H RVRfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXRfcGFyYW1zXzEyOCB9LAotKwl7IE9TU0xfRlVO Q19DSVBIRVJfR0VUVEFCTEVfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9wYXJhbXMg fSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9n ZXRfY3R4X3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUVEFCTEVfQ1RYX1BBUkFN UywKLSsJICAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9jdHhfcGFyYW1zIH0sCi0rCXsgT1NTTF9G VU5DX0NJUEhFUl9TRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfc2V0X2N0eF9wYXJhbXMg fSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVFRBQkxFX0NUWF9QQVJBTVMsCi0rCSAgKGZwdHJf dClhZXNfbXRfc2V0dGFibGVfY3R4X3BhcmFtcyB9LAotKwl7IDAsIE5VTEwgfQotK307Ci0rCi0r LyogdGhlIGNpcGhlcnMgZm91bmQgaW4gdGhpcyBwcm92aWRlciAqLwotK2NvbnN0IE9TU0xfQUxH T1JJVEhNIGFlc19tdF9jaXBoZXJzW10gPSB7Ci0rCXsgImFlc19jdHJfbXRfMjU2IiwgInByb3Zp ZGVyPWhwbnNzaCIsIGFlc19tdF9mdW5jc18yNTYsIE5VTEwgfSwKLSsJeyAiYWVzX2N0cl9tdF8x OTIiLCAicHJvdmlkZXI9aHBuc3NoIiwgYWVzX210X2Z1bmNzXzE5MiwgTlVMTCB9LAotKwl7ICJh ZXNfY3RyX210XzEyOCIsICJwcm92aWRlcj1ocG5zc2giLCBhZXNfbXRfZnVuY3NfMTI4LCBOVUxM IH0sCi0rCXsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9Ci0rfTsKLSsKLSsvKiBmdW5jdGlvbiBt YXBwaW5nIGZvciBwcm92aWRlciBtZXRob2RzICovCi0rY29uc3QgT1NTTF9ESVNQQVRDSCBwcm92 aWRlcl9mdW5jdGlvbnNbXSA9IHsKLSsJeyBPU1NMX0ZVTkNfUFJPVklERVJfVEVBUkRPV04sIChm cHRyX3QpYWVzX210X3Byb3ZfdGVhcmRvd24gfSwKLSsJeyBPU1NMX0ZVTkNfUFJPVklERVJfUVVF UllfT1BFUkFUSU9OLCAoZnB0cl90KWFlc19tdF9wcm92X3F1ZXJ5IH0sCi0rCXsgT1NTTF9GVU5D X1BST1ZJREVSX0dFVF9QQVJBTVMsIChmcHRyX3QpYWVzX210X3Byb3ZfZ2V0X3BhcmFtcyB9LAot Kwl7IE9TU0xfRlVOQ19QUk9WSURFUl9HRVRfUkVBU09OX1NUUklOR1MsIChmcHRyX3QpYWVzX210 X3Byb3ZfcmVhc29ucyB9LAotKwl7IDAsIE5VTEwgfQotK307Ci0rCi0rc3RhdGljIGNvbnN0IE9T U0xfUEFSQU0gY3R4X2dldF9wYXJhbV90YWJsZVtdID0gewotKyAgICAgICAgeyAia2V5bGVuIiwg T1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VSLCBOVUxMLCBzaXplb2Yoc2l6ZV90KSwgMCB9LAot KyAgICAgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAwIH0sCi0rfTsKLSsKLStzdGF0aWMgY29uc3Qg T1NTTF9QQVJBTSBjaXBoZXJfZ2V0X3BhcmFtX3RhYmxlW10gPSB7Ci0rICAgICAgICB7ICJibG9j a3NpemUiLCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIsIE5VTEwsIHNpemVvZihzaXplX3Qp LCAwIH0sCi0rICAgICAgICB7ICJrZXlsZW4iLCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIs IE5VTEwsIHNpemVvZihzaXplX3QpLCAwIH0sCi0rICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAs IDAgfSwKLSt9OwotKwotK3N0YXRpYyBjb25zdCBPU1NMX1BBUkFNIGNpcGhlcl9zZXRfcGFyYW1f dGFibGVbXSA9IHsKLSsJeyAia2V5bGVuIiwgT1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VSLCBO VUxMLCBzaXplb2Yoc2l6ZV90KSwgMCB9LAotKwl7IE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwKLSt9 OwotKwotKwotKy8qIHByb3ZpZGVyIGZ1bmN0aW9ucyBzdGFydCBoZXJlICovCi0rCi0rc3RhdGlj IHZvaWQgcHJvdmlkZXJfY3R4X2ZyZWUoc3RydWN0IHByb3ZpZGVyX2N0eF9zdCAqY3R4KQotK3sK LSsgICAgaWYgKGN0eCAhPSBOVUxMKQotKyAgICAgICAgcHJvdmVycl9mcmVlX2hhbmRsZShjdHgt PnByb3ZlcnJfaGFuZGxlKTsKLSsgICAgZnJlZShjdHgpOwotK30KLSsKLStzdGF0aWMgc3RydWN0 IHByb3ZpZGVyX2N0eF9zdCAqcHJvdmlkZXJfY3R4X25ldyhjb25zdCBPU1NMX0NPUkVfSEFORExF ICpjb3JlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IE9TU0xfRElTUEFUQ0ggKmluKQotK3sKLSsgICAgc3RydWN0IHByb3ZpZGVyX2N0eF9z dCAqY3R4OwotKwotKyAgICBpZiAoKGN0eCA9IG1hbGxvYyhzaXplb2YoKmN0eCkpKSAhPSBOVUxM Ci0rICAgICAgICAmJiAoY3R4LT5wcm92ZXJyX2hhbmRsZSA9IHByb3ZlcnJfbmV3X2hhbmRsZShj b3JlLCBpbikpICE9IE5VTEwpIHsKLSsgICAgICAgIGN0eC0+Y29yZV9oYW5kbGUgPSBjb3JlOwot KyAgICB9IGVsc2UgewotKyAgICAgICAgcHJvdmlkZXJfY3R4X2ZyZWUoY3R4KTsKLSsgICAgICAg IGN0eCA9IE5VTEw7Ci0rICAgIH0KLSsgICAgcmV0dXJuIGN0eDsKLSt9Ci0rCi0rCi0rLyogcmV0 dXJucyB0aGUgYXBwcm9wcmlhdGUgYWxnbyB0YWJsZSBmb3IgdGhlIHJlcXVlc3RlZCBmdW5jdGlv bgotKyAqIGluIHRoaXMgY2FzZSB3ZSBzaG91bGQgb25seSBiZSB3b3JraW5nIHdpdGggT1BfQ0lQ SEVSICovCi0rY29uc3QgT1NTTF9BTEdPUklUSE0gKmFlc19tdF9wcm92X3F1ZXJ5KHZvaWQgKnBy b3ZjdHgsIGludCBvcGVyYXRpb25faWQsCi0rCQkJCSAgICAgaW50ICpub19zdG9yZSkKLSt7Ci0r CXN3aXRjaCAob3BlcmF0aW9uX2lkKSB7Ci0rCWNhc2UgT1NTTF9PUF9DSVBIRVI6Ci0rCQlyZXR1 cm4gYWVzX210X2NpcGhlcnM7Ci0rCX0KLSsJcmV0dXJuIE5VTEw7Ci0rfQotKwotK2NvbnN0IE9T U0xfSVRFTSAqYWVzX210X3Byb3ZfcmVhc29ucyh2b2lkICpwcm92Y3R4KQotK3sKLSsJcmV0dXJu IHJlYXNvbnM7Ci0rfQotKwotK3N0YXRpYyBpbnQgYWVzX210X3Byb3ZfZ2V0X3BhcmFtcyh2b2lk ICpwcm92Y3R4LCBPU1NMX1BBUkFNICpwYXJhbXMpCi0rewotKwlPU1NMX1BBUkFNICpwOwotKwlp bnQgb2sgPSAxOwotKwotKwljaGFyICpWRVJTSU9OPSIxLjAiOwotKwljaGFyICpCVUlMRFRZUEU9 ImFlc19jdHJfbXRAaHBuc3NoLm9yZyI7Ci0rCQotKwlmb3IocCA9IHBhcmFtczsgcC0+a2V5ICE9 IE5VTEw7IHArKykKLSsJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgInZlcnNpb24iKSA9PSAwKSB7 Ci0rCQkJKihjb25zdCB2b2lkICoqKXAtPmRhdGEgPSBWRVJTSU9OOwotKwkJCXAtPnJldHVybl9z aXplID0gc3RybGVuKFZFUlNJT04pOwotKwkJfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwg ImJ1aWxkaW5mbyIpID09IDAKLSsJCQkgICAmJiBCVUlMRFRZUEVbMF0gIT0gJ1wwJykgewotKwkJ CSooY29uc3Qgdm9pZCAqKilwLT5kYXRhID0gQlVJTERUWVBFOwotKwkJCXAtPnJldHVybl9zaXpl ID0gc3RybGVuKEJVSUxEVFlQRSk7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSt9Ci0rCi0rLyogVGhl IGZ1bmN0aW9uIHRoYXQgdGVhcnMgZG93biB0aGlzIHByb3ZpZGVyICovCi0rc3RhdGljIHZvaWQg YWVzX210X3Byb3ZfdGVhcmRvd24odm9pZCAqdnByb3ZjdHgpCi0rewotKyAgICBwcm92aWRlcl9j dHhfZnJlZSh2cHJvdmN0eCk7Ci0rfQotKwotK2ludCBPU1NMX3Byb3ZpZGVyX2luaXQoY29uc3Qg T1NTTF9DT1JFX0hBTkRMRSAqY29yZSwKLSsJCSAgICAgICBjb25zdCBPU1NMX0RJU1BBVENIICpp biwKLSsJCSAgICAgICBjb25zdCBPU1NMX0RJU1BBVENIICoqb3V0LAotKwkJICAgICAgIHZvaWQg Kip2cHJvdmN0eCkKLSt7Ci0rICAgIGlmICgoKnZwcm92Y3R4ID0gcHJvdmlkZXJfY3R4X25ldyhj b3JlLCBpbikpID09IE5VTEwpCi0rCSAgICByZXR1cm4gMDsKLSsgICAgKm91dCA9IHByb3ZpZGVy X2Z1bmN0aW9uczsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIHBhcmFtZXRlciBmdW5jdGlv bnMgZm9yIDI1NnwxOTJ8MTI4IGJpdCBrZXkgbGVuZ3RocyAqLwotK3N0YXRpYyBpbnQgYWVzX210 X2dldF9wYXJhbXNfMjU2KE9TU0xfUEFSQU0gcGFyYW1zW10pCi0rewotKwlPU1NMX1BBUkFNICpw OwotKwlpbnQgb2sgPSAxOwotKwkKLSsJZm9yIChwID0gcGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsg cCsrKSB7Ci0rCQlpZiAoc3RyY2FzZWNtcChwLT5rZXksICJibG9ja3NpemUiKSA9PSAwKQotKwkJ CWlmIChwcm92bnVtX3NldF9zaXplX3QocCwgQUVTX0JMT0NLX1NJWkUpIDwgMCkgewotKwkJCQlv ayA9IDA7Ci0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmIChzdHJjYXNlY21wKHAtPmtleSwg ImtleWxlbiIpID09IDApIHsKLSsJCQlzaXplX3Qga2V5bCA9IDMyOwotKwkJCQotKwkJCWlmIChw cm92bnVtX3NldF9zaXplX3QocCwga2V5bCkgPCAwKSB7Ci0rCQkJCW9rID0gMDsKLSsJCQkJY29u dGludWU7Ci0rCQkJfQotKwkJfQotKwl9Ci0rCXJldHVybiBvazsKLSt9Ci0rCi0rc3RhdGljIGlu dCBhZXNfbXRfZ2V0X3BhcmFtc18xOTIoT1NTTF9QQVJBTSBwYXJhbXNbXSkKLSt7Ci0rCU9TU0xf UEFSQU0gKnA7Ci0rCWludCBvayA9IDE7Ci0rCQotKwlmb3IgKHAgPSBwYXJhbXM7IHAtPmtleSAh PSBOVUxMOyBwKyspIHsKLSsJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgImJsb2Nrc2l6ZSIpID09 IDApCi0rCQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBBRVNfQkxPQ0tfU0laRSkgPCAwKSB7 Ci0rCQkJCW9rID0gMDsKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKHN0cmNhc2VjbXAo cC0+a2V5LCAia2V5bGVuIikgPT0gMCkgewotKwkJCXNpemVfdCBrZXlsID0gMjQ7Ci0rCQkJCi0r CQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBrZXlsKSA8IDApIHsKLSsJCQkJb2sgPSAwOwot KwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJcmV0dXJuIG9rOwotK30KLSsKLStz dGF0aWMgaW50IGFlc19tdF9nZXRfcGFyYW1zXzEyOChPU1NMX1BBUkFNIHBhcmFtc1tdKQotK3sK LSsJT1NTTF9QQVJBTSAqcDsKLSsJaW50IG9rID0gMTsKLSsJCi0rCWZvciAocCA9IHBhcmFtczsg cC0+a2V5ICE9IE5VTEw7IHArKykgewotKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYmxvY2tz aXplIikgPT0gMCkKLSsJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIEFFU19CTE9DS19TSVpF KSA8IDApIHsKLSsJCQkJb2sgPSAwOwotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoc3Ry Y2FzZWNtcChwLT5rZXksICJrZXlsZW4iKSA9PSAwKSB7Ci0rCQkJc2l6ZV90IGtleWwgPSAxNjsK LSsJCQkKLSsJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIGtleWwpIDwgMCkgewotKwkJCQlv ayA9IDA7Ci0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCX0KLSsJfQotKwlyZXR1cm4gb2s7Ci0r fQotKwotKy8qIFBhcmFtZXRlcnMgdGhhdCBsaWJjcnlwdG8gY2FuIGdldCBmcm9tIHRoaXMgaW1w bGVtZW50YXRpb24gKi8KLStzdGF0aWMgY29uc3QgT1NTTF9QQVJBTSAqYWVzX210X2dldHRhYmxl X3BhcmFtcyh2b2lkICpwcm92Y3R4KQotK3sKLSsJcmV0dXJuIGNpcGhlcl9nZXRfcGFyYW1fdGFi bGU7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBPU1NMX1BBUkFNICphZXNfbXRfZ2V0dGFibGVfY3R4 X3BhcmFtcyh2b2lkICpjY3R4LCB2b2lkICpwcm92Y3R4KQotK3sKLSsJcmV0dXJuIGN0eF9nZXRf cGFyYW1fdGFibGU7Ci0rfQotKwotK3N0YXRpYyBpbnQgYWVzX210X2dldF9jdHhfcGFyYW1zKHZv aWQgKnZjdHgsIE9TU0xfUEFSQU0gcGFyYW1zW10pCi0rewotKyAgICBzdHJ1Y3QgYWVzX210X2N0 eF9zdCAqY3R4ID0gdmN0eDsKLSsgICAgaW50IG9rID0gMTsKLSsKLSsgICAgaWYgKGN0eC0+a2V5 bGVuID4gMCkgewotKyAgICAgICAgT1NTTF9QQVJBTSAqcDsKLSsKLSsgICAgICAgIGZvciAocCA9 IHBhcmFtczsgcC0+a2V5ICE9IE5VTEw7IHArKykKLSsgICAgICAgICAgICBpZiAoc3RyY2FzZWNt cChwLT5rZXksICJrZXlsZW4iKSA9PSAwCi0rICAgICAgICAgICAgICAgICYmIHByb3ZudW1fc2V0 X3NpemVfdChwLCBjdHgtPmtleWxlbikgPCAwKSB7Ci0rICAgICAgICAgICAgICAgIG9rID0gMDsK LSsgICAgICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICAgICAgfQotKyAgICB9Ci0rICAg IHJldHVybiBvazsKLSt9Ci0rCi0rLyogUGFyYW1ldGVycyB0aGF0IGxpYmNyeXB0byBjYW4gc2Vu ZCB0byB0aGlzIGltcGxlbWVudGF0aW9uICovCi0rc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gKmFl c19tdF9zZXR0YWJsZV9jdHhfcGFyYW1zKHZvaWQgKmNjdHgsIHZvaWQgKnByb3ZjdHgpCi0rewot KyAgICByZXR1cm4gY2lwaGVyX3NldF9wYXJhbV90YWJsZTsKLSt9Ci0rCi0rc3RhdGljIGludCBh ZXNfbXRfc2V0X2N0eF9wYXJhbXModm9pZCAqdmN0eCwgY29uc3QgT1NTTF9QQVJBTSBwYXJhbXNb XSkKLSt7Ci0rICAgIHN0cnVjdCBhZXNfbXRfY3R4X3N0ICpjdHggPSB2Y3R4OwotKyAgICBjb25z dCBPU1NMX1BBUkFNICpwOwotKyAgICBpbnQgb2sgPSAxOwotKwotKyAgICBpZiAoY3R4LT5vbmdv aW5nKSB7Ci0rICAgICAgICBFUlJfcmFpc2UoRVJSX0hBTkRMRShjdHgpLCBBRVNfTVRfT05HT0lO R19PUEVSQVRJT04pOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgZm9yIChw ID0gcGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKQotKyAgICAgICAgaWYgKHN0cmNhc2VjbXAo cC0+a2V5LCAia2V5bGVuIikgPT0gMCkgewotKyAgICAgICAgICAgIHNpemVfdCBrZXlsID0gMDsK LSsKLSsgICAgICAgICAgICBpZiAocHJvdm51bV9nZXRfc2l6ZV90KCZrZXlsLCBwKSA8IDApIHsK LSsgICAgICAgICAgICAgICAgb2sgPSAwOwotKyAgICAgICAgICAgICAgICBjb250aW51ZTsKLSsg ICAgICAgICAgICB9Ci0rICAgICAgICAgICAgY3R4LT5rZXlsZW4gPSBrZXlsOwotKyAgICAgICAg fQotKyAgICByZXR1cm4gb2s7Ci0rfQotKwotKyNlbmRpZiAvKldJVEhfT1BFTlNTTDMqLwotZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLmggb3BlbnNzaC0xMC4zcDEvY2lwaGVy LmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci5oCTIwMjYtMDctMDIgMDA6Mjc6MDYu MTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLmgJMjAyNi0wNy0wMiAw MDo0NjozMy4yODc3NjY3NTggKzAyMDAKLUBAIC00MiwxMSArNDIsMTcgQEAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSAjZW5kaWYKLSAjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBvbHkuaCIK LSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rI2luY2x1ZGUgImNpcGhlci1jaGFjaGFwb2x5LWxpYmNy eXB0by1tdC5oIgotKyNlbmRpZgotICNpbmNsdWRlICJjaXBoZXItYWVzY3RyLmgiCi0gCi0gI2Rl ZmluZSBDSVBIRVJfRU5DUllQVAkJMQotICNkZWZpbmUgQ0lQSEVSX0RFQ1JZUFQJCTAKLSAKLSsj ZGVmaW5lIENJUEhFUl9NVUxUSVRIUkVBRAkxCi0rI2RlZmluZSBDSVBIRVJfU0VSSUFMCQkwCi0r Ci0gc3RydWN0IHNzaGNpcGhlciB7Ci0gCWNoYXIJKm5hbWU7Ci0gCXVfaW50CWJsb2NrX3NpemU7 Ci1AQCAtNjAsNiArNjYsNyBAQAotICNkZWZpbmUgQ0ZMQUdfTk9ORQkJKDE8PDMpCi0gI2RlZmlu ZSBDRkxBR19JTlRFUk5BTAkJQ0ZMQUdfTk9ORSAvKiBEb24ndCB1c2UgIm5vbmUiIGZvciBwYWNr ZXRzICovCi0gI2lmZGVmIFdJVEhfT1BFTlNTTAotKyNkZWZpbmUgQ0ZMQUdfTVQJCSgxPDw0KQot IAljb25zdCBFVlBfQ0lQSEVSCSooKmV2cHR5cGUpKHZvaWQpOwotICNlbHNlCi0gCXZvaWQJKmln bm9yZWQ7Ci1AQCAtNjgsMjQgKzc1LDI3IEBACi0gCi0gc3RydWN0IHNzaGNpcGhlcl9jdHg7Ci0g Ci0tY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqY2lwaGVyX2J5X25hbWUoY29uc3QgY2hhciAqKTsK LStzdHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXJfYnlfbmFtZShjb25zdCBjaGFyICopOwotIGNvbnN0 IGNoYXIgKmNpcGhlcl93YXJuaW5nX21lc3NhZ2UoY29uc3Qgc3RydWN0IHNzaGNpcGhlcl9jdHgg Kik7Ci0gaW50CSBjaXBoZXJzX3ZhbGlkKGNvbnN0IGNoYXIgKik7Ci0gY2hhcgkqY2lwaGVyX2Fs Z19saXN0KGNoYXIsIGludCk7Ci0gY29uc3QgY2hhciAqY29tcHJlc3Npb25fYWxnX2xpc3QoaW50 KTsKLSBpbnQJIGNpcGhlcl9pbml0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICoqLCBjb25zdCBzdHJ1 Y3Qgc3NoY2lwaGVyICosCi0tICAgIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFy ICosIHVfaW50LCBpbnQpOwotKyAgICBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hh ciAqLCB1X2ludCwgdV9pbnQsIGludCwgaW50KTsKLSBpbnQJIGNpcGhlcl9jcnlwdChzdHJ1Y3Qg c3NoY2lwaGVyX2N0eCAqLCB1X2ludCwgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAotICAgICB1 X2ludCwgdV9pbnQsIHVfaW50KTsKLSBpbnQJIGNpcGhlcl9nZXRfbGVuZ3RoKHN0cnVjdCBzc2hj aXBoZXJfY3R4ICosIHVfaW50ICosIHVfaW50LAotICAgICBjb25zdCB1X2NoYXIgKiwgdV9pbnQp OwotIHZvaWQJIGNpcGhlcl9mcmVlKHN0cnVjdCBzc2hjaXBoZXJfY3R4ICopOwotIHVfaW50CSBj aXBoZXJfYmxvY2tzaXplKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7Ci0rdWludDY0X3QgY2lw aGVyX3Jla2V5X2Jsb2Nrcyhjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOwotIHVfaW50CSBjaXBo ZXJfa2V5bGVuKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7Ci0gdV9pbnQJIGNpcGhlcl9zZWNs ZW4oY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKLSB1X2ludAkgY2lwaGVyX2F1dGhsZW4oY29u c3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKLSB1X2ludAkgY2lwaGVyX2l2bGVuKGNvbnN0IHN0cnVj dCBzc2hjaXBoZXIgKik7Ci0gdV9pbnQJIGNpcGhlcl9pc19jYmMoY29uc3Qgc3RydWN0IHNzaGNp cGhlciAqKTsKLSt2b2lkCSBjaXBoZXJfcmVzZXRfbXVsdGl0aHJlYWRlZCh2b2lkKTsKLStjb25z dCBjaGFyICpjaXBoZXJfY3R4X25hbWUoY29uc3Qgc3RydWN0IHNzaGNpcGhlcl9jdHggKik7Ci0g Ci0gdV9pbnQJIGNpcGhlcl9jdHhfaXNfcGxhaW50ZXh0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICop OwotIAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLXN3aXRjaC5jIG9wZW5z c2gtMTAuM3AxL2NpcGhlci1zd2l0Y2guYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVy LXN3aXRjaC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz aC0xMC4zcDEvY2lwaGVyLXN3aXRjaC5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIyMzYzMjY4ICsw MjAwCi1AQCAtMCwwICsxLDczIEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgVGhlIEJv YXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAqCi0rICog IEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKgotKyAqIFRoaXMgbGli cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KLSsgKgotKyAq IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExp Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBzZWUgaHR0cDovL29w ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKwotKy8qIFRoaXMgcHJvdmlk ZXMgdGhlIGZ1bmN0aW9uIHRvIHN3aXRjaCBmcm9tIGEgc2VyaWFsIHRvIHBhcmFsbGVsCi0rICog Y2lwaGVyLiBUaGlzIGhhcyBiZWVuIG1vdmVkIGludG8gaXQncyBvd24gZmlsZSBpbiBvcmRlciB0 byBtYWtlIGl0Ci0rICogYXZhaWxhYmxlIHRvIGJvdGggdGhlIGNsaWVudCBhbmQgc2VydmVyIHdp dGhvdXQgaGF2aW5nIHRvIGNsdXR0ZXIKLSsgKiB1cCBvdGhlciBmaWxlcy4KLSsgKi8KLSsKLSsj aW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlICJjaXBoZXIuaCIKLSsjaW5jbHVkZSAibG9nLmgiCi0rI2lu Y2x1ZGUgInBhY2tldC5oIgotKwotKwotKy8qIGlmIHdlIGFyZSB1c2luZyBhIHBhcmFsbGVsIGNp cGhlciB0aGVyZSBjYW4gYmUgaXNzdWVzIGluIGVpdGhlcgotKyAqIGEgZm9yayBvciBzYW5kYm94 LiBFc3NlbnRpYWxseSwgaWYgd2Ugc3dpdGNoIHRvbyBlYXJseSB0aGUKLSsgKiB0aHJlYWRzIGdl dCBsb3N0IGFuZCB0aGUgYXBwbGljYXRpb24gaGFuZ3MuIFNvIHdoYXQgd2UgZG8gaXMKLSsgKiB0 ZXN0IGlmIGVpdGhlciB0aGUgc2VuZCBvciByZWNlaXZlIGNvbnRleHQgY2lwaGVyIG5hbWUKLSsg KiBtYXRjaGVzIHRoZSBrbm93biBhdmFpbGFibGUgcGFyYWxsZWwgY2lwaGVycy4gSWYgaXQgZG9l cwotKyAqIHRoZW4gd2UgZm9yY2UgYSByZWtleSB3aGljaCBhdXRvbWF0aWNhbGx5IGxvYWRzIHRo ZSBwYXJhbGxlbAotKyAqIGNpcGhlci4gKi8KLSsKLSt2b2lkCi0rY2lwaGVyX3N3aXRjaChzdHJ1 Y3Qgc3NoICpzc2gpIHsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCS8qIGdldCB0aGUgc2VuZCBh bmQgcmVjZWl2ZSBjb250ZXh0IGFuZCBleHRyYWN0IHRoZSBjaXBoZXIgbmFtZSAqLwotKwljb25z dCB2b2lkICpzZW5kX2NjID0gc3NoX3BhY2tldF9nZXRfc2VuZF9jb250ZXh0KHNzaCk7Ci0rCWNv bnN0IHZvaWQgKnJlY3ZfY2MgPSBzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQoc3NoKTsK LSsJY29uc3QgY2hhciAqc2VuZCA9IGNpcGhlcl9jdHhfbmFtZShzZW5kX2NjKTsKLSsJY29uc3Qg Y2hhciAqcmVjdiA9IGNpcGhlcl9jdHhfbmFtZShyZWN2X2NjKTsKLSsKLSsJZGVidWdfZigiU2Vu ZDogJXMgUmVjdjogJXMiLCBzZW5kLCByZWN2KTsKLSsJCi0rCS8qIGlmIHRoZSBuYW1lIG9mIHRo ZSBjaXBoZXIgbWF0Y2hlcyB0aGVuIHdlIHNldCB0aGUgY29udGV4dAotKwkgKiB0byBhdXRoZW50 aWNhdGVkIChpdCBsaWtlbHkgYWxyZWFkeSBpcyB0aG91Z2gpIGFuZCB0aGVuCi0rCSAqIGZvcmNl IHRoZSByZWtleS4gRWl0aGVyIHNpZGUgY2FuIGRvIHRoaXMuIE9uZSBkb3duc2lkZSBvZgotKwkg KiB0aGlzIG1ldGhvZCBpcyB0aGF0IGJvdGggc2lkZXMgY2FuIHJlcXVlc3QgYSByZWtleSBzbyB5 b3UKLSsJICogY2FuIGVuZCB1cCBkdXBsaWNhdGluZyB3b3JrLiBUaGlzIGlzIGFubm95aW5nIGJ1 dCB0aGUKLSsJICogcGVyZm9ybWFuY2UgZ2FpbnMgbWFrZSBpdCB3b3J0aHdoaWxlLiBBbHNvIEkK LSsJICogdXNlIHN0cnN0ciBoZXJlIGJlY2F1c2Ugc3RyY21wIHdvdWxkIHJlcXVpcmUgYSA2IHBh cnQKLSsJICogaWYgc3RhdGVtZW50ICovCi0rCWlmIChzdHJzdHIoc2VuZCwgImN0ciIpIHx8IHN0 cnN0cihyZWN2LCAiY3RyIikpIHsKLSsJCWRlYnVnKCJTZXJpYWwgdG8gcGFyYWxsZWwgQUVTLUNU UiBjaXBoZXIgc3dhcCIpOwotKwkJLyogY2lwaGVyX3Jlc2V0X211bHRpdGhyZWFkZWQoKTsgKi8K LSsJCXNzaF9wYWNrZXRfc2V0X2F1dGhlbnRpY2F0ZWQoc3NoKTsKLSsJCXBhY2tldF9yZXF1ZXN0 X3Jla2V5aW5nKCk7Ci0rCX0KLSsJLyogZG8gdGhlIHNhbWUgZm9yIG11bHRpdGhyZWFkZWQgY2hh Y2hhMjAgYnV0IHdpdGggc3RyY21wICovCi0rCWlmICgoc3RyY21wKHNlbmQsICJjaGFjaGEyMC1w b2x5MTMwNUBvcGVuc3NoLmNvbSIpID09IDApIHx8Ci0rCSAgICAoc3RyY21wKHJlY3YsICJjaGFj aGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSIpID09IDApKSB7Ci0rCQlkZWJ1ZygiU2VyaWFsIHRv IHBhcmFsbGVsIENoYWNoYTIwLXBvbHkxMzA1IGNpcGhlciBzd2FwIik7Ci0rCQlzc2hfcGFja2V0 X3NldF9hdXRoZW50aWNhdGVkKHNzaCk7Ci0rCQlwYWNrZXRfcmVxdWVzdF9yZWtleWluZygpOwot Kwl9Ci0rI2VuZGlmCi0rfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLXN3 aXRjaC5oIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1zd2l0Y2guaAotLS0tIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvY2lwaGVyLXN3aXRjaC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLXN3aXRjaC5oCTIwMjYtMDctMDIgMDA6Mjc6Mjku NzIyNDEwMzQxICswMjAwCi1AQCAtMCwwICsxLDE4IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMp IDIwMTUgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5 LgotKyAqCi0rICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKgot KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5z ZS4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgTUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBz ZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKwotK3Zv aWQgY2lwaGVyX3N3aXRjaCAoc3RydWN0IHNzaCAqKTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNw MS5vcmlnL2NsaWVudGxvb3AuYyBvcGVuc3NoLTEwLjNwMS9jbGllbnRsb29wLmMKLS0tLSBvcGVu c3NoLTEwLjNwMS5vcmlnL2NsaWVudGxvb3AuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMw NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2NsaWVudGxvb3AuYwkyMDI2LTA3LTAyIDAwOjI3 OjI5LjcyMjYwMTQ2MSArMDIwMAotQEAgLTEwMCw2ICsxMDAsNyBAQAotICNpbmNsdWRlICJtYXRj aC5oIgotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAiaG9zdGZpbGUuaCIKLSsjaW5j bHVkZSAibWV0cmljcy5oIgotIAotICNpZmRlZiBHU1NBUEkKLSAjaW5jbHVkZSAic3NoLWdzcy5o IgotQEAgLTE1OCw2ICsxNTksMTAgQEAKLSAKLSBzdGF0aWMgdm9pZCBjbGllbnRfaW5pdF9kaXNw YXRjaChzdHJ1Y3Qgc3NoICpzc2gpOwotIGludAlzZXNzaW9uX2lkZW50ID0gLTE7Ci0raW50CW1l dHJpY3NfaGRyX3JlbW90ZV9mbGFnID0gMDsKLStpbnQJbWV0cmljc19oZHJfbG9jYWxfZmxhZyA9 IDA7Ci0raW50CXJlbW90ZV9ub19wb2xsX2ZsYWcgPSAwOwotK2ludAlsb2NhbF9ub19wb2xsX2Zs YWcgPSAwOwotIAotIC8qIFRyYWNrIGVzY2FwZSBwZXIgcHJvdG8yIGNoYW5uZWwgKi8KLSBzdHJ1 Y3QgZXNjYXBlX2ZpbHRlcl9jdHggewotQEAgLTE4NCw2ICsxODksOCBAQAotIHN0YXRpYyBzdHJ1 Y3QgZ2xvYmFsX2NvbmZpcm1zIGdsb2JhbF9jb25maXJtcyA9Ci0gICAgIFRBSUxRX0hFQURfSU5J VElBTElaRVIoZ2xvYmFsX2NvbmZpcm1zKTsKLSAKLSt2b2lkIGNsaWVudF9yZXF1ZXN0X21ldHJp Y3Moc3RydWN0IHNzaCAqKTsKLSsKLSBzdGF0aWMgdm9pZCBxdWl0X21lc3NhZ2UoY29uc3QgY2hh ciAqZm10LCAuLi4pCi0gICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMSwg MikpKTsKLSAKLUBAIC0xNDYwLDYgKzE0NjcsNyBAQAotIAlkb3VibGUgc3RhcnRfdGltZSwgdG90 YWxfdGltZTsKLSAJaW50IGludGVyYWN0aXZlID0gLTEsIGNoYW5uZWxfZGlkX2VucXVldWUgPSAw LCByOwotIAl1aW50NjRfdCBpYnl0ZXMsIG9ieXRlczsKLSsJdGltZV90IHByZXZpb3VzX3RpbWU7 Ci0gCWludCBjb25uX2luX3JlYWR5LCBjb25uX291dF9yZWFkeTsKLSAJc2lnc2V0X3QgYnNpZ3Nl dCwgb3NpZ3NldDsKLSAKLUBAIC0xNTAzLDYgKzE1MTEsNyBAQAotIAljbGllbnRfcmVwbGVkZ2Uo KTsKLSAKLSAJc3RhcnRfdGltZSA9IG1vbm90aW1lX2RvdWJsZSgpOwotKwlwcmV2aW91c190aW1l ID0gdGltZShOVUxMKTsgLyogZm9yIG1ldHJpY3MgcG9sbGluZyAqLwotIAotIAkvKiBJbml0aWFs aXplIHZhcmlhYmxlcy4gKi8KLSAJbGFzdF93YXNfY3IgPSAxOwotQEAgLTE1NDcsNiArMTU1Niw4 IEBACi0gCX0KLSAKLSAJc2NoZWR1bGVfc2VydmVyX2FsaXZlX2NoZWNrKCk7Ci0rCWlmIChvcHRp b25zLm1ldHJpY3MpCi0rCQljbGllbnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7IC8qIGluaXRpYWwg bWV0cmljcyBwb2xsaW5nICovCi0gCi0gCWlmIChzaWdlbXB0eXNldCgmYnNpZ3NldCkgPT0gLTEg fHwKLSAJICAgIHNpZ2FkZHNldCgmYnNpZ3NldCwgU0lHSFVQKSA9PSAtMSB8fAotQEAgLTE1NTks OCArMTU3MCwyNyBAQAotIAkJZXJyb3JfZigiYnNpZ3NldCBzZXR1cDogJXMiLCBzdHJlcnJvcihl cnJubykpOwotICNlbmRpZgotIAotKwkvKgotKwkgKiBCbG9jayB0ZXJtaW5hdGlvbi9pbmZvIHNp Z25hbHMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWFpbiBsb29wLgotKwkgKiBwcG9sbCgpIGF0 b21pY2FsbHkgcmVzdG9yZXMgdGhlIG9sZCBtYXNrIChvc2lnc2V0KSB3aGlsZSB3YWl0aW5nLAot KwkgKiBzbyBzaWduYWxzIGFyZSBzdGlsbCBkZWxpdmVyZWQgcHJvbXB0bHkgZHVyaW5nIHRoZSBw b2xsLiAgS2VlcGluZwotKwkgKiB0aGVtIGJsb2NrZWQgZHVyaW5nIHRoZSBkYXRhLXByb2Nlc3Np bmcgcGhhc2UgYXZvaWRzIHR3bwotKwkgKiBzaWdwcm9jbWFzayBzeXNjYWxscyBwZXIgaXRlcmF0 aW9uICh+NzZrL3NlYyBkdXJpbmcgYnVsayB0cmFuc2ZlciwKLSsJICogfjUuNiUgb2YgQ1BVIGlu IHByb2ZpbGVzKS4gIFNpZ25hbC1mbGFnIGNoZWNrcyAocXVpdF9wZW5kaW5nLAotKwkgKiBzaWdp bmZvX3JlY2VpdmVkKSBzdGlsbCB3b3JrIGJlY2F1c2UgdGhlIGhhbmRsZXJzIHJ1biBpbnNpZGUK LSsJICogcHBvbGwncyBhdG9taWMgdW5ibG9jayB3aW5kb3cuCi0rCSAqLwotKwlpZiAoc2lncHJv Y21hc2soU0lHX0JMT0NLLCAmYnNpZ3NldCwgJm9zaWdzZXQpID09IC0xKQotKwkJZXJyb3JfZigi YnNpZ3NldCBzaWdwcm9jbWFzazogJXMiLCBzdHJlcnJvcihlcnJubykpOwotKwotIAkvKiBNYWlu IGxvb3Agb2YgdGhlIGNsaWVudCBmb3IgdGhlIGludGVyYWN0aXZlIHNlc3Npb24gbW9kZS4gKi8K LSAJd2hpbGUgKCFxdWl0X3BlbmRpbmcpIHsKLSsJCWlmIChvcHRpb25zLm1ldHJpY3MpIHsKLSsJ CQlpZiAoKHRpbWUoTlVMTCkgLSBwcmV2aW91c190aW1lKSA+PSBvcHRpb25zLm1ldHJpY3NfaW50 ZXJ2YWwpIHsKLSsJCQkJY2xpZW50X3JlcXVlc3RfbWV0cmljcyhzc2gpOwotKwkJCQlwcmV2aW91 c190aW1lID0gdGltZShOVUxMKTsKLSsJCQl9Ci0rCQl9Ci0gCQljaGFubmVsX2RpZF9lbnF1ZXVl ID0gMDsKLSAKLSAJCS8qIFByb2Nlc3MgYnVmZmVyZWQgcGFja2V0cyBzZW50IGJ5IHRoZSBzZXJ2 ZXIuICovCi1AQCAtMTU5NSw4ICsxNjI1LDYgQEAKLSAJCSAqIFdhaXQgdW50aWwgd2UgaGF2ZSBz b21ldGhpbmcgdG8gZG8gKHNvbWV0aGluZyBiZWNvbWVzCi0gCQkgKiBhdmFpbGFibGUgb24gb25l IG9mIHRoZSBkZXNjcmlwdG9ycykuCi0gCQkgKi8KLS0JCWlmIChzaWdwcm9jbWFzayhTSUdfQkxP Q0ssICZic2lnc2V0LCAmb3NpZ3NldCkgPT0gLTEpCi0tCQkJZXJyb3JfZigiYnNpZ3NldCBzaWdw cm9jbWFzazogJXMiLCBzdHJlcnJvcihlcnJubykpOwotIAkJaWYgKHNpZ2luZm9fcmVjZWl2ZWQp IHsKLSAJCQlzaWdpbmZvX3JlY2VpdmVkID0gMDsKLSAJCQljaGFubmVsX3JlcG9ydF9vcGVuKHNz aCwgU1lTTE9HX0xFVkVMX0lORk8pOwotQEAgLTE2MDYsOCArMTYzNCw2IEBACi0gCQljbGllbnRf d2FpdF91bnRpbF9jYW5fZG9fc29tZXRoaW5nKHNzaCwgJnBmZCwgJm5wZmRfYWxsb2MsCi0gCQkg ICAgJm5wZmRfYWN0aXZlLCBjaGFubmVsX2RpZF9lbnF1ZXVlLCAmb3NpZ3NldCwKLSAJCSAgICAm Y29ubl9pbl9yZWFkeSwgJmNvbm5fb3V0X3JlYWR5KTsKLS0JCWlmIChzaWdwcm9jbWFzayhTSUdf U0VUTUFTSywgJm9zaWdzZXQsIE5VTEwpID09IC0xKQotLQkJCWVycm9yX2YoIm9zaWdzZXQgc2ln cHJvY21hc2s6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAKLSAJCWlmIChxdWl0X3BlbmRpbmcp Ci0gCQkJYnJlYWs7Ci1AQCAtMTY2Myw2ICsxNjg5LDE0IEBACi0gCQkJfQotIAkJfQotIAl9Ci0r Ci0rCS8qIFJlc3RvcmUgdGhlIHByZS1sb29wIHNpZ25hbCBtYXNrIG5vdyB0aGF0IHdlIGFyZSBk b25lIHBvbGxpbmcuICovCi0rCWlmIChzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9zaWdzZXQs IE5VTEwpID09IC0xKQotKwkJZXJyb3JfZigib3NpZ3NldCBzaWdwcm9jbWFzazogJXMiLCBzdHJl cnJvcihlcnJubykpOwotKwotKwlpZiAob3B0aW9ucy5tZXRyaWNzKQotKwkJY2xpZW50X3JlcXVl c3RfbWV0cmljcyhzc2gpOyAvKiBmaW5hbCBtZXRyaWNzIHBvbGxpbmcgKi8KLSsKLSAJZnJlZShw ZmQpOwotIAotIAkvKiBUZXJtaW5hdGUgdGhlIHNlc3Npb24uICovCi1AQCAtMjY3Niw2ICsyNzEw LDE2NyBAQAotIAlyZXR1cm4gMTsKLSB9Ci0gCi0rLyogdGFrZSB0aGUgcmVzcG9uc2UgZnJvbSB0 aGUgc2VydmVyIGFuZCBwYXJzZSBvdXQgdGhlIGRhdGEuCi0rICogdGhlIF9jdHggc2hvdWxkIGJl IG51bGwuIEl0J3MganVzdCBoZXJlIGJlY2F1c2UgdGhlIGZvcm1hdAotKyAqIG9mIHRoZSBjYWxs YmFjayBoYW5kbGVyIGV4cGVjdHMgaXQuIExpa2V3aXNlLCBzZXEgaXMKLSsgKiBub3QgdXNlZC4g Ki8KLStzdGF0aWMgdm9pZAotK2NsaWVudF9wcm9jZXNzX3JlcXVlc3RfbWV0cmljcyAoc3RydWN0 IHNzaCAqc3NoLCBpbnQgdHlwZSwgdV9pbnQzMl90IHNlcSwgdm9pZCAqX2N0eCkgewotKwlzdHJ1 Y3QgdGNwX2luZm8gbG9jYWxfdGNwX2luZm87Ci0rCWNvbnN0IHVfY2hhciAqYmxvYjsKLSsJRklM RSAqcmVtZnB0cjsKLSsJRklMRSAqbG9jYWxmcHRyOwotKwljaGFyIHJlbWZpbGVuYW1lWzEwMjRd OwotKwljaGFyIGxvY2FsZmlsZW5hbWVbMTAyNF07Ci0rCXRpbWVfdCBub3c7Ci0rCXN0cnVjdCB0 bSAqaW5mbzsKLSsJY2hhciB0aW1lc3RhbXBbNDBdOwotKwljaGFyICptZXRyaWNzc3RyaW5nID0g TlVMTDsKLSsJc2l6ZV90IHRjcGlfbGVuLCBsZW4gPSAwOwotKwliaW5uICptZXRyaWNzb2JqID0g TlVMTDsKLSsJaW50IHIsIGtlcm5lbF92ZXJzaW9uID0gMDsKLSsKLSsJdGltZSgmbm93KTsKLSsJ aW5mbyA9IGxvY2FsdGltZSgmbm93KTsKLSsJc3RyZnRpbWUodGltZXN0YW1wLCA0MCwgIiVkLSVt LSVZICVIOiVNOiVTIiwgaW5mbyk7Ci0rCi0rCS8qIG1hbGxvYyB0aGUgc3RyaW5nIDFLQiBzaG91 bGQgYmUgbGFyZ2UgZW5vdWdoICovCi0rCW1ldHJpY3NzdHJpbmcgPSBtYWxsb2MoMTAyNCk7Ci0r Ci0rCS8qIGdldCB0aGUgbG9jYWwgc29ja2V0IGluZm9ybWF0aW9uICovCi0rCWludCBzb2NrX2lu ID0gc3NoX3BhY2tldF9nZXRfY29ubmVjdGlvbl9pbihzc2gpOwotKwotKwkvKiB0aGUgdXNlciBj YW4gc3BlY2lmeSBhIG5hbWUvcGF0aCB3aXRoIG9wdGlvbnMubWV0cmljc19wYXRoCi0rCSAqIGJ1 dCBpZiBpdCdzIG5vdCBkZWZpbmVkIHdlJ2xsIHVzZSBhIGRlZmF1bHQgbmFtZS4gSW4gZWl0aGVy IGNhc2UKLSsJICogdGhlIG5hbWUgd2lsbCBoYXZlIGEgc3VmZml4IG9mIGxvY2FsIGZvciB0aGUg bG9jYWwgZGF0YSBhbmQgcmVtb3RlIGZvcgotKwkgKiB0aGUgcmVtb3RlIGRhdGEgKi8KLSsJaWYg KG9wdGlvbnMubWV0cmljc19wYXRoID09IE5VTEwpIHsKLSsJCXNucHJpbnRmKHJlbWZpbGVuYW1l LCAxMDI0LCAiJXMiLCAiLi9zc2hfc3RhY2tfbWV0cmljcy5yZW1vdGUiKTsKLSsJCXNucHJpbnRm KGxvY2FsZmlsZW5hbWUsIDEwMjQsICIlcyIsICIuL3NzaF9zdGFja19tZXRyaWNzLmxvY2FsIik7 Ci0rCX0gZWxzZSB7Ci0rCQlzbnByaW50ZihyZW1maWxlbmFtZSwgMTAyNCwgIiVzLiVzIiwgb3B0 aW9ucy5tZXRyaWNzX3BhdGgsICJyZW1vdGUiKTsKLSsJCXNucHJpbnRmKGxvY2FsZmlsZW5hbWUs IDEwMjQsICIlcy4lcyIsIG9wdGlvbnMubWV0cmljc19wYXRoLCAibG9jYWwiKTsKLSsJfQotKwot KwkvKiBzaG91bGQgYmUgdHlwZSA4MSBhbmQgaWYgaXQncyBub3QgdGhlbiBpdHMgbGlrbGV5IHRo YXQKLSsJKiB0aGUgcmVtb3RlIGRvZXMgbm90IHN1cHBvcnQgcG9sbGluZy4gV2UgY2FuIHN0aWxs IGdldCBsb2NhbCBkYXRhIHRob3VnaAotKwkqLwotKwlpZiAodHlwZSAhPSBTU0gyX01TR19SRVFV RVNUX1NVQ0NFU1MpIHsKLSsJCWlmIChyZW1vdGVfbm9fcG9sbF9mbGFnID09IDApIHsKLSsJCQll cnJvcigiUmVtb3RlIGRvZXMgbm90IHN1cHBvcnQgc3RhY2sgbWV0cmljIHBvbGxpbmcuIExvY2Fs IGRhdGEgb25seS4iKTsKLSsJCQlyZW1vdGVfbm9fcG9sbF9mbGFnID0gMTsKLSsJCX0KLSsJCWdv dG8gbG9jYWxvbmx5OwotKwl9Ci0rCi0rCS8qIG9wZW4gdGhlIGZpbGUgaGFuZGxlIHRvIHdyaXRl IHRoZSByZW1vdGUgZGF0YSovCi0rCXJlbWZwdHIgPSBmb3BlbihyZW1maWxlbmFtZSwgImEiKTsK LSsJaWYgKHJlbWZwdHIgPT0gTlVMTCkKLSsJCWZhdGFsKCJFcnJvciBvcGVuaW5nICVzOiAlcyIs IHJlbWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotKwotKwkvKiByZWFkIHRoZSBlbnRpcmUg cGFja2V0IHN0cmluZyBpbnRvIGJsb2IKLSsJICogYmxvYiBoYXMgdG8gYmUgYSBjb25zdCB1Y2hh ciBhcyB0aGF0J3Mgd2hhdCBzdHJpbmdfZGlyZWN0IGV4cGVjdHMKLSsJICogd2UgY2FzdCBpdCBh cyBhIHZvaWQgZm9yIHRoZSBiaW5uIGZ1bmN0aW9ucyAqLwotKwlzc2hwa3RfZ2V0X3N0cmluZ19k aXJlY3Qoc3NoLCAmYmxvYiwgJmxlbik7Ci0rCWlmIChsZW4gPT0gMCkgewotKwkJLyogcmVjZWl2 ZWQgbm8gZGF0YS4gd2hpY2ggaXMgd2VpcmQgKi8KLSsJCWVycm9yKCJSZWNlaXZlZCBubyByZW1v dGUgbWV0cmljcyBkYXRhLiBDb250aW51aW5nLiIpOwotKwl9Ci0rCi0rCS8qIGdldCB0aGUga2Vy bmVsIHZlcnNpb24gcHJpbnRpbmcgdGhlIGhlYWRlciAqLwotKwlrZXJuZWxfdmVyc2lvbiA9IGJp bm5fb2JqZWN0X2ludDMyKCh2b2lkICopYmxvYiwgImtlcm5lbF92ZXJzaW9uIik7Ci0rCi0rCS8q IGNyZWF0ZSBhIHN0cmluZyBvZiB0aGUgZGF0YSBmcm9tIHRoZSBiaW5uIG9iamVjdCBibG9iICov Ci0rCW1ldHJpY3NfcmVhZF9iaW5uX29iamVjdCgodm9pZCAqKWJsb2IsIG1ldHJpY3NzdHJpbmcp OwotKwotKwkvKiBoYXZlIHdlIHByaW50ZWQgdGhlIGhlYWRlcj8gKi8KLSsJaWYgKG1ldHJpY3Nf aGRyX3JlbW90ZV9mbGFnID09IDApIHsKLSsJCW1ldHJpY3NfcHJpbnRfaGVhZGVyKHJlbWZwdHIs ICJSRU1PVEUgQ09OTkVDVElPTiIsIGtlcm5lbF92ZXJzaW9uKTsKLSsJCW1ldHJpY3NfaGRyX3Jl bW90ZV9mbGFnID0gMTsKLSsJfQotKwlmcHJpbnRmKHJlbWZwdHIsICIlcywgIiwgdGltZXN0YW1w KTsKLSsJZnByaW50ZihyZW1mcHRyLCAiJXNcbiIsIG1ldHJpY3NzdHJpbmcpOwotKwotKwkvKiBj bG9zZSByZW1vdGUgZmlsZSBwb2ludGVyKi8KLSsJZmNsb3NlKHJlbWZwdHIpOwotKwotKwkvKiBn b3QgdGhlIHJlbW90ZSBkYXRhLCBub3cgZ2V0IHRoZSBsb2NhbCAqLwotK2xvY2Fsb25seToKLSsv KiBUQ1BfSU5GTyBpcyBkZWZpbmVkIGluIG1ldHJpY3MuaCovCi0rI2lmICFkZWZpbmVkIFRDUF9J TkZPCi0rCWlmIChsb2NhbF9ub19wb2xsX2ZsYWcgPT0gMCkgewotKwkJZXJyb3IoIkxvY2FsIGhv c3QgZG9lcyBub3Qgc3VwcG9ydCBtZXRyaWMgcG9sbGluZy4gUmVtb3RlIGRhdGEgb25seS4iKTsK LSsJCWxvY2FsX25vX3BvbGxfZmxhZyA9IDE7Ci0rCX0KLSsjZWxzZQotKwkvKiBvcGVuIGZpbGUg aGFuZGxlIGZvciBsb2NhbCBkYXRhICovCi0rCWxvY2FsZnB0ciA9IGZvcGVuKGxvY2FsZmlsZW5h bWUsICJhIik7Ci0rCWlmKGxvY2FsZnB0ciA9PSBOVUxMKQotKwkJZmF0YWwoIkVycm9yIG9wZW5p bmcgJXM6ICVzIiwgbG9jYWxmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSsKLSsJLyogY3Jl YXRlIHRoZSBiaW5uIG9iamVjdCovCi0rCW1ldHJpY3NvYmogPSBiaW5uX29iamVjdCgpOwotKwlp ZiAobWV0cmljc29iaiA9PSBOVUxMKSB7Ci0rCQlmYXRhbCgiQ291bGQgbm90IGNyZWF0ZSBtZXRy aWNzIG9iamVjdCIpOwotKwl9Ci0rCi0rCXRjcGlfbGVuID0gKHNpemVfdClzaXplb2YobG9jYWxf dGNwX2luZm8pOwotKwlpZiAoKHIgPSBnZXRzb2Nrb3B0KHNvY2tfaW4sIElQUFJPVE9fVENQLCBU Q1BfSU5GTywgKHZvaWQgKikmbG9jYWxfdGNwX2luZm8sCi0rCQkJICAgIChzb2NrbGVuX3QgKikm dGNwaV9sZW4pKSAhPSAwKXsKLSsJCWVycm9yKCJDb3VsZCBub3QgcmVhZCB0Y3BfaW5mbyBmcm9t IHNvY2tldCIpOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsKLSsJLyogd2Ugd3JpdGUgYW5kIHJlYWQg dG8gYSBiaW5uIG9iamVjdCBiZWNhdXNlIGl0IGxldHMgdXMKLSsJICogZm9ybWF0IHRoZSBkYXRh IGNvbnNpc3RlbnRseSAqLwotKwltZXRyaWNzX3dyaXRlX2Jpbm5fb2JqZWN0KCZsb2NhbF90Y3Bf aW5mbywgbWV0cmljc29iaik7Ci0rCi0rCS8qIGNyZWF0ZSBhIHN0cmluZyBvZiB0aGUgZGF0YSBm cm9tIHRoZSBiaW5uIG9iamVjdCBtZXRyaWNzb2JqICovCi0rCW1ldHJpY3NfcmVhZF9iaW5uX29i amVjdCgodm9pZCAqKW1ldHJpY3NvYmosIG1ldHJpY3NzdHJpbmcpOwotKwotKwkvKiBnZXQgdGhl IGtlcm5lbCB2ZXJzaW9uIHByaW50aW5nIHRoZSBoZWFkZXIgKi8KLSsJa2VybmVsX3ZlcnNpb24g PSBiaW5uX29iamVjdF9pbnQzMihtZXRyaWNzb2JqLCAia2VybmVsX3ZlcnNpb24iKTsKLSsKLSsJ aWYgKG1ldHJpY3NfaGRyX2xvY2FsX2ZsYWcgPT0gMCkgewotKwkJbWV0cmljc19wcmludF9oZWFk ZXIobG9jYWxmcHRyLCAiTE9DQUwgQ09OTkVDVElPTiIsIGtlcm5lbF92ZXJzaW9uKTsKLSsJCW1l dHJpY3NfaGRyX2xvY2FsX2ZsYWcgPSAxOwotKwl9Ci0rCi0rCWZwcmludGYobG9jYWxmcHRyLCAi JXMsICIsIHRpbWVzdGFtcCk7Ci0rCWZwcmludGYobG9jYWxmcHRyLCAiJXNcbiIsIG1ldHJpY3Nz dHJpbmcpOwotKwlmY2xvc2UgKGxvY2FsZnB0cik7Ci0rI2VuZGlmIC8qIFRDUF9JTkZPICovCi0r b3V0OgotKwlmcmVlKG1ldHJpY3NzdHJpbmcpOwotK30KLSsKLSsvKiBVc2UgdGhlIFNTSDJfTVNH X0dMT0JBTF9SRVFVRVNUIHByb3RvY29sIHRvCi0rICogYXNrIHRoZSBzZXJ2ZXIgdG8gc2VuZCBt ZXRyaWNzIGJhY2sgdG8gdGhlIGNsaWVudC4KLSsgKiB3ZSB1c2UgdGhlIG5vbi1jYW5vbmljYWwg c3RyaW5nIHN0YWNrLW1ldHJpY3NAaHBuc3NoLm9yZwotKyAqIHRvIGluZGljYXRlIHRoZSB0eXBl IG9mIHJlcXVlc3Qgd2Ugd2FudC4gSWYgdGhlIHJlY2VpdmVyIGRvZXNuJ3QKLSsgKiB1bmRlcnN0 YW5kIGl0IHRoZW4gdGhlIHJlc3BvbnNlIGluZGlhY3RlcyBhIGZhaWx1cmUuCi0rICogSSBjYW4g cHJvYmFibHkgZG8gdGhpcyBieSB1c2luZyBjbGludF9pbnB1dF9nbG9iYWxfcmVxdWVzdCBidXQK LSsgKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4KLSsgKi8KLSt2b2lkIGNsaWVu dF9yZXF1ZXN0X21ldHJpY3Moc3RydWN0IHNzaCAqc3NoKSB7Ci0rCWludCByOwotKwotKwlkZWJ1 Z19mKCJBc2tpbmcgc2VydmVyIGZvciBUQ1Agc3RhY2sgbWV0cmljcyIpOwotKwkvKiBjcmVhdGUg YSBwYWtjZXQgb2YgR0xPQkFMX1JFUVVFU1QgdHlwZSAqLwotKwlpZiAoKHIgPSBzc2hwa3Rfc3Rh cnQoc3NoLCBTU0gyX01TR19HTE9CQUxfUkVRVUVTVCkpICE9IDAgfHwKLSsJICAgIC8qIGRlZmlu ZSB0aGUgdHlwZSBvZiBHTE9CQUxfUkVRVUVTVCBtZXNzYWdlICovCi0rCSAgICAociA9IHNzaHBr dF9wdXRfY3N0cmluZyhzc2gsCi0rCSAgICAic3RhY2stbWV0cmljc0BocG5zc2gub3JnIikpICE9 IDAgfHwKLSsJICAgIC8qIGluZGljYXRlIGlmIHdlIHdhbnQgYSByZXNwb25zZS4gMSBmb3IgeWVz IDAgZm9yIG5vICovCi0rCSAgICAociA9IHNzaHBrdF9wdXRfdTgoc3NoLCAxKSkgIT0gMCkKLSsJ CWZhdGFsX2ZyKHIsICJwcmVwYXJlIHN0YWNrIHJlcXVlc3QgZmFpbHVyZSIpOwotKwkvKiBzZW5k IHRoZSBwYWNrZXQgKi8KLSsJaWYgKChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKLSsJCWZh dGFsX2ZyKHIsICJzZW5kIHN0YWNrIHJlcXVlc3QiKTsKLSsJLyogaSBiZWxpZXZlIHRoaXMgaW5k aWNhdGVzIHdoYXQgd2UgYXJlIHRvIHVzZSBmb3IgYSBjYWxsYmFjayAqLwotKwljbGllbnRfcmVn aXN0ZXJfZ2xvYmFsX2NvbmZpcm0oY2xpZW50X3Byb2Nlc3NfcmVxdWVzdF9tZXRyaWNzLCBOVUxM KTsKLSt9Ci0rCi0gc3RhdGljIGludAotIGNsaWVudF9pbnB1dF9nbG9iYWxfcmVxdWVzdChpbnQg dHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gewotQEAgLTI3OTgsNiArMjk5 Myw0MyBAQAotIAotIAlsZW4gPSBzc2hidWZfbGVuKGNtZCk7Ci0gCWlmIChsZW4gPiAwKSB7Ci0r CQkvKiB3ZSBtYXkgYmUgY29ubmVjdGluZyB0byBhIHNlcnZlciB0aGF0IGhhcyBocG4gcHJlZml4 ZWQKLSsJCSAqIGJpbmFyaWVzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gcmV3 cml0ZSBhbnkKLSsJCSAqIHNjcCBjb21tYW5kcyB0byBsb29rIGZvciBocG5zY3AgaW5zdGVhZC4K LSsJCSAqLwotKwkJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX0hQTlNTSF9QUkVGSVgpIHsKLSsJCQlj aGFyICpuZXdfY21kOwotKwkJCW5ld19jbWQgPSBtYWxsb2MobGVuKzQpOwotKwkJCS8qIHJlYWQg dGhlIGV4aXN0aW5nIGNvbW1hbmQgaW50byBhIHRlbXAgYnVmZmVyICovCi0rCQkJc3ByaW50Zihu ZXdfY21kLCAiJXMiLCAoY29uc3QgdV9jaGFyKilzc2hidWZfcHRyKGNtZCkpOwotKwkJCWNvbnN0 IGNoYXIgKnBvczsKLSsJCQkvKiBzZWUgaWYgdGhlIGNvbW1hbmQgc3RhcnRzIHdpdGggc2NwICov Ci0rCQkJcG9zID0gc3Ryc3RyKG5ld19jbWQsICJzY3AiKTsKLSsJCQkvKiBieSBzdWJzdHJhY3Rp bmcgdGhlIHBvaW50ZXIgbmV3X2NtZCBmcm9tIHRoZSBwb2ludGVyCi0rCQkJICogcG9zIHdlIGVu ZCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmVlZGxlIGluIHRoZQotKwkJCSAqIGhheXN0 YWNrLiBJZiBpdCdzIDAgdGhlbiB3ZSBjYW4gbWVzcyB3aXRoIGl0Ci0rCQkJICovCi0rCQkJaWYg KHBvcyAtIG5ld19jbWQgPT0gMCkgewotKwkJCQlkZWJ1Z19mKCJSZXdyaXRpbmcgc2NwIGNvbW1h bmQgZm9yIGhwbnNjcC4iKTsKLSsJCQkJc3ByaW50ZihuZXdfY21kLCAiaHBuJXMiLCAoY29uc3Qg dV9jaGFyKilzc2hidWZfcHRyKGNtZCkpOwotKwkJCQlkZWJ1Z19mKCJDb21tYW5kIHdhczogJXMg YW5kIGlzIG5vdyAlcyIsCi0rCQkJCSAgICAgIChjb25zdCB1X2NoYXIqKXNzaGJ1Zl9wdHIoY21k KSwgbmV3X2NtZCk7Ci0rCQkJCS8qIGZyZWUgdGhlIGV4aXN0aW5nIHNzaGJ1ZiAnY21kJwotKwkJ CQkgKiByZWNyZWF0ZSBpdCBhbmQgdGhlbiB3cml0ZSBvdXIgbmV3X2NtZCBpbnRvCi0rCQkJCSAq IHRoZSBzc2hidWYgc3RydWN0Ci0rCQkJCSAqLwotKwkJCQlzc2hidWZfZnJlZShjbWQpOwotKwkJ CQlpZiAoKGNtZCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCQkJCWZhdGFsKCJzc2hidWZf bmV3IGZhaWxlZCBpbiBzY3AgcmV3cml0ZSIpOwotKwkJCQlzc2hidWZfcHV0ZihjbWQsICIlcyIs IG5ld19jbWQpOwotKwkJCQkvKiB3ZSB1c2UgbGVuIGxhdGVyIG9uIHNvIGRvbid0IGZvcmdldCB0 bwotKwkJCQkgKiBpbmNyZW1lbnQgaXQgYnkgdGhlIG51bWJlciBvZiBuZXcgY2hhcnMgaW4gdGhl Ci0rCQkJCSAqIGNvbW1hbmQKLSsJCQkJICovCi0rCQkJCWxlbiArPSAzOwotKwkJCQlmcmVlKG5l d19jbWQpOwotKwkJCX0KLSsJCX0KLSAJCWlmIChsZW4gPiA5MDApCi0gCQkJbGVuID0gOTAwOwot IAkJaWYgKHdhbnRfc3Vic3lzdGVtKSB7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9j b21wYXQuYyBvcGVuc3NoLTEwLjNwMS9jb21wYXQuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcv Y29tcGF0LmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3No LTEwLjNwMS9jb21wYXQuYwkyMDI2LTA3LTAyIDA3OjUzOjI3LjI1ODUwMjg2OCArMDIwMAotQEAg LTI5LDYgKzI5LDcgQEAKLSAKLSAjaW5jbHVkZSA8c3RkaW50Lmg+Ci0gI2luY2x1ZGUgPHN0ZGxp Yi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0gCi0gI2lu Y2x1ZGUgInhtYWxsb2MuaCIKLUBAIC0xMzYsNiArMTM3LDM1IEBACi0gCQkJc3NoLT5jb21wYXQg PSBjaGVja1tpXS5idWdzOwotIAlpZiAoZm9yYmlkX3NzaF9yc2EpCi0gCQlzc2gtPmNvbXBhdCB8 PSBTU0hfUkhfUlNBU0lHU0hBOwotKwkJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVtb3RlIHNp ZGUgaXMgT3BlblNTSCBhbmQgbm90IEhQTiAqLwotKwkJCS8qIFRPRE86IFNlZSBpZiB3ZSBjYW4g d29yayB0aGlzIGludG8gdGhlIG5ldyBtZXRob2QgZm9yIGJ1ZyBjaGVja3MgKi8KLSsJCQlpZiAo c3Ryc3RyKHZlcnNpb24sICJPcGVuU1NIIikgIT0gTlVMTCkgewotKwkJCQkvKiBjaGVjayBpZiB0 aGUgcmVtb3RlIGlzIGhwbiBhbmQgaWYgdGhlIHZlcnNpb24KLSsJCQkJICogdXNlcyBocG4gcHJl Zml4ZWQgYmluYXJpZXMgKi8KLSsJCQkJY29uc3QgY2hhciAqb3A7Ci0rCQkJCWlmICgob3AgPSBz dHJzdHIodmVyc2lvbiwgImhwbiIpKSAhPSBOVUxMKSB7Ci0rCQkJCQlpbnQgaHBudmVyID0gMDsK LSsJCQkJCXNzaC0+Y29tcGF0IHw9IFNTSF9IUE5TU0g7Ci0rCQkJCQlkZWJ1ZygiUmVtb3RlIGlz IEhQTiBlbmFibGVkIik7Ci0rCQkJCQlpZiAoc3NjYW5mKG9wLCAiaHBuJWQiLCAmaHBudmVyKSA9 PSAxICYmCi0rCQkJCQkgICAgaHBudmVyID49IDE2KSB7Ci0rCQkJCQkJc3NoLT5jb21wYXQgfD0g U1NIX0hQTlNTSF9QUkVGSVg7Ci0rCQkJCQkJZGVidWcoIlJlbW90ZSB1c2VzIEhQTlNTSCBwcmVm aXhlcy4iKTsKLSsJCQkJCX0KLSsJCQkJfQotKwkJCQkvKiBSZXN0cmljdCBhZHZlcnRpc2VkIHdp bmRvdyBmb3Igbm9uLUhQTiBPcGVuU1NIID49IDguOS4gKi8KLSsJCQkJaWYgKCEoc3NoLT5jb21w YXQgJiBTU0hfSFBOU1NIKSkgewotKwkJCQkJY29uc3QgY2hhciAqb3A7Ci0rCQkJCQlpbnQgb21h aiA9IDAsIG9taW4gPSAwOwotKwkJCQkJaWYgKChvcCA9IHN0cnN0cih2ZXJzaW9uLCAiT3BlblNT SF8iKSkgIT0gTlVMTCAmJgotKwkJCQkJICAgIHNzY2FuZihvcCwgIk9wZW5TU0hfJWQuJWQiLCAm b21haiwgJm9taW4pID09IDIgJiYKLSsJCQkJCSAgICAob21haiA+PSA5IHx8IChvbWFqID09IDgg JiYgb21pbiA+PSA5KSkpIHsKLSsJCQkJCQlzc2gtPmNvbXBhdCB8PSBTU0hfUkVTVFJJQ1RfV0lO RE9XOwotKwkJCQkJCWRlYnVnKCJSZXN0cmljdGluZyBhZHZlcnRpc2VkIHdpbmRvdyBzaXplLiIp OwotKwkJCQkJfQotKwkJCQl9Ci0rCQkJfQotKwkJCWRlYnVnKCJzc2gtPmNvbXBhdCBpcyAldSIs IHNzaC0+Y29tcGF0KTsKLSAJCQlyZXR1cm47Ci0gCQl9Ci0gCX0KLWRpZmYgLU51ciBvcGVuc3No LTEwLjNwMS5vcmlnL2NvbXBhdC5oIG9wZW5zc2gtMTAuM3AxL2NvbXBhdC5oCi0tLS0gb3BlbnNz aC0xMC4zcDEub3JpZy9jb21wYXQuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIw MAotKysrIG9wZW5zc2gtMTAuM3AxL2NvbXBhdC5oCTIwMjYtMDctMDIgMDg6NTM6NDUuMjQ4NjU4 MzYzICswMjAwCi1AQCAtNDYsMTIgKzQ2LDEyIEBACi0gLyogI2RlZmluZSB1bnVzZWQJCTB4MDAw MTAwMDAgKi8KLSAvKiAjZGVmaW5lIHVudXNlZAkJMHgwMDAyMDAwMCAqLwotIC8qICNkZWZpbmUg dW51c2VkCQkweDAwMDQwMDAwICovCi0tLyogI2RlZmluZSB1bnVzZWQJCTB4MDAxMDAwMDAgKi8K LSsjZGVmaW5lIFNTSF9IUE5TU0gJCTB4MDAxMDAwMDAgLyogYmFzaWNhbGx5IGEgbm90aWNlIHRo YXQgdGhpcyBpcyBIUE4gYXdhcmUgKi8KLSAjZGVmaW5lIFNTSF9CVUdfRVhURU9GCQkweDAwMjAw MDAwCi0gI2RlZmluZSBTU0hfQlVHX1BST0JFCQkweDAwNDAwMDAwCi0tLyogI2RlZmluZSB1bnVz ZWQJCTB4MDA4MDAwMDAgKi8KLSsjZGVmaW5lIFNTSF9SRVNUUklDVF9XSU5ET1cJMHgwMDgwMDAw MCAvKiByZXN0cmljdCBhZHZlcnRpc2VkIHdpbmRvdyB0byBPcGVuU1NIIGNsaWVudHMgKi8KLSAj ZGVmaW5lIFNTSF9PTERfRk9SV0FSRF9BRERSCTB4MDEwMDAwMDAKLS0vKiAjZGVmaW5lIHVudXNl ZAkJMHgwMjAwMDAwMCAqLwotKyNkZWZpbmUgU1NIX0hQTlNTSF9QUkVGSVgJMHgwMjAwMDAwMCAv KiBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGhwbiBwcmVmaXhlcyBiaW5hcmllcyAqLwotICNkZWZp bmUgU1NIX05FV19PUEVOU1NICQkweDA0MDAwMDAwCi0gI2RlZmluZSBTU0hfQlVHX0RZTkFNSUNf UlBPUlQJMHgwODAwMDAwMAotICNkZWZpbmUgU1NIX0JVR19DVVJWRTI1NTE5UEFECTB4MTAwMDAw MDAKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NvbmZpZ3VyZS5hYyBvcGVuc3NoLTEw LjNwMS9jb25maWd1cmUuYWMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NvbmZpZ3VyZS5hYwky MDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2Nv bmZpZ3VyZS5hYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyMzQ1NzY5NyArMDIwMAotQEAgLTI3NjIs NiArMjc2MiwzOSBAQAotIAkpCi0gZmkKLSAKLSsKLSsjIFRlc3RpbmcgTVBUQ1AgU3VwcG9ydAot KyMgRG9lcyB0aGUgT1Mgc3VwcG9ydCBNUFRDUD8KLSsjIFdlIGRvbid0IHVzZSB0aGlzIGF0IHRo ZSBtb21lbnQKLSsjIGJ1dCBJIGFtIGhvbGRpbmcgaXQgaW4gcmVzcnZlIC1janIgMDQvMDQvMjAy NQotKwlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIE9TIHN1cHBvcnRzIE1QVENQXSkKLSsJ QUNfUlVOX0lGRUxTRSgKLSsJCVtBQ19MQU5HX1BST0dSQU0oW1sKLSsJCSNpbmNsdWRlIDxzdGRp by5oPgotKwkJI2luY2x1ZGUgPHN0ZGxpYi5oPgotKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgotKwkJ I2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKwkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSsJCSNp bmNsdWRlIDxzdGRib29sLmg+Ci0rCQkjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotKwotKwkJXV0s IFtbCi0rCQlpbnQgc29jayA9IC0xOwotKwkJc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NU UkVBTSwgSVBQUk9UT19NUFRDUCk7Ci0rCQlpZiAoc29jayA8IDApIHsKLSsJCSAgIGV4aXQoMSk7 Ci0rCQkgICB9Ci0rCQldXSldLAotKwkJWwotKwkJCUFDX01TR19SRVNVTFQoW3llc10pCi0rCQkJ QUNfREVGSU5FKFtIQVZFX01QVENQXSwgWzFdLAotKwkJCSAgICBbT1MgU3VwcG9ydHMgTVBUQ1Bd KQotKwkJXSwKLSsJCVsKLSsJCQlBQ19NU0dfUkVTVUxUKFtub10pCi0rCQldCi0rCSkKLSsKLSBp ZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm8iID0gInh5ZXMiICYmIFwKLSAgICAgdGVz dCAieCRjaGVja19mb3JfaHB1eF9icm9rZW5fZ2V0YWRkcmluZm8iID0gIngxIjsgdGhlbgotIAlB Q19NU0dfQ0hFQ0tJTkcoW2lmIGdldGFkZHJpbmZvIHNlZW1zIHRvIHdvcmtdKQotQEAgLTMxNzcs OCArMzIxMCw4IEBACi0gCQkJMjAwKikgICAjIExpYnJlU1NMCi0gCQkJCWx2ZXI9YGVjaG8gIiRz c2x2ZXIiIHwgc2VkICdzLy4qbGlicmVzc2wtLy8nYAotIAkJCQljYXNlICIkbHZlciIgaW4KLS0J CQkJMip8MzAwKikgIyAyLngsIDMuMC4wCi0tCQkJCQlBQ19NU0dfRVJST1IoW0xpYnJlU1NMID49 IDMuMS4wIHJlcXVpcmVkIChoYXZlICIkc3NsX3Nob3d2ZXIiKV0pCi0rCQkJCTIqfDMwMCp8MzAx KnwzMDIqfDMwMyp8MzA0KnwzMDYqKSAjIDIueCwgMy4wLjAKLSsJCQkJCUFDX01TR19FUlJPUihb TGlicmVTU0wgPj0gMy43LjAgcmVxdWlyZWQgKGhhdmUgIiRzc2xfc2hvd3ZlciIpXSkKLSAJCQkJ CTs7Ci0gCQkJCSopIDs7CSMgQXNzdW1lIGFsbCBvdGhlciB2ZXJzaW9ucyBhcmUgZ29vZC4KLSAJ CQkJZXNhYwotQEAgLTMxODcsNiArMzIyMCw3IEBACi0gCQkJCSMgT3BlblNTTCAzICYgNDsgd2Ug dXNlIHRoZSAxLjF4IEFQSQotIAkJCQkjIGh0dHBzOi8vb3BlbnNzbC5vcmcvcG9saWNpZXMvZ2Vu ZXJhbC92ZXJzaW9uaW5nLXBvbGljeS5odG1sCi0gCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURP UEVOU1NMX0FQSV9DT01QQVQ9MHgxMDEwMDAwMEwiCi0rCQkJCUFDX0RFRklORShbV0lUSF9PUEVO U1NMM10sIFsxXSwgW1dpdGggT3BlblNTTDNdKQotIAkJCQk7OwotIAkJICAgICAgICAqKQotIAkJ CQlBQ19NU0dfRVJST1IoW1Vua25vd24vdW5zdXBwb3J0ZWQgT3BlblNTTCB2ZXJzaW9uICgiJHNz bF9zaG93dmVyIildKQotQEAgLTMzMDAsNiArMzMzNCwyOSBAQAotIAkJRVZQX0NJUEhFUl9DVFhf c2V0X2l2IFwKLSAJXSkKLSAKLSsJIyBPcGVuU1NMIDMuMCBBUEkKLSsJIyBEb2VzIE9wZW5TU0wg c3VwcG9ydCB0aGUgRVZQX01BQyBmdW5jdGlvbnMgZm9yIFBvbHkxMzA1PwotKwlBQ19NU0dfQ0hF Q0tJTkcoW3doZXRoZXIgT3BlblNTTCBzdXBwb3J0cyBQb2x5MTMwNSBNQUMgRVZQXSkKLSsJQUNf UlVOX0lGRUxTRSgKLSsJCVtBQ19MQU5HX1BST0dSQU0oW1sKLSsJI2luY2x1ZGUgPHN0ZGxpYi5o PgotKwkjaW5jbHVkZSA8c3RkaW8uaD4KLSsJI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCQld XSwgW1sKLSsJCUVWUF9NQUMgKm1hYyA9IEVWUF9NQUNfZmV0Y2goTlVMTCwgInBvbHkxMzA1Iiwg TlVMTCk7Ci0rCQlpZiAobWFjID09IE5VTEwpCi0rCQkgICBleGl0KDEpOwotKwkJXV0pXSwKLSsJ CVsKLSsJCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQotKwkJCUFDX0RFRklORShbT1BFTlNTTF9IQVZF X1BPTFlfRVZQXSwgWzFdLAotKwkJCSAgICBbTGliY3J5cHRvIHN1cHBvcnRzIFBvbHkxMzA1IE1B QyBFVlBdKQotKwkJXSwKLSsJCVsKLSsJCQlBQ19NU0dfUkVTVUxUKFtub10pCi0rCQldCi0rCSkK LSsKLSAJaWYgdGVzdCAieCRvcGVuc3NsX2VuZ2luZSIgPSAieHllcyIgOyB0aGVuCi0gCQlBQ19N U0dfQ0hFQ0tJTkcoW2ZvciBPcGVuU1NMIEVOR0lORSBzdXBwb3J0XSkKLSAJCUFDX0NPTVBJTEVf SUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmln L2RlZmluZXMuaCBvcGVuc3NoLTEwLjNwMS9kZWZpbmVzLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL2RlZmluZXMuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5MjU4ODc4MyArMDIwMAotKysrIG9w ZW5zc2gtMTAuM3AxL2RlZmluZXMuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyMzg4MzM2OSArMDIw MAotQEAgLTk0NCw3ICs5NDQsMTEgQEAKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIFNTSF9JT0JVRlNa Ci0tIyBkZWZpbmUgU1NIX0lPQlVGU1ogODE5MgotKyMgZGVmaW5lIFNTSF9JT0JVRlNaICgzMiox MDI0KQotKyNlbmRpZgotKwotKyNpZm5kZWYgSVBQUk9UT19NUFRDUAotKyNkZWZpbmUgSVBQUk9U T19NUFRDUCAyNjIKLSAjZW5kaWYKLSAKLSAvKgotQEAgLTEwMDAsMyArMTAwNCwxMiBAQAotICNl bmRpZgotIAotICNlbmRpZiAvKiBfREVGSU5FU19IICovCi0rCi0rLyogdXNlZCB0byBlbmFibGUg Y2hlY2tpbmcgbGludXgga2VybmVsIHZlcnNpb25zICovCi0rI2lmIGRlZmluZWQoX19saW51eF9f KSAmJiAhZGVmaW5lZChfX2FscGluZV9fKQotKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0r I2VuZGlmCi0rCi0rI2lmbmRlZiBLRVJORUxfVkVSU0lPTiAvKiBzaG91bGRuJ3QgYmUgbmVjZXNz YXJ5IHRvIGRlZmluZSB0aGlzICovCi0rI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgo YSkgPDwxNikgKyAoKGIpIDw8IDgpICsoYykpCi0rI2VuZGlmCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4zcDEub3JpZy9kaWdlc3QuaCBvcGVuc3NoLTEwLjNwMS9kaWdlc3QuaAotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvZGlnZXN0LmgJMjAyNi0wNy0wMiAwMDoyNzowNi4wOTI1ODg3ODMgKzAyMDAK LSsrKyBvcGVuc3NoLTEwLjNwMS9kaWdlc3QuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNDE3MDYw NyArMDIwMAotQEAgLTI3LDcgKzI3LDggQEAKLSAjZGVmaW5lIFNTSF9ESUdFU1RfU0hBMjU2CTIK LSAjZGVmaW5lIFNTSF9ESUdFU1RfU0hBMzg0CTMKLSAjZGVmaW5lIFNTSF9ESUdFU1RfU0hBNTEy CTQKLS0jZGVmaW5lIFNTSF9ESUdFU1RfTUFYCQk1Ci0rI2RlZmluZSBTU0hfRElHRVNUX05VTEwJ CTUKLSsjZGVmaW5lIFNTSF9ESUdFU1RfTUFYCQk2Ci0gCi0gc3RydWN0IHNzaGJ1ZjsKLSBzdHJ1 Y3Qgc3NoX2RpZ2VzdF9jdHg7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9kaWdlc3Qt b3BlbnNzbC5jIG9wZW5zc2gtMTAuM3AxL2RpZ2VzdC1vcGVuc3NsLmMKLS0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL2RpZ2VzdC1vcGVuc3NsLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4wOTI1ODg3ODMg KzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9kaWdlc3Qtb3BlbnNzbC5jCTIwMjYtMDctMDIgMDA6 Mjc6MjkuNzI0MjU0NTgxICswMjAwCi1AQCAtNjEsNiArNjEsNyBAQAotIAl7IFNTSF9ESUdFU1Rf U0hBMjU2LAkiU0hBMjU2IiwJMzIsCUVWUF9zaGEyNTYgfSwKLSAJeyBTU0hfRElHRVNUX1NIQTM4 NCwJIlNIQTM4NCIsCTQ4LAlFVlBfc2hhMzg0IH0sCi0gCXsgU1NIX0RJR0VTVF9TSEE1MTIsCSJT SEE1MTIiLAk2NCwJRVZQX3NoYTUxMiB9LAotKwl7IFNTSF9ESUdFU1RfTlVMTCwJIk5PTkVNQUMi LAkwLAlFVlBfbWRfbnVsbH0sCi0gCXsgLTEsCQkJTlVMTCwJCTAsCU5VTEwgfSwKLSB9OwotIAot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvRlVORElORy55bWwgb3BlbnNzaC0xMC4zcDEv RlVORElORy55bWwKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL0ZVTkRJTkcueW1sCTE5NzAtMDEt MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvRlVORElORy55 bWwJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjQzOTYxNjcgKzAyMDAKLUBAIC0wLDAgKzEsMTIgQEAK LSsjIFRoZXNlIGFyZSBzdXBwb3J0ZWQgZnVuZGluZyBtb2RlbCBwbGF0Zm9ybXMKLSsKLStnaXRo dWI6cmFwaWVyMSAjIFJlcGxhY2Ugd2l0aCB1cCB0byA0IEdpdEh1YiBTcG9uc29ycy1lbmFibGVk IHVzZXJuYW1lcyBlLmcuLCBbdXNlcjEsIHVzZXIyXQotKyNwYXRyZW9uOiAjIFJlcGxhY2Ugd2l0 aCBhIHNpbmdsZSBQYXRyZW9uIHVzZXJuYW1lCi0rI29wZW5fY29sbGVjdGl2ZTogIyBSZXBsYWNl IHdpdGggYSBzaW5nbGUgT3BlbiBDb2xsZWN0aXZlIHVzZXJuYW1lCi0rI2tvX2ZpOiAjIFJlcGxh Y2Ugd2l0aCBhIHNpbmdsZSBLby1maSB1c2VybmFtZQotKyN0aWRlbGlmdDogIyBSZXBsYWNlIHdp dGggYSBzaW5nbGUgVGlkZWxpZnQgcGxhdGZvcm0tbmFtZS9wYWNrYWdlLW5hbWUgZS5nLiwgbnBt L2JhYmVsCi0rI2NvbW11bml0eV9icmlkZ2U6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIENvbW11 bml0eSBCcmlkZ2UgcHJvamVjdC1uYW1lIGUuZy4sIGNsb3VkLWZvdW5kcnkKLSsjbGliZXJhcGF5 OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBMaWJlcmFwYXkgdXNlcm5hbWUKLSsjaXNzdWVodW50 OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBJc3N1ZUh1bnQgdXNlcm5hbWUKLSsjb3RlY2hpZTog IyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgT3RlY2hpZSB1c2VybmFtZQotKyNjdXN0b206ICMgUmVw bGFjZSB3aXRoIHVwIHRvIDQgY3VzdG9tIHNwb25zb3JzaGlwIFVSTHMgZS5nLiwgWydsaW5rMScs ICdsaW5rMiddCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9oYXBweWV5ZWJhbGxzLmMg b3BlbnNzaC0xMC4zcDEvaGFwcHlleWViYWxscy5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9o YXBweWV5ZWJhbGxzLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NoLTEwLjNwMS9oYXBweWV5ZWJhbGxzLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjQ0ODI5 NTQgKzAyMDAKLUBAIC0wLDAgKzEsMzEzIEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjUg VGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAq Ci0rICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKiAgQXV0aG9y OiBLaW0gTWlobiBLYXBsYW4gKGthcGxhbiBhdCBraW0tbWlobi5jb20pCi0rICoKLSsgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAotKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCi0rICoK LSsgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSsgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSsgKgotKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIE1J VCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OwotKyAqIGlmIG5vdCwgc2VlIGh0dHA6 Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCi0rICoKLSsgKi8KLSsvKiBUaGlzIGlzIGFu IGltcGxlbWVudGF0aW9uIG9mIFJGQyA4MzA1IGJhc2VkIG9uIGEgcGF0Y2gKLSsgKiBzdXBwbGll ZCBieSBLaW0gTWluaCBLYXBsYW4gKGthcGxhbiBhdCBraW0tbWluaC5jb20pLgotKyAqIEluZm9y bWF0aW9uIGFib3V0IFJGQyA4MzA1IGNhbiBiZSBmb3VuZCBhdAotKyAqIGh0dHBzOi8vd3d3LnJm Yy1lZGl0b3Iub3JnL3JmYy9yZmM4MzA1Ci0rICogVGhpcyB2ZXJzaW9uICpkb2VzIG5vdCogcHJv dmlkZSBzdXBwb3J0IGZvcgotKyAqIFNlY3Rpb24gMyB3aGVyZSBhc3ljaHJvbm91cyBwb2xsaW5n IG9mIEROUyBzZXJ2ZXJzCi0rICogaXMgYSBTSE9VTEQuCi0rICogU2VjdGlvbiA0IHJlcXVpcmVz IHNvcnRpbmcgb2YgRE5TIHJlc3VsdHMgYXMgcGVyCi0rICogUkZDIDY3MjQuIFRoaXMgaXMgcHJv dmlkZWQgYnkgdGhlIGdldGFkZHJpbmZvIGNhbGwKLSsgKiBmcm9tIGdjYy4gVGhpcyBtYXkgbm90 IGJlIGF2YWlsYWJsZSB2aWEgbXVzbC4KLSsgKiBJbnRlcmxlYXZpbmcgb2YgYWRkcmVzc2VzIGlz IG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgotKyAqIFNlY3Rpb24gNSBpcyBpbXBsZW1lbnRlZC4K LSsgKiBTZWN0aW9uIDYgaXMgbm90IGltcGxlbWVudGVkIG91dHNpZGUgb2YgZ2V0YWRkcmluZm8K LSsgKiBTZWN0aW9uIDcgaW4gdW5kZXIgY29uc2lkZXJhdGlvbgotKyAqLwotKwotKwotKy8qIE5P VEU6IFRoZXJlIGFyZSBhIGxvdCBvZiBkZWJ1ZyBzdGF0ZW1lbnRzIGluIGhlcmUKLSsgKiBiZWNh dXNlIHdlIGFyZSBzdGlsbCB0cmVhdGluZyB0aGlzIGFzIHNvbWV3aGF0Ci0rICogZXhwZXJpbWVu dGFsLiBBIGZ1dHVyZSB2ZXJzaW9uIHdpbGwgcHJvbW90ZSB0aGlzCi0rICogdG8gc3RhYmxlIGFu ZCB3ZSdsbCByZW1vdmUgYSBsb3Qgb2YgdGhlIGxldmVsIDIKLSsgKiBkZWJ1ZyBzdGF0ZW1lbnRz IHRoZW4uCi0rICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rI2lmZGVmIEhBVkVfU1lT X1RJTUVfSAotKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8c3Rk bGliLmg+Ci0rI2luY2x1ZGUgPG5ldC9pZi5oPgotKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0r I2luY2x1ZGUgPGFycGEvaW5ldC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 dW5pc3RkLmg+Ci0rCi0rI2luY2x1ZGUgImhhcHB5ZXllYmFsbHMuaCIKLSsjaW5jbHVkZSAic3No Y29ubmVjdC5oIgotKyNpbmNsdWRlICJzc2guaCIKLSsjaW5jbHVkZSAibWlzYy5oIgotKyNpbmNs dWRlICJsb2cuaCIKLSsjaW5jbHVkZSAicmVhZGNvbmYuaCIKLSsKLSsvKiB0aGlzIGlzIGZyb20g c3NoY29ubmVjdC5jICovCi0rZXh0ZXJuIGludCBzc2hfY3JlYXRlX3NvY2tldChzdHJ1Y3QgYWRk cmluZm8gKmFpKTsKLSsKLSsvKiBnZXQgdGhlIG9wdGlvbnMgc3RydWN0IGlmIGZvciB0aGUgZGVs YXkgdGltZSAqLwotK2V4dGVybiBPcHRpb25zIG9wdGlvbnM7Ci0rCi0rLyogaGF2ZSB3ZSB0aW1l ZCBvdXQ/ICovCi0rc3RhdGljIGludAotK3RpbWVvdXQoc3RydWN0IHRpbWV2YWwgKnR2LCBpbnQg dGltZW91dF9tcykKLSsgewotKwlpZiAodGltZW91dF9tcyA8PSAwKQotKwkJcmV0dXJuIDA7Ci0r CW1zX3N1YnRyYWN0X2RpZmYodHYsICZ0aW1lb3V0X21zKTsKLSsJcmV0dXJuIHRpbWVvdXRfbXMg PD0gMDsKLSt9Ci0rCi0rLyogdXNlZCB0byBwcm92aWRlIGRlYnVnIG1lc3NhZ2UgaW4gc3NoY29u bmVjdCAqLwotK2NoYXIgZ2xvYmFsX250b3BbTklfTUFYSE9TVF07Ci0rCi0rLyogdXNlZCB0byBw cm92aWRlIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBzdGF0ZW1lbnRzICovCi0rY2hhciAqcmV0dXJu X2ZhbShpbnQgZmFtKSB7Ci0rCWlmIChmYW0gPT0gMTApCi0rCQlyZXR1cm4gIklQdjYiOwotKwll bHNlCi0rCQlyZXR1cm4gIklQdjQiOwotK30KLSsKLSsvKgotKyAqIFJldHVybiAwIGlmIHRoZSBh ZGRyaW5mbyB3YXMgbm90IHRyaWVkLiBSZXR1cm4gLTEgaWYgdXNpbmcgaXQKLSsgKiBmYWlsZWQu IFJldHVybiAxIGlmIGl0IHdhcyB1c2VkLgotKyAqLwotK3N0YXRpYyBpbnQKLStoYXBweV9leWVi YWxsc19pbml0aWF0ZShjb25zdCBjaGFyICpob3N0LCBzdHJ1Y3QgYWRkcmluZm8gKmFpLAotKwkJ CQkgICAgaW50ICp0aW1lb3V0X21zLAotKwkJCQkgICAgc3RydWN0IHRpbWV2YWwgKmluaXRpYXRl LAotKwkJCQkgICAgaW50ICpuZmRzLCBmZF9zZXQgKmZkcywKLSsJCQkJICAgIHN0cnVjdCBhZGRy aW5mbyAqZmRfYWlbXSkKLSt7Ci0rCWludCBvZXJybm8sIHNvY2s7Ci0rCWNoYXIgbnRvcFtOSV9N QVhIT1NUXSwgc3RycG9ydFtOSV9NQVhTRVJWXTsKLSsKLSsJZGVidWcyX2YgKCJIYXBweSBleWVi YWxscyBpbml0aWF0aW5nIik7Ci0rCW1lbXNldChudG9wLCAwLCBzaXplb2YobnRvcCkpOwotKwlt ZW1zZXQoc3RycG9ydCwgMCwgc2l6ZW9mKHN0cnBvcnQpKTsKLSsJLyogSWYgKm5mZHMgIT0gMCB0 aGVuICppbml0aWF0ZSBpcyBpbml0aWFsaXNlZC4gKi8KLSsJaWYgKCpuZmRzICYmCi0rCSAgICAo YWkgPT0gTlVMTCB8fAotKwkgICAgICF0aW1lb3V0KGluaXRpYXRlLCBvcHRpb25zLmhhcHB5X2Rl bGF5KSkpIHsKLSsJCS8qIERvIG5vdCBpbml0aWF0ZSBuZXcgY29ubmVjdGlvbnMgeWV0ICovCi0r CQlkZWJ1ZzJfZiAoIldhaXRpbmcgdG8gaW5pdGlhdGUgbmV3IGNvbm5lY3Rpb24iKTsKLSsJCXJl dHVybiAwOwotKwl9Ci0rCS8qIHRyeWluZyB0byB1c2UgYSBmYW1pbHkgd2UgZG9uJ3Qgc3VwcG9y dCAqLwotKwlpZiAoYWktPmFpX2ZhbWlseSAhPSBBRl9JTkVUICYmIGFpLT5haV9mYW1pbHkgIT0g QUZfSU5FVDYpIHsKLSsJCWRlYnVnMl9mICgiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCIp OwotKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsJZGVi dWcyX2YgKCJSdW5uaW5nIGdldG5hbWVpbmZvIGZvciAlcyBhbmQgJWQiLCBob3N0LCBhaS0+YWlf ZmFtaWx5KTsKLSsJaWYgKGdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwK LSsJCQludG9wLCBzaXplb2YobnRvcCksCi0rCQkJc3RycG9ydCwgc2l6ZW9mKHN0cnBvcnQpLAot KwkJCU5JX05VTUVSSUNIT1NUfE5JX05VTUVSSUNTRVJWKSAhPSAwKSB7Ci0rCQlvZXJybm8gPSBl cnJubzsKLSsJCWVycm9yKCIlczogZ2V0bmFtZWluZm8gZmFpbGVkIiwgX19mdW5jX18pOwotKwkJ ZXJybm8gPSBvZXJybm87Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsJbWVtY3B5KGdsb2JhbF9udG9w LG50b3Asc2l6ZW9mKG50b3ApKTsKLSsJZGVidWcyX2YoIlJGQyA4MzA1IGNvbm5lY3RpbmcgdG8g JS4yMDBzIFslLjEwMHNdIHBvcnQgJXMuIiwKLSsJICAgICAgaG9zdCwgbnRvcCwgc3RycG9ydCk7 Ci0rCWRlYnVnMl9mKCJSRkMgODMwNTogJS4yMDBzIiwgZ2xvYmFsX250b3ApOwotKwkvKiBDcmVh dGUgYSBzb2NrZXQgZm9yIGNvbm5lY3RpbmcgKi8KLSsJc29jayA9IHNzaF9jcmVhdGVfc29ja2V0 KGFpKTsKLSsJaWYgKHNvY2sgPCAwKSB7Ci0rCQkvKiBBbnkgZXJyb3IgaXMgYWxyZWFkeSBvdXRw dXQgKi8KLSsJCWVycm5vID0gMDsKLSsJCXJldHVybiAtMTsKLSsJfQotKwlpZiAoc29jayA+PSBG RF9TRVRTSVpFKSB7Ci0rCQllcnJvcigic29ja2V0IG51bWJlciB0byBiaWcgZm9yIHNlbGVjdDog JWQiLCBzb2NrKTsKLSsJCWNsb3NlKHNvY2spOwotKwkJcmV0dXJuIC0xOwotKwl9Ci0rCWZkX2Fp W3NvY2tdID0gYWk7Ci0rCS8qIHVzaW5nIG5vbmJsb2NraW5nIHNvY2tldHMgd2l0aCBzZWxlY3Qg YWxsb3dzCi0rCSAqIHVzIHRvIGZpcmUgb2ZmIG5ldyBzb2NrZXRzIHdpdGhvdXQgd2FpdGluZyBm b3IgYQotKwkgKiBjb25uZWN0aW9uIHRvIGJlIGVzdGFibGlzaGVkLiBUaGlzIGxldHMgdXMgYXZv aWQKLSsJICogdGhlIHVzZSBvZiB0aHJlYWRzLiBzZXRfbm9uYmxvY2sgaXMgaW4gbWlzYy5jCi0r CSAqIGFuZCB1c2VzIGZuY3RsICovCi0rCXNldF9ub25ibG9jayhzb2NrKTsKLSsJZGVidWcyX2Yo IlJGQyA4MzA1IHByZS1jb25uZWN0IGZvciAlcyIsIHJldHVybl9mYW0oYWktPmFpX2ZhbWlseSkp OwotKwlpZiAoY29ubmVjdChzb2NrLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCAm JgotKwkgICAgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKLSsJCWVycm9yKCJjb25uZWN0IHRvIGFk ZHJlc3MgJXMgcG9ydCAlczogJXMiLAotKwkJICAgICAgbnRvcCwgc3RycG9ydCwgc3RyZXJyb3Io ZXJybm8pKTsKLSsJCWVycm5vID0gMDsKLSsJCWNsb3NlKHNvY2spOwotKwkJcmV0dXJuIC0xOwot Kwl9Ci0rCWRlYnVnX2YoIlJGQyA4MzA1IHBvc3QgY29ubmVjdCBmb3IgJXMiLCByZXR1cm5fZmFt KGFpLT5haV9mYW1pbHkpKTsKLSsJbW9ub3RpbWVfdHYoaW5pdGlhdGUpOwotKwlGRF9TRVQoc29j aywgZmRzKTsKLSsJKm5mZHMgPSBNQVhJTVVNKCpuZmRzLCBzb2NrICsgMSk7Ci0rCXJldHVybiAx OwotK30KLSsKLStzdGF0aWMgaW50Ci0raGFwcHlfZXllYmFsbHNfcHJvY2VzcyhpbnQgKm5mZHMs IGZkX3NldCAqZmRzLAotKwkJCQkgICBzdHJ1Y3QgYWRkcmluZm8gKmZkX2FpW10sCi0rCQkJCSAg IGludCByZWFkeSwgZmRfc2V0ICp3ZmRzKQotK3sKLSsJc29ja2xlbl90IG9wdGxlbjsKLSsJaW50 IHNvY2ssIG9wdHZhbCA9IDA7Ci0rCWNoYXIgbnRvcFtOSV9NQVhIT1NUXSwgc3RycG9ydFtOSV9N QVhTRVJWXTsKLSsKLSsJZGVidWcyX2YoIlByb2Nlc3NpbmcgUkZDIDgzMDUgY29ubmVjdGlvbnMi KTsKLSsJZm9yIChzb2NrID0gKm5mZHMgLSAxOyByZWFkeSA+IDAgJiYgc29jayA+PSAwOyBzb2Nr LS0pIHsKLSsJCWRlYnVnMl9mKCJSRkMgODMwNTogUHJvY2Vzc2luZyBmb3IgJXM6ICVkIiwgcmV0 dXJuX2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSwgc29jayk7Ci0rCQlpZiAoRkRfSVNTRVQo c29jaywgd2ZkcykpIHsKLSsJCQlkZWJ1ZzJfZigiUkZDIDgzMDU6IEZEX0lTU0VUIHRydWUgZm9y ICVkIiwgc29jayk7Ci0rCQkJcmVhZHktLTsKLSsJCQlvcHRsZW4gPSBzaXplb2Yob3B0dmFsKTsK LSsJCQlkZWJ1Z19mKCJSRkMgODMwNTogb3B0dmFsIGlzICVkIGZvciAlZCIsIG9wdHZhbCwgc29j ayk7Ci0rCQkJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fRVJST1IsCi0rCQkJ CSAgICAgICAmb3B0dmFsLCAmb3B0bGVuKSA8IDApIHsKLSsJCQkJb3B0dmFsID0gZXJybm87Ci0r CQkJCWVycm9yKCJnZXRzb2Nrb3B0IGZhaWxlZDogJXMiLAotKwkJCQkgICAgICBzdHJlcnJvcihl cnJubykpOwotKwkJCX0gZWxzZSBpZiAob3B0dmFsICE9IDApIHsKLSsJCQkJZGVidWdfZigiUkZD IDgzMDU6IENvcHlpbmcgZGF0YSBmb3IgJWQgb24gJXMiLCBvcHR2YWwsIHJldHVybl9mYW0oZmRf YWlbc29ja10tPmFpX2ZhbWlseSkpOwotKwkJCQltZW1zZXQobnRvcCwgMCwgc2l6ZW9mKG50b3Ap KTsKLSsJCQkJbWVtc2V0KHN0cnBvcnQsIDAsIHNpemVvZihzdHJwb3J0KSk7Ci0rCQkJCWlmIChn ZXRuYW1laW5mbyhmZF9haVtzb2NrXS0+YWlfYWRkciwKLSsJCQkJCQlmZF9haVtzb2NrXS0+YWlf YWRkcmxlbiwKLSsJCQkJCQludG9wLCBzaXplb2YobnRvcCksCi0rCQkJCQkJc3RycG9ydCwgc2l6 ZW9mKHN0cnBvcnQpLAotKwkJCQkJCU5JX05VTUVSSUNIT1NUfE5JX05VTUVSSUNTRVJWKSAhPSAw KQotKwkJCQkJZXJyb3IoImNvbm5lY3QgZmluYWxseSBmYWlsZWQ6ICVzIiwKLSsJCQkJCSAgICAg IHN0cmVycm9yKG9wdHZhbCkpOwotKwkJCQllbHNlCi0rCQkJCQllcnJvcigiY29ubmVjdCB0byBh ZGRyZXNzICVzIHBvcnQgJXMgZmluYWxseTogJXMiLAotKwkJCQkJICAgICAgbnRvcCwgc3RycG9y dCwgc3RyZXJyb3Iob3B0dmFsKSk7Ci0rCQkJfQotKwkJCUZEX0NMUihzb2NrLCBmZHMpOwotKwkJ CXdoaWxlICgqbmZkcyA+IDAgJiYgISBGRF9JU1NFVCgqbmZkcyAtIDEsIGZkcykpCi0rCQkJCS0t Km5mZHM7Ci0rCQkJaWYgKG9wdHZhbCA9PSAwKSB7Ci0rCQkJCWRlYnVnX2YoIlJGQyA4MzA1OiB1 bnNldHRpbmcgbm9uYmxvY2sgZm9yICVzIG9uICVkIiwKLSsJCQkJICAgIHJldHVybl9mYW0oZmRf YWlbc29ja10tPmFpX2ZhbWlseSksIHNvY2spOwotKwkJCQl1bnNldF9ub25ibG9jayhzb2NrKTsK LSsJCQkJcmV0dXJuIHNvY2s7Ci0rCQkJfQotKwkJCWNsb3NlKHNvY2spOwotKwkJCWVycm5vID0g b3B0dmFsOwotKwkJfQotKwl9Ci0rCXJldHVybiAtMTsKLSt9Ci0rCi0raW50Ci0raGFwcHlfZXll YmFsbHMoY29uc3QgY2hhciAqIGhvc3QsIHN0cnVjdCBhZGRyaW5mbyAqYWksCi0rCQkJICAgc3Ry dWN0IHNvY2thZGRyX3N0b3JhZ2UgKmhvc3RhZGRyLCBpbnQgKnRpbWVvdXRfbXMpCi0rewotKwlz dHJ1Y3QgYWRkcmluZm8gKmZkX2FpW0ZEX1NFVFNJWkVdOyAvKiAxMDI0ICovCi0rCXN0cnVjdCB0 aW1ldmFsIGluaXRpYXRlX3R2LCBzdGFydF90diwgc2VsZWN0X3R2LCAqdHY7Ci0rCWZkX3NldCBm ZHMsIHdmZHM7Ci0rCWludCByZXMsIG9lcnJubywgZGlmZiwgZGlmZjAsIG5mZHMgPSAwLCBzb2Nr ID0gLTE7Ci0rCi0rCWRlYnVnX2YoIlN0YXJ0aW5nIFJGQyA4MzA1L0hhcHB5IEV5ZWJhbGxzIGNv bm5lY3Rpb24iKTsKLSsKLSsJRkRfWkVSTygmZmRzKTsKLSsJaWYgKCp0aW1lb3V0X21zID4gMCkg LyogZGVmYXVsdCB2YWx1ZSBvZiBubyB0aW1lb3V0IC0gdXNlIFRDUCBkZWZhdWx0IGluc3RlYWQg Ki8KLSsJCW1vbm90aW1lX3R2KCZzdGFydF90dik7IC8qIG1vbm90aW1lX3R2IGlzIGluIG1pc2Mu YyAqLwotKwotKwkvKiBydW4gdGhyb3VnaCBwb3RlbnRpYWxzIHVubGVzcyB3ZSBoYXZlIHRpbWVk IG91dCAqLwotKwkvKiB0aW1lb3V0X21zIGJlaW5nIHRoZSB1c2VyIGRlZmluZWQgY29ubmVjdGlv biB0aW1lb3V0IGlmCi0rCSAqIHRoZXkgYXJlbid0IHVzaW5nIHRoZSB0Y3AgdGltZW91dCAqLwot Kwl3aGlsZSAoKGFpICE9IE5VTEwgfHwgbmZkcyA+IDApICYmCi0rCSAgICAgICAhIHRpbWVvdXQo JnN0YXJ0X3R2LCAqdGltZW91dF9tcykpIHsKLSsJCS8qIHNldCB1cCB0aGUgc29ja2V0cyAqLwot KwkJcmVzID0gaGFwcHlfZXllYmFsbHNfaW5pdGlhdGUoaG9zdCwgYWksCi0rCQkgICAgIHRpbWVv dXRfbXMsICZpbml0aWF0ZV90diwgJm5mZHMsICZmZHMsIGZkX2FpKTsKLSsJCWlmIChyZXMgIT0g MCkKLSsJCQlhaSA9IGFpLT5haV9uZXh0OwotKwkJaWYgKHJlcyA9PSAtMSkKLSsJCQljb250aW51 ZTsKLSsJCXR2ID0gTlVMTDsKLSsKLSsJCS8qIHRoaXMgaXMganVzdCB0byBkZXRlcm1pbmUgdGhl IHBhdXNlIGJldHdlZW4KLSsJCSAqIGNhbGxzIHRvIHNlbGVjdC4gKi8KLSsgIAkJaWYgKGFpICE9 IE5VTEwgfHwgKnRpbWVvdXRfbXMgPiAwKSB7Ci0rCQkJZGVidWcyX2YgKCJSRkMgODMwNTogSW4g cGF1c2UuLi4iKTsKLSsJCQl0diA9ICZzZWxlY3RfdHY7Ci0rCQkJaWYgKGFpICE9IE5VTEwpIHsK LSsJCQkJZGlmZiA9IG9wdGlvbnMuaGFwcHlfZGVsYXk7Ci0rCQkJCW1zX3N1YnRyYWN0X2RpZmYo JmluaXRpYXRlX3R2LCAmZGlmZik7Ci0rCQkJCWlmICgqdGltZW91dF9tcyA+IDApIHsKLSsJCQkJ CWRpZmYwID0gKnRpbWVvdXRfbXM7Ci0rCQkJCQltc19zdWJ0cmFjdF9kaWZmKCZzdGFydF90diwg JmRpZmYwKTsKLSsJCQkJCWRpZmYgPSBNSU5JTVVNKGRpZmYsIGRpZmYwKTsKLSsJCQkJfQotKwkJ CX0gZWxzZSB7Ci0rCQkJCWRpZmYgPSAqdGltZW91dF9tczsKLSsJCQkJbXNfc3VidHJhY3RfZGlm Zigmc3RhcnRfdHYsICZkaWZmKTsKLSsJCQl9Ci0rCQkJdHYtPnR2X3NlYyA9IGRpZmYgLyAxMDAw OwotKwkJCXR2LT50dl91c2VjID0gKGRpZmYgJSAxMDAwKSAqIDEwMDA7Ci0rCQl9Ci0rCi0rCQkv KiBjcmVhdGUgYSB3cml0ZWFibGUgc2V0IG9mIGZpbGUgZGVzY3JpcHRvcnMgKi8KLSsJCXdmZHMg PSBmZHM7Ci0rCQkvKiBzZWxlY3Qgd2lsbCBwYXVzZSBmb3IgdGltZSB0diBkZXRlcm1pbmVkIGJ5 IHRoZSBhYm92ZQotKwkJICogdGltaW5nIGNhY3VsYXRpb25zICovCi0rCQlkZWJ1ZzJfZigiUkZD IDgzMDU6IFN0YXJ0aW5nIHNlbGVjdCIpOwotKwkJcmVzID0gc2VsZWN0KG5mZHMsIE5VTEwsICZ3 ZmRzLCBOVUxMLCB0dik7Ci0rCQlkZWJ1ZzJfZigiUkZDIDgzMDU6IExlYXZpbmcgc2VsZWN0Iik7 Ci0rCi0rCQkvKiBwcmVzZXJ2ZSBhbnkgZXJyb3JzICovCi0rCQlvZXJybm8gPSBlcnJubzsKLSsJ CWlmIChyZXMgPCAwKSB7Ci0rCQkJZXJyb3IoInNlbGVjdCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3Io ZXJybm8pKTsKLSsJCQllcnJubyA9IG9lcnJubzsKLSsJCQljb250aW51ZTsKLSsJCX0KLSsJCS8q IHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHNvY2tldHMgKi8KLSsJCWRlYnVnMl9mICgiUkZDIDgzMDU6 IFByb2Nlc3NpbmcgaGFwcHkgZXllYmFsbHMgZmRzIik7Ci0rCQlzb2NrID0gaGFwcHlfZXllYmFs bHNfcHJvY2VzcygmbmZkcywgJmZkcywgZmRfYWksCi0rCQkJCQkJCSAgcmVzLCAmd2Zkcyk7Ci0r CQlpZiAoc29jayA+PSAwKSB7Ci0rCQkJZGVidWdfZiAoIlJGQyA4MzA1IC8gSGFwcHkgRXllYmFs bHMgY29ubmVjdGVkIik7Ci0rCQkJLyogd2UgaGF2ZSBhIGNvbm5lY3Rpb24gKi8KLSsJCQltZW1j cHkoaG9zdGFkZHIsIGZkX2FpW3NvY2tdLT5haV9hZGRyLAotKwkJCSAgICAgICBmZF9haVtzb2Nr XS0+YWlfYWRkcmxlbik7Ci0rCQkJYnJlYWs7Ci0rCQl9Ci0rCQlkZWJ1Z19mKCJSRkMgODMwNTog UmVzdGFydGluZyB3aGlsZSBsb29wLiIpOwotKwl9Ci0rCW9lcnJubyA9IGVycm5vOwotKwkvKiBj bG9zZSBvdGhlciBjb25uZWN0aW9uIGF0dGVtcHRzL3NvY2tldHMgKi8KLSsJZGVidWcyX2YoIlJG QyA4MzA1OiBORkRTIGlzICVkIiwgbmZkcyk7Ci0rCXdoaWxlIChuZmRzLS0gPiAwKSB7Ci0rCQlk ZWJ1ZzJfZigiUkZDIDgzMDU6IFJ1bm5pbmcgRkRfSVNTRVQgb24gJWQiLCBuZmRzKTsKLSsJCWlm IChGRF9JU1NFVChuZmRzLCAmZmRzKSkKLSsJCQljbG9zZShuZmRzKTsKLSsJfQotKwkvKiB3ZSB0 aW1lZCBvdXQgd2l0aCBubyB2YWxpZCBjb25uZWN0aW9ucyAqLwotKwlpZiAodGltZW91dCgmc3Rh cnRfdHYsICp0aW1lb3V0X21zKSkKLSsJCWVycm5vID0gRVRJTUVET1VUOwotKwllbHNlCi0rCQll cnJubyA9IG9lcnJubzsKLSsJcmV0dXJuIHNvY2s7Ci0rfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAu M3AxLm9yaWcvaGFwcHlleWViYWxscy5oIG9wZW5zc2gtMTAuM3AxL2hhcHB5ZXllYmFsbHMuaAot LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvaGFwcHlleWViYWxscy5oCTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvaGFwcHlleWViYWxscy5oCTIw MjYtMDctMDIgMDA6Mjc6MjkuNzI0NTQzMzM4ICswMjAwCi1AQCAtMCwwICsxLDIzIEBACi0rLyoK LSsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2ll IE1lbGxvbiBVbml2ZXJzaXR5LgotKyAqCi0rICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBp ZXJAcHNjLmVkdT4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBNSVQgTGljZW5zZS4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotKyAqIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWSBvcgotKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh cnk7Ci0rICogaWYgbm90LCBzZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4K LSsgKgotKyAqLwotKy8qCi0rICogUkZDIDgzMDUgSGFwcHkgRXllYmFsbHMgVmVyc2lvbiAyOiBC ZXR0ZXIgQ29ubmVjdGl2aXR5IFVzaW5nIENvbmN1cnJlbmN5Ci0rICoKLSsgKi8KLSsKLStpbnQg aGFwcHlfZXllYmFsbHMoY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiwKLSsJCSAgIHN0 cnVjdCBzb2NrYWRkcl9zdG9yYWdlICosIGludCAqKTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNw MS5vcmlnL0hQTi1SRUFETUUgb3BlbnNzaC0xMC4zcDEvSFBOLVJFQURNRQotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvSFBOLVJFQURNRQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2gtMTAuM3AxL0hQTi1SRUFETUUJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjQ2 MjI1NDcgKzAyMDAKLUBAIC0wLDAgKzEsMjAwIEBACi0rTm90ZXM6Ci0rCi0rRklQUyBNb2RlIGFu ZCBQYXJhbGxlbCBDaXBoZXJzIGluIDE4LjcuMQotK1VzaW5nIEhQTi1TU0ggaW4gb3BlcmF0aW5n IHN5c3RlbXMgd29ya2luZyBpbiBGSVBTIG1vZGUgKGUuZy4gUkhFTCB3aXRoCi0rRklQUyBlbmFi bGVkKSBwcmVjbHVkZSB0aGUgdXNlIG9mIHBhcmFsbGVsIGNpcGhlcnMuIFRoaXMgaXMgYmVjYXVz ZQotK3RoZSBwYXJhbGxlbCBBRVMtQ1RSIGltcGxlbWVudGF0aW9uIGlzIG5vdCBGSVBTIGNlcnRp ZmllZCBhbmQgd2lsbCBjYXVzZSBGSVBTCi0rdG8gZXhpdCB3aXRoIGFuIGVycm9yIHdoZW4gbG9h ZGVkLiBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyYWxsZWwgQ2hhQ2hhMjAgY2lwaGVyCi0rdGhlIGFs Z29yaXRobSBpdHNlbGYgaGFzIG5vdCBiZWVuIEZJUFMgY2VydGlmaWVkIGFuZCBubyBpbXBsZW1l bnRhdGlvbiBvZgotK0NoYUNoYTIwIHNob3VsZCBiZSBhbGxvd2VkIGluIEZJUFMgbW9kZS4gV2Ug c3VnZ2VzdCB0aGUgdXNlIG9mIHRoZSBBRVMtR0NNCi0rY2lwaGVyIHdoZW4gb3BlcmF0aW5nIHVu ZGVyIEZJUFMgbW9kZSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4gCi0rCi0rSGFwcHkgRXllYmFs bHMgU3VwcG9ydCBpbiAxOC43LjEgCi0rSGFwcHkgRXllYmFsbHMgKFJGQyA4MzA1KSBpcyBmb3Ig dXNlIG9uIGR1YWwgc3RhY2sgc3lzdGVtcyBtZWFuaW5nIHRoYXQgdGhleSBoYXZlIGJvdGggCi0r SVB2NCBhbmQgSVB2NiBUQ1Agc3RhY2tzLiBXaGVuIGVuYWJsZWQgdGhpcyBvcHRpb24gd2lsbCB0 cnkgdG8gY29ubmVjdCB0byB0aGUKLSt0YXJnZXQgb3ZlciBib3RoIElQdjQgYW5kIElQdjYgd2l0 aCBwcmVmZXJlbmNlIGdpdmVuIHRvIElQdjYuIFRoZSBmaXJzdCBjb25uZWN0aW9uIAotK3RoYXQg Y29tcGxldGVzIHN1Y2Nlc3NmdWxseSB3aWxsIGJlIHVzZWQuIEFueSBvdXRzdGFuZGluZyBjb25u ZWN0aW9uIGF0dGVtcHRzIHdpbGwKLStiZSBjbG9zZWQuIEFzIG9mIHZlcnNpb24gMTguNy4xIHRo aXMgb3B0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIHNvbWV3aGF0IGV4cGVyaW1lbnRhbC4KLSsK LSt1c2FnZToKLSstb0hhcHB5RXllcz1bWWVzfE5vXSB3aWxsIGVuYWJsZSBIYXBweSBFeWViYWxs cy4gVGhlIGRlZmF1bHQgaXMgbm8uIAotKy1vSGFwcHlEZWxheT1bTl0gd2hlcmUgTiBpcyBhIHBv c2l0aXZlIGludGVnZXIgZXhwcmVzc2VkIGluIG1pbGxpc2Vjb25kcy4KLSsgICAgICAgICAgICAg ICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDI1MG1zIGlzIHN1Z2dlc3RlZCBieSBSRkMgODMwNS4K LSsKLStNUFRDUCBTdXBwb3J0IGluIDE4LjcuMDoKLStNdWx0aXBhdGggVENQIGlzIG5vdyBhdmFp bGFibGUgYXMgYSBydW50aW1lIG9wdGlvbiBmb3IgSFBOLVNTSC4gTVBUQ1AKLStpcyBhdmFpbGFi bGUgb25seSBvbiBMaW51eCBhbmQgTWFjIE9TWCBvcGVyYXRpbmcgc3lzdGVtcy4gVXNpbmcgTVBU Q1Agb24gYSBzeXN0ZW0gdGhhdAotK2RvZXNuJ3Qgc3VwcG9ydCBpdCB3aWxsIHJlc3VsdCBpbiBh IG5vdGljZSBhbmQgZmFpbHVyZS4gVGhlIHVzZSBjYXNlcyBmb3IgTVBUQ1AgaW5jbHVkZQotK3Nl YW1sZXNzIGhhbmRvdmVycyB3aGVuIGNoYW5naW5nIG5ldHdvcmtzIGFuZCBhZ2dyZWdhdGluZyBt dWx0aXBsZSBpbnRlcmZhY2VzIHRvIGltcHJvdmUKLSthdmFpbGFibGUgYmFuZHdpZHRoLiBBcyBv ZiAxOC43LjAgdGhpcyBvcHRpb24gc2hvdWxkIGJlIGNvbnNpZGVyZWQgc29tZXdoYXQgZXhwZXJp bWVudGFsLgotKwotK1VzYWdlOgotKy1vVXNlTVBUQ1A9W1llc3xOb10gd2lsbCBlbmFibGUgTVBU Q1AuIFRoZSBkZWZhdWx0IGlzIG5vLgotKwotK0xpYnJlU1NMIFN1cHBvcnQ6Ci0rQ2hhbmdlcyBp biBMaWJyZVNTTCB2ZXJzaW9uIDMuNSBhbmQgMy42IHByZXZlbnQgdGhlIHVzZSBvZiB0aGUgdGhy ZWFkZWQgQUVTIENUUiBjaXBoZXIuCi0rSW4gdGhvc2UgY2FzZXMgSFBOU1NIIHdpbGwgZmFsbGJh Y2sgdG8gdGhlIHNlcmlhbCB2ZXJzaW9uIG9mIHRoZSBBRVMgQ1RSIGNpcGhlci4gQSB3YXJuaW5n Ci0raXMgcHJpbnRlZCB0byBzdGRlcnIuCi0rCi0rQXV0b21hdGljIFBvcnQgRmFsbGJhY2sgKGlu IHZlcnNpb24gMTd2MykKLStUaGUgaHBuc3NoIGNsaWVudCBub3cgdXNlcyBUQ1AgcG9ydCAyMjIy IHRvIGNvbm5lY3QgYXV0b21hdGljYWxseSBhcyB0aGlzIGlzIHRoZQotK2RlZmF1bHQgaHBuc3No ZCBwb3J0LiBIb3dldmVyLCB3ZSB1bmRlcnN0YW5kIHRoYXQgbWFueSB1c2VycyB3aWxsIGJlIGVu ZCB1cCBjb25uZWN0aW5nCi0rc3RhbmRhcmQgU1NIIHNlcnZlcnMgb24gcG9ydCAyMi4gVG8gbWFr ZSB0aGUgZWFzaWVyIGZvciB1c2VycyB0aGUgY2xpZW50IHdpbGwgZmFsbCBiYWNrIHRvCi0rcG9y dCAyMiBpbiB0aGUgZXZlbnQgdGhhdCB0aGVyZSBpcyBubyBocG5zc2ggc2VydmVyIHJ1bm5pbmcg b24gcG9ydCAyMjIyLiBUaGUgYmVoYXZpb3VyIGNhbgotK2JlIG1vZGlmZWQgYXMgZm9sbG93czoK LSstb0ZhbGxiYWNrPVt5ZXN8bm9dIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgcG9ydCBmYWxsYmFj ay4gRGVmYXVsdCBpcyB5ZXMuCi0rLW9GYWxsYmFja1BvcnQ9W05dIHdoZXJlIE4gaXMgdGhlIHBv cnQgbnVtYmVyIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGZhbGwgYmFjay4KLSsgICAgRGVmYXVs dCBpcyAyMi4KLSsKLStUQ1BfSU5GTyBNZXRyaWNzCi0rVGhpcyBmZWF0dXJlcyBhbGxvd3MgdGhl IGNsaWVudCB0byByZXF1ZXN0IHRjcCBuZXR3b3JraW5nIGluZm9ybWF0aW9uIGZyb20gdGhlCi0r VENQX0lORk8gc3RydWN0LiBUaGlzIGluY2x1ZGVzIGRhdGEgb24gcmV0cmFuc21pdHMsIHJvdW5k IHRyaXAgdGltZSwgbG9zdCBwYWNrZXRzLAotK2RhdGEgdHJhbnNmZXJyZWQsIGFuZCB0aGUgbGlr ZS4gVGhlIG1ldHJpY3MgYXJlIHBvbGxlZCBwZXJpb2RpY2FsbHkgdGhyb3VnaCB0aGUKLStsaWZl IG9mIHRoZSBjb25uZWN0aW9uLiBCeSBkZWZhdWx0IHRoaXMgaXMgZXZlcnkgNSBzZWNvbmRzIGJ1 dCB1c2VycyBjYW4gcGljayBkaWZmZXJlbnQKLStwb2xsaW5nIHBlcmlvZHMuIFRoZSByZXN1bHRp bmcgZGF0YSBpcyBzdG9yZWQgaW4gdHdvIGRpc3RpbmN0IGZpbGVzOyBvbmUgZm9yIGxvY2FsCi0r bWV0cmljcyBhbmQgb25lIGZvciByZW1vdGUgbWV0cmljcy4gUmVtb3RlIG1ldHJpY3MgYXJlIG9u bHkgYXZhaWxhYmxlIGlmIHRoZSByZW1vdGUKLStzdXBwb3J0cyB0aGlzIGZlYXR1cmUuIFRoaXMg ZmVhdHVyZSB3aWxsICpub3QqIGRpYWdub3NlIGEgcG9vcmx5IHBlcmZvcm1pbmcgY29ubmVjdGlv bgotK2J1dCBtYXkgcHJvdmlkZSBpbnNpZ2h0IGludG8gd2hhdCBpcyBoYXBwZW5pbmcgZHVyaW5n IHRoZSBjb25uZWN0aW9uLgotKwotK1VzYWdlOgotKy1vTWV0cmljcz1beWVzfG5vXSB3aWxsIGVu YWJsZSBtZXRyaWNzIHBvbGxpbmcuIERlZmF1bHQ6IE5vLgotKy1vTWV0cmljc0ludGVydmFsPVtO XSB3aGVyZSBOIGlzIHRoZSBwb2xsaW5nIHBlcmlvZCBpbiBzZWNvbmRzLiBEZWZhdWx0OiA1IHNl Y29uZHMuCi0rLW9NZXRyaWNzUGF0aD1bL2ZpbGVwYXRoL2ZpbGVuYW1lXSBpcyB0aGUgbmFtZSBv ZiB0aGUgZmlsZSB3aGVyZSB0aGUgcmVtb3RlIGFuZAotKyAgICBsb2NhbCBkYXRhIHdpbGwgYmUg c3RvcmVkLiBEZWZhdWx0OiAuL3NzaF9zdGFja19tZXRyaWNzLltsb2NhbHxyZW1vdGVdLgotKyAg ICBBbnkgb3RoZXIgb3B0aW9uIGNob3NlbiBieSB0aGUgdXNlciB3aWxsIGhhdmUgYSAubG9jYWwg b3IgLnJlbW90ZSBzdWZmaXggYXBwZW5kZWQgdG8gaXQuCi0rCi0rVGhlIG51bWJlciBvZiBpbnN0 cnVtZW50cyBwb2xsZWQgYnkgdGhpcyBmZWF0dXJlcyBpcyBkZXBlbmRlbnQgb24gdGhlIGtlcm5l bCBvZiB0aGUgaG9zdC4KLStUaGlzIG1lYW5zIHRoYXQgYSByZW1vdGUgaG9zdCB3aXRoIGFuIG9s ZGVyIGtlcm5lbCBtYXkgcmVwb3J0IGZld2VyIGluc3RydW1lbnRzIHRoYW4gYSBjbGllbnQKLSto b3N0IHJ1bm5pbmcgYSBjdXJyZW50IGtlcm5lbCBvciB2aWNlIHZlcnNhLiBJZiB0aGVyZSBpcyBh IGRpc2NyZXBlbmN5IGluIHRoZSBudW1iZXIgb2YgaW5zdHJ1bWVudHMKLStpbiB0aGUgc3NoX3N0 YWNrX21ldHJpY3MubG9jYWwgYW5kIC5yZW1vdGUgZmlsZSB0aGlzIGlzIHRoZSBtb3N0IGxpa2Vs eSByZWFzb24uCi0rCi0rQWRkaXRpb25hbGx5LCBkZXRlcm1pbmluZyB3aGljaCBmaWxlIHJlcHJl c2VudHMgc2VuZGVyIHNpZGUgdmVyc3VzIHJlY2VpdmVyIHNpZGUgaXMgZGVwZW5kZW50Ci0rb24g dGhlIG5hdHVyZSBvZiB0aGUgY29ubmVjdGlvbi4gVGhlcmZvcmUsIGl0J3MgdXAgdG8gdGhlIHVz ZXIgdG8gbWFrZSB0aGF0IGRldGVybWluYXRpb24uCi0rCi0rTGludXggTm90ZTogQ3VycmVudGx5 IHRoaXMgaXMgb25seSBzdXBwb3J0ZWQgb24gTGludXgga2VybmVsIHZlcnNpb25zIDMuNyBhbmQg Z3JlYXRlci4gTmV3ZXIga2VybmVscwotK21heSBoYXZlIG1vcmUgaW5zdHJ1bWVudHMgYXZhaWxh YmxlIHRvIHBvbGwgdGhhbiBvbGRlciBrZXJuZWxzLgotKwotK0ZyZWVCU0QgTm90ZTogVGhpcyBp cyBzdXBwb3J0ZWQgb24gUmVsZWFzZSA2IGFuZCBoaWdoZXIuIEhvd2V2ZXIsIEZyZWVCU0QgaGFz IGZld2VyIGF2YWlsYWJsZQotK2luc3RydW1lbnRzIHRoYW4gbmV3IExpbnV4IGtlcm5lbHMuCi0r Ci0rTXVsdGlwbGV4aW5nIE5vdGU6IFRoZSBtZXRyaWNzIGFyZSByZXBvcnRlZCBmcm9tIHRoZSBU Q1Agc29ja2V0IHdoaWNoIG1lYW5zIHRoYXQgZ2F0aGVyaW5nCi0rbWV0cmljcyBmcm9tIG11bHRp cGxleGVkIHNlc3Npb25zIHdpbGwgcmVwb3J0IG9uIHRoZSBhY3Rpdml0eSBvZiBhbGwgc2Vzc2lv bnMgb24gdGhhdCBzb2NrZXQuCi0rVGhpcyB3aWxsIGxpa2VseSByZXN1bHQgaW4gbGVzcyBjbGVh ciByZXN1bHRzIGFuZCwgYXMgc3VjaCwgd2Ugc3VnZ2VzdCBvbmx5IGdhdGhlcmluZyBtZXRyaWNz Ci0rZnJvbSBub24tbXVsdGlwbGV4ZWQgc2Vzc2lvbi4KLSsKLStIUE5TQ1Agd2l0aCBSZXN1bWUg ZnVuY3Rpb25hbGl0eQotK1RoaXMgZmVhdHVyZSBhbGxvd3MgaHBuc2NwIHRvIHJlc3VtZSBmYWls ZWQgdHJhbnNmZXJzLiBJbiB0aGUgZXZlbnQgb2YgYSBmYWlsZWQgdHJhbnNmZXIKLStpc3N1ZXMg dGhlIHNhbWUgc2NwIGNvbW1hbmQgd2l0aCB0aGUgJy1SJyBvcHRpb24uIEZvciBleGFtcGxlIC0g aWYgeW91IGlzc3VlZDoKLSsnaHBuc2NwIG15aHVnZWZpbGUgbWVAaG9zdDp+JwotK2FuZCBpdCBk aWVzIGhhbGZ3YXkgdGhyb3VnaCB0aGUgdHJhbnNmZXIgaXNzdWluZwotKydocG5zY3AgLVogbXlo dWdlZmlsZSBtZUBob3N0On4nCi0rd2lsbCByZXN1bWUgdGhlIHRyYW5zZmVyIGF0IHRoZSBwb2lu dCB3aGVyZSBpdCBsZWZ0IG9mZi4KLSsKLStUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyB0 aGUgc291cmNlIGhvc3Qgc2VuZCBhIGhhc2ggKGJsYWtlMmI1MTIpIG9mIHRoZSBmaWxlIHRvIHRo ZQotK3RhcmdldCBob3N0LiBUaGUgdGFyZ2V0IGhvc3QgdGhlbiBjb21wdXRlcyBpdCdzIG93biBo YXNoIG9mIHRoZSB0YXJnZXQgZmlsZS4gSWYgdGhlIGhhc2hlcyBtYXRjaAotK3RoZW4gdGhlIGZp bGUgaXMgc2tpcHBlZCBhcyB0aGlzIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwgdHJhbnNmZXIuIEhv d2V2ZXIsIGlmIHRoZSBoYXNoZXMgZG8gbm90Ci0rbWF0Y2ggdGhlbiB0aGUgdGFyZ2V0IHNlbmRz IHRoZSBzb3VyY2UgaXRzIGhhc2ggYWxvbmcgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgZmlsZS4gVGhl IHNvdXJjZSB0aGVuCi0rY29tcHV0ZXMgdGhlIGhhc2ggb2YgdGhlIGZpbGUgKnVwIHRvKiB0aGUg c2l6ZSBvZiB0aGUgdGFyZ2V0IGZpbGUuIElmIHRob3NlIGhhc2hlcyBtYXRjaCB0aGVuCi0rdGhl IHNvdXJjZSBvbmx5IHNlbmQgdGhlIG5lY2Vzc2FyeSBieXRlcyB0byBjb21wbGV0ZSB0aGUgdHJh bnNmZXIuIElmIHRoZSBoYXNoZXMgZG8gbm90IG1hdGNoIHRoZW4KLSt0aGUgZW50aXJlIGZpbGUg aXMgcmVzZW50LiBJZiB0aGUgdGFyZ2V0IGZpbGUgaXMgbGFyZ2VyIHRoZW4gdGhlIHNvdXJjZSBm aWxlIHRoZW4gdGhlIGVudGlyZQotK3NvdXJjZSBmaWxlIGlzIHNlbnQgYW5kIGFueSBleGlzdGlu ZyB0YXJnZXQgZmlsZSBpcyBvdmVyd3JpdHRlbi4KLSsKLStNVUxUSS1USFJFQURFRCBBRVMgQ0lQ SEVSOgotK1RoZSBBRVMgY2lwaGVyIGluIENUUiBtb2RlIGhhcyBiZWVuIG11bHRpdGhyZWFkZWQg KE1UUi1BRVMtQ1RSKS4gVGhpcyB3aWxsIGFsbG93IHNzaCBpbnN0YWxsYXRpb25zCi0rb24gaG9z dHMgd2l0aCBtdWx0aXBsZSBjb3JlcyB0byB1c2UgbW9yZSB0aGFuIG9uZSBwcm9jZXNzaW5nIGNv cmUgZHVyaW5nIGVuY3J5cHRpb24uCi0rVGVzdHMgaGF2ZSBzaG93IHNpZ25pZmljYW50IHRocm91 Z2hwdXQgcGVyZm9ybWFuY2UgaW5jcmVhc2VzIHdoZW4gdXNpbmcgTVRSLUFFUy1DVFIgdXAKLSt0 byBhbmQgaW5jbHVkaW5nIGEgZnVsbCBnaWdhYml0IHBlciBzZWNvbmQgb24gcXVhZCBjb3JlIHN5 c3RlbXMuIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0bwotK2FjaGlldmUgZnVsbCBsaW5lIHJhdGUg b24gZHVhbCBjb3JlIHN5c3RlbXMgYnV0IE9TIGFuZCBkYXRhIG1hbmFnZW1lbnQgb3ZlcmhlYWQg bWFrZXMgdGhpcwotK21vcmUgZGlmZmljdWx0IHRvIGFjaGlldmUuIFRoZSBjaXBoZXIgc3RyZWFt IGZyb20gTVRSLUFFUy1DVFIgaXMgZW50aXJlbHkgY29tcGF0aWJsZSB3aXRoIHNpbmdsZQotK3Ro cmVhZCBBRVMtQ1RSIChTVC1BRVMtQ1RSKSBpbXBsZW1lbnRhdGlvbnMgYW5kIHNob3VsZCBiZSAx MDAlIGJhY2t3YXJkIGNvbXBhdGlibGUuIE9wdGltYWwKLStwZXJmb3JtYW5jZSByZXF1aXJlcyB0 aGUgTVRSLUFFUy1DVFIgbW9kZSBiZSBlbmFibGVkIG9uIGJvdGggZW5kcyBvZiB0aGUgY29ubmVj dGlvbi4KLStUaGUgTVRSLUFFUy1DVFIgcmVwbGFjZXMgU1QtQUVTLUNUUiBhbmQgaXMgdXNlZCBp biBleGFjdGx5IHRoZSBzYW1lIHdheSB3aXRoIHRoZSBzYW1lCi0rbm9tZW5jbGF0dXJlLgotK1Vz YWdlIGV4YW1wbGVzOgotKwkJc3NoIC1jYWVzMTI4LWN0ciB5b3VAaG9zdC5jb20KLSsJCXNjcCAt b0NpcGhlcj1hZXMyNTYtY3RyIGZpbGUgeW91QGhvc3QuY29tOn4vZmlsZQotKwotK01VTFRJLVRI UkVBREVEIENoYUNoYTIwLVBvbHkxMzA1IENJUEhFUjoKLStUaGUgZGVmYXVsdCBjaXBoZXIgdXNl ZCBieSBIUE4tU1NIIGlzIG5vdyBhIHRocmVhZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQotK0No YUNoYTIwLVBvbHkxMzA1IGNpcGhlci4gSW4gdGVzdHMgdGhpcyBjaXBoZXIgcmVzdWx0cyBpbiBh biBhcHByb3hpbWF0ZWx5IDkwJSBnYWluIGluCi0rdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBpbiBj b21wYXJpc29uIHRvIHRoZSBzZXJpYWwgaW1wbGVtZW50YXRpb24gZm91bmQgaW4gT3BlblNTSC4K LStUaGlzIGNpcGhlciBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggYWxsIGtub3duIGV4aXN0aW5n IGltcGxlbWVudGF0aW9ucyBvZiBDaGFDaGEyMC1Qb2x5MTMwNS4KLSsKLStJbnRlcm5hbGx5IHRo aXMgY2lwaGVyIGlzIHJlZmVycmVkIHRvIGFzIGNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5v cmcgKENDMjAtTVQpCi0rc2ltaWxhciB0byBob3cgdGhlIE9wZW5TU0ggaW1wbGVtZW50YXRpb24g aXMga25vd24gYXMgY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20KLSsoQ0MyMC1TIChmb3Ig c2VyaWFsKSkuIE5vIGNoYW5nZXMgYXJlIHJlcXVpcmVkIG9uIHRoZSBwYXJ0IG9mIHRoZSB1c2Vy IHRvIG1ha2UgdXNlIG9mIENDMjAtTVQuCi0rSG93ZXZlciwgaWYgdGhlIHVzZXJzIGRvZXNuJ3Qg d2FudCB0byBtYWtlIHVzZSBvZiB0aGlzIGNpcGhlciB0aGV5IGNhbiBleHBsaWNpdGx5IGxvYWQg Q0MyMC1TIHVzaW5nCi0rJy1jY2hhY2gyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbWAgb24gdGhlIGNv bW1hbmQgbGluZS4KLSsKLStOT05FIENJUEhFUjoKLStUbyB1c2UgdGhlIE5PTkUgb3B0aW9uIHlv dSBtdXN0IGhhdmUgdGhlIE5vbmVFbmFibGVkIHN3aXRjaCBzZXQgb24gdGhlIHNlcnZlciBhbmQK LSt5b3UgKm11c3QqIGhhdmUgKmJvdGgqIE5vbmVFbmFibGVkIGFuZCBOb25lU3dpdGNoIHNldCB0 byB5ZXMgb24gdGhlIGNsaWVudC4gVGhlIE5PTkUKLStmZWF0dXJlIHdvcmtzIHdpdGggQUxMIHNz aCBzdWJzeXN0ZW1zIChhcyBmYXIgYXMgd2UgY2FuIHRlbGwpICpBUyBMT05HIEFTKiBhIHR0eSBp cyBub3QKLStzcGF3bmVkLiBJZiBhIHVzZXIgdXNlcyB0aGUgLVQgc3dpdGNoIHRvIHByZXZlbnQg YSB0dHkgYmVpbmcgY3JlYXRlZCB0aGUgTk9ORSBjaXBoZXIgd2lsbAotK2JlIGRpc2FibGVkLgot KwotK1RoZSBwZXJmb3JtYW5jZSBpbmNyZWFzZSB3aWxsIG9ubHkgYmUgYXMgZ29vZCBhcyB0aGUg bmV0d29yayBhbmQgVENQIHN0YWNrIHR1bmluZwotK29uIHRoZSByZWNpZXZlciBzaWRlIG9mIHRo ZSBjb25uZWN0aW9uIGFsbG93cy4gQXMgYSBydWxlIG9mIHRodW1iIGEgdXNlciB3aWxsIG5lZWQK LSthdCBsZWFzdCAxME1iL3MgY29ubmVjdGlvbiB3aXRoIGEgMTAwbXMgUlRUIHRvIHNlZSBhIGRv dWJsaW5nIG9mIHBlcmZvcm1hbmNlLiBUaGUKLStIUE4tU1NIIGhvbWUgcGFnZSBkZXNjcmliZXMg dGhpcyBpbiBncmVhdGVyIGRldGFpbC4KLSsKLStodHRwOi8vd3d3LnBzYy5lZHUvbmV0d29ya2lu Zy9wcm9qZWN0cy9ocG4tc3NoCi0rCi0rTk9ORSBNQUM6Ci0rU3RhcnRpbmcgd2l0aCBIUE4gMTV2 MSB1c2VycyB3aWxsIGhhdmUgdGhlIG9wdGlvbiB0byBkaXNhYmxlIEhNQUMgKG1lc3NhZ2UKLSth dXRoZW50aWNhdGlvbiBjaXBoZXJzKSB3aGVuIHVzaW5nIHRoZSBOT05FIGNpcGhlci4gWW91IG11 c3QgZW5hYmxlIHRoZSBmb2xsb3dpbmc6Ci0rTm9uZUVuYWJsZWQsIE5vbmVTd2l0Y2gsIGFuZCBO b25lTWFjRW5hYmxlZC4gSWYgYWxsIHRocmVlIGFyZSBub3QgZW5hYmxlZCB0aGUgTm9uZSBNQUMK LSt3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQuIEluIHRlc3RzIHRoZSB1c2Ugb2YgdGhl IE5vbmUgTUFDIGltcHJvdmVkIHRocm91cHV0IGJ5Ci0rbW9yZSB0aGFuIDMwJS4KLSsKLStleDog c2NwIC1vTm9uZVN3aXRjaD15ZXMgLW9Ob25lRW5hYmxlZD15ZXMgLW9Ob25lTWFjRW5hYmxlZD15 ZXMgZmlsZSBob3N0On4KLSsKLStIUE4gU3BlY2lmaWMgQ29uZmlndXJhdGlvbiBvcHRpb25zCi0r Ci0rVGNwUmN2QnVmUG9sbD1beWVzL25vXSBjbGllbnQvc2VydmVyCi0rICAgICAgRW5hYmxlIG9m IGRpc2FibGUgdGhlIHBvbGxpbmcgb2YgdGhlIHRjcCByZWNlaXZlIGJ1ZmZlciB0aHJvdWdoIHRo ZSBsaWZlCi0rb2YgdGhlIGNvbm5lY3Rpb24uIFlvdSB3b3VsZCB3YW50IHRvIG1ha2Ugc3VyZSB0 aGF0IHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQKLStmb3Igc3lzdGVtcyBtYWtpbmcgdXNlIG9mIGF1 dG90dW5pbmcga2VybmVscyAobGludXggMi40LjI0KywgMi42LCBNUyBWaXN0YSkKLStkZWZhdWx0 IGlzIHllcy4KLSsKLStOb25lRW5hYmxlZD1beWVzL25vXSBjbGllbnQvc2VydmVyCi0rICAgICAg RW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBjaXBoZXIuIENhcmUgbXVzdCBh bHdheXMgYmUgdXNlZAotK3doZW4gZW5hYmxpbmcgdGhpcyBhcyBpdCB3aWxsIGFsbG93IHVzZXJz IHRvIHNlbmQgZGF0YSBpbiB0aGUgY2xlYXIuIEhvd2V2ZXIsCi0raXQgaXMgaW1wb3J0YW50IHRv IG5vdGUgdGhhdCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiByZW1haW5zIGVuY3J5cHRlZAot K2V2ZW4gaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gU2V0IHRvIG5vIGJ5IGRlZmF1bHQuCi0r Ci0rTm9uZU1hY0VuYWJsZWQ9W3llcy9ub10gY2xpZW50L3NlcnZlcgotKyAgICAgIEVuYWJsZSBv ciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgTUFDLiBXaGVuIHRoaXMgaXMgZW5hYmxlZCBz c2gKLSt3aWxsICpub3QqIHByb3ZpZGUgZGF0YSBpbnRlZ3JpdHkgb2YgYW55IGRhdGEgYmVpbmcg dHJhbnNtaXR0ZWQgYmV0d2VlbiBob3N0cy4gVXNlCi0rd2l0aCBjYXV0aW9uIGFzIGl0LCB1bmxp a2UganVzdCB1c2luZyBOb25lRW5hYmxlZCwgZG9lc24ndCBwcm92aWRlIGRhdGEgaW50ZWdyaXR5 IGFuZAotK3Byb3RlY3Rpb24gYWdhaW5zdCBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBBcyB3 aXRoIE5vbmVFbmFibGVkIGFsbCBhdXRoZW50aWNhdGlvbgotK3JlbWFpbnMgZW5jcnlwdGVkIGFu ZCBpbnRlZ3JpdHkgaXMgZW5zdXJlZC4gRGVmYXVsdCBpcyBuby4KLSsKLStOb25lU3dpdGNoPVt5 ZXMvbm9dIGNsaWVudAotKyAgICAgU3dpdGNoIHRoZSBlbmNyeXB0aW9uIGNpcGhlciBiZWluZyB1 c2VkIHRvIHRoZSBOb25lIGNpcGhlciBhZnRlcgotK2F1dGhlbnRpY2F0aW9uIHRha2VzIHBsYWNl LiBOb25lRW5hYmxlZCBtdXN0IGJlIGVuYWJsZWQgb24gYm90aCB0aGUgY2xpZW50Ci0rYW5kIHNl cnZlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLiBXaGVuIHRoZSBjb25uZWN0aW9uIHN3aXRjaGVz IHRvIHRoZSBOT05FCi0rY2lwaGVyIGEgd2FybmluZyBpcyBzZW50IHRvIFNUREVSUi4gVGhlIGNv bm5lY3Rpb24gYXR0ZW1wdCB3aWxsIGZhaWwgd2l0aCBhbgotK2Vycm9yIGlmIGEgY2xpZW50IHJl cXVlc3RzIGEgTm9uZVN3aXRjaCBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBleHBsaWNp dGx5Ci0raGF2ZSBOb25lRW5hYmxlZCBzZXQgdG8geWVzLiBOb3RlOiBUaGUgTk9ORSBjaXBoZXIg Y2Fubm90IGJlIHVzZWQgaW4KLStpbnRlcmFjdGl2ZSAoc2hlbGwpIHNlc3Npb25zIGFuZCBpdCB3 aWxsIGZhaWwgc2lsZW50bHkuIFNldCB0byBubyBieSBkZWZhdWx0LgotKwotK0hQTkRpc2FibGVk PVt5ZXMvbm9dIGNsaWVudC9zZXJ2ZXIKLSsgICAgIEluIHNvbWUgc2l0dWF0aW9ucywgc3VjaCBh cyB0cmFuc2ZlcnMgb24gYSBsb2NhbCBhcmVhIG5ldHdvcmssIHRoZSBpbXBhY3QKLStvZiB0aGUg SFBOIGNvZGUgcHJvZHVjZXMgYSBuZXQgZGVjcmVhc2UgaW4gcGVyZm9ybWFuY2UuIEluIHRoZXNl IGNhc2VzIGl0IGlzCi0raGVscGZ1bCB0byBkaXNhYmxlIHRoZSBIUE4gZnVuY3Rpb25hbGl0eS4g QnkgZGVmYXVsdCBIUE5EaXNhYmxlZCBpcyBzZXQgdG8gbm8uCi0rCi0rQ3JlZGl0czogVGhpcyBw YXRjaCB3YXMgY29uY2VpdmVkLCBkZXNpZ25lZCwgYW5kIGxlZCBieSBDaHJpcyBSYXBpZXIgKHJh cGllckBwc2MuZWR1KQotKyAgICAgICAgIFRoZSBtYWpvcml0eSBvZiB0aGUgYWN0dWFsIGNvZGlu ZyBmb3IgdmVyc2lvbnMgdXAgdG8gSFBOMTJ2MSB3YXMgcGVyZm9ybWVkCi0rICAgICAgICAgYnkg TWljaGFlbCBTdGV2ZW5zIChtc3RldmVuc0BhbmRyZXcuY211LmVkdSkuIFRoZSBNVC1BRVMtQ1RS IGNpcGhlciB3YXMKLSsgICAgICAgICBpbXBsZW1lbnRlZCBieSBCZW4gQmVubmV0IChiZW5AcHNj LmVkdSkgYW5kIGltcHJvdmVkIGJ5IE1pa2UgVGFzb3RhCi0rICAgICAgICAgKHRhc290YUBnbWFp bC5jb20pIGFuIE5TRiBSRVUgZ3JhbnQgcmVjaXBpZW50IGZvciAyMDEzLgotKwkgQWxsYW4gSnVk ZSBwcm92aWRlZCB0aGUgY29kZSBmb3IgdGhlIE5vbmVNYWMgYW5kIGJ1ZmZlciBub3JtYWxpemF0 aW9uLgotKyAgICAgICAgIFRoaXMgd29yayB3YXMgZmluYW5jZWQsIGluIHBhcnQsIGJ5IENpc2Nv IFN5c3RlbSwgSW5jLiwgdGhlIE5hdGlvbmFsCi0rICAgICAgICAgTGlicmFyeSBvZiBNZWRpY2lu ZSwgYW5kIHRoZSBOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24uCi0rCi0rU3BvbnNvcnM6IFRo YW5rcyB0byBOaWtsYXMgSGFtYnVjaGVuIGZvciBiZWluZyB0aGUgZmlyc3Qgc3BvbnNvciBvZiBI UE4tU1NICi0rCSAgdmlhIGdpdGh1YidzIHNwb25zb3IgcHJvZ3JhbSEKLSsKLSsKLStFZGl0ZWQ6 IFNlcHRlbWJlciAxOSwgMjAyNQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvSFBOU1NI SW5zdGFsbGF0aW9uLnR4dCBvcGVuc3NoLTEwLjNwMS9IUE5TU0hJbnN0YWxsYXRpb24udHh0Ci0t LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9IUE5TU0hJbnN0YWxsYXRpb24udHh0CTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvSFBOU1NISW5zdGFs bGF0aW9uLnR4dAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNDcyNDg0NCArMDIwMAotQEAgLTAsMCAr MSwzNTQgQEAKLSvvu79IUE4tU1NIIEluc3RhbGxhdGlvbgotKwotK1RoZSBwcm9jZXNzIG9mIGlu c3RhbGxpbmcgSFBOLVNTSCBmcm9tIHNvdXJjZSBpcyBhIHJlbGF0aXZlbHkgcGFpbmxlc3MgcHJv Y2VzcwotK2J1dCBkb2VzIGhhdmUgc29tZSBudWFuY2VzLiBUaGlzIGRvY3VtZW50IHdpbGwgZ28g dGhyb3VnaCB0aGUgcHJvY2VzcyBzdGVwIGJ5Ci0rc3RlcCB0byBoZWxwIHlvdSBnZXQgdGhlIG1v c3QgZnJvbSB5b3VyIGluc3RhbGxhdGlvbi4gSWYgeW91IGZpbmQgYW55IGVycm9ycwotK3BsZWFz ZSBjb250YWN0IHVzIGF0IGhwbnNzaEBwc2MuZWR1LgotKwotKwotK1N0ZXAgMTogR2V0IHRoZSBz b3VyY2UgY29kZS4KLSsKLStUaGUgb2ZmaWNpYWwgcmVwb3NpdG9yeSBmb3IgSFBOLVNTSCBpcyBm b3VuZCBhdAotK2h0dHBzOi8vZ2l0aHViLmNvbS9yYXBpZXIxL2hwbi1zc2guIEdldCBhIGNvcHkg d2l0aAotKyJnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaOKAnS4K LSsKLSsKLStTdGVwIDI6IEluc3RhbGwgZGVwZW5kZW5jaWVzLgotKwotK1doYXQgeW91IG5lZWQg dG8gaW5zdGFsbCBpcyBkZXBlbmRlbnQgb24geW91ciBkaXN0cmlidXRpb24gYnV0IHdpbGwgaW5j bHVkZToKLSsqIE9wZW5TU0wgZGV2ZWxvcG1lbnQgcGFja2FnZQotKyAgICogRGViaWFuOiBsaWJz c2wtZGV2Ci0rICAgKiBGZWRvcmE6IG9wZW5zc2wtZGV2ZWwKLSsqIEFsdGVybmF0aXZlbHkgeW91 IGNhbiB1c2UgTElicmVTU0wKLSsgICAqIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSB3ZSBzdWdnZXN0 IGNvbXBpbGluZyBhbmQgaW5zdGFsbGluZyBsaWJyZXNzbCBtYW51YWxseSBhcwotKyAgICAgdGhl cmUgYXJlIGZldyBtYWludGFpbmVkIGxpbnV4IHBhY2thZ2VzIGZvciBMaWJyZVNTTC4KLSsgICAq IEFsc28sIExpYnJlU1NMIHYzLjUgYW5kIHYzLjYgZG8gbm90IHN1cHBvcnQgdGhlIHRocmVhZGVk IEFFUy1DVFIgY2lwaGVyLgotKyAgICAgSWYgdGhhdOKAmXMgaW1wb3J0YW50IHRvIHlvdSB0aGVu IHlvdSBzaG91bGQgdXNlIE9wZW5TU0wuCi0rKiBaIGNvbXByZXNzaW9uIGxpYnJhcnkKLSsgICAq IERlYmlhbjogemxpYjFnLWRldgotKyAgICogRmVkb3JhOiB6bGliLWRldmVsCi0rKiBBdXRvY29u ZgotKyogQXV0b21ha2UKLSsKLSsKLStTdGVwIDM6IEluc3RhbGwgb3B0aW9uYWwgZGVwZW5kZW5j aWVzLgotKwotK1RoaXMgb3B0aW9uYWwgbGlicmFyaWVzIHdpbGwgZXh0ZW5kIHRoZSBmdW5jdGlv bmFsaXR5IG9mIEhQTi1TU0ggdG8gYWxsb3cgdGhlIHVzZSBvZiBQQU0KLSthdXRoZW50aWNhdGlv biwgS2VyYmVyb3MsIGdyYXBoaWNhbCBwYXNzd29yZCB0b29scywgZXRjLgotKyogUEFNCi0rKiBL ZXJiZXJvcwotKyogR1RLCi0rCi0rCi0rU3RlcCA0OiBCdWlsZCB0aGUgY29uZmlndXJlIGZpbGUK LSsKLStnZW5lcmF0ZSAuL2NvbmZpZ3VyZSB3aXRoIOKAnGF1dG9yZWNvbmYgLWYgLWnigJ0KLSsK LSsKLStTdGVwIDU6IENvbmZpZ3VyYXRpb24KLSsKLStDb25maWd1cmUgdGhlIGluc3RhbGxhdGlv bi4gWW91IGNhbiBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gaG93IHRvIGRvIHRoaXMgYnkK LStpc3N1aW5nIOKAnC4vY29uZmlndXJlIC0taGVscOKAnS4gSG93ZXZlciwgY29tbW9ubHkgeW91 IHdpbGwgd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uCi0rbG9jYXRpb24g b2YgdGhlIGJpbmFyaWVzLiBUaGlzIGNhbiBiZSBkb25lIHdpdGgg4oCcLS1wcmVmaXg9L1tkZXNp cmVkX3BhdGhd4oCdLiBGb3IgZXhhbXBsZSwKLStpZiB5b3Ugd2FudCB0aGUgYmluYXJpZXMgaW5z dGFsbGVkIGludG8gL3Vzci9iaW4gYXMgb3Bwb3NlZCB0byB0aGUgZGVmYXVsdCBvZgotKy91c3Iv bG9jYWwvYmluIHlvdeKAmWQgdXNlIOKAnC4vY29uZmlndXJlIC0tcHJlZml4PS91c3LigJ0uIE90 aGVyIGNvbW1vbiBvcHRpb25zIHdvdWxkIGJlIHRvCi0raW5jb3Jwb3JhdGUgcGFtLCBrZXJiZXJv cywgYWx0ZXJuYXRpdmUgU1NMIGxpYnJhcmllcywgYW5kIHNvIGZvcnRoLiBIb3dldmVyLCBmb3Ig bW9zdCB1c2VycwotK2VpdGhlciBubyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBv ciBtb2RpZnlpbmcgdGhlIHByZWZpeCB3aWxsIHN1ZmZpY2UuCi0rCi0rCi0rU3RlcCA2OiBNYWtl Ci0rCi0rTWFrZSB0aGUgYXBwbGljYXRpb24gd2l0aCDigJxtYWtlIC1qW251bSBjb3Jlc13igJ0u IFNvIGlmIHlvdSBoYXZlIGFuIDggY29yZSBzeXN0ZW0KLSt5b3XigJlkIHVzZSDigJxtYWtlIC1q OOKAnQotKwotKwotK1N0ZXAgNzogU2V0IHVwIHRoZSBocG5zc2hkIHVzZXIuIAotKwotK1RoaXMg dXNlciBpcyBwYXJ0IG9mIHRoZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiByb3V0aW5lcyB1c2VkIGlu IHRoZSAKLStwcmUtYXV0aGVudGljYXRpb24gc2FuZGJveC4gSSBzdWdnZXN0IHVzaW5nIHRoZSBm b2xsb3dpbmcgY29tbWFuZDogCi0rCi0rc3VkbyB1c2VyYWRkIC0tc3lzdGVtIC0tc2hlbGwgL3Vz ci9zYmluL25vbG9naW4gLS1jb21tZW50PSJQcml2aWxlZ2Ugc2VwYXJhdGVkIEhQTlNTSCBVc2Vy IiBcIAotKy0taG9tZT0vcnVuL2hwbnNzaGQgaHBuc3NoZAotKwotK0FsdGVybmF0aXZlbHksIHlv dSBjYW4gdXNlIHZpcHcgdG8gYWRkIHRoZSB1c2VyIG1hbnVhbGx5LiAKLSsKLSsKLStTdGVwIDg6 IEluc3RhbGxhdGlvbgotKwotK0FmdGVyIEhQTi1TU0ggc3VjY2Vzc2Z1bGx5IGJ1aWxkcywgaW5z dGFsbCBpdCB3aXRoIOKAnHN1ZG8gbWFrZSBpbnN0YWxs4oCdLiBUaGlzIHdpbGwgaW5zdGFsbCB0 aGUKLStiaW5hcmllcywgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kIGdlbmVyYXRlIHRoZSB1bmlx dWUgaG9zdCBrZXlzIHVzZWQuIEF0IHRoaXMgcG9pbnQgeW91IGNhbgotK21ha2UgY2hhbmdlcyB0 byB0aGUgc3NoIGNsaWVudCBhbmQgc2VydmVyIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gVGhlc2Ug ZmlsZXMgYXJlCi0rZm91bmQsIGdlbmVyYWxseSwgaW4gL2V0Yy9ocG5zc2gvc3NoX2NvbmZpZyBh bmQgc3NoZF9jb25maWcgcmVzcGVjdGl2ZWx5LiBZb3UgbWF5IHdhbnQgdG8KLStjaGFuZ2UgdGhl IGRlZmF1bHQgcG9ydCBmcm9tIDIyMjIgdG8gc29tZSBvdGhlciB2YWx1ZS4gWW91IG1heSBhbHNv IHdhbnQgdG8gZW5hYmxlIHRoZQotK05vbmVDaXBoZXIgYW5kIE5vbmVNYWMgb3B0aW9ucy4gRm9y IG1vcmUgaW5mb3JtYXRpb24gdXNlIOKAnG1hbiBocG5zc2hkX2NvbmZpZ+KAnSBhbmQKLSvigJxt YW4gaHBuc3NoX2NvbmZpZ+KAnS4gTm90ZTogVGhlIGhwbnNzaCBjbGllbnQgZXhwZWN0cyB0aGUg c2VydmVyIHRvIGJlIG9uIHBvcnQgMjIyMiBidXQgd2lsbAotK2ZhbGxiYWNrIHRvIDIyIGlmIGl0 4oCZcyBub3QgZm91bmQgdGhlcmUuIFNvIGlmIHlvdSBkbyBjaGFuZ2UgdGhlIGRlZmF1bHQgcG9y dCB5b3XigJlsbCBuZWVkIHRvCi0rbWFrZSBzdXJlIHRoZSBjbGllbnRzIHBvaW50IGF0IHRoZSBj b3JyZWN0IHBvcnQuCi0rCi0rU3RlcCA5OiBGaW5pc2hpbmcgdXAuCi0rCi0rQXQgdGhpcyBwb2lu dCB5b3UgY2FuIHN0YXJ0IGhwbnNzaGQgbWFudWFsbHkgYnkgcnVubmluZyDigJxzdWRvIC91c3Iv c2Jpbi9ocG5zc2hk4oCdCi0rb3Igd2hhdGV2ZXIgdGhlIGZ1bGwgcGF0aCB0byB0aGUgaHBuc3No ZCBiaW5hcnkgbWlnaHQgYmUuIEhvd2V2ZXIsIHRoaXMgd29u4oCZdAotK3Jlc3RhcnQgYXV0b21h dGljYWxseSBvbiByZWJvb3QuIFRvIGRvIHRoaXMgeW914oCZbGwgbmVlZCB0byBpbnN0YWxsIGFu IGFwcHJvcHJpYXRlCi0rc3lzdGVtZCBjb25maWd1cmF0aW9uIGZpbGUuIElmIHRoYXQgc2VlbXMg bGlrZSBhIGdvb2QgaWRlYSB0byB5b3UgdGhlbiBmb2xsb3dpbmcgc3RlcHMgbWF5IGJlCi0rb2Yg aGVscC4gT3RoZXJ3aXNlLCB5b3UgYXJlIGRvbmUuIEVuam95IQotKwotKwotK1N0ZXAgMTA6IElu c3RhbGxpbmcgYSBzeXN0ZW1kIHN0YXJ0dXAgZmlsZS4KLSsKLStUaGUgY29ycmVjdCBzeXN0ZW1k IHN0YXJ0dXAgZmlsZSBkZXBlbmRzIG9uIHRoZSBkaXN0cmlidXRpb24geW91IGFyZSB1c2luZy4g Rm9yIHN5c3RlbQotK3VzaW5nIHN5c3RlbWQgKHlvdSBzdGFydCBhIHNlcnZpY2Ugd2l0aCBzeXN0 ZW1jdGwpIGNyZWF0ZSBhIGZpbGUgYXQgL2xpYi9zeXN0ZW1kL3N5c3RlbS9ocG5zc2hkLnNlcnZp Y2UKLSt3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudHMgTkI6IHlvdSBtYXkgbmVlZCB0byB1cGRh dGUgdGhlIHBhdGhzIHRvIG1hdGNoIHlvdXIgaW5zdGFsbGF0aW9uOgotKwotK1tVbml0XQotK0Rl c2NyaXB0aW9uPUhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIKLStEb2N1bWVudGF0aW9u PW1hbjpocG5zc2hkKDgpIG1hbjpocG5zc2hkX2NvbmZpZyg1KQotK0FmdGVyPW5ldHdvcmsudGFy Z2V0IGF1ZGl0ZC5zZXJ2aWNlCi0rQ29uZGl0aW9uUGF0aEV4aXN0cz0hL2V0Yy9ocG5zc2gvc3No ZF9ub3RfdG9fYmVfcnVuCi0rCi0rW1NlcnZpY2VdCi0rRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Rl ZmF1bHQvaHBuc3NoCi0rRXhlY1N0YXJ0UHJlPS91c3Ivc2Jpbi9ocG5zc2hkIC10Ci0rRXhlY1N0 YXJ0PS91c3Ivc2Jpbi9ocG5zc2hkIC1EICRTU0hEX09QVFMKLStFeGVjUmVsb2FkPS91c3Ivc2Jp bi9ocG5zc2hkIC10Ci0rRXhlY1JlbG9hZD0vYmluL2tpbGwgLUhVUCAkTUFJTlBJRAotK0tpbGxN b2RlPXByb2Nlc3MKLStSZXN0YXJ0PW9uLWZhaWx1cmUKLStSZXN0YXJ0UHJldmVudEV4aXRTdGF0 dXM9MjU1Ci0rVHlwZT1ub3RpZnkKLStSdW50aW1lRGlyZWN0b3J5PWhwbnNzaGQKLStSdW50aW1l RGlyZWN0b3J5TW9kZT0wNzU1Ci0rCi0rW0luc3RhbGxdCi0rV2FudGVkQnk9bXVsdGktdXNlci50 YXJnZXQKLStBbGlhcz1ocG5zc2hkLnNlcnZpY2UKLSsKLStBbHRlcm5hdGl2ZWx5LCB0aGUgLi9j b25maWd1cmUgY29tbWFuZCB3aWxsIGdlbmVyYXRlIGEgaHBuc3NoZC5zZXJ2aWNlIGZpbGUgZnJv bQotK2hwbnNzaGQuc2VydmljZS5pbi4gWW91IGNhbiB1c2UgdGhpcyBmaWxlIGJ5IGNvcHlpbmcg aXQgdG8KLSsvbGlic3lzdGVtZC9zeXN0ZW0vaHBuc3NoZC5zZXJ2aWNlIGluc3RlYWQgb2YgY29w eWluZyB0aGUgYWJvdmUgdGV4dC4KLSsKLStUaGVuIGNyZWF0ZSB0aGUgZGVmYXVsdHMgZmlsZSBh dCAvZXRjL2RlZmF1bHQvaHBuc3NoZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudDoKLSsjIERl ZmF1bHQgc2V0dGluZ3MgZm9yIG9wZW5zc2gtc2VydmVyLgotKyMgT3B0aW9ucyB0byBwYXNzIHRv IHNzaGQKLStTU0hEX09QVFM9Ci0rCi0rRW50ZXIgYW55IHJ1bnRpbWUgb3B0aW9ucyB5b3Ugd2Fu dCBvbiB0aGUgU1NIRF9PUFRTIGxpbmUuIElmIHlvdSBjYW7igJl0IHRoaW5rIG9mIGFueSwgc2lt cGx5Ci0rbGVhdmUgaXQgYmxhbmsuIEEgc2FtcGxlIC9ldGMvZGVmYXVscy9ocG5zc2ggZmlsZSBt YXkgYmUgZm91bmQgaW4gZGVmYXVsdHMuaHBuc3NoZC4KLSsKLStZb3UgbXVzdCB0aGVuIHJlbG9h ZCB0aGUgc3lzdGVtZCBzZXJ2aWNlIHRvIG1ha2UgaXQgYXdhcmUgb2YgdGhpcyBuZXcgc2Vydmlj ZSB3aXRoCi0rc3VkbyBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAotKwotK0lmIHlvdSBhcmUgdXNp bmcgYW4gaW5pdC5kICh5b3Ugc3RhcnQgYSBzZXJ2aWNlIHdpdGgg4oCYc3lzdGVt4oCZKSB0aGVu IHlvdSBuZWVkIHRvIGluc3RhbGwgYW4KLStpbml0LmQuIENyZWF0ZSB0aGUgZmlsZSAvZXRjL2lu aXQuZC9ocG5zc2ggYW5kIGNvcHkgdGhlIGZvbGxvd2luZyBpbnRvIGl0LiBOQjogVGhlIGZvbGxv d2luZyBpcwotK2ZvciB3aGVyZSBocG5zc2hkIGlzIGZvdW5kIGF0IC91c3Ivc2Jpbi9ocG5zc2hk LiBJZiBpdCBpcyBub3QgaW4gdGhhdCBsb2NhdGlvbiB5b3XigJlsbCBuZWVkIHRvCi0rdXBkYXRl IHRoZSBwYXRocy4KLSsKLStBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHVzZSB0aGUgaHBuc3NoZC5p bml0IGZpbGUgY3JlYXRlZCBkdXJpbmcgY29uZmlndXJlLiBUaGlzIHdpbGwgYmUKLStwcmVwb3B1 bGF0ZWQgd2l0aCB0aGUgY29ycmVjdCBwYXRocyBieSB0aGUgY29uZmlndXJlIHNjcmlwdC4KLSsK LSsjISAvYmluL3NoCi0rCi0rIyMjIEJFR0lOIElOSVQgSU5GTwotKyMgUHJvdmlkZXM6ICAgICAg ICAgICAgICAgIGhwbnNzaGQKLSsjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAgJHJlbW90ZV9mcyAk c3lzbG9nCi0rIyBSZXF1aXJlZC1TdG9wOiAgICAgICAgJHJlbW90ZV9mcyAkc3lzbG9nCi0rIyBE ZWZhdWx0LVN0YXJ0OiAgICAgICAgMiAzIDQgNQotKyMgRGVmYXVsdC1TdG9wOgotKyMgU2hvcnQt RGVzY3JpcHRpb246ICAgICAgICBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIgd2l0aCBIUE4K LSsjIyMgRU5EIElOSVQgSU5GTwotKwotK3NldCAtZQotKwotKyMgL2V0Yy9pbml0LmQvaHBuc3No OiBzdGFydCBhbmQgc3RvcCB0aGUgT3BlbkJTRCAic2VjdXJlIHNoZWxsKHRtKSIgZGFlbW9uCi0r Ci0rdGVzdCAteCAvdXNyL3NiaW4vaHBuc3NoZCB8fCBleGl0IDAKLSsoIC91c3Ivc2Jpbi9ocG5z c2hkIC1cPyAyPiYxIHwgZ3JlcCAtcSBPcGVuU1NIICkgMj4vZGV2L251bGwgfHwgZXhpdCAwCi0r Ci0rdW1hc2sgMDIyCi0rCi0raWYgdGVzdCAtZiAvZXRjL2RlZmF1bHQvaHBuc3NoOyB0aGVuCi0r ICAgIC4gL2V0Yy9kZWZhdWx0L2hwbnNzaAotK2ZpCi0rCi0rLiAvbGliL2xzYi9pbml0LWZ1bmN0 aW9ucwotKwotKwotK2lmIFsgLW4gIiQyIiBdOyB0aGVuCi0rICAgIFNTSERfT1BUUz0iJFNTSERf T1BUUyAkMiIKLStmaQotKwotKyMgQXJlIHdlIHJ1bm5pbmcgZnJvbSBpbml0PwotK3J1bl9ieV9p bml0KCkgewotKyAgICAoWyAiJHByZXZpb3VzIiBdICYmIFsgIiRydW5sZXZlbCIgXSkgfHwgWyAi JHJ1bmxldmVsIiA9IFMgXQotK30KLSsKLStjaGVja19mb3Jfbm9fc3RhcnQoKSB7Ci0rICAgICMg Zm9yZ2V0IGl0IGlmIHdlJ3JlIHRyeWluZyB0byBzdGFydCwgYW5kIC9ldGMvaHBuc3NoL3NzaGRf bm90X3RvX2JlX3J1biBleGlzdHMKLSsgICAgaWYgWyAtZSAvZXRjL2hwbnNzaC9zc2hkX25vdF90 b19iZV9ydW4gXTsgdGhlbgotKyAgICAgICAgaWYgWyAiJDEiID0gbG9nX2VuZF9tc2cgXTsgdGhl bgotKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDAgfHwgdHJ1ZQotKyAgICAgICAgZmkKLSsgICAg ICAgIGlmICEgcnVuX2J5X2luaXQ7IHRoZW4KLSsgICAgICAgICAgICBsb2dfYWN0aW9uX21zZyAi SFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciBub3QgaW4gdXNlICgvZXRjL2hwbnNzaC9z c2hkX25vdF90b19iZV9ydW4pIiB8fCB0cnVlCi0rICAgICAgICBmaQotKyAgICAgICAgZXhpdCAw Ci0rICAgIGZpCi0rfQotKwotK2NoZWNrX2Rldl9udWxsKCkgewotKyAgICBpZiBbICEgLWMgL2Rl di9udWxsIF07IHRoZW4KLSsgICAgICAgIGlmIFsgIiQxIiA9IGxvZ19lbmRfbXNnIF07IHRoZW4K LSsgICAgICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUKLSsgICAgICAgIGZpCi0rICAgICAg ICBpZiAhIHJ1bl9ieV9pbml0OyB0aGVuCi0rICAgICAgICAgICAgbG9nX2FjdGlvbl9tc2cgIi9k ZXYvbnVsbCBpcyBub3QgYSBjaGFyYWN0ZXIgZGV2aWNlISIgfHwgdHJ1ZQotKyAgICAgICAgZmkK LSsgICAgICAgIGV4aXQgMQotKyAgICBmaQotK30KLSsKLStjaGVja19wcml2c2VwX2RpcigpIHsK LSsgICAgIyBDcmVhdGUgdGhlIFByaXZTZXAgZW1wdHkgZGlyIGlmIG5lY2Vzc2FyeQotKyAgICBp ZiBbICEgLWQgL3J1bi9ocG5zc2hkIF07IHRoZW4KLSsgICAgICAgIG1rZGlyIC9ydW4vaHBuc3No ZAotKyAgICAgICAgY2htb2QgMDc1NSAvcnVuL2hwbnNzaGQKLSsgICAgZmkKLSt9Ci0rCi0rY2hl Y2tfY29uZmlnKCkgewotKyAgICBpZiBbICEgLWUgL2V0Yy9ocG5zc2gvc3NoZF9ub3RfdG9fYmVf cnVuIF07IHRoZW4KLSsgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA4NgotKyAgICAg ICAgL3Vzci9zYmluL2hwbnNzaGQgJFNTSERfT1BUUyAtdCB8fCBleGl0IDEKLSsgICAgZmkKLSt9 Ci0rCi0rZXhwb3J0IFBBVEg9IiR7UEFUSDorJFBBVEg6fS91c3Ivc2Jpbjovc2JpbiIKLSsKLStj YXNlICIkMSIgaW4KLSsgIHN0YXJ0KQotKyAgICAgICAgY2hlY2tfcHJpdnNlcF9kaXIKLSsgICAg ICAgIGNoZWNrX2Zvcl9ub19zdGFydAotKyAgICAgICAgY2hlY2tfZGV2X251bGwKLSsgICAgICAg IGxvZ19kYWVtb25fbXNnICJTdGFydGluZyBIUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVy IiAiaHBuc3NoZCIgfHwgdHJ1ZQotKyAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2 Ci0rICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1va25vZG8g LS1jaHVpZCAwOjAgLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9o cG5zc2hkIC0tICRTU0hEX09QVFM7IHRoZW4KLSsgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8 IHRydWUKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUK LSsgICAgICAgIGZpCi0rICAgICAgICA7OwotKyAgc3RvcCkKLSsgICAgICAgIGxvZ19kYWVtb25f bXNnICJTdG9wcGluZyBIUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIiAiaHBuc3NoZCIg fHwgdHJ1ZQotKyAgICAgICAgaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1v a25vZG8gLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hk OyB0aGVuCi0rICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCi0rICAgICAgICBlbHNl Ci0rICAgICAgICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0cnVlCi0rICAgICAgICBmaQotKyAgICAg ICAgOzsKLSsKLSsKLSsgIHJlbG9hZHxmb3JjZS1yZWxvYWQpCi0rICAgICAgICBjaGVja19mb3Jf bm9fc3RhcnQKLSsgICAgICAgIGNoZWNrX2NvbmZpZwotKyAgICAgICAgbG9nX2RhZW1vbl9tc2cg IlJlbG9hZGluZyBIUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyJ3MgY29uZmlndXJhdGlv biIgImhwbnNzaGQiIHx8IHRydWUKLSsgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3Rv cCAtLXNpZ25hbCAxIC0tcXVpZXQgLS1va25vZG8gLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQg LS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkOyB0aGVuCi0rICAgICAgICAgICAgbG9nX2VuZF9tc2cg MCB8fCB0cnVlCi0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0 cnVlCi0rICAgICAgICBmaQotKyAgICAgICAgOzsKLSsKLSsKLSsgIHJlc3RhcnQpCi0rICAgICAg ICBjaGVja19wcml2c2VwX2RpcgotKyAgICAgICAgY2hlY2tfY29uZmlnCi0rICAgICAgICBsb2df ZGFlbW9uX21zZyAiUmVzdGFydGluZyBIUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIiAi aHBuc3NoZCIgfHwgdHJ1ZQotKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVp ZXQgLS1va25vZG8gLS1yZXRyeSAzMCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMg L3Vzci9zYmluL2hwbnNzaGQKLSsgICAgICAgIGNoZWNrX2Zvcl9ub19zdGFydCBsb2dfZW5kX21z ZwotKyAgICAgICAgY2hlY2tfZGV2X251bGwgbG9nX2VuZF9tc2cKLSsgICAgICAgICMgc2hlbGxj aGVjayBkaXNhYmxlPVNDMjA4NgotKyAgICAgICAgaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFy dCAtLXF1aWV0IC0tb2tub2RvIC0tY2h1aWQgMDowIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlk IC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZCAtLSAkU1NIRF9PUFRTOyB0aGVuCi0rICAgICAgICAg ICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCi0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAgbG9n X2VuZF9tc2cgMSB8fCB0cnVlCi0rICAgICAgICBmaQotKyAgICAgICAgOzsKLSsKLSsKLSsgIHRy eS1yZXN0YXJ0KQotKyAgICAgICAgY2hlY2tfcHJpdnNlcF9kaXIKLSsgICAgICAgIGNoZWNrX2Nv bmZpZwotKyAgICAgICAgbG9nX2RhZW1vbl9tc2cgIlJlc3RhcnRpbmcgSFBOL09wZW5CU0QgU2Vj dXJlIFNoZWxsIHNlcnZlciIgImhwbnNzaGQiIHx8IHRydWUKLSsgICAgICAgIFJFVD0wCi0rICAg ICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMwIC0tcGlkZmls ZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZCB8fCBSRVQ9IiQ/Igot KyAgICAgICAgY2FzZSAkUkVUIGluCi0rICAgICAgICAgICAgMCkKLSsgICAgICAgICAgICAgICAg IyBvbGQgZGFlbW9uIHN0b3BwZWQKLSsgICAgICAgICAgICAgICAgY2hlY2tfZm9yX25vX3N0YXJ0 IGxvZ19lbmRfbXNnCi0rICAgICAgICAgICAgICAgIGNoZWNrX2Rldl9udWxsIGxvZ19lbmRfbXNn Ci0rICAgICAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA4NgotKyAgICAgICAg ICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1va25vZG8gLS1j aHVpZCAwOjAgLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9ocG5z c2hkIC0tICRTU0hEX09QVFM7IHRoZW4KLSsgICAgICAgICAgICAgICAgICAgIGxvZ19lbmRfbXNn IDAgfHwgdHJ1ZQotKyAgICAgICAgICAgICAgICBlbHNlCi0rICAgICAgICAgICAgICAgICAgICBs b2dfZW5kX21zZyAxIHx8IHRydWUKLSsgICAgICAgICAgICAgICAgZmkKLSsgICAgICAgICAgICAg ICAgOzsKLSsgICAgICAgICAgICAxKQotKyAgICAgICAgICAgICAgICAjIGRhZW1vbiBub3QgcnVu bmluZwotKyAgICAgICAgICAgICAgICBsb2dfcHJvZ3Jlc3NfbXNnICIobm90IHJ1bm5pbmcpIiB8 fCB0cnVlCi0rICAgICAgICAgICAgICAgIGxvZ19lbmRfbXNnIDAgfHwgdHJ1ZQotKyAgICAgICAg ICAgICAgICA7OwotKyAgICAgICAgICAgICopCi0rICAgICAgICAgICAgICAgICMgZmFpbGVkIHRv IHN0b3AKLSsgICAgICAgICAgICAgICAgbG9nX3Byb2dyZXNzX21zZyAiKGZhaWxlZCB0byBzdG9w KSIgfHwgdHJ1ZQotKyAgICAgICAgICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUKLSsgICAg ICAgICAgICAgICAgOzsKLSsgICAgICAgIGVzYWMKLSsgICAgICAgIDs7Ci0rCi0rCi0rICBzdGF0 dXMpCi0rICAgICAgICBzdGF0dXNfb2ZfcHJvYyAtcCAvcnVuL2hwbnNzaGQucGlkIC91c3Ivc2Jp bi9ocG5zc2hkIGhwbnNzaGQgJiYgZXhpdCAwIHx8IGV4aXQgJD8KLSsgICAgICAgIDs7Ci0rCi0r Ci0rICAqKQotKyAgICAgICAgbG9nX2FjdGlvbl9tc2cgIlVzYWdlOiAvZXRjL2luaXQuZC9ocG5z c2gge3N0YXJ0fHN0b3B8cmVsb2FkfGZvcmNlLXJlbG9hZHxyZXN0YXJ0fHRyeS1yZXN0YXJ0fHN0 YXR1c30iIHx8IHRydWUKLSsgICAgICAgIGV4aXQgMQotK2VzYWMKLSsKLStleGl0IDAKLSsKLSsK LStTdGVwIDEwOiBXb3JraW5nIHdpdGggU0VMaW51eC4KLSsKLStJZiB5b3UgYXJlIHVzaW5nIFNF TGludXggeW914oCZbGwgbmVlZCB0byBydW4gYSBmZXcgbW9yZSBjb21tYW5kcyBpbiBvcmRlciB0 byBncmFudCBocG5zc2ggdGhlCi0rbmVjZXNzYXJ5IGV4Y2VwdGlvbnMgdG8gb3BlbiBzb2NrZXRz LCBmaWxlcywgcmVhZCBrZXlzLCBhbmQgc28gZm9ydGguIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1h bmRzCi0rdG8gYWxsb3cgdGhpcy4gTm90ZSwgSeKAmW0gbm90IHN1cmUgZXZlcnkgc2luZ2xlIG9u ZSBvZiB0aGVzZSBpcyBuZWVkZWQgc28gaWYgc29tZW9uZSBrbm93cyBiZXR0ZXIKLStwbGVhc2Ug bGV0IG1lIGtub3cuIEFnYWluLCBkb3VibGUgY2hlY2sgdGhlIHBhdGhzIG9mIHRoZSBmaWxlcyBi ZWluZyB1cGRhdGVkLgotKwotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoZF9rZXlf dCAgL2V0Yy9ocG5zc2gvc3NoX2hvc3RfZHNhX2tleQotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1m IGYgLXQgc3NoZF9rZXlfdCAgL2V0Yy9ocG5zc2gvc3NoX2hvc3RfcnNhX2tleQotK3NlbWFuYWdl IGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoZF9rZXlfdCAgL2V0Yy9ocG5zc2gvc3NoX2hvc3RfZWNk c2Ffa2V5Ci0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hw bnNzaC9zc2hfaG9zdF9lZDI1NTE5X2tleQotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQg c3NoZF9rZXlfdCAvZXRjL2hwbnNzaC9zc2hfaG9zdF9kc2Ffa2V5LnB1YgotK3NlbWFuYWdlIGZj b250ZXh0IC1hIC1mIGYgLXQgc3NoZF9rZXlfdCAvZXRjL2hwbnNzaC9zc2hfaG9zdF9yc2Ffa2V5 LnB1YgotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoZF9rZXlfdCAgL2V0Yy9ocG5z c2gvc3NoX2hvc3RfZWNkc2Ffa2V5LnB1YgotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQg c3NoZF9rZXlfdCAgL2V0Yy9ocG5zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkucHViCi0rc2VtYW5h Z2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2V4ZWNfdCAvdXNyL3NiaW4vaHBuc3NoZAotK3Nl bWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoZF9rZXlnZW5fZXhlY190IC91c3IvbGliZXhl Yy9ocG5zc2gvaHBuc3NoZC1rZXlnZW4KLStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IGJp bl90IC91c3IvbGliZXhlYy9ocG5zc2gvaHBuc2Z0cC1zZXJ2ZXIKLStzZW1hbmFnZSBmY29udGV4 dCAtYSAtZiBmIC10IHNzaF9leGVjX3QgL3Vzci9iaW4vaHBuc3NoCi0rc2VtYW5hZ2UgZmNvbnRl eHQgLWEgLWYgZiAtdCBzc2hfYWdlbnRfZXhlY190IC91c3IvYmluL2hwbnNzaC1hZ2VudAotK3Nl bWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoX2tleWdlbl9leGVjX3QgL3Vzci9iaW4vaHBu c3NoLWtleWdlbgotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgZXRjX3QgL2V0Yy9wYW0u ZC9ocG5zc2hkCi0rc2VtYW5hZ2UgcG9ydCAtYSAtdCBzc2hfcG9ydF90IC1wIHRjcCAyMjIyCi0r cmVzdG9yZWNvbiAvdXNyL3NiaW4vaHBuc3NoZAotK3Jlc3RvcmVjb24gL2V0Yy9ocG5zc2gvc3No Kl9rZXkKLStyZXN0b3JlY29uIC9ldGMvaHBuc3NoL3NzaCpfa2V5XC5wdWIKLStyZXN0b3JlY29u IC91c3IvbGliZXhlYy9ocG5zc2gvaHBuc3NoZC1rZXlnZW4KLStyZXN0b3JlY29uIC91c3IvbGli ZXhlYy9ocG5zc2gvaHBuc2Z0cC1zZXJ2ZXIKLStyZXN0b3JlY29uIC91c3IvYmluL2hwbnNzaAot K3Jlc3RvcmVjb24gL3Vzci9iaW4vaHBuc3NoLWFnZW50Ci0rcmVzdG9yZWNvbiAvdXNyL2Jpbi9o cG5zc2gta2V5Z2VuCi0rcmVzdG9yZWNvbiAvZXRjL3BhbS5kL2hwbnNzaGQKLWRpZmYgLU51ciBv cGVuc3NoLTEwLjNwMS5vcmlnL2tleC5jIG9wZW5zc2gtMTAuM3AxL2tleC5jCi0tLS0gb3BlbnNz aC0xMC4zcDEub3JpZy9rZXguYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAot KysrIG9wZW5zc2gtMTAuM3AxL2tleC5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI0ODczMTgzICsw MjAwCi1AQCAtNjMsNiArNjMsNyBAQAotIAotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVk ZSAic3NoYnVmLmgiCi0rI2luY2x1ZGUgImNhbm9ob3N0LmgiCi0gI2luY2x1ZGUgImRpZ2VzdC5o IgotICNpbmNsdWRlICJ4bWFsbG9jLmgiCi0gI2luY2x1ZGUgImF1ZGl0LmgiCi1AQCAtNzgxLDE3 ICs3ODIsODMgQEAKLSAJZnJlZShrZXgpOwotIH0KLSAKLSsvKgotKyAqIFRoaXMgZnVuY3Rpb24g c2Vla3MgdGhyb3VnaCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGFuZCBjaGVja3MgZm9yIGluc3Rh bmNlcwotKyAqIG9mIHRoZSBtdWx0aXRocmVhZGVkIENDMjAgY2lwaGVyLiBJZiBmb3VuZCwgaXQg dGhlbiBlbnN1cmVzIHRoYXQgdGhlIHNlcmlhbAotKyAqIENDMjAgY2lwaGVyIGlzIGFsc28gaW4g dGhlIGxpc3QsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuCi0rICovCi0rY2hhciAqCi0rcGF0Y2hf bGlzdChjaGFyICogb3JpZykKLSt7Ci0rCWNoYXIgKiBhZGogPSB4c3RyZHVwKG9yaWcpOwotKwlj aGFyICogbWF0Y2g7Ci0rCXVfaW50IG5leHQ7Ci0rCi0rCWNvbnN0IGNoYXIgKiBjY3BzdHIgPSAi Y2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20iOwotKwljb25zdCBjaGFyICogY2NwbXRzdHIg PSAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyI7Ci0rCi0rCW1hdGNoID0gbWF0Y2hf bGlzdChjY3BtdHN0ciwgb3JpZywgJm5leHQpOwotKwlpZiAobWF0Y2ggIT0gTlVMTCkgeyAvKiBD QzIwLU1UIGZvdW5kIGluIHRoZSBsaXN0ICovCi0rCQlmcmVlKG1hdGNoKTsKLSsJCW1hdGNoID0g bWF0Y2hfbGlzdChjY3BzdHIsIG9yaWcsIE5VTEwpOwotKwkJaWYgKG1hdGNoID09IE5VTEwpIHsg LyogQ0MyMC1TZXJpYWwgTk9UIGZvdW5kIGluIHRoZSBsaXN0ICovCi0rCQkJYWRqID0geHJlYWxs b2NhcnJheShhZGosCi0rCQkJICAgIHN0cmxlbihhZGopIC8qIG9yaWdpbmFsIHN0cmluZyBsZW5n dGggKi8KLSsJCQkgICAgKyAxIC8qIGZvciB0aGUgb3JpZ2luYWwgbnVsbC10ZXJtaW5hdG9yICov Ci0rCQkJICAgICsgc3RybGVuKGNjcHN0cikgLyogbWFrZSByb29tIGZvciBjY3BzdHIgKi8KLSsJ CQkgICAgKyAxIC8qIG1ha2Ugcm9vbSBmb3IgdGhlIGNvbW1hIGRlbGltaXRlciAqLwotKwkJCSAg ICAsIHNpemVvZihjaGFyKSk7Ci0rCQkJLyoKLSsJCQkgKiBhZGpbbmV4dF0gcG9pbnRzIHRvIHRo ZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIENDMjAtTVQKLSsJCQkgKiBzdHJpbmcuIGFkaltuZXh0XSBt aWdodCBiZSAnLCcgb3IgJ1wwJyBhdCB0aGlzIHBvaW50LgotKwkJCSAqLwotKwkJCWFkaltuZXh0 XSA9ICcsJzsKLSsJCQkvKiBhZGogKyBuZXh0ICsgMSBpcyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRo YXQgY29tbWEgKi8KLSsJCQltZW1jcHkoYWRqICsgbmV4dCArIDEsIGNjcHN0ciwgc3RybGVuKGNj cHN0cikpOwotKwkJCS8qIHJld3JpdGUgdGhlIHJlc3Qgb2YgdGhlIG9yaWdpbmFsIGxpc3QgKi8K LSsJCQltZW1jcHkoYWRqICsgbmV4dCArIDEgKyBzdHJsZW4oY2Nwc3RyKSwgb3JpZyArIG5leHQs Ci0rCQkJICAgIHN0cmxlbihvcmlnICsgbmV4dCkgKyAxKTsKLSsJCX0gZWxzZSB7IC8qIENDMjAt U2VyaWFsIGZvdW5kIGluIHRoZSBsaXN0LCBub3RoaW5nIHRvIGRvICovCi0rCQkJZnJlZShtYXRj aCk7Ci0rCQl9Ci0rCX0KLSsKLSsJcmV0dXJuIGFkajsKLSt9Ci0rCi0gaW50Ci0ga2V4X3JlYWR5 KHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqcHJvcG9zYWxbUFJPUE9TQUxfTUFYXSkKLSB7Ci0tCWlu dCByOwotKwlpbnQgciA9IDA7Ci0rCi0rI2lmZGVmIFdJVEhfT1BFTlNTTAotKwljaGFyICogb3Jp Z19jdG9zID0gcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RPU107Ci0rCWNoYXIgKiBvcmln X3N0b2MgPSBwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19TVE9DXTsKLSsJcHJvcG9zYWxbUFJP UE9TQUxfRU5DX0FMR1NfQ1RPU10gPQotKwkgICAgcGF0Y2hfbGlzdChwcm9wb3NhbFtQUk9QT1NB TF9FTkNfQUxHU19DVE9TXSk7Ci0rCXByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdID0K LSsJICAgIHBhdGNoX2xpc3QocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfU1RPQ10pOwotKwot KwkvKgotKwkgKiBUT0RPOiBMaWtlbHkgbWVtb3J5IGxlYWsgaGVyZS4gVGhlIG9yaWdpbmFsIGNv bnRlbnRzIG9mCi0rCSAqIHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdIGFyZSBubyBs b25nZXIgYWNjZXNzaWJsZSBvcgotKwkgKiBmcmVlYWJsZS4KLSsJICovCi0rI2VuZGlmCi0gCi0g CWlmICgociA9IGtleF9wcm9wMmJ1Zihzc2gtPmtleC0+bXksIHByb3Bvc2FsKSkgIT0gMCkKLS0J CXJldHVybiByOwotKwkJZ290byByZXN0b3JlUHJvcG9zYWw7Ci0gCXNzaC0+a2V4LT5mbGFncyA9 IEtFWF9JTklUSUFMOwotIAlrZXhfcmVzZXRfZGlzcGF0Y2goc3NoKTsKLSAJc3NoX2Rpc3BhdGNo X3NldChzc2gsIFNTSDJfTVNHX0tFWElOSVQsICZrZXhfaW5wdXRfa2V4aW5pdCk7Ci0tCXJldHVy biAwOwotKyByZXN0b3JlUHJvcG9zYWw6Ci0rI2lmZGVmIFdJVEhfT1BFTlNTTAotKwlmcmVlKHBy b3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdKTsKLSsJZnJlZShwcm9wb3NhbFtQUk9QT1NB TF9FTkNfQUxHU19TVE9DXSk7Ci0rCXByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdID0g b3JpZ19jdG9zOwotKwlwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19TVE9DXSA9IG9yaWdfc3Rv YzsKLSsjZW5kaWYKLSsJcmV0dXJuIHI7Ci0gfQotIAotIGludAotQEAgLTk4MCw2ICsxMDQ3LDEx IEBACi0gCWludCBuZW5jLCBubWFjLCBuY29tcDsKLSAJdV9pbnQgbW9kZSwgY3RvcywgbmVlZCwg ZGhfbmVlZCwgYXV0aGxlbjsKLSAJaW50IHIsIGZpcnN0X2tleF9mb2xsb3dzOwotKwlpbnQgYXV0 aF9mbGFnID0gMDsKLSsJaW50IGxvZ19mbGFnID0gMDsKLSsKLSsJYXV0aF9mbGFnID0gcGFja2V0 X2F1dGhlbnRpY2F0aW9uX3N0YXRlKHNzaCk7Ci0rCWRlYnVnKCJBVVRIIFNUQVRFIElTICVkIiwg YXV0aF9mbGFnKTsKLSAKLSAJZGVidWcyKCJsb2NhbCAlcyBLRVhJTklUIHByb3Bvc2FsIiwga2V4 LT5zZXJ2ZXIgPyAic2VydmVyIiA6ICJjbGllbnQiKTsKLSAJaWYgKChyID0ga2V4X2J1ZjJwcm9w KGtleC0+bXksIE5VTEwsICZteSkpICE9IDApCi1AQCAtMTA1Niw2ICsxMTI4LDMxIEBACi0gCQkJ cGVlcltuZW5jXSA9IE5VTEw7Ci0gCQkJZ290byBvdXQ7Ci0gCQl9Ci0rI2lmZGVmIFdJVEhfT1BF TlNTTAotKwkJaWYgKChzdHJjbXAobmV3a2V5cy0+ZW5jLm5hbWUsICJjaGFjaGEyMC1wb2x5MTMw NUBvcGVuc3NoLmNvbSIpCi0rCQkgICAgPT0gMCkgJiYgKG1hdGNoX2xpc3QoImNoYWNoYTIwLXBv bHkxMzA1LW10QGhwbnNzaC5vcmciLAotKwkJICAgIG15W25lbmNdLCBOVUxMKSAhPSBOVUxMKSkg ewotKwkJCS8qCi0rCQkJICogaWYgd2UncmUgdXNpbmcgdGhlIHNlcmlhbCBDQzIwIGNpcGhlciB3 aGlsZSB0aGUKLSsJCQkgKiBtdWx0aXRocmVhZGVkIGltcGxlbWVudGF0aW9uIGlzIGFuIG9wdGlv bi4uLgotKwkJCSAqLwotKwkJCWZyZWUobmV3a2V5cy0+ZW5jLm5hbWUpOwotKwkJCW5ld2tleXMt PmVuYy5jaXBoZXIgPSBjaXBoZXJfYnlfbmFtZSgKLSsJCQkgICAgImNoYWNoYTIwLXBvbHkxMzA1 LW10QGhwbnNzaC5vcmciKTsKLSsJCQlpZiAobmV3a2V5cy0+ZW5jLmNpcGhlciA9PSBOVUxMKSB7 Ci0rCQkJCWVycm9yX2YoIiVzIGNpcGhlciBub3QgZm91bmQuIiwKLSsJCQkJICAgICJjaGFjaGEy MC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIik7Ci0rCQkJCXIgPSBTU0hfRVJSX0lOVEVSTkFMX0VS Uk9SOwotKwkJCQlrZXgtPmZhaWxlZF9jaG9pY2UgPSBwZWVyW25lbmNdOwotKwkJCQlwZWVyW25l bmNdID0gTlVMTDsKLSsJCQkJZ290byBvdXQ7Ci0rCQkJfSBlbHNlIHsKLSsJCQkJbmV3a2V5cy0+ ZW5jLm5hbWUgPSB4c3RyZHVwKAotKwkJCQkgICAgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNz aC5vcmciKTsKLSsJCQl9Ci0rCQkJLyogd2UgcHJvbW90ZSB0byB0aGUgbXVsdGl0aHJlYWRlZCBp bXBsZW1lbnRhdGlvbiAqLwotKwkJfQotKyNlbmRpZgotIAkJYXV0aGxlbiA9IGNpcGhlcl9hdXRo bGVuKG5ld2tleXMtPmVuYy5jaXBoZXIpOwotIAkJLyogaWdub3JlIG1hYyBmb3IgYXV0aGVudGlj YXRlZCBlbmNyeXB0aW9uICovCi0gCQlpZiAoYXV0aGxlbiA9PSAwICYmCi1AQCAtMTA3MSwxMSAr MTE2OCw0MyBAQAotIAkJCXBlZXJbbmNvbXBdID0gTlVMTDsKLSAJCQlnb3RvIG91dDsKLSAJCX0K LSsJCWRlYnVnKCJSRVFVRVNURUQgRU5DLk5BTUUgaXMgJyVzJyIsIG5ld2tleXMtPmVuYy5uYW1l KTsKLSsJCWRlYnVnKCJSRVFVRVNURUQgTUFDLk5BTUUgaXMgJyVzJyIsIG5ld2tleXMtPm1hYy5u YW1lKTsKLSsJCWlmIChzdHJjbXAobmV3a2V5cy0+ZW5jLm5hbWUsICJub25lIikgPT0gMCkgewot KwkJCWlmIChhdXRoX2ZsYWcgPT0gMSkgewotKwkJCQlkZWJ1ZygiTm9uZSByZXF1ZXN0ZWQgcG9z dCBhdXRoZW50aWNhdGlvbi4iKTsKLSsJCQkJc3NoLT5ub25lID0gMTsKLSsJCQl9Ci0rCQkJZWxz ZQotKwkJCQlmYXRhbCgiUHJlLWF1dGhlbnRpY2F0aW9uIG5vbmUgY2lwaGVyIHJlcXVlc3RzIGFy ZSBub3QgYWxsb3dlZC4iKTsKLSsKLSsJCQlpZiAobmV3a2V5cy0+bWFjLm5hbWUgIT0gTlVMTCAm JiBzdHJjbXAobmV3a2V5cy0+bWFjLm5hbWUsICJub25lIikgPT0gMCkgewotKwkJCQlkZWJ1Zygi UmVxdWVzdGluZzogTk9ORU1BQy4gQXV0aGZsYWcgaXMgJWQiLCBhdXRoX2ZsYWcpOwotKwkJCQlz c2gtPm5vbmVfbWFjID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCi0gCQlkZWJ1Zygia2V4OiAlcyBjaXBo ZXI6ICVzIE1BQzogJXMgY29tcHJlc3Npb246ICVzIiwKLSAJCSAgICBjdG9zID8gImNsaWVudC0+ c2VydmVyIiA6ICJzZXJ2ZXItPmNsaWVudCIsCi0gCQkgICAgbmV3a2V5cy0+ZW5jLm5hbWUsCi0g CQkgICAgYXV0aGxlbiA9PSAwID8gbmV3a2V5cy0+bWFjLm5hbWUgOiAiPGltcGxpY2l0PiIsCi0g CQkgICAgbmV3a2V5cy0+Y29tcC5uYW1lKTsKLSsJCS8qCi0rCQkgKiBjbGllbnQgc3RhcnRzIHdp dGggY3RvcyA9IDAgJiYgbG9nIGZsYWcgPSAwIGFuZCBubyBsb2cuCi0rCQkgKiAybmQgY2xpZW50 IHBhc3MgY3RvcyA9IDEgYW5kIGZsYWcgPSAxIHNvIG5vIGxvZy4KLSsJCSAqIHNlcnZlciBzdGFy dHMgd2l0aCBjdG9zID0gMSAmJiBsb2dfZmxhZyA9IDAgc28gbG9nLgotKwkJICogMm5kIHNldmVy IHBhc3MgY3RvcyA9IDEgJiYgbG9nIGZsYWcgPSAxIHNvIG5vIGxvZy4KLSsJCSAqIC1janIKLSsJ CSAqLwotKwkJaWYgKGN0b3MgJiYgIWxvZ19mbGFnKSB7Ci0rCQkJbG9naXQoIlNTSDogU2VydmVy O0x0eXBlOiBLZXg7UmVtb3RlOiAlcy0lZDtFbmM6ICVzO01BQzogJXM7Q29tcDogJXMiLAotKwkJ CSAgICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLAotKwkJCSAgICBzc2hfcmVtb3RlX3BvcnQoc3No KSwKLSsJCQkgICAgbmV3a2V5cy0+ZW5jLm5hbWUsCi0rCQkJICAgIGF1dGhsZW4gPT0gMCA/IG5l d2tleXMtPm1hYy5uYW1lIDogIjxpbXBsaWNpdD4iLAotKwkJCSAgICBuZXdrZXlzLT5jb21wLm5h bWUpOwotKwkJfQotKwkJbG9nX2ZsYWcgPSAxOwotIAl9Ci0gCW5lZWQgPSBkaF9uZWVkID0gMDsK LSAJZm9yIChtb2RlID0gMDsgbW9kZSA8IE1PREVfTUFYOyBtb2RlKyspIHsKLUBAIC0xNDM1LDcg KzE1NjQsNyBAQAotIAlpZiAodmVyc2lvbl9hZGRlbmR1bSAhPSBOVUxMICYmICp2ZXJzaW9uX2Fk ZGVuZHVtID09ICdcMCcpCi0gCQl2ZXJzaW9uX2FkZGVuZHVtID0gTlVMTDsKLSAJaWYgKChyID0g c3NoYnVmX3B1dGYob3VyX3ZlcnNpb24sICJTU0gtJWQuJWQtJXMlcyVzXHJcbiIsCi0tCSAgICBQ Uk9UT0NPTF9NQUpPUl8yLCBQUk9UT0NPTF9NSU5PUl8yLCBTU0hfVkVSU0lPTiwKLSsJICAgIFBS T1RPQ09MX01BSk9SXzIsIFBST1RPQ09MX01JTk9SXzIsIFNTSF9SRUxFQVNFLAotIAkgICAgdmVy c2lvbl9hZGRlbmR1bSA9PSBOVUxMID8gIiIgOiAiICIsCi0gCSAgICB2ZXJzaW9uX2FkZGVuZHVt ID09IE5VTEwgPyAiIiA6IHZlcnNpb25fYWRkZW5kdW0pKSAhPSAwKSB7Ci0gCQlvZXJybm8gPSBl cnJubzsKLUBAIC0xNTcxLDkgKzE3MDAsMjQgQEAKLSAJCXIgPSBTU0hfRVJSX0lOVkFMSURfRk9S TUFUOwotIAkJZ290byBvdXQ7Ci0gCX0KLSsKLSsJLyogcmVwb3J0IHRoZSB2ZXJzaW9uIGluZm9y bWF0aW9uIHRvIHN5c2xvZyBpZiB0aGlzIGlzIHRoZSBzZXJ2ZXIgKi8KLSsgICAgICAgIGlmICh0 aW1lb3V0X21zID09IC0xKSB7IC8qIG9ubHkgdGhlIHNlcnZlciB1c2VzIHRoaXMgdmFsdWUgKi8K LSsJCWxvZ2l0KCJTU0g6IFNlcnZlcjtMdHlwZTogVmVyc2lvbjtSZW1vdGU6ICVzLSVkO1Byb3Rv Y29sOiAlZC4lZDtDbGllbnQ6ICUuMTAwcyIsCi0rCQkgICAgICBzc2hfcmVtb3RlX2lwYWRkcihz c2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSwKLSsJCSAgICAgIHJlbW90ZV9tYWpvciwgcmVtb3Rl X21pbm9yLCByZW1vdGVfdmVyc2lvbik7Ci0rCX0KLSsKLSAJZGVidWcoIlJlbW90ZSBwcm90b2Nv bCB2ZXJzaW9uICVkLiVkLCByZW1vdGUgc29mdHdhcmUgdmVyc2lvbiAlLjEwMHMiLAotIAkgICAg cmVtb3RlX21ham9yLCByZW1vdGVfbWlub3IsIHJlbW90ZV92ZXJzaW9uKTsKLSAJY29tcGF0X2Jh bm5lcihzc2gsIHJlbW90ZV92ZXJzaW9uKTsKLSsJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX0hQTlNT SCkKLSsJCWRlYnVnKCJIUE4gdG8gSFBOIENvbm5lY3Rpb24uIik7Ci0rCWVsc2UKLSsJCWRlYnVn KCJOb24tSFBOIHRvIEhQTiBDb25uZWN0aW9uLiIpOwotKwotKwlpZihzc2gtPmNvbXBhdCAmIFNT SF9SRVNUUklDVF9XSU5ET1cpCi0rCQlkZWJ1ZyAoIldpbmRvdyBzaXplIHJlc3RyaWN0ZWQuIik7 Ci0gCi0gCW1pc21hdGNoID0gMDsKLSAJc3dpdGNoIChyZW1vdGVfbWFqb3IpIHsKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2xvZy5jIG9wZW5zc2gtMTAuM3AxL2xvZy5jCi0tLS0gb3Bl bnNzaC0xMC4zcDEub3JpZy9sb2cuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIw MAotKysrIG9wZW5zc2gtMTAuM3AxL2xvZy5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI1MTI1NDgx ICswMjAwCi1AQCAtNDcsNiArNDcsMTEgQEAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1 ZGUgPHN5c2xvZy5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4K LSsjaW5jbHVkZSAicGFja2V0LmgiIC8qIG5lZWRlZCBmb3IgaG9zdCBhbmQgcG9ydCBsb29rIHVw cyAqLwotKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSsjIGluY2x1ZGUgPHN5cy90aW1lLmg+IC8q IHRvIGdldCBjdXJyZW50IHRpbWUgKi8KLSsjZW5kaWYKLSAjaWYgZGVmaW5lZChIQVZFX1NUUk5W SVMpICYmIGRlZmluZWQoSEFWRV9WSVNfSCkgJiYgIWRlZmluZWQoQlJPS0VOX1NUUk5WSVMpCi0g IyBpbmNsdWRlIDx2aXMuaD4KLSAjZW5kaWYKLUBAIC02NSw2ICs3MCw4IEBACi0gc3RhdGljIHNp emVfdCBubG9nX3ZlcmJvc2U7Ci0gZXh0ZXJuIGNoYXIgKl9fcHJvZ25hbWU7Ci0gCi0rZXh0ZXJu IHN0cnVjdCBzc2ggKmFjdGl2ZV9zdGF0ZTsKLSsKLSAjZGVmaW5lIExPR19TWVNMT0dfVklTCShW SVNfQ1NUWUxFfFZJU19OTHxWSVNfVEFCfFZJU19PQ1RBTCkKLSAjZGVmaW5lIExPR19TVERFUlJf VklTCShWSVNfU0FGRXxWSVNfT0NUQUwpCi0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9tYWMuYyBvcGVuc3NoLTEwLjNwMS9tYWMuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvbWFj LmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNw MS9tYWMuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNTM2MjQ1NSArMDIwMAotQEAgLTYzLDYgKzYz LDcgQEAKLSAJeyAiaG1hYy1zaGEyLTUxMiIsCQkJU1NIX0RJR0VTVCwgU1NIX0RJR0VTVF9TSEE1 MTIsIDAsIDAsIDAsIDAgfSwKLSAJeyAiaG1hYy1tZDUiLAkJCQlTU0hfRElHRVNULCBTU0hfRElH RVNUX01ENSwgMCwgMCwgMCwgMCB9LAotIAl7ICJobWFjLW1kNS05NiIsCQkJU1NIX0RJR0VTVCwg U1NIX0RJR0VTVF9NRDUsIDk2LCAwLCAwLCAwIH0sCi0rCXsgIm5vbmUiLAkJCQlTU0hfRElHRVNU LCBTU0hfRElHRVNUX05VTEwsIDAsIDAsIDAsIDAgfSwKLSAJeyAidW1hYy02NEBvcGVuc3NoLmNv bSIsCQlTU0hfVU1BQywgMCwgMCwgMTI4LCA2NCwgMCB9LAotIAl7ICJ1bWFjLTEyOEBvcGVuc3No LmNvbSIsCQlTU0hfVU1BQzEyOCwgMCwgMCwgMTI4LCAxMjgsIDAgfSwKLSAKLWRpZmYgLU51ciBv cGVuc3NoLTEwLjNwMS5vcmlnL01ha2VmaWxlLmluIG9wZW5zc2gtMTAuM3AxL01ha2VmaWxlLmlu Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9NYWtlZmlsZS5pbgkyMDI2LTA3LTAyIDAwOjI3OjA2 LjEwNTE5NTQ0NiArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL01ha2VmaWxlLmluCTIwMjYtMDct MDIgMDE6MTg6MjcuNzQwNTcyMjE3ICswMjAwCi1AQCAtNTQsNyArNTQsNyBAQAotIENGTEFHU19O T1BJRT1AQ0ZMQUdTX05PUElFQAotIENQUEZMQUdTPS1JLiAtSSQoc3JjZGlyKSAtSSQoQ09NUEFU SU5DTFVERVMpIEBDUFBGTEFHU0AgJChQQVRIUykgQERFRlNACi0gUElDRkxBRz1AUElDRkxBR0AK LS1MSUJTPUBMSUJTQAotK0xJQlM9QExJQlNAIC1scHRocmVhZAotIENIQU5ORUxMSUJTPUBDSEFO TkVMTElCU0AKLSBLNUxJQlM9QEs1TElCU0AKLSBHU1NMSUJTPUBHU1NMSUJTQAotQEAgLTkzLDcg KzkzLDcgQEAKLSBMSUJTU0hfT0JKUz0ke0xJQk9QRU5TU0hfT0JKU30gXAotIAlhdXRoZmQubyBh dXRoZmlsZS5vIFwKLSAJY2Fub2hvc3QubyBjaGFubmVscy5vIGNpcGhlci5vIGNpcGhlci1hZXMu byBjaXBoZXItYWVzY3RyLm8gXAotLQljbGVhbnVwLm8gXAotKwljbGVhbnVwLm8gY2lwaGVyLWN0 ci1tdC5vIFwKLSAJY29tcGF0Lm8gZmF0YWwubyBob3N0ZmlsZS5vIFwKLSAJbG9nLm8gbWF0Y2gu byBtb2R1bGkubyBuY2hhbi5vIHBhY2tldC5vIFwKLSAJcmVhZHBhc3MubyB0dHltb2Rlcy5vIHht YWxsb2MubyBhZGRyLm8gYWRkcm1hdGNoLm8gXAotQEAgLTEwMyw2ICsxMDMsNyBAQAotIAltc2cu byBkbnMubyBlbnRyb3B5Lm8gZ3NzLWdlbnIubyB1bWFjLm8gdW1hYzEyOC5vIFwKLSAJc211bHRf Y3VydmUyNTUxOV9yZWYubyBcCi0gCXBvbHkxMzA1Lm8gY2hhY2hhLm8gY2lwaGVyLWNoYWNoYXBv bHkubyBjaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8ubyBcCi0rCWNpcGhlci1jaGFjaGFwb2x5 LWxpYmNyeXB0by1tdC5vIFwKLSAJc3NoLWVkMjU1MTkubyBkaWdlc3Qtb3BlbnNzbC5vIGRpZ2Vz dC1saWJjLm8gXAotIAlobWFjLm8gZWQyNTUxOS5vIGVkMjU1MTktb3BlbnNzbC5vIFwKLSAJa2V4 Lm8ga2V4LW5hbWVzLm8ga2V4ZGgubyBrZXhnZXgubyBrZXhlY2RoLm8ga2V4YzI1NTE5Lm8gXAot QEAgLTExMCwxNCArMTExLDE2IEBACi0gCWtleHNudHJ1cDc2MXgyNTUxOS5vIGtleG1sa2VtNzY4 eDI1NTE5Lm8gc250cnVwNzYxLm8ga2V4Z2VuLm8gXAotIAlrZXhnc3NjLm8gXAotIAlzZnRwLXJl YWxwYXRoLm8gcGxhdGZvcm0tcGxlZGdlLm8gcGxhdGZvcm0tdHJhY2luZy5vIHBsYXRmb3JtLW1p c2MubyBcCi0tCXNzaGJ1Zi1pby5vIG1pc2MtYWdlbnQubyBzc2hlcnItbGliY3J5cHRvLm8gYXVk aXRzdHViLm8KLSsJc3NoYnVmLWlvLm8gbWlzYy1hZ2VudC5vIHNzaGVyci1saWJjcnlwdG8ubyBh dWRpdHN0dWIubyBcCi0rCW1ldHJpY3MubyBiaW5uLm8gaGFwcHlleWViYWxscy5vIGNpcGhlci1j dHItbXQtcHJvdmlkZXIubyBcCi0rCWNpcGhlci1jdHItbXQtZnVuY3Rpb25zLm8gb3NzbDMtcHJv dmlkZXItZXJyLm8gbnVtLm8KLSAKLSBQMTFPQkpTPSBzc2gtcGtjczExLWNsaWVudC5vIHNzaC1w a2NzMTEtdXJpLm8KLSAKLSBTS09CSlM9CXNzaC1zay1jbGllbnQubwotIAotIFNTSE9CSlM9IHNz aC5vIHJlYWRjb25mLm8gY2xpZW50bG9vcC5vIHNzaHR0eS5vIFwKLS0Jc3NoY29ubmVjdC5vIHNz aGNvbm5lY3QyLm8gbXV4Lm8gc3NoLXBrY3MxMS5vIHNzaC1wa2NzMTEtdXJpLm8gJChTS09CSlMp Ci0rCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5vIG11eC5vIGNpcGhlci1zd2l0Y2gubyBzc2gt cGtjczExLm8gc3NoLXBrY3MxMS11cmkubyAkKFNLT0JKUykKLSAKLSBTU0hET0JKUz1zc2hkLm8g XAotIAlwbGF0Zm9ybS1saXN0ZW4ubyBcCi1AQCAtMTM2LDcgKzEzOSw3IEBACi0gCWF1dGgyLWdz cy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGdzcy1zZXJ2LWdzaS5vIFwKLSAJbG9naW5y ZWMubyBhdXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0aC1zaWEubyBcCi0gCXNmdHAtc2VydmVy Lm8gc2Z0cC1jb21tb24ubyBcCi0tCXVpZHN3YXAubyBwbGF0Zm9ybS1saXN0ZW4ubyAkKFAxMU9C SlMpICQoU0tPQkpTKQotKwl1aWRzd2FwLm8gcGxhdGZvcm0tbGlzdGVuLm8gY2lwaGVyLXN3aXRj aC5vICQoUDExT0JKUykgJChTS09CSlMpCi0gCi0gU1NIRF9BVVRIX09CSlM9c3NoZC1hdXRoLm8g XAotIAlhdXRoMi1tZXRob2RzLm8gXAotQEAgLTE1MSw3ICsxNTQsNyBAQAotIAlzYW5kYm94LW51 bGwubyBzYW5kYm94LXJsaW1pdC5vIHNhbmRib3gtZGFyd2luLm8gXAotIAlzYW5kYm94LXNlY2Nv bXAtZmlsdGVyLm8gc2FuZGJveC1jYXBzaWN1bS5vICBzYW5kYm94LXNvbGFyaXMubyBcCi0gCXNm dHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubyBcCi0tCXVpZHN3YXAubyAkKFAxMU9CSlMpICQoU0tP QkpTKQotKwl1aWRzd2FwLm8gY2lwaGVyLXN3aXRjaC5vICQoUDExT0JKUykgJChTS09CSlMpCi0g Ci0gU0ZUUF9DTElFTlRfT0JKUz1zZnRwLWNvbW1vbi5vIHNmdHAtY2xpZW50Lm8gc2Z0cC1nbG9i Lm8gc3NoZXJyLW5vbGliY3J5cHRvLm8KLSAKLUBAIC0yMzUsNyArMjM4LDcgQEAKLSAJJChMRCkg LW8gJEAgJChTU0hEX0FVVEhfT0JKUykgJChMREZMQUdTKSAtbHNzaCAtbG9wZW5ic2QtY29tcGF0 ICQoU1NIRExJQlMpICQoTElCUykgJChHU1NMSUJTKSAkKEs1TElCUykgJChDSEFOTkVMTElCUykg JChMSUJXVE1QREIpCi0gCi0gc2NwJChFWEVFWFQpOiAkKExJQkNPTVBBVCkgbGlic3NoLmEgJChT Q1BfT0JKUykKLS0JJChMRCkgLW8gJEAgJChTQ1BfT0JKUykgJChMREZMQUdTKSAtbHNzaCAtbG9w ZW5ic2QtY29tcGF0ICQoTElCUykKLSsJJChMRCkgLW8gJEAgJChTQ1BfT0JKUykgJChMREZMQUdT KSAtbHNzaCAtbG9wZW5ic2QtY29tcGF0ICQoTElCUykgJChDSEFOTkVMTElCUykKLSAKLSBzc2gt YWRkJChFWEVFWFQpOiAkKExJQkNPTVBBVCkgbGlic3NoLmEgJChTU0hBRERfT0JKUykKLSAJJChM RCkgLW8gJEAgJChTU0hBRERfT0JKUykgJChMREZMQUdTKSAtbHNzaCAtbG9wZW5ic2QtY29tcGF0 ICQoTElCUykgJChDSEFOTkVMTElCUykKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL21l dHJpY3MuYyBvcGVuc3NoLTEwLjNwMS9tZXRyaWNzLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmln L21ldHJpY3MuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2gtMTAuM3AxL21ldHJpY3MuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNTg2OTAyNiArMDIwMAot QEAgLTAsMCArMSw0MzkgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAyMiBUaGUgQm9hcmQg b2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCi0rICoKLSsgKiAgQXV0 aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgotKyAqCi0rICogVGhpcyBsaWJyYXJ5 IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgotKyAqCi0rICogVGhp cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCi0rICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0rICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0r ICoKLSsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGljZW5z ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKLSsgKiBpZiBub3QsIHNlZSBodHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvTUlULgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVz LmgiCi0rI2luY2x1ZGUgIm1ldHJpY3MuaCIKLSsjaW5jbHVkZSAic3NoZXJyLmgiCi0rI2luY2x1 ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotKy8qIGtlcm5lbCB2ZXJzaW9u IG1hY3JvIG1vdmVkIHRvIGRlZmluZXMuaCAqLwotKwotKy8qIGFkZCB0aGUgaW5mb3JtYXRpb24g ZnJvbSB0aGUgdGNwX2luZm8gc3RydWN0IHRvIHRoZQotKyAqIHNlcmlhbGl6ZWQgYmluYXJ5IG9i amVjdAotKyAqLwotK3ZvaWQKLSttZXRyaWNzX3dyaXRlX2Jpbm5fb2JqZWN0KHN0cnVjdCB0Y3Bf aW5mbyAqZGF0YSwgc3RydWN0IGJpbm5fc3RydWN0ICpiaW5ub2JqKSB7Ci0rI2lmICFkZWZpbmVk IFRDUF9JTkZPCi0rCS8qdGNwIGluZm8gaXNuJ3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtICov Ci0rCXJldHVybjsKLSsjZWxzZQotKwotKy8qIHRoZSBiYXNlIHNldCBvZiB0Y3BpXyBtZWFzdXJl bWVudHMgc3RhcnRpbmcgZnJvbSBrZXJuZWwgMy43LjAKLSsgKiB0aGVzZSBtZWFzdXJlbWVudHMg ZXhpc3RlZCBpbiBwcmV2aW91cyBrZXJuZWxzIGJ1dCB0aGUgb2xkZXN0IHRoaXMKLSsgKiBpcyBn b2luZyB0byBzdXBwb3J0IGlzIDMuNy4wLiBXZSBkbyBuZWVkIHRvIHN0b3JlIHRoZSBrZXJuZWwg dmVyc2lvbiBhcyB3ZWxsICovCi0rCi0rLyogb2J2aW91bHN5IHRoZSB2ZXJzaW9uIGNvZGUgbWFj cm8gb25seSBleGlzdHMgdW5kZXIgbGludXggc28KLSsgKiBvbiBub24gbGludXggc3lzdGVtcyB3 ZSBzZXQgdGhlIGtlcm5lbCB2ZXJzaW9uIHRvIDAKLSsgKiB3aGljaCB3aWxsIGdldCB1cyB0aGUg YmFzZSBzZXQgb2YgbWV0cmljcyBmcm9tIG5ldGluZXQvdGNwLmgKLSsgKi8KLSsjaWYgKGRlZmlu ZWQgX19saW51eF9fKSAmJiAhZGVmaW5lZChfX2FscGluZV9fKQotKwliaW5uX29iamVjdF9zZXRf dWludDMyKGJpbm5vYmosICJrZXJuZWxfdmVyc2lvbiIsIExJTlVYX1ZFUlNJT05fQ09ERSk7Ci0r I2Vsc2UKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAia2VybmVsX3ZlcnNpb24i LCAwKTsKLSsjZW5kaWYKLSsKLSsJLyogdGhlIGZvbGxvd2luZyBhcmUgY29tbW9uIHVuZGVyIGJv dGggbGludXggYW5kIEJTRCAqLwotKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRj cGlfc25kX3dzY2FsZSIsCi0rCQkJICAgICAgZGF0YS0+dGNwaV9zbmRfd3NjYWxlKTsKLSsJYmlu bl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Jjdl93c2NhbGUiLAotKwkJCSAgICAg IGRhdGEtPnRjcGlfcmN2X3dzY2FsZSk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2Jq LCAidGNwaV9zdGF0ZSIsCi0rCQkJICAgICAgZGF0YS0+dGNwaV9zdGF0ZSk7Ci0rCWJpbm5fb2Jq ZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9vcHRpb25zIiwKLSsJCQkgICAgICBkYXRhLT50 Y3BpX29wdGlvbnMpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Nu ZF9zc3RocmVzaCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfc25kX3NzdGhyZXNoKTsKLSsJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHQiLAotKwkJCSAgICAgICBkYXRh LT50Y3BpX3J0dCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFz dF9kYXRhX3JlY3YiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2xhc3RfZGF0YV9yZWN2KTsKLSsJ Ymlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHR2YXIiLAotKwkJCSAgICAg ICBkYXRhLT50Y3BpX3J0dHZhcik7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwg InRjcGlfc25kX2N3bmQiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZF9jd25kKTsKLSsJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfbXNzIiwKLSsJCQkgICAgICAg ZGF0YS0+dGNwaV9yY3ZfbXNzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9ydG8iLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3J0byk7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX21zcyIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlf c25kX21zcyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3Nw YWNlIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9yY3Zfc3BhY2UpOwotKwotKy8qIHRoZSBmb2xs b3dpbmcgZXhpc3QgdW5kZXIgYm90aCBidXQgd2l0aCBkaWZmZXJlbnQgbmFtZXMgKi8KLSsjaWZk ZWYgX19saW51eF9fCi0rCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9jYV9z dGF0ZSIsCi0rCQkJICAgICAgZGF0YS0+dGNwaV9jYV9zdGF0ZSk7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50OChiaW5ub2JqLCAidGNwaV9wcm9iZXMiLAotKwkJCSAgICAgIGRhdGEtPnRjcGlfcHJv YmVzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2JhY2tvZmYiLAot KwkJCSAgICAgIGRhdGEtPnRjcGlfYmFja29mZik7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50OChi aW5ub2JqLCAidGNwaV9yZXRyYW5zbWl0cyIsCi0rCQkJICAgICAgZGF0YS0+dGNwaV9yZXRyYW5z bWl0cyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NzdGhy ZXNoIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9yY3Zfc3N0aHJlc2gpOwotKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NhY2tlZCIsCi0rCQkJICAgICAgIGRhdGEtPnRj cGlfc2Fja2VkKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9wbXR1 IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9wbXR1KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9mYWNrZXRzIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9mYWNrZXRz KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sb3N0IiwKLSsJCQkg ICAgICAgZGF0YS0+dGNwaV9sb3N0KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9sYXN0X2Fja19zZW50IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9sYXN0X2Fja19z ZW50KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV91bmFja2VkIiwK LSsJCQkgICAgICAgZGF0YS0+dGNwaV91bmFja2VkKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9sYXN0X2RhdGFfc2VudCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlf bGFzdF9kYXRhX3NlbnQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X2xhc3RfYWNrX3JlY3YiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2xhc3RfYWNrX3JlY3YpOwot KwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jlb3JkZXJpbmciLAotKwkJ CSAgICAgICBkYXRhLT50Y3BpX3Jlb3JkZXJpbmcpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMy KGJpbm5vYmosICJ0Y3BpX2Fkdm1zcyIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfYWR2bXNzKTsK LSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZXRyYW5zIiwKLSsJCQkg ICAgICAgZGF0YS0+dGNwaV9yZXRyYW5zKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5u b2JqLCAidGNwaV9hdG8iLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2F0byk7Ci0rCWJpbm5fb2Jq ZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3J0dCIsCi0rCQkJICAgICAgIGRhdGEt PnRjcGlfcmN2X3J0dCk7Ci0rI2Vsc2UKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmos ICJ0Y3BpX2JhY2tvZmYiLAotKwkJCSAgICAgIGRhdGEtPl9fdGNwaV9iYWNrb2ZmKTsKLSsJYmlu bl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2NhX3N0YXRlIiwKLSsJCQkgICAgICBk YXRhLT5fX3RjcGlfY2Ffc3RhdGUpOwotKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwg InRjcGlfcHJvYmVzIiwKLSsJCQkgICAgICBkYXRhLT5fX3RjcGlfcHJvYmVzKTsKLSsJYmlubl9v YmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3JldHJhbnNtaXRzIiwKLSsJCQkgICAgICBk YXRhLT5fX3RjcGlfcmV0cmFuc21pdHMpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5v YmosICJ0Y3BpX3Jjdl9zc3RocmVzaCIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9yY3Zfc3N0 aHJlc2gpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NhY2tlZCIs Ci0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9zYWNrZWQpOwotKwliaW5uX29iamVjdF9zZXRfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX3BtdHUiLAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfcG10dSk7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfZmFja2V0cyIsCi0rCQkJ ICAgICAgIGRhdGEtPl9fdGNwaV9mYWNrZXRzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihi aW5ub2JqLCAidGNwaV9sb3N0IiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX2xvc3QpOwotKwli aW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3NlbnQiLAotKwkJ CSAgICAgICBkYXRhLT5fX3RjcGlfbGFzdF9hY2tfc2VudCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91 aW50MzIoYmlubm9iaiwgInRjcGlfdW5hY2tlZCIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV91 bmFja2VkKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Rh dGFfc2VudCIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9sYXN0X2RhdGFfc2VudCk7Ci0rCWJp bm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfcmVjdiIsCi0rCQkJ ICAgICAgIGRhdGEtPl9fdGNwaV9sYXN0X2Fja19yZWN2KTsKLSsJYmlubl9vYmplY3Rfc2V0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZGVyaW5nIiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3Bp X3Jlb3JkZXJpbmcpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2Fk dm1zcyIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9hZHZtc3MpOwotKwliaW5uX29iamVjdF9z ZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3JldHJhbnMiLAotKwkJCSAgICAgICBkYXRhLT5fX3Rj cGlfcmV0cmFucyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfYXRv IiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX2F0byk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50 MzIoYmlubm9iaiwgInRjcGlfcmN2X3J0dCIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9yY3Zf cnR0KTsKLSsjZW5kaWYKLSsKLSsvKiBVbmRlciBCU0Qgc25kX3JleG1pdHBhY2sgaXMgdGhlIHNh bWUgYXMgbGludXggdG90YWxfcmV0cmFucyovCi0rI2lmZGVmIF9fbGludXhfXwotKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3RvdGFsX3JldHJhbnMiLAotKwkJCSAgICAg ICBkYXRhLT50Y3BpX3RvdGFsX3JldHJhbnMpOwotKyNlbHNlCi0rCWJpbm5fb2JqZWN0X3NldF91 aW50MzIoYmlubm9iaiwgInRjcGlfdG90YWxfcmV0cmFucyIsCi0rCQkJICAgICAgIGRhdGEtPnRj cGlfc25kX3JleG1pdHBhY2spOwotKyNlbmRpZgotKwotKy8qIFRoZSBsYXN0IHNlY3Rpb24gYXJl IGZvciBrZXJuZWwgc3BlY2lmaWMgbWV0cmljcyBpbiBsaW51eCAqLwotKyNpZmRlZiBfX2xpbnV4 X18KLSsjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDMsMTUsMCkKLSsJ Ymlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9tYXhfcGFjaW5nX3JhdGUiLAot KwkJCSAgICAgICBkYXRhLT50Y3BpX21heF9wYWNpbmdfcmF0ZSk7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50NjQoYmlubm9iaiwgInRjcGlfcGFjaW5nX3JhdGUiLAotKwkJCSAgICAgICBkYXRhLT50 Y3BpX3BhY2luZ19yYXRlKTsKLSsjZW5kaWYKLSsKLSsjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49 IEtFUk5FTF9WRVJTSU9OKDQsMSwwKQotKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5vYmos ICJ0Y3BpX2J5dGVzX2Fja2VkIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9ieXRlc19hY2tlZCk7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfcmVjZWl2ZWQi LAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2J5dGVzX3JlY2VpdmVkKTsKLSsjZW5kaWYKLSsKLSsj aWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsMiwwKQotKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NlZ3NfaW4iLAotKwkJCSAgICAgICBkYXRh LT50Y3BpX3NlZ3NfaW4pOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X3NlZ3Nfb3V0IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9zZWdzX291dCk7Ci0rI2VuZGlmCi0r Ci0rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDYsMCkKLSsJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ub3RzZW50X2J5dGVzIiwKLSsJCQkg ICAgICAgZGF0YS0+dGNwaV9ub3RzZW50X2J5dGVzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9taW5fcnR0IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9taW5fcnR0 KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3NfaW4i LAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2RhdGFfc2Vnc19pbik7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfZGF0YV9zZWdzX291dCIsCi0rCQkJICAgICAgIGRhdGEt PnRjcGlfZGF0YV9zZWdzX291dCk7Ci0rI2VuZGlmCi0rCi0rI2lmIExJTlVYX1ZFUlNJT05fQ09E RSA+PSBLRVJORUxfVkVSU0lPTig0LDksMCkKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5v YmosICJ0Y3BpX2RlbGl2ZXJ5X3JhdGVfYXBwX2xpbWl0ZWQiLAotKwkJCSAgICAgIGRhdGEtPnRj cGlfZGVsaXZlcnlfcmF0ZV9hcHBfbGltaXRlZCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50NjQo Ymlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZSIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfZGVs aXZlcnlfcmF0ZSk7Ci0rI2VuZGlmCi0rCi0rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJO RUxfVkVSU0lPTig0LDEwLDApCi0rCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRj cGlfYnVzeV90aW1lIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9idXN5X3RpbWUpOwotKwliaW5u X29iamVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX3NuZGJ1Zl9saW1pdGVkIiwKLSsJCQkg ICAgICAgZGF0YS0+dGNwaV9zbmRidWZfbGltaXRlZCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50 NjQoYmlubm9iaiwgInRjcGlfcnduZF9saW1pdGVkIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9y d25kX2xpbWl0ZWQpOwotKyNlbmRpZgotKwotKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VS TkVMX1ZFUlNJT04oNCwxOCwwKQotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0 Y3BpX2RlbGl2ZXJlZCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfZGVsaXZlcmVkKTsKLSsJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kZWxpdmVyZWRfY2UiLAotKwkJCSAg ICAgICBkYXRhLT50Y3BpX2RlbGl2ZXJlZF9jZSk7Ci0rI2VuZGlmCi0rCi0rI2lmIExJTlVYX1ZF UlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDE5LDApCi0rCWJpbm5fb2JqZWN0X3NldF91 aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfc2VudCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlf Ynl0ZXNfc2VudCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0 ZXNfcmV0cmFucyIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfYnl0ZXNfcmV0cmFucyk7Ci0rCWJp bm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfZHNhY2tfZHVwcyIsCi0rCQkJICAg ICAgIGRhdGEtPnRjcGlfZHNhY2tfZHVwcyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlu bm9iaiwgInRjcGlfcmVvcmRfc2VlbiIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfcmVvcmRfc2Vl bik7Ci0rI2VuZGlmCi0rCi0rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lP Tig1LDQsMCkKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfd25k IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRfd25kKTsKLSsJYmlubl9vYmplY3Rfc2V0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9yY3Zfb29vcGFjayIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlf cmN2X29vb3BhY2spOwotKyNlbmRpZgotKwotKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VS TkVMX1ZFUlNJT04oNSw1LDApCi0rCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNw aV9mYXN0b3Blbl9jbGllbnRfZmFpbCIsCi0rCQkJICAgICAgZGF0YS0+dGNwaV9mYXN0b3Blbl9j bGllbnRfZmFpbCk7Ci0rI2VuZGlmCi0rI2VuZGlmIC8qZW5kaWYgZm9yICNpZmRlZiBfX2xpbnV4 X18gKi8KLSsjZW5kaWYgLyplbmRpZiBmb3IgVENQX0lORk8gKi8KLSt9Ci0rCi0rLyogdGhpcyBy ZWFkcyBvdXQgdGhlIHRjcF9pbmZvIGJpbm4gb2JqZWN0IGFuZCBmb3JtYXRzIGl0IGludG8gYSBz aW5nbGUgbGluZQotKyAqIHRoZSBvYmplY3Qgd2lsbCBub3QgbmVjZXNzYXJpbHkgaGF2ZSBhbGwg b2YgdGhlIGVsZW1lbnRzLiBJZiBpdCdzIGVtcHR5IGl0Ci0rICogY3VycmVudCBqdXN0IHNwaXRz IG91dCAwLiBUaGlzIGlzbid0IG9wdGltYWwgYXMgMCBjYW4gYWxzbyBiZSBhIHZhbGlkIHZhbHVl ICovCi0rdm9pZAotK21ldHJpY3NfcmVhZF9iaW5uX29iamVjdCAodm9pZCAqYmlubm9iaiwgY2hh ciAqb3V0cHV0KSB7Ci0rCWludCBsZW4gPSAwOwotKwlpbnQgYnVmbGVuID0gMTAyMzsKLSsJaW50 IGtlcm5lbF92ZXJzaW9uID0gMDsKLSsJaWYgKGJpbm5vYmogPT0gTlVMTCkgewotKwkJZnByaW50 ZihzdGRlcnIsICJNZXRyaWMgcG9sbGluZyByZXR1cm5lZCBiYWQgZGF0YS5cbiIpOwotKwkJcmV0 dXJuOwotKwl9Ci0rCWtlcm5lbF92ZXJzaW9uID0gYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmos ICJrZXJuZWxfdmVyc2lvbiIpOwotKwotKwkvKiBiYXNlIHNldCBvZiBtZXRyaWNzICovCi0rCWxl biA9IHNucHJpbnRmKG91dHB1dCwgYnVmbGVuLCAiJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQs ICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwg JWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkIiwKLSsJCSAgICAgICBi aW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9zdGF0ZSIpLAotKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2NhX3N0YXRlIiksCi0rCQkgICAgICAgYmlubl9v YmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfcmV0cmFuc21pdHMiKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9wcm9iZXMiKSwKLSsJCSAgICAgICBiaW5uX29i amVjdF91aW50OChiaW5ub2JqLCAidGNwaV9iYWNrb2ZmIiksCi0rCQkgICAgICAgYmlubl9vYmpl Y3RfdWludDgoYmlubm9iaiwgInRjcGlfb3B0aW9ucyIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3NuZF93c2NhbGUiKSwKLSsJCSAgICAgICBiaW5uX29iamVj dF91aW50OChiaW5ub2JqLCAidGNwaV9yY3Zfd3NjYWxlIiksCi0rCQkgICAgICAgYmlubl9vYmpl Y3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0byIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9hdG8iKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIo Ymlubm9iaiwgInRjcGlfc25kX21zcyIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihi aW5ub2JqLCAidGNwaV9yY3ZfbXNzIiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJp bm5vYmosICJ0Y3BpX3VuYWNrZWQiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlu bm9iaiwgInRjcGlfc2Fja2VkIiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5v YmosICJ0Y3BpX2xvc3QiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwg InRjcGlfcmV0cmFucyIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9mYWNrZXRzIiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0 Y3BpX2xhc3RfZGF0YV9zZW50IiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5v YmosICJ0Y3BpX2xhc3RfYWNrX3NlbnQiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIo Ymlubm9iaiwgInRjcGlfbGFzdF9kYXRhX3JlY3YiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfcmVjdiIpLAotKwkJICAgICAgIGJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9wbXR1IiksCi0rCQkgICAgICAgYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9zc3RocmVzaCIpLAotKwkJICAgICAgIGJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHQiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfcnR0dmFyIiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX3NuZF9zc3RocmVzaCIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfY3duZCIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9hZHZtc3MiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRlcmluZyIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfcnR0IiksCi0rCQkgICAgICAgYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9zcGFjZSIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV90b3RhbF9yZXRyYW5zIikKLSsJCSk7Ci0rCi0rCS8qIGNv bXBhcmUgdGhlIHJlY2VpdmVkIGtlcm5lbCB2ZXJzaW9uIHRvIHRoZSB2ZXJzaW9uIHRoYXQgc3Vw cG9ydHMKLSsJICogYW55IGdpdmVuIG1ldHJpYy4gVGhpcyBtZWFucyB0aGF0IGEgcmVtb3RlIGhv c3QgdGhhdCBoYXMgYSBkaWZmZXJlbnQKLSsJICoga2VybmVsIHRoYXQgdGhlIGxvY2FsIGhvc3Qg d2lsbCBiZSBhYmxlIHRvIHByb2Nlc3MgdGhlIGRhdGEgaW4gdGVybXMgb2YKLSsJICogdGhlIHJl bW90ZSBrZXJuZWwgdmVyc2lvbi4gT25seSBuZWNlc3NhcnkgdW5kZXIgbGludXgqLwotKyNpZmRl ZiBfX2xpbnV4X18KLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDMsMTUs MCkpIHsKLSsJCWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVs bHUsICVsbHUiLAotKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfbWF4X3Bh Y2luZ19yYXRlIiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9wYWNp bmdfcmF0ZSIpCi0rCQkJKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVM X1ZFUlNJT04oNCwxLDApKSB7Ci0rCQlsZW4gKz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxl bi1sZW4pLCAiLCAlbGx1LCAlbGx1IiwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmos ICJ0Y3BpX2J5dGVzX2Fja2VkIiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAi dGNwaV9ieXRlc19yZWNlaXZlZCIpCi0rCQkJKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNp b24gPj0gS0VSTkVMX1ZFUlNJT04oNCwyLDApKSB7Ci0rCQlsZW4gKz0gc25wcmludGYob3V0cHV0 K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQiLAotKwkJCQliaW5uX29iamVjdF91aW50MzIo Ymlubm9iaiwgInRjcGlfc2Vnc19pbiIpLAotKwkJCQliaW5uX29iamVjdF91aW50MzIoYmlubm9i aiwgInRjcGlfc2Vnc19vdXQiKQotKwkJCSk7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9u ID49IEtFUk5FTF9WRVJTSU9OKDQsNiwwKSkgewotKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCts ZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkLCAlZCwgJWQiLAotKwkJCQliaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfbm90c2VudF9ieXRlcyIpLAotKwkJCQliaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfbWluX3J0dCIpLAotKwkJCQliaW5uX29iamVjdF91aW50MzIo Ymlubm9iaiwgInRjcGlfZGF0YV9zZWdzX2luIiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQzMihi aW5ub2JqLCAidGNwaV9kYXRhX3NlZ3Nfb3V0IikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJu ZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDksMCkpIHsKLSsJCWxlbiArPSBzbnByaW50 ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlbGx1IiwKLSsJCQkJYmlubl9vYmpl Y3RfdWludDgoYmlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZV9hcHBfbGltaXRlZCIpLAotKwkJ CQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZSIpCi0rCQkJ KTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxMCww KSkgewotKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWxs dSwgJWxsdSwgJWxsdSIsCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9i dXN5X3RpbWUiKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmosICJ0Y3BpX3NuZGJ1 Zl9saW1pdGVkIiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9yd25k X2xpbWl0ZWQiKQotKwkJCSk7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5F TF9WRVJTSU9OKDQsMTgsMCkpIHsKLSsJCWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVuLCAoYnVm bGVuLWxlbiksICIsICVkLCAlZCIsCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9kZWxpdmVyZWQiKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3Bp X2RlbGl2ZXJlZF9jZSIpCi0rCQkJKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0g S0VSTkVMX1ZFUlNJT04oNCwxOSwwKSkgewotKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4s IChidWZsZW4tbGVuKSwgIiwgJWxsdSwgJWxsdSwgJWQsICVkIiwKLSsJCQkJYmlubl9vYmplY3Rf dWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3NlbnQiKSwKLSsJCQkJYmlubl9vYmplY3RfdWlu dDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3JldHJhbnMiKSwKLSsJCQkJYmlubl9vYmplY3RfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX2RzYWNrX2R1cHMiKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDMy KGJpbm5vYmosICJ0Y3BpX3Jlb3JkX3NlZW4iKQotKwkJCSk7Ci0rCX0KLSsKLSsJaWYgKGtlcm5l bF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNCwwKSkgewotKwkJbGVuICs9IHNucHJpbnRm KG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkIiwKLSsJCQkJYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF93bmQiKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDMy KGJpbm5vYmosICJ0Y3BpX3Jjdl9vb29wYWNrIikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJu ZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig1LDUsMCkpIHsKLSsJCWxlbiArPSBzbnByaW50 ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkIiwKLSsJCQkJYmlubl9vYmplY3RfdWlu dDgoYmlubm9iaiwgInRjcGlfZmFzdG9wZW5fY2xpZW50X2ZhaWwiKQotKwkJCSk7Ci0rCX0KLSsj ZW5kaWYgLyogaWZkZWYgX19saW51eF9fICovCi0rfQotKwotKy8qIFByaW50IG91dCB0aGUgaGVh ZGVyIHRvIHRoZSBmaWxlIHNvIHRoYXQgdGhlIGNvbHVtbiBoZWFkZXIgbWF0Y2hlcyB0aGUKLSsg KiBkYXRhIGluIHRoZSBtZXRyaWNzIG9iamVjdC4gVGhhdCB2YXJpZXMgYnkga2VybmVsIHZlcnNp b24gc28gd2UgaGF2ZSB0bwotKyAqIGRvIHRlc3RzIGZvciBlYWNoIHBvc3NpYmxlIHZlcnNpb24g d2hlcmUgdGhleSBhZGRlZCBuZXcgdmFsdWVzIHRvIHRjcF9pbmZvCi0rICogTk9URTogVGhpcyBk b2Vzbid0IHB1dCB0aGUgdmFsdWVzL2hlYWRlcnMgaW4gdGhlIG1vc3QgdXNlZnVsIG9yZGVyIGJ1 dCB0aGUKLSsgKiByZXN1bHRpbmcgZmlsZSBpcyBwcm9iYWJseSBnb2luZyB0byBnZXQgcHJvY2Vz c2VkIGJ5IHNvbWV0aGluZyAqLwotK3ZvaWQKLSttZXRyaWNzX3ByaW50X2hlYWRlcihGSUxFICpm cHRyLCBjaGFyICpleHRyYV90ZXh0LCBpbnQga2VybmVsX3ZlcnNpb24pIHsKLSsJaWYgKGV4dHJh X3RleHQgIT0gTlVMTCkgewotKwkJZnByaW50ZihmcHRyLCAiJXNcbiIsIGV4dHJhX3RleHQpOwot Kwl9Ci0rCWZwcmludGYoZnB0ciwgInRpbWVzdGFtcCwgc3RhdGUsIGNhX3N0YXRlLCByZXRyYW5z bWl0cywgcHJvYmVzLCBiYWNrb2ZmLCBvcHRpb25zLCAiKTsKLSsJZnByaW50ZihmcHRyLCAic25k X3dzY2FsZSwgcmN2X3dzY2FsZSwgcnRvLCBhdG8sIHNuZF9tc3MsIHJjdl9tc3MsIHVuYWNrZWQs IHNhY2tlZCwgbG9zdCwgcmV0cmFucywgIik7Ci0rCWZwcmludGYoZnB0ciwgImZhY2tldHMsIGxh c3RfZGF0YV9zZW50LCBsYXN0X2Fja19zZW50LCBsYXN0X2RhdGFfcmVjdiwgIik7Ci0rCWZwcmlu dGYoZnB0ciwgImxhc3RfYWNrX3JlY3YsIHBtdHUsIHJjdl9zc3RocmVzaCwgcnR0LCBydHR2YXIs IHNuZF9zc3RocmVzaCwgIik7Ci0rCWZwcmludGYoZnB0ciwgInNuZF9jd25kLCBhZHZtc3MsIHJl b3JkZXJpbmcsIHJjdl9ydHQsIHJjdl9zcGFjZSwgdG90YWxfcmV0cmFucyIpOwotKwotKwkvKiBj b21wYXJlIHRoZSByZWNlaXZlZCBrZXJuZWwgdmVyc2lvbiB0byB0aGUgdmVyc2lvbiB0aGF0IHN1 cHBvcnRzCi0rCSAqIGFueSBnaXZlbiBtZXRyaWMuIFRoaXMgd2F5IHdlIGNhbiBwcmludCBjb25z aXN0ZW50IGhlYWRlcnMuCi0rCSAqIE9ubHkgbmVjZXNzYXJ5IHVuZGVyIGxpbnV4Ki8KLSsjaWZk ZWYgX19saW51eF9fCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTigzLDE1 LDApKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIG1heF9wYWNpbmdfcmF0ZSwgcGFjaW5nX3JhdGUi KTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxLDAp KSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIGJ5dGVzX2Fja2VkLCBieXRlc19yZWNlaXZlZCIpOwot Kwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDIsMCkpIHsK LSsJCWZwcmludGYoZnB0ciwgIiwgc2Vnc19pbiwgc2Vnc19vdXQiKTsKLSsJfQotKwotKwlpZiAo a2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCw2LDApKSB7Ci0rCQlmcHJpbnRmKGZw dHIsICIsIG5vdHNlbnRfYnl0ZXMsIG1pbl9ydHQsIGRhdGFfc2Vnc19pbiwgZGF0YV9zZWdfb3V0 Iik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsOSww KSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBkZWxpdmVyeV9yYXRlX2FwcF9saW1pdGVkLCBkZWxp dmVyeV9yYXRlIik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJT SU9OKDQsMTAsMCkpIHsKLSsJCWZwcmludGYoZnB0ciwgIiwgYnVzeV90aW1lLCBzbmRidWZfbGlt aXRlZCwgcnduZF9saW1pdGVkIik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtF Uk5FTF9WRVJTSU9OKDQsMTgsMCkpIHsKLSsJCWZwcmludGYoZnB0ciwgIiwgZGVsaXZlcmVkLCBk ZWxpdmVyZWRfY2UiKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZF UlNJT04oNCwxOSwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBieXRlc19zZW50LCBieXRlc19y ZXRyYW5zLCBkc2Fja19kdXBzLCByZW9yZF9zZWVuIik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92 ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNCwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBz bmRfd25kLCByY3Zfb29vcGFjayIpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBL RVJORUxfVkVSU0lPTig1LDUsMCkpIHsKLSsJCWZwcmludGYoZnB0ciwgIiwgZmFzdG9wZW5fY2xp ZW50X2ZhaWwiKTsKLSsJfQotKyNlbmRpZiAvKiBpZmRlZiBfX2xpbnV4X18gKi8KLSsJZnByaW50 ZihmcHRyLCAiXG5cbiIpOwotK30KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL21ldHJp Y3MuaCBvcGVuc3NoLTEwLjNwMS9tZXRyaWNzLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL21l dHJpY3MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2gt MTAuM3AxL21ldHJpY3MuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNTk0NjAwNCArMDIwMAotQEAg LTAsMCArMSw0NSBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDIyIFRoZSBCb2FyZCBvZiBU cnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KLSsgKgotKyAqICBBdXRob3I6 IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+Ci0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAot KyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCi0rICoKLSsgKiBUaGlzIGxp YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwg YnV0IFdJVEhPVVQKLSsgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgKgot KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIE1JVCBMaWNlbnNlIGFs b25nIHdpdGggdGhpcyBsaWJyYXJ5OwotKyAqIGlmIG5vdCwgc2VlIGh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9NSVQuCi0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIE1FVFJJQ1NfSAotKyNk ZWZpbmUgTUVUUklDU19ICi0rCi0rI2luY2x1ZGUgImJpbm4uaCIKLSsKLSsvKiBsaW51eCwgZnJl ZWJzZCwgYW5kIG5ldGJzZCBoYXZlIHRjcF9pbmZvIHN0cnVjdHMuCi0rICogSSBkb24ndCBrbm93 IGFib3V0IG90aGVyIHN5c3RlbXMgc28gd2UgZGlzYWJsZSB0aGlzCi0rICogZnVuY3Rpb25hbGl0 eSBmb3IgdGhlbSAqLwotKyNpZiBkZWZpbmVkIF9fbGludXhfXyB8fCBkZWZpbmVkIF9fRnJlZUJT RF9fIHx8IGRlZmluZWQgX19OZXRCU0RfXyAmJiAhZGVmaW5lZChfX2FscGluZV9fKQotKyNkZWZp bmUgVENQX0lORk8gMQotKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiAhZGVmaW5lZChfX2FscGlu ZV9fKQotKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSsjZWxzZQotKyNpbmNsdWRlIDxuZXRpbmV0 L3RjcC5oPgotKyNlbmRpZgotKyNlbHNlCi0rLyogbWFrZSBhIG51bGwgc3RydWN0IGZvciB0Y3Bf aW5mbyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCovCi0rdHlwZWRlZiBzdHJ1Y3Qg dGNwX2luZm8gewotKwl2b2lkICAgICAqZHVtbXk7Ci0rfSB0Y3BfaW5mbzsKLSsjZW5kaWYKLSsK LSt2b2lkIG1ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3Qoc3RydWN0IHRjcF9pbmZvICosIHN0cnVj dCBiaW5uX3N0cnVjdCAqKTsKLSt2b2lkIG1ldHJpY3NfcmVhZF9iaW5uX29iamVjdCh2b2lkICos IGNoYXIgKik7Ci0rdm9pZCBtZXRyaWNzX3ByaW50X2hlYWRlcihGSUxFICosIGNoYXIgKiwgaW50 KTsKLSsKLSsKLSsjZW5kaWYgLyogZGVmaW5lIG1ldHJpY3NfaCAqLwotZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvbWlzYy5jIG9wZW5zc2gtMTAuM3AxL21pc2MuYwotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvbWlzYy5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0r Kysgb3BlbnNzaC0xMC4zcDEvbWlzYy5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI2MDg0OTIzICsw MjAwCi1AQCAtNjYsNiArNjYsODIgQEAKLSAjaW5jbHVkZSAic3NoZXJyLmgiCi0gI2luY2x1ZGUg InBsYXRmb3JtLmgiCi0gCi0rLyogRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIEZJUFMgaXMgZW5h YmxlZCBvciBub3QuCi0rICogV2UgYXNzdW1lIHRoYXQgZmlwcyBpcyBub3QgZW5hYmxlZCBhbmQg dGhlbiB0ZXN0IGZyb20gdGhlcmUuCi0rICogVGhlIGlkZWEgaXMgdGhhdCBpZiB0aGVyZSBpcyBh biBlcnJvciBvciB3ZSBjYW4ndCByZWFkIHRoZSB2YWx1ZQotKyAqIHRoZW4gZWl0aGVyIHRoZSBP UyBkb2Vzbid0IHN1cHBvcnQgRklQUyBvciB0aGF0IEZJUFMgd2lsbAotKyAqIGNhdGNoIGFueXRo aW5nIHdlIHRyeSB0byBkbyB0aGF0J3Mgbm90IEZJUFMgY29tcGxpYW50LgotKyAqIFRoYXQgd291 bGQgYmUgbGltaXRlZCB0byB0cnlpbmcgdG8gdXNlIG9uZSBvZiB0aGUgcGFyYWxsZWwgY2lwaGVy cy4KLSsgKi8KLStpbnQKLStmaXBzX2VuYWJsZWQoKQotK3sKLSsJaW50IG1vZGUgPSAwOwotKwlj b25zdCBjaGFyKiBmaXBzX3BhdGggPSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiOwot KwlGSUxFICpmaXBzX2VuYWJsZWQgPSBOVUxMOwotKwotKwlkZWJ1ZzJfZigiQ2hlY2tpbmcgZm9y IEZJUFMiKTsKLSsKLSsJLyogaWYgd2UgY2FuJ3Qgb3BlbiB0aGUgcGF0aCB0byBmaXBzX2VuYWJs ZWQgaXQKLSsJICogZWl0aGVyIGRvZXNuJ3QgZXhpc3Qgb3IgdGhlcmUgaXMgYW4gZXJyb3IuIElu IGVpdGhlcgotKwkgKiBjYXNlIHdlIHRyZWF0IGl0IGFzIGlmIGZpcHMgaXMgKm5vdCogZW5hYmxl ZC4KLSsJICogVGhpcyBpcyBiZWNhdXNlIEkgd2FudCB0byBmYWlsIHRvd2FyZHMgdGhlIG1vc3QK LSsJICogY29tbW9uIHNjZW5hcmlvIHdoaWNoIGlzIHRoYXQgZmlwc19lbmFibGVkIGVpdGhlcgot KwkgKiBkb2Vzbid0IGV4aXN0IChub24tZmVkb3JhIHZhcmlhbnRzKSBvciBpc24ndAotKwkgKiBl bmFibGVkLgotKwkgKi8KLSsJZmlwc19lbmFibGVkID0gZm9wZW4oZmlwc19wYXRoLCAiciIpOwot KwlpZiAoIWZpcHNfZW5hYmxlZCkgewotKwkJZGVidWczX2YoIkNhbm5vdCBvcGVuIHBhdGggdG8g Zmlwc19lbmFibGVkLiIpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJLyogZmlwc19lbmFibGVk IGRvZXMgZXhpc3Qgc28gcmVhZCB0aGUgdmFsdWUuCi0rCSAqIEl0IHNob3VsZCBiZSBlaXRoZXIg MCAoZGlzYWJsZWQpIG9yIDEgKGVuYWJsZWQpCi0rCSAqLwotKwlpZiAoIDEgIT0gZnNjYW5mKGZp cHNfZW5hYmxlZCwiJWQiLCAmbW9kZSkgKSB7Ci0rCQkvKiBpZiB3ZSBnZXQgc29tZSBlcnJvciBo ZXJlIHRoZW4gd2UKLSsJCSAqIGFnYWluIGZhaWwgdG8gcmV0dXJuaW5nIGZpcHMgYmVpbmcgZGlz YWJsZWQKLSsJCSAqLwotKwkJZGVidWczX2YoIkVycm9yIHByb2Nlc3NpbmcgZmlwc19lbmFibGVk LiIpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJLyogbGV0IHRoZSB1c2VyIGtub3cgdGhlIHN0 YXR1cyAqLwotKwlpZiAobW9kZSA9PSAwKQotKwkJZGVidWczX2YoIkZJUFMgbW9kZSBpcyBkaXNh YmxlZC4iKTsKLSsJZWxzZQotKwkJZGVidWczX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiIpOwot KwotKwlyZXR1cm4gbW9kZTsKLSt9Ci0rCi0rLyogaGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gZGV0 ZXJtaW5lIG1lbW9yeSB1c2FnZSBkdXJpbmcKLSsgKiBkZXZlbG9wbWVudCBwcm9jZXNzLiBOb3Qg dG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uLgotKyAqLwotK3ZvaWQKLStyZWFkX21lbV9zdGF0cyhz dGF0bV90ICpyZXN1bHQsIGludCBwb3N0X2F1dGgpCi0rewotKwlpZiAoIXBvc3RfYXV0aCkKLSsJ CXJldHVybjsKLSsKLSsJY29uc3QgY2hhciogc3RhdG1fcGF0aCA9ICIvcHJvYy9zZWxmL3N0YXRt IjsKLSsKLSsJRklMRSAqZiA9IGZvcGVuKHN0YXRtX3BhdGgsInIiKTsKLSsJaWYoIWYpewotKwkJ cGVycm9yKHN0YXRtX3BhdGgpOwotKwkJYWJvcnQoKTsKLSsJfQotKwlpZig3ICE9IGZzY2FuZihm LCIlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUiLAotKwkJICAgICAgICZyZXN1bHQtPnNpemUs ICZyZXN1bHQtPnJlc2lkZW50LCAmcmVzdWx0LT5zaGFyZSwgJnJlc3VsdC0+dGV4dCwgJnJlc3Vs dC0+bGliLAotKwkJICAgICAgICZyZXN1bHQtPmRhdGEsICZyZXN1bHQtPmR0KSkKLSsJewotKwkJ cGVycm9yKHN0YXRtX3BhdGgpOwotKwkJYWJvcnQoKTsKLSsJfQotKwlmY2xvc2UoZik7Ci0rfQot KwotIC8qIHJlbW92ZSBuZXdsaW5lIGF0IGVuZCBvZiBzdHJpbmcgKi8KLSBjaGFyICoKLSBjaG9w KGNoYXIgKnMpCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9taXNjLmggb3BlbnNzaC0x MC4zcDEvbWlzYy5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9taXNjLmgJMjAyNi0wNy0wMiAw MDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9taXNjLmgJMjAyNi0w Ny0wMiAwMDoyNzoyOS43MjY2MTAyNTQgKzAyMDAKLUBAIC0yNzYsNCArMjc2LDE3IEBACi0gCQkg ICAgc3RyZXJyb3IoZXJybm8pKTsgXAotIH0gd2hpbGUgKDApCi0gCi0rdHlwZWRlZiBzdHJ1Y3Qg c3RhdG1fdCB7Ci0rICB1bnNpZ25lZCBsb25nIHNpemU7Ci0rICB1bnNpZ25lZCBsb25nIHJlc2lk ZW50OwotKyAgdW5zaWduZWQgbG9uZyBzaGFyZTsKLSsgIHVuc2lnbmVkIGxvbmcgdGV4dDsKLSsg IHVuc2lnbmVkIGxvbmcgbGliOwotKyAgdW5zaWduZWQgbG9uZyBkYXRhOwotKyAgdW5zaWduZWQg bG9uZyBkdDsKLSt9IHN0YXRtX3Q7Ci0rCi0rdm9pZCByZWFkX21lbV9zdGF0cyhzdHJ1Y3Qgc3Rh dG1fdCAqLCBpbnQpOwotK2ludCBmaXBzX2VuYWJsZWQoKTsKLSsKLSAjZW5kaWYgLyogX01JU0Nf SCAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvbXlwcm9wb3NhbC5oIG9wZW5zc2gt MTAuM3AxL215cHJvcG9zYWwuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvbXlwcm9wb3NhbC5o CTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEv bXlwcm9wb3NhbC5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI2ODI0OTAzICswMjAwCi1AQCAtNzQs MTAgKzc0LDIwIEBACi0gCSJyc2Etc2hhMi01MTIsIiBcCi0gCSJyc2Etc2hhMi0yNTYiCi0gCi0r LyppZiB3ZSBhcmVuJ3QgdXNpbmcgT3BlblNTTCB3ZSBuZWVkIHRvIHJlbW92ZQotKyAqIHRoZSBw YXJhbGxlbCBDaGFDaGEyMCBjaXBoZXIgZnJvbSB0aGUgbGlzdCAqLwotKyNpZmRlZiBXSVRIX09Q RU5TU0wKLSAjZGVmaW5lCUtFWF9TRVJWRVJfRU5DUllQVCBcCi0rCSJjaGFjaGEyMC1wb2x5MTMw NS1tdEBocG5zc2gub3JnLCIgIFwKLSAJImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tLCIg XAotIAkiYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSxhZXMyNTYtZ2NtQG9wZW5zc2guY29tLCIgXAot IAkiYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIiCi0rI2Vsc2UKLSsjZGVmaW5lCUtF WF9TRVJWRVJfRU5DUllQVCBcCi0rCSJjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSwiIFwK LSsJImFlczEyOC1nY21Ab3BlbnNzaC5jb20sYWVzMjU2LWdjbUBvcGVuc3NoLmNvbSwiIFwKLSsJ ImFlczEyOC1jdHIsYWVzMTkyLWN0cixhZXMyNTYtY3RyIgotKyNlbmRpZgotIAotICNkZWZpbmUg S0VYX0NMSUVOVF9FTkNSWVBUIEtFWF9TRVJWRVJfRU5DUllQVAotIAotZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvbnVtLmMgb3BlbnNzaC0xMC4zcDEvbnVtLmMKLS0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL251bS5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzaC0xMC4zcDEvbnVtLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjY5NzU5ODUgKzAyMDAK LUBAIC0wLDAgKzEsMTU2IEBACi0rLyogQ0MwIGxpY2Vuc2UgYXBwbGllZCwgc2VlIExJQ0VOQ0Uu bWQgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgIm51bS5oIgotKwotKyNp ZmRlZiBXSVRIX09QRU5TU0wzCi0rCi0rdHlwZWRlZiBlbnVtIHsgQklHID0gMSwgTElUVExFID0g LTEgfSAgZW5kaWFuX3Q7Ci0rdHlwZWRlZiBlbnVtIHsgTkVHQVRJVkUgPSAweGZmLCBQT1NJVElW RSA9IDB4MDAgfSBzaWduX3Q7Ci0rCi0rc3RhdGljIGVuZGlhbl90IG5hdGl2ZWVuZGlhbih2b2lk KQotK3sKLSsgICAgY29uc3QgaW50IGVuZGlhbnRlc3QgPSAxOwotKwotKyAgICByZXR1cm4gKigo Y2hhciAqKSZlbmRpYW50ZXN0KSA9PSAxID8gTElUVExFIDogQklHOwotK30KLSsKLStzdGF0aWMg c2lnbl90IHBhcmFtc2lnbihjb25zdCBPU1NMX1BBUkFNICpwYXJhbSkKLSt7Ci0rICAgIHNpemVf dCBzcmNtc2IgPSBuYXRpdmVlbmRpYW4oKSA9PSBCSUcgPyAwIDogcGFyYW0tPmRhdGFfc2l6ZSAt IDE7Ci0rCi0rICAgIHJldHVybgotKyAgICAgICAgcGFyYW0tPmRhdGFfdHlwZSA9PSBPU1NMX1BB UkFNX1VOU0lHTkVEX0lOVEVHRVIKLSsgICAgICAgID8gUE9TSVRJVkUKLSsgICAgICAgIDogKCgo dW5zaWduZWQgY2hhciAqKXBhcmFtLT5kYXRhKVtzcmNtc2JdICYgMHg4MAotKyAgICAgICAgICAg PyBORUdBVElWRQotKyAgICAgICAgICAgOiBQT1NJVElWRSk7Ci0rfQotKwotK3N0cnVjdCBudW1k ZXNjIHsKLSsgICAgdm9pZCAqZGF0YTsKLSsgICAgdW5zaWduZWQgaW50IGRhdGFfdHlwZTsgICAg IC8qIFRoZSBPU1NMX1BBUkFNIGRhdGEgdHlwZSAqLwotKwotKyAgICAvKiBUaGVzZSBmaWVsZHMg Y29uY2VybiB0aGUgd2hvbGUgbnVtYmVyICovCi0rICAgIHNpemVfdCBzaXplOwotKyAgICBlbmRp YW5fdCBlbmRpYW47Ci0rICAgIHNpZ25fdCBzaWduOwotKwotKyAgICAvKiBUaGVzZSBmaWVsZHMg Y29uY2VybiB0aGUgbGltYnMgb2YgdGhlIG51bWJlciAqLwotKyAgICBzaXplX3QgbGltYnNpemU7 Ci0rICAgIGVuZGlhbl90IGxpbWJlbmRpYW47Ci0rICAgIC8qIFRoaXMgaXMgZm9yIG9kZCBhcmNo cy4gKi8KLSsgICAgLyogc2VlIHRoZSBtYW51YWwgZm9yIG1wel9pbXBvcnQoKSBmb3IgYW4gaW4g ZGVwdGggZXhwbGFuYXRpb24uICovCi0rICAgIHNpemVfdCBsaW1ibmFpbGJpdHM7Ci0rfTsKLSsK LStzdHJ1Y3QgcmVzdWx0ZGVzYyB7Ci0rICAgIHNpemVfdCBzaXplOwotKyAgICBpbnQgcmVzdWx0 OyAgICAgICAgICAgICAgICAgLyogMSBvciAobmVnYXRpdmUpIGVycm9yICovCi0rfTsKLSsKLStz dGF0aWMgc3RydWN0IHJlc3VsdGRlc2MgcHJvdm51bV9jb3B5KHN0cnVjdCBudW1kZXNjIGRlc3Qs IHN0cnVjdCBudW1kZXNjIHNyYykKLSt7Ci0rICAgIHN0cnVjdCByZXN1bHRkZXNjIHJlc3VsdCA9 IHsgZGVzdC5zaXplLCAxLCB9OwotKwotKyAgICBpZiAoc3JjLmRhdGFfdHlwZSAhPSBPU1NMX1BB UkFNX0lOVEVHRVIKLSsgICAgICAgICYmIHNyYy5kYXRhX3R5cGUgIT0gT1NTTF9QQVJBTV9VTlNJ R05FRF9JTlRFR0VSKSB7Ci0rICAgICAgICByZXN1bHQucmVzdWx0ID0gUFJPVk5VTV9FX1dST05H X1RZUEU7Ci0rICAgICAgICByZXR1cm4gcmVzdWx0OwotKyAgICB9Ci0rCi0rICAgIGlmIChzcmMu c2l6ZSA9PSAwKSB7Ci0rICAgICAgICBtZW1zZXQoZGVzdC5kYXRhLCAwLCBkZXN0LnNpemUpOwot KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSsgICAgfQotKwotKyAgICAvKiBFeHRyYSBkYXRhICov Ci0rICAgIHNpemVfdCBzcmNtc2IgPSBzcmMuZW5kaWFuID09IEJJRyA/IDAgOiBzcmMuc2l6ZSAt IDE7Ci0rICAgIGludCBzcmNtc2IybHNiID0gc3JjLmVuZGlhbiA9PSBCSUcgPyAxIDogLTE7Ci0r Ci0rICAgIC8qCi0rICAgICAqIElmIHRoZSBzb3VyY2UgaXMgYmlnZ2VyIHRoYW4gdGhlIGRlc3Rp bmF0aW9uLCBhbmFseXNlIHRvIHNlZSBpZiB0aGUKLSsgICAgICogbW9zdCBzaWduaWZpY2FudCBi eXRlIGlzIGp1c3QgcGFkZGluZyB0aGF0IGNhbiBiZSBpZ25vcmVkLgotKyAgICAgKiBUaGUgcnVs ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaXMganVzdCBwYWRk aW5nCi0rICAgICAqIGFyZToKLSsgICAgICoKLSsgICAgICogMS4gdGhlIG1vc3Qgc2lnbmlmaWNh bnQgYnl0ZSBlcXVhbHMgc3Jjc2lnbmVkLCB3aGljaCBqdXN0IHNvIGhhcHBlbnMKLSsgICAgICog ICAgdG8gaGF2ZSB0aGUgMidzIGNvbXBsZW1lbnQgcGFkZGluZyB2YWx1ZS4KLSsgICAgICogMi4g VGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBuZXh0IHRvIG1vc3Qgc2lnbmlmaWNhbnQg Ynl0ZQotKyAgICAgKiAgICBlcXVhbHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHNyY3Np Z25lZC4KLSsgICAgICovCi0rICAgIHNpemVfdCBlbmQgPSBkZXN0LmRhdGEgPT0gTlVMTCA/IDEg OiBkZXN0LnNpemU7Ci0rICAgIGZvciAoOyBzcmMuc2l6ZSA+IGVuZDsgc3JjbXNiICs9IHNyY21z YjJsc2IsIHNyYy5zaXplLS0pCi0rICAgICAgICBpZiAoKCh1bnNpZ25lZCBjaGFyICopc3JjLmRh dGEpW3NyY21zYl0gIT0gc3JjLnNpZ24KLSsgICAgICAgICAgICB8fCAoKCgodW5zaWduZWQgY2hh ciAqKXNyYy5kYXRhKVtzcmNtc2IgKyBzcmNtc2IybHNiXSAmIDB4ODApCi0rICAgICAgICAgICAg ICAgICE9IChzcmMuc2lnbiAmIDB4ODApKSkKLSsgICAgICAgICAgICBicmVhazsKLSsKLSsgICAg aWYgKHNyYy5zaXplID4gZGVzdC5zaXplKSB7Ci0rICAgICAgICByZXN1bHQucmVzdWx0ID0gUFJP Vk5VTV9FX1RPT0JJRzsKLSsgICAgICAgIHJldHVybiByZXN1bHQ7Ci0rICAgIH0KLSsKLSsgICAg c2l6ZV90IHNyY2xzYiA9IHNyY21zYiArIHNyY21zYjJsc2IgKiAoc3JjLnNpemUgLSAxKTsKLSsK LSsgICAgLyogU2ltcGxlIGNhc2UsIGFsbCBzaWduaWZpY2FudCBkZXRhaWxzIG1hdGNoICovCi0r ICAgIGlmIChkZXN0LmVuZGlhbiA9PSBzcmMuZW5kaWFuCi0rICAgICAgICAmJiBkZXN0LmxpbWJz aXplID09IDEKLSsgICAgICAgICYmIGRlc3QubGltYm5haWxiaXRzID09IDAKLSsgICAgICAgICYm IChkZXN0LmRhdGFfdHlwZSA9PSBPU1NMX1BBUkFNX0lOVEVHRVIgfHwgc3JjLnNpZ24gPT0gUE9T SVRJVkUpKSB7Ci0rCi0rICAgICAgICBpZiAoc3JjLnNpemUgPCBkZXN0LnNpemUpIHsKLSsgICAg ICAgICAgICBzaXplX3QgcGFkc3RhcnQgPSBkZXN0LmVuZGlhbiA9PSBCSUcgPyAwIDogZGVzdC5z aXplIC0gc3JjLnNpemU7Ci0rCi0rICAgICAgICAgICAgbWVtc2V0KCh1bnNpZ25lZCBjaGFyICop ZGVzdC5kYXRhICsgcGFkc3RhcnQsIHNyYy5zaWduLAotKyAgICAgICAgICAgICAgICAgICBkZXN0 LnNpemUgLSBzcmMuc2l6ZSk7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBzaXplX3QgZGVzdHN0 YXJ0ID0gZGVzdC5lbmRpYW4gPT0gQklHID8gZGVzdC5zaXplIC0gc3JjLnNpemUgOiAwOwotKyAg ICAgICAgc2l6ZV90IHNyY3N0YXJ0ID0gc3JjLmVuZGlhbiA9PSBCSUcgPyBzcmNtc2IgOiBzcmNs c2I7Ci0rCi0rICAgICAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKilkZXN0LmRhdGEgKyBkZXN0 c3RhcnQsCi0rICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilzcmMuZGF0YSArIHNyY3N0 YXJ0LAotKyAgICAgICAgICAgICAgIHNyYy5zaXplKTsKLSsgICAgICAgIHJldHVybiByZXN1bHQ7 Ci0rICAgIH0KLSsKLSsgICAgLyogQ29tcGxleCBjYXNlLCBmb3Igc2lnbiBvciBsaW1iIGNvbnZl cnNpb24uICBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgKi8KLSsgICAgcmVzdWx0LnJlc3VsdCA9IFBS T1ZOVU1fRV9VTlNVUFBPUlRFRDsKLSsgICAgcmV0dXJuIHJlc3VsdDsKLSt9Ci0rCi0rI2RlZmlu ZSBpbXBsZW1lbnRfcHJvdm51bShULCBEVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgaW50IHByb3ZudW1fZ2V0XyMjVChUICpkZXN0LCBjb25zdCBPU1NMX1BBUkFNICpw YXJhbSkgICAgICAgXAotKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBlbmRpYW5fdCBlbmRpYW4gPSBuYXRp dmVlbmRpYW4oKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIHN0cnVjdCBudW1k ZXNjIGRlc3RuZCA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICAgIGRlc3QsIERULCBzaXplb2YoVCksIGVuZGlhbiwgUE9TSVRJVkUsIDEsIGVuZGlhbiwgMCBc Ci0rICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgIHN0cnVjdCBudW1kZXNjIHNyY25kID0geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIHBhcmFtLT5kYXRhLCBwYXJhbS0+ ZGF0YV90eXBlLCBwYXJhbS0+ZGF0YV9zaXplLCAgICBcCi0rICAgICAgICAgICAgZW5kaWFuLCBw YXJhbXNpZ24ocGFyYW0pLCAxLCBlbmRpYW4sIDAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH07 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICBzdHJ1Y3QgcmVzdWx0ZGVzYyByZXN1bHQgPSBwcm92bnVtX2Nv cHkoZGVzdG5kLCBzcmNuZCk7IFwKLSsgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGludCBwcm92 bnVtX3NldF8jI1QoT1NTTF9QQVJBTSAqcGFyYW0sIFQgc3JjKSAgICAgICAgIFwKLSsgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgZW5kaWFuX3QgZW5kaWFuID0gbmF0aXZlZW5kaWFuKCk7ICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICBzdHJ1Y3QgbnVtZGVzYyBkZXN0bmQgPSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBwYXJhbS0+ZGF0YSwgcGFyYW0t PmRhdGFfdHlwZSwgcGFyYW0tPmRhdGFfc2l6ZSwgICAgXAotKyAgICAgICAgICAgIGVuZGlhbiwg UE9TSVRJVkUsIDEsIGVuZGlhbiwgMCAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICB9 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgIHN0cnVjdCBudW1kZXNjIHNyY25kID0geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgICAgICZzcmMsIERULCBzaXplb2YoVCksIGVuZGlhbiwgUE9T SVRJVkUsIDEsIGVuZGlhbiwgMCBcCi0rICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgc3Ry dWN0IHJlc3VsdGRlc2MgcmVzdWx0ID0gcHJvdm51bV9jb3B5KGRlc3RuZCwgc3JjbmQpOyBcCi0r ICAgICAgICBwYXJhbS0+cmV0dXJuX3NpemUgPSByZXN1bHQuc2l6ZTsgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICB9Ci0rCi0raW1wbGVtZW50X3Byb3ZudW0oc2l6ZV90 LCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIpCi0rCi0rI2VuZGlmIC8qIFdJVEhfT1BFTlNT TDMgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL251bS5oIG9wZW5zc2gtMTAuM3Ax L251bS5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9udW0uaAkxOTcwLTAxLTAxIDAxOjAwOjAw LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuM3AxL251bS5oCTIwMjYtMDctMDIgMDA6 Mjc6MjkuNzI3MDI3MDMzICswMjAwCi1AQCAtMCwwICsxLDE1IEBACi0rLyogQ0MwIGxpY2Vuc2Ug YXBwbGllZCwgc2VlIExJQ0VOQ0UubWQgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsj aWZkZWYgV0lUSF9PUEVOU1NMMwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NvcmUuaD4KLSsKLSsv KiBDb252ZXJ0IGJldHdlZW4gT1NTTF9QQVJBTSBhbmQgc2l6ZV90ICovCi0raW50IHByb3ZudW1f Z2V0X3NpemVfdChzaXplX3QgKmRlc3QsIGNvbnN0IE9TU0xfUEFSQU0gKnBhcmFtKTsKLStpbnQg cHJvdm51bV9zZXRfc2l6ZV90KE9TU0xfUEFSQU0gKnBhcmFtLCBzaXplX3Qgc3JjKTsKLSsKLSsj ZGVmaW5lIFBST1ZOVU1fRV9XUk9OR19UWVBFICAgIC0xCi0rI2RlZmluZSBQUk9WTlVNX0VfVE9P QklHICAgICAgICAtMgotKyNkZWZpbmUgUFJPVk5VTV9FX1VOU1VQUE9SVEVEICAgLTMKLSsjZW5k aWYgLyogV0lUSF9PUEVOU1NMMyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvb3Nz bDMtcHJvdmlkZXItZXJyLmMgb3BlbnNzaC0xMC4zcDEvb3NzbDMtcHJvdmlkZXItZXJyLmMKLS0t LSBvcGVuc3NoLTEwLjNwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5jCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvb3NzbDMtcHJvdmlkZXIt ZXJyLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjcwODQxNDkgKzAyMDAKLUBAIC0wLDAgKzEsMTA4 IEBACi0rLyogQ0MwIGxpY2Vuc2UgYXBwbGllZCwgc2VlIExJQ0VOQ0UubWQgKi8KLSsKLSsjaW5j bHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlICJvc3NsMy1w cm92aWRlci1lcnIuaCIKLSsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMMwotKwotK3N0cnVjdCBwcm92 ZXJyX2Z1bmN0aW9uc19zdCB7Ci0rICBjb25zdCBPU1NMX0NPUkVfSEFORExFICpjb3JlOwotKyAg T1NTTF9GVU5DX2NvcmVfbmV3X2Vycm9yX2ZuICpjb3JlX25ld19lcnJvcjsKLSsgIE9TU0xfRlVO Q19jb3JlX3NldF9lcnJvcl9kZWJ1Z19mbiAqY29yZV9zZXRfZXJyb3JfZGVidWc7Ci0rICBPU1NM X0ZVTkNfY29yZV92c2V0X2Vycm9yX2ZuICpjb3JlX3ZzZXRfZXJyb3I7Ci0rfTsKLSsKLStzdHJ1 Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKgotK3Byb3ZlcnJfbmV3X2hhbmRsZShjb25zdCBPU1NM X0NPUkVfSEFORExFICpjb3JlLCBjb25zdCBPU1NMX0RJU1BBVENIICpkaXNwYXRjaCkKLSt7Ci0r ICAvKgotKyAgICogbGliY3J5cHRvIGdpdmVzIHByb3ZpZGVycyB0aGUgdG9vbHMgdG8gY3JlYXRl IGVycm9yIHJvdXRpbmVzIHNpbWlsYXIKLSsgICAqIHRvIHRoZSBvbmVzIGRlZmluZWQgaW4gPG9w ZW5zc2wvZXJyLmg+Ci0rICAgKi8KLSsgIE9TU0xfRlVOQ19jb3JlX25ld19lcnJvcl9mbiAqY19u ZXdfZXJyb3IgPSBOVUxMOwotKyAgT1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX2RlYnVnX2ZuICpj X3NldF9lcnJvcl9kZWJ1ZyA9IE5VTEw7Ci0rICBPU1NMX0ZVTkNfY29yZV92c2V0X2Vycm9yX2Zu ICpjX3ZzZXRfZXJyb3IgPSBOVUxMOwotKyAgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpo YW5kbGUgPSBOVUxMOwotKwotKyAgYXNzZXJ0KGNvcmUgIT0gTlVMTCk7Ci0rICBhc3NlcnQoZGlz cGF0Y2ggIT0gTlVMTCk7Ci0rCi0rI2lmbmRlZiBERUJVRwotKyAgaWYgKGNvcmUgPT0gTlVMTCB8 fCBkaXNwYXRjaCA9PSBOVUxMKQotKyAgICByZXR1cm4gTlVMTDsKLSsjZW5kaWYKLSsKLSsgIGZv ciAoOyBkaXNwYXRjaC0+ZnVuY3Rpb25faWQgIT0gMDsgZGlzcGF0Y2grKykKLSsgICAgc3dpdGNo IChkaXNwYXRjaC0+ZnVuY3Rpb25faWQpIHsKLSsgICAgY2FzZSBPU1NMX0ZVTkNfQ09SRV9ORVdf RVJST1I6Ci0rICAgICAgY19uZXdfZXJyb3IgPSBPU1NMX0ZVTkNfY29yZV9uZXdfZXJyb3IoZGlz cGF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIE9TU0xfRlVOQ19DT1JFX1NFVF9FUlJP Ul9ERUJVRzoKLSsgICAgICBjX3NldF9lcnJvcl9kZWJ1ZyA9IE9TU0xfRlVOQ19jb3JlX3NldF9l cnJvcl9kZWJ1ZyhkaXNwYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgT1NTTF9GVU5D X0NPUkVfVlNFVF9FUlJPUjoKLSsgICAgICBjX3ZzZXRfZXJyb3IgPSBPU1NMX0ZVTkNfY29yZV92 c2V0X2Vycm9yKGRpc3BhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgYXNzZXJ0 KGNfbmV3X2Vycm9yICE9IE5VTEwpOwotKyAgYXNzZXJ0KGNfc2V0X2Vycm9yX2RlYnVnICE9IE5V TEwpOwotKyAgYXNzZXJ0KGNfdnNldF9lcnJvciAhPSBOVUxMKTsKLSsKLSsjaWZkZWYgTkRFQlVH Ci0rICBpZiAoY19uZXdfZXJyb3IgPT0gTlVMTCB8fCBjX3NldF9lcnJvcl9kZWJ1ZyA9PSBOVUxM IHx8IGNfdnNldF9lcnJvciA9PSBOVUxMKQotKyAgICByZXR1cm4gTlVMTDsKLSsjZW5kaWYKLSsK LSsgIGlmICgoaGFuZGxlID0gbWFsbG9jKHNpemVvZigqaGFuZGxlKSkpICE9IE5VTEwpIHsKLSsg ICAgaGFuZGxlLT5jb3JlID0gY29yZTsKLSsgICAgaGFuZGxlLT5jb3JlX25ld19lcnJvciA9IGNf bmV3X2Vycm9yOwotKyAgICBoYW5kbGUtPmNvcmVfc2V0X2Vycm9yX2RlYnVnID0gY19zZXRfZXJy b3JfZGVidWc7Ci0rICAgIGhhbmRsZS0+Y29yZV92c2V0X2Vycm9yID0gY192c2V0X2Vycm9yOwot KyAgfQotKyAgcmV0dXJuIGhhbmRsZTsKLSt9Ci0rCi0rc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25z X3N0ICoKLStwcm92ZXJyX2R1cF9oYW5kbGUoc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpz cmMpCi0rewotKyAgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpkc3QgPSBOVUxMOwotKwot KyAgaWYgKHNyYyAhPSBOVUxMCi0rICAgICAgJiYgKGRzdCA9IG1hbGxvYyhzaXplb2YoKmRzdCkp KSAhPSBOVUxMKSB7Ci0rICAgIGRzdC0+Y29yZSA9IHNyYy0+Y29yZTsKLSsgICAgZHN0LT5jb3Jl X25ld19lcnJvciA9IHNyYy0+Y29yZV9uZXdfZXJyb3I7Ci0rICAgIGRzdC0+Y29yZV9zZXRfZXJy b3JfZGVidWcgPSBzcmMtPmNvcmVfc2V0X2Vycm9yX2RlYnVnOwotKyAgICBkc3QtPmNvcmVfdnNl dF9lcnJvciA9IHNyYy0+Y29yZV92c2V0X2Vycm9yOwotKyAgfQotKyAgcmV0dXJuIGRzdDsKLSt9 Ci0rCi0rdm9pZCBwcm92ZXJyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19z dCAqaGFuZGxlKQotK3sKLSsgIGZyZWUoaGFuZGxlKTsKLSt9Ci0rCi0rdm9pZCBwcm92ZXJyX25l d19lcnJvcihjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmhhbmRsZSkKLSt7Ci0r ICBoYW5kbGUtPmNvcmVfbmV3X2Vycm9yKGhhbmRsZS0+Y29yZSk7Ci0rfQotKwotK3ZvaWQgcHJv dmVycl9zZXRfZXJyb3JfZGVidWcoY29uc3Qgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpo YW5kbGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBp bnQgbGluZSwgY29uc3QgY2hhciAqZnVuYykKLSt7Ci0rICBoYW5kbGUtPmNvcmVfc2V0X2Vycm9y X2RlYnVnKGhhbmRsZS0+Y29yZSwgZmlsZSwgbGluZSwgZnVuYyk7Ci0rfQotKwotK3ZvaWQgcHJv dmVycl9zZXRfZXJyb3IoY29uc3Qgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUs Ci0rICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWFzb24sIGNvbnN0IGNoYXIgKmZt dCwgLi4uKQotK3sKLSsgIHZhX2xpc3QgYXA7Ci0rCi0rICB2YV9zdGFydChhcCwgZm10KTsKLSsg IGhhbmRsZS0+Y29yZV92c2V0X2Vycm9yKGhhbmRsZS0+Y29yZSwgcmVhc29uLCBmbXQsIGFwKTsK LSsgIHZhX2VuZChhcCk7Ci0rfQotKwotKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wzICovCi1kaWZm IC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9vc3NsMy1wcm92aWRlci1lcnIuaCBvcGVuc3NoLTEw LjNwMS9vc3NsMy1wcm92aWRlci1lcnIuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvb3NzbDMt cHJvdmlkZXItZXJyLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NoLTEwLjNwMS9vc3NsMy1wcm92aWRlci1lcnIuaAkyMDI2LTA3LTAyIDAwOjI3OjI5Ljcy NzEzNjU1MCArMDIwMAotQEAgLTAsMCArMSw3MyBAQAotKy8qIENDMCBsaWNlbnNlIGFwcGxpZWQs IHNlZSBMSUNFTkNFLm1kICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rI2lmZGVmIFdJ VEhfT1BFTlNTTDMKLSsjaW5jbHVkZSA8c3RkaW50Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY29y ZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NvcmVfZGlzcGF0Y2guaD4KLSsKLSsvKgotKyAqIFRo ZSBpZGVhIHdpdGggdGhpcyBsaWJyYXJ5IGlzIHRvIHJlcGxhY2UgT3BlblNTTCdzIEVSUl9yYWlz ZSgpIGFuZAotKyAqIEVSUl9yYWlzZV9kYXRhKCkgd2l0aCB2YXJpYW50cyB0aGF0IGFyZSBtb3Jl IHN1aXRhYmxlIGZvciBwcm92aWRlcnMgdGhhdAotKyAqIGhhdmUgdGhlaXIgb3duIGVycm9yIHJl YXNvbiB0YWJsZS4KLSsgKgotKyAqIFRoaXMgYXNzdW1lcyB2YXJpYWRpYyBmdW5jdGlvbi1saWtl IG1hY3JvcywgaS5lLiBDOTkgb3IgbmV3ZXIuCi0rICoKLSsgKiBBIG1pbmltYWwgYW1vdW50IG9m IHByZXBhcmF0aW9uIGlzIG5lZWRlZCBvbiBwcm92aWRlciBpbml0aWFsaXphdGlvbiBhbmQKLSsg KiB0YWtlZG93bjoKLSsgKgotKyAqIDEuICBUaGUgcHJvdmlkZXIncyBvdXRnb2luZyBPU1NMX0RJ U1BBVENIIHRhYmxlIG11c3QgaW5jbHVkZSBhbiBlbnRyeQotKyAqICAgICBnb3QgT1NTTF9GVU5D X1BST1ZJREVSX0dFVF9SRUFTT05fU1RSSU5HUywgd2l0aCBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJu cwotKyAqICAgICB0aGUgcHJvdmlkZXIncyB0YWJsZSBvZiByZWFzb25zLgotKyAqICAgICBUaGF0 IHRhYmxlIG9mIHJlYXNvbnMgaXMgYSBzaW1wbGUgT1NTTF9JVEVNIGFycmF5LCB3aGVyZSBlYWNo IGVsZW1lbnQKLSsgKiAgICAgY29udGFpbnMgYSBudW1lcmljIHJlYXNvbiBpZGVudGl0eSBmb3Ig dGhlIHJlYXNvbiwgYW5kIHRoZSBkZXNjcmlwdGlvbgotKyAqICAgICB0ZXh0IHN0cmluZyBmb3Ig dGhhdCByZWFzb24uCi0rICogICAgIEVhY2ggbnVtZXJpYyByZWFzb24gaWRlbnRpdHkgTVVTVCBi ZSB1bmlxdWUgd2l0aGluIHRoaXMgYXJyYXkuCi0rICoKLSsgKiAyLiAgT24gcHJvdmlkZXIgaW5p dGlhbGl6YXRpb24sIGFuIGVycm9yIGhhbmRsZSBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLSsgKiAg ICAgcHJvdmVycl9uZXdfaGFuZGxlKCkuICBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBwYXNzZWQg YXMgZmlyc3QgYXJndW1lbnQKLSsgKiAgICAgdG8gRVJSX3JhaXNlKCkgYW5kIEVSUl9yYWlzZV9k YXRhKCkuCi0rICoKLSsgKiAzLiAgT24gcHJvdmlkZXIgdGFrZWRvd24sIHRoZSBlcnJvciBoYW5k bGUgbXVzdCBiZSBmcmVlZCwgdXNpbmcKLSsgKiAgICAgcHJvdmVycl9mcmVlX2hhbmRsZSgpLgot KyAqCi0rICogV2l0aCB0aGlzIHByZXBhcmF0aW9uLCB0aGUgcHJvdmlkZXIgY29kZSBjYW4gdXNl IEVSUl9yYWlzZSgpIGFuZAotKyAqIEVSUl9yYWlzZV9kYXRhKCkgImFzIHVzdWFsIiwgd2l0aCB0 aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IGlzCi0rICogdGhlIGVycm9yIGhh bmRsZSBpbnN0ZWFkIG9mIG9uZSBvZiB0aGUgT3BlblNTTCBFUlJfTElCXyBtYWNyb3MuCi0rICov Ci0rCi0rLyoKLSsgKiBJbiBjYXNlIDxvcGVuc3NsL2Vyci5oPiB3YXMgaW5jbHVkZWQsIHdlIHRo cm93IGF3YXkgaXRzIGVycm9yIHJlY29yZGluZwotKyAqIG1hY3Jvcy4KLSsgKiBOb3RlIHRoYXQg RVJSX3B1dF9lcnJvcigpIGlzIE5PVCByZWNyZWF0ZWQuICBJdCdzIGRlcHJlY2F0ZWQgYW5kIHNo b3VsZCBub3QKLSsgKiBiZSB1c2VkIGFueSBtb3JlLgotKyAqLwotKyN1bmRlZiBFUlJfcHV0X2Vy cm9yCi0rI3VuZGVmIEVSUl9yYWlzZQotKyN1bmRlZiBFUlJfcmFpc2VfZGF0YQotKwotKyNkZWZp bmUgRVJSX3JhaXNlKGhhbmRsZSwgcmVhc29uKSBFUlJfcmFpc2VfZGF0YSgoaGFuZGxlKSwocmVh c29uKSxOVUxMKQotKwotKyNkZWZpbmUgRVJSX3JhaXNlX2RhdGEoaGFuZGxlLCByZWFzb24sIC4u LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAocHJvdmVycl9uZXdfZXJy b3IoaGFuZGxlKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICBwcm92ZXJyX3NldF9lcnJvcl9kZWJ1ZyhoYW5kbGUsIE9QRU5TU0xfRklMRSxPUEVO U1NMX0xJTkUsT1BFTlNTTF9GVU5DKSwgXAotKyAgIHByb3ZlcnJfc2V0X2Vycm9yKGhhbmRsZSwg cmVhc29uLCBfX1ZBX0FSR1NfXykpCi0rCi0rLyoKLSsgKiBUaGUgc3RydWN0dXJlIHdoZXJlIHRo ZSBsaWJjcnlwdG8gY29yZSBoYW5kbGUgYW5kIGNvcmUgZnVuY3Rpb25zIGFyZQotKyAqIGNhcHR1 cmVkLgotKyAqLwotK3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdDsKLSsKLStzdHJ1Y3QgcHJv dmVycl9mdW5jdGlvbnNfc3QgKgotK3Byb3ZlcnJfbmV3X2hhbmRsZShjb25zdCBPU1NMX0NPUkVf SEFORExFICpjb3JlLCBjb25zdCBPU1NMX0RJU1BBVENIICppbik7Ci0rc3RydWN0IHByb3ZlcnJf ZnVuY3Rpb25zX3N0ICoKLStwcm92ZXJyX2R1cF9oYW5kbGUoc3RydWN0IHByb3ZlcnJfZnVuY3Rp b25zX3N0ICpzcmMpOwotK3ZvaWQgcHJvdmVycl9mcmVlX2hhbmRsZShzdHJ1Y3QgcHJvdmVycl9m dW5jdGlvbnNfc3QgKmhhbmRsZSk7Ci0rCi0rdm9pZCBwcm92ZXJyX25ld19lcnJvcihjb25zdCBz dHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmhhbmRsZSk7Ci0rdm9pZCBwcm92ZXJyX3NldF9l cnJvcl9kZWJ1Zyhjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmhhbmRsZSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBj b25zdCBjaGFyICpmdW5jKTsKLSt2b2lkIHByb3ZlcnJfc2V0X2Vycm9yKGNvbnN0IHN0cnVjdCBw cm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlLAotKyAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgcmVhc29uLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0rI2VuZGlmIC8qIFdJVEhfT1BF TlNTTDMgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3BhY2tldC5jIG9wZW5zc2gt MTAuM3AxL3BhY2tldC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9wYWNrZXQuYwkyMDI2LTA3 LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3BhY2tldC5j CTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI3MjgyOTk0ICswMjAwCi1AQCAtODYsNiArODYsNyBAQAot ICNpbmNsdWRlICJtYWMuaCIKLSAjaW5jbHVkZSAibG9nLmgiCi0gI2luY2x1ZGUgImNhbm9ob3N0 LmgiCi0rI2luY2x1ZGUgImNoYW5uZWxzLmgiCi0gI2luY2x1ZGUgIm1pc2MuaCIKLSAjaW5jbHVk ZSAicGFja2V0LmgiCi0gI2luY2x1ZGUgInNzaGVyci5oIgotQEAgLTk3LDcgKzk4LDIwIEBACi0g I2RlZmluZSBEQkcoeCkKLSAjZW5kaWYKLSAKLS0jZGVmaW5lIFBBQ0tFVF9NQVhfU0laRSAoMjU2 ICogMTAyNCkKLSsvKiBPcGVuU1NIIHVzaW5ncyAyNTZLQiBwYWNrZXQgc2l6ZSBtYXggYnV0IHRo YXQgY29uc3VtZXMgYQotKyAqIGxvdCBvZiBtZW1vcnkgd2l0aCB0aGUgYnVmZmVycyB3ZSBhcmUg dXNpbmcuIEhvd2V2ZXIsIHdlIG5lZWQKLSsgKiBhIGxhcmdlIHBhY2tldCBzaXplIGlmIHRoZSBi YW5uZXIgdGhhdCdzIGJlaW5nIHNlbnQgaXMgbGFyZ2UuCi0rICogU28gd2UgbmVlZCBhIDI1NktC IHBhY2tldCBwcmUgYXV0aGVudGljYXRpb24gYW5kIGEgc21hbGxlciBvbmUKLSsgKiBpbiB0aGlz IGNhc2UgU1NIX0lPQlVGU1ogKyAxS0IsIGFmdGVyd2FyZHMuIFNvIHdlIGNoYW5nZQotKyAqIFBB Q0tFVF9NQVhfU0laRSBmcm9tIGEgI2RlZmluZSB0byBhIGdsb2JhbC4gVGhlbiwgaW4gdGhlIGZ1 bmN0aW9uCi0rICogc3NoX3BhY2tldF9zZXRfYXV0aGVudGNhdGVkIHdlIHJlZHVjZSB0aGUgc2l6 ZSB0byBzb21ldGhpbmcKLSsgKiBtb3JlIG1lbW9yeSBlZmZpY2llbnQuIC1janIgMDQvMDcvMjMK LSsgKi8KLSt1X2ludCBwYWNrZXRfbWF4X3NpemUgPSAyNTYgKiAxMDI0OwotKwotKy8qIGdsb2Jh bCB0byBzdXBwb3J0IGZvcmNlZCByZWtleWluZyAqLwotK2ludCByZWtleV9yZXF1ZXN0ZWQgPSAw OwotKwotIAotIHN0cnVjdCBwYWNrZXRfc3RhdGUgewotIAl1aW50MzJfdCBzZXFucjsKLUBAIC0y NDQsMTIgKzI1OCwyMyBAQAotIAkgICAgKHN0YXRlLT5vdXRnb2luZ19wYWNrZXQgPSBzc2hidWZf bmV3KCkpID09IE5VTEwgfHwKLSAJICAgIChzdGF0ZS0+aW5jb21pbmdfcGFja2V0ID0gc3NoYnVm X25ldygpKSA9PSBOVUxMKQotIAkJZ290byBmYWlsOwotKwkvKiB0aGVzZSBidWZmZXJzIGFyZSBp bXBvcnRhbnQgaW4gdGVybXMgb2YgdHJhY2tpbmcgYnVmZmVyIHVzYWdlCi0rCSAqIHNvIHdlIGV4 cGxpY2l0bHkgbGFiZWwgYW5kIHR5cGUgdGhlbSB3aXRoIGRlc2NyaXB0aXZlIG5hbWVzICovCi0r CXNzaGJ1Zl9yZWxhYmVsKHN0YXRlLT5pbnB1dCwgImlucHV0Iik7Ci0rCXNzaGJ1Zl90eXBlKHN0 YXRlLT5pbnB1dCwgQlVGX1BBQ0tFVF9JTlBVVCk7Ci0rCXNzaGJ1Zl9yZWxhYmVsKHN0YXRlLT5p bmNvbWluZ19wYWNrZXQsICJpbnBhY2tldCIpOwotKwlzc2hidWZfdHlwZShzdGF0ZS0+aW5jb21p bmdfcGFja2V0LCBCVUZfUEFDS0VUX0lOQ09NSU5HKTsKLSsJc3NoYnVmX3JlbGFiZWwoc3RhdGUt Pm91dHB1dCwgIm91dHB1dCIpOwotKwlzc2hidWZfdHlwZShzdGF0ZS0+b3V0cHV0LCBCVUZfUEFD S0VUX09VVFBVVCk7Ci0rCXNzaGJ1Zl9yZWxhYmVsKHN0YXRlLT5vdXRnb2luZ19wYWNrZXQsICJv dXRwYWNrZXQiKTsKLSsJc3NoYnVmX3R5cGUoc3RhdGUtPm91dGdvaW5nX3BhY2tldCwgQlVGX1BB Q0tFVF9PVVRHT0lORyk7Ci0rCi0gCVRBSUxRX0lOSVQoJnN0YXRlLT5vdXRnb2luZyk7Ci0gCVRB SUxRX0lOSVQoJnNzaC0+cHJpdmF0ZV9rZXlzKTsKLSAJVEFJTFFfSU5JVCgmc3NoLT5wdWJsaWNf a2V5cyk7Ci0gCXN0YXRlLT5jb25uZWN0aW9uX2luID0gLTE7Ci0gCXN0YXRlLT5jb25uZWN0aW9u X291dCA9IC0xOwotLQlzdGF0ZS0+bWF4X3BhY2tldF9zaXplID0gMzI3Njg7Ci0rCXN0YXRlLT5t YXhfcGFja2V0X3NpemUgPSBDSEFOX1NFU19QQUNLRVRfREVGQVVMVDsKLSAJc3RhdGUtPnBhY2tl dF90aW1lb3V0X21zID0gLTE7Ci0gCXN0YXRlLT5pbnRlcmFjdGl2ZV9tb2RlID0gMTsKLSAJc3Rh dGUtPnFvc19pbnRlcmFjdGl2ZSA9IHN0YXRlLT5xb3Nfb3RoZXIgPSAtMTsKLUBAIC0yOTksNyAr MzI0LDcgQEAKLSBzc2hfcGFja2V0X3NldF9jb25uZWN0aW9uKHN0cnVjdCBzc2ggKnNzaCwgaW50 IGZkX2luLCBpbnQgZmRfb3V0KQotIHsKLSAJc3RydWN0IHNlc3Npb25fc3RhdGUgKnN0YXRlOwot LQljb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpub25lID0gY2lwaGVyX2J5X25hbWUoIm5vbmUiKTsK LSsJc3RydWN0IHNzaGNpcGhlciAqbm9uZSA9IGNpcGhlcl9ieV9uYW1lKCJub25lIik7Ci0gCWlu dCByOwotIAotIAlpZiAobm9uZSA9PSBOVUxMKSB7Ci1AQCAtMzE2LDkgKzM0MSwxMSBAQAotIAlz dGF0ZS0+Y29ubmVjdGlvbl9pbiA9IGZkX2luOwotIAlzdGF0ZS0+Y29ubmVjdGlvbl9vdXQgPSBm ZF9vdXQ7Ci0gCWlmICgociA9IGNpcGhlcl9pbml0KCZzdGF0ZS0+c2VuZF9jb250ZXh0LCBub25l LAotLQkgICAgKGNvbnN0IHVfY2hhciAqKSIiLCAwLCBOVUxMLCAwLCBDSVBIRVJfRU5DUllQVCkp ICE9IDAgfHwKLSsJICAgIChjb25zdCB1X2NoYXIgKikiIiwgMCwgTlVMTCwgMCwgMCwgQ0lQSEVS X0VOQ1JZUFQsCi0rCSAgICBzdGF0ZS0+YWZ0ZXJfYXV0aGVudGljYXRpb24pKSAhPSAwIHx8Ci0g CSAgICAociA9IGNpcGhlcl9pbml0KCZzdGF0ZS0+cmVjZWl2ZV9jb250ZXh0LCBub25lLAotLQkg ICAgKGNvbnN0IHVfY2hhciAqKSIiLCAwLCBOVUxMLCAwLCBDSVBIRVJfREVDUllQVCkpICE9IDAp IHsKLSsJICAgIChjb25zdCB1X2NoYXIgKikiIiwgMCwgTlVMTCwgMCwgMCwgQ0lQSEVSX0RFQ1JZ UFQsCi0rCSAgICBzdGF0ZS0+YWZ0ZXJfYXV0aGVudGljYXRpb24pKSAhPSAwKSB7Ci0gCQllcnJv cl9mcihyLCAiY2lwaGVyX2luaXQgZmFpbGVkIik7Ci0gCQlmcmVlKHNzaCk7IC8qIFhYWCBuZWVk IHNzaF9mcmVlX3Nlc3Npb25fc3RhdGU/ICovCi0gCQlyZXR1cm4gTlVMTDsKLUBAIC0zODksNyAr NDE2LDcgQEAKLSAKLSAJaWYgKHN0YXRlLT5wYWNrZXRfZGlzY2FyZF9tYWMpIHsKLSAJCWNoYXIg YnVmWzEwMjRdOwotLQkJc2l6ZV90IGRsZW4gPSBQQUNLRVRfTUFYX1NJWkU7Ci0rCQlzaXplX3Qg ZGxlbiA9IHBhY2tldF9tYXhfc2l6ZTsKLSAKLSAJCWlmIChkbGVuID4gc3RhdGUtPnBhY2tldF9k aXNjYXJkX21hY19hbHJlYWR5KQotIAkJCWRsZW4gLT0gc3RhdGUtPnBhY2tldF9kaXNjYXJkX21h Y19hbHJlYWR5OwotQEAgLTk5NSw2ICsxMDIyLDcgQEAKLSAJY29uc3QgY2hhciAqd21zZzsKLSAJ aW50IHIsIGNyeXB0X3R5cGU7Ci0gCWNvbnN0IGNoYXIgKmRpciA9IG1vZGUgPT0gTU9ERV9PVVQg PyAib3V0IiA6ICJpbiI7Ci0rCWNoYXIgYmxvY2tzX3NbRk1UX1NDQUxFRF9TVFJTSVpFXSwgYnl0 ZXNfc1tGTVRfU0NBTEVEX1NUUlNJWkVdOwotIAotIAlkZWJ1ZzJfZigibW9kZSAlZCIsIG1vZGUp OwotIAotQEAgLTEwMzUsMTIgKzEwNjMsMzIgQEAKLSAJCWlmICgociA9IG1hY19pbml0KG1hYykp ICE9IDApCi0gCQkJcmV0dXJuIHI7Ci0gCX0KLS0JbWFjLT5lbmFibGVkID0gMTsKLSsKLSsJLyog aWYgd2UgYXJlIHVzaW5nIE5PTkUgTUFDIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBlbmFibGUgdGhl Ci0rCSAqIG1hYyByb3V0aW5lcy4gVGhpcyBkaXNhYmxlcyB0aGVtIGFuZCB3ZSBjYW4gY2xhdyBi YWNrIHNvbWUgY3ljbGVzCi0rCSAqIGZyb20gdGhlIENQVSAtY2pyIDMvMjEvMjAyMyAqLwotKwlp ZiAoc3NoLT5ub25lX21hYyAhPSAxKQotKwkJbWFjLT5lbmFibGVkID0gMTsKLSsKLSAJREJHKGRl YnVnX2YoImNpcGhlcl9pbml0OiAlcyIsIGRpcikpOwotIAljaXBoZXJfZnJlZSgqY2NwKTsKLSAJ KmNjcCA9IE5VTEw7Ci0rI2lmZGVmIFdJVEhfT1BFTlNTTAotKwlpZiAoc3RyY21wKGVuYy0+bmFt ZSwgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmciKSA9PSAwKSB7Ci0rCQlpZiAoc3Rh dGUtPmFmdGVyX2F1dGhlbnRpY2F0aW9uKQotKwkJCWVuYy0+Y2lwaGVyID0gY2lwaGVyX2J5X25h bWUoCi0rCQkJICAgICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIik7Ci0rCQllbHNl Ci0rCQkJZW5jLT5jaXBoZXIgPSBjaXBoZXJfYnlfbmFtZSgKLSsJCQkgICAgImNoYWNoYTIwLXBv bHkxMzA1QG9wZW5zc2guY29tIik7Ci0rCQlpZiAoZW5jLT5jaXBoZXIgPT0gTlVMTCkKLSsJCQly ZXR1cm4gcjsKLSsJfQotKyNlbmRpZgotIAlpZiAoKHIgPSBjaXBoZXJfaW5pdChjY3AsIGVuYy0+ Y2lwaGVyLCBlbmMtPmtleSwgZW5jLT5rZXlfbGVuLAotLQkgICAgZW5jLT5pdiwgZW5jLT5pdl9s ZW4sIGNyeXB0X3R5cGUpKSAhPSAwKQotKwkgICAgZW5jLT5pdiwgZW5jLT5pdl9sZW4sCi0rCSAg ICBjcnlwdF90eXBlID8gc3RhdGUtPnBfc2VuZC5zZXFuciA6IHN0YXRlLT5wX3JlYWQuc2VxbnIs Ci0rCSAgICBjcnlwdF90eXBlLCBzdGF0ZS0+YWZ0ZXJfYXV0aGVudGljYXRpb24pKSAhPSAwKQot IAkJcmV0dXJuIHI7Ci0gCWlmICghc3RhdGUtPmNpcGhlcl93YXJuaW5nX2RvbmUgJiYKLSAJICAg ICh3bXNnID0gY2lwaGVyX3dhcm5pbmdfbWVzc2FnZSgqY2NwKSkgIT0gTlVMTCkgewotQEAgLTEw NjQsMjUgKzExMTIsNDYgQEAKLSAJCX0KLSAJCWNvbXAtPmVuYWJsZWQgPSAxOwotIAl9Ci0tCS8q Ci0tCSAqIFRoZSAyXihibG9ja3NpemUqMikgbGltaXQgaXMgdG9vIGV4cGVuc2l2ZSBmb3IgM0RF UywKLS0JICogc28gZW5mb3JjZSBhIDFHQiBsaW1pdCBmb3Igc21hbGwgYmxvY2tzaXplcy4KLS0J ICogU2VlIFJGQzQzNDQgc2VjdGlvbiAzLjIuCi0tCSAqLwotLQlpZiAoZW5jLT5ibG9ja19zaXpl ID49IDE2KQotLQkJKmhhcmRfbWF4X2Jsb2NrcyA9ICh1aW50NjRfdCkxIDw8IChlbmMtPmJsb2Nr X3NpemUqMik7Ci0tCWVsc2UKLS0JCSpoYXJkX21heF9ibG9ja3MgPSAoKHVpbnQ2NF90KTEgPDwg MzApIC8gZW5jLT5ibG9ja19zaXplOwotKwkvKiBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJs b2NrcyB0aGUgY2lwaGVyIGNhbgotKwkgKiBoYW5kbGUgc2FmZWx5ICovCi0rCSpoYXJkX21heF9i bG9ja3MgPSBjaXBoZXJfcmVrZXlfYmxvY2tzKGVuYy0+Y2lwaGVyKTsKLSAJKm1heF9ibG9ja3Mg PSAqaGFyZF9tYXhfYmxvY2tzOwotKwotKwkvKiBpZiB3ZSBoYXZlIGEgY3VzdG9tIG9SZWtleUxp bWl0IHVzZSB0aGF0LiAqLwotIAlpZiAoc3RhdGUtPnJla2V5X2xpbWl0KSB7Ci0gCQkqbWF4X2Js b2NrcyA9IE1JTklNVU0oKm1heF9ibG9ja3MsCi0gCQkgICAgc3RhdGUtPnJla2V5X2xpbWl0IC8g ZW5jLT5ibG9ja19zaXplKTsKLSAJfQotLQlkZWJ1ZygicmVrZXkgJXMgYWZ0ZXIgJWxsdSBibG9j a3MiLCBkaXIsCi0tCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSptYXhfYmxvY2tzKTsKLSsKLSsJ LyogdGhlc2UgbGluZXMgc3VwcG9ydCB0aGUgZGVidWcgKi8KLSsJc3RybGNweShibG9ja3Nfcywg Ij8iLCBzaXplb2YoYmxvY2tzX3MpKTsKLSsJc3RybGNweShieXRlc19zLCAiPyIsIHNpemVvZihi eXRlc19zKSk7Ci0rCWlmICgqbWF4X2Jsb2NrcyAqIGVuYy0+YmxvY2tfc2l6ZSA8IExMT05HX01B WCkgewotKwkJZm10X3NjYWxlZCgobG9uZyBsb25nKSptYXhfYmxvY2tzLCBibG9ja3Nfcyk7Ci0r CQlmbXRfc2NhbGVkKChsb25nIGxvbmcpKm1heF9ibG9ja3MgKiBlbmMtPmJsb2NrX3NpemUsIGJ5 dGVzX3MpOwotKwl9Ci0rCWRlYnVnKCJyZWtleSAlcyBhZnRlciAlcyBibG9ja3MgLyAlc0IgZGF0 YSIsIGRpciwgYmxvY2tzX3MsIGJ5dGVzX3MpOwotKwotIAlyZXR1cm4gMDsKLSB9Ci0gCi0rLyog dGhpcyBzdXBwb3J0cyB0aGUgZm9yY2VkIHJla2V5aW5nIHJlcXVpcmVkIGZvciB0aGUgTk9ORSBj aXBoZXIgKi8KLSt2b2lkCi0rcGFja2V0X3JlcXVlc3RfcmVrZXlpbmcodm9pZCkKLSt7Ci0rCXJl a2V5X3JlcXVlc3RlZCA9IDE7Ci0rfQotKwotKy8qIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHByZSBv ciBwb3N0IGF1dGggd2hlbiByZWtleWluZyBmb3IgYWVzLWN0cgotKyAqIGFuZCBub25lIGNpcGhl ciBzd2l0Y2ggKi8KLStpbnQKLStwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoY29uc3Qgc3Ry dWN0IHNzaCAqc3NoKQotK3sKLSsJc3RydWN0IHNlc3Npb25fc3RhdGUgKnN0YXRlID0gc3NoLT5z dGF0ZTsKLSsKLSsJcmV0dXJuIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbjsKLSt9Ci0rCi0g I2RlZmluZSBNQVhfUEFDS0VUUwkoMVU8PDMxKQotIC8qCi0gICogQ2hlY2tzIHdoZXRoZXIgdGhl IHBhY2tldC0gb3IgYmxvY2stIGJhc2VkIHJla2V5aW5nIGxpbWl0cyBoYXZlIGJlZW4KLUBAIC0x MTQwLDYgKzEyMDksMTQgQEAKLSAJaWYgKHN0YXRlLT5wX3NlbmQucGFja2V0cyA9PSAwICYmIHN0 YXRlLT5wX3JlYWQucGFja2V0cyA9PSAwKQotIAkJcmV0dXJuIDA7Ci0gCi0rICAgICAgICAvKiB1 c2VkIHRvIGZvcmNlIHJla2V5aW5nIHdoZW4gY2FsbGVkIGZvciBieSB0aGUgbm9uZQotKyAgICAg ICAgICogY2lwaGVyIHN3aXRjaCBhbmQgYWVzLW10LWN0ciBtZXRob2RzIC1janIgKi8KLSsgICAg ICAgIGlmIChyZWtleV9yZXF1ZXN0ZWQgPT0gMSkgewotKwkJZGVidWdfZigiR290IHRoZSByZWtl eSByZXF1ZXN0Iik7Ci0rCQlyZWtleV9yZXF1ZXN0ZWQgPSAwOwotKyAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKLSsgICAgICAgIH0KLSsKLSAJLyogVGltZS1iYXNlZCByZWtleWluZyAqLwotIAlp ZiAoc3RhdGUtPnJla2V5X2ludGVydmFsICE9IDAgJiYKLSAJICAgIChpbnQ2NF90KXN0YXRlLT5y ZWtleV90aW1lICsgc3RhdGUtPnJla2V5X2ludGVydmFsIDw9IG1vbm90aW1lKCkpCi1AQCAtMTUw Niw3ICsxNTgzLDcgQEAKLSAJc3RydWN0IHNlc3Npb25fc3RhdGUgKnN0YXRlID0gc3NoLT5zdGF0 ZTsKLSAJaW50IGxlbiwgciwgbXNfcmVtYWluID0gMDsKLSAJc3RydWN0IHBvbGxmZCBwZmQ7Ci0t CWNoYXIgYnVmWzgxOTJdOwotKwljaGFyIGJ1ZltTU0hfSU9CVUZTWl07Ci0gCXN0cnVjdCB0aW1l dmFsIHN0YXJ0OwotIAlzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWMsICp0aW1lc3BlY3AgPSBOVUxM OwotIAotQEAgLTE2MTAsNyArMTY4Nyw3IEBACi0gCQkJcmV0dXJuIDA7IC8qIHBhY2tldCBpcyBp bmNvbXBsZXRlICovCi0gCQlzdGF0ZS0+cGFja2xlbiA9IFBFRUtfVTMyKGNwKTsKLSAJCWlmIChz dGF0ZS0+cGFja2xlbiA8IDQgKyAxIHx8Ci0tCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBQQUNLRVRf TUFYX1NJWkUpCi0rCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBwYWNrZXRfbWF4X3NpemUpCi0gCQkJ cmV0dXJuIFNTSF9FUlJfTUVTU0FHRV9JTkNPTVBMRVRFOwotIAl9Ci0gCW5lZWQgPSBzdGF0ZS0+ cGFja2xlbiArIDQ7Ci1AQCAtMTY2OSw3ICsxNzQ2LDcgQEAKLSAJCSAgICBzc2hidWZfcHRyKHN0 YXRlLT5pbnB1dCksIHNzaGJ1Zl9sZW4oc3RhdGUtPmlucHV0KSkgIT0gMCkKLSAJCQlyZXR1cm4g MDsKLSAJCWlmIChzdGF0ZS0+cGFja2xlbiA8IDEgKyA0IHx8Ci0tCQkgICAgc3RhdGUtPnBhY2ts ZW4gPiBQQUNLRVRfTUFYX1NJWkUpIHsKLSsJCSAgICBzdGF0ZS0+cGFja2xlbiA+IHBhY2tldF9t YXhfc2l6ZSkgewotICNpZmRlZiBQQUNLRVRfREVCVUcKLSAJCQlzc2hidWZfZHVtcChzdGF0ZS0+ aW5wdXQsIHN0ZGVycik7Ci0gI2VuZGlmCi1AQCAtMTY5Niw3ICsxNzczLDcgQEAKLSAJCQlnb3Rv IG91dDsKLSAJCXN0YXRlLT5wYWNrbGVuID0gUEVFS19VMzIoc3NoYnVmX3B0cihzdGF0ZS0+aW5j b21pbmdfcGFja2V0KSk7Ci0gCQlpZiAoc3RhdGUtPnBhY2tsZW4gPCAxICsgNCB8fAotLQkJICAg IHN0YXRlLT5wYWNrbGVuID4gUEFDS0VUX01BWF9TSVpFKSB7Ci0rCQkgICAgc3RhdGUtPnBhY2ts ZW4gPiBwYWNrZXRfbWF4X3NpemUpIHsKLSAjaWZkZWYgUEFDS0VUX0RFQlVHCi0gCQkJZnByaW50 ZihzdGRlcnIsICJpbnB1dDogXG4iKTsKLSAJCQlzc2hidWZfZHVtcChzdGF0ZS0+aW5wdXQsIHN0 ZGVycik7Ci1AQCAtMTcwNSw3ICsxNzgyLDcgQEAKLSAjZW5kaWYKLSAJCQlsb2dpdCgiQmFkIHBh Y2tldCBsZW5ndGggJXUuIiwgc3RhdGUtPnBhY2tsZW4pOwotIAkJCXJldHVybiBzc2hfcGFja2V0 X3N0YXJ0X2Rpc2NhcmQoc3NoLCBlbmMsIG1hYywgMCwKLS0JCQkgICAgUEFDS0VUX01BWF9TSVpF KTsKLSsJCQkgICAgcGFja2V0X21heF9zaXplKTsKLSAJCX0KLSAJCWlmICgociA9IHNzaGJ1Zl9j b25zdW1lKHN0YXRlLT5pbnB1dCwgYmxvY2tfc2l6ZSkpICE9IDApCi0gCQkJZ290byBvdXQ7Ci1A QCAtMTcyOCw3ICsxODA1LDcgQEAKLSAJCWxvZ2l0KCJwYWRkaW5nIGVycm9yOiBuZWVkICVkIGJs b2NrICVkIG1vZCAlZCIsCi0gCQkgICAgbmVlZCwgYmxvY2tfc2l6ZSwgbmVlZCAlIGJsb2NrX3Np emUpOwotIAkJcmV0dXJuIHNzaF9wYWNrZXRfc3RhcnRfZGlzY2FyZChzc2gsIGVuYywgbWFjLCAw LAotLQkJICAgIFBBQ0tFVF9NQVhfU0laRSAtIGJsb2NrX3NpemUpOwotKwkJICAgIHBhY2tldF9t YXhfc2l6ZSAtIGJsb2NrX3NpemUpOwotIAl9Ci0gCS8qCi0gCSAqIGNoZWNrIGlmIHRoZSBlbnRp cmUgcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZAotQEAgLTE3NzIsMTEgKzE4NDksMTEgQEAK LSAJCQlpZiAociAhPSBTU0hfRVJSX01BQ19JTlZBTElEKQotIAkJCQlnb3RvIG91dDsKLSAJCQls b2dpdCgiQ29ycnVwdGVkIE1BQyBvbiBpbnB1dC4iKTsKLS0JCQlpZiAobmVlZCArIGJsb2NrX3Np emUgPiBQQUNLRVRfTUFYX1NJWkUpCi0rCQkJaWYgKG5lZWQgKyBibG9ja19zaXplID4gcGFja2V0 X21heF9zaXplKQotIAkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSAJCQlyZXR1 cm4gc3NoX3BhY2tldF9zdGFydF9kaXNjYXJkKHNzaCwgZW5jLCBtYWMsCi0gCQkJICAgIHNzaGJ1 Zl9sZW4oc3RhdGUtPmluY29taW5nX3BhY2tldCksCi0tCQkJICAgIFBBQ0tFVF9NQVhfU0laRSAt IG5lZWQgLSBibG9ja19zaXplKTsKLSsJCQkgICAgcGFja2V0X21heF9zaXplIC0gbmVlZCAtIGJs b2NrX3NpemUpOwotIAkJfQotIAkJLyogUmVtb3ZlIE1BQyBmcm9tIGlucHV0IGJ1ZmZlciAqLwot IAkJREJHKGRlYnVnKCJNQUMgIyVkIG9rIiwgc3RhdGUtPnBfcmVhZC5zZXFucikpOwotQEAgLTE5 OTgsNyArMjA3NSw3IEBACi0gCWludCByOwotIAlzaXplX3QgcmxlbjsKLSAKLS0JaWYgKChyID0g c3NoYnVmX3JlYWQoZmQsIHN0YXRlLT5pbnB1dCwgUEFDS0VUX01BWF9TSVpFLCAmcmxlbikpICE9 IDApCi0rCWlmICgociA9IHNzaGJ1Zl9yZWFkKGZkLCBzdGF0ZS0+aW5wdXQsIHBhY2tldF9tYXhf c2l6ZSwgJnJsZW4pKSAhPSAwKQotIAkJcmV0dXJuIHI7Ci0gCi0gCWlmIChzdGF0ZS0+cGFja2V0 X2Rpc2NhcmQpIHsKLUBAIC0yMDc3LDE3ICsyMTU0LDIxIEBACi0gCXN3aXRjaCAocikgewotIAlj YXNlIFNTSF9FUlJfQ09OTl9DTE9TRUQ6Ci0gCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3NoKTsK LSsJCXNzaHBrdF9maW5hbF9sb2dfZW50cnkoc3NoKTsKLSAJCWxvZ2RpZSgiQ29ubmVjdGlvbiBj bG9zZWQgYnkgJXMiLCByZW1vdGVfaWQpOwotIAljYXNlIFNTSF9FUlJfQ09OTl9USU1FT1VUOgot IAkJc3NoX3BhY2tldF9jbGVhcl9rZXlzKHNzaCk7Ci0rCQlzc2hwa3RfZmluYWxfbG9nX2VudHJ5 KHNzaCk7Ci0gCQlsb2dkaWUoIkNvbm5lY3Rpb24gJXMgJXMgdGltZWQgb3V0IiwKLSAJCSAgICBz c2gtPnN0YXRlLT5zZXJ2ZXJfc2lkZSA/ICJmcm9tIiA6ICJ0byIsIHJlbW90ZV9pZCk7Ci0gCWNh c2UgU1NIX0VSUl9ESVNDT05ORUNURUQ6Ci0gCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3NoKTsK LSsJCXNzaHBrdF9maW5hbF9sb2dfZW50cnkoc3NoKTsKLSAJCWxvZ2RpZSgiRGlzY29ubmVjdGVk IGZyb20gJXMiLCByZW1vdGVfaWQpOwotIAljYXNlIFNTSF9FUlJfU1lTVEVNX0VSUk9SOgotIAkJ aWYgKGVycm5vID09IEVDT05OUkVTRVQpIHsKLSAJCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3No KTsKLSsJCQlzc2hwa3RfZmluYWxfbG9nX2VudHJ5KHNzaCk7Ci0gCQkJbG9nZGllKCJDb25uZWN0 aW9uIHJlc2V0IGJ5ICVzIiwgcmVtb3RlX2lkKTsKLSAJCX0KLSAJCS8qIEZBTExUSFJPVUdIICov Ci1AQCAtMjEyOSw2ICsyMjEwLDI0IEBACi0gCWxvZ2RpZV9mKCJzaG91bGQgaGF2ZSBleGl0ZWQi KTsKLSB9Ci0gCi0rLyogdGhpcyBwcmludHMgb3V0IHRoZSBmaW5hbCBsb2cgZW50cnkgKi8KLSt2 b2lkCi0rc3NocGt0X2ZpbmFsX2xvZ19lbnRyeSAoc3RydWN0IHNzaCAqc3NoKSB7Ci0rCWRvdWJs ZSB0b3RhbF90aW1lOwotKwotKwlpZiAoc3NoLT5zdGFydF90aW1lIDwgMSkKLSsJCS8qIHRoaXMg d2lsbCBwcm9kdWNlIGEgTmFOIGluIHRoZSBvdXRwdXQuIC1janIgKi8KLSsJCXRvdGFsX3RpbWUg PSAwOwotKwllbHNlCi0rCQl0b3RhbF90aW1lID0gbW9ub3RpbWVfZG91YmxlKCkgLSBzc2gtPnN0 YXJ0X3RpbWU7Ci0rCi0rCWxvZ2l0KCJTU0g6IFNlcnZlcjtMVHlwZTogVGhyb3VnaHB1dDtSZW1v dGU6ICVzLSVkO0lOOiAlbHU7T1VUOiAlbHU7RHVyYXRpb246ICUuMWY7dFB1dF9pbjogJS4xZjt0 UHV0X291dDogJS4xZiIsCi0rCSAgICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1v dGVfcG9ydChzc2gpLAotKwkgICAgICBzc2gtPnN0ZGluX2J5dGVzLCBzc2gtPmZkb3V0X2J5dGVz LCB0b3RhbF90aW1lLAotKwkgICAgICBzc2gtPnN0ZGluX2J5dGVzIC8gdG90YWxfdGltZSwKLSsJ ICAgICAgc3NoLT5mZG91dF9ieXRlcyAvIHRvdGFsX3RpbWUpOwotK30KLSsKLSAvKgotICAqIExv Z3MgdGhlIGVycm9yIHBsdXMgY29uc3RydWN0cyBhbmQgc2VuZHMgYSBkaXNjb25uZWN0IHBhY2tl dCwgY2xvc2VzIHRoZQotICAqIGNvbm5lY3Rpb24sIGFuZCBleGl0cy4gIFRoaXMgZnVuY3Rpb24g bmV2ZXIgcmV0dXJucy4gVGhlIGVycm9yIG1lc3NhZ2UKLUBAIC0yMzgzLDEwICsyNDgyLDE5IEBA Ci0gCXNzaC0+a2V4LT5zZXJ2ZXIgPSAxOyAvKiBYWFggdW5pZnk/ICovCi0gfQotIAotKy8qIFNl dCB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24gdG8gcG9zdCBhdXRoCi0rICogV2hpbGUgd2Ug YXJlIGhlcmUgYWxzbyBkZWNyZWFzZSB0aGUgc2l6ZSBvZgotKyAqIHBhY2tldF9tYXhfc2l6ZSB0 byBzb21ldGhpbmcgbW9yZSByZWFzb25hYmxlLgotKyAqIEluIHRoaXMgY2FzZSB0aGF0cyAzM2su IFdoaWNoIGlzIHRoZSBzaXplIG9mCi0rICogdGhlIGxhcmdlc3QgcGFja2V0IHdlIGV4cGVjdCB0 byBzZWUgYW5kIHNvbWUgc3BhY2UKLSsgKiBmb3Igb3ZlcmhlYWQuIFRoaXMgcmVkdWNlcyBtZW1v cnkgdXNhZ2UgaW4gaGlnaAotKyAqIEJEUCBlbnZpcm9ubWVudHMgd2l0aG91dCBpbXBhY3Rpbmcg cGVyZm9ybWFuY2UKLSsgKiAtY2pyIDQvMTEvMjMgKi8KLSB2b2lkCi0gc3NoX3BhY2tldF9zZXRf YXV0aGVudGljYXRlZChzdHJ1Y3Qgc3NoICpzc2gpCi0gewotIAlzc2gtPnN0YXRlLT5hZnRlcl9h dXRoZW50aWNhdGlvbiA9IDE7Ci0rCXBhY2tldF9tYXhfc2l6ZSA9IFNTSF9JT0JVRlNaICsgMTAy NDsKLSB9Ci0gCi0gdm9pZCAqCi1AQCAtMzAyNSw2ICszMTMzLDIwIEBACi0gCXJldHVybiAwOwot IH0KLSAKLSsvKiB1c2VkIGZvciBjaXBoZXIgc3dpdGNoaW5nCi0rICogb25seSBjYWxsZWQgaW4g Y2lwaGVyLXN3dGljaC5jICovCi0rdm9pZCAqCi0rc3NoX3BhY2tldF9nZXRfc2VuZF9jb250ZXh0 KHN0cnVjdCBzc2ggKnNzaCkKLSt7Ci0rICAgICAgICByZXR1cm4gc3NoLT5zdGF0ZS0+c2VuZF9j b250ZXh0OwotK30KLSsKLSt2b2lkICoKLStzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQo c3RydWN0IHNzaCAqc3NoKQotK3sKLSsgICAgICAgIHJldHVybiBzc2gtPnN0YXRlLT5yZWNlaXZl X2NvbnRleHQ7Ci0rfQotKwotIHN0YXRpYyBjaGFyICoKLSBmb3JtYXRfdHJhZmZpY19zdGF0cyhz dHJ1Y3QgcGFja2V0X3N0YXRlICpwcykKLSB7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9wYWNrZXQuaCBvcGVuc3NoLTEwLjNwMS9wYWNrZXQuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9y aWcvcGFja2V0LmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVu c3NoLTEwLjNwMS9wYWNrZXQuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNzYzNjIyMyArMDIwMAot QEAgLTg5LDYgKzg5LDE3IEBACi0gCi0gCS8qIEFQUCBkYXRhICovCi0gCXZvaWQgKmFwcF9kYXRh OwotKwotKwkvKiBsb2dnaW5nIGRhdGEgZm9yIFNlcnZlckxvZ2dpbmcgcGF0Y2gqLwotKwlkb3Vi bGUgc3RhcnRfdGltZTsKLSsJdV9sb25nIGZkb3V0X2J5dGVzOwotKwl1X2xvbmcgc3RkaW5fYnl0 ZXM7Ci0rCi0rCS8qIHRyYWNrIHRoYXQgd2UgYXJlIGluIGEgbm9uZSBjaXBoZXIgc3RhdGUgKi8K LSsJaW50IG5vbmU7Ci0rCi0rCS8qIHRyYWNrIGlmIHdlIGhhdmUgZGlzYWJsZWQgdGhlIG1hYyBh cyB3ZWxsICovCi0rCWludCBub25lX21hYzsKLSB9OwotIAotIHR5cGVkZWYgaW50IChzc2hfcGFj a2V0X2hvb2tfZm4pKHN0cnVjdCBzc2ggKiwgc3RydWN0IHNzaGJ1ZiAqLAotQEAgLTE1OCw2ICsx NjksOCBAQAotIGludAkgc3NoX3BhY2tldF9zZXRfbWF4c2l6ZShzdHJ1Y3Qgc3NoICosIHVfaW50 KTsKLSB1X2ludAkgc3NoX3BhY2tldF9nZXRfbWF4c2l6ZShzdHJ1Y3Qgc3NoICopOwotIAotK2lu dAkgcGFja2V0X2F1dGhlbnRpY2F0aW9uX3N0YXRlKGNvbnN0IHN0cnVjdCBzc2ggKik7Ci0rCi0g aW50CSBzc2hfcGFja2V0X2dldF9zdGF0ZShzdHJ1Y3Qgc3NoICosIHN0cnVjdCBzc2hidWYgKik7 Ci0gaW50CSBzc2hfcGFja2V0X3NldF9zdGF0ZShzdHJ1Y3Qgc3NoICosIHN0cnVjdCBzc2hidWYg Kik7Ci0gCi1AQCAtMTczLDYgKzE4NiwxMyBAQAotIAotIHZvaWQJKnNzaF9wYWNrZXRfZ2V0X2lu cHV0KHN0cnVjdCBzc2ggKik7Ci0gdm9pZAkqc3NoX3BhY2tldF9nZXRfb3V0cHV0KHN0cnVjdCBz c2ggKik7Ci0rdm9pZAkqc3NoX3BhY2tldF9nZXRfcmVjZWl2ZV9jb250ZXh0KHN0cnVjdCBzc2gg Kik7Ci0rdm9pZAkqc3NoX3BhY2tldF9nZXRfc2VuZF9jb250ZXh0KHN0cnVjdCBzc2ggKik7Ci0r Ci0rLyogZm9yIGZvcmNlZCBwYWNrZXQgcmVrZXlpbmcgcG9zdCBhdXRoICovCi0rdm9pZAkgcGFj a2V0X3JlcXVlc3RfcmVrZXlpbmcodm9pZCk7Ci0rLyogZmluYWwgbG9nIGVudHJ5IHN1cHBvcnQg Ki8KLSt2b2lkCSBzc2hwa3RfZmluYWxfbG9nX2VudHJ5IChzdHJ1Y3Qgc3NoICopOwotIAotIC8q IG5ldyBBUEkgKi8KLSBpbnQJc3NocGt0X3N0YXJ0KHN0cnVjdCBzc2ggKnNzaCwgdV9jaGFyIHR5 cGUpOwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcG9seTEzMDUuYyBvcGVuc3NoLTEw LjNwMS9wb2x5MTMwNS5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9wb2x5MTMwNS5jCTIwMjYt MDctMDIgMDA6Mjc6MDYuMDk3MjM0NDY3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvcG9seTEz MDUuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNzkyMTQ3OSArMDIwMAotQEAgLTExLDYgKzExLDE2 IEBACi0gCi0gI2luY2x1ZGUgInBvbHkxMzA1LmgiCi0gCi0rI2lmZGVmIE9QRU5TU0xfSEFWRV9Q T0xZX0VWUAotK3ZvaWQKLStwb2x5MTMwNV9hdXRoKEVWUF9NQUNfQ1RYICpwb2x5X2N0eCwgdW5z aWduZWQgY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdW5zaWduZWQgY2hhciAqbSwg c2l6ZV90IGlubGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtQT0xZMTMwNV9LRVlMRU5dKSB7 Ci0rCXNpemVfdCBwb2x5X291dF9sZW47Ci0rCUVWUF9NQUNfaW5pdChwb2x5X2N0eCwgKGNvbnN0 IHVfY2hhciAqKWtleSwgUE9MWTEzMDVfS0VZTEVOLCBOVUxMKTsKLSsJRVZQX01BQ191cGRhdGUo cG9seV9jdHgsIG0sIGlubGVuKTsKLSsJRVZQX01BQ19maW5hbChwb2x5X2N0eCwgb3V0LCAmcG9s eV9vdXRfbGVuLCAoc2l6ZV90KVBPTFkxMzA1X1RBR0xFTik7Ci0rfQotKyNlbHNlCi0rCi0gI2Rl ZmluZSBtdWwzMngzMl82NChhLGIpICgodWludDY0X3QpKGEpICogKGIpKQotIAotICNkZWZpbmUg VThUTzMyX0xFKHApIFwKLUBAIC0yOCw3ICszOCw3IEBACi0gCX0gd2hpbGUgKDApCi0gCi0gdm9p ZAotLXBvbHkxMzA1X2F1dGgodW5zaWduZWQgY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29u c3QgdW5zaWduZWQgY2hhciAqbSwgc2l6ZV90IGlubGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyIGtl eVtQT0xZMTMwNV9LRVlMRU5dKSB7Ci0rcG9seTEzMDVfYXV0aChjaGFyICp1bnVzZWQsIHVuc2ln bmVkIGNoYXIgb3V0W1BPTFkxMzA1X1RBR0xFTl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sIHNp emVfdCBpbmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbUE9MWTEzMDVfS0VZTEVOXSkgewot IAl1aW50MzJfdCB0MCx0MSx0Mix0MzsKLSAJdWludDMyX3QgaDAsaDEsaDIsaDMsaDQ7Ci0gCXVp bnQzMl90IHIwLHIxLHIyLHIzLHI0OwotQEAgLTE1NSwzICsxNjUsNCBAQAotIAlVMzJUTzhfTEUo Jm91dFsgOF0sIGYyKTsgZjMgKz0gKGYyID4+IDMyKTsKLSAJVTMyVE84X0xFKCZvdXRbMTJdLCBm Myk7Ci0gfQotKyNlbmRpZiAvKiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAgKi8KLWRpZmYgLU51ciBv cGVuc3NoLTEwLjNwMS5vcmlnL3BvbHkxMzA1Lmggb3BlbnNzaC0xMC4zcDEvcG9seTEzMDUuaAot LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvcG9seTEzMDUuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5 NzIzNDQ2NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3BvbHkxMzA1LmgJMjAyNi0wNy0wMiAw MDoyNzoyOS43MjgyOTkwMDUgKzAyMDAKLUBAIC0xMyw4ICsxMywxNSBAQAotICNkZWZpbmUgUE9M WTEzMDVfS0VZTEVOCQkzMgotICNkZWZpbmUgUE9MWTEzMDVfVEFHTEVOCQkxNgotIAotLXZvaWQg cG9seTEzMDVfYXV0aCh1X2NoYXIgb3V0W1BPTFkxMzA1X1RBR0xFTl0sIGNvbnN0IHVfY2hhciAq bSwgc2l6ZV90IGlubGVuLAotKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKLSsjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KLSsKLSt2b2lkIHBvbHkxMzA1X2F1dGgoRVZQX01BQ19DVFggKnBv bHlfa2V5LCB1X2NoYXIgb3V0W1BPTFkxMzA1X1RBR0xFTl0sIGNvbnN0IHVfY2hhciAqbSwgc2l6 ZV90IGlubGVuLAotKyAgICBjb25zdCB1X2NoYXIga2V5W1BPTFkxMzA1X0tFWUxFTl0pCi0rI2Vs c2UKLSt2b2lkIHBvbHkxMzA1X2F1dGgoY2hhciAqdW51c2VkLCB1X2NoYXIgb3V0W1BPTFkxMzA1 X1RBR0xFTl0sIGNvbnN0IHVfY2hhciAqbSwgc2l6ZV90IGlubGVuLAotICAgICBjb25zdCB1X2No YXIga2V5W1BPTFkxMzA1X0tFWUxFTl0pCi0rI2VuZGlmCi0gICAgIF9fYXR0cmlidXRlX18oKF9f Ym91bmRlZF9fKF9fbWluYnl0ZXNfXywgMSwgUE9MWTEzMDVfVEFHTEVOKSkpCi0gICAgIF9fYXR0 cmlidXRlX18oKF9fYm91bmRlZF9fKF9fYnVmZmVyX18sIDIsIDMpKSkKLSAgICAgX19hdHRyaWJ1 dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCA0LCBQT0xZMTMwNV9LRVlMRU4pKSk7Ci1k aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9wcm9ncmVzc21ldGVyLmMgb3BlbnNzaC0xMC4z cDEvcHJvZ3Jlc3NtZXRlci5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9wcm9ncmVzc21ldGVy LmMJMjAyNi0wNy0wMiAwMDoyNzowNi4wOTcyMzQ0NjcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNw MS9wcm9ncmVzc21ldGVyLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43Mjg0MTMzMjIgKzAyMDAKLUBA IC02NSw2ICs2NSw4IEBACi0gc3RhdGljIG9mZl90IHN0YXJ0X3BvczsJCS8qIGluaXRpYWwgcG9z aXRpb24gb2YgdHJhbnNmZXIgKi8KLSBzdGF0aWMgb2ZmX3QgZW5kX3BvczsJCS8qIGVuZGluZyBw b3NpdGlvbiBvZiB0cmFuc2ZlciAqLwotIHN0YXRpYyBvZmZfdCBjdXJfcG9zOwkJLyogdHJhbnNm ZXIgcG9zaXRpb24gYXMgb2YgbGFzdCByZWZyZXNoICovCi0rc3RhdGljIG9mZl90IGxhc3RfcG9z OwotK3N0YXRpYyBvZmZfdCBtYXhfZGVsdGFfcG9zID0gMDsKLSBzdGF0aWMgdm9sYXRpbGUgb2Zm X3QgKmNvdW50ZXI7CS8qIHByb2dyZXNzIGNvdW50ZXIgKi8KLSBzdGF0aWMgbG9uZyBzdGFsbGVk OwkJLyogaG93IGxvbmcgd2UgaGF2ZSBiZWVuIHN0YWxsZWQgKi8KLSBzdGF0aWMgbG9uZyBsb25n IGJ5dGVzX3Blcl9zZWNvbmQ7IC8qIGN1cnJlbnQgc3BlZWQgaW4gYnl0ZXMgcGVyIHNlY29uZCAq LwotQEAgLTEzMSw2ICsxMzMsNyBAQAotIAlsb25nIGxvbmcgY3VyX3NwZWVkOwotIAlpbnQgaG91 cnMsIG1pbnV0ZXMsIHNlY29uZHM7Ci0gCWludCBmaWxlX2xlbiwgY29sczsKLSsJb2ZmX3QgZGVs dGFfcG9zOwotIAotIAlpZiAoZmlsZSA9PSBOVUxMIHx8ICghZm9yY2VfdXBkYXRlICYmICFhbGFy bV9maXJlZCAmJiAhd2luX3Jlc2l6ZWQpIHx8Ci0gCSAgICAhY2FuX291dHB1dCgpKQotQEAgLTE0 Nyw2ICsxNTAsMTAgQEAKLSAJbm93ID0gbW9ub3RpbWVfZG91YmxlKCk7Ci0gCWJ5dGVzX2xlZnQg PSBlbmRfcG9zIC0gY3VyX3BvczsKLSAKLSsJZGVsdGFfcG9zID0gY3VyX3BvcyAtIGxhc3RfcG9z OwotKwlpZiAoZGVsdGFfcG9zID4gbWF4X2RlbHRhX3BvcykKLSsJCW1heF9kZWx0YV9wb3MgPSBk ZWx0YV9wb3M7Ci0rCi0gCWlmIChieXRlc19sZWZ0ID4gMCkKLSAJCWVsYXBzZWQgPSBub3cgLSBs YXN0X3VwZGF0ZTsKLSAJZWxzZSB7Ci1AQCAtMTc2LDcgKzE4Myw3IEBACi0gCQlyZXR1cm47Ci0g Ci0gCS8qIGZpbGVuYW1lICovCi0tCWZpbGVfbGVuID0gY29scyA9IHdpbl9zaXplIC0gMzY7Ci0r CWZpbGVfbGVuID0gY29scyA9IHdpbl9zaXplIC0gNDU7Ci0gCWlmIChmaWxlX2xlbiA+IDApIHsK LSAJCWFzbXByaW50ZigmYnVmLCBJTlRfTUFYLCAmY29scywgIiUtKnMiLCBmaWxlX2xlbiwgZmls ZSk7Ci0gCQkvKiBJZiB3ZSB1c2VkIGZld2VyIGNvbHVtbnMgdGhhbiBleHBlY3RlZCB0aGVuIHBh ZCAqLwotQEAgLTE5Myw2ICsyMDAsMTIgQEAKLSAJeGV4dGVuZGYoJmJ1ZiwgTlVMTCwgIiAlM2Ql JSAlcyAlcy9zICIsIHBlcmNlbnQsIGZvcm1hdF9zaXplKGN1cl9wb3MpLAotIAkgICAgZm9ybWF0 X3JhdGUoKG9mZl90KWJ5dGVzX3Blcl9zZWNvbmQpKTsKLSAKLSsJLyogaW5zdGFudGFuZW91cyBy YXRlICovCi0rCWlmIChieXRlc19sZWZ0ID4gMCkKLSsJCXhleHRlbmRmKCZidWYsIE5VTEwsICIl cy9zIiwgZm9ybWF0X3JhdGUoKG9mZl90KWRlbHRhX3BvcykpOwotKwllbHNlCi0rCQl4ZXh0ZW5k ZigmYnVmLCBOVUxMLCAiJXMvcyIsIGZvcm1hdF9yYXRlKChvZmZfdCltYXhfZGVsdGFfcG9zKSk7 Ci0rCi0gCS8qIEVUQSAqLwotIAlpZiAoIXRyYW5zZmVycmVkKQotIAkJc3RhbGxlZCArPSBlbGFw c2VkOwotQEAgLTIzNSw2ICsyNDgsNyBAQAotIAl9Ci0gCWZyZWUoYnVmKTsKLSAJZnJlZShvYnVm KTsKLSsJbGFzdF9wb3MgPSBjdXJfcG9zOwotIH0KLSAKLSBzdGF0aWMgdm9pZAotZGlmZiAtTnVy IG9wZW5zc2gtMTAuM3AxLm9yaWcvcmVhZGNvbmYuYyBvcGVuc3NoLTEwLjNwMS9yZWFkY29uZi5j Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9yZWFkY29uZi5jCTIwMjYtMDctMDIgMDA6Mjc6MDYu MTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvcmVhZGNvbmYuYwkyMDI2LTA3LTAy IDAwOjI3OjI5LjcyODg1NDg5NyArMDIwMAotQEAgLTYyLDYgKzYyLDcgQEAKLSAjaW5jbHVkZSAi bWFjLmgiCi0gI2luY2x1ZGUgIm15cHJvcG9zYWwuaCIKLSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0r I2luY2x1ZGUgInNzaGJ1Zi5oIgotICNpbmNsdWRlICJ2ZXJzaW9uLmgiCi0gI2luY2x1ZGUgInNz aC1nc3MuaCIKLSAKLUBAIC0xNjUsNiArMTY2LDEwIEBACi0gCW9IYXNoS25vd25Ib3N0cywKLSAJ b1R1bm5lbCwgb1R1bm5lbERldmljZSwKLSAJb0xvY2FsQ29tbWFuZCwgb1Blcm1pdExvY2FsQ29t bWFuZCwgb1JlbW90ZUNvbW1hbmQsCi0rCW9UY3BSY3ZCdWZQb2xsLCBvSFBORGlzYWJsZWQsCi0r CW9Ob25lRW5hYmxlZCwgb05vbmVNYWNFbmFibGVkLCBvTm9uZVN3aXRjaCwKLSsJb0Rpc2FibGVN VEFFUywgb1VzZU1QVENQLCBvSGFwcHlFeWVzLCBvSGFwcHlEZWxheSwKLSsJb01ldHJpY3MsIG9N ZXRyaWNzUGF0aCwgb01ldHJpY3NJbnRlcnZhbCwgb0ZhbGxiYWNrLCBvRmFsbGJhY2tQb3J0LAot IAlvVmlzdWFsSG9zdEtleSwKLSAJb0tleEFsZ29yaXRobXMsIG9JUFFvUywgb1JlcXVlc3RUVFks IG9TZXNzaW9uVHlwZSwgb1N0ZGluTnVsbCwKLSAJb0ZvcmtBZnRlckF1dGhlbnRpY2F0aW9uLCBv SWdub3JlVW5rbm93biwgb1Byb3h5VXNlRmRwYXNzLAotQEAgLTMxMiw2ICszMTcsMTggQEAKLSAJ eyAia2V4YWxnb3JpdGhtcyIsIG9LZXhBbGdvcml0aG1zIH0sCi0gCXsgImlwcW9zIiwgb0lQUW9T IH0sCi0gCXsgInJlcXVlc3R0dHkiLCBvUmVxdWVzdFRUWSB9LAotKwl7ICJub25lZW5hYmxlZCIs IG9Ob25lRW5hYmxlZCB9LAotKwl7ICJub25lbWFjZW5hYmxlZCIsIG9Ob25lTWFjRW5hYmxlZCB9 LAotKwl7ICJub25lc3dpdGNoIiwgb05vbmVTd2l0Y2ggfSwKLSsJeyAidXNlbXB0Y3AiLCBvVXNl TVBUQ1B9LAotKwl7ICJoYXBweWV5ZXMiLCBvSGFwcHlFeWVzIH0sCi0rCXsgImhhcHB5ZGVsYXki LCBvSGFwcHlEZWxheSB9LAotKwl7ICJkaXNhYmxlbXRhZXMiLCBvRGlzYWJsZU1UQUVTIH0sCi0r CXsgIm1ldHJpY3MiLCBvTWV0cmljcyB9LAotKwl7ICJtZXRyaWNzcGF0aCIsIG9NZXRyaWNzUGF0 aCB9LAotKwl7ICJtZXRyaWNzaW50ZXJ2YWwiLCBvTWV0cmljc0ludGVydmFsIH0sCi0rCXsgImZh bGxiYWNrIiwgb0ZhbGxiYWNrIH0sCi0rCXsgImZhbGxiYWNrcG9ydCIsIG9GYWxsYmFja1BvcnQg fSwKLSAJeyAic2Vzc2lvbnR5cGUiLCBvU2Vzc2lvblR5cGUgfSwKLSAJeyAic3RkaW5udWxsIiwg b1N0ZGluTnVsbCB9LAotIAl7ICJmb3JrYWZ0ZXJhdXRoZW50aWNhdGlvbiIsIG9Gb3JrQWZ0ZXJB dXRoZW50aWNhdGlvbiB9LAotQEAgLTMzNCw2ICszNTEsOCBAQAotIAl7ICJwcm94eWp1bXAiLCBv UHJveHlKdW1wIH0sCi0gCXsgInNlY3VyaXR5a2V5cHJvdmlkZXIiLCBvU2VjdXJpdHlLZXlQcm92 aWRlciB9LAotIAl7ICJrbm93bmhvc3RzY29tbWFuZCIsIG9Lbm93bkhvc3RzQ29tbWFuZCB9LAot Kwl7ICJ0Y3ByY3ZidWZwb2xsIiwgb1RjcFJjdkJ1ZlBvbGwgfSwKLSsJeyAiaHBuZGlzYWJsZWQi LCBvSFBORGlzYWJsZWQgfSwKLSAJeyAicmVxdWlyZWRyc2FzaXplIiwgb1JlcXVpcmVkUlNBU2l6 ZSB9LAotIAl7ICJlbmFibGVlc2NhcGVjb21tYW5kbGluZSIsIG9FbmFibGVFc2NhcGVDb21tYW5k bGluZSB9LAotIAl7ICJvYnNjdXJla2V5c3Ryb2tldGltaW5nIiwgb09ic2N1cmVLZXlzdHJva2VU aW1pbmcgfSwKLUBAIC01MzQsNyArNTUzLDcgQEAKLSAKLSAJaWYgKHBvcnQgPT0gMCkgewotIAkJ c3AgPSBnZXRzZXJ2YnluYW1lKFNTSF9TRVJWSUNFX05BTUUsICJ0Y3AiKTsKLS0JCXBvcnQgPSBz cCA/IG50b2hzKHNwLT5zX3BvcnQpIDogU1NIX0RFRkFVTFRfUE9SVDsKLSsJCXBvcnQgPSBzcCA/ IG50b2hzKHNwLT5zX3BvcnQpIDogSFBOU1NIX0RFRkFVTFRfUE9SVDsKLSAJfQotIAlyZXR1cm4g cG9ydDsKLSB9Ci1AQCAtMTM4NCw2ICsxNDAzLDc1IEBACi0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+ Y2hlY2tfaG9zdF9pcDsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLSAKLSsJY2FzZSBvSFBORGlzYWJs ZWQ6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+aHBuX2Rpc2FibGVkOwotKwkJZ290byBwYXJzZV9m bGFnOwotKwotKwljYXNlIG9UY3BSY3ZCdWZQb2xsOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPnRj cF9yY3ZfYnVmX3BvbGw7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugb05vbmVFbmFi bGVkOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPm5vbmVfZW5hYmxlZDsKLSsJCWdvdG8gcGFyc2Vf ZmxhZzsKLSsKLSsJY2FzZSBvTm9uZU1hY0VuYWJsZWQ6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+ bm9uZW1hY19lbmFibGVkOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwotKwljYXNlIG9Vc2VNUFRD UDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT51c2VfbXB0Y3A7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7 Ci0rCi0rCWNhc2Ugb0hhcHB5RXllczoKLSsJCWludHB0ciA9ICZvcHRpb25zLT51c2VfaGFwcHll eWVzOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwotKwljYXNlIG9IYXBweURlbGF5OgotKwkJaW50 cHRyID0gJm9wdGlvbnMtPmhhcHB5X2RlbGF5OwotKwkJZ290byBwYXJzZV9pbnQ7Ci0rCi0rCWNh c2Ugb0Rpc2FibGVNVEFFUzoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5kaXNhYmxlX211bHRpdGhy ZWFkZWQ7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugb01ldHJpY3M6Ci0rCQlpbnRw dHIgPSAmb3B0aW9ucy0+bWV0cmljczsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBv TWV0cmljc0ludGVydmFsOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPm1ldHJpY3NfaW50ZXJ2YWw7 Ci0rCQlnb3RvIHBhcnNlX2ludDsKLSsKLSsJY2FzZSBvTWV0cmljc1BhdGg6Ci0rCQljaGFycHRy ID0gJm9wdGlvbnMtPm1ldHJpY3NfcGF0aDsKLSsJCW9wdGlvbnMtPm1ldHJpY3MgPSAxOwotKwkJ Z290byBwYXJzZV9zdHJpbmc7Ci0rCi0rCWNhc2Ugb0ZhbGxiYWNrOgotKwkJaW50cHRyID0gJm9w dGlvbnMtPmZhbGxiYWNrOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwotKwljYXNlIG9GYWxsYmFj a1BvcnQ6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+ZmFsbGJhY2tfcG9ydDsKLSsJCWdvdG8gcGFy c2VfaW50OwotKwotKwkvKgotKwkgKiBXZSBjaGVjayB0byBzZWUgaWYgdGhlIGNvbW1hbmQgY29t ZXMgZnJvbSB0aGUgY29tbWFuZAotKwkgKiBsaW5lIG9yIG5vdC4gSWYgaXQgZG9lcyB0aGVuIGVu YWJsZSBpdCBvdGhlcndpc2UgZmFpbC4KLSsJICogIE5PTkUgc2hvdWxkIG5ldmVyIGJlIGEgZGVm YXVsdCBjb25maWd1cmF0aW9uLgotKwkgKi8KLSsJY2FzZSBvTm9uZVN3aXRjaDoKLSsJCWlmIChz dHJjbXAoZmlsZW5hbWUsICJjb21tYW5kLWxpbmUiKSA9PSAwKSB7Ci0rCQkJaW50cHRyID0gJm9w dGlvbnMtPm5vbmVfc3dpdGNoOwotKwkJCWdvdG8gcGFyc2VfZmxhZzsKLSsJCX0gZWxzZSB7Ci0r CQkJZXJyb3IoIk5vbmVTd2l0Y2ggaXMgZm91bmQgaW4gJS4yMDBzLlxuWW91IG1heSBvbmx5IHVz ZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQgbGluZSIsIGZpbGVu YW1lKTsKLSsJCQllcnJvcigiQ29udGludWluZy4uLiIpOwotKwkJCWRlYnVnKCJOb25lU3dpdGNo IGRpcmVjdGl2ZSBmb3VuZCBpbiAlLjIwMHMuIiwgZmlsZW5hbWUpOwotKwkJCXJldHVybiAwOwot KwkJfQotKwotIAljYXNlIG9WZXJpZnlIb3N0S2V5RE5TOgotIAkJaW50cHRyID0gJm9wdGlvbnMt PnZlcmlmeV9ob3N0X2tleV9kbnM7Ci0gCQltdWx0aXN0YXRlX3B0ciA9IG11bHRpc3RhdGVfeWVz bm9hc2s7Ci1AQCAtMjg1OCw2ICsyOTQ2LDIwIEBACi0gCW9wdGlvbnMtPmlwX3Fvc19pbnRlcmFj dGl2ZSA9IC0xOwotIAlvcHRpb25zLT5pcF9xb3NfYnVsayA9IC0xOwotIAlvcHRpb25zLT5yZXF1 ZXN0X3R0eSA9IC0xOwotKwlvcHRpb25zLT5ub25lX3N3aXRjaCA9IC0xOwotKwlvcHRpb25zLT5u b25lX2VuYWJsZWQgPSAtMTsKLSsJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gLTE7Ci0rCW9w dGlvbnMtPnVzZV9tcHRjcCA9IC0xOwotKwlvcHRpb25zLT51c2VfaGFwcHlleWVzID0gLTE7Ci0r CW9wdGlvbnMtPmhhcHB5X2RlbGF5ID0gLTE7Ci0rCW9wdGlvbnMtPmRpc2FibGVfbXVsdGl0aHJl YWRlZCA9IC0xOwotKwlvcHRpb25zLT5tZXRyaWNzID0gLTE7Ci0rCW9wdGlvbnMtPm1ldHJpY3Nf cGF0aCA9IE5VTEw7Ci0rCW9wdGlvbnMtPm1ldHJpY3NfaW50ZXJ2YWwgPSAtMTsKLSsJb3B0aW9u cy0+aHBuX2Rpc2FibGVkID0gLTE7Ci0rCW9wdGlvbnMtPmZhbGxiYWNrID0gLTE7Ci0rCW9wdGlv bnMtPmZhbGxiYWNrX3BvcnQgPSAtMTsKLSsJb3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9IC0x OwotIAlvcHRpb25zLT5zZXNzaW9uX3R5cGUgPSAtMTsKLSAJb3B0aW9ucy0+c3RkaW5fbnVsbCA9 IC0xOwotIAlvcHRpb25zLT5mb3JrX2FmdGVyX2F1dGhlbnRpY2F0aW9uID0gLTE7Ci1AQCAtMzA0 MCw4ICszMTQyLDQ3IEBACi0gCQlvcHRpb25zLT5zZXJ2ZXJfYWxpdmVfaW50ZXJ2YWwgPSAwOwot IAlpZiAob3B0aW9ucy0+c2VydmVyX2FsaXZlX2NvdW50X21heCA9PSAtMSkKLSAJCW9wdGlvbnMt PnNlcnZlcl9hbGl2ZV9jb3VudF9tYXggPSAzOwotKwlpZiAob3B0aW9ucy0+aHBuX2Rpc2FibGVk ID09IC0xKQotKwkJb3B0aW9ucy0+aHBuX2Rpc2FibGVkID0gMDsKLSsJaWYgKG9wdGlvbnMtPnRj cF9yY3ZfYnVmX3BvbGwgPT0gLTEpCi0rCQlvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsID0gMTsK LSsJaWYgKG9wdGlvbnMtPm5vbmVfc3dpdGNoID09IC0xKQotKwkJb3B0aW9ucy0+bm9uZV9zd2l0 Y2ggPSAwOwotKwlpZiAob3B0aW9ucy0+bm9uZV9lbmFibGVkID09IC0xKQotKwkJb3B0aW9ucy0+ bm9uZV9lbmFibGVkID0gMDsKLSsJaWYgKG9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9PSAwICYmIG9w dGlvbnMtPm5vbmVfc3dpdGNoID4gMCkgewotKwkJZnByaW50ZihzdGRlcnIsICJOb25lRW5hYmxl ZCBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIHRoZSBOb25lIFN3aXRjaCBvcHRpb24uIE5vbmUgY2lw aGVyIGRpc2FibGVkLlxuIik7Ci0rCQlvcHRpb25zLT5ub25lX2VuYWJsZWQgPSAwOwotKwl9Ci0r CWlmIChvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQgPT0gLTEpCi0rCQlvcHRpb25zLT5ub25lbWFj X2VuYWJsZWQgPSAwOwotKwlpZiAob3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID4gMCAmJiAob3B0 aW9ucy0+bm9uZV9lbmFibGVkID09IDAgfHwKLSsJCQkJCSAgICAgb3B0aW9ucy0+bm9uZV9zd2l0 Y2ggPT0gMCkpIHsKLSsJCWZwcmludGYoc3RkZXJyLCAiTm9uZSBNQUMgY2FuIG9ubHkgYmUgdXNl ZCB3aXRoIHRoZSBOb25lIGNpcGhlci4gTm9uZSBNQUMgZGlzYWJsZWQuXG4iKTsKLSsJCW9wdGlv bnMtPm5vbmVtYWNfZW5hYmxlZCA9IDA7Ci0rCX0KLSsJaWYgKG9wdGlvbnMtPnVzZV9tcHRjcCA9 PSAtMSkKLSsJCW9wdGlvbnMtPnVzZV9tcHRjcCA9IDA7Ci0rCWlmIChvcHRpb25zLT51c2VfaGFw cHlleWVzID09IC0xKQotKwkJb3B0aW9ucy0+dXNlX2hhcHB5ZXllcyA9IDA7Ci0rCS8qIGlmIHRo ZSB1c2VyIHRyaWVzIHRvIHNldCB0aGUgZGVsYXkgdG8gMCB0aGVuIGluIGp1c3QgbG9vcHMgZm9y ZXZlcgotKwkgKiBzbyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBzdGFuZGFyZCAtMSB0ZXN0IHdlIHVz ZSA8IDEgdG8gbWFrZSBzdXJlIHRoZQotKwkgKiB1c2VyIGlzbid0IGJlaW5nIHRvbyBjbGV2ZXIg Zm9yIHRoZWlyIG93biBnb29kCi0rCSAqLwotKwlpZiAob3B0aW9ucy0+aGFwcHlfZGVsYXkgPCAx KQotKwkJb3B0aW9ucy0+aGFwcHlfZGVsYXkgPSAyNTA7IC8qIGRlZmF1bHQgMjUwbXMgYXMgcGVy IFJGQyA4MzA1IFNlY3Rpb24gNSAqLwotKwlpZiAob3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRocmVh ZGVkID09IC0xKQotKwkJb3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRocmVhZGVkID0gMDsKLSsJaWYg KG9wdGlvbnMtPm1ldHJpY3MgPT0gLTEpCi0rCQlvcHRpb25zLT5tZXRyaWNzID0gMDsKLSsJaWYg KG9wdGlvbnMtPm1ldHJpY3NfaW50ZXJ2YWwgPT0gLTEpCi0rCQlvcHRpb25zLT5tZXRyaWNzX2lu dGVydmFsID0gNTsKLSAJaWYgKG9wdGlvbnMtPmNvbnRyb2xfbWFzdGVyID09IC0xKQotIAkJb3B0 aW9ucy0+Y29udHJvbF9tYXN0ZXIgPSAwOwotKwlpZiAob3B0aW9ucy0+ZmFsbGJhY2sgPT0gLTEp Ci0rCQlvcHRpb25zLT5mYWxsYmFjayA9IDE7Ci0rCWlmIChvcHRpb25zLT5mYWxsYmFja19wb3J0 ID09IC0xKQotKwkJb3B0aW9ucy0+ZmFsbGJhY2tfcG9ydCA9IFNTSF9ERUZBVUxUX1BPUlQ7Ci0g CWlmIChvcHRpb25zLT5jb250cm9sX3BlcnNpc3QgPT0gLTEpIHsKLSAJCW9wdGlvbnMtPmNvbnRy b2xfcGVyc2lzdCA9IDA7Ci0gCQlvcHRpb25zLT5jb250cm9sX3BlcnNpc3RfdGltZW91dCA9IDA7 Ci1AQCAtMzA1OCwxMCArMzE5OSwyMiBAQAotIAkJb3B0aW9ucy0+cGVybWl0X2xvY2FsX2NvbW1h bmQgPSAwOwotIAlpZiAob3B0aW9ucy0+dmlzdWFsX2hvc3Rfa2V5ID09IC0xKQotIAkJb3B0aW9u cy0+dmlzdWFsX2hvc3Rfa2V5ID0gMDsKLS0JaWYgKG9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2 ZSA9PSAtMSkKLSsJLyogaW4gdGhlIGV2ZW50IHdlIGFyZSB1c2luZyBSRkMgODMwNSB0aGVuIHdl Ci0rCSAqIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgUU9TIGFzIHRoZXNlCi0rCSAqIGlu dGVyZmVyZSB3aXRoIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MgaW4gb3VyCi0rCSAqIHRlc3QgZW52 aXJvbm1lbnQuIEkgZG9uJ3Qga25vdyBpZiBpdCBoYXMgYSByZWFsIHdvcmxkCi0rCSAqIGltcGFj dCBidXQgVE9ETyB0cnkgdG8gZmluZCBhIHJlYWwgd29ybGQgd2F5IHRvIHRlc3QgdGhpcy4KLSsJ ICovCi0rCWlmIChvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPT0gLTEpIHsKLSAJCW9wdGlv bnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9IElQVE9TX0RTQ1BfRUY7Ci0tCWlmIChvcHRpb25zLT5p cF9xb3NfYnVsayA9PSAtMSkKLSsJCWlmIChvcHRpb25zLT51c2VfaGFwcHlleWVzID09IDEpCi0r CQkJb3B0aW9ucy0+aXBfcW9zX2ludGVyYWN0aXZlID0gSVBUT1NfTE9XREVMQVk7Ci0rCX0KLSsJ aWYgKG9wdGlvbnMtPmlwX3Fvc19idWxrID09IC0xKSB7Ci0gCQlvcHRpb25zLT5pcF9xb3NfYnVs ayA9IElQVE9TX0RTQ1BfQ1MwOwotKwkJaWYgKG9wdGlvbnMtPnVzZV9oYXBweWV5ZXMgPT0gMSkK LSsJCQlvcHRpb25zLT5pcF9xb3NfYnVsayA9IElQVE9TX1RIUk9VR0hQVVQ7Ci0rCX0KLSAJaWYg KG9wdGlvbnMtPnJlcXVlc3RfdHR5ID09IC0xKQotIAkJb3B0aW9ucy0+cmVxdWVzdF90dHkgPSBS RVFVRVNUX1RUWV9BVVRPOwotIAlpZiAob3B0aW9ucy0+c2Vzc2lvbl90eXBlID09IC0xKQotQEAg LTM4NzAsNiArNDAyMywxNSBAQAotIAlkdW1wX2NmZ19mbXRpbnQob1Zpc3VhbEhvc3RLZXksIG8t PnZpc3VhbF9ob3N0X2tleSk7Ci0gCWR1bXBfY2ZnX2ZtdGludChvVXBkYXRlSG9zdGtleXMsIG8t PnVwZGF0ZV9ob3N0a2V5cyk7Ci0gCWR1bXBfY2ZnX2ZtdGludChvRW5hYmxlRXNjYXBlQ29tbWFu ZGxpbmUsIG8tPmVuYWJsZV9lc2NhcGVfY29tbWFuZGxpbmUpOwotKwlkdW1wX2NmZ19mbXRpbnQo b1RjcFJjdkJ1ZlBvbGwsIG8tPnRjcF9yY3ZfYnVmX3BvbGwpOwotKwlkdW1wX2NmZ19mbXRpbnQo b0hQTkRpc2FibGVkLCBvLT5ocG5fZGlzYWJsZWQpOwotKwlkdW1wX2NmZ19mbXRpbnQob05vbmVT d2l0Y2gsIG8tPm5vbmVfc3dpdGNoKTsKLSsJZHVtcF9jZmdfZm10aW50KG9Ob25lRW5hYmxlZCwg by0+bm9uZV9lbmFibGVkKTsKLSsJZHVtcF9jZmdfZm10aW50KG9Ob25lTWFjRW5hYmxlZCwgby0+ bm9uZW1hY19lbmFibGVkKTsKLSsJZHVtcF9jZmdfZm10aW50KG9GYWxsYmFjaywgby0+ZmFsbGJh Y2spOwotKwlkdW1wX2NmZ19mbXRpbnQob01ldHJpY3MsIG8tPm1ldHJpY3MpOwotKwlkdW1wX2Nm Z19mbXRpbnQob1VzZU1QVENQLCBvLT51c2VfbXB0Y3ApOwotKwlkdW1wX2NmZ19mbXRpbnQob0hh cHB5RXllcywgby0+dXNlX2hhcHB5ZXllcyk7Ci0gCWR1bXBfY2ZnX2ZtdGludChvV2FybldlYWtD cnlwdG8sIG8tPndhcm5fd2Vha19jcnlwdG8pOwotIAotIAkvKiBJbnRlZ2VyIG9wdGlvbnMgKi8K LUBAIC0zODgyLDYgKzQwNDQsOSBAQAotIAlkdW1wX2NmZ19pbnQob1JlcXVpcmVkUlNBU2l6ZSwg by0+cmVxdWlyZWRfcnNhX3NpemUpOwotIAlkdW1wX2NmZ19pbnQob09ic2N1cmVLZXlzdHJva2VU aW1pbmcsCi0gCSAgICBvLT5vYnNjdXJlX2tleXN0cm9rZV90aW1pbmdfaW50ZXJ2YWwpOwotKwlk dW1wX2NmZ19pbnQob01ldHJpY3NJbnRlcnZhbCwgby0+bWV0cmljc19pbnRlcnZhbCk7Ci0rCWR1 bXBfY2ZnX2ludChvRmFsbGJhY2tQb3J0LCBvLT5mYWxsYmFja19wb3J0KTsKLSsJZHVtcF9jZmdf aW50KG9IYXBweURlbGF5LCBvLT5oYXBweV9kZWxheSk7Ci0gCi0gCS8qIFN0cmluZyBvcHRpb25z ICovCi0gCWR1bXBfY2ZnX3N0cmluZyhvQmluZEFkZHJlc3MsIG8tPmJpbmRfYWRkcmVzcyk7Ci1A QCAtMzkwOSw2ICs0MDc0LDcgQEAKLSAJZHVtcF9jZmdfc3RyaW5nKG9YQXV0aExvY2F0aW9uLCBv LT54YXV0aF9sb2NhdGlvbik7Ci0gCWR1bXBfY2ZnX3N0cmluZyhvS25vd25Ib3N0c0NvbW1hbmQs IG8tPmtub3duX2hvc3RzX2NvbW1hbmQpOwotIAlkdW1wX2NmZ19zdHJpbmcob1RhZywgby0+dGFn KTsKLSsJZHVtcF9jZmdfc3RyaW5nKG9NZXRyaWNzUGF0aCwgby0+bWV0cmljc19wYXRoKTsKLSAJ ZHVtcF9jZmdfc3RyaW5nKG9WZXJzaW9uQWRkZW5kdW0sIG8tPnZlcnNpb25fYWRkZW5kdW0pOwot IAotIAkvKiBGb3J3YXJkcyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcmVhZGNv bmYuaCBvcGVuc3NoLTEwLjNwMS9yZWFkY29uZi5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9y ZWFkY29uZi5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNz aC0xMC4zcDEvcmVhZGNvbmYuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyOTE3NjgwOSArMDIwMAot QEAgLTEyOSw2ICsxMjksMjMgQEAKLSAJaW50CWVuYWJsZV9zc2hfa2V5c2lnbjsKLSAJaW50NjRf dCByZWtleV9saW1pdDsKLSAJaW50CXJla2V5X2ludGVydmFsOwotKwotKwkvKiBocG5zc2ggb3B0 aW9ucyAqLwotKwlpbnQgICAgIHRjcF9yY3ZfYnVmX3BvbGw7IC8qIE9wdGlvbiB0byBwb2xsIHJl Y3YgYnVmIGV2ZXJ5IHdpbmRvdyB0cmFuc2ZlciAqLwotKwlpbnQgICAgIGhwbl9kaXNhYmxlZDsg ICAgIC8qIFN3aXRjaCB0byBkaXNhYmxlIEhQTiBidWZmZXIgbWFuYWdlbWVudCAqLwotKwlpbnQg ICAgIG5vbmVfc3dpdGNoOyAgICAvKiBVc2Ugbm9uZSBjaXBoZXIgKi8KLSsJaW50ICAgICBub25l X2VuYWJsZWQ7ICAgLyogQWxsb3cgbm9uZSB0byBiZSB1c2VkICovCi0rCWludCAgICAgbm9uZW1h Y19lbmFibGVkOyAgIC8qIEFsbG93IG5vbmUgdG8gYmUgdXNlZCAqLwotKwlpbnQgICAgIGRpc2Fi bGVfbXVsdGl0aHJlYWRlZDsgLyogRGlzYWJsZSBtdWx0aXRocmVhZGVkIGFlcy1jdHIgKi8KLSsJ aW50ICAgICBtZXRyaWNzOyAvKiBlbmFibGUgbWV0cmljcyAqLwotKwlpbnQgICAgIG1ldHJpY3Nf aW50ZXJ2YWw7IC8qIHRpbWUgaW4gc2Vjb25kcyBiZXR3ZWVuIHBvbGxzICovCi0rCWNoYXIgICAq bWV0cmljc19wYXRoOyAvKiBwYXRoIGZvciB0aGUgbWV0cmljcyBmaWxlcyAqLwotKwlpbnQgICAg IGZhbGxiYWNrOyAvKiBlbnxkaXNhYmxlIGZhbGxiYWNrIHBvcnQgKGRlZjogdHJ1ZSkgKi8KLSsJ aW50ICAgICBmYWxsYmFja19wb3J0OyAvKiBwb3J0IHRvIGZhbGxiYWNrIHRvIChkZWY6IDIyKSAq LwotKwlpbnQgICAgIHVzZV9tcHRjcDsgLyogdXNlIE11bHRpUGF0aCBUQ1AgKi8KLSsJaW50ICAg ICB1c2VfaGFwcHlleWVzOyAvKiB1c2UgUkZDIDgzMDUgLSBIYXBweSBFeWViYWxscyAqLwotKwlp bnQgICAgIGhhcHB5X2RlbGF5OyAvKiB1c2VyIGRlZmluZWQgZGxlYXkgZm9yIFJGQyA4MzA1ICov Ci0rCi0gCWludAlub19ob3N0X2F1dGhlbnRpY2F0aW9uX2Zvcl9sb2NhbGhvc3Q7Ci0gCWludAlp ZGVudGl0aWVzX29ubHk7Ci0gCWludAlzZXJ2ZXJfYWxpdmVfaW50ZXJ2YWw7Ci1kaWZmIC1OdXIg b3BlbnNzaC0xMC4zcDEub3JpZy9SRUFETUUubWQgb3BlbnNzaC0xMC4zcDEvUkVBRE1FLm1kCi0t LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9SRUFETUUubWQJMjAyNi0wNy0wMiAwMDoyNzowNi4wODkz OTQyODAgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9SRUFETUUubWQJMjAyNi0wNy0wMiAwODo0 NjoyNC44MjAwMTk1ODggKzAyMDAKLUBAIC0xLDE5ICsxLDIzIEBACi0tIyBQb3J0YWJsZSBPcGVu U1NICi0rIyBIUE5TU0g6IEJhc2VkIG9uIFBvcnRhYmxlIE9wZW5TU0gKLStIUE4tU1NIIGlzIGEg aGlnaCBwZXJmb3JtYW5jZSBzb2Z0IGZvcmsgb2YgT3BlblNTSCB0aGF0IGNhbiBwcm92aWRlIHNp Z25pZmljYW50bHkgZmFzdGVyIHRocm91Z2hwdXQgZm9yIGJ1bGsgZGF0YSB0cmFuc2ZlcnMgb3Zl ciBhIHdpZGUgcmFuZ2Ugb2YgbmV0d29yayBwYXRocy4gSW4gc29tZSBzaXR1YXRpb25zIHdlJ3Zl IHNlZW4gdGhyb3VnaHB1dCByYXRlcyBtb3JlIHRoYW4gMTAwIHRpbWVzIGZhc3RlciB0aGFuIE9w ZW5TU0guIEhQTi1TU0ggaXMgYWJsZSB0byBkbyB0aGlzIGJ5IG9wdGltaXppbmcgdGhlIGFwcGxp Y2F0aW9uIGxheWVyIHJlY2VpdmUgYnVmZmVyIHRvIG1hdGNoIHRoZSBUQ1AgcmVjZWl2ZSBidWZm ZXIuIE5vdGFibHksIHRvIHNlZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgSFBOLVNTSCBvbmx5 IG5lZWRzIHRvIGJlIHRoZSBkYXRhIHJlY2VpdmVyIHNvIHVzZXJzIGNhbiBzZWUgbm90YWJsZSBp bXByb3ZlbWVudHMgd2l0aCBtYW55IG90aGVyIFNTSCBpbXBsZW1lbnRhdGlvbnMuIEhQTi1TU0gg YWxzbyBpbmNvcnBvcmF0ZXMgdHdvIHBhcmFsbGVsaXplZCBjaXBoZXJzLCBBRVMtQ1RSIGFuZCBD aGFjaGEyMCAodGhlIGRlZmF1bHQpLiBXaGVuIHVzaW5nIHRoZXNlIGNpcGhlcnMgYSB0aHJvdWdo cHV0IHBlcmZvcm1hbmNlIGluY3JlYXNlIG9mIDMwJSBpcyB0eXBpY2FsLiBNb3JlIGluZm9ybWF0 aW9uIG9uIGhvdyB3ZSBkbyB0aGlzIHdvcmsgYW5kIG90aGVyIGZlYXR1cmVzIG9mIEhQTi1TU0gg aXMgYXZhaWxhYmxlIGZyb20gW2h0dHBzOi8vaHBuc3NoLm9yZ10oaHR0cHM6Ly9ocG5zc2gub3Jn KS4KLSAKLS1bIVtDL0MrKyBDSV0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3MvYy1jcHAueW1sL2Jh ZGdlLnN2ZyldKC4uLy4uL2FjdGlvbnMvd29ya2Zsb3dzL2MtY3BwLnltbCkKLS1bIVtWTSBDSV0o Li4vLi4vYWN0aW9ucy93b3JrZmxvd3Mvdm0ueW1sL2JhZGdlLnN2ZyldKC4uLy4uL2FjdGlvbnMv d29ya2Zsb3dzL3ZtLnltbCkKLS1bIVtDL0MrKyBDSSBzZWxmLWhvc3RlZF0oaHR0cHM6Ly9naXRo dWIuY29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS1zZWxmaG9zdGVkL2FjdGlvbnMvd29ya2Zs b3dzL3NlbGZob3N0ZWQueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3No L29wZW5zc2gtcG9ydGFibGUtc2VsZmhvc3RlZC9hY3Rpb25zL3dvcmtmbG93cy9zZWxmaG9zdGVk LnltbCkKLS1bIVtDSUZ1enpdKC4uLy4uL2FjdGlvbnMvd29ya2Zsb3dzL2NpZnV6ei55bWwvYmFk Z2Uuc3ZnKV0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3MvY2lmdXp6LnltbCkKLS1bIVtGdXp6aW5n IFN0YXR1c10oaHR0cHM6Ly9vc3MtZnV6ei1idWlsZC1sb2dzLnN0b3JhZ2UuZ29vZ2xlYXBpcy5j b20vYmFkZ2VzL29wZW5zc2guc3ZnKV0oaHR0cHM6Ly9pc3N1ZXMub3NzLWZ1enouY29tL2lzc3Vl cz9xPSJQcm9qZWN0OitvcGVuc3NoIitpczpvcGVuKQotLVshW0NvdmVyaXR5IFN0YXR1c10oaHR0 cHM6Ly9zY2FuLmNvdmVyaXR5LmNvbS9wcm9qZWN0cy8yMTM0MS9iYWRnZS5zdmcpXShodHRwczov L3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzL29wZW5zc2gtcG9ydGFibGUpCi0rU3RhcnRpbmcg d2l0aCB2ZXJzaW9uIEhQTjE3djAgdGhlcmUgd2lsbCBiZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRv IHRoZSBuYW1pbmcgY29udmVudGlvbiB1c2VkIGZvciBleGVjdXRhYmxlcyBhbmQgaW5zdGFsbGF0 aW9uIGxvY2F0aW9ucy4gVGhlIGxhc3QgdmVyc2lvbiB0aGF0IGRvZXMgbm90IGluY2x1ZGUgdGhl c2UgY2hhbmdlcyBpcyBIUE4xNnYxIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEhQTi04XzhfUDEgdGFn IG9uIHRoZSBtYXN0ZXIgYnJhbmNoLgotIAotLU9wZW5TU0ggaXMgYSBjb21wbGV0ZSBpbXBsZW1l bnRhdGlvbiBvZiB0aGUgU1NIIHByb3RvY29sICh2ZXJzaW9uIDIpIGZvciBzZWN1cmUgcmVtb3Rl IGxvZ2luLCBjb21tYW5kIGV4ZWN1dGlvbiBhbmQgZmlsZSB0cmFuc2Zlci4gSXQgaW5jbHVkZXMg YSBjbGllbnQgYGBzc2hgYCBhbmQgc2VydmVyIGBgc3NoZGBgLCBmaWxlIHRyYW5zZmVyIHV0aWxp dGllcyBgYHNjcGBgIGFuZCBgYHNmdHBgYCBhcyB3ZWxsIGFzIHRvb2xzIGZvciBrZXkgZ2VuZXJh dGlvbiAoYGBzc2gta2V5Z2VuYGApLCBydW4tdGltZSBrZXkgc3RvcmFnZSAoYGBzc2gtYWdlbnRg YCkgYW5kIGEgbnVtYmVyIG9mIHN1cHBvcnRpbmcgcHJvZ3JhbXMuCi0rSFBOU1NIIGlzIGEgdmFy aWFudCBvZiBPcGVuU1NILiBJdCBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTU0gg cHJvdG9jb2wgKHZlcnNpb24gMikgZm9yIHNlY3VyZSByZW1vdGUgbG9naW4sIGNvbW1hbmQgZXhl Y3V0aW9uIGFuZCBmaWxlIHRyYW5zZmVyLiBJdCBpbmNsdWRlcyBhIGNsaWVudCBgYGhwbnNzaGBg IGFuZCBzZXJ2ZXIgYGBocG5zc2hkYGAsIGZpbGUgdHJhbnNmZXIgdXRpbGl0aWVzIGBgaHBuc2Nw YGAgYW5kIGBgaHBuc2Z0cGBgIGFzIHdlbGwgYXMgdG9vbHMgZm9yIGtleSBnZW5lcmF0aW9uIChg YGhwbnNzaC1rZXlnZW5gYCksIHJ1bi10aW1lIGtleSBzdG9yYWdlIChgYGhwbnNzaC1hZ2VudGBg KSBhbmQgYSBudW1iZXIgb2Ygc3VwcG9ydGluZyBwcm9ncmFtcy4gSXQgaW5jbHVkZXMgbnVtZXJv dXMgcGVyZm9ybWFuY2UgYW5kIGZ1bmN0aW9uYWxpdHkgZW5oYW5jZW1lbnRzIGZvY3VzZWQgb24g aGlnaCBwZXJmb3JtYW5jZSBuZXR3b3JrcyBhbmQgY29tcHV0aW5nIGVudnJpcm9ubWVudHMuIENv bXBsZXRlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgSFBOLVJFQURNRSBmaWxlLgot IAotLVRoaXMgaXMgYSBwb3J0IG9mIE9wZW5CU0QncyBbT3BlblNTSF0oaHR0cHM6Ly9vcGVuc3No LmNvbSkgdG8gbW9zdCBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMsIGluY2x1ZGluZyBMaW51 eCwgT1MgWCBhbmQgQ3lnd2luLiBQb3J0YWJsZSBPcGVuU1NIIHBvbHlmaWxscyBPcGVuQlNEIEFQ SXMgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBlbHNld2hlcmUsIGFkZHMgc3NoZCBzYW5kYm94aW5n IGZvciBtb3JlIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBPUy1u YXRpdmUgYXV0aGVudGljYXRpb24gYW5kIGF1ZGl0aW5nIChlLmcuIHVzaW5nIFBBTSkuCi0rSXQg aXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGFsbCBjb21wbGlhbnQgaW1wbGVtZW50YXRpb25zIG9m IHRoZSBTU0ggcHJvdG9jb2wgYW5kIE9wZW5TU0ggaW4gcGFydGljdWxhci4KLSsKLStUaGlzIHZl cnNpb24gb2YgSFBOU1NIIGlzIHNpZ25pZmljYW50IGRlcGFydHVyZSBpbiB0ZXJtcyBvZiBuYW1p bmcgZXhlY3V0YWJsZXMgYW5kIGluc3RhbGxhdGlvbiBsb2NhdGlvbnMuIFNwZWNpZmljYWxseSwg YWxsIGV4ZWN1dGFibGVzIGFyZSBub3cgcHJlZml4ZWQgd2l0aCBgYGhwbmBgLiBTbyBgYHNzaGBg IGJlY29tZXMgYGBocG5zc2hgYCBhbmQgYGBzY3BgYCBpcyBub3cgYGBocG5zY3BgYC4gQ29uZmln dWF0aW9uIGZpbGVzIGFuZCBob3N0IGtleXMgY2FuIG5vdyBiZSBmb3VuZCBpbiBgYC9ldGMvaHBu c3NoYGAuIEJ5IGRlZmF1bHQgYGBocG5zc2hkYGAgbm93IHJ1bnMgb24gcG9ydCAyMjIyIGJ1dCB0 aGlzIGlzIGNvbmZpZ3VyYWJsZS4gVGhpcyBjaGFuZ2Ugd2FzIG1hZGUgaW4gb3JkZXIgdG8gcHJl dmVudCBpbnN0YWxsYXRpb25zIG9mIGhwbnNzaCwgcGFydGljdWxhcmx5IGZyb20gcGFja2FnZSBk aXN0cmlidXRpb25zLCBmcm9tIGludGVyZmVyaW5nIHdpdGggZGVmYXVsdCBpbnN0YWxsYXRpb25z IG9mIE9wZW5TU0guIEhQTlNTSCBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGFsbCB2ZXJz aW9ucyBvZiBPcGVuU1NIIGluY2x1ZGluZyBjb25maWd1cmF0aW9uIGZpbGVzLCBrZXlzLCBhbmQg cnVuIHRpbWUgb3B0aW9ucy4gQWRkaXRpb25hbGx5LCB0aGUgY2xpZW50IHdpbGwsIGJ5IGRlZmF1 bHQgYXR0ZW1wdCB0byBjb25uZWN0IHRvIHBvcnQgMjIyMiBidXQgd2lsbCBhdXRvbWF0aWNhbGx5 IGZhbGwgYmFjayB0byBwb3J0IDIyLiBUaGlzIGlzIGFsc28gdXNlciBjb25maWd1cmFibGUuCi0r Ci0rSFBOU1NIIGlzIGJhc2VkIG9uIE9wZW5TU0ggcG9ydGFibGUuIFRoaXMgaXMgYSBwb3J0IG9m IE9wZW5CU0QncyBbT3BlblNTSF0oaHR0cHM6Ly9vcGVuc3NoLmNvbSkgdG8gbW9zdCBVbml4LWxp a2Ugb3BlcmF0aW5nIHN5c3RlbXMsIGluY2x1ZGluZyBMaW51eCwgT1MgWCBhbmQgQ3lnd2luLiBQ b3J0YWJsZSBPcGVuU1NIIHBvbHlmaWxscyBPcGVuQlNEIEFQSXMgdGhhdCBhcmUgbm90IGF2YWls YWJsZSBlbHNld2hlcmUsIGFkZHMgc3NoZCBzYW5kYm94aW5nIGZvciBtb3JlIG9wZXJhdGluZyBz eXN0ZW1zIGFuZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBPUy1uYXRpdmUgYXV0aGVudGljYXRpb24g YW5kIGF1ZGl0aW5nIChlLmcuIHVzaW5nIFBBTSkuCi0rCi0rVGhpcyBkb2N1bWVudCB3aWxsIGJl IGNoYW5naW5nIG92ZXIgdGltZSB0byByZWZsZWN0IG5ldyBjaGFuZ2VzIGFuZCBmZWF0dXJlcy4g VGhpcyBkb2N1bWVudCBpcyBidWlsdCBvZmYgb2YgdGhlIE9wZW5TU0ggUkVBRE1FLm1kCi0rCi0r Q3VycmVudCBpbmZvcm1hdGlvbiBhYm91dCByZWxlYXNlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUg aW4gdGhlIEhQTi1SRUFETUUgZG9jdW1lbnQuCi0gCi0gIyMgRG9jdW1lbnRhdGlvbgotIAotLVRo ZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGZvciBPcGVuU1NIIGFyZSB0aGUgbWFuIHBhZ2VzIGZv ciBlYWNoIHRvb2w6Ci0rVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gZm9yIEhQTi1TU0ggYXJl IHRoZSBtYW4gcGFnZXMgZm9yIGVhY2ggdG9vbC4KLSAKLSAqIFtzc2goMSldKGh0dHBzOi8vbWFu Lm9wZW5ic2Qub3JnL3NzaC4xKQotICogW3NzaGQoOCldKGh0dHBzOi8vbWFuLm9wZW5ic2Qub3Jn L3NzaGQuOCkKLUBAIC0yNCwxNyArMjgsMTggQEAKLSAqIFtzc2gta2V5c2Nhbig4KV0oaHR0cHM6 Ly9tYW4ub3BlbmJzZC5vcmcvc3NoLWtleXNjYW4uOCkKLSAqIFtzZnRwLXNlcnZlcig4KV0oaHR0 cHM6Ly9tYW4ub3BlbmJzZC5vcmcvc2Z0cC1zZXJ2ZXIuOCkKLSAKLS0jIyBTdGFibGUgUmVsZWFz ZXMKLStBbGwgb3B0aW9ucyBpbiBPcGVuU1NIIGFyZSByZXNwZWN0ZWQgYnkgSFBOLVNTSC4KLSAK LS1TdGFibGUgcmVsZWFzZSB0YXJiYWxscyBhcmUgYXZhaWxhYmxlIGZyb20gYSBudW1iZXIgb2Yg W2Rvd25sb2FkIG1pcnJvcnNdKGh0dHBzOi8vd3d3Lm9wZW5zc2guY29tL3BvcnRhYmxlLmh0bWwj ZG93bmxvYWRzKS4gV2UgcmVjb21tZW5kIHRoZSB1c2Ugb2YgYSBzdGFibGUgcmVsZWFzZSBmb3Ig bW9zdCB1c2Vycy4gUGxlYXNlIHJlYWQgdGhlIFtyZWxlYXNlIG5vdGVzXShodHRwczovL3d3dy5v cGVuc3NoLmNvbS9yZWxlYXNlbm90ZXMuaHRtbCkgZm9yIGRldGFpbHMgb2YgcmVjZW50IGNoYW5n ZXMgYW5kIHBvdGVudGlhbCBpbmNvbXBhdGliaWxpdGllcy4KLSsjIyBCdWlsZGluZyBIUE5TU0gK LSAKLS0jIyBCdWlsZGluZyBQb3J0YWJsZSBPcGVuU1NICi0rRGV0YWlsZWQgc3RlcCBieSBzdGVw IGluc3RydWN0aW9ucyBjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly9wc2MuZWR1L2hwbi1zc2gtaG9t ZS8KLSAKLSAjIyMgRGVwZW5kZW5jaWVzCi0gCi0tUG9ydGFibGUgT3BlblNTSCBpcyBidWlsdCB1 c2luZyBhdXRvY29uZiBhbmQgbWFrZS4gSXQgcmVxdWlyZXMgYSB3b3JraW5nIEMgY29tcGlsZXIs IHN0YW5kYXJkIGxpYnJhcnkgYW5kIGhlYWRlcnMuCi0rSFBOU1NIIGlzIGJ1aWx0IHVzaW5nIGF1 dG9jb25mIGFuZCBtYWtlLiBJdCByZXF1aXJlcyBhIHdvcmtpbmcgQyBjb21waWxlciwgc3RhbmRh cmQgbGlicmFyeSBhbmQgaGVhZGVycy4KLSAKLS1gYGxpYmNyeXB0b2BgIGZyb20gb25lIG9mIFtM aWJyZVNTTF0oaHR0cHM6Ly93d3cubGlicmVzc2wub3JnLyksIFtPcGVuU1NMXShodHRwczovL3d3 dy5vcGVuc3NsLm9yZyksIFtBV1MtTENdKGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWxjKSBv ciBbQm9yaW5nU1NMXShodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2JvcmluZ3NzbCkgbWF5IGFs c28gYmUgdXNlZC4gIE9wZW5TU0ggbWF5IGJlIGJ1aWx0IHdpdGhvdXQgZWl0aGVyIG9mIHRoZXNl LCBidXQgdGhlIHJlc3VsdGluZyBiaW5hcmllcyB3aWxsIGhhdmUgb25seSBhIHN1YnNldCBvZiB0 aGUgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG1zIG5vcm1hbGx5IGF2YWlsYWJsZS4KLStgYGxpYmNy eXB0b2BgIGZyb20gb25lIG9mIFtMaWJyZVNTTF0oaHR0cHM6Ly93d3cubGlicmVzc2wub3JnLyks IFtPcGVuU1NMXShodHRwczovL3d3dy5vcGVuc3NsLm9yZyksIFtBV1MtTENdKGh0dHBzOi8vZ2l0 aHViLmNvbS9hd3MvYXdzLWxjKSBvciBbQm9yaW5nU1NMXShodHRwczovL2dpdGh1Yi5jb20vZ29v Z2xlL2JvcmluZ3NzbCkgbWF5IGFsc28gYmUgdXNlZC4gSFBOLVNTSCBtYXkgYmUgYnVpbHQgd2l0 aG91dCBlaXRoZXIgb2YgdGhlc2UsIGJ1dCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgaGF2 ZSBvbmx5IGEgc3Vic2V0IG9mIHRoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgbm9ybWFsbHkg YXZhaWxhYmxlLgotK1RoZSBkZXZlbG9wZXJzIG9mIEhQTi1TU0ggc3Ryb25nbHkgc3VnZ2VzdCB0 aGUgdXNlIG9mIE9wZW5TU0wgMy4wIG9yIGhpZ2hlciB0byBzdXBwb3J0IHRoZSBhZHZhbmNlZCBj cnlwdG9ncmFwaHkgbWV0aG9kcyB1c2VkLgotIAotIFt6bGliXShodHRwczovL3d3dy56bGliLm5l dC8pIGlzIG9wdGlvbmFsOyB3aXRob3V0IGl0IHRyYW5zcG9ydCBjb21wcmVzc2lvbiBpcyBub3Qg c3VwcG9ydGVkLgotIAotQEAgLTQ3LDggKzUyLDkgQEAKLSBSZWxlYXNlIHRhcmJhbGxzIGFuZCBy ZWxlYXNlIGJyYW5jaGVzIGluIGdpdCBpbmNsdWRlIGEgcHJlLWJ1aWx0IGNvcHkgb2YgdGhlIGBg Y29uZmlndXJlYGAgc2NyaXB0IGFuZCBtYXkgYmUgYnVpbHQgdXNpbmc6Ci0gCi0gYGBgCi0tdGFy IHp4dmYgb3BlbnNzaC1YLllwWi50YXIuZ3oKLS1jZCBvcGVuc3NoCi0rdGFyIHp4dmYgaHBuc3No LVguWXBaLnRhci5negotK2NkIGhwbi1zc2gKLSthdXRvcmVjb25mIC1mIC1pCi0gLi9jb25maWd1 cmUgIyBbb3B0aW9uc10KLSBtYWtlICYmIG1ha2UgdGVzdHMKLSBgYGAKLUBAIC01NywxOSArNjMs MTkgQEAKLSAKLSAjIyMgQnVpbGRpbmcgZnJvbSBnaXQKLSAKLS1JZiBidWlsZGluZyBmcm9tIHRo ZSBnaXQgbWFzdGVyIGJyYW5jaCwgeW91J2xsIG5lZWQgW2F1dG9jb25mXShodHRwczovL3d3dy5n bnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLykgaW5zdGFsbGVkIHRvIGJ1aWxkIHRoZSBgYGNvbmZp Z3VyZWBgIHNjcmlwdC4gVGhlIGZvbGxvd2luZyBjb21tYW5kcyB3aWxsIGNoZWNrIG91dCBhbmQg YnVpbGQgcG9ydGFibGUgT3BlblNTSCBmcm9tIGdpdDoKLStJZiBidWlsZGluZyBmcm9tIHRoZSBn aXQgbWFzdGVyIGJyYW5jaCwgeW91J2xsIG5lZWQgW2F1dG9jb25mXShodHRwczovL3d3dy5nbnUu b3JnL3NvZnR3YXJlL2F1dG9jb25mLykgaW5zdGFsbGVkIHRvIGJ1aWxkIHRoZSBgYGNvbmZpZ3Vy ZWBgIHNjcmlwdC4gVGhlIGZvbGxvd2luZyBjb21tYW5kcyB3aWxsIGNoZWNrIG91dCBhbmQgYnVp bGQgSFBOLVNTSCBmcm9tIGdpdDoKLSAKLSBgYGAKLS1naXQgY2xvbmUgaHR0cHM6Ly9naXRodWIu Y29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZSAjIG9yIGh0dHBzOi8vYW5vbmdpdC5taW5kcm90 Lm9yZy9vcGVuc3NoLmdpdAotLWNkIG9wZW5zc2gtcG9ydGFibGUKLS1hdXRvcmVjb25mCi0rZ2l0 IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9yYXBpZXIxL2hwbi1zc2gKLStjZCBocG4tc3NoCi0r YXV0b3JlY29uZiAtZiAtaQotIC4vY29uZmlndXJlCi0gbWFrZSAmJiBtYWtlIHRlc3RzCi0gYGBg Ci0gCi0gIyMjIEJ1aWxkLXRpbWUgQ3VzdG9taXNhdGlvbgotIAotLVRoZXJlIGFyZSBtYW55IGJ1 aWxkLXRpbWUgY3VzdG9taXNhdGlvbiBvcHRpb25zIGF2YWlsYWJsZS4gQWxsIEF1dG9jb25mIGRl c3RpbmF0aW9uIHBhdGggZmxhZ3MgKGUuZy4gYGAtLXByZWZpeGBgKSBhcmUgc3VwcG9ydGVkIChh bmQgYXJlIHVzdWFsbHkgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBPcGVuU1NIKS4K LStUaGVyZSBhcmUgbWFueSBidWlsZC10aW1lIGN1c3RvbWlzYXRpb24gb3B0aW9ucyBhdmFpbGFi bGUuIEFsbCBBdXRvY29uZiBkZXN0aW5hdGlvbiBwYXRoIGZsYWdzIChlLmcuIGBgLS1wcmVmaXhg YCkgYXJlIHN1cHBvcnRlZCAoYW5kIGFyZSB1c3VhbGx5IHJlcXVpcmVkIGlmIHlvdSB3YW50IHRv IGluc3RhbGwgSFBOLVNTSCkuCi0gCi0gRm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBmbGFn cywgcnVuIGBgLi9jb25maWd1cmUgLS1oZWxwYGAgYnV0IGEgZmV3IG9mIHRoZSBtb3JlIGZyZXF1 ZW50bHktdXNlZCBvbmVzIGFyZSBkZXNjcmliZWQgYmVsb3cuIFNvbWUgb2YgdGhlc2UgZmxhZ3Mg d2lsbCByZXF1aXJlIGFkZGl0aW9uYWwgbGlicmFyaWVzIGFuZC9vciBoZWFkZXJzIGJlIGluc3Rh bGxlZC4KLSAKLUBAIC03OSwxMSArODUsMTMgQEAKLSBgYC0td2l0aC1saWJlZGl0YGAgfCBFbmFi bGUgW2xpYmVkaXRdKGh0dHBzOi8vd3d3LnRocnlzb2VlLmRrL2VkaXRsaW5lLykgc3VwcG9ydCBm b3Igc2Z0cC4KLSBgYC0td2l0aC1rZXJiZXJvczVgYCB8IEVuYWJsZSBLZXJiZXJvcy9HU1NBUEkg c3VwcG9ydC4gQm90aCBbSGVpbWRhbF0oaHR0cHM6Ly93d3cuaDVsLm9yZy8pIGFuZCBbTUlUXSho dHRwczovL3dlYi5taXQuZWR1L2tlcmJlcm9zLykgS2VyYmVyb3MgaW1wbGVtZW50YXRpb25zIGFy ZSBzdXBwb3J0ZWQuCi0gYGAtLXdpdGgtc2VsaW51eGBgIHwgRW5hYmxlIFtTRUxpbnV4XShodHRw czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZWN1cml0eS1FbmhhbmNlZF9MaW51eCkgc3VwcG9y dC4KLStgYC0td2l0aC1zZWN1cml0eS1rZXktYnVpbHRpbmBgIHwgSW5jbHVkZSBidWlsdC1pbiBz dXBwb3J0IGZvciBVMkYvRklETzIgc2VjdXJpdHkga2V5cy4gVGhpcyByZXF1aXJlcyBbbGliZmlk bzJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWJpY28vbGliZmlkbzIpIGJlIGluc3RhbGxlZC4KLSAK LSAjIyBEZXZlbG9wbWVudAotIAotIFBvcnRhYmxlIE9wZW5TU0ggZGV2ZWxvcG1lbnQgaXMgZGlz Y3Vzc2VkIG9uIHRoZSBbb3BlbnNzaC11bml4LWRldiBtYWlsaW5nIGxpc3RdKGh0dHBzOi8vbGlz dHMubWluZHJvdC5vcmcvbWFpbG1hbi9saXN0aW5mby9vcGVuc3NoLXVuaXgtZGV2KSAoW2FyY2hp dmUgbWlycm9yXShodHRwczovL21hcmMuaW5mby8/bD1vcGVuc3NoLXVuaXgtZGV2KSkuIEJ1Z3Mg YW5kIGZlYXR1cmUgcmVxdWVzdHMgYXJlIHRyYWNrZWQgb24gb3VyIFtCdWd6aWxsYV0oaHR0cHM6 Ly9idWd6aWxsYS5taW5kcm90Lm9yZy8pLgotK0hQTi1TU0ggZGV2ZWxvcG1lbnQgaXMgZGlzY3Vz c2VkIG9uIHRoZSBbaHBuc3NoLWNvbW11bml0eSBtYWlsaW5nIGxpc3RdKGh0dHBzOi8vbGlzdHMu cHNjLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2hwbnNzaC1jb21tdW5pdHkpIGFuZCBvbiB0aGUgW0dp dEh1YiBEaXNjdXNzaW9ucyBwYWdlXShodHRwczovL2dpdGh1Yi5jb20vcmFwaWVyMS9ocG4tc3No L2Rpc2N1c3Npb25zKS4KLSAKLSAjIyBSZXBvcnRpbmcgYnVncwotIAotLV9Ob24tc2VjdXJpdHlf IGJ1Z3MgbWF5IGJlIHJlcG9ydGVkIHRvIHRoZSBkZXZlbG9wZXJzIHZpYSBbQnVnemlsbGFdKGh0 dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvKSBvciB2aWEgdGhlIG1haWxpbmcgbGlzdCBhYm92 ZS4gU2VjdXJpdHkgYnVncyBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gW29wZW5zc2hAb3BlbnNzaC5j b21dKG1haWx0bzpvcGVuc3NoLm9wZW5zc2guY29tKS4KLStfTm9uLXNlY3VyaXR5XyBidWdzIG1h eSBiZSByZXBvcnRlZCB0byB0aGUgZGV2ZWxvcGVycyB2aWEgW0dpdEh1YiBJc3N1ZXNdKGh0dHBz Oi8vZ2l0aHViLmNvbS9yYXBpZXIxL2hwbi1zc2gvaXNzdWVzKSBvciB2aWEgdGhlIG1haWxpbmcg bGlzdCBhYm92ZS4gU2VjdXJpdHkgYnVncyBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gW2hwbnNzaEBw c2MuZWR1XShtYWlsdG86aHBuc3NoQHBzYy5lZHUpLgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jIG9wZW5zc2gtMTAuM3AxL3NhbmRib3gtc2Vj Y29tcC1maWx0ZXIuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2FuZGJveC1zZWNjb21wLWZp bHRlci5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI5NzEy NTQ4ICswMjAwCi1AQCAtMzIzLDYgKzMyMyw5IEBACi0gI2lmZGVmIF9fTlJfZ2V0ZXVpZDMyCi0g CVNDX0FMTE9XKF9fTlJfZ2V0ZXVpZDMyKSwKLSAjZW5kaWYKLSsjaWZkZWYgX19OUl9nZXRwZWVy bmFtZSAvKiBub3QgZGVmaW5lZCBvbiBhcmNocyB0aGF0IGdvIHZpYSBzb2NrZXRjYWxsKDIpICov Ci0rCVNDX0FMTE9XKF9fTlJfZ2V0cGVlcm5hbWUpLAotKyNlbmRpZgotICNpZmRlZiBfX05SX2dl dHBnaWQKLSAJU0NfQUxMT1coX19OUl9nZXRwZ2lkKSwKLSAjZW5kaWYKLUBAIC00NDQsNiArNDQ3 LDkgQEAKLSAjaWZkZWYgX19OUl9zaWdwcm9jbWFzawotIAlTQ19BTExPVyhfX05SX3NpZ3Byb2Nt YXNrKSwKLSAjZW5kaWYKLSsjaWZkZWYgX19OUl9zb2NrZXRjYWxsCi0rCVNDX0FMTE9XKF9fTlJf c29ja2V0Y2FsbCksCi0rI2VuZGlmCi0gI2lmZGVmIF9fTlJfdGltZQotIAlTQ19BTExPVyhfX05S X3RpbWUpLAotICNlbmRpZgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2NwLjEgb3Bl bnNzaC0xMC4zcDEvc2NwLjEKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NjcC4xCTIwMjYtMDct MDIgMDA6Mjc6MDYuMTAzMjc1MzA3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc2NwLjEJMjAy Ni0wNy0wMiAwOToxODoyMS4wMTE1MTczNzUgKzAyMDAKLUBAIC0xOCw3ICsxOCw3IEBACi0gLk5k IE9wZW5TU0ggc2VjdXJlIGZpbGUgY29weQotIC5TaCBTWU5PUFNJUwotIC5ObSBzY3AKLS0uT3Ag RmwgMzQ2QUJDT3BxUnJzVHYKLSsuT3AgRmwgMzQ2QUJDT3BxUnJzVHZaCi0gLk9wIEZsIGMgQXIg Y2lwaGVyCi0gLk9wIEZsIEQgQXIgc2Z0cF9zZXJ2ZXJfcGF0aAotIC5PcCBGbCBGIEFyIHNzaF9j b25maWcKLUBAIC0zMyw2ICszMyw4IEBACi0gLlNoIERFU0NSSVBUSU9OCi0gLk5tCi0gY29waWVz IGZpbGVzIGJldHdlZW4gaG9zdHMgb24gYSBuZXR3b3JrLgotK0l0IGlzIGJpbmFyeSBjb21wYXRp YmxlIHdpdGggT3BlblNTSCdzIHNjcCBpbmNsdWRpbmcKLSt0aGUgdXNlIG9mIHRoZSBzYW1lIGRp cmVjdGl2ZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBleGNlcHQgd2hlcmUgbm90ZWQuIAot IC5QcAotIC5ObQotIHVzZXMgdGhlIFNGVFAgcHJvdG9jb2wgb3ZlciBhbgotQEAgLTI1OCw2ICsy NjAsNyBAQAotIC5JdCBUdW5uZWwKLSAuSXQgVHVubmVsRGV2aWNlCi0gLkl0IFVwZGF0ZUhvc3RL ZXlzCi0rLkl0IFVzZU1QVENQCi0gLkl0IFVzZXIKLSAuSXQgVXNlcktub3duSG9zdHNGaWxlCi0g Lkl0IFZlcmlmeUhvc3RLZXlETlMKLUBAIC0yOTQsNiArMjk3LDEwIEBACi0gTm90ZSB0aGF0Ci0g Lk5tCi0gZm9sbG93cyBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZCBpbiB0aGUgdHJlZSB0cmF2 ZXJzYWwuCi0rLkl0IEZsIFoKLStSZXN1bWUgZmFpbGVkIG9yIGludGVycnVwdGVkIHRyYW5zZmVy LiBJZGVudGljYWwgZmlsZXMgd2lsbCBiZSBza2lwcGVkLiBSZW1vdGUgbXVzdCBoYXZlIHJlc3Vt ZSBvcHRpb24uCi0rLk5tCi0rb25seSBvcHRpb24uCi0gLkl0IEZsIFMgQXIgcHJvZ3JhbQotIE5h bWUgb2YKLSAuQXIgcHJvZ3JhbQotQEAgLTMwMSw2ICszMDgsMTQgQEAKLSBUaGUgcHJvZ3JhbSBt dXN0IHVuZGVyc3RhbmQKLSAuWHIgc3NoIDEKLSBvcHRpb25zLgotKy5JdCBGbCB6IEFyIHByb2dy YW0KLStQYXRoIHRvIGhwbnNjcCBvbiByZW1vdGUgc3lzdGVtLiBVc2VmdWwgaWYgcmVtb3RlIGhh cyBtdWx0aXBsZSBzY3AgaW5zdGFsbHMuCi0rRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSByZXN1bWUg b3B0aW9uIGJ1dCB0aGUgZGVmYXVsdCByZW1vdGUgc2NwIGRvZXMgbm90IGhhdmUgdGhlIHJlc3Vt ZSBvcHRpb24uCi0rVXNlIC16IHRvIHBvaW50IHRoZSB2ZXJzaW9uIHRoYXQgZG9lcyAtIGUuZy4g LXogL29wdC9ocG5zc2gvYmluL2hwbnNjcC4KLSsuTm0KLStvbmx5IG9wdGlvbi4gCi0rLkl0IEZs IHMKLStVc2UgdGhlIFNGVFAgcHJvdG9jb2wgZm9yIHRyYW5zZmVycyByYXRoZXIgdGhhbiB0aGUg b3JpZ2luYWwgc2NwIHByb3RvY29sLgotIC5JdCBGbCBUCi0gRGlzYWJsZSBzdHJpY3QgZmlsZW5h bWUgY2hlY2tpbmcuCi0gQnkgZGVmYXVsdCB3aGVuIGNvcHlpbmcgZmlsZXMgZnJvbSBhIHJlbW90 ZSBob3N0IHRvIGEgbG9jYWwgZGlyZWN0b3J5Ci1AQCAtMzI3LDEwICszNDIsMTMgQEAKLSAuSXQg Q20gbnJlcXVlc3RzIE5zID0gTnMgQXIgdmFsdWUKLSBDb250cm9scyBob3cgbWFueSBjb25jdXJy ZW50IFNGVFAgcmVhZCBvciB3cml0ZSByZXF1ZXN0cyBtYXkgYmUgaW4gcHJvZ3Jlc3MKLSBhdCBh bnkgcG9pbnQgaW4gdGltZSBkdXJpbmcgYSBkb3dubG9hZCBvciB1cGxvYWQuCi0tQnkgZGVmYXVs dCA2NCByZXF1ZXN0cyBtYXkgYmUgYWN0aXZlIGNvbmN1cnJlbnRseS4KLStUaGlzIHZhbHVlIG11 c3QgYmUgYmV0d2VlbiAxIGFuZCA4MTkyLgotK0J5IGRlZmF1bHQgMTAyNCByZXF1ZXN0cyBtYXkg YmUgYWN0aXZlIGNvbmN1cnJlbnRseS4KLSAuSXQgQ20gYnVmZmVyIE5zID0gTnMgQXIgdmFsdWUK LSBDb250cm9scyB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZSBmb3IgYSBzaW5nbGUgU0ZUUCByZWFk L3dyaXRlIG9wZXJhdGlvbiB1c2VkCi0gZHVyaW5nIGRvd25sb2FkIG9yIHVwbG9hZC4KLStUaGlz IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxQiBhbmQgMjU1S0IuIFlvdSBtYXkgdXNlCi0rdGhlIEsg dW5pdCBmb3IgdGhlIHNpemUuIEUuZy4gMzI3Njggb3IgMzJLLgotIEJ5IGRlZmF1bHQgYSAzMktC IGJ1ZmZlciBpcyB1c2VkLgotIC5FbAotIC5FbAotQEAgLTM2NCw2ICszODIsNyBAQAotIC5TaCBB VVRIT1JTCi0gLkFuIFRpbW8gUmlubmUgQXEgTXQgdHJpQGlraS5maQotIC5BbiBUYXR1IFlsb25l biBBcSBNdCB5bG9AY3MuaHV0LmZpCi0rLkFuIENocmlzIFJhcGllciBBcSBNdCByYXBpZXJAcHNj LmVkdQotIC5TaCBDQVZFQVRTCi0gVGhlIGxlZ2FjeSBTQ1AgcHJvdG9jb2wgKHNlbGVjdGVkIGJ5 IHRoZQotIC5GbCBPCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zY3AuYyBvcGVuc3No LTEwLjNwMS9zY3AuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2NwLmMJMjAyNi0wNy0wMiAw MDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zY3AuYwkyMDI2LTA3 LTAyIDEwOjE2OjE2LjMyNzI3OTU3NSArMDIwMAotQEAgLTE3LDYgKzE3LDcgQEAKLSAvKgotICAq IENvcHlyaWdodCAoYykgMTk5OSBUaGVvIGRlIFJhYWR0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSAgKiBDb3B5cmlnaHQgKGMpIDE5OTkgQWFyb24gQ2FtcGJlbGwuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqIENvcHlyaWdodCAoYykgMjAyMSBDaHJpcyBSYXBpZXIuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gICoKLSAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLUBAIC0xMTMsNiArMTE0 LDEyIEBACi0gI2luY2x1ZGUgIm1pc2MuaCIKLSAjaW5jbHVkZSAicHJvZ3Jlc3NtZXRlci5oIgot ICNpbmNsdWRlICJ1dGY4LmgiCi0rLyogbGlicmVzc2wgZG9lc24ndCBzdXBwb3J0IHRoZSBibGFr ZTJiNTEyIGRpZ2VzdCBzbwotKyAqIHdlIG5lZWQgdG8gcHJldmVudCBsaWJyZXNzbCBmcm9tIHVz aW5nIHRoZSByZXN1bWUgZmVhdHVyZQotKyAqIGNqciA3LzE4LzIwMjMgKi8KLSsjaWYgKGRlZmlu ZWQgV0lUSF9PUEVOU1NMKSAmJiAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKLSsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSAic2Z0cC5oIgotIAot ICNpbmNsdWRlICJzZnRwLWNvbW1vbi5oIgotQEAgLTE1NSw2ICsxNjIsMTAgQEAKLSAvKiBUaGlz IGlzIHRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUgZm9yIHRoZSBzZWN1cmUgY29ubmVjdGlvbi4gKCJz c2giIG9yIC1TKSAqLwotIGNoYXIgKnNzaF9wcm9ncmFtID0gX1BBVEhfU1NIX1BST0dSQU07Ci0g Ci0rLyogdGhpcyBpcyBwYXRoIHRvIHRoZSByZW1vdGUgc2NwIHByb2dyYW0gYWxsb3dpbmcgdGhl IHVzZXIgdG8gc3BlY2lmeQotKyAqIGEgbm9uLWRlZmF1bHQgc2NwICovCi0rY2hhciAqcmVtb3Rl X3BhdGg7Ci0rCi0gLyogVGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSBwaWQgb2Ygc3NoX3Byb2dy YW0gKi8KLSBwaWRfdCBkb19jbWRfcGlkID0gLTE7Ci0gcGlkX3QgZG9fY21kX3BpZDIgPSAtMTsK LUBAIC0xNjksNiArMTgwLDE3IEBACi0gaW50IHNmdHBfZ2xvYihzdHJ1Y3Qgc2Z0cF9jb25uICos IGNvbnN0IGNoYXIgKiwgaW50LAotICAgICBpbnQgKCopKGNvbnN0IGNoYXIgKiwgaW50KSwgZ2xv Yl90ICopOyAvKiBwcm90byBmb3Igc2Z0cC1nbG9iLmMgKi8KLSAKLSsvKiBGbGFnIHRvIGluZGlj YXRlIHRoYXQgdGhpcyBpcyBhIGZpbGUgcmVzdW1lICovCi0raW50IHJlc3VtZV9mbGFnID0gMDsg LyogMCBpcyBvZmYsIDEgaXMgb24gKi8KLSsKLSsvKiB3ZSB3YW50IHRoZSBob3N0IG5hbWUgZm9y IGRlYnVnZ2luZyBwdXJwb3NlcyAqLwotK2NoYXIgaG9zdG5hbWVbSE9TVF9OQU1FX01BWCArIDFd OwotKwotKy8qIGRlZmluZXMgZm9yIHRoZSByZXN1bWUgZnVuY3Rpb24uIE5lZWQgdGhlbSBldmVu IGlmIG5vdCBzdXBwb3J0ZWQgKi8KLSsjZGVmaW5lIEhBU0hfTEVOIDEyOCAgICAgICAgICAgICAg IC8qNDAgc2hhMSwgNjQgYmxha2UyczI1NiAxMjggYmxha2UyYjUxMiovCi0rI2RlZmluZSBCVUZf QU5EX0hBU0ggSEFTSF9MRU4gKyA2NCAvKiBsZW5ndGggb2YgdGhlIGhhc2ggYW5kIG90aGVyIGRh dGEgdG8gZ2V0IHNpemUgb2YgYnVmZmVyICovCi0rI2RlZmluZSBIQVNIX0JVRkxFTiA4MTkyCSAg IC8qIDgxOTIgc2VlbXMgdG8gYmUgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBmcmVhZHMKLSsJCQkJ ICAgICogYW5kIHRoZSBkaWdlc3QgZnVuYyovCi0gc3RhdGljIHZvaWQKLSBraWxsY2hpbGQoaW50 IHNpZ25vKQotIHsKLUBAIC0yMTYsNiArMjM4LDkgQEAKLSAJaW50IHN0YXR1czsKLSAJcGlkX3Qg cGlkOwotIAotKyNpZmRlZiBERUJVRwotKwlmcHJpbnRmKHN0ZGVyciwgIkluIGRvX2xvY2FsX2Nt ZFxuIik7Ci0rI2VuZGlmCi0gCWlmIChhLT5udW0gPT0gMCkKLSAJCWZhdGFsKCJkb19sb2NhbF9j bWQ6IG5vIGFyZ3VtZW50cyIpOwotIAotQEAgLTQ0MSw2ICs0NjYsOCBAQAotIHZvaWQgdG9sb2Nh bChpbnQsIGNoYXIgKltdLCBlbnVtIHNjcF9tb2RlX2UsIGNoYXIgKnNmdHBfZGlyZWN0KTsKLSB2 b2lkIHRvcmVtb3RlKGludCwgY2hhciAqW10sIGVudW0gc2NwX21vZGVfZSwgY2hhciAqc2Z0cF9k aXJlY3QpOwotIHZvaWQgdXNhZ2Uodm9pZCk7Ci0rdm9pZCBjYWxjdWxhdGVfaGFzaChjaGFyICos IGNoYXIgKiwgb2ZmX3QpOyAvKmdldCB0aGUgaGFzaCBvZiBmaWxlIHRvIGxlbmd0aCovCi0rdm9p ZCByYW5kX3N0cihjaGFyICosIHNpemVfdCk7IC8qZ2VuIHJhbmRvbWUgY2hhciBzdHJpbmcgKi8K LSAKLSB2b2lkIHNvdXJjZV9zZnRwKGludCwgY2hhciAqLCBjaGFyICosIHN0cnVjdCBzZnRwX2Nv bm4gKik7Ci0gdm9pZCBzaW5rX3NmdHAoaW50LCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0 IHNmdHBfY29ubiAqKTsKLUBAIC00NTksMTEgKzQ4NiwxOCBAQAotIAljaGFyICpzZnRwX2RpcmVj dCA9IE5VTEw7Ci0gCWxvbmcgbG9uZyBsbHY7Ci0gCi0rCS8qIHdlIHVzZSB0aGlzIHRvIHByZXBl bmQgdGhlIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCi0rCSAqIHNvIHdlIGtub3cgd2hpY2ggc2lkZSBp cyBzYXlpbmcgd2hhdCAqLwotKwlnZXRob3N0bmFtZShob3N0bmFtZSwgSE9TVF9OQU1FX01BWCAr IDEpOwotKwotIAkvKiBFbnN1cmUgdGhhdCBmZHMgMCwgMSBhbmQgMiBhcmUgb3BlbiBvciBkaXJl Y3RlZCB0byAvZGV2L251bGwgKi8KLSAJc2FuaXRpc2Vfc3RkZmQoKTsKLSAKLSAJbXNldGxvY2Fs ZSgpOwotIAotKwkvKiBmb3IgdXNlIHdpdGggcmFuZCBmdW5jdGlvbiB3aGVuIHJlc3VtZSBvcHRp b24gaXMgdXNlZCovCi0rCXNyYW5kKHRpbWUoTlVMTCkpOwotKwotIAkvKiBDb3B5IGFyZ3YsIGJl Y2F1c2Ugd2UgbW9kaWZ5IGl0ICovCi0gCWFyZ3YwID0gYXJndlswXTsKLSAJbmV3YXJndiA9IHhj YWxsb2MoTUFYSU1VTShhcmdjICsgMSwgMSksIHNpemVvZigqbmV3YXJndikpOwotQEAgLTQ4OCw3 ICs1MjIsNyBAQAotIAotIAlmZmxhZyA9IFRmbGFnID0gdGZsYWcgPSAwOwotIAl3aGlsZSAoKGNo ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsCi0tCSAgICAiMTIzNDZBQkNUZGZPcHFScnN0dkQ6RjpKOk06 UDpTOmM6aTpsOm86WDoiKSkgIT0gLTEpIHsKLSsJICAgICIxMjM0NkFCQ1RkZk9wcVJyc3R2WkQ6 RjpKOk06UDpTOmM6aTpsOm86WDoiKSkgIT0gLTEpIHsKLSAJCXN3aXRjaCAoY2gpIHsKLSAJCS8q IFVzZXItdmlzaWJsZSBmbGFncy4gKi8KLSAJCWNhc2UgJzEnOgotQEAgLTU2OSwyNCArNjAzLDM2 IEBACi0gCQkJYWRkYXJncygmcmVtb3RlX3JlbW90ZV9hcmdzLCAiLXEiKTsKLSAJCQlzaG93cHJv Z3Jlc3MgPSAwOwotIAkJCWJyZWFrOwotKyNpZiAoZGVmaW5lZCBXSVRIX09QRU5TU0wpICYmICFk ZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQotKwkJY2FzZSAnWic6Ci0rCQkJLyogY3Vy cmVudGx5IHJlc3VtZSBvbmx5IHdvcmtzIGluIFNDUCBtb2RlICovCi0rCQkJcmVzdW1lX2ZsYWcg PSAxOwotKwkJCW1vZGUgPSBNT0RFX1NDUDsKLSsJCQlicmVhazsKLSsjZW5kaWYKLSAJCWNhc2Ug J1gnOgotIAkJCS8qIFBsZWFzZSBrZWVwIGluIHN5bmMgd2l0aCBzZnRwLmMgLVggKi8KLSAJCQlp ZiAoc3RybmNtcChvcHRhcmcsICJidWZmZXI9IiwgNykgPT0gMCkgewotIAkJCQlyID0gc2Nhbl9z Y2FsZWQob3B0YXJnICsgNywgJmxsdik7Ci0tCQkJCWlmIChyID09IDAgJiYgKGxsdiA8PSAwIHx8 IGxsdiA+IDI1NiAqIDEwMjQpKSB7Ci0rCQkJCS8qIGRvbid0IGFzayBmb3IgYSBidWZmZXIgbGFy Z2VyIHRoYW4gdGhlIG1heGltdW0KLSsJCQkJICogc2l6ZSB0aGF0IFNGVFAgY2FuIGhhbmRsZSAq LwotKwkJCQlpZiAociA9PSAwICYmIChsbHYgPD0gMCB8fCBsbHYgPiAoU0ZUUF9NQVhfTVNHX0xF TkdUSCAtIDEwMjQpKSkgewotIAkJCQkJciA9IC0xOwotIAkJCQkJZXJybm8gPSBFSU5WQUw7Ci0g CQkJCX0KLSAJCQkJaWYgKHIgPT0gLTEpIHsKLS0JCQkJCWZhdGFsKCJJbnZhbGlkIGJ1ZmZlciBz aXplIFwiJXNcIjogJXMiLAotLQkJCQkJICAgICBvcHRhcmcgKyA3LCBzdHJlcnJvcihlcnJubykp OwotKwkJCQkJZmF0YWwoIkludmFsaWQgYnVmZmVyIHNpemUuIE11c3QgYmUgYmV0d2VlbiAxQiBh bmQgMjU1S0IuIgotKwkJCQkJICAgICJcIiVzXCI6ICVzIiwgb3B0YXJnICsgNywgc3RyZXJyb3Io ZXJybm8pKTsKLSAJCQkJfQotIAkJCQlzZnRwX2NvcHlfYnVmbGVuID0gKHNpemVfdClsbHY7Ci0g CQkJfSBlbHNlIGlmIChzdHJuY21wKG9wdGFyZywgIm5yZXF1ZXN0cz0iLCAxMCkgPT0gMCkgewot LQkJCQlsbHYgPSBzdHJ0b251bShvcHRhcmcgKyAxMCwgMSwgMjU2ICogMTAyNCwKLSsJCQkJLyog bW9yZSB0aGFuIDEwayB0byAxNWsgcmVxdWVzdHMgc3RhcnRzIHN0YWxsaW5nIHRoZSBjb25uZWN0 aW9uCi0rCQkJCSAqIDgxOTIgKiBkZWZhdWx0IGJ1ZmZlciBzaXplIGlzIDI1Nk1CIG9mIG91dHN0 YW5kaW5nIGRhdGEuCi0rCQkJCSAqIGlmIHVzZXJzIG5lZWQgbW9yZSB0aGVuIHRoZXkgbmVlZCB0 byB1cCB0aGUgYnVmZmVyIHNpemUgKi8KLSsJCQkJbGx2ID0gc3RydG9udW0ob3B0YXJnICsgMTAs IDEsIDggKiAxMDI0LAotIAkJCQkgICAgJmVycnN0cik7Ci0gCQkJCWlmIChlcnJzdHIgIT0gTlVM TCkgewotLQkJCQkJZmF0YWwoIkludmFsaWQgbnVtYmVyIG9mIHJlcXVlc3RzICIKLSsJCQkJCWZh dGFsKCJJbnZhbGlkIG51bWJlciBvZiByZXF1ZXN0cy4gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDgx OTIuICIKLSAJCQkJCSAgICAiXCIlc1wiOiAlcyIsIG9wdGFyZyArIDEwLCBlcnJzdHIpOwotIAkJ CQl9Ci0gCQkJCXNmdHBfbnJlcXVlc3RzID0gKHNpemVfdClsbHY7Ci1AQCAtNjc0LDExICs3MjAs MTkgQEAKLSAJcmVtaW4gPSByZW1vdXQgPSAtMTsKLSAJZG9fY21kX3BpZCA9IC0xOwotIAkvKiBD b21tYW5kIHRvIGJlIGV4ZWN1dGVkIG9uIHJlbW90ZSBzeXN0ZW0gdXNpbmcgInNzaCIuICovCi0t CSh2b2lkKSBzbnByaW50ZihjbWQsIHNpemVvZiBjbWQsICJzY3AlcyVzJXMlcyIsCi0rCS8qIElu IHRoZSBldmVudCBvZiBhbiBocG4gdG8gaHBuIGNvbm5lY3Rpb24gdGhlIHNjcAotKwkgKiBjb21t YW5kIGlzIHJld3JpdHRlbiB0byBocG5zY3AuIFRoaXMgaGFwcGVucyBpbgotKwkgKiBjbGllbnRs b29wLmMgLWNqciAxMi8xMi8yMDIyICovCi0rCi0rCSh2b2lkKSBzbnByaW50ZihjbWQsIHNpemVv ZiBjbWQsICIlcyVzJXMlcyVzJXMiLAotKwkgICAgcmVtb3RlX3BhdGggPyByZW1vdGVfcGF0aCA6 ICJzY3AiLAotIAkgICAgdmVyYm9zZV9tb2RlID8gIiAtdiIgOiAiIiwKLSAJICAgIGlhbXJlY3Vy c2l2ZSA/ICIgLXIiIDogIiIsIHBmbGFnID8gIiAtcCIgOiAiIiwKLS0JICAgIHRhcmdldHNob3Vs ZGJlZGlyZWN0b3J5ID8gIiAtZCIgOiAiIik7Ci0tCi0rCSAgICB0YXJnZXRzaG91bGRiZWRpcmVj dG9yeSA/ICIgLWQiIDogIiIsCi0rCSAgICByZXN1bWVfZmxhZyA/ICIgLVoiIDogIiIpOwotKyNp ZmRlZiBERUJVRwotKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBTZW5kaW5nIGNtZCAlc1xuIiwgaG9z dG5hbWUsIGNtZCk7Ci0rI2VuZGlmCi0gCSh2b2lkKSBzc2hfc2lnbmFsKFNJR1BJUEUsIGxvc3Rj b25uKTsKLSAKLSAJaWYgKGNvbG9uKGFyZ3ZbYXJnYyAtIDFdKSkJLyogRGVzdCBpcyByZW1vdGUg aG9zdC4gKi8KLUBAIC02ODgsNiArNzQyLDcgQEAKLSAJCQl2ZXJpZnlkaXIoYXJndlthcmdjIC0g MV0pOwotIAkJdG9sb2NhbChhcmdjLCBhcmd2LCBtb2RlLCBzZnRwX2RpcmVjdCk7CS8qIERlc3Qg aXMgbG9jYWwgaG9zdC4gKi8KLSAJfQotKwotIAkvKgotIAkgKiBGaW5hbGx5IGNoZWNrIHRoZSBl eGl0IHN0YXR1cyBvZiB0aGUgc3NoIHByb2Nlc3MsIGlmIG9uZSB3YXMgZm9ya2VkCi0gCSAqIGFu ZCBubyBlcnJvciBoYXMgb2NjdXJyZWQgeWV0Ci1AQCAtMTMwOSw2ICsxMzY0LDc0IEBACi0gCXNm dHBfZnJlZShjb25uKTsKLSB9Ci0gCi0rLyogY2FsY3VsYXRlIHRoZSBoYXNoIG9mIGEgZmlsZSB1 cCB0byBsZW5ndGggYnl0ZXMKLSsgKiB0aGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHJlbW90 ZSBhbmQgbG9jYWwgZmlsZQotKyAqIGZyYWdtZW50cyBtYXRjaC4gVGhlcmUgbWF5IGJlIGEgbW9y ZSBlZmZpY2llbnQgcHJvY2VzcyBmb3IgdGhlIGhhc2hpbmcKLSsgKiBOb3RlOiBMaWJyZVNTTCBk b2Vzbid0IHN1cHBvcnQgYmxha2UyYjUxMiBzbyB3ZSBjYW4ndCBvZmZlciB0aGVtCi0rICogdGhl IHJlc3VtZSBmZWF0dXJlIGNqciA3LzE4LzIwMjMgKi8KLSsjaWYgKGRlZmluZWQgV0lUSF9PUEVO U1NMKSAmJiAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKLSt2b2lkIGNhbGN1bGF0 ZV9oYXNoKGNoYXIgKmZpbGVuYW1lLCBjaGFyICpvdXRwdXQsIG9mZl90IGxlbmd0aCkKLSt7Ci0r CWludCBuLCBtZF9sZW47Ci0rCUVWUF9NRF9DVFggKmM7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0r CWNoYXIgYnVmW0hBU0hfQlVGTEVOXTsKLSsJc3NpemVfdCBieXRlczsKLSsJdW5zaWduZWQgY2hh ciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsJY2hhciB0bXBbM107Ci0rCUZJTEUgKmZpbGVfcHRy OwotKwkqb3V0cHV0ID0gJ1wwJzsKLSsKLSsJLyogb3BlbiBmaWxlIGZvciBjYWxjdWxhdGluZyBo YXNoICovCi0rCWZpbGVfcHRyID0gZm9wZW4oZmlsZW5hbWUsICJyIik7Ci0rCWlmIChmaWxlX3B0 cj09TlVMTCkKLSsJewotKwkJaWYgKHZlcmJvc2VfbW9kZSkgewotKwkJCWZwcmludGYoc3RkZXJy LCAiJXM6IGVycm9yIG9wZW5pbmcgZmlsZSAlc1xuIiwgaG9zdG5hbWUsIGZpbGVuYW1lKTsKLSsJ CQkvKiBmaWxlIHRoZSBleHBlY3RlZCBvdXRwdXQgd2l0aCBzcGFjZXMgKi8KLSsJCQlzbnByaW50 ZihvdXRwdXQsIEhBU0hfTEVOLCAiJXMiLCAgIiAiKTsKLSsJCX0KLSsJCXJldHVybjsKLSsJfQot KwotKwltZCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKCJibGFrZTJiNTEyIik7Ci0rCWMgPSBFVlBf TURfQ1RYX25ldygpOwotKwlFVlBfRGlnZXN0SW5pdF9leChjLCBtZCwgTlVMTCk7Ci0rCi0rCXdo aWxlIChsZW5ndGggPiAwKSB7Ci0rCQlpZiAobGVuZ3RoID4gSEFTSF9CVUZMRU4pCi0rCQkJLyog ZnJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHJlYWQuCi0rCQkJICogaW4gdGhp cyBjYXNlIDEuIE11bHRpcGx5IGJ5IHRoZSBsZW5ndGggdG8gZ2V0IHRoZSBieXRlcyAqLwotKwkJ CWJ5dGVzPWZyZWFkKGJ1ZiwgSEFTSF9CVUZMRU4sIDEsIGZpbGVfcHRyKSAqIEhBU0hfQlVGTEVO OwotKwkJZWxzZQotKwkJCWJ5dGVzPWZyZWFkKGJ1ZiwgbGVuZ3RoLCAxLCBmaWxlX3B0cikgKiBs ZW5ndGg7Ci0rCQlFVlBfRGlnZXN0VXBkYXRlKGMsIGJ1ZiwgYnl0ZXMpOwotKwkJbGVuZ3RoIC09 IEhBU0hfQlVGTEVOOwotKwl9Ci0rCUVWUF9EaWdlc3RGaW5hbChjLCBvdXQsICZtZF9sZW4pOwot KwlFVlBfTURfQ1RYX2ZyZWUoYyk7Ci0rCS8qIGNvbnZlcnQgdGhlIGhhc2ggaW50byBhIHN0cmlu ZyAqLwotKwlmb3Iobj0wOyBuIDwgbWRfbGVuOyBuKyspIHsKLSsJCXNucHJpbnRmKHRtcCwgMywg IiUwMngiLCBvdXRbbl0pOwotKwkJc3RybmNhdChvdXRwdXQsIHRtcCwgMyk7Ci0rCX0KLSsjaWZk ZWYgREVCVUcKLSsJZnByaW50ZihzdGRlcnIsICIlczogSEFTSCBJUyAnJXMnIG9mIGxlbmd0aCAl bGRcbiIsIGhvc3RuYW1lLCBvdXRwdXQsIHN0cmxlbihvdXRwdXQpKTsKLSsjZW5kaWYKLSsJZmNs b3NlKGZpbGVfcHRyKTsKLSt9Ci0rI2Vsc2UKLSt2b2lkIGNhbGN1bGF0ZV9oYXNoKGNoYXIgKmZp bGVuYW1lLCBjaGFyICpvdXRwdXQsIG9mZl90IGxlbmd0aCkKLSt7Ci0rICAvKiBlbXB0eSBmdW5j dGlvbiBmb3IgYnVpbGRzIHdpdGhvdXQgb3BlbnNzbCBvciBhcmUgdXNpbmcgbGlicmVzc2wgKi8K LSt9Ci0rI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwotKwotKyNkZWZpbmUgVFlQRV9PVkVSRkxP Vyh0eXBlLCB2YWwpIFwKLSsJKChzaXplb2YodHlwZSkgPT0gNCAmJiAodmFsKSA+IElOVDMyX01B WCkgfHwgXAotKwkgKHNpemVvZih0eXBlKSA9PSA4ICYmICh2YWwpID4gSU5UNjRfTUFYKSB8fCBc Ci0rCSAoc2l6ZW9mKHR5cGUpICE9IDQgJiYgc2l6ZW9mKHR5cGUpICE9IDgpKQotKwotIC8qIFBy ZXBhcmUgcmVtb3RlIHBhdGgsIGhhbmRsaW5nIH4gYnkgYXNzdW1pbmcgY3dkIGlzIHRoZSBob21l ZGlyICovCi0gc3RhdGljIGNoYXIgKgotIHByZXBhcmVfcmVtb3RlX3BhdGgoc3RydWN0IHNmdHBf Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcGF0aCkKLUBAIC0xMzk2LDE0ICsxNTE5LDIzIEBACi0g CXN0cnVjdCBzdGF0IHN0YjsKLSAJc3RhdGljIEJVRiBidWZmZXI7Ci0gCUJVRiAqYnA7Ci0tCW9m Zl90IGksIHN0YXRieXRlczsKLSsJb2ZmX3QgaSwgc3RhdGJ5dGVzLCB4ZmVyX3NpemU7Ci0gCXNp emVfdCBhbXQsIG5yOwotIAlpbnQgZmQgPSAtMSwgaGFkZXJyLCBpbmR4OwotLQljaGFyICpsYXN0 LCAqbmFtZSwgYnVmW1BBVEhfTUFYICsgMTI4XSwgZW5jbmFtZVtQQVRIX01BWF07Ci0rCWNoYXIg KmNwLCAqbGFzdCwgKm5hbWUsIGJ1ZltQQVRIX01BWCArIEJVRl9BTkRfSEFTSF0sIGVuY25hbWVb UEFUSF9NQVhdOwotIAlpbnQgbGVuOwotKwljaGFyIGhhc2hzdW1bSEFTSF9MRU4rMV0sIHRlc3Rf aGFzaHN1bVtIQVNIX0xFTisxXTsKLSsJY2hhciBpbmJ1ZltQQVRIX01BWCArIEJVRl9BTkRfSEFT SF07Ci0rCXNpemVfdCBpbnNpemU7Ci0rCXVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7Ci0rCWNoYXIg Km1hdGNoOyAvKiB1c2VkIHRvIGNvbW11bmljYXRlIGZyYWdtZW50IG1hdGNoICovCi0rCW1hdGNo ID0gIlwwIjsgLypkZWZhdWx0IGlzIHRvIGZhaWwgdGhlIG1hdGNoLiBOVUxMIGFuZCBGIGJvdGgg aW5kaWNhdGUgZmFpbCovCi0gCi0gCWZvciAoaW5keCA9IDA7IGluZHggPCBhcmdjOyArK2luZHgp IHsKLSAJCW5hbWUgPSBhcmd2W2luZHhdOwotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRl cnIsICIlcyBpbmRleCBpcyAlZCwgbmFtZSBpcyAlc1xuIiwgaG9zdG5hbWUsIGluZHgsIG5hbWUp OwotKyNlbmRpZgotIAkJc3RhdGJ5dGVzID0gMDsKLSAJCWxlbiA9IHN0cmxlbihuYW1lKTsKLSAJ CXdoaWxlIChsZW4gPiAxICYmIG5hbWVbbGVuLTFdID09ICcvJykKLUBAIC0xNDI1LDYgKzE1NTcs MTQgQEAKLSAJCXVuc2V0X25vbmJsb2NrKGZkKTsKLSAJCXN3aXRjaCAoc3RiLnN0X21vZGUgJiBT X0lGTVQpIHsKLSAJCWNhc2UgU19JRlJFRzoKLSsJCQkvKiBvbmx5IGNhbGN1bGF0ZSBoYXNoIGlm IHdlIGFyZSBpbiByZXN1bWUgbW9kZSBhbmQgYSBmaWxlKi8KLSsJCQlpZiAocmVzdW1lX2ZsYWcp IHsKLSsJCQkJY2FsY3VsYXRlX2hhc2gobmFtZSwgaGFzaHN1bSwgc3RiLnN0X3NpemUpOwotKyNp ZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBOYW1lIGlzICclcycgYW5kIGhh c2ggJyVzJ1xuIiwgaG9zdG5hbWUsIG5hbWUsIGhhc2hzdW0pOwotKwkJCQlmcHJpbnRmIChzdGRl cnIsIiVzOiBzaXplIG9mICVzIGlzICVsZFxuIiwgaG9zdG5hbWUsIG5hbWUsIHN0Yi5zdF9zaXpl KTsKLSsjZW5kaWYKLSsJCQl9Ci0gCQkJYnJlYWs7Ci0gCQljYXNlIFNfSUZESVI6Ci0gCQkJaWYg KGlhbXJlY3Vyc2l2ZSkgewotQEAgLTE0NDYsMTQgKzE1ODYsMTMzIEBACi0gCQkJCWdvdG8gbmV4 dDsKLSAJCX0KLSAjZGVmaW5lCUZJTEVNT0RFTUFTSwkoU19JU1VJRHxTX0lTR0lEfFNfSVJXWFV8 U19JUldYR3xTX0lSV1hPKQotLQkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiQyUwNG8gJWxs ZCAlc1xuIiwKLS0JCSAgICAodV9pbnQpIChzdGIuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCi0t CQkgICAgKGxvbmcgbG9uZylzdGIuc3Rfc2l6ZSwgbGFzdCk7Ci0tCQlpZiAodmVyYm9zZV9tb2Rl KQotLQkJCWZtcHJpbnRmKHN0ZGVyciwgIlNlbmRpbmcgZmlsZSBtb2RlczogJXMiLCBidWYpOwot KwkJLyogQWRkIGEgaGFzaCBvZiB0aGUgZmlsZSBhbG9uZyB3aXRoIHRoZSBmaWxlbW9kZSBpZiBp biByZXN1bWUgKi8KLSsJCWlmIChyZXN1bWVfZmxhZykKLSsJCQlzbnByaW50ZihidWYsIHNpemVv ZiBidWYsICJDJTA0byAlbGxkICVzICVzXG4iLAotKwkJCQkgKHVfaW50KSAoc3RiLnN0X21vZGUg JiBGSUxFTU9ERU1BU0spLAotKwkJCQkgKGxvbmcgbG9uZylzdGIuc3Rfc2l6ZSwgaGFzaHN1bSwg bGFzdCk7Ci0rCQllbHNlCi0rCQkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiQyUwNG8gJWxs ZCAlc1xuIiwKLSsJCQkJICh1X2ludCkgKHN0Yi5zdF9tb2RlICYgRklMRU1PREVNQVNLKSwKLSsJ CQkJIChsb25nIGxvbmcpc3RiLnN0X3NpemUsIGxhc3QpOwotKwotKyNpZmRlZiBERUJVRwotKwkJ ZnByaW50ZihzdGRlcnIsICIlczogU2VuZGluZyBmaWxlIG1vZGVzOiAlcyIsIGhvc3RuYW1lLCBi dWYpOwotKyNlbmRpZgotIAkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBidWYsIHN0 cmxlbihidWYpKTsKLS0JCWlmIChyZXNwb25zZSgpIDwgMCkKLSsKLSsjaWZkZWYgREVCVUcKLSsJ CWZwcmludGYoc3RkZXJyLCAiJXM6IGluYnVmIGxlbmd0aCAlbGQgYnVmIGxlbmd0aCAlbGRcbiIs IGhvc3RuYW1lLCBzdHJsZW4oaW5idWYpLCBzdHJsZW4oYnVmKSk7Ci0rI2VuZGlmCi0rCQlpZiAo cmVzdW1lX2ZsYWcpIHsgLyogZ2V0IHRoZSBoYXNoIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSAq LwotKwkJCSh2b2lkKSBhdG9taWNpbyhyZWFkLCByZW1pbiwgaW5idWYsIEJVRl9BTkRfSEFTSCAt IDEpOwotKyNpZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB3ZSBnb3QgJyVz JyBpbiBpbmJ1ZiBsZW5ndGggJWxkIGJ1ZiB3YXMgJWxkXG4iLAotKwkJCQkJaG9zdG5hbWUsIGlu YnVmLCBzdHJsZW4oaW5idWYpLCBzdHJsZW4oYnVmKSk7Ci0rI2VuZGlmCi0rCQl9Ci0rCQlpZiAo cmVzcG9uc2UoKSA8IDApIHsKLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiByZXNwb25zZSBpcyBsZXNzIHRoYW4gMFxuIiwgaG9zdG5hbWUpOwotKyNlbmRpZgotIAkJCWdv dG8gbmV4dDsKLSsJCX0KLSsJCXhmZXJfc2l6ZSA9IHN0Yi5zdF9zaXplOwotKwotKwkJLyogd2Ug b25seSBkbyB0aGUgZm9sbG93aW5nIGluIHJlc3VtZSBtb2RlIGJlY2F1c2Ugd2UgaGF2ZSBhCi0r CQkgKiBuZXcgYnVmIGZyb20gdGhlIHJlbW90ZSB0byBwYXJzZSAqLwotKwkJaWYgKHJlc3VtZV9m bGFnKSB7Ci0rCQkJY3AgPSBpbmJ1ZjsKLSsJCQlpZiAoKmNwID09ICdSJykgeyAvKiByZXN1bWUg ZmlsZSB0cmFuc2ZlciovCi0rCQkJCWNoYXIgKmluX2hhc2hzdW07IC8qIHdoZXJlIHRvIGhvbGQg dGhlIGluY29taW5nIGhhc2ggKi8KLSsJCQkJaW5faGFzaHN1bSA9IGNhbGxvYyhIQVNIX0xFTisx LCBzaXplb2YoY2hhcikpOwotKwkJCQlmb3IgKCsrY3A7IGNwIDwgaW5idWYgKyA1OyBjcCsrKSB7 Ci0rCQkJCQkvKiBza2lwIG92ZXIgdGhlIG1vZGUgKi8KLSsJCQkJfQotKwkJCQlpZiAoKmNwKysg IT0gJyAnKSB7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBtb2RlIG5vdCBkZWxpbmVhdGVk IVxuIiwgaG9zdG5hbWUpOwotKwkJCQl9Ci0rCi0rCQkJCWlmICghaXNkaWdpdCgodW5zaWduZWQg Y2hhcikqY3ApKQotKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogc2l6ZSBub3QgcHJlc2VudFxu IiwgaG9zdG5hbWUpOwotKwkJCQl1bGwgPSBzdHJ0b3VsbChjcCwgJmNwLCAxMCk7Ci0rCQkJCWlm ICghY3AgfHwgKmNwKysgIT0gJyAnKQotKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogc2l6ZSBu b3QgZGVsaW1pdGVkXG4iLCBob3N0bmFtZSk7Ci0rCQkJCWlmIChUWVBFX09WRVJGTE9XKG9mZl90 LCB1bGwpKQotKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogc2l6ZSBvdXQgb2YgcmFuZ2VcbiIs IGhvc3RuYW1lKTsKLSsJCQkJaW5zaXplID0gKG9mZl90KXVsbDsKLSsKLSsjaWZkZWYgREVCVUcK LSsJCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IHJlY2VpdmVkIHNpemUgb2YgJWxkXG4iLCBob3N0 bmFtZSwgaW5zaXplKTsKLSsjZW5kaWYKLSsKLSsJCQkJLyogY29weSB0aGUgY3AgcG9pbnRlciBi eXRlIGJ5IGJ5dGUgKi8KLSsJCQkJaW50IGk7Ci0rCQkJCWZvciAoaSA9IDA7IGkgPCBIQVNIX0xF TjsgaSsrKSB7Ci0rCQkJCQlzdHJuY2F0KGluX2hhc2hzdW0sIGNwKyssIDEpOwotKwkJCQl9Ci0r I2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBpbl9oYXNoc3VtICclcydc biIsIGhvc3RuYW1lLCBpbl9oYXNoc3VtKTsKLSsjZW5kaWYKLSsKLSsJCQkJLypnZXQgdGhlIGhh c2ggb2YgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSBieXRlIGxlbmd0aCB3ZSBqdXN0IGdvdCovCi0r CQkJCWNhbGN1bGF0ZV9oYXNoKG5hbWUsIHRlc3RfaGFzaHN1bSwgaW5zaXplKTsKLSsjaWZkZWYg REVCVUcKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlczogY2FsY3VsYXRlZCBoYXNoc3VtIG9mIGxv Y2FsICVzIHRvICVsZCBpcyAlc1xuIiwKLSsJCQkJCWhvc3RuYW1lLCBsYXN0LCBpbnNpemUsIHRl c3RfaGFzaHN1bSk7Ci0rI2VuZGlmCi0rCQkJCS8qIGNvbXBhcmUgdGhlIGluY29taW5nIGhhc2gg dG8gdGhlIGhhc2ggb2YgdGhlIGxvY2FsIGZpbGUqLwotKwkJCQlpZiAoc3RyY21wKGluX2hhc2hz dW0sIHRlc3RfaGFzaHN1bSkgPT0gMCkgewotKwkJCQkJLyogdGhlIGZyYWdtZW50cyBtYXRjaCBz byB3ZSBzaG91bGQgc2VlayB0byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlCi0rCQkJCQkg KiBsb2NhbCBmaWxlIGFuZCBzZXQgdGhlIHJlbW90ZSBmaWxlIHRvIGFwcGVuZCAqLwotKyNpZmRl ZiBERUJVRwotKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogRmlsZSBmcmFnbWVudHMgbWF0Y2hc biIsIGhvc3RuYW1lKTsKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNlZWtpbmcgdG8gJWxk XG4iLCBob3N0bmFtZSwgaW5zaXplKTsKLSsjZW5kaWYKLSsJCQkJCXhmZXJfc2l6ZSA9IHN0Yi5z dF9zaXplIC0gaW5zaXplOwotKyNpZmRlZiBERUJVRwotKwkJCQkJZnByaW50ZihzdGRlcnIsICIl czogeGZlcl9zaXplOiAlbGQsIHN0Yi5zdF9zaXplOiAlbGQgaW5zaXplOiAlbGRcbiIsCi0rCQkJ CQkJaG9zdG5hbWUsIHhmZXJfc2l6ZSwgc3RiLnN0X3NpemUsIGluc2l6ZSk7Ci0rI2VuZGlmCi0r CQkJCQlpZiAobHNlZWsoZmQsIGluc2l6ZSwgU0VFS19DVVIpICE9IChvZmZfdClpbnNpemUpIHsK LSsjaWZkZWYgREVCVUcKLSsJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBsc2VlayBkaWQgbm90 IHJldHVybiAlbGRcbiIsIGhvc3RuYW1lLCBpbnNpemUpIDsKLSsjZW5kaWYKLSsJCQkJCQlnb3Rv IG5leHQ7Ci0rCQkJCQl9Ci0rCQkJCQltYXRjaCA9ICJNIjsKLSsJCQkJfSBlbHNlIHsKLSsJCQkJ CS8qIHRoZSBmcmFnbWVudHMgZG9uJ3QgbWF0Y2ggc28gd2Ugc2hvdWxkIHN0YXJ0IG92ZXIgZnJv bSB0aGUgYmVnaW5pbmcgKi8KLSsjaWZkZWYgREVCVUcKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAi JXM6IEZpbGUgZnJhZ21lbnRzIGRvIG5vdCBtYXRjaCAnJXMnKGluKSAnJXMnKGxvY2FsKVxuIiwK LSsJCQkJICAgICAgIAkJaG9zdG5hbWUsIGluX2hhc2hzdW0sIHRlc3RfaGFzaHN1bSk7Ci0rI2Vu ZGlmCi0rCQkJCQltYXRjaCA9ICJGIjsKLSsJCQkJCXhmZXJfc2l6ZSA9IHN0Yi5zdF9zaXplOwot KwkJCQl9Ci0rCQkJCWZyZWUoaW5faGFzaHN1bSk7Ci0rCQkJfQotKwkJCWlmICgqY3AgPT0gJ1Mn KSB7IC8qIHNraXAgZmlsZSAqLwotKyNpZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmKHN0ZGVyciwg IiVzOiBTaG91bGQgYmUgc2tpcHBpbmcgdGhpcyBmaWxlXG4iLCBob3N0bmFtZSk7Ci0rI2VuZGlm Ci0rCQkJCWdvdG8gbmV4dDsKLSsJCQl9Ci0rCQkJaWYgKCpjcCA9PSAnQycpIHsgLyp0cmFuc2Zl ciBlbnRpcmUgZmlsZSovCi0rI2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IFJlc2VuZGluZyBlbnRpcmUgZmlsZVxuIiwgaG9zdG5hbWUpOwotKyNlbmRpZgotKwkJCQl4ZmVy X3NpemUgPSBzdGIuc3Rfc2l6ZTsKLSsJCQl9Ci0rCQkJLyogbmVlZCB0byBzZW5kIHRoZSBtYXRj aCBzdGF0dXMKLSsJCQkgKiBXZSBhbHdheXMgc2VuZCB0aGUgbWF0Y2ggc3RhdHVzIG9yIHdlIGdl dCBvdXQgb2Ygc3luYwotKwkJCSAqLwotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYoc3RkZXJy LCAiJXM6IHNlbmRpbmcgbWF0Y2ggJXNcbiIsIGhvc3RuYW1lLCBtYXRjaCk7Ci0rI2VuZGlmCi0r CQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBtYXRjaCwgMSk7Ci0rCQl9Ci0rCi0g CQlpZiAoKGJwID0gYWxsb2NidWYoJmJ1ZmZlciwgZmQsIENPUFlfQlVGTEVOKSkgPT0gTlVMTCkg ewotIG5leHQ6CQkJaWYgKGZkICE9IC0xKSB7Ci0gCQkJCSh2b2lkKSBjbG9zZShmZCk7Ci1AQCAt MTQ2MSwxMyArMTcyMCwxNyBAQAotIAkJCX0KLSAJCQljb250aW51ZTsKLSAJCX0KLSsKLSsjaWZk ZWYgREVCVUcKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGdvaW5nIHRvIHhmZXIgJWxkXG4iLCBo b3N0bmFtZSwgeGZlcl9zaXplKTsKLSsjZW5kaWYKLSAJCWlmIChzaG93cHJvZ3Jlc3MpCi0tCQkJ c3RhcnRfcHJvZ3Jlc3NfbWV0ZXIoY3VyZmlsZSwgc3RiLnN0X3NpemUsICZzdGF0Ynl0ZXMpOwot KwkJCXN0YXJ0X3Byb2dyZXNzX21ldGVyKGN1cmZpbGUsIHhmZXJfc2l6ZSwgJnN0YXRieXRlcyk7 Ci0gCQlzZXRfbm9uYmxvY2socmVtb3V0KTsKLS0JCWZvciAoaGFkZXJyID0gaSA9IDA7IGkgPCBz dGIuc3Rfc2l6ZTsgaSArPSBicC0+Y250KSB7Ci0rCQlmb3IgKGhhZGVyciA9IGkgPSAwOyBpIDwg eGZlcl9zaXplOyBpICs9IGJwLT5jbnQpIHsKLSAJCQlhbXQgPSBicC0+Y250OwotLQkJCWlmIChp ICsgKG9mZl90KWFtdCA+IHN0Yi5zdF9zaXplKQotLQkJCQlhbXQgPSBzdGIuc3Rfc2l6ZSAtIGk7 Ci0rCQkJaWYgKGkgKyAob2ZmX3QpYW10ID4geGZlcl9zaXplKQotKwkJCQlhbXQgPSB4ZmVyX3Np emUgLSBpOwotIAkJCWlmICghaGFkZXJyKSB7Ci0gCQkJCWlmICgobnIgPSBhdG9taWNpbyhyZWFk LCBmZCwKLSAJCQkJICAgIGJwLT5idWYsIGFtdCkpICE9IGFtdCkgewotQEAgLTE2NjgsMjQgKzE5 MzEsMzYgQEAKLSBzaW5rKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqc3JjKQot IHsKLSAJc3RhdGljIEJVRiBidWZmZXI7Ci0tCXN0cnVjdCBzdGF0IHN0YjsKLSsJc3RydWN0IHN0 YXQgc3RiLCBjcHN0YXQsIG5wc3RhdDsKLSAJQlVGICpicDsKLSAJb2ZmX3QgaTsKLSAJc2l6ZV90 IGosIGNvdW50OwotIAlpbnQgYW10LCBleGlzdHMsIGZpcnN0LCBvZmQ7Ci0gCW1vZGVfdCBtb2Rl LCBvbW9kZSwgbWFzazsKLS0Jb2ZmX3Qgc2l6ZSwgc3RhdGJ5dGVzOwotKwlvZmZfdCBzaXplLCBz dGF0Ynl0ZXMsIHhmZXJfc2l6ZTsKLSAJdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKLSAJaW50IHNl dGltZXMsIHRhcmdpc2Rpciwgd3JlcnI7Ci0tCWNoYXIgY2gsICpjcCwgKm5wLCAqdGFyZywgKndo eSwgKnZlY3RbMV0sIGJ1ZlsyMDQ4XSwgdmlzYnVmWzIwNDhdOwotKwljaGFyIGNoLCAqY3AsICpu cCwgKm5wX3RtcCwgKnRhcmcsICp3aHksICp2ZWN0WzFdLCBidWZbMTYzODRdLCB2aXNidWZbMTYz ODRdOwotIAljaGFyICoqcGF0dGVybnMgPSBOVUxMOwotIAlzaXplX3QgbiwgbnBhdHRlcm5zID0g MDsKLSAJc3RydWN0IHRpbWV2YWwgdHZbMl07Ci0rCWNoYXIgcmVtb3RlX2hhc2hzdW1bSEFTSF9M RU4rMV07Ci0rCWNoYXIgbG9jYWxfaGFzaHN1bVtIQVNIX0xFTisxXTsKLSsJY2hhciB0bXBidWZb QlVGX0FORF9IQVNIXTsKLSsJY2hhciBvdXRidWZbQlVGX0FORF9IQVNIXTsKLSsJY2hhciBtYXRj aDsKLSsJaW50IGJhZF9tYXRjaF9mbGFnID0gMDsKLSsJbnAgPSBOVUxMOyAvKiB0aGlzIHdhcyBv cmlnaW5hbGx5ICcvMCcgYnV0IHRoYXQncyB3cm9uZyAqLwotKwlucF90bXAgPSBOVUxMOwotKwot IAotICNkZWZpbmUJYXRpbWUJdHZbMF0KLSAjZGVmaW5lCW10aW1lCXR2WzFdCi0gI2RlZmluZQlT Q1JFV1VQKHN0cikJeyB3aHkgPSBzdHI7IGdvdG8gc2NyZXd1cDsgfQotIAotKyNpZmRlZiBERUJV RwotKyAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogTE9DQUwgSW4gc2luayB3aXRoICVzXG4i LCBob3N0bmFtZSwgc3JjKTsKLSsjZW5kaWYKLSAJaWYgKFRZUEVfT1ZFUkZMT1codGltZV90LCAw KSB8fCBUWVBFX09WRVJGTE9XKG9mZl90LCAwKSkKLSAJCVNDUkVXVVAoIlVuZXhwZWN0ZWQgb2Zm X3QvdGltZV90IHNpemUiKTsKLSAKLUBAIC0xNzAzLDkgKzE5NzgsMTYgQEAKLSAJaWYgKHRhcmdl dHNob3VsZGJlZGlyZWN0b3J5KQotIAkJdmVyaWZ5ZGlyKHRhcmcpOwotIAotKyNpZmRlZiBERUJV RwotKwlmcHJpbnRmIChzdGRlcnIsICIlczogU2VuZGluZyBudWxsIHRvIHJlbW91dC5cbiIsaG9z dG5hbWUpOwotKyNlbmRpZgotIAkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsICIiLCAx KTsKLSAJaWYgKHN0YXQodGFyZywgJnN0YikgPT0gMCAmJiBTX0lTRElSKHN0Yi5zdF9tb2RlKSkK LSAJCXRhcmdpc2RpciA9IDE7Ci0rCi0rI2lmZGVmIERFQlVHCi0rCWZwcmludGYoc3RkZXJyLCAi JXM6IFRhcmdldCBpcyAlcyB3aXRoIGEgc2l6ZSBvZiAlbGRcbiIsIGhvc3RuYW1lLCB0YXJnLCBz dGIuc3Rfc2l6ZSk7Ci0rI2VuZGlmCi0gCWlmIChzcmMgIT0gTlVMTCAmJiAhaWFtcmVjdXJzaXZl ICYmICFUZmxhZykgewotIAkJLyoKLSAJCSAqIFByZXBhcmUgdG8gdHJ5IHRvIHJlc3RyaWN0IGlu Y29taW5nIGZpbGVuYW1lcyB0byBtYXRjaAotQEAgLTE3MTQsNyArMTk5NiwxMiBAQAotIAkJaWYg KGJyYWNlX2V4cGFuZChzcmMsICZwYXR0ZXJucywgJm5wYXR0ZXJucykgIT0gMCkKLSAJCQlmYXRh bF9mKCJjb3VsZCBub3QgZXhwYW5kIHBhdHRlcm4iKTsKLSAJfQotKwotIAlmb3IgKGZpcnN0ID0g MTs7IGZpcnN0ID0gMCkgewotKwkJYmFkX21hdGNoX2ZsYWcgPSAwOyAvKiB1c2VkIGluIHJlc3Vt ZSBtb2RlLiAqLwotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogQXQgc3Rh cnQgb2YgbG9vcCBidWYgaXMgJXNcbiIsIGhvc3RuYW1lLCBidWYpOwotKyNlbmRpZgotIAkJY3Ag PSBidWY7Ci0gCQlpZiAoYXRvbWljaW8ocmVhZCwgcmVtaW4sIGNwLCAxKSAhPSAxKQotIAkJCWdv dG8gZG9uZTsKLUBAIC0xNzQyLDYgKzIwMjksOSBAQAotIAkJCWNvbnRpbnVlOwotIAkJfQotIAkJ aWYgKGJ1ZlswXSA9PSAnRScpIHsKLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIs ICIlczogU2VuZGluZyBudWxsIHRvIHJlbW91dC5cbiIsIGhvc3RuYW1lKTsKLSsjZW5kaWYKLSAJ CQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKLSAJCQlnb3RvIGRvbmU7 Ci0gCQl9Ci1AQCAtMTc0OSw2ICsyMDM5LDkgQEAKLSAJCQkqLS1jcCA9IDA7Ci0gCi0gCQljcCA9 IGJ1ZjsKLSsjaWZkZWYgREVCVUcKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGJ1ZiBpcyAlc1xu IiwgaG9zdG5hbWUsIGJ1Zik7Ci0rI2VuZGlmCi0gCQlpZiAoKmNwID09ICdUJykgewotIAkJCXNl dGltZXMrKzsKLSAJCQljcCsrOwotQEAgLTE3NzYsOSArMjA2OSwxOSBAQAotIAkJCWlmICghY3Ag fHwgKmNwKysgIT0gJ1wwJyB8fCBhdGltZS50dl91c2VjIDwgMCB8fAotIAkJCSAgICBhdGltZS50 dl91c2VjID4gOTk5OTk5KQotIAkJCQlTQ1JFV1VQKCJhdGltZS51c2VjIG5vdCBkZWxpbWl0ZWQi KTsKLSsKLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogU2VuZGluZyBu dWxsIHRvIHJlbW91dC5cbiIsIGhvc3RuYW1lKTsKLSsjZW5kaWYKLSAJCQkodm9pZCkgYXRvbWlj aW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKLSAJCQljb250aW51ZTsKLSAJCX0KLSsJCWlmICgq Y3AgPT0gJ1InKSB7IC8qcmVzdW1lIGZpbGUgdHJhbnNmZXIgKGRvbnQnIHRoaW5rIEkgbmVlZCB0 aGlzIGhlcmUpKi8KLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBSZWNl aXZlZCBhIFJFU1VNRSByZXF1ZXN0IHdpdGggJXNcbiIsIGhvc3RuYW1lLCBjcCk7Ci0rI2VuZGlm Ci0rCQkJcmVzdW1lX2ZsYWcgPSAxOwotKwkJfQotIAkJaWYgKCpjcCAhPSAnQycgJiYgKmNwICE9 ICdEJykgewotIAkJCS8qCi0gCQkJICogQ2hlY2sgZm9yIHRoZSBjYXNlICJyY3AgcmVtb3RlOmZv b1wqIGxvY2FsOmJhciIuCi1AQCAtMTc5NCw2ICsyMDk3LDE4IEBACi0gCQkJU0NSRVdVUCgiZXhw ZWN0ZWQgY29udHJvbCByZWNvcmQiKTsKLSAJCX0KLSAJCW1vZGUgPSAwOwotKyNpZmRlZiBERUJV RwotKwkJZnByaW50ZihzdGRlcnIsICIlczogYnVmIGlzICVzXG4iLCBob3N0bmFtZSwgYnVmKTsK LSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3ApOwotKyNl bmRpZgotKwkJLyogd2UgbmVlZCB0byB0cmFjayBpZiB0aGlzIG9iamVjdCBpcyBhIGRpcmVjdG9y eQotKwkJICogYmVmb3JlIHdlIG1vdmUgdGhlIHBvaW50ZXIuIElmIHdlIGFyZSBpbiByZXN1bWUg bW9kZQotKwkJICogd2UgbWlnaHQgZW5kIHVwIHRyeWluZyB0byBnZXQgYW4gbWRzdW0gb24gYSBk aXJlY3RvcnkKLSsJCSAqIGFuZCB0aGF0IGRvZXNuJ3Qgd29yayAqLwotKwkJaW50IGRpcl9mbGFn ID0gMDsKLSsJCWlmICgqY3AgPT0gJ0QnKQotKwkJCWRpcl9mbGFnID0gMTsKLSsKLSAJCWZvciAo KytjcDsgY3AgPCBidWYgKyA1OyBjcCsrKSB7Ci0gCQkJaWYgKCpjcCA8ICcwJyB8fCAqY3AgPiAn NycpCi0gCQkJCVNDUkVXVVAoImJhZCBtb2RlIik7Ci1AQCAtMTgwNCw2ICsyMTE5LDEwIEBACi0g CQlpZiAoKmNwKysgIT0gJyAnKQotIAkJCVNDUkVXVVAoIm1vZGUgbm90IGRlbGltaXRlZCIpOwot IAotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogY3AgaXMgJXNcbiIsIGhv c3RuYW1lLCBjcCk7Ci0rI2VuZGlmCi0rCi0gCQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIp KmNwKSkKLSAJCQlTQ1JFV1VQKCJzaXplIG5vdCBwcmVzZW50Iik7Ci0gCQl1bGwgPSBzdHJ0b3Vs bChjcCwgJmNwLCAxMCk7Ci1AQCAtMTgxMywxMSArMjEzMiwzMiBAQAotIAkJCVNDUkVXVVAoInNp emUgb3V0IG9mIHJhbmdlIik7Ci0gCQlzaXplID0gKG9mZl90KXVsbDsKLSAKLSsjaWZkZWYgREVC VUcKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3ApOwot KyNlbmRpZgotKwkJaWYgKHJlc3VtZV9mbGFnICYmICFkaXJfZmxhZykgewotKwkJCSpyZW1vdGVf aGFzaHN1bSA9ICdcMCc7Ci0rCQkJaW50IGk7Ci0rCQkJZm9yIChpID0gMDsgaSA8IEhBU0hfTEVO OyBpKyspIHsKLSsJCQkJc3RybmNhdCAocmVtb3RlX2hhc2hzdW0sIGNwKyssIDEpOwotKwkJCX0K LSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogJyVzJ1xuIiwgaG9zdG5h bWUsIHJlbW90ZV9oYXNoc3VtKTsKLSsjZW5kaWYKLSsJCQlpZiAoIWNwIHx8ICpjcCsrICE9ICcg JykKLSsJCQkJU0NSRVdVUCgiaGFzaCBub3QgZGVsaW1pdGVkIik7Ci0rCQl9Ci0rI2lmZGVmIERF QlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjcCBpcyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsK LSsjZW5kaWYKLSAJCWlmICgqY3AgPT0gJ1wwJyB8fCBzdHJjaHIoY3AsICcvJykgIT0gTlVMTCB8 fAotIAkJICAgIHN0cmNtcChjcCwgIi4iKSA9PSAwIHx8IHN0cmNtcChjcCwgIi4uIikgPT0gMCkg ewotIAkJCXJ1bl9lcnIoImVycm9yOiB1bmV4cGVjdGVkIGZpbGVuYW1lOiAlcyIsIGNwKTsKLSAJ CQlleGl0KDEpOwotIAkJfQotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlcyBj cCBpcyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsKLSsjZW5kaWYKLSAJCWlmIChucGF0dGVybnMgPiAw KSB7Ci0gCQkJZm9yIChuID0gMDsgbiA8IG5wYXR0ZXJuczsgbisrKSB7Ci0gCQkJCWlmIChzdHJj bXAocGF0dGVybnNbbl0sIGNwKSA9PSAwIHx8Ci1AQCAtMTg4NywxMSArMjIyNywxOTUgQEAKLSAJ CX0KLSAJCW9tb2RlID0gbW9kZTsKLSAJCW1vZGUgfD0gU19JV1VTUjsKLSsJCXN0YXQoY3AsICZj cHN0YXQpOwotKwkJeGZlcl9zaXplID0gc2l6ZTsKLSsJCWlmIChyZXN1bWVfZmxhZykgewotKyNp ZmRlZiBERUJVRwotKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IG5wIGlzICVzXG4iLCBob3N0bmFt ZSwgbnApOwotKyNlbmRpZgotKwkJCS8qIGRvZXMgdGhlIGZpbGUgZXhpc3QgYW5kIGlmIGl0IGRv ZXMgaXQgd3JpdGFibGU/ICovCi0rCQkJaWYgKHN0YXQobnAsICZucHN0YXQpID09IC0xKSB7Ci0r I2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXMgTG9jYWwgZmlsZSBkb2VzIG5v dCBleGlzdCBzaXplIGlzICVsZCFcbiIsCi0rCQkJCQlob3N0bmFtZSwgbnBzdGF0LnN0X3NpemUp OwotKyNlbmRpZgotKwkJCQlucHN0YXQuc3Rfc2l6ZSA9IDA7Ci0rCQkJfSBlbHNlIHsKLSsJCQkJ LyogY2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIHdyaXRlYWJsZQotKwkJCQkgKiBpZiBpdCBp c24ndCB0aGVuIHdlIG5lZWQgdG8gc2tpcCBpdCBidXQKLSsJCQkJICogYmVmb3JlIHdlIHNraXAg aXQgd2UgbmVlZCB0byBzZW5kIHRoZSByZW1vdGUKLSsJCQkJICogd2hhdCB0aGV5IGFyZSBleHBl Y3Rpbmcgc28gQlVGX0FORF9IQVNIIGJ5dGVzIGFuZCB0aGVuCi0rCQkJCSAqIGEgbnVsbC4KLSsJ CQkJICogTk9URSEhISBUaGUgZm9ybWF0IGluIHRoZSBzbnByaW50ZiBuZWVkcyB0aGUgYWN0dWFs IG51bWVyaWMKLSsJCQkJICogYmVjYXVzZSB1c2luZyBhIGRlZmluZSBpc24ndCB3b3JraW5nICov Ci0rCQkJCWlmIChhY2Nlc3MgKG5wLCBXX09LKSAhPSAwKSB7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVy ciwgInNjcDogJXM6IFBlcm1pc3Npb24gZGVuaWVkIG9uICVzXG4iLCBucCwgaG9zdG5hbWUpOwot KwkJCQkJc25wcmludGYob3V0YnVmLCBCVUZfQU5EX0hBU0gsICJTJS0qcyIsIEJVRl9BTkRfSEFT SC0yLCAiICIpOwotKwkJCQkJKHZvaWQpYXRvbWljaW8odndyaXRlLCByZW1vdXQsIG91dGJ1Ziwg c3RybGVuKG91dGJ1ZikpOwotKwkJCQkJKHZvaWQpYXRvbWljaW8odndyaXRlLCByZW1vdXQsICIi LCAxKTsKLSsJCQkJCWNvbnRpbnVlOwotKwkJCQl9Ci0rCQkJfQotKwkJCS8qIHRoaXMgZmlsZSBp cyBhbHJlYWR5IGhlcmUgZG8gd2UgbmVlZCB0byBtb3ZlIGl0PwotKwkJCSAqIENoZWNrIHRvIG1h a2Ugc3VyZSBucHN0YXQuc3Rfc2l6ZSA+IDAuIElmIGl0IGlzIDAgdGhlbiB3ZQotKwkJCSAqIG1h eSB0cnlpbmcgdG8gYmUgbW92aW5nIGEgemVybyBieXRlIGZpbGUgaW4gd2hpY2ggY2FzZSB0aGlz Ci0rCQkJICogZm9sbG93aW5nIGJsb2NrIGZhaWxzLiBTZWUgb24gMCBieXRlIGZpbGVzIHRoZSBo YXNoZXMgd2lsbAotKwkJCSAqIGFsd2F5cyBtYXRjaCBhbmQgdGhlIGZpbGUgd29uJ3QgYmUgY3Jl YXRlZCBldmVuIHRob3VnaCBpdCBzaG91bGQKLSsJCQkgKi8KLSsJCQlpZiAoeGZlcl9zaXplID09 IG5wc3RhdC5zdF9zaXplICYmIChucHN0YXQuc3Rfc2l6ZSA+IDApKSB7Ci0rCQkJCWNhbGN1bGF0 ZV9oYXNoKG5wLCBsb2NhbF9oYXNoc3VtLCBucHN0YXQuc3Rfc2l6ZSk7Ci0rCQkJCWlmIChzdHJj bXAobG9jYWxfaGFzaHN1bSxyZW1vdGVfaGFzaHN1bSkgPT0gMCkgewotKwkJCQkJLyogd2UgY2Fu IHNraXAgdGhpcyBmaWxlIGlmIHdlIHdhbnQgdG8uICovCi0rI2lmZGVmIERFQlVHCi0rCQkJCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiBGaWxlcyBhcmUgdGhlIHNhbWVcbiIsIGhvc3RuYW1lKTsKLSsj ZW5kaWYKLSsJCQkJCS8qIHRoZSByZW1vdGUgaXMgZXhwZWN0aW5nIHNvbWV0aGluZyBzbyB3ZSBu ZWVkIHRvIHNlbmQgdGhlbSBzb21ldGhpbmcqLwotKwkJCQkJc25wcmludGYob3V0YnVmLCBCVUZf QU5EX0hBU0gsICJTJS0qcyIsIEJVRl9BTkRfSEFTSC0yLCAiICIpOwotKwkJCQkJKHZvaWQpYXRv bWljaW8odndyaXRlLCByZW1vdXQsIG91dGJ1Ziwgc3RybGVuKG91dGJ1ZikpOwotKyNpZmRlZiBE RUJVRwotKwkJCQkJZnByaW50ZihzdGRlcnIsIiVzOiBzZW50ICclcycgdG8gcmVtb3RlXG4iLCBo b3N0bmFtZSwgb3V0YnVmKTsKLSsjZW5kaWYKLSsJCQkJCS8qIHRoZSByZW1vdGUgaXMgd2FpdGlu ZyBvbiBhbiBhY2sgc28gc2VuZCBhIG51bGwgKi8KLSsJCQkJCSh2b2lkKWF0b21pY2lvKHZ3cml0 ZSwgcmVtb3V0LCAiIiwgMSk7Ci0rCQkJCQlpZiAoc2hvd3Byb2dyZXNzKQotKwkJCQkJCWZwcmlu dGYgKHN0ZGVyciwgIlNraXBwaW5nIGlkZW50aWNhbCBmaWxlOiAlc1xuIiwgbnApOwotKwkJCQkJ Y29udGludWU7Ci0rCQkJCX0gZWxzZSB7Ci0rCQkJCQkvKiBmaWxlIHNpemVzIGFyZSB0aGUgc2Ft ZSBidXQgdGhleSBkb24ndCBtYXRjaCAqLwotKyNpZmRlZiBERUJVRwotKwkJCQkJZnByaW50Zihz dGRlcnIsICIlczogdGFyZ2V0KCVsZCkgaXMgZGlmZmVyZW50IHRoYW4gc291cmNlKCVsZCkhXG4i LAotKwkJCQkJCWhvc3RuYW1lLCBucHN0YXQuc3Rfc2l6ZSwgc2l6ZSk7Ci0rI2VuZGlmCi0rCQkJ CQlzbnByaW50Zih0bXBidWYsIHNpemVvZiBvdXRidWYsICJDJTA0byAlbGxkICVzIiwKLSsJCQkJ CQkgKHVfaW50KSAobnBzdGF0LnN0X21vZGUgJiBGSUxFTU9ERU1BU0spLAotKwkJCQkJCSAobG9u ZyBsb25nKW5wc3RhdC5zdF9zaXplLCBsb2NhbF9oYXNoc3VtKTsKLSsJCQkJCXNucHJpbnRmKG91 dGJ1ZiwgQlVGX0FORF9IQVNILCAiJS0qcyIsIEJVRl9BTkRfSEFTSC0xLCB0bXBidWYpOwotKwkJ CQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBvdXRidWYsIHN0cmxlbihvdXRidWYp KTsKLSsJCQkJCWJhZF9tYXRjaF9mbGFnID0gMTsKLSsJCQkJfQotKwkJCX0KLSsJCQkvKiBpZiBu cHN0YXQuc3Rfc2l6ZSBpcyAwIHRoZW4gdGhlIGxvY2FsIGZpbGUgZG9lc24ndCBleGlzdCBhbmQK LSsJCQkgKiB3ZSBoYXZlIHRvIG1vdmUgaXQuIFNpbmNlIHdlIGFyZSBpbiByZXN1bWUgbW9kZSB0 cmVhdCBpdCBhcyBhIHJlc3VtZSAqLwotKwkJCWlmIChucHN0YXQuc3Rfc2l6ZSA8IHhmZXJfc2l6 ZSB8fCAobnBzdGF0LnN0X3NpemUgPT0gMCkpIHsKLSsJCQkJY2hhciByYW5kX3N0cmluZ1s5XTsK LSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzIGlzIHNtYWxsZXIg dGhhbiAlc1xuIiwgaG9zdG5hbWUsIG5wLCBjcCk7Ci0rI2VuZGlmCi0rCQkJCWNhbGN1bGF0ZV9o YXNoKG5wLCBsb2NhbF9oYXNoc3VtLCBucHN0YXQuc3Rfc2l6ZSk7Ci0rI2RlZmluZQlGSUxFTU9E RU1BU0sJKFNfSVNVSUR8U19JU0dJRHxTX0lSV1hVfFNfSVJXWEd8U19JUldYTykKLSsJCQkJc25w cmludGYodG1wYnVmLCBzaXplb2Ygb3V0YnVmLCAiUiUwNG8gJWxsZCAlcyIsCi0rCQkJCQkgKHVf aW50KSAobnBzdGF0LnN0X21vZGUgJiBGSUxFTU9ERU1BU0spLAotKwkJCQkJIChsb25nIGxvbmcp bnBzdGF0LnN0X3NpemUsIGxvY2FsX2hhc2hzdW0pOwotKwkJCQlzbnByaW50ZihvdXRidWYsIEJV Rl9BTkRfSEFTSCwgIiUtKnMiLCBCVUZfQU5EX0hBU0gtMSwgdG1wYnVmKTsKLSsjaWZkZWYgREVC VUcKLSsJCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IG5ldyBidWYgaXMgJXMgb2YgbGVuZ3RoICVs ZFxuIiwKLSsJCQkJCSBob3N0bmFtZSwgb3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7Ci0rCQkJCWZw cmludGYoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbmV3IGZpbGUgKCVzKSBtb2RlczogJXNcbiIsCi0r CQkJCQlob3N0bmFtZSwgbnAsIG91dGJ1Zik7Ci0rI2VuZGlmCi0rCQkJCS8qbm93IHdlIGhhdmUg dG8gc2VuZCBucCdzIGxlbmd0aCBhbmQgaGFzaCB0byB0aGUgb3RoZXIgZW5kCi0rCQkJCSAqIGlm IHRoZSBjb21wdXRlZCBoYXNoZXMgbWF0Y2ggdGhlbiB3ZSBzZWVrIHRvIG5wJ3MgbGVuZ3RoIGlu Ci0rCQkJCSAqIGZpbGUgYW5kIGFwcGVuZCB0byBucCBzdGFydGluZyBmcm9tIHRoZXJlICovCi0r CQkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgb3V0YnVmLCBzdHJsZW4ob3V0YnVm KSk7Ci0rI2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IE5ldyBzaXplOiAl bGQsIHNpemU6ICVsZCwgc3Rfc2l6ZTogJWxkXG4iLAotKwkJCQkJaG9zdG5hbWUsIHNpemUgLSBu cHN0YXQuc3Rfc2l6ZSwgc2l6ZSwgbnBzdGF0LnN0X3NpemUpOwotKyNlbmRpZgotKwkJCQl4ZmVy X3NpemUgPSBzaXplIC0gbnBzdGF0LnN0X3NpemU7Ci0rCQkJCXJlc3VtZV9mbGFnID0gMTsKLSsJ CQkJbnBfdG1wID0geHN0cmR1cChucCk7Ci0rCQkJCS8qIFdlIHNob3VsZCBoYXZlIGEgcmFuZG9t IGNvbXBvbmVudCB0byBhdm9pZCBjbG9iYmVyaW5nIGEKLSsJCQkJICogbG9jYWwgZmlsZSAqLwot KwkJCQlyYW5kX3N0cihyYW5kX3N0cmluZywgOCk7Ci0rCQkJCXN0cmNhdChucCwgcmFuZF9zdHJp bmcpOwotKyNpZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBXaWxsIGNvbmNh dCAlcyB0byAlcyBhZnRlciB4ZmVyXG4iLAotKwkJCQkJaG9zdG5hbWUsIG5wLCBucF90bXApOwot KyNlbmRpZgotKwkJCX0gZWxzZSBpZiAobnBzdGF0LnN0X3NpemUgPiBzaXplKSB7Ci0rCQkJLyog dGhlIHRhcmdldCBmaWxlIGlzIGxhcmdlciB0aGFuIHRoZSBzb3VyY2UuCi0rCQkJICogc28gd2Ug bmVlZCB0byBvdmVyd3JpdGUgaXQuIFdlIGRvbid0IG5lZWQgdG8gc2VuZCB0aGUgaGFzaCB0aG91 Z2guICovCi0rI2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHRhcmdldCgl bGQpIGlzIGxhcmdlciB0aGFuIHNvdXJjZSglbGQpIVxuIiwKLSsJCQkJCWhvc3RuYW1lLCBucHN0 YXQuc3Rfc2l6ZSwgc2l6ZSk7Ci0rI2VuZGlmCi0rCQkJCXNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9m IG91dGJ1ZiwgIkMlMDRvICVsbGQiLAotKwkJCQkJICh1X2ludCkgKG5wc3RhdC5zdF9tb2RlICYg RklMRU1PREVNQVNLKSwKLSsJCQkJCSAobG9uZyBsb25nKW5wc3RhdC5zdF9zaXplKTsKLSsJCQkJ c25wcmludGYob3V0YnVmLCBCVUZfQU5EX0hBU0gsICIlLSpzIiwgQlVGX0FORF9IQVNILTEsIHRt cGJ1Zik7Ci0rCQkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgb3V0YnVmLCBzdHJs ZW4ob3V0YnVmKSk7Ci0rCQkJCWJhZF9tYXRjaF9mbGFnID0gMTsKLSsJCQl9Ci0rCi0rI2lmZGVm IERFQlVHCi0rCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IENQIGlzICVzKCVsZCkgTlAgaXMgJXMo JWxkKVxuIiwKLSsJCQkJIGhvc3RuYW1lLCBjcCwgc2l6ZSwgbnAsIG5wc3RhdC5zdF9zaXplKTsK LSsjZW5kaWYKLSsJCQkvKiB3ZSBhcmUgaW4gcmVzdW1lIG1vZGUgc28gd2UgbmVlZCB0aGlzICpo ZXJlKiBhbmQgbm90IGxhdGVyCi0rCQkJICogYmVjYXVzZSB3ZSBuZWVkIHRvIGdldCB0aGUgZmls ZSBtYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZW1vdGUKLSsJCQkgKiBvdXRzaWRlIG9mIHJl c3VtZSBtb2RlIHdlIGRvbid0IGdldCB0aGF0IHNvIHdlIGdldCBvdXQgb2Ygc3luYwotKwkJCSAq IHNvIHdlIGhhdmUgYSB0ZXN0IGZvciB0aGUgcmVzdW1lX2ZsYWcgYWZ0ZXIgdGhpcyBibG9jayAq LwotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwg dG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOwotKyNlbmRpZgotKwkJCSh2b2lkKSBhdG9taWNpbyh2 d3JpdGUsIHJlbW91dCwgIiIsIDEpOwotKwotKwkJCS8qIHRoZSByZW1vdGUgaXMgYWx3YXlzIGdv aW5nIHRvIHNlbmQgYSBtYXRjaCBzdGF0dXMKLSsJCQkgKiBzbyB3ZSBuZWVkIHRvIHJlYWQgaXQg c28gd2UgZG9uJ3QgZ2V0IG91dCBvZiBzeW5jICovCi0rCQkJKHZvaWQpIGF0b21pY2lvKHJlYWQs IHJlbWluLCAmbWF0Y2gsIDEpOwotKwkJCWlmIChtYXRjaCAhPSAnTScpIHsvKmZyYWdtZW50cyBk byBub3QgbWF0Y2gqLwotKwkJCQkvKiBleHBlY3RlZCByZXNwb25zZSBvZiBGLCBNIGFuZCBOVUxM ICpidXQqCi0rCQkJCSAqIGFueXRoaW5nIG90aGVyIHRoYW4gTSBpcyBhIGZhaWx1cmUKLSsJCQkJ ICogaWYgaXQncyBhIE5VTEwgdGhlbiB3ZSByZXNldCB4ZmVyX3NpemUgYnV0Ci0rCQkJCSAqIHdl IHJldGFpbiB0aGUgZmlsZSBwb2ludGVycyAqLwotKwkJCQl4ZmVyX3NpemUgPSBzaXplOwotKwkJ CQliYWRfbWF0Y2hfZmxhZyA9IDE7Ci0rCQkJCWlmIChtYXRjaCA9PSAnRicpIHsKLSsJCQkJCS8q IGdvdCBhbiBGIGZvciBmYWlsdXJlIGFuZCBub3QgTlVMTAotKwkJCQkJICogc28gd2Ugd2FudCB0 byBzd2FwIG92ZXIgdGhlIGZpbGVuYW1lIGZyb20KLSsJCQkJCSAqIHRoZSB0ZW1wIGJhY2sgdG8g dGhlIG9yaWdpbmFsICovCi0rI2lmZGVmIERFQlVHCi0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiBtYXRjaCBzdGF0dXMgaXMgRlxuIiwgaG9zdG5hbWUpOwotKyNlbmRpZgotKwkJCQkJaWYgKG5w X3RtcCAhPSBOVUxMKQotKwkJCQkJCW5wID0gbnBfdG1wOwotKwkJCQkJZWxzZSB7Ci0rCQkJCQkJ Y29udGludWU7Ci0rCQkJCQl9Ci0rCQkJCX0gZWxzZSB7Ci0rI2lmZGVmIERFQlVHCi0rCQkJCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiBtYXRjaCByZWNlaXZlZCBpcyBOVUxMXG4iLCBob3N0bmFtZSk7 Ci0rI2VuZGlmCi0rCQkJCX0KLSsJCQl9IGVsc2UgewotKyNpZmRlZiBERUJVRwotKwkJCQlmcHJp bnRmKHN0ZGVyciwgIiVzIG1hdGNoIHN0YXR1cyBpcyBNXG4iLCBob3N0bmFtZSk7Ci0rI2VuZGlm Ci0rCQkJCWJhZF9tYXRjaF9mbGFnID0gMDsgLyogd2hpbGUgdGhpcyBpcyBzZXQgYXQgdGhlIGJl Z2lubmluZyBvZiB0aGUKLSsJCQkJCQkgICAgICogbG9vcCBJJ20gc2V0dGluZyBpdCBoZXJlIGV4 cGxpY2l0bHkgYXMgd2VsbCAqLwotKwkJCX0KLSsJCX0KLSsKLSsjaWZkZWYgREVCVUcKLSsJCWZw cmludGYoc3RkZXJyLCAiJXM6IENyZWF0aW5nIGZpbGUuIG1vZGUgaXMgJWQgZm9yICVzXG4iLAot KwkJCWhvc3RuYW1lLCBtb2RlLCBucCk7Ci0rI2VuZGlmCi0gCQlpZiAoKG9mZCA9IG9wZW4obnAs IE9fV1JPTkxZfE9fQ1JFQVQsIG1vZGUpKSA9PSAtMSkgewotIGJhZDoJCQlydW5fZXJyKCIlczog JXMiLCBucCwgc3RyZXJyb3IoZXJybm8pKTsKLSAJCQljb250aW51ZTsKLSAJCX0KLS0JCSh2b2lk KSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOwotKwotKwkJLyogaW4gdGhlIGNhc2Ug b2Ygbm90IHVzaW5nIHRoZSByZXN1bWUgZnVuY3Rpb24gd2UgbmVlZCB0aGlzIHZ3cml0ZSBoZXJl Ci0rCQkgKiBpbiB0aGUgY2FzZSBvZiB1c2luZyB0aGUgcmVzdW1lIGZsYWcgaXQgY29tZXMgaW4g dGhlIGFib3ZlIGlmIChyZXN1bWVfZmxhZykgYmxvY2sKLSsJCSAqIHdoeT8gYmVjYXVzZSBzY3Ag aXMgd2VpcmQgYW5kIGRlcGVuZHMgb24gYW4gaW50cmljYXRlIGFuZCBzaWxseSBkYW5jZSBvZgot KwkJICogY2FsbCBhbmQgcmVzcG9uc2UgYXQganVzdCB0aGUgcmlnaHQgdGltZS4gVGhhdCdzIHdo eSAqLwotKwkJaWYgKCFyZXN1bWVfZmxhZykgewotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYg KHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOwotKyNl bmRpZgotKwkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOwotKwkJfQot KwotIAkJaWYgKChicCA9IGFsbG9jYnVmKCZidWZmZXIsIG9mZCwgQ09QWV9CVUZMRU4pKSA9PSBO VUxMKSB7Ci0gCQkJKHZvaWQpIGNsb3NlKG9mZCk7Ci0gCQkJY29udGludWU7Ci1AQCAtMTkwNiwx MyArMjQzMCwxNyBAQAotIAkJICovCi0gCQlzdGF0Ynl0ZXMgPSAwOwotIAkJaWYgKHNob3dwcm9n cmVzcykKLS0JCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCBzaXplLCAmc3RhdGJ5dGVz KTsKLSsJCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCB4ZmVyX3NpemUsICZzdGF0Ynl0 ZXMpOwotIAkJc2V0X25vbmJsb2NrKHJlbWluKTsKLS0JCWZvciAoY291bnQgPSBpID0gMDsgaSA8 IHNpemU7IGkgKz0gYnAtPmNudCkgewotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIs ICIlczogeGZlcl9zaXplIGlzICVsZFxuIiwgaG9zdG5hbWUsIHhmZXJfc2l6ZSk7Ci0rI2VuZGlm Ci0rCQlmb3IgKGNvdW50ID0gaSA9IDA7IGkgPCB4ZmVyX3NpemU7IGkgKz0gYnAtPmNudCkgewot IAkJCWFtdCA9IGJwLT5jbnQ7Ci0tCQkJaWYgKGkgKyBhbXQgPiBzaXplKQotLQkJCQlhbXQgPSBz aXplIC0gaTsKLSsJCQlpZiAoaSArIGFtdCA+IHhmZXJfc2l6ZSkKLSsJCQkJYW10ID0geGZlcl9z aXplIC0gaTsKLSAJCQljb3VudCArPSBhbXQ7Ci0rCQkJLyogcmVhZCB0aGUgZGF0YSBmcm9tIHRo ZSBzb2NrZXQqLwotIAkJCWRvIHsKLSAJCQkJaiA9IGF0b21pY2lvNihyZWFkLCByZW1pbiwgY3As IGFtdCwKLSAJCQkJICAgIHNjcGlvLCAmc3RhdGJ5dGVzKTsKLUBAIC0xOTQ3LDggKzI0NzUsNzgg QEAKLSAJCQl3cmVyciA9IDE7Ci0gCQl9Ci0gCQlpZiAoIXdyZXJyICYmICghZXhpc3RzIHx8IFNf SVNSRUcoc3RiLnN0X21vZGUpKSAmJgotLQkJICAgIGZ0cnVuY2F0ZShvZmQsIHNpemUpICE9IDAp Ci0rCQkgICAgZnRydW5jYXRlKG9mZCwgeGZlcl9zaXplKSAhPSAwKQotIAkJCW5vdGVfZXJyKCIl czogdHJ1bmNhdGU6ICVzIiwgbnAsIHN0cmVycm9yKGVycm5vKSk7Ci0rCi0rCQkvKiBpZiBucF90 bXAgaXNuJ3Qgc2V0IHRoZW4gd2UgZG9uJ3QgaGF2ZSBhIHJlc3VtZSBmaWxlIHRvIGNhdCAqLwot KwkJLyogbGlrZXdpc2UsIGJhZCBtYXRjaCBmbGFnIG1lYW5zIG5vIHJlc3VtZSBmbGFnICovCi0r I2lmZGVmIERFQlVHCi0rCQlmcHJpbnRmIChzdGRlcnIsICIlczogcmVzdW1lX2ZsYWc6ICVkLCBu cF90bXA6ICVzLCBiYWRfbWF0Y2hfZmxhZzogJWRcbiIsCi0rCQkJIGhvc3RuYW1lLCByZXN1bWVf ZmxhZywgbnBfdG1wLCBiYWRfbWF0Y2hfZmxhZyk7Ci0rI2VuZGlmCi0rCQlpZiAocmVzdW1lX2Zs YWcgJiYgbnBfdG1wICYmICFiYWRfbWF0Y2hfZmxhZykgewotKwkJCUZJTEUgKm9yaWcsICpyZXN1 bWU7Ci0rCQkJY2hhciByZXNfYnVmWzUxMl07IC8qIHNldCBhdCA1MTIganVzdCBiZWNhdXNlLCBt aWdodCB3YW50IHRvIGluY3JlYXNlKi8KLSsJCQlzc2l6ZV90IHJlc19ieXRlcyA9IDA7Ci0rCQkJ b2ZmX3Qgc3VtID0gMDsKLSsJCQlzdHJ1Y3Qgc3RhdCByZXNfc3RhdDsKLSsJCQkqcmVzX2J1ZiA9 ICdcMCc7Ci0rCQkJb3JpZyA9IE5VTEw7IC8qc3VwcmVzcyB3YXJuaW5ncyovCi0rCQkJcmVzdW1l ID0gTlVMTDsgLypzdXByZXNzIHdhcm5pbmdzKi8KLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRm KHN0ZGVyciwgIiVzOiBSZXN1bWUgZmxhZyBpcyBzZXQuIEdvaW5nIHRvIGNvbmNhdCAlcyB0byAl cyAgbm93XG4iLAotKwkJCQlob3N0bmFtZSwgbnAsIG5wX3RtcCk7Ci0rI2VuZGlmCi0rCQkJLyog bnAvb2ZkIGlzIHRoZSByZXN1bWUgZmlsZSBzbyBvcGVuIG5wX3RtcCBmb3IgYXBwZW5kaW5nCi0r CQkJICogY2xvc2Ugb2ZkIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIGJlIHNoaWZ0aW5nIGl0Ci0r CQkJICogYW5kIEkgZG9uJ3Qgd25hdCB0aGUgc2FtZSBmaWxlIG9wZW4gaW4gbXVsdGlwbGUgZGVz Y3JpcHRvcnMgKi8KLSsJCQlpZiAoY2xvc2Uob2ZkKSA9PSAtMSkKLSsJCQkJbm90ZV9lcnIoIiVz OiBjbG9zZTogJXMiLCBucCwgc3RyZXJyb3IoZXJybm8pKTsKLSsJCQkvKiBvcmlnIGlzIHRoZSB0 YXJnZXQgZmlsZSwgcmVzdW1lIGlzIHRoZSB0ZW1wIGZpbGUgKi8KLSsJCQlvcmlnID0gZm9wZW4o bnBfdG1wLCAiYSIpOyAvKm9wZW4gZm9yIGFwcGVuZGluZyovCi0rCQkJaWYgKG9yaWcgPT0gTlVM TCkgewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3Qgb3BlbiAlcyBmb3IgYXBw ZW5kaW5nLiIsIGhvc3RuYW1lLCBucF90bXApOwotKwkJCQlnb3RvIHN0b3BjYXQ7Ci0rCQkJfQot KwkJCXJlc3VtZSA9IGZvcGVuKG5wLCAiciIpOyAvKm9wZW4gZm9yIHJlYWRpbmcgb25seSovCi0r CQkJaWYgKHJlc3VtZSA9PSBOVUxMKSB7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IENvdWxk IG5vdCBvcGVuICVzIGZvciByZWFkaW5nLiIsIGhvc3RuYW1lLCBucCk7Ci0rCQkJCWdvdG8gc3Rv cGNhdDsKLSsJCQl9Ci0rCQkJLyogZ2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHRlbXAg ZmlsZSovCi0rCQkJaWYgKGZzdGF0KGZpbGVubyhyZXN1bWUpLCAmcmVzX3N0YXQpID09IC0xKSB7 Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IENvdWxkIG5vdCBzdGF0ICVzIiwgaG9zdG5hbWUs IG5wKTsKLSsJCQkJZ290byBzdG9wY2F0OwotKwkJCX0KLSsJCQkvKiB3aGlsZSB0aGUgbnVtYmVy IG9mIGJ5dGVzIHJlYWQgZnJvbSB0aGUgdGVtcCBmaWxlCi0rCQkJICogaXMgbGVzcyB0aGFuIHRo ZSBzaXplIG9mIHRoZSBmaWxlIHJlYWQgaW4gYSBjaHVuayBhbmQKLSsJCQkgKiB3cml0ZSBpdCB0 byB0aGUgdGFyZ2V0IGZpbGUgKi8KLSsJCQlkbyB7Ci0rCQkJCXJlc19ieXRlcyA9IGZyZWFkKHJl c19idWYsIDEsIDUxMiwgcmVzdW1lKTsKLSsJCQkJZndyaXRlKHJlc19idWYsIDEsIHJlc19ieXRl cywgb3JpZyk7Ci0rCQkJCXN1bSArPSByZXNfYnl0ZXM7Ci0rCQkJfSB3aGlsZSAoc3VtIDwgcmVz X3N0YXQuc3Rfc2l6ZSk7Ci0rCi0rc3RvcGNhdDoJCWlmIChvcmlnKQotKwkJCQlmY2xvc2Uob3Jp Zyk7Ci0rCQkJaWYgKHJlc3VtZSkKLSsJCQkJZmNsb3NlKHJlc3VtZSk7Ci0rCQkJLyogZGVsZXRl IHRoZSByZXN1bWUgZmlsZSAqLwotKwkJCXJlbW92ZShucCk7Ci0rI2lmZGVmIERFQlVHCi0rCQkJ ZnByaW50ZiAoc3RkZXJyLCAiJXM6IG5wKCVzKSBhbmQgbnBfdG1wKCVzKVxuIiwgaG9zdG5hbWUs IG5wLCBucF90bXApOwotKyNlbmRpZgotKwkJCW5wID0gbnBfdG1wOwotKyNpZmRlZiBERUJVRwot KwkJCWZwcmludGYgKHN0ZGVyciwgIiVzIG5wKCVzKSBhbmQgbnBfdG1wKCVzKVxuIiwgaG9zdG5h bWUsIG5wLCBucF90bXApOwotKyNlbmRpZgotKwkJCS8qIHJlc2V0IG9mZCB0byB0aGUgb3JpZ2lu YWwgbnAgKi8KLSsJCQlpZiAoKG9mZCA9IG9wZW4obnBfdG1wLCBPX1dST05MWSkpID09IC0xKSB7 Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkbid0IG9wZW4gJXMgaW4gYXBwZW5kIGZ1 bmN0aW9uXG4iLCBob3N0bmFtZSwgbnBfdG1wKTsKLSsJCQkJYXRvbWljaW8odndyaXRlLCByZW1v dXQsICIiLCAxKTsKLSsJCQkJZ290byBiYWQ7Ci0rCQkJfQotKwkJfQotIAkJaWYgKHBmbGFnKSB7 Ci0gCQkJaWYgKGV4aXN0cyB8fCBvbW9kZSAhPSBtb2RlKQotICNpZmRlZiBIQVZFX0ZDSE1PRAot QEAgLTE5ODMsOCArMjU4MSwxNyBAQAotIAkJCX0KLSAJCX0KLSAJCS8qIElmIG5vIGVycm9yIHdh cyBub3RlZCB0aGVuIHNpZ25hbCBzdWNjZXNzIGZvciB0aGlzIGZpbGUgKi8KLS0JCWlmIChub3Rl X2VycihOVUxMKSA9PSAwKQotKwkJaWYgKG5vdGVfZXJyKE5VTEwpID09IDApIHsKLSsjaWZkZWYg REVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogU2VuZGluZyBudWxsIHRvIHJlbW91dC5c biIsIGhvc3RuYW1lKTsKLSsjZW5kaWYKLSAJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1v dXQsICIiLCAxKTsKLSsJCX0KLSsJCS8qIHdlIGFyZSBpbiByZXN1bWUgbW9kZSBhbmQgd2UgaGF2 ZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBucF90bXAgKi8KLSsJCWlmIChyZXN1bWVfZmxhZyAmJiBu cF90bXAgIT0gTlVMTCkgewotKwkJCWZyZWUobnBfdG1wKTsKLSsJCQlucF90bXAgPSBOVUxMOwot KwkJfQotIAl9Ci0gZG9uZToKLSAJZm9yIChuID0gMDsgbiA8IG5wYXR0ZXJuczsgbisrKQotQEAg LTIxMjgsMTEgKzI3MzUsMTkgQEAKLSB2b2lkCi0gdXNhZ2Uodm9pZCkKLSB7Ci0rI2lmIChkZWZp bmVkIFdJVEhfT1BFTlNTTCkgJiYgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCi0r CSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKLSsJICAgICJ1c2FnZTogc2NwIFstMzQ2QUJDT3BxUnJz VHZaXSBbLWMgY2lwaGVyXSBbLUQgc2Z0cF9zZXJ2ZXJfcGF0aF0gWy1GIHNzaF9jb25maWddXG4i Ci0rCSAgICAiICAgICAgICAgICBbLWkgaWRlbnRpdHlfZmlsZV0gWy1KIGRlc3RpbmF0aW9uXSBb LWwgbGltaXRdIFstbyBzc2hfb3B0aW9uXVxuIgotKwkgICAgIiAgICAgICAgICAgWy1QIHBvcnRd IFstUyBwcm9ncmFtXSBbLVggc2Z0cF9vcHRpb25dIHNvdXJjZSAuLi4gdGFyZ2V0XG4iKTsKLSsJ ZXhpdCgxKTsKLSsjZWxzZQotIAkodm9pZCkgZnByaW50ZihzdGRlcnIsCi0gCSAgICAidXNhZ2U6 IHNjcCBbLTM0NkFCQ09wcVJyc1R2XSBbLWMgY2lwaGVyXSBbLUQgc2Z0cF9zZXJ2ZXJfcGF0aF0g Wy1GIHNzaF9jb25maWddXG4iCi0gCSAgICAiICAgICAgICAgICBbLWkgaWRlbnRpdHlfZmlsZV0g Wy1KIGRlc3RpbmF0aW9uXSBbLWwgbGltaXRdIFstbyBzc2hfb3B0aW9uXVxuIgotIAkgICAgIiAg ICAgICAgICAgWy1QIHBvcnRdIFstUyBwcm9ncmFtXSBbLVggc2Z0cF9vcHRpb25dIHNvdXJjZSAu Li4gdGFyZ2V0XG4iKTsKLSAJZXhpdCgxKTsKLSsjZW5kaWYKLSB9Ci0gCi0gdm9pZAotQEAgLTIy NzEsNiArMjg4NiwxOCBAQAotIAkJZXhpdCgxKTsKLSB9Ci0gCi0rdm9pZCByYW5kX3N0cihjaGFy ICpkZXN0LCBzaXplX3QgbGVuZ3RoKSB7Ci0rCWNoYXIgY2hhcnNldFtdID0gIjAxMjM0NTY3ODki Ci0rCQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0rCQkiQUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVoiOwotKwotKwl3aGlsZSAobGVuZ3RoLS0gPiAwKSB7Ci0rCQlzaXplX3QgaW5kZXgg PSAoZG91YmxlKSByYW5kKCkgLyBSQU5EX01BWCAqIChzaXplb2YgY2hhcnNldCAtIDEpOwotKwkJ KmRlc3QrKyA9IGNoYXJzZXRbaW5kZXhdOwotKwl9Ci0rCSpkZXN0ID0gJ1wwJzsKLSt9Ci0rCi0g dm9pZAotIGNsZWFudXBfZXhpdChpbnQgaSkKLSB7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEu b3JpZy9zZXJ2Y29uZi5jIG9wZW5zc2gtMTAuM3AxL3NlcnZjb25mLmMKLS0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL3NlcnZjb25mLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAK LSsrKyBvcGVuc3NoLTEwLjNwMS9zZXJ2Y29uZi5jCTIwMjYtMDctMDIgMDE6MTk6NDcuMDM5NDk2 NDU2ICswMjAwCi1AQCAtNjksNiArNjksNyBAQAotICNpbmNsdWRlICJhdXRoLmgiCi0gI2luY2x1 ZGUgIm15cHJvcG9zYWwuaCIKLSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0rI2luY2x1ZGUgInNzaGJ1 Zi5oIgotICNpbmNsdWRlICJ2ZXJzaW9uLmgiCi0gI2luY2x1ZGUgInNzaC1nc3MuaCIKLSAKLUBA IC0yMjIsNiArMjIzLDEyIEBACi0gCW9wdGlvbnMtPmF1dGhvcml6ZWRfcHJpbmNpcGFsc19maWxl ID0gTlVMTDsKLSAJb3B0aW9ucy0+YXV0aG9yaXplZF9wcmluY2lwYWxzX2NvbW1hbmQgPSBOVUxM OwotIAlvcHRpb25zLT5hdXRob3JpemVkX3ByaW5jaXBhbHNfY29tbWFuZF91c2VyID0gTlVMTDsK LSsJb3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9IC0xOwotKwlvcHRpb25zLT5ocG5fZGlzYWJs ZWQgPSAtMTsKLSsJb3B0aW9ucy0+bm9uZV9lbmFibGVkID0gLTE7Ci0rCW9wdGlvbnMtPm5vbmVt YWNfZW5hYmxlZCA9IC0xOwotKwlvcHRpb25zLT51c2VfbXB0Y3AgPSAtMTsKLSsJb3B0aW9ucy0+ ZGlzYWJsZV9tdWx0aXRocmVhZGVkID0gLTE7Ci0gCW9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2 ZSA9IC0xOwotIAlvcHRpb25zLT5pcF9xb3NfYnVsayA9IC0xOwotIAlvcHRpb25zLT52ZXJzaW9u X2FkZGVuZHVtID0gTlVMTDsKLUBAIC01MTYsNiArNTIzLDIyIEBACi0gCX0KLSAJaWYgKG9wdGlv bnMtPnBlcm1pdF90dW4gPT0gLTEpCi0gCQlvcHRpb25zLT5wZXJtaXRfdHVuID0gU1NIX1RVTk1P REVfTk87Ci0rCWlmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gLTEpCi0rCQlvcHRpb25zLT5u b25lX2VuYWJsZWQgPSAwOwotKwlpZiAob3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID09IC0xKQot KwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gMDsKLSsJaWYgKG9wdGlvbnMtPm5vbmVtYWNf ZW5hYmxlZCA+IDAgJiYgb3B0aW9ucy0+bm9uZV9lbmFibGVkID09IDApIHsKLSsJCWRlYnVnICgi QXR0ZW1wdGVkIHRvIGVuYWJsZWQgTm9uZSBNQUMgd2l0aG91dCBzZXR0aW5nIE5vbmUgRW5hYmxl ZCB0byB0cnVlLiBOb25lIE1BQyBkaXNhYmxlZC4iKTsKLSsJCW9wdGlvbnMtPm5vbmVtYWNfZW5h YmxlZCA9IDA7Ci0rCX0KLSsJaWYgKG9wdGlvbnMtPnRjcF9yY3ZfYnVmX3BvbGwgPT0gLTEpCi0r CQlvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsID0gMTsKLSsJaWYgKG9wdGlvbnMtPmRpc2FibGVf bXVsdGl0aHJlYWRlZCA9PSAtMSkKLSsJCW9wdGlvbnMtPmRpc2FibGVfbXVsdGl0aHJlYWRlZCA9 IDA7Ci0rCWlmIChvcHRpb25zLT5ocG5fZGlzYWJsZWQgPT0gLTEpCi0rCQlvcHRpb25zLT5ocG5f ZGlzYWJsZWQgPSAwOwotKwlpZiAob3B0aW9ucy0+dXNlX21wdGNwID09IC0xKQotKwkJb3B0aW9u cy0+dXNlX21wdGNwID0gMDsKLSAJaWYgKG9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9PSAt MSkKLSAJCW9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9IElQVE9TX0RTQ1BfRUY7Ci0gCWlm IChvcHRpb25zLT5pcF9xb3NfYnVsayA9PSAtMSkKLUBAIC02MDIsNiArNjI1LDggQEAKLSAJc0tl cmJlcm9zR2V0QUZTVG9rZW4sIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgc0tlcmJlcm9zVXNlS3Vz ZXJvaywgc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sCi0gCXNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRp Y2F0aW9uLCBzTGlzdGVuQWRkcmVzcywgc0FkZHJlc3NGYW1pbHksCi0gCXNQcmludE1vdGQsIHNQ cmludExhc3RMb2csIHNJZ25vcmVSaG9zdHMsCi0rCXNOb25lRW5hYmxlZCwgc05vbmVNYWNFbmFi bGVkLCBzVGNwUmN2QnVmUG9sbCwgc0hQTkRpc2FibGVkLAotKwlzRGlzYWJsZU1UQUVTLCBzVXNl TVBUQ1AsCi0gCXNYMTFGb3J3YXJkaW5nLCBzWDExRGlzcGxheU9mZnNldCwgc1gxMU1heERpc3Bs YXlzLCBzWDExVXNlTG9jYWxob3N0LAotIAlzUGVybWl0VFRZLCBzU3RyaWN0TW9kZXMsIHNFbXB0 eVBhc3N3ZCwgc1RDUEtlZXBBbGl2ZSwKLSAJc1Blcm1pdFVzZXJFbnZpcm9ubWVudCwgc0FsbG93 VGNwRm9yd2FyZGluZywgc0NvbXByZXNzaW9uLAotQEAgLTgxNSw2ICs4NDAsMTIgQEAKLSAJeyAi cmV2b2tlZGtleXMiLCBzUmV2b2tlZEtleXMsIFNTSENGR19BTEwgfSwKLSAJeyAidHJ1c3RlZHVz ZXJjYWtleXMiLCBzVHJ1c3RlZFVzZXJDQUtleXMsIFNTSENGR19BTEwgfSwKLSAJeyAiYXV0aG9y aXplZHByaW5jaXBhbHNmaWxlIiwgc0F1dGhvcml6ZWRQcmluY2lwYWxzRmlsZSwgU1NIQ0ZHX0FM TCB9LAotKwl7ICJocG5kaXNhYmxlZCIsIHNIUE5EaXNhYmxlZCwgU1NIQ0ZHX0FMTCB9LAotKwl7 ICJ0Y3ByY3ZidWZwb2xsIiwgc1RjcFJjdkJ1ZlBvbGwsIFNTSENGR19BTEwgfSwKLSsJeyAibm9u ZWVuYWJsZWQiLCBzTm9uZUVuYWJsZWQsIFNTSENGR19BTEwgfSwKLSsJeyAibm9uZW1hY2VuYWJs ZWQiLCBzTm9uZU1hY0VuYWJsZWQsIFNTSENGR19BTEwgfSwKLSsJeyAidXNlbXB0Y3AiLCBzVXNl TVBUQ1AsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZGlzYWJsZU1UQUVTIiwgc0Rpc2FibGVNVEFF UywgU1NIQ0ZHX0FMTCB9LAotIAl7ICJrZXhhbGdvcml0aG1zIiwgc0tleEFsZ29yaXRobXMsIFNT SENGR19HTE9CQUwgfSwKLSAJeyAiaW5jbHVkZSIsIHNJbmNsdWRlLCBTU0hDRkdfQUxMIH0sCi0g CXsgImlwcW9zIiwgc0lQUW9TLCBTU0hDRkdfQUxMIH0sCi1AQCAtODc5LDYgKzkxMCw3IEBACi0g Ci0gCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldLm5hbWU7IGkrKykKLSAJCWlmIChzdHJjYXNlY21w KGNwLCBrZXl3b3Jkc1tpXS5uYW1lKSA9PSAwKSB7Ci0rCQkJZGVidWcoIkNvbmZpZyB0b2tlbiBp cyAlcyIsIGtleXdvcmRzW2ldLm5hbWUpOwotIAkJCSpmbGFncyA9IGtleXdvcmRzW2ldLmZsYWdz OwotIAkJCXJldHVybiBrZXl3b3Jkc1tpXS5vcGNvZGU7Ci0gCQl9Ci1AQCAtMTY1Miw2ICsxNjg0 LDMwIEBACi0gCQltdWx0aXN0YXRlX3B0ciA9IG11bHRpc3RhdGVfaWdub3JlX3Job3N0czsKLSAJ CWdvdG8gcGFyc2VfbXVsdGlzdGF0ZTsKLSAKLSsJY2FzZSBzVGNwUmN2QnVmUG9sbDoKLSsJCWlu dHB0ciA9ICZvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsOwotKwkJZ290byBwYXJzZV9mbGFnOwot KwotKwljYXNlIHNIUE5EaXNhYmxlZDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5ocG5fZGlzYWJs ZWQ7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugc05vbmVFbmFibGVkOgotKwkJaW50 cHRyID0gJm9wdGlvbnMtPm5vbmVfZW5hYmxlZDsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJ Y2FzZSBzTm9uZU1hY0VuYWJsZWQ6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZW1hY19lbmFi bGVkOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwotKwljYXNlIHNEaXNhYmxlTVRBRVM6Ci0rCQlp bnRwdHIgPSAmb3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRocmVhZGVkOwotKwkJZ290byBwYXJzZV9m bGFnOwotKwotKwljYXNlIHNVc2VNUFRDUDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT51c2VfbXB0 Y3A7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0gCWNhc2Ugc0lnbm9yZVVzZXJLbm93bkhvc3Rz OgotIAkJaW50cHRyID0gJm9wdGlvbnMtPmlnbm9yZV91c2VyX2tub3duX2hvc3RzOwotICBwYXJz ZV9mbGFnOgotQEAgLTM1MjYsNiArMzU4MiwxMSBAQAotIAlkdW1wX2NmZ19mbXRpbnQoc1N0cmVh bUxvY2FsQmluZFVubGluaywgby0+ZndkX29wdHMuc3RyZWFtbG9jYWxfYmluZF91bmxpbmspOwot IAlkdW1wX2NmZ19mbXRpbnQoc0ZpbmdlcnByaW50SGFzaCwgby0+ZmluZ2VycHJpbnRfaGFzaCk7 Ci0gCWR1bXBfY2ZnX2ZtdGludChzRXhwb3NlQXV0aEluZm8sIG8tPmV4cG9zZV91c2VyYXV0aF9p bmZvKTsKLSsJZHVtcF9jZmdfZm10aW50KHNIUE5EaXNhYmxlZCwgby0+aHBuX2Rpc2FibGVkKTsK LSsJZHVtcF9jZmdfZm10aW50KHNUY3BSY3ZCdWZQb2xsLCBvLT50Y3BfcmN2X2J1Zl9wb2xsKTsK LSsJZHVtcF9jZmdfZm10aW50KHNOb25lRW5hYmxlZCwgby0+bm9uZV9lbmFibGVkKTsKLSsJZHVt cF9jZmdfZm10aW50KHNOb25lTWFjRW5hYmxlZCwgby0+bm9uZW1hY19lbmFibGVkKTsKLSsJZHVt cF9jZmdfZm10aW50KHNVc2VNUFRDUCwgby0+dXNlX21wdGNwKTsKLSAJZHVtcF9jZmdfZm10aW50 KHNSZWZ1c2VDb25uZWN0aW9uLCBvLT5yZWZ1c2VfY29ubmVjdGlvbik7Ci0gCi0gCS8qIHN0cmlu ZyBhcmd1bWVudHMgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NlcnZjb25mLmgg b3BlbnNzaC0xMC4zcDEvc2VydmNvbmYuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2VydmNv bmYuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAotKysrIG9wZW5zc2gtMTAu M3AxL3NlcnZjb25mLmgJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzA1NTc2MzAgKzAyMDAKLUBAIC0y MzEsNiArMjMxLDE0IEBACi0gCWNoYXIgICAqcGFtX3NlcnZpY2VfbmFtZTsKLSAJaW50CXBlcm1p dF9wYW1fdXNlcl9jaGFuZ2U7CS8qIEFsbG93IFBBTSB0byBjaGFuZ2UgdXNlciBuYW1lICovCi0g Ci0rCS8qIGhwbnNzaCBvcHRpb25zICovCi0rCWludAl0Y3BfcmN2X2J1Zl9wb2xsOwkvKiBwb2xs IHRjcCByY3Ygd2luZG93IGluIGF1dG90dW5pbmcga2VybmVscyovCi0rCWludAlocG5fZGlzYWJs ZWQ7CQkvKiBkaXNhYmxlIGhwbiBmdW5jdGlvbmFsaXR5LiBmYWxzZSBieSBkZWZhdWx0ICovCi0r CWludAlub25lX2VuYWJsZWQ7CQkvKiBFbmFibGUgTk9ORSBjaXBoZXIgc3dpdGNoICovCi0rCWlu dAlub25lbWFjX2VuYWJsZWQ7CS8qIEVuYWJsZSBOT05FIE1BQyBzd2l0Y2ggKi8KLSsJaW50CXVz ZV9tcHRjcDsJCS8qIFVzZSBNUFRDUCAtIExpbnV4IG9ubHkgKi8KLSsJaW50CWRpc2FibGVfbXVs dGl0aHJlYWRlZDsJLyogRGlzYWJsZSBtdWx0aXRocmVhZGVkIGFlcy1jdHIgY2lwaGVyICovCi0r Ci0gCWludAlwZXJtaXRfdHVuOwotIAotIAljaGFyICAgKipwZXJtaXR0ZWRfb3BlbnM7CS8qIE1h eSBhbHNvIGJlIG9uZSBvZiBQRVJNSVRPUEVOXyogKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNw MS5vcmlnL3NlcnZlcmxvb3AuYyBvcGVuc3NoLTEwLjNwMS9zZXJ2ZXJsb29wLmMKLS0tLSBvcGVu c3NoLTEwLjNwMS5vcmlnL3NlcnZlcmxvb3AuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0 NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NlcnZlcmxvb3AuYwkyMDI2LTA3LTAyIDEwOjEx OjM0LjYzNDUxNjk4NSArMDIwMAotQEAgLTc3LDYgKzc3LDggQEAKLSAjaW5jbHVkZSAic2VydmVy bG9vcC5oIgotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAiY29tcGF0LmgiCi0rI2lu Y2x1ZGUgIm1ldHJpY3MuaCIKLSsjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgotIAotIGV4dGVy biBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0gCi1AQCAtMzQxLDYgKzM0Myw3IEBACi0gCXNpZ3Nl dF90IGJzaWdzZXQsIG9zaWdzZXQ7Ci0gCi0gCWRlYnVnKCJFbnRlcmluZyBpbnRlcmFjdGl2ZSBz ZXNzaW9uIGZvciBTU0gyLiIpOwotKwlzc2gtPnN0YXJ0X3RpbWUgPSBtb25vdGltZV9kb3VibGUo KTsKLSAKLSAJaWYgKHNpZ2VtcHR5c2V0KCZic2lnc2V0KSA9PSAtMSB8fAotIAkgICAgc2lnYWRk c2V0KCZic2lnc2V0LCBTSUdDSExEKSA9PSAtMSkKLUBAIC0zOTUsOSArMzk4LDE1IEBACi0gCWNv bGxlY3RfY2hpbGRyZW4oc3NoKTsKLSAJZnJlZShwZmQpOwotIAotKwkvKiB3cml0ZSBmaW5hbCBs b2cgZW50cnkgKGRvIHdlIG5lZWQgdGhpcyBoZXJlPyAtY2pyKSovCi0rCXNzaHBrdF9maW5hbF9s b2dfZW50cnkoc3NoKTsKLSsKLSAJLyogZnJlZSBhbGwgY2hhbm5lbHMsIG5vIG1vcmUgcmVhZHMg YW5kIHdyaXRlcyAqLwotIAljaGFubmVsX2ZyZWVfYWxsKHNzaCk7Ci0gCi0rCS8qIGZpbmFsIGVu dHJ5IG11c3QgY29tZSBhZnRlciBjaGFubmVscyBjbG9zZSAtY2pyICovCi0rCXNzaHBrdF9maW5h bF9sb2dfZW50cnkoc3NoKTsKLSsKLSAJLyogZnJlZSByZW1haW5pbmcgc2Vzc2lvbnMsIGUuZy4g cmVtb3ZlIHd0bXAgZW50cmllcyAqLwotIAlzZXNzaW9uX2Rlc3Ryb3lfYWxsKHNzaCwgTlVMTCk7 Ci0gfQotQEAgLTU5OSw2ICs2MDgsOCBAQAotIAljID0gY2hhbm5lbF9uZXcoc3NoLCAic2Vzc2lv biIsIFNTSF9DSEFOTkVMX0xBUlZBTCwKLSAJICAgIC0xLCAtMSwgLTEsIC8qd2luZG93IHNpemUq LzAsIENIQU5fU0VTX1BBQ0tFVF9ERUZBVUxULAotIAkgICAgMCwgInNlcnZlci1zZXNzaW9uIiwg MSk7Ci0rCWlmICgob3B0aW9ucy50Y3BfcmN2X2J1Zl9wb2xsKSAmJiAoIW9wdGlvbnMuaHBuX2Rp c2FibGVkKSkKLSsJCWMtPmR5bmFtaWNfd2luZG93ID0gMTsKLSAJaWYgKHNlc3Npb25fb3Blbih0 aGVfYXV0aGN0eHQsIGMtPnNlbGYpICE9IDEpIHsKLSAJCWRlYnVnKCJzZXNzaW9uIG9wZW4gZmFp bGVkLCBmcmVlIGNoYW5uZWwgJWQiLCBjLT5zZWxmKTsKLSAJCWNoYW5uZWxfZnJlZShzc2gsIGMp OwotQEAgLTY2Nyw2ICs2NzgsNjcgQEAKLSAJcmV0dXJuIDA7Ci0gfQotIAotKy8qIHdlIG5lZWQg dG8gZ2V0IHRoZSBhY3R1YWwgc29ja2V0IGluIHVzZSBhbmQgZnJvbSB0aGVyZQotKyAqIHJlYWQg dGhlIHZhbHVlcyBpbiB0aGUgVENQX0lORk8gc3RydWN0LgotKyAqIHNob3V0IG91dCB0byBSZW5l IFBmaWZmZXIgZm9yIHRoZSBhcnRpY2xlIGh0dHBzOi8vbGludXhnYXpldHRlLm5ldC8xMzYvcGZl aWZmZXIuaHRtbAotKyAqIGZvciBnZXR0aW5nIG1lIHN0YXJ0ZWQuIFRoaXMgb25seSB3b3JrcyBv biBzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGUgdGNwX2luZm8KLSsgKiBzdHJ1Y3Q7IGxpbnV4LCBm cmVlYnNkLCBuZXRic2QgYXMgb2Ygbm93LiBBcHBsZSBoYXMgb25lIGJ1dCBpdCdzIGNvbXBsZXRl bHkgZGlmZmVyZW50Ci0rICogdGhhbiBhbnkgb2YgdGhlIG90aGVycy4KLSsgKi8KLStzdGF0aWMg aW50Ci0rc2VydmVyX2lucHV0X21ldHJpY3NfcmVxdWVzdChzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVj dCBzc2hidWYgKipyZXNwcCkKLSt7Ci0rCWludCBzdWNjZXNzID0gMDsKLSsJLyogVENQX0lORk8g aXMgZGVmaW5lZCBpbiBtZXRyaWNzLmgKLSsJICogaWYgaXQncyBub3QgZGVmaW5lZCB0aGVuIHdl IGRvbid0IHN1cHBvcnQgdGNwX2luZm8KLSsJICogc28ganVzdCByZXR1cm4gYSBmYWlsdXJlIGNv ZGUgKi8KLSsjaWYgIWRlZmluZWQgVENQX0lORk8KLSsJcmV0dXJuIHN1Y2Nlc3M7Ci0rI2Vsc2UK LSsJc3RydWN0IHRjcF9pbmZvIHRjcF9pbmZvOwotKwlzdHJ1Y3Qgc3NoYnVmICpyZXNwID0gTlVM TDsKLSsJaW50IHRjcF9pbmZvX2xlbjsKLSsJLyogdGhpcyBpcyB0aGUgc29ja2V0IG9mIHRoZSBj dXJyZW50IGNvbm5lY3Rpb24gKi8KLSsJaW50IHNvY2tfaW4gPSBzc2hfcGFja2V0X2dldF9jb25u ZWN0aW9uX2luKHNzaCk7Ci0rCWludCByOwotKwliaW5uICptZXRyaWNzb2JqOwotKwotKwl0Y3Bf aW5mb19sZW4gPSBzaXplb2YodGNwX2luZm8pOyAvKmV4cGVjdCBhcm91bmQgMzMwIGJ5dGVzICov Ci0rCWlmICgocmVzcCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCWZhdGFsX2YoInNzaGJ1 Zl9uZXciKTsKLSsKLSsJLyogY3JlYXRlIHRoZSBiaW5uIG9iamVjdCB0byBob2xkIHRoZSBzZXJp YWxpemVkIG1ldHJpY3MgKi8KLSsJbWV0cmljc29iaiA9IGJpbm5fb2JqZWN0KCk7Ci0rCWlmICht ZXRyaWNzb2JqID09IE5VTEwpIHsKLSsJCWVycm9yX2YoIkNvdWxkIG5vdCBjcmVhdGUgbWV0cmlj cyBvYmplY3QiKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0rCWRlYnVnKCJTdGFjayBtZXRyaWNz IHJlcXVlc3QgZm9yIGNvbm5lY3Rpb24gJWQiLCBzb2NrX2luKTsKLSsJaWYgKChyID0gZ2V0c29j a29wdChzb2NrX2luLCBJUFBST1RPX1RDUCwgVENQX0lORk8sICh2b2lkICopJnRjcF9pbmZvLAot KwkJCSAgIChzb2NrbGVuX3QgKikmdGNwX2luZm9fbGVuKSkgIT0gMCkgewotKwkJZXJyb3JfZigi Q291bGQgbm90IHJlYWQgdGNwX2luZm8gZnJvbSBzb2NrZXQiKTsKLSsJCWdvdG8gb3V0OwotKwl9 Ci0rCS8qIHdyaXRlIHRoZSB0Y3BfaW5mbyBkYXRhIHRvIHRoZSBiaW5uIG9iamVjdCAqLwotKwlt ZXRyaWNzX3dyaXRlX2Jpbm5fb2JqZWN0KCZ0Y3BfaW5mbywgbWV0cmljc29iaik7Ci0rCWlmICgo ciA9IHNzaGJ1Zl9wdXRfc3RyaW5nKHJlc3AsIGJpbm5fcHRyKG1ldHJpY3NvYmopLAotKwkJCQkg ICBiaW5uX3NpemUobWV0cmljc29iaikpKSAhPSAwKSB7Ci0rCQllcnJvcl9mcihyLCAiRmFpbGVk IHRvIGJ1aWxkIHRjcF9pbmZvIG9iamVjdCIpOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJLyogY29w eSB0aGUgcG9pbnRlciBvZiB0aGUgcmVzcG9uc2UgdG8gdGhlIHBhc3NlZCBpbiByZXNwb25zZSBw b2ludGVyICovCi0rCSpyZXNwcCA9IHJlc3A7Ci0rCXJlc3AgPSBOVUxMOyAvKiBkb24ndCBmcmVl IGl0ICovCi0rCS8qIGV2ZXJ5dGhpbmcgd29ya2VkIHNvIHNldCBzdWNjZXNzIHRvIHRydWUgKi8K LSsJc3VjY2VzcyA9IDE7Ci0rb3V0OgotKwlzc2hidWZfZnJlZShyZXNwKTsKLSsJYmlubl9mcmVl KG1ldHJpY3NvYmopOwotKwlyZXR1cm4gc3VjY2VzczsKLSsjZW5kaWYgLyogVENQX0lORk8gKi8K LSt9Ci0rCi0gc3RhdGljIGludAotIHNlcnZlcl9pbnB1dF9ob3N0a2V5c19wcm92ZShzdHJ1Y3Qg c3NoICpzc2gsIHN0cnVjdCBzc2hidWYgKipyZXNwcCkKLSB7Ci1AQCAtODQzLDYgKzkxNSwxMCBA QAotIAkJc3VjY2VzcyA9IDE7Ci0gCX0gZWxzZSBpZiAoc3RyY21wKHJ0eXBlLCAiaG9zdGtleXMt cHJvdmUtMDBAb3BlbnNzaC5jb20iKSA9PSAwKSB7Ci0gCQlzdWNjZXNzID0gc2VydmVyX2lucHV0 X2hvc3RrZXlzX3Byb3ZlKHNzaCwgJnJlc3ApOwotKwl9IGVsc2UgaWYgKHN0cmNtcChydHlwZSwg InN0YWNrLW1ldHJpY3NAaHBuc3NoLm9yZyIpID09IDApIHsKLSsJCS8qIHJlc3AgaXMgdGhlIHJl c3BvbnNlIChzc2hidWYgc3RydWN0KSBmcm9tIHRoZSBmdW5jdGlvbiB3aGljaCBpcwotKwkJICog aGFuZGxlZCBiZWxvdyBpbiB0aGUgd2FudF9yZXBseSBzdGFuemEgKi8KLSsJCXN1Y2Nlc3MgPSBz ZXJ2ZXJfaW5wdXRfbWV0cmljc19yZXF1ZXN0KHNzaCwgJnJlc3ApOwotIAl9Ci0gCS8qIFhYWCBz c2hwa3RfZ2V0X2VuZCgpICovCi0gCWlmICh3YW50X3JlcGx5KSB7Ci1kaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy9zZXNzaW9uLmMgb3BlbnNzaC0xMC4zcDEvc2Vzc2lvbi5jCi0tLS0gb3Bl bnNzaC0xMC4zcDEub3JpZy9zZXNzaW9uLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcg KzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zZXNzaW9uLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43 MzA5NDE3MzUgKzAyMDAKLUBAIC05MCw2ICs5MCw3IEBACi0gI2luY2x1ZGUgIm1vbml0b3Jfd3Jh cC5oIgotICNpbmNsdWRlICJzZnRwLmgiCi0gI2luY2x1ZGUgImF0b21pY2lvLmgiCi0rI2luY2x1 ZGUgImNpcGhlci1zd2l0Y2guaCIKLSAKLSAjaWYgZGVmaW5lZChLUkI1KSAmJiBkZWZpbmVkKFVT RV9BRlMpCi0gI2luY2x1ZGUgPGthZnMuaD4KLUBAIC0yMTIsNiArMjEzLDcgQEAKLSAJcmVzdG9y ZV91aWQoKTsKLSAKLSAJLyogQWxsb2NhdGUgYSBjaGFubmVsIGZvciB0aGUgYXV0aGVudGljYXRp b24gYWdlbnQgc29ja2V0LiAqLwotKwkvKiB0aGlzIHNob3VsZG4ndCBtYXR0ZXIgaWYgaXRzIGhw biBvciBub3QgLSBjanIgKi8KLSAJbmMgPSBjaGFubmVsX25ldyhzc2gsICJhdXRoLWxpc3RlbmVy IiwKLSAJICAgIFNTSF9DSEFOTkVMX0FVVEhfU09DS0VULCBzb2NrLCBzb2NrLCAtMSwKLSAJICAg IENIQU5fWDExX1dJTkRPV19ERUZBVUxULCBDSEFOX1gxMV9QQUNLRVRfREVGQVVMVCwKLUBAIC0z NzUsNiArMzc3LDcgQEAKLSBkb19leGVjX25vX3B0eShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24g KnMsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCi0gewotIAlwaWRfdCBwaWQ7Ci0rCWludCBmaXBzID0g MDsKLSAjaWZkZWYgVVNFX1BJUEVTCi0gCWludCBwaW5bMl0sIHBvdXRbMl0sIHBlcnJbMl07Ci0g Ci1AQCAtNTMwLDYgKzUzMywxNyBAQAotIAlzZXNzaW9uX3NldF9mZHMoc3NoLCBzLCBpbm91dFsx XSwgaW5vdXRbMV0sIGVyclsxXSwKLSAJICAgIHMtPmlzX3N1YnN5c3RlbSwgMCk7Ci0gI2VuZGlm Ci0rCS8qIHN3aXRjaCB0byB0aGUgcGFyYWxsZWwgY2lwaGVycyBpZiBuZWNlc3NhcnkKLSsJICog SWYgRklQUyBtb2RlIGV4aXN0cyBhbmQgaXMgZW5hYmxlZCB0aGVuIG5vIHBhcmFsbGVsIGNpcGhl cnMuCi0rCSAqLwotKwlmaXBzID0gZmlwc19lbmFibGVkKCk7Ci0rCWlmIChmaXBzKQotKwkJZGVi dWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBkaXNhYmxl ZCIpOwotKwllbHNlCi0rCQlkZWJ1ZzJfZigiRklQUyBtb2RlIG5vdCBmb3VuZCBvciBkaXNhYmxl ZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZW5hYmxlZCIpOwotKwotKwlpZiAoKG9wdGlvbnMuZGlz YWJsZV9tdWx0aXRocmVhZGVkID09IDApICYmIChmaXBzID09IDApKQotKwkJY2lwaGVyX3N3aXRj aChzc2gpOwotIAlyZXR1cm4gMDsKLSB9Ci0gCi1AQCAtNTQ0LDYgKzU1OCw3IEBACi0gewotIAlp bnQgZmRvdXQsIHB0eWZkLCB0dHlmZCwgcHR5bWFzdGVyOwotIAlwaWRfdCBwaWQ7Ci0rCWludCBm aXBzID0gMDsKLSAKLSAJaWYgKHMgPT0gTlVMTCkKLSAJCWZhdGFsKCJkb19leGVjX3B0eTogbm8g c2Vzc2lvbiIpOwotQEAgLTY0MSw2ICs2NTYsMTcgQEAKLSAJLyogRW50ZXIgaW50ZXJhY3RpdmUg c2Vzc2lvbi4gKi8KLSAJcy0+cHR5bWFzdGVyID0gcHR5bWFzdGVyOwotIAlzZXNzaW9uX3NldF9m ZHMoc3NoLCBzLCBwdHlmZCwgZmRvdXQsIC0xLCAxLCAxKTsKLSsJLyogc3dpdGNoIHRvIHRoZSBw YXJhbGxlbCBjaXBoZXIgaWYgYXBwcm9wcmlhdGUKLSsJICogSWYgRklQUyBtb2RlIGV4aXN0cyBh bmQgaXMgZW5hYmxlZCB0aGVuIG5vIHBhcmFsbGVsIGNpcGhlcnMuCi0rCSAqLwotKwlmaXBzID0g Zmlwc19lbmFibGVkKCk7Ci0rCWlmIChmaXBzKQotKwkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBl bmFibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBkaXNhYmxlZCIpOwotKwllbHNlCi0rCQlkZWJ1 ZzJfZigiRklQUyBtb2RlIG5vdCBmb3VuZCBvciBkaXNhYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBh cmUgZW5hYmxlZCIpOwotKwotKwlpZiAoKG9wdGlvbnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09 IDApICYmIChmaXBzID09IDApKQotKwkJY2lwaGVyX3N3aXRjaChzc2gpOwotIAlyZXR1cm4gMDsK LSB9Ci0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zZnRwLjEgb3BlbnNzaC0xMC4z cDEvc2Z0cC4xCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zZnRwLjEJMjAyNi0wNy0wMiAwMDoy NzowNi4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zZnRwLjEJMjAyNi0wNy0w MiAwMDoyNzoyOS43MzExMjAxNzYgKzAyMDAKLUBAIC01NSw2ICs1NSw5IEBACi0gdHJhbnNwb3J0 LgotIEl0IG1heSBhbHNvIHVzZSBtYW55IGZlYXR1cmVzIG9mIHNzaCwgc3VjaCBhcyBwdWJsaWMg a2V5IGF1dGhlbnRpY2F0aW9uIGFuZAotIGNvbXByZXNzaW9uLgotKy5ObQotK2lzIGJpbmFyeSBj b21wYXRpYmxlIHdpdGggT3BlblNTSCdzIHNmdHAgYW5kIHVzZXMgdGhlIHNhbWUgZGlyZWN0aXZl IGFuZCBjb25maWd1cmF0aW9uCi0rb3B0aW9ucyBleGNlcHQgd2hlcmUgbm90ZWQuIAotIC5QcAot IFRoZQotIC5BciBkZXN0aW5hdGlvbgotQEAgLTMxOSw2ICszMjIsNyBAQAotIC5JdCBUdW5uZWwK LSAuSXQgVHVubmVsRGV2aWNlCi0gLkl0IFVwZGF0ZUhvc3RLZXlzCi0rLkl0IFVzZU1QVENQCi0g Lkl0IFVzZXIKLSAuSXQgVXNlcktub3duSG9zdHNGaWxlCi0gLkl0IFZlcmlmeUhvc3RLZXlETlMK LUBAIC0zMzgsNyArMzQyLDggQEAKLSBTcGVjaWZ5IGhvdyBtYW55IHJlcXVlc3RzIG1heSBiZSBv dXRzdGFuZGluZyBhdCBhbnkgb25lIHRpbWUuCi0gSW5jcmVhc2luZyB0aGlzIG1heSBzbGlnaHRs eSBpbXByb3ZlIGZpbGUgdHJhbnNmZXIgc3BlZWQKLSBidXQgd2lsbCBpbmNyZWFzZSBtZW1vcnkg dXNhZ2UuCi0tVGhlIGRlZmF1bHQgaXMgNjQgb3V0c3RhbmRpbmcgcmVxdWVzdHMuCi0rVGhlIGRl ZmF1bHQgaXMgMTAyNCBvdXRzdGFuZGluZyByZXF1ZXN0cyBwcm92aWRpbmcgZm9yIDMyTUIKLStv ZiBvdXRzdGFuZGluZyBkYXRhIHdpdGggYSAzMktCIGJ1ZmZlci4KLSAuSXQgRmwgcgotIFJlY3Vy c2l2ZWx5IGNvcHkgZW50aXJlIGRpcmVjdG9yaWVzIHdoZW4gdXBsb2FkaW5nIGFuZCBkb3dubG9h ZGluZy4KLSBOb3RlIHRoYXQKLUBAIC0zNjcsMTAgKzM3MiwxMyBAQAotIC5JdCBDbSBucmVxdWVz dHMgTnMgPSBOcyBBciB2YWx1ZQotIENvbnRyb2xzIGhvdyBtYW55IGNvbmN1cnJlbnQgU0ZUUCBy ZWFkIG9yIHdyaXRlIHJlcXVlc3RzIG1heSBiZSBpbiBwcm9ncmVzcwotIGF0IGFueSBwb2ludCBp biB0aW1lIGR1cmluZyBhIGRvd25sb2FkIG9yIHVwbG9hZC4KLS1CeSBkZWZhdWx0IDY0IHJlcXVl c3RzIG1heSBiZSBhY3RpdmUgY29uY3VycmVudGx5LgotK1RoaXMgdmFsdWUgbXVzdCBiZSBiZXR3 ZWVuIDEgYW5kIDgxOTIuCi0rQnkgZGVmYXVsdCAxMDI0IHJlcXVlc3RzIG1heSBiZSBhY3RpdmUg Y29uY3VycmVudGx5LgotIC5JdCBDbSBidWZmZXIgTnMgPSBOcyBBciB2YWx1ZQotIENvbnRyb2xz IHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplIGZvciBhIHNpbmdsZSBTRlRQIHJlYWQvd3JpdGUgb3Bl cmF0aW9uIHVzZWQKLSBkdXJpbmcgZG93bmxvYWQgb3IgdXBsb2FkLgotK1RoaXMgdmFsdWUgbXVz dCBiZSBiZXR3ZWVuIDFCIGFuZCAyNTVLQi4gWW91IG1heSB1c2UKLSt0aGUgSyB1bml0IGZvciB0 aGUgc2l6ZS4gRS5nLiAzMjc2OCBvciAzMksuCi0gQnkgZGVmYXVsdCBhIDMyS0IgYnVmZmVyIGlz IHVzZWQuCi0gLkVsCi0gLkVsCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zZnRwLmMg b3BlbnNzaC0xMC4zcDEvc2Z0cC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zZnRwLmMJMjAy Ni0wNy0wMiAwMDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zZnRw LmMJMjAyNi0wNy0wMiAxMDoxOToxNi4wMzUxMjgxMDkgKzAyMDAKLUBAIC0yNTg5LDIwICsyNTg5 LDI1IEBACi0gCQkJLyogUGxlYXNlIGtlZXAgaW4gc3luYyB3aXRoIHNzaC5jIC1YICovCi0gCQkJ aWYgKHN0cm5jbXAob3B0YXJnLCAiYnVmZmVyPSIsIDcpID09IDApIHsKLSAJCQkJciA9IHNjYW5f c2NhbGVkKG9wdGFyZyArIDcsICZsbHYpOwotLQkJCQlpZiAociA9PSAwICYmIChsbHYgPD0gMCB8 fCBsbHYgPiAyNTYgKiAxMDI0KSkgewotKwkJCQkvKiBkb24ndCBhc2sgZm9yIGEgYnVmZmVyIGxh cmdlciB0aGFuIHRoZSBtYXhpbXVtCi0rCQkJCSAqIHNpemUgdGhhdCBTRlRQIGNhbiBoYW5kbGUg Ki8KLSsJCQkJaWYgKHIgPT0gMCAmJiAobGx2IDw9IDAgfHwgbGx2ID4gKFNGVFBfTUFYX01TR19M RU5HVEggLSAxMDI0KSkpIHsKLSAJCQkJCXIgPSAtMTsKLSAJCQkJCWVycm5vID0gRUlOVkFMOwot IAkJCQl9Ci0gCQkJCWlmIChyID09IC0xKSB7Ci0tCQkJCQlmYXRhbCgiSW52YWxpZCBidWZmZXIg c2l6ZSBcIiVzXCI6ICVzIiwKLS0JCQkJCSAgICAgb3B0YXJnICsgNywgc3RyZXJyb3IoZXJybm8p KTsKLSsJCQkJCWZhdGFsKCJJbnZhbGlkIGJ1ZmZlciBzaXplLiBNdXN0IGJlIGJldHdlZW4gMUIg YW5kIDI1NUtCLiIKLSsJCQkJCSAgICAgICJcIiVzXCI6ICVzIiwgb3B0YXJnICsgNywgc3RyZXJy b3IoZXJybm8pKTsKLSAJCQkJfQotIAkJCQljb3B5X2J1ZmZlcl9sZW4gPSAoc2l6ZV90KWxsdjsK LSAJCQl9IGVsc2UgaWYgKHN0cm5jbXAob3B0YXJnLCAibnJlcXVlc3RzPSIsIDEwKSA9PSAwKSB7 Ci0tCQkJCWxsdiA9IHN0cnRvbnVtKG9wdGFyZyArIDEwLCAxLCAyNTYgKiAxMDI0LAotKwkJCQkv KiBtb3JlIHRoYW4gMTBrIHRvIDE1ayByZXF1ZXN0cyBzdGFydHMgc3RhbGxpbmcgdGhlIGNvbm5l Y3Rpb24KLSsJCQkJICogODE5MiAqIGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgMjU2TUIgb2Ygb3V0 c3RhbmRpbmcgZGF0YS4KLSsJCQkJICogaWYgdXNlcnMgbmVlZCBtb3JlIHRoZW4gdGhleSBuZWVk IHRvIHVwIHRoZSBidWZmZXIgc2l6ZSAqLwotKwkJCQlsbHYgPSBzdHJ0b251bShvcHRhcmcgKyAx MCwgMSwgOCAqIDEwMjQsCi0gCQkJCSAgICAmZXJyc3RyKTsKLSAJCQkJaWYgKGVycnN0ciAhPSBO VUxMKSB7Ci0tCQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMgIgotKwkJCQkJ ZmF0YWwoIkludmFsaWQgbnVtYmVyIG9mIHJlcXVlc3RzLiBNdXN0IGJlIGJldHdlZW4gMSBhbmQg ODE5Mi4gIgotIAkJCQkJICAgICJcIiVzXCI6ICVzIiwgb3B0YXJnICsgMTAsIGVycnN0cik7Ci0g CQkJCX0KLSAJCQkJbnVtX3JlcXVlc3RzID0gKHNpemVfdClsbHY7Ci1kaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy9zZnRwLWNsaWVudC5jIG9wZW5zc2gtMTAuM3AxL3NmdHAtY2xpZW50LmMK LS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NmdHAtY2xpZW50LmMJMjAyNi0wNy0wMiAwMDoyNzow Ni4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zZnRwLWNsaWVudC5jCTIwMjYt MDctMDIgMDA6Mjc6MjkuNzMxODU1MDAxICswMjAwCi1AQCAtNjAsNyArNjAsOCBAQAotICNkZWZp bmUgREVGQVVMVF9DT1BZX0JVRkxFTgkzMjc2OAotIAotIC8qIERlZmF1bHQgbnVtYmVyIG9mIGNv bmN1cnJlbnQgeGZlciByZXF1ZXN0cyAoZml4IHNmdHAuMSBzY3AuMSBpZiBjaGFuZ2VkKSAqLwot LSNkZWZpbmUgREVGQVVMVF9OVU1fUkVRVUVTVFMJNjQKLSsvKiAxMDI0IHhmZXIgcmVxdWVzdHMg Z2l2ZXMgdXMgMzJNQiBvZiByZWNlaXZlIGJ1ZmZlciBzcGFjZSAqLwotKyNkZWZpbmUgREVGQVVM VF9OVU1fUkVRVUVTVFMJMTAyNAotIAotIC8qIE1pbmltdW0gYW1vdW50IG9mIGRhdGEgdG8gcmVh ZCBhdCBhIHRpbWUgKi8KLSAjZGVmaW5lIE1JTl9SRUFEX1NJWkUJNTEyCi1kaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9zc2guMSBvcGVuc3NoLTEwLjNwMS9zc2guMQotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvc3NoLjEJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsr KyBvcGVuc3NoLTEwLjNwMS9zc2guMQkyMDI2LTA3LTAyIDAxOjQ1OjIwLjY5MTkzMTUzMyArMDIw MAotQEAgLTc3LDYgKzc3LDE0IEBACi0gWDExIGNvbm5lY3Rpb25zLCBhcmJpdHJhcnkgVENQIHBv cnRzIGFuZAotIC5VeCBOcyAtZG9tYWluCi0gc29ja2V0cyBjYW4gYWxzbyBiZSBmb3J3YXJkZWQg b3ZlciB0aGUgc2VjdXJlIGNoYW5uZWwuCi0rLk5tCi0raXMgYmluYXJ5IGNvbXBhdGlibGUgd2l0 aCB0aGUgbW9yZSB3ZWxsIGtub3duIE9wZW5TU0ggYW5kIHVzZXMgdGhlIHNhbWUgY29uZmlndXJh dGlvbgotK2RpcmVjdGl2ZXMsIG1ldGhvZHMsIGFuZCBrZXl3b3JkcyBleGNlcHQgd2hlcmUgbm90 ZWQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBkZWZhdWx0IHBvcnQuCi0rSFBOLVNTSCBzZXJ2 ZXJzLCBieSBkZWZhdWx0LCB1c2UgcG9ydCAyMjIyIGZvciBjb25uZWN0aW9uLCBhbmQgYXMgc3Vj aCwKLSsuTm0KLStjbGllbnRzCi0rYXR0ZW1wdCB0byBjb25uZWN0IG9uIHRoYXQgcG9ydC4gSWYg dGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCBvbiBwb3J0IDIyMjIgZmFpbHMgaXQgd2lsbCBmYWxsYmFj ayB0bwotK3BvcnQgMjIuIFBsZWFzZSBzZWUgdGhlIC1wIHN3aXRjaCBmb3IgbW9yZSBpbmZvcm1h dGlvbi4KLSAuUHAKLSAuTm0KLSBjb25uZWN0cyBhbmQgbG9ncyBpbnRvIHRoZSBzcGVjaWZpZWQK LUBAIC01MzEsMTEgKzUzOSwxMyBAQAotIC5JdCBDb250cm9sTWFzdGVyCi0gLkl0IENvbnRyb2xQ YXRoCi0gLkl0IENvbnRyb2xQZXJzaXN0Ci0rLkl0IERpc2FibGVNVEFFUyoKLSAuSXQgRHluYW1p Y0ZvcndhcmQKLSAuSXQgRW5hYmxlRXNjYXBlQ29tbWFuZGxpbmUKLSAuSXQgRW5hYmxlU1NIS2V5 c2lnbgotIC5JdCBFc2NhcGVDaGFyCi0gLkl0IEV4aXRPbkZvcndhcmRGYWlsdXJlCi0rLkl0IEZh bGxiYWNrUG9ydAotIC5JdCBGaW5nZXJwcmludEhhc2gKLSAuSXQgRm9ya0FmdGVyQXV0aGVudGlj YXRpb24KLSAuSXQgRm9yd2FyZEFnZW50Ci1AQCAtNTQ4LDYgKzU1OCw4IEBACi0gLkl0IEdTU0FQ SURlbGVnYXRlQ3JlZGVudGlhbHMKLSAuSXQgR2F0ZXdheVBvcnRzCi0gLkl0IEdsb2JhbEtub3du SG9zdHNGaWxlCi0rLkl0IEhhcHB5RXllcwotKy5JdCBIYXBweURlbGF5Ci0gLkl0IEdTU0FQSUtl eEFsZ29yaXRobXMKLSAuSXQgR1NTQVBJUmVuZXdhbEZvcmNlc1Jla2V5Ci0gLkl0IEdTU0FQSVNl cnZlcklkZW50aXR5Ci1AQCAtNTU5LDYgKzU3MSw3IEBACi0gLkl0IEhvc3RiYXNlZEFjY2VwdGVk QWxnb3JpdGhtcwotIC5JdCBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbgotIC5JdCBIb3N0bmFtZQot Ky5JdCBIUE5EaXNhYmxlZCoKLSAuSXQgSVBRb1MKLSAuSXQgSWRlbnRpdGllc09ubHkKLSAuSXQg SWRlbnRpdHlBZ2VudAotQEAgLTU3NCw3ICs1ODcsMTMgQEAKLSAuSXQgTG9nTGV2ZWwKLSAuSXQg TG9nVmVyYm9zZQotIC5JdCBNQUNzCi0rLkl0IE1ldHJpY3MKLSsuSXQgTWV0cmljc0ludGVydmFs Ci0rLkl0IE1ldHJpY3NQYXRoCi0gLkl0IE5vSG9zdEF1dGhlbnRpY2F0aW9uRm9yTG9jYWxob3N0 Ci0rLkl0IE5vbmVDaXBoZXJFbmFibGVkKgotKy5JdCBOb25lRW5hYmxlZCoKLSsuSXQgTm9uZU1h Y0VuYWJsZWQqCi0gLkl0IE51bWJlck9mUGFzc3dvcmRQcm9tcHRzCi0gLkl0IE9ic2N1cmVLZXlz dHJva2VUaW1pbmcKLSAuSXQgUEtDUzExUHJvdmlkZXIKLUBAIC02MDYsMTUgKzYyNSwxOSBAQAot IC5JdCBTdHJpY3RIb3N0S2V5Q2hlY2tpbmcKLSAuSXQgU3lzbG9nRmFjaWxpdHkKLSAuSXQgVENQ S2VlcEFsaXZlCi0rLkl0IFRjcFJjdkJ1ZlBvbGwqCi0gLkl0IFRhZwotIC5JdCBUdW5uZWwKLSAu SXQgVHVubmVsRGV2aWNlCi0gLkl0IFVwZGF0ZUhvc3RLZXlzCi0rLkl0IFVzZU1QVENQCi0gLkl0 IFVzZXIKLSAuSXQgVXNlcktub3duSG9zdHNGaWxlCi0gLkl0IFZlcmlmeUhvc3RLZXlETlMKLSAu SXQgVmlzdWFsSG9zdEtleQotIC5JdCBYQXV0aExvY2F0aW9uCi0rLlBwCi0rLkl0ICogSHBuc3No IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgotIC5FbAotIC5QcAotIC5JdCBGbCBQIEFy IHRhZwotQEAgLTYzMSw2ICs2NTQsMTMgQEAKLSBQb3J0IHRvIGNvbm5lY3QgdG8gb24gdGhlIHJl bW90ZSBob3N0LgotIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBvbiBhCi0gcGVyLWhvc3QgYmFzaXMg aW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KLStIUE4tU1NIIHVzZXMgYSBkZWZhdWx0IHBvcnQg b2YgMjIyMi4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5Ci0rZmFsbGJhY2sgdG8gdXNlIHRoZSBTU0gg c3RhbmRhcmQgcG9ydCAyMiBpZiBpdCBjYW5ub3QgY29ubmVjdAotK29uIHBvcnQgMjIyMi4gVGhp cyBmYWxsYmFjayBiZWhhdmlvdXIgY2FuIGJlIG1vZGlmaWVkIHdpdGggdGhlCi0rRmFsbGJhY2tQ b3J0IG9wdGlvbi4gTm90ZTogaWYgb3V0Ym91bmQgcG9ydCAyMjIyIGlzCi0rYmxvY2tlZCBpdCBt YXkgYXBwZWFyIHRoYXQgdGhlIGhwbnNzaCBjbGllbnQgaXMgbm9uLXJlc3BvbnNpdmUuIEluIHRo YXQgZXZlbnQsCi0rZWl0aGVyIHNwZWNpZnkgdGhlIGNvcnJlY3QgcG9ydCBvciB1c2UgdGhlIENv bm5lY3RUaW1lb3V0IG9wdGlvbgotK3RvIHRyaWdnZXIgdGhlIHBvcnQgZmFsbGJhY2sgbW9yZSBx dWlja2x5LgotIC5QcAotIC5JdCBGbCBRIEFyIHF1ZXJ5X29wdGlvbgotIFF1ZXJpZXMgZm9yIHRo ZSBhbGdvcml0aG1zIHN1cHBvcnRlZCBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoK LUBAIC0xODI0LDMgKzE4NTQsNyBAQAotIGNyZWF0ZWQgT3BlblNTSC4KLSBNYXJrdXMgRnJpZWRs IGNvbnRyaWJ1dGVkIHRoZSBzdXBwb3J0IGZvciBTU0gKLSBwcm90b2NvbCB2ZXJzaW9ucyAxLjUg YW5kIDIuMC4KLStDaHJpcyBSYXBpZXIsIE1pY2hhZWwgU3RldmVucywgQmVuIEJlbm5ldCwgYW5k IE1pa2UgVGFzb3RhIGRldmVsb3BlZAotK3RoZSBIUE4gZXh0ZW5zaW9ucyBhdCB0aGUgUGl0dHNi dXJnaCBTdXBlcmNvbXV0aW5nIENlbnRlciB3aXRoIGdyYW50cwotK2Zyb20gQ2lzY28sIHRoZSBO YXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lLCBhbmQgdGhlIE5hdGlvbmFsIFNjaWVuY2UKLStG b3VuZGF0aW9uLgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoX2FwaS5jIG9wZW5z c2gtMTAuM3AxL3NzaF9hcGkuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoX2FwaS5jCTIw MjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3No X2FwaS5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzMyNTY1MDMyICswMjAwCi1AQCAtNDMxLDcgKzQz MSw3IEBACi0gCWNoYXIgKmNwOwotIAlpbnQgcjsKLSAKLS0JaWYgKChyID0gc3NoYnVmX3B1dGYo YmFubmVyLCAiU1NILTIuMC0lLjEwMHNcclxuIiwgU1NIX1ZFUlNJT04pKSAhPSAwKQotKwlpZiAo KHIgPSBzc2hidWZfcHV0ZihiYW5uZXIsICJTU0gtMi4wLSUuMTAwc1xyXG4iLCBTU0hfUkVMRUFT RSkpICE9IDApCi0gCQlyZXR1cm4gcjsKLSAJaWYgKChyID0gc3NoYnVmX3B1dGIoc3NoX3BhY2tl dF9nZXRfb3V0cHV0KHNzaCksIGJhbm5lcikpICE9IDApCi0gCQlyZXR1cm4gcjsKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGJ1Zi5jIG9wZW5zc2gtMTAuM3AxL3NzaGJ1Zi5jCi0t LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hidWYuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwMzI3 NTMwNyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NzaGJ1Zi5jCTIwMjYtMDctMDIgMDA6Mjc6 MjkuNzMyNjcyNzI5ICswMjAwCi1AQCAtMjgsNiArMjgsOCBAQAotICNpbmNsdWRlICJzc2hidWYu aCIKLSAjaW5jbHVkZSAibWlzYy5oIgotIAotKyNkZWZpbmUgQlVGX1dBVEVSU0hFRCAyNTYqMTAy NAotKwotICNpZmRlZiBTU0hCVUZfREVCVUcKLSAjIGRlZmluZSBTU0hCVUZfVEVMTCh3aGF0KSBk byB7IFwKLSAJCXByaW50ZigiJXM6JWQgJXM6ICVzIHNpemUgJXp1IGFsbG9jICV6dSBvZmYgJXp1 IG1heCAlenVcbiIsIFwKLUBAIC00OSw4ICs1MSwyOSBAQAotIAlpbnQgcmVhZG9ubHk7CQkvKiBS ZWZlcnMgdG8gZXh0ZXJuYWwsIGNvbnN0IGRhdGEgKi8KLSAJdV9pbnQgcmVmY291bnQ7CQkvKiBU cmFja3Mgc2VsZiBhbmQgbnVtYmVyIG9mIGNoaWxkIGJ1ZmZlcnMgKi8KLSAJc3RydWN0IHNzaGJ1 ZiAqcGFyZW50OwkvKiBJZiBjaGlsZCwgcG9pbnRlciB0byBwYXJlbnQgKi8KLSsJY2hhciBsYWJl bFtNQVhfTEFCRUxfTEVOXTsgICAvKiBTdHJpbmcgZm9yIGJ1ZmZlciBsYWJlbCAtIGRlYnVnZ2lu ZyB1c2UgKi8KLSsJaW50IHR5cGU7ICAgICAgICAgICAgICAgLyogdHlwZSBvZiBidWZmZXIgZW51 bSAoc3NoYnVmX3R5cGVzKSovCi0gfTsKLSAKLSsvKiB1cGRhdGUgdGhlIGxhYmVsIHN0cmluZyBm b3IgYSBnaXZlbiBzc2hidWYuIFVzZWZ1bAotKyAqIGZvciBkZWJ1Z2dpbmcgKi8KLSt2b2lkCi0r c3NoYnVmX3JlbGFiZWwoc3RydWN0IHNzaGJ1ZiAqYnVmLCBjb25zdCBjaGFyICpsYWJlbCkKLSt7 Ci0rCWlmIChsYWJlbCAhPSBOVUxMKQotKwkJc3RybmNweShidWYtPmxhYmVsLCBsYWJlbCwgTUFY X0xBQkVMX0xFTi0xKTsKLSt9Ci0rCi0rLyogc2V0IHRoZSB0eXBlIChmcm9tIGVudW0gc3NoYnVm X3R5cGUpIG9mIHRoZSBnaXZlbiBzc2hidWYuCi0rICogVGhlIHB1cnBvc2UgaXMgdG8gYWxsb3cg ZGlmZmVyZW50IGNsYXNzZXMgb2YgYnVmZmVycyB0bwotKyAqIGZvbGxvdyBkaWZmZXJlbnQgY29k ZSBwYXRocyBpZiBuZWNlc3NhcnkgKi8KLSt2b2lkCi0rc3NoYnVmX3R5cGUoc3RydWN0IHNzaGJ1 ZiAqYnVmLCBpbnQgdHlwZSkKLSt7Ci0rCWlmICh0eXBlIDwgQlVGX01BWF9UWVBFKQotKwkJYnVm LT50eXBlID0gdHlwZTsKLSt9Ci0rCi0gc3RhdGljIGlubGluZSBpbnQKLSBzc2hidWZfY2hlY2tf c2FuaXR5KGNvbnN0IHN0cnVjdCBzc2hidWYgKmJ1ZikKLSB7Ci1AQCAtOTAsNyArMTEzLDcgQEAK LSB9Ci0gCi0gc3RydWN0IHNzaGJ1ZiAqCi0tc3NoYnVmX25ldyh2b2lkKQotK3NzaGJ1Zl9uZXdf bGFiZWwgKGNvbnN0IGNoYXIgKmxhYmVsKQotIHsKLSAJc3RydWN0IHNzaGJ1ZiAqcmV0OwotIAot QEAgLTEwMSw2ICsxMjQsOCBAQAotIAlyZXQtPnJlYWRvbmx5ID0gMDsKLSAJcmV0LT5yZWZjb3Vu dCA9IDE7Ci0gCXJldC0+cGFyZW50ID0gTlVMTDsKLSsJaWYgKGxhYmVsICE9IE5VTEwpCi0rCQlz dHJuY3B5KHJldC0+bGFiZWwsIGxhYmVsLCBNQVhfTEFCRUxfTEVOLTEpOwotIAlpZiAoKHJldC0+ Y2QgPSByZXQtPmQgPSBjYWxsb2MoMSwgcmV0LT5hbGxvYykpID09IE5VTEwpIHsKLSAJCWZyZWUo cmV0KTsKLSAJCXJldHVybiBOVUxMOwotQEAgLTI5MCw3ICszMTUsMjEgQEAKLSB7Ci0gCWlmIChz c2hidWZfY2hlY2tfc2FuaXR5KGJ1ZikgIT0gMCB8fCBidWYtPnJlYWRvbmx5IHx8IGJ1Zi0+cmVm Y291bnQgPiAxKQotIAkJcmV0dXJuIDA7Ci0tCXJldHVybiBidWYtPm1heF9zaXplIC0gKGJ1Zi0+ c2l6ZSAtIGJ1Zi0+b2ZmKTsKLSsJLyogUmVzZXJ2ZSB+NC43NiUgKDEvMjEpIGhlYWRyb29tIG9u IGNoYW5uZWwgaW5wdXQgYnVmZmVycyB0byBwcmV2ZW50Ci0rCSAqIGEgcGF0aG9sb2dpY2FsIHN0 YXRlIGR1cmluZyBidWxrIGRhdGEgdHJhbnNmZXJzLiBUaGUgaGVhZHJvb20gc2NhbGVzCi0rCSAq IHdpdGggYnVmZmVyIHNpemUgYW5kIGdpdmVzIHRoZSBjaGFubmVsIHRpbWUgdG8gZHJhaW4gYmVm b3JlIGFjY2VwdGluZwotKwkgKiBtb3JlIGRhdGEsIHNtb290aGluZyBmbG93IGNvbnRyb2wgYW5k IHJlZHVjaW5nIGJ1ZmZlciByZWFsbG9jYXRpb24uCi0rCSAqIFdoZW4gdGhlIGJ1ZmZlciBpcyBm dWxsZXIgdGhhbiB0aGUgaGVhZHJvb20gYWxsb3dzIHdlIG11c3QgcmV0dXJuIDAsCi0rCSAqIG5v dCB1bmRlcmZsb3c6IHNpemVfdCBpcyB1bnNpZ25lZCBzbyBhIG5haXZlIHN1YnRyYWN0aW9uIHdy YXBzIHRvCi0rCSAqIFNJWkVfTUFYLCBjYXVzaW5nIHRoZSBjYWxsZXIgdG8gcmVhZCBpbnRvIGEg bmVhcmx5LWZ1bGwgYnVmZmVyIGFuZAotKwkgKiB0aHJhc2ggd2luZG93IHVwZGF0ZXMuIE9ubHkg YXBwbGllZCB0byBjaGFubmVsIGlucHV0IGJ1ZmZlcnMgYXMKLSsJICogb3RoZXIgYnVmZmVyIHR5 cGVzIGZhaWwgdGhlIHJlZ3Jlc3Npb24gdW5pdCB0ZXN0cyB3aXRoIGhlYWRyb29tLiAqLwotKwlp ZiAoYnVmLT50eXBlID09IEJVRl9DSEFOTkVMX0lOUFVUKSB7Ci0rCQlzaXplX3QgaGVhZHJvb20g PSBidWYtPm1heF9zaXplIC0gYnVmLT5tYXhfc2l6ZSAvIDIxOwotKwkJc2l6ZV90IHVzZWQgPSBi dWYtPnNpemUgLSBidWYtPm9mZjsKLSsJCXJldHVybiAodXNlZCA+PSBoZWFkcm9vbSkgPyAwIDog aGVhZHJvb20gLSB1c2VkOwotKwl9IGVsc2UKLSsJCXJldHVybiBidWYtPm1heF9zaXplIC0gKGJ1 Zi0+c2l6ZSAtIGJ1Zi0+b2ZmKTsKLSB9Ci0gCi0gY29uc3QgdV9jaGFyICoKLUBAIC0zNTAsOSAr Mzg5LDM2IEBACi0gCSAqLwotIAluZWVkID0gbGVuICsgYnVmLT5zaXplIC0gYnVmLT5hbGxvYzsK LSAJcmxlbiA9IFJPVU5EVVAoYnVmLT5hbGxvYyArIG5lZWQsIFNTSEJVRl9TSVpFX0lOQyk7Ci0r CS8qIFdpdGggdGhlIGNoYW5nZXMgaW4gOC45IHRoZSBvdXRwdXQgYnVmZmVyIGVuZCB1cCBncm93 aW5nIHByZXR0eQotKwkgKiBzbG93bHkuIEl0J3Mga25vd3MgdGhhdCBpdCBuZWVkcyB0byBncm93 IGJ1dCBpdCBvbmx5IGRvZXMgc28gMzJLCi0rCSAqIGF0IGEgdGltZS4gVGhpcyBtZWFucyBhIGxv dCBvZiBjYWxscyB0byByZWFsbG9jIGFuZCBtZW1jcHkgd2hpY2gKLSsJICoga2lsbHMgcGVyZm9y bWFuY2UgdW50aWwgdGhlIGJ1ZmZlciByZWFjaGVzIHNvbWUgbWF4aW11bSBzaXplLgotKwkgKiBT byB3ZSBleHBsaWNpdGx5IHRlc3QgZm9yIGEgYnVmZmVyIHRoYXQncyB0cnlpbmcgdG8gZ3JvdyBh bmQKLSsJICogaWYgaXQgaXMgdGhlbiB3ZSBwdXNoIHRoZSBncm93dGggYnkgNE1CIGF0IGEgdGlt ZS4gVGhpcyBjYW4gcmVzdWx0IGluCi0rCSAqIHRoZSBidWZmZXIgYmVpbmcgb3ZlciBhbGxvY2F0 ZWQgKGluIHRlcm1zIG9mIGFjdHVhbCBuZWVkcykgYnV0IHRoZQotKwkgKiBwcm9jZXNzIGlzIGZh c3QuIFRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIG92ZXJoZWFkCi0rCSAqIGFuZCBpbXByb3Zl cyBwZXJmb3JtYW5jZS4gSW4gdGhpcyBjYXNlIHdlIGxvb2sgZm9yIGEgYnVmZmVyIHRoYXQgaXMg dHJ5aW5nCi0rCSAqIHRvIGdyb3cgbGFyZ2VyIHRoYW4gQlVGX1dBVEVSU0hFRCAoMjU2KjEwMjQg dGFrZW4gZnJvbSBQQUNLRVRfTUFYX1NJWkUpCi0rCSAqIGFuZCBleHBsY2l0bHkgY2hlY2sgdGhh dCB0aGUgYnVmZmVyIGlzIGJlaW5nIHVzZWQgZm9yIGluYm91bmQgb3V0Ym91bmQKLSsJICogY2hh bm5lbCBidWZmZXJpbmcuCi0rCSAqIFVwZGF0ZWQgZm9yIDE4LjQuMSAtY2pyIDA0LzIwLzI0Ci0r CSAqLwotKwlpZiAocmxlbiA+IEJVRl9XQVRFUlNIRUQgJiYgKGJ1Zi0+dHlwZSA9PSBCVUZfQ0hB Tk5FTF9PVVRQVVQgfHwgYnVmLT50eXBlID09IEJVRl9DSEFOTkVMX0lOUFVUKSkgewotKwkJLyog ZGVidWdfZiAoIlByaW9yOiBsYWJlbDogJXMsICVwLCBybGVuIGlzICV6dSBuZWVkIGlzICV6dSBt YXhfc2l6ZSBpcyAlenUiLAotKwkJICAgYnVmLT5sYWJlbCwgYnVmLCBybGVuLCBuZWVkLCBidWYt Pm1heF9zaXplKTsgKi8KLSsJCS8qIGVhc2llc3QgdGhpbmcgdG8gZG8gaXMgZ3JvdyB0aGUgbnVm ZmVyIGJ5IDRNQiBlYWNoIHRpbWUuIEl0IG1pZ2h0IGVuZAotKwkJICogdXAgYmVpbmcgc29tZXdo YXQgb3ZlcmFsbG9jYXRlZCBidXQgd29ya3MgcXVpY2tseSAqLwotKwkJbmVlZCA9ICg0KjEwMjQq MTAyNCk7Ci0rCQlybGVuID0gUk9VTkRVUChidWYtPmFsbG9jICsgbmVlZCwgU1NIQlVGX1NJWkVf SU5DKTsKLSsJCS8qIGRlYnVnX2YgKCJQb3N0OiBsYWJlbDogJXMsICVwLCBybGVuIGlzICV6dSBu ZWVkIGlzICV6dSBtYXhfc2l6ZSBpcyAlenUiLCAqLwotKwkJLyogCSBidWYtPmxhYmVsLCBidWYs IHJsZW4sIG5lZWQsIGJ1Zi0+bWF4X3NpemUpOyAqLwotKwl9Ci0gCVNTSEJVRl9EQkcoKCJuZWVk ICV6dSBpbml0aWFsIHJsZW4gJXp1IiwgbmVlZCwgcmxlbikpOwotKwotKwkvKiBybGVuIG1pZ2h0 IGJlIGFib3ZlIHRoZSBtYXggYWxsb2NhdGlvbiAqLwotIAlpZiAocmxlbiA+IGJ1Zi0+bWF4X3Np emUpCi0tCQlybGVuID0gYnVmLT5hbGxvYyArIG5lZWQ7Ci0rCQlybGVuID0gYnVmLT5tYXhfc2l6 ZTsKLSsKLSAJU1NIQlVGX0RCRygoImFkanVzdGVkIHJsZW4gJXp1IiwgcmxlbikpOwotIAlpZiAo KGRwID0gcmVjYWxsb2NhcnJheShidWYtPmQsIGJ1Zi0+YWxsb2MsIHJsZW4sIDEpKSA9PSBOVUxM KSB7Ci0gCQlTU0hCVUZfREJHKCgicmVhbGxvYyBmYWlsIikpOwotZGlmZiAtTnVyIG9wZW5zc2gt MTAuM3AxLm9yaWcvc3NoYnVmLmggb3BlbnNzaC0xMC4zcDEvc3NoYnVmLmgKLS0tLSBvcGVuc3No LTEwLjNwMS5vcmlnL3NzaGJ1Zi5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTAzMjc1MzA3ICswMjAw Ci0rKysgb3BlbnNzaC0xMC4zcDEvc3NoYnVmLmgJMjAyNi0wNy0wMiAwOTo0MDowMS43NzgwNDQ4 MTIgKzAyMDAKLUBAIC0zMCwxOCArMzAsNDkgQEAKLSAjIGVuZGlmIC8qIE9QRU5TU0xfSEFTX0VD QyAqLwotICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KLSAKLS0jZGVmaW5lIFNTSEJVRl9TSVpF X01BWAkJMHg4MDAwMDAwCS8qIEhhcmQgbWF4aW11bSBzaXplICovCi0rI2RlZmluZSBTU0hCVUZf U0laRV9NQVgJCTB4ODAwMDAwMAkvKiBIYXJkIG1heGltdW0gc2l6ZSAxMjhNQiAqLwotICNkZWZp bmUgU1NIQlVGX1JFRlNfTUFYCQkweDEwMDAwMAkvKiBNYXggY2hpbGQgYnVmZmVycyAqLwotICNk ZWZpbmUgU1NIQlVGX01BWF9CSUdOVU0JKDE2Mzg0IC8gOCkJLyogTWF4IGJpZ251bSAqYnl0ZXMq ICovCi0gI2RlZmluZSBTU0hCVUZfTUFYX0VDUE9JTlQJKCg1MjggKiAyIC8gOCkgKyAxKSAvKiBN YXggRUMgcG9pbnQgKmJ5dGVzKiAqLwotKyNkZWZpbmUgTUFYX0xBQkVMX0xFTgkJNjQgLyptYXhp bXVtIHNpemUgb2Ygc3NoYnVmIGxhYmVsICovCi0rI2RlZmluZSBzc2hidWZfbmV3KCkgc3NoYnVm X25ld19sYWJlbChfX2Z1bmNfXykKLSAKLSBzdHJ1Y3Qgc3NoYnVmOwotIAotK2VudW0gYnVmZmVy X3R5cGVzIHsKLSsJQlVGX0NIQU5ORUxfT1VUUFVULAotKwlCVUZfQ0hBTk5FTF9JTlBVVCwKLSsJ QlVGX0NIQU5ORUxfRVhURU5ERUQsCi0rCUJVRl9QQUNLRVRfSU5QVVQsCi0rCUJVRl9QQUNLRVRf SU5DT01JTkcsCi0rCUJVRl9QQUNLRVRfT1VUUFVULAotKwlCVUZfUEFDS0VUX09VVEdPSU5HLAot KwlCVUZfTUFYX1RZUEUKLSt9OwotKwotIC8qCi0gICogQ3JlYXRlIGEgbmV3IHNzaGJ1ZiBidWZm ZXIuCi0gICogUmV0dXJucyBwb2ludGVyIHRvIGJ1ZmZlciBvbiBzdWNjZXNzLCBvciBOVUxMIG9u IGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgKi8KLS1zdHJ1Y3Qgc3NoYnVmICpzc2hidWZfbmV3KHZv aWQpOwotKy8qIHN0cnVjdCBzc2hidWYgKnNzaGJ1Zl9uZXcodm9pZCk7Ki8KLSsKLSsvKgotKyAq IENyZWF0ZSBhIG5ldyBsYWJlbGVkIHNzaGJ1ZiBidWZmZXIuCi0rICogUmV0dXJucyBwb2ludGVy IHRvIGJ1ZmZlciBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSsg Ki8KLStzdHJ1Y3Qgc3NoYnVmICpzc2hidWZfbmV3X2xhYmVsKGNvbnN0IGNoYXIgKik7Ci0rCi0r LyoKLSsgKiByZWxhYmVsIHRoZSBzc2hidWYgc3RydWN0Ci0rICovCi0rdm9pZCBzc2hidWZfcmVs YWJlbChzdHJ1Y3Qgc3NoYnVmICosIGNvbnN0IGNoYXIgKik7Ci0rCi0rLyoKLSsgKiBhc3NpZ24g YSB0eXBlIChmcm9tIHRoZSBidWZmZXJfdHlwZXMgZW51bSkgdG8KLSsgKiB0aGUgYnVmZmVyLiBV c2VkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHB1cnBvc2Ugb2YKLSsgKiB0aGUgYnVmZmVyLgot KyAqLwotK3ZvaWQgc3NoYnVmX3R5cGUoc3RydWN0IHNzaGJ1ZiAqLCBpbnQpOwotIAotIC8qCi0g ICogQ3JlYXRlIGEgbmV3LCByZWFkLW9ubHkgc3NoYnVmIGJ1ZmZlciBmcm9tIGV4aXN0aW5nIGRh dGEuCi1AQCAtNzgsMTIgKzEwOSwxMyBAQAotIHZvaWQJc3NoYnVmX3Jlc2V0KHN0cnVjdCBzc2hi dWYgKmJ1Zik7Ci0gCi0gLyoKLS0gKiBSZXR1cm4gdGhlIG1heGltdW0gc2l6ZSBvZiBidWYKLSsg KiBSZXR1cm4gdGhlIG1heGltdW0gdXNhYmxlIHNpemUgb2YgYnVmCi0gICovCi0gc2l6ZV90CXNz aGJ1Zl9tYXhfc2l6ZShjb25zdCBzdHJ1Y3Qgc3NoYnVmICpidWYpOwotIAotIC8qCi0tICogU2V0 IHRoZSBtYXhpbXVtIHNpemUgb2YgYnVmCi0rICogU2V0IHRoZSBtYXhpbXVtIHVzYWJsZSBzaXpl IG9mIGJ1Zi4gTm90ZSB0aGF0IHRoZSBidWZmZXIgbWF5IGNvbnN1bWUgdXAKLSsgKiB0byAyeCB0 aGlzIG1lbW9yeSBwbHVzIGJvb2trZWVwaW5nIG92ZXJoZWFkLgotICAqIFJldHVybnMgMCBvbiBz dWNjZXNzLCBvciBhIG5lZ2F0aXZlIFNTSF9FUlJfKiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0g ICovCi0gaW50CXNzaGJ1Zl9zZXRfbWF4X3NpemUoc3RydWN0IHNzaGJ1ZiAqYnVmLCBzaXplX3Qg bWF4X3NpemUpOwotQEAgLTM4MSw2ICs0MTMsOSBAQAotIAkJKCh1X2NoYXIgKikocCkpWzFdID0g X192ICYgMHhmZjsgXAotIAl9IHdoaWxlICgwKQotIAotKwotK3ZvaWQgc3NoYnVmX3NldF93aW5k b3dfbWF4KHN0cnVjdCBzc2hidWYgKmJ1ZiAsIHNpemVfdCBsZW4pOwotKwotIC8qIEludGVybmFs IGRlZmluaXRpb25zIGZvbGxvdy4gRXhwb3NlZCBmb3IgcmVncmVzcyB0ZXN0cyAqLwotICNpZmRl ZiBTU0hCVUZfSU5URVJOQUwKLSAKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC5j IG9wZW5zc2gtMTAuM3AxL3NzaC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2guYwkyMDI2 LTA3LTAyIDAwOjI3OjA2LjEwNTE5NTQ0NiArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NzaC5j CTIwMjYtMDctMDIgMTE6MjI6MDUuODY5MzUzOTAyICswMjAwCi1AQCAtOTgsNiArOTgsNyBAQAot ICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAidXRmOC5oIgotICNpbmNsdWRlICJob3N0 ZmlsZS5oIgotKyNpbmNsdWRlICJjaXBoZXItc3dpdGNoLmgiCi0gCi0gI2lmZGVmIEVOQUJMRV9Q S0NTMTEKLSAjaW5jbHVkZSAic3NoLXBrY3MxMS5oIgotQEAgLTEwOTQsNiArMTA5NSwxMCBAQAot IAkJCWJyZWFrOwotIAkJY2FzZSAnVCc6Ci0gCQkJb3B0aW9ucy5yZXF1ZXN0X3R0eSA9IFJFUVVF U1RfVFRZX05POwotKwkJCS8qIGVuc3VyZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QgdHJ5IHRvIGJh Y2tkb29yIGEgKi8KLSsJCQkvKiBudWxsIGNpcGhlciBzd2l0Y2ggb24gYW4gaW50ZXJhY3RpdmUg c2Vzc2lvbiAqLwotKwkJCS8qIHNvIGV4cGxpY2l0bHkgZGlzYWJsZSBpdCBubyBtYXR0ZXIgd2hh dCAqLwotKwkJCW9wdGlvbnMubm9uZV9zd2l0Y2g9MDsKLSAJCQlicmVhazsKLSAJCWNhc2UgJ28n OgotIAkJCWxpbmUgPSB4c3RyZHVwKG9wdGFyZyk7Ci1AQCAtMTczOSwxMCArMTc0NCwzNiBAQAot IAl9Ci0gCi0gCS8qIE9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgaG9zdC4gKi8KLSsJ Lyogd2UgdHJ5IGluaXRpYWxseSBvbiB0aGUgZGVmYXVsdCBocG5zc2ggcG9ydCByZXR1cm5lZCBi eQotKwkgKiBkZWZhdWx0X3NzaF9wb3J0KCkgd2hpY2ggbm93IHJldHVybnMgSFBOU1NIX0RFRkFV TFRfUE9SVAotKwkgKiBpZiB0aGF0IGZhaWxzIHdlIHJlc2V0IHRoZSBwb3J0IHRvIFNTSF9ERUZB VUxUX1BPUlQKLSsJICogLWNqciA4LzE3LzIwMjIKLSsJICovCi0rdHJ5YWdhaW46Ci0gCWlmIChz c2hfY29ubmVjdChzc2gsIGhvc3QsIG9wdGlvbnMuaG9zdF9hcmcsIGFkZHJzLCAmaG9zdGFkZHIs Ci0gCSAgICBvcHRpb25zLnBvcnQsIG9wdGlvbnMuY29ubmVjdGlvbl9hdHRlbXB0cywKLS0JICAg ICZ0aW1lb3V0X21zLCBvcHRpb25zLnRjcF9rZWVwX2FsaXZlKSAhPSAwKQotKwkgICAgJnRpbWVv dXRfbXMsIG9wdGlvbnMudGNwX2tlZXBfYWxpdmUpICE9IDApIHsKLSsJCS8qIGNvdWxkIG5vdCBj b25uZWN0LiBJZiB0aGUgcG9ydCByZXF1ZXN0ZWQgaXMgdGhlIHNhbWUgYXMKLSsJCSAqIGhwbnNz aCBkZWZhdWx0IHBvcnQgdGhlbiBmYWxsYmFjay4gT3RoZXJ3aXNlLCBleGl0ICovCi0rCQlpZiAo KG9wdGlvbnMucG9ydCA9PSBkZWZhdWx0X3NzaF9wb3J0KCkpICYmIG9wdGlvbnMuZmFsbGJhY2sp IHsKLSsJCQlpbnQgcG9ydCA9IG9wdGlvbnMuZmFsbGJhY2tfcG9ydDsKLSsJCQlvcHRpb25zLnBv cnQgPSBwb3J0OwotKwkJCWZwcmludGYoc3RkZXJyLCAiSFBOU1NIIHNlcnZlciBub3QgYXZhaWxh YmxlIG9uIGRlZmF1bHQgcG9ydCAlZFxuIiwKLSsJCQkJZGVmYXVsdF9zc2hfcG9ydCgpKTsKLSsJ CQlpZiAocG9ydCA9PSAyMikKLSsJCQkJZnByaW50ZihzdGRlcnIsICJGYWxsaW5nIGJhY2sgdG8g T3BlblNTSCBkZWZhdWx0IHBvcnQgJWRcbiIsCi0rCQkJCQlwb3J0KTsKLSsJCQllbHNlCi0rCQkJ CWZwcmludGYoc3RkZXJyLCAiRmFsbGluZyBiYWNrIHRvIHVzZXIgZGVmaW5lZCBwb3J0ICVkXG4i LAotKwkJCQkJcG9ydCk7Ci0rCQkJYWRkcnMgPSByZXNvbHZlX2hvc3QoaG9zdCwgcG9ydCwgMSwK LSsJCQkJCSAgICAgY25hbWUsIHNpemVvZihjbmFtZSkpOwotKwkJCWdvdG8gdHJ5YWdhaW47Ci0r CQl9IGVsc2UgewotKwkJCWV4aXQoMjU1KTsKLSsJCX0KLSAJCWV4aXQoMjU1KTsKLSsJfQotIAot IAotIAlzc2hfcGFja2V0X3NldF90aW1lb3V0KHNzaCwgb3B0aW9ucy5zZXJ2ZXJfYWxpdmVfaW50 ZXJ2YWwsCi1AQCAtMTk0NSw4ICsxOTc2LDEwIEBACi0gCi0gLyogRG8gZm9yaygpIGFmdGVyIGF1 dGhlbnRpY2F0aW9uLiBVc2VkIGJ5ICJzc2ggLWYiICovCi0gc3RhdGljIHZvaWQKLS1mb3JrX3Bv c3RhdXRoKHZvaWQpCi0rZm9ya19wb3N0YXV0aChzdHJ1Y3Qgc3NoICpzc2gpCi0gewotKwlpbnQg ZmlwcyA9IDA7Ci0rCi0gCWlmIChuZWVkX2NvbnRyb2xwZXJzaXN0X2RldGFjaCkKLSAJCWNvbnRy b2xfcGVyc2lzdF9kZXRhY2goKTsKLSAJZGVidWcoImZvcmtpbmcgdG8gYmFja2dyb3VuZCIpOwot QEAgLTE5NTUsMTcgKzE5ODgsMjkgQEAKLSAJCWZhdGFsKCJkYWVtb24oKSBmYWlsZWQ6ICUuMjAw cyIsIHN0cmVycm9yKGVycm5vKSk7Ci0gCWlmIChzdGRmZF9kZXZudWxsKDEsIDEsICEobG9nX2lz X29uX3N0ZGVycigpICYmIGRlYnVnX2ZsYWcpKSA9PSAtMSkKLSAJCWVycm9yX2YoInN0ZGZkX2Rl dm51bGwgZmFpbGVkIik7Ci0rCS8qIHdlIGRvIHRoZSBjaXBoZXIgc3dpdGNoIGhlcmUgaW4gdGhl IGV2ZW50IHRoYXQgdGhlIGNsaWVudAotKwkgKiBpcyBmb3JraW5nIG9yIGhhcyBhIGRlbGF5ZWQg Zm9yay4KLSsJICogSWYgRklQUyBtb2RlIGV4aXN0cyBhbmQgaXMgZW5hYmxlZCB0aGVuIG5vIHBh cmFsbGVsIGNpcGhlcnMuCi0rCSAqLwotKwlmaXBzID0gZmlwc19lbmFibGVkKCk7Ci0rCWlmIChm aXBzKQotKwkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiBQYXJhbGxlbCBjaXBoZXJz IGFyZSBkaXNhYmxlZCIpOwotKwllbHNlCi0rCQlkZWJ1ZzJfZigiRklQUyBtb2RlIG5vdCBmb3Vu ZCBvciBkaXNhYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZW5hYmxlZCIpOwotKwotKwlpZiAo KG9wdGlvbnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IDApICYmIChmaXBzID09IDApKQotKwkJ Y2lwaGVyX3N3aXRjaChzc2gpOwotIH0KLSAKLSBzdGF0aWMgdm9pZAotLWZvcndhcmRpbmdfc3Vj Y2Vzcyh2b2lkKQotK2ZvcndhcmRpbmdfc3VjY2VzcyhzdHJ1Y3Qgc3NoICpzc2gpCi0gewotIAlp ZiAoZm9yd2FyZF9jb25maXJtc19wZW5kaW5nID09IC0xKQotIAkJcmV0dXJuOwotIAlpZiAoLS1m b3J3YXJkX2NvbmZpcm1zX3BlbmRpbmcgPT0gMCkgewotIAkJZGVidWdfZigiYWxsIGV4cGVjdGVk IGZvcndhcmRpbmcgcmVwbGllcyByZWNlaXZlZCIpOwotIAkJaWYgKG9wdGlvbnMuZm9ya19hZnRl cl9hdXRoZW50aWNhdGlvbikKLS0JCQlmb3JrX3Bvc3RhdXRoKCk7Ci0rCQkJZm9ya19wb3N0YXV0 aChzc2gpOwotIAl9IGVsc2UgewotIAkJZGVidWcyX2YoIiVkIGV4cGVjdGVkIGZvcndhcmRpbmcg cmVwbGllcyByZW1haW5pbmciLAotIAkJICAgIGZvcndhcmRfY29uZmlybXNfcGVuZGluZyk7Ci1A QCAtMjAzMiw3ICsyMDc3LDcgQEAKLSAJCQkJICAgICJmb3IgbGlzdGVuIHBvcnQgJWQiLCByZndk LT5saXN0ZW5fcG9ydCk7Ci0gCQl9Ci0gCX0KLS0JZm9yd2FyZGluZ19zdWNjZXNzKCk7Ci0rCWZv cndhcmRpbmdfc3VjY2Vzcyhzc2gpOwotIH0KLSAKLSBzdGF0aWMgdm9pZAotQEAgLTIwNTksNyAr MjEwNCw3IEBACi0gCX0KLSAKLSAJZGVidWdfZigidHVubmVsIGZvcndhcmQgZXN0YWJsaXNoZWQs IGlkPSVkIiwgaWQpOwotLQlmb3J3YXJkaW5nX3N1Y2Nlc3MoKTsKLSsJZm9yd2FyZGluZ19zdWNj ZXNzKHNzaCk7Ci0gfQotIAotIHN0YXRpYyB2b2lkCi1AQCAtMjI1MCw2ICsyMjk1LDE1IEBACi0g CSAgICBOVUxMLCBmaWxlbm8oc3RkaW4pLCBjb21tYW5kLCBlbnZpcm9uKTsKLSB9Ci0gCi0rLyog dGhpcyB1c2VkIHRvIGRvIGEgbG90IG1vcmUgYnV0IG5vdyBpdCBqdXN0IGNoZWNrcyB0byBzZWUK LSsgKiBpZiB3ZSBhcmUgZGlzYWJsaW5nIGhwbiAqLwotK3N0YXRpYyB2b2lkCi0raHBuX29wdGlv bnNfaW5pdChzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwljaGFubmVsX3NldF9ocG5fZGlzYWJsZWQo b3B0aW9ucy5ocG5fZGlzYWJsZWQpOwotKwlkZWJ1Z19mKCJIUE4gZGlzYWJsZWQ6ICVkIiwgb3B0 aW9ucy5ocG5fZGlzYWJsZWQpOwotK30KLSsKLSAvKiBvcGVuIG5ldyBjaGFubmVsIGZvciBhIHNl c3Npb24gKi8KLSBzdGF0aWMgaW50Ci0gc3NoX3Nlc3Npb24yX29wZW4oc3RydWN0IHNzaCAqc3No KQotQEAgLTIyNzEsNiArMjMyNSw3IEBACi0gCXdpbmRvdyA9IENIQU5fU0VTX1dJTkRPV19ERUZB VUxUOwotIAlwYWNrZXRtYXggPSBDSEFOX1NFU19QQUNLRVRfREVGQVVMVDsKLSAJaWYgKHR0eV9m bGFnKSB7Ci0rCQl3aW5kb3cgPSBDSEFOX1NFU19XSU5ET1dfREVGQVVMVDsKLSAJCXdpbmRvdyA+ Pj0gMTsKLSAJCXBhY2tldG1heCA+Pj0gMTsKLSAJfQotQEAgLTIyNzgsNiArMjMzMywxMyBAQAot IAkgICAgInNlc3Npb24iLCBTU0hfQ0hBTk5FTF9PUEVOSU5HLCBpbiwgb3V0LCBlcnIsCi0gCSAg ICB3aW5kb3csIHBhY2tldG1heCwgQ0hBTl9FWFRFTkRFRF9XUklURSwKLSAJICAgICJjbGllbnQt c2Vzc2lvbiIsIENIQU5ORUxfTk9OQkxPQ0tfU1RESU8pOwotKwotKwkvKiBUT0RPOiBJcyB0aGlz IHRoZSByaWdodCBwbGFjZSBmb3IgdGhlc2Ugb3B0aW9ucz8gKi8KLSsJaWYgKG9wdGlvbnMudGNw X3Jjdl9idWZfcG9sbCA+IDAgJiYgIW9wdGlvbnMuaHBuX2Rpc2FibGVkKSB7Ci0rCQljLT5keW5h bWljX3dpbmRvdyA9IDE7Ci0rCQlkZWJ1ZygiRW5hYmxlZCBEeW5hbWljIFdpbmRvdyBTY2FsaW5n Iik7Ci0rCX0KLSsKLSAJaWYgKHR0eV9mbGFnKQotIAkJY2hhbm5lbF9zZXRfdHR5KHNzaCwgYyk7 Ci0gCWRlYnVnM19mKCJjaGFubmVsX25ldzogJWQlcyIsIGMtPnNlbGYsIHR0eV9mbGFnID8gIiAo dHR5KSIgOiAiIik7Ci1AQCAtMjI5NSw2ICsyMzU3LDE0IEBACi0gewotIAlpbnQgciwgaWQgPSAt MTsKLSAJY2hhciAqY3AsICp0dW5fZndkX2lmbmFtZSA9IE5VTEw7Ci0rCWludCBmaXBzID0gMDsK LSsKLSsJLyoKLSsJICogV2UgbmVlZCB0byBpbml0aWFsaXplIHRoaXMgZWFybHkgYmVjYXVzZSB0 aGUgZm9yd2FyZGluZyBsb2dpYyBiZWxvdwotKwkgKiBtaWdodCBvcGVuIGNoYW5uZWxzIHRoYXQg dXNlIHRoZSBocG4gYnVmZmVyIHNpemVzLiAgV2UgY2FuJ3Qgc2VuZCBhCi0rCSAqIHdpbmRvdyBv ZiAtMSAodGhlIGRlZmF1bHQpIHRvIHRoZSBzZXJ2ZXIgYXMgaXQgYnJlYWtzIHRoaW5ncy4KLSsJ ICovCi0rCWhwbl9vcHRpb25zX2luaXQoc3NoKTsKLSAKLSAJLyogWFhYIHNob3VsZCBiZSBwcmUt c2Vzc2lvbiAqLwotIAlpZiAoIW9wdGlvbnMuY29udHJvbF9wZXJzaXN0KQotQEAgLTIzODYsNyAr MjQ1NiwyMSBAQAotIAkJCWRlYnVnKCJkZWZlcnJpbmcgcG9zdGF1dGggZm9yayB1bnRpbCByZW1v dGUgZm9yd2FyZCAiCi0gCQkJICAgICJjb25maXJtYXRpb24gcmVjZWl2ZWQiKTsKLSAJCX0gZWxz ZQotLQkJCWZvcmtfcG9zdGF1dGgoKTsKLSsJCQlmb3JrX3Bvc3RhdXRoKHNzaCk7Ci0rCX0gZWxz ZSB7Ci0rCQkvKiBjaGVjayB0byBzZWUgaWYgd2UgYXJlIHN3aXRjaGluZyBjaXBoZXJzIHRvCi0r CQkgKiBvbmUgb2Ygb3VyIHBhcmFsbGVsIHZlcnNpb25zLiBJZiB0aGUgY2xpZW50IGlzCi0rCQkg KiBmb3JraW5nIHRoZW4gd2UgaGFuZGxlIGl0IGluIGZvcmtfcG9zdGF1dGgoKQotKwkJICogSWYg RklQUyBtb2RlIGV4aXN0cyBhbmQgaXMgZW5hYmxlZCB0aGVuIG5vIHBhcmFsbGVsIGNpcGhlcnMu Ci0rCQkgKi8KLSsJCWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsKLSsJCWlmIChmaXBzKQotKwkJCWRl YnVnMl9mKCJGSVBTIG1vZGUgaXMgZW5hYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZGlzYWJs ZWQiKTsKLSsJCWVsc2UKLSsJCQlkZWJ1ZzJfZigiRklQUyBtb2RlIG5vdCBmb3VuZCBvciBkaXNh YmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZW5hYmxlZCIpOwotKwkJaWYgKChvcHRpb25zLmRp c2FibGVfbXVsdGl0aHJlYWRlZCA9PSAwKQotKwkJICAgICYmIChmaXBzID09IDApKQotKwkJCWNp cGhlcl9zd2l0Y2goc3NoKTsKLSAJfQotIAotIAlyZXR1cm4gY2xpZW50X2xvb3Aoc3NoLCB0dHlf ZmxhZywgdHR5X2ZsYWcgPwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoX2NvbmZp ZyBvcGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hf Y29uZmlnCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvc3NoX2NvbmZpZwkyMDI2LTA3LTAyIDAyOjEyOjQzLjM3MzgyOTcxMCArMDIwMAotQEAg LTQ1LDYgKzQ1LDggQEAKLSAjICAgUHJveHlDb21tYW5kIHNzaCAtcSAtVyAlaDolcCBnYXRld2F5 LmV4YW1wbGUuY29tCi0gIyAgIFJla2V5TGltaXQgMUcgMWgKLSAjICAgVXNlcktub3duSG9zdHNG aWxlIH4vLnNzaC9rbm93bl9ob3N0cy5kLyVrCi0rIyAgIFVzZU1QVENQIG5vCi0rIyAgIEhhcHB5 RXllcyBubwotICMKLSAjIFRoaXMgc3lzdGVtIGlzIGZvbGxvd2luZyBzeXN0ZW0td2lkZSBjcnlw dG8gcG9saWN5LgotICMgVG8gbW9kaWZ5IHRoZSBjcnlwdG8gcHJvcGVydGllcyAoQ2lwaGVycywg TUFDcywgLi4uKSwgY3JlYXRlIGEgICouY29uZgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9y aWcvc3NoX2NvbmZpZy41IG9wZW5zc2gtMTAuM3AxL3NzaF9jb25maWcuNQotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvc3NoX2NvbmZpZy41CTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICsw MjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoX2NvbmZpZy41CTIwMjYtMDctMDIgMDA6Mjc6Mjku NzMzNDAwMzY3ICswMjAwCi1AQCAtNjIsNiArNjIsMTkgQEAKLSAuUHEgUGEgL2V0Yy9zc2gvc3No X2NvbmZpZwotIC5FbAotIC5QcAotKy5YciBocG5zc2ggMQotK2lzIGZ1bGx5IGNvbXBhdGlibGUg d2l0aCBPcGVuU1NIJ3Mgc3NoIGFuZCB1c2VzIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gZm9ybWF0 LCBkaXJlY3RpdmVzLCBhbmQgb3B0aW9ucy4KLSsuWHIgaHBuc3NoIDEKLStjYW4gdXNlIHRoZSBz YW1lIGNvbmZpZ3VyYXRpb24gZmlsZSBhcwotKy5YciBzc2ggMQotK3Rob3VnaCB0aGUgaW52ZXJz ZSBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZS4gVGhpcyBpcyBiZWNhdXNlCi0rLlhyIGhwbnNzaCAx Ci0raGFzIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIHdoaWNoIGFyZSBkaXNjdXNzZWQgYmVsb3cu IEFzIHN1Y2ggdXNlcnMgc2hvdWxkIGVpdGhlciBub3QKLSt1c2UKLSsuWHIgaHBuc3NoIDEKLStz cGVjaWZpYyBkaXJlY3RpdmVzIGluIHRoZWlyIGRlZmF1bHQgc3NoX2NvbmZpZyBmaWxlcyBvciBl bnN1cmUgdGhhdCB0aGV5IGFsd2F5cyB1c2UgYQotK2N1c3RvbSBjb25maWcgZmlsZS4KLSsuUHAK LSBVbmxlc3Mgbm90ZWQgb3RoZXJ3aXNlLCBmb3IgZWFjaCBwYXJhbWV0ZXIsIHRoZSBmaXJzdCBv YnRhaW5lZCB2YWx1ZQotIHdpbGwgYmUgdXNlZC4KLSBUaGUgY29uZmlndXJhdGlvbiBmaWxlcyBj b250YWluIHNlY3Rpb25zIHNlcGFyYXRlZCBieQotQEAgLTgzMyw2ICs4NDYsOSBAQAotIG9yCi0g LkNtIG5vCi0gKHRoZSBkZWZhdWx0KS4KLSsuSXQgQ20gRmFsbGJhY2tQb3J0Ci0rU3BlY2lmaWVz IHRoZSBwb3J0IGhwbnNzaCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QgdG8gaWYgaXQgZmFpbHMgY29u bmVjdGluZyB0byB0aGUKLStkZWZhdWx0IGhwbnNzaGQgcG9ydCBvZiAyMjIyLiBUaGUgZGVmYXVs dCBpcyBwb3J0IDIyLiBIUE4tU1NIIG9ubHkuCi0gLkl0IENtIEZpbmdlcnByaW50SGFzaAotIFNw ZWNpZmllcyB0aGUgaGFzaCBhbGdvcml0aG0gdXNlZCB3aGVuIGRpc3BsYXlpbmcga2V5IGZpbmdl cnByaW50cy4KLSBWYWxpZCBvcHRpb25zIGFyZToKLUBAIC0xMDU4LDYgKzEwNzQsMjMgQEAKLSB3 aWxsIG5vdCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSwKLSBidXQgbWF5IGJlIG1hbnVhbGx5 IGhhc2hlZCB1c2luZwotIC5YciBzc2gta2V5Z2VuIDEgLgotKy5JdCBDbSBIYXBweUV5ZXMKLStJ ZiBzZXQgdG8KLSsuQ20geWVzCi0rdGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIGNsaWVu dCBzaG91bGQgdXNlIHRoZSBIYXBweSBFeWViYWxscyBjb25uZWN0aW9uCi0rbWV0aG9kIGFzIGRl c2NyaWJlZCBieSBSRkMgODMwNS4gV2hlbiBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gYQotK3Rh cmdldCB0aGF0IHN1cHBvcnRzIElQdjQgYW5kIElQdjYgdGhlIGNsaWVudCB3aWxsIHRyeSB0byBj b25uZWN0Ci0rb24gSVB2NiBmaXJzdCwgZGVsYXkgYSBzZXQgdGltZSAoMjUwbXMgZGVmYXVsdCks IGFuZCB0aGVuIHRyeSBJUHY0LgotK1RoZSBjbGllbnQgd2lsbCB1c2Ugd2hpY2ggZXZlciBzb2Nr ZXQgaXMgcmV0dXJuZWQgZmlyc3QuIE5vdGU6Ci0rVGhpcyBwcm9jZXNzIG1heSwgcmFyZWx5LCBw cm9kdWNlIGZhbHNlIHBvc2l0aXZlcyBpbiBzb21lIG1vbml0b3JpbmcgdG9vbHMKLStkdWUgdG8g bXVsdGlwbGUgY29ubmVjdGlvbiBhdHRlbXB0cyBwcmlvciB0byBhdXRoZW50aWNhdGlvbi4KLStU aGUgZGVmYXVsdCBpcwotKy5DbSBubwotKy5JdCBDbSBIYXBweURlbGF5Ci0rVGhpcyBvcHRpb25z IHNwZWNpZmllcyBob3cgbG9uZyB0aGUgSGFwcHlFeWVzIGNvbm5lY3Rpb24gbWV0aG9kIHNob3Vs ZAotK3dhaXQgYmVmb3JlIHRyeWluZyBJUHY0IGFmdGVyIHRoZSBpbml0aWFsIElQdjYgY29ubmVj dGlvbi4gVGhpcyB2YWx1ZSBpcwotK2EgcG9zaXRpdmUgaW50ZWdlciBvZiBtaWxsaXNlY29uZHMg d2l0aCBhIGRlZmF1bHQgb2YKLSsuQ20gMjUwbXMuCi0gLkl0IENtIEhvc3RiYXNlZEFjY2VwdGVk QWxnb3JpdGhtcwotIFRoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKLSAuWHIg Y3J5cHRvLXBvbGljaWVzIDcgLgotQEAgLTExNjEsNiArMTE5NCwxMSBAQAotIC5DbSBIb3N0bmFt ZQotIHNwZWNpZmljYXRpb25zKS4KLSBUaGUgZGVmYXVsdCBpcyB0aGUgbmFtZSBnaXZlbiBvbiB0 aGUgY29tbWFuZCBsaW5lLgotKy5JdCBDbSBIUE5EaXNhYmxlZAotK0luIHNvbWUgc2l0dWF0aW9u cywgc3VjaCBhcyB0cmFuc2ZlcnMgb24gYSBsb2NhbCBhcmVhIG5ldHdvcmssIHRoZSBpbXBhY3QK LStvZiB0aGUgSFBOIGNvZGUgcHJvZHVjZXMgYSBuZXQgZGVjcmVhc2UgaW4gcGVyZm9ybWFuY2Uu IEluIHRoZXNlIGNhc2VzIGl0IGlzCi0raGVscGZ1bCB0byBkaXNhYmxlIHRoZSBIUE4gZnVuY3Rp b25hbGl0eS4gQnkgZGVmYXVsdCBIUE5EaXNhYmxlZCBpcyBzZXQgdG8KLSsuQ20gbm8uIEhQTlNT SCBvbmx5LgotIC5JdCBDbSBJZGVudGl0aWVzT25seQotIFNwZWNpZmllcyB0aGF0Ci0gLlhyIHNz aCAxCi1AQCAtMTM2MCw2ICsxMzk4LDEyIEBACi0gLkNtIG5vbmUKLSAodGhlIG9wZXJhdGluZyBz eXN0ZW0gZGVmYXVsdCkKLSBmb3Igbm9uLWludGVyYWN0aXZlIHNlc3Npb25zLgotK0lmIHVzaW5n IHRoZQotKy5DbSBIYXBweUV5ZXMKLStvcHRpb24gdGhlc2UgZGVmYXVsdCB0bwotKy5DbSBsb3ds YXRlbmN5IGFuZAotKy5tIHRocm91Z2hwdXQgLAotK3Jlc3BlY3RpdmVseS4KLSAuSXQgQ20gS2Jk SW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbgotIFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBrZXli b2FyZC1pbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvbi4KLSBUaGUgYXJndW1lbnQgdG8gdGhpcyBr ZXl3b3JkIG11c3QgYmUKLUBAIC0xNTQ4LDYgKzE1OTIsNjMgQEAKLSAuUHAKLSBUaGUgbGlzdCBv ZiBhdmFpbGFibGUgTUFDIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKLSAu UXEgc3NoIC1RIG1hYyAuCi0rLkl0IENtIE1ldHJpY3MKLStJbmRpY2F0ZSB0aGF0IHRoZSBzc2gg Y2xpZW50IHNob3VsZCBnYXRoZXIgYW5kIHdyaXRlIFRDUCBzdGFjayBtZXRyaWNzIGZyb20gdGhl Ci0rVENQX0lORk8gc29ja2V0IHN0cnVjdHVyZSBvbiBjb21wbGlhbnQgb3BlcmF0aW5nIHN5c3Rl bXMgdG8gYSB0ZXh0IGZpbGUuCi0rVGhlc2UgbWV0cmljcyB3aWxsIGJlIGNvbGxlY3RlZCBmcm9t IGJvdGggdGhlIGxvY2FsIGFuZCByZW1vdGUgaG9zdHMgaWYgbWV0cmljcwotK2FyZSBzdXBwb3J0 ZWQgYnkgdGhlIHZlcnNpb24gb2YgU1NIIGFuZCBUQ1BfSU5GTyBpcyBzdXBwb3J0ZWQgYnkgdGhl Ci0rb3BlcmF0aW5nIHN5c3RlbS4gQ3VycmVudGx5IG9wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydCBp cyBsaW1pdGVkIHRvIExpbnV4Ci0rdmVyc2lvbiAzLjcgYW5kIGdyZWF0ZXIsIE5ldEJTRCwgYW5k IEZyZWVCU0QgKHZlcnNpb24gNiBvciBncmVhdGVyKS4KLSsKLStJZiBvbmUgb2YgdGhlIGhvc3Rz IGRvZXMgbm90IHN1cHBvcnQgdGhlIE1ldHJpY3Mgb3B0aW9uIHRoZW4gb25seSBkYXRhCi0rZnJv bSB0aGUgdGhlIGhvc3QgdGhhdCBkb2VzIHdpbGwgYmUgcmVwb3J0ZWQuIFNlZSB0aGUgSFBOLVJF QURNRSBmaWxlCi0rZm9yIG1vcmUgZGV0YWlsLgotKwotK1RoZSBhcmd1bWVudCB0byB0aGUga2V5 d29yZCBtdXN0IGJlCi0rLkNtIHllcwotK29yCi0rLkNtIG5vCi0rKHRoZSBkZWZhdWx0KS4KLSsK LStTZWUKLSsuQ20gTWV0cmljc0ludGVydmFsCi0rYW5kCi0rLkNtIE1ldHJpY3NQYXRoCi0rZm9y IG1vcmUgbWV0cmljcyBvcHRpb25zLgotKy5DbSBIUE5TU0ggb25seS4KLSsuSXQgQ20gTWV0cmlj c0ludGVydmFsCi0rVGhlIGZyZXF1ZW5jeSwgaW4gc2Vjb25kcywgd2l0aCB3aGljaCB0aGUgVENQ X0lORk8gc3RydWN0IHdpbGwgYmUgcG9sbGVkLiBUaGUKLStkZWZhdWx0IHZhbHVlIGlzIDUgc2Vj b25kcy4KLSsKLSsuQ20gTWV0cmljcwotK211c3QgYmUgc2V0IHRvCi0rLkNtIHllcwotK2ZvdCB0 aGlzIG9wdGlvbiB0byBoYXZlIGFueSBlZmZlY3QuCi0rLkNtIEhQTlNTSCBvbmx5LgotKy5JdCBD bSBNZXRyaWNzUGF0aAotK1RoZSBmaWxlIHBhdGggd2hlcmUKLSsuQ20gTWV0cmljcwotK3Nob3Vs ZCB3cml0ZSB0aGUgVENQIHN0YWNrIG1ldHJpY3MuCi0rCi0rVGhlIGRlZmF1bHQgaXMKLSsuU20g b2ZmCi0rLkFyIC4vc3NoX3N0YWNrX21ldHJpY3MubG9jYWwKLSsgYW5kCi0rLkFyIC4vc3NoX3N0 YWNrX21ldHJpY3MucmVtb3RlCi0rLlNtIG9uCi0rCi0rVGhlIHVzZXIgbWF5IHNwZWNpZnkgYW55 IG90aGVyIGZpbGVwYXRoIGFuZCBmaWxlbmFtZSB0aGF0IHRoZXkgaGF2ZSB3cml0ZQotK2FjY2Vz cyB0by4gRS5nLiBNZXRyaWNzUGF0aD0vdG1wL215X21ldHJpY3MuIFRoZSBzdWZmaXggb2YgLmxv Y2FsCi0rYW5kIC5yZW1vdGUgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGlzIHBhdGguIEZpbGVzIGFy ZQotKy5DbSBub3QKLStvdmVyd3JpdHRlbiBieSBzdWJzZXF1ZW50IG1ldHJpY3Mgc2Vzc2lvbnMu IEluc3RlYWQsIGRhdGEgZnJvbSBuZXcgc2Vzc2lvbnMKLSt3aWxsIGJlIGFwcGVuZGVkIGlmIHRo ZSBmaWxlIGFscmVhZHkgZXhpc3RzLgotKwotKy5DbSBNZXRyaWNzCi0rbXVzdCBiZSBzZXQgdG8K LSsuQ20geWVzCi0rZm90IHRoaXMgb3B0aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4KLSsuQ20gSFBO U1NIIG9ubHkuCi0gLkl0IENtIE5vSG9zdEF1dGhlbnRpY2F0aW9uRm9yTG9jYWxob3N0Ci0gRGlz YWJsZSBob3N0IGF1dGhlbnRpY2F0aW9uIGZvciBsb2NhbGhvc3QgKGxvb3BiYWNrIGFkZHJlc3Nl cykuCi0gVGhlIGFyZ3VtZW50IHRvIHRoaXMga2V5d29yZCBtdXN0IGJlCi1AQCAtMTU1NSw2ICsx NjU2LDM2IEBACi0gb3IKLSAuQ20gbm8KLSAodGhlIGRlZmF1bHQpLgotKy5JdCBDbSBOb25lRW5h YmxlZAotK0VuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgY2lwaGVyLiBDYXJl IG11c3QgYWx3YXlzIGJlIHVzZWQKLSt3aGVuIGVuYWJsaW5nIHRoaXMgYXMgaXQgd2lsbCBhbGxv dyB1c2VycyB0byBzZW5kIGRhdGEgaW4gdGhlIGNsZWFyLiBIb3dldmVyLAotK2l0IGlzIGltcG9y dGFudCB0byBub3RlIHRoYXQgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gcmVtYWlucyBlbmNy eXB0ZWQKLStldmVuIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIERlZmF1bHQgaXMKLSsuQ20g bm8uIEhQTlNTSCBvbmx5LgotKy5JdCBDbSBOb25lTWFjRW5hYmxlZAotK0VuYWJsZSBvciBkaXNh YmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgTUFDLiBXaGVuIHRoaXMgaXMgZW5hYmxlZCBzc2gKLSt3 aWxsICpub3QqIHByb3ZpZGUgZGF0YSBpbnRlZ3JpdHkgb2YgYW55IGRhdGEgYmVpbmcgdHJhbnNt aXR0ZWQgYmV0d2VlbiBob3N0cy4gVXNlCi0rd2l0aCBjYXV0aW9uIGFzIGl0LCB1bmxpa2UganVz dCB1c2luZyBOb25lRW5hYmxlZCwgZG9lc24ndCBwcm92aWRlIGRhdGEgaW50ZWdyaXR5IGFuZAot K3Byb3RlY3Rpb24gYWdhaW5zdCBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBBcyB3aXRoIE5v bmVFbmFibGVkIGFsbCBhdXRoZW50aWNhdGlvbgotK3JlbWFpbnMgZW5jcnlwdGVkIGFuZCBpbnRl Z3JpdHkgaXMgZW5zdXJlZC4gRGVmYXVsdCBpcwotKy5DbSBuby4gSFBOU1NIIG9ubHkuCi0rLkl0 IENtIE5vbmVTd2l0Y2gKLStTd2l0Y2ggdGhlIGVuY3J5cHRpb24gY2lwaGVyIGJlaW5nIHVzZWQg dG8gdGhlIE5vbmUgY2lwaGVyIGFmdGVyCi0rYXV0aGVudGljYXRpb24gdGFrZXMgcGxhY2UuIE5v bmVFbmFibGVkIG11c3QgYmUgZW5hYmxlZCBvbiBib3RoIHRoZSBjbGllbnQKLSthbmQgc2VydmVy IHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uIFdoZW4gdGhlIGNvbm5lY3Rpb24gc3dpdGNoZXMgdG8g dGhlIE5PTkUKLStjaXBoZXIgYSB3YXJuaW5nIGlzIHNlbnQgdG8gU1RERVJSLiBUaGUgY29ubmVj dGlvbiBhdHRlbXB0IHdpbGwgZmFpbCB3aXRoIGFuCi0rZXJyb3IgaWYgYSBjbGllbnQgcmVxdWVz dHMgYSBOb25lU3dpdGNoIGZyb20gdGhlIHNlcnZlciB0aGF0IGRvZXMgbm90IGV4cGxpY2l0bHkK LStoYXZlIE5vbmVFbmFibGVkIHNldCB0byB5ZXMuIE5vdGU6IFRoZSBOT05FIGNpcGhlciBjYW5u b3QgYmUgdXNlZCBpbgotK2ludGVyYWN0aXZlIChzaGVsbCkgc2Vzc2lvbnMgYW5kIGl0IHdpbGwg ZmFpbCBzaWxlbnRseS4gU2V0IHRvCi0rLkNtIG5vCi0rYnkgZGVmYXVsdC4KLSsuQ20gSFBOU1NI IG9ubHkuCi0rLlBwCi0rLkNtIE5vdGU6Ci0rdGhpcyBvcHRpb25zIGNhbm5vdCBhY3R1YWx5IGJl IHNldCBpbiB0aGUgc3NoX2NvbmZpZyBmaWxlLiBJdCBtdXN0IGJlCi0rc2V0IG9uIHRoZSBjb21t YW5kIGxpbmUgdXNlIC1vTm9uZUVuYWJsZWQuIFRoaXMgaXMgdG8gcHJldmVudCBpdCBmcm9tIGJl aW5nCi0rdXNlZCBhY2NpZGVudGFsbHkuIEl0IGlzIGluY2x1ZGVkIGhlcmUgZm9yIGNvbXBsZXRl bmVzcyBhcyBuZWl0aGVyIE5vbmVNYWNFbmFibGVkCi0rb3IgTm9uZUNpcGhlckVuYWJsZWQgaGF2 ZSBhbnkgZWZmZWN0IHdpdGhvdXQgdGhpcyBvcHRpb24uCi0gLkl0IENtIE51bWJlck9mUGFzc3dv cmRQcm9tcHRzCi0gU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGFzc3dvcmQgcHJvbXB0cyBiZWZv cmUgZ2l2aW5nIHVwLgotIFRoZSBhcmd1bWVudCB0byB0aGlzIGtleXdvcmQgbXVzdCBiZSBhbiBp bnRlZ2VyLgotQEAgLTIxMzQsNiArMjI2NSwxMiBAQAotIFNwZWNpZnkgYSBjb25maWd1cmF0aW9u IHRhZyBuYW1lIHRoYXQgbWF5IGJlIGxhdGVyIHVzZWQgYnkgYQotIC5DbSBNYXRjaAotIGRpcmVj dGl2ZSB0byBzZWxlY3QgYSBibG9jayBvZiBjb25maWd1cmF0aW9uLgotKy5JdCBDbSBUY3BSY3ZC dWZQb2xsCi0rRW5hYmxlIG9mIGRpc2FibGUgdGhlIHBvbGxpbmcgb2YgdGhlIHRjcCByZWNlaXZl IGJ1ZmZlciB0aHJvdWdoIHRoZSBsaWZlCi0rb2YgdGhlIGNvbm5lY3Rpb24uIFlvdSB3b3VsZCB3 YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQKLStmb3Igc3lzdGVt cyBtYWtpbmcgdXNlIG9mIGF1dG90dW5pbmcga2VybmVscyAobGludXggMi40LjI0KywgMi42LCBN UyBWaXN0YSkuCi0rRGVmYXVsdCBpcwotKy5DbSB5ZXMuIEhQTlNTSCBvbmx5LgotIC5JdCBDbSBU dW5uZWwKLSBSZXF1ZXN0Ci0gLlhyIHR1biA0Ci1AQCAtMjIxOSw2ICsyMzU2LDEyIEBACi0gZnJv bSBPcGVuU1NIIDYuOCBhbmQgZ3JlYXRlciBzdXBwb3J0IHRoZQotIC5RcSBob3N0a2V5c0BvcGVu c3NoLmNvbQotIHByb3RvY29sIGV4dGVuc2lvbiB1c2VkIHRvIGluZm9ybSB0aGUgY2xpZW50IG9m IGFsbCB0aGUgc2VydmVyJ3MgaG9zdGtleXMuCi0rLkl0IENtIFVzZU1QVENQCi0rSWYgc2V0IHRv Ci0rLkNtIHllcyAsCi0rdGhpcyB3aWxsIGVuYWJsZSBNdWx0aXBhdGggVENQIChNUFRDUCkgaW5z dGVhZCBvZiBUQ1AgKHRoaXMgb25seSB3b3JrcyBvbiBMaW51eCkuCi0rVGhlIGRlZmF1bHQgaXMK LSsuQ20gbm8gLgotIC5JdCBDbSBVc2VyCi0gU3BlY2lmaWVzIHRoZSB1c2VyIHRvIGxvZyBpbiBh cy4KLSBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBhIGRpZmZlcmVudCB1c2VyIG5hbWUgaXMgdXNl ZCBvbiBkaWZmZXJlbnQgbWFjaGluZXMuCi1AQCAtMjUyOCwzICsyNjcxLDExIEBACi0gY3JlYXRl ZCBPcGVuU1NILgotIC5BbiBNYXJrdXMgRnJpZWRsCi0gY29udHJpYnV0ZWQgdGhlIHN1cHBvcnQg Zm9yIFNTSCBwcm90b2NvbCB2ZXJzaW9ucyAxLjUgYW5kIDIuMC4KLSsuQW4gQ2hyaXMgUmFwaWVy LAotKy5BbiBNaWNoYWVsIFN0ZXZlbnMsCi0rLkFuIEJlbiBCZW5uZXQsCi0rYW5kCi0rLkFuIE1p a2UgVGFzb3RhCi0rZGV2ZWxvcGVkIHRoZSBIUE4gZXh0ZW5zaW9ucyBhdCB0aGUgUGl0dHNidXJn aCBTdXBlcmNvbXV0aW5nIENlbnRlcgotK3dpdGggZ3JhbnRzIGZyb20gQ2lzY28sIHRoZSBOYXRp b25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lLCBhbmQKLSt0aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3Vu ZGF0aW9uLgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoY29ubmVjdDIuYyBvcGVu c3NoLTEwLjNwMS9zc2hjb25uZWN0Mi5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25u ZWN0Mi5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvc3NoY29ubmVjdDIuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjczMzY0OTA4MSArMDIwMAot QEAgLTc0LDYgKzc0LDcgQEAKLSAjaW5jbHVkZSAidXRmOC5oIgotICNpbmNsdWRlICJzc2gtc2su aCIKLSAjaW5jbHVkZSAic2stYXBpLmgiCi0rI2luY2x1ZGUgImNpcGhlci1zd2l0Y2guaCIKLSAK LSAjaWZkZWYgR1NTQVBJCi0gI2luY2x1ZGUgInNzaC1nc3MuaCIKLUBAIC04Myw2ICs4NCwxMyBA QAotIGV4dGVybiBPcHRpb25zIG9wdGlvbnM7Ci0gCi0gLyoKLSsgKiB0dHlfZmxhZyBpcyBzZXQg aW4gc3NoLmMuIFVzZSB0aGlzIGluIHNzaF91c2VyYXV0aDI6Ci0rICogaWYgaXQgaXMgc2V0LCB0 aGVuIHByZXZlbnQgdGhlIHN3aXRjaCB0byB0aGUgbnVsbCBjaXBoZXIuCi0rICovCi0rCi0rZXh0 ZXJuIGludCB0dHlfZmxhZzsKLSsKLSsvKgotICAqIFNTSDIga2V5IGV4Y2hhbmdlCi0gICovCi0g Ci1AQCAtNTc5LDYgKzU4Nyw0MiBAQAotIAotIAlpZiAoIWF1dGhjdHh0LnN1Y2Nlc3MpCi0gCQlm YXRhbCgiQXV0aGVudGljYXRpb24gZmFpbGVkLiIpOwotKwotKwkvKgotKwkgKiBJZiB0aGUgdXNl ciB3YW50cyB0byB1c2UgdGhlIG5vbmUgY2lwaGVyIGFuZC9vciBub25lIG1hYywgZG8gaXQgcG9z dCBhdXRoZW50aWNhdGlvbgotKwkgKiBhbmQgb25seSBpZiB0aGUgcmlnaHQgY29uZGl0aW9ucyBh cmUgbWV0IC0tIGJvdGggb2YgdGhlIE5PTkUgY29tbWFuZHMKLSsJICogbXVzdCBiZSB0cnVlIGFu ZCB0aGVyZSBtdXN0IGJlIG5vIHR0eSBhbGxvY2F0ZWQuCi0rCSAqLwotKwlpZiAob3B0aW9ucy5u b25lX3N3aXRjaCA9PSAxICYmIG9wdGlvbnMubm9uZV9lbmFibGVkID09IDEpIHsKLSsJCWNoYXIg Km15cHJvcG9zYWxbUFJPUE9TQUxfTUFYXTsKLSsJCWNoYXIgKnMgPSBOVUxMOwotKwkJY29uc3Qg Y2hhciAqbm9uZV9jaXBoZXIgPSAibm9uZSI7Ci0rCQlpZiAoIXR0eV9mbGFnKSB7IC8qIG5vIG51 bGwgb24gdHR5IHNlc3Npb25zICovCi0rCQkJZGVidWcoIlJlcXVlc3Rpbmcgbm9uZSByZWtleWlu Zy4uLiIpOwotKwkJCWtleF9wcm9wb3NhbF9wb3B1bGF0ZV9lbnRyaWVzKHNzaCwgbXlwcm9wb3Nh bCwgcywgbm9uZV9jaXBoZXIsCi0rCQkJCQkJICAgICAgb3B0aW9ucy5tYWNzLAotKwkJCQkJCSAg ICAgIGNvbXByZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29tcHJlc3Npb24pLAotKwkJCQkJCSAg ICAgIG9wdGlvbnMuaG9zdGtleWFsZ29yaXRobXMpOwotKwkJCWZwcmludGYoc3RkZXJyLCAiV0FS TklORzogRU5BQkxFRCBOT05FIENJUEhFUiEhIVxuIik7Ci0rCi0rCQkJLyogTk9ORU1BQyBjYW4g b25seSBiZSB1c2VkIGluIGNvbnRleHQgb2YgdGhlIE5PTkUgQ0lQSEVSICovCi0rCQkJaWYgKG9w dGlvbnMubm9uZW1hY19lbmFibGVkID09IDEpIHsKLSsJCQkJY29uc3QgY2hhciAqbm9uZV9tYWMg PSAibm9uZSI7Ci0rCQkJCWtleF9wcm9wb3NhbF9wb3B1bGF0ZV9lbnRyaWVzKHNzaCwgbXlwcm9w b3NhbCwgcywgbm9uZV9jaXBoZXIsCi0rCQkJCQkJCSAgICAgIG5vbmVfbWFjLAotKwkJCQkJCQkg ICAgICBjb21wcmVzc2lvbl9hbGdfbGlzdChvcHRpb25zLmNvbXByZXNzaW9uKSwKLSsJCQkJCQkJ ICAgICAgb3B0aW9ucy5ob3N0a2V5YWxnb3JpdGhtcyk7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAi V0FSTklORzogRU5BQkxFRCBOT05FIE1BQ1xuIik7Ci0rCQkJfQotKwkJCWtleF9wcm9wMmJ1Zihz c2gtPmtleC0+bXksIG15cHJvcG9zYWwpOwotKwkJCXBhY2tldF9yZXF1ZXN0X3Jla2V5aW5nKCk7 Ci0rCQl9IGVsc2UgewotKwkJCS8qIHJlcXVlc3RlZCBOT05FIGNpcGhlciB3aGVuIGluIGEgdHR5 ICovCi0rCQkJZGVidWcoIkNhbm5vdCBzd2l0Y2ggdG8gTk9ORSBjaXBoZXIgd2l0aCB0dHkgYWxs b2NhdGVkIik7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJOT05FIGNpcGhlciBzd2l0Y2ggZGlzYWJs ZWQgd2hlbiBhIFRUWSBpcyBhbGxvY2F0ZWRcbiIpOwotKwkJfQotKwl9Ci0rCi0gCWlmIChzc2hf cGFja2V0X2Nvbm5lY3Rpb25faXNfb25fc29ja2V0KHNzaCkpIHsKLSAJCXZlcmJvc2UoIkF1dGhl bnRpY2F0ZWQgdG8gJXMgKFslc106JWQpIHVzaW5nIFwiJXNcIi4iLCBob3N0LAotIAkJICAgIHNz aF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpLAotZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcvc3NoY29ubmVjdC5jIG9wZW5zc2gtMTAuM3AxL3NzaGNvbm5lY3Qu YwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoY29ubmVjdC5jCTIwMjYtMDctMDIgMDA6Mjc6 MDYuMTAzMjc1MzA3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoY29ubmVjdC5jCTIwMjYt MDctMDIgMTA6MjU6NDYuNTQ5Nzk4OTU5ICswMjAwCi1AQCAtNTUsNiArNTUsNyBAQAotICNpbmNs dWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAiYXV0aGZkLmgiCi0gI2luY2x1ZGUgImtleC5oIgot KyNpbmNsdWRlICJoYXBweWV5ZWJhbGxzLmgiCi0gCi0gc3RydWN0IHNzaGtleSAqcHJldmlvdXNf aG9zdF9rZXkgPSBOVUxMOwotIAotQEAgLTY2LDYgKzY3LDcgQEAKLSBleHRlcm4gaW50IGRlYnVn X2ZsYWc7Ci0gZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKLSBleHRlcm4gY2hhciAqX19wcm9nbmFt ZTsKLStleHRlcm4gY2hhciBnbG9iYWxfbnRvcFtOSV9NQVhIT1NUXTsKLSAKLSBzdGF0aWMgaW50 IHNob3dfb3RoZXJfa2V5cyhzdHJ1Y3QgaG9zdGtleXMgKiwgc3RydWN0IHNzaGtleSAqKTsKLSBz dGF0aWMgdm9pZCB3YXJuX2NoYW5nZWRfa2V5KHN0cnVjdCBzc2hrZXkgKik7Ci1AQCAtMzMzLDcg KzMzNSw3IEBACi0gLyoKLSAgKiBDcmVhdGVzIGEgc29ja2V0IGZvciB1c2UgYXMgdGhlIHNzaCBj b25uZWN0aW9uLgotICAqLwotLXN0YXRpYyBpbnQKLStpbnQKLSBzc2hfY3JlYXRlX3NvY2tldChz dHJ1Y3QgYWRkcmluZm8gKmFpKQotIHsKLSAJaW50IHNvY2ssIHI7Ci1AQCAtMzQ1LDkgKzM0Nywx NiBAQAotICNlbmRpZgotIAljaGFyIG50b3BbTklfTUFYSE9TVF07Ci0gCi0tCXNvY2sgPSBzb2Nr ZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOwotKwkv KiB1c2VyIHJlcXVlc3QgZm9yIE11bHRpcGF0aCBUQ1AgKi8KLSsJaWYgKG9wdGlvbnMudXNlX21w dGNwKQotKwkJc29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsIElQ UFJPVE9fTVBUQ1ApOwotKwllbHNlCi0rCQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFp LT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKLSsKLSAJaWYgKHNvY2sgPT0gLTEpIHsK LSAJCWVycm9yKCJzb2NrZXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJCWlmIChvcHRpb25z LnVzZV9tcHRjcCkKLSsJCQllcnJvciAoIllvdSBhc2tlZCB0byB1c2UgTVBUQ1AuIFBsZWFzZSBl bnN1cmUgaXQgaXMgZW5hYmxlZC4iKTsKLSAJCXJldHVybiAtMTsKLSAJfQotIAkodm9pZClmY250 bChzb2NrLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKLUBAIC00NTAsNiArNDU5LDE1IEBACi0gCQkJ c2xlZXAoMSk7Ci0gCQkJZGVidWcoIlRyeWluZyBhZ2Fpbi4uLiIpOwotIAkJfQotKwkJaWYgKG9w dGlvbnMudXNlX2hhcHB5ZXllcyA9PSAxKSB7Ci0rCQkJZGVidWdfZiAoIkF0dGVtcHRpbmcgUkZD IDgzMDUgLyBIYXBweSBFeWViYWxscyBjb25uZWN0aW9uLiIpOwotKwkJCXNvY2sgPSBoYXBweV9l eWViYWxscyhob3N0LCBhaXRvcCwKLSsJCQkgICAgaG9zdGFkZHIsIHRpbWVvdXRfbXMpOwotKwkJ CWlmIChzb2NrICE9IC0xKSB7Ci0rCQkJCWRlYnVnX2YgKCJSRkMgODMwNSAvIEhhcHB5IEV5ZWJh bGxzIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bC4iKTsKLSsJCQkJYnJlYWs7CS8qIFN1Y2Nlc3NmdWwg Y29ubmVjdGlvbi4gKi8KLSsgCQkJfQotKwkJfSBlbHNlIHsKLSAJCS8qCi0gCQkgKiBMb29wIHRo cm91Z2ggYWRkcmVzc2VzIGZvciB0aGlzIGhvc3QsIGFuZCB0cnkgZWFjaCBvbmUgaW4KLSAJCSAq IHNlcXVlbmNlIHVudGlsIHRoZSBjb25uZWN0aW9uIHN1Y2NlZWRzLgotQEAgLTUwNCw2ICs1MjIs NyBAQAotIAkJfQotIAkJaWYgKHNvY2sgIT0gLTEpCi0gCQkJYnJlYWs7CS8qIFN1Y2Nlc3NmdWwg Y29ubmVjdGlvbi4gKi8KLSsJCX0KLSAJfQotIAotIAkvKiBSZXR1cm4gZmFpbHVyZSBpZiB3ZSBk aWRuJ3QgZ2V0IGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAqLwotQEAgLTE2MTUsNiArMTYzNCw5 IEBACi0gCS8qIGtleSBleGNoYW5nZSAqLwotIAkvKiBhdXRoZW50aWNhdGUgdXNlciAqLwotIAlk ZWJ1ZygiQXV0aGVudGljYXRpbmcgdG8gJXM6JWQgYXMgJyVzJyIsIGhvc3QsIHBvcnQsIHNlcnZl cl91c2VyKTsKLSsJLyogaWYgdXNpbmcgUkZDIDgzMDUgY2xlYXJseSBzdGF0ZSB3aGljaCBhZGRy ZXNzIHdlIGFyZSBjb25uZWN0ZWQgdG8gKi8KLSsJaWYgKG9wdGlvbnMudXNlX2hhcHB5ZXllcyA9 PSAxKQotKwkJZGVidWcoIlJGQyA4MzA1IGF1dGhlbnRpY2F0aW5nIHRvICUuMjAwcyIsIGdsb2Jh bF9udG9wKTsKLSAJc3NoX2tleDIoc3NoLCBob3N0LCBob3N0YWRkciwgcG9ydCwgY2luZm8pOwot IAlpZiAoIW9wdGlvbnMua2V4X2FsZ29yaXRobXNfc2V0ICYmIHNzaC0+a2V4ICE9IE5VTEwgJiYK LSAJICAgIHNzaC0+a2V4LT5uYW1lICE9IE5VTEwgJiYgb3B0aW9ucy53YXJuX3dlYWtfY3J5cHRv ICYmCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLWF1dGguYyBvcGVuc3NoLTEw LjNwMS9zc2hkLWF1dGguYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZC1hdXRoLmMJMjAy Ni0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hk LWF1dGguYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjczNDExMzA4MCArMDIwMAotQEAgLTc5OCw2ICs3 OTgsMjUgQEAKLSAJc3RydWN0IGtleCAqa2V4OwotIAlpbnQgcjsKLSAKLSsJLyogdGhpcyB1c2Vk IHRvIGJlIGluIHNzaGQuYyB3aGVuIHdlIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQotKwkg KiBidXQgbmVlZGVkIHRvIGJlIG1vdmVkIGhlcmUgYXMgZG9fc3NoMl9rZXggaW4gc3NoZC1hdXRo IHdhc24ndAotKwkgKiBwaWNraW5nIHVwIHRoZSBub25lIG9wdGlvbnMuIENKUiA0LzEwLzIwMjUK LSsJICovCi0rCWlmIChvcHRpb25zLm5vbmVfZW5hYmxlZCA9PSAxKSB7Ci0rCQlkZWJ1ZygiV0FS TklORzogTm9uZSBjaXBoZXIgZW5hYmxlZCIpOwotKwkJY2hhciAqb2xkX2NpcGhlcnMgPSBvcHRp b25zLmNpcGhlcnM7Ci0rCQl4YXNwcmludGYoJm9wdGlvbnMuY2lwaGVycywgIiVzLG5vbmUiLCBv bGRfY2lwaGVycyk7Ci0rCQlmcmVlKG9sZF9jaXBoZXJzKTsKLSsKLSsJCS8qIG9ubHkgZW5hYmxl IHRoZSBub25lIE1BQyBpbiBjb250ZXh0IG9mIHRoZSBub25lIGNpcGhlciAtY2pyICovCi0rCQlp ZiAob3B0aW9ucy5ub25lbWFjX2VuYWJsZWQgPT0gMSkgewotKwkJCWRlYnVnKCJXQVJOSU5HOiBO b25lIE1BQyBlbmFibGVkIik7Ci0rCQkJY2hhciAqb2xkX21hY3MgPSBvcHRpb25zLm1hY3M7Ci0r CQkJeGFzcHJpbnRmKCZvcHRpb25zLm1hY3MsICIlcyxub25lIiwgb2xkX21hY3MpOwotKwkJCWZy ZWUob2xkX21hY3MpOwotKwkJfQotKwl9Ci0rCi0gCWlmIChvcHRpb25zLnJla2V5X2xpbWl0IHx8 IG9wdGlvbnMucmVrZXlfaW50ZXJ2YWwpCi0gCQlzc2hfcGFja2V0X3NldF9yZWtleV9saW1pdHMo c3NoLCBvcHRpb25zLnJla2V5X2xpbWl0LAotIAkJICAgIG9wdGlvbnMucmVrZXlfaW50ZXJ2YWwp OwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZC5jIG9wZW5zc2gtMTAuM3AxL3Nz aGQuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYu MTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoZC5jCTIwMjYtMDctMDIgMDA6 Mjc6MjkuNzM0Mjk4NjIxICswMjAwCi1AQCAtODI2LDYgKzgyNiw4IEBACi0gCWludCByZXQsIGxp c3Rlbl9zb2NrOwotIAlzdHJ1Y3QgYWRkcmluZm8gKmFpOwotIAljaGFyIG50b3BbTklfTUFYSE9T VF0sIHN0cnBvcnRbTklfTUFYU0VSVl07Ci0rCWludCBzb2Nrc2l6ZTsKLSsJaW50IHNvY2tzaXpl bGVuID0gc2l6ZW9mKGludCk7Ci0gCi0gCWZvciAoYWkgPSBsYS0+YWRkcnM7IGFpOyBhaSA9IGFp LT5haV9uZXh0KSB7Ci0gCQlpZiAoYWktPmFpX2ZhbWlseSAhPSBBRl9JTkVUICYmIGFpLT5haV9m YW1pbHkgIT0gQUZfSU5FVDYpCi1AQCAtODQxLDExICs4NDMsMTggQEAKLSAJCQljb250aW51ZTsK LSAJCX0KLSAJCS8qIENyZWF0ZSBzb2NrZXQgZm9yIGxpc3RlbmluZy4gKi8KLS0JCWxpc3Rlbl9z b2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwKLS0JCSAgICBhaS0+ YWlfcHJvdG9jb2wpOwotKwkJaWYgKG9wdGlvbnMudXNlX21wdGNwKQotKwkJCWxpc3Rlbl9zb2Nr ID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwKLSsJCQkgICAgSVBQUk9U T19NUFRDUCk7Ci0rCQllbHNlCi0rCQkJbGlzdGVuX3NvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWls eSwgYWktPmFpX3NvY2t0eXBlLAotKwkJCSAgICBhaS0+YWlfcHJvdG9jb2wpOwotKwotIAkJaWYg KGxpc3Rlbl9zb2NrID09IC0xKSB7Ci0gCQkJLyoga2VybmVsIG1heSBub3Qgc3VwcG9ydCBpcHY2 ICovCi0gCQkJdmVyYm9zZSgic29ja2V0OiAlLjEwMHMiLCBzdHJlcnJvcihlcnJubykpOwotKwkJ CWlmIChvcHRpb25zLnVzZV9tcHRjcCkKLSsJCQkJdmVyYm9zZSgiTVBUQ1AgcmVxdWVzdGVkIGJ1 dCBtYXkgbm90IGJlIGF2YWlsYWJsZS4iKTsKLSAJCQljb250aW51ZTsKLSAJCX0KLSAJCWlmIChz ZXRfbm9uYmxvY2sobGlzdGVuX3NvY2spID09IC0xKSB7Ci1AQCAtODcxLDYgKzg4MCwxMCBAQAot IAotIAkJZGVidWcoIkJpbmQgdG8gcG9ydCAlcyBvbiAlcy4iLCBzdHJwb3J0LCBudG9wKTsKLSAK LSsJCWdldHNvY2tvcHQobGlzdGVuX3NvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKLSsJCQkJ ICAgJnNvY2tzaXplLCAmc29ja3NpemVsZW4pOwotKwkJZGVidWcoIlNlcnZlciBUQ1AgUldJTiBz b2NrZXQgc2l6ZTogJWQiLCBzb2Nrc2l6ZSk7Ci0rCi0gCQkvKiBCaW5kIHRoZSBzb2NrZXQgdG8g dGhlIGRlc2lyZWQgcG9ydC4gKi8KLSAJCWlmIChiaW5kKGxpc3Rlbl9zb2NrLCBhaS0+YWlfYWRk ciwgYWktPmFpX2FkZHJsZW4pID09IC0xKSB7Ci0gCQkJZXJyb3IoIkJpbmQgdG8gcG9ydCAlcyBv biAlcyBmYWlsZWQ6ICUuMjAwcy4iLAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3No ZF9jb25maWcgb3BlbnNzaC0xMC4zcDEvc3NoZF9jb25maWcKLS0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL3NzaGRfY29uZmlnCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysg b3BlbnNzaC0xMC4zcDEvc3NoZF9jb25maWcJMjAyNi0wNy0wMiAwMTo0ODoyOS40MTQ5ODgxNjYg KzAyMDAKLUBAIC0xOCw3ICsxOCw3IEBACi0gIyBTRUxpbnV4IGFib3V0IHRoaXMgY2hhbmdlLgot ICMgc2VtYW5hZ2UgcG9ydCAtYSAtdCBzc2hfcG9ydF90IC1wIHRjcCAjUE9SVE5VTUJFUgotICMK LS0jUG9ydCAyMgotK1BvcnQgMjIyMgotICNBZGRyZXNzRmFtaWx5IGFueQotICNMaXN0ZW5BZGRy ZXNzIDAuMC4wLjAKLSAjTGlzdGVuQWRkcmVzcyA6OgotQEAgLTEyMiw2ICsxMjIsNyBAQAotICNQ ZXJtaXRUdW5uZWwgbm8KLSAjQ2hyb290RGlyZWN0b3J5IG5vbmUKLSAjVmVyc2lvbkFkZGVuZHVt IG5vbmUKLSsjVXNlTVBUQ1Agbm8KLSAKLSAjIG5vIGRlZmF1bHQgYmFubmVyIHBhdGgKLSAjQmFu bmVyIG5vbmUKLUBAIC0xMjksNiArMTMwLDE5IEBACi0gIyBvdmVycmlkZSBkZWZhdWx0IG9mIG5v IHN1YnN5c3RlbXMKLSBTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMvc2Z0cC1zZXJ2ZXIKLSAK LSsjIHRoZSBmb2xsb3dpbmcgYXJlIEhQTiByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwot KyMgdGNwIHJlY2VpdmUgYnVmZmVyIHBvbGxpbmcuIGRpc2FibGUgaW4gbm9uIGF1dG90dW5pbmcg a2VybmVscwotKyNUY3BSY3ZCdWZQb2xsIHllcwotKwotKyMgZGlzYWJsZSBocG4gcGVyZm9ybWFu Y2UgYm9vc3RzCi0rI0hQTkRpc2FibGVkIG5vCi0rCi0rIyBhbGxvdyB0aGUgdXNlIG9mIHRoZSBu b25lIGNpcGhlcgotKyNOb25lRW5hYmxlZCBubwotKwotKyMgYWxsb3cgdGhlIHVzZSBvZiB0aGUg bm9uZSBNQUMKLSsjTm9uZU1hY0VuYWJsZWQgbm8KLSsKLSAjIEV4YW1wbGUgb2Ygb3ZlcnJpZGlu ZyBzZXR0aW5ncyBvbiBhIHBlci11c2VyIGJhc2lzCi0gI01hdGNoIFVzZXIgYW5vbmN2cwotICMJ WDExRm9yd2FyZGluZyBubwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZF9jb25m aWcuNSBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZy41Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3Jp Zy9zc2hkX2NvbmZpZy41CTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysg b3BlbnNzaC0xMC4zcDEvc3NoZF9jb25maWcuNQkyMDI2LTA3LTAyIDAwOjI3OjI5LjczNDU5NzY1 MSArMDIwMAotQEAgLTU2LDYgKzU2LDE2IEBACi0gLlBxIFwmIgotIGluIG9yZGVyIHRvIHJlcHJl c2VudCBhcmd1bWVudHMgY29udGFpbmluZyBzcGFjZXMuCi0gLlBwCi0rLlhyIGhwbnNzaGQgOAot K2lzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc3NoZCBhbmQgdXNlcyB0aGUgc2Ft ZSBjb25maWd1cmF0aW9uIGZvcm1hdCwgZGlyZWN0aXZlcywgYW5kIG9wdGlvbnMuCi0rLlhyIGhw bnNzaGQgOAotK2NhbiB1c2UgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBmaWxlIGFzCi0rLlhyIHNz aGQgOAotK3Rob3VnaCB0aGUgaW52ZXJzZSBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZS4gVGhpcyBp cyBiZWNhdXNlCi0rLlhyIGhwbnNzaCA4Ci0raGFzIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIHdo aWNoIGFyZSBkaXNjdXNzZWQgYmVsb3cuIEFzIHN1Y2ggYWRtaW5pc3RyYXRvcnMgc2hvdWxkIG1h aW50YWluCi0rc2VwZXJhdGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgZWFjaC4KLSsuUHAKLSBU aGUgcG9zc2libGUKLSBrZXl3b3JkcyBhbmQgdGhlaXIgbWVhbmluZ3MgYXJlIGFzIGZvbGxvd3Mg KG5vdGUgdGhhdAotIGtleXdvcmRzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBhcmd1bWVudHMg YXJlIGNhc2Utc2Vuc2l0aXZlKToKLUBAIC02NzEsNiArNjgxLDEwIEBACi0gVENQIGFuZCBTdHJl YW1Mb2NhbC4KLSBUaGlzIG9wdGlvbiBvdmVycmlkZXMgYWxsIG90aGVyIGZvcndhcmRpbmctcmVs YXRlZCBvcHRpb25zIGFuZCBtYXkKLSBzaW1wbGlmeSByZXN0cmljdGVkIGNvbmZpZ3VyYXRpb25z LgotKy5JdCBDbSBEaXNhYmxlTVRBRVMKLStTd2l0Y2ggdGhlIGVuY3J5cHRpb24gY2lwaGVyIGJl aW5nIHVzZWQgZnJvbSB0aGUgbXVsdGl0aHJlYWRlZCBNVC1BRVMtQ1RSIGNpcGhlcgotK2JhY2sg dG8gdGhlIHN0b2NrIHNpbmdsZS10aHJlYWRlZCBBRVMtQ1RSIGNpcGhlci4gRGVmYXVsdCBpcyAK LSsuQ20gbm8uIEhQTlNTSCBvbmx5LiAKLSAuSXQgQ20gRXhwb3NlQXV0aEluZm8KLSBXcml0ZXMg YSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiBhdXRoZW50aWNhdGlvbiBtZXRo b2RzIGFuZAotIHB1YmxpYyBjcmVkZW50aWFscyAoZS5nLiBrZXlzKSB1c2VkIHRvIGF1dGhlbnRp Y2F0ZSB0aGUgdXNlci4KLUBAIC0xMDI2LDYgKzEwNDAsMTEgQEAKLSB0aGF0IHRoZSBzZXJ2ZXIg b2ZmZXJzLgotIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzaWduYXR1cmUgYWxnb3JpdGhtcyBtYXkg YWxzbyBiZSBvYnRhaW5lZCB1c2luZwotIC5RcSBzc2ggLVEgSG9zdEtleUFsZ29yaXRobXMgLgot Ky5JdCBDbSBIUE5EaXNhYmxlZAotK0luIHNvbWUgc2l0dWF0aW9ucywgc3VjaCBhcyB0cmFuc2Zl cnMgb24gYSBsb2NhbCBhcmVhIG5ldHdvcmssIHRoZSBpbXBhY3QKLStvZiB0aGUgSFBOIGNvZGUg cHJvZHVjZXMgYSBuZXQgZGVjcmVhc2UgaW4gcGVyZm9ybWFuY2UuIEluIHRoZXNlIGNhc2VzIGl0 IGlzCi0raGVscGZ1bCB0byBkaXNhYmxlIHRoZSBIUE4gZnVuY3Rpb25hbGl0eS4gQnkgZGVmYXVs dCBIUE5EaXNhYmxlZCBpcyBzZXQgdG8gCi0rLkNtIG5vLgotIC5JdCBDbSBJZ25vcmVSaG9zdHMK LSBTcGVjaWZpZXMgd2hldGhlciB0byBpZ25vcmUgcGVyLXVzZXIKLSAuUGEgLnJob3N0cwotQEAg LTE1NDgsNiArMTU2NywxOSBAQAotIGtleSBleGNoYW5nZSBtZXRob2RzLgotIFRoZSBkZWZhdWx0 IGlzCi0gLlBhIC9ldGMvbW9kdWxpIC4KLSsuSXQgQ20gTm9uZUVuYWJsZWQKLStFbmFibGUgb3Ig ZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIGNpcGhlci4gQ2FyZSBtdXN0IGFsd2F5cyBiZSB1 c2VkCi0rd2hlbiBlbmFibGluZyB0aGlzIGFzIGl0IHdpbGwgYWxsb3cgdXNlcnMgdG8gc2VuZCBk YXRhIGluIHRoZSBjbGVhci4gSG93ZXZlciwKLStpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0 IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIHJlbWFpbnMgZW5jcnlwdGVkCi0rZXZlbiBpZiB0 aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBEZWZhdWx0IGlzIAotKy5DbSBubwotKy5JdCBDbSBOb25l TWFjRW5hYmxlZAotK0VuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgTUFDLiBX aGVuIHRoaXMgaXMgZW5hYmxlZCBzc2gKLSt3aWxsICpub3QqIHByb3ZpZGUgZGF0YSBpbnRlZ3Jp dHkgb2YgYW55IGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQgYmV0d2VlbiBob3N0cy4gVXNlCi0rd2l0 aCBjYXV0aW9uIGFzIGl0LCB1bmxpa2UganVzdCB1c2luZyBOb25lRW5hYmxlZCwgZG9lc24ndCBw cm92aWRlIGRhdGEgaW50ZWdyaXR5IGFuZAotK3Byb3RlY3Rpb24gYWdhaW5zdCBtYW4taW4tdGhl LW1pZGRsZSBhdHRhY2tzLiBBcyB3aXRoIE5vbmVFbmFibGVkIGFsbCBhdXRoZW50aWNhdGlvbgot K3JlbWFpbnMgZW5jcnlwdGVkIGFuZCBpbnRlZ3JpdHkgaXMgZW5zdXJlZC4gRGVmYXVsdCBpcyAK LSsuQ20gbm8uCi0gLkl0IENtIFBBTVNlcnZpY2VOYW1lCi0gU3BlY2lmaWVzIHRoZSBzZXJ2aWNl IG5hbWUgdXNlZCBmb3IgUGx1Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZXMgKFBBTSkKLSBh dXRoZW50aWNhdGlvbiwgYXV0aG9yaXNhdGlvbiBhbmQgc2Vzc2lvbiBjb250cm9scyB3aGVuCi1A QCAtMjEyNCw2ICsyMTU2LDEzIEBACi0gLlBwCi0gVG8gZGlzYWJsZSBUQ1Aga2VlcGFsaXZlIG1l c3NhZ2VzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0bwotIC5DbSBubyAuCi0rLkl0IENtIFRj cFJjdkJ1ZlBvbGwKLStFbmFibGUgb2YgZGlzYWJsZSB0aGUgcG9sbGluZyBvZiB0aGUgdGNwIHJl Y2VpdmUgYnVmZmVyIHRocm91Z2hvdXQgdGhlIGxpZmUKLStvZiB0aGUgY29ubmVjdGlvbi4gTWFr ZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBmb3Igc3lzdGVtcyBtYWtpbmcgCi0r dXNlIG9mIGF1dG90dW5pbmcga2VybmVscyAobGludXggMi40LjI0KywgMi42LCBNUyBWaXN0YSkg aW4gb3JkZXIgdG8KLSttYXhpbWl6ZSB0aHJvdWdocHV0IG9uIGhpZ2ggcGVyZm9ybWFuY2UgbmV0 d29ya3MuIAotK0RlZmF1bHQgaXMgCi0rLkNtIHllcy4KLSAuSXQgQ20gVHJ1c3RlZFVzZXJDQUtl eXMKLSBTcGVjaWZpZXMgYSBmaWxlIGNvbnRhaW5pbmcgcHVibGljIGtleXMgb2YgY2VydGlmaWNh dGUgYXV0aG9yaXRpZXMgdGhhdCBhcmUKLSB0cnVzdGVkIHRvIHNpZ24gdXNlciBjZXJ0aWZpY2F0 ZXMgZm9yIGF1dGhlbnRpY2F0aW9uLCBvcgotQEAgLTIxODQsNiArMjIyMywxMiBAQAotIC5DbSBN YXRjaAotIC5DbSBIb3N0Ci0gZGlyZWN0aXZlcy4KLSsuSXQgQ20gVXNlTVBUQ1AKLStJZiBzZXQg dG8KLSsuQ20geWVzICwKLSt0aGlzIHdpbGwgZW5hYmxlIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBp bnN0ZWFkIG9mIFRDUCAodGhpcyBvbmx5IHdvcmtzIG9uIExpbnV4KS4KLStUaGUgZGVmYXVsdCBp cwotKy5DbSBubyAuCi0gLkl0IENtIFVzZVBBTQotIEVuYWJsZXMgdGhlIFBsdWdnYWJsZSBBdXRo ZW50aWNhdGlvbiBNb2R1bGUgaW50ZXJmYWNlLgotIElmIHNldCB0bwotQEAgLTI0MjksMyArMjQ3 NCwxMSBAQAotIGFuZAotIC5BbiBNYXJrdXMgRnJpZWRsCi0gY29udHJpYnV0ZWQgc3VwcG9ydCBm b3IgcHJpdmlsZWdlIHNlcGFyYXRpb24uCi0rLkFuIENocmlzIFJhcGllciwgCi0rLkFuIE1pY2hh ZWwgU3RldmVucywgCi0rLkFuIEJlbiBCZW5uZXQsIAotK2FuZCAKLSsuQW4gTWlrZSBUYXNvdGEg Ci0rZGV2ZWxvcGVkIHRoZSBIUE4gZXh0ZW5zaW9ucyBhdCB0aGUgUGl0dHNidXJnaCBTdXBlcmNv bXV0aW5nIENlbnRlciAKLSt3aXRoIGdyYW50cyBmcm9tIENpc2NvLCB0aGUgTmF0aW9uYWwgTGli cmFyeSBvZiBNZWRpY2luZSwgYW5kIAotK3RoZSBOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24u IAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZC1zZXNzaW9uLmMgb3BlbnNzaC0x MC4zcDEvc3NoZC1zZXNzaW9uLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGQtc2Vzc2lv bi5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysgb3BlbnNzaC0xMC4z cDEvc3NoZC1zZXNzaW9uLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzQ4MDQ2ODEgKzAyMDAKLUBA IC0xMTA2LDYgKzExMDYsMjAgQEAKLSAJfQotIAllbmRwd2VudCgpOwotIAotKwkvKiBnZXQgTk9O RSBvcHRpb25zICovCi0rCWlmIChvcHRpb25zLm5vbmVfZW5hYmxlZCA9PSAxKSB7Ci0rCQljaGFy ICpvbGRfY2lwaGVycyA9IG9wdGlvbnMuY2lwaGVyczsKLSsJCXhhc3ByaW50Zigmb3B0aW9ucy5j aXBoZXJzLCAiJXMsbm9uZSIsIG9sZF9jaXBoZXJzKTsKLSsJCWZyZWUob2xkX2NpcGhlcnMpOwot KwotKwkJLyogb25seSBlbmFibGUgdGhlIG5vbmUgTUFDIGluIGNvbnRleHQgb2YgdGhlIG5vbmUg Y2lwaGVyIC1janIgKi8KLSsJCWlmIChvcHRpb25zLm5vbmVtYWNfZW5hYmxlZCA9PSAxKSB7Ci0r CQkJY2hhciAqb2xkX21hY3MgPSBvcHRpb25zLm1hY3M7Ci0rCQkJeGFzcHJpbnRmKCZvcHRpb25z Lm1hY3MsICIlcyxub25lIiwgb2xkX21hY3MpOwotKwkJCWZyZWUob2xkX21hY3MpOwotKwkJfQot Kwl9Ci0rCi0gCWlmICghZGVidWdfZmxhZyAmJiAhaW5ldGRfZmxhZykgewotIAkJaWYgKChzdGFy dHVwX3BpcGUgPSBkdXAoUkVFWEVDX0NPTkZJR19QQVNTX0ZEKSkgPT0gLTEpCi0gCQkJZmF0YWwo ImludGVybmFsIGVycm9yOiBubyBzdGFydHVwIHBpcGUiKTsKLUBAIC0xMzE5LDYgKzEzMzMsOSBA QAotIAkgICAgcmRvbWFpbiA9PSBOVUxMID8gIiIgOiAiXCIiKTsKLSAJZnJlZShsYWRkcik7Ci0g Ci0rCS8qIHNldCB0aGUgSFBOIG9wdGlvbnMgZm9yIHRoZSBjaGlsZCAqLwotKwljaGFubmVsX3Nl dF9ocG5fZGlzYWJsZWQob3B0aW9ucy5ocG5fZGlzYWJsZWQpOwotKwotIAkvKgotIAkgKiBXZSBk b24ndCB3YW50IHRvIGxpc3RlbiBmb3JldmVyIHVubGVzcyB0aGUgb3RoZXIgc2lkZQotIAkgKiBz dWNjZXNzZnVsbHkgYXV0aGVudGljYXRlcyBpdHNlbGYuICBTbyB3ZSBzZXQgdXAgYW4gYWxhcm0g d2hpY2ggaXMKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC5oIG9wZW5zc2gtMTAu M3AxL3NzaC5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2guaAkyMDI2LTA3LTAyIDAwOjI3 OjA2LjEwMzI3NTMwNyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NzaC5oCTIwMjYtMDctMDIg MTA6MDI6MDIuNDU1OTY5Mzc3ICswMjAwCi1AQCAtMTQsNiArMTQsNyBAQAotIAotIC8qIERlZmF1 bHQgcG9ydCBudW1iZXIuICovCi0gI2RlZmluZSBTU0hfREVGQVVMVF9QT1JUCTIyCi0rI2RlZmlu ZSBIUE5TU0hfREVGQVVMVF9QT1JUICAgIDIyMjIKLSAKLSAvKgotICAqIE1heGltdW0gbnVtYmVy IG9mIGNlcnRpZmljYXRlIGZpbGVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZAotQEAgLTQzLDcgKzQ0 LDcgQEAKLSAgKiBOYW1lIGZvciB0aGUgc2VydmljZS4gIFRoZSBwb3J0IG5hbWVkIGJ5IHRoaXMg c2VydmljZSBvdmVycmlkZXMgdGhlCi0gICogZGVmYXVsdCBwb3J0IGlmIHByZXNlbnQuCi0gICov Ci0tI2RlZmluZSBTU0hfU0VSVklDRV9OQU1FCSJzc2giCi0rI2RlZmluZSBTU0hfU0VSVklDRV9O QU1FCSJocG5zc2giCi0gCi0gLyoKLSAgKiBOYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJs ZSBjb250YWluaW5nIHRoZSBwcm9jZXNzIElEIG9mIHRoZQotZGlmZiAtTnVyIG9wZW5zc2gtMTAu M3AxLm9yaWcvc3Noa2V5LmMgb3BlbnNzaC0xMC4zcDEvc3Noa2V5LmMKLS0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL3NzaGtleS5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0r Kysgb3BlbnNzaC0xMC4zcDEvc3Noa2V5LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzUwODkxNTcg KzAyMDAKLUBAIC0xNzY3LDcgKzE3NjcsOCBAQAotIAkgICAgc3RkZXJyKTsKLSAjZW5kaWYKLSAJ aWYgKChyID0gY2lwaGVyX2luaXQoJmNjdHgsIGNpcGhlciwga2V5aXYsIGNpcGhlcl9rZXlsZW4o Y2lwaGVyKSwKLS0JICAgIGtleWl2ICsgY2lwaGVyX2tleWxlbihjaXBoZXIpLCBjaXBoZXJfaXZs ZW4oY2lwaGVyKSwgMSkpICE9IDApCi0rCSAgICBrZXlpdiArIGNpcGhlcl9rZXlsZW4oY2lwaGVy KSwgY2lwaGVyX2l2bGVuKGNpcGhlciksIDAsCi0rCSAgICBDSVBIRVJfRU5DUllQVCwgQ0lQSEVS X1NFUklBTCkpICE9IDApCi0gCQlnb3RvIG91dDsKLSAKLSAJLyogU2VyaWFsaXNlIGFuZCBlbmNy eXB0IHRoZSBwcml2YXRlIGtleSB1c2luZyB0aGUgZXBoZW1lcmFsIGtleSAqLwotQEAgLTE5MDEs NyArMTkwMiw4IEBACi0gCSAgICBrZXlpdiwgU1NIX0RJR0VTVF9NQVhfTEVOR1RIKSkgIT0gMCkK LSAJCWdvdG8gb3V0OwotIAlpZiAoKHIgPSBjaXBoZXJfaW5pdCgmY2N0eCwgY2lwaGVyLCBrZXlp diwgY2lwaGVyX2tleWxlbihjaXBoZXIpLAotLQkgICAga2V5aXYgKyBjaXBoZXJfa2V5bGVuKGNp cGhlciksIGNpcGhlcl9pdmxlbihjaXBoZXIpLCAwKSkgIT0gMCkKLSsJICAgIGtleWl2ICsgY2lw aGVyX2tleWxlbihjaXBoZXIpLCBjaXBoZXJfaXZsZW4oY2lwaGVyKSwgMCwKLSsJICAgIENJUEhF Ul9ERUNSWVBULCBDSVBIRVJfU0VSSUFMKSkgIT0gMCkKLSAJCWdvdG8gb3V0OwotICNpZmRlZiBE RUJVR19QSwotIAlmcHJpbnRmKHN0ZGVyciwgIiVzOiBrZXkraXZcbiIsIF9fZnVuY19fKTsKLUBA IC0yOTQ1LDYgKzI5NDcsMTMgQEAKLSAJCWtkZm5hbWUgPSAibm9uZSI7Ci0gCX0gZWxzZSBpZiAo Y2lwaGVybmFtZSA9PSBOVUxMKQotIAkJY2lwaGVybmFtZSA9IERFRkFVTFRfQ0lQSEVSTkFNRTsK LSsJLyoKLSsJICogTk9URTogV2l0aG91dCBPcGVuU1NMLCB0aGlzIHN0cmluZyBjb21wYXJpc29u IGlzIHN0aWxsIHNhZmUsIGV2ZW4KLSsJICogdGhvdWdoIGl0IHdpbGwgbmV2ZXIgbWF0Y2ggYmVj YXVzZSB0aGUgbXVsdGl0aHJlYWRlZCBjaXBoZXIgaXMgbm90Ci0rCSAqIGVuYWJsZWQuCi0rCSAq LwotKwllbHNlIGlmIChzdHJjbXAoY2lwaGVybmFtZSwgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhw bnNzaC5vcmciKSA9PSAwKQotKwkJY2lwaGVybmFtZSA9ICJjaGFjaGEyMC1wb2x5MTMwNUBvcGVu c3NoLmNvbSI7Ci0gCWlmICgoY2lwaGVyID0gY2lwaGVyX2J5X25hbWUoY2lwaGVybmFtZSkpID09 IE5VTEwpIHsKLSAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0gCQlnb3RvIG91dDsK LUBAIC0yOTgwLDcgKzI5ODksNyBAQAotIAkJZ290byBvdXQ7Ci0gCX0KLSAJaWYgKChyID0gY2lw aGVyX2luaXQoJmNpcGhlcmNvbnRleHQsIGNpcGhlciwga2V5LCBrZXlsZW4sCi0tCSAgICBrZXkg KyBrZXlsZW4sIGl2bGVuLCAxKSkgIT0gMCkKLSsJICAgIGtleSArIGtleWxlbiwgaXZsZW4sIDAs IENJUEhFUl9FTkNSWVBULCBDSVBIRVJfU0VSSUFMKSkgIT0gMCkKLSAJCWdvdG8gb3V0OwotIAot IAlpZiAoKHIgPSBzc2hidWZfcHV0KGVuY29kZWQsIEFVVEhfTUFHSUMsIHNpemVvZihBVVRIX01B R0lDKSkpICE9IDAgfHwKLUBAIC0zMTY2LDYgKzMxNzUsOCBAQAotIAkgICAgKHIgPSBzc2hidWZf Z2V0X3UzMihkZWNvZGVkLCAmZW5jcnlwdGVkX2xlbikpICE9IDApCi0gCQlnb3RvIG91dDsKLSAK LSsJaWYgKHN0cmNtcChjaXBoZXJuYW1lLCAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9y ZyIpID09IDApCi0rCQlzdHJjcHkoY2lwaGVybmFtZSwgImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5z c2guY29tIik7Ci0gCWlmICgoY2lwaGVyID0gY2lwaGVyX2J5X25hbWUoY2lwaGVybmFtZSkpID09 IE5VTEwpIHsKLSAJCXIgPSBTU0hfRVJSX0tFWV9VTktOT1dOX0NJUEhFUjsKLSAJCWdvdG8gb3V0 OwotQEAgLTMyMjEsNyArMzIzMiw3IEBACi0gCS8qIGRlY3J5cHQgcHJpdmF0ZSBwb3J0aW9uIG9m IGtleSAqLwotIAlpZiAoKHIgPSBzc2hidWZfcmVzZXJ2ZShkZWNyeXB0ZWQsIGVuY3J5cHRlZF9s ZW4sICZkcCkpICE9IDAgfHwKLSAJICAgIChyID0gY2lwaGVyX2luaXQoJmNpcGhlcmNvbnRleHQs IGNpcGhlciwga2V5LCBrZXlsZW4sCi0tCSAgICBrZXkgKyBrZXlsZW4sIGl2bGVuLCAwKSkgIT0g MCkKLSsJICAgIGtleSArIGtleWxlbiwgaXZsZW4sIDAsIENJUEhFUl9ERUNSWVBULCBDSVBIRVJf U0VSSUFMKSkgIT0gMCkKLSAJCWdvdG8gb3V0OwotIAlpZiAoKHIgPSBjaXBoZXJfY3J5cHQoY2lw aGVyY29udGV4dCwgMCwgZHAsIHNzaGJ1Zl9wdHIoZGVjb2RlZCksCi0gCSAgICBlbmNyeXB0ZWRf bGVuLCAwLCBhdXRobGVuKSkgIT0gMCkgewotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcv dW1hYy5jIG9wZW5zc2gtMTAuM3AxL3VtYWMuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvdW1h Yy5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTAzMjc1MzA3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4z cDEvdW1hYy5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzM1NDUwMDg1ICswMjAwCi1AQCAtMTM2LDE1 ICsxMzYsNDggQEAKLSAvKiAtLS0gRW5kaWFuIENvbnZlcnNpb24gLS0tIEZvcmNpbmcgYXNzZW1i bHkgb24gc29tZSBwbGF0Zm9ybXMgICAgICAgICAgICovCi0gLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwot IAotKwotKy8qIFVzaW5nIGxvY2FsIHN0YXRpY2FsbHkgZGVmaW5lZCB2ZXJzaW9ucyBvZiB0aGUg Z2V0L3B1dCBmdW5jdGlvbnMKLSsgKiBmb3VuZCBpbiBtaXNjLmMgYWxsb3dzIHRoZW0gdG8gYmUg aW5saW5lZC4gVGhpcyBpbXByb3ZlcyB0aHJvdWdocHV0Ci0rICogcGVyZm9ybWFuY2UgYnkgMTAl IHRvIDE1JSBvbiB3ZWxsIGNvbm5lY3RlZCAoMTBHYi9zKykgc3lzdGVtcy4gCi0rICogQ2hyaXMg UmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4gMjAyMi0wMy0wOSAqLwotKwotK3N0YXRpYyAgX19hdHRy aWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCA0KSkpCi0rdV9pbnQzMl90IHVt YWNfZ2V0X3UzMl9sZShjb25zdCB2b2lkICp2cCkKLSt7Ci0rICAgICAgICBjb25zdCB1X2NoYXIg KnAgPSAoY29uc3QgdV9jaGFyICopdnA7Ci0rICAgICAgICB1X2ludDMyX3QgdjsKLSsKLSsgICAg ICAgIHYgID0gKHVfaW50MzJfdClwWzBdOwotKyAgICAgICAgdiB8PSAodV9pbnQzMl90KXBbMV0g PDwgODsKLSsgICAgICAgIHYgfD0gKHVfaW50MzJfdClwWzJdIDw8IDE2OwotKyAgICAgICAgdiB8 PSAodV9pbnQzMl90KXBbM10gPDwgMjQ7Ci0rCi0rICAgICAgICByZXR1cm4gKHYpOwotK30KLSsK LSsjaWYgMCAvKiBjb21waWxlIHRpbWUgd2FybmluZyB0aHJvd24gb3RoZXJ3aXNlICovCi0rc3Rh dGljIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fbWluYnl0ZXNfXywgMSwgNCkpKTsKLSt2 b2lkIHVtYWNfcHV0X3UzMl9sZSh2b2lkICp2cCwgdV9pbnQzMl90IHYpCi0rewotKyAgICAgICAg dV9jaGFyICpwID0gKHVfY2hhciAqKXZwOwotKwotKyAgICAgICAgcFswXSA9ICh1X2NoYXIpdiAm IDB4ZmY7Ci0rICAgICAgICBwWzFdID0gKHVfY2hhcikodiA+PiA4KSAmIDB4ZmY7Ci0rICAgICAg ICBwWzJdID0gKHVfY2hhcikodiA+PiAxNikgJiAweGZmOwotKyAgICAgICAgcFszXSA9ICh1X2No YXIpKHYgPj4gMjQpICYgMHhmZjsKLSt9Ci0rI2VuZGlmCi0rCi0gI2lmIChfX0xJVFRMRV9FTkRJ QU5fXykKLSAjZGVmaW5lIExPQURfVUlOVDMyX1JFVkVSU0VEKHApCQlnZXRfdTMyKHApCi0gI2Rl ZmluZSBTVE9SRV9VSU5UMzJfUkVWRVJTRUQocCx2KQlwdXRfdTMyKHAsdikKLSAjZWxzZQotLSNk ZWZpbmUgTE9BRF9VSU5UMzJfUkVWRVJTRUQocCkJCWdldF91MzJfbGUocCkKLS0jZGVmaW5lIFNU T1JFX1VJTlQzMl9SRVZFUlNFRChwLHYpCXB1dF91MzJfbGUocCx2KQotKyNkZWZpbmUgTE9BRF9V SU5UMzJfUkVWRVJTRUQocCkJCXVtYWNfZ2V0X3UzMl9sZShwKQotKyNkZWZpbmUgU1RPUkVfVUlO VDMyX1JFVkVSU0VEKHAsdikJdW1hY19wdXRfdTMyX2xlKHAsdikKLSAjZW5kaWYKLSAKLS0jZGVm aW5lIExPQURfVUlOVDMyX0xJVFRMRShwKQkJKGdldF91MzJfbGUocCkpCi0rI2RlZmluZSBMT0FE X1VJTlQzMl9MSVRUTEUocCkJCSh1bWFjX2dldF91MzJfbGUocCkpCi0gI2RlZmluZSBTVE9SRV9V SU5UMzJfQklHKHAsdikJCXB1dF91MzIocCwgdikKLSAKLSAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1k aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy91dGhhc2guaCBvcGVuc3NoLTEwLjNwMS91dGhh c2guaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvdXRoYXNoLmgJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS91dGhhc2guaAkyMDI2LTA3LTAy IDAwOjI3OjI5LjczNTgwNzI5NCArMDIwMAotQEAgLTAsMCArMSwxMTQwIEBACi0rLyoKLStDb3B5 cmlnaHQgKGMpIDIwMDMtMjAyMiwgVHJveSBELiBIYW5zb24gIGh0dHBzOi8vdHJveWRoYW5zb24u Z2l0aHViLmlvL3V0aGFzaC8KLStBbGwgcmlnaHRzIHJlc2VydmVkLgotKwotK1JlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot K21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucyBhcmUgbWV0OgotKwotKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICAgICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKwotK1RI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U UklCVVRPUlMgIkFTCi0rSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0rVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0rUEFSVElDVUxBUiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSCi0r T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsCi0rRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotK1BST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YK LStMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORwotK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyovCi0rCi0rI2lmbmRlZiBVVEhBU0hf SAotKyNkZWZpbmUgVVRIQVNIX0gKLSsKLSsjZGVmaW5lIFVUSEFTSF9WRVJTSU9OIDIuMy4wCi0r Ci0rI2luY2x1ZGUgPHN0cmluZy5oPiAgIC8qIG1lbWNtcCwgbWVtc2V0LCBzdHJsZW4gKi8KLSsj aW5jbHVkZSA8c3RkZGVmLmg+ICAgLyogcHRyZGlmZl90ICovCi0rI2luY2x1ZGUgPHN0ZGxpYi5o PiAgIC8qIGV4aXQgKi8KLSsKLSsjaWYgZGVmaW5lZChIQVNIX0RFRklORV9PV05fU1RESU5UKSAm JiBIQVNIX0RFRklORV9PV05fU1RESU5UCi0rLyogVGhpcyBjb2RlcGF0aCBpcyBwcm92aWRlZCBm b3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYnV0IEkgcGxhbiB0byByZW1vdmUgaXQuICovCi0r I3dhcm5pbmcgIkhBU0hfREVGSU5FX09XTl9TVERJTlQgaXMgZGVwcmVjYXRlZDsgcGxlYXNlIHVz ZSBIQVNIX05PX1NURElOVCBpbnN0ZWFkIgotK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90 OwotK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwotKyNlbGlmIGRlZmluZWQoSEFTSF9O T19TVERJTlQpICYmIEhBU0hfTk9fU1RESU5UCi0rI2Vsc2UKLSsjaW5jbHVkZSA8c3RkaW50Lmg+ ICAgLyogdWludDhfdCwgdWludDMyX3QgKi8KLSsjZW5kaWYKLSsKLSsvKiBUaGVzZSBtYWNyb3Mg dXNlIGRlY2x0eXBlIG9yIHRoZSBlYXJsaWVyIF9fdHlwZW9mIEdOVSBleHRlbnNpb24uCi0rICAg QXMgZGVjbHR5cGUgaXMgb25seSBhdmFpbGFibGUgaW4gbmV3ZXIgY29tcGlsZXJzIChWUzIwMTAg b3IgZ2NjIDQuMysKLSsgICB3aGVuIGNvbXBpbGluZyBjKysgc291cmNlKSB0aGlzIGNvZGUgdXNl cyB3aGF0ZXZlciBtZXRob2QgaXMgbmVlZGVkCi0rICAgb3IsIGZvciBWUzIwMDggd2hlcmUgbmVp dGhlciBpcyBhdmFpbGFibGUsIHVzZXMgY2FzdGluZyB3b3JrYXJvdW5kcy4gKi8KLSsjaWYgIWRl ZmluZWQoREVDTFRZUEUpICYmICFkZWZpbmVkKE5PX0RFQ0xUWVBFKQotKyNpZiBkZWZpbmVkKF9N U0NfVkVSKSAgIC8qIE1TIGNvbXBpbGVyICovCi0rI2lmIF9NU0NfVkVSID49IDE2MDAgJiYgZGVm aW5lZChfX2NwbHVzcGx1cykgIC8qIFZTMjAxMCBvciBuZXdlciBpbiBDKysgbW9kZSAqLwotKyNk ZWZpbmUgREVDTFRZUEUoeCkgKGRlY2x0eXBlKHgpKQotKyNlbHNlICAgICAgICAgICAgICAgICAg IC8qIFZTMjAwOCBvciBvbGRlciAob3IgVlMyMDEwIGluIEMgbW9kZSkgKi8KLSsjZGVmaW5lIE5P X0RFQ0xUWVBFCi0rI2VuZGlmCi0rI2VsaWYgZGVmaW5lZChfX01DU1RfXykgIC8qIEVsYnJ1cyBD IENvbXBpbGVyICovCi0rI2RlZmluZSBERUNMVFlQRSh4KSAoX190eXBlb2YoeCkpCi0rI2VsaWYg ZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19JQ0NBUk1fXykgfHwgZGVmaW5lZChf X0xDQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQotKyNkZWZpbmUgTk9fREVDTFRZUEUKLSsj ZWxzZSAgICAgICAgICAgICAgICAgICAvKiBHTlUsIFN1biBhbmQgb3RoZXIgY29tcGlsZXJzICov Ci0rI2RlZmluZSBERUNMVFlQRSh4KSAoX190eXBlb2YoeCkpCi0rI2VuZGlmCi0rI2VuZGlmCi0r Ci0rI2lmZGVmIE5PX0RFQ0xUWVBFCi0rI2RlZmluZSBERUNMVFlQRSh4KQotKyNkZWZpbmUgREVD TFRZUEVfQVNTSUdOKGRzdCxzcmMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBjaGFyICoqX2Rh X2RzdCA9IChjaGFyKiopKCYoZHN0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgKl9kYV9kc3QgPSAoY2hhciopKHNyYyk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQot KyNlbHNlCi0rI2RlZmluZSBERUNMVFlQRV9BU1NJR04oZHN0LHNyYykgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIChkc3QpID0gREVDTFRZUEUoZHN0KShzcmMpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsjZW5kaWYK LSsKLSsjaWZuZGVmIHV0aGFzaF9tYWxsb2MKLSsjZGVmaW5lIHV0aGFzaF9tYWxsb2Moc3opIG1h bGxvYyhzeikgICAgICAvKiBtYWxsb2MgZmNuICAgICAgICAgICAgICAgICAgICAgICovCi0rI2Vu ZGlmCi0rI2lmbmRlZiB1dGhhc2hfZnJlZQotKyNkZWZpbmUgdXRoYXNoX2ZyZWUocHRyLHN6KSBm cmVlKHB0cikgICAgIC8qIGZyZWUgZmNuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSsjZW5k aWYKLSsjaWZuZGVmIHV0aGFzaF9iemVybwotKyNkZWZpbmUgdXRoYXNoX2J6ZXJvKGEsbikgbWVt c2V0KGEsJ1wwJyxuKQotKyNlbmRpZgotKyNpZm5kZWYgdXRoYXNoX3N0cmxlbgotKyNkZWZpbmUg dXRoYXNoX3N0cmxlbihzKSBzdHJsZW4ocykKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIEhBU0hfRlVO Q1RJT04KLSsjZGVmaW5lIEhBU0hfRlVOQ1RJT04oa2V5cHRyLGtleWxlbixoYXNodikgSEFTSF9K RU4oa2V5cHRyLCBrZXlsZW4sIGhhc2h2KQotKyNlbmRpZgotKwotKyNpZm5kZWYgSEFTSF9LRVlD TVAKLSsjZGVmaW5lIEhBU0hfS0VZQ01QKGEsYixuKSBtZW1jbXAoYSxiLG4pCi0rI2VuZGlmCi0r Ci0rI2lmbmRlZiB1dGhhc2hfbm9leHBhbmRfZnlpCi0rI2RlZmluZSB1dGhhc2hfbm9leHBhbmRf ZnlpKHRibCkgICAgICAgICAgLyogY2FuIGJlIGRlZmluZWQgdG8gbG9nIG5vZXhwYW5kICAqLwot KyNlbmRpZgotKyNpZm5kZWYgdXRoYXNoX2V4cGFuZF9meWkKLSsjZGVmaW5lIHV0aGFzaF9leHBh bmRfZnlpKHRibCkgICAgICAgICAgICAvKiBjYW4gYmUgZGVmaW5lZCB0byBsb2cgZXhwYW5kcyAg ICovCi0rI2VuZGlmCi0rCi0rI2lmbmRlZiBIQVNIX05PTkZBVEFMX09PTQotKyNkZWZpbmUgSEFT SF9OT05GQVRBTF9PT00gMAotKyNlbmRpZgotKwotKyNpZiBIQVNIX05PTkZBVEFMX09PTQotKy8q IG1hbGxvYyBmYWlsdXJlcyBjYW4gYmUgcmVjb3ZlcmVkIGZyb20gKi8KLSsKLSsjaWZuZGVmIHV0 aGFzaF9ub25mYXRhbF9vb20KLSsjZGVmaW5lIHV0aGFzaF9ub25mYXRhbF9vb20ob2JqKSBkbyB7 fSB3aGlsZSAoMCkgICAgLyogbm9uLWZhdGFsIE9PTSBlcnJvciAqLwotKyNlbmRpZgotKwotKyNk ZWZpbmUgSEFTSF9SRUNPUkRfT09NKG9vbWVkKSBkbyB7IChvb21lZCkgPSAxOyB9IHdoaWxlICgw KQotKyNkZWZpbmUgSUZfSEFTSF9OT05GQVRBTF9PT00oeCkgeAotKwotKyNlbHNlCi0rLyogbWFs bG9jIGZhaWx1cmVzIHJlc3VsdCBpbiBsb3N0IG1lbW9yeSwgaGFzaCB0YWJsZXMgYXJlIHVudXNh YmxlICovCi0rCi0rI2lmbmRlZiB1dGhhc2hfZmF0YWwKLSsjZGVmaW5lIHV0aGFzaF9mYXRhbCht c2cpIGV4aXQoLTEpICAgICAgICAvKiBmYXRhbCBPT00gZXJyb3IgKi8KLSsjZW5kaWYKLSsKLSsj ZGVmaW5lIEhBU0hfUkVDT1JEX09PTShvb21lZCkgdXRoYXNoX2ZhdGFsKCJvdXQgb2YgbWVtb3J5 IikKLSsjZGVmaW5lIElGX0hBU0hfTk9ORkFUQUxfT09NKHgpCi0rCi0rI2VuZGlmCi0rCi0rLyog aW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cyAqLwotKyNkZWZpbmUgSEFTSF9JTklUSUFMX05VTV9C VUNLRVRTIDMyVSAgICAgLyogaW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cyAgICAgICAgKi8KLSsj ZGVmaW5lIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VUU19MT0cyIDVVIC8qIGxnMiBvZiBpbml0aWFs IG51bWJlciBvZiBidWNrZXRzICovCi0rI2RlZmluZSBIQVNIX0JLVF9DQVBBQ0lUWV9USFJFU0gg MTBVICAgICAvKiBleHBhbmQgd2hlbiBidWNrZXQgY291bnQgcmVhY2hlcyAqLwotKwotKy8qIGNh bGN1bGF0ZSB0aGUgZWxlbWVudCB3aG9zZSBoYXNoIGhhbmRsZSBhZGRyZXNzIGlzIGhocCAqLwot KyNkZWZpbmUgRUxNVF9GUk9NX0hIKHRibCxoaHApICgodm9pZCopKCgoY2hhciopKGhocCkpIC0g KCh0YmwpLT5oaG8pKSkKLSsvKiBjYWxjdWxhdGUgdGhlIGhhc2ggaGFuZGxlIGZyb20gZWxlbWVu dCBhZGRyZXNzIGVscCAqLwotKyNkZWZpbmUgSEhfRlJPTV9FTE1UKHRibCxlbHApICgoVVRfaGFz aF9oYW5kbGUqKSh2b2lkKikoKChjaGFyKikoZWxwKSkgKyAoKHRibCktPmhobykpKQotKwotKyNk ZWZpbmUgSEFTSF9ST0xMQkFDS19CS1QoaGgsIGhlYWQsIGl0ZW1wdHJoaCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBz dHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKl9oZF9oaF9pdGVtID0gKGl0ZW1wdHJoaCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hkX2JrdDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhB U0hfVE9fQktUKF9oZF9oaF9pdGVtLT5oYXNodiwgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRz LCBfaGRfYmt0KTsgICAgICAgICBcCi0rICAoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfaGRfYmt0 XS5jb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgX2hk X2hoX2l0ZW0tPmhoX25leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIF9oZF9oaF9pdGVtLT5oaF9wcmV2ID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGls ZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfVkFMVUUoa2V5cHRyLGtleWxlbixoYXNodikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgSEFTSF9GVU5DVElPTihrZXlwdHIsIGtleWxlbiwgaGFzaHYpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNk ZWZpbmUgSEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLGhlYWQsa2V5cHRyLGtleWxlbixoYXNodmFs LG91dCkgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAo b3V0KSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKGhlYWQpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg dW5zaWduZWQgX2hmX2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfVE9fQktUKGhhc2h2YWwsIChoZWFkKS0+ aGgudGJsLT5udW1fYnVja2V0cywgX2hmX2JrdCk7ICAgICAgICAgICAgICAgICAgXAotKyAgICBp ZiAoSEFTSF9CTE9PTV9URVNUKChoZWFkKS0+aGgudGJsLCBoYXNodmFsKSAhPSAwKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBIQVNIX0ZJTkRfSU5fQktUKChoZWFkKS0+aGgu dGJsLCBoaCwgKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbIF9oZl9ia3QgXSwga2V5cHRyLCBrZXls ZW4sIGhhc2h2YWwsIG91dCk7IFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0ZJTkQo aGgsaGVhZCxrZXlwdHIsa2V5bGVuLG91dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChvdXQpID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICBpZiAoaGVhZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1bnNpZ25lZCBfaGZfaGFz aHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgSEFTSF9WQUxVRShrZXlwdHIsIGtleWxlbiwgX2hmX2hhc2h2KTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfRklORF9CWUhBU0hW QUxVRShoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW4sIF9oZl9oYXNodiwgb3V0KTsgICAgICAgICAg ICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNpZmRl ZiBIQVNIX0JMT09NCi0rI2RlZmluZSBIQVNIX0JMT09NX0JJVExFTiAoMVVMIDw8IEhBU0hfQkxP T00pCi0rI2RlZmluZSBIQVNIX0JMT09NX0JZVEVMRU4gKEhBU0hfQkxPT01fQklUTEVOLzhVTCkg KyAoKChIQVNIX0JMT09NX0JJVExFTiU4VUwpIT0wVUwpID8gMVVMIDogMFVMKQotKyNkZWZpbmUg SEFTSF9CTE9PTV9NQUtFKHRibCxvb21lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAodGJsKS0+ Ymxvb21fbmJpdHMgPSBIQVNIX0JMT09NOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgKHRibCktPmJsb29tX2J2ID0gKHVpbnQ4X3QqKXV0aGFzaF9t YWxsb2MoSEFTSF9CTE9PTV9CWVRFTEVOKTsgICAgICAgICAgICAgICAgIFwKLSsgIGlmICghKHRi bCktPmJsb29tX2J2KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfUkVDT1JEX09PTShvb21lZCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgdXRoYXNoX2J6ZXJvKCh0YmwpLT5ibG9vbV9idiwgSEFTSF9C TE9PTV9CWVRFTEVOKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICh0YmwpLT5i bG9vbV9zaWcgPSBIQVNIX0JMT09NX1NJR05BVFVSRTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQot KwotKyNkZWZpbmUgSEFTSF9CTE9PTV9GUkVFKHRibCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICB1dGhhc2hfZnJlZSgodGJsKS0+Ymxvb21fYnYsIEhBU0hfQkxPT01fQllURUxFTik7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBI QVNIX0JMT09NX0JJVFNFVChidixpZHgpIChidlsoaWR4KS84VV0gfD0gKDFVIDw8ICgoaWR4KSU4 VSkpKQotKyNkZWZpbmUgSEFTSF9CTE9PTV9CSVRURVNUKGJ2LGlkeCkgKGJ2WyhpZHgpLzhVXSAm ICgxVSA8PCAoKGlkeCklOFUpKSkKLSsKLSsjZGVmaW5lIEhBU0hfQkxPT01fQUREKHRibCxoYXNo dikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBI QVNIX0JMT09NX0JJVFNFVCgodGJsKS0+Ymxvb21fYnYsICgoaGFzaHYpICYgKHVpbnQzMl90KSgo MVVMIDw8ICh0YmwpLT5ibG9vbV9uYml0cykgLSAxVSkpKQotKwotKyNkZWZpbmUgSEFTSF9CTE9P TV9URVNUKHRibCxoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIEhBU0hfQkxPT01fQklUVEVTVCgodGJsKS0+Ymxvb21fYnYsICgoaGFzaHYp ICYgKHVpbnQzMl90KSgoMVVMIDw8ICh0YmwpLT5ibG9vbV9uYml0cykgLSAxVSkpKQotKwotKyNl bHNlCi0rI2RlZmluZSBIQVNIX0JMT09NX01BS0UodGJsLG9vbWVkKQotKyNkZWZpbmUgSEFTSF9C TE9PTV9GUkVFKHRibCkKLSsjZGVmaW5lIEhBU0hfQkxPT01fQUREKHRibCxoYXNodikKLSsjZGVm aW5lIEhBU0hfQkxPT01fVEVTVCh0YmwsaGFzaHYpICgxKQotKyNkZWZpbmUgSEFTSF9CTE9PTV9C WVRFTEVOIDBVCi0rI2VuZGlmCi0rCi0rI2RlZmluZSBIQVNIX01BS0VfVEFCTEUoaGgsaGVhZCxv b21lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIChoZWFkKS0+aGgudGJsID0gKFVUX2hhc2hfdGFibGUq KXV0aGFzaF9tYWxsb2Moc2l6ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICBcCi0rICBpZiAo IShoZWFkKS0+aGgudGJsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX1JFQ09SRF9PT00ob29tZWQpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIHV0aGFzaF9iemVybygoaGVhZCktPmhoLnRibCwgc2l6 ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoaGVh ZCktPmhoLnRibC0+dGFpbCA9ICYoKGhlYWQpLT5oaCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzID0gSEFT SF9JTklUSUFMX05VTV9CVUNLRVRTOyAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChoZWFk KS0+aGgudGJsLT5sb2cyX251bV9idWNrZXRzID0gSEFTSF9JTklUSUFMX05VTV9CVUNLRVRTX0xP RzI7ICAgICAgICAgICAgXAotKyAgICAoaGVhZCktPmhoLnRibC0+aGhvID0gKGNoYXIqKSgmKGhl YWQpLT5oaCkgLSAoY2hhciopKGhlYWQpOyAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGhlYWQp LT5oaC50YmwtPmJ1Y2tldHMgPSAoVVRfaGFzaF9idWNrZXQqKXV0aGFzaF9tYWxsb2MoICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgICBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFMgKiBzaXpl b2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgICAgICAgICAgICAgXAotKyAgICAoaGVhZCkt PmhoLnRibC0+c2lnbmF0dXJlID0gSEFTSF9TSUdOQVRVUkU7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgaWYgKCEoaGVhZCktPmhoLnRibC0+YnVja2V0cykgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgSEFTSF9S RUNPUkRfT09NKG9vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgIHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLCBzaXplb2Yo VVRfaGFzaF90YWJsZSkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgdXRoYXNoX2J6ZXJvKChoZWFkKS0+aGgudGJsLT5idWNrZXRz LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBIQVNI X0lOSVRJQUxfTlVNX0JVQ0tFVFMgKiBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAg ICAgICAgICAgIFwKLSsgICAgICBIQVNIX0JMT09NX01BS0UoKGhlYWQpLT5oaC50YmwsIG9vbWVk KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgSUZfSEFTSF9O T05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgaWYgKG9vbWVkKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgdXRoYXNo X2ZyZWUoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgICBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFMqc2l6ZW9m KHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICAgICAgICAgXAotKyAgICAgICAgICB1dGhhc2hf ZnJlZSgoaGVhZCktPmhoLnRibCwgc2l6ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfUkVQTEFDRV9CWUhBU0hWQUxV RV9JTk9SREVSKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixoYXNodmFsLGFkZCxyZXBsYWNl ZCxjbXBmY24pIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAocmVwbGFjZWQpID0g TlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgSEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQpLT5m aWVsZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIHJlcGxhY2VkKTsgXAotKyAgaWYgKHJlcGxh Y2VkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9ERUxFVEUoaGgsIGhlYWQsIHJlcGxhY2VkKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lOT1JERVIoaGgs IGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkLCBjbXBm Y24pOyBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfUkVQTEFDRV9CWUhBU0hWQUxV RShoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZhbCxhZGQscmVwbGFjZWQpIFwKLStk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAocmVwbGFjZWQpID0gTlVMTDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg SEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5hbWUpLCBrZXls ZW5faW4sIGhhc2h2YWwsIHJlcGxhY2VkKTsgXAotKyAgaWYgKHJlcGxhY2VkKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgSEFTSF9ERUxFVEUoaGgsIGhlYWQsIHJlcGxhY2VkKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5h bWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCk7IFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZp bmUgSEFTSF9SRVBMQUNFKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixhZGQscmVwbGFjZWQp ICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNp Z25lZCBfaHJfaGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9WQUxVRSgmKChhZGQpLT5maWVsZG5hbWUpLCBr ZXlsZW5faW4sIF9ocl9oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hf UkVQTEFDRV9CWUhBU0hWQUxVRShoaCwgaGVhZCwgZmllbGRuYW1lLCBrZXlsZW5faW4sIF9ocl9o YXNodiwgYWRkLCByZXBsYWNlZCk7IFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9S RVBMQUNFX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGFkZCxyZXBsYWNlZCxj bXBmY24pICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaHJf aGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgSEFTSF9WQUxVRSgmKChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4s IF9ocl9oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfUkVQTEFDRV9C WUhBU0hWQUxVRV9JTk9SREVSKGhoLCBoZWFkLCBmaWVsZG5hbWUsIGtleWxlbl9pbiwgX2hyX2hh c2h2LCBhZGQsIHJlcGxhY2VkLCBjbXBmY24pOyBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5l IEhBU0hfQVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFkZCkt PmhoLm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIChhZGQpLT5oaC5wcmV2ID0gRUxNVF9GUk9NX0hIKChoZWFk KS0+aGgudGJsLCAoaGVhZCktPmhoLnRibC0+dGFpbCk7ICAgICAgICAgICBcCi0rICAoaGVhZCkt PmhoLnRibC0+dGFpbC0+bmV4dCA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgKGhlYWQpLT5oaC50YmwtPnRhaWwgPSAmKChhZGQpLT5oaCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgw KQotKwotKyNkZWZpbmUgSEFTSF9BS0JJX0lOTkVSX0xPT1AoaGgsaGVhZCxhZGQsY21wZmNuKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBpZiAoY21wZmNuKERFQ0xUWVBF KGhlYWQpKF9oc19pdGVyKSwgYWRkKSA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgfSB3aGlsZSAoKF9oc19pdGVyID0gSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBf aHNfaXRlciktPm5leHQpKTsgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNpZmRlZiBO T19ERUNMVFlQRQotKyN1bmRlZiBIQVNIX0FLQklfSU5ORVJfTE9PUAotKyNkZWZpbmUgSEFTSF9B S0JJX0lOTkVSX0xPT1AoaGgsaGVhZCxhZGQsY21wZmNuKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBjaGFyICpfaHNfc2F2 ZWRfaGVhZCA9IChjaGFyKikoaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgREVDTFRZUEVfQVNT SUdOKGhlYWQsIF9oc19pdGVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIGlmIChjbXBmY24oaGVhZCwgYWRkKSA+IDApIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIERFQ0xUWVBFX0FT U0lHTihoZWFkLCBfaHNfc2F2ZWRfaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICBERUNMVFlQRV9BU1NJR04oaGVhZCwgX2hzX3NhdmVkX2hlYWQpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gd2hpbGUgKChfaHNfaXRl ciA9IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0ZXIpLT5uZXh0KSk7ICAgICAg ICAgICBcCi0rfSB3aGlsZSAoMCkKLSsjZW5kaWYKLSsKLSsjaWYgSEFTSF9OT05GQVRBTF9PT00K LSsKLSsjZGVmaW5lIEhBU0hfQUREX1RPX1RBQkxFKGhoLGhlYWQsa2V5cHRyLGtleWxlbl9pbixo YXNodmFsLGFkZCxvb21lZCkgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgaWYgKCEob29tZWQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX2hhX2JrdDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX1RPX0JLVChoYXNodmFsLCAo aGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHMsIF9oYV9ia3QpOyAgICAgICAgICAgICAgICAgIFwK LSsgICAgSEFTSF9BRERfVE9fQktUKChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19oYV9ia3RdLCBo aCwgJihhZGQpLT5oaCwgb29tZWQpOyAgICBcCi0rICAgIGlmIChvb21lZCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgIEhBU0hfUk9MTEJBQ0tfQktUKGhoLCBoZWFkLCAmKGFkZCktPmhoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBIQVNIX0RFTEVURV9ISChoaCwgaGVh ZCwgJihhZGQpLT5oaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgKGFkZCktPmhoLnRibCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIHV0aGFzaF9ub25mYXRhbF9vb20oYWRk KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgSEFTSF9CTE9PTV9BREQoKGhlYWQpLT5o aC50YmwsIGhhc2h2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgIEhBU0hfRU1JVF9LRVkoaGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoYWRkKS0+aGgudGJsID0gTlVMTDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg dXRoYXNoX25vbmZhdGFsX29vbShhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hp bGUgKDApCi0rCi0rI2Vsc2UKLSsKLSsjZGVmaW5lIEhBU0hfQUREX1RPX1RBQkxFKGhoLGhlYWQs a2V5cHRyLGtleWxlbl9pbixoYXNodmFsLGFkZCxvb21lZCkgICAgICAgICAgICBcCi0rZG8geyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hhX2JrdDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChoZWFk KS0+aGgudGJsLT5udW1faXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX1RPX0JLVChoYXNodmFsLCAoaGVhZCktPmhoLnRi bC0+bnVtX2J1Y2tldHMsIF9oYV9ia3QpOyAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9B RERfVE9fQktUKChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19oYV9ia3RdLCBoaCwgJihhZGQpLT5o aCwgb29tZWQpOyAgICAgIFwKLSsgIEhBU0hfQkxPT01fQUREKChoZWFkKS0+aGgudGJsLCBoYXNo dmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0VN SVRfS0VZKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2VuZGlmCi0rCi0rCi0rI2RlZmlu ZSBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5PUkRFUihoaCxoZWFkLGtleXB0cixrZXls ZW5faW4saGFzaHZhbCxhZGQsY21wZmNuKSBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGludCBfaGFfb29tZWQgPSAwOyApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGQpLT5oaC5oYXNodiA9IChoYXNodmFs KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAoYWRkKS0+aGgua2V5ID0gKGNoYXIqKSAoa2V5cHRyKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFkZCktPmhoLmtleWxlbiA9ICh1bnNpZ25l ZCkgKGtleWxlbl9pbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IGlmICghKGhlYWQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChhZGQpLT5oaC5uZXh0ID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAoYWRkKS0+aGgucHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9NQUtFX1RBQkxFKGhoLCBhZGQsIF9o YV9vb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IElGX0hBU0hfTk9ORkFUQUxfT09NKCBpZiAoIV9oYV9vb21lZCkgeyApICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChoZWFkKSA9IChhZGQpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg SUZfSEFTSF9OT05GQVRBTF9PT00oIH0gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB2 b2lkICpfaHNfaXRlciA9IChoZWFkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGFkZCktPmhoLnRibCA9IChoZWFkKS0+aGgudGJs OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhB U0hfQUtCSV9JTk5FUl9MT09QKGhoLCBoZWFkLCBhZGQsIGNtcGZjbik7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICBpZiAoX2hzX2l0ZXIpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAo YWRkKS0+aGgubmV4dCA9IF9oc19pdGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgaWYgKCgoYWRkKS0+aGgucHJldiA9IEhIX0ZST01f RUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0ZXIpLT5wcmV2KSkgeyAgICAgXAotKyAgICAgICAg SEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCAoYWRkKS0+aGgucHJldiktPm5leHQgPSAoYWRk KTsgICAgICAgICAgICAgIFwKLSsgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAo aGVhZCkgPSAoYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBISF9G Uk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19pdGVyKS0+cHJldiA9IChhZGQpOyAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hf QVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfVE9fVEFCTEUoaGgsIGhlYWQsIGtleXB0ciwga2V5 bGVuX2luLCBoYXNodmFsLCBhZGQsIF9oYV9vb21lZCk7ICAgICAgIFwKLSsgIEhBU0hfRlNDSyho aCwgaGVhZCwgIkhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRV9JTk9SREVSIik7ICAgICAgICAg ICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfQUREX0tFWVBUUl9J Tk9SREVSKGhoLGhlYWQsa2V5cHRyLGtleWxlbl9pbixhZGQsY21wZmNuKSAgICAgICAgICAgICBc Ci0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hzX2hhc2h2OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIEhBU0hfVkFMVUUoa2V5cHRyLCBrZXlsZW5faW4sIF9oc19oYXNodik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFM VUVfSU5PUkRFUihoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW5faW4sIF9oc19oYXNodiwgYWRkLCBj bXBmY24pOyBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfQUREX0JZSEFTSFZBTFVF X0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWwsYWRkLGNtcGZjbikg XAotKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lOT1JERVIoaGgsIGhlYWQsICYoKGFk ZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkLCBjbXBmY24pCi0rCi0rI2Rl ZmluZSBIQVNIX0FERF9JTk9SREVSKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixhZGQsY21w ZmNuKSAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfS0VZUFRSX0lOT1JERVIoaGgsIGhl YWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgYWRkLCBjbXBmY24pCi0rCi0rI2Rl ZmluZSBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUUoaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2lu LGhhc2h2YWwsYWRkKSAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIElG X0hBU0hfTk9ORkFUQUxfT09NKCBpbnQgX2hhX29vbWVkID0gMDsgKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAoYWRkKS0+aGguaGFzaHYgPSAoaGFzaHZhbCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFk ZCktPmhoLmtleSA9IChjb25zdCB2b2lkKikgKGtleXB0cik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGQpLT5oaC5rZXlsZW4gPSAodW5zaWduZWQpIChr ZXlsZW5faW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBpZiAo IShoZWFkKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAoYWRkKS0+aGgubmV4dCA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGFk ZCktPmhoLnByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfTUFLRV9UQUJMRShoaCwgYWRkLCBfaGFfb29t ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBJRl9I QVNIX05PTkZBVEFMX09PTSggaWYgKCFfaGFfb29tZWQpIHsgKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAoaGVhZCkgPSAoYWRkKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIElGX0hB U0hfTk9ORkFUQUxfT09NKCB9ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGFkZCkt PmhoLnRibCA9IChoZWFkKS0+aGgudGJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfQVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIEhBU0hfQUREX1RPX1RBQkxFKGhoLCBoZWFkLCBrZXlwdHIsIGtl eWxlbl9pbiwgaGFzaHZhbCwgYWRkLCBfaGFfb29tZWQpOyAgICAgICBcCi0rICBIQVNIX0ZTQ0so aGgsIGhlYWQsICJIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUUiKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0FERF9LRVlQVFIo aGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVuc2lnbmVkIF9oYV9oYXNodjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICBIQVNIX1ZBTFVFKGtleXB0ciwga2V5bGVuX2luLCBfaGFfaGFzaHYpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZB TFVFKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbiwgX2hhX2hhc2h2LCBhZGQpOyAgICAgIFwK LSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9BRERfQllIQVNIVkFMVUUoaGgsaGVhZCxm aWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWwsYWRkKSAgICAgICAgICAgIFwKLSsgIEhBU0hfQURE X0tFWVBUUl9CWUhBU0hWQUxVRShoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVu X2luLCBoYXNodmFsLCBhZGQpCi0rCi0rI2RlZmluZSBIQVNIX0FERChoaCxoZWFkLGZpZWxkbmFt ZSxrZXlsZW5faW4sYWRkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFT SF9BRERfS0VZUFRSKGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIGFk ZCkKLSsKLSsjZGVmaW5lIEhBU0hfVE9fQktUKGhhc2h2LG51bV9ia3RzLGJrdCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgYmt0ID0gKChoYXNodikgJiAoKG51bV9ia3RzKSAtIDFVKSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKy8qIGRl bGV0ZSAiZGVscHRyIiBmcm9tIHRoZSBoYXNoIHRhYmxlLgotKyAqICJ0aGUgdXN1YWwiIHBhdGNo LXVwIHByb2Nlc3MgZm9yIHRoZSBhcHAtb3JkZXIgZG91Ymx5LWxpbmtlZC1saXN0LgotKyAqIFRo ZSB1c2Ugb2YgX2hkX2hoX2RlbCBiZWxvdyBkZXNlcnZlcyBzcGVjaWFsIGV4cGxhbmF0aW9uLgot KyAqIFRoZXNlIHVzZWQgdG8gYmUgZXhwcmVzc2VkIHVzaW5nIChkZWxwdHIpIGJ1dCB0aGF0IGxl ZCB0byBhIGJ1ZwotKyAqIGlmIHNvbWVvbmUgdXNlZCB0aGUgc2FtZSBzeW1ib2wgZm9yIHRoZSBo ZWFkIGFuZCBkZWxldGVlLCBsaWtlCi0rICogIEhBU0hfREVMRVRFKGhoLHVzZXJzLHVzZXJzKTsK LSsgKiBXZSB3YW50IHRoYXQgdG8gd29yaywgYnV0IGJ5IGNoYW5naW5nIHRoZSBoZWFkICh1c2Vy cykgYmVsb3cKLSsgKiB3ZSB3ZXJlIGZvcmZlaXRpbmcgb3VyIGFiaWxpdHkgdG8gZnVydGhlciBy ZWZlciB0byB0aGUgZGVsZXRlZSAodXNlcnMpCi0rICogaW4gdGhlIHBhdGNoLXVwIHByb2Nlc3Mu IFNvbHV0aW9uOiB1c2Ugc2NyYXRjaCBzcGFjZSB0bwotKyAqIGNvcHkgdGhlIGRlbGV0ZWUgcG9p bnRlciwgdGhlbiB0aGUgbGF0dGVyIHJlZmVyZW5jZXMgYXJlIHZpYSB0aGF0Ci0rICogc2NyYXRj aCBwb2ludGVyIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIHJlcG9pbnRlZCAodXNlcnMpIHN5bWJv bC4KLSsgKi8KLSsjZGVmaW5lIEhBU0hfREVMRVRFKGhoLGhlYWQsZGVscHRyKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfREVMRVRFX0hI KGhoLCBoZWFkLCAmKGRlbHB0ciktPmhoKQotKwotKyNkZWZpbmUgSEFTSF9ERUxFVEVfSEgoaGgs aGVhZCxkZWxwdHJoaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBjb25zdCBzdHJ1Y3QgVVRfaGFzaF9oYW5k bGUgKl9oZF9oaF9kZWwgPSAoZGVscHRyaGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgaWYgKChfaGRfaGhfZGVsLT5wcmV2ID09IE5VTEwpICYmIChfaGRfaGhfZGVsLT5uZXh0ID09 IE5VTEwpKSB7ICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9CTE9PTV9GUkVFKChoZWFkKS0+ aGgudGJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLT5idWNrZXRzLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoaGVhZCktPmhoLnRi bC0+bnVtX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgIFwKLSsg ICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwsIHNpemVvZihVVF9oYXNoX3RhYmxlKSk7ICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChoZWFkKSA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX2hkX2JrdDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IGlmIChfaGRfaGhfZGVsID09IChoZWFkKS0+aGgudGJsLT50YWlsKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChoZWFkKS0+aGgudGJsLT50YWlsID0gSEhf RlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaGRfaGhfZGVsLT5wcmV2KTsgICAgIFwKLSsgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChfaGRfaGhfZGVsLT5wcmV2ICE9IE5VTEwp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hkX2hoX2RlbC0+cHJldiktPm5leHQgPSBf aGRfaGhfZGVsLT5uZXh0OyAgIFwKLSsgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg REVDTFRZUEVfQVNTSUdOKGhlYWQsIF9oZF9oaF9kZWwtPm5leHQpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaWYg KF9oZF9oaF9kZWwtPm5leHQgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBf aGRfaGhfZGVsLT5uZXh0KS0+cHJldiA9IF9oZF9oaF9kZWwtPnByZXY7ICAgXAotKyAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9UT19CS1QoX2hkX2hoX2RlbC0+aGFzaHYsICho ZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hkX2JrdCk7ICAgICAgICBcCi0rICAgIEhBU0hf REVMX0lOX0JLVCgoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfaGRfYmt0XSwgX2hkX2hoX2RlbCk7 ICAgICAgICAgICAgICAgXAotKyAgICAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zLS07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBIQVNIX0ZTQ0soaGgsIGhlYWQsICJIQVNIX0RFTEVURV9ISCIp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDAp Ci0rCi0rLyogY29udmVuaWVuY2UgZm9ybXMgb2YgSEFTSF9GSU5EL0hBU0hfQUREL0hBU0hfREVM ICovCi0rI2RlZmluZSBIQVNIX0ZJTkRfU1RSKGhlYWQsZmluZHN0cixvdXQpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgdW5zaWduZWQgX3V0aGFzaF9oZnN0cl9rZXlsZW4gPSAodW5zaWduZWQpdXRoYXNo X3N0cmxlbihmaW5kc3RyKTsgICAgICAgICAgICBcCi0rICAgIEhBU0hfRklORChoaCwgaGVhZCwg ZmluZHN0ciwgX3V0aGFzaF9oZnN0cl9rZXlsZW4sIG91dCk7ICAgICAgICAgICAgICAgICAgICAg XAotK30gd2hpbGUgKDApCi0rI2RlZmluZSBIQVNIX0FERF9TVFIoaGVhZCxzdHJmaWVsZCxhZGQp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX3V0aGFzaF9oYXN0cl9rZXlsZW4gPSAodW5z aWduZWQpdXRoYXNoX3N0cmxlbigoYWRkKS0+c3RyZmllbGQpOyAgICBcCi0rICAgIEhBU0hfQURE KGhoLCBoZWFkLCBzdHJmaWVsZFswXSwgX3V0aGFzaF9oYXN0cl9rZXlsZW4sIGFkZCk7ICAgICAg ICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rI2RlZmluZSBIQVNIX1JFUExBQ0VfU1RSKGhl YWQsc3RyZmllbGQsYWRkLHJlcGxhY2VkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot K2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX3V0aGFzaF9ocnN0cl9r ZXlsZW4gPSAodW5zaWduZWQpdXRoYXNoX3N0cmxlbigoYWRkKS0+c3RyZmllbGQpOyAgICBcCi0r ICAgIEhBU0hfUkVQTEFDRShoaCwgaGVhZCwgc3RyZmllbGRbMF0sIF91dGhhc2hfaHJzdHJfa2V5 bGVuLCBhZGQsIHJlcGxhY2VkKTsgICAgXAotK30gd2hpbGUgKDApCi0rI2RlZmluZSBIQVNIX0ZJ TkRfSU5UKGhlYWQsZmluZGludCxvdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBIQVNIX0ZJTkQoaGgsaGVhZCxmaW5kaW50LHNpemVvZihpbnQpLG91 dCkKLSsjZGVmaW5lIEhBU0hfQUREX0lOVChoZWFkLGludGZpZWxkLGFkZCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfQUREKGhoLGhlYWQsaW50 ZmllbGQsc2l6ZW9mKGludCksYWRkKQotKyNkZWZpbmUgSEFTSF9SRVBMQUNFX0lOVChoZWFkLGlu dGZpZWxkLGFkZCxyZXBsYWNlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg SEFTSF9SRVBMQUNFKGhoLGhlYWQsaW50ZmllbGQsc2l6ZW9mKGludCksYWRkLHJlcGxhY2VkKQot KyNkZWZpbmUgSEFTSF9GSU5EX1BUUihoZWFkLGZpbmRwdHIsb3V0KSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9GSU5EKGhoLGhlYWQsZmluZHB0 cixzaXplb2Yodm9pZCAqKSxvdXQpCi0rI2RlZmluZSBIQVNIX0FERF9QVFIoaGVhZCxwdHJmaWVs ZCxhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBI QVNIX0FERChoaCxoZWFkLHB0cmZpZWxkLHNpemVvZih2b2lkICopLGFkZCkKLSsjZGVmaW5lIEhB U0hfUkVQTEFDRV9QVFIoaGVhZCxwdHJmaWVsZCxhZGQscmVwbGFjZWQpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfUkVQTEFDRShoaCxoZWFkLHB0cmZpZWxkLHNpemVv Zih2b2lkICopLGFkZCxyZXBsYWNlZCkKLSsjZGVmaW5lIEhBU0hfREVMKGhlYWQsZGVscHRyKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IEhBU0hfREVMRVRFKGhoLGhlYWQsZGVscHRyKQotKwotKy8qIEhBU0hfRlNDSyBjaGVja3MgaGFz aCBpbnRlZ3JpdHkgb24gZXZlcnkgYWRkL2RlbGV0ZSB3aGVuIEhBU0hfREVCVUcgaXMgZGVmaW5l ZC4KLSsgKiBUaGlzIGlzIGZvciB1dGhhc2ggZGV2ZWxvcGVyIG9ubHk7IGl0IGNvbXBpbGVzIGF3 YXkgaWYgSEFTSF9ERUJVRyBpc24ndCBkZWZpbmVkLgotKyAqLwotKyNpZmRlZiBIQVNIX0RFQlVH Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+ICAgLyogZnByaW50Ziwgc3RkZXJyICovCi0rI2RlZmluZSBI QVNIX09PUFMoLi4uKSBkbyB7IGZwcmludGYoc3RkZXJyLCBfX1ZBX0FSR1NfXyk7IGV4aXQoLTEp OyB9IHdoaWxlICgwKQotKyNkZWZpbmUgSEFTSF9GU0NLKGhoLGhlYWQsd2hlcmUpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKl90aGg7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKGhlYWQpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX2JrdF9pOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHVuc2lnbmVkIF9j b3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBjaGFyICpfcHJldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgZm9yIChfYmt0X2kg PSAwOyBfYmt0X2kgPCAoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHM7ICsrX2JrdF9pKSB7ICAg ICAgICAgICBcCi0rICAgICAgdW5zaWduZWQgX2JrdF9jb3VudCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIF90aGggPSAoaGVh ZCktPmhoLnRibC0+YnVja2V0c1tfYmt0X2ldLmhoX2hlYWQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICBfcHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgd2hpbGUgKF90aGgp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgaWYgKF9wcmV2ICE9IChjaGFyKikoX3RoaC0+aGhfcHJldikpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgSEFTSF9PT1BT KCIlczogaW52YWxpZCBoaF9wcmV2ICVwLCBhY3R1YWwgJXBcbiIsICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICAgICAgICAod2hlcmUpLCAodm9pZCopX3RoaC0+aGhfcHJldiwgKHZv aWQqKV9wcmV2KTsgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgIF9ia3RfY291bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfcHJldiA9IChjaGFy KikoX3RoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgX3RoaCA9IF90aGgtPmhoX25leHQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgX2NvdW50ICs9IF9ia3RfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIGlmICgoaGVhZCktPmhoLnRi bC0+YnVja2V0c1tfYmt0X2ldLmNvdW50ICE9ICBfYmt0X2NvdW50KSB7ICAgICAgICAgICAgICAg IFwKLSsgICAgICAgIEhBU0hfT09QUygiJXM6IGludmFsaWQgYnVja2V0IGNvdW50ICV1LCBhY3R1 YWwgJXVcbiIsICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgKHdoZXJlKSwgKGhl YWQpLT5oaC50YmwtPmJ1Y2tldHNbX2JrdF9pXS5jb3VudCwgX2JrdF9jb3VudCk7ICAgICAgICAg XAotKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIGlmIChfY291bnQgIT0gKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcykgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hfT09QUygiJXM6IGludmFs aWQgaGggaXRlbSBjb3VudCAldSwgYWN0dWFsICV1XG4iLCAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgKHdoZXJlKSwgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcywgX2NvdW50KTsg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICBfY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX3ByZXYgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIF90aGggPSAgJihoZWFkKS0+aGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB3aGlsZSAoX3RoaCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICBfY291bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgaWYgKF9wcmV2ICE9IChjaGFyKilfdGho LT5wcmV2KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgICAgSEFTSF9PT1BTKCIlczogaW52YWxpZCBwcmV2ICVwLCBhY3R1YWwgJXBcbiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAod2hlcmUpLCAodm9pZCopX3Ro aC0+cHJldiwgKHZvaWQqKV9wcmV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIF9wcmV2ID0gKGNoYXIqKUVMTVRfRlJPTV9I SCgoaGVhZCktPmhoLnRibCwgX3RoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICBfdGhoID0gKF90aGgtPm5leHQgPyBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF90aGgt Pm5leHQpIDogTlVMTCk7ICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBp ZiAoX2NvdW50ICE9IChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBIQVNIX09PUFMoIiVzOiBpbnZhbGlkIGFwcCBp dGVtIGNvdW50ICV1LCBhY3R1YWwgJXVcbiIsICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICh3aGVyZSksIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMsIF9jb3VudCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsjZWxzZQotKyNkZWZpbmUgSEFTSF9G U0NLKGhoLGhlYWQsd2hlcmUpCi0rI2VuZGlmCi0rCi0rLyogV2hlbiBjb21waWxlZCB3aXRoIC1E SEFTSF9FTUlUX0tFWVMsIGxlbmd0aC1wcmVmaXhlZCBrZXlzIGFyZSBlbWl0dGVkIHRvCi0rICog dGhlIGRlc2NyaXB0b3IgdG8gd2hpY2ggdGhpcyBtYWNybyBpcyBkZWZpbmVkIGZvciB0dW5pbmcg dGhlIGhhc2ggZnVuY3Rpb24uCi0rICogVGhlIGFwcCBjYW4gI2luY2x1ZGUgPHVuaXN0ZC5oPiB0 byBnZXQgdGhlIHByb3RvdHlwZSBmb3Igd3JpdGUoMikuICovCi0rI2lmZGVmIEhBU0hfRU1JVF9L RVlTCi0rI2RlZmluZSBIQVNIX0VNSVRfS0VZKGhoLGhlYWQsa2V5cHRyLGZpZWxkbGVuKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIHVuc2lnbmVkIF9rbGVuID0gZmllbGRsZW47ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB3cml0ZShIQVNIX0VNSVRfS0VZUywg Jl9rbGVuLCBzaXplb2YoX2tsZW4pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgd3JpdGUoSEFTSF9FTUlUX0tFWVMsIGtleXB0ciwgKHVuc2lnbmVkIGxvbmcpZmllbGRs ZW4pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKyNlbHNlCi0rI2Rl ZmluZSBIQVNIX0VNSVRfS0VZKGhoLGhlYWQsa2V5cHRyLGZpZWxkbGVuKQotKyNlbmRpZgotKwot Ky8qIFRoZSBCZXJuc3RlaW4gaGFzaCBmdW5jdGlvbiwgdXNlZCBpbiBQZXJsIHByaW9yIHRvIHY1 LjYuIE5vdGUgKHg8PDUreCk9eCozMy4gKi8KLSsjZGVmaW5lIEhBU0hfQkVSKGtleSxrZXlsZW4s aGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hiX2tleWxlbiA9ICh1bnNp Z25lZClrZXlsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9oYl9rZXkgPSAoY29uc3QgdW5zaWduZWQgY2hhciopKGtl eSk7ICAgICAgICAgICAgICAgICAgICBcCi0rICAoaGFzaHYpID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg d2hpbGUgKF9oYl9rZXlsZW4tLSAhPSAwVSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGhhc2h2KSA9ICgoKGhhc2h2KSA8PCA1KSAr IChoYXNodikpICsgKl9oYl9rZXkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rCi0rLyogU0FYL0ZOVi9P QVQvSkVOIGhhc2ggZnVuY3Rpb25zIGFyZSBtYWNybyB2YXJpYW50cyBvZiB0aG9zZSBsaXN0ZWQg YXQKLSsgKiBodHRwOi8vZXRlcm5hbGx5Y29uZnV6emxlZC5jb20vdHV0cy9hbGdvcml0aG1zL2pz d190dXRfaGFzaGluZy5hc3B4Ci0rICogKGFyY2hpdmUgbGluazogaHR0cHM6Ly9hcmNoaXZlLmlz L0l2Y2FuICkKLSsgKi8KLSsjZGVmaW5lIEhBU0hfU0FYKGtleSxrZXlsZW4saGFzaHYpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX3N4X2k7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKl9oc19rZXkgPSAoY29uc3QgdW5zaWduZWQgY2hhciopKGtleSk7ICAgICAgICAg ICAgICAgICAgICBcCi0rICBoYXNodiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgZm9yIChfc3hfaT0w OyBfc3hfaSA8IGtleWxlbjsgX3N4X2krKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgaGFzaHYgXj0gKGhhc2h2IDw8IDUpICsgKGhhc2h2ID4+IDIpICsg X2hzX2tleVtfc3hfaV07ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rLyogRk5WLTFhIHZhcmlhdGlvbiAqLwotKyNkZWZp bmUgSEFTSF9GTlYoa2V5LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNp Z25lZCBfZm5faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgY29uc3QgdW5zaWduZWQgY2hhciAqX2hmX2tleSA9IChj b25zdCB1bnNpZ25lZCBjaGFyKikoa2V5KTsgICAgICAgICAgICAgICAgICAgIFwKLSsgIChoYXNo dikgPSAyMTY2MTM2MjYxVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBmb3IgKF9mbl9pPTA7IF9mbl9pIDwga2V5bGVuOyBfZm5f aSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBoYXNo diA9IGhhc2h2IF4gX2hmX2tleVtfZm5faV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgaGFzaHYgPSBoYXNodiAqIDE2Nzc3NjE5VTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX09BVChrZXks a2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVuc2lnbmVkIF9ob19pOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBjb25zdCB1bnNpZ25lZCBjaGFyICpfaG9fa2V5PShjb25zdCB1bnNpZ25lZCBjaGFy Kikoa2V5KTsgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaGFzaHYgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIGZvcihfaG9faT0wOyBfaG9faSA8IGtleWxlbjsgX2hvX2krKykgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgaGFzaHYgKz0gX2hvX2tleVtf aG9faV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgIGhhc2h2ICs9IChoYXNodiA8PCAxMCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBoYXNodiBePSAoaGFzaHYgPj4g Nik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaGFzaHYgKz0gKGhhc2h2IDw8IDMpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIGhhc2h2IF49IChoYXNodiA+PiAxMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiArPSAoaGFzaHYgPDwgMTUpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot K30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0pFTl9NSVgoYSxiLGMpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIGEgLT0gYjsgYSAtPSBjOyBhIF49ICggYyA+PiAxMyApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBiIC09IGM7IGIg LT0gYTsgYiBePSAoIGEgPDwgOCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgYyAtPSBhOyBjIC09IGI7IGMgXj0gKCBiID4+IDEzICk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGEgLT0gYjsgYSAt PSBjOyBhIF49ICggYyA+PiAxMiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICBiIC09IGM7IGIgLT0gYTsgYiBePSAoIGEgPDwgMTYgKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgYyAtPSBhOyBjIC09 IGI7IGMgXj0gKCBiID4+IDUgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIGEgLT0gYjsgYSAtPSBjOyBhIF49ICggYyA+PiAzICk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBiIC09IGM7IGIgLT0g YTsgYiBePSAoIGEgPDwgMTAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgYyAtPSBhOyBjIC09IGI7IGMgXj0gKCBiID4+IDE1ICk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwot KyNkZWZpbmUgSEFTSF9KRU4oa2V5LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICB1bnNpZ25lZCBfaGpfaSxfaGpfaixfaGpfazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgY29uc3QgY2hhciAqX2hqX2tl eT0odW5zaWduZWQgY29uc3QgY2hhciopKGtleSk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IGhhc2h2ID0gMHhmZWVkYmVlZnU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBfaGpfaSA9IF9oal9qID0gMHg5ZTM3NzliOXU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg X2hqX2sgPSAodW5zaWduZWQpKGtleWxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHdoaWxlIChfaGpfayA+PSAxMlUpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IF9oal9pICs9ICAgIChfaGpfa2V5WzBdICsgKCAodW5zaWduZWQpX2hqX2tleVsxXSA8PCA4ICkg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzJd IDw8IDE2ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgICsgKCAodW5zaWduZWQpX2hqX2tleVszXSA8PCAyNCApICk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9oal9qICs9ICAgIChfaGpfa2V5WzRdICsgKCAo dW5zaWduZWQpX2hqX2tleVs1XSA8PCA4ICkgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg ICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzZdIDw8IDE2ICkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICsgKCAodW5zaWduZWQpX2hqX2tleVs3XSA8 PCAyNCApICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGhh c2h2ICs9IChfaGpfa2V5WzhdICsgKCAodW5zaWduZWQpX2hqX2tleVs5XSA8PCA4ICkgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzEwXSA8 PCAxNiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICsgKCAodW5zaWduZWQpX2hqX2tleVsxMV0gPDwgMjQgKSApOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgSEFT SF9KRU5fTUlYKF9oal9pLCBfaGpfaiwgaGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICBfaGpf a2V5ICs9IDEyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgX2hqX2sgLT0gMTJVOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBoYXNodiArPSAodW5zaWduZWQpKGtleWxlbik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgc3dpdGNoICgg X2hqX2sgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgY2FzZSAxMTogaGFzaHYgKz0gKCAodW5zaWduZWQpX2hqX2tl eVsxMF0gPDwgMjQgKTsgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCi0rICAgIGNhc2UgMTA6 IGhhc2h2ICs9ICggKHVuc2lnbmVkKV9oal9rZXlbOV0gPDwgMTYgKTsgIC8qIEZBTExUSFJPVUdI ICovICAgICAgICAgXAotKyAgICBjYXNlIDk6ICBoYXNodiArPSAoICh1bnNpZ25lZClfaGpfa2V5 WzhdIDw8IDggKTsgICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKLSsgICAgY2FzZSA4OiAg X2hqX2ogKz0gKCAodW5zaWduZWQpX2hqX2tleVs3XSA8PCAyNCApOyAgLyogRkFMTFRIUk9VR0gg Ki8gICAgICAgICBcCi0rICAgIGNhc2UgNzogIF9oal9qICs9ICggKHVuc2lnbmVkKV9oal9rZXlb Nl0gPDwgMTYgKTsgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAotKyAgICBjYXNlIDY6ICBf aGpfaiArPSAoICh1bnNpZ25lZClfaGpfa2V5WzVdIDw8IDggKTsgICAvKiBGQUxMVEhST1VHSCAq LyAgICAgICAgIFwKLSsgICAgY2FzZSA1OiAgX2hqX2ogKz0gX2hqX2tleVs0XTsgICAgICAgICAg ICAgICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCi0rICAgIGNhc2UgNDogIF9o al9pICs9ICggKHVuc2lnbmVkKV9oal9rZXlbM10gPDwgMjQgKTsgIC8qIEZBTExUSFJPVUdIICov ICAgICAgICAgXAotKyAgICBjYXNlIDM6ICBfaGpfaSArPSAoICh1bnNpZ25lZClfaGpfa2V5WzJd IDw8IDE2ICk7ICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKLSsgICAgY2FzZSAyOiAgX2hq X2kgKz0gKCAodW5zaWduZWQpX2hqX2tleVsxXSA8PCA4ICk7ICAgLyogRkFMTFRIUk9VR0ggKi8g ICAgICAgICBcCi0rICAgIGNhc2UgMTogIF9oal9pICs9IF9oal9rZXlbMF07ICAgICAgICAgICAg ICAgICAgICAgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAotKyAgICBkZWZhdWx0OiA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0pFTl9NSVgoX2hq X2ksIF9oal9qLCBoYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rLyogVGhlIFBhdWwgSHNpZWggaGFzaCBmdW5jdGlv biAqLwotKyN1bmRlZiBnZXQxNmJpdHMKLSsjaWYgKGRlZmluZWQoX19HTlVDX18pICYmIGRlZmlu ZWQoX19pMzg2X18pKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSAgICAgICAgICAgICBcCi0rICB8 fCBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkIChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQg KF9fVFVSQk9DX18pCi0rI2RlZmluZSBnZXQxNmJpdHMoZCkgKCooKGNvbnN0IHVpbnQxNl90ICop IChkKSkpCi0rI2VuZGlmCi0rCi0rI2lmICFkZWZpbmVkIChnZXQxNmJpdHMpCi0rI2RlZmluZSBn ZXQxNmJpdHMoZCkgKCgoKHVpbnQzMl90KSgoKGNvbnN0IHVpbnQ4X3QgKikoZCkpWzFdKSkgPDwg OCkgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgKyh1aW50MzJfdCkoKChj b25zdCB1aW50OF90ICopKGQpKVswXSkgKQotKyNlbmRpZgotKyNkZWZpbmUgSEFTSF9TRkgoa2V5 LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBjb25zdCBjaGFy ICpfc2ZoX2tleT0odW5zaWduZWQgY29uc3QgY2hhciopKGtleSk7ICAgICAgICAgICAgICAgICAg ICAgXAotKyAgdWludDMyX3QgX3NmaF90bXAsIF9zZmhfbGVuID0gKHVpbnQzMl90KWtleWxlbjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICB1bnNpZ25lZCBfc2ZoX3JlbSA9IF9zZmhfbGVuICYgM1U7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgX3NmaF9sZW4gPj49IDI7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIGhhc2h2ID0gMHhjYWZlYmFiZXU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgLyogTWFpbiBsb29wICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGZvciAoO19zZmhfbGVuID4gMFU7IF9z ZmhfbGVuLS0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIGhhc2h2ICAgICs9IGdldDE2Yml0cyAoX3NmaF9rZXkpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBfc2ZoX3RtcCAgPSAoKHVpbnQzMl90 KShnZXQxNmJpdHMgKF9zZmhfa2V5KzIpKSA8PCAxMSkgXiBoYXNodjsgICAgICAgICAgICAgIFwK LSsgICAgaGFzaHYgICAgID0gKGhhc2h2IDw8IDE2KSBeIF9zZmhfdG1wOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9zZmhfa2V5ICs9IDJVKnNpemVvZiAo dWludDE2X3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICBoYXNodiAgICArPSBoYXNodiA+PiAxMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgLyogSGFuZGxlIGVuZCBjYXNlcyAqLyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IHN3aXRjaCAoX3NmaF9yZW0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGNhc2UgMzogaGFzaHYgKz0gZ2V0MTZiaXRz IChfc2ZoX2tleSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgICAgICAgIGhhc2h2IF49IGhhc2h2IDw8IDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBoYXNodiBePSAodWludDMyX3Qp KF9zZmhfa2V5W3NpemVvZiAodWludDE2X3QpXSkgPDwgMTg7ICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgaGFzaHYgKz0gaGFzaHYgPj4gMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg Y2FzZSAyOiBoYXNodiArPSBnZXQxNmJpdHMgKF9zZmhfa2V5KTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgaGFzaHYgXj0gaGFzaHYgPDwgMTE7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg ICAgICAgIGhhc2h2ICs9IGhhc2h2ID4+IDE3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGNh c2UgMTogaGFzaHYgKz0gKl9zZmhfa2V5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGhhc2h2IF49IGhhc2h2IDw8IDEwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgICBoYXNodiArPSBoYXNodiA+PiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBkZWZh dWx0OiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgLyogRm9yY2UgImF2YWxhbmNoaW5nIiBvZiBmaW5hbCAxMjcg Yml0cyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2IF49 IGhhc2h2IDw8IDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBoYXNodiArPSBoYXNodiA+PiA1OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaGFzaHYgXj0g aGFzaHYgPDwgNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIGhhc2h2ICs9IGhhc2h2ID4+IDE3OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiBePSBo YXNodiA8PCAyNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgaGFzaHYgKz0gaGFzaHYgPj4gNjsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQot KwotKy8qIGl0ZXJhdGUgb3ZlciBpdGVtcyBpbiBhIGtub3duIGJ1Y2tldCB0byBmaW5kIGRlc2ly ZWQgaXRlbSAqLwotKyNkZWZpbmUgSEFTSF9GSU5EX0lOX0JLVCh0YmwsaGgsaGVhZCxrZXlwdHIs a2V5bGVuX2luLGhhc2h2YWwsb3V0KSAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICBpZiAoKGhlYWQpLmhoX2hlYWQgIT0gTlVMTCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBERUNMVFlQRV9BU1NJ R04ob3V0LCBFTE1UX0ZST01fSEgodGJsLCAoaGVhZCkuaGhfaGVhZCkpOyAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChvdXQpID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHdoaWxlICgob3V0KSAhPSBO VUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgIGlmICgob3V0KS0+aGguaGFzaHYgPT0gKGhhc2h2YWwpICYmIChvdXQpLT5o aC5rZXlsZW4gPT0gKGtleWxlbl9pbikpIHsgICAgICAgXAotKyAgICAgIGlmIChIQVNIX0tFWUNN UCgob3V0KS0+aGgua2V5LCBrZXlwdHIsIGtleWxlbl9pbikgPT0gMCkgeyAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaWYgKChvdXQpLT5oaC5oaF9u ZXh0ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgREVDTFRZUEVfQVNTSUdOKG91dCwgRUxNVF9GUk9NX0hIKHRibCwgKG91dCkt PmhoLmhoX25leHQpKTsgICAgICAgICAgICAgICAgXAotKyAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAob3V0KSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKy8qIGFkZCBh biBpdGVtIHRvIGEgYnVja2V0ICAqLwotKyNkZWZpbmUgSEFTSF9BRERfVE9fQktUKGhlYWQsaGgs YWRkaGgsb29tZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICBVVF9oYXNoX2J1Y2tldCAqX2hhX2hlYWQgPSAmKGhl YWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgX2hh X2hlYWQtPmNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGRoaCktPmhoX25leHQgPSBfaGFfaGVhZC0+aGhf aGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAoYWRk aGgpLT5oaF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKF9oYV9oZWFkLT5oaF9oZWFkICE9IE5VTEwpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX2hh X2hlYWQtPmhoX2hlYWQtPmhoX3ByZXYgPSAoYWRkaGgpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgX2hhX2hl YWQtPmhoX2hlYWQgPSAoYWRkaGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIGlmICgoX2hhX2hlYWQtPmNvdW50ID49ICgoX2hhX2hlYWQt PmV4cGFuZF9tdWx0ICsgMVUpICogSEFTSF9CS1RfQ0FQQUNJVFlfVEhSRVNIKSkgXAotKyAgICAg ICYmICEoYWRkaGgpLT50YmwtPm5vZXhwYW5kKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9FWFBBTkRfQlVDS0VUUyhhZGRoaCwoYWRk aGgpLT50YmwsIG9vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIElG X0hBU0hfTk9ORkFUQUxfT09NKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgIGlmIChvb21lZCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg IEhBU0hfREVMX0lOX0JLVChoZWFkLGFkZGhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICApICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAo MCkKLSsKLSsvKiByZW1vdmUgYW4gaXRlbSBmcm9tIGEgZ2l2ZW4gYnVja2V0ICovCi0rI2RlZmlu ZSBIQVNIX0RFTF9JTl9CS1QoaGVhZCxkZWxoaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIFVUX2hh c2hfYnVja2V0ICpfaGRfaGVhZCA9ICYoaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBfaGRfaGVhZC0+Y291bnQtLTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKF9o ZF9oZWFkLT5oaF9oZWFkID09IChkZWxoaCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgX2hkX2hlYWQtPmhoX2hlYWQgPSAoZGVsaGgpLT5oaF9u ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgaWYgKChkZWxoaCktPmhoX3ByZXYpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGRlbGho KS0+aGhfcHJldi0+aGhfbmV4dCA9IChkZWxoaCktPmhoX25leHQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKChkZWxo aCktPmhoX25leHQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgKGRlbGhoKS0+aGhfbmV4dC0+aGhfcHJldiA9IChkZWxoaCkt PmhoX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rLyogQnVja2V0IGV4cGFuc2lvbiBoYXMg dGhlIGVmZmVjdCBvZiBkb3VibGluZyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMKLSsgKiBhbmQgcmVk aXN0cmlidXRpbmcgdGhlIGl0ZW1zIGludG8gdGhlIG5ldyBidWNrZXRzLiBJZGVhbGx5IHRoZQot KyAqIGl0ZW1zIHdpbGwgZGlzdHJpYnV0ZSBtb3JlIG9yIGxlc3MgZXZlbmx5IGludG8gdGhlIG5l dyBidWNrZXRzCi0rICogKHRoZSBleHRlbnQgdG8gd2hpY2ggdGhpcyBpcyB0cnVlIGlzIGEgbWVh c3VyZSBvZiB0aGUgcXVhbGl0eSBvZgotKyAqIHRoZSBoYXNoIGZ1bmN0aW9uIGFzIGl0IGFwcGxp ZXMgdG8gdGhlIGtleSBkb21haW4pLgotKyAqCi0rICogV2l0aCB0aGUgaXRlbXMgZGlzdHJpYnV0 ZWQgaW50byBtb3JlIGJ1Y2tldHMsIHRoZSBjaGFpbiBsZW5ndGgKLSsgKiAoaXRlbSBjb3VudCkg aW4gZWFjaCBidWNrZXQgaXMgcmVkdWNlZC4gVGh1cyBieSBleHBhbmRpbmcgYnVja2V0cwotKyAq IHRoZSBoYXNoIGtlZXBzIGEgYm91bmQgb24gdGhlIGNoYWluIGxlbmd0aC4gVGhpcyBib3VuZGVk IGNoYWluCi0rICogbGVuZ3RoIGlzIHRoZSBlc3NlbmNlIG9mIGhvdyBhIGhhc2ggcHJvdmlkZXMg Y29uc3RhbnQgdGltZSBsb29rdXAuCi0rICoKLSsgKiBUaGUgY2FsY3VsYXRpb24gb2YgdGJsLT5p ZGVhbF9jaGFpbl9tYXhsZW4gYmVsb3cgZGVzZXJ2ZXMgc29tZQotKyAqIGV4cGxhbmF0aW9uLiBG aXJzdCwga2VlcCBpbiBtaW5kIHRoYXQgd2UncmUgY2FsY3VsYXRpbmcgdGhlIGlkZWFsCi0rICog bWF4aW11bSBjaGFpbiBsZW5ndGggYmFzZWQgb24gdGhlICpuZXcqIChkb3VibGVkKSBidWNrZXQg Y291bnQuCi0rICogSW4gZnJhY3Rpb25zIHRoaXMgaXMganVzdCBuL2IgKG49bnVtYmVyIG9mIGl0 ZW1zLGI9bmV3IG51bSBidWNrZXRzKS4KLSsgKiBTaW5jZSB0aGUgaWRlYWwgY2hhaW4gbGVuZ3Ro IGlzIGFuIGludGVnZXIsIHdlIHdhbnQgdG8gY2FsY3VsYXRlCi0rICogY2VpbChuL2IpLiBXZSBk b24ndCBkZXBlbmQgb24gZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBpbiB0aGlzCi0rICogaGFz aCwgc28gdG8gY2FsY3VsYXRlIGNlaWwobi9iKSB3aXRoIGludGVnZXJzIHdlIGNvdWxkIHdyaXRl Ci0rICoKLSsgKiAgICAgIGNlaWwobi9iKSA9IChuL2IpICsgKChuJWIpPzE6MCkKLSsgKgotKyAq IGFuZCBpbiBmYWN0IGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGhhc2ggZGlkIGp1c3QgdGhh dC4KLSsgKiBCdXQgbm93IHdlIGhhdmUgaW1wcm92ZWQgdGhpbmdzIGEgYml0IGJ5IHJlY29nbml6 aW5nIHRoYXQgYiBpcwotKyAqIGFsd2F5cyBhIHBvd2VyIG9mIHR3by4gV2Uga2VlcCBpdHMgYmFz ZSAyIGxvZyBoYW5keSAoY2FsbCBpdCBsYiksCi0rICogc28gbm93IHdlIGNhbiB3cml0ZSB0aGlz IHdpdGggYSBiaXQgc2hpZnQgYW5kIGxvZ2ljYWwgQU5EOgotKyAqCi0rICogICAgICBjZWlsKG4v YikgPSAobj4+bGIpICsgKCAobiAmIChiLTEpKSA/IDE6MCkKLSsgKgotKyAqLwotKyNkZWZpbmUg SEFTSF9FWFBBTkRfQlVDS0VUUyhoaCx0Ymwsb29tZWQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25l ZCBfaGVfYmt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hlX2JrdF9pOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHN0cnVjdCBV VF9oYXNoX2hhbmRsZSAqX2hlX3RoaCwgKl9oZV9oaF9ueHQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBVVF9oYXNoX2J1Y2tldCAqX2hlX25ld19idWNrZXRzLCAqX2hl X25ld2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgX2hlX25ld19i dWNrZXRzID0gKFVUX2hhc2hfYnVja2V0Kil1dGhhc2hfbWFsbG9jKCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQp ICogKHRibCktPm51bV9idWNrZXRzICogMlUpOyAgICAgICAgICAgICBcCi0rICBpZiAoIV9oZV9u ZXdfYnVja2V0cykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICBIQVNIX1JFQ09SRF9PT00ob29tZWQpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIHV0aGFzaF9iemVybyhfaGVfbmV3X2J1Y2tldHMsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgc2l6ZW9m KHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkgKiAodGJsKS0+bnVtX2J1Y2tldHMgKiAyVSk7ICAgICAg ICAgICAgICAgIFwKLSsgICAgKHRibCktPmlkZWFsX2NoYWluX21heGxlbiA9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICgodGJsKS0+ bnVtX2l0ZW1zID4+ICgodGJsKS0+bG9nMl9udW1fYnVja2V0cysxVSkpICsgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAoKCgodGJsKS0+bnVtX2l0ZW1zICYgKCgodGJsKS0+bnVtX2J1 Y2tldHMqMlUpLTFVKSkgIT0gMFUpID8gMVUgOiAwVSk7ICAgIFwKLSsgICAgKHRibCktPm5vbmlk ZWFsX2l0ZW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIGZvciAoX2hlX2JrdF9pID0gMDsgX2hlX2JrdF9pIDwgKHRibCktPm51 bV9idWNrZXRzOyBfaGVfYmt0X2krKykgeyAgICAgICAgICAgXAotKyAgICAgIF9oZV90aGggPSAo dGJsKS0+YnVja2V0c1sgX2hlX2JrdF9pIF0uaGhfaGVhZDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICB3aGlsZSAoX2hlX3RoaCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaGVfaGhfbnh0 ID0gX2hlX3RoaC0+aGhfbmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgSEFTSF9UT19CS1QoX2hlX3RoaC0+aGFzaHYsICh0YmwpLT5udW1f YnVja2V0cyAqIDJVLCBfaGVfYmt0KTsgICAgICAgICAgIFwKLSsgICAgICAgIF9oZV9uZXdia3Qg PSAmKF9oZV9uZXdfYnVja2V0c1tfaGVfYmt0XSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICBpZiAoKysoX2hlX25ld2JrdC0+Y291bnQpID4gKHRibCktPmlkZWFs X2NoYWluX21heGxlbikgeyAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAodGJsKS0+bm9u aWRlYWxfaXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgaWYgKF9oZV9uZXdia3QtPmNvdW50ID4gX2hlX25ld2JrdC0+ZXhw YW5kX211bHQgKiAodGJsKS0+aWRlYWxfY2hhaW5fbWF4bGVuKSB7IFwKLSsgICAgICAgICAgICBf aGVfbmV3Ymt0LT5leHBhbmRfbXVsdCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgIF9oZV90aGgtPmhoX3ByZXYgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaGVfdGho LT5oaF9uZXh0ID0gX2hlX25ld2JrdC0+aGhfaGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgaWYgKF9oZV9uZXdia3QtPmhoX2hlYWQgIT0gTlVMTCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgX2hlX25l d2JrdC0+aGhfaGVhZC0+aGhfcHJldiA9IF9oZV90aGg7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgX2hlX25ld2Jr dC0+aGhfaGVhZCA9IF9oZV90aGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgIF9oZV90aGggPSBfaGVfaGhfbnh0OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdXRoYXNoX2ZyZWUoKHRi bCktPmJ1Y2tldHMsICh0YmwpLT5udW1fYnVja2V0cyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9i dWNrZXQpKTsgXAotKyAgICAodGJsKS0+bnVtX2J1Y2tldHMgKj0gMlU7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKHRibCktPmxvZzJf bnVtX2J1Y2tldHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICh0YmwpLT5idWNrZXRzID0gX2hlX25ld19idWNrZXRzOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAodGJsKS0+aW5lZmZf ZXhwYW5kcyA9ICgodGJsKS0+bm9uaWRlYWxfaXRlbXMgPiAoKHRibCktPm51bV9pdGVtcyA+PiAx KSkgPyAgIFwKLSsgICAgICAgICgodGJsKS0+aW5lZmZfZXhwYW5kcysxVSkgOiAwVTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmICgodGJsKS0+aW5l ZmZfZXhwYW5kcyA+IDFVKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICh0YmwpLT5ub2V4cGFuZCA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB1dGhhc2hfbm9leHBh bmRfZnlpKHRibCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1dGhhc2hfZXhwYW5kX2Z5 aSh0YmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsKLSsv KiBUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgU2ltb24gVGF0aGFtJ3MgTyhuIGxvZyhuKSkgbWVy Z2Vzb3J0ICovCi0rLyogTm90ZSB0aGF0IEhBU0hfU09SVCBhc3N1bWVzIHRoZSBoYXNoIGhhbmRs ZSBuYW1lIHRvIGJlIGhoLgotKyAqIEhBU0hfU1JUIHdhcyBhZGRlZCB0byBhbGxvdyB0aGUgaGFz aCBoYW5kbGUgbmFtZSB0byBiZSBwYXNzZWQgaW4uICovCi0rI2RlZmluZSBIQVNIX1NPUlQoaGVh ZCxjbXBmY24pIEhBU0hfU1JUKGhoLGhlYWQsY21wZmNuKQotKyNkZWZpbmUgSEFTSF9TUlQoaGgs aGVhZCxjbXBmY24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaHNfaTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgdW5zaWduZWQgX2hzX2xvb3BpbmcsX2hzX25tZXJnZXMsX2hzX2luc2l6ZSxfaHNf cHNpemUsX2hzX3FzaXplOyAgICAgICAgICAgICAgIFwKLSsgIHN0cnVjdCBVVF9oYXNoX2hhbmRs ZSAqX2hzX3AsICpfaHNfcSwgKl9oc19lLCAqX2hzX2xpc3QsICpfaHNfdGFpbDsgICAgICAgICAg ICBcCi0rICBpZiAoaGVhZCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBfaHNfaW5zaXplID0gMTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgX2hzX2xvb3BpbmcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9oc19saXN0ID0gJigoaGVhZCkt PmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICB3aGlsZSAoX2hzX2xvb3BpbmcgIT0gMFUpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBfaHNfcCA9IF9oc19saXN0OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgX2hzX2xpc3QgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIF9oc190YWlsID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICBfaHNfbm1lcmdlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgd2hpbGUgKF9oc19wICE9IE5VTEwp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgX2hzX25tZXJnZXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9oc19xID0gX2hzX3A7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICBfaHNfcHNpemUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgZm9yIChfaHNfaSA9IDA7IF9oc19p IDwgX2hzX2luc2l6ZTsgKytfaHNfaSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgICAgX2hzX3BzaXplKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIF9oc19xID0gKChfaHNfcS0+bmV4 dCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3EtPm5leHQpIDogTlVM TCk7ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKF9oc19xID09IE5VTEwpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaHNfcXNpemUgPSBfaHNfaW5zaXplOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg ICAgd2hpbGUgKChfaHNfcHNpemUgIT0gMFUpIHx8ICgoX2hzX3FzaXplICE9IDBVKSAmJiAoX2hz X3EgIT0gTlVMTCkpKSB7ICAgIFwKLSsgICAgICAgICAgaWYgKF9oc19wc2l6ZSA9PSAwVSkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICAgX2hzX2UgPSBfaHNfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc19xID0gKChfaHNfcS0+bmV4dCAh PSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3EtPm5leHQpIDogTlVMTCk7 ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hzX3FzaXplLS07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICB9IGVsc2UgaWYgKChfaHNfcXNpemUgPT0gMFUpIHx8IChfaHNfcSA9PSBOVUxMKSkgeyAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBfaHNfZSA9IF9oc19wOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAg ICAgaWYgKF9oc19wICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgX2hzX3AgPSAoKF9oc19wLT5uZXh0ICE9 IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg ICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcC0+bmV4dCkgOiBOVUxMKTsg ICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAg IF9oc19wc2l6ZS0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSBlbHNlIGlmICgoY21wZmNuKCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAg ICAgIERFQ0xUWVBFKGhlYWQpKEVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hzX3ApKSwg ICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICBERUNMVFlQRShoZWFkKShFTE1UX0ZST01f SEgoKGhlYWQpLT5oaC50YmwsIF9oc19xKSkgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAg ICAgKSkgPD0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hzX2UgPSBfaHNfcDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGlm IChfaHNfcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIF9oc19wID0gKChfaHNfcC0+bmV4dCAhPSBOVUxM KSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAg IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3AtPm5leHQpIDogTlVMTCk7ICAgICAg ICAgICAgICAgXAotKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBfaHNf cHNpemUtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc19l ID0gX2hzX3E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgICBfaHNfcSA9ICgoX2hzX3EtPm5leHQgIT0gTlVMTCkgPyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICBISF9G Uk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19xLT5uZXh0KSA6IE5VTEwpOyAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICAgIF9oc19xc2l6ZS0tOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICAgIGlmICggX2hzX3RhaWwgIT0gTlVMTCApIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc190YWls LT5uZXh0ID0gKChfaHNfZSAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgICAgIEVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hzX2Up IDogTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgICAgIF9oc19saXN0ID0gX2hzX2U7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgIGlmIChfaHNfZSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc19lLT5wcmV2 ID0gKChfaHNfdGFpbCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICAgIEVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hzX3RhaWwp IDogTlVMTCk7ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgICBfaHNfdGFpbCA9IF9oc19lOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICBfaHNfcCA9IF9oc19xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICBpZiAoX2hzX3RhaWwgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaHNfdGFpbC0+bmV4dCA9IE5V TEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBpZiAoX2hzX25tZXJnZXMgPD0gMVUp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICBfaHNfbG9vcGluZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgKGhlYWQpLT5oaC50YmwtPnRhaWwg PSBfaHNfdGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgIERFQ0xUWVBFX0FTU0lHTihoZWFkLCBFTE1UX0ZST01fSEgoKGhlYWQpLT5oaC50Ymws IF9oc19saXN0KSk7ICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgIF9oc19pbnNpemUgKj0gMlU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IEhBU0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hfU1JUIik7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdo aWxlICgwKQotKwotKy8qIFRoaXMgZnVuY3Rpb24gc2VsZWN0cyBpdGVtcyBmcm9tIG9uZSBoYXNo IGludG8gYW5vdGhlciBoYXNoLgotKyAqIFRoZSBlbmQgcmVzdWx0IGlzIHRoYXQgdGhlIHNlbGVj dGVkIGl0ZW1zIGhhdmUgZHVhbCBwcmVzZW5jZQotKyAqIGluIGJvdGggaGFzaGVzLiBUaGVyZSBp cyBubyBjb3B5IG9mIHRoZSBpdGVtcyBtYWRlOyByYXRoZXIKLSsgKiB0aGV5IGFyZSBhZGRlZCBp bnRvIHRoZSBuZXcgaGFzaCB0aHJvdWdoIGEgc2Vjb25kYXJ5IGhhc2gKLSsgKiBoYXNoIGhhbmRs ZSB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3RydWN0dXJlLiAqLwotKyNkZWZpbmUgSEFT SF9TRUxFQ1QoaGhfZHN0LCBkc3QsIGhoX3NyYywgc3JjLCBjb25kKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBf c3JjX2JrdCwgX2RzdF9ia3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgdm9pZCAqX2xhc3RfZWx0ID0gTlVMTCwgKl9lbHQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIFVUX2hhc2hfaGFu ZGxlICpfc3JjX2hoLCAqX2RzdF9oaCwgKl9sYXN0X2VsdF9oaD1OVUxMOyAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICBwdHJkaWZmX3QgX2RzdF9oaG8gPSAoKGNoYXIqKSgmKGRzdCktPmho X2RzdCkgLSAoY2hhciopKGRzdCkpOyAgICAgICAgICAgICAgICAgXAotKyAgaWYgKChzcmMpICE9 IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgZm9yIChfc3JjX2JrdD0wOyBfc3JjX2JrdCA8IChzcmMpLT5oaF9z cmMudGJsLT5udW1fYnVja2V0czsgX3NyY19ia3QrKykgeyAgICBcCi0rICAgICAgZm9yIChfc3Jj X2hoID0gKHNyYyktPmhoX3NyYy50YmwtPmJ1Y2tldHNbX3NyY19ia3RdLmhoX2hlYWQ7ICAgICAg ICAgICAgICAgXAotKyAgICAgICAgX3NyY19oaCAhPSBOVUxMOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9zcmNfaGgg PSBfc3JjX2hoLT5oaF9uZXh0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICBfZWx0ID0gRUxNVF9GUk9NX0hIKChzcmMpLT5oaF9zcmMudGJs LCBfc3JjX2hoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgaWYgKGNvbmQo X2VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGludCBfaHNfb29tZWQg PSAwOyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIF9kc3RfaGgg PSAoVVRfaGFzaF9oYW5kbGUqKSh2b2lkKikoKChjaGFyKilfZWx0KSArIF9kc3RfaGhvKTsgICAg ICAgICAgXAotKyAgICAgICAgICBfZHN0X2hoLT5rZXkgPSBfc3JjX2hoLT5rZXk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgX2RzdF9oaC0+ a2V5bGVuID0gX3NyY19oaC0+a2V5bGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICAgIF9kc3RfaGgtPmhhc2h2ID0gX3NyY19oaC0+aGFzaHY7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBfZHN0X2hoLT5w cmV2ID0gX2xhc3RfZWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgX2RzdF9oaC0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGlmIChfbGFzdF9l bHRfaGggIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgICAgIF9sYXN0X2VsdF9oaC0+bmV4dCA9IF9lbHQ7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgIGlmICgoZHN0KSA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIERFQ0xUWVBFX0FT U0lHTihkc3QsIF9lbHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICBIQVNIX01BS0VfVEFCTEUoaGhfZHN0LCBkc3QsIF9oc19vb21lZCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgSUZfSEFTSF9OT05G QVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgICAgICAgaWYgKF9oc19vb21lZCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgdXRoYXNoX25v bmZhdGFsX29vbShfZWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgICAgICAgIChkc3QpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICBjb250aW51ZTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBfZHN0X2hoLT50YmwgPSAo ZHN0KS0+aGhfZHN0LnRibDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBIQVNIX1RPX0JLVChfZHN0X2ho LT5oYXNodiwgX2RzdF9oaC0+dGJsLT5udW1fYnVja2V0cywgX2RzdF9ia3QpOyAgICAgIFwKLSsg ICAgICAgICAgSEFTSF9BRERfVE9fQktUKF9kc3RfaGgtPnRibC0+YnVja2V0c1tfZHN0X2JrdF0s IGhoX2RzdCwgX2RzdF9oaCwgX2hzX29vbWVkKTsgXAotKyAgICAgICAgICAoZHN0KS0+aGhfZHN0 LnRibC0+bnVtX2l0ZW1zKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgaWYgKF9oc19vb21l ZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgICAgICAgSEFTSF9ST0xMQkFDS19CS1QoaGhfZHN0LCBkc3QsIF9kc3RfaGgp OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIEhBU0hfREVMRVRF X0hIKGhoX2RzdCwgZHN0LCBfZHN0X2hoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgICAgICBfZHN0X2hoLT50YmwgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgdXRoYXNoX25vbmZh dGFsX29vbShfZWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgSEFTSF9CTE9PTV9BREQoX2Rz dF9oaC0+dGJsLCBfZHN0X2hoLT5oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgIF9sYXN0X2VsdCA9IF9lbHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBfbGFzdF9lbHRfaGggPSBfZHN0 X2hoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBI QVNIX0ZTQ0soaGhfZHN0LCBkc3QsICJIQVNIX1NFTEVDVCIpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0NM RUFSKGhoLGhlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGlmICgoaGVhZCkgIT0g TlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIEhBU0hfQkxPT01fRlJFRSgoaGVhZCktPmhoLnRibCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1dGhhc2hfZnJlZSgo aGVhZCktPmhoLnRibC0+YnVja2V0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzKnNp emVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQpKTsgICAgICBcCi0rICAgIHV0aGFzaF9mcmVlKCho ZWFkKS0+aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAoaGVhZCkgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfT1ZFUkhFQUQoaGgsaGVhZCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICgo KGhlYWQpICE9IE5VTEwpID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAoc2l6ZV90KSgoKGhlYWQpLT5oaC50YmwtPm51bV9p dGVtcyAgICogc2l6ZW9mKFVUX2hhc2hfaGFuZGxlKSkgICArICAgICAgICAgICAgIFwKLSsgICAg ICAgICAgKChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cyAqIHNpemVvZihVVF9oYXNoX2J1Y2tl dCkpICAgKyAgICAgICAgICAgICBcCi0rICAgICAgICAgICBzaXplb2YoVVRfaGFzaF90YWJsZSkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICAgICAgXAotKyAgICAg ICAgICAgKEhBU0hfQkxPT01fQllURUxFTikpKSA6IDBVKQotKwotKyNpZmRlZiBOT19ERUNMVFlQ RQotKyNkZWZpbmUgSEFTSF9JVEVSKGhoLGhlYWQsZWwsdG1wKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStmb3IoKChlbCk9KGhlYWQpKSwgKCgqKGNo YXIqKikoJih0bXApKSk9KGNoYXIqKSgoaGVhZCE9TlVMTCk/KGhlYWQpLT5oaC5uZXh0Ok5VTEwp KTsgXAotKyAgKGVsKSAhPSBOVUxMOyAoKGVsKT0odG1wKSksICgoKihjaGFyKiopKCYodG1wKSkp PShjaGFyKikoKHRtcCE9TlVMTCk/KHRtcCktPmhoLm5leHQ6TlVMTCkpKQotKyNlbHNlCi0rI2Rl ZmluZSBIQVNIX0lURVIoaGgsaGVhZCxlbCx0bXApICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotK2ZvcigoKGVsKT0oaGVhZCkpLCAoKHRtcCk9REVDTFRZ UEUoZWwpKChoZWFkIT1OVUxMKT8oaGVhZCktPmhoLm5leHQ6TlVMTCkpOyAgICAgIFwKLSsgIChl bCkgIT0gTlVMTDsgKChlbCk9KHRtcCkpLCAoKHRtcCk9REVDTFRZUEUoZWwpKCh0bXAhPU5VTEwp Pyh0bXApLT5oaC5uZXh0Ok5VTEwpKSkKLSsjZW5kaWYKLSsKLSsvKiBvYnRhaW4gYSBjb3VudCBv ZiBpdGVtcyBpbiB0aGUgaGFzaCAqLwotKyNkZWZpbmUgSEFTSF9DT1VOVChoZWFkKSBIQVNIX0NO VChoaCxoZWFkKQotKyNkZWZpbmUgSEFTSF9DTlQoaGgsaGVhZCkgKChoZWFkICE9IE5VTEwpPygo aGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zKTowVSkKLSsKLSt0eXBlZGVmIHN0cnVjdCBVVF9oYXNo X2J1Y2tldCB7Ci0rICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpoaF9oZWFkOwotKyAgIHVuc2ln bmVkIGNvdW50OwotKwotKyAgIC8qIGV4cGFuZF9tdWx0IGlzIG5vcm1hbGx5IHNldCB0byAwLiBJ biB0aGlzIHNpdHVhdGlvbiwgdGhlIG1heCBjaGFpbiBsZW5ndGgKLSsgICAgKiB0aHJlc2hvbGQg aXMgZW5mb3JjZWQgYXQgaXRzIGRlZmF1bHQgdmFsdWUsIEhBU0hfQktUX0NBUEFDSVRZX1RIUkVT SC4gKElmCi0rICAgICogdGhlIGJ1Y2tldCdzIGNoYWluIGV4Y2VlZHMgdGhpcyBsZW5ndGgsIGJ1 Y2tldCBleHBhbnNpb24gaXMgdHJpZ2dlcmVkKS4KLSsgICAgKiBIb3dldmVyLCBzZXR0aW5nIGV4 cGFuZF9tdWx0IHRvIGEgbm9uLXplcm8gdmFsdWUgZGVsYXlzIGJ1Y2tldCBleHBhbnNpb24KLSsg ICAgKiAodGhhdCB3b3VsZCBiZSB0cmlnZ2VyZWQgYnkgYWRkaXRpb25zIHRvIHRoaXMgcGFydGlj dWxhciBidWNrZXQpCi0rICAgICogdW50aWwgaXRzIGNoYWluIGxlbmd0aCByZWFjaGVzIGEgKm11 bHRpcGxlKiBvZiBIQVNIX0JLVF9DQVBBQ0lUWV9USFJFU0guCi0rICAgICogKFRoZSBtdWx0aXBs aWVyIGlzIHNpbXBseSBleHBhbmRfbXVsdCsxKS4gVGhlIHdob2xlIGlkZWEgb2YgdGhpcwotKyAg ICAqIG11bHRpcGxpZXIgaXMgdG8gcmVkdWNlIGJ1Y2tldCBleHBhbnNpb25zLCBzaW5jZSB0aGV5 IGFyZSBleHBlbnNpdmUsIGluCi0rICAgICogc2l0dWF0aW9ucyB3aGVyZSB3ZSBrbm93IHRoYXQg YSBwYXJ0aWN1bGFyIGJ1Y2tldCB0ZW5kcyB0byBiZSBvdmVydXNlZC4KLSsgICAgKiBJdCBpcyBi ZXR0ZXIgdG8gbGV0IGl0cyBjaGFpbiBsZW5ndGggZ3JvdyB0byBhIGxvbmdlciB5ZXQtc3RpbGwt Ym91bmRlZAotKyAgICAqIHZhbHVlLCB0aGFuIHRvIGRvIGFuIE8obikgYnVja2V0IGV4cGFuc2lv biB0b28gb2Z0ZW4uCi0rICAgICovCi0rICAgdW5zaWduZWQgZXhwYW5kX211bHQ7Ci0rCi0rfSBV VF9oYXNoX2J1Y2tldDsKLSsKLSsvKiByYW5kb20gc2lnbmF0dXJlIHVzZWQgb25seSB0byBmaW5k IGhhc2ggdGFibGVzIGluIGV4dGVybmFsIGFuYWx5c2lzICovCi0rI2RlZmluZSBIQVNIX1NJR05B VFVSRSAweGEwMTExZmUxdQotKyNkZWZpbmUgSEFTSF9CTE9PTV9TSUdOQVRVUkUgMHhiMTIyMjBm MnUKLSsKLSt0eXBlZGVmIHN0cnVjdCBVVF9oYXNoX3RhYmxlIHsKLSsgICBVVF9oYXNoX2J1Y2tl dCAqYnVja2V0czsKLSsgICB1bnNpZ25lZCBudW1fYnVja2V0cywgbG9nMl9udW1fYnVja2V0czsK LSsgICB1bnNpZ25lZCBudW1faXRlbXM7Ci0rICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICp0YWls OyAvKiB0YWlsIGhoIGluIGFwcCBvcmRlciwgZm9yIGZhc3QgYXBwZW5kICAgICovCi0rICAgcHRy ZGlmZl90IGhobzsgLyogaGFzaCBoYW5kbGUgb2Zmc2V0IChieXRlIHBvcyBvZiBoYXNoIGhhbmRs ZSBpbiBlbGVtZW50ICovCi0rCi0rICAgLyogaW4gYW4gaWRlYWwgc2l0dWF0aW9uIChhbGwgYnVj a2V0cyB1c2VkIGVxdWFsbHkpLCBubyBidWNrZXQgd291bGQgaGF2ZQotKyAgICAqIG1vcmUgdGhh biBjZWlsKCNpdGVtcy8jYnVja2V0cykgaXRlbXMuIHRoYXQncyB0aGUgaWRlYWwgY2hhaW4gbGVu Z3RoLiAqLwotKyAgIHVuc2lnbmVkIGlkZWFsX2NoYWluX21heGxlbjsKLSsKLSsgICAvKiBub25p ZGVhbF9pdGVtcyBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBoYXNoIHdob3NlIGNoYWlu IHBvc2l0aW9uCi0rICAgICogZXhjZWVkcyB0aGUgaWRlYWwgY2hhaW4gbWF4bGVuLiB0aGVzZSBp dGVtcyBwYXkgdGhlIHBlbmFsdHkgZm9yIGFuIHVuZXZlbgotKyAgICAqIGhhc2ggZGlzdHJpYnV0 aW9uOyByZWFjaGluZyB0aGVtIGluIGEgY2hhaW4gdHJhdmVyc2FsIHRha2VzID5pZGVhbCBzdGVw cyAqLwotKyAgIHVuc2lnbmVkIG5vbmlkZWFsX2l0ZW1zOwotKwotKyAgIC8qIGluZWZmZWN0aXZl IGV4cGFuZHMgb2NjdXIgd2hlbiBhIGJ1Y2tldCBkb3VibGluZyB3YXMgcGVyZm9ybWVkLCBidXQK LSsgICAgKiBhZnRlcndhcmQsIG1vcmUgdGhhbiBoYWxmIHRoZSBpdGVtcyBpbiB0aGUgaGFzaCBo YWQgbm9uaWRlYWwgY2hhaW4KLSsgICAgKiBwb3NpdGlvbnMuIElmIHRoaXMgaGFwcGVucyBvbiB0 d28gY29uc2VjdXRpdmUgZXhwYW5zaW9ucyB3ZSBpbmhpYml0IGFueQotKyAgICAqIGZ1cnRoZXIg ZXhwYW5zaW9uLCBhcyBpdCdzIG5vdCBoZWxwaW5nOyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFz aAotKyAgICAqIGZ1bmN0aW9uIGlzbid0IGEgZ29vZCBmaXQgZm9yIHRoZSBrZXkgZG9tYWluLiBX aGVuIGV4cGFuc2lvbiBpcyBpbmhpYml0ZWQKLSsgICAgKiB0aGUgaGFzaCB3aWxsIHN0aWxsIHdv cmssIGFsYmVpdCBubyBsb25nZXIgaW4gY29uc3RhbnQgdGltZS4gKi8KLSsgICB1bnNpZ25lZCBp bmVmZl9leHBhbmRzLCBub2V4cGFuZDsKLSsKLSsgICB1aW50MzJfdCBzaWduYXR1cmU7IC8qIHVz ZWQgb25seSB0byBmaW5kIGhhc2ggdGFibGVzIGluIGV4dGVybmFsIGFuYWx5c2lzICovCi0rI2lm ZGVmIEhBU0hfQkxPT00KLSsgICB1aW50MzJfdCBibG9vbV9zaWc7IC8qIHVzZWQgb25seSB0byB0 ZXN0IGJsb29tIGV4aXN0cyBpbiBleHRlcm5hbCBhbmFseXNpcyAqLwotKyAgIHVpbnQ4X3QgKmJs b29tX2J2OwotKyAgIHVpbnQ4X3QgYmxvb21fbmJpdHM7Ci0rI2VuZGlmCi0rCi0rfSBVVF9oYXNo X3RhYmxlOwotKwotK3R5cGVkZWYgc3RydWN0IFVUX2hhc2hfaGFuZGxlIHsKLSsgICBzdHJ1Y3Qg VVRfaGFzaF90YWJsZSAqdGJsOwotKyAgIHZvaWQgKnByZXY7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBwcmV2IGVsZW1lbnQgaW4gYXBwIG9yZGVyICAgICAgKi8KLSsgICB2b2lkICpuZXh0OyAg ICAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBlbGVtZW50IGluIGFwcCBvcmRlciAgICAgICov Ci0rICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpoaF9wcmV2OyAgIC8qIHByZXZpb3VzIGhoIGlu IGJ1Y2tldCBvcmRlciAgICAqLwotKyAgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqaGhfbmV4dDsg ICAvKiBuZXh0IGhoIGluIGJ1Y2tldCBvcmRlciAgICAgICAgKi8KLSsgICBjb25zdCB2b2lkICpr ZXk7ICAgICAgICAgICAgICAgICAgLyogcHRyIHRvIGVuY2xvc2luZyBzdHJ1Y3QncyBrZXkgICov Ci0rICAgdW5zaWduZWQga2V5bGVuOyAgICAgICAgICAgICAgICAgIC8qIGVuY2xvc2luZyBzdHJ1 Y3QncyBrZXkgbGVuICAgICAqLwotKyAgIHVuc2lnbmVkIGhhc2h2OyAgICAgICAgICAgICAgICAg ICAvKiByZXN1bHQgb2YgaGFzaC1mY24oa2V5KSAgICAgICAgKi8KLSt9IFVUX2hhc2hfaGFuZGxl OwotKwotKyNlbmRpZiAvKiBVVEhBU0hfSCAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9y aWcvdmVyc2lvbi5oIG9wZW5zc2gtMTAuM3AxL3ZlcnNpb24uaAotLS0tIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvdmVyc2lvbi5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysg b3BlbnNzaC0xMC4zcDEvdmVyc2lvbi5oCTIwMjYtMDctMDIgMDI6MDY6NTQuMDkwOTY1NjA4ICsw MjAwCi1AQCAtMTYsNSArMTYsNiBAQAotIAotICNkZWZpbmUgU1NIX1BPUlRBQkxFCSJwMSIKLSAj ZGVmaW5lIEdTSV9QT1JUQUJMRQkiYy1HU0kiCi0tI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hfVkVS U0lPTiBTU0hfUE9SVEFCTEUgR1NJX1BPUlRBQkxFIFwKLSsjZGVmaW5lIFNTSF9IUE4JCSJfaHBu MTguOS4wIgotKyNkZWZpbmUgU1NIX1JFTEVBU0UJU1NIX1ZFUlNJT04gU1NIX1BPUlRBQkxFIEdT SV9QT1JUQUJMRSBTU0hfSFBOIFwKLSAJCQlHU0lfVkVSU0lPTiBLUkI1X1ZFUlNJT04KCmRpZmYg LS1naXQgYS8yMDAxLW9wZW5zc2gtMTAuNXAxLWhwbi0xOC4xMS4xLnBhdGNoIGIvMjAwMS1vcGVu c3NoLTEwLjVwMS1ocG4tMTguMTEuMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5jYzNhODRlCi0tLSAvZGV2L251bGwKKysrIGIvMjAwMS1vcGVuc3NoLTEwLjVwMS1o cG4tMTguMTEuMS5wYXRjaApAQCAtMCwwICsxLDE1NjUyIEBACitkaWZmIC1OdXIgb3BlbnNzaC0x MC41cDEub3JpZy9hdXRoMi5jIG9wZW5zc2gtMTAuNXAxL2F1dGgyLmMKKy0tLSBvcGVuc3NoLTEw LjVwMS5vcmlnL2F1dGgyLmMJMjAyNi0wOS0yMSAwNzowNjowNS41NTUyMTM3MzggKzAyMDAKKysr KyBvcGVuc3NoLTEwLjVwMS9hdXRoMi5jCTIwMjYtMDktMjEgMTA6NDA6MzEuMTI5MTc0NzM2ICsw MjAwCitAQCAtNTIsNiArNTIsOCBAQAorICNpbmNsdWRlICJkaXNwYXRjaC5oIgorICNpbmNsdWRl ICJwYXRobmFtZXMuaCIKKyAjaW5jbHVkZSAic3NoZXJyLmgiCisrI2luY2x1ZGUgImNhbm9ob3N0 LmgiCisrCisgI2lmZGVmIEdTU0FQSQorICNpbmNsdWRlICJzc2gtZ3NzLmgiCisgI2VuZGlmCitA QCAtNzUsNiArNzcsOCBAQAorIGV4dGVybiBBdXRobWV0aG9kIG1ldGhvZF9nc3NhcGk7CisgI2Vu ZGlmCisgCisrc3RhdGljIGludCBsb2dfZmxhZyA9IDA7CisrCisgQXV0aG1ldGhvZCAqYXV0aG1l dGhvZHNbXSA9IHsKKyAJJm1ldGhvZF9ub25lLAorIAkmbWV0aG9kX3B1YmtleSwKK0BAIC0xMDQs NiArMTA4LDkgQEAKKyAjZGVmaW5lIE1BVENIX1BBUlRJQUwJMwkvKiBtZXRob2QgbWF0Y2hlcywg c3VibWV0aG9kIGNhbid0IGJlIGNoZWNrZWQgKi8KKyBzdGF0aWMgaW50IGxpc3Rfc3RhcnRzX3dp dGgoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgCisrLyogcmVh ZCB0aGUgdXNlciBiYW5uZXIgZnJvbSB0aGUgcGF0aCBpbiBzc2hkX2NvbmZpZworKyAqIHRoaXMg aXNuJ3QgdG8gcmVhZCBpdCBvbiB0aGUgY2xpZW50IHNpZGUgYnV0IHRvIHJlYWQKKysgKiBpdCBp bnRvIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQgb24gdGhlIHNlcnZlciBzaWRlICovCisgY2hh ciAqCisgYXV0aDJfcmVhZF9iYW5uZXIodm9pZCkKKyB7CitAQCAtMzE0LDYgKzMyMSwxMSBAQAor IAorIAlkZWJ1ZygidXNlcmF1dGgtcmVxdWVzdCBmb3IgdXNlciAlcyBzZXJ2aWNlICVzIG1ldGhv ZCAlcyIsCisgCSAgICB1c2VyWzBdID8gdXNlciA6ICI8aW1wbGljaXQ+Iiwgc2VydmljZSwgbWV0 aG9kKTsKKysJaWYgKCFsb2dfZmxhZykgeworKwkJbG9naXQoIlNTSDogU2VydmVyO0x0eXBlOiBB dXRobmFtZTtSZW1vdGU6ICVzLSVkO05hbWU6ICVzIiwKKysJCSAgICBzc2hfcmVtb3RlX2lwYWRk cihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSwgdXNlcik7CisrCQlsb2dfZmxhZyA9IDE7Cisr CX0KKyAJZGVidWcoImF0dGVtcHQgJWQgZmFpbHVyZXMgJWQiLCBhdXRoY3R4dC0+YXR0ZW1wdCwg YXV0aGN0eHQtPmZhaWx1cmVzKTsKKyAKKyAjaWZkZWYgV0lUSF9TRUxJTlVYCitkaWZmIC1OdXIg b3BlbnNzaC0xMC41cDEub3JpZy9iaW5uLmMgb3BlbnNzaC0xMC41cDEvYmlubi5jCistLS0gb3Bl bnNzaC0xMC41cDEub3JpZy9iaW5uLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NoLTEwLjVwMS9iaW5uLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODA0NTY2 ODQgKzAyMDAKK0BAIC0wLDAgKzEsMzU0MSBAQAorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNs dWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxtZW1vcnkuaD4KKysjaW5jbHVkZSAiYmlubi5oIgorKworKyNkZWZpbmUg VU5VU0VEKHgpICh2b2lkKSh4KQorKyNkZWZpbmUgcm91bmR2YWwoZGJsKSBkYmwgPj0gMC4wID8g KGludCkoZGJsICsgMC41KSA6ICgoZGJsIC0gKGRvdWJsZSkoaW50KWRibCkgPD0gLTAuNSA/IChp bnQpZGJsIDogKGludCkoZGJsIC0gMC41KSkKKysKKysvLyBtYWdpYyBudW1iZXI6ICAweDFGIDB4 YjEgMHgyMiAweDFGICA9PiAgMHgxRkIxMjIxRiBvciAweDFGMjJCMTFGCisrLy8gYmVjYXVzZSB0 aGUgQklOTl9TVE9SQUdFX05PQllURVMgKGJpbmFyeSAwMDApIG1heSBub3QgaGF2ZSBzbyBtYW55 IHN1Yi10eXBlcyAoQklOTl9TVE9SQUdFX0hBU19NT1JFID0gMHgxMCkKKysjZGVmaW5lIEJJTk5f TUFHSUMgICAgICAgICAgICAweDFGMjJCMTFGCisrCisrI2RlZmluZSBNQVhfQklOTl9IRUFERVIg ICAgICAgOSAgLy8gWzE6dHlwZV1bNDpzaXplXVs0OmNvdW50XQorKyNkZWZpbmUgTUlOX0JJTk5f U0laRSAgICAgICAgIDMgIC8vIFsxOnR5cGVdWzE6c2l6ZV1bMTpjb3VudF0KKysjZGVmaW5lIENI VU5LX1NJWkUgICAgICAgICAgICAyNTYgIC8vIDEwMjQKKysKKysjZGVmaW5lIEJJTk5fU1RSVUNU ICAgICAgICAxCisrI2RlZmluZSBCSU5OX0JVRkZFUiAgICAgICAgMgorKworK3ZvaWQqICgqbWFs bG9jX2ZuKShzaXplX3QgbGVuKSA9IDA7Cisrdm9pZCogKCpyZWFsbG9jX2ZuKSh2b2lkICpwdHIs IHNpemVfdCBsZW4pID0gMDsKKyt2b2lkICAoKmZyZWVfZm4pKHZvaWQgKnB0cikgPSAwOworKwor Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrCisrI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZp bmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwY19f KSB8fCBkZWZpbmVkKF9fc3BhcmNfXykKKysjZGVmaW5lIEJJTk5fT05MWV9BTElHTkVEX0FDQ0VT UworKyNlbGlmICggZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSApICYm ICFkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEKQorKyNkZWZpbmUgQklOTl9PTkxZX0FM SUdORURfQUNDRVNTCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoX1dJTjMyKQorKyNkZWZpbmUg QklHX0VORElBTiAgICAgIDB4MTAwMAorKyNkZWZpbmUgTElUVExFX0VORElBTiAgIDB4MDAwMQor KyNkZWZpbmUgQllURV9PUkRFUiAgICAgIExJVFRMRV9FTkRJQU4KKysjZWxpZiBkZWZpbmVkKF9f QVBQTEVfXykKKysvKiBtYWNyb3MgYWxyZWFkeSBkZWZpbmVkICovCisrI2VsaWYgZGVmaW5lZChf X09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9f KSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisrI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKysj ZWxpZiBkZWZpbmVkKF9BSVgpCisrI2luY2x1ZGUgPHN5cy9tYWNoaW5lLmg+CisrI2Vsc2UKKysj aW5jbHVkZSA8ZW5kaWFuLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBCWVRFX09SREVSCisrI2Vy cm9yICJCWVRFX09SREVSIG5vdCBkZWZpbmVkIgorKyNlbmRpZgorKyNpZm5kZWYgQklHX0VORElB TgorKyNlcnJvciAiQklHX0VORElBTiBub3QgZGVmaW5lZCIKKysjZW5kaWYKKysjaWZuZGVmIExJ VFRMRV9FTkRJQU4KKysjZXJyb3IgIkxJVFRMRV9FTkRJQU4gbm90IGRlZmluZWQiCisrI2VuZGlm CisrI2lmIEJJR19FTkRJQU4gPT0gTElUVExFX0VORElBTgorKyNlcnJvciAiQklHX0VORElBTiA9 PSBMSVRUTEVfRU5ESUFOIgorKyNlbmRpZgorKyNpZiBCWVRFX09SREVSIT1CSUdfRU5ESUFOICYm IEJZVEVfT1JERVIhPUxJVFRMRV9FTkRJQU4KKysjZXJyb3IgIkJZVEVfT1JERVIgbm90IHN1cHBv cnRlZCIKKysjZW5kaWYKKysKKyt0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCAgICAgdTE2Owor K3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICB1MzI7CisrdHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IHU2NDsKKysKKytCSU5OX1BSSVZBVEUgdm9pZCBjb3B5X2JlMTYodTE2ICpw ZGVzdCwgdTE2ICpwc291cmNlKSB7CisrI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgor KyAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKKysg IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVzdDsKKysgIGRlc3Rb MF0gPSBzb3VyY2VbMV07CisrICBkZXN0WzFdID0gc291cmNlWzBdOworKyNlbHNlIC8vIGlmIEJZ VEVfT1JERVIgPT0gQklHX0VORElBTgorKyNpZmRlZiBCSU5OX09OTFlfQUxJR05FRF9BQ0NFU1MK KysgIGlmICgodWludHB0cl90KXBzb3VyY2UgJSAyID09IDApeyAgLy8gYWRkcmVzcyBhbGlnbmVk IHRvIDE2IGJpdAorKyAgICAqcGRlc3QgPSAqcHNvdXJjZTsKKysgIH0gZWxzZSB7CisrICAgIHVu c2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICopIHBzb3VyY2U7CisrICAgIHVu c2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVzdDsKKysgICAgZGVzdFsw XSA9IHNvdXJjZVswXTsgIC8vIGluZGV4ZXMgYXJlIHRoZSBzYW1lCisrICAgIGRlc3RbMV0gPSBz b3VyY2VbMV07CisrICB9CisrI2Vsc2UKKysgICpwZGVzdCA9ICpwc291cmNlOworKyNlbmRpZgor KyNlbmRpZgorK30KKysKKytCSU5OX1BSSVZBVEUgdm9pZCBjb3B5X2JlMzIodTMyICpwZGVzdCwg dTMyICpwc291cmNlKSB7CisrI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorKyAgdW5z aWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKKysgIHVuc2ln bmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVzdDsKKysgIGRlc3RbMF0gPSBz b3VyY2VbM107CisrICBkZXN0WzFdID0gc291cmNlWzJdOworKyAgZGVzdFsyXSA9IHNvdXJjZVsx XTsKKysgIGRlc3RbM10gPSBzb3VyY2VbMF07CisrI2Vsc2UgLy8gaWYgQllURV9PUkRFUiA9PSBC SUdfRU5ESUFOCisrI2lmZGVmIEJJTk5fT05MWV9BTElHTkVEX0FDQ0VTUworKyAgaWYgKCh1aW50 cHRyX3QpcHNvdXJjZSAlIDQgPT0gMCl7ICAvLyBhZGRyZXNzIGFsaWduZWQgdG8gMzIgYml0Cisr ICAgICpwZGVzdCA9ICpwc291cmNlOworKyAgfSBlbHNlIHsKKysgICAgdW5zaWduZWQgY2hhciAq c291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKKysgICAgdW5zaWduZWQgY2hhciAq ZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OworKyAgICBkZXN0WzBdID0gc291cmNlWzBd OyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKKysgICAgZGVzdFsxXSA9IHNvdXJjZVsxXTsKKysg ICAgZGVzdFsyXSA9IHNvdXJjZVsyXTsKKysgICAgZGVzdFszXSA9IHNvdXJjZVszXTsKKysgIH0K KysjZWxzZQorKyAgKnBkZXN0ID0gKnBzb3VyY2U7CisrI2VuZGlmCisrI2VuZGlmCisrfQorKwor K0JJTk5fUFJJVkFURSB2b2lkIGNvcHlfYmU2NCh1NjQgKnBkZXN0LCB1NjQgKnBzb3VyY2UpIHsK KysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisrICB1bnNpZ25lZCBjaGFyICpzb3Vy Y2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNlOworKyAgdW5zaWduZWQgY2hhciAqZGVzdCA9 ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OworKyAgaW50IGk7CisrICBmb3IgKGk9MDsgaSA8IDg7 IGkrKykgeworKyAgICBkZXN0W2ldID0gc291cmNlWzctaV07CisrICB9CisrI2Vsc2UgLy8gaWYg QllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisrI2lmZGVmIEJJTk5fT05MWV9BTElHTkVEX0FDQ0VT UworKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAlIDggPT0gMCl7ICAvLyBhZGRyZXNzIGFsaWdu ZWQgdG8gNjQgYml0CisrICAgICpwZGVzdCA9ICpwc291cmNlOworKyAgfSBlbHNlIHsKKysgICAg dW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKKysgICAg dW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OworKyAgICBpbnQg aTsKKysgICAgZm9yIChpPTA7IGkgPCA4OyBpKyspIHsKKysgICAgICBkZXN0W2ldID0gc291cmNl W2ldOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKKysgICAgfQorKyAgfQorKyNlbHNlCisrICAq cGRlc3QgPSAqcHNvdXJjZTsKKysjZW5kaWYKKysjZW5kaWYKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKysjaWZuZGVmIF9NU0NfVkVSCisrI2RlZmluZSBzdHJpY21wIHN0cmNhc2Vj bXAKKysjZGVmaW5lIHN0cm5pY21wIHN0cm5jYXNlY21wCisrI2VuZGlmCisrCisrQklOTl9QUklW QVRFIEJPT0wgSXNWYWxpZEJpbm5IZWFkZXIoY29uc3Qgdm9pZCAqcGJ1ZiwgaW50ICpwdHlwZSwg aW50ICpwY291bnQsIGludCAqcHNpemUsIGludCAqcGhlYWRlcnNpemUpOworKworKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrY2hhciAqIEFQSUVOVFJZIGJpbm5fdmVyc2lvbigpIHsKKysgIHJl dHVybiBCSU5OX1ZFUlNJT047CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrdm9p ZCBBUElFTlRSWSBiaW5uX3NldF9hbGxvY19mdW5jdGlvbnModm9pZCogKCpuZXdfbWFsbG9jKShz aXplX3QpLCB2b2lkKiAoKm5ld19yZWFsbG9jKSh2b2lkKixzaXplX3QpLCB2b2lkICgqbmV3X2Zy ZWUpKHZvaWQqKSkgeworKworKyAgbWFsbG9jX2ZuID0gbmV3X21hbGxvYzsKKysgIHJlYWxsb2Nf Zm4gPSBuZXdfcmVhbGxvYzsKKysgIGZyZWVfZm4gPSBuZXdfZnJlZTsKKysKKyt9CisrCisrLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdm9pZCBjaGVja19hbGxvY19mdW5j dGlvbnMoKSB7CisrCisrICBpZiAobWFsbG9jX2ZuID09IDApIG1hbGxvY19mbiA9ICZtYWxsb2M7 CisrICBpZiAocmVhbGxvY19mbiA9PSAwKSByZWFsbG9jX2ZuID0gJnJlYWxsb2M7CisrICBpZiAo ZnJlZV9mbiA9PSAwKSBmcmVlX2ZuID0gJmZyZWU7CisrCisrfQorKworKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrQklOTl9QUklWQVRFIHZvaWQgKiBiaW5uX21hbGxvYyhpbnQgc2l6ZSkgewor KyAgY2hlY2tfYWxsb2NfZnVuY3Rpb25zKCk7CisrICByZXR1cm4gbWFsbG9jX2ZuKHNpemUpOwor K30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSB2b2lkICogYmlu bl9tZW1kdXAoY29uc3Qgdm9pZCAqc3JjLCBpbnQgc2l6ZSkgeworKyAgdm9pZCAqZGVzdDsKKysK KysgIGlmIChzcmMgPT0gTlVMTCB8fCBzaXplIDw9IDApIHJldHVybiBOVUxMOworKyAgZGVzdCA9 IGJpbm5fbWFsbG9jKHNpemUpOworKyAgaWYgKGRlc3QgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Cisr ICBtZW1jcHkoZGVzdCwgc3JjLCBzaXplKTsKKysgIHJldHVybiBkZXN0OworKworK30KKysKKysv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBzaXplX3Qgc3RybGVuMihjaGFy ICpzdHIpIHsKKysKKysgIGlmIChzdHIgPT0gTlVMTCkgcmV0dXJuIDA7CisrICByZXR1cm4gc3Ry bGVuKHN0cik7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisraW50IEFQSUVO VFJZIGJpbm5fY3JlYXRlX3R5cGUoaW50IHN0b3JhZ2VfdHlwZSwgaW50IGRhdGFfdHlwZV9pbmRl eCkgeworKyAgaWYgKGRhdGFfdHlwZV9pbmRleCA8IDApIHJldHVybiAtMTsKKysgIGlmIChzdG9y YWdlX3R5cGUgPCBCSU5OX1NUT1JBR0VfTUlOIHx8IHN0b3JhZ2VfdHlwZSA+IEJJTk5fU1RPUkFH RV9NQVgpIHJldHVybiAtMTsKKysgIGlmIChkYXRhX3R5cGVfaW5kZXggPCAxNikKKysgICAgcmV0 dXJuIHN0b3JhZ2VfdHlwZSB8IGRhdGFfdHlwZV9pbmRleDsKKysgIGVsc2UgaWYgKGRhdGFfdHlw ZV9pbmRleCA8IDQwOTYpIHsKKysgICAgc3RvcmFnZV90eXBlIHw9IEJJTk5fU1RPUkFHRV9IQVNf TU9SRTsKKysgICAgc3RvcmFnZV90eXBlIDw8PSA4OworKyAgICBkYXRhX3R5cGVfaW5kZXggPj49 IDQ7CisrICAgIHJldHVybiBzdG9yYWdlX3R5cGUgfCBkYXRhX3R5cGVfaW5kZXg7CisrICB9IGVs c2UKKysgICAgcmV0dXJuIC0xOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JP T0wgQVBJRU5UUlkgYmlubl9nZXRfdHlwZV9pbmZvKGludCBsb25nX3R5cGUsIGludCAqcHN0b3Jh Z2VfdHlwZSwgaW50ICpwZXh0cmFfdHlwZSkgeworKyAgaW50IHN0b3JhZ2VfdHlwZSwgZXh0cmFf dHlwZTsKKysgIEJPT0wgcmV0dmFsPVRSVUU7CisrCisrYWdhaW46CisrCisrICBpZiAobG9uZ190 eXBlIDwgMCkgeworKyAgICBnb3RvIGxvY19pbnZhbGlkOworKyAgfSBlbHNlIGlmIChsb25nX3R5 cGUgPD0gMHhmZikgeworKyAgICBzdG9yYWdlX3R5cGUgPSBsb25nX3R5cGUgJiBCSU5OX1NUT1JB R0VfTUFTSzsKKysgICAgZXh0cmFfdHlwZSA9IGxvbmdfdHlwZSAmIEJJTk5fVFlQRV9NQVNLOwor KyAgfSBlbHNlIGlmIChsb25nX3R5cGUgPD0gMHhmZmZmKSB7CisrICAgIHN0b3JhZ2VfdHlwZSA9 IGxvbmdfdHlwZSAmIEJJTk5fU1RPUkFHRV9NQVNLMTY7CisrICAgIHN0b3JhZ2VfdHlwZSA+Pj0g ODsKKysgICAgZXh0cmFfdHlwZSA9IGxvbmdfdHlwZSAmIEJJTk5fVFlQRV9NQVNLMTY7CisrICAg IGV4dHJhX3R5cGUgPj49IDQ7CisrICB9IGVsc2UgaWYgKGxvbmdfdHlwZSAmIEJJTk5fU1RPUkFH RV9WSVJUVUFMKSB7CisrICAgIC8vc3RvcmFnZV90eXBlID0gQklOTl9TVE9SQUdFX1ZJUlRVQUw7 CisrICAgIC8vZXh0cmFfdHlwZSA9IHh4eDsKKysgICAgbG9uZ190eXBlICY9IDB4ZmZmZjsKKysg ICAgZ290byBhZ2FpbjsKKysgIH0gZWxzZSB7CisrbG9jX2ludmFsaWQ6CisrICAgIHN0b3JhZ2Vf dHlwZSA9IC0xOworKyAgICBleHRyYV90eXBlID0gLTE7CisrICAgIHJldHZhbCA9IEZBTFNFOwor KyAgfQorKworKyAgaWYgKHBzdG9yYWdlX3R5cGUpICpwc3RvcmFnZV90eXBlID0gc3RvcmFnZV90 eXBlOworKyAgaWYgKHBleHRyYV90eXBlKSAqcGV4dHJhX3R5cGUgPSBleHRyYV90eXBlOworKwor KyAgcmV0dXJuIHJldHZhbDsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytC T09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlKGJpbm4gKml0ZW0sIGludCB0eXBlLCBpbnQgc2l6ZSwg dm9pZCAqcG9pbnRlcikgeworKyAgQk9PTCByZXR2YWw9RkFMU0U7CisrCisrICBzd2l0Y2ggKHR5 cGUpIHsKKysgICAgY2FzZSBCSU5OX0xJU1Q6CisrICAgIGNhc2UgQklOTl9NQVA6CisrICAgIGNh c2UgQklOTl9PQkpFQ1Q6CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgZ290 byBsb2NfZXhpdDsKKysgIH0KKysKKysgIGlmIChpdGVtID09IE5VTEwgfHwgc2l6ZSA8IDApIGdv dG8gbG9jX2V4aXQ7CisrICBpZiAoc2l6ZSA8IE1JTl9CSU5OX1NJWkUpIHsKKysgICAgaWYgKHBv aW50ZXIpIGdvdG8gbG9jX2V4aXQ7CisrICAgIGVsc2Ugc2l6ZSA9IDA7CisrICB9CisrCisrICBt ZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChwb2ludGVyKSB7CisrICAg IGl0ZW0tPnByZV9hbGxvY2F0ZWQgPSBUUlVFOworKyAgfSBlbHNlIHsKKysgICAgaXRlbS0+cHJl X2FsbG9jYXRlZCA9IEZBTFNFOworKyAgICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gQ0hVTktfU0la RTsKKysgICAgcG9pbnRlciA9IGJpbm5fbWFsbG9jKHNpemUpOworKyAgICBpZiAocG9pbnRlciA9 PSAwKSByZXR1cm4gSU5WQUxJRF9CSU5OOworKyAgfQorKworKyAgaXRlbS0+cGJ1ZiA9IHBvaW50 ZXI7CisrICBpdGVtLT5hbGxvY19zaXplID0gc2l6ZTsKKysKKysgIGl0ZW0tPmhlYWRlciA9IEJJ Tk5fTUFHSUM7CisrICAvL2l0ZW0tPmFsbG9jYXRlZCA9IEZBTFNFOyAgIC0tIGFscmVhZHkgemVy b2VkCisrICBpdGVtLT53cml0YWJsZSA9IFRSVUU7CisrICBpdGVtLT51c2VkX3NpemUgPSBNQVhf QklOTl9IRUFERVI7ICAvLyBzYXZlIHNwYWNlIGZvciB0aGUgaGVhZGVyCisrICBpdGVtLT50eXBl ID0gdHlwZTsKKysgIC8vaXRlbS0+Y291bnQgPSAwOyAgICAgICAgICAgLS0gYWxyZWFkeSB6ZXJv ZWQKKysgIGl0ZW0tPmRpcnR5ID0gVFJVRTsgICAgICAgICAgLy8gdGhlIGhlYWRlciBpcyBub3Qg d3JpdHRlbiB0byB0aGUgYnVmZmVyCisrCisrICByZXR2YWwgPSBUUlVFOworKworK2xvY19leGl0 OgorKyAgcmV0dXJuIHJldHZhbDsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK KytiaW5uICogQVBJRU5UUlkgYmlubl9uZXcoaW50IHR5cGUsIGludCBzaXplLCB2b2lkICpwb2lu dGVyKSB7CisrICBiaW5uICppdGVtOworKworKyAgaXRlbSA9IChiaW5uKikgYmlubl9tYWxsb2Mo c2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX2NyZWF0ZShpdGVtLCB0eXBlLCBzaXplLCBw b2ludGVyKSA9PSBGQUxTRSkgeworKyAgICBmcmVlX2ZuKGl0ZW0pOworKyAgICByZXR1cm4gTlVM TDsKKysgIH0KKysKKysgIGl0ZW0tPmFsbG9jYXRlZCA9IFRSVUU7CisrICByZXR1cm4gaXRlbTsK KysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElF TlRSWSBiaW5uX2NyZWF0ZV9saXN0KGJpbm4gKmxpc3QpIHsKKysKKysgIHJldHVybiBiaW5uX2Ny ZWF0ZShsaXN0LCBCSU5OX0xJU1QsIDAsIE5VTEwpOworKworK30KKysKKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlX21hcChiaW5u ICptYXApIHsKKysKKysgIHJldHVybiBiaW5uX2NyZWF0ZShtYXAsIEJJTk5fTUFQLCAwLCBOVUxM KTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBB UElFTlRSWSBiaW5uX2NyZWF0ZV9vYmplY3QoYmlubiAqb2JqZWN0KSB7CisrCisrICByZXR1cm4g Ymlubl9jcmVhdGUob2JqZWN0LCBCSU5OX09CSkVDVCwgMCwgTlVMTCk7CisrCisrfQorKworKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbGlzdCgpIHsKKysg IHJldHVybiBiaW5uX25ldyhCSU5OX0xJU1QsIDAsIDApOworK30KKysKKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcCgpIHsKKysgIHJldHVybiBiaW5u X25ldyhCSU5OX01BUCwgMCwgMCk7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisr YmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0KCkgeworKyAgcmV0dXJuIGJpbm5fbmV3KEJJTk5f T0JKRUNULCAwLCAwKTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytiaW5uICog QVBJRU5UUlkgYmlubl9jb3B5KGNvbnN0IHZvaWQgKm9sZCkgeworKyAgaW50IHR5cGUsIGNvdW50 LCBzaXplLCBoZWFkZXJfc2l6ZTsKKysgIHVuc2lnbmVkIGNoYXIgKm9sZF9wdHIgPSBiaW5uX3B0 cihvbGQpOworKyAgYmlubiAqaXRlbTsKKysKKysgIHNpemUgPSAwOworKyAgaWYgKCFJc1ZhbGlk QmlubkhlYWRlcihvbGRfcHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6ZSwgJmhlYWRlcl9zaXplKSkg cmV0dXJuIE5VTEw7CisrCisrICBpdGVtID0gYmlubl9uZXcodHlwZSwgc2l6ZSAtIGhlYWRlcl9z aXplICsgTUFYX0JJTk5fSEVBREVSLCBOVUxMKTsKKysgIGlmKCBpdGVtICl7CisrICAgIHVuc2ln bmVkIGNoYXIgKmRlc3Q7CisrICAgIGRlc3QgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1 ZikgKyBNQVhfQklOTl9IRUFERVI7CisrICAgIG1lbWNweShkZXN0LCBvbGRfcHRyICsgaGVhZGVy X3NpemUsIHNpemUgLSBoZWFkZXJfc2l6ZSk7CisrICAgIGl0ZW0tPnVzZWRfc2l6ZSA9IE1BWF9C SU5OX0hFQURFUiArIHNpemUgLSBoZWFkZXJfc2l6ZTsKKysgICAgaXRlbS0+Y291bnQgPSBjb3Vu dDsKKysgIH0KKysgIHJldHVybiBpdGVtOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKysvLyBkZXByZWNhdGVkOiB1bnNlY3VyZS4gdGhlIHNpemUgY2FuIGJl IGNvcnJ1cHRlZCBhY2NpZGVudGFsbHkgb3IgaW50ZW50aW9uYWxseQorK0JPT0wgQVBJRU5UUlkg Ymlubl9sb2FkKGNvbnN0IHZvaWQgKmRhdGEsIGJpbm4gKnZhbHVlKSB7CisrCisrICBpZiAoZGF0 YSA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysgIG1lbXNldCh2YWx1 ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKKysgIHZhbHVlLT5oZWFkZXIgPSBCSU5OX01BR0lDOworKyAg Ly92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAgYWxyZWFkeSB6ZXJvZWQKKysgIC8vdmFs dWUtPndyaXRhYmxlID0gRkFMU0U7CisrCisrICBpZiAoYmlubl9pc192YWxpZChkYXRhLCAmdmFs dWUtPnR5cGUsICZ2YWx1ZS0+Y291bnQsICZ2YWx1ZS0+c2l6ZSkgPT0gRkFMU0UpIHJldHVybiBG QUxTRTsKKysgIHZhbHVlLT5wdHIgPSAodm9pZCopIGRhdGE7CisrICByZXR1cm4gVFJVRTsKKysK Kyt9CisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xvYWRfZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50 IHNpemUsIGJpbm4gKnZhbHVlKSB7CisrCisrICBpZiAoZGF0YSA9PSBOVUxMIHx8IHZhbHVlID09 IE5VTEwgfHwgc2l6ZSA8PSAwKSByZXR1cm4gRkFMU0U7CisrICBtZW1zZXQodmFsdWUsIDAsIHNp emVvZihiaW5uKSk7CisrICB2YWx1ZS0+aGVhZGVyID0gQklOTl9NQUdJQzsKKysgIC8vdmFsdWUt PmFsbG9jYXRlZCA9IEZBTFNFOyAgLS0gIGFscmVhZHkgemVyb2VkCisrICAvL3ZhbHVlLT53cml0 YWJsZSA9IEZBTFNFOworKworKyAgaWYgKGJpbm5faXNfdmFsaWRfZXgoZGF0YSwgJnZhbHVlLT50 eXBlLCAmdmFsdWUtPmNvdW50LCAmc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysgIHZh bHVlLT5wdHIgPSAodm9pZCopIGRhdGE7CisrICB2YWx1ZS0+c2l6ZSA9IHNpemU7CisrICByZXR1 cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisr YmlubiAqIEFQSUVOVFJZIGJpbm5fb3Blbihjb25zdCB2b2lkICpkYXRhKSB7CisrICBiaW5uICpp dGVtOworKworKyAgaXRlbSA9IChiaW5uKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysK KysgIGlmIChiaW5uX2xvYWQoZGF0YSwgaXRlbSkgPT0gRkFMU0UpIHsKKysgICAgZnJlZV9mbihp dGVtKTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrCisrICBpdGVtLT5hbGxvY2F0ZWQgPSBU UlVFOworKyAgcmV0dXJuIGl0ZW07CisrCisrfQorKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29w ZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUpIHsKKysgIGJpbm4gKml0ZW07CisrCisr ICBpdGVtID0gKGJpbm4qKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJp bm5fbG9hZF9leChkYXRhLCBzaXplLCBpdGVtKSA9PSBGQUxTRSkgeworKyAgICBmcmVlX2ZuKGl0 ZW0pOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIGl0ZW0tPmFsbG9jYXRlZCA9IFRS VUU7CisrICByZXR1cm4gaXRlbTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK KytCSU5OX1BSSVZBVEUgaW50IGJpbm5fZ2V0X3B0cl90eXBlKGNvbnN0IHZvaWQgKnB0cikgewor KworKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm4gMDsKKysKKysgIHN3aXRjaCAoKih1bnNpZ25l ZCBpbnQgKilwdHIpIHsKKysgIGNhc2UgQklOTl9NQUdJQzoKKysgICAgcmV0dXJuIEJJTk5fU1RS VUNUOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEJJTk5fQlVGRkVSOworKyAgfQorKworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9pc19zdHJ1 Y3QoY29uc3Qgdm9pZCAqcHRyKSB7CisrCisrICBpZiAocHRyID09IE5VTEwpIHJldHVybiBGQUxT RTsKKysKKysgIGlmICgoKih1bnNpZ25lZCBpbnQgKilwdHIpID09IEJJTk5fTUFHSUMpIHsKKysg ICAgcmV0dXJuIFRSVUU7CisrICB9IGVsc2UgeworKyAgICByZXR1cm4gRkFMU0U7CisrICB9Cisr CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIGludCBDYWxj QWxsb2NhdGlvbihpbnQgbmVlZGVkX3NpemUsIGludCBhbGxvY19zaXplKSB7CisrICBpbnQgY2Fs Y19zaXplOworKworKyAgY2FsY19zaXplID0gYWxsb2Nfc2l6ZTsKKysgIHdoaWxlIChjYWxjX3Np emUgPCBuZWVkZWRfc2l6ZSkgeworKyAgICBjYWxjX3NpemUgPDw9IDE7ICAvLyBzYW1lIGFzICo9 IDIKKysgICAgLy9jYWxjX3NpemUgKz0gQ0hVTktfU0laRTsgIC0tIHRoaXMgaXMgc2xvd2VyIHRo YW4gdGhlIGFib3ZlIGxpbmUsIGJlY2F1c2UgdGhlcmUgYXJlIG1vcmUgcmVhbGxvY2F0aW9ucwor KyAgfQorKyAgcmV0dXJuIGNhbGNfc2l6ZTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBDaGVja0FsbG9jYXRpb24oYmlubiAqaXRlbSwgaW50 IGFkZF9zaXplKSB7CisrICBpbnQgIGFsbG9jX3NpemU7CisrICB2b2lkICpwdHI7CisrCisrICBp ZiAoaXRlbS0+dXNlZF9zaXplICsgYWRkX3NpemUgPiBpdGVtLT5hbGxvY19zaXplKSB7CisrICAg IGlmIChpdGVtLT5wcmVfYWxsb2NhdGVkKSByZXR1cm4gRkFMU0U7CisrICAgIGFsbG9jX3NpemUg PSBDYWxjQWxsb2NhdGlvbihpdGVtLT51c2VkX3NpemUgKyBhZGRfc2l6ZSwgaXRlbS0+YWxsb2Nf c2l6ZSk7CisrICAgIHB0ciA9IHJlYWxsb2NfZm4oaXRlbS0+cGJ1ZiwgYWxsb2Nfc2l6ZSk7Cisr ICAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAgICBpdGVtLT5wYnVmID0gcHRy OworKyAgICBpdGVtLT5hbGxvY19zaXplID0gYWxsb2Nfc2l6ZTsKKysgIH0KKysKKysgIHJldHVy biBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpZiBCWVRFX09S REVSID09IEJJR19FTkRJQU4KKysKKytCSU5OX1BSSVZBVEUgaW50IGdldF9zdG9yYWdlX3NpemUo aW50IHN0b3JhZ2VfdHlwZSkgeworKworKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKKysgIGNh c2UgQklOTl9TVE9SQUdFX05PQllURVM6CisrICAgIHJldHVybiAwOworKyAgY2FzZSBCSU5OX1NU T1JBR0VfQllURToKKysgICAgcmV0dXJuIDE7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgor KyAgICByZXR1cm4gMjsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgorKyAgICByZXR1cm4g NDsKKysgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgorKyAgICByZXR1cm4gODsKKysgIGRlZmF1 bHQ6CisrICAgIHJldHVybiAwOworKyAgfQorKworK30KKysKKysjZW5kaWYKKysKKysvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSB1bnNpZ25lZCBjaGFyICogQWR2YW5jZURh dGFQb3ModW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqcGxpbWl0KSB7CisrICB1bnNp Z25lZCBjaGFyIGJ5dGU7CisrICBpbnQgIHN0b3JhZ2VfdHlwZSwgRGF0YVNpemU7CisrCisrICBp ZiAocCA+IHBsaW1pdCkgcmV0dXJuIDA7CisrCisrICBieXRlID0gKnA7IHArKzsKKysgIHN0b3Jh Z2VfdHlwZSA9IGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFTSzsKKysgIGlmIChieXRlICYgQklOTl9T VE9SQUdFX0hBU19NT1JFKSBwKys7CisrCisrICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkgeworKyAg Y2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgLy9wICs9IDA7CisrICAgIGJyZWFrOwor KyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKKysgICAgcCArKzsKKysgICAgYnJlYWs7CisrICBj YXNlIEJJTk5fU1RPUkFHRV9XT1JEOgorKyAgICBwICs9IDI7CisrICAgIGJyZWFrOworKyAgY2Fz ZSBCSU5OX1NUT1JBR0VfRFdPUkQ6CisrICAgIHAgKz0gNDsKKysgICAgYnJlYWs7CisrICBjYXNl IEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgcCArPSA4OworKyAgICBicmVhazsKKysgIGNhc2Ug QklOTl9TVE9SQUdFX0JMT0I6CisrICBjYXNlIEJJTk5fU1RPUkFHRV9TVFJJTkc6CisrICAgIGlm IChwID4gcGxpbWl0KSByZXR1cm4gMDsKKysgICAgRGF0YVNpemUgPSAqKCh1bnNpZ25lZCBjaGFy KilwKTsKKysgICAgaWYgKERhdGFTaXplICYgMHg4MCkgeworKyAgICAgIGlmIChwICsgc2l6ZW9m KGludCkgLSAxID4gcGxpbWl0KSByZXR1cm4gMDsKKysgICAgICBjb3B5X2JlMzIoKHUzMiopJkRh dGFTaXplLCAodTMyKilwKTsKKysgICAgICBEYXRhU2l6ZSAmPSAweDdGRkZGRkZGOworKyAgICAg IHArPTQ7CisrICAgIH0gZWxzZSB7CisrICAgICAgcCsrOworKyAgICB9CisrICAgIHAgKz0gRGF0 YVNpemU7CisrICAgIGlmIChzdG9yYWdlX3R5cGUgPT0gQklOTl9TVE9SQUdFX1NUUklORykgewor KyAgICAgIHArKzsgIC8vIG51bGwgdGVybWluYXRvci4KKysgICAgfQorKyAgICBicmVhazsKKysg IGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKKysgICAgaWYgKHAgPiBwbGltaXQpIHJldHVy biAwOworKyAgICBEYXRhU2l6ZSA9ICooKHVuc2lnbmVkIGNoYXIqKXApOworKyAgICBpZiAoRGF0 YVNpemUgJiAweDgwKSB7CisrICAgICAgaWYgKHAgKyBzaXplb2YoaW50KSAtIDEgPiBwbGltaXQp IHJldHVybiAwOworKyAgICAgIGNvcHlfYmUzMigodTMyKikmRGF0YVNpemUsICh1MzIqKXApOwor KyAgICAgIERhdGFTaXplICY9IDB4N0ZGRkZGRkY7CisrICAgIH0KKysgICAgRGF0YVNpemUtLTsg IC8vIHJlbW92ZSB0aGUgdHlwZSBieXRlIGFscmVhZHkgYWRkZWQgYmVmb3JlCisrICAgIHAgKz0g RGF0YVNpemU7CisrICAgIGJyZWFrOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIDA7CisrICB9 CisrCisrICByZXR1cm4gcDsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysv KgorKworK1RoZSBpZCBjYW4gYmUgc3RvcmVkIHdpdGggMSB0byA1IGJ5dGVzCisrCisrUyA9IHNp Z25hbCBiaXQKKytYID0gYml0IHBhcnQgb2YgaWQKKysKKysgIDBTWFggWFhYWAorKyAgMTAwUyBY WFhYICsgMSBieXRlCisrICAxMDFTIFhYWFggKyAyIGJ5dGVzCisrICAxMTBTIFhYWFggKyAzIGJ5 dGVzCisrICAxMTEwIDAwMDAgKyA0IGJ5dGVzCisrCisrKi8KKytCSU5OX1BSSVZBVEUgaW50IHJl YWRfbWFwX2lkKHVuc2lnbmVkIGNoYXIgKipwcCwgdW5zaWduZWQgY2hhciAqcGxpbWl0KSB7Cisr ICB1bnNpZ25lZCBjaGFyICpwLCBjLCBzaWduLCB0eXBlOworKyAgaW50IGlkLCBleHRyYV9ieXRl czsKKysKKysgIHAgPSAqcHA7CisrICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIDA7CisrCisrICBj ID0gKnArKzsKKysKKysgIGlmIChjICYgMHg4MCkgeworKyAgICBleHRyYV9ieXRlcyA9ICgoYyAm IDB4NjApID4+IDUpICsgMTsKKysgICAgaWYgKHAgKyBleHRyYV9ieXRlcyA+IHBsaW1pdCApIHsK KysgICAgICAqcHAgPSBwICsgZXh0cmFfYnl0ZXM7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0K KysgIH0KKysKKysgIHR5cGUgPSBjICYgMHhFMDsKKysgIHNpZ24gPSBjICYgMHgxMDsKKysKKysg IGlmICgoYyAmIDB4ODApID09IDApIHsKKysgICAgc2lnbiA9IGMgJiAweDQwOworKyAgICBpZCA9 IGMgJiAweDNGOworKyAgfSBlbHNlIGlmICh0eXBlID09IDB4ODApIHsKKysgICAgaWQgPSBjICYg MHgwRjsKKysgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOworKyAgfSBlbHNlIGlmICh0eXBlID09 IDB4QTApIHsKKysgICAgaWQgPSBjICYgMHgwRjsKKysgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsr OworKyAgICBpZCA9IChpZCA8PCA4KSB8ICpwKys7CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMHhD MCkgeworKyAgICBpZCA9IGMgJiAweDBGOworKyAgICBpZCA9IChpZCA8PCA4KSB8ICpwKys7Cisr ICAgIGlkID0gKGlkIDw8IDgpIHwgKnArKzsKKysgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOwor KyAgfSBlbHNlIGlmICh0eXBlID09IDB4RTApIHsKKysgICAgY29weV9iZTMyKCh1MzIqKSZpZCwg KHUzMiopcCk7CisrICAgIHAgKz0gNDsKKysgIH0gZWxzZSB7CisrICAgICpwcCA9IHBsaW1pdCAr IDI7CisrICAgIHJldHVybiAwOworKyAgfQorKworKyAgaWYgKHNpZ24pIGlkID0gLWlkOworKwor KyAgKnBwID0gcDsKKysKKysgIHJldHVybiBpZDsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytCSU5OX1BSSVZBVEUgdW5zaWduZWQgY2hhciAqIFNlYXJjaEZvcklEKHVuc2lnbmVk IGNoYXIgKnAsIGludCBoZWFkZXJfc2l6ZSwgaW50IHNpemUsIGludCBudW1pdGVtcywgaW50IGlk KSB7CisrICB1bnNpZ25lZCBjaGFyICpwbGltaXQsICpiYXNlOworKyAgaW50ICBpLCBpbnQzMjsK KysKKysgIGJhc2UgPSBwOworKyAgcGxpbWl0ID0gcCArIHNpemUgLSAxOworKyAgcCArPSBoZWFk ZXJfc2l6ZTsKKysKKysgIC8vIHNlYXJjaCBmb3IgdGhlIElEIGluIGFsbCB0aGUgYXJndW1lbnRz LgorKyAgZm9yIChpID0gMDsgaSA8IG51bWl0ZW1zOyBpKyspIHsKKysgICAgaW50MzIgPSByZWFk X21hcF9pZCgmcCwgcGxpbWl0KTsKKysgICAgaWYgKHAgPiBwbGltaXQpIGJyZWFrOworKyAgICAv LyBDb21wYXJlIGlmIHRoZSBJRHMgYXJlIGVxdWFsLgorKyAgICBpZiAoaW50MzIgPT0gaWQpIHJl dHVybiBwOworKyAgICAvLyB4eHgKKysgICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7 CisrICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIGJyZWFrOworKyAgfQorKworKyAgcmV0dXJu IE5VTEw7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRF IHVuc2lnbmVkIGNoYXIgKiBTZWFyY2hGb3JLZXkodW5zaWduZWQgY2hhciAqcCwgaW50IGhlYWRl cl9zaXplLCBpbnQgc2l6ZSwgaW50IG51bWl0ZW1zLCBjb25zdCBjaGFyICprZXkpIHsKKysgIHVu c2lnbmVkIGNoYXIgbGVuLCAqcGxpbWl0LCAqYmFzZTsKKysgIGludCAgaSwga2V5bGVuOworKwor KyAgYmFzZSA9IHA7CisrICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7CisrICBwICs9IGhlYWRlcl9z aXplOworKworKyAga2V5bGVuID0gc3RybGVuKGtleSk7CisrCisrICAvLyBzZWFyY2ggZm9yIHRo ZSBrZXkgaW4gYWxsIHRoZSBhcmd1bWVudHMuCisrICBmb3IgKGkgPSAwOyBpIDwgbnVtaXRlbXM7 IGkrKykgeworKyAgICBpZiAocCA+IHBsaW1pdCkgYnJlYWs7CisrICAgIGxlbiA9ICooKHVuc2ln bmVkIGNoYXIgKilwKTsKKysgICAgcCsrOworKyAgICBpZiAocCArIGxlbiA+IHBsaW1pdCkgYnJl YWs7CisrICAgIC8vIENvbXBhcmUgaWYgdGhlIHN0cmluZ3MgYXJlIGVxdWFsLgorKyAgICBpZiAo bGVuID4gMCkgeworKyAgICAgIGlmIChzdHJuaWNtcCgoY2hhciopcCwga2V5LCBsZW4pID09IDAp IHsgICAvLyBub3RlIHRoYXQgdGhlcmUgaXMgbm8gbnVsbCB0ZXJtaW5hdG9yIGhlcmUKKysgICAg ICAgIGlmIChrZXlsZW4gPT0gbGVuKSB7CisrICAgICAgICAgIHAgKz0gbGVuOworKyAgICAgICAg ICByZXR1cm4gcDsKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgcCArPSBsZW47CisrICAg IH0gZWxzZSBpZiAobGVuID09IGtleWxlbikgeyAgIC8vIGluIHRoZSBjYXNlIG9mIGVtcHR5IHN0 cmluZzogIiIKKysgICAgICByZXR1cm4gcDsKKysgICAgfQorKyAgICAvLyB4eHgKKysgICAgcCA9 IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7CisrICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2Up IGJyZWFrOworKyAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrCisrfQorKworKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgQWRkVmFsdWUoYmlubiAqaXRlbSwgaW50 IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOworKworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9saXN0X2FkZF9yYXcoYmlubiAqaXRlbSwgaW50 IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKKysKKysgIGlmIChpdGVtID09IE5VTEwg fHwgaXRlbS0+dHlwZSAhPSBCSU5OX0xJU1QgfHwgaXRlbS0+d3JpdGFibGUgPT0gRkFMU0UpIHJl dHVybiBGQUxTRTsKKysKKysgIC8vaWYgKENoZWNrQWxsb2NhdGlvbihpdGVtLCA0KSA9PSBGQUxT RSkgcmV0dXJuIEZBTFNFOyAgLy8gNCBieXRlcyB1c2VkIGZvciBkYXRhX3N0b3JlIGFuZCBkYXRh X2Zvcm1hdC4KKysKKysgIGlmIChBZGRWYWx1ZShpdGVtLCB0eXBlLCBwdmFsdWUsIHNpemUpID09 IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpdGVtLT5jb3VudCsrOworKworKyAgcmV0dXJu IFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRF IEJPT0wgYmlubl9vYmplY3Rfc2V0X3JhdyhiaW5uICppdGVtLCBjb25zdCBjaGFyICprZXksIGlu dCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7CisrICB1bnNpZ25lZCBjaGFyICpwLCBs ZW47CisrICBpbnQgaW50MzI7CisrCisrICBpZiAoaXRlbSA9PSBOVUxMIHx8IGl0ZW0tPnR5cGUg IT0gQklOTl9PQkpFQ1QgfHwgaXRlbS0+d3JpdGFibGUgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsK KysKKysgIGlmIChrZXkgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAgaW50MzIgPSBzdHJsZW4o a2V5KTsKKysgIGlmIChpbnQzMiA+IDI1NSkgcmV0dXJuIEZBTFNFOworKworKyAgLy8gaXMgdGhl IGtleSBhbHJlYWR5IGluIGl0PworKyAgcCA9IFNlYXJjaEZvcktleShpdGVtLT5wYnVmLCBNQVhf QklOTl9IRUFERVIsIGl0ZW0tPnVzZWRfc2l6ZSwgaXRlbS0+Y291bnQsIGtleSk7CisrICBpZiAo cCkgcmV0dXJuIEZBTFNFOworKworKyAgLy8gc3RhcnQgYWRkaW5nIGl0CisrCisrICBpZiAoQ2hl Y2tBbGxvY2F0aW9uKGl0ZW0sIDEgKyBpbnQzMikgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsgIC8v IGJ5dGVzIHVzZWQgZm9yIHRoZSBrZXkgc2l6ZSBhbmQgdGhlIGtleSBpdHNlbGYuCisrCisrICBw ID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWYpICsgaXRlbS0+dXNlZF9zaXplOworKyAg bGVuID0gaW50MzI7CisrICAqcCA9IGxlbjsKKysgIHArKzsKKysgIG1lbWNweShwLCBrZXksIGlu dDMyKTsKKysgIGludDMyKys7ICAvLyBub3cgY29udGFpbnMgdGhlIHN0cmxlbiArIDEgYnl0ZSBm b3IgdGhlIGxlbgorKyAgaXRlbS0+dXNlZF9zaXplICs9IGludDMyOworKworKyAgaWYgKEFkZFZh bHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSkgPT0gRkFMU0UpIHsKKysgICAgaXRlbS0+dXNl ZF9zaXplIC09IGludDMyOworKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICBpdGVtLT5j b3VudCsrOworKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9tYXBfc2V0X3JhdyhiaW5uICppdGVtLCBp bnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7CisrICB1bnNpZ25lZCBj aGFyICpiYXNlLCAqcCwgc2lnbjsKKysgIGludCBpZF9zaXplOworKworKyAgaWYgKGl0ZW0gPT0g TlVMTCB8fCBpdGVtLT50eXBlICE9IEJJTk5fTUFQIHx8IGl0ZW0tPndyaXRhYmxlID09IEZBTFNF KSByZXR1cm4gRkFMU0U7CisrCisrICAvLyBpcyB0aGUgSUQgYWxyZWFkeSBpbiBpdD8KKysgIHAg PSBTZWFyY2hGb3JJRChpdGVtLT5wYnVmLCBNQVhfQklOTl9IRUFERVIsIGl0ZW0tPnVzZWRfc2l6 ZSwgaXRlbS0+Y291bnQsIGlkKTsKKysgIGlmIChwKSByZXR1cm4gRkFMU0U7CisrCisrICAvLyBz dGFydCBhZGRpbmcgaXQKKysKKysgIGlmIChDaGVja0FsbG9jYXRpb24oaXRlbSwgNSkgPT0gRkFM U0UpIHJldHVybiBGQUxTRTsgIC8vIG1heCA1IGJ5dGVzIHVzZWQgZm9yIHRoZSBpZC4KKysKKysg IHAgPSBiYXNlID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWYpICsgaXRlbS0+dXNlZF9z aXplOworKworKyAgc2lnbiA9IChpZCA8IDApOworKyAgaWYgKHNpZ24pIGlkID0gLWlkOworKwor KyAgaWYgKGlkIDw9IDB4M0YpIHsKKysgICAgKnArKyA9IChzaWduIDw8IDYpIHwgaWQ7CisrICB9 IGVsc2UgaWYgKGlkIDw9IDB4RkZGKSB7CisrICAgICpwKysgPSAweDgwIHwgKHNpZ24gPDwgNCkg fCAoKGlkICYgMHhGMDApID4+IDgpOworKyAgICAqcCsrID0gaWQgJiAweEZGOworKyAgfSBlbHNl IGlmIChpZCA8PSAweEZGRkZGKSB7CisrICAgICpwKysgPSAweEEwIHwgKHNpZ24gPDwgNCkgfCAo KGlkICYgMHhGMDAwMCkgPj4gMTYpOworKyAgICAqcCsrID0gKGlkICYgMHhGRjAwKSA+PiA4Owor KyAgICAqcCsrID0gaWQgJiAweEZGOworKyAgfSBlbHNlIGlmIChpZCA8PSAweEZGRkZGRkYpIHsK KysgICAgKnArKyA9IDB4QzAgfCAoc2lnbiA8PCA0KSB8ICgoaWQgJiAweEYwMDAwMDApID4+IDI0 KTsKKysgICAgKnArKyA9IChpZCAmIDB4RkYwMDAwKSA+PiAxNjsKKysgICAgKnArKyA9IChpZCAm IDB4RkYwMCkgPj4gODsKKysgICAgKnArKyA9IGlkICYgMHhGRjsKKysgIH0gZWxzZSB7CisrICAg ICpwKysgPSAweEUwOworKyAgICBpZiAoc2lnbikgaWQgPSAtaWQ7CisrICAgIGNvcHlfYmUzMigo dTMyKilwLCAodTMyKikmaWQpOworKyAgICBwICs9IDQ7CisrICB9CisrCisrICBpZF9zaXplID0g KHAgLSBiYXNlKTsKKysgIGl0ZW0tPnVzZWRfc2l6ZSArPSBpZF9zaXplOworKworKyAgaWYgKEFk ZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSkgPT0gRkFMU0UpIHsKKysgICAgaXRlbS0+ dXNlZF9zaXplIC09IGlkX3NpemU7CisrICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysgIGl0 ZW0tPmNvdW50Kys7CisrCisrICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdm9pZCAqIGNvbXByZXNzX2ludChpbnQgKnBzdG9y YWdlX3R5cGUsIGludCAqcHR5cGUsIHZvaWQgKnBzb3VyY2UpIHsKKysgIGludCBzdG9yYWdlX3R5 cGUsIHN0b3JhZ2VfdHlwZTIsIHR5cGUsIHR5cGUyPTA7CisrICBpbnQ2NCAgdmludCA9IDA7Cisr ICB1aW50NjQgdnVpbnQ7CisrICBjaGFyICpwdmFsdWU7CisrI2lmIEJZVEVfT1JERVIgPT0gQklH X0VORElBTgorKyAgaW50IHNpemUxLCBzaXplMjsKKysjZW5kaWYKKysKKysgIHN0b3JhZ2VfdHlw ZSA9ICpwc3RvcmFnZV90eXBlOworKyAgaWYgKHN0b3JhZ2VfdHlwZSA9PSBCSU5OX1NUT1JBR0Vf QllURSkgcmV0dXJuIHBzb3VyY2U7CisrCisrICB0eXBlID0gKnB0eXBlOworKworKyAgc3dpdGNo ICh0eXBlKSB7CisrICBjYXNlIEJJTk5fSU5UNjQ6CisrICAgIHZpbnQgPSAqKGludDY0Kilwc291 cmNlOworKyAgICBnb3RvIGxvY19zaWduZWQ7CisrICBjYXNlIEJJTk5fSU5UMzI6CisrICAgIHZp bnQgPSAqKGludCopcHNvdXJjZTsKKysgICAgZ290byBsb2Nfc2lnbmVkOworKyAgY2FzZSBCSU5O X0lOVDE2OgorKyAgICB2aW50ID0gKihzaG9ydCopcHNvdXJjZTsKKysgICAgZ290byBsb2Nfc2ln bmVkOworKyAgY2FzZSBCSU5OX1VJTlQ2NDoKKysgICAgdnVpbnQgPSAqKHVpbnQ2NCopcHNvdXJj ZTsKKysgICAgZ290byBsb2NfcG9zaXRpdmU7CisrICBjYXNlIEJJTk5fVUlOVDMyOgorKyAgICB2 dWludCA9ICoodW5zaWduZWQgaW50Kilwc291cmNlOworKyAgICBnb3RvIGxvY19wb3NpdGl2ZTsK KysgIGNhc2UgQklOTl9VSU5UMTY6CisrICAgIHZ1aW50ID0gKih1bnNpZ25lZCBzaG9ydCopcHNv dXJjZTsKKysgICAgZ290byBsb2NfcG9zaXRpdmU7CisrICB9CisrCisrbG9jX3NpZ25lZDoKKysK KysgIGlmICh2aW50ID49IDApIHsKKysgICAgdnVpbnQgPSB2aW50OworKyAgICBnb3RvIGxvY19w b3NpdGl2ZTsKKysgIH0KKysKKysvL2xvY19uZWdhdGl2ZToKKysKKysgIGlmICh2aW50ID49IElO VDhfTUlOKSB7CisrICAgIHR5cGUyID0gQklOTl9JTlQ4OworKyAgfSBlbHNlCisrICBpZiAodmlu dCA+PSBJTlQxNl9NSU4pIHsKKysgICAgdHlwZTIgPSBCSU5OX0lOVDE2OworKyAgfSBlbHNlCisr ICBpZiAodmludCA+PSBJTlQzMl9NSU4pIHsKKysgICAgdHlwZTIgPSBCSU5OX0lOVDMyOworKyAg fQorKyAgZ290byBsb2NfZXhpdDsKKysKKytsb2NfcG9zaXRpdmU6CisrCisrICBpZiAodnVpbnQg PD0gVUlOVDhfTUFYKSB7CisrICAgIHR5cGUyID0gQklOTl9VSU5UODsKKysgIH0gZWxzZQorKyAg aWYgKHZ1aW50IDw9IFVJTlQxNl9NQVgpIHsKKysgICAgdHlwZTIgPSBCSU5OX1VJTlQxNjsKKysg IH0gZWxzZQorKyAgaWYgKHZ1aW50IDw9IFVJTlQzMl9NQVgpIHsKKysgICAgdHlwZTIgPSBCSU5O X1VJTlQzMjsKKysgIH0KKysKKytsb2NfZXhpdDoKKysKKysgIHB2YWx1ZSA9IChjaGFyICopIHBz b3VyY2U7CisrCisrICBpZiAodHlwZTIgJiYgdHlwZTIgIT0gdHlwZSkgeworKyAgICAqcHR5cGUg PSB0eXBlMjsKKysgICAgc3RvcmFnZV90eXBlMiA9IGJpbm5fZ2V0X3dyaXRlX3N0b3JhZ2UodHlw ZTIpOworKyAgICAqcHN0b3JhZ2VfdHlwZSA9IHN0b3JhZ2VfdHlwZTI7CisrI2lmIEJZVEVfT1JE RVIgPT0gQklHX0VORElBTgorKyAgICBzaXplMSA9IGdldF9zdG9yYWdlX3NpemUoc3RvcmFnZV90 eXBlKTsKKysgICAgc2l6ZTIgPSBnZXRfc3RvcmFnZV9zaXplKHN0b3JhZ2VfdHlwZTIpOworKyAg ICBwdmFsdWUgKz0gKHNpemUxIC0gc2l6ZTIpOworKyNlbmRpZgorKyAgfQorKworKyAgcmV0dXJu IHB2YWx1ZTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZB VEUgaW50IHR5cGVfZmFtaWx5KGludCB0eXBlKTsKKysKKytCSU5OX1BSSVZBVEUgQk9PTCBBZGRW YWx1ZShiaW5uICppdGVtLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgeworKyAg aW50IGludDMyLCBBcmdTaXplLCBzdG9yYWdlX3R5cGUsIGV4dHJhX3R5cGU7CisrICB1bnNpZ25l ZCBjaGFyICpwOworKworKyAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUsICZzdG9yYWdlX3R5cGUs ICZleHRyYV90eXBlKTsKKysKKysgIGlmIChwdmFsdWUgPT0gTlVMTCkgeworKyAgICBzd2l0Y2gg KHN0b3JhZ2VfdHlwZSkgeworKyAgICAgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6CisrICAg ICAgICBicmVhazsKKysgICAgICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgorKyAgICAgIGNhc2Ug QklOTl9TVE9SQUdFX1NUUklORzoKKysgICAgICAgIGlmIChzaXplID09IDApIGJyZWFrOyAvLyB0 aGUgMiBhYm92ZSBhcmUgYWxsb3dlZCB0byBoYXZlIDAgbGVuZ3RoCisrCS8qIGZhbGwgdGhyb3Vn aCAqLworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICByZXR1cm4gRkFMU0U7CisrICAgIH0KKysg IH0KKysKKysgIGlmICh0eXBlX2ZhbWlseSh0eXBlKSA9PSBCSU5OX0ZBTUlMWV9JTlQgJiYgaXRl bS0+ZGlzYWJsZV9pbnRfY29tcHJlc3Npb24gPT0gRkFMU0UpCisrICAgIHB2YWx1ZSA9IGNvbXBy ZXNzX2ludCgmc3RvcmFnZV90eXBlLCAmdHlwZSwgcHZhbHVlKTsKKysKKysgIHN3aXRjaCAoc3Rv cmFnZV90eXBlKSB7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6CisrICAgICAgc2l6 ZSA9IDA7CisrICAgICAgQXJnU2l6ZSA9IHNpemU7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug QklOTl9TVE9SQUdFX0JZVEU6CisrICAgICAgc2l6ZSA9IDE7CisrICAgICAgQXJnU2l6ZSA9IHNp emU7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6CisrICAgICAg c2l6ZSA9IDI7CisrICAgICAgQXJnU2l6ZSA9IHNpemU7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2UgQklOTl9TVE9SQUdFX0RXT1JEOgorKyAgICAgIHNpemUgPSA0OworKyAgICAgIEFyZ1NpemUg PSBzaXplOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysg ICAgICBzaXplID0gODsKKysgICAgICBBcmdTaXplID0gc2l6ZTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKKysgICAgICBpZiAoc2l6ZSA8IDApIHJldHVybiBG QUxTRTsKKysgICAgICAvL2lmIChzaXplID09IDApIC4uLgorKyAgICAgIEFyZ1NpemUgPSBzaXpl ICsgNDsgLy8gYXQgbGVhc3QgdGhpcyBzaXplCisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklO Tl9TVE9SQUdFX1NUUklORzoKKysgICAgICBpZiAoc2l6ZSA8IDApIHJldHVybiBGQUxTRTsKKysg ICAgICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gc3RybGVuMiggKGNoYXIgKikgcHZhbHVlKTsKKysg ICAgICBBcmdTaXplID0gc2l6ZSArIDU7IC8vIGF0IGxlYXN0IHRoaXMgc2l6ZQorKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6CisrICAgICAgaWYgKHNpemUg PD0gMCkgcmV0dXJuIEZBTFNFOworKyAgICAgIEFyZ1NpemUgPSBzaXplOworKyAgICAgIGJyZWFr OworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysgIEFyZ1Np emUgKz0gMjsgIC8vIGF0IGxlYXN0IDIgYnl0ZXMgdXNlZCBmb3IgZGF0YV90eXBlLgorKyAgaWYg KENoZWNrQWxsb2NhdGlvbihpdGVtLCBBcmdTaXplKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwor KworKyAgLy8gR2V0cyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBwbGFjZSBpbiBidWZmZXIKKysg IHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBpdGVtLT51c2VkX3NpemU7Cisr CisrICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgYSBjb250YWluZXIsIHN0b3JlIHRoZSBkYXRhIHR5 cGUKKysgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklOTl9TVE9SQUdFX0NPTlRBSU5FUikgeworKyAg ICBpZiAodHlwZSA+IDI1NSkgeworKyAgICAgIHUxNiB0eXBlMTYgPSB0eXBlOworKyAgICAgIGNv cHlfYmUxNigodTE2KilwLCAodTE2KikmdHlwZTE2KTsKKysgICAgICBwICs9IDI7CisrICAgICAg aXRlbS0+dXNlZF9zaXplICs9IDI7CisrICAgIH0gZWxzZSB7CisrICAgICAgKnAgPSB0eXBlOwor KyAgICAgIHArKzsKKysgICAgICBpdGVtLT51c2VkX3NpemUrKzsKKysgICAgfQorKyAgfQorKwor KyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRF UzoKKysgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJ Tk5fU1RPUkFHRV9CWVRFOgorKyAgICAgICooKGNoYXIgKikgcCkgPSAqKChjaGFyICopIHB2YWx1 ZSk7CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDE7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2UgQklOTl9TVE9SQUdFX1dPUkQ6CisrICAgICAgY29weV9iZTE2KCh1MTYqKXAsICh1MTYqKXB2 YWx1ZSk7CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDI7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgorKyAgICAgIGNvcHlfYmUzMigodTMyKilwLCAodTMy KilwdmFsdWUpOworKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSA0OworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgICBjb3B5X2JlNjQoKHU2NCopcCwg KHU2NCopcHZhbHVlKTsKKysgICAgICBpdGVtLT51c2VkX3NpemUgKz0gODsKKysgICAgICBicmVh azsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKKysgICAgY2FzZSBCSU5OX1NUT1JBR0Vf U1RSSU5HOgorKyAgICAgIGlmIChzaXplID4gMTI3KSB7CisrICAgICAgICBpbnQzMiA9IHNpemUg fCAweDgwMDAwMDAwOworKyAgICAgICAgY29weV9iZTMyKCh1MzIqKXAsICh1MzIqKSZpbnQzMik7 CisrICAgICAgICBwICs9IDQ7CisrICAgICAgICBpdGVtLT51c2VkX3NpemUgKz0gNDsKKysgICAg ICB9IGVsc2UgeworKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKSBwKSA9IHNpemU7CisrICAg ICAgICBwKys7CisrICAgICAgICBpdGVtLT51c2VkX3NpemUrKzsKKysgICAgICB9CisrICAgICAg bWVtY3B5KHAsIHB2YWx1ZSwgc2l6ZSk7CisrICAgICAgaWYgKHN0b3JhZ2VfdHlwZSA9PSBCSU5O X1NUT1JBR0VfU1RSSU5HKSB7CisrICAgICAgICBwICs9IHNpemU7CisrICAgICAgICAqKChjaGFy ICopIHApID0gKGNoYXIpIDA7CisrICAgICAgICBzaXplKys7ICAvLyBudWxsIHRlcm1pbmF0b3IK KysgICAgICB9CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IHNpemU7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKKysgICAgICBtZW1jcHkocCwgcHZh bHVlLCBzaXplKTsKKysgICAgICBpdGVtLT51c2VkX3NpemUgKz0gc2l6ZTsKKysgICAgICBicmVh azsKKysgIH0KKysKKysgIGl0ZW0tPmRpcnR5ID0gVFJVRTsKKysKKysgIHJldHVybiBUUlVFOwor K30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIGJpbm5f c2F2ZV9oZWFkZXIoYmlubiAqaXRlbSkgeworKyAgdW5zaWduZWQgY2hhciBieXRlLCAqcDsKKysg IGludCBpbnQzMiwgc2l6ZTsKKysKKysgIGlmIChpdGVtID09IE5VTEwpIHJldHVybiBGQUxTRTsK KysKKysjaWZuZGVmIEJJTk5fRElTQUJMRV9TTUFMTF9IRUFERVIKKysKKysgIHAgPSAoKHVuc2ln bmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBNQVhfQklOTl9IRUFERVI7CisrICBzaXplID0gaXRl bS0+dXNlZF9zaXplIC0gTUFYX0JJTk5fSEVBREVSICsgMzsgIC8vIGF0IGxlYXN0IDMgYnl0ZXMg Zm9yIHRoZSBoZWFkZXIKKysKKysgIC8vIHdyaXRlIHRoZSBjb3VudAorKyAgaWYgKGl0ZW0tPmNv dW50ID4gMTI3KSB7CisrICAgIHAgLT0gNDsKKysgICAgc2l6ZSArPSAzOworKyAgICBpbnQzMiA9 IGl0ZW0tPmNvdW50IHwgMHg4MDAwMDAwMDsKKysgICAgY29weV9iZTMyKCh1MzIqKXAsICh1MzIq KSZpbnQzMik7CisrICB9IGVsc2UgeworKyAgICBwLS07CisrICAgICpwID0gKHVuc2lnbmVkIGNo YXIpIGl0ZW0tPmNvdW50OworKyAgfQorKworKyAgLy8gd3JpdGUgdGhlIHNpemUKKysgIGlmIChz aXplID4gMTI3KSB7CisrICAgIHAgLT0gNDsKKysgICAgc2l6ZSArPSAzOworKyAgICBpbnQzMiA9 IHNpemUgfCAweDgwMDAwMDAwOworKyAgICBjb3B5X2JlMzIoKHUzMiopcCwgKHUzMiopJmludDMy KTsKKysgIH0gZWxzZSB7CisrICAgIHAtLTsKKysgICAgKnAgPSAodW5zaWduZWQgY2hhcikgc2l6 ZTsKKysgIH0KKysKKysgIC8vIHdyaXRlIHRoZSB0eXBlLgorKyAgcC0tOworKyAgKnAgPSAodW5z aWduZWQgY2hhcikgaXRlbS0+dHlwZTsKKysKKysgIC8vIHNldCB0aGUgdmFsdWVzCisrICBpdGVt LT5wdHIgPSBwOworKyAgaXRlbS0+c2l6ZSA9IHNpemU7CisrCisrICBVTlVTRUQoYnl0ZSk7Cisr CisrI2Vsc2UKKysKKysgIHAgPSAodW5zaWduZWQgY2hhciAqKSBpdGVtLT5wYnVmOworKworKyAg Ly8gd3JpdGUgdGhlIHR5cGUuCisrICBieXRlID0gaXRlbS0+dHlwZTsKKysgICpwID0gYnl0ZTsg cCsrOworKyAgLy8gd3JpdGUgdGhlIHNpemUKKysgIGludDMyID0gaXRlbS0+dXNlZF9zaXplIHwg MHg4MDAwMDAwMDsKKysgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKikmaW50MzIpOworKyAgcCs9 NDsKKysgIC8vIHdyaXRlIHRoZSBjb3VudAorKyAgaW50MzIgPSBpdGVtLT5jb3VudCB8IDB4ODAw MDAwMDA7CisrICBjb3B5X2JlMzIoKHUzMiopcCwgKHUzMiopJmludDMyKTsKKysKKysgIGl0ZW0t PnB0ciA9IGl0ZW0tPnBidWY7CisrICBpdGVtLT5zaXplID0gaXRlbS0+dXNlZF9zaXplOworKwor KyNlbmRpZgorKworKyAgaXRlbS0+ZGlydHkgPSBGQUxTRTsKKysKKysgIHJldHVybiBUUlVFOwor KworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3ZvaWQgQVBJRU5UUlkgYmlubl9m cmVlKGJpbm4gKml0ZW0pIHsKKysKKysgIGlmIChpdGVtID09IE5VTEwpIHJldHVybjsKKysKKysg IGlmIChpdGVtLT53cml0YWJsZSAmJiBpdGVtLT5wcmVfYWxsb2NhdGVkID09IEZBTFNFKSB7Cisr ICAgIGZyZWVfZm4oaXRlbS0+cGJ1Zik7CisrICB9CisrCisrICBpZiAoaXRlbS0+ZnJlZWZuKSBp dGVtLT5mcmVlZm4oaXRlbS0+cHRyKTsKKysKKysgIGlmIChpdGVtLT5hbGxvY2F0ZWQpIHsKKysg ICAgZnJlZV9mbihpdGVtKTsKKysgIH0gZWxzZSB7CisrICAgIG1lbXNldChpdGVtLCAwLCBzaXpl b2YoYmlubikpOworKyAgICBpdGVtLT5oZWFkZXIgPSBCSU5OX01BR0lDOworKyAgfQorKworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKy8vIGZyZWUgdGhlIGJpbm4gc3RydWN0dXJlIGJ1 dCBrZWVwcyB0aGUgYmlubiBidWZmZXIgYWxsb2NhdGVkLCByZXR1cm5pbmcgYSBwb2ludGVyIHRv IGl0LiB1c2UgdGhlIGZyZWUgZnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUgYnVmZmVyIGxhdGVyCisr dm9pZCAqIEFQSUVOVFJZIGJpbm5fcmVsZWFzZShiaW5uICppdGVtKSB7CisrICB2b2lkICpkYXRh OworKworKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisrCisrICBkYXRhID0gYmlu bl9wdHIoaXRlbSk7CisrCisrICBpZiAoZGF0YSA+IGl0ZW0tPnBidWYpIHsKKysgICAgbWVtbW92 ZShpdGVtLT5wYnVmLCBkYXRhLCBpdGVtLT5zaXplKTsKKysgICAgZGF0YSA9IGl0ZW0tPnBidWY7 CisrICB9CisrCisrICBpZiAoaXRlbS0+YWxsb2NhdGVkKSB7CisrICAgIGZyZWVfZm4oaXRlbSk7 CisrICB9IGVsc2UgeworKyAgICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKGJpbm4pKTsKKysgICAg aXRlbS0+aGVhZGVyID0gQklOTl9NQUdJQzsKKysgIH0KKysKKysgIHJldHVybiBkYXRhOworKwor K30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIElzVmFs aWRCaW5uSGVhZGVyKGNvbnN0IHZvaWQgKnBidWYsIGludCAqcHR5cGUsIGludCAqcGNvdW50LCBp bnQgKnBzaXplLCBpbnQgKnBoZWFkZXJzaXplKSB7CisrICB1bnNpZ25lZCBjaGFyIGJ5dGUsICpw LCAqcGxpbWl0PTA7CisrICBpbnQgaW50MzIsIHR5cGUsIHNpemUsIGNvdW50OworKworKyAgaWYg KHBidWYgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgcCA9ICh1bnNpZ25lZCBjaGFyICop IHBidWY7CisrCisrICBpZiAocHNpemUgJiYgKnBzaXplID4gMCkgeworKyAgICBpZiAoKnBzaXpl IDwgTUlOX0JJTk5fU0laRSkgcmV0dXJuIEZBTFNFOworKyAgICBwbGltaXQgPSBwICsgKnBzaXpl IC0gMTsKKysgIH0KKysKKysgIC8vIGdldCB0aGUgdHlwZQorKyAgYnl0ZSA9ICpwOyBwKys7Cisr ICBpZiAoKGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFTSykgIT0gQklOTl9TVE9SQUdFX0NPTlRBSU5F UikgcmV0dXJuIEZBTFNFOworKyAgaWYgKGJ5dGUgJiBCSU5OX1NUT1JBR0VfSEFTX01PUkUpIHJl dHVybiBGQUxTRTsKKysgIHR5cGUgPSBieXRlOworKworKyAgc3dpdGNoICh0eXBlKSB7CisrICAg IGNhc2UgQklOTl9MSVNUOgorKyAgICBjYXNlIEJJTk5fTUFQOgorKyAgICBjYXNlIEJJTk5fT0JK RUNUOgorKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBGQUxTRTsK KysgIH0KKysKKysgIC8vIGdldCB0aGUgc2l6ZQorKyAgaWYgKHBsaW1pdCAmJiBwID4gcGxpbWl0 KSByZXR1cm4gRkFMU0U7CisrICBpbnQzMiA9ICooKHVuc2lnbmVkIGNoYXIqKXApOworKyAgaWYg KGludDMyICYgMHg4MCkgeworKyAgICBpZiAocGxpbWl0ICYmIHAgKyBzaXplb2YoaW50KSAtIDEg PiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgICAgY29weV9iZTMyKCh1MzIqKSZpbnQzMiwgKHUz MiopcCk7CisrICAgIGludDMyICY9IDB4N0ZGRkZGRkY7CisrICAgIHArPTQ7CisrICB9IGVsc2Ug eworKyAgICBwKys7CisrICB9CisrICBzaXplID0gaW50MzI7CisrCisrICAvLyBnZXQgdGhlIGNv dW50CisrICBpZiAocGxpbWl0ICYmIHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgIGludDMy ID0gKigodW5zaWduZWQgY2hhciopcCk7CisrICBpZiAoaW50MzIgJiAweDgwKSB7CisrICAgIGlm IChwbGltaXQgJiYgcCArIHNpemVvZihpbnQpIC0gMSA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwor KyAgICBjb3B5X2JlMzIoKHUzMiopJmludDMyLCAodTMyKilwKTsKKysgICAgaW50MzIgJj0gMHg3 RkZGRkZGRjsKKysgICAgcCs9NDsKKysgIH0gZWxzZSB7CisrICAgIHArKzsKKysgIH0KKysgIGNv dW50ID0gaW50MzI7CisrCisrICBpZiAoc2l6ZSA8IE1JTl9CSU5OX1NJWkUgfHwgY291bnQgPCAw KSByZXR1cm4gRkFMU0U7CisrCisrICAvLyByZXR1cm4gdGhlIHZhbHVlcworKyAgaWYgKHB0eXBl KSAgKnB0eXBlICA9IHR5cGU7CisrICBpZiAocGNvdW50KSAqcGNvdW50ID0gY291bnQ7CisrICBp ZiAocHNpemUpICAqcHNpemUgID0gc2l6ZTsKKysgIGlmIChwaGVhZGVyc2l6ZSkgKnBoZWFkZXJz aXplID0gKGludCkgKHAgLSAodW5zaWduZWQgY2hhciopcGJ1Zik7CisrICByZXR1cm4gVFJVRTsK Kyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgaW50IGJpbm5f YnVmX3R5cGUoY29uc3Qgdm9pZCAqcGJ1ZikgeworKyAgaW50ICB0eXBlOworKworKyAgaWYgKCFJ c1ZhbGlkQmlubkhlYWRlcihwYnVmLCAmdHlwZSwgTlVMTCwgTlVMTCwgTlVMTCkpIHJldHVybiBJ TlZBTElEX0JJTk47CisrCisrICByZXR1cm4gdHlwZTsKKysKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgaW50IGJpbm5fYnVmX2NvdW50KGNvbnN0IHZvaWQg KnBidWYpIHsKKysgIGludCAgbml0ZW1zOworKworKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihw YnVmLCBOVUxMLCAmbml0ZW1zLCBOVUxMLCBOVUxMKSkgcmV0dXJuIDA7CisrCisrICByZXR1cm4g bml0ZW1zOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFU RSBpbnQgYmlubl9idWZfc2l6ZShjb25zdCB2b2lkICpwYnVmKSB7CisrICBpbnQgIHNpemU9MDsK KysKKysgIGlmICghSXNWYWxpZEJpbm5IZWFkZXIocGJ1ZiwgTlVMTCwgTlVMTCwgJnNpemUsIE5V TEwpKSByZXR1cm4gMDsKKysKKysgIHJldHVybiBzaXplOworKworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX3B0cihjb25zdCB2b2lkICpwdHIp IHsKKysgIGJpbm4gKml0ZW07CisrCisrICBzd2l0Y2ggKGJpbm5fZ2V0X3B0cl90eXBlKHB0cikp IHsKKysgIGNhc2UgQklOTl9TVFJVQ1Q6CisrICAgIGl0ZW0gPSAoYmlubiopIHB0cjsKKysgICAg aWYgKGl0ZW0tPndyaXRhYmxlICYmIGl0ZW0tPmRpcnR5KSB7CisrICAgICAgYmlubl9zYXZlX2hl YWRlcihpdGVtKTsKKysgICAgfQorKyAgICByZXR1cm4gaXRlbS0+cHRyOworKyAgY2FzZSBCSU5O X0JVRkZFUjoKKysgICAgcmV0dXJuICh2b2lkKilwdHI7CisrICBkZWZhdWx0OgorKyAgICByZXR1 cm4gTlVMTDsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytpbnQg QVBJRU5UUlkgYmlubl9zaXplKGNvbnN0IHZvaWQgKnB0cikgeworKyAgYmlubiAqaXRlbTsKKysK KysgIHN3aXRjaCAoYmlubl9nZXRfcHRyX3R5cGUocHRyKSkgeworKyAgY2FzZSBCSU5OX1NUUlVD VDoKKysgICAgaXRlbSA9IChiaW5uKikgcHRyOworKyAgICBpZiAoaXRlbS0+d3JpdGFibGUgJiYg aXRlbS0+ZGlydHkpIHsKKysgICAgICBiaW5uX3NhdmVfaGVhZGVyKGl0ZW0pOworKyAgICB9Cisr ICAgIHJldHVybiBpdGVtLT5zaXplOworKyAgY2FzZSBCSU5OX0JVRkZFUjoKKysgICAgcmV0dXJu IGJpbm5fYnVmX3NpemUocHRyKTsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiAwOworKyAgfQor KworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK2ludCBBUElFTlRSWSBiaW5uX3R5 cGUoY29uc3Qgdm9pZCAqcHRyKSB7CisrICBiaW5uICppdGVtOworKworKyAgc3dpdGNoIChiaW5u X2dldF9wdHJfdHlwZShwdHIpKSB7CisrICBjYXNlIEJJTk5fU1RSVUNUOgorKyAgICBpdGVtID0g KGJpbm4qKSBwdHI7CisrICAgIHJldHVybiBpdGVtLT50eXBlOworKyAgY2FzZSBCSU5OX0JVRkZF UjoKKysgICAgcmV0dXJuIGJpbm5fYnVmX3R5cGUocHRyKTsKKysgIGRlZmF1bHQ6CisrICAgIHJl dHVybiAtMTsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytpbnQg QVBJRU5UUlkgYmlubl9jb3VudChjb25zdCB2b2lkICpwdHIpIHsKKysgIGJpbm4gKml0ZW07Cisr CisrICBzd2l0Y2ggKGJpbm5fZ2V0X3B0cl90eXBlKHB0cikpIHsKKysgIGNhc2UgQklOTl9TVFJV Q1Q6CisrICAgIGl0ZW0gPSAoYmlubiopIHB0cjsKKysgICAgcmV0dXJuIGl0ZW0tPmNvdW50Owor KyAgY2FzZSBCSU5OX0JVRkZFUjoKKysgICAgcmV0dXJuIGJpbm5fYnVmX2NvdW50KHB0cik7Cisr ICBkZWZhdWx0OgorKyAgICByZXR1cm4gLTE7CisrICB9CisrCisrfQorKworKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrCisrLy8gdGhlIGNvbnRhaW5lciBjYW4gYmUgc21hbGxlciB0aGFuIHRoZSBp bmZvcm1lZCBzaXplCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9pc192YWxpZF9leDIoY29uc3Qg dm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50ICpwc2l6ZSkgeworKyAgaW50 ICBpLCB0eXBlLCBjb3VudCwgc2l6ZSwgaGVhZGVyX3NpemU7CisrICB1bnNpZ25lZCBjaGFyICpw LCAqcGxpbWl0LCAqYmFzZSwgbGVuOworKworKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm4gRkFM U0U7CisrCisrICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1lZCBzaXplPworKyAgaWYgKHBzaXplICYm ICpwc2l6ZSA+IDApIHsKKysgICAgc2l6ZSA9ICpwc2l6ZTsKKysgIH0gZWxzZSB7CisrICAgIHNp emUgPSAwOworKyAgfQorKworKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAm Y291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpKSByZXR1cm4gRkFMU0U7CisrCisrICAvLyBpcyB0 aGVyZSBhbiBpbmZvcm1lZCBzaXplPworKyAgaWYgKHBzaXplICYmICpwc2l6ZSA+IDApIHsKKysg ICAgLy8gaXMgaXQgYmlnZ2VyIHRoYW4gdGhlIGJ1ZmZlcj8KKysgICAgaWYgKHNpemUgPiAqcHNp emUpIHJldHVybiBGQUxTRTsKKysgIH0KKysgIC8vIGlzIHRoZXJlIGFuIGluZm9ybWVkIGNvdW50 PworKyAgaWYgKHBjb3VudCAmJiAqcGNvdW50ID4gMCkgeworKyAgICAvLyBpcyBpdCB0aGUgc2Ft ZSBhcyB0aGUgb25lIGluIHRoZSBidWZmZXI/CisrICAgIGlmIChjb3VudCAhPSAqcGNvdW50KSBy ZXR1cm4gRkFMU0U7CisrICB9CisrICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1lZCB0eXBlPworKyAg aWYgKHB0eXBlICYmICpwdHlwZSAhPSAwKSB7CisrICAgIC8vIGlzIGl0IHRoZSBzYW1lIGFzIHRo ZSBvbmUgaW4gdGhlIGJ1ZmZlcj8KKysgICAgaWYgKHR5cGUgIT0gKnB0eXBlKSByZXR1cm4gRkFM U0U7CisrICB9CisrCisrICBwID0gKHVuc2lnbmVkIGNoYXIgKilwdHI7CisrICBiYXNlID0gcDsK KysgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKKysKKysgIHAgKz0gaGVhZGVyX3NpemU7CisrCisr ICAvLyBwcm9jZXNzIGVhY2ggKGtleSBhbmQpIHZhbHVlCisrICBmb3IgKGkgPSAwOyBpIDwgY291 bnQ7IGkrKykgeworKyAgICBzd2l0Y2ggKHR5cGUpIHsKKysgICAgICBjYXNlIEJJTk5fT0JKRUNU OgorKyAgICAgICAgaWYgKHAgPiBwbGltaXQpIGdvdG8gSW52YWxpZDsKKysgICAgICAgIC8vIGdl dCB0aGUga2V5IChzdHJpbmcpIHNpemUKKysgICAgICAgIGxlbiA9ICpwOworKyAgICAgICAgcCsr OworKyAgICAgICAgLy9pZiAobGVuID09IDApIGdvdG8gSW52YWxpZDsKKysgICAgICAgIC8vIGFk dmFuY2Ugb3ZlciB0aGUga2V5CisrICAgICAgICBwICs9IGxlbjsKKysgICAgICAgIGJyZWFrOwor KyAgICAgIGNhc2UgQklOTl9NQVA6CisrICAgICAgICAvLyBhZHZhbmNlIG92ZXIgdGhlIGtleQor KyAgICAgICAgcmVhZF9tYXBfaWQoJnAsIHBsaW1pdCk7CisrICAgICAgICBicmVhazsKKysgICAg ICBjYXNlIEJJTk5fTElTVDoKKysgICAgICAgIC8vIG5vIGtleQorKyAgICAgICAgYnJlYWs7Cisr ICAgICAgZGVmYXVsdDoKKysgICAgICAgIGdvdG8gSW52YWxpZDsKKysgICAgfQorKyAgICAvLyBj aGVjayB0aGUgdmFsdWUKKysgICAgaWYgKHAgPiBwbGltaXQpIGdvdG8gSW52YWxpZDsKKysgICAg aWYgKCgqcCAmIEJJTk5fU1RPUkFHRV9NQVNLKSA9PSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSKSB7 CisrICAgICAgLy8gcmVjdXJzaXZlbHkgY2hlY2sgdGhlIGludGVybmFsIGNvbnRhaW5lcgorKyAg ICAgIGludCBzaXplMiA9IHBsaW1pdCAtIHAgKyAxOyAgLy8gbWF4aW11bSBjb250YWluZXIgc2l6 ZQorKyAgICAgIGlmIChiaW5uX2lzX3ZhbGlkX2V4MihwLCBOVUxMLCBOVUxMLCAmc2l6ZTIpID09 IEZBTFNFKSBnb3RvIEludmFsaWQ7CisrICAgICAgcCArPSBzaXplMjsKKysgICAgfSBlbHNlIHsK KysgICAgICAvLyBhZHZhbmNlIG92ZXIgdGhlIHZhbHVlCisrICAgICAgcCA9IEFkdmFuY2VEYXRh UG9zKHAsIHBsaW1pdCk7CisrICAgICAgaWYgKHAgPT0gMCB8fCBwIDwgYmFzZSkgZ290byBJbnZh bGlkOworKyAgICB9CisrICB9CisrCisrICBpZiAocHR5cGUgICYmICpwdHlwZT09MCkgKnB0eXBl ID0gdHlwZTsKKysgIGlmIChwY291bnQgJiYgKnBjb3VudD09MCkgKnBjb3VudCA9IGNvdW50Owor KyAgaWYgKHBzaXplKSAqcHNpemUgPSBzaXplOworKyAgcmV0dXJuIFRSVUU7CisrCisrSW52YWxp ZDoKKysgIHJldHVybiBGQUxTRTsKKysKKyt9CisrCisrLy8gdGhlIGNvbnRhaW5lciBtdXN0IGhh dmUgdGhlIGluZm9ybWVkIHNpemUsIGlmIGluZm9ybWVkCisrQk9PTCBBUElFTlRSWSBiaW5uX2lz X3ZhbGlkX2V4KGNvbnN0IHZvaWQgKnB0ciwgaW50ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAq cHNpemUpIHsKKysgIGludCBzaXplOworKworKyAgaWYgKHBzaXplICYmICpwc2l6ZSA+IDApIHsK KysgICAgc2l6ZSA9ICpwc2l6ZTsKKysgIH0gZWxzZSB7CisrICAgIHNpemUgPSAwOworKyAgfQor KworKyAgaWYgKGJpbm5faXNfdmFsaWRfZXgyKHB0ciwgcHR5cGUsIHBjb3VudCwgJnNpemUpID09 IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAocHNpemUpIHsKKysgICAgaWYgKCpwc2l6 ZSA+IDApIHsKKysgICAgICBpZiAoc2l6ZSAhPSAqcHNpemUpIHJldHVybiBGQUxTRTsKKysgICAg fSBlbHNlIGlmICgqcHNpemU9PTApIHsKKysgICAgICAqcHNpemUgPSBzaXplOworKyAgICB9Cisr ICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK KytCT09MIEFQSUVOVFJZIGJpbm5faXNfdmFsaWQoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBl LCBpbnQgKnBjb3VudCwgaW50ICpwc2l6ZSkgeworKworKyAgaWYgKHB0eXBlKSAgKnB0eXBlICA9 IDA7CisrICBpZiAocGNvdW50KSAqcGNvdW50ID0gMDsKKysgIGlmIChwc2l6ZSkgICpwc2l6ZSAg PSAwOworKworKyAgcmV0dXJuIGJpbm5faXNfdmFsaWRfZXgocHRyLCBwdHlwZSwgcGNvdW50LCBw c2l6ZSk7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBJTlRFUk5BTCBG VU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIEdldFZh bHVlKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKnBsaW1pdCwgYmlubiAqdmFsdWUp IHsKKysgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKysgIGludCAgIGRhdGFfdHlwZSwgc3RvcmFnZV90 eXBlOyAgLy8sIGV4dHJhX3R5cGU7CisrICBpbnQgICBEYXRhU2l6ZTsKKysgIHZvaWQgKnAyOwor KworKyAgaWYgKHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysgIG1lbXNldCh2YWx1ZSwg MCwgc2l6ZW9mKGJpbm4pKTsKKysgIHZhbHVlLT5oZWFkZXIgPSBCSU5OX01BR0lDOworKyAgLy92 YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAgYWxyZWFkeSB6ZXJvZWQKKysgIC8vdmFsdWUt PndyaXRhYmxlID0gRkFMU0U7CisrCisrICAvLyBzYXZlcyBmb3IgdXNlIHdpdGggQklOTl9TVE9S QUdFX0NPTlRBSU5FUgorKyAgcDIgPSBwOworKworKyAgLy8gcmVhZCB0aGUgZGF0YSB0eXBlCisr ICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgYnl0ZSA9ICpwOyBwKys7CisrICBz dG9yYWdlX3R5cGUgPSBieXRlICYgQklOTl9TVE9SQUdFX01BU0s7CisrICBpZiAoYnl0ZSAmIEJJ Tk5fU1RPUkFHRV9IQVNfTU9SRSkgeworKyAgICBkYXRhX3R5cGUgPSBieXRlIDw8IDg7CisrICAg IGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgIGJ5dGUgPSAqcDsgcCsrOworKyAg ICBkYXRhX3R5cGUgfD0gYnl0ZTsKKysgICAgLy9leHRyYV90eXBlID0gZGF0YV90eXBlICYgQklO Tl9UWVBFX01BU0sxNjsKKysgIH0gZWxzZSB7CisrICAgIGRhdGFfdHlwZSA9IGJ5dGU7CisrICAg IC8vZXh0cmFfdHlwZSA9IGJ5dGUgJiBCSU5OX1RZUEVfTUFTSzsKKysgIH0KKysKKysgIC8vdmFs dWUtPnN0b3JhZ2VfdHlwZSA9IHN0b3JhZ2VfdHlwZTsKKysgIHZhbHVlLT50eXBlID0gZGF0YV90 eXBlOworKworKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKKysgIGNhc2UgQklOTl9TVE9SQUdF X05PQllURVM6CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKKysgICAg aWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgICAgdmFsdWUtPnZ1aW50OCA9ICooKHVu c2lnbmVkIGNoYXIgKikgcCk7CisrICAgIHZhbHVlLT5wdHIgPSBwOyAgIC8vdmFsdWUtPnB0ciA9 ICZ2YWx1ZS0+dnVpbnQ4OworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6 CisrICAgIGlmIChwICsgMSA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICBjb3B5X2JlMTYo KHUxNiopJnZhbHVlLT52aW50MTYsICh1MTYqKXApOworKyAgICB2YWx1ZS0+cHRyID0gJnZhbHVl LT52aW50MTY7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6CisrICAg IGlmIChwICsgMyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICBjb3B5X2JlMzIoKHUzMiop JnZhbHVlLT52aW50MzIsICh1MzIqKXApOworKyAgICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52aW50 MzI7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6CisrICAgIGlmIChw ICsgNyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICBjb3B5X2JlNjQoKHU2NCopJnZhbHVl LT52aW50NjQsICh1NjQqKXApOworKyAgICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52aW50NjQ7Cisr ICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKKysgIGNhc2UgQklOTl9TVE9S QUdFX1NUUklORzoKKysgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgICAgRGF0 YVNpemUgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsKKysgICAgaWYgKERhdGFTaXplICYgMHg4MCkg eworKyAgICAgIGlmIChwICsgMyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICAgIGNvcHlf YmUzMigodTMyKikmRGF0YVNpemUsICh1MzIqKXApOworKyAgICAgIERhdGFTaXplICY9IDB4N0ZG RkZGRkY7CisrICAgICAgcCs9NDsKKysgICAgfSBlbHNlIHsKKysgICAgICBwKys7CisrICAgIH0K KysgICAgaWYgKHAgKyBEYXRhU2l6ZSAtIDEgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgICAg dmFsdWUtPnNpemUgPSBEYXRhU2l6ZTsKKysgICAgdmFsdWUtPnB0ciA9IHA7CisrICAgIGJyZWFr OworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgorKyAgICB2YWx1ZS0+cHRyID0gcDI7 ICAvLyA8LS0gaXQgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgY29udGFpbmVyLCBub3QgdGhl IGRhdGEKKysgICAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHAyLCBOVUxMLCAmdmFsdWUtPmNvdW50 LCAmdmFsdWUtPnNpemUsIE5VTEwpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrICAgIGJyZWFr OworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKworKyAgLy8gY29udmVy dCB0aGUgcmV0dXJuZWQgdmFsdWUsIGlmIG5lZWRlZAorKworKyAgc3dpdGNoICh2YWx1ZS0+dHlw ZSkgeworKyAgICBjYXNlIEJJTk5fVFJVRToKKysgICAgICB2YWx1ZS0+dHlwZSA9IEJJTk5fQk9P TDsKKysgICAgICB2YWx1ZS0+dmJvb2wgPSBUUlVFOworKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFs dWUtPnZib29sOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJTk5fRkFMU0U6CisrICAgICAg dmFsdWUtPnR5cGUgPSBCSU5OX0JPT0w7CisrICAgICAgdmFsdWUtPnZib29sID0gRkFMU0U7Cisr ICAgICAgdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dmJvb2w7CisrICAgICAgYnJlYWs7CisrI2lmZGVm IEJJTk5fRVhURU5ERUQKKysgICAgY2FzZSBCSU5OX1NJTkdMRV9TVFI6CisrICAgICAgdmFsdWUt PnR5cGUgPSBCSU5OX1NJTkdMRTsKKysgICAgICB2YWx1ZS0+dmZsb2F0ID0gKGZsb2F0KSBhdG9m KChjb25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8vIGNvbnZlcnRzIGZyb20gc3RyaW5nIHRvIGRv dWJsZSwgYW5kIHRoZW4gdG8gZmxvYXQKKysgICAgICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52Zmxv YXQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9ET1VCTEVfU1RSOgorKyAgICAgIHZh bHVlLT50eXBlID0gQklOTl9ET1VCTEU7CisrICAgICAgdmFsdWUtPnZkb3VibGUgPSBhdG9mKChj b25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8vIGNvbnZlcnRzIGZyb20gc3RyaW5nIHRvIGRvdWJs ZQorKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFsdWUtPnZkb3VibGU7CisrICAgICAgYnJlYWs7Cisr I2VuZGlmCisrICAgIC8qCisrICAgIGNhc2UgQklOTl9ERUNJTUFMOgorKyAgICBjYXNlIEJJTk5f Q1VSUkVOQ1lTVFI6CisrICAgIGNhc2UgQklOTl9EQVRFOgorKyAgICBjYXNlIEJJTk5fREFURVRJ TUU6CisrICAgIGNhc2UgQklOTl9USU1FOgorKyAgICAqLworKyAgfQorKworKyAgcmV0dXJuIFRS VUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2lmIEJZVEVfT1JERVIg PT0gTElUVExFX0VORElBTgorKworKy8vIG9uIGxpdHRsZS1lbmRpYW4gZGV2aWNlcyB3ZSBzdG9y ZSB0aGUgdmFsdWUgc28gd2UgY2FuIHJldHVybiBhIHBvaW50ZXIgdG8gaW50ZWdlcnMuCisrLy8g aXQncyB2YWxpZCBvbmx5IGZvciBzaW5nbGUtdGhyZWFkZWQgYXBwcy4gbXVsdGktdGhyZWFkZWQg YXBwcyBtdXN0IHVzZSB0aGUgX2dldF8gZnVuY3Rpb25zIGluc3RlYWQuCisrCisrYmlubiBsb2Nh bF92YWx1ZTsKKysKKytCSU5OX1BSSVZBVEUgdm9pZCAqIHN0b3JlX3ZhbHVlKGJpbm4gKnZhbHVl KSB7CisrCisrICBtZW1jcHkoJmxvY2FsX3ZhbHVlLCB2YWx1ZSwgc2l6ZW9mKGJpbm4pKTsKKysK KysgIHN3aXRjaCAoYmlubl9nZXRfcmVhZF9zdG9yYWdlKHZhbHVlLT50eXBlKSkgeworKyAgY2Fz ZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgLy8gcmV0dXJuIGEgdmFsaWQgcG9pbnRlcgor KyAgY2FzZSBCSU5OX1NUT1JBR0VfV09SRDoKKysgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgor KyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6CisrICAgIHJldHVybiAmbG9jYWxfdmFsdWUudmlu dDMyOyAgLy8gcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgY29udmVydGVkIHZhbHVlLCBmcm9t IGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbgorKyAgfQorKworKyAgcmV0dXJuIHZhbHVlLT5w dHI7ICAgLy8gcmV0dXJucyBmcm9tIHRoZSBvbiBzdGFjayB2YWx1ZSB0byBiZSB0aHJlYWQtc2Fm ZSAoZm9yIGxpc3QsIG1hcCwgb2JqZWN0LCBzdHJpbmcgYW5kIGJsb2IpCisrCisrfQorKworKyNl bmRpZgorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBSRUFEIEZVTkNUSU9OUyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0X3Zh bHVlKGNvbnN0IHZvaWQgKnB0ciwgY29uc3QgY2hhciAqa2V5LCBiaW5uICp2YWx1ZSkgeworKyAg aW50IHR5cGUsIGNvdW50LCBzaXplPTAsIGhlYWRlcl9zaXplOworKyAgdW5zaWduZWQgY2hhciAq cCwgKnBsaW1pdDsKKysKKysgIHB0ciA9IGJpbm5fcHRyKHB0cik7CisrICBpZiAocHRyID09IE5V TEwgfHwga2V5ID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAg Ly8gY2hlY2sgdGhlIGhlYWRlcgorKyAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUs ICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysK KysgIGlmICh0eXBlICE9IEJJTk5fT0JKRUNUKSByZXR1cm4gRkFMU0U7CisrICBpZiAoY291bnQg PT0gMCkgcmV0dXJuIEZBTFNFOworKworKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKKysg IHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKKysKKysgIHAgPSBTZWFyY2hGb3JLZXkocCwgaGVhZGVy X3NpemUsIHNpemUsIGNvdW50LCBrZXkpOworKyAgaWYgKHAgPT0gRkFMU0UpIHJldHVybiBGQUxT RTsKKysKKysgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVlKTsKKysKKyt9CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldF92YWx1 ZShjb25zdCB2b2lkICpwdHIsIGludCBpZCwgYmlubiAqdmFsdWUpIHsKKysgIGludCB0eXBlLCBj b3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKKysgIHVuc2lnbmVkIGNoYXIgKnAsICpwbGltaXQ7 CisrCisrICBwdHIgPSBiaW5uX3B0cihwdHIpOworKyAgaWYgKHB0ciA9PSBOVUxMIHx8IHZhbHVl ID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIC8vIGNoZWNrIHRoZSBoZWFkZXIKKysgIGlm IChJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3Np emUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAodHlwZSAhPSBCSU5OX01BUCkg cmV0dXJuIEZBTFNFOworKyAgaWYgKGNvdW50ID09IDApIHJldHVybiBGQUxTRTsKKysKKysgIHAg PSAodW5zaWduZWQgY2hhciAqKSBwdHI7CisrICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7CisrCisr ICBwID0gU2VhcmNoRm9ySUQocCwgaGVhZGVyX3NpemUsIHNpemUsIGNvdW50LCBpZCk7CisrICBp ZiAocCA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgcmV0dXJuIEdldFZhbHVlKHAsIHBs aW1pdCwgdmFsdWUpOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wg QVBJRU5UUlkgYmlubl9saXN0X2dldF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGludCBwb3MsIGJp bm4gKnZhbHVlKSB7CisrICBpbnQgIGksIHR5cGUsIGNvdW50LCBzaXplPTAsIGhlYWRlcl9zaXpl OworKyAgdW5zaWduZWQgY2hhciAqcCwgKnBsaW1pdCwgKmJhc2U7CisrCisrICBwdHIgPSBiaW5u X3B0cihwdHIpOworKyAgaWYgKHB0ciA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBG QUxTRTsKKysKKysgIC8vIGNoZWNrIHRoZSBoZWFkZXIKKysgIGlmIChJc1ZhbGlkQmlubkhlYWRl cihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpID09IEZBTFNFKSByZXR1 cm4gRkFMU0U7CisrCisrICBpZiAodHlwZSAhPSBCSU5OX0xJU1QpIHJldHVybiBGQUxTRTsKKysg IGlmIChjb3VudCA9PSAwKSByZXR1cm4gRkFMU0U7CisrICBpZiAocG9zIDw9IDAgfHwgcG9zID4g Y291bnQpIHJldHVybiBGQUxTRTsKKysgIHBvcy0tOyAgLy8gY29udmVydCBmcm9tIGJhc2UgMSB0 byBiYXNlIDAKKysKKysgIHAgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7CisrICBiYXNlID0gcDsK KysgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKKysgIHAgKz0gaGVhZGVyX3NpemU7CisrCisrICBm b3IgKGkgPSAwOyBpIDwgcG9zOyBpKyspIHsKKysgICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBs aW1pdCk7CisrICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIHJldHVybiBGQUxTRTsKKysgIH0K KysKKysgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVlKTsKKysKKyt9CisrCisrLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKysvKioqIFJFQUQgUEFJUiBCWSBQT1NJVElPTiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9yZWFkX3BhaXIoaW50IGV4cGVjdGVk X3R5cGUsIGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQsIGNoYXIgKnBrZXksIGJp bm4gKnZhbHVlKSB7CisrICBpbnQgIHR5cGUsIGNvdW50LCBzaXplPTAsIGhlYWRlcl9zaXplOwor KyAgaW50ICBpLCBpbnQzMiwgaWQgPSAwLCBjb3VudGVyPTA7CisrICB1bnNpZ25lZCBjaGFyICpw LCAqcGxpbWl0LCAqYmFzZSwgKmtleSA9IE5VTEwsIGxlbiA9IDA7CisrCisrICBwdHIgPSBiaW5u X3B0cihwdHIpOworKworKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgorKyAgaWYgKElzVmFsaWRCaW5u SGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkgPT0gRkFMU0Up IHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlICE9IGV4cGVjdGVkX3R5cGUgfHwgY291bnQg PT0gMCB8fCBwb3MgPCAxIHx8IHBvcyA+IGNvdW50KSByZXR1cm4gRkFMU0U7CisrCisrICBwID0g KHVuc2lnbmVkIGNoYXIgKikgcHRyOworKyAgYmFzZSA9IHA7CisrICBwbGltaXQgPSBwICsgc2l6 ZSAtIDE7CisrICBwICs9IGhlYWRlcl9zaXplOworKworKyAgZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspIHsKKysgICAgc3dpdGNoICh0eXBlKSB7CisrICAgICAgY2FzZSBCSU5OX01BUDoKKysg ICAgICAgIGludDMyID0gcmVhZF9tYXBfaWQoJnAsIHBsaW1pdCk7CisrICAgICAgICBpZiAocCA+ IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICAgICAgaWQgPSBpbnQzMjsKKysgICAgICAgIGJy ZWFrOworKyAgICAgIGNhc2UgQklOTl9PQkpFQ1Q6CisrICAgICAgICBsZW4gPSAqKCh1bnNpZ25l ZCBjaGFyICopcCk7IHArKzsKKysgICAgICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7 CisrICAgICAgICBrZXkgPSBwOworKyAgICAgICAgcCArPSBsZW47CisrICAgICAgICBpZiAocCA+ IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY291 bnRlcisrOworKyAgICBpZiAoY291bnRlciA9PSBwb3MpIGdvdG8gZm91bmQ7CisrICAgIC8vCisr ICAgIHAgPSBBZHZhbmNlRGF0YVBvcyhwLCBwbGltaXQpOworKyAgICBpZiAocCA9PSAwIHx8IHAg PCBiYXNlKSByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICByZXR1cm4gRkFMU0U7CisrCisrZm91 bmQ6CisrCisrICBzd2l0Y2ggKHR5cGUpIHsKKysgICAgY2FzZSBCSU5OX01BUDoKKysgICAgICBp ZiAocGlkKSAqcGlkID0gaWQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9PQkpFQ1Q6 CisrICAgICAgaWYgKHBrZXkpIHsKKysgICAgICAgIG1lbWNweShwa2V5LCBrZXksIGxlbik7Cisr ICAgICAgICBwa2V5W2xlbl0gPSAwOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgIH0KKysK KysgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVlKTsKKysKKyt9CisrCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldF9wYWlyKGNvbnN0 IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQsIGJpbm4gKnZhbHVlKSB7CisrCisrICByZXR1 cm4gYmlubl9yZWFkX3BhaXIoQklOTl9NQVAsIHB0ciwgcG9zLCBwaWQsIE5VTEwsIHZhbHVlKTsK KysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5f b2JqZWN0X2dldF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgY2hhciAqcGtleSwgYmlu biAqdmFsdWUpIHsKKysKKysgIHJldHVybiBiaW5uX3JlYWRfcGFpcihCSU5OX09CSkVDVCwgcHRy LCBwb3MsIE5VTEwsIHBrZXksIHZhbHVlKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfcGFpcihjb25zdCB2b2lkICptYXAsIGlu dCBwb3MsIGludCAqcGlkKSB7CisrICBiaW5uICp2YWx1ZTsKKysKKysgIHZhbHVlID0gKGJpbm4g KikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX3JlYWRfcGFpcihC SU5OX01BUCwgbWFwLCBwb3MsIHBpZCwgTlVMTCwgdmFsdWUpID09IEZBTFNFKSB7CisrICAgIGZy ZWVfZm4odmFsdWUpOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIHZhbHVlLT5hbGxv Y2F0ZWQgPSBUUlVFOworKyAgcmV0dXJuIHZhbHVlOworKworK30KKysKKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF9wYWlyKGNvbnN0IHZvaWQg Km9iaiwgaW50IHBvcywgY2hhciAqcGtleSkgeworKyAgYmlubiAqdmFsdWU7CisrCisrICB2YWx1 ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7CisrCisrICBpZiAoYmlubl9y ZWFkX3BhaXIoQklOTl9PQkpFQ1QsIG9iaiwgcG9zLCBOVUxMLCBwa2V5LCB2YWx1ZSkgPT0gRkFM U0UpIHsKKysgICAgZnJlZV9mbih2YWx1ZSk7CisrICAgIHJldHVybiBOVUxMOworKyAgfQorKwor KyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7CisrICByZXR1cm4gdmFsdWU7CisrCisrfQorKwor Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKyt2b2lkICog QVBJRU5UUlkgYmlubl9tYXBfcmVhZF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50 ICpwaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7CisrCisrICBp ZiAoYmlubl9tYXBfZ2V0X3BhaXIocHRyLCBwb3MsIHBpZCwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0 dXJuIE5VTEw7CisrICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7CisrICBpZiAocHNp emUpICpwc2l6ZSA9IHZhbHVlLnNpemU7CisrI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElB TgorKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7CisrI2Vsc2UKKysgIHJldHVybiB2YWx1 ZS5wdHI7CisrI2VuZGlmCisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrdm9p ZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3JlYWRfcGFpcihjb25zdCB2b2lkICpwdHIsIGludCBw b3MsIGNoYXIgKnBrZXksIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7 CisrCisrICBpZiAoYmlubl9vYmplY3RfZ2V0X3BhaXIocHRyLCBwb3MsIHBrZXksICZ2YWx1ZSkg PT0gRkFMU0UpIHJldHVybiBOVUxMOworKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBl OworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOworKyNpZiBCWVRFX09SREVSID09 IExJVFRMRV9FTkRJQU4KKysgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOworKyNlbHNlCisr ICByZXR1cm4gdmFsdWUucHRyOworKyNlbmRpZgorKworK30KKysKKysvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKy8qKiogU0VRVUVOVElBTCBSRUFEIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytC T09MIEFQSUVOVFJZIGJpbm5faXRlcl9pbml0KGJpbm5faXRlciAqaXRlciwgY29uc3Qgdm9pZCAq cHRyLCBpbnQgZXhwZWN0ZWRfdHlwZSkgeworKyAgaW50ICB0eXBlLCBjb3VudCwgc2l6ZT0wLCBo ZWFkZXJfc2l6ZTsKKysKKysgIHB0ciA9IGJpbm5fcHRyKHB0cik7CisrICBpZiAocHRyID09IE5V TEwgfHwgaXRlciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrICBtZW1zZXQoaXRlciwgMCwgc2l6 ZW9mKGJpbm5faXRlcikpOworKworKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgorKyAgaWYgKElzVmFs aWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkgPT0g RkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlICE9IGV4cGVjdGVkX3R5cGUpIHJl dHVybiBGQUxTRTsKKysgIC8vaWYgKGNvdW50ID09IDApIHJldHVybiBGQUxTRTsgIC0tIHNob3Vs ZCBub3QgYmUgdXNlZAorKworKyAgaXRlci0+cGxpbWl0ID0gKHVuc2lnbmVkIGNoYXIgKilwdHIg KyBzaXplIC0gMTsKKysgIGl0ZXItPnBuZXh0ID0gKHVuc2lnbmVkIGNoYXIgKilwdHIgKyBoZWFk ZXJfc2l6ZTsKKysgIGl0ZXItPmNvdW50ID0gY291bnQ7CisrICBpdGVyLT5jdXJyZW50ID0gMDsK KysgIGl0ZXItPnR5cGUgPSB0eXBlOworKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfbmV4dChiaW5uX2l0 ZXIgKml0ZXIsIGJpbm4gKnZhbHVlKSB7CisrICB1bnNpZ25lZCBjaGFyICpwbm93OworKworKyAg aWYgKGl0ZXIgPT0gTlVMTCB8fCBpdGVyLT5wbmV4dCA9PSBOVUxMIHx8IGl0ZXItPnBuZXh0ID4g aXRlci0+cGxpbWl0IHx8IGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5jb3VudCB8fCBpdGVyLT50eXBl ICE9IEJJTk5fTElTVCkgcmV0dXJuIEZBTFNFOworKworKyAgaXRlci0+Y3VycmVudCsrOworKyAg aWYgKGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5jb3VudCkgcmV0dXJuIEZBTFNFOworKworKyAgcG5v dyA9IGl0ZXItPnBuZXh0OworKyAgaXRlci0+cG5leHQgPSBBZHZhbmNlRGF0YVBvcyhwbm93LCBp dGVyLT5wbGltaXQpOworKyAgaWYgKGl0ZXItPnBuZXh0ICE9IDAgJiYgaXRlci0+cG5leHQgPCBw bm93KSByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gR2V0VmFsdWUocG5vdywgaXRlci0+cGxp bWl0LCB2YWx1ZSk7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9Q UklWQVRFIEJPT0wgYmlubl9yZWFkX25leHRfcGFpcihpbnQgZXhwZWN0ZWRfdHlwZSwgYmlubl9p dGVyICppdGVyLCBpbnQgKnBpZCwgY2hhciAqcGtleSwgYmlubiAqdmFsdWUpIHsKKysgIGludCAg aW50MzIsIGlkOworKyAgdW5zaWduZWQgY2hhciAqcCwgKmtleTsKKysgIHVuc2lnbmVkIHNob3J0 IGxlbjsKKysKKysgIGlmIChpdGVyID09IE5VTEwgfHwgaXRlci0+cG5leHQgPT0gTlVMTCB8fCBp dGVyLT5wbmV4dCA+IGl0ZXItPnBsaW1pdCB8fCBpdGVyLT5jdXJyZW50ID4gaXRlci0+Y291bnQg fHwgaXRlci0+dHlwZSAhPSBleHBlY3RlZF90eXBlKSByZXR1cm4gRkFMU0U7CisrCisrICBpdGVy LT5jdXJyZW50Kys7CisrICBpZiAoaXRlci0+Y3VycmVudCA+IGl0ZXItPmNvdW50KSByZXR1cm4g RkFMU0U7CisrCisrICBwID0gaXRlci0+cG5leHQ7CisrCisrICBzd2l0Y2ggKGV4cGVjdGVkX3R5 cGUpIHsKKysgICAgY2FzZSBCSU5OX01BUDoKKysgICAgICBpbnQzMiA9IHJlYWRfbWFwX2lkKCZw LCBpdGVyLT5wbGltaXQpOworKyAgICAgIGlmIChwID4gaXRlci0+cGxpbWl0KSByZXR1cm4gRkFM U0U7CisrICAgICAgaWQgPSBpbnQzMjsKKysgICAgICBpZiAocGlkKSAqcGlkID0gaWQ7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9PQkpFQ1Q6CisrICAgICAgbGVuID0gKigodW5zaWdu ZWQgY2hhciAqKXApOyBwKys7CisrICAgICAga2V5ID0gcDsKKysgICAgICBwICs9IGxlbjsKKysg ICAgICBpZiAocCA+IGl0ZXItPnBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICAgIGlmIChwa2V5 KSB7CisrICAgICAgICBtZW1jcHkocGtleSwga2V5LCBsZW4pOworKyAgICAgICAgcGtleVtsZW5d ID0gMDsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICB9CisrCisrICBpdGVyLT5wbmV4dCA9 IEFkdmFuY2VEYXRhUG9zKHAsIGl0ZXItPnBsaW1pdCk7CisrICBpZiAoaXRlci0+cG5leHQgIT0g MCAmJiBpdGVyLT5wbmV4dCA8IHApIHJldHVybiBGQUxTRTsKKysKKysgIHJldHVybiBHZXRWYWx1 ZShwLCBpdGVyLT5wbGltaXQsIHZhbHVlKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFwX25leHQoYmlubl9pdGVyICppdGVyLCBpbnQg KnBpZCwgYmlubiAqdmFsdWUpIHsKKysKKysgIHJldHVybiBiaW5uX3JlYWRfbmV4dF9wYWlyKEJJ Tk5fTUFQLCBpdGVyLCBwaWQsIE5VTEwsIHZhbHVlKTsKKysKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X25leHQoYmlubl9pdGVyICpp dGVyLCBjaGFyICpwa2V5LCBiaW5uICp2YWx1ZSkgeworKworKyAgcmV0dXJuIGJpbm5fcmVhZF9u ZXh0X3BhaXIoQklOTl9PQkpFQ1QsIGl0ZXIsIE5VTEwsIHBrZXksIHZhbHVlKTsKKysKKyt9Cisr CisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK2Jpbm4g KiBBUElFTlRSWSBiaW5uX2xpc3RfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIpIHsKKysgIGJp bm4gKnZhbHVlOworKworKyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlu bikpOworKworKyAgaWYgKGJpbm5fbGlzdF9uZXh0KGl0ZXIsIHZhbHVlKSA9PSBGQUxTRSkgewor KyAgICBmcmVlX2ZuKHZhbHVlKTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrCisrICB2YWx1 ZS0+YWxsb2NhdGVkID0gVFJVRTsKKysgIHJldHVybiB2YWx1ZTsKKysKKyt9CisrCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfbmV4dF92YWx1ZShi aW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKSB7CisrICBiaW5uICp2YWx1ZTsKKysKKysgIHZhbHVl ID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX21h cF9uZXh0KGl0ZXIsIHBpZCwgdmFsdWUpID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4odmFsdWUp OworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVF OworKyAgcmV0dXJuIHZhbHVlOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwor K2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF9uZXh0X3ZhbHVlKGJpbm5faXRlciAqaXRlciwg Y2hhciAqcGtleSkgeworKyAgYmlubiAqdmFsdWU7CisrCisrICB2YWx1ZSA9IChiaW5uICopIGJp bm5fbWFsbG9jKHNpemVvZihiaW5uKSk7CisrCisrICBpZiAoYmlubl9vYmplY3RfbmV4dChpdGVy LCBwa2V5LCB2YWx1ZSkgPT0gRkFMU0UpIHsKKysgICAgZnJlZV9mbih2YWx1ZSk7CisrICAgIHJl dHVybiBOVUxMOworKyAgfQorKworKyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7CisrICByZXR1 cm4gdmFsdWU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X3JlYWRfbmV4dChiaW5uX2l0 ZXIgKml0ZXIsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7CisrCisr ICBpZiAoYmlubl9saXN0X25leHQoaXRlciwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7 CisrICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7CisrICBpZiAocHNpemUpICpwc2l6 ZSA9IHZhbHVlLnNpemU7CisrI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorKyAgcmV0 dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7CisrI2Vsc2UKKysgIHJldHVybiB2YWx1ZS5wdHI7Cisr I2VuZGlmCisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrdm9pZCAqIEFQSUVO VFJZIGJpbm5fbWFwX3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkLCBpbnQgKnB0 eXBlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZhbHVlOworKworKyAgaWYgKGJpbm5fbWFwX25l eHQoaXRlciwgcGlkLCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4gTlVMTDsKKysgIGlmIChwdHlw ZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKKysgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6 ZTsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisrICByZXR1cm4gc3RvcmVfdmFs dWUoJnZhbHVlKTsKKysjZWxzZQorKyAgcmV0dXJuIHZhbHVlLnB0cjsKKysjZW5kaWYKKysKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9vYmpl Y3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSwgaW50ICpwdHlwZSwgaW50 ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1ZTsKKysKKysgIGlmIChiaW5uX29iamVjdF9uZXh0KGl0 ZXIsIHBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOworKyAgaWYgKHB0eXBlKSAq cHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwor KyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKysgIHJldHVybiBzdG9yZV92YWx1ZSgm dmFsdWUpOworKyNlbHNlCisrICByZXR1cm4gdmFsdWUucHRyOworKyNlbmRpZgorKworK30KKysK KysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqIEVYVEVOREVEIElOVEVS RkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysvKioqKioqIG5vbmUgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZSBjYWxsIHRoZSBm dW5jdGlvbnMgYmVsb3cgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKysKKytpbnQgQVBJRU5UUlkgYmlubl9nZXRfd3JpdGVfc3RvcmFn ZShpbnQgdHlwZSkgeworKyAgaW50IHN0b3JhZ2VfdHlwZTsKKysKKysgIHN3aXRjaCAodHlwZSkg eworKyAgICBjYXNlIEJJTk5fU0lOR0xFX1NUUjoKKysgICAgY2FzZSBCSU5OX0RPVUJMRV9TVFI6 CisrICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9TVFJJTkc7CisrCisrICAgIGNhc2UgQklOTl9C T09MOgorKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfTk9CWVRFUzsKKysKKysgICAgZGVmYXVs dDoKKysgICAgICBiaW5uX2dldF90eXBlX2luZm8odHlwZSwgJnN0b3JhZ2VfdHlwZSwgTlVMTCk7 CisrICAgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZTsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrCisraW50IEFQSUVOVFJZIGJpbm5fZ2V0X3JlYWRfc3Rv cmFnZShpbnQgdHlwZSkgeworKyAgaW50IHN0b3JhZ2VfdHlwZTsKKysKKysgIHN3aXRjaCAodHlw ZSkgeworKyNpZmRlZiBCSU5OX0VYVEVOREVECisrICAgIGNhc2UgQklOTl9TSU5HTEVfU1RSOgor KyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfRFdPUkQ7CisrICAgIGNhc2UgQklOTl9ET1VCTEVf U1RSOgorKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfUVdPUkQ7CisrI2VuZGlmCisrICAgIGNh c2UgQklOTl9CT09MOgorKyAgICBjYXNlIEJJTk5fVFJVRToKKysgICAgY2FzZSBCSU5OX0ZBTFNF OgorKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfRFdPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAg ICAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUsICZzdG9yYWdlX3R5cGUsIE5VTEwpOworKyAgICAg IHJldHVybiBzdG9yYWdlX3R5cGU7CisrICB9CisrCisrfQorKworKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIEdldFdyaXRlQ29udmVydGVkRGF0 YShpbnQgKnB0eXBlLCB2b2lkICoqcHB2YWx1ZSwgaW50ICpwc2l6ZSkgeworKyAgaW50ICB0eXBl OworKyAgZmxvYXQgIGYxOworKyAgZG91YmxlIGQxOworKyAgY2hhciBwc3RyWzEyOF07CisrCisr ICBVTlVTRUQocHN0cik7CisrICBVTlVTRUQoZDEpOworKyAgVU5VU0VEKGYxKTsKKysKKysgIHR5 cGUgPSAqcHR5cGU7CisrCisrICBpZiAoKnBwdmFsdWUgPT0gTlVMTCkgeworKyAgICBzd2l0Y2gg KHR5cGUpIHsKKysgICAgICBjYXNlIEJJTk5fTlVMTDoKKysgICAgICBjYXNlIEJJTk5fVFJVRToK KysgICAgICBjYXNlIEJJTk5fRkFMU0U6CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEJJ Tk5fU1RSSU5HOgorKyAgICAgIGNhc2UgQklOTl9CTE9COgorKyAgICAgICAgaWYgKCpwc2l6ZSA9 PSAwKSBicmVhazsKKysJLyogZmFsbCB0aHJvdWdoICovCisrICAgICAgZGVmYXVsdDoKKysgICAg ICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorKyAgfQorKworKyAgc3dpdGNoICh0eXBlKSB7Cisr I2lmZGVmIEJJTk5fRVhURU5ERUQKKysgICAgY2FzZSBCSU5OX1NJTkdMRToKKysgICAgICBmMSA9 ICoqKGZsb2F0KiopcHB2YWx1ZTsKKysgICAgICBkMSA9IGYxOyAgLy8gY29udmVydCBmcm9tIGZs b2F0ICgzMmJpdHMpIHRvIGRvdWJsZSAoNjRiaXRzKQorKyAgICAgIHR5cGUgPSBCSU5OX1NJTkdM RV9TVFI7CisrICAgICAgZ290byBjb252X2RvdWJsZTsKKysgICAgY2FzZSBCSU5OX0RPVUJMRToK KysgICAgICBkMSA9ICoqKGRvdWJsZSoqKXBwdmFsdWU7CisrICAgICAgdHlwZSA9IEJJTk5fRE9V QkxFX1NUUjsKKytjb252X2RvdWJsZToKKysgICAgICAvLyB0aGUgJyUuMTdlJyBpcyBtb3JlIHBy ZWNpc2UgdGhhbiB0aGUgJyVnJworKyAgICAgIHNucHJpbnRmKHBzdHIsIDEyNywgIiUuMTdlIiwg ZDEpOworKyAgICAgICpwcHZhbHVlID0gcHN0cjsKKysgICAgICAqcHR5cGUgPSB0eXBlOworKyAg ICAgIGJyZWFrOworKyNlbmRpZgorKyAgICBjYXNlIEJJTk5fREVDSU1BTDoKKysgICAgY2FzZSBC SU5OX0NVUlJFTkNZU1RSOgorKyAgICAgIC8qCisrICAgICAgaWYgKGJpbm5fbWFsbG9jX2V4dHB0 cigxMjgpID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysgICAgICBzbnByaW50ZihzcHRyLCAxMjcs ICIlRSIsICoqcHB2YWx1ZSk7CisrICAgICAgKnBwdmFsdWUgPSBzcHRyOworKyAgICAgICovCisr ICAgICAgcmV0dXJuIFRSVUU7ICAvLyEgdGVtcG9yYXJ5CisrICAgICAgYnJlYWs7CisrCisrICAg IGNhc2UgQklOTl9EQVRFOgorKyAgICBjYXNlIEJJTk5fREFURVRJTUU6CisrICAgIGNhc2UgQklO Tl9USU1FOgorKyAgICAgIHJldHVybiBUUlVFOyAgLy8hIHRlbXBvcmFyeQorKyAgICAgIGJyZWFr OworKworKyAgICBjYXNlIEJJTk5fQk9PTDoKKysgICAgICBpZiAoKiooKEJPT0wqKilwcHZhbHVl KSA9PSBGQUxTRSkgeworKyAgICAgICAgdHlwZSA9IEJJTk5fRkFMU0U7CisrICAgICAgfSBlbHNl IHsKKysgICAgICAgIHR5cGUgPSBCSU5OX1RSVUU7CisrICAgICAgfQorKyAgICAgICpwdHlwZSA9 IHR5cGU7CisrICAgICAgYnJlYWs7CisrCisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKysKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIGlu dCB0eXBlX2ZhbWlseShpbnQgdHlwZSkgIHsKKysKKysgIHN3aXRjaCAodHlwZSkgeworKyAgICBj YXNlIEJJTk5fTElTVDoKKysgICAgY2FzZSBCSU5OX01BUDoKKysgICAgY2FzZSBCSU5OX09CSkVD VDoKKysgICAgICByZXR1cm4gQklOTl9GQU1JTFlfQklOTjsKKysKKysgICAgY2FzZSBCSU5OX0lO VDg6CisrICAgIGNhc2UgQklOTl9JTlQxNjoKKysgICAgY2FzZSBCSU5OX0lOVDMyOgorKyAgICBj YXNlIEJJTk5fSU5UNjQ6CisrICAgIGNhc2UgQklOTl9VSU5UODoKKysgICAgY2FzZSBCSU5OX1VJ TlQxNjoKKysgICAgY2FzZSBCSU5OX1VJTlQzMjoKKysgICAgY2FzZSBCSU5OX1VJTlQ2NDoKKysg ICAgICByZXR1cm4gQklOTl9GQU1JTFlfSU5UOworKworKyAgICBjYXNlIEJJTk5fRkxPQVQzMjoK KysgICAgY2FzZSBCSU5OX0ZMT0FUNjQ6CisrICAgIC8vY2FzZSBCSU5OX1NJTkdMRToKKysgICAg Y2FzZSBCSU5OX1NJTkdMRV9TVFI6CisrICAgIC8vY2FzZSBCSU5OX0RPVUJMRToKKysgICAgY2Fz ZSBCSU5OX0RPVUJMRV9TVFI6CisrICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX0ZMT0FUOworKwor KyAgICBjYXNlIEJJTk5fU1RSSU5HOgorKyAgICBjYXNlIEJJTk5fSFRNTDoKKysgICAgY2FzZSBC SU5OX0NTUzoKKysgICAgY2FzZSBCSU5OX1hNTDoKKysgICAgY2FzZSBCSU5OX0pTT046CisrICAg IGNhc2UgQklOTl9KQVZBU0NSSVBUOgorKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9TVFJJTkc7 CisrCisrICAgIGNhc2UgQklOTl9CTE9COgorKyAgICBjYXNlIEJJTk5fSlBFRzoKKysgICAgY2Fz ZSBCSU5OX0dJRjoKKysgICAgY2FzZSBCSU5OX1BORzoKKysgICAgY2FzZSBCSU5OX0JNUDoKKysg ICAgICByZXR1cm4gQklOTl9GQU1JTFlfQkxPQjsKKysKKysgICAgY2FzZSBCSU5OX0RFQ0lNQUw6 CisrICAgIGNhc2UgQklOTl9DVVJSRU5DWToKKysgICAgY2FzZSBCSU5OX0RBVEU6CisrICAgIGNh c2UgQklOTl9USU1FOgorKyAgICBjYXNlIEJJTk5fREFURVRJTUU6CisrICAgICAgcmV0dXJuIEJJ Tk5fRkFNSUxZX1NUUklORzsKKysKKysgICAgY2FzZSBCSU5OX0JPT0w6CisrICAgICAgcmV0dXJu IEJJTk5fRkFNSUxZX0JPT0w7CisrCisrICAgIGNhc2UgQklOTl9OVUxMOgorKyAgICAgIHJldHVy biBCSU5OX0ZBTUlMWV9OVUxMOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIC8vIGlmIGl0IHdh c24ndCBmb3VuZAorKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9OT05FOworKyAgfQorKworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgaW50 IGludF90eXBlKGludCB0eXBlKSAgeworKworKyAgc3dpdGNoICh0eXBlKSB7CisrICBjYXNlIEJJ Tk5fSU5UODoKKysgIGNhc2UgQklOTl9JTlQxNjoKKysgIGNhc2UgQklOTl9JTlQzMjoKKysgIGNh c2UgQklOTl9JTlQ2NDoKKysgICAgcmV0dXJuIEJJTk5fU0lHTkVEX0lOVDsKKysKKysgIGNhc2Ug QklOTl9VSU5UODoKKysgIGNhc2UgQklOTl9VSU5UMTY6CisrICBjYXNlIEJJTk5fVUlOVDMyOgor KyAgY2FzZSBCSU5OX1VJTlQ2NDoKKysgICAgcmV0dXJuIEJJTk5fVU5TSUdORURfSU5UOworKwor KyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIDA7CisrICB9CisrCisrfQorKworKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIGNvcHlfcmF3X3ZhbHVl KGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgZGF0YV9zdG9yZSkgeworKwor KyAgc3dpdGNoIChkYXRhX3N0b3JlKSB7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgor KyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6CisrICAgICooKGNoYXIgKikg cGRlc3QpID0gKihjaGFyICopcHNvdXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RP UkFHRV9XT1JEOgorKyAgICAqKChzaG9ydCAqKSBwZGVzdCkgPSAqKHNob3J0ICopcHNvdXJjZTsK KysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9EV09SRDoKKysgICAgKigoaW50ICop IHBkZXN0KSA9ICooaW50ICopcHNvdXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RP UkFHRV9RV09SRDoKKysgICAgKigodWludDY0ICopIHBkZXN0KSA9ICoodWludDY0ICopcHNvdXJj ZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgorKyAgY2FzZSBCSU5O X1NUT1JBR0VfU1RSSU5HOgorKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgorKyAgICAq KChjaGFyICoqKSBwZGVzdCkgPSAoY2hhciAqKXBzb3VyY2U7CisrICAgIGJyZWFrOworKyAgZGVm YXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrCisr fQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBC T09MIGNvcHlfaW50X3ZhbHVlKGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQg c291cmNlX3R5cGUsIGludCBkZXN0X3R5cGUpIHsKKysgIHVpbnQ2NCB2dWludDY0ID0gMDsgaW50 NjQgdmludDY0ID0gMDsKKysKKysgIHN3aXRjaCAoc291cmNlX3R5cGUpIHsKKysgIGNhc2UgQklO Tl9JTlQ4OgorKyAgICB2aW50NjQgPSAqKHNpZ25lZCBjaGFyICopcHNvdXJjZTsKKysgICAgYnJl YWs7CisrICBjYXNlIEJJTk5fSU5UMTY6CisrICAgIHZpbnQ2NCA9ICooc2hvcnQgKilwc291cmNl OworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9JTlQzMjoKKysgICAgdmludDY0ID0gKihpbnQg Kilwc291cmNlOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9JTlQ2NDoKKysgICAgdmludDY0 ID0gKihpbnQ2NCAqKXBzb3VyY2U7CisrICAgIGJyZWFrOworKworKyAgY2FzZSBCSU5OX1VJTlQ4 OgorKyAgICB2dWludDY0ID0gKih1bnNpZ25lZCBjaGFyICopcHNvdXJjZTsKKysgICAgYnJlYWs7 CisrICBjYXNlIEJJTk5fVUlOVDE2OgorKyAgICB2dWludDY0ID0gKih1bnNpZ25lZCBzaG9ydCAq KXBzb3VyY2U7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1VJTlQzMjoKKysgICAgdnVpbnQ2 NCA9ICoodW5zaWduZWQgaW50ICopcHNvdXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5f VUlOVDY0OgorKyAgICB2dWludDY0ID0gKih1aW50NjQgKilwc291cmNlOworKyAgICBicmVhazsK KysKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysKKysgIC8vIGNv cHkgZnJvbSBpbnQ2NCB0byB1aW50NjQsIGlmIHBvc3NpYmxlCisrCisrICBpZiAoaW50X3R5cGUo c291cmNlX3R5cGUpID09IEJJTk5fVU5TSUdORURfSU5UICYmIGludF90eXBlKGRlc3RfdHlwZSkg PT0gQklOTl9TSUdORURfSU5UKSB7CisrICAgIGlmICh2dWludDY0ID4gSU5UNjRfTUFYKSByZXR1 cm4gRkFMU0U7CisrICAgIHZpbnQ2NCA9IHZ1aW50NjQ7CisrICB9IGVsc2UgaWYgKGludF90eXBl KHNvdXJjZV90eXBlKSA9PSBCSU5OX1NJR05FRF9JTlQgJiYgaW50X3R5cGUoZGVzdF90eXBlKSA9 PSBCSU5OX1VOU0lHTkVEX0lOVCkgeworKyAgICBpZiAodmludDY0IDwgMCkgcmV0dXJuIEZBTFNF OworKyAgICB2dWludDY0ID0gdmludDY0OworKyAgfQorKworKworKyAgc3dpdGNoIChkZXN0X3R5 cGUpIHsKKysgIGNhc2UgQklOTl9JTlQ4OgorKyAgICBpZiAodmludDY0IDwgSU5UOF9NSU4gfHwg dmludDY0ID4gSU5UOF9NQVgpIHJldHVybiBGQUxTRTsKKysgICAgKihzaWduZWQgY2hhciAqKXBk ZXN0ID0gKHNpZ25lZCBjaGFyKSB2aW50NjQ7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0lO VDE2OgorKyAgICBpZiAodmludDY0IDwgSU5UMTZfTUlOIHx8IHZpbnQ2NCA+IElOVDE2X01BWCkg cmV0dXJuIEZBTFNFOworKyAgICAqKHNob3J0ICopcGRlc3QgPSAoc2hvcnQpIHZpbnQ2NDsKKysg ICAgYnJlYWs7CisrICBjYXNlIEJJTk5fSU5UMzI6CisrICAgIGlmICh2aW50NjQgPCBJTlQzMl9N SU4gfHwgdmludDY0ID4gSU5UMzJfTUFYKSByZXR1cm4gRkFMU0U7CisrICAgICooaW50ICopcGRl c3QgPSAoaW50KSB2aW50NjQ7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0lOVDY0OgorKyAg ICAqKGludDY0ICopcGRlc3QgPSB2aW50NjQ7CisrICAgIGJyZWFrOworKworKyAgY2FzZSBCSU5O X1VJTlQ4OgorKyAgICBpZiAodnVpbnQ2NCA+IFVJTlQ4X01BWCkgcmV0dXJuIEZBTFNFOworKyAg ICAqKHVuc2lnbmVkIGNoYXIgKilwZGVzdCA9ICh1bnNpZ25lZCBjaGFyKSB2dWludDY0OworKyAg ICBicmVhazsKKysgIGNhc2UgQklOTl9VSU5UMTY6CisrICAgIGlmICh2dWludDY0ID4gVUlOVDE2 X01BWCkgcmV0dXJuIEZBTFNFOworKyAgICAqKHVuc2lnbmVkIHNob3J0ICopcGRlc3QgPSAodW5z aWduZWQgc2hvcnQpIHZ1aW50NjQ7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1VJTlQzMjoK KysgICAgaWYgKHZ1aW50NjQgPiBVSU5UMzJfTUFYKSByZXR1cm4gRkFMU0U7CisrICAgICoodW5z aWduZWQgaW50ICopcGRlc3QgPSAodW5zaWduZWQgaW50KSB2dWludDY0OworKyAgICBicmVhazsK KysgIGNhc2UgQklOTl9VSU5UNjQ6CisrICAgICoodWludDY0ICopcGRlc3QgPSB2dWludDY0Owor KyAgICBicmVhazsKKysKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysK KysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBjb3B5X2Zsb2F0X3ZhbHVlKGNvbnN0IHZvaWQgKnBz b3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291cmNlX3R5cGUsIGludCBkZXN0X3R5cGUpIHsKKysK KysgIHN3aXRjaCAoc291cmNlX3R5cGUpIHsKKysgIGNhc2UgQklOTl9GTE9BVDMyOgorKyAgICAq KGRvdWJsZSAqKXBkZXN0ID0gKihmbG9hdCAqKXBzb3VyY2U7CisrICAgIGJyZWFrOworKyAgY2Fz ZSBCSU5OX0ZMT0FUNjQ6CisrICAgICooZmxvYXQgKilwZGVzdCA9IChmbG9hdCkgKihkb3VibGUg Kilwc291cmNlOworKyAgICBicmVhazsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxTRTsK KysgIH0KKysKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdm9pZCB6ZXJvX3ZhbHVlKGNvbnN0IHZvaWQg KnB2YWx1ZSwgaW50IHR5cGUpIHsKKysgIC8vaW50IHNpemU9MDsKKysKKysgIHN3aXRjaCAoYmlu bl9nZXRfcmVhZF9zdG9yYWdlKHR5cGUpKSB7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVT OgorKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6CisrICAgICooKGNoYXIg KikgcHZhbHVlKSA9IDA7CisrICAgIC8vc2l6ZT0xOworKyAgICBicmVhazsKKysgIGNhc2UgQklO Tl9TVE9SQUdFX1dPUkQ6CisrICAgICooKHNob3J0ICopIHB2YWx1ZSkgPSAwOworKyAgICAvL3Np emU9MjsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9EV09SRDoKKysgICAgKigo aW50ICopIHB2YWx1ZSkgPSAwOworKyAgICAvL3NpemU9NDsKKysgICAgYnJlYWs7CisrICBjYXNl IEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgKigodWludDY0ICopIHB2YWx1ZSkgPSAwOworKyAg ICAvL3NpemU9ODsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgorKyAg Y2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVS OgorKyAgICAqKGNoYXIgKiopcHZhbHVlID0gTlVMTDsKKysgICAgYnJlYWs7CisrICB9CisrCisr ICAvL2lmIChzaXplPjApIG1lbXNldChwdmFsdWUsIDAsIHNpemUpOworKworK30KKysKKysvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBjb3B5X3Zh bHVlKHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291cmNlX3R5cGUsIGludCBkZXN0 X3R5cGUsIGludCBkYXRhX3N0b3JlKSB7CisrCisrICBpZiAodHlwZV9mYW1pbHkoc291cmNlX3R5 cGUpICE9IHR5cGVfZmFtaWx5KGRlc3RfdHlwZSkpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0 eXBlX2ZhbWlseShzb3VyY2VfdHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UICYmIHNvdXJjZV90eXBl ICE9IGRlc3RfdHlwZSkgeworKyAgICByZXR1cm4gY29weV9pbnRfdmFsdWUocHNvdXJjZSwgcGRl c3QsIHNvdXJjZV90eXBlLCBkZXN0X3R5cGUpOworKyAgfSBlbHNlIGlmICh0eXBlX2ZhbWlseShz b3VyY2VfdHlwZSkgPT0gQklOTl9GQU1JTFlfRkxPQVQgJiYgc291cmNlX3R5cGUgIT0gZGVzdF90 eXBlKSB7CisrICAgIHJldHVybiBjb3B5X2Zsb2F0X3ZhbHVlKHBzb3VyY2UsIHBkZXN0LCBzb3Vy Y2VfdHlwZSwgZGVzdF90eXBlKTsKKysgIH0gZWxzZSB7CisrICAgIHJldHVybiBjb3B5X3Jhd192 YWx1ZShwc291cmNlLCBwZGVzdCwgZGF0YV9zdG9yZSk7CisrICB9CisrCisrfQorKworKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKiogV1JJVEUgRlVOQ1RJT05TICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlu bl9saXN0X2FkZChiaW5uICpsaXN0LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkg eworKworKyAgaWYgKEdldFdyaXRlQ29udmVydGVkRGF0YSgmdHlwZSwgJnB2YWx1ZSwgJnNpemUp ID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gYmlubl9saXN0X2FkZF9yYXco bGlzdCwgdHlwZSwgcHZhbHVlLCBzaXplKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX21hcF9zZXQoYmlubiAqbWFwLCBp bnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7CisrCisrICBpZiAoR2V0 V3JpdGVDb252ZXJ0ZWREYXRhKCZ0eXBlLCAmcHZhbHVlLCAmc2l6ZSkgPT0gRkFMU0UpIHJldHVy biBGQUxTRTsKKysKKysgIHJldHVybiBiaW5uX21hcF9zZXRfcmF3KG1hcCwgaWQsIHR5cGUsIHB2 YWx1ZSwgc2l6ZSk7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor KworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAq a2V5LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgeworKworKyAgaWYgKEdldFdy aXRlQ29udmVydGVkRGF0YSgmdHlwZSwgJnB2YWx1ZSwgJnNpemUpID09IEZBTFNFKSByZXR1cm4g RkFMU0U7CisrCisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0X3JhdyhvYmosIGtleSwgdHlwZSwg cHZhbHVlLCBzaXplKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrLy8gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSB3cmFwcGVycworK0JPT0wgQVBJ RU5UUlkgYmlubl9hZGRfdmFsdWUoYmlubiAqaXRlbSwgaW50IGJpbm5fdHlwZSwgaW50IGlkLCBj aGFyICpuYW1lLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgeworKworKyAgc3dp dGNoIChiaW5uX3R5cGUpIHsKKysgICAgY2FzZSBCSU5OX0xJU1Q6CisrICAgICAgcmV0dXJuIGJp bm5fbGlzdF9hZGQoaXRlbSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKKysgICAgY2FzZSBCSU5OX01B UDoKKysgICAgICByZXR1cm4gYmlubl9tYXBfc2V0KGl0ZW0sIGlkLCB0eXBlLCBwdmFsdWUsIHNp emUpOworKyAgICBjYXNlIEJJTk5fT0JKRUNUOgorKyAgICAgIHJldHVybiBiaW5uX29iamVjdF9z ZXQoaXRlbSwgbmFtZSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKKysgICAgZGVmYXVsdDoKKysgICAg ICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5U UlkgYmlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlzdCwgYmlubiAqdmFsdWUpIHsKKysgIEJPT0wg cmV0dmFsOworKworKyAgcmV0dmFsID0gYmlubl9saXN0X2FkZF92YWx1ZShsaXN0LCB2YWx1ZSk7 CisrICBpZiAodmFsdWUpIGZyZWVfZm4odmFsdWUpOworKyAgcmV0dXJuIHJldHZhbDsKKysKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBi aW5uX21hcF9zZXRfbmV3KGJpbm4gKm1hcCwgaW50IGlkLCBiaW5uICp2YWx1ZSkgeworKyAgQk9P TCByZXR2YWw7CisrCisrICByZXR2YWwgPSBiaW5uX21hcF9zZXRfdmFsdWUobWFwLCBpZCwgdmFs dWUpOworKyAgaWYgKHZhbHVlKSBmcmVlX2ZuKHZhbHVlKTsKKysgIHJldHVybiByZXR2YWw7Cisr CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5U UlkgYmlubl9vYmplY3Rfc2V0X25ldyhiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgYmlubiAq dmFsdWUpIHsKKysgIEJPT0wgcmV0dmFsOworKworKyAgcmV0dmFsID0gYmlubl9vYmplY3Rfc2V0 X3ZhbHVlKG9iaiwga2V5LCB2YWx1ZSk7CisrICBpZiAodmFsdWUpIGZyZWVfZm4odmFsdWUpOwor KyAgcmV0dXJuIHJldHZhbDsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrLyoqKiBSRUFEIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbGlzdF92YWx1ZShjb25zdCB2 b2lkICpwdHIsIGludCBwb3MpIHsKKysgIGJpbm4gKnZhbHVlOworKworKyAgdmFsdWUgPSAoYmlu biAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJpbm5fbGlzdF9nZXRf dmFsdWUocHRyLCBwb3MsIHZhbHVlKSA9PSBGQUxTRSkgeworKyAgICBmcmVlX2ZuKHZhbHVlKTsK KysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrCisrICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsK KysgIHJldHVybiB2YWx1ZTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwg aW50IGlkKSB7CisrICBiaW5uICp2YWx1ZTsKKysKKysgIHZhbHVlID0gKGJpbm4gKikgYmlubl9t YWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX21hcF9nZXRfdmFsdWUocHRyLCBp ZCwgdmFsdWUpID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4odmFsdWUpOworKyAgICByZXR1cm4g TlVMTDsKKysgIH0KKysKKysgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOworKyAgcmV0dXJuIHZh bHVlOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytiaW5u ICogQVBJRU5UUlkgYmlubl9vYmplY3RfdmFsdWUoY29uc3Qgdm9pZCAqcHRyLCBjb25zdCBjaGFy ICprZXkpIHsKKysgIGJpbm4gKnZhbHVlOworKworKyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21h bGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJpbm5fb2JqZWN0X2dldF92YWx1ZShwdHIs IGtleSwgdmFsdWUpID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4odmFsdWUpOworKyAgICByZXR1 cm4gTlVMTDsKKysgIH0KKysKKysgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOworKyAgcmV0dXJu IHZhbHVlOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9yZWFkKGNvbnN0IHZvaWQgKmxp c3QsIGludCBwb3MsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7Cisr CisrICBpZiAoYmlubl9saXN0X2dldF92YWx1ZShsaXN0LCBwb3MsICZ2YWx1ZSkgPT0gRkFMU0Up IHJldHVybiBOVUxMOworKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYg KHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOworKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9F TkRJQU4KKysgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOworKyNlbHNlCisrICByZXR1cm4g dmFsdWUucHRyOworKyNlbmRpZgorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwor K3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9yZWFkKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBp bnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZhbHVlOworKworKyAgaWYgKGJpbm5f bWFwX2dldF92YWx1ZShtYXAsIGlkLCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4gTlVMTDsKKysg IGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKKysgIGlmIChwc2l6ZSkgKnBzaXplID0g dmFsdWUuc2l6ZTsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisrICByZXR1cm4g c3RvcmVfdmFsdWUoJnZhbHVlKTsKKysjZWxzZQorKyAgcmV0dXJuIHZhbHVlLnB0cjsKKysjZW5k aWYKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKyt2b2lkICogQVBJRU5UUlkg Ymlubl9vYmplY3RfcmVhZChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50ICpw dHlwZSwgaW50ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1ZTsKKysKKysgIGlmIChiaW5uX29iamVj dF9nZXRfdmFsdWUob2JqLCBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOworKyAg aWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2 YWx1ZS5zaXplOworKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKysgIHJldHVybiBz dG9yZV92YWx1ZSgmdmFsdWUpOworKyNlbHNlCisrICByZXR1cm4gdmFsdWUucHRyOworKyNlbmRp ZgorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0KGNvbnN0IHZvaWQgKnB0ciwgaW50IHBv cywgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1ZTsK KysgIGludCBzdG9yYWdlX3R5cGU7CisrCisrICBzdG9yYWdlX3R5cGUgPSBiaW5uX2dldF9yZWFk X3N0b3JhZ2UodHlwZSk7CisrICBpZiAoc3RvcmFnZV90eXBlICE9IEJJTk5fU1RPUkFHRV9OT0JZ VEVTICYmIHB2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICB6ZXJvX3ZhbHVlKHB2 YWx1ZSwgdHlwZSk7CisrCisrICBpZiAoYmlubl9saXN0X2dldF92YWx1ZShwdHIsIHBvcywgJnZh bHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKGNvcHlfdmFsdWUodmFsdWUu cHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJl dHVybiBGQUxTRTsKKysKKysgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKKysKKysg IHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wg QVBJRU5UUlkgYmlubl9tYXBfZ2V0KGNvbnN0IHZvaWQgKnB0ciwgaW50IGlkLCBpbnQgdHlwZSwg dm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZhbHVlOworKyAgaW50IHN0b3Jh Z2VfdHlwZTsKKysKKysgIHN0b3JhZ2VfdHlwZSA9IGJpbm5fZ2V0X3JlYWRfc3RvcmFnZSh0eXBl KTsKKysgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklOTl9TVE9SQUdFX05PQllURVMgJiYgcHZhbHVl ID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIHplcm9fdmFsdWUocHZhbHVlLCB0eXBlKTsK KysKKysgIGlmIChiaW5uX21hcF9nZXRfdmFsdWUocHRyLCBpZCwgJnZhbHVlKSA9PSBGQUxTRSkg cmV0dXJuIEZBTFNFOworKworKyAgaWYgKGNvcHlfdmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZh bHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysK KysgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKKysKKysgIHJldHVybiBUUlVFOwor KworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8vICAgaWYgKGJpbm5fb2JqZWN0 X2dldChvYmosICJtdWx0aXBsaWVyIiwgQklOTl9JTlQzMiwgJm11bHRpcGxpZXIsIE5VTEwpID09 IEZBTFNFKSB4eHg7CisrCisrQk9PTCBBUElFTlRSWSBiaW5uX29iamVjdF9nZXQoY29uc3Qgdm9p ZCAqcHRyLCBjb25zdCBjaGFyICprZXksIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCAqcHNp emUpIHsKKysgIGJpbm4gdmFsdWU7CisrICBpbnQgc3RvcmFnZV90eXBlOworKworKyAgc3RvcmFn ZV90eXBlID0gYmlubl9nZXRfcmVhZF9zdG9yYWdlKHR5cGUpOworKyAgaWYgKHN0b3JhZ2VfdHlw ZSAhPSBCSU5OX1NUT1JBR0VfTk9CWVRFUyAmJiBwdmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNF OworKworKyAgemVyb192YWx1ZShwdmFsdWUsIHR5cGUpOworKworKyAgaWYgKGJpbm5fb2JqZWN0 X2dldF92YWx1ZShwdHIsIGtleSwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKwor KyAgaWYgKGNvcHlfdmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0 b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChwc2l6ZSkgKnBz aXplID0gdmFsdWUuc2l6ZTsKKysKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLy8gdGhlc2UgZnVuY3Rp b25zIGJlbG93IG1heSBub3QgYmUgaW1wbGVtZW50ZWQgYXMgaW5saW5lIGZ1bmN0aW9ucywgYmVj YXVzZQorKy8vIHRoZXkgdXNlIGEgbG90IG9mIHNwYWNlLCBldmVuIGZvciB0aGUgdmFyaWFibGUu IHNvIHRoZXkgd2lsbCBiZSBleHBvcnRlZC4KKysKKysvLyBidXQgd2hhdCBhYm91dCB1c2luZyBh cyBzdGF0aWM/CisrLy8gICAgaXMgdGhlcmUgYW55IHByb2JsZW0gd2l0aCB3cmFwcGVycz8gY2Fu IHRoZXNlIHdyYXBwZXJzIGltcGxlbWVudCB0aGVzZSBmdW5jdGlvbnMgdXNpbmcgdGhlIGhlYWRl cj8KKysvLyAgICBpZiBhcyBzdGF0aWMsIHdpbGwgdGhleSBiZSBwcmVzZW50IGV2ZW4gb24gbW9k dWxlcyB0aGF0IGRvbid0IHVzZSB0aGUgZnVuY3Rpb25zPworKworK3NpZ25lZCBjaGFyIEFQSUVO VFJZIGJpbm5fbGlzdF9pbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIHNpZ25l ZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UOCwg JnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrc2hvcnQgQVBJRU5U UlkgYmlubl9saXN0X2ludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIHNob3J0 IHZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UMTYsICZ2YWx1 ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK2ludCBBUElFTlRSWSBiaW5u X2xpc3RfaW50MzIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgeworKyAgaW50IHZhbHVlOwor KworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7 CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK2ludDY0IEFQSUVOVFJZIGJpbm5fbGlzdF9p bnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7CisrICBpbnQ2NCB2YWx1ZTsKKysKKysg IGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDY0LCAmdmFsdWUsIE5VTEwpOworKwor KyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt1bnNpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbGlz dF91aW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7CisrICB1bnNpZ25lZCBjaGFyIHZh bHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDgsICZ2YWx1ZSwg TlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Vuc2lnbmVkIHNob3J0IEFQSUVO VFJZIGJpbm5fbGlzdF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgeworKyAgdW5z aWduZWQgc2hvcnQgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9V SU5UMTYsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Vuc2ln bmVkIGludCBBUElFTlRSWSBiaW5uX2xpc3RfdWludDMyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MpIHsKKysgIHVuc2lnbmVkIGludCB2YWx1ZTsKKysKKysgIGJpbm5fbGlzdF9nZXQobGlzdCwg cG9zLCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9 CisrCisrdWludDY0IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50NjQoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcykgeworKyAgdWludDY0IHZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBw b3MsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30K KysKKytmbG9hdCBBUElFTlRSWSBiaW5uX2xpc3RfZmxvYXQoY29uc3Qgdm9pZCAqbGlzdCwgaW50 IHBvcykgeworKyAgZmxvYXQgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywg QklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysK Kytkb3VibGUgQVBJRU5UUlkgYmlubl9saXN0X2RvdWJsZShjb25zdCB2b2lkICpsaXN0LCBpbnQg cG9zKSB7CisrICBkb3VibGUgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywg QklOTl9GTE9BVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysK KytCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9ib29sKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3Mp IHsKKysgIEJPT0wgdmFsdWUgPSBUUlVFOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3Ms IEJJTk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisr Qk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfbnVsbChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7 CisrCisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTlVMTCwgTlVMTCwg TlVMTCk7CisrCisrfQorKworK2NoYXIgKiBBUElFTlRSWSBiaW5uX2xpc3Rfc3RyKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MpIHsKKysgIGNoYXIgKnZhbHVlOworKworKyAgYmlubl9saXN0X2dl dChsaXN0LCBwb3MsIEJJTk5fU1RSSU5HLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZh bHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X2Jsb2IoY29uc3Qgdm9pZCAq bGlzdCwgaW50IHBvcywgaW50ICpwc2l6ZSkgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5u X2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9CTE9CLCAmdmFsdWUsIHBzaXplKTsKKysKKysgIHJl dHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9saXN0KGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIHZvaWQgKnZhbHVlOworKworKyAgYmlubl9saXN0 X2dldChsaXN0LCBwb3MsIEJJTk5fTElTVCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2 YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9tYXAoY29uc3Qgdm9pZCAq bGlzdCwgaW50IHBvcykgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxp c3QsIHBvcywgQklOTl9NQVAsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7Cisr fQorKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3Rfb2JqZWN0KGNvbnN0IHZvaWQgKmxpc3Qs IGludCBwb3MpIHsKKysgIHZvaWQgKnZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBw b3MsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKworK3NpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5f bWFwX2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIHNpZ25lZCBjaGFyIHZhbHVl OworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UOCwgJnZhbHVlLCBOVUxMKTsK KysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrc2hvcnQgQVBJRU5UUlkgYmlubl9tYXBfaW50 MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIHNob3J0IHZhbHVlOworKworKyAgYmlu bl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMTYsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1 cm4gdmFsdWU7CisrfQorKworK2ludCBBUElFTlRSWSBiaW5uX21hcF9pbnQzMihjb25zdCB2b2lk ICptYXAsIGludCBpZCkgeworKyAgaW50IHZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwg aWQsIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQor KworK2ludDY0IEFQSUVOVFJZIGJpbm5fbWFwX2ludDY0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlk KSB7CisrICBpbnQ2NCB2YWx1ZTsKKysKKysgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lO VDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt1bnNpZ25l ZCBjaGFyIEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7 CisrICB1bnNpZ25lZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJ Tk5fVUlOVDgsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Vu c2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQxNihjb25zdCB2b2lkICptYXAsIGlu dCBpZCkgeworKyAgdW5zaWduZWQgc2hvcnQgdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFw LCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7Cisr fQorKworK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX21hcF91aW50MzIoY29uc3Qgdm9pZCAq bWFwLCBpbnQgaWQpIHsKKysgIHVuc2lnbmVkIGludCB2YWx1ZTsKKysKKysgIGJpbm5fbWFwX2dl dChtYXAsIGlkLCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1 ZTsKKyt9CisrCisrdWludDY0IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ2NChjb25zdCB2b2lkICpt YXAsIGludCBpZCkgeworKyAgdWludDY0IHZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwg aWQsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30K KysKKytmbG9hdCBBUElFTlRSWSBiaW5uX21hcF9mbG9hdChjb25zdCB2b2lkICptYXAsIGludCBp ZCkgeworKyAgZmxvYXQgdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9G TE9BVDMyLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytkb3Vi bGUgQVBJRU5UUlkgYmlubl9tYXBfZG91YmxlKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Cisr ICBkb3VibGUgdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9GTE9BVDY0 LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytCT09MIEFQSUVO VFJZIGJpbm5fbWFwX2Jvb2woY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIEJPT0wgdmFs dWUgPSBUUlVFOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fQk9PTCwgJnZhbHVl LCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrQk9PTCBBUElFTlRSWSBiaW5u X21hcF9udWxsKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7CisrCisrICByZXR1cm4gYmlubl9t YXBfZ2V0KG1hcCwgaWQsIEJJTk5fTlVMTCwgTlVMTCwgTlVMTCk7CisrCisrfQorKworK2NoYXIg KiBBUElFTlRSWSBiaW5uX21hcF9zdHIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIGNo YXIgKnZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fU1RSSU5HLCAmdmFs dWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkg Ymlubl9tYXBfYmxvYihjb25zdCB2b2lkICptYXAsIGludCBpZCwgaW50ICpwc2l6ZSkgeworKyAg dm9pZCAqdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9CTE9CLCAmdmFs dWUsIHBzaXplKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZ IGJpbm5fbWFwX2xpc3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIHZvaWQgKnZhbHVl OworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTElTVCwgJnZhbHVlLCBOVUxMKTsK KysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX21h cChjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5u X21hcF9nZXQobWFwLCBpZCwgQklOTl9NQVAsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4g dmFsdWU7CisrfQorKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9vYmplY3QoY29uc3Qgdm9p ZCAqbWFwLCBpbnQgaWQpIHsKKysgIHZvaWQgKnZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1h cCwgaWQsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOwor K30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3NpZ25lZCBjaGFyIEFQSUVOVFJZIGJp bm5fb2JqZWN0X2ludDgoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIHNp Z25lZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0lO VDgsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Nob3J0IEFQ SUVOVFJZIGJpbm5fb2JqZWN0X2ludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 KSB7CisrICBzaG9ydCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9JTlQxNiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisraW50 IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDMyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAq a2V5KSB7CisrICBpbnQgdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJ Tk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK2lu dDY0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5KSB7CisrICBpbnQ2NCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtl eSwgQklOTl9JTlQ2NCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9Cisr CisrdW5zaWduZWQgY2hhciBBUElFTlRSWSBiaW5uX29iamVjdF91aW50OChjb25zdCB2b2lkICpv YmosIGNvbnN0IGNoYXIgKmtleSkgeworKyAgdW5zaWduZWQgY2hhciB2YWx1ZTsKKysKKysgIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UOCwgJnZhbHVlLCBOVUxMKTsKKysKKysg IHJldHVybiB2YWx1ZTsKKyt9CisrCisrdW5zaWduZWQgc2hvcnQgQVBJRU5UUlkgYmlubl9vYmpl Y3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICB1bnNpZ25l ZCBzaG9ydCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5U MTYsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Vuc2lnbmVk IGludCBBUElFTlRSWSBiaW5uX29iamVjdF91aW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBj aGFyICprZXkpIHsKKysgIHVuc2lnbmVkIGludCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dl dChvYmosIGtleSwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFs dWU7CisrfQorKworK3VpbnQ2NCBBUElFTlRSWSBiaW5uX29iamVjdF91aW50NjQoY29uc3Qgdm9p ZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIHVpbnQ2NCB2YWx1ZTsKKysKKysgIGJpbm5f b2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UNjQsICZ2YWx1ZSwgTlVMTCk7CisrCisrICBy ZXR1cm4gdmFsdWU7CisrfQorKworK2Zsb2F0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2Zsb2F0KGNv bnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICBmbG9hdCB2YWx1ZTsKKysKKysg IGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOwor KworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytkb3VibGUgQVBJRU5UUlkgYmlubl9vYmplY3Rf ZG91YmxlKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICBkb3VibGUgdmFs dWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fRkxPQVQ2NCwgJnZhbHVl LCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrQk9PTCBBUElFTlRSWSBiaW5u X29iamVjdF9ib29sKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICBCT09M IHZhbHVlID0gVFJVRTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9CT09M LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytCT09MIEFQSUVO VFJZIGJpbm5fb2JqZWN0X251bGwoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsK KysKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fTlVMTCwgTlVMTCwg TlVMTCk7CisrCisrfQorKworK2NoYXIgKiBBUElFTlRSWSBiaW5uX29iamVjdF9zdHIoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIGNoYXIgKnZhbHVlOworKworKyAgYmlu bl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgJnZhbHVlLCBOVUxMKTsKKysKKysg IHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2Jsb2Io Y29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGludCAqcHNpemUpIHsKKysgIHZvaWQg KnZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JMT0IsICZ2YWx1 ZSwgcHNpemUpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkg Ymlubl9vYmplY3RfbGlzdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgeworKyAg dm9pZCAqdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fTElTVCwg JnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVO VFJZIGJpbm5fb2JqZWN0X21hcChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewor KyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fTUFQ LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJ RU5UUlkgYmlubl9vYmplY3Rfb2JqZWN0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 KSB7CisrICB2b2lkICp2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9PQkpFQ1QsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKworK0JJTk5fUFJJVkFURSBiaW5uICogYmlubl9hbGxvY19pdGVtKCkgeworKyAgYmlu biAqaXRlbTsKKysgIGl0ZW0gPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOwor KyAgaWYgKGl0ZW0pIHsKKysgICAgbWVtc2V0KGl0ZW0sIDAsIHNpemVvZihiaW5uKSk7CisrICAg IGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7CisrICAgIGl0ZW0tPmFsbG9jYXRlZCA9IFRSVUU7 CisrICAgIC8vaXRlbS0+d3JpdGFibGUgPSBGQUxTRTsgIC0tIGFscmVhZHkgemVyb2VkCisrICB9 CisrICByZXR1cm4gaXRlbTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fdmFsdWUoaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwg aW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgZnJlZWZuKSB7CisrICBpbnQgc3RvcmFnZV90eXBlOwor KyAgYmlubiAqaXRlbSA9IGJpbm5fYWxsb2NfaXRlbSgpOworKyAgaWYgKGl0ZW0pIHsKKysgICAg aXRlbS0+dHlwZSA9IHR5cGU7CisrICAgIGJpbm5fZ2V0X3R5cGVfaW5mbyh0eXBlLCAmc3RvcmFn ZV90eXBlLCBOVUxMKTsKKysgICAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKKysgICAgY2FzZSBC SU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgICBicmVhazsKKysgICAgY2FzZSBCSU5OX1NUT1JB R0VfU1RSSU5HOgorKyAgICAgIGlmIChzaXplID09IDApIHNpemUgPSBzdHJsZW4oKGNoYXIqKXB2 YWx1ZSkgKyAxOworKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworKyAgICBjYXNlIEJJTk5fU1RP UkFHRV9CTE9COgorKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6CisrICAgICAgaWYg KGZyZWVmbiA9PSBCSU5OX1RSQU5TSUVOVCkgeworKyAgICAgICAgaXRlbS0+cHRyID0gYmlubl9t ZW1kdXAocHZhbHVlLCBzaXplKTsKKysgICAgICAgIGlmIChpdGVtLT5wdHIgPT0gTlVMTCkgewor KyAgICAgICAgICBmcmVlX2ZuKGl0ZW0pOworKyAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAg ICAgIH0KKysgICAgICAgIGl0ZW0tPmZyZWVmbiA9IGZyZWVfZm47CisrICAgICAgICBpZiAoc3Rv cmFnZV90eXBlID09IEJJTk5fU1RPUkFHRV9TVFJJTkcpIHNpemUtLTsKKysgICAgICB9IGVsc2Ug eworKyAgICAgICAgaXRlbS0+cHRyID0gcHZhbHVlOworKyAgICAgICAgaXRlbS0+ZnJlZWZuID0g ZnJlZWZuOworKyAgICAgIH0KKysgICAgICBpdGVtLT5zaXplID0gc2l6ZTsKKysgICAgICBicmVh azsKKysgICAgZGVmYXVsdDoKKysgICAgICBpdGVtLT5wdHIgPSAmaXRlbS0+dmludDMyOworKyAg ICAgIGNvcHlfcmF3X3ZhbHVlKHB2YWx1ZSwgaXRlbS0+cHRyLCBzdG9yYWdlX3R5cGUpOworKyAg ICB9CisrICB9CisrICByZXR1cm4gaXRlbTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX3NldF9zdHJpbmcoYmlubiAqaXRlbSwg Y2hhciAqc3RyLCBiaW5uX21lbV9mcmVlIHBmcmVlKSB7CisrCisrICBpZiAoaXRlbSA9PSBOVUxM IHx8IHN0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAocGZyZWUgPT0gQklOTl9U UkFOU0lFTlQpIHsKKysgICAgaXRlbS0+cHRyID0gYmlubl9tZW1kdXAoc3RyLCBzdHJsZW4oc3Ry KSArIDEpOworKyAgICBpZiAoaXRlbS0+cHRyID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysgICAg aXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKKysgIH0gZWxzZSB7CisrICAgIGl0ZW0tPnB0ciA9IHN0 cjsKKysgICAgaXRlbS0+ZnJlZWZuID0gcGZyZWU7CisrICB9CisrCisrICBpdGVtLT50eXBlID0g QklOTl9TVFJJTkc7CisrICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX3NldF9ibG9iKGJpbm4gKml0 ZW0sIHZvaWQgKnB0ciwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgcGZyZWUpIHsKKysKKysgIGlm IChpdGVtID09IE5VTEwgfHwgcHRyID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChw ZnJlZSA9PSBCSU5OX1RSQU5TSUVOVCkgeworKyAgICBpdGVtLT5wdHIgPSBiaW5uX21lbWR1cChw dHIsIHNpemUpOworKyAgICBpZiAoaXRlbS0+cHRyID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysg ICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKKysgIH0gZWxzZSB7CisrICAgIGl0ZW0tPnB0ciA9 IHB0cjsKKysgICAgaXRlbS0+ZnJlZWZuID0gcGZyZWU7CisrICB9CisrCisrICBpdGVtLT50eXBl ID0gQklOTl9CTE9COworKyAgaXRlbS0+c2l6ZSA9IHNpemU7CisrICByZXR1cm4gVFJVRTsKKysK Kyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBSRUFEIENPTlZF UlRFRCBWQUxVRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2lm ZGVmIF9NU0NfVkVSCisrI2RlZmluZSBhdG9pNjQgX2F0b2k2NAorKyNlbHNlCisraW50NjQgYXRv aTY0KGNoYXIgKnN0cikgeworKyAgaW50NjQgcmV0dmFsOworKyAgaW50IGlzX25lZ2F0aXZlPTA7 CisrCisrICBpZiAoKnN0ciA9PSAnLScpIHsKKysgICAgaXNfbmVnYXRpdmUgPSAxOworKyAgICBz dHIrKzsKKysgIH0KKysgIHJldHZhbCA9IDA7CisrICBmb3IgKDsgKnN0cjsgc3RyKyspIHsKKysg ICAgcmV0dmFsID0gMTAgKiByZXR2YWwgKyAoKnN0ciAtICcwJyk7CisrICB9CisrICBpZiAoaXNf bmVnYXRpdmUpIHJldHZhbCAqPSAtMTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKyNlbmRpZgor KworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBpc19pbnRl Z2VyKGNoYXIgKnApIHsKKysgIEJPT0wgcmV0dmFsOworKworKyAgaWYgKHAgPT0gTlVMTCkgcmV0 dXJuIEZBTFNFOworKyAgaWYgKCpwID09ICctJykgcCsrOworKyAgaWYgKCpwID09IDApIHJldHVy biBGQUxTRTsKKysKKysgIHJldHZhbCA9IFRSVUU7CisrCisrICBmb3IgKDsgKnA7IHArKykgewor KyAgICBpZiAoICgqcCA8ICcwJyB8fCAqcCA+ICc5JykgKSB7CisrICAgICAgcmV0dmFsID0gRkFM U0U7CisrICAgIH0KKysgIH0KKysKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBpc19mbG9hdChjaGFyICpwKSB7 CisrICBCT09MIHJldHZhbCwgbnVtYmVyX2ZvdW5kPUZBTFNFOworKworKyAgaWYgKHAgPT0gTlVM TCkgcmV0dXJuIEZBTFNFOworKyAgaWYgKCpwID09ICctJykgcCsrOworKyAgaWYgKCpwID09IDAp IHJldHVybiBGQUxTRTsKKysKKysgIHJldHZhbCA9IFRSVUU7CisrCisrICBmb3IgKDsgKnA7IHAr KykgeworKyAgICBpZiAoKnAgPT0gJy4nIHx8ICpwID09ICcsJykgeworKyAgICAgIGlmICghbnVt YmVyX2ZvdW5kKSByZXR2YWwgPSBGQUxTRTsKKysgICAgfSBlbHNlIGlmICggKnAgPj0gJzAnICYm ICpwIDw9ICc5JyApIHsKKysgICAgICBudW1iZXJfZm91bmQgPSBUUlVFOworKyAgICB9IGVsc2Ug eworKyAgICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorKyAgfQorKworKyAgcmV0dXJuIHJldHZh bDsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklW QVRFIEJPT0wgaXNfYm9vbF9zdHIoY2hhciAqc3RyLCBCT09MICpwYm9vbCkgeworKyAgaW50NjQg IHZpbnQ7CisrICBkb3VibGUgdmRvdWJsZTsKKysKKysgIGlmIChzdHIgPT0gTlVMTCB8fCBwYm9v bCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAoc3RyaWNtcChzdHIsICJ0cnVlIikg PT0gMCkgZ290byBsb2NfdHJ1ZTsKKysgIGlmIChzdHJpY21wKHN0ciwgInllcyIpID09IDApIGdv dG8gbG9jX3RydWU7CisrICBpZiAoc3RyaWNtcChzdHIsICJvbiIpID09IDApIGdvdG8gbG9jX3Ry dWU7CisrICAvL2lmIChzdHJpY21wKHN0ciwgIjEiKSA9PSAwKSBnb3RvIGxvY190cnVlOworKwor KyAgaWYgKHN0cmljbXAoc3RyLCAiZmFsc2UiKSA9PSAwKSBnb3RvIGxvY19mYWxzZTsKKysgIGlm IChzdHJpY21wKHN0ciwgIm5vIikgPT0gMCkgZ290byBsb2NfZmFsc2U7CisrICBpZiAoc3RyaWNt cChzdHIsICJvZmYiKSA9PSAwKSBnb3RvIGxvY19mYWxzZTsKKysgIC8vaWYgKHN0cmljbXAoc3Ry LCAiMCIpID09IDApIGdvdG8gbG9jX2ZhbHNlOworKworKyAgaWYgKGlzX2ludGVnZXIoc3RyKSkg eworKyAgICB2aW50ID0gYXRvaTY0KHN0cik7CisrICAgICpwYm9vbCA9ICh2aW50ICE9IDApID8g VFJVRSA6IEZBTFNFOworKyAgICByZXR1cm4gVFJVRTsKKysgIH0gZWxzZSBpZiAoaXNfZmxvYXQo c3RyKSkgeworKyAgICB2ZG91YmxlID0gYXRvZihzdHIpOworKyAgICAqcGJvb2wgPSAodmRvdWJs ZSAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKKysgICAgcmV0dXJuIFRSVUU7CisrICB9CisrCisrICBy ZXR1cm4gRkFMU0U7CisrCisrbG9jX3RydWU6CisrICAqcGJvb2wgPSBUUlVFOworKyAgcmV0dXJu IFRSVUU7CisrCisrbG9jX2ZhbHNlOgorKyAgKnBib29sID0gRkFMU0U7CisrICByZXR1cm4gVFJV RTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBB UElFTlRSWSBiaW5uX2dldF9pbnQzMihiaW5uICp2YWx1ZSwgaW50ICpwaW50KSB7CisrCisrICBp ZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlm ICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7CisrICAgIHJl dHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCBwaW50LCB2YWx1ZS0+dHlwZSwgQklOTl9J TlQzMik7CisrICB9CisrCisrICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7CisrICBjYXNlIEJJTk5f RkxPQVQ6CisrICAgIGlmICh2YWx1ZS0+dmZsb2F0IDwgKGZsb2F0KUlOVDMyX01JTiB8fCB2YWx1 ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDMyX01BWCkgcmV0dXJuIEZBTFNFOworKyAgICAqcGludCA9 IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9ET1VC TEU6CisrICAgIGlmICh2YWx1ZS0+dmRvdWJsZSA8IChkb3VibGUpSU5UMzJfTUlOIHx8IHZhbHVl LT52ZG91YmxlID4gKGRvdWJsZSlJTlQzMl9NQVgpIHJldHVybiBGQUxTRTsKKysgICAgKnBpbnQg PSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NU UklORzoKKysgICAgaWYgKGlzX2ludGVnZXIoKGNoYXIqKXZhbHVlLT5wdHIpKQorKyAgICAgICpw aW50ID0gYXRvaSgoY2hhciopdmFsdWUtPnB0cik7CisrICAgIGVsc2UgaWYgKGlzX2Zsb2F0KChj aGFyKil2YWx1ZS0+cHRyKSkKKysgICAgICAqcGludCA9IHJvdW5kdmFsKGF0b2YoKGNoYXIqKXZh bHVlLT5wdHIpKTsKKysgICAgZWxzZQorKyAgICAgIHJldHVybiBGQUxTRTsKKysgICAgYnJlYWs7 CisrICBjYXNlIEJJTk5fQk9PTDoKKysgICAgKnBpbnQgPSB2YWx1ZS0+dmJvb2w7CisrICAgIGJy ZWFrOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKworKyAgcmV0dXJu IFRSVUU7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wg QVBJRU5UUlkgYmlubl9nZXRfaW50NjQoYmlubiAqdmFsdWUsIGludDY0ICpwaW50KSB7CisrCisr ICBpZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysg IGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7CisrICAg IHJldHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCBwaW50LCB2YWx1ZS0+dHlwZSwgQklO Tl9JTlQ2NCk7CisrICB9CisrCisrICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7CisrICBjYXNlIEJJ Tk5fRkxPQVQ6CisrICAgIGlmICh2YWx1ZS0+dmZsb2F0IDwgKGZsb2F0KUlOVDY0X01JTiB8fCB2 YWx1ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDY0X01BWCkgcmV0dXJuIEZBTFNFOworKyAgICAqcGlu dCA9IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9E T1VCTEU6CisrICAgIGlmICh2YWx1ZS0+dmRvdWJsZSA8IChkb3VibGUpSU5UNjRfTUlOIHx8IHZh bHVlLT52ZG91YmxlID4gKGRvdWJsZSlJTlQ2NF9NQVgpIHJldHVybiBGQUxTRTsKKysgICAgKnBp bnQgPSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5O X1NUUklORzoKKysgICAgaWYgKGlzX2ludGVnZXIoKGNoYXIqKXZhbHVlLT5wdHIpKQorKyAgICAg ICpwaW50ID0gYXRvaTY0KChjaGFyKil2YWx1ZS0+cHRyKTsKKysgICAgZWxzZSBpZiAoaXNfZmxv YXQoKGNoYXIqKXZhbHVlLT5wdHIpKQorKyAgICAgICpwaW50ID0gcm91bmR2YWwoYXRvZigoY2hh ciopdmFsdWUtPnB0cikpOworKyAgICBlbHNlCisrICAgICAgcmV0dXJuIEZBTFNFOworKyAgICBi cmVhazsKKysgIGNhc2UgQklOTl9CT09MOgorKyAgICAqcGludCA9IHZhbHVlLT52Ym9vbDsKKysg ICAgYnJlYWs7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICBy ZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisr Qk9PTCBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUoYmlubiAqdmFsdWUsIGRvdWJsZSAqcGZsb2F0 KSB7CisrICBpbnQ2NCB2aW50OworKworKyAgaWYgKHZhbHVlID09IE5VTEwgfHwgcGZsb2F0ID09 IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkg PT0gQklOTl9GQU1JTFlfSU5UKSB7CisrICAgIGlmIChjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRy LCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5UNjQpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7 CisrICAgICpwZmxvYXQgPSAoZG91YmxlKSB2aW50OworKyAgICByZXR1cm4gVFJVRTsKKysgIH0K KysKKysgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKKysgIGNhc2UgQklOTl9GTE9BVDoKKysgICAg KnBmbG9hdCA9IHZhbHVlLT52ZmxvYXQ7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0RPVUJM RToKKysgICAgKnBmbG9hdCA9IHZhbHVlLT52ZG91YmxlOworKyAgICBicmVhazsKKysgIGNhc2Ug QklOTl9TVFJJTkc6CisrICAgIGlmIChpc19pbnRlZ2VyKChjaGFyKil2YWx1ZS0+cHRyKSkKKysg ICAgICAqcGZsb2F0ID0gKGRvdWJsZSkgYXRvaTY0KChjaGFyKil2YWx1ZS0+cHRyKTsKKysgICAg ZWxzZSBpZiAoaXNfZmxvYXQoKGNoYXIqKXZhbHVlLT5wdHIpKQorKyAgICAgICpwZmxvYXQgPSBh dG9mKChjaGFyKil2YWx1ZS0+cHRyKTsKKysgICAgZWxzZQorKyAgICAgIHJldHVybiBGQUxTRTsK KysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fQk9PTDoKKysgICAgKnBmbG9hdCA9IHZhbHVlLT52 Ym9vbDsKKysgICAgYnJlYWs7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gRkFMU0U7CisrICB9 CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2dldF9ib29sKGJpbm4gKnZhbHVlLCBCT09MICpw Ym9vbCkgeworKyAgaW50NjQgdmludDsKKysKKysgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHBib29s ID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlw ZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7CisrICAgIGlmIChjb3B5X2ludF92YWx1ZSh2YWx1ZS0+ cHRyLCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5UNjQpID09IEZBTFNFKSByZXR1cm4gRkFM U0U7CisrICAgICpwYm9vbCA9ICh2aW50ICE9IDApID8gVFJVRSA6IEZBTFNFOworKyAgICByZXR1 cm4gVFJVRTsKKysgIH0KKysKKysgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKKysgIGNhc2UgQklO Tl9CT09MOgorKyAgICAqcGJvb2wgPSB2YWx1ZS0+dmJvb2w7CisrICAgIGJyZWFrOworKyAgY2Fz ZSBCSU5OX0ZMT0FUOgorKyAgICAqcGJvb2wgPSAodmFsdWUtPnZmbG9hdCAhPSAwKSA/IFRSVUUg OiBGQUxTRTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fRE9VQkxFOgorKyAgICAqcGJvb2wg PSAodmFsdWUtPnZkb3VibGUgIT0gMCkgPyBUUlVFIDogRkFMU0U7CisrICAgIGJyZWFrOworKyAg Y2FzZSBCSU5OX1NUUklORzoKKysgICAgcmV0dXJuIGlzX2Jvb2xfc3RyKChjaGFyKil2YWx1ZS0+ cHRyLCBwYm9vbCk7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisr ICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrY2hhciAqIEFQSUVOVFJZIGJpbm5fZ2V0X3N0cihiaW5uICp2YWx1ZSkgeworKyAgaW50NjQg dmludDsKKysgIGNoYXIgYnVmWzEyOF07CisrCisrICBpZiAodmFsdWUgPT0gTlVMTCkgcmV0dXJu IE5VTEw7CisrCisrICBpZiAodHlwZV9mYW1pbHkodmFsdWUtPnR5cGUpID09IEJJTk5fRkFNSUxZ X0lOVCkgeworKyAgICBpZiAoY29weV9pbnRfdmFsdWUodmFsdWUtPnB0ciwgJnZpbnQsIHZhbHVl LT50eXBlLCBCSU5OX0lOVDY0KSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7CisrICAgIHNucHJpbnRm KGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiUiIElOVDY0X0ZPUk1BVCwgdmludCk7CisrICAgIGdvdG8gbG9j X2NvbnZlcnRfdmFsdWU7CisrICB9CisrCisrICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7CisrICBj YXNlIEJJTk5fRkxPQVQ6CisrICAgIHZhbHVlLT52ZG91YmxlID0gdmFsdWUtPnZmbG9hdDsKKysg ICAgLyogZmFsbCB0aHJvdWdoICovCisrICBjYXNlIEJJTk5fRE9VQkxFOgorKyAgICBzbnByaW50 ZihidWYsIHNpemVvZiBidWYsICIlZyIsIHZhbHVlLT52ZG91YmxlKTsKKysgICAgZ290byBsb2Nf Y29udmVydF92YWx1ZTsKKysgIGNhc2UgQklOTl9TVFJJTkc6CisrICAgIHJldHVybiAoY2hhciop IHZhbHVlLT5wdHI7CisrICBjYXNlIEJJTk5fQk9PTDoKKysgICAgaWYgKHZhbHVlLT52Ym9vbCkK KysgICAgICBzdHJjcHkoYnVmLCAidHJ1ZSIpOworKyAgICBlbHNlCisrICAgICAgc3RyY3B5KGJ1 ZiwgImZhbHNlIik7CisrICAgIGdvdG8gbG9jX2NvbnZlcnRfdmFsdWU7CisrICB9CisrCisrICBy ZXR1cm4gTlVMTDsKKysKKytsb2NfY29udmVydF92YWx1ZToKKysKKysgIC8vdmFsdWUtPnZpbnQ2 NCA9IDA7CisrICB2YWx1ZS0+cHRyID0gc3RyZHVwKGJ1Zik7CisrICBpZiAodmFsdWUtPnB0ciA9 PSBOVUxMKSByZXR1cm4gTlVMTDsKKysgIHZhbHVlLT5mcmVlZm4gPSBmcmVlOworKyAgdmFsdWUt PnR5cGUgPSBCSU5OX1NUUklORzsKKysgIHJldHVybiAoY2hhciopIHZhbHVlLT5wdHI7CisrCisr fQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKiogR0VORVJBTCBGVU5D VElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wg QVBJRU5UUlkgYmlubl9pc19jb250YWluZXIoYmlubiAqaXRlbSkgeworKworKyAgaWYgKGl0ZW0g PT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgc3dpdGNoIChpdGVtLT50eXBlKSB7CisrICBj YXNlIEJJTk5fTElTVDoKKysgIGNhc2UgQklOTl9NQVA6CisrICBjYXNlIEJJTk5fT0JKRUNUOgor KyAgICByZXR1cm4gVFJVRTsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxTRTsKKysgIH0K KysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkaWZmIC1OdXIgb3Bl bnNzaC0xMC41cDEub3JpZy9iaW5uLmggb3BlbnNzaC0xMC41cDEvYmlubi5oCistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9iaW5uLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NoLTEwLjVwMS9iaW5uLmgJMjAyNi0wOS0yMSAwNzowNjo1OS44ODA4MTQ1ODMg KzAyMDAKK0BAIC0wLDAgKzEsOTQ1IEBACisrCisrLy8gVE8gRU5BQkxFIElOTElORSBGVU5DVElP TlM6CisrLy8gICBPTiBNU1ZDOiBlbmFibGUgdGhlICdJbmxpbmUgRnVuY3Rpb24gRXhwYW5zaW9u JyAoL09iMikgY29tcGlsZXIgb3B0aW9uLCBhbmQgbWF5YmUgdGhlCisrLy8gICAgICAgICAgICAn V2hvbGUgUHJvZ3JhbSBPcHRpbWl0YXppb24nICgvR0wpLCB0aGF0IHJlcXVpcmVzIHRoZQorKy8v ICAgICAgICAgICAgJ0xpbmsgVGltZSBDb2RlIEdlbmVyYXRpb24nICgvTFRDRykgbGlua2VyIG9w dGlvbiB0byBiZSBlbmFibGVkIHRvbworKworKyNpZm5kZWYgQklOTl9ICisrI2RlZmluZSBCSU5O X0gKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysj ZGVmaW5lIEJJTk5fVkVSU0lPTiAiMy4wLjAiICAvKiB1c2luZyBzZW1hbnRpYyB2ZXJzaW9uaW5n ICovCisrCisrI2lmbmRlZiBOVUxMCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrI2RlZmluZSBOVUxM ICAgIDAKKysjZWxzZQorKyNkZWZpbmUgTlVMTCAgICAoKHZvaWQgKikwKQorKyNlbmRpZgorKyNl bmRpZgorKworKyNpZm5kZWYgVFJVRQorKyNkZWZpbmUgVFJVRSAgMQorKyNlbmRpZgorKworKyNp Zm5kZWYgRkFMU0UKKysjZGVmaW5lIEZBTFNFIDAKKysjZW5kaWYKKysKKysjaWZuZGVmIEJPT0wK Kyt0eXBlZGVmIGludCBCT09MOworKyNlbmRpZgorKworKyNpZm5kZWYgQVBJRU5UUlkKKysgI2lm ZGVmIF9XSU4zMgorKyAgI2RlZmluZSBBUElFTlRSWSBfX3N0ZGNhbGwKKysgI2Vsc2UKKysgIC8v I2RlZmluZSBBUElFTlRSWSBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkKKysgICNkZWZpbmUgQVBJ RU5UUlkgCisrICNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgQklOTl9QUklWQVRFCisrICNp ZmRlZiBERUJVRworKyAgI2RlZmluZSBCSU5OX1BSSVZBVEUKKysgI2Vsc2UKKysgICNkZWZpbmUg QklOTl9QUklWQVRFICBzdGF0aWMKKysgI2VuZGlmCisrI2VuZGlmCisrCisrI2lmZGVmIF9NU0Nf VkVSCisrICAjZGVmaW5lIElOTElORSAgICAgICAgIF9faW5saW5lCisrICAjZGVmaW5lIEFMV0FZ U19JTkxJTkUgIF9fZm9yY2VpbmxpbmUKKysjZWxzZQorKyAgLy8geW91IGNhbiBjaGFuZ2UgdG8g J2V4dGVybiBpbmxpbmUnIGlmIHVzaW5nIHRoZSBnY2Mgb3B0aW9uIC1mbHRvCisrICAjZGVmaW5l IElOTElORSAgICAgICAgIHN0YXRpYyBpbmxpbmUKKysgICNkZWZpbmUgQUxXQVlTX0lOTElORSAg c3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKysjZW5kaWYKKysK KysjaWZuZGVmIGludDY0CisrI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JM QU5EQ19fKQorKyAgdHlwZWRlZiBfX2ludDY0IGludDY0OworKyAgdHlwZWRlZiB1bnNpZ25lZCBf X2ludDY0IHVpbnQ2NDsKKysjZWxzZQorKyAgdHlwZWRlZiBsb25nIGxvbmcgaW50IGludDY0Owor KyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NDsKKysjZW5kaWYKKysjZW5k aWYKKysKKysjaWZkZWYgX1dJTjMyCisrI2RlZmluZSBJTlQ2NF9GT1JNQVQgICJJNjRpIgorKyNk ZWZpbmUgVUlOVDY0X0ZPUk1BVCAiSTY0dSIKKysjZGVmaW5lIElOVDY0X0hFWF9GT1JNQVQgICJJ NjR4IgorKyNlbHNlCisrI2RlZmluZSBJTlQ2NF9GT1JNQVQgICJsbGkiCisrI2RlZmluZSBVSU5U NjRfRk9STUFUICJsbHUiCisrI2RlZmluZSBJTlQ2NF9IRVhfRk9STUFUICAibGx4IgorKyNlbmRp ZgorKworKworKy8vIEJJTk4gQ09OU1RBTlRTICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisrCisrI2RlZmluZSBJTlZBTElEX0JJTk4gICAgICAgICAwCisrCisrLy8g U3RvcmFnZSBEYXRhIFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KysKKysjZGVmaW5lIEJJTk5fU1RPUkFHRV9OT0JZVEVTICAgMHgwMAorKyNkZWZpbmUgQklOTl9T VE9SQUdFX0JZVEUgICAgICAweDIwICAvLyAgOCBiaXRzCisrI2RlZmluZSBCSU5OX1NUT1JBR0Vf V09SRCAgICAgIDB4NDAgIC8vIDE2IGJpdHMgLS0gdGhlIGVuZGlhbmVzcyAoYnl0ZSBvcmRlcikg aXMgYXV0b21hdGljYWxseSBjb3JyZWN0ZWQKKysjZGVmaW5lIEJJTk5fU1RPUkFHRV9EV09SRCAg ICAgMHg2MCAgLy8gMzIgYml0cyAtLSB0aGUgZW5kaWFuZXNzIChieXRlIG9yZGVyKSBpcyBhdXRv bWF0aWNhbGx5IGNvcnJlY3RlZAorKyNkZWZpbmUgQklOTl9TVE9SQUdFX1FXT1JEICAgICAweDgw ICAvLyA2NCBiaXRzIC0tIHRoZSBlbmRpYW5lc3MgKGJ5dGUgb3JkZXIpIGlzIGF1dG9tYXRpY2Fs bHkgY29ycmVjdGVkCisrI2RlZmluZSBCSU5OX1NUT1JBR0VfU1RSSU5HICAgIDB4QTAgIC8vIEFy ZSBzdG9yZWQgd2l0aCBudWxsIHRlcm1pbmF0aW9uCisrI2RlZmluZSBCSU5OX1NUT1JBR0VfQkxP QiAgICAgIDB4QzAKKysjZGVmaW5lIEJJTk5fU1RPUkFHRV9DT05UQUlORVIgMHhFMAorKyNkZWZp bmUgQklOTl9TVE9SQUdFX1ZJUlRVQUwgICAweDgwMDAwCisrCisrI2RlZmluZSBCSU5OX1NUT1JB R0VfTUlOICAgICAgIEJJTk5fU1RPUkFHRV9OT0JZVEVTCisrI2RlZmluZSBCSU5OX1NUT1JBR0Vf TUFYICAgICAgIEJJTk5fU1RPUkFHRV9DT05UQUlORVIKKysKKysjZGVmaW5lIEJJTk5fU1RPUkFH RV9NQVNLICAgICAgMHhFMAorKyNkZWZpbmUgQklOTl9TVE9SQUdFX01BU0sxNiAgICAweEUwMDAK KysjZGVmaW5lIEJJTk5fU1RPUkFHRV9IQVNfTU9SRSAgMHgxMAorKyNkZWZpbmUgQklOTl9UWVBF X01BU0sgICAgICAgICAweDBGCisrI2RlZmluZSBCSU5OX1RZUEVfTUFTSzE2ICAgICAgIDB4MEZG RgorKworKyNkZWZpbmUgQklOTl9NQVhfVkFMVUVfTUFTSyAgICAweEZGRkZGCisrCisrCisrLy8g RGF0YSBGb3JtYXRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KysKKysjZGVmaW5lIEJJTk5fTElTVCAgICAgIDB4RTAKKysjZGVmaW5lIEJJTk5fTUFQICAgICAg IDB4RTEKKysjZGVmaW5lIEJJTk5fT0JKRUNUICAgIDB4RTIKKysKKysjZGVmaW5lIEJJTk5fTlVM TCAgICAgIDB4MDAKKysjZGVmaW5lIEJJTk5fVFJVRSAgICAgIDB4MDEKKysjZGVmaW5lIEJJTk5f RkFMU0UgICAgIDB4MDIKKysKKysjZGVmaW5lIEJJTk5fVUlOVDggICAgIDB4MjAgIC8vIChCWVRF KSAodW5zaWduZWQgYnl0ZSkgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZvciB0aGUgQllURSB0eXBl CisrI2RlZmluZSBCSU5OX0lOVDggICAgICAweDIxICAvLyAoQllURSkgKHNpZ25lZCBieXRlLCBm cm9tIC0xMjggdG8gKzEyNy4gVGhlIDB4ODAgaXMgdGhlIHNpZ24gYml0LCBzbyB0aGUgcmFuZ2Ug aW4gaGV4IGlzIGZyb20gMHg4MCBbLTEyOF0gdG8gMHg3RiBbMTI3XSwgYmVpbmcgMHgwMCA9IDAg YW5kIDB4RkYgPSAtMSkKKysjZGVmaW5lIEJJTk5fVUlOVDE2ICAgIDB4NDAgIC8vIChXT1JEKSAo dW5zaWduZWQgaW50ZWdlcikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZvciB0aGUgV09SRCB0eXBl CisrI2RlZmluZSBCSU5OX0lOVDE2ICAgICAweDQxICAvLyAoV09SRCkgKHNpZ25lZCBpbnRlZ2Vy KQorKyNkZWZpbmUgQklOTl9VSU5UMzIgICAgMHg2MCAgLy8gKERXT1JEKSAodW5zaWduZWQgaW50 ZWdlcikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZvciB0aGUgRFdPUkQgdHlwZQorKyNkZWZpbmUg QklOTl9JTlQzMiAgICAgMHg2MSAgLy8gKERXT1JEKSAoc2lnbmVkIGludGVnZXIpCisrI2RlZmlu ZSBCSU5OX1VJTlQ2NCAgICAweDgwICAvLyAoUVdPUkQpICh1bnNpZ25lZCBpbnRlZ2VyKSBJcyB0 aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBRV09SRCB0eXBlCisrI2RlZmluZSBCSU5OX0lOVDY0 ICAgICAweDgxICAvLyAoUVdPUkQpIChzaWduZWQgaW50ZWdlcikKKysKKysjZGVmaW5lIEJJTk5f U0NIQVIgICAgIEJJTk5fSU5UOAorKyNkZWZpbmUgQklOTl9VQ0hBUiAgICAgQklOTl9VSU5UOAor KworKyNkZWZpbmUgQklOTl9TVFJJTkcgICAgMHhBMCAgLy8gKFNUUklORykgUmF3IFN0cmluZwor KyNkZWZpbmUgQklOTl9EQVRFVElNRSAgMHhBMSAgLy8gKFNUUklORykgaXNvODYwMSBmb3JtYXQg LS0gWVlZWS1NTS1ERCBISDpNTTpTUworKyNkZWZpbmUgQklOTl9EQVRFICAgICAgMHhBMiAgLy8g KFNUUklORykgaXNvODYwMSBmb3JtYXQgLS0gWVlZWS1NTS1ERAorKyNkZWZpbmUgQklOTl9USU1F ICAgICAgMHhBMyAgLy8gKFNUUklORykgaXNvODYwMSBmb3JtYXQgLS0gSEg6TU06U1MKKysjZGVm aW5lIEJJTk5fREVDSU1BTCAgIDB4QTQgIC8vIChTVFJJTkcpIEhpZ2ggcHJlY2lzaW9uIG51bWJl ciAtIHVzZWQgZm9yIGdlbmVyaWMgZGVjaW1hbCB2YWx1ZXMgYW5kIGZvciB0aG9zZSBvbmVzIHRo YXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRoZSBmbG9hdDY0IGZvcm1hdC4KKysjZGVmaW5l IEJJTk5fQ1VSUkVOQ1lTVFIgIDB4QTUgIC8vIChTVFJJTkcpIFdpdGggY3VycmVuY3kgdW5pdC9z eW1ib2wgLSBjaGVjayBmb3Igc29tZSBpc28gc3RhbmRhcmQgZm9ybWF0CisrI2RlZmluZSBCSU5O X1NJTkdMRV9TVFIgICAweEE2ICAvLyAoU1RSSU5HKSBDYW4gYmUgcmVzdG9yZWQgdG8gZmxvYXQz MgorKyNkZWZpbmUgQklOTl9ET1VCTEVfU1RSICAgMHhBNyAgLy8gKFNUUklORykgTWF5IGJlIHJl c3RvcmVkIHRvIGZsb2F0NjQKKysKKysjZGVmaW5lIEJJTk5fRkxPQVQzMiAgIDB4NjIgIC8vIChE V09SRCkgCisrI2RlZmluZSBCSU5OX0ZMT0FUNjQgICAweDgyICAvLyAoUVdPUkQpIAorKyNkZWZp bmUgQklOTl9GTE9BVCAgICAgQklOTl9GTE9BVDMyCisrI2RlZmluZSBCSU5OX1NJTkdMRSAgICBC SU5OX0ZMT0FUMzIKKysjZGVmaW5lIEJJTk5fRE9VQkxFICAgIEJJTk5fRkxPQVQ2NAorKworKyNk ZWZpbmUgQklOTl9DVVJSRU5DWSAgMHg4MyAgLy8gKFFXT1JEKQorKworKyNkZWZpbmUgQklOTl9C TE9CICAgICAgMHhDMCAgLy8gKEJMT0IpIFJhdyBCbG9iCisrCisrCisrLy8gdmlydHVhbCB0eXBl czoKKysKKysjZGVmaW5lIEJJTk5fQk9PTCAgICAgIDB4ODAwNjEgIC8vIChEV09SRCkgVGhlIHZh bHVlIG1heSBiZSAwIG9yIDEKKysKKysjaWZkZWYgQklOTl9FWFRFTkRFRAorKy8vI2RlZmluZSBC SU5OX1NJTkdMRSAgICAweDgwMEExICAvLyAoU1RSSU5HKSBDYW4gYmUgcmVzdG9yZWQgdG8gZmxv YXQzMgorKy8vI2RlZmluZSBCSU5OX0RPVUJMRSAgICAweDgwMEEyICAvLyAoU1RSSU5HKSBNYXkg YmUgcmVzdG9yZWQgdG8gZmxvYXQ2NAorKyNlbmRpZgorKworKy8vI2RlZmluZSBCSU5OX0JJTk4g ICAgICAweDgwMEUxICAvLyAoQ09OVEFJTkVSKQorKy8vI2RlZmluZSBCSU5OX0JJTk5fQlVGRkVS ICAweDgwMEMxICAvLyAoQkxPQikgdXNlciBiaW5uLiBpdCdzIG5vdCBvcGVuIGJ5IHRoZSBwYXJz ZXIKKysKKysKKysvLyBleHRlbmRlZCBjb250ZW50IHR5cGVzOgorKworKy8vIHN0cmluZ3M6Cisr CisrI2RlZmluZSBCSU5OX0hUTUwgICAgICAweEIwMDEKKysjZGVmaW5lIEJJTk5fWE1MICAgICAg IDB4QjAwMgorKyNkZWZpbmUgQklOTl9KU09OICAgICAgMHhCMDAzCisrI2RlZmluZSBCSU5OX0pB VkFTQ1JJUFQgMHhCMDA0CisrI2RlZmluZSBCSU5OX0NTUyAgICAgICAweEIwMDUKKysKKysvLyBi bG9iczoKKysKKysjZGVmaW5lIEJJTk5fSlBFRyAgICAgIDB4RDAwMQorKyNkZWZpbmUgQklOTl9H SUYgICAgICAgMHhEMDAyCisrI2RlZmluZSBCSU5OX1BORyAgICAgICAweEQwMDMKKysjZGVmaW5l IEJJTk5fQk1QICAgICAgIDB4RDAwNAorKworKworKy8vIHR5cGUgZmFtaWxpZXMKKysjZGVmaW5l IEJJTk5fRkFNSUxZX05PTkUgICAweDAwCisrI2RlZmluZSBCSU5OX0ZBTUlMWV9OVUxMICAgMHhm MQorKyNkZWZpbmUgQklOTl9GQU1JTFlfSU5UICAgIDB4ZjIKKysjZGVmaW5lIEJJTk5fRkFNSUxZ X0ZMT0FUICAweGYzCisrI2RlZmluZSBCSU5OX0ZBTUlMWV9TVFJJTkcgMHhmNAorKyNkZWZpbmUg QklOTl9GQU1JTFlfQkxPQiAgIDB4ZjUKKysjZGVmaW5lIEJJTk5fRkFNSUxZX0JPT0wgICAweGY2 CisrI2RlZmluZSBCSU5OX0ZBTUlMWV9CSU5OICAgMHhmNworKworKy8vIGludGVnZXIgdHlwZXMg cmVsYXRlZCB0byBzaWduYWwKKysjZGVmaW5lIEJJTk5fU0lHTkVEX0lOVCAgICAgMTEKKysjZGVm aW5lIEJJTk5fVU5TSUdORURfSU5UICAgMjIKKysKKysKKyt0eXBlZGVmIHZvaWQgKCpiaW5uX21l bV9mcmVlKSh2b2lkKik7CisrI2RlZmluZSBCSU5OX1NUQVRJQyAgICAgICgoYmlubl9tZW1fZnJl ZSkwKQorKyNkZWZpbmUgQklOTl9UUkFOU0lFTlQgICAoKGJpbm5fbWVtX2ZyZWUpLTEpCisrCisr CisrLy8gLS0tIEJJTk4gU1RSVUNUVVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrCisrc3RydWN0IGJpbm5fc3RydWN0 IHsKKysgIGludCAgICBoZWFkZXI7ICAgICAvLyB0aGlzIHN0cnVjdCBoZWFkZXIgaG9sZHMgdGhl IG1hZ2ljIG51bWJlciAoQklOTl9NQUdJQykgdGhhdCBpZGVudGlmaWVzIHRoaXMgbWVtb3J5IGJs b2NrIGFzIGEgYmlubiBzdHJ1Y3R1cmUKKysgIEJPT0wgICBhbGxvY2F0ZWQ7ICAvLyB0aGUgc3Ry dWN0IGNhbiBiZSBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jX2ZuKCkgb3IgY2FuIGJlIG9uIHRoZSBz dGFjaworKyAgQk9PTCAgIHdyaXRhYmxlOyAgIC8vIGRpZCBpdCB3YXMgY3JlYXRlIGZvciB3cml0 aW5nPyBpdCBjYW4gdXNlIHRoZSBwYnVmIGlmIG5vdCB1bmlmaWVkIHdpdGggcHRyCisrICBCT09M ICAgZGlydHk7ICAgICAgLy8gdGhlIGNvbnRhaW5lciBoZWFkZXIgaXMgbm90IHdyaXR0ZW4gdG8g dGhlIGJ1ZmZlcgorKyAgLy8KKysgIHZvaWQgICpwYnVmOyAgICAgICAvLyB1c2UgKnB0ciBiZWxv dz8KKysgIEJPT0wgICBwcmVfYWxsb2NhdGVkOworKyAgaW50ICAgIGFsbG9jX3NpemU7CisrICBp bnQgICAgdXNlZF9zaXplOworKyAgLy8KKysgIGludCAgICB0eXBlOworKyAgdm9pZCAgKnB0cjsK KysgIGludCAgICBzaXplOworKyAgaW50ICAgIGNvdW50OworKyAgLy8KKysgIGJpbm5fbWVtX2Zy ZWUgZnJlZWZuOyAgLy8gdXNlZCBvbmx5IHdoZW4gdHlwZSA9PSBCSU5OX1NUUklORyBvciBCSU5O X0JMT0IKKysgIC8vCisrICB1bmlvbiB7CisrICAgIHNpZ25lZCBjaGFyICAgIHZpbnQ4OworKyAg ICBzaWduZWQgc2hvcnQgICB2aW50MTY7CisrICAgIHNpZ25lZCBpbnQgICAgIHZpbnQzMjsKKysg ICAgaW50NjQgICAgICAgICAgdmludDY0OworKyAgICB1bnNpZ25lZCBjaGFyICB2dWludDg7Cisr ICAgIHVuc2lnbmVkIHNob3J0IHZ1aW50MTY7CisrICAgIHVuc2lnbmVkIGludCAgIHZ1aW50MzI7 CisrICAgIHVpbnQ2NCAgICAgICAgIHZ1aW50NjQ7CisrICAgIC8vCisrICAgIHNpZ25lZCBjaGFy ICAgIHZjaGFyOworKyAgICB1bnNpZ25lZCBjaGFyICB2dWNoYXI7CisrICAgIHNpZ25lZCBzaG9y dCAgIHZzaG9ydDsKKysgICAgdW5zaWduZWQgc2hvcnQgdnVzaG9ydDsKKysgICAgc2lnbmVkIGlu dCAgICAgdmludDsKKysgICAgdW5zaWduZWQgaW50ICAgdnVpbnQ7CisrICAgIC8vCisrICAgIGZs b2F0ICAgICAgICAgIHZmbG9hdDsKKysgICAgZG91YmxlICAgICAgICAgdmRvdWJsZTsKKysgICAg Ly8KKysgICAgQk9PTCAgICAgICAgICAgdmJvb2w7CisrICB9OworKyAgLy8KKysgIEJPT0wgICBk aXNhYmxlX2ludF9jb21wcmVzc2lvbjsKKyt9OworKworK3R5cGVkZWYgc3RydWN0IGJpbm5fc3Ry dWN0IGJpbm47CisrCisrCisrCisrLy8gLS0tIEdFTkVSQUwgRlVOQ1RJT05TICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrY2hh ciAqIEFQSUVOVFJZIGJpbm5fdmVyc2lvbigpOworKworK3ZvaWQgICBBUElFTlRSWSBiaW5uX3Nl dF9hbGxvY19mdW5jdGlvbnModm9pZCogKCpuZXdfbWFsbG9jKShzaXplX3QpLCB2b2lkKiAoKm5l d19yZWFsbG9jKSh2b2lkKixzaXplX3QpLCB2b2lkICgqbmV3X2ZyZWUpKHZvaWQqKSk7CisrCisr aW50ICAgIEFQSUVOVFJZIGJpbm5fY3JlYXRlX3R5cGUoaW50IHN0b3JhZ2VfdHlwZSwgaW50IGRh dGFfdHlwZV9pbmRleCk7CisrQk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0X3R5cGVfaW5mbyhpbnQg bG9uZ190eXBlLCBpbnQgKnBzdG9yYWdlX3R5cGUsIGludCAqcGV4dHJhX3R5cGUpOworKworK2lu dCAgICBBUElFTlRSWSBiaW5uX2dldF93cml0ZV9zdG9yYWdlKGludCB0eXBlKTsKKytpbnQgICAg QVBJRU5UUlkgYmlubl9nZXRfcmVhZF9zdG9yYWdlKGludCB0eXBlKTsKKysKKytCT09MICAgQVBJ RU5UUlkgYmlubl9pc19jb250YWluZXIoYmlubiAqaXRlbSk7CisrCisrCisrLy8gLS0tIFdSSVRF IEZVTkNUSU9OUyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrCisrLy8gY3JlYXRlIGEgbmV3IGJpbm4gYWxsb2NhdGluZyBtZW1v cnkgZm9yIHRoZSBzdHJ1Y3R1cmUKKytiaW5uICogQVBJRU5UUlkgYmlubl9uZXcoaW50IHR5cGUs IGludCBzaXplLCB2b2lkICpidWZmZXIpOworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3QoKTsK KytiaW5uICogQVBJRU5UUlkgYmlubl9tYXAoKTsKKytiaW5uICogQVBJRU5UUlkgYmlubl9vYmpl Y3QoKTsKKysKKysvLyBjcmVhdGUgYSBuZXcgYmlubiBzdG9yaW5nIHRoZSBzdHJ1Y3R1cmUgb24g dGhlIHN0YWNrCisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZShiaW5uICppdGVtLCBpbnQgdHlw ZSwgaW50IHNpemUsIHZvaWQgKmJ1ZmZlcik7CisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9s aXN0KGJpbm4gKmxpc3QpOworK0JPT0wgQVBJRU5UUlkgYmlubl9jcmVhdGVfbWFwKGJpbm4gKm1h cCk7CisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9vYmplY3QoYmlubiAqb2JqZWN0KTsKKysK KysvLyBjcmVhdGUgYSBuZXcgYmlubiBhcyBhIGNvcHkgZnJvbSBhbm90aGVyCisrYmlubiAqIEFQ SUVOVFJZIGJpbm5fY29weShjb25zdCB2b2lkICpvbGQpOworKworKworK0JPT0wgQVBJRU5UUlkg Ymlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlzdCwgYmlubiAqdmFsdWUpOworK0JPT0wgQVBJRU5U UlkgYmlubl9tYXBfc2V0X25ldyhiaW5uICptYXAsIGludCBpZCwgYmlubiAqdmFsdWUpOworK0JP T0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0X25ldyhiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtl eSwgYmlubiAqdmFsdWUpOworKworKworKy8vIGV4dGVuZGVkIGludGVyZmFjZQorKworK0JPT0wg ICBBUElFTlRSWSBiaW5uX2xpc3RfYWRkKGJpbm4gKmxpc3QsIGludCB0eXBlLCB2b2lkICpwdmFs dWUsIGludCBzaXplKTsKKytCT09MICAgQVBJRU5UUlkgYmlubl9tYXBfc2V0KGJpbm4gKm1hcCwg aW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSk7CisrQk9PTCAgIEFQSUVO VFJZIGJpbm5fb2JqZWN0X3NldChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50IHR5cGUs IHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOworKworKworKy8vIHJlbGVhc2UgbWVtb3J5CisrCisr dm9pZCAgIEFQSUVOVFJZIGJpbm5fZnJlZShiaW5uICppdGVtKTsKKyt2b2lkICogQVBJRU5UUlkg Ymlubl9yZWxlYXNlKGJpbm4gKml0ZW0pOyAvLyBmcmVlIHRoZSBiaW5uIHN0cnVjdHVyZSBidXQg a2VlcHMgdGhlIGJpbm4gYnVmZmVyIGFsbG9jYXRlZCwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBp dC4gdXNlIHRoZSBmcmVlIGZ1bmN0aW9uIHRvIHJlbGVhc2UgdGhlIGJ1ZmZlciBsYXRlcgorKwor KworKy8vIC0tLSBDUkVBVElORyBWQUxVRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fdmFsdWUoaW50 IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgZnJlZWZuKTsKKysK KytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2ludDgoc2lnbmVkIGNoYXIgdmFsdWUpIHsKKysg IHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UOCwgJnZhbHVlLCAwLCBOVUxMKTsKKyt9CisrQUxX QVlTX0lOTElORSBiaW5uICogYmlubl9pbnQxNihzaG9ydCB2YWx1ZSkgeworKyAgcmV0dXJuIGJp bm5fdmFsdWUoQklOTl9JTlQxNiwgJnZhbHVlLCAwLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElO RSBiaW5uICogYmlubl9pbnQzMihpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJ Tk5fSU5UMzIsICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJp bm5faW50NjQoaW50NjQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UNjQs ICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5fdWludDgo dW5zaWduZWQgY2hhciB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9VSU5UOCwg JnZhbHVlLCAwLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBiaW5uICogYmlubl91aW50MTYo dW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fVUlOVDE2 LCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX3VpbnQz Mih1bnNpZ25lZCBpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fVUlOVDMy LCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX3VpbnQ2 NCh1aW50NjQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fVUlOVDY0LCAmdmFs dWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Zsb2F0KGZsb2F0 IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl92YWx1ZShCSU5OX0ZMT0FULCAmdmFsdWUsIDAsIE5V TEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2RvdWJsZShkb3VibGUgdmFsdWUp IHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fRE9VQkxFLCAmdmFsdWUsIDAsIE5VTEwpOwor K30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Jvb2woQk9PTCB2YWx1ZSkgeworKyAgcmV0 dXJuIGJpbm5fdmFsdWUoQklOTl9CT09MLCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNf SU5MSU5FIGJpbm4gKiBiaW5uX251bGwoKSB7CisrICByZXR1cm4gYmlubl92YWx1ZShCSU5OX05V TEwsIE5VTEwsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX3N0cmlu ZyhjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUgZnJlZWZuKSB7CisrICByZXR1cm4gYmlubl92YWx1 ZShCSU5OX1NUUklORywgc3RyLCAwLCBmcmVlZm4pOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4g KiBiaW5uX2Jsb2Iodm9pZCAqcHRyLCBpbnQgc2l6ZSwgYmlubl9tZW1fZnJlZSBmcmVlZm4pIHsK KysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fQkxPQiwgcHRyLCBzaXplLCBmcmVlZm4pOworK30K KysKKysKKysvLyAtLS0gUkVBRCBGVU5DVElPTlMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysvLyB0aGVzZSBmdW5jdGlv bnMgYWNjZXB0IHBvaW50ZXIgdG8gdGhlIGJpbm4gc3RydWN0dXJlIGFuZCBwb2ludGVyIHRvIHRo ZSBiaW5uIGJ1ZmZlcgorK3ZvaWQgKiBBUElFTlRSWSBiaW5uX3B0cihjb25zdCB2b2lkICpwdHIp OworK2ludCAgICBBUElFTlRSWSBiaW5uX3NpemUoY29uc3Qgdm9pZCAqcHRyKTsKKytpbnQgICAg QVBJRU5UUlkgYmlubl90eXBlKGNvbnN0IHZvaWQgKnB0cik7CisraW50ICAgIEFQSUVOVFJZIGJp bm5fY291bnQoY29uc3Qgdm9pZCAqcHRyKTsKKysKKytCT09MICAgQVBJRU5UUlkgYmlubl9pc192 YWxpZChjb25zdCB2b2lkICpwdHIsIGludCAqcHR5cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXpl KTsKKysvKiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWVzICh0eXBlLCBjb3VudCBhbmQg c2l6ZSkgYW5kIHRoZXkgZG9uJ3QgbmVlZCB0byBiZQorKyAgIGluaXRpYWxpemVkLiB0aGVzZSB2 YWx1ZXMgYXJlIHJlYWQgZnJvbSB0aGUgYnVmZmVyLiBleGFtcGxlOgorKworKyAgIGludCB0eXBl LCBjb3VudCwgc2l6ZTsKKysgICByZXN1bHQgPSBiaW5uX2lzX3ZhbGlkKHB0ciwgJnR5cGUsICZj b3VudCwgJnNpemUpOworKyovCisrQk9PTCAgIEFQSUVOVFJZIGJpbm5faXNfdmFsaWRfZXgoY29u c3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50ICpwc2l6ZSk7CisrLyog aWYgc29tZSB2YWx1ZSBpcyBpbmZvcm1lZCAodHlwZSwgY291bnQgb3Igc2l6ZSkgdGhlbiB0aGUg ZnVuY3Rpb24gd2lsbCBjaGVjayBpZiAKKysgICB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUg c2VyaWFsaXplZCBkYXRhIG1hdGNoZXMgdGhlIGluZm9ybWVkIHZhbHVlLiBvdGhlcndpc2UKKysg ICB0aGUgdmFsdWVzIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gZXhhbXBsZToKKysKKysg ICBpbnQgdHlwZT0wLCBjb3VudD0wLCBzaXplID0ga25vd25fc2l6ZTsKKysgICByZXN1bHQgPSBi aW5uX2lzX3ZhbGlkX2V4KHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUpOworKyovCisrCisrQk9P TCAgIEFQSUVOVFJZIGJpbm5faXNfc3RydWN0KGNvbnN0IHZvaWQgKnB0cik7CisrCisrCisrLy8g TG9hZGluZyBhIGJpbm4gYnVmZmVyIGludG8gYSBiaW5uIHZhbHVlIC0gdGhpcyBpcyBvcHRpb25h bAorKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29wZW4oY29uc3Qgdm9pZCAqZGF0YSk7ICAgICAg ICAgICAgICAvLyBhbGxvY2F0ZWQgLSB1bnNlY3VyZQorK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29w ZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUpOyAvLyBhbGxvY2F0ZWQgLSBzZWN1cmUK KytCT09MICAgQVBJRU5UUlkgYmlubl9sb2FkKGNvbnN0IHZvaWQgKmRhdGEsIGJpbm4gKml0ZW0p OyAgLy8gb24gc3RhY2sgLSB1bnNlY3VyZQorK0JPT0wgICBBUElFTlRSWSBiaW5uX2xvYWRfZXgo Y29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUsIGJpbm4gKnZhbHVlKTsgLy8gc2VjdXJlCisrCisr CisrLy8gZWFzaWVzdCBpbnRlcmZhY2UgdG8gdXNlLCBidXQgZG9uJ3QgY2hlY2sgaWYgdGhlIHZh bHVlIGlzIHRoZXJlCisrCisrc2lnbmVkIGNoYXIgICAgQVBJRU5UUlkgYmlubl9saXN0X2ludDgo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Cisrc2hvcnQgICAgICAgICAgQVBJRU5UUlkgYmlu bl9saXN0X2ludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworK2ludCAgICAgICAgICAg IEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQzMihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKKytp bnQ2NCAgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfaW50NjQoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcyk7CisrdW5zaWduZWQgY2hhciAgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQ4KGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MpOworK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbGlz dF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7CisrdW5zaWduZWQgaW50ICAgQVBJ RU5UUlkgYmlubl9saXN0X3VpbnQzMihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKKyt1aW50 NjQgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfdWludDY0KGNvbnN0IHZvaWQgKmxpc3QsIGlu dCBwb3MpOworK2Zsb2F0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9mbG9hdChjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zKTsKKytkb3VibGUgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3Rf ZG91YmxlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworK0JPT0wgICAgICAgICAgIEFQSUVO VFJZIGJpbm5fbGlzdF9ib29sKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworK0JPT0wgICAg ICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9udWxsKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3Mp OworK2NoYXIgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9zdHIoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcyk7Cisrdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2Jsb2IoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwc2l6ZSk7Cisrdm9pZCAqICAgICAgICAgQVBJ RU5UUlkgYmlubl9saXN0X2xpc3QoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Cisrdm9pZCAq ICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X21hcChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9z KTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3Rfb2JqZWN0KGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpOworKworK3NpZ25lZCBjaGFyICAgIEFQSUVOVFJZIGJpbm5fbWFwX2lu dDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK3Nob3J0ICAgICAgICAgIEFQSUVOVFJZIGJp bm5fbWFwX2ludDE2KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKytpbnQgICAgICAgICAgICBB UElFTlRSWSBiaW5uX21hcF9pbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCk7CisraW50NjQg ICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfaW50NjQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQp OworK3Vuc2lnbmVkIGNoYXIgIEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ4KGNvbnN0IHZvaWQgKm1h cCwgaW50IGlkKTsKKyt1bnNpZ25lZCBzaG9ydCBBUElFTlRSWSBiaW5uX21hcF91aW50MTYoY29u c3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK3Vuc2lnbmVkIGludCAgIEFQSUVOVFJZIGJpbm5fbWFw X3VpbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCk7CisrdWludDY0ICAgICAgICAgQVBJRU5U UlkgYmlubl9tYXBfdWludDY0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKytmbG9hdCAgICAg ICAgICBBUElFTlRSWSBiaW5uX21hcF9mbG9hdChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Cisr ZG91YmxlICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfZG91YmxlKGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkKTsKKytCT09MICAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9ib29sKGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkKTsKKytCT09MICAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9udWxs KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKytjaGFyICogICAgICAgICBBUElFTlRSWSBiaW5u X21hcF9zdHIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK3ZvaWQgKiAgICAgICAgIEFQSUVO VFJZIGJpbm5fbWFwX2Jsb2IoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGludCAqcHNpemUpOwor K3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2xpc3QoY29uc3Qgdm9pZCAqbWFwLCBp bnQgaWQpOworK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX21hcChjb25zdCB2b2lk ICptYXAsIGludCBpZCk7Cisrdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfb2JqZWN0 KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKysKKytzaWduZWQgY2hhciAgICBBUElFTlRSWSBi aW5uX29iamVjdF9pbnQ4KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKytzaG9y dCAgICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQxNihjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSk7CisraW50ICAgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfaW50 MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOworK2ludDY0ICAgICAgICAgIEFQ SUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 KTsKKyt1bnNpZ25lZCBjaGFyICBBUElFTlRSWSBiaW5uX29iamVjdF91aW50OChjb25zdCB2b2lk ICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrdW5zaWduZWQgc2hvcnQgQVBJRU5UUlkgYmlubl9v YmplY3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKyt1bnNpZ25l ZCBpbnQgICBBUElFTlRSWSBiaW5uX29iamVjdF91aW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25z dCBjaGFyICprZXkpOworK3VpbnQ2NCAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3VpbnQ2 NChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrZmxvYXQgICAgICAgICAgQVBJ RU5UUlkgYmlubl9vYmplY3RfZmxvYXQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkp OworK2RvdWJsZSAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2RvdWJsZShjb25zdCB2b2lk ICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrQk9PTCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9v YmplY3RfYm9vbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrQk9PTCAgICAg ICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfbnVsbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSk7CisrY2hhciAqICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3Rfc3RyKGNvbnN0 IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBi aW5uX29iamVjdF9ibG9iKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgKnBz aXplKTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9saXN0KGNvbnN0IHZv aWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5u X29iamVjdF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOworK3ZvaWQgKiAg ICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X29iamVjdChjb25zdCB2b2lkICpvYmosIGNvbnN0 IGNoYXIgKmtleSk7CisrCisrCisrLy8gcmV0dXJuIGEgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQg YmlubiBzdHJ1Y3R1cmUgLSBtdXN0IGJlIHJlbGVhc2VkIHdpdGggdGhlIGZyZWUoKSBmdW5jdGlv biBvciBlcXVpdmFsZW50IHNldCBpbiBiaW5uX3NldF9hbGxvY19mdW5jdGlvbnMoKQorK2Jpbm4g KiBBUElFTlRSWSBiaW5uX2xpc3RfdmFsdWUoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Cisr YmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3ZhbHVlKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsK KytiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfdmFsdWUoY29uc3Qgdm9pZCAqb2JqLCBjb25z dCBjaGFyICprZXkpOworKworKy8vIHJlYWQgdGhlIHZhbHVlIHRvIGEgYmlubiBzdHJ1Y3R1cmUg b24gdGhlIHN0YWNrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0X3ZhbHVlKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MsIGJpbm4gKnZhbHVlKTsKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFw X2dldF92YWx1ZShjb25zdCB2b2lkICptYXAsIGludCBpZCwgYmlubiAqdmFsdWUpOworK0JPT0wg QVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5LCBiaW5uICp2YWx1ZSk7CisrCisrLy8gc2luZ2xlIGludGVyZmFjZSAtIHRoZXNlIGZ1 bmN0aW9ucyBjaGVjayB0aGUgZGF0YSB0eXBlCisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0 KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCAq cHNpemUpOworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0KGNvbnN0IHZvaWQgKm1hcCwgaW50 IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKTsKKytCT09MIEFQSUVOVFJZ IGJpbm5fb2JqZWN0X2dldChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50IHR5 cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSk7CisrCisrLy8gdGhlc2UgMyBmdW5jdGlvbnMg cmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5kIHRoZSBkYXRhIHR5cGUKKysvLyB0aGV5 IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRldmljZXMKKysvLyBvbiBsaXR0bGUtZW5k aWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUgb25seSB0byByZXR1cm4gcG9pbnRlcnMg dG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0cmluZ3MKKysvLyB0aGUgcmV0dXJuZWQg cG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFsdWVzIG11c3QgYmUgdXNlZCBvbmx5IGJ5 IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0 X3JlYWQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSk7 Cisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQs IGludCAqcHR5cGUsIGludCAqcHNpemUpOworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX29iamVjdF9y ZWFkKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgKnB0eXBlLCBpbnQgKnBz aXplKTsKKysKKysKKysvLyBSRUFEIFBBSVIgRlVOQ1RJT05TCisrCisrLy8gdGhlc2UgZnVuY3Rp b25zIHVzZSBiYXNlIDEgaW4gdGhlICdwb3MnIGFyZ3VtZW50CisrCisrLy8gb24gc3RhY2sKKytC T09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldF9wYWlyKGNvbnN0IHZvaWQgKm1hcCwgaW50IHBvcywg aW50ICpwaWQsIGJpbm4gKnZhbHVlKTsKKytCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldF9w YWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSwgYmlubiAqdmFsdWUpOyAg Ly8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsyNTZdOworKworKy8vIGFs bG9jYXRlZAorK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF9wYWlyKGNvbnN0IHZvaWQgKm1hcCwg aW50IHBvcywgaW50ICpwaWQpOworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF9wYWlyKGNv bnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSk7ICAvLyB0aGUga2V5IG11c3QgYmUg ZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07CisrCisrLy8gdGhlc2UgMiBmdW5jdGlvbnMgcmV0 dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5kIHRoZSBkYXRhIHR5cGUKKysvLyB0aGV5IGFy ZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRldmljZXMKKysvLyBvbiBsaXR0bGUtZW5kaWFu IGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUgb25seSB0byByZXR1cm4gcG9pbnRlcnMgdG8g bGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0cmluZ3MKKysvLyB0aGUgcmV0dXJuZWQgcG9p bnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFsdWVzIG11c3QgYmUgdXNlZCBvbmx5IGJ5IHNp bmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKKyt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVh ZF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQsIGludCAqcHR5cGUsIGlu dCAqcHNpemUpOworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX29iamVjdF9yZWFkX3BhaXIoY29uc3Qg dm9pZCAqcHRyLCBpbnQgcG9zLCBjaGFyICpwa2V5LCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsK KysKKysKKysvLyBTRVFVRU5USUFMIFJFQUQgRlVOQ1RJT05TCisrCisrdHlwZWRlZiBzdHJ1Y3Qg Ymlubl9pdGVyX3N0cnVjdCB7CisrICAgIHVuc2lnbmVkIGNoYXIgKnBuZXh0OworKyAgICB1bnNp Z25lZCBjaGFyICpwbGltaXQ7CisrICAgIGludCAgIHR5cGU7CisrICAgIGludCAgIGNvdW50Owor KyAgICBpbnQgICBjdXJyZW50OworK30gYmlubl9pdGVyOworKworK0JPT0wgICBBUElFTlRSWSBi aW5uX2l0ZXJfaW5pdChiaW5uX2l0ZXIgKml0ZXIsIGNvbnN0IHZvaWQgKnBidWYsIGludCB0eXBl KTsKKysKKysvLyBhbGxvY2F0ZWQKKytiaW5uICogQVBJRU5UUlkgYmlubl9saXN0X25leHRfdmFs dWUoYmlubl9pdGVyICppdGVyKTsKKytiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfbmV4dF92YWx1 ZShiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKTsKKytiaW5uICogQVBJRU5UUlkgYmlubl9vYmpl Y3RfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXkpOyAgLy8gdGhlIGtleSBt dXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsyNTZdOworKworKy8vIG9uIHN0YWNrCisrQk9P TCAgIEFQSUVOVFJZIGJpbm5fbGlzdF9uZXh0KGJpbm5faXRlciAqaXRlciwgYmlubiAqdmFsdWUp OworK0JPT0wgICBBUElFTlRSWSBiaW5uX21hcF9uZXh0KGJpbm5faXRlciAqaXRlciwgaW50ICpw aWQsIGJpbm4gKnZhbHVlKTsKKytCT09MICAgQVBJRU5UUlkgYmlubl9vYmplY3RfbmV4dChiaW5u X2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKTsgIC8vIHRoZSBrZXkgbXVzdCBi ZSBkZWNsYXJlZCBhczogY2hhciBrZXlbMjU2XTsKKysKKysvLyB0aGVzZSAzIGZ1bmN0aW9ucyBy ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBhbmQgdGhlIGRhdGEgdHlwZQorKy8vIHRoZXkg YXJlIHRocmVhZC1zYWZlIG9uIGJpZy1lbmRpYW4gZGV2aWNlcworKy8vIG9uIGxpdHRsZS1lbmRp YW4gZGV2aWNlcyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbmx5IHRvIHJldHVybiBwb2ludGVycyB0 byBsaXN0LCBtYXAsIG9iamVjdCwgYmxvYiBhbmQgc3RyaW5ncworKy8vIHRoZSByZXR1cm5lZCBw b2ludGVyIHRvIDE2LCAzMiBhbmQgNjQgYml0cyB2YWx1ZXMgbXVzdCBiZSB1c2VkIG9ubHkgYnkg c2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9ucworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3Rf cmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSk7Cisrdm9p ZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlk LCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKKyt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3Rf cmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSwgaW50ICpwdHlwZSwgaW50ICpw c2l6ZSk7ICAvLyB0aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07Cisr CisrCisrLy8gLS0tIE1BQ1JPUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysKKysjZGVmaW5lIGJpbm5faXNfd3JpdGFibGUo aXRlbSkgKGl0ZW0pLT53cml0YWJsZTsKKysKKysKKysvLyBzZXQgdmFsdWVzIG9uIHN0YWNrIGFs bG9jYXRlZCBiaW5uIHN0cnVjdHVyZXMKKysKKysjZGVmaW5lIGJpbm5fc2V0X251bGwoaXRlbSkg ICAgICAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fTlVMTDsgfSB3aGlsZSAoMCkKKysKKysj ZGVmaW5lIGJpbm5fc2V0X2Jvb2woaXRlbSx2YWx1ZSkgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJ Tk5fQk9PTDsgKGl0ZW0pLT52Ym9vbCA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52 Ym9vbCk7IH0gd2hpbGUgKDApCisrCisrI2RlZmluZSBiaW5uX3NldF9pbnQoaXRlbSx2YWx1ZSkg ICAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX0lOVDMyOyAoaXRlbSktPnZpbnQzMiA9IHZhbHVl OyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52aW50MzIpOyB9IHdoaWxlICgwKQorKyNkZWZpbmUg Ymlubl9zZXRfaW50NjQoaXRlbSx2YWx1ZSkgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9JTlQ2 NDsgKGl0ZW0pLT52aW50NjQgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dmludDY0 KTsgfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIGJpbm5fc2V0X3VpbnQoaXRlbSx2YWx1ZSkgICBk byB7IChpdGVtKS0+dHlwZSA9IEJJTk5fVUlOVDMyOyAoaXRlbSktPnZ1aW50MzIgPSB2YWx1ZTsg KGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dnVpbnQzMik7IH0gd2hpbGUgKDApCisrI2RlZmluZSBi aW5uX3NldF91aW50NjQoaXRlbSx2YWx1ZSkgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX1VJTlQ2 NDsgKGl0ZW0pLT52dWludDY0ID0gdmFsdWU7IChpdGVtKS0+cHRyID0gJigoaXRlbSktPnZ1aW50 NjQpOyB9IHdoaWxlICgwKQorKworKyNkZWZpbmUgYmlubl9zZXRfZmxvYXQoaXRlbSx2YWx1ZSkg IGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9GTE9BVDsgIChpdGVtKS0+dmZsb2F0ICA9IHZhbHVl OyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZmxvYXQpOyB9IHdoaWxlICgwKQorKyNkZWZpbmUg Ymlubl9zZXRfZG91YmxlKGl0ZW0sdmFsdWUpIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9ET1VC TEU7IChpdGVtKS0+dmRvdWJsZSA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZG91 YmxlKTsgfSB3aGlsZSAoMCkKKysKKysvLyNkZWZpbmUgYmlubl9zZXRfc3RyaW5nKGl0ZW0sc3Ry LHBmcmVlKSAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fU1RSSU5HOyAoaXRlbSktPnB0ciA9 IHN0cjsgKGl0ZW0pLT5mcmVlZm4gPSBwZnJlZTsgfSB3aGlsZSAoMCkKKysvLyNkZWZpbmUgYmlu bl9zZXRfYmxvYihpdGVtLHB0cixzaXplLHBmcmVlKSBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5f QkxPQjsgICAoaXRlbSktPnB0ciA9IHB0cjsgKGl0ZW0pLT5mcmVlZm4gPSBwZnJlZTsgKGl0ZW0p LT5zaXplID0gc2l6ZTsgfSB3aGlsZSAoMCkKKytCT09MIEFQSUVOVFJZIGJpbm5fc2V0X3N0cmlu ZyhiaW5uICppdGVtLCBjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUgcGZyZWUpOworK0JPT0wgQVBJ RU5UUlkgYmlubl9zZXRfYmxvYihiaW5uICppdGVtLCB2b2lkICpwdHIsIGludCBzaXplLCBiaW5u X21lbV9mcmVlIHBmcmVlKTsKKysKKysKKysvLyNkZWZpbmUgYmlubl9kb3VibGUodmFsdWUpIHsg ICAgICAgKGl0ZW0pLT50eXBlID0gQklOTl9ET1VCTEU7IChpdGVtKS0+dmRvdWJsZSA9IHZhbHVl OyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZG91YmxlKSB9CisrCisrCisrCisrLy8gRk9SRUFD SCBNQUNST1MKKysvLyAtLS0tLS0tLS0tLS0tLQorKy8vCisrLy8gV2UgbXVzdCB1c2UgdGhlc2Ug ZGVjbGFyYXRpb25zIGluc2lkZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCB1c2UgdGhlIG1hY3Jv czoKKysvLworKy8vICBiaW5uX2l0ZXIgaXRlcjsKKysvLyAgYmlubiB2YWx1ZTsKKysvLyAgY2hh ciBrZXlbMjU2XTsgIC8vIG9ubHkgZm9yIG9iamVjdHMKKysvLyAgaW50ICBpZDsgICAgICAgIC8v IG9ubHkgZm9yIG1hcHMKKysKKysjZGVmaW5lIGJpbm5fb2JqZWN0X2ZvcmVhY2gob2JqZWN0LCBr ZXksIHZhbHVlKSAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIsIG9iamVjdCwgQklOTl9P QkpFQ1QpOyAgIFwKKysgICAgd2hpbGUgKGJpbm5fb2JqZWN0X25leHQoJml0ZXIsIGtleSwgJnZh bHVlKSkKKysKKysjZGVmaW5lIGJpbm5fbWFwX2ZvcmVhY2gobWFwLCBpZCwgdmFsdWUpICAgICAg ICAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIsIG1hcCwgQklOTl9NQVApOyAgICAgICAg IFwKKysgICAgd2hpbGUgKGJpbm5fbWFwX25leHQoJml0ZXIsICZpZCwgJnZhbHVlKSkKKysKKysj ZGVmaW5lIGJpbm5fbGlzdF9mb3JlYWNoKGxpc3QsIHZhbHVlKSAgICAgICAgICAgIFwKKysgICAg Ymlubl9pdGVyX2luaXQoJml0ZXIsIGxpc3QsIEJJTk5fTElTVCk7ICAgICAgIFwKKysgICAgd2hp bGUgKGJpbm5fbGlzdF9uZXh0KCZpdGVyLCAmdmFsdWUpKQorKworKy8vIElmIHlvdSBuZWVkIG5l c3RlZCBmb3JlYWNoIGxvb3BzLCB1c2UgdGhlIG1hY3JvcyBiZWxvdyBmb3IgdGhlIG5lc3RlZCBs b29wCisrLy8gQWxzbyB3ZSBuZWVkIHRvIGFkZCBhbiBhZGRpdGlvbmFsIGRlY2xhcmF0aW9uIG9u IHRoZSBmdW5jdGlvbiB0byBob2xkIHRoZSBpdGVyYXRvcgorKy8vIFdlIGNhbiBhZGQgaW4gdGhl IHNhbWUgbGluZSBhcyB0aGUgZmlyc3QgaXRlcmF0b3I6CisrLy8KKysvLyAgYmlubl9pdGVyIGl0 ZXIsIGl0ZXIyOworKworKyNkZWZpbmUgYmlubl9vYmplY3RfZm9yZWFjaDIob2JqZWN0LCBrZXks IHZhbHVlKSAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBvYmplY3QsIEJJTk5fT0JK RUNUKTsgICBcCisrICAgIHdoaWxlIChiaW5uX29iamVjdF9uZXh0KCZpdGVyMiwga2V5LCAmdmFs dWUpKQorKworKyNkZWZpbmUgYmlubl9tYXBfZm9yZWFjaDIobWFwLCBpZCwgdmFsdWUpICAgICAg ICAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBtYXAsIEJJTk5fTUFQKTsgICAgICAg ICBcCisrICAgIHdoaWxlIChiaW5uX21hcF9uZXh0KCZpdGVyMiwgJmlkLCAmdmFsdWUpKQorKwor KyNkZWZpbmUgYmlubl9saXN0X2ZvcmVhY2gyKGxpc3QsIHZhbHVlKSAgICAgICAgICAgIFwKKysg ICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBsaXN0LCBCSU5OX0xJU1QpOyAgICAgICBcCisrICAg IHdoaWxlIChiaW5uX2xpc3RfbmV4dCgmaXRlcjIsICZ2YWx1ZSkpCisrCisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBTRVQgRlVOQ1RJT05TICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbGlzdF9hZGRfaW50OChiaW5uICpsaXN0LCBzaWduZWQgY2hhciB2YWx1ZSkgeworKyAgcmV0 dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9JTlQ4LCAmdmFsdWUsIDApOworK30KKytBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9pbnQxNihiaW5uICpsaXN0LCBzaG9ydCB2YWx1 ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9JTlQxNiwgJnZhbHVlLCAw KTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfaW50MzIoYmlubiAqbGlz dCwgaW50IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX0lOVDMy LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9pbnQ2 NChiaW5uICpsaXN0LCBpbnQ2NCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlz dCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5f bGlzdF9hZGRfdWludDgoYmlubiAqbGlzdCwgdW5zaWduZWQgY2hhciB2YWx1ZSkgeworKyAgcmV0 dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9VSU5UOCwgJnZhbHVlLCAwKTsKKyt9CisrQUxX QVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDE2KGJpbm4gKmxpc3QsIHVuc2lnbmVk IHNob3J0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX1VJTlQx NiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWlu dDMyKGJpbm4gKmxpc3QsIHVuc2lnbmVkIGludCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlz dF9hZGQobGlzdCwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX2xpc3RfYWRkX3VpbnQ2NChiaW5uICpsaXN0LCB1aW50NjQgdmFsdWUpIHsKKysg IHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIDApOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9mbG9hdChiaW5uICpsaXN0LCBmbG9h dCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9GTE9BVDMyLCAm dmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9kb3VibGUo YmlubiAqbGlzdCwgZG91YmxlIHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0 LCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5u X2xpc3RfYWRkX2Jvb2woYmlubiAqbGlzdCwgQk9PTCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f bGlzdF9hZGQobGlzdCwgQklOTl9CT09MLCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9saXN0X2FkZF9udWxsKGJpbm4gKmxpc3QpIHsKKysgIHJldHVybiBiaW5uX2xp c3RfYWRkKGxpc3QsIEJJTk5fTlVMTCwgTlVMTCwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX2xpc3RfYWRkX3N0cihiaW5uICpsaXN0LCBjaGFyICpzdHIpIHsKKysgIHJldHVybiBi aW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fU1RSSU5HLCBzdHIsIDApOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9saXN0X2FkZF9ibG9iKGJpbm4gKmxpc3QsIHZvaWQgKnB0ciwgaW50IHNp emUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fQkxPQiwgcHRyLCBzaXpl KTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfbGlzdChiaW5uICpsaXN0 LCB2b2lkICpsaXN0MikgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9MSVNU LCBiaW5uX3B0cihsaXN0MiksIGJpbm5fc2l6ZShsaXN0MikpOworK30KKytBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9saXN0X2FkZF9tYXAoYmlubiAqbGlzdCwgdm9pZCAqbWFwKSB7CisrICByZXR1 cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX01BUCwgYmlubl9wdHIobWFwKSwgYmlubl9zaXpl KG1hcCkpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9vYmplY3QoYmlu biAqbGlzdCwgdm9pZCAqb2JqKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5O X09CSkVDVCwgYmlubl9wdHIob2JqKSwgYmlubl9zaXplKG9iaikpOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9saXN0X2FkZF92YWx1ZShiaW5uICpsaXN0LCBiaW5uICp2YWx1ZSkgewor KyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgdmFsdWUtPnR5cGUsIGJpbm5fcHRyKHZhbHVl KSwgYmlubl9zaXplKHZhbHVlKSk7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKworK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfaW50OChiaW5uICptYXAs IGludCBpZCwgc2lnbmVkIGNoYXIgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFw LCBpZCwgQklOTl9JTlQ4LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlu bl9tYXBfc2V0X2ludDE2KGJpbm4gKm1hcCwgaW50IGlkLCBzaG9ydCB2YWx1ZSkgeworKyAgcmV0 dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0lOVDE2LCAmdmFsdWUsIDApOworK30KKytB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2ludDMyKGJpbm4gKm1hcCwgaW50IGlkLCBp bnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQzMiwg JnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9pbnQ2NChi aW5uICptYXAsIGludCBpZCwgaW50NjQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQo bWFwLCBpZCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbWFwX3NldF91aW50OChiaW5uICptYXAsIGludCBpZCwgdW5zaWduZWQgY2hhciB2YWx1 ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX1VJTlQ4LCAmdmFsdWUs IDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3VpbnQxNihiaW5uICpt YXAsIGludCBpZCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9z ZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX21hcF9zZXRfdWludDMyKGJpbm4gKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBpbnQg dmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UMzIsICZ2 YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdWludDY0KGJp bm4gKm1hcCwgaW50IGlkLCB1aW50NjQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQo bWFwLCBpZCwgQklOTl9VSU5UNjQsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX21hcF9zZXRfZmxvYXQoYmlubiAqbWFwLCBpbnQgaWQsIGZsb2F0IHZhbHVlKSB7Cisr ICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQzMiwgJnZhbHVlLCAwKTsK Kyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9kb3VibGUoYmlubiAqbWFwLCBp bnQgaWQsIGRvdWJsZSB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBC SU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21h cF9zZXRfYm9vbChiaW5uICptYXAsIGludCBpZCwgQk9PTCB2YWx1ZSkgeworKyAgcmV0dXJuIGJp bm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0JPT0wsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfbnVsbChiaW5uICptYXAsIGludCBpZCkgeworKyAgcmV0 dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX05VTEwsIE5VTEwsIDApOworK30KKytBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3N0cihiaW5uICptYXAsIGludCBpZCwgY2hhciAq c3RyKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fU1RSSU5HLCBzdHIs IDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2Jsb2IoYmlubiAqbWFw LCBpbnQgaWQsIHZvaWQgKnB0ciwgaW50IHNpemUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQo bWFwLCBpZCwgQklOTl9CTE9CLCBwdHIsIHNpemUpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9tYXBfc2V0X2xpc3QoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKmxpc3QpIHsKKysgIHJl dHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9MSVNULCBiaW5uX3B0cihsaXN0KSwgYmlu bl9zaXplKGxpc3QpKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9tYXAo YmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKm1hcDIpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQo bWFwLCBpZCwgQklOTl9NQVAsIGJpbm5fcHRyKG1hcDIpLCBiaW5uX3NpemUobWFwMikpOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X29iamVjdChiaW5uICptYXAsIGludCBp ZCwgdm9pZCAqb2JqKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fT0JK RUNULCBiaW5uX3B0cihvYmopLCBiaW5uX3NpemUob2JqKSk7CisrfQorK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX21hcF9zZXRfdmFsdWUoYmlubiAqbWFwLCBpbnQgaWQsIGJpbm4gKnZhbHVlKSB7 CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIHZhbHVlLT50eXBlLCBiaW5uX3B0cih2 YWx1ZSksIGJpbm5fc2l6ZSh2YWx1ZSkpOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2ludDgoYmlu biAqb2JqLCBjb25zdCBjaGFyICprZXksIHNpZ25lZCBjaGFyIHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDgsICZ2YWx1ZSwgMCk7CisrfQorK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfaW50MTYoYmlubiAqb2JqLCBjb25zdCBj aGFyICprZXksIHNob3J0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwg a2V5LCBCSU5OX0lOVDE2LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlu bl9vYmplY3Rfc2V0X2ludDMyKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgdmFsdWUp IHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fSU5UMzIsICZ2YWx1 ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfaW50NjQoYmlu biAqb2JqLCBjb25zdCBjaGFyICprZXksIGludDY0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9v YmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDY0LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm4gKm9iaiwgY29uc3QgY2hhciAq a2V5LCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9i aiwga2V5LCBCSU5OX1VJTlQ4LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9vYmplY3Rfc2V0X3VpbnQxNihiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdW5zaWdu ZWQgc2hvcnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJ Tk5fVUlOVDE2LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmpl Y3Rfc2V0X3VpbnQzMihiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgaW50IHZh bHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX1VJTlQzMiwg JnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF91aW50 NjQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHVpbnQ2NCB2YWx1ZSkgeworKyAgcmV0dXJu IGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9VSU5UNjQsICZ2YWx1ZSwgMCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfZmxvYXQoYmlubiAqb2JqLCBjb25z dCBjaGFyICprZXksIGZsb2F0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9i aiwga2V5LCBCSU5OX0ZMT0FUMzIsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX29iamVjdF9zZXRfZG91YmxlKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBkb3Vi bGUgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fRkxP QVQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3Nl dF9ib29sKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBCT09MIHZhbHVlKSB7CisrICByZXR1 cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0JPT0wsICZ2YWx1ZSwgMCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfbnVsbChiaW5uICpvYmosIGNvbnN0 IGNoYXIgKmtleSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9O VUxMLCBOVUxMLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9z dHIoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGNoYXIgKnN0cikgeworKyAgcmV0dXJuIGJp bm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9TVFJJTkcsIHN0ciwgMCk7CisrfQorK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfYmxvYihiaW5uICpvYmosIGNvbnN0IGNoYXIg KmtleSwgdm9pZCAqcHRyLCBpbnQgc2l6ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChv YmosIGtleSwgQklOTl9CTE9CLCBwdHIsIHNpemUpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9vYmplY3Rfc2V0X2xpc3QoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHZvaWQgKmxp c3QpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fTElTVCwgYmlu bl9wdHIobGlzdCksIGJpbm5fc2l6ZShsaXN0KSk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX29iamVjdF9zZXRfbWFwKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCB2b2lkICptYXAp IHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fTUFQLCBiaW5uX3B0 cihtYXApLCBiaW5uX3NpemUobWFwKSk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29i amVjdF9zZXRfb2JqZWN0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCB2b2lkICpvYmoyKSB7 CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX09CSkVDVCwgYmlubl9w dHIob2JqMiksIGJpbm5fc2l6ZShvYmoyKSk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5u X29iamVjdF9zZXRfdmFsdWUoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGJpbm4gKnZhbHVl KSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCB2YWx1ZS0+dHlwZSwgYmlu bl9wdHIodmFsdWUpLCBiaW5uX3NpemUodmFsdWUpKTsKKyt9CisrCisrLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrLyoqKiBHRVQgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlz dF9nZXRfaW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBzaWduZWQgY2hhciAqcHZhbHVl KSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UOCwgcHZhbHVl LCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfaW50MTYoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgc2hvcnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f bGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDE2LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9pbnQzMihjb25zdCB2b2lkICpsaXN0LCBpbnQg cG9zLCBpbnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBC SU5OX0lOVDMyLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9s aXN0X2dldF9pbnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQ2NCAqcHZhbHVlKSB7 CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UNjQsIHB2YWx1ZSwg TlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X3VpbnQ4KGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVkIGNoYXIgKnB2YWx1ZSkgeworKyAgcmV0dXJu IGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQ4LCBwdmFsdWUsIE5VTEwpOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50MTYoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcywgdW5zaWduZWQgc2hvcnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlz dF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQxNiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfdWludDMyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MsIHVuc2lnbmVkIGludCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0 LCBwb3MsIEJJTk5fVUlOVDMyLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9saXN0X2dldF91aW50NjQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdWludDY0 ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9VSU5U NjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0 X2Zsb2F0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGZsb2F0ICpwdmFsdWUpIHsKKysgIHJl dHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDMyLCBwdmFsdWUsIE5VTEwp OworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9kb3VibGUoY29uc3Qgdm9p ZCAqbGlzdCwgaW50IHBvcywgZG91YmxlICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3Rf Z2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDY0LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9ib29sKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3Ms IEJPT0wgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5O X0JPT0wsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3Rf Z2V0X3N0cihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBjaGFyICoqcHZhbHVlKSB7CisrICBy ZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fU1RSSU5HLCBwdmFsdWUsIE5VTEwp OworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9ibG9iKGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUsIGludCAqcHNpemUpIHsKKysgIHJldHVybiBi aW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9CTE9CLCBwdmFsdWUsIHBzaXplKTsKKyt9Cisr QUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfbGlzdChjb25zdCB2b2lkICpsaXN0LCBp bnQgcG9zLCB2b2lkICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBw b3MsIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbGlzdF9nZXRfbWFwKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUp IHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9NQVAsIHB2YWx1ZSwg TlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X29iamVjdChjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9s aXN0X2dldChsaXN0LCBwb3MsIEJJTk5fT0JKRUNULCBwdmFsdWUsIE5VTEwpOworK30KKysKKysv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKworK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRf aW50OChjb25zdCB2b2lkICptYXAsIGludCBpZCwgc2lnbmVkIGNoYXIgKnB2YWx1ZSkgeworKyAg cmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDgsIHB2YWx1ZSwgTlVMTCk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfaW50MTYoY29uc3Qgdm9pZCAqbWFw LCBpbnQgaWQsIHNob3J0ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBp ZCwgQklOTl9JTlQxNiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbWFwX2dldF9pbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCwgaW50ICpwdmFsdWUpIHsK KysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQzMiwgcHZhbHVlLCBOVUxM KTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9pbnQ2NChjb25zdCB2b2lk ICptYXAsIGludCBpZCwgaW50NjQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldCht YXAsIGlkLCBCSU5OX0lOVDY0LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9tYXBfZ2V0X3VpbnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBj aGFyICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5U OCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF91 aW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHVuc2lnbmVkIHNob3J0ICpwdmFsdWUpIHsK KysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsIHB2YWx1ZSwgTlVM TCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfdWludDMyKGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f bWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQzMiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbWFwX2dldF91aW50NjQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQs IHVpbnQ2NCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5f VUlOVDY0LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBf Z2V0X2Zsb2F0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBmbG9hdCAqcHZhbHVlKSB7CisrICBy ZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQzMiwgcHZhbHVlLCBOVUxMKTsK Kyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9kb3VibGUoY29uc3Qgdm9pZCAq bWFwLCBpbnQgaWQsIGRvdWJsZSAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1h cCwgaWQsIEJJTk5fRkxPQVQ2NCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBC T09MIGJpbm5fbWFwX2dldF9ib29sKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBCT09MICpwdmFs dWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9CT09MLCBwdmFsdWUs IE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X3N0cihjb25zdCB2 b2lkICptYXAsIGludCBpZCwgY2hhciAqKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dl dChtYXAsIGlkLCBCSU5OX1NUUklORywgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fbWFwX2dldF9ibG9iKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB2b2lkICoq cHZhbHVlLCBpbnQgKnBzaXplKSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJ Tk5fQkxPQiwgcHZhbHVlLCBwc2l6ZSk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21h cF9nZXRfbGlzdChjb25zdCB2b2lkICptYXAsIGludCBpZCwgdm9pZCAqKnB2YWx1ZSkgeworKyAg cmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0xJU1QsIHB2YWx1ZSwgTlVMTCk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfbWFwKGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkLCB2b2lkICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQs IEJJTk5fTUFQLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9t YXBfZ2V0X29iamVjdChjb25zdCB2b2lkICptYXAsIGludCBpZCwgdm9pZCAqKnB2YWx1ZSkgewor KyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX09CSkVDVCwgcHZhbHVlLCBOVUxM KTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvLyB1c2FnZToKKysvLyAgIGlm IChiaW5uX29iamVjdF9nZXRfaW50MzIob2JqLCAia2V5IiwgJnZhbHVlKSA9PSBGQUxTRSkgeHh4 OworKworK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfaW50OChjb25zdCB2b2lk ICpvYmosIGNvbnN0IGNoYXIgKmtleSwgc2lnbmVkIGNoYXIgKnB2YWx1ZSkgeworKyAgcmV0dXJu IGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQ4LCBwdmFsdWUsIE5VTEwpOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2ludDE2KGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5LCBzaG9ydCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmpl Y3RfZ2V0KG9iaiwga2V5LCBCSU5OX0lOVDE2LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2ludDMyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3Qg Y2hhciAqa2V5LCBpbnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmos IGtleSwgQklOTl9JTlQzMiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fb2JqZWN0X2dldF9pbnQ2NChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwg aW50NjQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9JTlQ2NCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2Jq ZWN0X2dldF91aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQg Y2hhciAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5O X1VJTlQ4LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmpl Y3RfZ2V0X3VpbnQxNihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQg c2hvcnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9VSU5UMTYsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29i amVjdF9nZXRfdWludDMyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25l ZCBpbnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9VSU5UMzIsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29i amVjdF9nZXRfdWludDY0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCB1aW50NjQg KnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5U NjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9n ZXRfZmxvYXQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGZsb2F0ICpwdmFsdWUp IHsKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fRkxPQVQzMiwgcHZh bHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9kb3Vi bGUoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGRvdWJsZSAqcHZhbHVlKSB7Cisr ICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0ZMT0FUNjQsIHB2YWx1ZSwg TlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfYm9vbChjb25z dCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgQk9PTCAqcHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JPT0wsIHB2YWx1ZSwgTlVMTCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfc3RyKGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5LCBjaGFyICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rf Z2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lO TElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9ibG9iKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5LCB2b2lkICoqcHZhbHVlLCBpbnQgKnBzaXplKSB7CisrICByZXR1cm4gYmlubl9vYmpl Y3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JMT0IsIHB2YWx1ZSwgcHNpemUpOworK30KKytBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2xpc3QoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBj aGFyICprZXksIHZvaWQgKipwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2Jq LCBrZXksIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fb2JqZWN0X2dldF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHZv aWQgKipwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5f TUFQLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rf Z2V0X29iamVjdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqKnB2YWx1 ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9PQkpFQ1QsIHB2 YWx1ZSwgTlVMTCk7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCAgIEFQ SUVOVFJZIGJpbm5fZ2V0X2ludDMyKGJpbm4gKnZhbHVlLCBpbnQgKnBpbnQpOworK0JPT0wgICBB UElFTlRSWSBiaW5uX2dldF9pbnQ2NChiaW5uICp2YWx1ZSwgaW50NjQgKnBpbnQpOworK0JPT0wg ICBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUoYmlubiAqdmFsdWUsIGRvdWJsZSAqcGZsb2F0KTsK KytCT09MICAgQVBJRU5UUlkgYmlubl9nZXRfYm9vbChiaW5uICp2YWx1ZSwgQk9PTCAqcGJvb2wp OworK2NoYXIgKiBBUElFTlRSWSBiaW5uX2dldF9zdHIoYmlubiAqdmFsdWUpOworKworKy8vIGJv b2xlYW4gc3RyaW5nIHZhbHVlczoKKysvLyAxLCB0cnVlLCB5ZXMsIG9uCisrLy8gMCwgZmFsc2Us IG5vLCBvZmYKKysKKysvLyBib29sZWFuIG51bWJlciB2YWx1ZXM6CisrLy8gIT0wIFt0cnVlXQor Ky8vID09MCBbZmFsc2VdCisrCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgor KworKyNlbmRpZiAvL0JJTk5fSAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2hhbm5l bHMuYyBvcGVuc3NoLTEwLjVwMS9jaGFubmVscy5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9j aGFubmVscy5jCTIwMjYtMDktMjEgMDc6MDY6MDUuNDcwNjY3MzQyICswMjAwCisrKysgb3BlbnNz aC0xMC41cDEvY2hhbm5lbHMuYwkyMDI2LTA5LTIxIDEwOjQzOjEzLjIzMTIzNjQ2OSArMDIwMAor QEAgLTkwLDYgKzkwLDExIEBACisgLyogTWF4aW11bSBudW1iZXIgb2YgZmFrZSBYMTEgZGlzcGxh eXMgdG8gdHJ5LiAqLworICNkZWZpbmUgTUFYX0RJU1BMQVlTICAxMDAwCisgCisrLyogaW4gdmVy c2lvbiBvZiBPcGVuU1NIIGxhdGVyIHRoYW4gOC44IGlmIHdlIGFkdmVydGlzZSBhIHdpbmRvdwor KyAqIDE2TUIgb3IgbGFyZ2VyIGlzIGNhdXNlcyBhIHBhdGhvbG9naWNhbCBiZWhhdmlvdXIgdGhh dCByZWR1Y2VzCisrICogdGhyb3VnaHB1dC4gVGhpcyBpcyBub3QgYSBncmVhdCBzb2x1dGlvbi4g Ki8KKysjZGVmaW5lIE5PTl9IUE5fV0lORE9XX01BWCAoMTUgKiAxMDI0ICogMTAyNCkKKysKKyAv KiBQZXItY2hhbm5lbCBjYWxsYmFjayBmb3IgcHJlL3Bvc3QgSU8gYWN0aW9ucyAqLworIHR5cGVk ZWYgdm9pZCBjaGFuX2ZuKHN0cnVjdCBzc2ggKiwgQ2hhbm5lbCAqYyk7CisgCitAQCAtMjIyLDYg KzIyNyw5IEBACisgLyogU2V0dXAgaGVscGVyICovCisgc3RhdGljIHZvaWQgY2hhbm5lbF9oYW5k bGVyX2luaXQoc3RydWN0IHNzaF9jaGFubmVscyAqc2MpOworIAorKy8qIGRlZmF1bHQgdmFsdWVz IHRvIGVuYWJsZSBocG4gYW5kIHRoZSBpbml0aWFsIGJ1ZmZlciBzaXplICovCisrc3RhdGljIGlu dCBocG5fZGlzYWJsZWQgPSAwOworKworIC8qIC0tIGNoYW5uZWwgY29yZSAqLworIAorIHZvaWQK K0BAIC01NDIsNiArNTUwLDE2IEBACisgCSAgICAoYy0+b3V0cHV0ID0gc3NoYnVmX25ldygpKSA9 PSBOVUxMIHx8CisgCSAgICAoYy0+ZXh0ZW5kZWQgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisg CQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworKworKwkvKiB0aGVzZSBidWZmZXJzIGFy ZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgdHJhY2tpbmcgY2hhbm5lbAorKwkgKiBidWZmZXIgdXNh Z2Ugc28gbGFiZWwgYW5kIHR5cGUgdGhlbSB3aXRoIGRlc2NyaXB0aXZlIG5hbWVzICovCisrCXNz aGJ1Zl9yZWxhYmVsKGMtPmlucHV0LCAiY2hhbm5lbCBpbnB1dCIpOworKwlzc2hidWZfdHlwZShj LT5pbnB1dCwgQlVGX0NIQU5ORUxfSU5QVVQpOworKwlzc2hidWZfcmVsYWJlbChjLT5vdXRwdXQs ICJjaGFubmVsIG91dHB1dCIpOworKwlzc2hidWZfdHlwZShjLT5vdXRwdXQsIEJVRl9DSEFOTkVM X09VVFBVVCk7CisrCXNzaGJ1Zl9yZWxhYmVsKGMtPmV4dGVuZGVkLCAiY2hhbm5lbCBleHRlbmRl ZCIpOworKwlzc2hidWZfdHlwZShjLT5leHRlbmRlZCwgQlVGX0NIQU5ORUxfRVhURU5ERUQpOwor KworIAlpZiAoKHIgPSBzc2hidWZfc2V0X21heF9zaXplKGMtPmlucHV0LCBDSEFOX0lOUFVUX01B WCkpICE9IDApCisgCQlmYXRhbF9mcihyLCAic3NoYnVmX3NldF9tYXhfc2l6ZSIpOworIAljLT5v c3RhdGUgPSBDSEFOX09VVFBVVF9PUEVOOworQEAgLTU1Myw2ICs1NzEsNyBAQAorIAljLT5sb2Nh bF93aW5kb3cgPSB3aW5kb3c7CisgCWMtPmxvY2FsX3dpbmRvd19tYXggPSB3aW5kb3c7CisgCWMt PmxvY2FsX21heHBhY2tldCA9IG1heHBhY2s7CisrCWMtPmR5bmFtaWNfd2luZG93ID0gMDsKKyAJ Yy0+cmVtb3RlX25hbWUgPSB4c3RyZHVwKHJlbW90ZV9uYW1lKTsKKyAJYy0+Y3RsX2NoYW4gPSAt MTsKKyAJYy0+ZGVsYXllZCA9IDE7CQkvKiBwcmV2ZW50IGNhbGwgdG8gY2hhbm5lbF9wb3N0IGhh bmRsZXIgKi8KK0BAIC0xMzI3LDYgKzEzNDYsNDIgQEAKKyAJYy0+aW9fd2FudCA9IFNTSF9DSEFO X0lPX1NPQ0tfVzsKKyB9CisgCisrc3RhdGljIGludAorK2NoYW5uZWxfdGNwd2luc3ooc3RydWN0 IHNzaCAqc3NoKQorK3sKKysJdV9pbnQzMl90IHRjcHdpbnN6ID0gMDsKKysJc29ja2xlbl90IG9w dHN6ID0gc2l6ZW9mKHRjcHdpbnN6KTsKKysJaW50IHJldCA9IC0xOworKworKwkvKiBpZiB3ZSBh cmVuJ3Qgb24gYSBzb2NrZXQgcmV0dXJuIDEyOEtCICovCisrCWlmICghc3NoX3BhY2tldF9jb25u ZWN0aW9uX2lzX29uX3NvY2tldChzc2gpKQorKwkJcmV0dXJuIDEyOCAqIDEwMjQ7CisrCisrCS8q IGdldCB0aGUgY3VycmVudCBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworKwlyZXQgPSBn ZXRzb2Nrb3B0KHNzaF9wYWNrZXRfZ2V0X2Nvbm5lY3Rpb25faW4oc3NoKSwKKysJICAgIFNPTF9T T0NLRVQsIFNPX1JDVkJVRiwgJnRjcHdpbnN6LCAmb3B0c3opOworKworKwkvKiBlcnJvciBvbiB0 aGUgc29ja2V0IC0gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisrCS8qIHJldHVybiBPcGVu U1NIJ3MgbWF4IHdpbmRvdyBzaXplICovCisrCWlmIChyZXQgIT0gMCkgeworKwkJZGVidWdfZigi Z2V0c29ja29wdCBTT19SQ1ZCVUYgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisrCQly ZXR1cm4gKDIgKiAxMDI0ICogMTAyNCk7CisrCX0KKysKKysJLyogcmV0dXJuIG5vIG1vcmUgdGhh biBTU0hCVUZfU0laRV9NQVggKGN1cnJlbnRseSAxMjhNQikgKi8KKysJaWYgKHRjcHdpbnN6ID4g U1NIQlVGX1NJWkVfTUFYKQorKwkJdGNwd2luc3ogPSBTU0hCVUZfU0laRV9NQVg7CisrCisrCS8q IGlmIHRoZSByZW1vdGUgc2lkZSBpcyBPcGVuU1NIIGFmdGVyIHZlcnNpb24gOC44IHdlIG5lZWQg dG8gcmVzdHJpY3QKKysJICogdGhlIHNpemUgb2YgdGhlIGFkdmVydGlzZWQgd2luZG93LiBOb3cg dGhpcyBtZWFucyB0aGF0IGFueSBIUE4gdG8gbm9uLUhQTgorKwkgKiBjb25uZWN0aW9uIHdpbGwg YmUgd2luZG93IGxpbWl0ZWQgdG8gMTVNQiBvZiByZWNlaXZlIHNwYWNlLiBUaGlzIGlzIGEKKysJ ICogbm9uLW9wdGltYWwgc29sdXRpb24uCisrCSAqLworKwlpZiAoKHNzaC0+Y29tcGF0ICYgU1NI X1JFU1RSSUNUX1dJTkRPVykgJiYgKHRjcHdpbnN6ID4gTk9OX0hQTl9XSU5ET1dfTUFYKSkKKysJ CXRjcHdpbnN6ID0gTk9OX0hQTl9XSU5ET1dfTUFYOworKwlyZXR1cm4gKHRjcHdpbnN6KTsKKyt9 CisrCisgc3RhdGljIHZvaWQKKyBjaGFubmVsX3ByZV9vcGVuKHN0cnVjdCBzc2ggKnNzaCwgQ2hh bm5lbCAqYykKKyB7CitAQCAtMjE4Nyw4ICsyMjQyLDYgQEAKKyBzdGF0aWMgaW50CisgY2hhbm5l bF9oYW5kbGVfcmZkKHN0cnVjdCBzc2ggKnNzaCwgQ2hhbm5lbCAqYykKKyB7CistCWNoYXIgYnVm W0NIQU5fUkJVRl07CistCXNzaXplX3QgbGVuOworIAlpbnQgciwgZm9yY2U7CisgCXNpemVfdCBu ciA9IDAsIGhhdmUsIGF2YWlsLCBtYXhsZW4gPSBDSEFOTkVMX01BWF9SRUFEOworIAlpbnQgcHR5 X3plcm9yZWFkID0gMDsKK0BAIC0yMjMyLDYgKzIyODUsMzAgQEAKKyAJCXJldHVybiAxOworIAl9 CisgCisrCS8qCisrCSAqIERhdGFncmFtIG9yIGZpbHRlcmVkIGNoYW5uZWwgcGF0aDogbmVlZHMg YSB0ZW1wb3Jhcnkgc3RhY2sgYnVmZmVyCisrCSAqIGJlY2F1c2UgdGhlIGRhdGEgbXVzdCBwYXNz IHRocm91Z2ggaW5wdXRfZmlsdGVyKCkgb3IgYmUgZnJhbWVkIGFzCisrCSAqIGEgZGF0YWdyYW0g YmVmb3JlIGVudGVyaW5nIGMtPmlucHV0LgorKwkgKgorKwkgKiBidWZbXSAoQ0hBTl9SQlVGID0g MzJLQikgaXMgZGVjbGFyZWQgaW4gdGhpcyBpbm5lciBzY29wZSByYXRoZXIKKysJICogdGhhbiBh dCBmdW5jdGlvbiBsZXZlbCB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgZnJvbQorKwkg KiAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvLCB3aGljaCBjYXVzZXMgdGhlIGNvbXBpbGVy IHRvIGVtaXQKKysJICogYSBtZW1zZXQoKSBmb3IgZXZlcnkgbG9jYWwgdmFyaWFibGUgb24gZnVu Y3Rpb24gZW50cnkuICBXaXRoIGJ1ZgorKwkgKiBhdCBmdW5jdGlvbiBzY29wZSB0aGUgMzJLQiB6 ZXJvaW5nIGhhcHBlbnMgb24gZXZlcnkgY2FsbCwgZXZlbgorKwkgKiB0aG91Z2ggdGhlIHNpbXBs ZS1jaGFubmVsIGZhc3QgcGF0aCBhYm92ZSAodGhlIGNvbW1vbiBjYXNlIGZvcgorKwkgKiBidWxr IGRhdGEpIG5ldmVyIHRvdWNoZXMgYnVmLiAgQ1BVIHByb2ZpbGluZyBzaG93ZWQgdGhpcyBkZWFk CisrCSAqIHplcm9pbmcgY29uc3VtaW5nIH4xMCUgb2YgY2xpZW50IENQVSBkdXJpbmcgaGlnaC10 aHJvdWdocHV0CisrCSAqIHRyYW5zZmVycy4gIE1vdmluZyBidWYgaW50byB0aGlzIHNjb3BlIGxp bWl0cyB0aGUgemVyb2luZyB0bworKwkgKiBjYWxscyB0aGF0IGFjdHVhbGx5IHRha2UgdGhlIGRh dGFncmFtL2ZpbHRlciBwYXRoLgorKwkgKgorKwkgKiBTZWN1cml0eSBub3RlOiBidWYgaXMgc3Rp bGwgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgdXNlIGluCisrCSAqIHRoaXMgcGF0aC4g IFRoZSBzaW1wbGUtY2hhbm5lbCBwYXRoIG5ldmVyIGFsbG9jYXRlcyBidWYgYXQgYWxsLAorKwkg KiBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4KKysJICovCisr CXsKKysJY2hhciBidWZbQ0hBTl9SQlVGXTsKKysJc3NpemVfdCBsZW47CisrCisgCWVycm5vID0g MDsKKyAJbGVuID0gcmVhZChjLT5yZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworIAkvKiBmaXh1cCBB SVggemVyby1sZW5ndGggcmVhZCB3aXRoIGVycm5vIHNldCB0byBsb29rIG1vcmUgbGlrZSBlcnJv cnMgKi8KK0BAIC0yMjQ0LDE1ICsyMzIxLDcgQEAKKyAJCWRlYnVnMigiY2hhbm5lbCAlZDogcmVh ZDw9MCByZmQgJWQgbGVuICV6ZDogJXMiLAorIAkJICAgIGMtPnNlbGYsIGMtPnJmZCwgbGVuLAor IAkJICAgIGxlbiA9PSAwID8gImNsb3NlZCIgOiBzdHJlcnJvcihlcnJubykpOworLSByZmFpbDoK Ky0JCWlmIChjLT50eXBlICE9IFNTSF9DSEFOTkVMX09QRU4pIHsKKy0JCQlkZWJ1ZzIoImNoYW5u ZWwgJWQ6IG5vdCBvcGVuIiwgYy0+c2VsZik7CistCQkJY2hhbl9tYXJrX2RlYWQoc3NoLCBjKTsK Ky0JCQlyZXR1cm4gLTE7CistCQl9IGVsc2UgeworLQkJCWNoYW5fcmVhZF9mYWlsZWQoc3NoLCBj KTsKKy0JCX0KKy0JCXJldHVybiAtMTsKKysJCWdvdG8gcmZhaWw7CisgCX0KKyAJY2hhbm5lbF9z ZXRfdXNlZF90aW1lKHNzaCwgYyk7CisgCWlmIChjLT5pbnB1dF9maWx0ZXIgIT0gTlVMTCkgewor QEAgLTIyNjcsNiArMjMzNiwxNyBAQAorIAkJZmF0YWxfZnIociwgImNoYW5uZWwgJWk6IHB1dCBk YXRhIiwgYy0+c2VsZik7CisgCisgCXJldHVybiAxOworKwl9IC8qIGVuZCBkYXRhZ3JhbS9maWx0 ZXIgYnVmW10gc2NvcGUgKi8KKysKKysgcmZhaWw6CisrCWlmIChjLT50eXBlICE9IFNTSF9DSEFO TkVMX09QRU4pIHsKKysJCWRlYnVnMigiY2hhbm5lbCAlZDogbm90IG9wZW4iLCBjLT5zZWxmKTsK KysJCWNoYW5fbWFya19kZWFkKHNzaCwgYyk7CisrCQlyZXR1cm4gLTE7CisrCX0gZWxzZSB7Cisr CQljaGFuX3JlYWRfZmFpbGVkKHNzaCwgYyk7CisrCX0KKysJcmV0dXJuIC0xOworIH0KKyAKKyBz dGF0aWMgaW50CitAQCAtMjQ0NCwyMSArMjUyNCwzMiBAQAorIAlpZiAoYy0+dHlwZSA9PSBTU0hf Q0hBTk5FTF9PUEVOICYmCisgCSAgICAhKGMtPmZsYWdzICYgKENIQU5fQ0xPU0VfU0VOVHxDSEFO X0NMT1NFX1JDVkQpKSAmJgorIAkgICAgKChjLT5sb2NhbF93aW5kb3dfbWF4IC0gYy0+bG9jYWxf d2luZG93ID4KKy0JICAgIGMtPmxvY2FsX21heHBhY2tldCozKSB8fAorKwkgICAgYy0+bG9jYWxf bWF4cGFja2V0ICogOCkgfHwKKyAJICAgIGMtPmxvY2FsX3dpbmRvdyA8IGMtPmxvY2FsX3dpbmRv d19tYXgvMikgJiYKKyAJICAgIGMtPmxvY2FsX2NvbnN1bWVkID4gMCkgeworKwkJaW50IGFkZGl0 aW9uID0gMDsKKysJCXVfaW50MzJfdCB0Y3B3aW5zeiA9IGNoYW5uZWxfdGNwd2luc3ooc3NoKTsK KysJCS8qIGFkanVzdCBtYXggd2luZG93IHNpemUgaWYgd2UgYXJlIGluIGEgZHluYW1pYyBlbnZp cm9ubWVudAorKwkJICogYW5kIHRoZSB0Y3AgcmVjZWl2ZSBidWZmZXIgaXMgbGFyZ2VyIHRoYW4g dGhlIHNzaCB3aW5kb3cgKi8KKysJCWlmIChjLT5keW5hbWljX3dpbmRvdyAmJiAodGNwd2luc3og PiBjLT5sb2NhbF93aW5kb3dfbWF4KSkgeworKwkJCS8qIGFnZ3Jlc3NpdmVseSBncm93IHRoZSB3 aW5kb3cgKi8KKysJCQlhZGRpdGlvbiA9IHRjcHdpbnN6IC0gYy0+bG9jYWxfd2luZG93X21heDsK KysJCQljLT5sb2NhbF93aW5kb3dfbWF4ICs9IGFkZGl0aW9uOworKwkJCWRlYnVnX2YoIkNoYW5u ZWwgJWQ6IFdpbmRvdyBncm93dGggdG8gJWQgYnkgJWQgYnl0ZXMiLGMtPnNlbGYsCisrCQkJICAg ICAgYy0+bG9jYWxfd2luZG93X21heCwgYWRkaXRpb24pOworKwkJfQorIAkJaWYgKCFjLT5oYXZl X3JlbW90ZV9pZCkKKyAJCQlmYXRhbF9mKCJjaGFubmVsICVkOiBubyByZW1vdGUgaWQiLCBjLT5z ZWxmKTsKKyAJCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsCisgCQkgICAgU1NIMl9NU0dfQ0hB Tk5FTF9XSU5ET1dfQURKVVNUKSkgIT0gMCB8fAorIAkJICAgIChyID0gc3NocGt0X3B1dF91MzIo c3NoLCBjLT5yZW1vdGVfaWQpKSAhPSAwIHx8CistCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihz c2gsIGMtPmxvY2FsX2NvbnN1bWVkKSkgIT0gMCB8fAorKwkJICAgIChyID0gc3NocGt0X3B1dF91 MzIoc3NoLCBjLT5sb2NhbF9jb25zdW1lZCArIGFkZGl0aW9uKSkgIT0gMCB8fAorIAkJICAgIChy ID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkgeworIAkJCWZhdGFsX2ZyKHIsICJjaGFubmVsICVp IiwgYy0+c2VsZik7CisgCQl9CisgCQlkZWJ1ZzIoImNoYW5uZWwgJWQ6IHdpbmRvdyAlZCBzZW50 IGFkanVzdCAlZCIsIGMtPnNlbGYsCistCQkgICAgYy0+bG9jYWxfd2luZG93LCBjLT5sb2NhbF9j b25zdW1lZCk7CistCQljLT5sb2NhbF93aW5kb3cgKz0gYy0+bG9jYWxfY29uc3VtZWQ7CisrCQkg ICAgYy0+bG9jYWxfd2luZG93LCBjLT5sb2NhbF9jb25zdW1lZCArIGFkZGl0aW9uKTsKKysJCWMt PmxvY2FsX3dpbmRvdyArPSBjLT5sb2NhbF9jb25zdW1lZCArIGFkZGl0aW9uOworIAkJYy0+bG9j YWxfY29uc3VtZWQgPSAwOworIAl9CisgCXJldHVybiAxOworQEAgLTMwNDcsOSArMzEzOCw3IEBA CisgCQkJICogaW4gdXNlLgorIAkJCSAqLworIAkJCWlmIChDSEFOTkVMX0VGRF9JTlBVVF9BQ1RJ VkUoYykpCistCQkJCWRlYnVnMigiY2hhbm5lbCAlZDogIgorLQkJCQkgICAgImlidWZfZW1wdHkg ZGVsYXllZCBlZmQgJWQvKCV6dSkiLAorLQkJCQkgICAgYy0+c2VsZiwgYy0+ZWZkLCBzc2hidWZf bGVuKGMtPmV4dGVuZGVkKSk7CisrCQkJCXt9CisgCQkJZWxzZQorIAkJCQljaGFuX2lidWZfZW1w dHkoc3NoLCBjKTsKKyAJCX0KK0BAIC0zODc2LDYgKzM5NjUsMTMgQEAKKyAJcmV0dXJuIGFkZHI7 CisgfQorIAorK3ZvaWQKKytjaGFubmVsX3NldF9ocG5fZGlzYWJsZWQoaW50IGV4dGVybmFsX2hw bl9kaXNhYmxlZCkKKyt7CisrCWhwbl9kaXNhYmxlZCA9IGV4dGVybmFsX2hwbl9kaXNhYmxlZDsK KysJZGVidWcoIkhQTiBEaXNhYmxlZDogJWQiLCBocG5fZGlzYWJsZWQpOworK30KKysKKyBzdGF0 aWMgaW50CisgY2hhbm5lbF9zZXR1cF9md2RfbGlzdGVuZXJfdGNwaXAoc3RydWN0IHNzaCAqc3No LCBpbnQgdHlwZSwKKyAgICAgc3RydWN0IEZvcndhcmQgKmZ3ZCwgaW50ICphbGxvY2F0ZWRfbGlz dGVuX3BvcnQsCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaGFubmVscy5oIG9wZW5z c2gtMTAuNXAxL2NoYW5uZWxzLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2NoYW5uZWxzLmgJ MjAyNi0wOS0yMSAwNzowNjowNS40NzEwNTg1NDggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9j aGFubmVscy5oCTIwMjYtMDktMjEgMDc6MDY6NTkuODgyNTA3OTg3ICswMjAwCitAQCAtMTgxLDYg KzE4MSw3IEBACisgCXVfaW50CWxvY2FsX3dpbmRvd19tYXg7CisgCXVfaW50CWxvY2FsX2NvbnN1 bWVkOworIAl1X2ludAlsb2NhbF9tYXhwYWNrZXQ7CisrCWludAlkeW5hbWljX3dpbmRvdzsKKyAJ aW50ICAgICBleHRlbmRlZF91c2FnZTsKKyAJaW50CWFnZW50X25ldzsJLyogRm9yIGFnZW50IGxp c3RlbmVycywgdXNlIFJGQyBYWFggcmVxZXN0cyAqLworIAlpbnQJc2luZ2xlX2Nvbm5lY3Rpb247 CitAQCAtMjY0LDcgKzI2NSw3IEBACisgI2RlZmluZSBTU0hfQ0hBTl9JT19TT0NLCQkoU1NIX0NI QU5fSU9fU09DS19SfFNTSF9DSEFOX0lPX1NPQ0tfVykKKyAKKyAvKiBSZWFkIGJ1ZmZlciBzaXpl ICovCistI2RlZmluZSBDSEFOX1JCVUYJKDE2KjEwMjQpCisrI2RlZmluZSBDSEFOX1JCVUYJQ0hB Tl9TRVNfUEFDS0VUX0RFRkFVTFQKKyAKKyAvKiBNYXhpbXVtIHNpemUgZm9yIGRpcmVjdCByZWFk cyB0byBidWZmZXJzICovCisgI2RlZmluZSBDSEFOTkVMX01BWF9SRUFECUNIQU5fU0VTX1BBQ0tF VF9ERUZBVUxUCitAQCAtNDE0LDQgKzQxNSw2IEBACisgdm9pZAkgY2hhbl93cml0ZV9mYWlsZWQo c3RydWN0IHNzaCAqLCBDaGFubmVsICopOworIHZvaWQJIGNoYW5fb2J1Zl9lbXB0eShzdHJ1Y3Qg c3NoICosIENoYW5uZWwgKik7CisgCisrLyogaHBuIGhhbmRsZXIgKi8KKyt2b2lkCSBjaGFubmVs X3NldF9ocG5fZGlzYWJsZWQoaW50KTsKKyAjZW5kaWYKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVw MS5vcmlnL2NpcGhlci5jIG9wZW5zc2gtMTAuNXAxL2NpcGhlci5jCistLS0gb3BlbnNzaC0xMC41 cDEub3JpZy9jaXBoZXIuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjI5MDEyNTAxNSArMDIwMAorKysr IG9wZW5zc2gtMTAuNXAxL2NpcGhlci5jCTIwMjYtMDktMjEgMTA6NDU6MDIuMTMyMjgxNTA2ICsw MjAwCitAQCAtNDcsMjMgKzQ3LDQwIEBACisgI2luY2x1ZGUgIm1pc2MuaCIKKyAjaW5jbHVkZSAi c3NoYnVmLmgiCisgI2luY2x1ZGUgInNzaGVyci5oIgorKyNpbmNsdWRlICJkaWdlc3QuaCIKKysj aW5jbHVkZSAibG9nLmgiCisgCisgI2luY2x1ZGUgIm9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29t cGF0LmgiCisgCisrLyogZm9yIHByb3ZpZGVyIGZ1bmN0aW9ucyAqLworKyNpZmRlZiBXSVRIX09Q RU5TU0wzCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcGFy YW1zLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcHJvdmlkZXIuaD4KKysjZW5kaWYKKysKKyAjaWZu ZGVmIFdJVEhfT1BFTlNTTAorICNkZWZpbmUgRVZQX0NJUEhFUl9DVFggdm9pZAorKyNkZWZpbmUg RVZQX0NJUEhFUiB2b2lkCisrI2Vsc2UKKysvKiBmb3IgbXVsdGktdGhyZWFkZWQgYWVzLWN0ciBj aXBoZXIgKi8KKytleHRlcm4gY29uc3QgRVZQX0NJUEhFUiAqZXZwX2Flc19jdHJfbXQodm9pZCk7 CisgI2VuZGlmCisgCisgc3RydWN0IHNzaGNpcGhlcl9jdHggeworIAlpbnQJcGxhaW50ZXh0Owor IAlpbnQJZW5jcnlwdDsKKyAJRVZQX0NJUEhFUl9DVFggKmV2cDsKKysJY29uc3QgRVZQX0NJUEhF UiAqbWV0aF9wdHI7IC8qdXNlZCB0byBmcmVlIG1lbW9yeSBpbiBhZXNfY3RyX210ICovCisgCXN0 cnVjdCBjaGFjaGFwb2x5X2N0eCAqY3BfY3R4OworKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJc3Ry dWN0IGNoYWNoYXBvbHlfY3R4X210ICpjcF9jdHhfbXQ7CisrI2VuZGlmCisgCXN0cnVjdCBhZXNj dHJfY3R4IGFjX2N0eDsgLyogWFhYIHVuaW9uIHdpdGggZXZwPyAqLworIAljb25zdCBzdHJ1Y3Qg c3NoY2lwaGVyICpjaXBoZXI7CisgfTsKKyAKKy1zdGF0aWMgY29uc3Qgc3RydWN0IHNzaGNpcGhl ciBjaXBoZXJzW10gPSB7Cisrc3RhdGljIHN0cnVjdCBzc2hjaXBoZXIgY2lwaGVyc1tdID0gewor ICNpZmRlZiBXSVRIX09QRU5TU0wKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgCXsgIjNkZXMt Y2JjIiwJCTgsIDI0LCAwLCAwLCBDRkxBR19DQkMsIEVWUF9kZXNfZWRlM19jYmMgfSwKK0BAIC04 NSw2ICsxMDIsMTAgQEAKKyAjZW5kaWYKKyAJeyAiY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5j b20iLAorIAkJCQk4LCA2NCwgMCwgMTYsIENGTEFHX0NIQUNIQVBPTFksIE5VTEwgfSwKKysjaWZk ZWYgV0lUSF9PUEVOU1NMCisrCXsgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmciLAor KwkJCQk4LCA2NCwgMCwgMTYsIENGTEFHX0NIQUNIQVBPTFl8Q0ZMQUdfTVQsIE5VTEwgfSwKKysj ZW5kaWYKKyAJeyAibm9uZSIsCQk4LCAwLCAwLCAwLCBDRkxBR19OT05FLCBOVUxMIH0sCisgCisg CXsgTlVMTCwJCQkwLCAwLCAwLCAwLCAwLCBOVUxMIH0KK0BAIC0xMjEsMTIgKzE0Miw2MyBAQAor ICNlbmRpZgorIH0KKyAKKysvKiB1c2VkIHRvIGdldCB0aGUgY2lwaGVyIG5hbWUgd2hlbiB3ZSBh cmUgdGVzdGluZyB0bworKyAqIHNlZSBpZiB3ZSBjYW4gbW92ZSBmcm9tIGEgc2VyaWFsIHRvIHBh cmFsbGVsIGNpcGhlcgorKyAqIG9ubHkgY2FsbGVkIGluIGNpcGhlci1zd2l0Y2guYworKyAqLwor K2NvbnN0IGNoYXIgKgorK2NpcGhlcl9jdHhfbmFtZShjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyX2N0 eCAqY2MpCisreworKwlyZXR1cm4gY2MtPmNpcGhlci0+bmFtZTsKKyt9CisrCisgdV9pbnQKKyBj aXBoZXJfYmxvY2tzaXplKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmMpCisgeworIAlyZXR1cm4g KGMtPmJsb2NrX3NpemUpOworIH0KKyAKKyt1aW50NjRfdAorK2NpcGhlcl9yZWtleV9ibG9ja3Mo Y29uc3Qgc3RydWN0IHNzaGNpcGhlciAqYykKKyt7CisrCS8qCisrCSAqIENoYWNoYTIwLVBvbHkx MzA1IGRvZXMgbm90IGJlbmVmaXQgZnJvbSBkYXRhLWJhc2VkIHJla2V5aW5nLAorKwkgKiBwZXIg IlRoZSBTZWN1cml0eSBvZiBDaGFDaGEyMC1Qb2x5MTMwNSBpbiB0aGUgTXVsdGktdXNlciBTZXR0 aW5nIiwKKysJICogRGVnYWJyaWVsZSwgSi4gUC4sIEdvdmluZGVuLCBKLCBHdW50aGVyLCBGLiBh bmQgUGF0ZXJzb24gSy4KKysJICogQUNNIENDUyAyMDIxOyBodHRwczovL2VwcmludC5pYWNyLm9y Zy8yMDIzLzA4NS5wZGYKKysJICoKKysJICogQ3J5cHRhbmFseXNpcyBhc2lkZSwgd2UgZG8gc3Rp bGwgd2FudCBkbyBuZWVkIHRvIHByZXZlbnQgdGhlIFNTSAorKwkgKiBzZXF1ZW5jZSBudW1iZXIg d3JhcHBpbmcgYW5kIGFsc28gdG8gcmVrZXkgdG8gcHJvdmlkZSBzb21lCisrCSAqIHByb3RlY3Rp b24gZm9yIGxvbmcgbGl2ZWQgc2Vzc2lvbnMgYWdhaW5zdCBrZXkgZGlzY2xvc3VyZSBhdCB0aGUK KysJICogZW5kcG9pbnRzLCBzbyBhcnJhbmdlIGZvciByZWtleWluZyBldmVyeSAyKiozMiBibG9j a3MgYXMgdGhlCisrCSAqIDEyOC1iaXQgYmxvY2sgY2lwaGVycyBkbyAoaS5lLiBldmVyeSAzMkdC IGRhdGEpLgorKwkgKi8KKysJaWYgKChjLT5mbGFncyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDAp CisrCQlyZXR1cm4gKHVpbnQ2NF90KTEgPDwgMzI7CisrCisrCS8qIHRoZXJlIGlzIG5vIGFjdHVh bCBuZWVkIHRvIHJla2V5IHRoZSBOVUxMIGNpcGhlciBidXQKKysJICogcmVrZXlpbmcgaXMgYSBu ZWNlc3Nhcnkgc3RlcC4gSW4gcGFydCwgYXMgbWVudGlvbmVkIGFib3ZlLAorKwkgKiB0byBrZWVw IHRoZSBzZXFuciBmcm9tIHdyYXBwaW5nLiBTbyB3ZSBzZXQgaXQgdG8gdGhlCisrCSAqIG1heGlt dW0gcG9zc2libGUgLWNqciA0LzEwLzIzICovCisrCWlmICgoYy0+ZmxhZ3MgJiBDRkxBR19OT05F KSAhPSAwKQorKwkJcmV0dXJuICh1aW50NjRfdCkxIDw8IDMyOworKworKwkvKgorKwkgKiBUaGUg Ml4oYmxvY2tzaXplKjIpIGxpbWl0IGlzIHRvbyBleHBlbnNpdmUgZm9yIDNERVMsCisrCSAqIHNv IGVuZm9yY2UgYSAxR0IgZGF0YSBsaW1pdCBmb3Igc21hbGwgYmxvY2tzaXplcy4KKysJICogU2Vl IGRpc2N1c3Npb24gaW4gUkZDNDM0NCBzZWN0aW9uIDMuMi4KKysJICovCisrCWlmIChjLT5ibG9j a19zaXplIDwgMTYpCisrCQlyZXR1cm4gKCh1aW50NjRfdCkxIDw8IDMwKSAvIGMtPmJsb2NrX3Np emU7CisrCS8qCisrCSAqIE90aGVyd2lzZSwgdXNlIHRoZSBSRkM0MzQ0IHMzLjIgcmVjb21tZW5k YXRpb24gb2YgMioqKEwvNCkgYmxvY2tzCisrCSAqIGJlZm9yZSByZWtleWluZyB3aGVyZSBMIGlz IHRoZSBibG9ja3NpemUgaW4gYml0cy4KKysJICogTW9zdCBvdGhlciBjaXBoZXJzIGhhdmUgYSAx MjggYml0IGJsb2Nrc2l6ZSwgc28gdGhpcyBlcXVhdGVzIHRvCisrCSAqIDIqKjMyIGJsb2NrcyAv IDY0R0IgZGF0YS4KKysJICovCisrCXJldHVybiAodWludDY0X3QpMSA8PCAoYy0+YmxvY2tfc2l6 ZSAqIDIpOworK30KKysKKyB1X2ludAorIGNpcGhlcl9rZXlsZW4oY29uc3Qgc3RydWN0IHNzaGNp cGhlciAqYykKKyB7CitAQCAtMTc2LDEwICsyNDgsMTAgQEAKKyAJcmV0dXJuIGNjLT5wbGFpbnRl eHQ7CisgfQorIAorLWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKgorK3N0cnVjdCBzc2hjaXBoZXIg KgorIGNpcGhlcl9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCisgeworLQljb25zdCBzdHJ1Y3Qg c3NoY2lwaGVyICpjOworKwlzdHJ1Y3Qgc3NoY2lwaGVyICpjOworIAlmb3IgKGMgPSBjaXBoZXJz OyBjLT5uYW1lICE9IE5VTEw7IGMrKykKKyAJCWlmIChzdHJjbXAoYy0+bmFtZSwgbmFtZSkgPT0g MCkKKyAJCQlyZXR1cm4gYzsKK0BAIC0yMDIsNyArMjc0LDggQEAKKyAJZm9yICgocCA9IHN0cnNl cCgmY3AsIENJUEhFUl9TRVApKTsgcCAmJiAqcCAhPSAnXDAnOworIAkgICAgKHAgPSBzdHJzZXAo JmNwLCBDSVBIRVJfU0VQKSkpIHsKKyAJCWMgPSBjaXBoZXJfYnlfbmFtZShwKTsKKy0JCWlmIChj ID09IE5VTEwgfHwgKGMtPmZsYWdzICYgQ0ZMQUdfSU5URVJOQUwpICE9IDApIHsKKysJCWlmIChj ID09IE5VTEwgfHwgKChjLT5mbGFncyAmIENGTEFHX0lOVEVSTkFMKSAhPSAwICYmCisrCQkJCSAg KGMtPmZsYWdzICYgQ0ZMQUdfTk9ORSkgIT0gMCkpIHsKKyAJCQlmcmVlKGNpcGhlcl9saXN0KTsK KyAJCQlyZXR1cm4gMDsKKyAJCX0gZWxzZQorQEAgLTIyNCw3ICsyOTcsNyBAQAorIGludAorIGNp cGhlcl9pbml0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICoqY2NwLCBjb25zdCBzdHJ1Y3Qgc3NoY2lw aGVyICpjaXBoZXIsCisgICAgIGNvbnN0IHVfY2hhciAqa2V5LCB1X2ludCBrZXlsZW4sIGNvbnN0 IHVfY2hhciAqaXYsIHVfaW50IGl2bGVuLAorLSAgICBpbnQgZG9fZW5jcnlwdCkKKysgICAgdV9p bnQgc2VxbnIsIGludCBkb19lbmNyeXB0LCBpbnQgZW5hYmxlX3RocmVhZHMpCisgeworIAlzdHJ1 Y3Qgc3NoY2lwaGVyX2N0eCAqY2MgPSBOVUxMOworIAlpbnQgcmV0ID0gU1NIX0VSUl9JTlRFUk5B TF9FUlJPUjsKK0BAIC0yMzksNiArMzEyLDcgQEAKKyAKKyAJY2MtPnBsYWludGV4dCA9IChjaXBo ZXItPmZsYWdzICYgQ0ZMQUdfTk9ORSkgIT0gMDsKKyAJY2MtPmVuY3J5cHQgPSBkb19lbmNyeXB0 OworKwljYy0+bWV0aF9wdHIgPSBOVUxMOworIAorIAlpZiAoa2V5bGVuIDwgY2lwaGVyLT5rZXlf bGVuIHx8CisgCSAgICAoaXYgIT0gTlVMTCAmJiBpdmxlbiA8IGNpcGhlcl9pdmxlbihjaXBoZXIp KSkgeworQEAgLTI0OCw4ICszMjIsMTkgQEAKKyAKKyAJY2MtPmNpcGhlciA9IGNpcGhlcjsKKyAJ aWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDApIHsKKysjaWZk ZWYgV0lUSF9PUEVOU1NMCisrCQlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfTVQpICE9 IDApIHsKKysJCQljYy0+Y3BfY3R4X210ID0gY2hhY2hhcG9seV9uZXdfbXQoc2VxbnIsIGtleSwg a2V5bGVuKTsKKysJCQlyZXQgPSBjYy0+Y3BfY3R4X210ICE9IE5VTEwgPyAwIDoKKysJCQkgICAg U1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworKwkJfSBlbHNlIHsKKysJCQljYy0+Y3BfY3R4ID0g Y2hhY2hhcG9seV9uZXcoa2V5LCBrZXlsZW4pOworKwkJCXJldCA9IGNjLT5jcF9jdHggIT0gTlVM TCA/IDAgOiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisrCQl9CisrI2Vsc2UKKyAJCWNjLT5j cF9jdHggPSBjaGFjaGFwb2x5X25ldyhrZXksIGtleWxlbik7CisgCQlyZXQgPSBjYy0+Y3BfY3R4 ICE9IE5VTEwgPyAwIDogU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworKyNlbmRpZgorIAkJZ290 byBvdXQ7CisgCX0KKyAJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX05PTkUpICE9IDAp IHsKK0BAIC0yNzEsNiArMzU2LDUzIEBACisgCQlyZXQgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Cisg CQlnb3RvIG91dDsKKyAJfQorKwkvKiB0aGUgZm9sbG93aW5nIGJsb2NrIGlzIGZvciBBRVMtQ1RS LU1UIGNpcGhlciBzd2l0Y2hpbmcKKysJICogaWYgd2UgYXJlIHVzaW5nIHRoZSBjdHIgY2lwaGVy IGFuZCB3ZSBhcmUgcG9zdC1hdXRoIHRoZW4KKysJICogc3RhcnQgdGhlIHRocmVhZGVkIGNpcGhl ci4gSWYgT1NTTCBzdXBwb3J0cyBwcm92aWRlcnMgKE9TU0wgMy4wKykgdGhlbgorKwkgKiB3ZSBs b2FkIG91ciBocG5zc2ggcHJvdmlkZXIuIElmIGl0IGRvZXNuJ3QgKE9TU0wgPCAxLjEpIHRoZW4g d2UgdXNlIHRoZQorKwkgKiBfbWV0aF9uZXcgcHJvY2VzcyBmb3VuZCBpbiBjaXBoZXItY3RyLW10 LmMgKi8KKysJaWYgKHN0cnN0cihjYy0+Y2lwaGVyLT5uYW1lLCAiY3RyIikgJiYgZW5hYmxlX3Ro cmVhZHMpIHsKKysjaWZkZWYgV0lUSF9PUEVOU1NMMworKwkJLyogdGhpcyB2ZXJzaW9uIG9mIG9w ZW5zc2wgdXNlcyBwcm92aWRlcnMgKi8KKysJCU9TU0xfTElCX0NUWCAqYWVzX2xpYiA9IE5VTEw7 IC8qIHByb2JhYmx5IG5vdCBuZWVkZWQgKi8KKysJCU9TU0xfUFJPVklERVIgKmFlc19tdF9wcm92 aWRlciA9IE5VTEw7CisrCQl0eXBlID0gTlVMTDsKKysKKysJCWlmIChPU1NMX1BST1ZJREVSX2Fk ZF9idWlsdGluKGFlc19saWIsICJocG5zc2giLAorKwkJCQkJICAgICAgT1NTTF9wcm92aWRlcl9p bml0KSAhPSAxKSB7CisrCQkJZmF0YWwoIkZhaWxlZCB0byBhZGQgSFBOU1NIIHByb3ZpZGVyIGZv ciBBRVMtQ1RSIik7CisrCQl9CisrCQlhZXNfbXRfcHJvdmlkZXIgPSBPU1NMX1BST1ZJREVSX2xv YWQoYWVzX2xpYiwgImhwbnNzaCIpOworKworKwkJaWYgKGFlc19tdF9wcm92aWRlciAhPSBOVUxM KSB7CisrCQkJLyogdXNlIHRoZSBwcmV2aW91cyBrZXkgbGVuZ3RoIHRvIGRldGVybWluZSB3aGlj aCBjaXBoZXIgdG8gbG9hZCAqLworKwkJCWlmIChjaXBoZXItPmtleV9sZW4gPT0gMzIpCisrCQkJ CXR5cGUgPSBFVlBfQ0lQSEVSX2ZldGNoKGFlc19saWIsICJhZXNfY3RyX210XzI1NiIsIE5VTEwp OworKwkJCWlmIChjaXBoZXItPmtleV9sZW4gPT0gMjQpCisrCQkJCXR5cGUgPSBFVlBfQ0lQSEVS X2ZldGNoKGFlc19saWIsICJhZXNfY3RyX210XzE5MiIsIE5VTEwpOworKwkJCWlmIChjaXBoZXIt PmtleV9sZW4gPT0gMTYpCisrCQkJCXR5cGUgPSBFVlBfQ0lQSEVSX2ZldGNoKGFlc19saWIsICJh ZXNfY3RyX210XzEyOCIsIE5VTEwpOworKwkJCWlmICh0eXBlID09IE5VTEwpIHsKKysJCQkJRVJS X3ByaW50X2Vycm9yc19mcChzdGRlcnIpOworKwkJCQlmYXRhbCgiRkFJTEVEIFRPIExPQUQgYWVz X2N0cl9tdCIpOworKwkJCX0gZWxzZSB7CisrCQkJCWRlYnVnKCJMT0FERUQgYWVzX2N0cl9tdCIp OworKwkJCX0KKysJCX0KKysJCWVsc2UgeworKwkJCUVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJy KTsKKysJCQlmYXRhbCgiRmFpbGVkIHRvIGxvYWQgSFBOLVNTSCBBRVMtQ1RSLU1UIHByb3ZpZGVy LiIpOworKwkJfQorKyNlbHNlCisrCQl0eXBlID0gKCpldnBfYWVzX2N0cl9tdCkoKTsgLyogc2Vl IGNpcGhlci1jdHItbXQuYyAqLworKwkJLyogd2UgbmVlZCB0byBmcmVlIHRoaXMgbGF0ZXIgaWYg dXNpbmcgYWVzX2N0cl9tdAorKwkJICogdW5kZXIgT1NTTCAxLjEuIEhvbmVzdGx5LCB3ZSBjb3Vs ZCBhdm9pZCB0aGlzIGJ5IG1ha2luZworKwkJICogaXQgYSBnbG9iYWwgaW4gY2lwaGVyLWN0cl9t dC5jIGFuZCBleHBvcnRpbmcgaXQgaGVyZQorKwkJICogdGhlbiB3ZSdkIG9ubHkgaGF2ZSB0byBj YWxsIEVWUF9DSVBIRVJfbWV0aCBvbmNlIGJ1dCB0aGlzCisrCQkgKiB3b3JrcyBmb3Igbm93LiBU T0RPOiBUaGlzLiBjanIgMDIuMjIuMjAyMyAqLworKwkJY2MtPm1ldGhfcHRyID0gdHlwZTsKKysj ZW5kaWYgLyogV0lUSF9PUEVOU1NMMyAqLworKwl9IC8qIGlmIChzdHJzdHIoKSkgKi8KKyAJaWYg KEVWUF9DaXBoZXJJbml0KGNjLT5ldnAsIHR5cGUsIE5VTEwsICh1X2NoYXIgKilpdiwKKyAJICAg IChkb19lbmNyeXB0ID09IENJUEhFUl9FTkNSWVBUKSkgPT0gMCkgeworIAkJcmV0ID0gU1NIX0VS Ul9MSUJDUllQVE9fRVJST1I7CitAQCAtMzI1LDYgKzQ1NywxMiBAQAorICAgIGNvbnN0IHVfY2hh ciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwgdV9pbnQgYXV0aGxlbikKKyB7CisgCWlm ICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAhPSAwKSB7CisrI2lmZGVm IFdJVEhfT1BFTlNTTAorKwkJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX01UKSAhPSAw KSB7CisrCQkJcmV0dXJuIGNoYWNoYXBvbHlfY3J5cHRfbXQoY2MtPmNwX2N0eF9tdCwgc2VxbnIs IGRlc3QsCisrCQkJICAgIHNyYywgbGVuLCBhYWRsZW4sIGF1dGhsZW4sIGNjLT5lbmNyeXB0KTsK KysJCX0KKysjZW5kaWYKKyAJCXJldHVybiBjaGFjaGFwb2x5X2NyeXB0KGNjLT5jcF9jdHgsIHNl cW5yLCBkZXN0LCBzcmMsCisgCQkgICAgbGVuLCBhYWRsZW4sIGF1dGhsZW4sIGNjLT5lbmNyeXB0 KTsKKyAJfQorQEAgLTM4Nyw5ICs1MjUsMTYgQEAKKyBjaXBoZXJfZ2V0X2xlbmd0aChzdHJ1Y3Qg c3NoY2lwaGVyX2N0eCAqY2MsIHVfaW50ICpwbGVucCwgdV9pbnQgc2VxbnIsCisgICAgIGNvbnN0 IHVfY2hhciAqY3AsIHVfaW50IGxlbikKKyB7CistCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBD RkxBR19DSEFDSEFQT0xZKSAhPSAwKQorKwlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdf Q0hBQ0hBUE9MWSkgIT0gMCkgeworKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJCWlmICgoY2MtPmNp cGhlci0+ZmxhZ3MgJiBDRkxBR19NVCkgIT0gMCkgeworKwkJCXJldHVybiBjaGFjaGFwb2x5X2dl dF9sZW5ndGhfbXQoY2MtPmNwX2N0eF9tdCwgcGxlbnAsCisrCQkJICAgIHNlcW5yLCBjcCwgbGVu KTsKKysJCX0KKysjZW5kaWYKKyAJCXJldHVybiBjaGFjaGFwb2x5X2dldF9sZW5ndGgoY2MtPmNw X2N0eCwgcGxlbnAsIHNlcW5yLAorIAkJICAgIGNwLCBsZW4pOworKwl9CisgCWlmIChsZW4gPCA0 KQorIAkJcmV0dXJuIFNTSF9FUlJfTUVTU0FHRV9JTkNPTVBMRVRFOworIAkqcGxlbnAgPSBQRUVL X1UzMihjcCk7CitAQCAtNDAyLDEzICs1NDcsMzUgQEAKKyAJaWYgKGNjID09IE5VTEwgfHwgY2Mt PmNpcGhlciA9PSBOVUxMKQorIAkJcmV0dXJuOworIAlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYg Q0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkgeworKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJCWlmICgo Y2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19NVCkgIT0gMCkgeworKwkJCWNoYWNoYXBvbHlfZnJl ZV9tdChjYy0+Y3BfY3R4X210KTsKKysJCQljYy0+Y3BfY3R4X210ID0gTlVMTDsKKysJCX0gZWxz ZSB7CisrCQkJY2hhY2hhcG9seV9mcmVlKGNjLT5jcF9jdHgpOworKwkJCWNjLT5jcF9jdHggPSBO VUxMOworKwkJfQorKyNlbHNlCisgCQljaGFjaGFwb2x5X2ZyZWUoY2MtPmNwX2N0eCk7CisgCQlj Yy0+Y3BfY3R4ID0gTlVMTDsKKysjZW5kaWYKKyAJfSBlbHNlIGlmICgoY2MtPmNpcGhlci0+Zmxh Z3MgJiBDRkxBR19BRVNDVFIpICE9IDApCisgCQlleHBsaWNpdF9iemVybygmY2MtPmFjX2N0eCwg c2l6ZW9mKGNjLT5hY19jdHgpKTsKKyAjaWZkZWYgV0lUSF9PUEVOU1NMCisgCUVWUF9DSVBIRVJf Q1RYX2ZyZWUoY2MtPmV2cCk7CisgCWNjLT5ldnAgPSBOVUxMOworKwkvKiBpZiBtZXRoX3B0ciBp c24ndCBudWxsIHRoZW4gd2UgYXJlIHVzaW5nIHRoZSBhZXNfY3RyX210CisrCSAqIGV2cF9jaXBo ZXJfbWV0aF9uZXcoKSBpbiBjaXBoZXItY3RyLW10LmMgdW5kZXIgT1NTTCAxLjEKKysJICogaWYg d2UgZG9uJ3QgZXhwbGljaXRseSBmcmVlIGl0IHRoZW4sIGV2ZW4gdGhvdWdoIHdlIGZyZWUKKysJ ICogdGhlIGN0eCBpdCBpcyBhIHBhcnQgb2YgaXQgZG9lc24ndCBnZXQgZnJlZWQuIFNvLi4uCisr CSAqIGNqciAyLzcvMjAyMworKwkgKi8KKysjaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykKKysJ aWYgKGNjLT5tZXRoX3B0ciAhPSBOVUxMKSB7CisrCQlFVlBfQ0lQSEVSX21ldGhfZnJlZSgodm9p ZCAqKShFVlBfQ0lQSEVSICopY2MtPm1ldGhfcHRyKTsKKysJCWNjLT5tZXRoX3B0ciA9IE5VTEw7 CisrCX0KKysjZW5kaWYKKyAjZW5kaWYKKyAJZnJlZXplcm8oY2MsIHNpemVvZigqY2MpKTsKKyB9 CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS5jIG9wZW5z c2gtMTAuNXAxL2NpcGhlci1jaGFjaGFwb2x5LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2Np cGhlci1jaGFjaGFwb2x5LmMJMjAyNi0wOC0xMSAwNDoyMjoxNy4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY2hhY2hhcG9seS5jCTIwMjYtMDktMjEgMDc6MDY6NTku ODgzODA0NDkyICswMjAwCitAQCAtODgsNyArODgsNyBAQAorIAlpZiAoIWRvX2VuY3J5cHQpIHsK KyAJCWNvbnN0IHVfY2hhciAqdGFnID0gc3JjICsgYWFkbGVuICsgbGVuOworIAorLQkJcG9seTEz MDVfYXV0aChleHBlY3RlZF90YWcsIHNyYywgYWFkbGVuICsgbGVuLCBwb2x5X2tleSk7CisrCQlw b2x5MTMwNV9hdXRoKE5VTEwsIGV4cGVjdGVkX3RhZywgc3JjLCBhYWRsZW4gKyBsZW4sIHBvbHlf a2V5KTsKKyAJCWlmICh0aW1pbmdzYWZlX2JjbXAoZXhwZWN0ZWRfdGFnLCB0YWcsIFBPTFkxMzA1 X1RBR0xFTikgIT0gMCkgeworIAkJCXIgPSBTU0hfRVJSX01BQ19JTlZBTElEOworIAkJCWdvdG8g b3V0OworQEAgLTEwOCw3ICsxMDgsNyBAQAorIAorIAkvKiBJZiBlbmNyeXB0aW5nLCBjYWxjdWxh dGUgYW5kIGFwcGVuZCB0YWcgKi8KKyAJaWYgKGRvX2VuY3J5cHQpIHsKKy0JCXBvbHkxMzA1X2F1 dGgoZGVzdCArIGFhZGxlbiArIGxlbiwgZGVzdCwgYWFkbGVuICsgbGVuLAorKwkJcG9seTEzMDVf YXV0aChOVUxMLCBkZXN0ICsgYWFkbGVuICsgbGVuLCBkZXN0LCBhYWRsZW4gKyBsZW4sCisgCQkg ICAgcG9seV9rZXkpOworIAl9CisgCXIgPSAwOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9y aWcvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLmMgb3BlbnNzaC0xMC41cDEvY2lwaGVyLWNo YWNoYXBvbHktbGliY3J5cHRvLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jaGFj aGFwb2x5LWxpYmNyeXB0by5jCTIwMjYtMDgtMTEgMDQ6MjI6MTcuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzaC0xMC41cDEvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLmMJMjAyNi0wOS0y MSAwNzowNjo1OS44ODQwNjM2NjkgKzAyMDAKK0BAIC0zMiw4ICszMiwxOCBAQAorICNpbmNsdWRl ICJzc2hlcnIuaCIKKyAjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBvbHkuaCIKKyAKKysKKysvKiB1 c2luZyB0aGUgRVZQX01BQyBpbnRlcmZhY2UgZm9yIHBvbHkxMzA1IGlzIHNpZ25pZmljYW50bHkK KysgKiBmYXN0ZXIgdGhhbiB0aGUgdmVyc2lvbiBidW5kbGVkIHdpdGggT3BlblNTSC4gSG93ZXZl ciwKKysgKiB0aGlzIGludGVyZmFjZSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBPcGVuU1NMIDMuMCsK KysgKiAtY2pyIDEwLzIxLzIwMjIgKi8KKyBzdHJ1Y3QgY2hhY2hhcG9seV9jdHggeworIAlFVlBf Q0lQSEVSX0NUWCAqbWFpbl9ldnAsICpoZWFkZXJfZXZwOworKyNpZmRlZiBPUEVOU1NMX0hBVkVf UE9MWV9FVlAKKysJRVZQX01BQ19DVFggICAgKnBvbHlfY3R4OworKyNlbHNlCisrCWNoYXIgICAg ICAgICAgICpwb2x5X2N0eDsKKysjZW5kaWYKKyB9OworIAorIHN0cnVjdCBjaGFjaGFwb2x5X2N0 eCAqCitAQCAtNTQsNiArNjQsMTUgQEAKKyAJCWdvdG8gZmFpbDsKKyAJaWYgKEVWUF9DSVBIRVJf Q1RYX2l2X2xlbmd0aChjdHgtPmhlYWRlcl9ldnApICE9IDE2KQorIAkJZ290byBmYWlsOworKyNp ZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKKysJRVZQX01BQyAqbWFjID0gTlVMTDsKKysJaWYg KChtYWMgPSBFVlBfTUFDX2ZldGNoKE5VTEwsICJQT0xZMTMwNSIsIE5VTEwpKSA9PSBOVUxMKQor KwkJZ290byBmYWlsOworKwlpZiAoKGN0eC0+cG9seV9jdHggPSBFVlBfTUFDX0NUWF9uZXcobWFj KSkgPT0gTlVMTCkKKysJCWdvdG8gZmFpbDsKKysjZWxzZQorKwljdHgtPnBvbHlfY3R4ID0gTlVM TDsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eDsKKyAgZmFpbDoKKyAJY2hhY2hhcG9seV9mcmVlKGN0 eCk7CitAQCAtNjcsNiArODYsOSBAQAorIAkJcmV0dXJuOworIAlFVlBfQ0lQSEVSX0NUWF9mcmVl KGNwY3R4LT5tYWluX2V2cCk7CisgCUVWUF9DSVBIRVJfQ1RYX2ZyZWUoY3BjdHgtPmhlYWRlcl9l dnApOworKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKKysJRVZQX01BQ19DVFhfZnJlZShj cGN0eC0+cG9seV9jdHgpOworKyNlbmRpZgorIAlmcmVlemVybyhjcGN0eCwgc2l6ZW9mKCpjcGN0 eCkpOworIH0KKyAKK0BAIC0xMDUsNyArMTI3LDcgQEAKKyAJaWYgKCFkb19lbmNyeXB0KSB7Cisg CQljb25zdCB1X2NoYXIgKnRhZyA9IHNyYyArIGFhZGxlbiArIGxlbjsKKyAKKy0JCXBvbHkxMzA1 X2F1dGgoZXhwZWN0ZWRfdGFnLCBzcmMsIGFhZGxlbiArIGxlbiwgcG9seV9rZXkpOworKwkJcG9s eTEzMDVfYXV0aChjdHgtPnBvbHlfY3R4LCBleHBlY3RlZF90YWcsIHNyYywgYWFkbGVuICsgbGVu LCBwb2x5X2tleSk7CisgCQlpZiAodGltaW5nc2FmZV9iY21wKGV4cGVjdGVkX3RhZywgdGFnLCBQ T0xZMTMwNV9UQUdMRU4pICE9IDApIHsKKyAJCQlyID0gU1NIX0VSUl9NQUNfSU5WQUxJRDsKKyAJ CQlnb3RvIG91dDsKK0BAIC0xMzEsNyArMTUzLDcgQEAKKyAKKyAJLyogSWYgZW5jcnlwdGluZywg Y2FsY3VsYXRlIGFuZCBhcHBlbmQgdGFnICovCisgCWlmIChkb19lbmNyeXB0KSB7CistCQlwb2x5 MTMwNV9hdXRoKGRlc3QgKyBhYWRsZW4gKyBsZW4sIGRlc3QsIGFhZGxlbiArIGxlbiwKKysJCXBv bHkxMzA1X2F1dGgoY3R4LT5wb2x5X2N0eCwgZGVzdCArIGFhZGxlbiArIGxlbiwgZGVzdCwgYWFk bGVuICsgbGVuLAorIAkJICAgIHBvbHlfa2V5KTsKKyAJfQorIAlyID0gMDsKK2RpZmYgLU51ciBv cGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5jIG9wZW5z c2gtMTAuNXAxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5jCistLS0gb3BlbnNzaC0x MC41cDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuYwkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NpcGhlci1jaGFjaGFw b2x5LWxpYmNyeXB0by1tdC5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODg0MzUzNDU5ICswMjAwCitA QCAtMCwwICsxLDcwOCBAQAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDIzIFRoZSBCb2FyZCBv ZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KKysgKgorKyAqICBBdXRo b3I6IE1pdGNoZWxsIERvcnJlbGwgPG13ZEBwc2MuZWR1PgorKyAqICBBdXRob3I6IENocmlzIFJh cGllciAgPHJhcGllckBwc2MuZWR1PgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgKiB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRo IHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNlZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvTUlULgorKyAqCisrICovCisrCisrLyogVE9ETzogYXVkaXQgaW5jbHVkZXMgKi8KKysK KysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysjaWZkZWYgV0lUSF9PUEVOU1NMCisrI2luY2x1ZGUg Im9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmgiCisrI2VuZGlmCisrCisrI2lmIGRlZmlu ZWQoSEFWRV9FVlBfQ0hBQ0hBMjApICYmICFkZWZpbmVkKEhBVkVfQlJPS0VOX0NIQUNIQTIwKQor KworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+IC8qIG5lZWRl ZCBmb3IgZ2V0cGlkIHVuZGVyIEM5OSAqLworKyNpbmNsdWRlIDxzdGRhcmcuaD4gLyogbmVlZGVk IGZvciBsb2cuaCAqLworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4g IC8qIG5lZWRlZCBmb3IgbWlzYy5oICovCisrI2luY2x1ZGUgPHB0aHJlYWQuaD4KKysKKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaW5jbHVkZSAiZGVmaW5lcy5oIgorKyNpbmNsdWRl ICJsb2cuaCIKKysjaW5jbHVkZSAic3NoYnVmLmgiCisrI2luY2x1ZGUgInNzaGVyci5oIgorKwor KyNpbmNsdWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUgImNpcGhlci1jaGFjaGFwb2x5LmgiCisr I2luY2x1ZGUgImNpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5oIgorKworKyNpZm5kZWYg bGlrZWx5CisrIyBkZWZpbmUgbGlrZWx5KHgpICAgX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkK KysjZW5kaWYKKysjaWZuZGVmIHVubGlrZWx5CisrIyBkZWZpbmUgdW5saWtlbHkoeCkgX19idWls dGluX2V4cGVjdCghISh4KSwgMCkKKysjZW5kaWYKKysKKysvKiBTaXplIG9mIGtleXN0cmVhbSB0 byBwcmVnZW5lcmF0ZSwgbWVhc3VyZWQgaW4gYnl0ZXMKKysgKiB3ZSB3YW50IHRvIHJvdW5kIHVw IHRvIHRoZSBuZWFyZXN0IGNoYWNoYSBibG9jayBhbmQgaGF2ZQorKyAqIDEyOCBieXRlcyBmb3Ig b3ZlcmhlYWQgKi8KKysjZGVmaW5lIFJPVU5EX1VQKHgseSkgKCgoKCh4KS0xKS8oeSkpKzEpKih5 KSkKKysjZGVmaW5lIEtFWVNUUkVBTUxFTiAoUk9VTkRfVVAoKFNTSF9JT0JVRlNaKSArIDEyOCwg KENIQUNIQV9CTE9DS0xFTikpKQorKworKy8qIEJFR0lOIFRVTkFCTEVTICovCisrCisrLyogTnVt YmVyIG9mIHdvcmtlciB0aHJlYWRzIHRvIHNwYXduLiAqLworKy8qIHRoZSBnb2FsIGlzIHRvIGVu c3VyZSB0aGF0IG1haW4gaXMgbmV2ZXIKKysgKiB3YWl0aW5nIG9uIHRoZSB3b3JrZXIgdGhyZWFk cyBmb3Iga2V5c3RyZWFtIGRhdGEgKi8KKysjZGVmaW5lIE5VTVRIUkVBRFMgMQorKworKy8qIDY0 IHNlZW1zIHRvIGJlIGEgcHJldHR5IGJsYW5jZSBiZXR3ZWVuIG1lbW9yeSBhbmQgcGVyZm9ybWFu Y2UKKysgKiAxMjggaXMgYW5vdGhlciBvcHRpb24gd2l0aCBzb21ld2hhdCBoaWdoZXIgbWVtb3J5 IGNvbnN1bXB0aW9uICovCisrI2RlZmluZSBOVU1TVFJFQU1TIDY0CisrCisrLyogRU5EIFRVTkFC TEVTICovCisrCisrc3RydWN0IG10X2tleXN0cmVhbSB7CisrCXVfY2hhciBwb2x5X2tleVtQT0xZ MTMwNV9LRVlMRU5dOyAgICAgLyogUE9MWTEzMDVfS0VZTEVOID09IDMyICovCisrCXVfY2hhciBo ZWFkZXJTdHJlYW1bQ0hBQ0hBX0JMT0NLTEVOXTsgLyogQ0hBQ0hBX0JMT0NLTEVOID09IDY0ICov CisrCXVfY2hhciBtYWluU3RyZWFtW0tFWVNUUkVBTUxFTl07ICAgICAgLyogS0VZU1RSRUFNTEVO ID09IDMyNzY4ICovCisrfTsKKysKKytzdHJ1Y3QgdGhyZWFkRGF0YSB7CisrCUVWUF9DSVBIRVJf Q1RYICogbWFpbl9ldnA7CisrCUVWUF9DSVBIRVJfQ1RYICogaGVhZGVyX2V2cDsKKysJdV9jaGFy IHNlcWJ1ZlsxNl07CisrfTsKKysKKytzdHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNoIHsKKysJdV9p bnQgYmF0Y2hJRDsKKysJc3RydWN0IHRocmVhZERhdGEgdGRzW05VTVRIUkVBRFNdOworKwlzdHJ1 Y3QgbXRfa2V5c3RyZWFtIHN0cmVhbXNbTlVNU1RSRUFNU107CisrfTsKKysKKytzdHJ1Y3QgY2hh Y2hhcG9seV9jdHhfbXQgeworKwl1X2ludCBzZXFucjsKKysJdV9pbnQgYmF0Y2hJRDsKKysKKysJ c3RydWN0IG10X2tleXN0cmVhbV9iYXRjaCBiYXRjaGVzWzJdOworKworKwlwdGhyZWFkX3QgbWFu YWdlcl90aWRbMl07CisrCXB0aHJlYWRfdCBzZWxmX3RpZDsKKysKKysJcGlkX3QgbWFpbnBpZDsK KysJdV9jaGFyIHplcm9zW0tFWVNUUkVBTUxFTl07IC8qIEtFWVNUUkVBTUxFTiA9PSAzMjc2OCAq LworKworKyAgLyogaWYgT3BlblNTTCBoYXMgc3VwcG9ydCBmb3IgUG9seTEzMDUgaW4gdGhlIE1B QyBFVlBzCisrICAgKiB1c2UgdGhhdCAoT1NTTCA+PSAzLjApIGlmIG5vdCB0aGVuIGl0J3MgT1NT TCAxLjEgc28KKysgICAqIHVzZSB0aGUgUG9seTEzMDUgZGlnZXN0IG1ldGhvZHMuIEZhaWxpbmcg dGhhdCB1c2UgdGhlCisrICAgKiBpbnRlcm5hbCBwb2x5MTMwNSBtZXRob2RzICovCisrI2lmZGVm IE9QRU5TU0xfSEFWRV9QT0xZX0VWUAorKwlFVlBfTUFDX0NUWCAgICAqcG9seV9jdHg7CisrI2Vs aWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5lZChFVlBfUEtFWV9QT0xZMTMwNSkK KysJRVZQX1BLRVlfQ1RYICAgKnBvbHlfY3R4OworKwlFVlBfTURfQ1RYICAgICAqbWRfY3R4Owor KwlFVlBfUEtFWSAgICAgICAqcGtleTsKKysJc2l6ZV90ICAgICAgICAgcHRhZ2xlbjsKKysjZWxz ZQorKwljaGFyICAgICAgICAgICAqcG9seV9jdHg7CisrI2VuZGlmCisrfTsKKysKKytzdHJ1Y3Qg bWFuYWdlcl90aHJlYWRfYXJncyB7CisrCXN0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdCAqIGN0eF9t dDsKKysJdV9pbnQgb2xkQmF0Y2hJRDsKKysJaW50IHJldHZhbDsKKyt9OworKworK3N0cnVjdCB3 b3JrZXJfdGhyZWFkX2FyZ3MgeworKwl1X2ludCBiYXRjaElEOworKwlzdHJ1Y3QgbXRfa2V5c3Ry ZWFtX2JhdGNoICogYmF0Y2g7CisrCWludCB0aHJlYWRJbmRleDsKKysJdV9jaGFyICogemVyb3M7 CisrCWludCByZXR2YWw7CisrfTsKKysKKysvKiBnZW5lcmF0ZSB0aGUga2V5c3RyZWFtIGFuZCBo ZWFkZXIKKysgKiB3ZSB1c2UgbnVsbHMgZm9yIHRoZSAiZGF0YSIgKHRoZSB6ZXJvcyB2YXJpYWJs ZSkgaW4gb3JkZXIgdG8KKysgKiBnZXQgdGhlIHJhdyBrZXlzdHJlYW0KKysgKiBSZXR1cm5zIDAg b24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZSAqLworK2ludAorK2dlbmVyYXRlX2tleXN0cmVh bShzdHJ1Y3QgbXRfa2V5c3RyZWFtICoga3MsIHVfaW50IHNlcW5yLAorKyAgICBzdHJ1Y3QgdGhy ZWFkRGF0YSAqIHRkLCB1X2NoYXIgKiB6ZXJvcykKKyt7CisrCS8qIGdlbmVyYXRlIHBvbHkxMzA1 IGtleSAqLworKwltZW1zZXQodGQtPnNlcWJ1ZiwgMCwgc2l6ZW9mKHRkLT5zZXFidWYpKTsKKysJ UE9LRV9VNjQodGQtPnNlcWJ1ZiArIDgsIHNlcW5yKTsKKysJbWVtc2V0KGtzLT5wb2x5X2tleSAs IDAsIHNpemVvZihrcy0+cG9seV9rZXkpKTsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCh0ZC0+bWFp bl9ldnAsIE5VTEwsIE5VTEwsIHRkLT5zZXFidWYsIDEpIHx8CisrCSAgICBFVlBfQ2lwaGVyKHRk LT5tYWluX2V2cCwga3MtPnBvbHlfa2V5LCBrcy0+cG9seV9rZXksCisrCSAgICBzaXplb2Yoa3Mt PnBvbHlfa2V5KSkgPCAwKQorKwkJcmV0dXJuIC0xOworKworKwkvKiBnZW5lcmF0ZSBoZWFkZXIg a2V5c3RyZWFtIGZvciBlbmNyeXB0aW5nIHBheWxvYWQgbGVuZ3RoICovCisrCWlmICghRVZQX0Np cGhlckluaXQodGQtPmhlYWRlcl9ldnAsIE5VTEwsIE5VTEwsIHRkLT5zZXFidWYsIDEpIHx8Cisr CSAgICBFVlBfQ2lwaGVyKHRkLT5oZWFkZXJfZXZwLCBrcy0+aGVhZGVyU3RyZWFtLCB6ZXJvcywg Q0hBQ0hBX0JMT0NLTEVOKQorKwkgICAgPCAwICkKKysJCXJldHVybiAtMTsKKysKKysJLyogZ2Vu ZXJhdGUgbWFpbiBrZXlzdHJlYW0gZm9yIGVuY3J5cHRpbmcgcGF5bG9hZCAqLworKwl0ZC0+c2Vx YnVmWzBdID0gMTsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCh0ZC0+bWFpbl9ldnAsIE5VTEwsIE5V TEwsIHRkLT5zZXFidWYsIDEpIHx8CisrCSAgICBFVlBfQ2lwaGVyKHRkLT5tYWluX2V2cCwga3Mt Pm1haW5TdHJlYW0sIHplcm9zLCBLRVlTVFJFQU1MRU4pIDwgMCkKKysJCXJldHVybiAtMTsKKysK KysJcmV0dXJuIDA7CisrfQorKworKy8qIGZyZWUgdGhlIEVWUCBjb250ZXh0cyBhc3NvY2lhdGVk IHdpdGggdGhlIGdpdmUgdGhyZWFkICovCisrdm9pZAorK2ZyZWVfdGhyZWFkRGF0YShzdHJ1Y3Qg dGhyZWFkRGF0YSAqIHRkKQorK3sKKysJaWYgKHRkID09IE5VTEwpCisrCQlyZXR1cm47CisrCWlm ICh0ZC0+bWFpbl9ldnApIC8qIGZhbHNlIGlmIGluaXRpYWxpemF0aW9uIGRpZG4ndCBnZXQgdGhp cyBmYXIgKi8KKysJCUVWUF9DSVBIRVJfQ1RYX2ZyZWUodGQtPm1haW5fZXZwKTsKKysJaWYgKHRk LT5oZWFkZXJfZXZwKSAvKiBmYWxzZSBpZiBpbml0aWFsaXphdGlvbiBkaWRuJ3QgZ2V0IHRoaXMg ZmFyICovCisrCQlFVlBfQ0lQSEVSX0NUWF9mcmVlKHRkLT5oZWFkZXJfZXZwKTsKKysJZXhwbGlj aXRfYnplcm8odGQsIHNpemVvZigqdGQpKTsKKyt9CisrCisrLyogaW5pdGlhbGl6ZSB0aGUgRVZQ cyB1c2VkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkCisrICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5k IC0xIG9uIGZhaWx1cmUgKi8KKytpbnQKKytpbml0aWFsaXplX3RocmVhZERhdGEoc3RydWN0IHRo cmVhZERhdGEgKiB0ZCwgY29uc3QgdV9jaGFyICprZXkpCisreworKwltZW1zZXQodGQsMCxzaXpl b2YoKnRkKSk7CisrCWlmICgodGQtPm1haW5fZXZwID0gRVZQX0NJUEhFUl9DVFhfbmV3KCkpID09 IE5VTEwgfHwKKysJICAgICh0ZC0+aGVhZGVyX2V2cCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpKSA9 PSBOVUxMKQorKwkJZ290byBmYWlsOworKwlpZiAoIUVWUF9DaXBoZXJJbml0KHRkLT5tYWluX2V2 cCwgRVZQX2NoYWNoYTIwKCksIGtleSwgTlVMTCwgMSkpCisrCQlnb3RvIGZhaWw7CisrCWlmICgh RVZQX0NpcGhlckluaXQodGQtPmhlYWRlcl9ldnAsIEVWUF9jaGFjaGEyMCgpLCBrZXkgKyAzMiwg TlVMTCwgMSkpCisrCQlnb3RvIGZhaWw7CisrCWlmIChFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgo dGQtPmhlYWRlcl9ldnApICE9IDE2KQorKwkJZ290byBmYWlsOworKwlyZXR1cm4gMDsKKysgZmFp bDoKKysJZnJlZV90aHJlYWREYXRhKHRkKTsKKysJcmV0dXJuIC0xOworK30KKysKKytzdHJ1Y3Qg d29ya2VyX3RocmVhZF9hcmdzICoKKyt3b3JrZXJfdGhyZWFkKHN0cnVjdCB3b3JrZXJfdGhyZWFk X2FyZ3MgKiBhcmdzKQorK3sKKysJLyogY2hlY2sgZmlyc3QgKi8KKysJaWYgKGFyZ3MgPT0gTlVM TCkKKysJCXJldHVybiBOVUxMOworKwlpZiAoYXJncy0+YmF0Y2ggPT0gTlVMTCB8fCBhcmdzLT56 ZXJvcyA9PSBOVUxMKSB7CisrCQlhcmdzLT5yZXR2YWwgPSAxOworKwkJcmV0dXJuIGFyZ3M7Cisr CX0KKysKKysJaW50IHRocmVhZEluZGV4ID0gYXJncy0+dGhyZWFkSW5kZXg7CisrCXN0cnVjdCB0 aHJlYWREYXRhICogdGQgPSAmKGFyZ3MtPmJhdGNoLT50ZHNbdGhyZWFkSW5kZXhdKTsKKysJdV9p bnQgcmVmc2VxbnIgPSBhcmdzLT5iYXRjaElEICogTlVNU1RSRUFNUzsKKysKKysJZm9yIChpbnQg aSA9IHRocmVhZEluZGV4OyBpIDwgTlVNU1RSRUFNUzsgaSArPSBOVU1USFJFQURTKSB7CisrCQlp ZiAoZ2VuZXJhdGVfa2V5c3RyZWFtKCYoYXJncy0+YmF0Y2gtPnN0cmVhbXNbaV0pLCByZWZzZXFu ciArIGksCisrCQkgICAgdGQsIGFyZ3MtPnplcm9zKSA9PSAtMSkgeworKwkJCWFyZ3MtPnJldHZh bCA9IDE7CisrCQkJcmV0dXJuIGFyZ3M7CisrCQl9CisrCX0KKysKKysJYXJncy0+cmV0dmFsID0g MDsKKysJcmV0dXJuIGFyZ3M7CisrfQorKworK2ludAorK2pvaW5fbWFuYWdlcl90aHJlYWQocHRo cmVhZF90IG1hbmFnZXJfdGlkKQorK3sKKysJc3RydWN0IG1hbmFnZXJfdGhyZWFkX2FyZ3MgKiBh cmdzOworKwlpZiAocHRocmVhZF9qb2luKG1hbmFnZXJfdGlkLCAodm9pZCAqKikgJmFyZ3MpID09 IDApIHsKKysJCWlmIChhcmdzID09IE5VTEwpIHsKKysJCQlkZWJ1Z19mKCJNYW5hZ2VyIHRocmVh ZCByZXR1cm5lZCBOVUxMISIpOworKwkJCXJldHVybiAxOworKwkJfSBlbHNlIGlmIChhcmdzID09 IFBUSFJFQURfQ0FOQ0VMRUQpIHsKKysJCQlkZWJ1Z19mKCJNYW5hZ2VyIHRocmVhZCBjYW5jZWxl ZCEiKTsKKysJCQlyZXR1cm4gMTsKKysJCX0gZWxzZSBpZiAoYXJncy0+cmV0dmFsICE9IDApIHsK KysJCQlkZWJ1Z19mKCJNYW5hZ2VyIHRocmVhZCBlcnJvciAoJWQpIiwgYXJncy0+cmV0dmFsKTsK KysJCQlmcmVlKGFyZ3MpOworKwkJCXJldHVybiAxOworKwkJfSBlbHNlIHsKKysJCQlmcmVlKGFy Z3MpOworKwkJCXJldHVybiAwOworKwkJfQorKwl9IGVsc2UgeworKwkJZGVidWdfZigicHRocmVh ZF9qb2luIGVycm9yISIpOworKwkJcmV0dXJuIDE7CisrCX0KKyt9CisrCisrdm9pZAorK2NoYWNo YXBvbHlfZnJlZV9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKiBjdHhfbXQpCisreworKwlp ZiAoY3R4X210ID09IE5VTEwpCisrCQlyZXR1cm47CisrCisrI2lmZGVmIE9QRU5TU0xfSEFWRV9Q T0xZX0VWUAorKwlpZiAoY3R4X210LT5wb2x5X2N0eCAhPSBOVUxMKSB7CisrCQlFVlBfTUFDX0NU WF9mcmVlKGN0eF9tdC0+cG9seV9jdHgpOworKwkJY3R4X210LT5wb2x5X2N0eCA9IE5VTEw7Cisr CX0KKysjZWxpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9QS0VZX1BP TFkxMzA1KQorKwlpZiAoY3R4X210LT5tZF9jdHggIT0gTlVMTCkgeworKwkJRVZQX01EX0NUWF9m cmVlKGN0eF9tdC0+bWRfY3R4KTsKKysJCWN0eF9tdC0+bWRfY3R4ID0gTlVMTDsKKysJfQorKwlp ZiAoY3R4X210LT5wa2V5ICE9IE5VTEwpIHsKKysJCUVWUF9QS0VZX2ZyZWUoY3R4X210LT5wa2V5 KTsKKysJCWN0eF9tdC0+cGtleSA9IE5VTEw7CisrCX0KKysjZW5kaWYKKysKKysJLyoKKysJICog T25seSBjbGVhbnVwIHRoZSBtYW5hZ2VyIHRocmVhZHMgaWYgd2UgYXJlIHRoZSBQSUQgdGhhdCBp bml0aWFsaXplZAorKwkgKiB0aGVtISBJZiB3ZSdyZSBhIGZvcmssIHRoZSB0aHJlYWRzIGRvbid0 IHJlYWxseSBleGlzdC4KKysJICovCisrCisrCWlmIChnZXRwaWQoKSA9PSBjdHhfbXQtPm1haW5w aWQpIHsKKysJCWlmIChjdHhfbXQtPm1hbmFnZXJfdGlkWzBdICE9IGN0eF9tdC0+c2VsZl90aWQp IHsKKysJCQlqb2luX21hbmFnZXJfdGhyZWFkKGN0eF9tdC0+bWFuYWdlcl90aWRbMF0pOworKwkJ CWN0eF9tdC0+bWFuYWdlcl90aWRbMF0gPSBjdHhfbXQtPnNlbGZfdGlkOworKwkJfQorKwkJaWYg KGN0eF9tdC0+bWFuYWdlcl90aWRbMV0gIT0gY3R4X210LT5zZWxmX3RpZCkgeworKwkJCWpvaW5f bWFuYWdlcl90aHJlYWQoY3R4X210LT5tYW5hZ2VyX3RpZFsxXSk7CisrCQkJY3R4X210LT5tYW5h Z2VyX3RpZFsxXSA9IGN0eF9tdC0+c2VsZl90aWQ7CisrCQl9CisrCX0KKysKKysJLyogQ2xlYW51 cCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzLiAqLworKwlmb3IgKGludCBpPTA7IGk8MjsgaSsrKQor KwkJZm9yIChpbnQgaj0wOyBqPE5VTVRIUkVBRFM7IGorKykKKysJCQlmcmVlX3RocmVhZERhdGEo JihjdHhfbXQtPmJhdGNoZXNbaV0udGRzW2pdKSk7CisrCisrCS8qIFplcm8gYW5kIGZyZWUgdGhl IHdob2xlIG11bHRpdGhyZWFkZWQgY2lwaGVyIGNvbnRleHQuICovCisrCWZyZWV6ZXJvKGN0eF9t dCwgc2l6ZW9mKCpjdHhfbXQpKTsKKysKKysJcmV0dXJuOworK30KKysKKytzdHJ1Y3QgY2hhY2hh cG9seV9jdHhfbXQgKgorK2NoYWNoYXBvbHlfbmV3X210KHVfaW50IHN0YXJ0c2VxbnIsIGNvbnN0 IHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuKQorK3sKKysJc3RydWN0IGNoYWNoYXBvbHlfY3R4 X210ICogY3R4X210ID0geG1hbGxvYyhzaXplb2YoKmN0eF9tdCkpOworKwltZW1zZXQoY3R4X210 LCAwLCBzaXplb2YoKmN0eF9tdCkpOworKwkvKiBJbml0aWFsaXplIHRoZSBzZXF1ZW5jZSBudW1i ZXIuIFdoZW4gcmVrZXlpbmcsIHRoaXMgd29uJ3QgYmUgemVyby4gKi8KKysJY3R4X210LT5zZXFu ciA9IHN0YXJ0c2VxbnI7CisrCWN0eF9tdC0+YmF0Y2hJRCA9IHN0YXJ0c2VxbnIgLyBOVU1TVFJF QU1TOworKwlzdHJ1Y3QgdGhyZWFkRGF0YSBtYWluRGF0YTsKKysJaW50IHREYXRhSTsKKysJaW50 IGdlbktTZmFpbGVkID0gMDsKKysKKysjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQCisrCUVW UF9NQUMgKm1hYyA9IE5VTEw7CisrCWlmICgobWFjID0gRVZQX01BQ19mZXRjaChOVUxMLCAiUE9M WTEzMDUiLCBOVUxMKSkgPT0gTlVMTCkKKysJCWdvdG8gZmFpbDsKKysJaWYgKChjdHhfbXQtPnBv bHlfY3R4ID0gRVZQX01BQ19DVFhfbmV3KG1hYykpID09IE5VTEwpCisrCQlnb3RvIGZhaWw7Cisr CUVWUF9NQUNfZnJlZShtYWMpOyAvKiBubyBsb25nZXIgbmVlZGVkICovCisrCW1hYyA9IE5VTEw7 CisrI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5lZChFVlBfUEtFWV9QT0xZ MTMwNSkKKysJaWYgKChjdHhfbXQtPm1kX2N0eCA9IEVWUF9NRF9DVFhfbmV3KCkpID09IE5VTEwp CisrCQlnb3RvIGZhaWw7CisrCWlmICgoY3R4X210LT5wa2V5ID0gRVZQX1BLRVlfbmV3X21hY19r ZXkoRVZQX1BLRVlfUE9MWTEzMDUsIE5VTEwsCisrCSAgICBjdHhfbXQtPnplcm9zLCBQT0xZMTMw NV9LRVlMRU4pKSA9PSBOVUxMKQorKwkJZ290byBmYWlsOworKwlpZiAoRVZQX0RpZ2VzdFNpZ25J bml0KGN0eF9tdC0+bWRfY3R4LCAmY3R4X210LT5wb2x5X2N0eCwgTlVMTCwgTlVMTCwKKysJICAg IGN0eF9tdC0+cGtleSkgPT0gMCkKKysJCWdvdG8gZmFpbDsKKysjZWxzZQorKwljdHhfbXQtPnBv bHlfY3R4ID0gTlVMTDsKKysjZW5kaWYKKysKKysJY3R4X210LT5iYXRjaGVzW2N0eF9tdC0+YmF0 Y2hJRCAlIDJdLmJhdGNoSUQgPSBjdHhfbXQtPmJhdGNoSUQ7CisrCWN0eF9tdC0+YmF0Y2hlc1so Y3R4X210LT5iYXRjaElEICsgMSkgJSAyXS5iYXRjaElEID0KKysJICAgIGN0eF9tdC0+YmF0Y2hJ RCArIDE7CisrCisrCS8qIGluaXRpYWxpemUgYmF0Y2hlc1swXSB0ZHMgKi8KKysJZm9yICh0RGF0 YUkgPSAwOyB0RGF0YUkgPCBOVU1USFJFQURTOyB0RGF0YUkrKykgeworKwkJaWYgKGluaXRpYWxp emVfdGhyZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1swXS50ZHNbdERhdGFJXSksCisrCQkgICAg a2V5KSAhPSAwKQorKwkJCWJyZWFrOworKwl9CisrCWlmICh0RGF0YUkgPCBOVU1USFJFQURTKSB7 CisrCQkvKiBCYWNrdHJhY2sgc3RhcnRpbmcgd2l0aCAndERhdGFJIC0gMScgKi8KKysJCWZvciAo dERhdGFJLS07IHREYXRhSSA+PSAwOyB0RGF0YUktLSkKKysJCQlmcmVlX3RocmVhZERhdGEoJihj dHhfbXQtPmJhdGNoZXNbMF0udGRzW3REYXRhSV0pKTsKKysJCWdvdG8gZmFpbDsKKysJfQorKwkv KiBpbml0aWFsaXplIGJhdGNoZXNbMV0gdGRzICovCisrCWZvciAodERhdGFJID0gMDsgdERhdGFJ IDwgTlVNVEhSRUFEUzsgdERhdGFJKyspIHsKKysJCWlmIChpbml0aWFsaXplX3RocmVhZERhdGEo JihjdHhfbXQtPmJhdGNoZXNbMV0udGRzW3REYXRhSV0pLAorKwkJICAgIGtleSkgIT0gMCkKKysJ CQlicmVhazsKKysJfQorKwlpZiAodERhdGFJIDwgTlVNVEhSRUFEUykgeworKwkJLyogQmFja3Ry YWNrIHN0YXJ0aW5nIHdpdGggJ3REYXRhSSAtIDEnICovCisrCQlmb3IgKHREYXRhSS0tOyB0RGF0 YUkgPj0gMDsgdERhdGFJLS0pCisrCQkJZnJlZV90aHJlYWREYXRhKCYoY3R4X210LT5iYXRjaGVz WzFdLnRkc1t0RGF0YUldKSk7CisrCQkvKiBGcmVlIHRoZSBiYXRjaGVzWzBdIHRkcyB0b28gKi8K KysJCWZvciAodERhdGFJID0gTlVNVEhSRUFEUyAtIDE7IHREYXRhSSA+PSAwOyB0RGF0YUktLSkK KysJCQlmcmVlX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMF0udGRzW3REYXRhSV0pKTsK KysJCWdvdG8gZmFpbDsKKysJfQorKworKwlpZiAoaW5pdGlhbGl6ZV90aHJlYWREYXRhKCZtYWlu RGF0YSwga2V5KSAhPSAwKSB7CisrCQljaGFjaGFwb2x5X2ZyZWVfbXQoY3R4X210KTsKKysJCWV4 cGxpY2l0X2J6ZXJvKCZzdGFydHNlcW5yLCBzaXplb2Yoc3RhcnRzZXFucikpOworKwkJcmV0dXJu IE5VTEw7CisrCX0KKysKKysJZm9yIChpbnQgaT0wOyBpPDI7IGkrKykgeworKwkJdV9pbnQgcmVm c2VxbnIgPSBjdHhfbXQtPmJhdGNoZXNbaV0uYmF0Y2hJRCAqIE5VTVNUUkVBTVM7CisrCQlmb3Ig KGludCBqID0gc3RhcnRzZXFuciA+IHJlZnNlcW5yID8gc3RhcnRzZXFuciAtIHJlZnNlcW5yIDog MDsKKysJCSAgICAgajxOVU1TVFJFQU1TOyBqKyspIHsKKysJCQlpZiAoZ2VuZXJhdGVfa2V5c3Ry ZWFtKCYoY3R4X210LT5iYXRjaGVzW2ldLnN0cmVhbXNbal0pLAorKwkJCSAgICByZWZzZXFuciAr IGosICZtYWluRGF0YSwgY3R4X210LT56ZXJvcykgPT0gLTEpIHsKKysJCQkJZGVidWdfZigiZ2Vu ZXJhdGVfa2V5c3RyZWFtIGZhaWxlZCBpbiAiCisrCQkJCSAgICAiY2hhY2hhMjAtcG9seTEzMDVA aHBuc3NoLm9yZyIpOworKwkJCQlnZW5LU2ZhaWxlZCA9IDE7CisrCQkJCWJyZWFrOyAvKiBpbXBl cmZlY3QsIGJ1dCBpdCBoZWxwcyAqLworKwkJCX0KKysJCX0KKysJfQorKworKwlmcmVlX3RocmVh ZERhdGEoJm1haW5EYXRhKTsKKysKKysJaWYgKGdlbktTZmFpbGVkICE9IDApIHsKKysJCWNoYWNo YXBvbHlfZnJlZV9tdChjdHhfbXQpOworKwkJZXhwbGljaXRfYnplcm8oJnN0YXJ0c2VxbnIsIHNp emVvZihzdGFydHNlcW5yKSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwkvKiBTdG9yZSB0 aGUgUElEIHNvIHRoYXQgaW4gdGhlIGZ1dHVyZSwgd2UgY2FuIHRlbGwgaWYgd2UncmUgYSBmb3Jr ICovCisrCWN0eF9tdC0+bWFpbnBpZCA9IGdldHBpZCgpOworKwljdHhfbXQtPnNlbGZfdGlkID0g cHRocmVhZF9zZWxmKCk7CisrCWN0eF9tdC0+bWFuYWdlcl90aWRbMF0gPSBjdHhfbXQtPnNlbGZf dGlkOworKwljdHhfbXQtPm1hbmFnZXJfdGlkWzFdID0gY3R4X210LT5zZWxmX3RpZDsKKysJLyog d2FzIHJlcG9ydGluZyB0aGUgVElEIHVzaW5nIGdldHRpZCgpIGJ1dCBpdCdzIG5vdCBwb3J0YWJs ZSAqLworKwlkZWJ1ZzJfZigiPG1haW4gdGhyZWFkOiBwaWQ9JXUsIHB0aWQ9MHglbHg+IiwgZ2V0 cGlkKCksIHB0aHJlYWRfc2VsZigpKTsKKysKKysJLyogU3VjY2VzcyEgKi8KKysJZXhwbGljaXRf Ynplcm8oJnN0YXJ0c2VxbnIsIHNpemVvZihzdGFydHNlcW5yKSk7CisrCXJldHVybiBjdHhfbXQ7 CisrCisrIGZhaWw6CisrI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAorKwlFVlBfTUFDX2Zy ZWUobWFjKTsKKysJaWYgKGN0eF9tdC0+cG9seV9jdHggIT0gTlVMTCkgeworKwkJRVZQX01BQ19D VFhfZnJlZShjdHhfbXQtPnBvbHlfY3R4KTsKKysJCWN0eF9tdC0+cG9seV9jdHggPSBOVUxMOwor Kwl9CisrI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5lZChFVlBfUEtFWV9Q T0xZMTMwNSkKKysJaWYgKGN0eF9tdC0+bWRfY3R4ICE9IE5VTEwpIHsKKysJCUVWUF9NRF9DVFhf ZnJlZShjdHhfbXQtPm1kX2N0eCk7CisrCQljdHhfbXQtPm1kX2N0eCA9IE5VTEw7CisrCX0KKysJ aWYgKGN0eF9tdC0+cGtleSAhPSBOVUxMKSB7CisrCQlFVlBfUEtFWV9mcmVlKGN0eF9tdC0+cGtl eSk7CisrCQljdHhfbXQtPnBrZXkgPSBOVUxMOworKwl9CisrI2VuZGlmCisrCWZyZWV6ZXJvKGN0 eF9tdCwgc2l6ZW9mKCpjdHhfbXQpKTsKKysJZXhwbGljaXRfYnplcm8oJnN0YXJ0c2VxbnIsIHNp emVvZihzdGFydHNlcW5yKSk7CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiBQb3J0YWJsZSBG YXN0WE9SIHVzaW5nIG1lbWNweSB0byBhdm9pZCBzdHJpY3QtYWxpYXNpbmcgYW5kIGFsaWdubWVu dCBVQi4KKysgKiBVc2VzIDEyOC1iaXQgY2h1bmtzIG9uIGNvbXBpbGVycyB0aGF0IHN1cHBvcnQg X191aW50MTI4X3QgKEdDQy9DbGFuZyBvbgorKyAqIDY0LWJpdCBwbGF0Zm9ybXMpLCBmYWxscyBi YWNrIHRvIHVpbnQ2NF90IGVsc2V3aGVyZS4gKi8KKytzdGF0aWMgaW5saW5lIHZvaWQKKytmYXN0 WE9SMih1X2NoYXIgKmRlc3QsIGNvbnN0IHVfY2hhciAqc3JjLCBjb25zdCB1X2NoYXIgKmtleXN0 cmVhbSwgdV9pbnQgbGVuKQorK3sKKysjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXykKKysJ dHlwZWRlZiBfX3VpbnQxMjhfdCBjaHVuazsKKysjZWxzZQorKwl0eXBlZGVmIHVpbnQ2NF90IGNo dW5rOworKyNlbmRpZgorKwlzaXplX3QgaSA9IDA7CisrCXdoaWxlIChpICsgc2l6ZW9mKGNodW5r KSA8PSBsZW4pIHsKKysJCWNodW5rIGEsIGIsIHI7CisrCQltZW1jcHkoJmEsIHNyYyArIGksIHNp emVvZihhKSk7CisrCQltZW1jcHkoJmIsIGtleXN0cmVhbSArIGksIHNpemVvZihiKSk7CisrCQly ID0gYSBeIGI7CisrCQltZW1jcHkoZGVzdCArIGksICZyLCBzaXplb2YocikpOworKwkJaSArPSBz aXplb2YoY2h1bmspOworKwl9CisrCXdoaWxlIChpIDwgbGVuKSB7CisrCQlkZXN0W2ldID0gc3Jj W2ldIF4ga2V5c3RyZWFtW2ldOworKwkJaSsrOworKwl9CisrfQorKworK3N0cnVjdCBtYW5hZ2Vy X3RocmVhZF9hcmdzICoKKyttYW5hZ2VyX3RocmVhZChzdHJ1Y3QgbWFuYWdlcl90aHJlYWRfYXJn cyAqIG1hcmdzKSB7CisrCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHZhbGlkIGRhdGEgYmVmb3JlIHBy b2NlZWRpbmcgKi8KKysJaWYgKG1hcmdzID09IE5VTEwpCisrCQlyZXR1cm4gTlVMTDsKKysKKysJ c3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICogY3R4X210ID0gbWFyZ3MtPmN0eF9tdDsKKysJaWYg KGN0eF9tdCA9PSBOVUxMKSB7CisrCQltYXJncy0+cmV0dmFsID0gMTsKKysJCXJldHVybiBtYXJn czsKKysJfQorKworKwl1X2ludCBvbGRCYXRjaElEID0gbWFyZ3MtPm9sZEJhdGNoSUQ7CisrCisr CXN0cnVjdCBtdF9rZXlzdHJlYW1fYmF0Y2ggKiBiYXRjaCA9ICYoY3R4X210LT5iYXRjaGVzW29s ZEJhdGNoSUQgJSAyXSk7CisrCWlmIChiYXRjaC0+YmF0Y2hJRCAhPSBvbGRCYXRjaElEKSB7Cisr CQlkZWJ1Z19mKCJQb3N0LWNyeXB0IGJhdGNoIG1pc3MhIFNlZWtpbmcgJXUsIGZvdW5kICV1LiBG YWlsaW5nLiIsCisrCQkgICAgb2xkQmF0Y2hJRCwgYmF0Y2gtPmJhdGNoSUQpOworKwkJbWFyZ3Mt PnJldHZhbCA9IDE7CisrCQlyZXR1cm4gbWFyZ3M7CisrCX0KKysKKysJbWFyZ3MtPnJldHZhbCA9 IDA7CisrCXVfaW50IGJhdGNoSUQgPSBvbGRCYXRjaElEICsgMjsKKysKKysJcHRocmVhZF90IHRp ZFtOVU1USFJFQURTXTsKKysJc3RydWN0IHdvcmtlcl90aHJlYWRfYXJncyAqIHdhcmdzID0gbWFs bG9jKE5VTVRIUkVBRFMgKiBzaXplb2YoKndhcmdzKSk7CisrCWludCB0aTsKKysKKysJZm9yICh0 aSA9IDA7IHRpIDwgTlVNVEhSRUFEUzsgdGkrKykgeworKwkJd2FyZ3NbdGldLmJhdGNoSUQgPSBi YXRjaElEOworKwkJd2FyZ3NbdGldLmJhdGNoID0gYmF0Y2g7CisrCQl3YXJnc1t0aV0udGhyZWFk SW5kZXggPSB0aTsKKysJCXdhcmdzW3RpXS56ZXJvcyA9IGN0eF9tdC0+emVyb3M7CisrCQlpZiAo cHRocmVhZF9jcmVhdGUoJih0aWRbdGldKSwgTlVMTCwgKHZvaWQgKikgd29ya2VyX3RocmVhZCwK KysJCSAgICAmKHdhcmdzW3RpXSkpICE9IDApIHsKKysJCQltYXJncy0+cmV0dmFsID0gMTsKKysJ CQlicmVhazsKKysJCX0KKysJfQorKwlmb3IgKDsgdGkgPCBOVU1USFJFQURTOyB0aSsrKSAvKiBm b3IgZXJyb3IgY29uZGl0aW9uICovCisrCQl0aWRbdGldID0gcHRocmVhZF9zZWxmKCk7CisrCisr CXN0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgKiByZXR3YXJnczsKKysKKysJZm9yICh0aSA9IDA7 IHRpIDwgTlVNVEhSRUFEUzsgdGkrKykgeworKwkJaWYgKHRpZFt0aV0gPT0gcHRocmVhZF9zZWxm KCkpIHsKKysJCQltYXJncy0+cmV0dmFsID0gMTsgLyogcmVkdW5kYW50LCBidXQgaGFybWxlc3Mg Ki8KKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChwdGhyZWFkX2pvaW4odGlkW3RpXSwgKHZv aWQgKiopICZyZXR3YXJncykgPT0gMCkgeworKwkJCWlmIChyZXR3YXJncyA9PSBOVUxMKSB7Cisr CQkJCWRlYnVnX2YoIldvcmtlciB0aHJlYWQgcmV0dXJuZWQgTlVMTCEiKTsKKysJCQkJbWFyZ3Mt PnJldHZhbCA9IDE7CisrCQkJfSBlbHNlIGlmIChyZXR3YXJncyA9PSBQVEhSRUFEX0NBTkNFTEVE KSB7CisrCQkJCWRlYnVnX2YoIldvcmtlciB0aHJlYWQgY2FuY2VsZWQhIik7CisrCQkJCW1hcmdz LT5yZXR2YWwgPSAxOworKwkJCX0gZWxzZSB7CisrCQkJCWlmIChyZXR3YXJncy0+cmV0dmFsICE9 IDApIHsKKysJCQkJCWRlYnVnX2YoIldvcmtlciB0aHJlYWQgZXJyb3IgKCVkKSIsCisrCQkJCQkg ICAgcmV0d2FyZ3MtPnJldHZhbCk7CisrCQkJCQltYXJncy0+cmV0dmFsID0gMTsKKysJCQkJfQor KwkJCQlpZiAocmV0d2FyZ3MgIT0gJih3YXJnc1t0aV0pKSB7CisrCQkJCQlkZWJ1Z19mKCJXb3Jr ZXIgdGhyZWFkIGRpZG4ndCByZXR1cm4gIgorKwkJCQkJICAgICJleHBlY3RlZCBzdHJ1Y3R1cmUh Iik7CisrCQkJCQltYXJncy0+cmV0dmFsID0gMTsKKysJCQkJfQorKwkJCX0KKysJCX0gZWxzZSB7 CisrCQkJZGVidWdfZigicHRocmVhZF9qb2luIGVycm9yISIpOworKwkJCW1hcmdzLT5yZXR2YWwg PSAxOworKwkJfQorKwl9CisrCWZyZWUod2FyZ3MpOworKworKwlpZiAobWFyZ3MtPnJldHZhbCA9 PSAwKSB7CisrCQliYXRjaC0+YmF0Y2hJRCA9IGJhdGNoSUQ7CisrCX0KKysKKysJcmV0dXJuIG1h cmdzOworK30KKysKKytpbnQKKytjaGFjaGFwb2x5X2NyeXB0X210KHN0cnVjdCBjaGFjaGFwb2x5 X2N0eF9tdCAqY3R4X210LCB1X2ludCBzZXFuciwgdV9jaGFyICpkZXN0LAorKyAgICBjb25zdCB1 X2NoYXIgKnNyYywgdV9pbnQgbGVuLCB1X2ludCBhYWRsZW4sIHVfaW50IGF1dGhsZW4sIGludCBk b19lbmNyeXB0KQorK3sKKysjaWZkZWYgU0FGRVRZCisrCWlmIChjdHhfbXQtPm1haW5waWQgIT0g Z2V0cGlkKCkpIHsgLyogd2UncmUgYSBmb3JrICovCisrCQkvKgorKwkJICogVE9ETzogdGhpcyBp cyBFWFRSRU1FTFkgUkFSRSwgbWF5IG5ldmVyIGhhcHBlbiBhdCBhbGwgKG9ubHkKKysJCSAqIGlm IHRoZSBmb3JrIGNhbGxzIGNyeXB0KSwgc28gd2Ugc2hvdWxkIHRlbGwgdGhlIGNvbXBpbGVyLgor KwkJICovCisrCQkvKiBUaGUgd29ya2VyIHRocmVhZHMgZG9uJ3QgZXhpc3QsIHdlIGNvdWxkIHNw YXduIHRoZW0/ICovCisrCQlkZWJ1Z19mKCJGb3JrIGNhbGxlZCBjcnlwdCB3aXRob3V0IHdvcmtl cnMhIik7CisrCQljaGFjaGFwb2x5X2ZyZWVfbXQoY3R4X210KTsKKysJCXJldHVybiBTU0hfRVJS X0lOVEVSTkFMX0VSUk9SOworKwl9CisrI2VuZGlmCisrCisrCXB0aHJlYWRfdCAqIG1hbmFnZXJf dGlkID0gJihjdHhfbXQtPm1hbmFnZXJfdGlkW2N0eF9tdC0+YmF0Y2hJRCAlIDJdKTsKKysJaWYg KHVubGlrZWx5KCptYW5hZ2VyX3RpZCAhPSBjdHhfbXQtPnNlbGZfdGlkKSkgeworKwkJaW50IHJl dCA9IGpvaW5fbWFuYWdlcl90aHJlYWQoKm1hbmFnZXJfdGlkKTsKKysJCSptYW5hZ2VyX3RpZCA9 IGN0eF9tdC0+c2VsZl90aWQ7CisrCQlpZiAocmV0ICE9IDApCisrCQkJcmV0dXJuIFNTSF9FUlJf SU5URVJOQUxfRVJST1I7CisrCX0KKysKKysJc3RydWN0IG10X2tleXN0cmVhbV9iYXRjaCAqIGJh dGNoID0KKysJICAgICYoY3R4X210LT5iYXRjaGVzW2N0eF9tdC0+YmF0Y2hJRCAlIDJdKTsKKysK KysJc3RydWN0IG10X2tleXN0cmVhbSAqIGtzID0gJihiYXRjaC0+c3RyZWFtc1tzZXFuciAlIE5V TVNUUkVBTVNdKTsKKysKKysJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKworKyNp ZmRlZiBTQUZFVFkKKysJaWYgKGJhdGNoLT5iYXRjaElEID09IGN0eF9tdC0+YmF0Y2hJRCkgeyAv KiBTYWZldHkgY2hlY2sgKi8KKysjZW5kaWYKKysJCS8qIGNoZWNrIHRhZyBiZWZvcmUgYW55dGhp bmcgZWxzZSAqLworKwkJaWYgKCFkb19lbmNyeXB0KSB7CisrCQkJY29uc3QgdV9jaGFyICp0YWcg PSBzcmMgKyBhYWRsZW4gKyBsZW47CisrCQkJdV9jaGFyIGV4cGVjdGVkX3RhZ1tQT0xZMTMwNV9U QUdMRU5dOworKyNpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9QS0VZ X1BPTFkxMzA1KQorKwkJCWlmICgoRVZQX1BLRVlfQ1RYX2N0cmwoY3R4X210LT5wb2x5X2N0eCwg LTEsCisrCQkJICAgIEVWUF9QS0VZX09QX1NJR05DVFgsIEVWUF9QS0VZX0NUUkxfU0VUX01BQ19L RVksCisrCQkJICAgIFBPTFkxMzA1X0tFWUxFTiwga3MtPnBvbHlfa2V5KSA8PSAwKSB8fAorKwkJ CSAgICAoRVZQX0RpZ2VzdFNpZ25VcGRhdGUoY3R4X210LT5tZF9jdHgsIHNyYywgYWFkbGVuICsg bGVuKSA9PSAwKSkgeworKwkJCQlkZWJ1Z19mKCJTU0wgZXJyb3Igd2hpbGUgZGVjcnlwdGluZyBw b2x5MTMwNSB0YWciKTsKKysJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCQkJ fQorKwkJCWN0eF9tdC0+cHRhZ2xlbiA9IFBPTFkxMzA1X1RBR0xFTjsKKysJCQlpZiAoRVZQX0Rp Z2VzdFNpZ25GaW5hbChjdHhfbXQtPm1kX2N0eCwgZXhwZWN0ZWRfdGFnLAorKwkJCSAgICAmY3R4 X210LT5wdGFnbGVuKSA9PSAwKSB7CisrCQkJCWRlYnVnX2YoIlNTTCBlcnJvciB3aGlsZSBmaW5h bGl6aW5nIGRlY3lycHRlZCBwb2x5MTMwNSIpOworKwkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5B TF9FUlJPUjsKKysJCQl9CisrI2Vsc2UKKysJCQlwb2x5MTMwNV9hdXRoKGN0eF9tdC0+cG9seV9j dHgsIGV4cGVjdGVkX3RhZywgc3JjLAorKwkJCSAgICBhYWRsZW4gKyBsZW4sIGtzLT5wb2x5X2tl eSk7CisrI2VuZGlmCisrCQkJaWYgKHRpbWluZ3NhZmVfYmNtcChleHBlY3RlZF90YWcsIHRhZywg UE9MWTEzMDVfVEFHTEVOKQorKwkJCSAgICAhPSAwKQorKwkJCQlyID0gU1NIX0VSUl9NQUNfSU5W QUxJRDsKKysJCQlleHBsaWNpdF9iemVybyhleHBlY3RlZF90YWcsIHNpemVvZihleHBlY3RlZF90 YWcpKTsKKysJCX0KKysJCWlmIChyICE9IFNTSF9FUlJfTUFDX0lOVkFMSUQpIHsKKysJCQkvKiBD cnlwdCBhZGRpdGlvbmFsIGRhdGEgKGkuZS4sIHBhY2tldCBsZW5ndGgpICovCisrCQkJLyogVE9E TzogaXMgYWFkbGVuIGFsd2F5cyBmb3VyIGJ5dGVzPyAqLworKwkJCS8qIFRPRE86IGRvIHdlIGFs d2F5cyBoYXZlIGFuIGFhZGxlbj8gKi8KKysJCQlpZiAoYWFkbGVuKQorKwkJCQlmb3IgKHVfaW50 IGk9MDsgaTxhYWRsZW47IGkrKykKKysJCQkJCWRlc3RbaV0gPSBrcy0+aGVhZGVyU3RyZWFtW2ld IF4gc3JjW2ldOworKwkJCS8qIENyeXB0IHBheWxvYWQgKi8KKysJCQlmYXN0WE9SMihkZXN0K2Fh ZGxlbixzcmMrYWFkbGVuLGtzLT5tYWluU3RyZWFtLGxlbik7CisrCQkJLyogY2FsY3VsYXRlIGFu ZCBhcHBlbmQgdGFnICovCisrI2lmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQo RVZQX1BLRVlfUE9MWTEzMDUpCisrCQkJaWYgKGRvX2VuY3J5cHQpIHsKKysJCQkJaWYgKChFVlBf UEtFWV9DVFhfY3RybChjdHhfbXQtPnBvbHlfY3R4LCAtMSwKKysJCQkJICAgIEVWUF9QS0VZX09Q X1NJR05DVFgsIEVWUF9QS0VZX0NUUkxfU0VUX01BQ19LRVksCisrCQkJCSAgICBQT0xZMTMwNV9L RVlMRU4sIGtzLT5wb2x5X2tleSkgPD0wKSB8fAorKwkJCQkgICAgKEVWUF9EaWdlc3RTaWduVXBk YXRlKGN0eF9tdC0+bWRfY3R4LCBkZXN0LCBhYWRsZW4gKyBsZW4pID09IDApKSB7CisrCQkJCQlk ZWJ1Z19mICgiU1NMIGVycm9yIHdoaWxlIGVuY3J5cHRpbmcgcG9seTEzMDUgdGFnIik7CisrCQkJ CQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJCQkJfQorKwkJCQljdHhfbXQtPnB0 YWdsZW4gPSBQT0xZMTMwNV9UQUdMRU47CisrCQkJCWlmIChFVlBfRGlnZXN0U2lnbkZpbmFsKGN0 eF9tdC0+bWRfY3R4LCBkZXN0K2FhZGxlbitsZW4sCisrCQkJCSAgICAmY3R4X210LT5wdGFnbGVu KSA9PSAwKSB7CisrCQkJCQlkZWJ1Z19mKCJTU0wgZXJyb3Igd2hpbGUgZmluYWxpemluZyBkZWN5 cnB0ZWQgcG9seTEzMDUiKTsKKysJCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwor KwkJCQl9CisrCQkJfQorKyNlbHNlCisrCQkJaWYgKGRvX2VuY3J5cHQpCisrCQkJCXBvbHkxMzA1 X2F1dGgoY3R4X210LT5wb2x5X2N0eCwgZGVzdCthYWRsZW4rbGVuLAorKwkJCQkgICAgZGVzdCwg YWFkbGVuK2xlbiwga3MtPnBvbHlfa2V5KTsKKysjZW5kaWYKKysJCQlyPTA7IC8qIFN1Y2Nlc3Mh ICovCisrCQl9CisrCQlpZiAocikgLyogQW55dGhpbmcgbm9uemVybyBpcyBhbiBlcnJvci4gKi8K KysJCQlyZXR1cm4gcjsKKysKKysJCWN0eF9tdC0+c2VxbnIgPSBzZXFuciArIDE7CisrCisrCQlp ZiAodW5saWtlbHkoY3R4X210LT5zZXFuciAvIE5VTVNUUkVBTVMgPiBjdHhfbXQtPmJhdGNoSUQp KSB7CisrCQkJc3RydWN0IG1hbmFnZXJfdGhyZWFkX2FyZ3MgKiBhcmdzID0KKysJCQkgICAgbWFs bG9jKHNpemVvZigqYXJncykpOworKwkJCWlmIChhcmdzID09IE5VTEwpIHsKKysJCQkJcmV0dXJu IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCQkJfQorKwkJCWFyZ3MtPmN0eF9tdCA9IGN0eF9t dDsKKysJCQlhcmdzLT5vbGRCYXRjaElEID0gY3R4X210LT5iYXRjaElEOworKwkJCWlmIChwdGhy ZWFkX2NyZWF0ZSgmKGN0eF9tdC0+bWFuYWdlcl90aWRbY3R4X210LT5iYXRjaElECisrCQkJICAg ICUgMl0pLCBOVUxMLCAodm9pZCAqKSBtYW5hZ2VyX3RocmVhZCwgYXJncykgIT0gMCkgeworKwkJ CQlmcmVlKGFyZ3MpOworKwkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJCQl9 CisrCQkJY3R4X210LT5iYXRjaElEID0gY3R4X210LT5zZXFuciAvIE5VTVNUUkVBTVM7CisrCQl9 CisrCisrCQkvKiBUT0RPOiBOb3RoaW5nIHdlIG5lZWQgdG8gc2FuaXRpemUgaGVyZT8gKi8KKysK KysJCXJldHVybiAwOworKyNpZmRlZiBTQUZFVFkKKysJfSBlbHNlIHsgLyogQmFkLCBpdCdzIHRo ZSB3cm9uZyBiYXRjaC4gKi8KKysJCWRlYnVnX2YoICJQcmUtY3J5cHQgYmF0Y2ggbWlzcyEgU2Vl a2luZyAldSwgZm91bmQgJXUuIEZhaWxpbmcuIiwKKysJCSAgICBjdHhfbXQtPmJhdGNoSUQsIGJh dGNoLT5iYXRjaElEKTsKKysJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKwl9Cisr I2VuZGlmCisrfQorKworK2ludAorK2NoYWNoYXBvbHlfZ2V0X2xlbmd0aF9tdChzdHJ1Y3QgY2hh Y2hhcG9seV9jdHhfbXQgKmN0eF9tdCwgdV9pbnQgKnBsZW5wLAorKyAgICB1X2ludCBzZXFuciwg Y29uc3QgdV9jaGFyICpjcCwgdV9pbnQgbGVuKQorK3sKKysJLyogVE9ETzogYWRkIGNvbXBpbGVy IGhpbnRzICovCisrI2lmZGVmIFNBRkVUWQorKwlpZiAoY3R4X210LT5tYWlucGlkICE9IGdldHBp ZCgpKSB7IC8qIFVzZSBzZXJpYWwgbW9kZSBpZiB3ZSdyZSBhIGZvcmsgKi8KKysJCWRlYnVnX2Yo IldlJ3JlIGEgZm9yay4gRmFpbGluZy4iKTsKKysJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VS Uk9SOworKwl9CisrI2VuZGlmCisrCisrCWlmIChsZW4gPCA0KQorKwkJcmV0dXJuIFNTSF9FUlJf TUVTU0FHRV9JTkNPTVBMRVRFOworKworKwlwdGhyZWFkX3QgKiBtYW5hZ2VyX3RpZCA9ICYoY3R4 X210LT5tYW5hZ2VyX3RpZFtjdHhfbXQtPmJhdGNoSUQgJSAyXSk7CisrCWlmICh1bmxpa2VseSgq bWFuYWdlcl90aWQgIT0gY3R4X210LT5zZWxmX3RpZCkpIHsKKysJCWludCByZXQgPSBqb2luX21h bmFnZXJfdGhyZWFkKCptYW5hZ2VyX3RpZCk7CisrCQkqbWFuYWdlcl90aWQgPSBjdHhfbXQtPnNl bGZfdGlkOworKwkJaWYgKHJldCAhPSAwKQorKwkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VS Uk9SOworKwl9CisrCisrCXVfY2hhciBidWZbNF07CisrI2lmZGVmIFNBRkVUWQorKwl1X2ludCBz b3VnaHRfYmF0Y2hJRCA9IHNlcW5yIC8gTlVNU1RSRUFNUzsKKysjZW5kaWYKKysJc3RydWN0IG10 X2tleXN0cmVhbV9iYXRjaCAqIGJhdGNoID0KKysJICAgICYoY3R4X210LT5iYXRjaGVzW2N0eF9t dC0+YmF0Y2hJRCAlIDJdKTsKKysJc3RydWN0IG10X2tleXN0cmVhbSAqIGtzID0gJihiYXRjaC0+ c3RyZWFtc1tzZXFuciAlIE5VTVNUUkVBTVNdKTsKKysjaWZkZWYgU0FGRVRZCisrCWlmIChiYXRj aC0+YmF0Y2hJRCA9PSBzb3VnaHRfYmF0Y2hJRCkgeworKyNlbmRpZgorKwkJZm9yICh1X2ludCBp PTA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKQorKwkJCWJ1ZltpXT1rcy0+aGVhZGVyU3RyZWFtW2ld IF4gY3BbaV07CisrCQkqcGxlbnAgPSBQRUVLX1UzMihidWYpOworKwkJcmV0dXJuIDA7CisrI2lm ZGVmIFNBRkVUWQorKwl9IGVsc2UgeworKwkJZGVidWdfZigiQmF0Y2ggbWlzcyEgU2Vla2luZyAl dSwgZm91bmQgJXUuIEZhaWxpbmcuIiwKKysJCSAgICBzb3VnaHRfYmF0Y2hJRCwgYmF0Y2gtPmJh dGNoSUQpOworKwkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCX0KKysjZW5kaWYK Kyt9CisrI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9FVlBfQ0hBQ0hBMjApICYmICFkZWZpbmVkKEhB VkVfQlJPS0VOX0NIQUNIQTIwKSAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lw aGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10Lmggb3BlbnNzaC0xMC41cDEvY2lwaGVyLWNoYWNo YXBvbHktbGliY3J5cHRvLW10LmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jaGFj aGFwb2x5LWxpYmNyeXB0by1tdC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzaC0xMC41cDEvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmgJMjAy Ni0wOS0yMSAwNzowNjo1OS44ODQ0NTg3OTggKzAyMDAKK0BAIC0wLDAgKzEsNDUgQEAKKysvKgor KyAqIENvcHlyaWdodCAoYykgMjAyMyBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUg TWVsbG9uIFVuaXZlcnNpdHkuCisrICoKKysgKiAgQXV0aG9yOiBNaXRjaGVsbCBEb3JyZWxsIDxt d2RAcHNjLmVkdT4KKysgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgIDxyYXBpZXJAcHNjLmVkdT4K KysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQg TGljZW5zZS4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorKyAqIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgor KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgTUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7CisrICogaWYg bm90LCBzZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KKysgKgorKyAqLwor KworKyNpZm5kZWYgQ0hBQ0hBX1BPTFlfTElCQ1JZUFRPX01UX0gKKysjZGVmaW5lIENIQUNIQV9Q T0xZX0xJQkNSWVBUT19NVF9ICisrCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRl ICJjaGFjaGEuaCIKKysjaW5jbHVkZSAicG9seTEzMDUuaCIKKysKKysjaWZuZGVmIENIQUNIQV9L RVlMRU4KKysjZGVmaW5lIENIQUNIQV9LRVlMRU4JMzIgLyogT25seSAyNTYgYml0IGtleXMgdXNl ZCBoZXJlICovCisrI2VuZGlmCisrCisrc3RydWN0IGNoYWNoYXBvbHlfY3R4X210OyAvKiBkZWZp bmVkIGluIGNpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5jICovCisrCisrc3RydWN0IGNo YWNoYXBvbHlfY3R4X210ICpjaGFjaGFwb2x5X25ld19tdCh1X2ludCBzdGFydHNlcW5yLCBjb25z dCB1X2NoYXIgKmtleSwgdV9pbnQga2V5bGVuKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19idWZmZXJfXywg MiwgMykpKTsKKysKKyt2b2lkICAgY2hhY2hhcG9seV9mcmVlX210KHN0cnVjdCBjaGFjaGFwb2x5 X2N0eF9tdCAqY3BjdHgpOworKworK2ludCAgICBjaGFjaGFwb2x5X2NyeXB0X210KHN0cnVjdCBj aGFjaGFwb2x5X2N0eF9tdCAqY3BjdHgsIHVfaW50IHNlcW5yLAorKwkJCSAgIHVfY2hhciAqZGVz dCwgY29uc3QgdV9jaGFyICpzcmMsIHVfaW50IGxlbiwgdV9pbnQgYWFkbGVuLAorKwkJCSAgIHVf aW50IGF1dGhsZW4sIGludCBkb19lbmNyeXB0KTsKKysKKytpbnQgICAgY2hhY2hhcG9seV9nZXRf bGVuZ3RoX210KHN0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdCAqY3BjdHgsCisrCQkJCXVfaW50ICpw bGVucCwgdV9pbnQgc2VxbnIsIGNvbnN0IHVfY2hhciAqY3AsIHVfaW50IGxlbikKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fYnVm ZmVyX18sIDQsIDUpKSk7CisrCisrI2VuZGlmIC8qIENIQUNIQV9QT0xZX0xJQkNSWVBUT19NVF9I ICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXItY3RyLW10LmMgb3BlbnNz aC0xMC41cDEvY2lwaGVyLWN0ci1tdC5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXIt Y3RyLW10LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3No LTEwLjVwMS9jaXBoZXItY3RyLW10LmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODQ2MDkzOTUgKzAy MDAKK0BAIC0wLDAgKzEsNjgxIEBACisrLyoKKysgKiBPcGVuU1NIIE11bHRpLXRocmVhZGVkIEFF Uy1DVFIgQ2lwaGVyCisrICoKKysgKiBBdXRob3I6IEJlbmphbWluIEJlbm5ldHQgPGJlbkBwc2Mu ZWR1PgorKyAqIEF1dGhvcjogTWlrZSBUYXNvdGEgPHRhc290YUBnbWFpbC5jb20+CisrICogQXV0 aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqIENvcHlyaWdodCAoYykgMjAw OC0yMDIxIFBpdHRzYnVyZ2ggU3VwZXJjb21wdXRpbmcgQ2VudGVyLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogQmFzZWQgb24gb3JpZ2luYWwgT3BlblNTSCBBRVMtQ1RSIGNpcGhlci4g U21hbGwgcG9ydGlvbnMgcmVtYWluIHVuY2hhbmdlZCwKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMg TWFya3VzIEZyaWVkbCA8bWFya3VzQG9wZW5ic2Qub3JnPgorKyAqCisrICogUGVybWlzc2lvbiB0 byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55 CisrICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92 aWRlZCB0aGF0IHRoZSBhYm92ZQorKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisrICoKKysgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJ RVMKKysgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElF RCBXQVJSQU5USUVTIE9GCisrICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKysgKiBBTlkgU1BFQ0lBTCwgRElS RUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisr ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRT LCBXSEVUSEVSIElOIEFOCisrICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9U SEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKysgKiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyAqLworKyNp bmNsdWRlICJpbmNsdWRlcy5oIgorKworKyNpZiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkgJiYgIWRl ZmluZWQoV0lUSF9PUEVOU1NMMykKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrI2luY2x1 ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysKKysjaW5jbHVkZSAieG1hbGxvYy5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysj aW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgInV0aGFzaC5oIgorKworKy8qIGNvbXBhdGli aWxpdHkgd2l0aCBvbGQgb3IgYnJva2VuIE9wZW5TU0wgdmVyc2lvbnMgKi8KKysjaW5jbHVkZSAi b3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaCIKKysKKysjaWZuZGVmIFVTRV9CVUlMVElO X1JJSk5EQUVMCisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2VuZGlmCisrCisrI2luY2x1 ZGUgPHB0aHJlYWQuaD4KKysKKysjaWZkZWYgX19BUFBMRV9fCisrI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisrI2VuZGlmCisrCisrLyogbm90ZSByZWdh cmRpbmcgdGhyZWFkcyBhbmQgcXVldWVzICovCisrLyogaW5pdGlhbGx5IHRoaXMgY2lwaGVyIHdh cyB3cml0dGVuIGluIGEgd2F5IHRoYXQKKysgKiB0aGUga2V5IHN0cmVhbSB3YXMgZ2VuZXJhdGVk IGluIGEgcGVyIGNpcGhlciBibG9jaworKyAqIGxvb3AuIEZvciBleGFtcGxlLCBpZiB0aGUga2V5 IHN0cmVhbSBxdWV1ZSBsZW5ndGggd2FzCisrICogMTZrIGFuZCB0aGUgY2lwaGVyIGJsb2NrIHNp emUgd2FzIDE2IGJ5dGVzIGl0IHdvdWxkCisrICogZmlsbCB0aGUgcXVldWUgMTYgYnl0ZXMgYXQg YSB0aW1lLiBNaXRjaCBEb3JyZWxsIHBvaW50ZWQKKysgKiBvdXQgdGhhdCB3ZSBjb3VsZCBmaWxs IHRoZSBxdWV1ZSBpbiBvbmNlIGNhbGwgZWxpbWluYXRpbmcKKysgKiBsb29wIGFuZCBtdWx0aXBs ZSBjYWxscyB0byBFVlBfRW5jcnlwdFVwZGF0ZS4gRG9pbmcgc28KKysgKiBkcmFtYXRpY2FsbHkg cmVkdWNlZCBDUFUgbG9hZCBpbiB0aGUgdGhyZWFkcyBhbmQgaW5kaWNhdGVkCisrICogdGhhdCB3 ZSBjb3VsZCBhbHNvIGVsaW1pbmF0ZSBtb3N0IG9mIHRoZSB0aHJlYWRzIGFuZCBxdWV1ZXMKKysg KiBhcyBpdCB3b3VsZCB0YWtlIGZhciBsZXNzIHRpbWUgZm9yIGEgcXVldWUgdG8gZWJ0ZXIgS1Ff RlVMTAorKyAqIHN0YXRlLiBBcyBzdWNoLCB3ZSd2ZSByZWR1Y2VkIHRoZSBkZWZhdWx0IG51bWJl ciBvZiB0aHJlYWRzCisrICogYW5kIHF1ZXVlcyBmcm9tIDIgYW5kIDggKHJlc3BlY3RpdmVseSkg dG8gMSBhbmQgMi4gV2UndmUgYWxzbworKyAqIGVsaW1uYXRlZCB0aGUgbmVlZCB0byBkZXRlcm1p bmUgdGhlIHBoeXNpY2FsIG51bWJlciBvZiBjb3JlcyBvbgorKyAqIHRoZSBzeXN0ZW0gYW5kLCBp ZiB0aGUgdXNlciBkZXNpcmVzLCBjYW4gc3BpbiB1cCBtb3JlIHRocmVhZHMKKysgKiB1c2luZyBh biBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWRkaXRpb25hbGx5LCBxdWV1ZXMgaXMgbm93IGZpeGVk CisrICogYXQgdGhyZWFkX2NvdW50ICsgMS4KKysgKiBjanIgMTAvMTkvMjAyMiAqLworKworKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVOQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKy8q IG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgYW5kIHF1ZXVlcyAqLworKyNkZWZpbmUgTUFYX1RI UkVBRFMgICAgICA0CisrI2RlZmluZSBNQVhfTlVNS1EgICAgICAgIChNQVhfVEhSRUFEUyArIDEp CisrCisrLyogTnVtYmVyIG9mIHByZWdlbiB0aHJlYWRzIHRvIHVzZSAqLworKy8qIHRoaXMgaXMg YSBkZWZhdWx0IHZhbHVlLiBUaGUgYWN0dWFsIG51bWJlciBpcworKyAqIGRldGVybWluZWQgZHVy aW5nIGluaXQgYXMgYSBmdW5jdGlvbiBvZiB0aGUgbnVtYmVyCisrICogb2YgYXZhaWxhYmxlIGNv cmVzICovCisraW50IGNpcGhlcl90aHJlYWRzID0gMTsKKysKKysvKiBOdW1iZXIgb2Yga2V5c3Ry ZWFtIHF1ZXVlcyAqLworKy8qIGlkZWFsbHkgdGhpcyBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHNv IHRoYXQgdGhlcmUgaXMKKysgKiBhbHdheXMgYSBrZXkgcXVldWUgZm9yIGEgdGhyZWFkIHRvIHdv cmsgb24KKysgKiBzbyBtYXliZSBkb3VibGUgb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzLiBBZ2Fp biB0aGlzCisrICogaXMgYSBkZWZhdWx0IGFuZCB0aGUgYWN0dWFsIHZhbHVlIGlzIGRldGVybWlu ZWQgaW4gaW5pdCovCisraW50IG51bWtxID0gMjsKKysKKysvKiBMZW5ndGggb2YgYSBrZXlzdHJl YW0gcXVldWUgKi8KKysvKiBvbmUgcXVldWUgaG9sZHMgNTEyS0IgKDEwMjQgKiAzMiAqIDE2KSBv ZiBrZXkgZGF0YQorKyAqIGJlaW5nIHRoYXQgdGhlIHF1ZXVlcyBhcmUgZGVzdHJveWVkIGFmdGVy IGEgcmVrZXkKKysgKiBhbmQgYXQgbGVhdHMgb25lIGhhcyB0byBiZSBmdWxseSBmaWxsZWQgcHJp b3IgdG8KKysgKiBlbmNpcGhlcmluZyBkYXRhIHdlIGRvbid0IHdhbnQgdGhpcyB0byBiZSB0b28g bGFyZ2UgKi8KKysjZGVmaW5lIEtRTEVOICgxMDI0ICogMzIpCisrCisrLyogUHJvY2Vzc29yIGNh Y2hlbGluZSBsZW5ndGggKi8KKysjZGVmaW5lIENBQ0hFTElORV9MRU4JNjQKKysKKysvKiBDYW4g dGhlIHN5c3RlbSBkbyB1bmFsaWduZWQgbG9hZHMgbmF0aXZlbHk/ICovCisrI2lmIGRlZmluZWQo X19hYXJjaDY0X18pIHx8IFwKKysgICAgZGVmaW5lZChfX2kzODZfXykgICAgfHwgXAorKyAgICBk ZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBcCisrICAgIGRlZmluZWQoX194ODZfNjRfXykKKysjIGRl ZmluZSBDSVBIRVJfVU5BTElHTkVEX09LCisrI2VuZGlmCisrI2lmIGRlZmluZWQoX19TSVpFT0Zf SU5UMTI4X18pCisrIyBkZWZpbmUgQ0lQSEVSX0lOVDEyOF9PSworKyNlbmRpZgorKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0gRU5EIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysj ZGVmaW5lIEhBVkVfTk9ORSAgICAgICAwCisrI2RlZmluZSBIQVZFX0tFWSAgICAgICAgMQorKyNk ZWZpbmUgSEFWRV9JViAgICAgICAgIDIKKytpbnQgWCA9IDA7CisrCisrY29uc3QgRVZQX0NJUEhF UiAqZXZwX2Flc19jdHJfbXQodm9pZCk7CisrCisrLyogS2V5c3RyZWFtIFF1ZXVlIHN0YXRlICov CisrZW51bSB7CisrCUtRSU5JVCwKKysJS1FFTVBUWSwKKysJS1FGSUxMSU5HLAorKwlLUUZVTEws CisrCUtRRFJBSU5JTkcKKyt9OworKworKy8qIEtleXN0cmVhbSBRdWV1ZSBzdHJ1Y3QgKi8KKytz dHJ1Y3Qga3EgeworKwl1X2NoYXIJCWtleXNbS1FMRU5dW0FFU19CTE9DS19TSVpFXTsgLyogWzMy NzY4XVsxNkJdICovCisrCXVfY2hhcgkJY3RyW0FFU19CTE9DS19TSVpFXTsgLyogMTZCICovCisr CXVfY2hhciAgICAgICAgICBwYWQwW0NBQ0hFTElORV9MRU5dOworKwlwdGhyZWFkX211dGV4X3QJ bG9jazsKKysJcHRocmVhZF9jb25kX3QJY29uZDsKKysJaW50ICAgICAgICAgICAgIHFzdGF0ZTsK KysJdV9jaGFyICAgICAgICAgIHBhZDFbQ0FDSEVMSU5FX0xFTl07CisrfTsKKysKKysvKiBDb250 ZXh0IHN0cnVjdCAqLworK3N0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQKKyt7CisrCWxvbmcgdW5z aWduZWQgaW50IHN0cnVjdF9pZDsKKysJaW50ICAgICAgICAgICAgICAga2V5bGVuOworKwlpbnQJ CSAgc3RhdGU7CisrCWludAkJICBxaWR4OworKwlpbnQJCSAgcmlkeDsKKysJaW50ICAgICAgICAg ICAgICAgaWRbTUFYX1RIUkVBRFNdOyAvKiAzMiAqLworKwlBRVNfS0VZICAgICAgICAgICBhZXNf a2V5OworKwljb25zdCB1X2NoYXIgICAgICpvcmlnX2tleTsKKysJdV9jaGFyCQkgIGFlc19jb3Vu dGVyW0FFU19CTE9DS19TSVpFXTsgLyogMTZCICovCisrCXB0aHJlYWRfdAkgIHRpZFtNQVhfVEhS RUFEU107IC8qIDMyICovCisrCXB0aHJlYWRfcndsb2NrX3QgIHRpZF9sb2NrOworKwlzdHJ1Y3Qg a3EJICBxW01BWF9OVU1LUV07IC8qIDMzICovCisrI2lmZGVmIF9fQVBQTEVfXworKwlwdGhyZWFk X3J3bG9ja190ICBzdG9wX2xvY2s7CisrCWludAkJICBleGl0X2ZsYWc7CisrI2VuZGlmIC8qIF9f QVBQTEVfXyAqLworK307CisrCisrLyogdGhpcyBkZWZpbmVzIHRoZSBoYXNoIGFuZCBlbGVtZW50 cyBvZiBldnAgY29udGV4dCBwb2ludGVycworKyAqIHRoYXQgYXJlIGNyZWF0ZWQgaW4gdGhyZWFk X2xvb3AuIFdlIHVzZSB0aGlzIHRvIGNsZWFyIGFuZAorKyAqIGZyZWUgdGhlIGNvbnRleHRzIGlu IHN0b3BfYW5kX3ByZWpvaW4KKysgKi8KKytzdHJ1Y3QgYWVzX210X2N0eF9wdHJzIHsKKysJcHRo cmVhZF90ICAgICAgIHRpZDsKKysJRVZQX0NJUEhFUl9DVFggKnBvaW50ZXI7IC8qIDMyICovCisr CVVUX2hhc2hfaGFuZGxlIGhoOworK307CisrCisrLyogZ2xvYmFscyAqLworKy8qIGhvdyB3ZSBp bmNyZW1lbnQgdGhlIGlkIHRoZSBzdHJ1Y3RzIHdlIGNyZWF0ZSAqLworK2xvbmcgdW5zaWduZWQg aW50IGdsb2JhbF9zdHJ1Y3RfaWQgPSAwOworKworKy8qIGtlZXAgYSBjb3B5IG9mIHRoZSBwb2lu dGVycyBjcmVhdGVkIGluIHRocmVhZF9sb29wIHRvIGZyZWUgbGF0ZXIgKi8KKytzdHJ1Y3QgYWVz X210X2N0eF9wdHJzICpldnBfcHRycyA9IE5VTEw7CisrCisrLyoKKysgKiBBZGQgbnVtIHRvIGNv dW50ZXIgJ2N0cicKKysgKi8KKytzdGF0aWMgdm9pZAorK3NzaF9jdHJfYWRkKHVfY2hhciAqY3Ry LCB1aW50MzJfdCBudW0sIHVfaW50IGxlbikKKyt7CisrCWludCBpOworKwl1aW50MTZfdCBuOwor KworKwlmb3IgKG4gPSAwLCBpID0gbGVuIC0gMTsgaSA+PSAwICYmIChudW0gfHwgbik7IGktLSkg eworKwkJbiA9IGN0cltpXSArIChudW0gJiAweGZmKSArIG47CisrCQludW0gPj49IDg7CisrCQlj dHJbaV0gPSBuICYgMHhmZjsKKysJCW4gPj49IDg7CisrCX0KKyt9CisrCisrLyoKKysgKiBUaHJl YWRzIG1heSBiZSBjYW5jZWxsZWQgaW4gYSBwdGhyZWFkX2NvbmRfd2FpdCwgd2UgbXVzdCBmcmVl IHRoZSBtdXRleAorKyAqLworK3N0YXRpYyB2b2lkCisrdGhyZWFkX2xvb3BfY2xlYW51cCh2b2lk ICp4KQorK3sKKysJcHRocmVhZF9tdXRleF91bmxvY2soKHB0aHJlYWRfbXV0ZXhfdCAqKXgpOwor K30KKysKKysjaWZkZWYgX19BUFBMRV9fCisrLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIGV4aXQsIHdl IGFyZSBkb2luZyBib3RoIGNhbmNlbCBhbmQgZXhpdCBjb25kaXRpb24KKysgKiBzaW5jZSBvbiBP U1ggdGhyZWFkcyBzZWVtIHRvIG9jY2FzaW9uYWxseSBmYWlsIHRvIG5vdGljZSB3aGVuIHRoZXkg aGF2ZQorKyAqIGJlZW4gY2FuY2VsbGVkLiBXZSB3YW50IHRvIGhhdmUgYSBiYWNrdXAgdG8gbWFr ZSBzdXJlIHRoYXQgd2Ugd29uJ3QgaGFuZworKyAqIHdoZW4gdGhlIG1haW4gcHJvY2VzcyBqb2lu KCktcyB0aGUgY2FuY2VsbGVkIHRocmVhZC4KKysgKi8KKytzdGF0aWMgdm9pZAorK3RocmVhZF9s b29wX2NoZWNrX2V4aXQoc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdCAqYykKKyt7CisrCWludCBl eGl0X2ZsYWc7CisrCisrCXB0aHJlYWRfcndsb2NrX3JkbG9jaygmYy0+c3RvcF9sb2NrKTsKKysJ ZXhpdF9mbGFnID0gYy0+ZXhpdF9mbGFnOworKwlwdGhyZWFkX3J3bG9ja191bmxvY2soJmMtPnN0 b3BfbG9jayk7CisrCisrCWlmIChleGl0X2ZsYWcpCisrCQlwdGhyZWFkX2V4aXQoTlVMTCk7Cisr fQorKyNlbHNlCisrIyBkZWZpbmUgdGhyZWFkX2xvb3BfY2hlY2tfZXhpdChzKQorKyNlbmRpZiAv KiBfX0FQUExFX18gKi8KKysKKysvKgorKyAqIEhlbHBlciBmdW5jdGlvbiB0byB0ZXJtaW5hdGUg dGhlIGhlbHBlciB0aHJlYWRzCisrICovCisrc3RhdGljIHZvaWQKKytzdG9wX2FuZF9qb2luX3By ZWdlbl90aHJlYWRzKHN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmMpCisreworKwlpbnQgaTsK KysKKysjaWZkZWYgX19BUFBMRV9fCisrCS8qIG5vdGlmeSB0aHJlYWRzIHRoYXQgdGhleSBzaG91 bGQgZXhpdCAqLworKwlwdGhyZWFkX3J3bG9ja193cmxvY2soJmMtPnN0b3BfbG9jayk7CisrCWMt PmV4aXRfZmxhZyA9IFRSVUU7CisrCXB0aHJlYWRfcndsb2NrX3VubG9jaygmYy0+c3RvcF9sb2Nr KTsKKysjZW5kaWYgLyogX19BUFBMRV9fICovCisrCisrCS8qIENhbmNlbCBwcmVnZW4gdGhyZWFk cyAqLworKwlmb3IgKGkgPSAwOyBpIDwgY2lwaGVyX3RocmVhZHM7IGkrKykgeworKwkJZGVidWcg KCJDYW5jZWxlZCAlbHUgKCVsdSwlZCkiLCBjLT50aWRbaV0sIGMtPnN0cnVjdF9pZCwgYy0+aWRb aV0pOworKwkJcHRocmVhZF9jYW5jZWwoYy0+dGlkW2ldKTsKKysJfQorKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG51bWtxOyBpKyspIHsKKysgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF9s b2NrKCZjLT5xW2ldLmxvY2spOworKyAgICAgICAgICAgICAgICBwdGhyZWFkX2NvbmRfYnJvYWRj YXN0KCZjLT5xW2ldLmNvbmQpOworKyAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9j aygmYy0+cVtpXS5sb2NrKTsKKysgICAgICAgIH0KKysJZm9yIChpID0gMDsgaSA8IGNpcGhlcl90 aHJlYWRzOyBpKyspIHsKKysJCWlmIChwdGhyZWFkX2tpbGwoYy0+dGlkW2ldLCAwKSAhPSAwKQor KwkJCWRlYnVnMygiQUVTLUNUUiBNVCBwdGhyZWFkX2pvaW4gZmFpbHVyZTogSW52YWxpZCB0aHJl YWQgaWQgJWx1IGluICVzIiwKKysJCQkgICAgICAgYy0+dGlkW2ldLCBfX0ZVTkNUSU9OX18pOwor KwkJZWxzZSB7CisrCQkJZGVidWcgKCJKb2luaW5nICVsdSAoJWx1LCAlZCkiLCBjLT50aWRbaV0s IGMtPnN0cnVjdF9pZCwgYy0+aWRbaV0pOworKwkJCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmYy0+ cVtpXS5sb2NrKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NvbmRfZGVzdHJv eSgmYy0+cVtpXS5jb25kKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2pvaW4o Yy0+dGlkW2ldLCBOVUxMKTsKKysJCQkvKiB0aGlzIGZpbmRzIHRoZSBlbnRyeSBpbiB0aGUgaGFz aCB0aGF0IGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrCQkJICogdGhyZWFkIGlkLiBUaGF0J3MgdXNl ZCB0byBmaW5kIHRoZSBwb2ludGVyIHRvIHRoZSBjaXBoZXIgc3RydWN0CisrCQkJICogY3JlYXRl ZCBpbiB0aHJlYWRfbG9vcC4gKi8KKysJCQlzdHJ1Y3QgYWVzX210X2N0eF9wdHJzICpwdHI7Cisr CQkJSEFTSF9GSU5EX0lOVChldnBfcHRycywgJmMtPnRpZFtpXSwgcHRyKTsKKysJCQlFVlBfQ0lQ SEVSX0NUWF9mcmVlKHB0ci0+cG9pbnRlcik7CisrCQkJSEFTSF9ERUwoZXZwX3B0cnMsIHB0cik7 CisrCQkJZnJlZShwdHIpOyAgICAgICAgICAgICAgfQorKyAgICAgICAgfQorKwlwdGhyZWFkX3J3 bG9ja19kZXN0cm95KCZjLT50aWRfbG9jayk7CisrfQorKworKy8qCisrICogVGhlIGxpZmUgb2Yg YSBwcmVnZW4gdGhyZWFkOgorKyAqICAgIEZpbmQgZW1wdHkga2V5c3RyZWFtIHF1ZXVlcyBhbmQg ZmlsbCB0aGVtIHVzaW5nIHRoZWlyIGNvdW50ZXIuCisrICogICAgV2hlbiBkb25lLCB1cGRhdGUg Y291bnRlciBmb3IgdGhlIG5leHQgZmlsbC4KKysgKi8KKysvKiBwcmV2aW91c2x5IHRoaXMgdXNl ZCB0aGUgbG93IGxldmVsIGludGVyZmFjZSB3aGljaCBpcywgc2FkbHksCisrICogc2xvd2VyIHRo YW4gdGhlIEVWUCBpbnRlcmZhY2UgYnkgYSBsb25nIHNob3QuIFRoZSBvcmlnaW5hbCBjdHggKGZy b20gdGhlCisrICogYm9keSBvZiB0aGUgY29kZSkgaXNuJ3QgcGFzc2VkIGluIGhlcmUgYnV0IHdl IGhhdmUgdGhlIGtleSBhbmQgdGhlIGNvdW50ZXIKKysgKiB3aGljaCBtZWFucyB3ZSBzaG91bGQg YmUgYWJsZSB0byBjcmVhdGUgdGhlIGV4YWN0IHNhbWUgY3R4IGFuZCB1c2UgdGhhdCB0bworKyAq IGZpbGwgdGhlIGtleXN0cmVhbSBxdWV1ZXMuIEknbSBjb25jZXJuZWQgYWJvdXQgYWRkaXRpb25h bCBvdmVyaGVhZCBidXQgdGhlCisrICogYWRkaXRpb25hbCBzcGVlZCBmcm9tIEFFU05JIHNob3Vs ZCBtYWtlIHVwIGZvciBpdC4gICovCisrLyogVGhlIGFib3ZlIGNvbW1lbnQgd2FzIG1hZGUgd2hl biBJIHRob3VnaHQgSSBuZWVkZWQgdG8gZG8gYSBuZXcgRVZQIGluaXQgZm9yCisrICogZWFjaCBj b3VudGVyIGluY3JlbWVudC4gVHVybnMgb3V0IG5vdCB0byBiZSB0aGUgY2FzZSAtY2pyIDEwLzE1 LzIxKi8KKysKKytzdGF0aWMgdm9pZCAqCisrdGhyZWFkX2xvb3Aodm9pZCAqeCkKKyt7CisrCUVW UF9DSVBIRVJfQ1RYICogdm9sYXRpbGUgYWVzbmlfY3R4OworKwlzdHJ1Y3Qgc3NoX2Flc19jdHJf Y3R4X210ICpjID0geDsKKysJc3RydWN0IGtxICpxOworKwlzdHJ1Y3QgYWVzX210X2N0eF9wdHJz ICpwdHI7CisrCWludCBxaWR4OworKwlwdGhyZWFkX3QgZmlyc3RfdGlkOworKwlpbnQgb3V0bGVu OworKwl1X2NoYXIgbXludWxsW0tRTEVOICogQUVTX0JMT0NLX1NJWkVdOworKwltZW1zZXQoJm15 bnVsbCwgMCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0laRSk7CisrCisrCS8qIGdldCB0aGUgdGhyZWFk IGlkIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBvbmUgKi8KKysJcHRocmVhZF9yd2xvY2tf cmRsb2NrKCZjLT50aWRfbG9jayk7CisrCWZpcnN0X3RpZCA9IGMtPnRpZFswXTsKKysJcHRocmVh ZF9yd2xvY2tfdW5sb2NrKCZjLT50aWRfbG9jayk7CisrCisrCS8qIGNyZWF0ZSB0aGUgY29udGV4 dCBmb3IgdGhpcyB0aHJlYWQgKi8KKysJYWVzbmlfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7 CisrCisrCS8qIGtlZXAgdHJhY2sgb2YgdGhlIHBvaW50ZXIgZm9yIHRoZSBldnAgaW4gdGhpcyBz dHJ1Y3QKKysJICogc28gd2UgY2FuIGZyZWUgaXQgbGF0ZXIuIFNvIHdlIHBsYWNlIGl0IGluIGEg aGFzaCBpbmRleGVkIG9uIHRoZQorKwkgKiB0aHJlYWQgaWQsIHdoaWNoIGlzIGF2YWlsYWJsZSB0 byB1cyBpbiB0aGUgZnJlZSBmdW5jdGlvbi4KKysJICogTm90ZSwgdGhlIHRocmVhZCBpZCBpc24n dCBuZWNlc3NhcnkgdW5pcXVlIGFjcm9zcyByZWtleXMgYnV0CisrCSAqIHRoYXQncyBva2F5IGFz IHRoZXkgYXJlIHVuaXF1ZSBkdXJpbmcgYSBrZXkuICovCisrCXB0ciA9IG1hbGxvYyhzaXplb2Yg KnB0cik7IC8qZnJlZWQgaW4gc3RvcCAmIHByZWpvaW4gKi8KKysJcHRyLT50aWQgPSBwdGhyZWFk X3NlbGYoKTsgLyogaW5kZXggZm9yIGhhc2ggKi8KKysJcHRyLT5wb2ludGVyID0gYWVzbmlfY3R4 OworKwlIQVNIX0FERF9JTlQoZXZwX3B0cnMsIHRpZCwgcHRyKTsKKysKKysJLyogaW5pdGlhbGl6 ZSB0aGUgY2lwaGVyIGN0eCB3aXRoIHRoZSBrZXkgcHJvdmlkZWQKKysJICogZGV0ZXJtaW5lIHdo aWNoIGNpcGhlciB0byB1c2UgYmFzZWQgb24gdGhlIGtleSBzaXplICovCisrCWlmIChjLT5rZXls ZW4gPT0gMjU2KQorKwkJRVZQX0VuY3J5cHRJbml0X2V4KGFlc25pX2N0eCwgRVZQX2Flc18yNTZf Y3RyKCksIE5VTEwsIGMtPm9yaWdfa2V5LCBOVUxMKTsKKysJZWxzZSBpZiAoYy0+a2V5bGVuID09 IDEyOCkKKysJCUVWUF9FbmNyeXB0SW5pdF9leChhZXNuaV9jdHgsIEVWUF9hZXNfMTI4X2N0cigp LCBOVUxMLCBjLT5vcmlnX2tleSwgTlVMTCk7CisrCWVsc2UgaWYgKGMtPmtleWxlbiA9PSAxOTIp CisrCQlFVlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBFVlBfYWVzXzE5Ml9jdHIoKSwgTlVM TCwgYy0+b3JpZ19rZXksIE5VTEwpOworKwllbHNlIHsKKysJCWxvZ2l0KCJJbnZhbGlkIGtleSBs ZW5ndGggb2YgJWQgaW4gQUVTIENUUiBNVC4gRXhpdGluZyIsIGMtPmtleWxlbik7CisrCQlleGl0 KDEpOworKwl9CisrCisrCS8qCisrCSAqIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHN0YXJ0 dXAsIG9uZSB0aHJlYWQgbXVzdCBmaWxsCisrCSAqIHRoZSBmaXJzdCBLUSB0aGVuIG1hcmsgaXQg YXMgZHJhaW5pbmcuIExvY2sgaGVsZCB0aHJvdWdob3V0LgorKwkgKi8KKysKKysJaWYgKHB0aHJl YWRfZXF1YWwocHRocmVhZF9zZWxmKCksIGZpcnN0X3RpZCkpIHsKKysJCS8qIGdldCB0aGUgZmly c3QgZWxlbWVudCBvZiB0aGUga2V5cXVlIHN0cnVjdCAqLworKwkJcSA9ICZjLT5xWzBdOworKwkJ cHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsKKysJCS8qIGlmIHdlIGFyZSBpbiB0aGUgSU5J VCBzdGF0ZSB0aGVuIGZpbGwgdGhlIHF1ZXVlICovCisrCQlpZiAocS0+cXN0YXRlID09IEtRSU5J VCkgeworKwkJCS8qIHNldCB0aGUgaW5pdGlhbCBjb3VudGVyICovCisrCQkJRVZQX0VuY3J5cHRJ bml0X2V4KGFlc25pX2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgcS0+Y3RyKTsKKysKKysJCQkvKiBl bmN5cGhlciBhIGJsb2NrIHNpemVkIG51bGwgc3RyaW5nIChteW51bGwpIHdpdGggdGhlIGtleS4g VGhpcworKwkJCSAqIHJldHVybnMgdGhlIGtleXN0cmVhbSBiZWNhdXNlIHhvcmluZyB0aGUga2V5 c3RyZWFtCisrCQkJICogYWdhaW5zdCBudWxsIHJldHVybnMgdGhlIGtleXN0cmVhbS4gU3RvcmUg dGhhdCBpbiB0aGUgYXBwcm9wcmlhdGUgcXVldWUgKi8KKysJCQlFVlBfRW5jcnlwdFVwZGF0ZShh ZXNuaV9jdHgsIHEtPmtleXNbMF0sICZvdXRsZW4sIG15bnVsbCwgS1FMRU4gKiBBRVNfQkxPQ0tf U0laRSk7CisrCisrCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgYmxvY2tzIGNyZWF0ZXMgdG8gdGhl IGFlcyBjb3VudGVyICovCisrCQkJc3NoX2N0cl9hZGQocS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBB RVNfQkxPQ0tfU0laRSk7CisrCQkJcS0+cXN0YXRlID0gS1FEUkFJTklORzsKKysJCQlwdGhyZWFk X2NvbmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKKysJCX0KKysJCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZxLT5sb2NrKTsKKysJfQorKworKwkvKgorKwkgKiBOb3JtYWwgY2FzZSBpcyB0byBmaW5kIGVt cHR5IHF1ZXVlcyBhbmQgZmlsbCB0aGVtLCBza2lwcGluZyBvdmVyCisrCSAqIHF1ZXVlcyBhbHJl YWR5IGZpbGxlZCBieSBvdGhlciB0aHJlYWRzIGFuZCBzdG9wcGluZyB0byB3YWl0IGZvcgorKwkg KiBhIGRyYWluaW5nIHF1ZXVlIHRvIGJlY29tZSBlbXB0eS4KKysJICoKKysJICogTXVsdGlwbGUg dGhyZWFkcyBtYXkgYmUgd2FpdGluZyBvbiBhIGRyYWluaW5nIHF1ZXVlIGFuZCBhd29rZW4KKysJ ICogd2hlbiBlbXB0eS4gIFRoZSBmaXJzdCB0aHJlYWQgdG8gd2FrZSB3aWxsIG1hcmsgaXQgYXMg ZmlsbGluZywKKysJICogb3RoZXJzIHdpbGwgbW92ZSBvbiB0byBmaWxsLCBza2lwLCBvciB3YWl0 IG9uIHRoZSBuZXh0IHF1ZXVlLgorKwkgKi8KKysJZm9yIChxaWR4ID0gMTs7IHFpZHggPSAocWlk eCArIDEpICUgbnVta3EpIHsKKysJCS8qIENoZWNrIGlmIEkgd2FzIGNhbmNlbGxlZCwgYWxzbyBj aGVja2VkIGluIGNvbmRfd2FpdCAqLworKwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7CisrCisrCQkv KiBDaGVjayBpZiB3ZSBzaG91bGQgZXhpdCBhcyB3ZWxsICovCisrCQl0aHJlYWRfbG9vcF9jaGVj a19leGl0KGMpOworKworKwkJLyogTG9jayBxdWV1ZSBhbmQgYmxvY2sgaWYgaXRzIGRyYWluaW5n ICovCisrCQlxID0gJmMtPnFbcWlkeF07CisrCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2sp OworKwkJcHRocmVhZF9jbGVhbnVwX3B1c2godGhyZWFkX2xvb3BfY2xlYW51cCwgJnEtPmxvY2sp OworKwkJd2hpbGUgKHEtPnFzdGF0ZSA9PSBLUURSQUlOSU5HIHx8IHEtPnFzdGF0ZSA9PSBLUUlO SVQpIHsKKysJCQl0aHJlYWRfbG9vcF9jaGVja19leGl0KGMpOworKwkJCXB0aHJlYWRfY29uZF93 YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7CisrCQl9CisrCQlwdGhyZWFkX2NsZWFudXBfcG9wKDAp OworKworKwkJLyogSWYgZmlsbGluZyBvciBmdWxsLCBzb21lYm9keSBlbHNlIGdvdCBpdCwgc2tp cCAqLworKwkJaWYgKHEtPnFzdGF0ZSAhPSBLUUVNUFRZKSB7CisrCQkJcHRocmVhZF9tdXRleF91 bmxvY2soJnEtPmxvY2spOworKwkJCWNvbnRpbnVlOworKwkJfQorKworKwkJLyoKKysJCSAqIEVt cHR5LCBsZXQncyBmaWxsIGl0LgorKwkJICogUXVldWUgbG9jayBpcyByZWxpbnF1aXNoZWQgd2hp bGUgd2UgZG8gdGhpcyBzbyBvdGhlcnMKKysJCSAqIGNhbiBzZWUgdGhhdCBpdCdzIGJlaW5nIGZp bGxlZC4KKysJCSAqLworKwkJcS0+cXN0YXRlID0gS1FGSUxMSU5HOworKwkJcHRocmVhZF9jb25k X2Jyb2FkY2FzdCgmcS0+Y29uZCk7CisrCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7 CisrCisrCQkvKiBzZXQgdGhlIGluaXRpYWwgY291bnRlciAqLworKwkJRVZQX0VuY3J5cHRJbml0 X2V4KGFlc25pX2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgcS0+Y3RyKTsKKysKKysJCS8qIHNlZSBj b3Jlc3BvbmRpbmcgYmxvY2sgYWJvdmUgZm9yIHVzZWZ1bCBjb21tZW50cyAqLworKwkJRVZQX0Vu Y3J5cHRVcGRhdGUoYWVzbmlfY3R4LCBxLT5rZXlzWzBdLCAmb3V0bGVuLCBteW51bGwsIEtRTEVO ICogQUVTX0JMT0NLX1NJWkUpOworKworKwkJLyogUmUtbG9jaywgbWFyayBmdWxsIGFuZCBzaWdu YWwgY29uc3VtZXIgKi8KKysJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7CisrCQlzc2hf Y3RyX2FkZChxLT5jdHIsIEtRTEVOICogbnVta3EsIEFFU19CTE9DS19TSVpFKTsKKysJCXEtPnFz dGF0ZSA9IEtRRlVMTDsKKysJCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNvbmQpOworKwkJ cHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOworKwl9CisrCisrCXJldHVybiBOVUxMOwor K30KKysKKysvKiB0aGlzIGlzIHdoZXJlIHRoZSBkYXRhIGlzIGFjdHVhbGx5IGVuY2lwaGVyZWQg YW5kIGRlY2lwaGVyZWQgKi8KKysvKiB0aGlzIG1heSBhbHNvIGJlbmVmaXQgZnJvbSB1cGdyYWRp bmcgdG8gdGhlIEVWUCBBUEkgKi8KKytzdGF0aWMgaW50Cisrc3NoX2Flc19jdHIoRVZQX0NJUEhF Ul9DVFggKmN0eCwgdV9jaGFyICpkZXN0LCBjb25zdCB1X2NoYXIgKnNyYywKKysgICAgc2l6ZV90 IGxlbikKKyt7CisrCXR5cGVkZWYgdW5pb24geworKyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCisr CQlfX3VpbnQxMjhfdCAqdTEyODsKKysjZW5kaWYKKysJCXVpbnQ2NF90ICp1NjQ7CisrCQl1aW50 MzJfdCAqdTMyOworKwkJdWludDhfdCAqdTg7CisrCQljb25zdCB1aW50OF90ICpjdTg7CisrCQl1 aW50cHRyX3QgdTsKKysJfSBwdHJzX3Q7CisrCXB0cnNfdCBkZXN0cCwgc3JjcCwgYnVmcDsKKysJ dWludHB0cl90IGFsaWduOworKwlzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjOworKwlzdHJ1 Y3Qga3EgKnEsICpvbGRxOworKwlpbnQgcmlkeDsKKysJdV9jaGFyICpidWY7CisrCisrCWlmIChs ZW4gPT0gMCkKKysJCXJldHVybiAxOworKwlpZiAoKGMgPSBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBw X2RhdGEoY3R4KSkgPT0gTlVMTCkKKysJCXJldHVybiAwOworKworKwlxID0gJmMtPnFbYy0+cWlk eF07CisrCXJpZHggPSBjLT5yaWR4OworKworKwkvKiBzcmMgYWxyZWFkeSBwYWRkZWQgdG8gYmxv Y2sgbXVsdGlwbGUgKi8KKysJc3JjcC5jdTggPSBzcmM7CisrCWRlc3RwLnU4ID0gZGVzdDsKKysJ ZG8geyAvKiBkbyB1bnRpbCBsZW4gaXMgMCAqLworKwkJYnVmID0gcS0+a2V5c1tyaWR4XTsKKysJ CWJ1ZnAudTggPSBidWY7CisrCisrCQkvKiBmaWd1cmUgb3V0IHRoZSBhbGlnbm1lbnQgb24gdGhl IGZseSAqLworKyNpZmRlZiBDSVBIRVJfVU5BTElHTkVEX09LCisrCQlhbGlnbiA9IDA7CisrI2Vs c2UKKysJCWFsaWduID0gZGVzdHAudSB8IHNyY3AudSB8IGJ1ZnAudTsKKysjZW5kaWYKKysKKysJ CS8qIHhvciB0aGUgc3JjIGFnYWluc3QgdGhlIGtleSAoYnVmKQorKwkJICogZGlmZmVyZW50IHN5 c3RlbXMgY2FuIGRvIGFsbCAxNiBieXRlcyBhdCBvbmNlIG9yCisrCQkgKiBtYXkgbmVlZCB0byBk byBpdCBpbiA4IG9yIDQgYnl0ZXMgY2h1bmtzCisrCQkgKiB3b3JzdCBjYXNlIGlzIGRvaW5nIGl0 IGFzIGEgbG9vcCAqLworKyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCisrCQkvKiB3aXRoIEdDQyAx MyB3ZSBoYXZlIGhhdmluZyBjb25zaXN0ZW50IHNlZyBmYXVsdHMKKysJCSAqIGluIHRoaXMgc2Vj dGlvbiBvZiBjb2RlLiBTaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwKKysJCSAqIGNvZGUgcGF0aCB3 ZSBhcmUgcmVtb3ZpbmcgdGhpcyB1bnRpbCB3ZSBoYXZlIGEgc29sdXRpb24KKysJCSAqIGluIHBs YWNlIC1janIgMDIvMjIvMjQKKysJCSAqIFRPRE86IEZJWCBUSElTCisrCQkgKi8KKysJCS8qIGlm ICgoYWxpZ24gJiAweGYpID09IDApIHsgKi8KKysJCS8qIAlkZXN0cC51MTI4WzBdID0gc3JjcC51 MTI4WzBdIF4gYnVmcC51MTI4WzBdOyAqLworKwkJLyogfSBlbHNlICovCisrI2VuZGlmCisrCQkv KiB0aGlzIGlzIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW91ciBpbiBzYW5pdGl6ZXJzCisrCQkg KiB0aGlzIGlzIGFubm95aW5nIGJlY2F1c2UgaXQncyBtb3JlIGVmZmljaWVudAorKwkJICogYnV0 IFVCIGlzIG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIHJldGFpbiAqLworKwkJLyogNjQgYml0cyAq LworKwkJLyogaWYgKChhbGlnbiAmIDB4NykgPT0gMCkgeyAqLworKwkJLyogCWRlc3RwLnU2NFsw XSA9IHNyY3AudTY0WzBdIF4gYnVmcC51NjRbMF07ICovCisrCQkvKiAJZGVzdHAudTY0WzFdID0g c3JjcC51NjRbMV0gXiBidWZwLnU2NFsxXTsgKi8KKysJCS8qIC9cKiAzMiBiaXRzICpcLyAqLwor KwkJLyogfSBlbHNlICovCisrCQlpZiAoKGFsaWduICYgMHgzKSA9PSAwKSB7CisrCQkJZGVzdHAu dTMyWzBdID0gc3JjcC51MzJbMF0gXiBidWZwLnUzMlswXTsKKysJCQlkZXN0cC51MzJbMV0gPSBz cmNwLnUzMlsxXSBeIGJ1ZnAudTMyWzFdOworKwkJCWRlc3RwLnUzMlsyXSA9IHNyY3AudTMyWzJd IF4gYnVmcC51MzJbMl07CisrCQkJZGVzdHAudTMyWzNdID0gc3JjcC51MzJbM10gXiBidWZwLnUz MlszXTsKKysJCX0gZWxzZSB7CisrCQkJLyoxIGJ5dGUgYXQgYSB0aW1lKi8KKysJCQlzaXplX3Qg aTsKKysJCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJWkU7ICsraSkKKysJCQkJZGVzdFtp XSA9IHNyY1tpXSBeIGJ1ZltpXTsKKysJCX0KKysKKysJCS8qIGluYy9kZWNyZW1lbnQgdGhlIHBv aW50ZXJzIGJ5IHRoZSBibG9jayBzaXplICgxNikqLworKwkJZGVzdHAudSArPSBBRVNfQkxPQ0tf U0laRTsKKysJCXNyY3AudSArPSBBRVNfQkxPQ0tfU0laRTsKKysKKysJCS8qIEluY3JlbWVudCBy ZWFkIGluZGV4LCBzd2l0Y2ggcXVldWVzIG9uIHJvbGxvdmVyICovCisrCQlpZiAoKHJpZHggPSAo cmlkeCArIDEpICUgS1FMRU4pID09IDApIHsKKysJCQlvbGRxID0gcTsKKysKKysJCQkvKiBNYXJr IG5leHQgcXVldWUgZHJhaW5pbmcsIG1heSBuZWVkIHRvIHdhaXQgKi8KKysJCQljLT5xaWR4ID0g KGMtPnFpZHggKyAxKSAlIG51bWtxOworKwkJCXEgPSAmYy0+cVtjLT5xaWR4XTsKKysJCQlwdGhy ZWFkX211dGV4X2xvY2soJnEtPmxvY2spOworKwkJCXdoaWxlIChxLT5xc3RhdGUgIT0gS1FGVUxM KSB7CisrCQkJCXB0aHJlYWRfY29uZF93YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7CisrCQkJfQor KwkJCXEtPnFzdGF0ZSA9IEtRRFJBSU5JTkc7CisrCQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgm cS0+Y29uZCk7CisrCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOworKworKwkJCS8q IE1hcmsgY29uc3VtZWQgcXVldWUgZW1wdHkgYW5kIHNpZ25hbCBwcm9kdWNlcnMgKi8KKysJCQlw dGhyZWFkX211dGV4X2xvY2soJm9sZHEtPmxvY2spOworKwkJCW9sZHEtPnFzdGF0ZSA9IEtRRU1Q VFk7CisrCQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmb2xkcS0+Y29uZCk7CisrCQkJcHRocmVh ZF9tdXRleF91bmxvY2soJm9sZHEtPmxvY2spOworKwkJfQorKwl9IHdoaWxlIChsZW4gLT0gQUVT X0JMT0NLX1NJWkUpOworKwljLT5yaWR4ID0gcmlkeDsKKysJcmV0dXJuIDE7CisrfQorKworK3N0 YXRpYyBpbnQKKytzc2hfYWVzX2N0cl9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVf Y2hhciAqa2V5LCBjb25zdCB1X2NoYXIgKml2LAorKyAgICBpbnQgZW5jKQorK3sKKysJc3RydWN0 IHNzaF9hZXNfY3RyX2N0eF9tdCAqYzsKKysJaW50IGk7CisrCisrCWNoYXIgKmFlc190aHJlYWRz ID0gZ2V0ZW52KCJTU0hfQ0lQSEVSX1RIUkVBRFMiKTsKKysgICAgICAgIGlmIChhZXNfdGhyZWFk cyAhPSBOVUxMICYmIHN0cmxlbihhZXNfdGhyZWFkcykgIT0gMCkKKysJCWNpcGhlcl90aHJlYWRz ID0gYXRvaShhZXNfdGhyZWFkcyk7CisrCWVsc2UKKysJCWNpcGhlcl90aHJlYWRzID0gMTsKKysK KysJaWYgKGNpcGhlcl90aHJlYWRzIDwgMSkKKysgCQljaXBoZXJfdGhyZWFkcyA9IDE7CisrCisr CWlmIChjaXBoZXJfdGhyZWFkcyA+IE1BWF9USFJFQURTKQorKwkJY2lwaGVyX3RocmVhZHMgPSBN QVhfVEhSRUFEUzsKKysKKysJbnVta3EgPSBjaXBoZXJfdGhyZWFkcyArIDE7CisrCisrCWlmIChu dW1rcSA+IE1BWF9OVU1LUSkKKysJCW51bWtxID0gTUFYX05VTUtROworKworKwlkZWJ1ZygiU3Rh cnRpbmcgJWQgdGhyZWFkcyBhbmQgJWQgcXVldWVzXG4iLCBjaXBoZXJfdGhyZWFkcywgbnVta3Ep OworKworKwkvKiBzZXQgdXAgdGhlIGluaXRpYWwgc3RhdGUgb2YgYyAob3VyIGNpcGhlciBzdHJl YW0gc3RydWN0KSAqLworKyAJaWYgKChjID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGN0 eCkpID09IE5VTEwpIHsKKysJCWMgPSB4bWFsbG9jKHNpemVvZigqYykpOworKwkJcHRocmVhZF9y d2xvY2tfaW5pdCgmYy0+dGlkX2xvY2ssIE5VTEwpOworKyNpZmRlZiBfX0FQUExFX18KKysJCXB0 aHJlYWRfcndsb2NrX2luaXQoJmMtPnN0b3BfbG9jaywgTlVMTCk7CisrCQljLT5leGl0X2ZsYWcg PSBGQUxTRTsKKysjZW5kaWYgLyogX19BUFBMRV9fICovCisrCisrCQljLT5zdGF0ZSA9IEhBVkVf Tk9ORTsKKysKKysJCS8qIGluaXRpYWxpemUgdGhlIG11dGV4cyBhbmQgY29uZGl0aW9ucyBmb3Ig ZWFjaCBsb2NrIGluIG91ciBzdHJ1Y3QgKi8KKysJCWZvciAoaSA9IDA7IGkgPCBudW1rcTsgaSsr KSB7CisrCQkJcHRocmVhZF9tdXRleF9pbml0KCZjLT5xW2ldLmxvY2ssIE5VTEwpOworKwkJCXB0 aHJlYWRfY29uZF9pbml0KCZjLT5xW2ldLmNvbmQsIE5VTEwpOworKwkJfQorKworKwkJLyogYXR0 YWNoIG91ciBzdHJ1Y3QgdG8gdGhlIGNvbnRleHQgKi8KKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9h cHBfZGF0YShjdHgsIGMpOworKwl9CisrCisrCS8qIHdlIGFyZSBpbml0aWFsaXppbmcgYnV0IHRo ZSBjdXJyZW50IHN0cnVjdHVyZSBhbHJlYWR5CisrCSAgIGhhcyBhbiBJViBhbmQga2V5IHNvIHdl IHdhbnQgdG8ga2lsbCB0aGUgZXhpc3Rpbmcga2V5IGRhdGEKKysJICAgYW5kIHN0YXJ0IG92ZXIu IFRoaXMgaXMgaW1wb3J0YW50IHdoZW4gd2UgbmVlZCB0byByZWtleSB0aGUgZGF0YSBzdHJlYW0g Ki8KKysJaWYgKGMtPnN0YXRlID09IChIQVZFX0tFWSB8IEhBVkVfSVYpKSB7CisrCQkvKiB0ZWxs IHRoZSBwcmVnZW4gdGhyZWFkcyB0byBleGl0ICovCisrCQlzdG9wX2FuZF9qb2luX3ByZWdlbl90 aHJlYWRzKGMpOworKworKyNpZmRlZiBfX0FQUExFX18KKysJCS8qIHJlc2V0IHRoZSBleGl0IGZs YWcgKi8KKysJCWMtPmV4aXRfZmxhZyA9IEZBTFNFOworKyNlbmRpZiAvKiBfX0FQUExFX18gKi8K KysKKysJCS8qIFN0YXJ0IG92ZXIgZ2V0dGluZyBrZXkgJiBpdiAqLworKwkJYy0+c3RhdGUgPSBI QVZFX05PTkU7CisrCX0KKysKKysJLyogc2V0IHRoZSBpbml0aWFsIGtleSBmb3IgdGhpcyBrZXkg c3RyZWFtIHF1ZXVlICovCisrCWlmIChrZXkgIT0gTlVMTCkgeworKwkJQUVTX3NldF9lbmNyeXB0 X2tleShrZXksIEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGgoY3R4KSAqIDgsCisrCQkgICAmYy0+ YWVzX2tleSk7CisrCQljLT5vcmlnX2tleSA9IGtleTsKKysJCWMtPmtleWxlbiA9IEVWUF9DSVBI RVJfQ1RYX2tleV9sZW5ndGgoY3R4KSAqIDg7CisrCQljLT5zdGF0ZSB8PSBIQVZFX0tFWTsKKysJ fQorKworKwkvKiBzZXQgdGhlIElWICovCisrCWlmIChpdiAhPSBOVUxMKSB7CisrCQkvKiBpbml0 IHRoZSBjb3VudGVyIHRoaXMgaXMganVzdCBhIDE2Ynl0ZSB1Y2hhciAqLworKwkJbWVtY3B5KGMt PmFlc19jb3VudGVyLCBpdiwgQUVTX0JMT0NLX1NJWkUpOworKwkJYy0+c3RhdGUgfD0gSEFWRV9J VjsKKysJfQorKworKwlpZiAoYy0+c3RhdGUgPT0gKEhBVkVfS0VZIHwgSEFWRV9JVikpIHsKKysJ CS8qIENsZWFyIHF1ZXVlcyAqLworKwkJLyogc2V0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIGtleSBx dWV1ZSB0byB0aGUgY3VycmVudCBjb3VudGVyICovCisrCQltZW1jcHkoYy0+cVswXS5jdHIsIGMt PmFlc19jb3VudGVyLCBBRVNfQkxPQ0tfU0laRSk7CisrCQkvKiBpbmRpY2F0ZSB0aGF0IGl0IG5l ZWRzIHRvIGJlIGluaXRpYWxpemVkICovCisrCQljLT5xWzBdLnFzdGF0ZSA9IEtRSU5JVDsKKysJ CS8qIGZvciBlYWNoIG9mIHRoZSByZW1haW5pbmcgcXVldWVzIHNldCB0aGUgZmlyc3QgY291bnRl ciB0byB0aGUKKysJCSAqIGNvdW50ZXIgYW5kIHRoZW4gYWRkIHRoZSBzaXplIG9mIHRoZSBxdWV1 ZSB0byB0aGUgY291bnRlciAqLworKwkJZm9yIChpID0gMTsgaSA8IG51bWtxOyBpKyspIHsKKysJ CQltZW1jcHkoYy0+cVtpXS5jdHIsIGMtPmFlc19jb3VudGVyLCBBRVNfQkxPQ0tfU0laRSk7Cisr CQkJc3NoX2N0cl9hZGQoYy0+cVtpXS5jdHIsIGkgKiBLUUxFTiwgQUVTX0JMT0NLX1NJWkUpOwor KwkJCWMtPnFbaV0ucXN0YXRlID0gS1FFTVBUWTsKKysJCX0KKysJCWMtPnFpZHggPSAwOworKwkJ Yy0+cmlkeCA9IDA7CisrCQljLT5zdHJ1Y3RfaWQgPSBnbG9iYWxfc3RydWN0X2lkKys7CisrCisr CisrCQkvKiBTdGFydCB0aHJlYWRzICovCisrI2RlZmluZSBTVEFDS19TSVpFICgxMDI0ICogMTAy NCkKKysJCXB0aHJlYWRfYXR0cl90IGF0dHI7CisrCQlwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7 CisrCQlwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKCZhdHRyLCBTVEFDS19TSVpFKTsKKysJCWZv ciAoaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7CisrCQkJcHRocmVhZF9yd2xvY2tf d3Jsb2NrKCZjLT50aWRfbG9jayk7CisrCQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZjLT50aWRbaV0s ICZhdHRyLCB0aHJlYWRfbG9vcCwgYykgIT0gMCkKKysJCQkJZmF0YWwgKCJBRVMtQ1RSIE1UIENv dWxkIG5vdCBjcmVhdGUgdGhyZWFkIGluICVzIiwgX19GVU5DVElPTl9fKTsKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qc2hvdWxkIGRpZSBoZXJlICovCisrCQkJZWxzZSB7Cisr CQkJCWMtPmlkW2ldID0gaTsKKysJCQkJZGVidWcgKCJBRVMtQ1RSIE1UIHNwYXduZWQgYSB0aHJl YWQgd2l0aCBpZCAlbHUgaW4gJXMgKCVsdSwgJWQpIiwKKysJCQkJICAgICAgIGMtPnRpZFtpXSwg X19GVU5DVElPTl9fLCBjLT5zdHJ1Y3RfaWQsIGMtPmlkW2ldKTsKKysJCQl9CisrCQkJcHRocmVh ZF9yd2xvY2tfdW5sb2NrKCZjLT50aWRfbG9jayk7CisrCQl9CisrCQlwdGhyZWFkX211dGV4X2xv Y2soJmMtPnFbMF0ubG9jayk7CisrCQkvLyB3YWl0IGZvciBhbGwgb2YgdGhlIHRocmVhZHMgdG8g YmUgaW5pdGlhbGl6ZWQKKysJCXdoaWxlIChjLT5xWzBdLnFzdGF0ZSA9PSBLUUlOSVQpCisrCQkJ cHRocmVhZF9jb25kX3dhaXQoJmMtPnFbMF0uY29uZCwgJmMtPnFbMF0ubG9jayk7CisrCQlwdGhy ZWFkX211dGV4X3VubG9jaygmYy0+cVswXS5sb2NrKTsKKysJfQorKwlyZXR1cm4gMTsKKyt9Cisr Cisrc3RhdGljIGludAorK3NzaF9hZXNfY3RyX2NsZWFudXAoRVZQX0NJUEhFUl9DVFggKmN0eCkK Kyt7CisrCXN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmM7CisrCisrCWlmICgoYyA9IEVWUF9D SVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjdHgpKSAhPSBOVUxMKSB7CisrCQlzdG9wX2FuZF9qb2lu X3ByZWdlbl90aHJlYWRzKGMpOworKworKwkJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworKwkJ ZnJlZShjKTsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YShjdHgsIE5VTEwpOworKwl9 CisrCXJldHVybiAxOworK30KKysKKysvKiA8ZnJpZWRsPiAqLworK2NvbnN0IEVWUF9DSVBIRVIg KgorK2V2cF9hZXNfY3RyX210KHZvaWQpCisreworKwlzdGF0aWMgRVZQX0NJUEhFUiAqYWVzX2N0 cjsKKysJYWVzX2N0ciA9IEVWUF9DSVBIRVJfbWV0aF9uZXcoTklEX3VuZGVmLCAxNi8qYmxvY2sq LywgMTYvKmtleSovKTsKKysJRVZQX0NJUEhFUl9tZXRoX3NldF9pdl9sZW5ndGgoYWVzX2N0ciwg QUVTX0JMT0NLX1NJWkUpOworKwlFVlBfQ0lQSEVSX21ldGhfc2V0X2luaXQoYWVzX2N0ciwgc3No X2Flc19jdHJfaW5pdCk7CisrCUVWUF9DSVBIRVJfbWV0aF9zZXRfY2xlYW51cChhZXNfY3RyLCBz c2hfYWVzX2N0cl9jbGVhbnVwKTsKKysJRVZQX0NJUEhFUl9tZXRoX3NldF9kb19jaXBoZXIoYWVz X2N0ciwgc3NoX2Flc19jdHIpOworKyMgIGlmbmRlZiBTU0hfT0xEX0VWUAorKwlFVlBfQ0lQSEVS X21ldGhfc2V0X2ZsYWdzKGFlc19jdHIsIEVWUF9DSVBIX0NCQ19NT0RFCisrCQkJCSAgICAgIHwg RVZQX0NJUEhfVkFSSUFCTEVfTEVOR1RICisrCQkJCSAgICAgIHwgRVZQX0NJUEhfQUxXQVlTX0NB TExfSU5JVAorKwkJCQkgICAgICB8IEVWUF9DSVBIX0NVU1RPTV9JVik7CisrIyAgZW5kaWYgLypT U0hfT0xEX0VWUCovCisrCXJldHVybiBhZXNfY3RyOworK30KKysjZW5kaWYgLyogT1NTTCBDaGVj ayAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lwaGVyLWN0ci1tdC1mdW5jdGlv bnMuYyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5jCistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5jCTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvY2lwaGVyLWN0ci1tdC1mdW5j dGlvbnMuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4NDgwMjQwNiArMDIwMAorQEAgLTAsMCArMSw2 ODMgQEAKKysvKgorKyAqIE9wZW5TU0ggTXVsdGktdGhyZWFkZWQgQUVTLUNUUiBDaXBoZXIgUHJv dmlkZXIgZm9yIE9wZW5TU0wgMworKyAqCisrICogQXV0aG9yOiBCZW5qYW1pbiBCZW5uZXR0IDxi ZW5AcHNjLmVkdT4KKysgKiBBdXRob3I6IE1pa2UgVGFzb3RhIDx0YXNvdGFAZ21haWwuY29tPgor KyAqIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDgtMjAyMiBQaXR0c2J1cmdoIFN1cGVyY29tcHV0aW5nIENlbnRlci4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIEJhc2VkIG9uIG9yaWdpbmFsIE9wZW5TU0ggQUVTLUNUUiBj aXBoZXIuIFNtYWxsIHBvcnRpb25zIHJlbWFpbiB1bmNoYW5nZWQsCisrICogQ29weXJpZ2h0IChj KSAyMDAzIE1hcmt1cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNkLm9yZz4KKysgKgorKyAqIFBlcm1p c3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUg Zm9yIGFueQorKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRl ZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorKyAqCisrICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBX QVJSQU5USUVTCisrICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxM IElNUExJRUQgV0FSUkFOVElFUyBPRgorKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4g SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisrICogQU5ZIFNQRUNJ QUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFN QUdFUworKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1Ig UFJPRklUUywgV0hFVEhFUiBJTiBBTgorKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5D RSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisrICogT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysg Ki8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysKKysvKiBvbmx5IGZvciBzeXN0ZW1zIHdp dGggT1NTTCAzICovCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMKKysjaW5jbHVkZSA8c3RkYXJnLmg+ CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlICJjaXBoZXIt Y3RyLW10LWZ1bmN0aW9ucy5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysKKysvKiBmb3IgcHJvdmlk ZXIgZXJyb3Igc3RydWN0ICovCisrI2luY2x1ZGUgIm9zc2wzLXByb3ZpZGVyLWVyci5oIgorKyNp bmNsdWRlICJudW0uaCIKKysKKysvKiBub3RlIHJlZ2FyZGluZyB0aHJlYWRzIGFuZCBxdWV1ZXMg Ki8KKysvKiBpbml0aWFsbHkgdGhpcyBjaXBoZXIgd2FzIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdAor KyAqIHRoZSBrZXkgc3RyZWFtIHdhcyBnZW5lcmF0ZWQgaW4gYSBwZXIgY2lwaGVyIGJsb2NrCisr ICogbG9vcC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBrZXkgc3RyZWFtIHF1ZXVlIGxlbmd0aCB3YXMK KysgKiAxNmsgYW5kIHRoZSBjaXBoZXIgYmxvY2sgc2l6ZSB3YXMgMTYgYnl0ZXMgaXQgd291bGQK KysgKiBmaWxsIHRoZSBxdWV1ZSAxNiBieXRlcyBhdCBhIHRpbWUuIE1pdGNoIERvcnJlbGwgcG9p bnRlZAorKyAqIG91dCB0aGF0IHdlIGNvdWxkIGZpbGwgdGhlIHF1ZXVlIGluIG9uY2UgY2FsbCBl bGltaW5hdGluZworKyAqIGxvb3AgYW5kIG11bHRpcGxlIGNhbGxzIHRvIEVWUF9FbmNyeXB0VXBk YXRlLiBEb2luZyBzbworKyAqIGRyYW1hdGljYWxseSByZWR1Y2VkIENQVSBsb2FkIGluIHRoZSB0 aHJlYWRzIGFuZCBpbmRpY2F0ZWQKKysgKiB0aGF0IHdlIGNvdWxkIGFsc28gZWxpbWluYXRlIG1v c3Qgb2YgdGhlIHRocmVhZHMgYW5kIHF1ZXVlcworKyAqIGFzIGl0IHdvdWxkIHRha2UgZmFyIGxl c3MgdGltZSBmb3IgYSBxdWV1ZSB0byBlYnRlciBLUV9GVUxMCisrICogc3RhdGUuIEFzIHN1Y2gs IHdlJ3ZlIHJlZHVjZWQgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHRocmVhZHMKKysgKiBhbmQgcXVl dWVzIGZyb20gMiBhbmQgOCAocmVzcGVjdGl2ZWx5KSB0byAxIGFuZCAyLiBXZSd2ZSBhbHNvCisr ICogZWxpbW5hdGVkIHRoZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcGh5c2ljYWwgbnVtYmVyIG9m IGNvcmVzIG9uCisrICogdGhlIHN5c3RlbSBhbmQsIGlmIHRoZSB1c2VyIGRlc2lyZXMsIGNhbiBz cGluIHVwIG1vcmUgdGhyZWFkcworKyAqIHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiBB ZGRpdGlvbmFsbHksIHF1ZXVlcyBpcyBub3cgZml4ZWQKKysgKiBhdCB0aHJlYWRfY291bnQgKyAx LgorKyAqIGNqciAxMC8xOS8yMDIyICovCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLSBUVU5B QkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrLyogTnVtYmVyIG9mIHByZWdlbiB0aHJlYWRz IHRvIHVzZSAqLworKy8qIHRoaXMgaXMgYSBkZWZhdWx0IHZhbHVlLiBUaGUgYWN0dWFsIG51bWJl ciBpcworKyAqIGRldGVybWluZWQgZHVyaW5nIGluaXQgYXMgYSBmdW5jdGlvbiBvZiB0aGUgbnVt YmVyCisrICogb2YgYXZhaWxhYmxlIGNvcmVzICovCisraW50IGNpcGhlcl90aHJlYWRzID0gMTsK KysKKysvKiBOdW1iZXIgb2Yga2V5c3RyZWFtIHF1ZXVlcyAqLworKy8qIGlkZWFsbHkgdGhpcyBz aG91bGQgYmUgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgdGhlcmUgaXMKKysgKiBhbHdheXMgYSBrZXkg cXVldWUgZm9yIGEgdGhyZWFkIHRvIHdvcmsgb24KKysgKiBzbyBtYXliZSBkb3VibGUgb2YgdGhl IG51bWJlciBvZiB0aHJlYWRzLiBBZ2FpbiB0aGlzCisrICogaXMgYSBkZWZhdWx0IGFuZCB0aGUg YWN0dWFsIHZhbHVlIGlzIGRldGVybWluZWQgaW4gaW5pdCovCisraW50IG51bWtxID0gMjsKKysv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSov CisrCisrLyogZ2xvYmFscyAqLworKy8qIGhvdyB3ZSBpbmNyZW1lbnQgdGhlIGlkIHRoZSBzdHJ1 Y3RzIHdlIGNyZWF0ZSAqLworK2xvbmcgdW5zaWduZWQgaW50IGdsb2JhbF9zdHJ1Y3RfaWQgPSAw OworKworKy8qIGtlZXAgYSBjb3B5IG9mIHRoZSBwb2ludGVycyBjcmVhdGVkIGluIHRocmVhZF9s b29wIHRvIGZyZWUgbGF0ZXIgKi8KKytzdHJ1Y3QgYWVzX210X2N0eF9wdHJzICpldnBfcHRycyA9 IE5VTEw7CisrCisrLyogcHJpdmF0ZSBmdW5jdGlvbnMgKi8KKysKKysvKgorKyAqIEFkZCBudW0g dG8gY291bnRlciAnY3RyJworKyAqLworK3N0YXRpYyB2b2lkCisrc3NoX2N0cl9hZGQodV9jaGFy ICpjdHIsIHVpbnQzMl90IG51bSwgdV9pbnQgbGVuKQorK3sKKysJaW50IGk7CisrCXVpbnQxNl90 IG47CisrCisrCWZvciAobiA9IDAsIGkgPSBsZW4gLSAxOyBpID49IDAgJiYgKG51bSB8fCBuKTsg aS0tKSB7CisrCQluID0gY3RyW2ldICsgKG51bSAmIDB4ZmYpICsgbjsKKysJCW51bSA+Pj0gODsK KysJCWN0cltpXSA9IG4gJiAweGZmOworKwkJbiA+Pj0gODsKKysJfQorK30KKysKKysvKgorKyAq IFRocmVhZHMgbWF5IGJlIGNhbmNlbGxlZCBpbiBhIHB0aHJlYWRfY29uZF93YWl0LCB3ZSBtdXN0 IGZyZWUgdGhlIG11dGV4CisrICovCisrc3RhdGljIHZvaWQKKyt0aHJlYWRfbG9vcF9jbGVhbnVw KHZvaWQgKngpCisreworKwlwdGhyZWFkX211dGV4X3VubG9jaygocHRocmVhZF9tdXRleF90ICop eCk7CisrfQorKworKy8qIENoZWNrIGlmIHdlIHNob3VsZCBleGl0LCB3ZSBhcmUgZG9pbmcgYm90 aCBjYW5jZWwgYW5kIGV4aXQgY29uZGl0aW9uCisrICogc2luY2UgdGhyZWFkcyBjYW4gZmFpbCB0 byBub3RpY2UgdGhhdCB0aGV5IGhhdmUgYmVlbiBjYW5jZWxsZWQ6IG9uIE9TWAorKyAqIG5hdGl2 ZWx5LCBhbmQgb24gYW55IHBsYXRmb3JtIHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCwgd2hv c2UKKysgKiBzY2hlZHVsZXIgZG9lcyBub3QgZGVsaXZlciBhIGNhbmNlbCB0byBhIHRocmVhZCBw YXJrZWQgaW4KKysgKiBwdGhyZWFkX2NvbmRfd2FpdCgpLiBXZSB3YW50IGEgYmFja3VwIHRvIG1h a2Ugc3VyZSB0aGF0IHdlIHdvbid0IGhhbmcKKysgKiB3aGVuIHRoZSBtYWluIHByb2Nlc3Mgam9p bigpLXMgdGhlIGNhbmNlbGxlZCB0aHJlYWQuCisrICovCisrc3RhdGljIHZvaWQKKyt0aHJlYWRf bG9vcF9jaGVja19leGl0KHN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4KQorK3sKKysJ aW50IGV4aXRfZmxhZzsKKysKKysJcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZhZXNfbXRfY3R4LT5z dG9wX2xvY2spOworKwlleGl0X2ZsYWcgPSBhZXNfbXRfY3R4LT5leGl0X2ZsYWc7CisrCXB0aHJl YWRfcndsb2NrX3VubG9jaygmYWVzX210X2N0eC0+c3RvcF9sb2NrKTsKKysKKysJaWYgKGV4aXRf ZmxhZykKKysJCXB0aHJlYWRfZXhpdChOVUxMKTsKKyt9CisrCisrLyoKKysgKiBIZWxwZXIgZnVu Y3Rpb24gdG8gdGVybWluYXRlIHRoZSBoZWxwZXIgdGhyZWFkcworKyAqLworK3N0YXRpYyB2b2lk Cisrc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFkcyhzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVz X210X2N0eCkKKyt7CisrCWludCBpOworKworKwkvKiBub3RpZnkgdGhyZWFkcyB0aGF0IHRoZXkg c2hvdWxkIGV4aXQgKi8KKysJcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZhZXNfbXRfY3R4LT5zdG9w X2xvY2spOworKwlhZXNfbXRfY3R4LT5leGl0X2ZsYWcgPSAxOworKwlwdGhyZWFkX3J3bG9ja191 bmxvY2soJmFlc19tdF9jdHgtPnN0b3BfbG9jayk7CisrCisrCS8qCisrCSAqIFdha2UgYW55dGhp bmcgcGFya2VkIGluIHB0aHJlYWRfY29uZF93YWl0KCkgc28gdGhhdCBpdCByZWNoZWNrcworKwkg KiB0aGUgZXhpdCBmbGFnIGFuZCBsZWF2ZXMgdmlhIHRocmVhZF9sb29wX2NoZWNrX2V4aXQoKS4g V2l0aG91dAorKwkgKiB0aGlzIGEgcGFya2VkIHRocmVhZCBjYW4gb25seSBiZSByZW1vdmVkIGJ5 IHB0aHJlYWRfY2FuY2VsKCksCisrCSAqIHdoaWNoIGxlYXZlcyB0aGUgam9pbiBiZWxvdyBibG9j a2VkIGluZGVmaW5pdGVseSB3aGVuZXZlciB0aGF0CisrCSAqIGNhbmNlbCBpcyBub3QgZGVsaXZl cmVkLgorKwkgKi8KKysJZm9yIChpID0gMDsgaSA8IG51bWtxOyBpKyspIHsKKysJCXB0aHJlYWRf bXV0ZXhfbG9jaygmYWVzX210X2N0eC0+cVtpXS5sb2NrKTsKKysJCXB0aHJlYWRfY29uZF9icm9h ZGNhc3QoJmFlc19tdF9jdHgtPnFbaV0uY29uZCk7CisrCQlwdGhyZWFkX211dGV4X3VubG9jaygm YWVzX210X2N0eC0+cVtpXS5sb2NrKTsKKysJfQorKworKwkvKiBDYW5jZWwgcHJlZ2VuIHRocmVh ZHMgKi8KKysJZm9yIChpID0gMDsgaSA8IGNpcGhlcl90aHJlYWRzOyBpKyspIHsKKysJCWRlYnVn X2YgKCJDYW5jZWxlZCAlbHUgKCVsdSwlZCkiLCBhZXNfbXRfY3R4LT50aWRbaV0sIGFlc19tdF9j dHgtPnN0cnVjdF9pZCwKKysJCSAgICAgICBhZXNfbXRfY3R4LT5pZFtpXSk7CisrCQlwdGhyZWFk X2NhbmNlbChhZXNfbXRfY3R4LT50aWRbaV0pOworKwl9CisrCWZvciAoaSA9IDA7IGkgPCBjaXBo ZXJfdGhyZWFkczsgaSsrKSB7CisrCQlpZiAocHRocmVhZF9raWxsKGFlc19tdF9jdHgtPnRpZFtp XSwgMCkgIT0gMCkKKysJCQlkZWJ1ZzMoIkFFUy1DVFIgTVQgcHRocmVhZF9qb2luIGZhaWx1cmU6 IEludmFsaWQgdGhyZWFkIGlkICVsdSBpbiAlcyIsCisrCQkJICAgICAgIGFlc19tdF9jdHgtPnRp ZFtpXSwgX19mdW5jX18pOworKwkJZWxzZSB7CisrCQkJZGVidWdfZiAoIkpvaW5pbmcgJWx1ICgl bHUsICVkKSIsIGFlc19tdF9jdHgtPnRpZFtpXSwgYWVzX210X2N0eC0+c3RydWN0X2lkLAorKwkJ CQkgYWVzX210X2N0eC0+aWRbaV0pOworKwkJCXB0aHJlYWRfam9pbihhZXNfbXRfY3R4LT50aWRb aV0sIE5VTEwpOworKwkJCS8qIHRoaXMgZmluZHMgdGhlIGVudHJ5IGluIHRoZSBoYXNoIHRoYXQg Y29ycmVzcG9uZGluZyB0byB0aGUKKysJCQkgKiB0aHJlYWQgaWQuIFRoYXQncyB1c2VkIHRvIGZp bmQgdGhlIHBvaW50ZXIgdG8gdGhlIGNpcGhlciBzdHJ1Y3QKKysJCQkgKiBjcmVhdGVkIGluIHRo cmVhZF9sb29wLiAqLworKwkJCXN0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKnB0cjsKKysJCQlIQVNI X0ZJTkRfSU5UKGV2cF9wdHJzLCAmYWVzX210X2N0eC0+dGlkW2ldLCBwdHIpOworKwkJCUVWUF9D SVBIRVJfQ1RYX2ZyZWUocHRyLT5wb2ludGVyKTsKKysJCQlIQVNIX0RFTChldnBfcHRycywgcHRy KTsKKysJCQlmcmVlKHB0cik7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysJcHRo cmVhZF9yd2xvY2tfZGVzdHJveSgmYWVzX210X2N0eC0+dGlkX2xvY2spOworK30KKysKKysvKiBk ZXRlcm1pbmUgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZQorKyAqIFRlc3RpbmcgaW5kaWNh dGVzIHRoYXQgaW4gbW9zdCBhbGwgc2l0dWF0aW9ucyB0aGUgb3B0aW1hbCBudW1iZXIgb2YKKysg KiB0aHJlYWRzIGlzIDEgbWVhbmluZyAxIGZvciBpbmJvdW5kIGFuZCAxIGZvciBvdXRib3VuZC4g VGhlIG9wdGltYWwKKysgKiBxdWV1ZSBjb3VudCBoYXMgYWxzbyBiZWVuIGRldGVybWluZWQgdG8g YmUgdGhyZWFkX2NvdW50ICsgMS4KKysgKiBub3RlIHRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0d28g Z2xvYmFscyAtIG51bWtxIGFuZCBjaXBoZXJfdGhyZWFkcworKyAqIGl0IHJldHVybnMgdGhlIHZh bHVlIG9mIGNpcGhlcl90aHJlYWRzIGJ1dCBpdCBkb2Vzbid0IG5lZWQgdG8gKi8KKytzdGF0aWMg aW50IGdldF90aHJlYWRfY291bnQoKSB7CisrCisrCWNoYXIgKiBhZXNfdGhyZWFkcyA9IGdldGVu digiU1NIX0NJUEhFUl9USFJFQURTIik7CisrCWRlYnVnX2YgKCJTU0ggdGhyZWFkIGNvdW50IGlz ICVzIiwgYWVzX3RocmVhZHMpOworKyAgICAgICAgaWYgKGFlc190aHJlYWRzICE9IE5VTEwgJiYg c3RybGVuKGFlc190aHJlYWRzKSAhPSAwKQorKwkJY2lwaGVyX3RocmVhZHMgPSBhdG9pKGFlc190 aHJlYWRzKTsKKysJZWxzZQorKwkJY2lwaGVyX3RocmVhZHMgPSAxOworKworKwlpZiAoY2lwaGVy X3RocmVhZHMgPCAxKQorKyAJCWNpcGhlcl90aHJlYWRzID0gMTsKKysKKysJaWYgKGNpcGhlcl90 aHJlYWRzID4gTUFYX1RIUkVBRFMpCisrCQljaXBoZXJfdGhyZWFkcyA9IE1BWF9USFJFQURTOwor KworKwludW1rcSA9IGNpcGhlcl90aHJlYWRzICsgMTsKKysKKysJaWYgKG51bWtxID4gTUFYX05V TUtRKQorKwkJbnVta3EgPSBNQVhfTlVNS1E7CisrCisrCWRlYnVnX2YgKCJTdGFydGluZyAlZCB0 aHJlYWRzIGFuZCAlZCBxdWV1ZXNcbiIsIGNpcGhlcl90aHJlYWRzLCBudW1rcSk7CisrCisrCXJl dHVybiAoY2lwaGVyX3RocmVhZHMpOworK30KKysKKysKKysvKgorKyAqIFRoZSBsaWZlIG9mIGEg cHJlZ2VuIHRocmVhZDoKKysgKiAgICBGaW5kIGVtcHR5IGtleXN0cmVhbSBxdWV1ZXMgYW5kIGZp bGwgdGhlbSB1c2luZyB0aGVpciBjb3VudGVyLgorKyAqICAgIFdoZW4gZG9uZSwgdXBkYXRlIGNv dW50ZXIgZm9yIHRoZSBuZXh0IGZpbGwuCisrICovCisrc3RhdGljIHZvaWQgKgorK3RocmVhZF9s b29wKHZvaWQgKmpvYikKKyt7CisrCUVWUF9DSVBIRVJfQ1RYICogdm9sYXRpbGUgZXZwX2N0eDsK KysJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHggPSBqb2I7CisrCXN0cnVjdCBrcSAq cTsKKysJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRyOworKwlwdGhyZWFkX3QgZmlyc3RfdGlk OworKwlpbnQgb3V0bGVuOworKwl1X2NoYXIgbXludWxsW0tRTEVOICogQUVTX0JMT0NLX1NJWkVd OworKwltZW1zZXQoJm15bnVsbCwgMCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0laRSk7CisrCisrCS8q IGdldCB0aGUgdGhyZWFkIGlkIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBvbmUgKi8KKysJ cHRocmVhZF9yd2xvY2tfcmRsb2NrKCZhZXNfbXRfY3R4LT50aWRfbG9jayk7CisrCWZpcnN0X3Rp ZCA9IGFlc19tdF9jdHgtPnRpZFswXTsKKysJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZhZXNfbXRf Y3R4LT50aWRfbG9jayk7CisrCisrCS8qIGNyZWF0ZSB0aGUgY29udGV4dCBmb3IgdGhpcyB0aHJl YWQgKi8KKysJZXZwX2N0eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOworKworKwkvKiBrZWVwIHRy YWNrIG9mIHRoZSBwb2ludGVyIGZvciB0aGUgZXZwIGluIHRoaXMgc3RydWN0CisrCSAqIHNvIHdl IGNhbiBmcmVlIGl0IGxhdGVyLiBTbyB3ZSBwbGFjZSBpdCBpbiBhIGhhc2ggaW5kZXhlZCBvbiB0 aGUKKysJICogdGhyZWFkIGlkLCB3aGljaCBpcyBhdmFpbGFibGUgdG8gdXMgaW4gdGhlIGZyZWUg ZnVuY3Rpb24uCisrCSAqIE5vdGUsIHRoZSB0aHJlYWQgaWQgaXNuJ3QgbmVjZXNzYXJ5IHVuaXF1 ZSBhY3Jvc3MgcmVrZXlzIGJ1dAorKwkgKiB0aGF0J3Mgb2theSBhcyB0aGV5IGFyZSB1bmlxdWUg ZHVyaW5nIGEga2V5LiAqLworKwlwdHIgPSBtYWxsb2Moc2l6ZW9mICpwdHIpOyAvKmZyZWVkIGlu IHN0b3AgJiBwcmVqb2luICovCisrCXB0ci0+dGlkID0gcHRocmVhZF9zZWxmKCk7IC8qIGluZGV4 IGZvciBoYXNoICovCisrCXB0ci0+cG9pbnRlciA9IGV2cF9jdHg7CisrCUhBU0hfQUREX0lOVChl dnBfcHRycywgdGlkLCBwdHIpOworKworKwkvKiBpbml0aWFsaXplIHRoZSBjaXBoZXIgY3R4IHdp dGggdGhlIGtleSBwcm92aWRlZAorKwkgKiBkZXRlcm1pbmJlIHdoaWNoIGNpcGhlciB0byB1c2Ug YmFzZWQgb24gdGhlIGtleSBzaXplICovCisrCWlmIChhZXNfbXRfY3R4LT5rZXlsZW4gPT0gMjU2 KQorKwkJRVZQX0VuY3J5cHRJbml0X2V4KGV2cF9jdHgsIEVWUF9hZXNfMjU2X2N0cigpLCBOVUxM LCBhZXNfbXRfY3R4LT5vcmlnX2tleSwgTlVMTCk7CisrCWVsc2UgaWYgKGFlc19tdF9jdHgtPmtl eWxlbiA9PSAxMjgpCisrCQlFVlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0eCwgRVZQX2Flc18xMjhf Y3RyKCksIE5VTEwsIGFlc19tdF9jdHgtPm9yaWdfa2V5LCBOVUxMKTsKKysJZWxzZSBpZiAoYWVz X210X2N0eC0+a2V5bGVuID09IDE5MikKKysJCUVWUF9FbmNyeXB0SW5pdF9leChldnBfY3R4LCBF VlBfYWVzXzE5Ml9jdHIoKSwgTlVMTCwgYWVzX210X2N0eC0+b3JpZ19rZXksIE5VTEwpOworKwll bHNlCisrCQlmYXRhbCgiSW52YWxpZCBrZXkgbGVuZ3RoIG9mICVkIGluIEFFUyBDVFIgTVQuIEV4 aXRpbmciLCBhZXNfbXRfY3R4LT5rZXlsZW4pOworKworKwkvKgorKwkgKiBIYW5kbGUgdGhlIHNw ZWNpYWwgY2FzZSBvZiBzdGFydHVwLCBvbmUgdGhyZWFkIG11c3QgZmlsbAorKwkgKiB0aGUgZmly c3QgS1EgdGhlbiBtYXJrIGl0IGFzIGRyYWluaW5nLiBMb2NrIGhlbGQgdGhyb3VnaG91dC4KKysJ ICovCisrCWlmIChwdGhyZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBmaXJzdF90aWQpKSB7Cisr CQkvKiBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGtleSBxdWV1ZSBzdHJ1Y3QgKi8KKysJ CXEgPSAmYWVzX210X2N0eC0+cVswXTsKKysJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7 CisrCQkvKiBpZiB3ZSBhcmUgaW4gdGhlIElOSVQgc3RhdGUgdGhlbiBmaWxsIHRoZSBxdWV1ZSAq LworKwkJaWYgKHEtPnFzdGF0ZSA9PSBLUUlOSVQpIHsKKysJCQkvKiBzZXQgdGhlIGluaXRpYWwg Y291bnRlciAqLworKwkJCUVWUF9FbmNyeXB0SW5pdF9leChldnBfY3R4LCBOVUxMLCBOVUxMLCBO VUxMLCBxLT5jdHIpOworKwkJCS8qIGVuY3lwaGVyIGEgYmxvY2sgc2l6ZWQgbnVsbCBzdHJpbmcg KG15bnVsbCkgd2l0aCB0aGUga2V5LiBUaGlzCisrCQkJICogcmV0dXJucyB0aGUga2V5c3RyZWFt IGJlY2F1c2UgeG9yaW5nIHRoZSBrZXlzdHJlYW0KKysJCQkgKiBhZ2FpbnN0IG51bGwgcmV0dXJu cyB0aGUga2V5c3RyZWFtLiBTdG9yZSB0aGF0IGluIHRoZSBhcHByb3ByaWF0ZSBxdWV1ZSAqLwor KwkJCUVWUF9FbmNyeXB0VXBkYXRlKGV2cF9jdHgsIHEtPmtleXNbMF0sICZvdXRsZW4sIG15bnVs bCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0laRSk7CisrCQkJLyogVXBkYXRlIHRoZSBhZXMgY291bnRl ciAqLworKwkJCXNzaF9jdHJfYWRkKHEtPmN0ciwgS1FMRU4gKiBudW1rcSwgQUVTX0JMT0NLX1NJ WkUpOworKwkJCS8qIHNpbmNlIHRoaXMgaXMgdGhlIGZpcnN0IHRocmVhZCBzZXQgaXQgdG8gZHJh aW5pbmcgKi8KKysJCQlxLT5xc3RhdGUgPSBLUURSQUlOSU5HOworKwkJCXB0aHJlYWRfY29uZF9i cm9hZGNhc3QoJnEtPmNvbmQpOworKwkJfQorKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxv Y2spOworKwl9CisrCisrCS8qCisrCSAqIE5vcm1hbCBjYXNlIGlzIHRvIGZpbmQgZW1wdHkgcXVl dWVzIGFuZCBmaWxsIHRoZW0sIHNraXBwaW5nIG92ZXIKKysJICogcXVldWVzIGFscmVhZHkgZmls bGVkIGJ5IG90aGVyIHRocmVhZHMgYW5kIHN0b3BwaW5nIHRvIHdhaXQgZm9yCisrCSAqIGEgZHJh aW5pbmcgcXVldWUgdG8gYmVjb21lIGVtcHR5LgorKwkgKgorKwkgKiBNdWx0aXBsZSB0aHJlYWRz IG1heSBiZSB3YWl0aW5nIG9uIGEgZHJhaW5pbmcgcXVldWUgYW5kIGF3b2tlbgorKwkgKiB3aGVu IGVtcHR5LiBUaGUgZmlyc3QgdGhyZWFkIHRvIHdha2Ugd2lsbCBtYXJrIGl0IGFzIGZpbGxpbmcs CisrCSAqIG90aGVycyB3aWxsIG1vdmUgb24gdG8gZmlsbCwgc2tpcCwgb3Igd2FpdCBvbiB0aGUg bmV4dCBxdWV1ZS4KKysJICogV2UgaW5pdCBxaWR4IGhlcmUgYmVjYXVzZSBpZiB3ZSBkbyBpdCBh dCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbgorKwkgKiB3ZSBnZXQgYSB3YXJuaW5nIGFib3V0IGl0 IHBvc3NpYmx5IGJlaW5nIGNsb2JiZXJlZC4gVGhlIGV4YWN0IHJlYXNvbgorKwkgKiBkb2Vzbid0 IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UgYnV0IGl0IGhhcyB0byBoYXBwZW4gYWZ0ZXIgdGhlCisrCSAq IGZpcnN0IHB0aHJlYWRfcndsb2NrX3JkbG9jaygpLiBNaWdodCBoYXZlIHNvbWV0aGluZyB0byBk byB3aXRoCisrCSAqIGluY29ycmVjdCBjb21waWxlciBvcHRpbWl6YXRpb25zLgorKwkgKi8KKysJ aW50IHFpZHg7CisrCWZvciAocWlkeCA9IDE7OyBxaWR4ID0gKHFpZHggKyAxKSAlIG51bWtxKSB7 CisrCQkvKiBDaGVjayBpZiBJIHdhcyBjYW5jZWxsZWQsIGFsc28gY2hlY2tlZCBpbiBjb25kX3dh aXQgKi8KKysJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOworKworKwkJLyogQ2hlY2sgaWYgd2Ugc2hv dWxkIGV4aXQgYXMgd2VsbCAqLworKwkJdGhyZWFkX2xvb3BfY2hlY2tfZXhpdChhZXNfbXRfY3R4 KTsKKysKKysJCS8qIExvY2sgcXVldWUgYW5kIGJsb2NrIGlmIGl0cyBkcmFpbmluZyAqLworKwkJ cSA9ICZhZXNfbXRfY3R4LT5xW3FpZHhdOworKwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2Nr KTsKKysJCXB0aHJlYWRfY2xlYW51cF9wdXNoKHRocmVhZF9sb29wX2NsZWFudXAsICZxLT5sb2Nr KTsKKysJCXdoaWxlIChxLT5xc3RhdGUgPT0gS1FEUkFJTklORyB8fCBxLT5xc3RhdGUgPT0gS1FJ TklUKSB7CisrCQkJdGhyZWFkX2xvb3BfY2hlY2tfZXhpdChhZXNfbXRfY3R4KTsKKysJCQlwdGhy ZWFkX2NvbmRfd2FpdCgmcS0+Y29uZCwgJnEtPmxvY2spOworKwkJfQorKwkJcHRocmVhZF9jbGVh bnVwX3BvcCgwKTsKKysKKysJCS8qIElmIGZpbGxpbmcgb3IgZnVsbCwgc29tZWJvZHkgZWxzZSBn b3QgaXQsIHNraXAgKi8KKysJCWlmIChxLT5xc3RhdGUgIT0gS1FFTVBUWSkgeworKwkJCXB0aHJl YWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKysJCQljb250aW51ZTsKKysJCX0KKysKKysJCS8q CisrCQkgKiBFbXB0eSwgbGV0J3MgZmlsbCBpdC4KKysJCSAqIFF1ZXVlIGxvY2sgaXMgcmVsaW5x dWlzaGVkIHdoaWxlIHdlIGRvIHRoaXMgc28gb3RoZXJzCisrCQkgKiBjYW4gc2VlIHRoYXQgaXQn cyBiZWluZyBmaWxsZWQuCisrCQkgKi8KKysJCXEtPnFzdGF0ZSA9IEtRRklMTElORzsKKysJCXB0 aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNvbmQpOworKwkJcHRocmVhZF9tdXRleF91bmxvY2so JnEtPmxvY2spOworKworKwkJLyogc2V0IHRoZSBpbml0aWFsIGNvdW50ZXIgKi8KKysJCUVWUF9F bmNyeXB0SW5pdF9leChldnBfY3R4LCBOVUxMLCBOVUxMLCBOVUxMLCBxLT5jdHIpOworKworKwkJ Lyogc2VlIGNvcmVzcG9uZGluZyBibG9jayBhYm92ZSBmb3IgdXNlZnVsIGNvbW1lbnRzICovCisr CQlFVlBfRW5jcnlwdFVwZGF0ZShldnBfY3R4LCBxLT5rZXlzWzBdLCAmb3V0bGVuLCBteW51bGws IEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOworKworKwkJLyogUmUtbG9jaywgbWFyayBmdWxsIGFu ZCBzaWduYWwgY29uc3VtZXIgKi8KKysJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7Cisr CQlzc2hfY3RyX2FkZChxLT5jdHIsIEtRTEVOICogbnVta3EsIEFFU19CTE9DS19TSVpFKTsKKysJ CXEtPnFzdGF0ZSA9IEtRRlVMTDsKKysJCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNvbmQp OworKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOworKwl9CisrCisrCXJldHVybiBO VUxMOworK30KKysKKysKKysvKiBPdXIgdmVyc2lvbiBvZiB0aGUgRVZQIGZ1bmN0aW9ucworKyAq IHRoZXNlIGFyZSBwdWJsaWMgYXMgdGhleSBhcmUgdXNlZCBieSB0aGUgcHJvdmlkZXIgKi8KKysK KysvKiBpbnN0YW50aWF0ZSB0aGUgY2lwaGVyIGNvbnRleHQuCisrICogaW4gdGhpcyB3ZSBjcmVh dGUgdGhlIEVWUCBjdHggYW5kIHRoZSBBRVMgY3R4LCBzZXR1cCB0aGUgQUVTIGN0eAorKyAqIGlu aXRpYWxpemUgdGhlIEVWUCBhbmQgdGhlbiBhdHRhY2ggdGhlIEFFUyBjdHggdG8gdGhlIEVWUCBj dHguCisrICogVGhlICpvbmx5KiBkaWZmZXJlbmNlIGJldHdlZW4gYWVzX210X25ld2N0eF8yNTZ8 MTkyfDEyOCBpcyB0aGUKKysgKiBrZXlsZW5ndGggb2YgdGhlIGNpcGhlciB1c2VkIGluIEVWUF9D aXBoZXJJbml0CisrICogcGFyYW1ldGVyczogcHJvdmlkZXIgY29udGV4dAorKyAqIHJldHVybnM6 IEVWUCBjb250ZXh0CisrICovCisrLyogaG9uZXN0bHkgdGhlIHdheSB0aGlzIHdvcmtzIG1ha2Vz IG1lIHRoaW5rIHRoYXQgdGhlcmUgaGFzIHRvIGJlCisrICogYSBiZXR0ZXIgd2F5IG9mIGRvaW5n IHRoaXMgaG93ZXZlciwgSSd2ZSB5ZXQgdG8gZmluZCBvbmUgdGhhdCBkb2Vzbid0CisrICogaW52 b2x2ZSBtb3JlIG1hZG5lc3MuIEkgdGhpbmsgdGhhdCdzIG1vc3RseSBiZWNhc2UgSSBkb24ndCB1 bmRlcnN0YW5kCisrICogaG93IHBhcmFtcyB3b3JrIHByb3Blcmx5LiBJIGZlZWwgbGlrZSBJIHNo b3VkbCBiZSBhYmxlIHRvIHVzZSB0aGVtCisrICogdG8gc3BlY2lmeSB0aGUga2V5IGxlbmd0aCBi dXQuLi4gYWxzbywgSSdkIHRoaW5rIEknZCBiZSBhYmxlIHRvCisrICogc2V0IGFlc19tdF9jdHhf c3QtPmtleWxlbiB0byB0aGUga2V5bGVuZ3RoIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSB0bworKyAq IHdvcmsgZWl0aGVyLiBUaGF0IHNhaWQsIHRoaXMgZG9lcyB3b3JrIGV2ZW4gaWYgaXQncyBhIGJp dCBjbHVua3kuCisrICogLWNqciAwOS8wOC8yMDIyICovCisrdm9pZCAqYWVzX210X25ld2N0eF8y NTYodm9pZCAqcHJvdmN0eCkKKyt7CisrCXN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4 ID0gbWFsbG9jKHNpemVvZigqYWVzX210X2N0eCkpOworKwlFVlBfQ0lQSEVSX0NUWCAqZXZwX2N0 eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOworKworKwlpZiAoKGFlc19tdF9jdHggIT0gTlVMTCkg JiYgKGV2cF9jdHggIT0gTlVMTCkpIHsKKysJCWdldF90aHJlYWRfY291bnQoKTsgLyogdXBkYXRl IGNpcGhlcl90aHJlYWRzIGFuZCBudW1rcSAqLworKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVz X210X2N0eC0+dGlkX2xvY2ssIE5VTEwpOworKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVzX210 X2N0eC0+c3RvcF9sb2NrLCBOVUxMKTsKKysJCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IDA7Cisr CisrCQlhZXNfbXRfY3R4LT5zdGF0ZSA9IEhBVkVfTk9ORTsKKysKKysJCS8qIGluaXRpYWxpemUg dGhlIG11dGV4cyBhbmQgY29uZGl0aW9ucyBmb3IgZWFjaCBsb2NrIGluIG91ciBzdHJ1Y3QgKi8K KysJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVta3E7IGkrKykgeworKwkJCXB0aHJlYWRfbXV0ZXhf aW5pdCgmYWVzX210X2N0eC0+cVtpXS5sb2NrLCBOVUxMKTsKKysJCQlwdGhyZWFkX2NvbmRfaW5p dCgmYWVzX210X2N0eC0+cVtpXS5jb25kLCBOVUxMKTsKKysJCX0KKysJCWFlc19tdF9jdHgtPnBy b3ZjdHggPSBwcm92Y3R4OworKwkJRVZQX0NpcGhlckluaXQoZXZwX2N0eCwgRVZQX2Flc18yNTZf Y3RyKCksIE5VTEwsIE5VTEwsIDApOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGV2 cF9jdHgsIGFlc19tdF9jdHgpOworKwkJcmV0dXJuIGV2cF9jdHg7CisrCX0KKysJcmV0dXJuIE5V TEw7CisrfQorKworK3ZvaWQgKmFlc19tdF9uZXdjdHhfMTkyKHZvaWQgKnByb3ZjdHgpCisrewor KwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0eCA9IG1hbGxvYyhzaXplb2YoKmFlc19t dF9jdHgpKTsKKysJRVZQX0NJUEhFUl9DVFggKmV2cF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXco KTsKKysKKysJaWYgKChhZXNfbXRfY3R4ICE9IE5VTEwpICYmIChldnBfY3R4ICE9IE5VTEwpKSB7 CisrCQlnZXRfdGhyZWFkX2NvdW50KCk7IC8qIHVwZGF0ZSBjaXBoZXJfdGhyZWFkcyBhbmQgbnVt a3EgKi8KKysJCXB0aHJlYWRfcndsb2NrX2luaXQoJmFlc19tdF9jdHgtPnRpZF9sb2NrLCBOVUxM KTsKKysJCXB0aHJlYWRfcndsb2NrX2luaXQoJmFlc19tdF9jdHgtPnN0b3BfbG9jaywgTlVMTCk7 CisrCQlhZXNfbXRfY3R4LT5leGl0X2ZsYWcgPSAwOworKworKwkJYWVzX210X2N0eC0+c3RhdGUg PSBIQVZFX05PTkU7CisrCisrCQkvKiBpbml0aWFsaXplIHRoZSBtdXRleHMgYW5kIGNvbmRpdGlv bnMgZm9yIGVhY2ggbG9jayBpbiBvdXIgc3RydWN0ICovCisrCQlmb3IgKGludCBpID0gMDsgaSA8 IG51bWtxOyBpKyspIHsKKysJCQlwdGhyZWFkX211dGV4X2luaXQoJmFlc19tdF9jdHgtPnFbaV0u bG9jaywgTlVMTCk7CisrCQkJcHRocmVhZF9jb25kX2luaXQoJmFlc19tdF9jdHgtPnFbaV0uY29u ZCwgTlVMTCk7CisrCQl9CisrCQlhZXNfbXRfY3R4LT5wcm92Y3R4ID0gcHJvdmN0eDsKKysJCUVW UF9DaXBoZXJJbml0KGV2cF9jdHgsIEVWUF9hZXNfMTkyX2N0cigpLCBOVUxMLCBOVUxMLCAwKTsK KysJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YShldnBfY3R4LCBhZXNfbXRfY3R4KTsKKysJ CXJldHVybiBldnBfY3R4OworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKyt2b2lkICphZXNf bXRfbmV3Y3R4XzEyOCh2b2lkICpwcm92Y3R4KQorK3sKKysJc3RydWN0IGFlc19tdF9jdHhfc3Qg KmFlc19tdF9jdHggPSBtYWxsb2Moc2l6ZW9mKCphZXNfbXRfY3R4KSk7CisrCUVWUF9DSVBIRVJf Q1RYICpldnBfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7CisrCisrCWlmICgoYWVzX210X2N0 eCAhPSBOVUxMKSAmJiAoZXZwX2N0eCAhPSBOVUxMKSkgeworKwkJZ2V0X3RocmVhZF9jb3VudCgp OyAvKiB1cGRhdGUgY2lwaGVyX3RocmVhZHMgYW5kIG51bWtxICovCisrCQlwdGhyZWFkX3J3bG9j a19pbml0KCZhZXNfbXRfY3R4LT50aWRfbG9jaywgTlVMTCk7CisrCQlwdGhyZWFkX3J3bG9ja19p bml0KCZhZXNfbXRfY3R4LT5zdG9wX2xvY2ssIE5VTEwpOworKwkJYWVzX210X2N0eC0+ZXhpdF9m bGFnID0gMDsKKysKKysJCWFlc19tdF9jdHgtPnN0YXRlID0gSEFWRV9OT05FOworKworKwkJLyog aW5pdGlhbGl6ZSB0aGUgbXV0ZXhzIGFuZCBjb25kaXRpb25zIGZvciBlYWNoIGxvY2sgaW4gb3Vy IHN0cnVjdCAqLworKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1rcTsgaSsrKSB7CisrCQkJcHRo cmVhZF9tdXRleF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmxvY2ssIE5VTEwpOworKwkJCXB0aHJl YWRfY29uZF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmNvbmQsIE5VTEwpOworKwkJfQorKwkJYWVz X210X2N0eC0+cHJvdmN0eCA9IHByb3ZjdHg7CisrCQlFVlBfQ2lwaGVySW5pdChldnBfY3R4LCBF VlBfYWVzXzEyOF9jdHIoKSwgTlVMTCwgTlVMTCwgMCk7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRf YXBwX2RhdGEoZXZwX2N0eCwgYWVzX210X2N0eCk7CisrCQlyZXR1cm4gZXZwX2N0eDsKKysJfQor KwlyZXR1cm4gTlVMTDsKKyt9CisrCisrLyogdGhpcyBmdW5jdGlvbiBleHBlY3RzIGEgdm9pZCBi dXQgd2UgbmVlZCB0aGUgYWN0dWFsIGNvbnRleHQKKysgKiB0byBnZXQgdGhlIGFwcF9kYXRhLgor KyAqLworK3ZvaWQgYWVzX210X2ZyZWVjdHgodm9pZCAqdmV2cF9jdHgpCisreworKwlFVlBfQ0lQ SEVSX0NUWCAqZXZwX2N0eCA9IHZldnBfY3R4OworKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVz X210X2N0eDsKKysKKysJaWYgKChhZXNfbXRfY3R4ID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9k YXRhKGV2cF9jdHgpKSAhPSBOVUxMKSB7CisrCQlzdG9wX2FuZF9qb2luX3ByZWdlbl90aHJlYWRz KGFlc19tdF9jdHgpOworKworKwkJbWVtc2V0KGFlc19tdF9jdHgsIDAsIHNpemVvZigqYWVzX210 X2N0eCkpOworKwkJZnJlZShhZXNfbXRfY3R4KTsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBf ZGF0YShldnBfY3R4LCBOVUxMKTsKKysJfQorKwlFVlBfQ0lQSEVSX0NUWF9mcmVlKGV2cF9jdHgp OworK30KKysKKysvKiB0aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBFVlAgY29udGV4dCwgZ2V0cyB0 aGUgQUVTIGNvbnRleHQKKysgKiBhbmQgc3RhcnRzIHRoZSB2YXJpb3VzIHRocmVhZHMgd2UgbmVl ZCAqLworK2ludCBhZXNfbXRfc3RhcnRfdGhyZWFkcyh2b2lkICp2ZXZwX2N0eCwgY29uc3QgdV9j aGFyICprZXksCisrCQkJIHNpemVfdCBrZXlsZW4sIGNvbnN0IHVfY2hhciAqaXYsCisrCQkJIHNp emVfdCBpdmxlbiwgY29uc3QgT1NTTF9QQVJBTSAqb3NzbF9wYXJhbXMpCisreworKwlFVlBfQ0lQ SEVSX0NUWCAqZXZwX2N0eCA9IHZldnBfY3R4OworKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVz X210X2N0eDsKKysKKysKKysJLyogZ2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIGFlc19tdF9jdHgg KG91ciBjaXBoZXIgc3RyZWFtIHN0cnVjdCkgKi8KKysgCWlmICgoYWVzX210X2N0eCA9IEVWUF9D SVBIRVJfQ1RYX2dldF9hcHBfZGF0YShldnBfY3R4KSkgPT0gTlVMTCkgeworKwkJZmF0YWwoIk1p c3NpbmcgQUVTIE1UIGNvbnRleHQgZGF0YSEiKTsKKysJfQorKworKwkvKiB3ZSBhcmUgaW5pdGlh bGl6aW5nIGJ1dCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgYWxyZWFkeQorKwkgKiBoYXMgYW4gSVYg YW5kIGtleSBzbyB3ZSB3YW50IHRvIGtpbGwgdGhlIGV4aXN0aW5nIGtleSBkYXRhCisrCSAqIGFu ZCBzdGFydCBvdmVyLiBUaGlzIGlzIGltcG9ydGFudCB3aGVuIHdlIG5lZWQgdG8gcmVrZXkgdGhl IGRhdGEgc3RyZWFtICovCisrCWlmIChhZXNfbXRfY3R4LT5zdGF0ZSA9PSAoSEFWRV9LRVkgfCBI QVZFX0lWKSkgeworKwkJLyogdGVsbCB0aGUgcHJlZ2VuIHRocmVhZHMgdG8gZXhpdCAqLworKwkJ c3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFkcyhhZXNfbXRfY3R4KTsKKysKKysJCS8qIHJlc2V0 IHRoZSBleGl0IGZsYWcgKi8KKysJCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IDA7CisrCisrCQkv KiBTdGFydCBvdmVyIGdldHRpbmcga2V5ICYgaXYgKi8KKysJCWFlc19tdF9jdHgtPnN0YXRlID0g SEFWRV9OT05FOworKwl9CisrCisrCS8qIHNldCB0aGUgaW5pdGlhbCBrZXkgZm9yIHRoaXMga2V5 IHN0cmVhbSBxdWV1ZSAqLworKwlpZiAoa2V5ICE9IE5VTEwpIHsKKysJCWFlc19tdF9jdHgtPmtl eWxlbiA9IEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGgoZXZwX2N0eCkgKiA4OworKwkJYWVzX210 X2N0eC0+b3JpZ19rZXkgPSBrZXk7CisrCQlhZXNfbXRfY3R4LT5zdGF0ZSB8PSBIQVZFX0tFWTsK KysJfQorKworKwkvKiBzZXQgdGhlIElWICovCisrCWlmIChpdiAhPSBOVUxMKSB7CisrCQkvKiBp bml0IHRoZSBjb3VudGVyIHRoaXMgaXMganVzdCBhIDE2Ynl0ZSB1Y2hhciAqLworKwkJbWVtY3B5 KGFlc19tdF9jdHgtPmFlc19jb3VudGVyLCBpdiwgQUVTX0JMT0NLX1NJWkUpOworKwkJYWVzX210 X2N0eC0+c3RhdGUgfD0gSEFWRV9JVjsKKysJfQorKworKwlpZiAoYWVzX210X2N0eC0+c3RhdGUg PT0gKEhBVkVfS0VZIHwgSEFWRV9JVikpIHsKKysJCS8qIENsZWFyIHF1ZXVlcyAqLworKwkJLyog c2V0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIGtleSBxdWV1ZSB0byB0aGUgY3VycmVudCBjb3VudGVy ICovCisrCQltZW1jcHkoYWVzX210X2N0eC0+cVswXS5jdHIsIGFlc19tdF9jdHgtPmFlc19jb3Vu dGVyLCBBRVNfQkxPQ0tfU0laRSk7CisrCQkvKiBpbmRpY2F0ZSB0aGF0IGl0IG5lZWRzIHRvIGJl IGluaXRpYWxpemVkICovCisrCQlhZXNfbXRfY3R4LT5xWzBdLnFzdGF0ZSA9IEtRSU5JVDsKKysJ CS8qIGZvciBlYWNoIG9mIHRoZSByZW1haW5pbmcgcXVldWVzIHNldCB0aGUgZmlyc3QgY291bnRl ciB0byB0aGUKKysJCSAqIGNvdW50ZXIgYW5kIHRoZW4gYWRkIHRoZSBzaXplIG9mIHRoZSBxdWV1 ZSB0byB0aGUgY291bnRlciAqLworKwkJZm9yIChpbnQgaSA9IDE7IGkgPCBudW1rcTsgaSsrKSB7 CisrCQkJbWVtY3B5KGFlc19tdF9jdHgtPnFbaV0uY3RyLCBhZXNfbXRfY3R4LT5hZXNfY291bnRl ciwgQUVTX0JMT0NLX1NJWkUpOworKwkJCXNzaF9jdHJfYWRkKGFlc19tdF9jdHgtPnFbaV0uY3Ry LCBpICogS1FMRU4sIEFFU19CTE9DS19TSVpFKTsKKysJCQlhZXNfbXRfY3R4LT5xW2ldLnFzdGF0 ZSA9IEtRRU1QVFk7CisrCQl9CisrCQlhZXNfbXRfY3R4LT5xaWR4ID0gMDsKKysJCWFlc19tdF9j dHgtPnJpZHggPSAwOworKwkJYWVzX210X2N0eC0+c3RydWN0X2lkID0gZ2xvYmFsX3N0cnVjdF9p ZCsrOworKworKwkJLyogU3RhcnQgdGhyZWFkcy4gTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHN0 YWNrIHNwYWNlICh1bmRlciBhbHBpbmUpCisrCQkqIGFuZCBhcmVuJ3QgdXNpbmcgbW9yZSB0aGFu IHdlIG5lZWQgKGxpbnV4KS4gVGhpcyBjYW4gYmUgYXMgbG93IGFzCisrCQkqIDUxMktCIGJ1dCB0 aGF0J3MgYSBtaW5pbXVtLiAxMDI0S0IgZ2l2ZXMgdXMgYSBsaXR0bGUgaGVhZHJvb20gaWYgd2UK KysJCSogbmVlZCBpdCAqLworKyNkZWZpbmUgU1RBQ0tfU0laRSAoMTAyNCAqIDEwMjQpCisrICAg ICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CisrICAgICAgICAgICAgICAgIHB0aHJl YWRfYXR0cl9pbml0KCZhdHRyKTsKKysgICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX3NldHN0 YWNrc2l6ZSgmYXR0ciwgU1RBQ0tfU0laRSk7CisrCQlmb3IgKGludCBpID0gMDsgaSA8IGNpcGhl cl90aHJlYWRzOyBpKyspIHsKKysJCQlwdGhyZWFkX3J3bG9ja193cmxvY2soJmFlc19tdF9jdHgt PnRpZF9sb2NrKTsKKysJCQlpZiAocHRocmVhZF9jcmVhdGUoJmFlc19tdF9jdHgtPnRpZFtpXSwg JmF0dHIsIHRocmVhZF9sb29wLCBhZXNfbXRfY3R4KSAhPSAwKQorKwkJCQlmYXRhbCAoIkFFUy1D VFIgTVQgQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgaW4gJXMiLCBfX2Z1bmNfXyk7CisrCQkJZWxz ZSB7CisrCQkJCWFlc19tdF9jdHgtPmlkW2ldID0gaTsKKysJCQkJZGVidWdfZiAoIkFFUy1DVFIg TVQgc3Bhd25lZCBhIHRocmVhZCB3aXRoIGlkICVsdSAoJWx1LCAlZCkiLAorKwkJCQkJIGFlc19t dF9jdHgtPnRpZFtpXSwgYWVzX210X2N0eC0+c3RydWN0X2lkLAorKwkJCQkJIGFlc19tdF9jdHgt PmlkW2ldKTsKKysJCQl9CisrCQkJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZhZXNfbXRfY3R4LT50 aWRfbG9jayk7CisrCQl9CisrCQlwdGhyZWFkX211dGV4X2xvY2soJmFlc19tdF9jdHgtPnFbMF0u bG9jayk7CisrCQkvLyB3YWl0IGZvciBhbGwgb2YgdGhlIHRocmVhZHMgdG8gYmUgaW5pdGlhbGl6 ZWQKKysJCXdoaWxlIChhZXNfbXRfY3R4LT5xWzBdLnFzdGF0ZSA9PSBLUUlOSVQpCisrCQkJcHRo cmVhZF9jb25kX3dhaXQoJmFlc19tdF9jdHgtPnFbMF0uY29uZCwgJmFlc19tdF9jdHgtPnFbMF0u bG9jayk7CisrCQlwdGhyZWFkX211dGV4X3VubG9jaygmYWVzX210X2N0eC0+cVswXS5sb2NrKTsK KysJfQorKwlyZXR1cm4gMTsKKyt9CisrCisrLyogdGhpcyBzaG91bGQgY29ycmVzcG9uZCB0byBz c2hfYWVzX2N0cgorKyAqIE9TU0xfQ09SRV9NQUtFX0ZVTkMoaW50LCBjaXBoZXJfY2lwaGVyLAor KyAqICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKmNjdHgsCisrICogICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqb3V0bCwgc2l6ZV90IG91dHNpemUsCisr ICogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlu bCkpCisrICovCisrCisraW50IGFlc19tdF9kb19jaXBoZXIodm9pZCAqdmV2cF9jdHgsCisrCQkJ ICAgIHVfY2hhciAqZGVzdCwgc2l6ZV90ICpkZXN0bGVuLCBzaXplX3QgZGVzdHNpemUsCisrCQkJ ICAgIGNvbnN0IHVfY2hhciAqc3JjLCBzaXplX3QgbGVuKQorK3sKKysJdHlwZWRlZiB1bmlvbiB7 CisrI2lmZGVmIENJUEhFUl9JTlQxMjhfT0sKKysJCV9fdWludDEyOF90ICp1MTI4OworKyNlbmRp ZgorKwkJdWludDY0X3QgKnU2NDsKKysJCXVpbnQzMl90ICp1MzI7CisrCQl1aW50OF90ICp1ODsK KysJCWNvbnN0IHVpbnQ4X3QgKmN1ODsKKysJCXVpbnRwdHJfdCB1OworKwl9IHB0cnNfdDsKKysJ cHRyc190IGRlc3RwLCBzcmNwLCBidWZwOworKwl1aW50cHRyX3QgYWxpZ247CisrCXN0cnVjdCBh ZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4OworKwlzdHJ1Y3Qga3EgKnEsICpvbGRxOworKwlpbnQg cmlkeDsKKysJdV9jaGFyICpidWY7CisrCUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gdmV2cF9j dHg7CisrCXVpbnQ2NF90IHNyY19hLCBrZXlfYTsKKysJCisrCWlmIChsZW4gPT0gMCkKKysJCXJl dHVybiAxOworKworKwlpZiAoKGFlc19tdF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2Rh dGEoZXZwX2N0eCkpID09IE5VTEwpCisrCQlyZXR1cm4gMDsKKysKKysJcSA9ICZhZXNfbXRfY3R4 LT5xW2Flc19tdF9jdHgtPnFpZHhdOworKwlyaWR4ID0gYWVzX210X2N0eC0+cmlkeDsKKysKKysJ Lyogc3JjIGFscmVhZHkgcGFkZGVkIHRvIGJsb2NrIG11bHRpcGxlICovCisrCXNyY3AuY3U4ID0g c3JjOworKwlkZXN0cC51OCA9IGRlc3Q7CisrCWRvIHsgLyogZG8gdW50aWwgbGVuIGlzIDAgKi8K KysJCWJ1ZiA9IHEtPmtleXNbcmlkeF07CisrCQlidWZwLnU4ID0gYnVmOworKworKwkJLyogZmln dXJlIG91dCB0aGUgYWxpZ25tZW50IG9uIHRoZSBmbHkgKi8KKysjaWZkZWYgQ0lQSEVSX1VOQUxJ R05FRF9PSworKwkJYWxpZ24gPSAwOworKyNlbHNlCisrCQlhbGlnbiA9IGRlc3RwLnUgfCBzcmNw LnUgfCBidWZwLnU7CisrI2VuZGlmCisrCisrCQkvKiB4b3IgdGhlIHNyYyBhZ2FpbnN0IHRoZSBr ZXkgKGJ1ZikKKysJCSAqIGRpZmZlcmVudCBzeXN0ZW1zIGNhbiBkbyBhbGwgMTYgYnl0ZXMgYXQg b25jZSBvcgorKwkJICogbWF5IG5lZWQgdG8gZG8gaXQgaW4gOCBvciA0IGJ5dGVzIGNodW5rcwor KwkJICogd29yc3QgY2FzZSBpcyBkb2luZyBpdCBhcyBhIGxvb3AgKi8KKysjaWZkZWYgQ0lQSEVS X0lOVDEyOF9PSworKwkJLyogd2l0aCBHQ0MgMTMgd2UgaGF2ZSBoYXZpbmcgY29uc2lzdGVudCBz ZWcgZmF1bHRzCisrCQkgKiBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gU2luY2UgdGhpcyBpcyBh IGNyaXRpY2FsCisrCQkgKiBjb2RlIHBhdGggd2UgYXJlIHJlbW92aW5nIHRoaXMgdW50aWwgd2Ug aGF2ZSBhIHNvbHV0aW9uCisrCQkgKiBpbiBwbGFjZSAtY2pyIDAyLzIyLzI0CisrCQkgKiBUT0RP OiBGSVggVEhJUworKwkJICovCisrCQkvKiBpZiAoKGFsaWduICYgMHhmKSA9PSAwKSB7ICovCisr CQkvKiAJZGVzdHAudTEyOFswXSA9IHNyY3AudTEyOFswXSBeIGJ1ZnAudTEyOFswXTsgKi8KKysJ CS8qIH0gZWxzZSAqLworKyNlbmRpZgorKwkJLyogNjQgYml0cyAqLworKwkJLyogdGhpcyBpcyBj YXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gc2FuaXRpemVycworKwkJICogdGhpcyBpcyBh bm5veWluZyBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQKKysJCSAqIGJ1dCBVQiBpcyBub3Qg c29tZXRoaW5nIEkgd2FudCB0byByZXRhaW4gKi8KKysJCWlmICgoYWxpZ24gJiAweDcpID09IDAp IHsKKysJCQkvKiB0aGlzIHNob3VsZCByZXNvbHZlIHRoZSBzdHJpY3QgYWxpYXNpbmcgVUIKKysJ CQkgKiBhbmQgdGhlIHBlcmZvcm1hbmNlIGRvZXNuJ3Qgc2VlbSB0byBjaGFuZ2UgbXVjaAorKwkJ CSAqIGJ1dCB0aGUgbWVtY3B5cyBhcmUga2lsbGluZyBtZSAzLTUtMjYgY2pyKi8KKysJCQltZW1j cHkoJnNyY19hLCAmc3JjcC51NjRbMF0sIHNpemVvZih1aW50NjRfdCkpOworKwkJCW1lbWNweSgm a2V5X2EsICZidWZwLnU2NFswXSwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrCQkJZGVzdHAudTY0WzBd ID0gc3JjX2EgXiBrZXlfYTsKKysJCQltZW1jcHkoJnNyY19hLCAmc3JjcC51NjRbMV0sIHNpemVv Zih1aW50NjRfdCkpOworKwkJCW1lbWNweSgma2V5X2EsICZidWZwLnU2NFsxXSwgc2l6ZW9mKHVp bnQ2NF90KSk7CisrCQkJZGVzdHAudTY0WzFdID0gc3JjX2EgXiBrZXlfYTsKKysJCQkvKiBkZXN0 cC51NjRbMF0gPSBzcmNwLnU2NFswXSBeIGJ1ZnAudTY0WzBdOyAqLworKwkJCS8qIGRlc3RwLnU2 NFsxXSA9IHNyY3AudTY0WzFdIF4gYnVmcC51NjRbMV07ICovCisrICAgICAgICAgICAgICAgIC8q IDMyIGJpdHMgKi8KKysJCX0gZWxzZQorKwkJaWYgKChhbGlnbiAmIDB4MykgPT0gMCkgeworKwkJ CWRlc3RwLnUzMlswXSA9IHNyY3AudTMyWzBdIF4gYnVmcC51MzJbMF07CisrCQkJZGVzdHAudTMy WzFdID0gc3JjcC51MzJbMV0gXiBidWZwLnUzMlsxXTsKKysJCQlkZXN0cC51MzJbMl0gPSBzcmNw LnUzMlsyXSBeIGJ1ZnAudTMyWzJdOworKwkJCWRlc3RwLnUzMlszXSA9IHNyY3AudTMyWzNdIF4g YnVmcC51MzJbM107CisrCQl9IGVsc2UgeworKwkJCS8qMSBieXRlIGF0IGEgdGltZSovCisrCQkJ c2l6ZV90IGk7CisrCQkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFOyArK2kpCisrCQkJ CWRlc3RbaV0gPSBzcmNbaV0gXiBidWZbaV07CisrCQl9CisrCisrCQkvKiBpbmMvZGVjcmVtZW50 IHRoZSBwb2ludGVycyBieSB0aGUgYmxvY2sgc2l6ZSAoMTYpKi8KKysJCWRlc3RwLnUgKz0gQUVT X0JMT0NLX1NJWkU7CisrCQlzcmNwLnUgKz0gQUVTX0JMT0NLX1NJWkU7CisrCisrCQkvKiBJbmNy ZW1lbnQgcmVhZCBpbmRleCwgc3dpdGNoIHF1ZXVlcyBvbiByb2xsb3ZlciAqLworKwkJaWYgKChy aWR4ID0gKHJpZHggKyAxKSAlIEtRTEVOKSA9PSAwKSB7CisrCQkJb2xkcSA9IHE7CisrCisrCQkJ LyogTWFyayBuZXh0IHF1ZXVlIGRyYWluaW5nLCBtYXkgbmVlZCB0byB3YWl0ICovCisrCQkJYWVz X210X2N0eC0+cWlkeCA9IChhZXNfbXRfY3R4LT5xaWR4ICsgMSkgJSBudW1rcTsKKysJCQlxID0g JmFlc19tdF9jdHgtPnFbYWVzX210X2N0eC0+cWlkeF07CisrCQkJcHRocmVhZF9tdXRleF9sb2Nr KCZxLT5sb2NrKTsKKysJCQl3aGlsZSAocS0+cXN0YXRlICE9IEtRRlVMTCkgeworKwkJCQlwdGhy ZWFkX2NvbmRfd2FpdCgmcS0+Y29uZCwgJnEtPmxvY2spOworKwkJCX0KKysJCQlxLT5xc3RhdGUg PSBLUURSQUlOSU5HOworKwkJCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNvbmQpOworKwkJ CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKysKKysJCQkvKiBNYXJrIGNvbnN1bWVk IHF1ZXVlIGVtcHR5IGFuZCBzaWduYWwgcHJvZHVjZXJzICovCisrCQkJcHRocmVhZF9tdXRleF9s b2NrKCZvbGRxLT5sb2NrKTsKKysJCQlvbGRxLT5xc3RhdGUgPSBLUUVNUFRZOworKwkJCXB0aHJl YWRfY29uZF9icm9hZGNhc3QoJm9sZHEtPmNvbmQpOworKwkJCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZvbGRxLT5sb2NrKTsKKysJCX0KKysJfSB3aGlsZSAobGVuIC09IEFFU19CTE9DS19TSVpFKTsK KysJYWVzX210X2N0eC0+cmlkeCA9IHJpZHg7CisrCXJldHVybiAxOworK30KKysKKysjZW5kaWYg LypXSVRIX09QRU5TU0wzKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1j dHItbXQtZnVuY3Rpb25zLmggb3BlbnNzaC0xMC41cDEvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMu aAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuaAkxOTcw LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NpcGhl ci1jdHItbXQtZnVuY3Rpb25zLmgJMjAyNi0wOS0yMSAwNzowNjo1OS44ODQ5MzE1NzYgKzAyMDAK K0BAIC0wLDAgKzEsMTQwIEBACisrLyoKKysgKiBPcGVuU1NIIE11bHRpLXRocmVhZGVkIEFFUy1D VFIgQ2lwaGVyIFByb3ZpZGVyIGZvciBPcGVuU1NMIDMKKysgKgorKyAqIEF1dGhvcjogQmVuamFt aW4gQmVubmV0dCA8YmVuQHBzYy5lZHU+CisrICogQXV0aG9yOiBNaWtlIFRhc290YSA8dGFzb3Rh QGdtYWlsLmNvbT4KKysgKiBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+Cisr ICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMjIgUGl0dHNidXJnaCBTdXBlcmNvbXB1dGluZyBDZW50 ZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBCYXNlZCBvbiBvcmlnaW5hbCBPcGVu U1NIIEFFUy1DVFIgY2lwaGVyLiBTbWFsbCBwb3J0aW9ucyByZW1haW4gdW5jaGFuZ2VkLAorKyAq IENvcHlyaWdodCAoYykgMjAwMyBNYXJrdXMgRnJpZWRsIDxtYXJrdXNAb3BlbmJzZC5vcmc+Cisr ICoKKysgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0 aGlzIHNvZnR3YXJlIGZvciBhbnkKKysgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMg aGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisrICogY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysg KgorKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJ U0NMQUlNUyBBTEwgV0FSUkFOVElFUworKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUg SU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKysgKiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgor KyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgT1IgQU5ZIERBTUFHRVMKKysgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0Yg VVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKysgKiBBQ1RJT04gT0YgQ09OVFJB Q1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgor KyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMg U09GVFdBUkUuCisrICovCisrCisrI2lmbmRlZiBDVFJfTVRfRlVOQ1MKKysjZGVmaW5lIENUUl9N VF9GVU5DUworKworKy8qIGluY2x1ZGVzICovCisrI2luY2x1ZGUgImluY2x1ZGVzLmgiIC8qIG5l ZWRlZCB0byBnZXQgdmVyc2lvbiBudW1iZXIgKi8KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisr I2luY2x1ZGUgPHB0aHJlYWQuaD4KKysjaW5jbHVkZSAiY2lwaGVyLWFlc2N0ci5oIgorKyNpbmNs dWRlICJ1dGhhc2guaCIKKysKKysjaWZuZGVmIFVTRV9CVUlMVElOX1JJSk5EQUVMCisrI2luY2x1 ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2VuZGlmCisrCisrLyogb25seSBmb3Igc3lzdGVtcyB3aXRo IE9TU0wgMyAqLworKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrCisrLyotLS0tLS0tLS0tLS0tLS0t LS0tLSBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrLyogbWF4aW11bSBudW1iZXIg b2YgdGhyZWFkcyBhbmQgcXVldWVzICovCisrI2RlZmluZSBNQVhfVEhSRUFEUyAgICAgIDMyCisr I2RlZmluZSBNQVhfTlVNS1EgICAgICAgIChNQVhfVEhSRUFEUyArIDEpCisrCisrLyogb25lIHF1 ZXVlIGhvbGRzIDgxOTIgKiA0ICogMTZCICg1MTJLQikgIG9mIGtleSBkYXRhIAorKyAqIGJlaW5n IHRoYXQgdGhlIHF1ZXVlcyBhcmUgZGVzdHJveWVkIGFmdGVyIGEgcmVrZXkKKysgKiBhbmQgYXQg bGVhdHMgb25lIGhhcyB0byBiZSBmdWxseSBmaWxsZWQgcHJpb3IgdG8KKysgKiBlbmNpcGhlcmlu ZyBkYXRhIHdlIGRvbid0IHdhbnQgdGhpcyB0byBiZSB0b28gbGFyZ2UgKi8KKysjZGVmaW5lIEtR TEVOICg4MTkyICogNCkKKysKKysvKiBQcm9jZXNzb3IgY2FjaGVsaW5lIGxlbmd0aCAqLworKyNk ZWZpbmUgQ0FDSEVMSU5FX0xFTgk2NAorKworKy8qIENhbiB0aGUgc3lzdGVtIGRvIHVuYWxpZ25l ZCBsb2FkcyBuYXRpdmVseT8gKi8KKysjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgXAorKyAg ICBkZWZpbmVkKF9faTM4Nl9fKSAgICB8fCBcCisrICAgIGRlZmluZWQoX19wb3dlcnBjX18pIHx8 IFwKKysgICAgZGVmaW5lZChfX3g4Nl82NF9fKQorKyMgZGVmaW5lIENJUEhFUl9VTkFMSUdORURf T0sKKysjZW5kaWYKKysjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXykKKysjIGRlZmluZSBD SVBIRVJfSU5UMTI4X09LCisrI2VuZGlmCisrCisrLyogY29udGV4dCBzdGF0ZXMgKi8KKysjZGVm aW5lIEhBVkVfTk9ORSAgICAgICAwCisrI2RlZmluZSBIQVZFX0tFWSAgICAgICAgMQorKyNkZWZp bmUgSEFWRV9JViAgICAgICAgIDIKKysKKysvKiBLZXlzdHJlYW0gUXVldWUgc3RhdGUgKi8KKytl bnVtIHsKKysJS1FJTklULAorKwlLUUVNUFRZLAorKwlLUUZJTExJTkcsCisrCUtRRlVMTCwKKysJ S1FEUkFJTklORworK307CisrCisrLyogc3RydWN0cyAqLworKworKy8qIHByb3ZpZGVyIHN0cnVj dCAqLworK3N0cnVjdCBwcm92aWRlcl9jdHhfc3QgeworKwljb25zdCBPU1NMX0NPUkVfSEFORExF ICpjb3JlX2hhbmRsZTsKKysJc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpwcm92ZXJyX2hh bmRsZTsKKyt9OworKworKy8qIEtleXN0cmVhbSBRdWV1ZSBzdHJ1Y3QgKi8KKytzdHJ1Y3Qga3Eg eworKwl1X2NoYXIJCWtleXNbS1FMRU5dW0FFU19CTE9DS19TSVpFXTsgLyogWzMyNzY4XVsxNkJd ICovCisrCXVfY2hhcgkJY3RyW0FFU19CTE9DS19TSVpFXTsgLyogMTZCICovCisrCXVfY2hhciAg ICAgICAgICBwYWQwW0NBQ0hFTElORV9MRU5dOworKwlwdGhyZWFkX211dGV4X3QJbG9jazsKKysJ cHRocmVhZF9jb25kX3QJY29uZDsKKysJaW50ICAgICAgICAgICAgIHFzdGF0ZTsKKysJdV9jaGFy ICAgICAgICAgIHBhZDFbQ0FDSEVMSU5FX0xFTl07CisrfTsKKysKKysvKiBBRVMgTVQgY29udGV4 dCBzdHJ1Y3QgKi8KKytzdHJ1Y3QgYWVzX210X2N0eF9zdCB7CisrCXN0cnVjdCBwcm92aWRlcl9j dHhfc3QgKnByb3ZjdHg7CisrCWxvbmcgdW5zaWduZWQgaW50ICAgICAgIHN0cnVjdF9pZDsKKysJ aW50ICAgICAgICAgICAgICAgICAgICAga2V5bGVuOworKwlpbnQJCSAgICAgICAgc3RhdGU7Cisr CWludAkJICAgICAgICBxaWR4OworKwlpbnQJCSAgICAgICAgcmlkeDsKKysJaW50ICAgICAgICAg ICAgICAgICAgICAgaWRbTUFYX1RIUkVBRFNdOyAvKiAzMiAqLworKwlBRVNfS0VZICAgICAgICAg ICAgICAgICBhZXNfa2V5OworKwljb25zdCB1X2NoYXIgICAgICAgICAgICpvcmlnX2tleTsKKysJ dV9jaGFyCQkgICAgICAgIGFlc19jb3VudGVyW0FFU19CTE9DS19TSVpFXTsgLyogMTZCICovCisr CXB0aHJlYWRfdAkgICAgICAgIHRpZFtNQVhfVEhSRUFEU107IC8qIDMyICovCisrCXB0aHJlYWRf cndsb2NrX3QgICAgICAgIHRpZF9sb2NrOworKwlzdHJ1Y3Qga3EJICAgICAgICBxW01BWF9OVU1L UV07IC8qIDMzICovCisrCXB0aHJlYWRfcndsb2NrX3QgICAgICAgIHN0b3BfbG9jazsKKysJaW50 CQkgICAgICAgIGV4aXRfZmxhZzsKKysJaW50ICAgICAgICAgICAgICAgICAgICAgb25nb2luZzsg LyogcG9zc2libHkgbm90IG5lZWRlZCAqLworK307CisrCisrLyogdGhpcyBob2xkcyBhbiBhcnJh eSBvZiBldnAgY29udGV4dCBwb2ludGVycyB0aGF0IGFyZQorKyAqIGNyZWF0ZWQgaW4gdGhyZWFk X2xvb3AuIFNpbmNlIHdlIGNhbid0IGVmZmVjdGl2ZWx5IGZyZWUgdGhvc2UKKysgKiBjb250ZXh0 cyBpbiB0aHJlYWRfbG9vcCB3ZSBrZWVwIGEgY29weSBvZiB0aG9zZSBwb2ludGVycyBoZXJlCisr ICogYW5kIHRoZW4gZnJlZSB0aGVtIGluIHN0b3BfYW5kX2pvaW5fcHJlZ2VudGhyZWFkcworKyAq IGNqciAyLzIvMjAyMworKyAqLworK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMgeworKwlFVlBfQ0lQ SEVSX0NUWCAqcG9pbnRlcjsKKysgICAgICAgIHB0aHJlYWRfdCAgICAgICB0aWQ7CisrCVVUX2hh c2hfaGFuZGxlICBoaDsKKyt9OworKworK2ludCBhZXNfbXRfZG9fY2lwaGVyKHZvaWQgKiwgdV9j aGFyICosIHNpemVfdCAqLCBzaXplX3QsIGNvbnN0IHVfY2hhciAqLCBzaXplX3QpOworK2ludCBh ZXNfbXRfc3RhcnRfdGhyZWFkcyh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0 IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IE9TU0xfUEFSQU0gKik7Cisrdm9pZCBhZXNfbXRfZnJl ZWN0eCh2b2lkICopOworK3ZvaWQgKmFlc19tdF9uZXdjdHhfMjU2KHZvaWQgKik7Cisrdm9pZCAq YWVzX210X25ld2N0eF8xOTIodm9pZCAqKTsKKyt2b2lkICphZXNfbXRfbmV3Y3R4XzEyOCh2b2lk ICopOworKworKyNlbmRpZiAvKiBXSVRIIE9QRU5TU0wgKi8KKysjZW5kaWYgLyogQ1RSX01UX0ZV TkNTICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXItY3RyLW10LXByb3Zp ZGVyLmMgb3BlbnNzaC0xMC41cDEvY2lwaGVyLWN0ci1tdC1wcm92aWRlci5jCistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9jaXBoZXItY3RyLW10LXByb3ZpZGVyLmMJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY3RyLW10LXByb3Zp ZGVyLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODUwNDY2NTQgKzAyMDAKK0BAIC0wLDAgKzEsMzkw IEBACisrLyoKKysgKiBPcGVuU1NIIE11bHRpLXRocmVhZGVkIEFFUy1DVFIgQ2lwaGVyIFByb3Zp ZGVyIGZvciBPcGVuU1NMIDMKKysgKgorKyAqIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJA cHNjLmVkdT4KKysgKiBDb3B5cmlnaHQgKGMpIDIwMjIgUGl0dHNidXJnaCBTdXBlcmNvbXB1dGlu ZyBDZW50ZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBQZXJtaXNzaW9uIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKysg KiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVk IHRoYXQgdGhlIGFib3ZlCisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysgKgorKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwor KyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdB UlJBTlRJRVMgT0YKKysgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1Qs IElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKysgKiBX SEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdI RVRIRVIgSU4gQU4KKysgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIg VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorKyAqIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrICovCisrCisrLyog YmFzZWQgb24gdmllbmVyZS5jIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Byb3ZpZGVyLWNvcm5l ci92aWdlbmVyZSBieQorKyAqIFJpY2hhcmQgTGV2aXR0ZSBwcm92aWRlZCB1bmRlciBhIENDMCBQ dWJsaWMgTGljZW5zZS4gKi8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysKKysvKiBvbmx5 IGZvciBzeXN0ZW1zIHdpdGggT1NTTCAzLjArICovCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMKKysK KysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2NvcmUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX2Rpc3BhdGNoLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvY29yZV9uYW1lcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUgIm9zc2wzLXByb3ZpZGVyLWVyci5o IgorKyNpbmNsdWRlICJudW0uaCIKKysjaW5jbHVkZSAiY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMu aCIKKysKKysjZGVmaW5lIEVSUl9IQU5ETEUoY3R4KSAoKGN0eCktPnByb3ZjdHgtPnByb3ZlcnJf aGFuZGxlKQorKworKy8qIGZvcndhcmQgZGVjbGFydGlvbiBvZiBjaXBoZXIgZnVuY3Rpb25zICov CisrLyogY2lwaGVyIGNvbnRleHQgZnVuY3Rpb25zICovCisrT1NTTF9GVU5DX2NpcGhlcl9uZXdj dHhfZm4gYWVzX210X25ld2N0eF8yNTY7CisrT1NTTF9GVU5DX2NpcGhlcl9uZXdjdHhfZm4gYWVz X210X25ld2N0eF8xOTI7CisrT1NTTF9GVU5DX2NpcGhlcl9uZXdjdHhfZm4gYWVzX210X25ld2N0 eF8xMjg7CisrT1NTTF9GVU5DX2NpcGhlcl9mcmVlY3R4X2ZuIGFlc19tdF9mcmVlY3R4OworKwor Ky8qIHBhcmFtIHJlbGF0ZWQgZnVuY3Rpb24qLworK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX2dl dF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMjU2OworK3N0YXRpYyBPU1NMX0ZVTkNfY2lw aGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMTkyOworK3N0YXRpYyBPU1NMX0ZV TkNfY2lwaGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMTI4OworK3N0YXRpYyBP U1NMX0ZVTkNfY2lwaGVyX2dldHRhYmxlX3BhcmFtc19mbiBhZXNfbXRfZ2V0dGFibGVfcGFyYW1z OworK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX3NldF9jdHhfcGFyYW1zX2ZuIGFlc19tdF9zZXRf Y3R4X3BhcmFtczsKKytzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9nZXRfY3R4X3BhcmFtc19mbiBh ZXNfbXRfZ2V0X2N0eF9wYXJhbXM7Cisrc3RhdGljIE9TU0xfRlVOQ19jaXBoZXJfc2V0dGFibGVf Y3R4X3BhcmFtc19mbiBhZXNfbXRfc2V0dGFibGVfY3R4X3BhcmFtczsKKytzdGF0aWMgT1NTTF9G VU5DX2NpcGhlcl9nZXR0YWJsZV9jdHhfcGFyYW1zX2ZuIGFlc19tdF9nZXR0YWJsZV9jdHhfcGFy YW1zOworKworKy8qIGVuL2RlY2lwaGVyIGZ1bmN0aW9ucyAqLworK09TU0xfRlVOQ19jaXBoZXJf ZW5jcnlwdF9pbml0X2ZuIGFlc19tdF9zdGFydF90aHJlYWRzOworK09TU0xfRlVOQ19jaXBoZXJf ZGVjcnlwdF9pbml0X2ZuIGFlc19tdF9zdGFydF90aHJlYWRzOworK09TU0xfRlVOQ19jaXBoZXJf dXBkYXRlX2ZuIGFlc19tdF9kb19jaXBoZXI7CisrCisrLyogcHJvdmlkZXIgY29udGV4dCAqLwor K3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfcXVlcnlfb3BlcmF0aW9uX2ZuIGFlc19tdF9wcm92 X3F1ZXJ5OworK3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfZ2V0X3JlYXNvbl9zdHJpbmdzX2Zu IGFlc19tdF9wcm92X3JlYXNvbnM7Cisrc3RhdGljIE9TU0xfRlVOQ19wcm92aWRlcl90ZWFyZG93 bl9mbiBhZXNfbXRfcHJvdl90ZWFyZG93bjsKKytzdGF0aWMgT1NTTF9GVU5DX3Byb3ZpZGVyX2dl dF9wYXJhbXNfZm4gYWVzX210X3Byb3ZfZ2V0X3BhcmFtczsgCisrT1NTTF9wcm92aWRlcl9pbml0 X2ZuIE9TU0xfcHJvdmlkZXJfaW5pdDsgLyogbmVlZCB0aGlzPyAqLworKworKy8qIGVycm9yIGZ1 bmN0aW9ucyAqLworK09TU0xfRlVOQ19jb3JlX25ld19lcnJvcl9mbiAqY19uZXdfZXJyb3I7Cisr T1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX2RlYnVnX2ZuICpjX3NldF9lcnJvcl9kZWJ1ZzsKKytP U1NMX0ZVTkNfY29yZV92c2V0X2Vycm9yX2ZuICpjX3ZzZXRfZXJyb3I7CisrT1NTTF9GVU5DX2Nv cmVfc2V0X2Vycm9yX21hcmtfZm4gKmNfc2V0X2Vycm9yX21hcms7CisrT1NTTF9GVU5DX2NvcmVf Y2xlYXJfbGFzdF9lcnJvcl9tYXJrX2ZuICpjX2NsZWFyX2xhc3RfZXJyb3JfbWFyazsKKytPU1NM X0ZVTkNfY29yZV9wb3BfZXJyb3JfdG9fbWFya19mbiAqY19wb3BfZXJyb3JfdG9fbWFyazsKKysK KysvKiBFcnJvcnMgdXNlZCBpbiB0aGlzIHByb3ZpZGVyICovCisrI2RlZmluZSBBRVNfTVRfRV9N QUxMT0MgICAgICAgICAgIDEKKysjZGVmaW5lIEFFU19NVF9PTkdPSU5HX09QRVJBVElPTiAgMgor KyNkZWZpbmUgQUVTX01UX0JBRF9LRVlMRU4gICAgICAgICAzCisrCisrLyogdHlwZWRlZiBmb3Ig ZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyt0eXBlZGVmIHZvaWQoKmZwdHJfdCkodm9pZCk7CisrCisr LyogYWxsIG9mIHRoZSB2YXJpb3VzIGFycmF5cyB3ZSBuZWVkICovCisrCisrLyogQkFEX0tFWUxF TiBpc24ndCBiZWluZyB1c2VkIGF0IHRoZSBtb21lbnQgKi8KKytjb25zdCBPU1NMX0lURU0gcmVh c29uc1tdID0geworKwl7IEFFU19NVF9FX01BTExPQywgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1 cmUiIH0sCisrCXsgQUVTX01UX09OR09JTkdfT1BFUkFUSU9OLCAiT3BlcmF0aW9uIHVuZGVyd2F5 IiB9LAorKwl7IEFFU19NVF9CQURfS0VZTEVOLCAiT25seSAyNTYsIDE5MiwgYW5kIDEyOCBLZXkg bGVuZ3RocyBhcmUgc3VwcG9ydGVkIiB9LAorKwl7IDAsIE5VTEwgfSAvKiBUZXJtaW5hdGlvbiAq LworK307CisrCisrLyogZnVuY3Rpb24gbWFwcGluZyBmb3IgMjU2fDE5MnwxMjgga2V5IGxlbmd0 aHMgKi8KKytjb25zdCBPU1NMX0RJU1BBVENIIGFlc19tdF9mdW5jc18yNTZbXSA9IHsKKysJeyBP U1NMX0ZVTkNfQ0lQSEVSX05FV0NUWCwgKGZwdHJfdClhZXNfbXRfbmV3Y3R4XzI1NiB9ICwKKysJ eyBPU1NMX0ZVTkNfQ0lQSEVSX0ZSRUVDVFgsIChmcHRyX3QpYWVzX210X2ZyZWVjdHggfSwKKysJ eyBPU1NMX0ZVTkNfQ0lQSEVSX0VOQ1JZUFRfSU5JVCwgKGZwdHJfdClhZXNfbXRfc3RhcnRfdGhy ZWFkcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfREVDUllQVF9JTklULCAoZnB0cl90KWFlc19t dF9zdGFydF90aHJlYWRzIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9VUERBVEUsIChmcHRyX3Qp YWVzX210X2RvX2NpcGhlciB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUX1BBUkFNUywgKGZw dHJfdClhZXNfbXRfZ2V0X3BhcmFtc18yNTYgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVFRB QkxFX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfcGFyYW1zIH0sCisrCXsgT1NTTF9G VU5DX0NJUEhFUl9HRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X2N0eF9wYXJhbXMg fSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVFRBQkxFX0NUWF9QQVJBTVMsCisrCSAgKGZwdHJf dClhZXNfbXRfZ2V0dGFibGVfY3R4X3BhcmFtcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfU0VU X0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X3NldF9jdHhfcGFyYW1zIH0sCisrCXsgT1NTTF9G VU5DX0NJUEhFUl9TRVRUQUJMRV9DVFhfUEFSQU1TLAorKwkgIChmcHRyX3QpYWVzX210X3NldHRh YmxlX2N0eF9wYXJhbXMgfSwKKysJeyAwLCBOVUxMIH0KKyt9OworKworK2NvbnN0IE9TU0xfRElT UEFUQ0ggYWVzX210X2Z1bmNzXzE5MltdID0geworKwl7IE9TU0xfRlVOQ19DSVBIRVJfTkVXQ1RY LCAoZnB0cl90KWFlc19tdF9uZXdjdHhfMTkyIH0gLAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfRlJF RUNUWCwgKGZwdHJfdClhZXNfbXRfZnJlZWN0eCB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfRU5D UllQVF9JTklULCAoZnB0cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCisrCXsgT1NTTF9GVU5D X0NJUEhFUl9ERUNSWVBUX0lOSVQsIChmcHRyX3QpYWVzX210X3N0YXJ0X3RocmVhZHMgfSwKKysJ eyBPU1NMX0ZVTkNfQ0lQSEVSX1VQREFURSwgKGZwdHJfdClhZXNfbXRfZG9fY2lwaGVyIH0sCisr CXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXRfcGFyYW1z XzE5MiB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUVEFCTEVfUEFSQU1TLCAoZnB0cl90KWFl c19tdF9nZXR0YWJsZV9wYXJhbXMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVF9DVFhfUEFS QU1TLCAoZnB0cl90KWFlc19tdF9nZXRfY3R4X3BhcmFtcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBI RVJfR0VUVEFCTEVfQ1RYX1BBUkFNUywKKysJICAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9jdHhf cGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClh ZXNfbXRfc2V0X2N0eF9wYXJhbXMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVFRBQkxFX0NU WF9QQVJBTVMsCisrCSAgKGZwdHJfdClhZXNfbXRfc2V0dGFibGVfY3R4X3BhcmFtcyB9LAorKwl7 IDAsIE5VTEwgfQorK307CisrCisrY29uc3QgT1NTTF9ESVNQQVRDSCBhZXNfbXRfZnVuY3NfMTI4 W10gPSB7CisrCXsgT1NTTF9GVU5DX0NJUEhFUl9ORVdDVFgsIChmcHRyX3QpYWVzX210X25ld2N0 eF8xMjggfSAsCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9GUkVFQ1RYLCAoZnB0cl90KWFlc19tdF9m cmVlY3R4IH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9FTkNSWVBUX0lOSVQsIChmcHRyX3QpYWVz X210X3N0YXJ0X3RocmVhZHMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0RFQ1JZUFRfSU5JVCwg KGZwdHJfdClhZXNfbXRfc3RhcnRfdGhyZWFkcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfVVBE QVRFLCAoZnB0cl90KWFlc19tdF9kb19jaXBoZXIgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dF VF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldF9wYXJhbXNfMTI4IH0sCisrCXsgT1NTTF9GVU5D X0NJUEhFUl9HRVRUQUJMRV9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldHRhYmxlX3BhcmFtcyB9 LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUX0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dl dF9jdHhfcGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9DVFhfUEFSQU1T LAorKwkgIChmcHRyX3QpYWVzX210X2dldHRhYmxlX2N0eF9wYXJhbXMgfSwKKysJeyBPU1NMX0ZV TkNfQ0lQSEVSX1NFVF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9zZXRfY3R4X3BhcmFtcyB9 LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfU0VUVEFCTEVfQ1RYX1BBUkFNUywKKysJICAoZnB0cl90 KWFlc19tdF9zZXR0YWJsZV9jdHhfcGFyYW1zIH0sCisrCXsgMCwgTlVMTCB9CisrfTsKKysKKysv KiB0aGUgY2lwaGVycyBmb3VuZCBpbiB0aGlzIHByb3ZpZGVyICovCisrY29uc3QgT1NTTF9BTEdP UklUSE0gYWVzX210X2NpcGhlcnNbXSA9IHsKKysJeyAiYWVzX2N0cl9tdF8yNTYiLCAicHJvdmlk ZXI9aHBuc3NoIiwgYWVzX210X2Z1bmNzXzI1NiwgTlVMTCB9LAorKwl7ICJhZXNfY3RyX210XzE5 MiIsICJwcm92aWRlcj1ocG5zc2giLCBhZXNfbXRfZnVuY3NfMTkyLCBOVUxMIH0sCisrCXsgImFl c19jdHJfbXRfMTI4IiwgInByb3ZpZGVyPWhwbnNzaCIsIGFlc19tdF9mdW5jc18xMjgsIE5VTEwg fSwKKysJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KKyt9OworKworKy8qIGZ1bmN0aW9uIG1h cHBpbmcgZm9yIHByb3ZpZGVyIG1ldGhvZHMgKi8KKytjb25zdCBPU1NMX0RJU1BBVENIIHByb3Zp ZGVyX2Z1bmN0aW9uc1tdID0geworKwl7IE9TU0xfRlVOQ19QUk9WSURFUl9URUFSRE9XTiwgKGZw dHJfdClhZXNfbXRfcHJvdl90ZWFyZG93biB9LAorKwl7IE9TU0xfRlVOQ19QUk9WSURFUl9RVUVS WV9PUEVSQVRJT04sIChmcHRyX3QpYWVzX210X3Byb3ZfcXVlcnkgfSwKKysJeyBPU1NMX0ZVTkNf UFJPVklERVJfR0VUX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfcHJvdl9nZXRfcGFyYW1zIH0sCisr CXsgT1NTTF9GVU5DX1BST1ZJREVSX0dFVF9SRUFTT05fU1RSSU5HUywgKGZwdHJfdClhZXNfbXRf cHJvdl9yZWFzb25zIH0sCisrCXsgMCwgTlVMTCB9CisrfTsKKysKKytzdGF0aWMgY29uc3QgT1NT TF9QQVJBTSBjdHhfZ2V0X3BhcmFtX3RhYmxlW10gPSB7CisrICAgICAgICB7ICJrZXlsZW4iLCBP U1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIsIE5VTEwsIHNpemVvZihzaXplX3QpLCAwIH0sCisr ICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwKKyt9OworKworK3N0YXRpYyBjb25zdCBP U1NMX1BBUkFNIGNpcGhlcl9nZXRfcGFyYW1fdGFibGVbXSA9IHsKKysgICAgICAgIHsgImJsb2Nr c2l6ZSIsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUiwgTlVMTCwgc2l6ZW9mKHNpemVfdCks IDAgfSwKKysgICAgICAgIHsgImtleWxlbiIsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUiwg TlVMTCwgc2l6ZW9mKHNpemVfdCksIDAgfSwKKysgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwg MCB9LAorK307CisrCisrc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gY2lwaGVyX3NldF9wYXJhbV90 YWJsZVtdID0geworKwl7ICJrZXlsZW4iLCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIsIE5V TEwsIHNpemVvZihzaXplX3QpLCAwIH0sCisrCXsgTlVMTCwgMCwgTlVMTCwgMCwgMCB9LAorK307 CisrCisrCisrLyogcHJvdmlkZXIgZnVuY3Rpb25zIHN0YXJ0IGhlcmUgKi8KKysKKytzdGF0aWMg dm9pZCBwcm92aWRlcl9jdHhfZnJlZShzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0ICpjdHgpCisrewor KyAgICBpZiAoY3R4ICE9IE5VTEwpCisrICAgICAgICBwcm92ZXJyX2ZyZWVfaGFuZGxlKGN0eC0+ cHJvdmVycl9oYW5kbGUpOworKyAgICBmcmVlKGN0eCk7CisrfQorKworK3N0YXRpYyBzdHJ1Y3Qg cHJvdmlkZXJfY3R4X3N0ICpwcm92aWRlcl9jdHhfbmV3KGNvbnN0IE9TU0xfQ09SRV9IQU5ETEUg KmNvcmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgT1NTTF9ESVNQQVRDSCAqaW4pCisreworKyAgICBzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0 ICpjdHg7CisrCisrICAgIGlmICgoY3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSkpICE9IE5VTEwK KysgICAgICAgICYmIChjdHgtPnByb3ZlcnJfaGFuZGxlID0gcHJvdmVycl9uZXdfaGFuZGxlKGNv cmUsIGluKSkgIT0gTlVMTCkgeworKyAgICAgICAgY3R4LT5jb3JlX2hhbmRsZSA9IGNvcmU7Cisr ICAgIH0gZWxzZSB7CisrICAgICAgICBwcm92aWRlcl9jdHhfZnJlZShjdHgpOworKyAgICAgICAg Y3R4ID0gTlVMTDsKKysgICAgfQorKyAgICByZXR1cm4gY3R4OworK30KKysKKysKKysvKiByZXR1 cm5zIHRoZSBhcHByb3ByaWF0ZSBhbGdvIHRhYmxlIGZvciB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9u CisrICogaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBvbmx5IGJlIHdvcmtpbmcgd2l0aCBPUF9DSVBI RVIgKi8KKytjb25zdCBPU1NMX0FMR09SSVRITSAqYWVzX210X3Byb3ZfcXVlcnkodm9pZCAqcHJv dmN0eCwgaW50IG9wZXJhdGlvbl9pZCwKKysJCQkJICAgICBpbnQgKm5vX3N0b3JlKQorK3sKKysJ c3dpdGNoIChvcGVyYXRpb25faWQpIHsKKysJY2FzZSBPU1NMX09QX0NJUEhFUjoKKysJCXJldHVy biBhZXNfbXRfY2lwaGVyczsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrY29uc3QgT1NT TF9JVEVNICphZXNfbXRfcHJvdl9yZWFzb25zKHZvaWQgKnByb3ZjdHgpCisreworKwlyZXR1cm4g cmVhc29uczsKKyt9CisrCisrc3RhdGljIGludCBhZXNfbXRfcHJvdl9nZXRfcGFyYW1zKHZvaWQg KnByb3ZjdHgsIE9TU0xfUEFSQU0gKnBhcmFtcykKKyt7CisrCU9TU0xfUEFSQU0gKnA7CisrCWlu dCBvayA9IDE7CisrCisrCWNoYXIgKlZFUlNJT049IjEuMCI7CisrCWNoYXIgKkJVSUxEVFlQRT0i YWVzX2N0cl9tdEBocG5zc2gub3JnIjsKKysJCisrCWZvcihwID0gcGFyYW1zOyBwLT5rZXkgIT0g TlVMTDsgcCsrKQorKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAidmVyc2lvbiIpID09IDApIHsK KysJCQkqKGNvbnN0IHZvaWQgKiopcC0+ZGF0YSA9IFZFUlNJT047CisrCQkJcC0+cmV0dXJuX3Np emUgPSBzdHJsZW4oVkVSU0lPTik7CisrCQl9IGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAi YnVpbGRpbmZvIikgPT0gMAorKwkJCSAgICYmIEJVSUxEVFlQRVswXSAhPSAnXDAnKSB7CisrCQkJ Kihjb25zdCB2b2lkICoqKXAtPmRhdGEgPSBCVUlMRFRZUEU7CisrCQkJcC0+cmV0dXJuX3NpemUg PSBzdHJsZW4oQlVJTERUWVBFKTsKKysJCX0KKysJcmV0dXJuIG9rOworK30KKysKKysvKiBUaGUg ZnVuY3Rpb24gdGhhdCB0ZWFycyBkb3duIHRoaXMgcHJvdmlkZXIgKi8KKytzdGF0aWMgdm9pZCBh ZXNfbXRfcHJvdl90ZWFyZG93bih2b2lkICp2cHJvdmN0eCkKKyt7CisrICAgIHByb3ZpZGVyX2N0 eF9mcmVlKHZwcm92Y3R4KTsKKyt9CisrCisraW50IE9TU0xfcHJvdmlkZXJfaW5pdChjb25zdCBP U1NMX0NPUkVfSEFORExFICpjb3JlLAorKwkJICAgICAgIGNvbnN0IE9TU0xfRElTUEFUQ0ggKmlu LAorKwkJICAgICAgIGNvbnN0IE9TU0xfRElTUEFUQ0ggKipvdXQsCisrCQkgICAgICAgdm9pZCAq KnZwcm92Y3R4KQorK3sKKysgICAgaWYgKCgqdnByb3ZjdHggPSBwcm92aWRlcl9jdHhfbmV3KGNv cmUsIGluKSkgPT0gTlVMTCkKKysJICAgIHJldHVybiAwOworKyAgICAqb3V0ID0gcHJvdmlkZXJf ZnVuY3Rpb25zOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogcGFyYW1ldGVyIGZ1bmN0aW9u cyBmb3IgMjU2fDE5MnwxMjggYml0IGtleSBsZW5ndGhzICovCisrc3RhdGljIGludCBhZXNfbXRf Z2V0X3BhcmFtc18yNTYoT1NTTF9QQVJBTSBwYXJhbXNbXSkKKyt7CisrCU9TU0xfUEFSQU0gKnA7 CisrCWludCBvayA9IDE7CisrCQorKwlmb3IgKHAgPSBwYXJhbXM7IHAtPmtleSAhPSBOVUxMOyBw KyspIHsKKysJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgImJsb2Nrc2l6ZSIpID09IDApCisrCQkJ aWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBBRVNfQkxPQ0tfU0laRSkgPCAwKSB7CisrCQkJCW9r ID0gMDsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAi a2V5bGVuIikgPT0gMCkgeworKwkJCXNpemVfdCBrZXlsID0gMzI7CisrCQkJCisrCQkJaWYgKHBy b3ZudW1fc2V0X3NpemVfdChwLCBrZXlsKSA8IDApIHsKKysJCQkJb2sgPSAwOworKwkJCQljb250 aW51ZTsKKysJCQl9CisrCQl9CisrCX0KKysJcmV0dXJuIG9rOworK30KKysKKytzdGF0aWMgaW50 IGFlc19tdF9nZXRfcGFyYW1zXzE5MihPU1NMX1BBUkFNIHBhcmFtc1tdKQorK3sKKysJT1NTTF9Q QVJBTSAqcDsKKysJaW50IG9rID0gMTsKKysJCisrCWZvciAocCA9IHBhcmFtczsgcC0+a2V5ICE9 IE5VTEw7IHArKykgeworKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYmxvY2tzaXplIikgPT0g MCkKKysJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIEFFU19CTE9DS19TSVpFKSA8IDApIHsK KysJCQkJb2sgPSAwOworKwkJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoc3RyY2FzZWNtcChw LT5rZXksICJrZXlsZW4iKSA9PSAwKSB7CisrCQkJc2l6ZV90IGtleWwgPSAyNDsKKysJCQkKKysJ CQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIGtleWwpIDwgMCkgeworKwkJCQlvayA9IDA7Cisr CQkJCWNvbnRpbnVlOworKwkJCX0KKysJCX0KKysJfQorKwlyZXR1cm4gb2s7CisrfQorKworK3N0 YXRpYyBpbnQgYWVzX210X2dldF9wYXJhbXNfMTI4KE9TU0xfUEFSQU0gcGFyYW1zW10pCisrewor KwlPU1NMX1BBUkFNICpwOworKwlpbnQgb2sgPSAxOworKwkKKysJZm9yIChwID0gcGFyYW1zOyBw LT5rZXkgIT0gTlVMTDsgcCsrKSB7CisrCQlpZiAoc3RyY2FzZWNtcChwLT5rZXksICJibG9ja3Np emUiKSA9PSAwKQorKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwgQUVTX0JMT0NLX1NJWkUp IDwgMCkgeworKwkJCQlvayA9IDA7CisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmIChzdHJj YXNlY21wKHAtPmtleSwgImtleWxlbiIpID09IDApIHsKKysJCQlzaXplX3Qga2V5bCA9IDE2Owor KwkJCQorKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwga2V5bCkgPCAwKSB7CisrCQkJCW9r ID0gMDsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJfQorKwl9CisrCXJldHVybiBvazsKKyt9 CisrCisrLyogUGFyYW1ldGVycyB0aGF0IGxpYmNyeXB0byBjYW4gZ2V0IGZyb20gdGhpcyBpbXBs ZW1lbnRhdGlvbiAqLworK3N0YXRpYyBjb25zdCBPU1NMX1BBUkFNICphZXNfbXRfZ2V0dGFibGVf cGFyYW1zKHZvaWQgKnByb3ZjdHgpCisreworKwlyZXR1cm4gY2lwaGVyX2dldF9wYXJhbV90YWJs ZTsKKyt9CisrCisrc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gKmFlc19tdF9nZXR0YWJsZV9jdHhf cGFyYW1zKHZvaWQgKmNjdHgsIHZvaWQgKnByb3ZjdHgpCisreworKwlyZXR1cm4gY3R4X2dldF9w YXJhbV90YWJsZTsKKyt9CisrCisrc3RhdGljIGludCBhZXNfbXRfZ2V0X2N0eF9wYXJhbXModm9p ZCAqdmN0eCwgT1NTTF9QQVJBTSBwYXJhbXNbXSkKKyt7CisrICAgIHN0cnVjdCBhZXNfbXRfY3R4 X3N0ICpjdHggPSB2Y3R4OworKyAgICBpbnQgb2sgPSAxOworKworKyAgICBpZiAoY3R4LT5rZXls ZW4gPiAwKSB7CisrICAgICAgICBPU1NMX1BBUkFNICpwOworKworKyAgICAgICAgZm9yIChwID0g cGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKQorKyAgICAgICAgICAgIGlmIChzdHJjYXNlY21w KHAtPmtleSwgImtleWxlbiIpID09IDAKKysgICAgICAgICAgICAgICAgJiYgcHJvdm51bV9zZXRf c2l6ZV90KHAsIGN0eC0+a2V5bGVuKSA8IDApIHsKKysgICAgICAgICAgICAgICAgb2sgPSAwOwor KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICB9CisrICAgIH0KKysgICAg cmV0dXJuIG9rOworK30KKysKKysvKiBQYXJhbWV0ZXJzIHRoYXQgbGliY3J5cHRvIGNhbiBzZW5k IHRvIHRoaXMgaW1wbGVtZW50YXRpb24gKi8KKytzdGF0aWMgY29uc3QgT1NTTF9QQVJBTSAqYWVz X210X3NldHRhYmxlX2N0eF9wYXJhbXModm9pZCAqY2N0eCwgdm9pZCAqcHJvdmN0eCkKKyt7Cisr ICAgIHJldHVybiBjaXBoZXJfc2V0X3BhcmFtX3RhYmxlOworK30KKysKKytzdGF0aWMgaW50IGFl c19tdF9zZXRfY3R4X3BhcmFtcyh2b2lkICp2Y3R4LCBjb25zdCBPU1NMX1BBUkFNIHBhcmFtc1td KQorK3sKKysgICAgc3RydWN0IGFlc19tdF9jdHhfc3QgKmN0eCA9IHZjdHg7CisrICAgIGNvbnN0 IE9TU0xfUEFSQU0gKnA7CisrICAgIGludCBvayA9IDE7CisrCisrICAgIGlmIChjdHgtPm9uZ29p bmcpIHsKKysgICAgICAgIEVSUl9yYWlzZShFUlJfSEFORExFKGN0eCksIEFFU19NVF9PTkdPSU5H X09QRVJBVElPTik7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBmb3IgKHAg PSBwYXJhbXM7IHAtPmtleSAhPSBOVUxMOyBwKyspCisrICAgICAgICBpZiAoc3RyY2FzZWNtcChw LT5rZXksICJrZXlsZW4iKSA9PSAwKSB7CisrICAgICAgICAgICAgc2l6ZV90IGtleWwgPSAwOwor KworKyAgICAgICAgICAgIGlmIChwcm92bnVtX2dldF9zaXplX3QoJmtleWwsIHApIDwgMCkgewor KyAgICAgICAgICAgICAgICBvayA9IDA7CisrICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAg ICAgICAgICAgIH0KKysgICAgICAgICAgICBjdHgtPmtleWxlbiA9IGtleWw7CisrICAgICAgICB9 CisrICAgIHJldHVybiBvazsKKyt9CisrCisrI2VuZGlmIC8qV0lUSF9PUEVOU1NMMyovCitkaWZm IC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXIuaCBvcGVuc3NoLTEwLjVwMS9jaXBoZXIu aAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lwaGVyLmgJMjAyNi0wOS0yMSAwNzowNjowNS4y OTAyMjk4MDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jaXBoZXIuaAkyMDI2LTA5LTIxIDEw OjQ1OjQ1LjE3NTI5OTMxMCArMDIwMAorQEAgLTQyLDExICs0MiwxNyBAQAorICNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorICNlbmRpZgorICNpbmNsdWRlICJjaXBoZXItY2hhY2hhcG9seS5oIgor KyNpZmRlZiBXSVRIX09QRU5TU0wKKysjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5 cHRvLW10LmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImNpcGhlci1hZXNjdHIuaCIKKyAKKyAjZGVm aW5lIENJUEhFUl9FTkNSWVBUCQkxCisgI2RlZmluZSBDSVBIRVJfREVDUllQVAkJMAorIAorKyNk ZWZpbmUgQ0lQSEVSX01VTFRJVEhSRUFECTEKKysjZGVmaW5lIENJUEhFUl9TRVJJQUwJCTAKKysK KyBzdHJ1Y3Qgc3NoY2lwaGVyIHsKKyAJY2hhcgkqbmFtZTsKKyAJdV9pbnQJYmxvY2tfc2l6ZTsK K0BAIC02MCw2ICs2Niw3IEBACisgI2RlZmluZSBDRkxBR19OT05FCQkoMTw8MykKKyAjZGVmaW5l IENGTEFHX0lOVEVSTkFMCQlDRkxBR19OT05FIC8qIERvbid0IHVzZSAibm9uZSIgZm9yIHBhY2tl dHMgKi8KKyAjaWZkZWYgV0lUSF9PUEVOU1NMCisrI2RlZmluZSBDRkxBR19NVAkJKDE8PDQpCisg CWNvbnN0IEVWUF9DSVBIRVIJKigqZXZwdHlwZSkodm9pZCk7CisgI2Vsc2UKKyAJdm9pZAkqaWdu b3JlZDsKK0BAIC02OCwyNCArNzUsMjcgQEAKKyAKKyBzdHJ1Y3Qgc3NoY2lwaGVyX2N0eDsKKyAK Ky1jb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXJfYnlfbmFtZShjb25zdCBjaGFyICopOwor K3N0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcl9ieV9uYW1lKGNvbnN0IGNoYXIgKik7CisgY29uc3Qg Y2hhciAqY2lwaGVyX3dhcm5pbmdfbWVzc2FnZShjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAq KTsKKyBpbnQJIGNpcGhlcnNfdmFsaWQoY29uc3QgY2hhciAqKTsKKyBjaGFyCSpjaXBoZXJfYWxn X2xpc3QoY2hhciwgaW50KTsKKyBjb25zdCBjaGFyICpjb21wcmVzc2lvbl9hbGdfbGlzdChpbnQp OworIGludAkgY2lwaGVyX2luaXQoc3RydWN0IHNzaGNpcGhlcl9jdHggKiosIGNvbnN0IHN0cnVj dCBzc2hjaXBoZXIgKiwKKy0gICAgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25zdCB1X2NoYXIg KiwgdV9pbnQsIGludCk7CisrICAgIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFy ICosIHVfaW50LCB1X2ludCwgaW50LCBpbnQpOworIGludAkgY2lwaGVyX2NyeXB0KHN0cnVjdCBz c2hjaXBoZXJfY3R4ICosIHVfaW50LCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisgICAgIHVf aW50LCB1X2ludCwgdV9pbnQpOworIGludAkgY2lwaGVyX2dldF9sZW5ndGgoc3RydWN0IHNzaGNp cGhlcl9jdHggKiwgdV9pbnQgKiwgdV9pbnQsCisgICAgIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7 Cisgdm9pZAkgY2lwaGVyX2ZyZWUoc3RydWN0IHNzaGNpcGhlcl9jdHggKik7CisgdV9pbnQJIGNp cGhlcl9ibG9ja3NpemUoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKKyt1aW50NjRfdCBjaXBo ZXJfcmVrZXlfYmxvY2tzKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7CisgdV9pbnQJIGNpcGhl cl9rZXlsZW4oY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKKyB1X2ludAkgY2lwaGVyX3NlY2xl bihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOworIHVfaW50CSBjaXBoZXJfYXV0aGxlbihjb25z dCBzdHJ1Y3Qgc3NoY2lwaGVyICopOworIHVfaW50CSBjaXBoZXJfaXZsZW4oY29uc3Qgc3RydWN0 IHNzaGNpcGhlciAqKTsKKyB1X2ludAkgY2lwaGVyX2lzX2NiYyhjb25zdCBzdHJ1Y3Qgc3NoY2lw aGVyICopOworK3ZvaWQJIGNpcGhlcl9yZXNldF9tdWx0aXRocmVhZGVkKHZvaWQpOworK2NvbnN0 IGNoYXIgKmNpcGhlcl9jdHhfbmFtZShjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqKTsKKyB1 X2ludAkgY2lwaGVyX2lzX2ludGVybmFsKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7CisgCisg dV9pbnQJIGNpcGhlcl9jdHhfaXNfcGxhaW50ZXh0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICopOwor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lwaGVyLXN3aXRjaC5jIG9wZW5zc2gtMTAu NXAxL2NpcGhlci1zd2l0Y2guYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lwaGVyLXN3aXRj aC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41 cDEvY2lwaGVyLXN3aXRjaC5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODg1NDIxMDM5ICswMjAwCitA QCAtMCwwICsxLDc3IEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMjMgVGhlIEJvYXJkIG9m IFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgorKyAqCisrICogIEF1dGhv cjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisrICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKysgKgorKyAqIFRoaXMg bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAq CisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExpY2Vuc2Ug YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7CisrICogaWYgbm90LCBzZWUgaHR0cDovL29wZW5zb3Vy Y2Uub3JnL2xpY2Vuc2VzL01JVC4KKysgKgorKyAqLworKworKy8qIFRoaXMgcHJvdmlkZXMgdGhl IGZ1bmN0aW9uIHRvIHN3aXRjaCBmcm9tIGEgc2VyaWFsIHRvIHBhcmFsbGVsCisrICogY2lwaGVy LiBUaGlzIGhhcyBiZWVuIG1vdmVkIGludG8gaXQncyBvd24gZmlsZSBpbiBvcmRlciB0byBtYWtl IGl0CisrICogYXZhaWxhYmxlIHRvIGJvdGggdGhlIGNsaWVudCBhbmQgc2VydmVyIHdpdGhvdXQg aGF2aW5nIHRvIGNsdXR0ZXIKKysgKiB1cCBvdGhlciBmaWxlcy4KKysgKi8KKysKKysjaW5jbHVk ZSAiaW5jbHVkZXMuaCIKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlICJjaXBoZXIuaCIKKysjaW5jbHVkZSAibG9nLmgiCisrI2luY2x1ZGUg InBhY2tldC5oIgorKworKworKy8qIGlmIHdlIGFyZSB1c2luZyBhIHBhcmFsbGVsIGNpcGhlciB0 aGVyZSBjYW4gYmUgaXNzdWVzIGluIGVpdGhlcgorKyAqIGEgZm9yayBvciBzYW5kYm94LiBFc3Nl bnRpYWxseSwgaWYgd2Ugc3dpdGNoIHRvbyBlYXJseSB0aGUKKysgKiB0aHJlYWRzIGdldCBsb3N0 IGFuZCB0aGUgYXBwbGljYXRpb24gaGFuZ3MuIFNvIHdoYXQgd2UgZG8gaXMKKysgKiB0ZXN0IGlm IGVpdGhlciB0aGUgc2VuZCBvciByZWNlaXZlIGNvbnRleHQgY2lwaGVyIG5hbWUKKysgKiBtYXRj aGVzIHRoZSBrbm93biBhdmFpbGFibGUgcGFyYWxsZWwgY2lwaGVycy4gSWYgaXQgZG9lcworKyAq IHRoZW4gd2UgZm9yY2UgYSByZWtleSB3aGljaCBhdXRvbWF0aWNhbGx5IGxvYWRzIHRoZSBwYXJh bGxlbAorKyAqIGNpcGhlci4gKi8KKysKKyt2b2lkCisrY2lwaGVyX3N3aXRjaChzdHJ1Y3Qgc3No ICpzc2gpIHsKKysjaWZkZWYgV0lUSF9PUEVOU1NMCisrCS8qIGdldCB0aGUgc2VuZCBhbmQgcmVj ZWl2ZSBjb250ZXh0IGFuZCBleHRyYWN0IHRoZSBjaXBoZXIgbmFtZSAqLworKwljb25zdCB2b2lk ICpzZW5kX2NjID0gc3NoX3BhY2tldF9nZXRfc2VuZF9jb250ZXh0KHNzaCk7CisrCWNvbnN0IHZv aWQgKnJlY3ZfY2MgPSBzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQoc3NoKTsKKysJY29u c3QgY2hhciAqc2VuZCA9IGNpcGhlcl9jdHhfbmFtZShzZW5kX2NjKTsKKysJY29uc3QgY2hhciAq cmVjdiA9IGNpcGhlcl9jdHhfbmFtZShyZWN2X2NjKTsKKysKKysJZGVidWdfZigiU2VuZDogJXMg UmVjdjogJXMiLCBzZW5kLCByZWN2KTsKKysJCisrCS8qIGlmIHRoZSBuYW1lIG9mIHRoZSBjaXBo ZXIgbWF0Y2hlcyB0aGVuIHdlIHNldCB0aGUgY29udGV4dAorKwkgKiB0byBhdXRoZW50aWNhdGVk IChpdCBsaWtlbHkgYWxyZWFkeSBpcyB0aG91Z2gpIGFuZCB0aGVuCisrCSAqIGZvcmNlIHRoZSBy ZWtleS4gRWl0aGVyIHNpZGUgY2FuIGRvIHRoaXMuIE9uZSBkb3duc2lkZSBvZgorKwkgKiB0aGlz IG1ldGhvZCBpcyB0aGF0IGJvdGggc2lkZXMgY2FuIHJlcXVlc3QgYSByZWtleSBzbyB5b3UKKysJ ICogY2FuIGVuZCB1cCBkdXBsaWNhdGluZyB3b3JrLiBUaGlzIGlzIGFubm95aW5nIGJ1dCB0aGUK KysJICogcGVyZm9ybWFuY2UgZ2FpbnMgbWFrZSBpdCB3b3J0aHdoaWxlLiBBbHNvIEkKKysJICog dXNlIHN0cnN0ciBoZXJlIGJlY2F1c2Ugc3RyY21wIHdvdWxkIHJlcXVpcmUgYSA2IHBhcnQKKysJ ICogaWYgc3RhdGVtZW50ICovCisrCWlmIChzdHJzdHIoc2VuZCwgImN0ciIpIHx8IHN0cnN0cihy ZWN2LCAiY3RyIikpIHsKKysJCWRlYnVnKCJTZXJpYWwgdG8gcGFyYWxsZWwgQUVTLUNUUiBjaXBo ZXIgc3dhcCIpOworKwkJLyogY2lwaGVyX3Jlc2V0X211bHRpdGhyZWFkZWQoKTsgKi8KKysJCS8q IG1hcmsgTVQgYWN0aXZlIHNvIHRoZSBwcm9tb3Rpb24gaW4gc3NoX3NldF9uZXdrZXlzIG9ubHkK KysJCSAqIGhhcHBlbnMgd2hlbiB3ZSBkZWxpYmVyYXRlbHkgc3dpdGNoZWQgaGVyZS4gV2l0aG91 dCB0aGlzIGEKKysJCSAqIGxhdGVyIHJla2V5IHdvdWxkIHByb21vdGUgdG8gTVQgZXZlbiB1bmRl ciBEaXNhYmxlTVRBRVMuICovCisrCQlzc2gtPm10X2VuYWJsZWQgPSAxOworKwkJc3NoX3BhY2tl dF9zZXRfYXV0aGVudGljYXRlZChzc2gpOworKwkJcGFja2V0X3JlcXVlc3RfcmVrZXlpbmcoKTsK KysJfQorKwkvKiBkbyB0aGUgc2FtZSBmb3IgbXVsdGl0aHJlYWRlZCBjaGFjaGEyMCBidXQgd2l0 aCBzdHJjbXAgKi8KKysJaWYgKChzdHJjbXAoc2VuZCwgImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5z c2guY29tIikgPT0gMCkgfHwKKysJICAgIChzdHJjbXAocmVjdiwgImNoYWNoYTIwLXBvbHkxMzA1 QG9wZW5zc2guY29tIikgPT0gMCkpIHsKKysJCWRlYnVnKCJTZXJpYWwgdG8gcGFyYWxsZWwgQ2hh Y2hhMjAtcG9seTEzMDUgY2lwaGVyIHN3YXAiKTsKKysJCXNzaF9wYWNrZXRfc2V0X2F1dGhlbnRp Y2F0ZWQoc3NoKTsKKysJCXBhY2tldF9yZXF1ZXN0X3Jla2V5aW5nKCk7CisrCX0KKysjZW5kaWYK Kyt9CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXItc3dpdGNoLmggb3BlbnNz aC0xMC41cDEvY2lwaGVyLXN3aXRjaC5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXIt c3dpdGNoLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3No LTEwLjVwMS9jaXBoZXItc3dpdGNoLmgJMjAyNi0wOS0yMSAwNzowNjo1OS44ODU0ODI5NDAgKzAy MDAKK0BAIC0wLDAgKzEsMTggQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgQm9h cmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCisrICoKKysgKiAg QXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqCisrICogVGhpcyBsaWJy YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgorKyAqCisrICog VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNlZSBodHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAqCisrICovCisrCisrdm9pZCBjaXBoZXJfc3dp dGNoIChzdHJ1Y3Qgc3NoICopOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2xpZW50 bG9vcC5jIG9wZW5zc2gtMTAuNXAxL2NsaWVudGxvb3AuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9y aWcvY2xpZW50bG9vcC5jCTIwMjYtMDktMjEgMDc6MDY6MDQuOTc2NTI4Mzg2ICswMjAwCisrKysg b3BlbnNzaC0xMC41cDEvY2xpZW50bG9vcC5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODg1NzI5NTQz ICswMjAwCitAQCAtMTAwLDYgKzEwMCw3IEBACisgI2luY2x1ZGUgIm1hdGNoLmgiCisgI2luY2x1 ZGUgInNzaGVyci5oIgorICNpbmNsdWRlICJob3N0ZmlsZS5oIgorKyNpbmNsdWRlICJtZXRyaWNz LmgiCisgCisgI2lmZGVmIEdTU0FQSQorICNpbmNsdWRlICJzc2gtZ3NzLmgiCitAQCAtMTYwLDYg KzE2MSwxMCBAQAorIAorIHN0YXRpYyB2b2lkIGNsaWVudF9pbml0X2Rpc3BhdGNoKHN0cnVjdCBz c2ggKnNzaCk7CisgaW50CXNlc3Npb25faWRlbnQgPSAtMTsKKytpbnQJbWV0cmljc19oZHJfcmVt b3RlX2ZsYWcgPSAwOworK2ludAltZXRyaWNzX2hkcl9sb2NhbF9mbGFnID0gMDsKKytpbnQJcmVt b3RlX25vX3BvbGxfZmxhZyA9IDA7CisraW50CWxvY2FsX25vX3BvbGxfZmxhZyA9IDA7CisgCisg LyogVHJhY2sgZXNjYXBlIHBlciBwcm90bzIgY2hhbm5lbCAqLworIHN0cnVjdCBlc2NhcGVfZmls dGVyX2N0eCB7CitAQCAtMTg2LDYgKzE5MSw4IEBACisgc3RhdGljIHN0cnVjdCBnbG9iYWxfY29u ZmlybXMgZ2xvYmFsX2NvbmZpcm1zID0KKyAgICAgVEFJTFFfSEVBRF9JTklUSUFMSVpFUihnbG9i YWxfY29uZmlybXMpOworIAorK3ZvaWQgY2xpZW50X3JlcXVlc3RfbWV0cmljcyhzdHJ1Y3Qgc3No ICopOworKworIHN0YXRpYyB2b2lkIHF1aXRfbWVzc2FnZShjb25zdCBjaGFyICpmbXQsIC4uLikK KyAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAxLCAyKSkpOworIAorQEAg LTE0NjIsNiArMTQ2OSw3IEBACisgCWRvdWJsZSBzdGFydF90aW1lLCB0b3RhbF90aW1lOworIAlp bnQgaW50ZXJhY3RpdmUgPSAtMSwgY2hhbm5lbF9kaWRfZW5xdWV1ZSA9IDAsIHI7CisgCXVpbnQ2 NF90IGlieXRlcywgb2J5dGVzOworKwl0aW1lX3QgcHJldmlvdXNfdGltZTsKKyAJaW50IGNvbm5f aW5fcmVhZHksIGNvbm5fb3V0X3JlYWR5OworIAlzaWdzZXRfdCBic2lnc2V0LCBvc2lnc2V0Owor IAorQEAgLTE1MDUsNiArMTUxMyw3IEBACisgCWNsaWVudF9yZXBsZWRnZSgpOworIAorIAlzdGFy dF90aW1lID0gbW9ub3RpbWVfZG91YmxlKCk7CisrCXByZXZpb3VzX3RpbWUgPSB0aW1lKE5VTEwp OyAvKiBmb3IgbWV0cmljcyBwb2xsaW5nICovCisgCisgCS8qIEluaXRpYWxpemUgdmFyaWFibGVz LiAqLworIAlsYXN0X3dhc19jciA9IDE7CitAQCAtMTU0OSw2ICsxNTU4LDggQEAKKyAJfQorIAor IAlzY2hlZHVsZV9zZXJ2ZXJfYWxpdmVfY2hlY2soKTsKKysJaWYgKG9wdGlvbnMubWV0cmljcykK KysJCWNsaWVudF9yZXF1ZXN0X21ldHJpY3Moc3NoKTsgLyogaW5pdGlhbCBtZXRyaWNzIHBvbGxp bmcgKi8KKyAKKyAJaWYgKHNpZ2VtcHR5c2V0KCZic2lnc2V0KSA9PSAtMSB8fAorIAkgICAgc2ln YWRkc2V0KCZic2lnc2V0LCBTSUdIVVApID09IC0xIHx8CitAQCAtMTU2MSw4ICsxNTcyLDI3IEBA CisgCQllcnJvcl9mKCJic2lnc2V0IHNldHVwOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgI2Vu ZGlmCisgCisrCS8qCisrCSAqIEJsb2NrIHRlcm1pbmF0aW9uL2luZm8gc2lnbmFscyBmb3IgdGhl IGR1cmF0aW9uIG9mIHRoZSBtYWluIGxvb3AuCisrCSAqIHBwb2xsKCkgYXRvbWljYWxseSByZXN0 b3JlcyB0aGUgb2xkIG1hc2sgKG9zaWdzZXQpIHdoaWxlIHdhaXRpbmcsCisrCSAqIHNvIHNpZ25h bHMgYXJlIHN0aWxsIGRlbGl2ZXJlZCBwcm9tcHRseSBkdXJpbmcgdGhlIHBvbGwuICBLZWVwaW5n CisrCSAqIHRoZW0gYmxvY2tlZCBkdXJpbmcgdGhlIGRhdGEtcHJvY2Vzc2luZyBwaGFzZSBhdm9p ZHMgdHdvCisrCSAqIHNpZ3Byb2NtYXNrIHN5c2NhbGxzIHBlciBpdGVyYXRpb24gKH43Nmsvc2Vj IGR1cmluZyBidWxrIHRyYW5zZmVyLAorKwkgKiB+NS42JSBvZiBDUFUgaW4gcHJvZmlsZXMpLiAg U2lnbmFsLWZsYWcgY2hlY2tzIChxdWl0X3BlbmRpbmcsCisrCSAqIHNpZ2luZm9fcmVjZWl2ZWQp IHN0aWxsIHdvcmsgYmVjYXVzZSB0aGUgaGFuZGxlcnMgcnVuIGluc2lkZQorKwkgKiBwcG9sbCdz IGF0b21pYyB1bmJsb2NrIHdpbmRvdy4KKysJICovCisrCWlmIChzaWdwcm9jbWFzayhTSUdfQkxP Q0ssICZic2lnc2V0LCAmb3NpZ3NldCkgPT0gLTEpCisrCQllcnJvcl9mKCJic2lnc2V0IHNpZ3By b2NtYXNrOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisrCisgCS8qIE1haW4gbG9vcCBvZiB0aGUg Y2xpZW50IGZvciB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbiBtb2RlLiAqLworIAl3aGlsZSAoIXF1 aXRfcGVuZGluZykgeworKwkJaWYgKG9wdGlvbnMubWV0cmljcykgeworKwkJCWlmICgodGltZShO VUxMKSAtIHByZXZpb3VzX3RpbWUpID49IG9wdGlvbnMubWV0cmljc19pbnRlcnZhbCkgeworKwkJ CQljbGllbnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7CisrCQkJCXByZXZpb3VzX3RpbWUgPSB0aW1l KE5VTEwpOworKwkJCX0KKysJCX0KKyAJCWNoYW5uZWxfZGlkX2VucXVldWUgPSAwOworIAorIAkJ LyogUHJvY2VzcyBidWZmZXJlZCBwYWNrZXRzIHNlbnQgYnkgdGhlIHNlcnZlci4gKi8KK0BAIC0x NTk3LDggKzE2MjcsNiBAQAorIAkJICogV2FpdCB1bnRpbCB3ZSBoYXZlIHNvbWV0aGluZyB0byBk byAoc29tZXRoaW5nIGJlY29tZXMKKyAJCSAqIGF2YWlsYWJsZSBvbiBvbmUgb2YgdGhlIGRlc2Ny aXB0b3JzKS4KKyAJCSAqLworLQkJaWYgKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJmJzaWdzZXQs ICZvc2lnc2V0KSA9PSAtMSkKKy0JCQllcnJvcl9mKCJic2lnc2V0IHNpZ3Byb2NtYXNrOiAlcyIs IHN0cmVycm9yKGVycm5vKSk7CisgCQlpZiAoc2lnaW5mb19yZWNlaXZlZCkgeworIAkJCWNoYXIg aWRlbnRbMjU2XTsKKyAKK0BAIC0xNjEyLDggKzE2NDAsNiBAQAorIAkJY2xpZW50X3dhaXRfdW50 aWxfY2FuX2RvX3NvbWV0aGluZyhzc2gsICZwZmQsICZucGZkX2FsbG9jLAorIAkJICAgICZucGZk X2FjdGl2ZSwgY2hhbm5lbF9kaWRfZW5xdWV1ZSwgJm9zaWdzZXQsCisgCQkgICAgJmNvbm5faW5f cmVhZHksICZjb25uX291dF9yZWFkeSk7CistCQlpZiAoc2lncHJvY21hc2soU0lHX1NFVE1BU0ss ICZvc2lnc2V0LCBOVUxMKSA9PSAtMSkKKy0JCQllcnJvcl9mKCJvc2lnc2V0IHNpZ3Byb2NtYXNr OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgCisgCQlpZiAocXVpdF9wZW5kaW5nKQorIAkJCWJy ZWFrOworQEAgLTE2NjksNiArMTY5NSwxNCBAQAorIAkJCX0KKyAJCX0KKyAJfQorKworKwkvKiBS ZXN0b3JlIHRoZSBwcmUtbG9vcCBzaWduYWwgbWFzayBub3cgdGhhdCB3ZSBhcmUgZG9uZSBwb2xs aW5nLiAqLworKwlpZiAoc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvc2lnc2V0LCBOVUxMKSA9 PSAtMSkKKysJCWVycm9yX2YoIm9zaWdzZXQgc2lncHJvY21hc2s6ICVzIiwgc3RyZXJyb3IoZXJy bm8pKTsKKysKKysJaWYgKG9wdGlvbnMubWV0cmljcykKKysJCWNsaWVudF9yZXF1ZXN0X21ldHJp Y3Moc3NoKTsgLyogZmluYWwgbWV0cmljcyBwb2xsaW5nICovCisrCisgCWZyZWUocGZkKTsKKyAK KyAJLyogVGVybWluYXRlIHRoZSBzZXNzaW9uLiAqLworQEAgLTI2ODIsNiArMjcxNiwxNjcgQEAK KyAJcmV0dXJuIDE7CisgfQorIAorKy8qIHRha2UgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZl ciBhbmQgcGFyc2Ugb3V0IHRoZSBkYXRhLgorKyAqIHRoZSBfY3R4IHNob3VsZCBiZSBudWxsLiBJ dCdzIGp1c3QgaGVyZSBiZWNhdXNlIHRoZSBmb3JtYXQKKysgKiBvZiB0aGUgY2FsbGJhY2sgaGFu ZGxlciBleHBlY3RzIGl0LiBMaWtld2lzZSwgc2VxIGlzCisrICogbm90IHVzZWQuICovCisrc3Rh dGljIHZvaWQKKytjbGllbnRfcHJvY2Vzc19yZXF1ZXN0X21ldHJpY3MgKHN0cnVjdCBzc2ggKnNz aCwgaW50IHR5cGUsIHVfaW50MzJfdCBzZXEsIHZvaWQgKl9jdHgpIHsKKysJc3RydWN0IHRjcF9p bmZvIGxvY2FsX3RjcF9pbmZvOworKwljb25zdCB1X2NoYXIgKmJsb2I7CisrCUZJTEUgKnJlbWZw dHI7CisrCUZJTEUgKmxvY2FsZnB0cjsKKysJY2hhciByZW1maWxlbmFtZVsxMDI0XTsKKysJY2hh ciBsb2NhbGZpbGVuYW1lWzEwMjRdOworKwl0aW1lX3Qgbm93OworKwlzdHJ1Y3QgdG0gKmluZm87 CisrCWNoYXIgdGltZXN0YW1wWzQwXTsKKysJY2hhciAqbWV0cmljc3N0cmluZyA9IE5VTEw7Cisr CXNpemVfdCB0Y3BpX2xlbiwgbGVuID0gMDsKKysJYmlubiAqbWV0cmljc29iaiA9IE5VTEw7Cisr CWludCByLCBrZXJuZWxfdmVyc2lvbiA9IDA7CisrCisrCXRpbWUoJm5vdyk7CisrCWluZm8gPSBs b2NhbHRpbWUoJm5vdyk7CisrCXN0cmZ0aW1lKHRpbWVzdGFtcCwgNDAsICIlZC0lbS0lWSAlSDol TTolUyIsIGluZm8pOworKworKwkvKiBtYWxsb2MgdGhlIHN0cmluZyAxS0Igc2hvdWxkIGJlIGxh cmdlIGVub3VnaCAqLworKwltZXRyaWNzc3RyaW5nID0gbWFsbG9jKDEwMjQpOworKworKwkvKiBn ZXQgdGhlIGxvY2FsIHNvY2tldCBpbmZvcm1hdGlvbiAqLworKwlpbnQgc29ja19pbiA9IHNzaF9w YWNrZXRfZ2V0X2Nvbm5lY3Rpb25faW4oc3NoKTsKKysKKysJLyogdGhlIHVzZXIgY2FuIHNwZWNp ZnkgYSBuYW1lL3BhdGggd2l0aCBvcHRpb25zLm1ldHJpY3NfcGF0aAorKwkgKiBidXQgaWYgaXQn cyBub3QgZGVmaW5lZCB3ZSdsbCB1c2UgYSBkZWZhdWx0IG5hbWUuIEluIGVpdGhlciBjYXNlCisr CSAqIHRoZSBuYW1lIHdpbGwgaGF2ZSBhIHN1ZmZpeCBvZiBsb2NhbCBmb3IgdGhlIGxvY2FsIGRh dGEgYW5kIHJlbW90ZSBmb3IKKysJICogdGhlIHJlbW90ZSBkYXRhICovCisrCWlmIChvcHRpb25z Lm1ldHJpY3NfcGF0aCA9PSBOVUxMKSB7CisrCQlzbnByaW50ZihyZW1maWxlbmFtZSwgMTAyNCwg IiVzIiwgIi4vc3NoX3N0YWNrX21ldHJpY3MucmVtb3RlIik7CisrCQlzbnByaW50Zihsb2NhbGZp bGVuYW1lLCAxMDI0LCAiJXMiLCAiLi9zc2hfc3RhY2tfbWV0cmljcy5sb2NhbCIpOworKwl9IGVs c2UgeworKwkJc25wcmludGYocmVtZmlsZW5hbWUsIDEwMjQsICIlcy4lcyIsIG9wdGlvbnMubWV0 cmljc19wYXRoLCAicmVtb3RlIik7CisrCQlzbnByaW50Zihsb2NhbGZpbGVuYW1lLCAxMDI0LCAi JXMuJXMiLCBvcHRpb25zLm1ldHJpY3NfcGF0aCwgImxvY2FsIik7CisrCX0KKysKKysJLyogc2hv dWxkIGJlIHR5cGUgODEgYW5kIGlmIGl0J3Mgbm90IHRoZW4gaXRzIGxpa2xleSB0aGF0CisrCSog dGhlIHJlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IHBvbGxpbmcuIFdlIGNhbiBzdGlsbCBnZXQgbG9j YWwgZGF0YSB0aG91Z2gKKysJKi8KKysJaWYgKHR5cGUgIT0gU1NIMl9NU0dfUkVRVUVTVF9TVUND RVNTKSB7CisrCQlpZiAocmVtb3RlX25vX3BvbGxfZmxhZyA9PSAwKSB7CisrCQkJZXJyb3IoIlJl bW90ZSBkb2VzIG5vdCBzdXBwb3J0IHN0YWNrIG1ldHJpYyBwb2xsaW5nLiBMb2NhbCBkYXRhIG9u bHkuIik7CisrCQkJcmVtb3RlX25vX3BvbGxfZmxhZyA9IDE7CisrCQl9CisrCQlnb3RvIGxvY2Fs b25seTsKKysJfQorKworKwkvKiBvcGVuIHRoZSBmaWxlIGhhbmRsZSB0byB3cml0ZSB0aGUgcmVt b3RlIGRhdGEqLworKwlyZW1mcHRyID0gZm9wZW4ocmVtZmlsZW5hbWUsICJhIik7CisrCWlmIChy ZW1mcHRyID09IE5VTEwpCisrCQlmYXRhbCgiRXJyb3Igb3BlbmluZyAlczogJXMiLCByZW1maWxl bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKysKKysJLyogcmVhZCB0aGUgZW50aXJlIHBhY2tldCBz dHJpbmcgaW50byBibG9iCisrCSAqIGJsb2IgaGFzIHRvIGJlIGEgY29uc3QgdWNoYXIgYXMgdGhh dCdzIHdoYXQgc3RyaW5nX2RpcmVjdCBleHBlY3RzCisrCSAqIHdlIGNhc3QgaXQgYXMgYSB2b2lk IGZvciB0aGUgYmlubiBmdW5jdGlvbnMgKi8KKysJc3NocGt0X2dldF9zdHJpbmdfZGlyZWN0KHNz aCwgJmJsb2IsICZsZW4pOworKwlpZiAobGVuID09IDApIHsKKysJCS8qIHJlY2VpdmVkIG5vIGRh dGEuIHdoaWNoIGlzIHdlaXJkICovCisrCQllcnJvcigiUmVjZWl2ZWQgbm8gcmVtb3RlIG1ldHJp Y3MgZGF0YS4gQ29udGludWluZy4iKTsKKysJfQorKworKwkvKiBnZXQgdGhlIGtlcm5lbCB2ZXJz aW9uIHByaW50aW5nIHRoZSBoZWFkZXIgKi8KKysJa2VybmVsX3ZlcnNpb24gPSBiaW5uX29iamVj dF9pbnQzMigodm9pZCAqKWJsb2IsICJrZXJuZWxfdmVyc2lvbiIpOworKworKwkvKiBjcmVhdGUg YSBzdHJpbmcgb2YgdGhlIGRhdGEgZnJvbSB0aGUgYmlubiBvYmplY3QgYmxvYiAqLworKwltZXRy aWNzX3JlYWRfYmlubl9vYmplY3QoKHZvaWQgKilibG9iLCBtZXRyaWNzc3RyaW5nKTsKKysKKysJ LyogaGF2ZSB3ZSBwcmludGVkIHRoZSBoZWFkZXI/ICovCisrCWlmIChtZXRyaWNzX2hkcl9yZW1v dGVfZmxhZyA9PSAwKSB7CisrCQltZXRyaWNzX3ByaW50X2hlYWRlcihyZW1mcHRyLCAiUkVNT1RF IENPTk5FQ1RJT04iLCBrZXJuZWxfdmVyc2lvbik7CisrCQltZXRyaWNzX2hkcl9yZW1vdGVfZmxh ZyA9IDE7CisrCX0KKysJZnByaW50ZihyZW1mcHRyLCAiJXMsICIsIHRpbWVzdGFtcCk7CisrCWZw cmludGYocmVtZnB0ciwgIiVzXG4iLCBtZXRyaWNzc3RyaW5nKTsKKysKKysJLyogY2xvc2UgcmVt b3RlIGZpbGUgcG9pbnRlciovCisrCWZjbG9zZShyZW1mcHRyKTsKKysKKysJLyogZ290IHRoZSBy ZW1vdGUgZGF0YSwgbm93IGdldCB0aGUgbG9jYWwgKi8KKytsb2NhbG9ubHk6CisrLyogVENQX0lO Rk8gaXMgZGVmaW5lZCBpbiBtZXRyaWNzLmgqLworKyNpZiAhZGVmaW5lZCBUQ1BfSU5GTworKwlp ZiAobG9jYWxfbm9fcG9sbF9mbGFnID09IDApIHsKKysJCWVycm9yKCJMb2NhbCBob3N0IGRvZXMg bm90IHN1cHBvcnQgbWV0cmljIHBvbGxpbmcuIFJlbW90ZSBkYXRhIG9ubHkuIik7CisrCQlsb2Nh bF9ub19wb2xsX2ZsYWcgPSAxOworKwl9CisrI2Vsc2UKKysJLyogb3BlbiBmaWxlIGhhbmRsZSBm b3IgbG9jYWwgZGF0YSAqLworKwlsb2NhbGZwdHIgPSBmb3Blbihsb2NhbGZpbGVuYW1lLCAiYSIp OworKwlpZihsb2NhbGZwdHIgPT0gTlVMTCkKKysJCWZhdGFsKCJFcnJvciBvcGVuaW5nICVzOiAl cyIsIGxvY2FsZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisrCisrCS8qIGNyZWF0ZSB0aGUg YmlubiBvYmplY3QqLworKwltZXRyaWNzb2JqID0gYmlubl9vYmplY3QoKTsKKysJaWYgKG1ldHJp Y3NvYmogPT0gTlVMTCkgeworKwkJZmF0YWwoIkNvdWxkIG5vdCBjcmVhdGUgbWV0cmljcyBvYmpl Y3QiKTsKKysJfQorKworKwl0Y3BpX2xlbiA9IChzaXplX3Qpc2l6ZW9mKGxvY2FsX3RjcF9pbmZv KTsKKysJaWYgKChyID0gZ2V0c29ja29wdChzb2NrX2luLCBJUFBST1RPX1RDUCwgVENQX0lORk8s ICh2b2lkICopJmxvY2FsX3RjcF9pbmZvLAorKwkJCSAgICAoc29ja2xlbl90ICopJnRjcGlfbGVu KSkgIT0gMCl7CisrCQllcnJvcigiQ291bGQgbm90IHJlYWQgdGNwX2luZm8gZnJvbSBzb2NrZXQi KTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCS8qIHdlIHdyaXRlIGFuZCByZWFkIHRvIGEgYmlu biBvYmplY3QgYmVjYXVzZSBpdCBsZXRzIHVzCisrCSAqIGZvcm1hdCB0aGUgZGF0YSBjb25zaXN0 ZW50bHkgKi8KKysJbWV0cmljc193cml0ZV9iaW5uX29iamVjdCgmbG9jYWxfdGNwX2luZm8sIG1l dHJpY3NvYmopOworKworKwkvKiBjcmVhdGUgYSBzdHJpbmcgb2YgdGhlIGRhdGEgZnJvbSB0aGUg YmlubiBvYmplY3QgbWV0cmljc29iaiAqLworKwltZXRyaWNzX3JlYWRfYmlubl9vYmplY3QoKHZv aWQgKiltZXRyaWNzb2JqLCBtZXRyaWNzc3RyaW5nKTsKKysKKysJLyogZ2V0IHRoZSBrZXJuZWwg dmVyc2lvbiBwcmludGluZyB0aGUgaGVhZGVyICovCisrCWtlcm5lbF92ZXJzaW9uID0gYmlubl9v YmplY3RfaW50MzIobWV0cmljc29iaiwgImtlcm5lbF92ZXJzaW9uIik7CisrCisrCWlmIChtZXRy aWNzX2hkcl9sb2NhbF9mbGFnID09IDApIHsKKysJCW1ldHJpY3NfcHJpbnRfaGVhZGVyKGxvY2Fs ZnB0ciwgIkxPQ0FMIENPTk5FQ1RJT04iLCBrZXJuZWxfdmVyc2lvbik7CisrCQltZXRyaWNzX2hk cl9sb2NhbF9mbGFnID0gMTsKKysJfQorKworKwlmcHJpbnRmKGxvY2FsZnB0ciwgIiVzLCAiLCB0 aW1lc3RhbXApOworKwlmcHJpbnRmKGxvY2FsZnB0ciwgIiVzXG4iLCBtZXRyaWNzc3RyaW5nKTsK KysJZmNsb3NlIChsb2NhbGZwdHIpOworKyNlbmRpZiAvKiBUQ1BfSU5GTyAqLworK291dDoKKysJ ZnJlZShtZXRyaWNzc3RyaW5nKTsKKyt9CisrCisrLyogVXNlIHRoZSBTU0gyX01TR19HTE9CQUxf UkVRVUVTVCBwcm90b2NvbCB0bworKyAqIGFzayB0aGUgc2VydmVyIHRvIHNlbmQgbWV0cmljcyBi YWNrIHRvIHRoZSBjbGllbnQuCisrICogd2UgdXNlIHRoZSBub24tY2Fub25pY2FsIHN0cmluZyBz dGFjay1tZXRyaWNzQGhwbnNzaC5vcmcKKysgKiB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiByZXF1 ZXN0IHdlIHdhbnQuIElmIHRoZSByZWNlaXZlciBkb2Vzbid0CisrICogdW5kZXJzdGFuZCBpdCB0 aGVuIHRoZSByZXNwb25zZSBpbmRpYWN0ZXMgYSBmYWlsdXJlLgorKyAqIEkgY2FuIHByb2JhYmx5 IGRvIHRoaXMgYnkgdXNpbmcgY2xpbnRfaW5wdXRfZ2xvYmFsX3JlcXVlc3QgYnV0CisrICogSSBu ZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuCisrICovCisrdm9pZCBjbGllbnRfcmVxdWVz dF9tZXRyaWNzKHN0cnVjdCBzc2ggKnNzaCkgeworKwlpbnQgcjsKKysKKysJZGVidWdfZigiQXNr aW5nIHNlcnZlciBmb3IgVENQIHN0YWNrIG1ldHJpY3MiKTsKKysJLyogY3JlYXRlIGEgcGFrY2V0 IG9mIEdMT0JBTF9SRVFVRVNUIHR5cGUgKi8KKysJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwg U1NIMl9NU0dfR0xPQkFMX1JFUVVFU1QpKSAhPSAwIHx8CisrCSAgICAvKiBkZWZpbmUgdGhlIHR5 cGUgb2YgR0xPQkFMX1JFUVVFU1QgbWVzc2FnZSAqLworKwkgICAgKHIgPSBzc2hwa3RfcHV0X2Nz dHJpbmcoc3NoLAorKwkgICAgInN0YWNrLW1ldHJpY3NAaHBuc3NoLm9yZyIpKSAhPSAwIHx8Cisr CSAgICAvKiBpbmRpY2F0ZSBpZiB3ZSB3YW50IGEgcmVzcG9uc2UuIDEgZm9yIHllcyAwIGZvciBu byAqLworKwkgICAgKHIgPSBzc2hwa3RfcHV0X3U4KHNzaCwgMSkpICE9IDApCisrCQlmYXRhbF9m cihyLCAicHJlcGFyZSBzdGFjayByZXF1ZXN0IGZhaWx1cmUiKTsKKysJLyogc2VuZCB0aGUgcGFj a2V0ICovCisrCWlmICgociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApCisrCQlmYXRhbF9mcihy LCAic2VuZCBzdGFjayByZXF1ZXN0Iik7CisrCS8qIGkgYmVsaWV2ZSB0aGlzIGluZGljYXRlcyB3 aGF0IHdlIGFyZSB0byB1c2UgZm9yIGEgY2FsbGJhY2sgKi8KKysJY2xpZW50X3JlZ2lzdGVyX2ds b2JhbF9jb25maXJtKGNsaWVudF9wcm9jZXNzX3JlcXVlc3RfbWV0cmljcywgTlVMTCk7CisrfQor KworIHN0YXRpYyBpbnQKKyBjbGllbnRfaW5wdXRfZ2xvYmFsX3JlcXVlc3QoaW50IHR5cGUsIHVp bnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorIHsKK0BAIC0yODA0LDYgKzI5OTksNDMgQEAK KyAKKyAJbGVuID0gc3NoYnVmX2xlbihjbWQpOworIAlpZiAobGVuID4gMCkgeworKwkJLyogd2Ug bWF5IGJlIGNvbm5lY3RpbmcgdG8gYSBzZXJ2ZXIgdGhhdCBoYXMgaHBuIHByZWZpeGVkCisrCQkg KiBiaW5hcmllcyBpbnN0YWxsZWQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIHJld3JpdGUgYW55 CisrCQkgKiBzY3AgY29tbWFuZHMgdG8gbG9vayBmb3IgaHBuc2NwIGluc3RlYWQuCisrCQkgKi8K KysJCWlmIChzc2gtPmNvbXBhdCAmIFNTSF9IUE5TU0hfUFJFRklYKSB7CisrCQkJY2hhciAqbmV3 X2NtZDsKKysJCQluZXdfY21kID0gbWFsbG9jKGxlbis0KTsKKysJCQkvKiByZWFkIHRoZSBleGlz dGluZyBjb21tYW5kIGludG8gYSB0ZW1wIGJ1ZmZlciAqLworKwkJCXNwcmludGYobmV3X2NtZCwg IiVzIiwgKGNvbnN0IHVfY2hhciopc3NoYnVmX3B0cihjbWQpKTsKKysJCQljb25zdCBjaGFyICpw b3M7CisrCQkJLyogc2VlIGlmIHRoZSBjb21tYW5kIHN0YXJ0cyB3aXRoIHNjcCAqLworKwkJCXBv cyA9IHN0cnN0cihuZXdfY21kLCAic2NwIik7CisrCQkJLyogYnkgc3Vic3RyYWN0aW5nIHRoZSBw b2ludGVyIG5ld19jbWQgZnJvbSB0aGUgcG9pbnRlcgorKwkJCSAqIHBvcyB3ZSBlbmQgdXAgd2l0 aCB0aGUgcG9zaXRpb24gb2YgdGhlIG5lZWRsZSBpbiB0aGUKKysJCQkgKiBoYXlzdGFjay4gSWYg aXQncyAwIHRoZW4gd2UgY2FuIG1lc3Mgd2l0aCBpdAorKwkJCSAqLworKwkJCWlmIChwb3MgLSBu ZXdfY21kID09IDApIHsKKysJCQkJZGVidWdfZigiUmV3cml0aW5nIHNjcCBjb21tYW5kIGZvciBo cG5zY3AuIik7CisrCQkJCXNwcmludGYobmV3X2NtZCwgImhwbiVzIiwgKGNvbnN0IHVfY2hhciop c3NoYnVmX3B0cihjbWQpKTsKKysJCQkJZGVidWdfZigiQ29tbWFuZCB3YXM6ICVzIGFuZCBpcyBu b3cgJXMiLAorKwkJCQkgICAgICAoY29uc3QgdV9jaGFyKilzc2hidWZfcHRyKGNtZCksIG5ld19j bWQpOworKwkJCQkvKiBmcmVlIHRoZSBleGlzdGluZyBzc2hidWYgJ2NtZCcKKysJCQkJICogcmVj cmVhdGUgaXQgYW5kIHRoZW4gd3JpdGUgb3VyIG5ld19jbWQgaW50bworKwkJCQkgKiB0aGUgc3No YnVmIHN0cnVjdAorKwkJCQkgKi8KKysJCQkJc3NoYnVmX2ZyZWUoY21kKTsKKysJCQkJaWYgKChj bWQgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisrCQkJCQlmYXRhbCgic3NoYnVmX25ldyBmYWls ZWQgaW4gc2NwIHJld3JpdGUiKTsKKysJCQkJc3NoYnVmX3B1dGYoY21kLCAiJXMiLCBuZXdfY21k KTsKKysJCQkJLyogd2UgdXNlIGxlbiBsYXRlciBvbiBzbyBkb24ndCBmb3JnZXQgdG8KKysJCQkJ ICogaW5jcmVtZW50IGl0IGJ5IHRoZSBudW1iZXIgb2YgbmV3IGNoYXJzIGluIHRoZQorKwkJCQkg KiBjb21tYW5kCisrCQkJCSAqLworKwkJCQlsZW4gKz0gMzsKKysJCQkJZnJlZShuZXdfY21kKTsK KysJCQl9CisrCQl9CisgCQlpZiAoKGNtZHN0cmluZyA9IHNzaGJ1Zl9kdXBfc3RyaW5nKGNtZCkp ID09IE5VTEwpCisgCQkJZmF0YWxfZigic3NoYnVmX2R1cF9zdHJpbmcgZmFpbGVkIik7CisgCQlp ZiAobGVuID4gOTAwKQorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY29tcGF0LmMgb3Bl bnNzaC0xMC41cDEvY29tcGF0LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2NvbXBhdC5jCTIw MjYtMDktMjEgMDc6MDY6MDUuNDUzMjY3ODUzICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvY29t cGF0LmMJMjAyNi0wOS0yMSAwNzo1MToxNS43ODI1NTI4MzMgKzAyMDAKK0BAIC0yOSw2ICsyOSw3 IEBACisgCisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorIAorICNpbmNsdWRlICJ4bWFs bG9jLmgiCitAQCAtMTIzLDYgKzEyNCw4IEBACisgCQkJCQlTU0hfQlVHX1VURjhUVFlNT0RFIH0s CisgCQl7ICJUd2lzdGVkXyoiLAkJMCB9LAorIAkJeyAiVHdpc3RlZCoiLAkJU1NIX0JVR19ERUJV RyB9LAorKwkJLyogTW9iYVh0ZXJtJ3MgU0ZUUCBlbmdpbmUsIHNlZSBrZXhfaW5wdXRfbmV3a2V5 cyAqLworKwkJeyAiU2VjdXJlQmxhY2tib3gqIiwJU1NIX0JVR19TVFJJQ1RfS0VYX1JFS0VZIH0s CisgCQl7IE5VTEwsCQkJMCB9CisgCX07CisgCitAQCAtMTM2LDYgKzEzOSwzNSBAQAorIAkJCXNz aC0+Y29tcGF0ID0gY2hlY2tbaV0uYnVnczsKKyAJaWYgKGZvcmJpZF9zc2hfcnNhKQorIAkJc3No LT5jb21wYXQgfD0gU1NIX1JIX1JTQVNJR1NIQTsKKysJCQkvKiBDaGVjayB0byBzZWUgaWYgdGhl IHJlbW90ZSBzaWRlIGlzIE9wZW5TU0ggYW5kIG5vdCBIUE4gKi8KKysJCQkvKiBUT0RPOiBTZWUg aWYgd2UgY2FuIHdvcmsgdGhpcyBpbnRvIHRoZSBuZXcgbWV0aG9kIGZvciBidWcgY2hlY2tzICov CisrCQkJaWYgKHN0cnN0cih2ZXJzaW9uLCAiT3BlblNTSCIpICE9IE5VTEwpIHsKKysJCQkJLyog Y2hlY2sgaWYgdGhlIHJlbW90ZSBpcyBocG4gYW5kIGlmIHRoZSB2ZXJzaW9uCisrCQkJCSAqIHVz ZXMgaHBuIHByZWZpeGVkIGJpbmFyaWVzICovCisrCQkJCWNvbnN0IGNoYXIgKm9wOworKwkJCQlp ZiAoKG9wID0gc3Ryc3RyKHZlcnNpb24sICJocG4iKSkgIT0gTlVMTCkgeworKwkJCQkJaW50IGhw bnZlciA9IDA7CisrCQkJCQlzc2gtPmNvbXBhdCB8PSBTU0hfSFBOU1NIOworKwkJCQkJZGVidWco IlJlbW90ZSBpcyBIUE4gZW5hYmxlZCIpOworKwkJCQkJaWYgKHNzY2FuZihvcCwgImhwbiVkIiwg JmhwbnZlcikgPT0gMSAmJgorKwkJCQkJICAgIGhwbnZlciA+PSAxNikgeworKwkJCQkJCXNzaC0+ Y29tcGF0IHw9IFNTSF9IUE5TU0hfUFJFRklYOworKwkJCQkJCWRlYnVnKCJSZW1vdGUgdXNlcyBI UE5TU0ggcHJlZml4ZXMuIik7CisrCQkJCQl9CisrCQkJCX0KKysJCQkJLyogUmVzdHJpY3QgYWR2 ZXJ0aXNlZCB3aW5kb3cgZm9yIG5vbi1IUE4gT3BlblNTSCA+PSA4LjkuICovCisrCQkJCWlmICgh KHNzaC0+Y29tcGF0ICYgU1NIX0hQTlNTSCkpIHsKKysJCQkJCWNvbnN0IGNoYXIgKm9wOworKwkJ CQkJaW50IG9tYWogPSAwLCBvbWluID0gMDsKKysJCQkJCWlmICgob3AgPSBzdHJzdHIodmVyc2lv biwgIk9wZW5TU0hfIikpICE9IE5VTEwgJiYKKysJCQkJCSAgICBzc2NhbmYob3AsICJPcGVuU1NI XyVkLiVkIiwgJm9tYWosICZvbWluKSA9PSAyICYmCisrCQkJCQkgICAgKG9tYWogPj0gOSB8fCAo b21haiA9PSA4ICYmIG9taW4gPj0gOSkpKSB7CisrCQkJCQkJc3NoLT5jb21wYXQgfD0gU1NIX1JF U1RSSUNUX1dJTkRPVzsKKysJCQkJCQlkZWJ1ZygiUmVzdHJpY3RpbmcgYWR2ZXJ0aXNlZCB3aW5k b3cgc2l6ZS4iKTsKKysJCQkJCX0KKysJCQkJfQorKwkJCX0KKysJCQlkZWJ1Zygic3NoLT5jb21w YXQgaXMgJXUiLCBzc2gtPmNvbXBhdCk7CisgCQkJcmV0dXJuOworIAkJfQorIAl9CitkaWZmIC1O dXIgb3BlbnNzaC0xMC41cDEub3JpZy9jb21wYXQuaCBvcGVuc3NoLTEwLjVwMS9jb21wYXQuaAor LS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY29tcGF0LmgJMjAyNi0wOS0yMSAwNzowNjowNS40NTM0 MDY5OTMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jb21wYXQuaAkyMDI2LTA5LTIxIDEwOjQ3 OjE4LjE4NTMzNzc3MiArMDIwMAorQEAgLTQ2LDEyICs0NiwxMyBAQAorIC8qICNkZWZpbmUgdW51 c2VkCQkweDAwMDEwMDAwICovCisgLyogI2RlZmluZSB1bnVzZWQJCTB4MDAwMjAwMDAgKi8KKyAv KiAjZGVmaW5lIHVudXNlZAkJMHgwMDA0MDAwMCAqLworLS8qICNkZWZpbmUgdW51c2VkCQkweDAw MTAwMDAwICovCisrI2RlZmluZSBTU0hfQlVHX1NUUklDVF9LRVhfUkVLRVkJMHgwMDA4MDAwMCAv KiBwZWVyIHdhbnRzIGtleC1zdHJpY3Qgb24gcmVrZXlzICovCisrI2RlZmluZSBTU0hfSFBOU1NI CQkweDAwMTAwMDAwIC8qIGJhc2ljYWxseSBhIG5vdGljZSB0aGF0IHRoaXMgaXMgSFBOIGF3YXJl ICovCisgI2RlZmluZSBTU0hfQlVHX0VYVEVPRgkJMHgwMDIwMDAwMAorICNkZWZpbmUgU1NIX0JV R19QUk9CRQkJMHgwMDQwMDAwMAorLS8qICNkZWZpbmUgdW51c2VkCQkweDAwODAwMDAwICovCisr I2RlZmluZSBTU0hfUkVTVFJJQ1RfV0lORE9XCTB4MDA4MDAwMDAgLyogcmVzdHJpY3QgYWR2ZXJ0 aXNlZCB3aW5kb3cgdG8gT3BlblNTSCBjbGllbnRzICovCisgI2RlZmluZSBTU0hfT0xEX0ZPUldB UkRfQUREUgkweDAxMDAwMDAwCistLyogI2RlZmluZSB1bnVzZWQJCTB4MDIwMDAwMDAgKi8KKysj ZGVmaW5lIFNTSF9IUE5TU0hfUFJFRklYCTB4MDIwMDAwMDAgLyogaW5kaWNhdGVzIHRoYXQgd2Ug aGF2ZSBocG4gcHJlZml4ZXMgYmluYXJpZXMgKi8KKyAjZGVmaW5lIFNTSF9ORVdfT1BFTlNTSAkJ MHgwNDAwMDAwMAorICNkZWZpbmUgU1NIX0JVR19EWU5BTUlDX1JQT1JUCTB4MDgwMDAwMDAKKyAj ZGVmaW5lIFNTSF9CVUdfQ1VSVkUyNTUxOVBBRAkweDEwMDAwMDAwCitkaWZmIC1OdXIgb3BlbnNz aC0xMC41cDEub3JpZy9jb25maWd1cmUuYWMgb3BlbnNzaC0xMC41cDEvY29uZmlndXJlLmFjCist LS0gb3BlbnNzaC0xMC41cDEub3JpZy9jb25maWd1cmUuYWMJMjAyNi0wOS0yMSAwNzowNjowNS41 NTgxODU1ODQgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jb25maWd1cmUuYWMJMjAyNi0wOS0y MSAwNzowNjo1OS44ODY4NjE0MTEgKzAyMDAKK0BAIC0yNzYyLDYgKzI3NjIsMzkgQEAKKyAJKQor IGZpCisgCisrCisrIyBUZXN0aW5nIE1QVENQIFN1cHBvcnQKKysjIERvZXMgdGhlIE9TIHN1cHBv cnQgTVBUQ1A/CisrIyBXZSBkb24ndCB1c2UgdGhpcyBhdCB0aGUgbW9tZW50CisrIyBidXQgSSBh bSBob2xkaW5nIGl0IGluIHJlc3J2ZSAtY2pyIDA0LzA0LzIwMjUKKysJQUNfTVNHX0NIRUNLSU5H KFt3aGV0aGVyIHRoZSBPUyBzdXBwb3J0cyBNUFRDUF0pCisrCUFDX1JVTl9JRkVMU0UoCisrCQlb QUNfTEFOR19QUk9HUkFNKFtbCisrCQkjaW5jbHVkZSA8c3RkaW8uaD4KKysJCSNpbmNsdWRlIDxz dGRsaWIuaD4KKysJCSNpbmNsdWRlIDx1bmlzdGQuaD4KKysJCSNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KKysJCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrCQkjaW5jbHVkZSA8c3RkYm9vbC5oPgor KwkJI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysKKysJCV1dLCBbWworKwkJaW50IHNvY2sgPSAt MTsKKysJCXNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fTVBUQ1Ap OworKwkJaWYgKHNvY2sgPCAwKSB7CisrCQkgICBleGl0KDEpOworKwkJICAgfQorKwkJXV0pXSwK KysJCVsKKysJCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorKwkJCUFDX0RFRklORShbSEFWRV9NUFRD UF0sIFsxXSwKKysJCQkgICAgW09TIFN1cHBvcnRzIE1QVENQXSkKKysJCV0sCisrCQlbCisrCQkJ QUNfTVNHX1JFU1VMVChbbm9dKQorKwkJXQorKwkpCisrCisgaWYgdGVzdCAieCRhY19jdl9mdW5j X2dldGFkZHJpbmZvIiA9ICJ4eWVzIiAmJiBcCisgICAgIHRlc3QgIngkY2hlY2tfZm9yX2hwdXhf YnJva2VuX2dldGFkZHJpbmZvIiA9ICJ4MSI7IHRoZW4KKyAJQUNfTVNHX0NIRUNLSU5HKFtpZiBn ZXRhZGRyaW5mbyBzZWVtcyB0byB3b3JrXSkKK0BAIC0zMTc4LDggKzMyMTEsOCBAQAorIAkJCTIw MCopICAgb3BlbnNzbF9pbXBsPSJsaWJyZXNzbCIKKyAJCQkJbHZlcj1gZWNobyAiJHNzbHZlciIg fCBzZWQgJ3MvLipsaWJyZXNzbC0vLydgCisgCQkJCWNhc2UgIiRsdmVyIiBpbgorLQkJCQkyKnwz MDAqKSAjIDIueCwgMy4wLjAKKy0JCQkJCUFDX01TR19FUlJPUihbTGlicmVTU0wgPj0gMy4xLjAg cmVxdWlyZWQgKGhhdmUgIiRzc2xfc2hvd3ZlciIpXSkKKysJCQkJMip8MzAwKnwzMDEqfDMwMip8 MzAzKnwzMDQqfDMwNiopICMgMi54LCAzLjAuMAorKwkJCQkJQUNfTVNHX0VSUk9SKFtMaWJyZVNT TCA+PSAzLjcuMCByZXF1aXJlZCAoaGF2ZSAiJHNzbF9zaG93dmVyIildKQorIAkJCQkJOzsKKyAJ CQkJKikgOzsJIyBBc3N1bWUgYWxsIG90aGVyIHZlcnNpb25zIGFyZSBnb29kLgorIAkJCQllc2Fj CitAQCAtMzE4OCw2ICszMjIxLDcgQEAKKyAJCQkJIyBPcGVuU1NMIDMgJiA0OyB3ZSB1c2UgdGhl IDEuMXggQVBJCisgCQkJCSMgaHR0cHM6Ly9vcGVuc3NsLm9yZy9wb2xpY2llcy9nZW5lcmFsL3Zl cnNpb25pbmctcG9saWN5Lmh0bWwKKyAJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRE9QRU5TU0xf QVBJX0NPTVBBVD0weDEwMTAwMDAwTCIKKysJCQkJQUNfREVGSU5FKFtXSVRIX09QRU5TU0wzXSwg WzFdLCBbV2l0aCBPcGVuU1NMM10pCisgCQkJCTs7CisgCQkgICAgICAgICopCisgCQkJCUFDX01T R19FUlJPUihbVW5rbm93bi91bnN1cHBvcnRlZCBPcGVuU1NMIHZlcnNpb24gKCIkc3NsX3Nob3d2 ZXIiKV0pCitAQCAtMzMxMyw2ICszMzQ3LDI5IEBACisgCQlFVlBfQ0lQSEVSX0NUWF9zZXRfaXYg XAorIAldKQorIAorKwkjIE9wZW5TU0wgMy4wIEFQSQorKwkjIERvZXMgT3BlblNTTCBzdXBwb3J0 IHRoZSBFVlBfTUFDIGZ1bmN0aW9ucyBmb3IgUG9seTEzMDU/CisrCUFDX01TR19DSEVDS0lORyhb d2hldGhlciBPcGVuU1NMIHN1cHBvcnRzIFBvbHkxMzA1IE1BQyBFVlBdKQorKwlBQ19SVU5fSUZF TFNFKAorKwkJW0FDX0xBTkdfUFJPR1JBTShbWworKwkjaW5jbHVkZSA8c3RkbGliLmg+CisrCSNp bmNsdWRlIDxzdGRpby5oPgorKwkjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysJCV1dLCBbWwor KwkJRVZQX01BQyAqbWFjID0gRVZQX01BQ19mZXRjaChOVUxMLCAicG9seTEzMDUiLCBOVUxMKTsK KysJCWlmIChtYWMgPT0gTlVMTCkKKysJCSAgIGV4aXQoMSk7CisrCQldXSldLAorKwkJWworKwkJ CUFDX01TR19SRVNVTFQoW3llc10pCisrCQkJQUNfREVGSU5FKFtPUEVOU1NMX0hBVkVfUE9MWV9F VlBdLCBbMV0sCisrCQkJICAgIFtMaWJjcnlwdG8gc3VwcG9ydHMgUG9seTEzMDUgTUFDIEVWUF0p CisrCQldLAorKwkJWworKwkJCUFDX01TR19SRVNVTFQoW25vXSkKKysJCV0KKysJKQorKworIAlp ZiB0ZXN0ICJ4JG9wZW5zc2xfZW5naW5lIiA9ICJ4eWVzIiA7IHRoZW4KKyAJCUFDX0NIRUNLX0hF QURFUlMoW29wZW5zc2wvb3BlbnNzbGNvbmYuaCBvcGVuc3NsL2NvbmZpZ3VyYXRpb24uaF0pCisg CQlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBPcGVuU1NMIEVOR0lORSBzdXBwb3J0XSkKK2RpZmYgLU51 ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2RlZmluZXMuaCBvcGVuc3NoLTEwLjVwMS9kZWZpbmVzLmgK Ky0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2RlZmluZXMuaAkyMDI2LTA4LTExIDA0OjIyOjE3LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2RlZmluZXMuaAkyMDI2LTA5LTIxIDA3 OjA2OjU5Ljg4NzM3NzM3NiArMDIwMAorQEAgLTk1MSw3ICs5NTEsMTEgQEAKKyAjZW5kaWYKKyAK KyAjaWZuZGVmIFNTSF9JT0JVRlNaCistIyBkZWZpbmUgU1NIX0lPQlVGU1ogODE5MgorKyMgZGVm aW5lIFNTSF9JT0JVRlNaICgzMioxMDI0KQorKyNlbmRpZgorKworKyNpZm5kZWYgSVBQUk9UT19N UFRDUAorKyNkZWZpbmUgSVBQUk9UT19NUFRDUCAyNjIKKyAjZW5kaWYKKyAKKyAvKgorQEAgLTEw MDgsMyArMTAxMiwxMiBAQAorICNlbmRpZgorIAorICNlbmRpZiAvKiBfREVGSU5FU19IICovCisr CisrLyogdXNlZCB0byBlbmFibGUgY2hlY2tpbmcgbGludXgga2VybmVsIHZlcnNpb25zICovCisr I2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChfX2FscGluZV9fKQorKyNpbmNsdWRl IDxsaW51eC92ZXJzaW9uLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBLRVJORUxfVkVSU0lPTiAv KiBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IHRvIGRlZmluZSB0aGlzICovCisrI2RlZmluZSBLRVJO RUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwxNikgKyAoKGIpIDw8IDgpICsoYykpCisrI2VuZGlm CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9kaWdlc3QuaCBvcGVuc3NoLTEwLjVwMS9k aWdlc3QuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvZGlnZXN0LmgJMjAyNi0wOC0xMSAwNDoy MjoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9kaWdlc3QuaAkyMDI2LTA5 LTIxIDA3OjA2OjU5Ljg4Nzc0NTY5MyArMDIwMAorQEAgLTI3LDcgKzI3LDggQEAKKyAjZGVmaW5l IFNTSF9ESUdFU1RfU0hBMjU2CTIKKyAjZGVmaW5lIFNTSF9ESUdFU1RfU0hBMzg0CTMKKyAjZGVm aW5lIFNTSF9ESUdFU1RfU0hBNTEyCTQKKy0jZGVmaW5lIFNTSF9ESUdFU1RfTUFYCQk1CisrI2Rl ZmluZSBTU0hfRElHRVNUX05VTEwJCTUKKysjZGVmaW5lIFNTSF9ESUdFU1RfTUFYCQk2CisgCisg c3RydWN0IHNzaGJ1ZjsKKyBzdHJ1Y3Qgc3NoX2RpZ2VzdF9jdHg7CitkaWZmIC1OdXIgb3BlbnNz aC0xMC41cDEub3JpZy9kaWdlc3Qtb3BlbnNzbC5jIG9wZW5zc2gtMTAuNXAxL2RpZ2VzdC1vcGVu c3NsLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2RpZ2VzdC1vcGVuc3NsLmMJMjAyNi0wOC0x MSAwNDoyMjoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9kaWdlc3Qtb3Bl bnNzbC5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODg3OTM3MDQyICswMjAwCitAQCAtNjEsNiArNjEs NyBAQAorIAl7IFNTSF9ESUdFU1RfU0hBMjU2LAkiU0hBMjU2IiwJMzIsCUVWUF9zaGEyNTYgfSwK KyAJeyBTU0hfRElHRVNUX1NIQTM4NCwJIlNIQTM4NCIsCTQ4LAlFVlBfc2hhMzg0IH0sCisgCXsg U1NIX0RJR0VTVF9TSEE1MTIsCSJTSEE1MTIiLAk2NCwJRVZQX3NoYTUxMiB9LAorKwl7IFNTSF9E SUdFU1RfTlVMTCwJIk5PTkVNQUMiLAkwLAlFVlBfbWRfbnVsbH0sCisgCXsgLTEsCQkJTlVMTCwJ CTAsCU5VTEwgfSwKKyB9OworIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvRlVORElO Ry55bWwgb3BlbnNzaC0xMC41cDEvRlVORElORy55bWwKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L0ZVTkRJTkcueW1sCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzaC0xMC41cDEvRlVORElORy55bWwJMjAyNi0wOS0yMSAwNzowNjo1OS44ODgxMzIxMDAgKzAy MDAKK0BAIC0wLDAgKzEsMTIgQEAKKysjIFRoZXNlIGFyZSBzdXBwb3J0ZWQgZnVuZGluZyBtb2Rl bCBwbGF0Zm9ybXMKKysKKytnaXRodWI6cmFwaWVyMSAjIFJlcGxhY2Ugd2l0aCB1cCB0byA0IEdp dEh1YiBTcG9uc29ycy1lbmFibGVkIHVzZXJuYW1lcyBlLmcuLCBbdXNlcjEsIHVzZXIyXQorKyNw YXRyZW9uOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBQYXRyZW9uIHVzZXJuYW1lCisrI29wZW5f Y29sbGVjdGl2ZTogIyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgT3BlbiBDb2xsZWN0aXZlIHVzZXJu YW1lCisrI2tvX2ZpOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBLby1maSB1c2VybmFtZQorKyN0 aWRlbGlmdDogIyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgVGlkZWxpZnQgcGxhdGZvcm0tbmFtZS9w YWNrYWdlLW5hbWUgZS5nLiwgbnBtL2JhYmVsCisrI2NvbW11bml0eV9icmlkZ2U6ICMgUmVwbGFj ZSB3aXRoIGEgc2luZ2xlIENvbW11bml0eSBCcmlkZ2UgcHJvamVjdC1uYW1lIGUuZy4sIGNsb3Vk LWZvdW5kcnkKKysjbGliZXJhcGF5OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBMaWJlcmFwYXkg dXNlcm5hbWUKKysjaXNzdWVodW50OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBJc3N1ZUh1bnQg dXNlcm5hbWUKKysjb3RlY2hpZTogIyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgT3RlY2hpZSB1c2Vy bmFtZQorKyNjdXN0b206ICMgUmVwbGFjZSB3aXRoIHVwIHRvIDQgY3VzdG9tIHNwb25zb3JzaGlw IFVSTHMgZS5nLiwgWydsaW5rMScsICdsaW5rMiddCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEu b3JpZy9oYXBweWV5ZWJhbGxzLmMgb3BlbnNzaC0xMC41cDEvaGFwcHlleWViYWxscy5jCistLS0g b3BlbnNzaC0xMC41cDEub3JpZy9oYXBweWV5ZWJhbGxzLmMJMTk3MC0wMS0wMSAwMTowMDowMC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9oYXBweWV5ZWJhbGxzLmMJMjAyNi0w OS0yMSAwNzowNjo1OS44ODgyMzM4MjYgKzAyMDAKK0BAIC0wLDAgKzEsMzEzIEBACisrLyoKKysg KiBDb3B5cmlnaHQgKGMpIDIwMjUgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1l bGxvbiBVbml2ZXJzaXR5LgorKyAqCisrICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJA cHNjLmVkdT4KKysgKiAgQXV0aG9yOiBLaW0gTWlobiBLYXBsYW4gKGthcGxhbiBhdCBraW0tbWlo bi5jb20pCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgTUlUIExpY2Vuc2UuCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKysgKiBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ VFkgb3IKKysgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlU IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5Owor KyAqIGlmIG5vdCwgc2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCisrICoK KysgKi8KKysvKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFJGQyA4MzA1IGJhc2VkIG9u IGEgcGF0Y2gKKysgKiBzdXBwbGllZCBieSBLaW0gTWluaCBLYXBsYW4gKGthcGxhbiBhdCBraW0t bWluaC5jb20pLgorKyAqIEluZm9ybWF0aW9uIGFib3V0IFJGQyA4MzA1IGNhbiBiZSBmb3VuZCBh dAorKyAqIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM4MzA1CisrICogVGhpcyB2 ZXJzaW9uICpkb2VzIG5vdCogcHJvdmlkZSBzdXBwb3J0IGZvcgorKyAqIFNlY3Rpb24gMyB3aGVy ZSBhc3ljaHJvbm91cyBwb2xsaW5nIG9mIEROUyBzZXJ2ZXJzCisrICogaXMgYSBTSE9VTEQuCisr ICogU2VjdGlvbiA0IHJlcXVpcmVzIHNvcnRpbmcgb2YgRE5TIHJlc3VsdHMgYXMgcGVyCisrICog UkZDIDY3MjQuIFRoaXMgaXMgcHJvdmlkZWQgYnkgdGhlIGdldGFkZHJpbmZvIGNhbGwKKysgKiBm cm9tIGdjYy4gVGhpcyBtYXkgbm90IGJlIGF2YWlsYWJsZSB2aWEgbXVzbC4KKysgKiBJbnRlcmxl YXZpbmcgb2YgYWRkcmVzc2VzIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorKyAqIFNlY3Rp b24gNSBpcyBpbXBsZW1lbnRlZC4KKysgKiBTZWN0aW9uIDYgaXMgbm90IGltcGxlbWVudGVkIG91 dHNpZGUgb2YgZ2V0YWRkcmluZm8KKysgKiBTZWN0aW9uIDcgaW4gdW5kZXIgY29uc2lkZXJhdGlv bgorKyAqLworKworKworKy8qIE5PVEU6IFRoZXJlIGFyZSBhIGxvdCBvZiBkZWJ1ZyBzdGF0ZW1l bnRzIGluIGhlcmUKKysgKiBiZWNhdXNlIHdlIGFyZSBzdGlsbCB0cmVhdGluZyB0aGlzIGFzIHNv bWV3aGF0CisrICogZXhwZXJpbWVudGFsLiBBIGZ1dHVyZSB2ZXJzaW9uIHdpbGwgcHJvbW90ZSB0 aGlzCisrICogdG8gc3RhYmxlIGFuZCB3ZSdsbCByZW1vdmUgYSBsb3Qgb2YgdGhlIGxldmVsIDIK KysgKiBkZWJ1ZyBzdGF0ZW1lbnRzIHRoZW4uCisrICovCisrCisrI2luY2x1ZGUgImluY2x1ZGVz LmgiCisrI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysj ZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG5ldC9pZi5oPgorKyNpbmNs dWRlIDxuZXRpbmV0L2luLmg+CisrI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2luY2x1ZGUgImhhcHB5ZXllYmFs bHMuaCIKKysjaW5jbHVkZSAic3NoY29ubmVjdC5oIgorKyNpbmNsdWRlICJzc2guaCIKKysjaW5j bHVkZSAibWlzYy5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVkZSAicmVhZGNvbmYuaCIK KysKKysvKiB0aGlzIGlzIGZyb20gc3NoY29ubmVjdC5jICovCisrZXh0ZXJuIGludCBzc2hfY3Jl YXRlX3NvY2tldChzdHJ1Y3QgYWRkcmluZm8gKmFpKTsKKysKKysvKiBnZXQgdGhlIG9wdGlvbnMg c3RydWN0IGlmIGZvciB0aGUgZGVsYXkgdGltZSAqLworK2V4dGVybiBPcHRpb25zIG9wdGlvbnM7 CisrCisrLyogaGF2ZSB3ZSB0aW1lZCBvdXQ/ICovCisrc3RhdGljIGludAorK3RpbWVvdXQoc3Ry dWN0IHRpbWV2YWwgKnR2LCBpbnQgdGltZW91dF9tcykKKysgeworKwlpZiAodGltZW91dF9tcyA8 PSAwKQorKwkJcmV0dXJuIDA7CisrCW1zX3N1YnRyYWN0X2RpZmYodHYsICZ0aW1lb3V0X21zKTsK KysJcmV0dXJuIHRpbWVvdXRfbXMgPD0gMDsKKyt9CisrCisrLyogdXNlZCB0byBwcm92aWRlIGRl YnVnIG1lc3NhZ2UgaW4gc3NoY29ubmVjdCAqLworK2NoYXIgZ2xvYmFsX250b3BbTklfTUFYSE9T VF07CisrCisrLyogdXNlZCB0byBwcm92aWRlIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBzdGF0ZW1l bnRzICovCisrY2hhciAqcmV0dXJuX2ZhbShpbnQgZmFtKSB7CisrCWlmIChmYW0gPT0gMTApCisr CQlyZXR1cm4gIklQdjYiOworKwllbHNlCisrCQlyZXR1cm4gIklQdjQiOworK30KKysKKysvKgor KyAqIFJldHVybiAwIGlmIHRoZSBhZGRyaW5mbyB3YXMgbm90IHRyaWVkLiBSZXR1cm4gLTEgaWYg dXNpbmcgaXQKKysgKiBmYWlsZWQuIFJldHVybiAxIGlmIGl0IHdhcyB1c2VkLgorKyAqLworK3N0 YXRpYyBpbnQKKytoYXBweV9leWViYWxsc19pbml0aWF0ZShjb25zdCBjaGFyICpob3N0LCBzdHJ1 Y3QgYWRkcmluZm8gKmFpLAorKwkJCQkgICAgaW50ICp0aW1lb3V0X21zLAorKwkJCQkgICAgc3Ry dWN0IHRpbWV2YWwgKmluaXRpYXRlLAorKwkJCQkgICAgaW50ICpuZmRzLCBmZF9zZXQgKmZkcywK KysJCQkJICAgIHN0cnVjdCBhZGRyaW5mbyAqZmRfYWlbXSkKKyt7CisrCWludCBvZXJybm8sIHNv Y2s7CisrCWNoYXIgbnRvcFtOSV9NQVhIT1NUXSwgc3RycG9ydFtOSV9NQVhTRVJWXTsKKysKKysJ ZGVidWcyX2YgKCJIYXBweSBleWViYWxscyBpbml0aWF0aW5nIik7CisrCW1lbXNldChudG9wLCAw LCBzaXplb2YobnRvcCkpOworKwltZW1zZXQoc3RycG9ydCwgMCwgc2l6ZW9mKHN0cnBvcnQpKTsK KysJLyogSWYgKm5mZHMgIT0gMCB0aGVuICppbml0aWF0ZSBpcyBpbml0aWFsaXNlZC4gKi8KKysJ aWYgKCpuZmRzICYmCisrCSAgICAoYWkgPT0gTlVMTCB8fAorKwkgICAgICF0aW1lb3V0KGluaXRp YXRlLCBvcHRpb25zLmhhcHB5X2RlbGF5KSkpIHsKKysJCS8qIERvIG5vdCBpbml0aWF0ZSBuZXcg Y29ubmVjdGlvbnMgeWV0ICovCisrCQlkZWJ1ZzJfZiAoIldhaXRpbmcgdG8gaW5pdGlhdGUgbmV3 IGNvbm5lY3Rpb24iKTsKKysJCXJldHVybiAwOworKwl9CisrCS8qIHRyeWluZyB0byB1c2UgYSBm YW1pbHkgd2UgZG9uJ3Qgc3VwcG9ydCAqLworKwlpZiAoYWktPmFpX2ZhbWlseSAhPSBBRl9JTkVU ICYmIGFpLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKKysJCWRlYnVnMl9mICgiQWRkcmVzcyBm YW1pbHkgbm90IHN1cHBvcnRlZCIpOworKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisrCQlyZXR1 cm4gLTE7CisrCX0KKysKKysJZGVidWcyX2YgKCJSdW5uaW5nIGdldG5hbWVpbmZvIGZvciAlcyBh bmQgJWQiLCBob3N0LCBhaS0+YWlfZmFtaWx5KTsKKysJaWYgKGdldG5hbWVpbmZvKGFpLT5haV9h ZGRyLCBhaS0+YWlfYWRkcmxlbiwKKysJCQludG9wLCBzaXplb2YobnRvcCksCisrCQkJc3RycG9y dCwgc2l6ZW9mKHN0cnBvcnQpLAorKwkJCU5JX05VTUVSSUNIT1NUfE5JX05VTUVSSUNTRVJWKSAh PSAwKSB7CisrCQlvZXJybm8gPSBlcnJubzsKKysJCWVycm9yKCIlczogZ2V0bmFtZWluZm8gZmFp bGVkIiwgX19mdW5jX18pOworKwkJZXJybm8gPSBvZXJybm87CisrCQlyZXR1cm4gLTE7CisrCX0K KysJbWVtY3B5KGdsb2JhbF9udG9wLG50b3Asc2l6ZW9mKG50b3ApKTsKKysJZGVidWcyX2YoIlJG QyA4MzA1IGNvbm5lY3RpbmcgdG8gJS4yMDBzIFslLjEwMHNdIHBvcnQgJXMuIiwKKysJICAgICAg aG9zdCwgbnRvcCwgc3RycG9ydCk7CisrCWRlYnVnMl9mKCJSRkMgODMwNTogJS4yMDBzIiwgZ2xv YmFsX250b3ApOworKwkvKiBDcmVhdGUgYSBzb2NrZXQgZm9yIGNvbm5lY3RpbmcgKi8KKysJc29j ayA9IHNzaF9jcmVhdGVfc29ja2V0KGFpKTsKKysJaWYgKHNvY2sgPCAwKSB7CisrCQkvKiBBbnkg ZXJyb3IgaXMgYWxyZWFkeSBvdXRwdXQgKi8KKysJCWVycm5vID0gMDsKKysJCXJldHVybiAtMTsK KysJfQorKwlpZiAoc29jayA+PSBGRF9TRVRTSVpFKSB7CisrCQllcnJvcigic29ja2V0IG51bWJl ciB0byBiaWcgZm9yIHNlbGVjdDogJWQiLCBzb2NrKTsKKysJCWNsb3NlKHNvY2spOworKwkJcmV0 dXJuIC0xOworKwl9CisrCWZkX2FpW3NvY2tdID0gYWk7CisrCS8qIHVzaW5nIG5vbmJsb2NraW5n IHNvY2tldHMgd2l0aCBzZWxlY3QgYWxsb3dzCisrCSAqIHVzIHRvIGZpcmUgb2ZmIG5ldyBzb2Nr ZXRzIHdpdGhvdXQgd2FpdGluZyBmb3IgYQorKwkgKiBjb25uZWN0aW9uIHRvIGJlIGVzdGFibGlz aGVkLiBUaGlzIGxldHMgdXMgYXZvaWQKKysJICogdGhlIHVzZSBvZiB0aHJlYWRzLiBzZXRfbm9u YmxvY2sgaXMgaW4gbWlzYy5jCisrCSAqIGFuZCB1c2VzIGZuY3RsICovCisrCXNldF9ub25ibG9j ayhzb2NrKTsKKysJZGVidWcyX2YoIlJGQyA4MzA1IHByZS1jb25uZWN0IGZvciAlcyIsIHJldHVy bl9mYW0oYWktPmFpX2ZhbWlseSkpOworKwlpZiAoY29ubmVjdChzb2NrLCBhaS0+YWlfYWRkciwg YWktPmFpX2FkZHJsZW4pIDwgMCAmJgorKwkgICAgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKKysJ CWVycm9yKCJjb25uZWN0IHRvIGFkZHJlc3MgJXMgcG9ydCAlczogJXMiLAorKwkJICAgICAgbnRv cCwgc3RycG9ydCwgc3RyZXJyb3IoZXJybm8pKTsKKysJCWVycm5vID0gMDsKKysJCWNsb3NlKHNv Y2spOworKwkJcmV0dXJuIC0xOworKwl9CisrCWRlYnVnX2YoIlJGQyA4MzA1IHBvc3QgY29ubmVj dCBmb3IgJXMiLCByZXR1cm5fZmFtKGFpLT5haV9mYW1pbHkpKTsKKysJbW9ub3RpbWVfdHYoaW5p dGlhdGUpOworKwlGRF9TRVQoc29jaywgZmRzKTsKKysJKm5mZHMgPSBNQVhJTVVNKCpuZmRzLCBz b2NrICsgMSk7CisrCXJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50CisraGFwcHlfZXllYmFs bHNfcHJvY2VzcyhpbnQgKm5mZHMsIGZkX3NldCAqZmRzLAorKwkJCQkgICBzdHJ1Y3QgYWRkcmlu Zm8gKmZkX2FpW10sCisrCQkJCSAgIGludCByZWFkeSwgZmRfc2V0ICp3ZmRzKQorK3sKKysJc29j a2xlbl90IG9wdGxlbjsKKysJaW50IHNvY2ssIG9wdHZhbCA9IDA7CisrCWNoYXIgbnRvcFtOSV9N QVhIT1NUXSwgc3RycG9ydFtOSV9NQVhTRVJWXTsKKysKKysJZGVidWcyX2YoIlByb2Nlc3Npbmcg UkZDIDgzMDUgY29ubmVjdGlvbnMiKTsKKysJZm9yIChzb2NrID0gKm5mZHMgLSAxOyByZWFkeSA+ IDAgJiYgc29jayA+PSAwOyBzb2NrLS0pIHsKKysJCWRlYnVnMl9mKCJSRkMgODMwNTogUHJvY2Vz c2luZyBmb3IgJXM6ICVkIiwgcmV0dXJuX2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSwgc29j ayk7CisrCQlpZiAoRkRfSVNTRVQoc29jaywgd2ZkcykpIHsKKysJCQlkZWJ1ZzJfZigiUkZDIDgz MDU6IEZEX0lTU0VUIHRydWUgZm9yICVkIiwgc29jayk7CisrCQkJcmVhZHktLTsKKysJCQlvcHRs ZW4gPSBzaXplb2Yob3B0dmFsKTsKKysJCQlkZWJ1Z19mKCJSRkMgODMwNTogb3B0dmFsIGlzICVk IGZvciAlZCIsIG9wdHZhbCwgc29jayk7CisrCQkJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NP Q0tFVCwgU09fRVJST1IsCisrCQkJCSAgICAgICAmb3B0dmFsLCAmb3B0bGVuKSA8IDApIHsKKysJ CQkJb3B0dmFsID0gZXJybm87CisrCQkJCWVycm9yKCJnZXRzb2Nrb3B0IGZhaWxlZDogJXMiLAor KwkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOworKwkJCX0gZWxzZSBpZiAob3B0dmFsICE9IDAp IHsKKysJCQkJZGVidWdfZigiUkZDIDgzMDU6IENvcHlpbmcgZGF0YSBmb3IgJWQgb24gJXMiLCBv cHR2YWwsIHJldHVybl9mYW0oZmRfYWlbc29ja10tPmFpX2ZhbWlseSkpOworKwkJCQltZW1zZXQo bnRvcCwgMCwgc2l6ZW9mKG50b3ApKTsKKysJCQkJbWVtc2V0KHN0cnBvcnQsIDAsIHNpemVvZihz dHJwb3J0KSk7CisrCQkJCWlmIChnZXRuYW1laW5mbyhmZF9haVtzb2NrXS0+YWlfYWRkciwKKysJ CQkJCQlmZF9haVtzb2NrXS0+YWlfYWRkcmxlbiwKKysJCQkJCQludG9wLCBzaXplb2YobnRvcCks CisrCQkJCQkJc3RycG9ydCwgc2l6ZW9mKHN0cnBvcnQpLAorKwkJCQkJCU5JX05VTUVSSUNIT1NU fE5JX05VTUVSSUNTRVJWKSAhPSAwKQorKwkJCQkJZXJyb3IoImNvbm5lY3QgZmluYWxseSBmYWls ZWQ6ICVzIiwKKysJCQkJCSAgICAgIHN0cmVycm9yKG9wdHZhbCkpOworKwkJCQllbHNlCisrCQkJ CQllcnJvcigiY29ubmVjdCB0byBhZGRyZXNzICVzIHBvcnQgJXMgZmluYWxseTogJXMiLAorKwkJ CQkJICAgICAgbnRvcCwgc3RycG9ydCwgc3RyZXJyb3Iob3B0dmFsKSk7CisrCQkJfQorKwkJCUZE X0NMUihzb2NrLCBmZHMpOworKwkJCXdoaWxlICgqbmZkcyA+IDAgJiYgISBGRF9JU1NFVCgqbmZk cyAtIDEsIGZkcykpCisrCQkJCS0tKm5mZHM7CisrCQkJaWYgKG9wdHZhbCA9PSAwKSB7CisrCQkJ CWRlYnVnX2YoIlJGQyA4MzA1OiB1bnNldHRpbmcgbm9uYmxvY2sgZm9yICVzIG9uICVkIiwKKysJ CQkJICAgIHJldHVybl9mYW0oZmRfYWlbc29ja10tPmFpX2ZhbWlseSksIHNvY2spOworKwkJCQl1 bnNldF9ub25ibG9jayhzb2NrKTsKKysJCQkJcmV0dXJuIHNvY2s7CisrCQkJfQorKwkJCWNsb3Nl KHNvY2spOworKwkJCWVycm5vID0gb3B0dmFsOworKwkJfQorKwl9CisrCXJldHVybiAtMTsKKyt9 CisrCisraW50CisraGFwcHlfZXllYmFsbHMoY29uc3QgY2hhciAqIGhvc3QsIHN0cnVjdCBhZGRy aW5mbyAqYWksCisrCQkJICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmhvc3RhZGRyLCBpbnQg KnRpbWVvdXRfbXMpCisreworKwlzdHJ1Y3QgYWRkcmluZm8gKmZkX2FpW0ZEX1NFVFNJWkVdOyAv KiAxMDI0ICovCisrCXN0cnVjdCB0aW1ldmFsIGluaXRpYXRlX3R2LCBzdGFydF90diwgc2VsZWN0 X3R2LCAqdHY7CisrCWZkX3NldCBmZHMsIHdmZHM7CisrCWludCByZXMsIG9lcnJubywgZGlmZiwg ZGlmZjAsIG5mZHMgPSAwLCBzb2NrID0gLTE7CisrCisrCWRlYnVnX2YoIlN0YXJ0aW5nIFJGQyA4 MzA1L0hhcHB5IEV5ZWJhbGxzIGNvbm5lY3Rpb24iKTsKKysKKysJRkRfWkVSTygmZmRzKTsKKysJ aWYgKCp0aW1lb3V0X21zID4gMCkgLyogZGVmYXVsdCB2YWx1ZSBvZiBubyB0aW1lb3V0IC0gdXNl IFRDUCBkZWZhdWx0IGluc3RlYWQgKi8KKysJCW1vbm90aW1lX3R2KCZzdGFydF90dik7IC8qIG1v bm90aW1lX3R2IGlzIGluIG1pc2MuYyAqLworKworKwkvKiBydW4gdGhyb3VnaCBwb3RlbnRpYWxz IHVubGVzcyB3ZSBoYXZlIHRpbWVkIG91dCAqLworKwkvKiB0aW1lb3V0X21zIGJlaW5nIHRoZSB1 c2VyIGRlZmluZWQgY29ubmVjdGlvbiB0aW1lb3V0IGlmCisrCSAqIHRoZXkgYXJlbid0IHVzaW5n IHRoZSB0Y3AgdGltZW91dCAqLworKwl3aGlsZSAoKGFpICE9IE5VTEwgfHwgbmZkcyA+IDApICYm CisrCSAgICAgICAhIHRpbWVvdXQoJnN0YXJ0X3R2LCAqdGltZW91dF9tcykpIHsKKysJCS8qIHNl dCB1cCB0aGUgc29ja2V0cyAqLworKwkJcmVzID0gaGFwcHlfZXllYmFsbHNfaW5pdGlhdGUoaG9z dCwgYWksCisrCQkgICAgIHRpbWVvdXRfbXMsICZpbml0aWF0ZV90diwgJm5mZHMsICZmZHMsIGZk X2FpKTsKKysJCWlmIChyZXMgIT0gMCkKKysJCQlhaSA9IGFpLT5haV9uZXh0OworKwkJaWYgKHJl cyA9PSAtMSkKKysJCQljb250aW51ZTsKKysJCXR2ID0gTlVMTDsKKysKKysJCS8qIHRoaXMgaXMg anVzdCB0byBkZXRlcm1pbmUgdGhlIHBhdXNlIGJldHdlZW4KKysJCSAqIGNhbGxzIHRvIHNlbGVj dC4gKi8KKysgIAkJaWYgKGFpICE9IE5VTEwgfHwgKnRpbWVvdXRfbXMgPiAwKSB7CisrCQkJZGVi dWcyX2YgKCJSRkMgODMwNTogSW4gcGF1c2UuLi4iKTsKKysJCQl0diA9ICZzZWxlY3RfdHY7Cisr CQkJaWYgKGFpICE9IE5VTEwpIHsKKysJCQkJZGlmZiA9IG9wdGlvbnMuaGFwcHlfZGVsYXk7Cisr CQkJCW1zX3N1YnRyYWN0X2RpZmYoJmluaXRpYXRlX3R2LCAmZGlmZik7CisrCQkJCWlmICgqdGlt ZW91dF9tcyA+IDApIHsKKysJCQkJCWRpZmYwID0gKnRpbWVvdXRfbXM7CisrCQkJCQltc19zdWJ0 cmFjdF9kaWZmKCZzdGFydF90diwgJmRpZmYwKTsKKysJCQkJCWRpZmYgPSBNSU5JTVVNKGRpZmYs IGRpZmYwKTsKKysJCQkJfQorKwkJCX0gZWxzZSB7CisrCQkJCWRpZmYgPSAqdGltZW91dF9tczsK KysJCQkJbXNfc3VidHJhY3RfZGlmZigmc3RhcnRfdHYsICZkaWZmKTsKKysJCQl9CisrCQkJdHYt PnR2X3NlYyA9IGRpZmYgLyAxMDAwOworKwkJCXR2LT50dl91c2VjID0gKGRpZmYgJSAxMDAwKSAq IDEwMDA7CisrCQl9CisrCisrCQkvKiBjcmVhdGUgYSB3cml0ZWFibGUgc2V0IG9mIGZpbGUgZGVz Y3JpcHRvcnMgKi8KKysJCXdmZHMgPSBmZHM7CisrCQkvKiBzZWxlY3Qgd2lsbCBwYXVzZSBmb3Ig dGltZSB0diBkZXRlcm1pbmVkIGJ5IHRoZSBhYm92ZQorKwkJICogdGltaW5nIGNhY3VsYXRpb25z ICovCisrCQlkZWJ1ZzJfZigiUkZDIDgzMDU6IFN0YXJ0aW5nIHNlbGVjdCIpOworKwkJcmVzID0g c2VsZWN0KG5mZHMsIE5VTEwsICZ3ZmRzLCBOVUxMLCB0dik7CisrCQlkZWJ1ZzJfZigiUkZDIDgz MDU6IExlYXZpbmcgc2VsZWN0Iik7CisrCisrCQkvKiBwcmVzZXJ2ZSBhbnkgZXJyb3JzICovCisr CQlvZXJybm8gPSBlcnJubzsKKysJCWlmIChyZXMgPCAwKSB7CisrCQkJZXJyb3IoInNlbGVjdCBm YWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKysJCQllcnJubyA9IG9lcnJubzsKKysJCQlj b250aW51ZTsKKysJCX0KKysJCS8qIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHNvY2tldHMgKi8KKysJ CWRlYnVnMl9mICgiUkZDIDgzMDU6IFByb2Nlc3NpbmcgaGFwcHkgZXllYmFsbHMgZmRzIik7Cisr CQlzb2NrID0gaGFwcHlfZXllYmFsbHNfcHJvY2VzcygmbmZkcywgJmZkcywgZmRfYWksCisrCQkJ CQkJCSAgcmVzLCAmd2Zkcyk7CisrCQlpZiAoc29jayA+PSAwKSB7CisrCQkJZGVidWdfZiAoIlJG QyA4MzA1IC8gSGFwcHkgRXllYmFsbHMgY29ubmVjdGVkIik7CisrCQkJLyogd2UgaGF2ZSBhIGNv bm5lY3Rpb24gKi8KKysJCQltZW1jcHkoaG9zdGFkZHIsIGZkX2FpW3NvY2tdLT5haV9hZGRyLAor KwkJCSAgICAgICBmZF9haVtzb2NrXS0+YWlfYWRkcmxlbik7CisrCQkJYnJlYWs7CisrCQl9Cisr CQlkZWJ1Z19mKCJSRkMgODMwNTogUmVzdGFydGluZyB3aGlsZSBsb29wLiIpOworKwl9CisrCW9l cnJubyA9IGVycm5vOworKwkvKiBjbG9zZSBvdGhlciBjb25uZWN0aW9uIGF0dGVtcHRzL3NvY2tl dHMgKi8KKysJZGVidWcyX2YoIlJGQyA4MzA1OiBORkRTIGlzICVkIiwgbmZkcyk7CisrCXdoaWxl IChuZmRzLS0gPiAwKSB7CisrCQlkZWJ1ZzJfZigiUkZDIDgzMDU6IFJ1bm5pbmcgRkRfSVNTRVQg b24gJWQiLCBuZmRzKTsKKysJCWlmIChGRF9JU1NFVChuZmRzLCAmZmRzKSkKKysJCQljbG9zZShu ZmRzKTsKKysJfQorKwkvKiB3ZSB0aW1lZCBvdXQgd2l0aCBubyB2YWxpZCBjb25uZWN0aW9ucyAq LworKwlpZiAodGltZW91dCgmc3RhcnRfdHYsICp0aW1lb3V0X21zKSkKKysJCWVycm5vID0gRVRJ TUVET1VUOworKwllbHNlCisrCQllcnJubyA9IG9lcnJubzsKKysJcmV0dXJuIHNvY2s7CisrfQor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvaGFwcHlleWViYWxscy5oIG9wZW5zc2gtMTAu NXAxL2hhcHB5ZXllYmFsbHMuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvaGFwcHlleWViYWxs cy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41 cDEvaGFwcHlleWViYWxscy5oCTIwMjYtMDktMjEgMDc6MDY6NTkuODg4MzA3MzcwICswMjAwCitA QCAtMCwwICsxLDIzIEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMjUgVGhlIEJvYXJkIG9m IFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgorKyAqCisrICogIEF1dGhv cjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisrICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKysgKgorKyAqIFRoaXMg bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAq CisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExpY2Vuc2Ug YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7CisrICogaWYgbm90LCBzZWUgaHR0cDovL29wZW5zb3Vy Y2Uub3JnL2xpY2Vuc2VzL01JVC4KKysgKgorKyAqLworKy8qCisrICogUkZDIDgzMDUgSGFwcHkg RXllYmFsbHMgVmVyc2lvbiAyOiBCZXR0ZXIgQ29ubmVjdGl2aXR5IFVzaW5nIENvbmN1cnJlbmN5 CisrICoKKysgKi8KKysKKytpbnQgaGFwcHlfZXllYmFsbHMoY29uc3QgY2hhciAqLCBzdHJ1Y3Qg YWRkcmluZm8gKiwKKysJCSAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICosIGludCAqKTsKK2Rp ZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL0hQTi1SRUFETUUgb3BlbnNzaC0xMC41cDEvSFBO LVJFQURNRQorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvSFBOLVJFQURNRQkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL0hQTi1SRUFETUUJMjAy Ni0wOS0yMSAwNzowNjo1OS44ODg0MDc5OTMgKzAyMDAKK0BAIC0wLDAgKzEsMjAwIEBACisrTm90 ZXM6IAorKworK0ZJUFMgTW9kZSBhbmQgUGFyYWxsZWwgQ2lwaGVycyBpbiAxOC43LjEKKytVc2lu ZyBIUE4tU1NIIGluIG9wZXJhdGluZyBzeXN0ZW1zIHdvcmtpbmcgaW4gRklQUyBtb2RlIChlLmcu IFJIRUwgd2l0aAorK0ZJUFMgZW5hYmxlZCkgcHJlY2x1ZGUgdGhlIHVzZSBvZiBwYXJhbGxlbCBj aXBoZXJzLiBUaGlzIGlzIGJlY2F1c2UKKyt0aGUgcGFyYWxsZWwgQUVTLUNUUiBpbXBsZW1lbnRh dGlvbiBpcyBub3QgRklQUyBjZXJ0aWZpZWQgYW5kIHdpbGwgY2F1c2UgRklQUworK3RvIGV4aXQg d2l0aCBhbiBlcnJvciB3aGVuIGxvYWRlZC4gSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcmFsbGVsIENo YUNoYTIwIGNpcGhlcgorK3RoZSBhbGdvcml0aG0gaXRzZWxmIGhhcyBub3QgYmVlbiBGSVBTIGNl cnRpZmllZCBhbmQgbm8gaW1wbGVtZW50YXRpb24gb2YKKytDaGFDaGEyMCBzaG91bGQgYmUgYWxs b3dlZCBpbiBGSVBTIG1vZGUuIFdlIHN1Z2dlc3QgdGhlIHVzZSBvZiB0aGUgQUVTLUdDTQorK2Np cGhlciB3aGVuIG9wZXJhdGluZyB1bmRlciBGSVBTIG1vZGUgZm9yIG9wdGltYWwgcGVyZm9ybWFu Y2UuIAorKworK0hhcHB5IEV5ZWJhbGxzIFN1cHBvcnQgaW4gMTguNy4xIAorK0hhcHB5IEV5ZWJh bGxzIChSRkMgODMwNSkgaXMgZm9yIHVzZSBvbiBkdWFsIHN0YWNrIHN5c3RlbXMgbWVhbmluZyB0 aGF0IHRoZXkgaGF2ZSBib3RoIAorK0lQdjQgYW5kIElQdjYgVENQIHN0YWNrcy4gV2hlbiBlbmFi bGVkIHRoaXMgb3B0aW9uIHdpbGwgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlCisrdGFyZ2V0IG92ZXIg Ym90aCBJUHY0IGFuZCBJUHY2IHdpdGggcHJlZmVyZW5jZSBnaXZlbiB0byBJUHY2LiBUaGUgZmly c3QgY29ubmVjdGlvbiAKKyt0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgd2lsbCBiZSB1c2Vk LiBBbnkgb3V0c3RhbmRpbmcgY29ubmVjdGlvbiBhdHRlbXB0cyB3aWxsCisrYmUgY2xvc2VkLiBB cyBvZiB2ZXJzaW9uIDE4LjcuMSB0aGlzIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBzb21l d2hhdCBleHBlcmltZW50YWwuCisrCisrdXNhZ2U6CisrLW9IYXBweUV5ZXM9W1llc3xOb10gd2ls bCBlbmFibGUgSGFwcHkgRXllYmFsbHMuIFRoZSBkZWZhdWx0IGlzIG5vLiAKKystb0hhcHB5RGVs YXk9W05dIHdoZXJlIE4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGV4cHJlc3NlZCBpbiBtaWxsaXNl Y29uZHMuCisrICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAyNTBtcyBpcyBz dWdnZXN0ZWQgYnkgUkZDIDgzMDUuCisrCisrTVBUQ1AgU3VwcG9ydCBpbiAxOC43LjA6CisrTXVs dGlwYXRoIFRDUCBpcyBub3cgYXZhaWxhYmxlIGFzIGEgcnVudGltZSBvcHRpb24gZm9yIEhQTi1T U0guIE1QVENQCisraXMgYXZhaWxhYmxlIG9ubHkgb24gTGludXggYW5kIE1hYyBPU1ggb3BlcmF0 aW5nIHN5c3RlbXMuIFVzaW5nIE1QVENQIG9uIGEgc3lzdGVtIHRoYXQKKytkb2Vzbid0IHN1cHBv cnQgaXQgd2lsbCByZXN1bHQgaW4gYSBub3RpY2UgYW5kIGZhaWx1cmUuIFRoZSB1c2UgY2FzZXMg Zm9yIE1QVENQIGluY2x1ZGUKKytzZWFtbGVzcyBoYW5kb3ZlcnMgd2hlbiBjaGFuZ2luZyBuZXR3 b3JrcyBhbmQgYWdncmVnYXRpbmcgbXVsdGlwbGUgaW50ZXJmYWNlcyB0byBpbXByb3ZlCisrYXZh aWxhYmxlIGJhbmR3aWR0aC4gQXMgb2YgMTguNy4wIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBjb25z aWRlcmVkIHNvbWV3aGF0IGV4cGVyaW1lbnRhbC4KKysKKytVc2FnZToKKystb1VzZU1QVENQPVtZ ZXN8Tm9dIHdpbGwgZW5hYmxlIE1QVENQLiBUaGUgZGVmYXVsdCBpcyBuby4KKysKKytMaWJyZVNT TCBTdXBwb3J0OgorK0NoYW5nZXMgaW4gTGlicmVTU0wgdmVyc2lvbiAzLjUgYW5kIDMuNiBwcmV2 ZW50IHRoZSB1c2Ugb2YgdGhlIHRocmVhZGVkIEFFUyBDVFIgY2lwaGVyLgorK0luIHRob3NlIGNh c2VzIEhQTlNTSCB3aWxsIGZhbGxiYWNrIHRvIHRoZSBzZXJpYWwgdmVyc2lvbiBvZiB0aGUgQUVT IENUUiBjaXBoZXIuIEEgd2FybmluZworK2lzIHByaW50ZWQgdG8gc3RkZXJyLgorKworK0F1dG9t YXRpYyBQb3J0IEZhbGxiYWNrIChpbiB2ZXJzaW9uIDE3djMpCisrVGhlIGhwbnNzaCBjbGllbnQg bm93IHVzZXMgVENQIHBvcnQgMjIyMiB0byBjb25uZWN0IGF1dG9tYXRpY2FsbHkgYXMgdGhpcyBp cyB0aGUKKytkZWZhdWx0IGhwbnNzaGQgcG9ydC4gSG93ZXZlciwgd2UgdW5kZXJzdGFuZCB0aGF0 IG1hbnkgdXNlcnMgd2lsbCBiZSBlbmQgdXAgY29ubmVjdGluZworK3N0YW5kYXJkIFNTSCBzZXJ2 ZXJzIG9uIHBvcnQgMjIuIFRvIG1ha2UgdGhlIGVhc2llciBmb3IgdXNlcnMgdGhlIGNsaWVudCB3 aWxsIGZhbGwgYmFjayB0bworK3BvcnQgMjIgaW4gdGhlIGV2ZW50IHRoYXQgdGhlcmUgaXMgbm8g aHBuc3NoIHNlcnZlciBydW5uaW5nIG9uIHBvcnQgMjIyMi4gVGhlIGJlaGF2aW91ciBjYW4KKyti ZSBtb2RpZmVkIGFzIGZvbGxvd3M6CisrLW9GYWxsYmFjaz1beWVzfG5vXSB3aWxsIGVuYWJsZSBv ciBkaXNhYmxlIHBvcnQgZmFsbGJhY2suIERlZmF1bHQgaXMgeWVzLgorKy1vRmFsbGJhY2tQb3J0 PVtOXSB3aGVyZSBOIGlzIHRoZSBwb3J0IG51bWJlciB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBm YWxsIGJhY2suCisrICAgIERlZmF1bHQgaXMgMjIuCisrCisrVENQX0lORk8gTWV0cmljcworK1Ro aXMgZmVhdHVyZXMgYWxsb3dzIHRoZSBjbGllbnQgdG8gcmVxdWVzdCB0Y3AgbmV0d29ya2luZyBp bmZvcm1hdGlvbiBmcm9tIHRoZQorK1RDUF9JTkZPIHN0cnVjdC4gVGhpcyBpbmNsdWRlcyBkYXRh IG9uIHJldHJhbnNtaXRzLCByb3VuZCB0cmlwIHRpbWUsIGxvc3QgcGFja2V0cywKKytkYXRhIHRy YW5zZmVycmVkLCBhbmQgdGhlIGxpa2UuIFRoZSBtZXRyaWNzIGFyZSBwb2xsZWQgcGVyaW9kaWNh bGx5IHRocm91Z2ggdGhlCisrbGlmZSBvZiB0aGUgY29ubmVjdGlvbi4gQnkgZGVmYXVsdCB0aGlz IGlzIGV2ZXJ5IDUgc2Vjb25kcyBidXQgdXNlcnMgY2FuIHBpY2sgZGlmZmVyZW50CisrcG9sbGlu ZyBwZXJpb2RzLiBUaGUgcmVzdWx0aW5nIGRhdGEgaXMgc3RvcmVkIGluIHR3byBkaXN0aW5jdCBm aWxlczsgb25lIGZvciBsb2NhbAorK21ldHJpY3MgYW5kIG9uZSBmb3IgcmVtb3RlIG1ldHJpY3Mu IFJlbW90ZSBtZXRyaWNzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgcmVtb3RlCisrc3VwcG9y dHMgdGhpcyBmZWF0dXJlLiBUaGlzIGZlYXR1cmUgd2lsbCAqbm90KiBkaWFnbm9zZSBhIHBvb3Js eSBwZXJmb3JtaW5nIGNvbm5lY3Rpb24KKytidXQgbWF5IHByb3ZpZGUgaW5zaWdodCBpbnRvIHdo YXQgaXMgaGFwcGVuaW5nIGR1cmluZyB0aGUgY29ubmVjdGlvbi4KKysKKytVc2FnZToKKystb01l dHJpY3M9W3llc3xub10gd2lsbCBlbmFibGUgbWV0cmljcyBwb2xsaW5nLiBEZWZhdWx0OiBOby4K Kystb01ldHJpY3NJbnRlcnZhbD1bTl0gd2hlcmUgTiBpcyB0aGUgcG9sbGluZyBwZXJpb2QgaW4g c2Vjb25kcy4gRGVmYXVsdDogNSBzZWNvbmRzLgorKy1vTWV0cmljc1BhdGg9Wy9maWxlcGF0aC9m aWxlbmFtZV0gaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgdGhlIHJlbW90ZSBhbmQKKysg ICAgbG9jYWwgZGF0YSB3aWxsIGJlIHN0b3JlZC4gRGVmYXVsdDogLi9zc2hfc3RhY2tfbWV0cmlj cy5bbG9jYWx8cmVtb3RlXS4KKysgICAgQW55IG90aGVyIG9wdGlvbiBjaG9zZW4gYnkgdGhlIHVz ZXIgd2lsbCBoYXZlIGEgLmxvY2FsIG9yIC5yZW1vdGUgc3VmZml4IGFwcGVuZGVkIHRvIGl0Lgor KworK1RoZSBudW1iZXIgb2YgaW5zdHJ1bWVudHMgcG9sbGVkIGJ5IHRoaXMgZmVhdHVyZXMgaXMg ZGVwZW5kZW50IG9uIHRoZSBrZXJuZWwgb2YgdGhlIGhvc3QuCisrVGhpcyBtZWFucyB0aGF0IGEg cmVtb3RlIGhvc3Qgd2l0aCBhbiBvbGRlciBrZXJuZWwgbWF5IHJlcG9ydCBmZXdlciBpbnN0cnVt ZW50cyB0aGFuIGEgY2xpZW50CisraG9zdCBydW5uaW5nIGEgY3VycmVudCBrZXJuZWwgb3Igdmlj ZSB2ZXJzYS4gSWYgdGhlcmUgaXMgYSBkaXNjcmVwZW5jeSBpbiB0aGUgbnVtYmVyIG9mIGluc3Ry dW1lbnRzCisraW4gdGhlIHNzaF9zdGFja19tZXRyaWNzLmxvY2FsIGFuZCAucmVtb3RlIGZpbGUg dGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgcmVhc29uLgorKworK0FkZGl0aW9uYWxseSwgZGV0ZXJt aW5pbmcgd2hpY2ggZmlsZSByZXByZXNlbnRzIHNlbmRlciBzaWRlIHZlcnN1cyByZWNlaXZlciBz aWRlIGlzIGRlcGVuZGVudAorK29uIHRoZSBuYXR1cmUgb2YgdGhlIGNvbm5lY3Rpb24uIFRoZXJm b3JlLCBpdCdzIHVwIHRvIHRoZSB1c2VyIHRvIG1ha2UgdGhhdCBkZXRlcm1pbmF0aW9uLgorKwor K0xpbnV4IE5vdGU6IEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IGtl cm5lbCB2ZXJzaW9ucyAzLjcgYW5kIGdyZWF0ZXIuIE5ld2VyIGtlcm5lbHMKKyttYXkgaGF2ZSBt b3JlIGluc3RydW1lbnRzIGF2YWlsYWJsZSB0byBwb2xsIHRoYW4gb2xkZXIga2VybmVscy4KKysK KytGcmVlQlNEIE5vdGU6IFRoaXMgaXMgc3VwcG9ydGVkIG9uIFJlbGVhc2UgNiBhbmQgaGlnaGVy LiBIb3dldmVyLCBGcmVlQlNEIGhhcyBmZXdlciBhdmFpbGFibGUKKytpbnN0cnVtZW50cyB0aGFu IG5ldyBMaW51eCBrZXJuZWxzLgorKworK011bHRpcGxleGluZyBOb3RlOiBUaGUgbWV0cmljcyBh cmUgcmVwb3J0ZWQgZnJvbSB0aGUgVENQIHNvY2tldCB3aGljaCBtZWFucyB0aGF0IGdhdGhlcmlu ZworK21ldHJpY3MgZnJvbSBtdWx0aXBsZXhlZCBzZXNzaW9ucyB3aWxsIHJlcG9ydCBvbiB0aGUg YWN0aXZpdHkgb2YgYWxsIHNlc3Npb25zIG9uIHRoYXQgc29ja2V0LgorK1RoaXMgd2lsbCBsaWtl bHkgcmVzdWx0IGluIGxlc3MgY2xlYXIgcmVzdWx0cyBhbmQsIGFzIHN1Y2gsIHdlIHN1Z2dlc3Qg b25seSBnYXRoZXJpbmcgbWV0cmljcworK2Zyb20gbm9uLW11bHRpcGxleGVkIHNlc3Npb24uCisr CisrSFBOU0NQIHdpdGggUmVzdW1lIGZ1bmN0aW9uYWxpdHkKKytUaGlzIGZlYXR1cmUgYWxsb3dz IGhwbnNjcCB0byByZXN1bWUgZmFpbGVkIHRyYW5zZmVycy4gSW4gdGhlIGV2ZW50IG9mIGEgZmFp bGVkIHRyYW5zZmVyCisraXNzdWVzIHRoZSBzYW1lIHNjcCBjb21tYW5kIHdpdGggdGhlICctUicg b3B0aW9uLiBGb3IgZXhhbXBsZSAtIGlmIHlvdSBpc3N1ZWQ6CisrJ2hwbnNjcCBteWh1Z2VmaWxl IG1lQGhvc3Q6ficKKythbmQgaXQgZGllcyBoYWxmd2F5IHRocm91Z2ggdGhlIHRyYW5zZmVyIGlz c3VpbmcKKysnaHBuc2NwIC1aIG15aHVnZWZpbGUgbWVAaG9zdDp+JworK3dpbGwgcmVzdW1lIHRo ZSB0cmFuc2ZlciBhdCB0aGUgcG9pbnQgd2hlcmUgaXQgbGVmdCBvZmYuCisrCisrVGhpcyBpcyBp bXBsZW1lbnRlZCBieSBoYXZpbmcgdGhlIHNvdXJjZSBob3N0IHNlbmQgYSBoYXNoIChibGFrZTJi NTEyKSBvZiB0aGUgZmlsZSB0byB0aGUKKyt0YXJnZXQgaG9zdC4gVGhlIHRhcmdldCBob3N0IHRo ZW4gY29tcHV0ZXMgaXQncyBvd24gaGFzaCBvZiB0aGUgdGFyZ2V0IGZpbGUuIElmIHRoZSBoYXNo ZXMgbWF0Y2gKKyt0aGVuIHRoZSBmaWxlIGlzIHNraXBwZWQgYXMgdGhpcyBpbmRpY2F0ZXMgYSBz dWNjZXNzZnVsIHRyYW5zZmVyLiBIb3dldmVyLCBpZiB0aGUgaGFzaGVzIGRvIG5vdAorK21hdGNo IHRoZW4gdGhlIHRhcmdldCBzZW5kcyB0aGUgc291cmNlIGl0cyBoYXNoIGFsb25nIHdpdGggdGhl IHNpemUgb2YgdGhlIGZpbGUuIFRoZSBzb3VyY2UgdGhlbgorK2NvbXB1dGVzIHRoZSBoYXNoIG9m IHRoZSBmaWxlICp1cCB0byogdGhlIHNpemUgb2YgdGhlIHRhcmdldCBmaWxlLiBJZiB0aG9zZSBo YXNoZXMgbWF0Y2ggdGhlbgorK3RoZSBzb3VyY2Ugb25seSBzZW5kIHRoZSBuZWNlc3NhcnkgYnl0 ZXMgdG8gY29tcGxldGUgdGhlIHRyYW5zZmVyLiBJZiB0aGUgaGFzaGVzIGRvIG5vdCBtYXRjaCB0 aGVuCisrdGhlIGVudGlyZSBmaWxlIGlzIHJlc2VudC4gSWYgdGhlIHRhcmdldCBmaWxlIGlzIGxh cmdlciB0aGVuIHRoZSBzb3VyY2UgZmlsZSB0aGVuIHRoZSBlbnRpcmUKKytzb3VyY2UgZmlsZSBp cyBzZW50IGFuZCBhbnkgZXhpc3RpbmcgdGFyZ2V0IGZpbGUgaXMgb3ZlcndyaXR0ZW4uCisrCisr TVVMVEktVEhSRUFERUQgQUVTIENJUEhFUjoKKytUaGUgQUVTIGNpcGhlciBpbiBDVFIgbW9kZSBo YXMgYmVlbiBtdWx0aXRocmVhZGVkIChNVFItQUVTLUNUUikuIFRoaXMgd2lsbCBhbGxvdyBzc2gg aW5zdGFsbGF0aW9ucworK29uIGhvc3RzIHdpdGggbXVsdGlwbGUgY29yZXMgdG8gdXNlIG1vcmUg dGhhbiBvbmUgcHJvY2Vzc2luZyBjb3JlIGR1cmluZyBlbmNyeXB0aW9uLgorK1Rlc3RzIGhhdmUg c2hvdyBzaWduaWZpY2FudCB0aHJvdWdocHV0IHBlcmZvcm1hbmNlIGluY3JlYXNlcyB3aGVuIHVz aW5nIE1UUi1BRVMtQ1RSIHVwCisrdG8gYW5kIGluY2x1ZGluZyBhIGZ1bGwgZ2lnYWJpdCBwZXIg c2Vjb25kIG9uIHF1YWQgY29yZSBzeXN0ZW1zLiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8KKyth Y2hpZXZlIGZ1bGwgbGluZSByYXRlIG9uIGR1YWwgY29yZSBzeXN0ZW1zIGJ1dCBPUyBhbmQgZGF0 YSBtYW5hZ2VtZW50IG92ZXJoZWFkIG1ha2VzIHRoaXMKKyttb3JlIGRpZmZpY3VsdCB0byBhY2hp ZXZlLiBUaGUgY2lwaGVyIHN0cmVhbSBmcm9tIE1UUi1BRVMtQ1RSIGlzIGVudGlyZWx5IGNvbXBh dGlibGUgd2l0aCBzaW5nbGUKKyt0aHJlYWQgQUVTLUNUUiAoU1QtQUVTLUNUUikgaW1wbGVtZW50 YXRpb25zIGFuZCBzaG91bGQgYmUgMTAwJSBiYWNrd2FyZCBjb21wYXRpYmxlLiBPcHRpbWFsCisr cGVyZm9ybWFuY2UgcmVxdWlyZXMgdGhlIE1UUi1BRVMtQ1RSIG1vZGUgYmUgZW5hYmxlZCBvbiBi b3RoIGVuZHMgb2YgdGhlIGNvbm5lY3Rpb24uCisrVGhlIE1UUi1BRVMtQ1RSIHJlcGxhY2VzIFNU LUFFUy1DVFIgYW5kIGlzIHVzZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgd2l0aCB0aGUgc2Ft ZQorK25vbWVuY2xhdHVyZS4KKytVc2FnZSBleGFtcGxlczoKKysJCXNzaCAtY2FlczEyOC1jdHIg eW91QGhvc3QuY29tCisrCQlzY3AgLW9DaXBoZXI9YWVzMjU2LWN0ciBmaWxlIHlvdUBob3N0LmNv bTp+L2ZpbGUKKysKKytNVUxUSS1USFJFQURFRCBDaGFDaGEyMC1Qb2x5MTMwNSBDSVBIRVI6Cisr VGhlIGRlZmF1bHQgY2lwaGVyIHVzZWQgYnkgSFBOLVNTSCBpcyBub3cgYSB0aHJlYWRlZCBpbXBs ZW1lbnRhdGlvbiBvZiB0aGUKKytDaGFDaGEyMC1Qb2x5MTMwNSBjaXBoZXIuIEluIHRlc3RzIHRo aXMgY2lwaGVyIHJlc3VsdHMgaW4gYW4gYXBwcm94aW1hdGVseSA5MCUgZ2FpbiBpbgorK3Rocm91 Z2hwdXQgcGVyZm9ybWFuY2UgaW4gY29tcGFyaXNvbiB0byB0aGUgc2VyaWFsIGltcGxlbWVudGF0 aW9uIGZvdW5kIGluIE9wZW5TU0guCisrVGhpcyBjaXBoZXIgaXMgZnVsbHkgY29tcGF0aWJsZSB3 aXRoIGFsbCBrbm93biBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgb2YgQ2hhQ2hhMjAtUG9seTEz MDUuCisrCisrSW50ZXJuYWxseSB0aGlzIGNpcGhlciBpcyByZWZlcnJlZCB0byBhcyBjaGFjaGEy MC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIChDQzIwLU1UKQorK3NpbWlsYXIgdG8gaG93IHRoZSBP cGVuU1NIIGltcGxlbWVudGF0aW9uIGlzIGtub3duIGFzIGNoYWNoYTIwLXBvbHkxMzA1QG9wZW5z c2guY29tCisrKENDMjAtUyAoZm9yIHNlcmlhbCkpLiBObyBjaGFuZ2VzIGFyZSByZXF1aXJlZCBv biB0aGUgcGFydCBvZiB0aGUgdXNlciB0byBtYWtlIHVzZSBvZiBDQzIwLU1ULgorK0hvd2V2ZXIs IGlmIHRoZSB1c2VycyBkb2Vzbid0IHdhbnQgdG8gbWFrZSB1c2Ugb2YgdGhpcyBjaXBoZXIgdGhl eSBjYW4gZXhwbGljaXRseSBsb2FkIENDMjAtUyB1c2luZworKyctY2NoYWNoMjAtcG9seTEzMDVA b3BlbnNzaC5jb21gIG9uIHRoZSBjb21tYW5kIGxpbmUuCisrCisrTk9ORSBDSVBIRVI6CisrVG8g dXNlIHRoZSBOT05FIG9wdGlvbiB5b3UgbXVzdCBoYXZlIHRoZSBOb25lRW5hYmxlZCBzd2l0Y2gg c2V0IG9uIHRoZSBzZXJ2ZXIgYW5kCisreW91ICptdXN0KiBoYXZlICpib3RoKiBOb25lRW5hYmxl ZCBhbmQgTm9uZVN3aXRjaCBzZXQgdG8geWVzIG9uIHRoZSBjbGllbnQuIFRoZSBOT05FCisrZmVh dHVyZSB3b3JrcyB3aXRoIEFMTCBzc2ggc3Vic3lzdGVtcyAoYXMgZmFyIGFzIHdlIGNhbiB0ZWxs KSAqQVMgTE9ORyBBUyogYSB0dHkgaXMgbm90Cisrc3Bhd25lZC4gSWYgYSB1c2VyIHVzZXMgdGhl IC1UIHN3aXRjaCB0byBwcmV2ZW50IGEgdHR5IGJlaW5nIGNyZWF0ZWQgdGhlIE5PTkUgY2lwaGVy IHdpbGwKKytiZSBkaXNhYmxlZC4KKysKKytUaGUgcGVyZm9ybWFuY2UgaW5jcmVhc2Ugd2lsbCBv bmx5IGJlIGFzIGdvb2QgYXMgdGhlIG5ldHdvcmsgYW5kIFRDUCBzdGFjayB0dW5pbmcKKytvbiB0 aGUgcmVjaWV2ZXIgc2lkZSBvZiB0aGUgY29ubmVjdGlvbiBhbGxvd3MuIEFzIGEgcnVsZSBvZiB0 aHVtYiBhIHVzZXIgd2lsbCBuZWVkCisrYXQgbGVhc3QgMTBNYi9zIGNvbm5lY3Rpb24gd2l0aCBh IDEwMG1zIFJUVCB0byBzZWUgYSBkb3VibGluZyBvZiBwZXJmb3JtYW5jZS4gVGhlCisrSFBOLVNT SCBob21lIHBhZ2UgZGVzY3JpYmVzIHRoaXMgaW4gZ3JlYXRlciBkZXRhaWwuCisrCisraHR0cDov L3d3dy5wc2MuZWR1L25ldHdvcmtpbmcvcHJvamVjdHMvaHBuLXNzaAorKworK05PTkUgTUFDOgor K1N0YXJ0aW5nIHdpdGggSFBOIDE1djEgdXNlcnMgd2lsbCBoYXZlIHRoZSBvcHRpb24gdG8gZGlz YWJsZSBITUFDIChtZXNzYWdlCisrYXV0aGVudGljYXRpb24gY2lwaGVycykgd2hlbiB1c2luZyB0 aGUgTk9ORSBjaXBoZXIuIFlvdSBtdXN0IGVuYWJsZSB0aGUgZm9sbG93aW5nOgorK05vbmVFbmFi bGVkLCBOb25lU3dpdGNoLCBhbmQgTm9uZU1hY0VuYWJsZWQuIElmIGFsbCB0aHJlZSBhcmUgbm90 IGVuYWJsZWQgdGhlIE5vbmUgTUFDCisrd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLiBJ biB0ZXN0cyB0aGUgdXNlIG9mIHRoZSBOb25lIE1BQyBpbXByb3ZlZCB0aHJvdXB1dCBieQorK21v cmUgdGhhbiAzMCUuCisrCisrZXg6IHNjcCAtb05vbmVTd2l0Y2g9eWVzIC1vTm9uZUVuYWJsZWQ9 eWVzIC1vTm9uZU1hY0VuYWJsZWQ9eWVzIGZpbGUgaG9zdDp+CisrCisrSFBOIFNwZWNpZmljIENv bmZpZ3VyYXRpb24gb3B0aW9ucworKworK1RjcFJjdkJ1ZlBvbGw9W3llcy9ub10gY2xpZW50L3Nl cnZlcgorKyAgICAgIEVuYWJsZSBvZiBkaXNhYmxlIHRoZSBwb2xsaW5nIG9mIHRoZSB0Y3AgcmVj ZWl2ZSBidWZmZXIgdGhyb3VnaCB0aGUgbGlmZQorK29mIHRoZSBjb25uZWN0aW9uLiBZb3Ugd291 bGQgd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkCisrZm9yIHN5 c3RlbXMgbWFraW5nIHVzZSBvZiBhdXRvdHVuaW5nIGtlcm5lbHMgKGxpbnV4IDIuNC4yNCssIDIu NiwgTVMgVmlzdGEpCisrZGVmYXVsdCBpcyB5ZXMuCisrCisrTm9uZUVuYWJsZWQ9W3llcy9ub10g Y2xpZW50L3NlcnZlcgorKyAgICAgIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5v bmUgY2lwaGVyLiBDYXJlIG11c3QgYWx3YXlzIGJlIHVzZWQKKyt3aGVuIGVuYWJsaW5nIHRoaXMg YXMgaXQgd2lsbCBhbGxvdyB1c2VycyB0byBzZW5kIGRhdGEgaW4gdGhlIGNsZWFyLiBIb3dldmVy LAorK2l0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgYXV0aGVudGljYXRpb24gaW5mb3JtYXRp b24gcmVtYWlucyBlbmNyeXB0ZWQKKytldmVuIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIFNl dCB0byBubyBieSBkZWZhdWx0LgorKworK05vbmVNYWNFbmFibGVkPVt5ZXMvbm9dIGNsaWVudC9z ZXJ2ZXIKKysgICAgICBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIE1BQy4g V2hlbiB0aGlzIGlzIGVuYWJsZWQgc3NoCisrd2lsbCAqbm90KiBwcm92aWRlIGRhdGEgaW50ZWdy aXR5IG9mIGFueSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkIGJldHdlZW4gaG9zdHMuIFVzZQorK3dp dGggY2F1dGlvbiBhcyBpdCwgdW5saWtlIGp1c3QgdXNpbmcgTm9uZUVuYWJsZWQsIGRvZXNuJ3Qg cHJvdmlkZSBkYXRhIGludGVncml0eSBhbmQKKytwcm90ZWN0aW9uIGFnYWluc3QgbWFuLWluLXRo ZS1taWRkbGUgYXR0YWNrcy4gQXMgd2l0aCBOb25lRW5hYmxlZCBhbGwgYXV0aGVudGljYXRpb24K KytyZW1haW5zIGVuY3J5cHRlZCBhbmQgaW50ZWdyaXR5IGlzIGVuc3VyZWQuIERlZmF1bHQgaXMg bm8uCisrCisrTm9uZVN3aXRjaD1beWVzL25vXSBjbGllbnQKKysgICAgIFN3aXRjaCB0aGUgZW5j cnlwdGlvbiBjaXBoZXIgYmVpbmcgdXNlZCB0byB0aGUgTm9uZSBjaXBoZXIgYWZ0ZXIKKythdXRo ZW50aWNhdGlvbiB0YWtlcyBwbGFjZS4gTm9uZUVuYWJsZWQgbXVzdCBiZSBlbmFibGVkIG9uIGJv dGggdGhlIGNsaWVudAorK2FuZCBzZXJ2ZXIgc2lkZSBvZiB0aGUgY29ubmVjdGlvbi4gV2hlbiB0 aGUgY29ubmVjdGlvbiBzd2l0Y2hlcyB0byB0aGUgTk9ORQorK2NpcGhlciBhIHdhcm5pbmcgaXMg c2VudCB0byBTVERFUlIuIFRoZSBjb25uZWN0aW9uIGF0dGVtcHQgd2lsbCBmYWlsIHdpdGggYW4K KytlcnJvciBpZiBhIGNsaWVudCByZXF1ZXN0cyBhIE5vbmVTd2l0Y2ggZnJvbSB0aGUgc2VydmVy IHRoYXQgZG9lcyBub3QgZXhwbGljaXRseQorK2hhdmUgTm9uZUVuYWJsZWQgc2V0IHRvIHllcy4g Tm90ZTogVGhlIE5PTkUgY2lwaGVyIGNhbm5vdCBiZSB1c2VkIGluCisraW50ZXJhY3RpdmUgKHNo ZWxsKSBzZXNzaW9ucyBhbmQgaXQgd2lsbCBmYWlsIHNpbGVudGx5LiBTZXQgdG8gbm8gYnkgZGVm YXVsdC4KKysKKytIUE5EaXNhYmxlZD1beWVzL25vXSBjbGllbnQvc2VydmVyCisrICAgICBJbiBz b21lIHNpdHVhdGlvbnMsIHN1Y2ggYXMgdHJhbnNmZXJzIG9uIGEgbG9jYWwgYXJlYSBuZXR3b3Jr LCB0aGUgaW1wYWN0Cisrb2YgdGhlIEhQTiBjb2RlIHByb2R1Y2VzIGEgbmV0IGRlY3JlYXNlIGlu IHBlcmZvcm1hbmNlLiBJbiB0aGVzZSBjYXNlcyBpdCBpcworK2hlbHBmdWwgdG8gZGlzYWJsZSB0 aGUgSFBOIGZ1bmN0aW9uYWxpdHkuIEJ5IGRlZmF1bHQgSFBORGlzYWJsZWQgaXMgc2V0IHRvIG5v LgorKworK0NyZWRpdHM6IFRoaXMgcGF0Y2ggd2FzIGNvbmNlaXZlZCwgZGVzaWduZWQsIGFuZCBs ZWQgYnkgQ2hyaXMgUmFwaWVyIChyYXBpZXJAcHNjLmVkdSkKKysgICAgICAgICBUaGUgbWFqb3Jp dHkgb2YgdGhlIGFjdHVhbCBjb2RpbmcgZm9yIHZlcnNpb25zIHVwIHRvIEhQTjEydjEgd2FzIHBl cmZvcm1lZAorKyAgICAgICAgIGJ5IE1pY2hhZWwgU3RldmVucyAobXN0ZXZlbnNAYW5kcmV3LmNt dS5lZHUpLiBUaGUgTVQtQUVTLUNUUiBjaXBoZXIgd2FzCisrICAgICAgICAgaW1wbGVtZW50ZWQg YnkgQmVuIEJlbm5ldCAoYmVuQHBzYy5lZHUpIGFuZCBpbXByb3ZlZCBieSBNaWtlIFRhc290YQor KyAgICAgICAgICh0YXNvdGFAZ21haWwuY29tKSBhbiBOU0YgUkVVIGdyYW50IHJlY2lwaWVudCBm b3IgMjAxMy4KKysJIEFsbGFuIEp1ZGUgcHJvdmlkZWQgdGhlIGNvZGUgZm9yIHRoZSBOb25lTWFj IGFuZCBidWZmZXIgbm9ybWFsaXphdGlvbi4KKysgICAgICAgICBUaGlzIHdvcmsgd2FzIGZpbmFu Y2VkLCBpbiBwYXJ0LCBieSBDaXNjbyBTeXN0ZW0sIEluYy4sIHRoZSBOYXRpb25hbAorKyAgICAg ICAgIExpYnJhcnkgb2YgTWVkaWNpbmUsIGFuZCB0aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0 aW9uLgorKworK1Nwb25zb3JzOiBUaGFua3MgdG8gTmlrbGFzIEhhbWJ1Y2hlbiBmb3IgYmVpbmcg dGhlIGZpcnN0IHNwb25zb3Igb2YgSFBOLVNTSAorKwkgIHZpYSBnaXRodWIncyBzcG9uc29yIHBy b2dyYW0hCisrCisrCisrRWRpdGVkOiBTZXB0ZW1iZXIgMTksIDIwMjUKK2RpZmYgLU51ciBvcGVu c3NoLTEwLjVwMS5vcmlnL0hQTlNTSEluc3RhbGxhdGlvbi50eHQgb3BlbnNzaC0xMC41cDEvSFBO U1NISW5zdGFsbGF0aW9uLnR4dAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvSFBOU1NISW5zdGFs bGF0aW9uLnR4dAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2gtMTAuNXAxL0hQTlNTSEluc3RhbGxhdGlvbi50eHQJMjAyNi0wOS0yMSAwNzowNjo1OS44ODg1 MzAyMTMgKzAyMDAKK0BAIC0wLDAgKzEsMzYxIEBACisr77u/SFBOLVNTSCBJbnN0YWxsYXRpb24K KysKKytUaGUgcHJvY2VzcyBvZiBpbnN0YWxsaW5nIEhQTi1TU0ggZnJvbSBzb3VyY2UgaXMgYSBy ZWxhdGl2ZWx5IHBhaW5sZXNzIHByb2Nlc3MKKytidXQgZG9lcyBoYXZlIHNvbWUgbnVhbmNlcy4g VGhpcyBkb2N1bWVudCB3aWxsIGdvIHRocm91Z2ggdGhlIHByb2Nlc3Mgc3RlcCBieQorK3N0ZXAg dG8gaGVscCB5b3UgZ2V0IHRoZSBtb3N0IGZyb20geW91ciBpbnN0YWxsYXRpb24uIElmIHlvdSBm aW5kIGFueSBlcnJvcnMKKytwbGVhc2UgY29udGFjdCB1cyBhdCBocG5zc2hAcHNjLmVkdS4KKysK KysKKytTdGVwIDE6IEdldCB0aGUgc291cmNlIGNvZGUuCisrCisrVGhlIG9mZmljaWFsIHJlcG9z aXRvcnkgZm9yIEhQTi1TU0ggaXMgZm91bmQgYXQKKytodHRwczovL2dpdGh1Yi5jb20vcmFwaWVy MS9ocG4tc3NoLiBHZXQgYSBjb3B5IHdpdGgKKysiZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNv bS9yYXBpZXIxL2hwbi1zc2jigJ0uCisrCisrCisrU3RlcCAyOiBJbnN0YWxsIGRlcGVuZGVuY2ll cy4KKysKKytXaGF0IHlvdSBuZWVkIHRvIGluc3RhbGwgaXMgZGVwZW5kZW50IG9uIHlvdXIgZGlz dHJpYnV0aW9uIGJ1dCB3aWxsIGluY2x1ZGU6CisrKiBPcGVuU1NMIGRldmVsb3BtZW50IHBhY2th Z2UKKysgICAqIERlYmlhbjogbGlic3NsLWRldgorKyAgICogRmVkb3JhOiBvcGVuc3NsLWRldmVs CisrICAgKiBPcGVuU1NMIG11c3QgYmUgYnVpbHQgd2l0aCB0aHJlYWQgc3VwcG9ydC4gVGhpcyBp cyB0aGUgZGVmYXVsdCwgc28KKysgICAgIHBhY2thZ2VkIHZlcnNpb25zIHdpbGwgd29yay4gSWYg eW91IGJ1aWxkIE9wZW5TU0wgeW91cnNlbGYsIGRvIG5vdAorKyAgICAgcGFzcyAibm8tdGhyZWFk cyIgdG8gaXRzIGNvbmZpZyBzY3JpcHQuIEhQTi1TU0ggdXNlcyB0aHJlYWRzIGZvciB0aGUKKysg ICAgIHBhcmFsbGVsIENoYUNoYTIwIGFuZCBBRVMtQ1RSIGNpcGhlcnMsIGFuZCB3aXRob3V0IHRo cmVhZCBzdXBwb3J0IGluCisrICAgICBPcGVuU1NMIHNlc3Npb25zIGNhbiBhYm9ydCB3aXRoIGEg bWVtb3J5IGVycm9yIGR1cmluZyB0cmFuc2ZlcnMuCisrICAgICBUbyBjaGVjayBhbiBpbnN0YWxs YXRpb24geW91IGFscmVhZHkgaGF2ZToKKysgICAgICAgIGdyZXAgLXIgT1BFTlNTTF9USFJFQURT IDxvcGVuc3NsLXByZWZpeD4vaW5jbHVkZS9vcGVuc3NsLworKyogQWx0ZXJuYXRpdmVseSB5b3Ug Y2FuIHVzZSBMSWJyZVNTTAorKyAgICogSG93ZXZlciwgaW4gdGhpcyBjYXNlIHdlIHN1Z2dlc3Qg Y29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nIGxpYnJlc3NsIG1hbnVhbGx5IGFzCisrICAgICB0aGVy ZSBhcmUgZmV3IG1haW50YWluZWQgbGludXggcGFja2FnZXMgZm9yIExpYnJlU1NMLgorKyAgICog QWxzbywgTGlicmVTU0wgdjMuNSBhbmQgdjMuNiBkbyBub3Qgc3VwcG9ydCB0aGUgdGhyZWFkZWQg QUVTLUNUUiBjaXBoZXIuCisrICAgICBJZiB0aGF04oCZcyBpbXBvcnRhbnQgdG8geW91IHRoZW4g eW91IHNob3VsZCB1c2UgT3BlblNTTC4KKysqIFogY29tcHJlc3Npb24gbGlicmFyeQorKyAgICog RGViaWFuOiB6bGliMWctZGV2CisrICAgKiBGZWRvcmE6IHpsaWItZGV2ZWwKKysqIEF1dG9jb25m CisrKiBBdXRvbWFrZQorKworKworK1N0ZXAgMzogSW5zdGFsbCBvcHRpb25hbCBkZXBlbmRlbmNp ZXMuCisrCisrVGhpcyBvcHRpb25hbCBsaWJyYXJpZXMgd2lsbCBleHRlbmQgdGhlIGZ1bmN0aW9u YWxpdHkgb2YgSFBOLVNTSCB0byBhbGxvdyB0aGUgdXNlIG9mIFBBTQorK2F1dGhlbnRpY2F0aW9u LCBLZXJiZXJvcywgZ3JhcGhpY2FsIHBhc3N3b3JkIHRvb2xzLCBldGMuCisrKiBQQU0KKysqIEtl cmJlcm9zCisrKiBHVEsKKysKKysKKytTdGVwIDQ6IEJ1aWxkIHRoZSBjb25maWd1cmUgZmlsZQor KworK2dlbmVyYXRlIC4vY29uZmlndXJlIHdpdGgg4oCcYXV0b3JlY29uZiAtZiAtaeKAnQorKwor KworK1N0ZXAgNTogQ29uZmlndXJhdGlvbgorKworK0NvbmZpZ3VyZSB0aGUgaW5zdGFsbGF0aW9u LiBZb3UgY2FuIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZG8gdGhpcyBieQor K2lzc3Vpbmcg4oCcLi9jb25maWd1cmUgLS1oZWxw4oCdLiBIb3dldmVyLCBjb21tb25seSB5b3Ug d2lsbCB3YW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24KKytsb2NhdGlvbiBv ZiB0aGUgYmluYXJpZXMuIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCDigJwtLXByZWZpeD0vW2Rlc2ly ZWRfcGF0aF3igJ0uIEZvciBleGFtcGxlLAorK2lmIHlvdSB3YW50IHRoZSBiaW5hcmllcyBpbnN0 YWxsZWQgaW50byAvdXNyL2JpbiBhcyBvcHBvc2VkIHRvIHRoZSBkZWZhdWx0IG9mCisrL3Vzci9s b2NhbC9iaW4geW914oCZZCB1c2Ug4oCcLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzcuKAnS4gT3Ro ZXIgY29tbW9uIG9wdGlvbnMgd291bGQgYmUgdG8KKytpbmNvcnBvcmF0ZSBwYW0sIGtlcmJlcm9z LCBhbHRlcm5hdGl2ZSBTU0wgbGlicmFyaWVzLCBhbmQgc28gZm9ydGguIEhvd2V2ZXIsIGZvciBt b3N0IHVzZXJzCisrZWl0aGVyIG5vIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG9y IG1vZGlmeWluZyB0aGUgcHJlZml4IHdpbGwgc3VmZmljZS4KKysKKysKKytTdGVwIDY6IE1ha2UK KysKKytNYWtlIHRoZSBhcHBsaWNhdGlvbiB3aXRoIOKAnG1ha2UgLWpbbnVtIGNvcmVzXeKAnS4g U28gaWYgeW91IGhhdmUgYW4gOCBjb3JlIHN5c3RlbQorK3lvdeKAmWQgdXNlIOKAnG1ha2UgLWo4 4oCdCisrCisrCisrU3RlcCA3OiBTZXQgdXAgdGhlIGhwbnNzaGQgdXNlci4gCisrCisrVGhpcyB1 c2VyIGlzIHBhcnQgb2YgdGhlIHByaXZpbGVnZSBzZXBhcmF0aW9uIHJvdXRpbmVzIHVzZWQgaW4g dGhlIAorK3ByZS1hdXRoZW50aWNhdGlvbiBzYW5kYm94LiBJIHN1Z2dlc3QgdXNpbmcgdGhlIGZv bGxvd2luZyBjb21tYW5kOiAKKysKKytzdWRvIHVzZXJhZGQgLS1zeXN0ZW0gLS1zaGVsbCAvdXNy L3NiaW4vbm9sb2dpbiAtLWNvbW1lbnQ9IlByaXZpbGVnZSBzZXBhcmF0ZWQgSFBOU1NIIFVzZXIi IFwgCisrLS1ob21lPS9ydW4vaHBuc3NoZCBocG5zc2hkCisrCisrQWx0ZXJuYXRpdmVseSwgeW91 IGNhbiB1c2UgdmlwdyB0byBhZGQgdGhlIHVzZXIgbWFudWFsbHkuIAorKworKworK1N0ZXAgODog SW5zdGFsbGF0aW9uCisrCisrQWZ0ZXIgSFBOLVNTSCBzdWNjZXNzZnVsbHkgYnVpbGRzLCBpbnN0 YWxsIGl0IHdpdGgg4oCcc3VkbyBtYWtlIGluc3RhbGzigJ0uIFRoaXMgd2lsbCBpbnN0YWxsIHRo ZQorK2JpbmFyaWVzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZ2VuZXJhdGUgdGhlIHVuaXF1 ZSBob3N0IGtleXMgdXNlZC4gQXQgdGhpcyBwb2ludCB5b3UgY2FuCisrbWFrZSBjaGFuZ2VzIHRv IHRoZSBzc2ggY2xpZW50IGFuZCBzZXJ2ZXIgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBUaGVzZSBm aWxlcyBhcmUKKytmb3VuZCwgZ2VuZXJhbGx5LCBpbiAvZXRjL2hwbnNzaC9zc2hfY29uZmlnIGFu ZCBzc2hkX2NvbmZpZyByZXNwZWN0aXZlbHkuIFlvdSBtYXkgd2FudCB0bworK2NoYW5nZSB0aGUg ZGVmYXVsdCBwb3J0IGZyb20gMjIyMiB0byBzb21lIG90aGVyIHZhbHVlLiBZb3UgbWF5IGFsc28g d2FudCB0byBlbmFibGUgdGhlCisrTm9uZUNpcGhlciBhbmQgTm9uZU1hYyBvcHRpb25zLiBGb3Ig bW9yZSBpbmZvcm1hdGlvbiB1c2Ug4oCcbWFuIGhwbnNzaGRfY29uZmln4oCdIGFuZAorK+KAnG1h biBocG5zc2hfY29uZmln4oCdLiBOb3RlOiBUaGUgaHBuc3NoIGNsaWVudCBleHBlY3RzIHRoZSBz ZXJ2ZXIgdG8gYmUgb24gcG9ydCAyMjIyIGJ1dCB3aWxsCisrZmFsbGJhY2sgdG8gMjIgaWYgaXTi gJlzIG5vdCBmb3VuZCB0aGVyZS4gU28gaWYgeW91IGRvIGNoYW5nZSB0aGUgZGVmYXVsdCBwb3J0 IHlvdeKAmWxsIG5lZWQgdG8KKyttYWtlIHN1cmUgdGhlIGNsaWVudHMgcG9pbnQgYXQgdGhlIGNv cnJlY3QgcG9ydC4KKysKKytTdGVwIDk6IEZpbmlzaGluZyB1cC4KKysKKytBdCB0aGlzIHBvaW50 IHlvdSBjYW4gc3RhcnQgaHBuc3NoZCBtYW51YWxseSBieSBydW5uaW5nIOKAnHN1ZG8gL3Vzci9z YmluL2hwbnNzaGTigJ0KKytvciB3aGF0ZXZlciB0aGUgZnVsbCBwYXRoIHRvIHRoZSBocG5zc2hk IGJpbmFyeSBtaWdodCBiZS4gSG93ZXZlciwgdGhpcyB3b27igJl0CisrcmVzdGFydCBhdXRvbWF0 aWNhbGx5IG9uIHJlYm9vdC4gVG8gZG8gdGhpcyB5b3XigJlsbCBuZWVkIHRvIGluc3RhbGwgYW4g YXBwcm9wcmlhdGUKKytzeXN0ZW1kIGNvbmZpZ3VyYXRpb24gZmlsZS4gSWYgdGhhdCBzZWVtcyBs aWtlIGEgZ29vZCBpZGVhIHRvIHlvdSB0aGVuIGZvbGxvd2luZyBzdGVwcyBtYXkgYmUKKytvZiBo ZWxwLiBPdGhlcndpc2UsIHlvdSBhcmUgZG9uZS4gRW5qb3khCisrCisrCisrU3RlcCAxMDogSW5z dGFsbGluZyBhIHN5c3RlbWQgc3RhcnR1cCBmaWxlLgorKworK1RoZSBjb3JyZWN0IHN5c3RlbWQg c3RhcnR1cCBmaWxlIGRlcGVuZHMgb24gdGhlIGRpc3RyaWJ1dGlvbiB5b3UgYXJlIHVzaW5nLiBG b3Igc3lzdGVtCisrdXNpbmcgc3lzdGVtZCAoeW91IHN0YXJ0IGEgc2VydmljZSB3aXRoIHN5c3Rl bWN0bCkgY3JlYXRlIGEgZmlsZSBhdCAvbGliL3N5c3RlbWQvc3lzdGVtL2hwbnNzaGQuc2Vydmlj ZQorK3dpdGggdGhlIGZvbGxvd2luZyBjb250ZW50cyBOQjogeW91IG1heSBuZWVkIHRvIHVwZGF0 ZSB0aGUgcGF0aHMgdG8gbWF0Y2ggeW91ciBpbnN0YWxsYXRpb246CisrCisrW1VuaXRdCisrRGVz Y3JpcHRpb249SFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcgorK0RvY3VtZW50YXRpb249 bWFuOmhwbnNzaGQoOCkgbWFuOmhwbnNzaGRfY29uZmlnKDUpCisrQWZ0ZXI9bmV0d29yay50YXJn ZXQgYXVkaXRkLnNlcnZpY2UKKytDb25kaXRpb25QYXRoRXhpc3RzPSEvZXRjL2hwbnNzaC9zc2hk X25vdF90b19iZV9ydW4KKysKKytbU2VydmljZV0KKytFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVm YXVsdC9ocG5zc2gKKytFeGVjU3RhcnRQcmU9L3Vzci9zYmluL2hwbnNzaGQgLXQKKytFeGVjU3Rh cnQ9L3Vzci9zYmluL2hwbnNzaGQgLUQgJFNTSERfT1BUUworK0V4ZWNSZWxvYWQ9L3Vzci9zYmlu L2hwbnNzaGQgLXQKKytFeGVjUmVsb2FkPS9iaW4va2lsbCAtSFVQICRNQUlOUElECisrS2lsbE1v ZGU9cHJvY2VzcworK1Jlc3RhcnQ9b24tZmFpbHVyZQorK1Jlc3RhcnRQcmV2ZW50RXhpdFN0YXR1 cz0yNTUKKytUeXBlPW5vdGlmeQorK1J1bnRpbWVEaXJlY3Rvcnk9aHBuc3NoZAorK1J1bnRpbWVE aXJlY3RvcnlNb2RlPTA3NTUKKysKKytbSW5zdGFsbF0KKytXYW50ZWRCeT1tdWx0aS11c2VyLnRh cmdldAorK0FsaWFzPWhwbnNzaGQuc2VydmljZQorKworK0FsdGVybmF0aXZlbHksIHRoZSAuL2Nv bmZpZ3VyZSBjb21tYW5kIHdpbGwgZ2VuZXJhdGUgYSBocG5zc2hkLnNlcnZpY2UgZmlsZSBmcm9t CisraHBuc3NoZC5zZXJ2aWNlLmluLiBZb3UgY2FuIHVzZSB0aGlzIGZpbGUgYnkgY29weWluZyBp dCB0bworKy9saWJzeXN0ZW1kL3N5c3RlbS9ocG5zc2hkLnNlcnZpY2UgaW5zdGVhZCBvZiBjb3B5 aW5nIHRoZSBhYm92ZSB0ZXh0LgorKworK1RoZW4gY3JlYXRlIHRoZSBkZWZhdWx0cyBmaWxlIGF0 IC9ldGMvZGVmYXVsdC9ocG5zc2hkIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50OgorKyMgRGVm YXVsdCBzZXR0aW5ncyBmb3Igb3BlbnNzaC1zZXJ2ZXIuCisrIyBPcHRpb25zIHRvIHBhc3MgdG8g c3NoZAorK1NTSERfT1BUUz0KKysKKytFbnRlciBhbnkgcnVudGltZSBvcHRpb25zIHlvdSB3YW50 IG9uIHRoZSBTU0hEX09QVFMgbGluZS4gSWYgeW91IGNhbuKAmXQgdGhpbmsgb2YgYW55LCBzaW1w bHkKKytsZWF2ZSBpdCBibGFuay4gQSBzYW1wbGUgL2V0Yy9kZWZhdWxzL2hwbnNzaCBmaWxlIG1h eSBiZSBmb3VuZCBpbiBkZWZhdWx0cy5ocG5zc2hkLgorKworK1lvdSBtdXN0IHRoZW4gcmVsb2Fk IHRoZSBzeXN0ZW1kIHNlcnZpY2UgdG8gbWFrZSBpdCBhd2FyZSBvZiB0aGlzIG5ldyBzZXJ2aWNl IHdpdGgKKytzdWRvIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCisrCisrSWYgeW91IGFyZSB1c2lu ZyBhbiBpbml0LmQgKHlvdSBzdGFydCBhIHNlcnZpY2Ugd2l0aCDigJhzeXN0ZW3igJkpIHRoZW4g eW91IG5lZWQgdG8gaW5zdGFsbCBhbgorK2luaXQuZC4gQ3JlYXRlIHRoZSBmaWxlIC9ldGMvaW5p dC5kL2hwbnNzaCBhbmQgY29weSB0aGUgZm9sbG93aW5nIGludG8gaXQuIE5COiBUaGUgZm9sbG93 aW5nIGlzCisrZm9yIHdoZXJlIGhwbnNzaGQgaXMgZm91bmQgYXQgL3Vzci9zYmluL2hwbnNzaGQu IElmIGl0IGlzIG5vdCBpbiB0aGF0IGxvY2F0aW9uIHlvdeKAmWxsIG5lZWQgdG8KKyt1cGRhdGUg dGhlIHBhdGhzLgorKworK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgdXNlIHRoZSBocG5zc2hkLmlu aXQgZmlsZSBjcmVhdGVkIGR1cmluZyBjb25maWd1cmUuIFRoaXMgd2lsbCBiZQorK3ByZXBvcHVs YXRlZCB3aXRoIHRoZSBjb3JyZWN0IHBhdGhzIGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0LgorKwor KyMhIC9iaW4vc2gKKysKKysjIyMgQkVHSU4gSU5JVCBJTkZPCisrIyBQcm92aWRlczogICAgICAg ICAgICAgICAgaHBuc3NoZAorKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICAkcmVtb3RlX2ZzICRz eXNsb2cKKysjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKysjIERl ZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6CisrIyBTaG9ydC1E ZXNjcmlwdGlvbjogICAgICAgIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciB3aXRoIEhQTgor KyMjIyBFTkQgSU5JVCBJTkZPCisrCisrc2V0IC1lCisrCisrIyAvZXRjL2luaXQuZC9ocG5zc2g6 IHN0YXJ0IGFuZCBzdG9wIHRoZSBPcGVuQlNEICJzZWN1cmUgc2hlbGwodG0pIiBkYWVtb24KKysK Kyt0ZXN0IC14IC91c3Ivc2Jpbi9ocG5zc2hkIHx8IGV4aXQgMAorKyggL3Vzci9zYmluL2hwbnNz aGQgLVw/IDI+JjEgfCBncmVwIC1xIE9wZW5TU0ggKSAyPi9kZXYvbnVsbCB8fCBleGl0IDAKKysK Kyt1bWFzayAwMjIKKysKKytpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9ocG5zc2g7IHRoZW4KKysg ICAgLiAvZXRjL2RlZmF1bHQvaHBuc3NoCisrZmkKKysKKysuIC9saWIvbHNiL2luaXQtZnVuY3Rp b25zCisrCisrCisraWYgWyAtbiAiJDIiIF07IHRoZW4KKysgICAgU1NIRF9PUFRTPSIkU1NIRF9P UFRTICQyIgorK2ZpCisrCisrIyBBcmUgd2UgcnVubmluZyBmcm9tIGluaXQ/CisrcnVuX2J5X2lu aXQoKSB7CisrICAgIChbICIkcHJldmlvdXMiIF0gJiYgWyAiJHJ1bmxldmVsIiBdKSB8fCBbICIk cnVubGV2ZWwiID0gUyBdCisrfQorKworK2NoZWNrX2Zvcl9ub19zdGFydCgpIHsKKysgICAgIyBm b3JnZXQgaXQgaWYgd2UncmUgdHJ5aW5nIHRvIHN0YXJ0LCBhbmQgL2V0Yy9ocG5zc2gvc3NoZF9u b3RfdG9fYmVfcnVuIGV4aXN0cworKyAgICBpZiBbIC1lIC9ldGMvaHBuc3NoL3NzaGRfbm90X3Rv X2JlX3J1biBdOyB0aGVuCisrICAgICAgICBpZiBbICIkMSIgPSBsb2dfZW5kX21zZyBdOyB0aGVu CisrICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCisrICAgICAgICBmaQorKyAgICAg ICAgaWYgISBydW5fYnlfaW5pdDsgdGhlbgorKyAgICAgICAgICAgIGxvZ19hY3Rpb25fbXNnICJI UE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIG5vdCBpbiB1c2UgKC9ldGMvaHBuc3NoL3Nz aGRfbm90X3RvX2JlX3J1bikiIHx8IHRydWUKKysgICAgICAgIGZpCisrICAgICAgICBleGl0IDAK KysgICAgZmkKKyt9CisrCisrY2hlY2tfZGV2X251bGwoKSB7CisrICAgIGlmIFsgISAtYyAvZGV2 L251bGwgXTsgdGhlbgorKyAgICAgICAgaWYgWyAiJDEiID0gbG9nX2VuZF9tc2cgXTsgdGhlbgor KyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQorKyAgICAgICAgZmkKKysgICAgICAg IGlmICEgcnVuX2J5X2luaXQ7IHRoZW4KKysgICAgICAgICAgICBsb2dfYWN0aW9uX21zZyAiL2Rl di9udWxsIGlzIG5vdCBhIGNoYXJhY3RlciBkZXZpY2UhIiB8fCB0cnVlCisrICAgICAgICBmaQor KyAgICAgICAgZXhpdCAxCisrICAgIGZpCisrfQorKworK2NoZWNrX3ByaXZzZXBfZGlyKCkgewor KyAgICAjIENyZWF0ZSB0aGUgUHJpdlNlcCBlbXB0eSBkaXIgaWYgbmVjZXNzYXJ5CisrICAgIGlm IFsgISAtZCAvcnVuL2hwbnNzaGQgXTsgdGhlbgorKyAgICAgICAgbWtkaXIgL3J1bi9ocG5zc2hk CisrICAgICAgICBjaG1vZCAwNzU1IC9ydW4vaHBuc3NoZAorKyAgICBmaQorK30KKysKKytjaGVj a19jb25maWcoKSB7CisrICAgIGlmIFsgISAtZSAvZXRjL2hwbnNzaC9zc2hkX25vdF90b19iZV9y dW4gXTsgdGhlbgorKyAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2CisrICAgICAg ICAvdXNyL3NiaW4vaHBuc3NoZCAkU1NIRF9PUFRTIC10IHx8IGV4aXQgMQorKyAgICBmaQorK30K KysKKytleHBvcnQgUEFUSD0iJHtQQVRIOiskUEFUSDp9L3Vzci9zYmluOi9zYmluIgorKworK2Nh c2UgIiQxIiBpbgorKyAgc3RhcnQpCisrICAgICAgICBjaGVja19wcml2c2VwX2RpcgorKyAgICAg ICAgY2hlY2tfZm9yX25vX3N0YXJ0CisrICAgICAgICBjaGVja19kZXZfbnVsbAorKyAgICAgICAg bG9nX2RhZW1vbl9tc2cgIlN0YXJ0aW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIi ICJocG5zc2hkIiB8fCB0cnVlCisrICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwODYK KysgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLW9rbm9kbyAt LWNodWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hw bnNzaGQgLS0gJFNTSERfT1BUUzsgdGhlbgorKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDAgfHwg dHJ1ZQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQor KyAgICAgICAgZmkKKysgICAgICAgIDs7CisrICBzdG9wKQorKyAgICAgICAgbG9nX2RhZW1vbl9t c2cgIlN0b3BwaW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIiICJocG5zc2hkIiB8 fCB0cnVlCisrICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLW9r bm9kbyAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hwbnNzaGQ7 IHRoZW4KKysgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKKysgICAgICAgIGVsc2UK KysgICAgICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUKKysgICAgICAgIGZpCisrICAgICAg ICA7OworKworKworKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKysgICAgICAgIGNoZWNrX2Zvcl9u b19zdGFydAorKyAgICAgICAgY2hlY2tfY29uZmlnCisrICAgICAgICBsb2dfZGFlbW9uX21zZyAi UmVsb2FkaW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIncyBjb25maWd1cmF0aW9u IiAiaHBuc3NoZCIgfHwgdHJ1ZQorKyAgICAgICAgaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9w IC0tc2lnbmFsIDEgLS1xdWlldCAtLW9rbm9kbyAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAt LWV4ZWMgL3Vzci9zYmluL2hwbnNzaGQ7IHRoZW4KKysgICAgICAgICAgICBsb2dfZW5kX21zZyAw IHx8IHRydWUKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRy dWUKKysgICAgICAgIGZpCisrICAgICAgICA7OworKworKworKyAgcmVzdGFydCkKKysgICAgICAg IGNoZWNrX3ByaXZzZXBfZGlyCisrICAgICAgICBjaGVja19jb25maWcKKysgICAgICAgIGxvZ19k YWVtb25fbXNnICJSZXN0YXJ0aW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIiICJo cG5zc2hkIiB8fCB0cnVlCisrICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWll dCAtLW9rbm9kbyAtLXJldHJ5IDMwIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAv dXNyL3NiaW4vaHBuc3NoZAorKyAgICAgICAgY2hlY2tfZm9yX25vX3N0YXJ0IGxvZ19lbmRfbXNn CisrICAgICAgICBjaGVja19kZXZfbnVsbCBsb2dfZW5kX21zZworKyAgICAgICAgIyBzaGVsbGNo ZWNrIGRpc2FibGU9U0MyMDg2CisrICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0 IC0tcXVpZXQgLS1va25vZG8gLS1jaHVpZCAwOjAgLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQg LS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkIC0tICRTU0hEX09QVFM7IHRoZW4KKysgICAgICAgICAg ICBsb2dfZW5kX21zZyAwIHx8IHRydWUKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBsb2df ZW5kX21zZyAxIHx8IHRydWUKKysgICAgICAgIGZpCisrICAgICAgICA7OworKworKworKyAgdHJ5 LXJlc3RhcnQpCisrICAgICAgICBjaGVja19wcml2c2VwX2RpcgorKyAgICAgICAgY2hlY2tfY29u ZmlnCisrICAgICAgICBsb2dfZGFlbW9uX21zZyAiUmVzdGFydGluZyBIUE4vT3BlbkJTRCBTZWN1 cmUgU2hlbGwgc2VydmVyIiAiaHBuc3NoZCIgfHwgdHJ1ZQorKyAgICAgICAgUkVUPTAKKysgICAg ICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMzAgLS1waWRmaWxl IC9ydW4vaHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkIHx8IFJFVD0iJD8iCisr ICAgICAgICBjYXNlICRSRVQgaW4KKysgICAgICAgICAgICAwKQorKyAgICAgICAgICAgICAgICAj IG9sZCBkYWVtb24gc3RvcHBlZAorKyAgICAgICAgICAgICAgICBjaGVja19mb3Jfbm9fc3RhcnQg bG9nX2VuZF9tc2cKKysgICAgICAgICAgICAgICAgY2hlY2tfZGV2X251bGwgbG9nX2VuZF9tc2cK KysgICAgICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2CisrICAgICAgICAg ICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLW9rbm9kbyAtLWNo dWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hwbnNz aGQgLS0gJFNTSERfT1BUUzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgbG9nX2VuZF9tc2cg MCB8fCB0cnVlCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGxv Z19lbmRfbXNnIDEgfHwgdHJ1ZQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAg ICA7OworKyAgICAgICAgICAgIDEpCisrICAgICAgICAgICAgICAgICMgZGFlbW9uIG5vdCBydW5u aW5nCisrICAgICAgICAgICAgICAgIGxvZ19wcm9ncmVzc19tc2cgIihub3QgcnVubmluZykiIHx8 IHRydWUKKysgICAgICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCisrICAgICAgICAg ICAgICAgIDs7CisrICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgICAgIyBmYWlsZWQgdG8g c3RvcAorKyAgICAgICAgICAgICAgICBsb2dfcHJvZ3Jlc3NfbXNnICIoZmFpbGVkIHRvIHN0b3Ap IiB8fCB0cnVlCisrICAgICAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQorKyAgICAg ICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysKKysKKysgIHN0YXR1 cykKKysgICAgICAgIHN0YXR1c19vZl9wcm9jIC1wIC9ydW4vaHBuc3NoZC5waWQgL3Vzci9zYmlu L2hwbnNzaGQgaHBuc3NoZCAmJiBleGl0IDAgfHwgZXhpdCAkPworKyAgICAgICAgOzsKKysKKysK KysgICopCisrICAgICAgICBsb2dfYWN0aW9uX21zZyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2hwbnNz aCB7c3RhcnR8c3RvcHxyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR8dHJ5LXJlc3RhcnR8c3Rh dHVzfSIgfHwgdHJ1ZQorKyAgICAgICAgZXhpdCAxCisrZXNhYworKworK2V4aXQgMAorKworKwor K1N0ZXAgMTA6IFdvcmtpbmcgd2l0aCBTRUxpbnV4LgorKworK0lmIHlvdSBhcmUgdXNpbmcgU0VM aW51eCB5b3XigJlsbCBuZWVkIHRvIHJ1biBhIGZldyBtb3JlIGNvbW1hbmRzIGluIG9yZGVyIHRv IGdyYW50IGhwbnNzaCB0aGUKKytuZWNlc3NhcnkgZXhjZXB0aW9ucyB0byBvcGVuIHNvY2tldHMs IGZpbGVzLCByZWFkIGtleXMsIGFuZCBzbyBmb3J0aC4gUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFu ZHMKKyt0byBhbGxvdyB0aGlzLiBOb3RlLCBJ4oCZbSBub3Qgc3VyZSBldmVyeSBzaW5nbGUgb25l IG9mIHRoZXNlIGlzIG5lZWRlZCBzbyBpZiBzb21lb25lIGtub3dzIGJldHRlcgorK3BsZWFzZSBs ZXQgbWUga25vdy4gQWdhaW4sIGRvdWJsZSBjaGVjayB0aGUgcGF0aHMgb2YgdGhlIGZpbGVzIGJl aW5nIHVwZGF0ZWQuCisrCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90 ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9kc2Ffa2V5Cisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYg ZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9yc2Ffa2V5Cisrc2VtYW5hZ2Ug ZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9lY2Rz YV9rZXkKKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgIC9ldGMvaHBu c3NoL3NzaF9ob3N0X2VkMjU1MTlfa2V5Cisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBz c2hkX2tleV90IC9ldGMvaHBuc3NoL3NzaF9ob3N0X2RzYV9rZXkucHViCisrc2VtYW5hZ2UgZmNv bnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90IC9ldGMvaHBuc3NoL3NzaF9ob3N0X3JzYV9rZXku cHViCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNz aC9zc2hfaG9zdF9lY2RzYV9rZXkucHViCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBz c2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9lZDI1NTE5X2tleS5wdWIKKytzZW1hbmFn ZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfZXhlY190IC91c3Ivc2Jpbi9ocG5zc2hkCisrc2Vt YW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleWdlbl9leGVjX3QgL3Vzci9saWJleGVj L2hwbnNzaC9ocG5zc2hkLWtleWdlbgorK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgYmlu X3QgL3Vzci9saWJleGVjL2hwbnNzaC9ocG5zZnRwLXNlcnZlcgorK3NlbWFuYWdlIGZjb250ZXh0 IC1hIC1mIGYgLXQgc3NoX2V4ZWNfdCAvdXNyL2Jpbi9ocG5zc2gKKytzZW1hbmFnZSBmY29udGV4 dCAtYSAtZiBmIC10IHNzaF9hZ2VudF9leGVjX3QgL3Vzci9iaW4vaHBuc3NoLWFnZW50Cisrc2Vt YW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hfa2V5Z2VuX2V4ZWNfdCAvdXNyL2Jpbi9ocG5z c2gta2V5Z2VuCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBldGNfdCAvZXRjL3BhbS5k L2hwbnNzaGQKKytzZW1hbmFnZSBwb3J0IC1hIC10IHNzaF9wb3J0X3QgLXAgdGNwIDIyMjIKKyty ZXN0b3JlY29uIC91c3Ivc2Jpbi9ocG5zc2hkCisrcmVzdG9yZWNvbiAvZXRjL2hwbnNzaC9zc2gq X2tleQorK3Jlc3RvcmVjb24gL2V0Yy9ocG5zc2gvc3NoKl9rZXlcLnB1YgorK3Jlc3RvcmVjb24g L3Vzci9saWJleGVjL2hwbnNzaC9ocG5zc2hkLWtleWdlbgorK3Jlc3RvcmVjb24gL3Vzci9saWJl eGVjL2hwbnNzaC9ocG5zZnRwLXNlcnZlcgorK3Jlc3RvcmVjb24gL3Vzci9iaW4vaHBuc3NoCisr cmVzdG9yZWNvbiAvdXNyL2Jpbi9ocG5zc2gtYWdlbnQKKytyZXN0b3JlY29uIC91c3IvYmluL2hw bnNzaC1rZXlnZW4KKytyZXN0b3JlY29uIC9ldGMvcGFtLmQvaHBuc3NoZAorZGlmZiAtTnVyIG9w ZW5zc2gtMTAuNXAxLm9yaWcva2V4LmMgb3BlbnNzaC0xMC41cDEva2V4LmMKKy0tLSBvcGVuc3No LTEwLjVwMS5vcmlnL2tleC5jCTIwMjYtMDktMjEgMDc6MDY6MDUuNDUzNzU1NzM1ICswMjAwCisr Kysgb3BlbnNzaC0xMC41cDEva2V4LmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODg3NDg4OTcgKzAy MDAKK0BAIC02Myw2ICs2Myw3IEBACisgCisgI2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNsdWRl ICJzc2hidWYuaCIKKysjaW5jbHVkZSAiY2Fub2hvc3QuaCIKKyAjaW5jbHVkZSAiZGlnZXN0Lmgi CisgI2luY2x1ZGUgInhtYWxsb2MuaCIKKyAjaW5jbHVkZSAiYXVkaXQuaCIKK0BAIC01NTcsNiAr NTU4LDcgQEAKKyAJc3RydWN0IGtleCAqa2V4ID0gc3NoLT5rZXg7CisgCWludCByLCBpbml0aWFs ID0gKGtleC0+ZmxhZ3MgJiBLRVhfSU5JVElBTCkgIT0gMDsKKyAJY2hhciAqY3AsICoqcHJvcDsK KysJY29uc3QgY2hhciAqcmVrZXlfZGVueWxpc3Q7CisgCisgCWRlYnVnKCJTU0gyX01TR19ORVdL RVlTIHJlY2VpdmVkIik7CisgCWlmIChrZXgtPmV4dF9pbmZvX2MgJiYgaW5pdGlhbCkKK0BAIC01 NjgsMTMgKzU3MCwyNyBAQAorIAlpZiAoKHIgPSBzc2hfc2V0X25ld2tleXMoc3NoLCBNT0RFX0lO KSkgIT0gMCkKKyAJCXJldHVybiByOworIAlpZiAoaW5pdGlhbCkgeworLQkJLyogUmVtb3ZlIGlu aXRpYWwgS0VYIHNpZ25hbGxpbmcgZnJvbSBwcm9wb3NhbCBmb3IgcmVrZXlpbmcgKi8KKysJCS8q CisrCQkgKiBSZW1vdmUgaW5pdGlhbCBLRVggc2lnbmFsbGluZyBmcm9tIHByb3Bvc2FsIGZvciBy ZWtleWluZy4KKysJCSAqIFNlY3VyZUJsYWNrYm94IHJlLWRlcml2ZXMgc3RyaWN0IEtFWCBmcm9t IGV2ZXJ5IEtFWElOSVQKKysJCSAqIGluc3RlYWQgb2YgbGF0Y2hpbmcgaXQgYXQgdGhlIGluaXRp YWwgZXhjaGFuZ2UuIFdpdGhvdXQKKysJCSAqIHRoZSBtYXJrZXIgaW4gdGhlIHJla2V5IGl0IHN0 b3BzIHJlc2V0dGluZyBpdHMgc2VxdWVuY2UKKysJCSAqIG51bWJlciB3aGlsZSB3ZSBzdGlsbCBy ZXNldCBvdXJzIGFuZCB0aGUgTUFDIGRlc3luY3MsIHNvCisrCQkgKiBrZWVwIGFkdmVydGlzaW5n IGtleC1zdHJpY3QgdG8gaXQgb24gcmVrZXlzLiBDb21wbGlhbnQKKysJCSAqIHBlZXJzIGlnbm9y ZSB0aGUgbWFya2VyIGFmdGVyIHRoZSBpbml0aWFsIGV4Y2hhbmdlLgorKwkJICovCisrCQlpZiAo c3NoLT5jb21wYXQgJiBTU0hfQlVHX1NUUklDVF9LRVhfUkVLRVkpIHsKKysJCQlyZWtleV9kZW55 bGlzdCA9IGtleC0+c2VydmVyID8KKysJCQkgICAgImV4dC1pbmZvLXMiIDogImV4dC1pbmZvLWMi OworKwkJfSBlbHNlIHsKKysJCQlyZWtleV9kZW55bGlzdCA9IGtleC0+c2VydmVyID8KKysJCQkg ICAgImV4dC1pbmZvLXMsa2V4LXN0cmljdC1zLXYwMEBvcGVuc3NoLmNvbSIgOgorKwkJCSAgICAi ZXh0LWluZm8tYyxrZXgtc3RyaWN0LWMtdjAwQG9wZW5zc2guY29tIjsKKysJCX0KKyAJCWlmICgo ciA9IGtleF9idWYycHJvcChrZXgtPm15LCBOVUxMLCAmcHJvcCkpICE9IDApCisgCQkJcmV0dXJu IHI7CisgCQlpZiAoKGNwID0gbWF0Y2hfZmlsdGVyX2RlbnlsaXN0KHByb3BbUFJPUE9TQUxfS0VY X0FMR1NdLAorLQkJICAgIGtleC0+c2VydmVyID8KKy0JCSAgICAiZXh0LWluZm8tcyxrZXgtc3Ry aWN0LXMtdjAwQG9wZW5zc2guY29tIiA6CistCQkgICAgImV4dC1pbmZvLWMsa2V4LXN0cmljdC1j LXYwMEBvcGVuc3NoLmNvbSIpKSA9PSBOVUxMKSB7CisrCQkgICAgcmVrZXlfZGVueWxpc3QpKSA9 PSBOVUxMKSB7CisgCQkJZXJyb3JfZigibWF0Y2hfZmlsdGVyX2RlbnlsaXN0IGZhaWxlZCIpOwor IAkJCWdvdG8gZmFpbDsKKyAJCX0KK0BAIC03ODQsMTcgKzgwMCw4MyBAQAorIAlmcmVlKGtleCk7 CisgfQorIAorKy8qCisrICogVGhpcyBmdW5jdGlvbiBzZWVrcyB0aHJvdWdoIGEgY29tbWEtc2Vw YXJhdGVkIGxpc3QgYW5kIGNoZWNrcyBmb3IgaW5zdGFuY2VzCisrICogb2YgdGhlIG11bHRpdGhy ZWFkZWQgQ0MyMCBjaXBoZXIuIElmIGZvdW5kLCBpdCB0aGVuIGVuc3VyZXMgdGhhdCB0aGUgc2Vy aWFsCisrICogQ0MyMCBjaXBoZXIgaXMgYWxzbyBpbiB0aGUgbGlzdCwgYWRkaW5nIGl0IGlmIG5l Y2Vzc2FyeS4KKysgKi8KKytjaGFyICoKKytwYXRjaF9saXN0KGNoYXIgKiBvcmlnKQorK3sKKysJ Y2hhciAqIGFkaiA9IHhzdHJkdXAob3JpZyk7CisrCWNoYXIgKiBtYXRjaDsKKysJdV9pbnQgbmV4 dDsKKysKKysJY29uc3QgY2hhciAqIGNjcHN0ciA9ICJjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3No LmNvbSI7CisrCWNvbnN0IGNoYXIgKiBjY3BtdHN0ciA9ICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBo cG5zc2gub3JnIjsKKysKKysJbWF0Y2ggPSBtYXRjaF9saXN0KGNjcG10c3RyLCBvcmlnLCAmbmV4 dCk7CisrCWlmIChtYXRjaCAhPSBOVUxMKSB7IC8qIENDMjAtTVQgZm91bmQgaW4gdGhlIGxpc3Qg Ki8KKysJCWZyZWUobWF0Y2gpOworKwkJbWF0Y2ggPSBtYXRjaF9saXN0KGNjcHN0ciwgb3JpZywg TlVMTCk7CisrCQlpZiAobWF0Y2ggPT0gTlVMTCkgeyAvKiBDQzIwLVNlcmlhbCBOT1QgZm91bmQg aW4gdGhlIGxpc3QgKi8KKysJCQlhZGogPSB4cmVhbGxvY2FycmF5KGFkaiwKKysJCQkgICAgc3Ry bGVuKGFkaikgLyogb3JpZ2luYWwgc3RyaW5nIGxlbmd0aCAqLworKwkJCSAgICArIDEgLyogZm9y IHRoZSBvcmlnaW5hbCBudWxsLXRlcm1pbmF0b3IgKi8KKysJCQkgICAgKyBzdHJsZW4oY2Nwc3Ry KSAvKiBtYWtlIHJvb20gZm9yIGNjcHN0ciAqLworKwkJCSAgICArIDEgLyogbWFrZSByb29tIGZv ciB0aGUgY29tbWEgZGVsaW1pdGVyICovCisrCQkJICAgICwgc2l6ZW9mKGNoYXIpKTsKKysJCQkv KgorKwkJCSAqIGFkaltuZXh0XSBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgQ0My MC1NVAorKwkJCSAqIHN0cmluZy4gYWRqW25leHRdIG1pZ2h0IGJlICcsJyBvciAnXDAnIGF0IHRo aXMgcG9pbnQuCisrCQkJICovCisrCQkJYWRqW25leHRdID0gJywnOworKwkJCS8qIGFkaiArIG5l eHQgKyAxIGlzIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhhdCBjb21tYSAqLworKwkJCW1lbWNweShh ZGogKyBuZXh0ICsgMSwgY2Nwc3RyLCBzdHJsZW4oY2Nwc3RyKSk7CisrCQkJLyogcmV3cml0ZSB0 aGUgcmVzdCBvZiB0aGUgb3JpZ2luYWwgbGlzdCAqLworKwkJCW1lbWNweShhZGogKyBuZXh0ICsg MSArIHN0cmxlbihjY3BzdHIpLCBvcmlnICsgbmV4dCwKKysJCQkgICAgc3RybGVuKG9yaWcgKyBu ZXh0KSArIDEpOworKwkJfSBlbHNlIHsgLyogQ0MyMC1TZXJpYWwgZm91bmQgaW4gdGhlIGxpc3Qs IG5vdGhpbmcgdG8gZG8gKi8KKysJCQlmcmVlKG1hdGNoKTsKKysJCX0KKysJfQorKworKwlyZXR1 cm4gYWRqOworK30KKysKKyBpbnQKKyBrZXhfcmVhZHkoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpw cm9wb3NhbFtQUk9QT1NBTF9NQVhdKQorIHsKKy0JaW50IHI7CisrCWludCByID0gMDsKKysKKysj aWZkZWYgV0lUSF9PUEVOU1NMCisrCWNoYXIgKiBvcmlnX2N0b3MgPSBwcm9wb3NhbFtQUk9QT1NB TF9FTkNfQUxHU19DVE9TXTsKKysJY2hhciAqIG9yaWdfc3RvYyA9IHByb3Bvc2FsW1BST1BPU0FM X0VOQ19BTEdTX1NUT0NdOworKwlwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXSA9Cisr CSAgICBwYXRjaF9saXN0KHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdKTsKKysJcHJv cG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfU1RPQ10gPQorKwkgICAgcGF0Y2hfbGlzdChwcm9wb3Nh bFtQUk9QT1NBTF9FTkNfQUxHU19TVE9DXSk7CisrCisrCS8qCisrCSAqIFRPRE86IExpa2VseSBt ZW1vcnkgbGVhayBoZXJlLiBUaGUgb3JpZ2luYWwgY29udGVudHMgb2YKKysJICogcHJvcG9zYWxb UFJPUE9TQUxfRU5DX0FMR1NfQ1RPU10gYXJlIG5vIGxvbmdlciBhY2Nlc3NpYmxlIG9yCisrCSAq IGZyZWVhYmxlLgorKwkgKi8KKysjZW5kaWYKKyAKKyAJaWYgKChyID0ga2V4X3Byb3AyYnVmKHNz aC0+a2V4LT5teSwgcHJvcG9zYWwpKSAhPSAwKQorLQkJcmV0dXJuIHI7CisrCQlnb3RvIHJlc3Rv cmVQcm9wb3NhbDsKKyAJc3NoLT5rZXgtPmZsYWdzID0gS0VYX0lOSVRJQUw7CisgCWtleF9yZXNl dF9kaXNwYXRjaChzc2gpOworIAlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYSU5J VCwgJmtleF9pbnB1dF9rZXhpbml0KTsKKy0JcmV0dXJuIDA7CisrIHJlc3RvcmVQcm9wb3NhbDoK KysjaWZkZWYgV0lUSF9PUEVOU1NMCisrCWZyZWUocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1Nf Q1RPU10pOworKwlmcmVlKHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdKTsKKysJcHJv cG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RPU10gPSBvcmlnX2N0b3M7CisrCXByb3Bvc2FsW1BS T1BPU0FMX0VOQ19BTEdTX1NUT0NdID0gb3JpZ19zdG9jOworKyNlbmRpZgorKwlyZXR1cm4gcjsK KyB9CisgCisgaW50CitAQCAtOTgzLDYgKzEwNjUsMTEgQEAKKyAJaW50IG5lbmMsIG5tYWMsIG5j b21wOworIAl1X2ludCBtb2RlLCBjdG9zLCBuZWVkLCBkaF9uZWVkLCBhdXRobGVuOworIAlpbnQg ciwgZmlyc3Rfa2V4X2ZvbGxvd3M7CisrCWludCBhdXRoX2ZsYWcgPSAwOworKwlpbnQgbG9nX2Zs YWcgPSAwOworKworKwlhdXRoX2ZsYWcgPSBwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoc3No KTsKKysJZGVidWcoIkFVVEggU1RBVEUgSVMgJWQiLCBhdXRoX2ZsYWcpOworIAorIAlkZWJ1ZzIo ImxvY2FsICVzIEtFWElOSVQgcHJvcG9zYWwiLCBrZXgtPnNlcnZlciA/ICJzZXJ2ZXIiIDogImNs aWVudCIpOworIAlpZiAoKHIgPSBrZXhfYnVmMnByb3Aoa2V4LT5teSwgTlVMTCwgJm15KSkgIT0g MCkKK0BAIC0xMDU5LDYgKzExNDYsMzEgQEAKKyAJCQlwZWVyW25lbmNdID0gTlVMTDsKKyAJCQln b3RvIG91dDsKKyAJCX0KKysjaWZkZWYgV0lUSF9PUEVOU1NMCisrCQlpZiAoKHN0cmNtcChuZXdr ZXlzLT5lbmMubmFtZSwgImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIikKKysJCSAgICA9 PSAwKSAmJiAobWF0Y2hfbGlzdCgiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIsCisr CQkgICAgbXlbbmVuY10sIE5VTEwpICE9IE5VTEwpKSB7CisrCQkJLyoKKysJCQkgKiBpZiB3ZSdy ZSB1c2luZyB0aGUgc2VyaWFsIENDMjAgY2lwaGVyIHdoaWxlIHRoZQorKwkJCSAqIG11bHRpdGhy ZWFkZWQgaW1wbGVtZW50YXRpb24gaXMgYW4gb3B0aW9uLi4uCisrCQkJICovCisrCQkJZnJlZShu ZXdrZXlzLT5lbmMubmFtZSk7CisrCQkJbmV3a2V5cy0+ZW5jLmNpcGhlciA9IGNpcGhlcl9ieV9u YW1lKAorKwkJCSAgICAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIpOworKwkJCWlm IChuZXdrZXlzLT5lbmMuY2lwaGVyID09IE5VTEwpIHsKKysJCQkJZXJyb3JfZigiJXMgY2lwaGVy IG5vdCBmb3VuZC4iLAorKwkJCQkgICAgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmci KTsKKysJCQkJciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCQkJCWtleC0+ZmFpbGVkX2No b2ljZSA9IHBlZXJbbmVuY107CisrCQkJCXBlZXJbbmVuY10gPSBOVUxMOworKwkJCQlnb3RvIG91 dDsKKysJCQl9IGVsc2UgeworKwkJCQluZXdrZXlzLT5lbmMubmFtZSA9IHhzdHJkdXAoCisrCQkJ CSAgICAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIpOworKwkJCX0KKysJCQkvKiB3 ZSBwcm9tb3RlIHRvIHRoZSBtdWx0aXRocmVhZGVkIGltcGxlbWVudGF0aW9uICovCisrCQl9Cisr I2VuZGlmCisgCQlhdXRobGVuID0gY2lwaGVyX2F1dGhsZW4obmV3a2V5cy0+ZW5jLmNpcGhlcik7 CisgCQkvKiBpZ25vcmUgbWFjIGZvciBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gKi8KKyAJCWlm IChhdXRobGVuID09IDAgJiYKK0BAIC0xMDc0LDExICsxMTg2LDQzIEBACisgCQkJcGVlcltuY29t cF0gPSBOVUxMOworIAkJCWdvdG8gb3V0OworIAkJfQorKwkJZGVidWcoIlJFUVVFU1RFRCBFTkMu TkFNRSBpcyAnJXMnIiwgbmV3a2V5cy0+ZW5jLm5hbWUpOworKwkJZGVidWcoIlJFUVVFU1RFRCBN QUMuTkFNRSBpcyAnJXMnIiwgbmV3a2V5cy0+bWFjLm5hbWUpOworKwkJaWYgKHN0cmNtcChuZXdr ZXlzLT5lbmMubmFtZSwgIm5vbmUiKSA9PSAwKSB7CisrCQkJaWYgKGF1dGhfZmxhZyA9PSAxKSB7 CisrCQkJCWRlYnVnKCJOb25lIHJlcXVlc3RlZCBwb3N0IGF1dGhlbnRpY2F0aW9uLiIpOworKwkJ CQlzc2gtPm5vbmUgPSAxOworKwkJCX0KKysJCQllbHNlCisrCQkJCWZhdGFsKCJQcmUtYXV0aGVu dGljYXRpb24gbm9uZSBjaXBoZXIgcmVxdWVzdHMgYXJlIG5vdCBhbGxvd2VkLiIpOworKworKwkJ CWlmIChuZXdrZXlzLT5tYWMubmFtZSAhPSBOVUxMICYmIHN0cmNtcChuZXdrZXlzLT5tYWMubmFt ZSwgIm5vbmUiKSA9PSAwKSB7CisrCQkJCWRlYnVnKCJSZXF1ZXN0aW5nOiBOT05FTUFDLiBBdXRo ZmxhZyBpcyAlZCIsIGF1dGhfZmxhZyk7CisrCQkJCXNzaC0+bm9uZV9tYWMgPSAxOworKwkJCX0K KysJCX0KKysKKyAJCWRlYnVnKCJrZXg6ICVzIGNpcGhlcjogJXMgTUFDOiAlcyBjb21wcmVzc2lv bjogJXMiLAorIAkJICAgIGN0b3MgPyAiY2xpZW50LT5zZXJ2ZXIiIDogInNlcnZlci0+Y2xpZW50 IiwKKyAJCSAgICBuZXdrZXlzLT5lbmMubmFtZSwKKyAJCSAgICBhdXRobGVuID09IDAgPyBuZXdr ZXlzLT5tYWMubmFtZSA6ICI8aW1wbGljaXQ+IiwKKyAJCSAgICBuZXdrZXlzLT5jb21wLm5hbWUp OworKwkJLyoKKysJCSAqIGNsaWVudCBzdGFydHMgd2l0aCBjdG9zID0gMCAmJiBsb2cgZmxhZyA9 IDAgYW5kIG5vIGxvZy4KKysJCSAqIDJuZCBjbGllbnQgcGFzcyBjdG9zID0gMSBhbmQgZmxhZyA9 IDEgc28gbm8gbG9nLgorKwkJICogc2VydmVyIHN0YXJ0cyB3aXRoIGN0b3MgPSAxICYmIGxvZ19m bGFnID0gMCBzbyBsb2cuCisrCQkgKiAybmQgc2V2ZXIgcGFzcyBjdG9zID0gMSAmJiBsb2cgZmxh ZyA9IDEgc28gbm8gbG9nLgorKwkJICogLWNqcgorKwkJICovCisrCQlpZiAoY3RvcyAmJiAhbG9n X2ZsYWcpIHsKKysJCQlsb2dpdCgiU1NIOiBTZXJ2ZXI7THR5cGU6IEtleDtSZW1vdGU6ICVzLSVk O0VuYzogJXM7TUFDOiAlcztDb21wOiAlcyIsCisrCQkJICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNz aCksCisrCQkJICAgIHNzaF9yZW1vdGVfcG9ydChzc2gpLAorKwkJCSAgICBuZXdrZXlzLT5lbmMu bmFtZSwKKysJCQkgICAgYXV0aGxlbiA9PSAwID8gbmV3a2V5cy0+bWFjLm5hbWUgOiAiPGltcGxp Y2l0PiIsCisrCQkJICAgIG5ld2tleXMtPmNvbXAubmFtZSk7CisrCQl9CisrCQlsb2dfZmxhZyA9 IDE7CisgCX0KKyAJbmVlZCA9IGRoX25lZWQgPSAwOworIAlmb3IgKG1vZGUgPSAwOyBtb2RlIDwg TU9ERV9NQVg7IG1vZGUrKykgeworQEAgLTE0MzgsNyArMTU4Miw3IEBACisgCWlmICh2ZXJzaW9u X2FkZGVuZHVtICE9IE5VTEwgJiYgKnZlcnNpb25fYWRkZW5kdW0gPT0gJ1wwJykKKyAJCXZlcnNp b25fYWRkZW5kdW0gPSBOVUxMOworIAlpZiAoKHIgPSBzc2hidWZfcHV0ZihvdXJfdmVyc2lvbiwg IlNTSC0lZC4lZC0lcyVzJXNcclxuIiwKKy0JICAgIFBST1RPQ09MX01BSk9SXzIsIFBST1RPQ09M X01JTk9SXzIsIFNTSF9WRVJTSU9OLAorKwkgICAgUFJPVE9DT0xfTUFKT1JfMiwgUFJPVE9DT0xf TUlOT1JfMiwgU1NIX1JFTEVBU0UsCisgCSAgICB2ZXJzaW9uX2FkZGVuZHVtID09IE5VTEwgPyAi IiA6ICIgIiwKKyAJICAgIHZlcnNpb25fYWRkZW5kdW0gPT0gTlVMTCA/ICIiIDogdmVyc2lvbl9h ZGRlbmR1bSkpICE9IDApIHsKKyAJCW9lcnJubyA9IGVycm5vOworQEAgLTE1NzQsOSArMTcxOCwy NCBAQAorIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9GT1JNQVQ7CisgCQlnb3RvIG91dDsKKyAJfQor KworKwkvKiByZXBvcnQgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gdG8gc3lzbG9nIGlmIHRoaXMg aXMgdGhlIHNlcnZlciAqLworKyAgICAgICAgaWYgKHRpbWVvdXRfbXMgPT0gLTEpIHsgLyogb25s eSB0aGUgc2VydmVyIHVzZXMgdGhpcyB2YWx1ZSAqLworKwkJbG9naXQoIlNTSDogU2VydmVyO0x0 eXBlOiBWZXJzaW9uO1JlbW90ZTogJXMtJWQ7UHJvdG9jb2w6ICVkLiVkO0NsaWVudDogJS4xMDBz IiwKKysJCSAgICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gp LAorKwkJICAgICAgcmVtb3RlX21ham9yLCByZW1vdGVfbWlub3IsIHJlbW90ZV92ZXJzaW9uKTsK KysJfQorKworIAlkZWJ1ZygiUmVtb3RlIHByb3RvY29sIHZlcnNpb24gJWQuJWQsIHJlbW90ZSBz b2Z0d2FyZSB2ZXJzaW9uICUuMTAwcyIsCisgCSAgICByZW1vdGVfbWFqb3IsIHJlbW90ZV9taW5v ciwgcmVtb3RlX3ZlcnNpb24pOworIAljb21wYXRfYmFubmVyKHNzaCwgcmVtb3RlX3ZlcnNpb24p OworKwlpZiAoc3NoLT5jb21wYXQgJiBTU0hfSFBOU1NIKQorKwkJZGVidWcoIkhQTiB0byBIUE4g Q29ubmVjdGlvbi4iKTsKKysJZWxzZQorKwkJZGVidWcoIk5vbi1IUE4gdG8gSFBOIENvbm5lY3Rp b24uIik7CisrCisrCWlmKHNzaC0+Y29tcGF0ICYgU1NIX1JFU1RSSUNUX1dJTkRPVykKKysJCWRl YnVnICgiV2luZG93IHNpemUgcmVzdHJpY3RlZC4iKTsKKyAKKyAJbWlzbWF0Y2ggPSAwOworIAlz d2l0Y2ggKHJlbW90ZV9tYWpvcikgeworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvbG9n LmMgb3BlbnNzaC0xMC41cDEvbG9nLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2xvZy5jCTIw MjYtMDktMjEgMDc6MDY6MDUuMDcyODg2NjE4ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvbG9n LmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODkxMDY4MjUgKzAyMDAKK0BAIC00Nyw2ICs0NywxMSBA QAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisgI2luY2x1ZGUg PHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlICJwYWNrZXQuaCIgLyog bmVlZGVkIGZvciBob3N0IGFuZCBwb3J0IGxvb2sgdXBzICovCisrI2lmZGVmIEhBVkVfU1lTX1RJ TUVfSAorKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4gLyogdG8gZ2V0IGN1cnJlbnQgdGltZSAqLwor KyNlbmRpZgorICNpZiBkZWZpbmVkKEhBVkVfU1RSTlZJUykgJiYgZGVmaW5lZChIQVZFX1ZJU19I KSAmJiAhZGVmaW5lZChCUk9LRU5fU1RSTlZJUykKKyAjIGluY2x1ZGUgPHZpcy5oPgorICNlbmRp ZgorQEAgLTY1LDYgKzcwLDggQEAKKyBzdGF0aWMgc2l6ZV90IG5sb2dfdmVyYm9zZTsKKyBleHRl cm4gY2hhciAqX19wcm9nbmFtZTsKKyAKKytleHRlcm4gc3RydWN0IHNzaCAqYWN0aXZlX3N0YXRl OworKworICNkZWZpbmUgTE9HX1NZU0xPR19WSVMJKFZJU19DU1RZTEV8VklTX05MfFZJU19UQUJ8 VklTX09DVEFMKQorICNkZWZpbmUgTE9HX1NUREVSUl9WSVMJKFZJU19TQUZFfFZJU19PQ1RBTCkK KyAKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL21hYy5jIG9wZW5zc2gtMTAuNXAxL21h Yy5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9tYWMuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjI5 MDY0MzUxNCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL21hYy5jCTIwMjYtMDktMjEgMDc6MDY6 NTkuODg5NDY0NTY1ICswMjAwCitAQCAtNjMsNiArNjMsNyBAQAorIAl7ICJobWFjLXNoYTItNTEy IiwJCQlTU0hfRElHRVNULCBTU0hfRElHRVNUX1NIQTUxMiwgMCwgMCwgMCwgMCB9LAorIAl7ICJo bWFjLW1kNSIsCQkJCVNTSF9ESUdFU1QsIFNTSF9ESUdFU1RfTUQ1LCAwLCAwLCAwLCAwIH0sCisg CXsgImhtYWMtbWQ1LTk2IiwJCQlTU0hfRElHRVNULCBTU0hfRElHRVNUX01ENSwgOTYsIDAsIDAs IDAgfSwKKysJeyAibm9uZSIsCQkJCVNTSF9ESUdFU1QsIFNTSF9ESUdFU1RfTlVMTCwgMCwgMCwg MCwgMCB9LAorIAl7ICJ1bWFjLTY0QG9wZW5zc2guY29tIiwJCVNTSF9VTUFDLCAwLCAwLCAxMjgs IDY0LCAwIH0sCisgCXsgInVtYWMtMTI4QG9wZW5zc2guY29tIiwJCVNTSF9VTUFDMTI4LCAwLCAw LCAxMjgsIDEyOCwgMCB9LAorIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvTWFrZWZp bGUuaW4gb3BlbnNzaC0xMC41cDEvTWFrZWZpbGUuaW4KKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L01ha2VmaWxlLmluCTIwMjYtMDktMjEgMDc6MDY6MDUuNTYwNTc0OTgwICswMjAwCisrKysgb3Bl bnNzaC0xMC41cDEvTWFrZWZpbGUuaW4JMjAyNi0wOS0yMSAwNzo1Mzo1NC40NDc0NTk2NDEgKzAy MDAKK0BAIC01NCw3ICs1NCw3IEBACisgQ0ZMQUdTX05PUElFPUBDRkxBR1NfTk9QSUVACisgQ1BQ RkxBR1M9LUkuIC1JJChzcmNkaXIpIC1JJChDT01QQVRJTkNMVURFUykgQENQUEZMQUdTQCAkKFBB VEhTKSBAREVGU0AKKyBQSUNGTEFHPUBQSUNGTEFHQAorLUxJQlM9QExJQlNACisrTElCUz1ATElC U0AgLWxwdGhyZWFkCisgQ0hBTk5FTExJQlM9QENIQU5ORUxMSUJTQAorIEs1TElCUz1ASzVMSUJT QAorIEdTU0xJQlM9QEdTU0xJQlNACitAQCAtOTMsNyArOTMsNyBAQAorIExJQlNTSF9PQkpTPSR7 TElCT1BFTlNTSF9PQkpTfSBcCisgCWF1dGhmZC5vIGF1dGhmaWxlLm8gXAorIAljYW5vaG9zdC5v IGNoYW5uZWxzLm8gY2lwaGVyLm8gY2lwaGVyLWFlcy5vIGNpcGhlci1hZXNjdHIubyBcCistCWNs ZWFudXAubyBcCisrCWNsZWFudXAubyBjaXBoZXItY3RyLW10Lm8gXAorIAljb21wYXQubyBmYXRh bC5vIGhvc3RmaWxlLm8gXAorIAlsb2cubyBtYXRjaC5vIG1vZHVsaS5vIG5jaGFuLm8gcGFja2V0 Lm8gXAorIAlyZWFkcGFzcy5vIHR0eW1vZGVzLm8geG1hbGxvYy5vIGFkZHIubyBhZGRybWF0Y2gu byBcCitAQCAtMTAzLDYgKzEwMyw3IEBACisgCW1zZy5vIGRucy5vIGVudHJvcHkubyBnc3MtZ2Vu ci5vIHVtYWMubyB1bWFjMTI4Lm8gXAorIAlzbXVsdF9jdXJ2ZTI1NTE5X3JlZi5vIFwKKyAJcG9s eTEzMDUubyBjaGFjaGEubyBjaXBoZXItY2hhY2hhcG9seS5vIGNpcGhlci1jaGFjaGFwb2x5LWxp YmNyeXB0by5vIFwKKysJY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10Lm8gXAorIAlzc2gt ZWQyNTUxOS5vIGRpZ2VzdC1vcGVuc3NsLm8gZGlnZXN0LWxpYmMubyBcCisgCWxpYmNydXgtbWxr ZW0tbWxkc2EubyBzc2gtbWxkc2EtZWRkc2EubyBcCisgCWhtYWMubyBlZDI1NTE5Lm8gZWQyNTUx OS1vcGVuc3NsLm8gXAorQEAgLTExMSwxNCArMTEyLDE2IEBACisgCWtleHNudHJ1cDc2MXgyNTUx OS5vIGtleG1sa2VtNzY4eDI1NTE5Lm8gc250cnVwNzYxLm8ga2V4Z2VuLm8gXAorIAlrZXhnc3Nj Lm8gXAorIAlzZnRwLXJlYWxwYXRoLm8gcGxhdGZvcm0tcGxlZGdlLm8gcGxhdGZvcm0tdHJhY2lu Zy5vIHBsYXRmb3JtLW1pc2MubyBcCistCXNzaGJ1Zi1pby5vIG1pc2MtYWdlbnQubyBzc2hlcnIt bGliY3J5cHRvLm8gYXVkaXRzdHViLm8KKysJc3NoYnVmLWlvLm8gbWlzYy1hZ2VudC5vIHNzaGVy ci1saWJjcnlwdG8ubyBhdWRpdHN0dWIubyBcCisrCW1ldHJpY3MubyBiaW5uLm8gaGFwcHlleWVi YWxscy5vIGNpcGhlci1jdHItbXQtcHJvdmlkZXIubyBcCisrCWNpcGhlci1jdHItbXQtZnVuY3Rp b25zLm8gb3NzbDMtcHJvdmlkZXItZXJyLm8gbnVtLm8KKyAKKyBQMTFPQkpTPSBzc2gtcGtjczEx LWNsaWVudC5vIHNzaC1wa2NzMTEtdXJpLm8KKyAKKyBTS09CSlM9CXNzaC1zay1jbGllbnQubwor IAorIFNTSE9CSlM9IHNzaC5vIHJlYWRjb25mLm8gY2xpZW50bG9vcC5vIHNzaHR0eS5vIFwKKy0J c3NoY29ubmVjdC5vIHNzaGNvbm5lY3QyLm8gbXV4Lm8gc3NoLXBrY3MxMS5vIHNzaC1wa2NzMTEt dXJpLm8gJChTS09CSlMpCisrCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5vIG11eC5vIGNpcGhl ci1zd2l0Y2gubyBzc2gtcGtjczExLm8gc3NoLXBrY3MxMS11cmkubyAkKFNLT0JKUykKKyAKKyBT U0hET0JKUz1zc2hkLm8gXAorIAlwbGF0Zm9ybS1saXN0ZW4ubyBcCitAQCAtMTM3LDcgKzE0MCw3 IEBACisgCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGdzcy1zZXJ2LWdz aS5vIFwKKyAJbG9naW5yZWMubyBhdXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0aC1zaWEubyBc CisgCXNmdHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubyBcCistCXVpZHN3YXAubyBwbGF0Zm9ybS1s aXN0ZW4ubyAkKFAxMU9CSlMpICQoU0tPQkpTKQorKwl1aWRzd2FwLm8gcGxhdGZvcm0tbGlzdGVu Lm8gY2lwaGVyLXN3aXRjaC5vICQoUDExT0JKUykgJChTS09CSlMpCisgCisgU1NIRF9BVVRIX09C SlM9c3NoZC1hdXRoLm8gXAorIAlhdXRoMi1tZXRob2RzLm8gXAorQEAgLTE1Miw3ICsxNTUsNyBA QAorIAlzYW5kYm94LW51bGwubyBzYW5kYm94LXJsaW1pdC5vIHNhbmRib3gtZGFyd2luLm8gXAor IAlzYW5kYm94LXNlY2NvbXAtZmlsdGVyLm8gc2FuZGJveC1jYXBzaWN1bS5vICBzYW5kYm94LXNv bGFyaXMubyBcCisgCXNmdHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubyBcCistCXVpZHN3YXAubyAk KFAxMU9CSlMpICQoU0tPQkpTKQorKwl1aWRzd2FwLm8gY2lwaGVyLXN3aXRjaC5vICQoUDExT0JK UykgJChTS09CSlMpCisgCisgU0ZUUF9DTElFTlRfT0JKUz1zZnRwLWNvbW1vbi5vIHNmdHAtY2xp ZW50Lm8gc2Z0cC1nbG9iLm8gc3NoZXJyLW5vbGliY3J5cHRvLm8KKyAKK0BAIC0yMzYsNyArMjM5 LDcgQEAKKyAJJChMRCkgLW8gJEAgJChTU0hEX0FVVEhfT0JKUykgJChMREZMQUdTKSAtbHNzaCAt bG9wZW5ic2QtY29tcGF0ICQoU1NIRExJQlMpICQoTElCUykgJChHU1NMSUJTKSAkKEs1TElCUykg JChDSEFOTkVMTElCUykgJChMSUJXVE1QREIpCisgCisgc2NwJChFWEVFWFQpOiAkKExJQkNPTVBB VCkgbGlic3NoLmEgJChTQ1BfT0JKUykKKy0JJChMRCkgLW8gJEAgJChTQ1BfT0JKUykgJChMREZM QUdTKSAtbHNzaCAtbG9wZW5ic2QtY29tcGF0ICQoTElCUykKKysJJChMRCkgLW8gJEAgJChTQ1Bf T0JKUykgJChMREZMQUdTKSAtbHNzaCAtbG9wZW5ic2QtY29tcGF0ICQoTElCUykgJChDSEFOTkVM TElCUykKKyAKKyBzc2gtYWRkJChFWEVFWFQpOiAkKExJQkNPTVBBVCkgbGlic3NoLmEgJChTU0hB RERfT0JKUykKKyAJJChMRCkgLW8gJEAgJChTU0hBRERfT0JKUykgJChMREZMQUdTKSAtbHNzaCAt bG9wZW5ic2QtY29tcGF0ICQoTElCUykgJChDSEFOTkVMTElCUykKK2RpZmYgLU51ciBvcGVuc3No LTEwLjVwMS5vcmlnL21ldHJpY3MuYyBvcGVuc3NoLTEwLjVwMS9tZXRyaWNzLmMKKy0tLSBvcGVu c3NoLTEwLjVwMS5vcmlnL21ldHJpY3MuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL21ldHJpY3MuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4 OTg2OTI0MyArMDIwMAorQEAgLTAsMCArMSw0MzkgQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykg MjAyMiBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHku CisrICoKKysgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqCisr ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNl LgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNl ZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgImluY2x1ZGVzLmgiCisrI2luY2x1ZGUgIm1ldHJpY3MuaCIKKysjaW5jbHVkZSAic3No ZXJyLmgiCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKworKy8q IGtlcm5lbCB2ZXJzaW9uIG1hY3JvIG1vdmVkIHRvIGRlZmluZXMuaCAqLworKworKy8qIGFkZCB0 aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGNwX2luZm8gc3RydWN0IHRvIHRoZQorKyAqIHNlcmlh bGl6ZWQgYmluYXJ5IG9iamVjdAorKyAqLworK3ZvaWQKKyttZXRyaWNzX3dyaXRlX2Jpbm5fb2Jq ZWN0KHN0cnVjdCB0Y3BfaW5mbyAqZGF0YSwgc3RydWN0IGJpbm5fc3RydWN0ICpiaW5ub2JqKSB7 CisrI2lmICFkZWZpbmVkIFRDUF9JTkZPCisrCS8qdGNwIGluZm8gaXNuJ3Qgc3VwcG9ydGVkIG9u IHRoaXMgc3lzdGVtICovCisrCXJldHVybjsKKysjZWxzZQorKworKy8qIHRoZSBiYXNlIHNldCBv ZiB0Y3BpXyBtZWFzdXJlbWVudHMgc3RhcnRpbmcgZnJvbSBrZXJuZWwgMy43LjAKKysgKiB0aGVz ZSBtZWFzdXJlbWVudHMgZXhpc3RlZCBpbiBwcmV2aW91cyBrZXJuZWxzIGJ1dCB0aGUgb2xkZXN0 IHRoaXMKKysgKiBpcyBnb2luZyB0byBzdXBwb3J0IGlzIDMuNy4wLiBXZSBkbyBuZWVkIHRvIHN0 b3JlIHRoZSBrZXJuZWwgdmVyc2lvbiBhcyB3ZWxsICovCisrCisrLyogb2J2aW91bHN5IHRoZSB2 ZXJzaW9uIGNvZGUgbWFjcm8gb25seSBleGlzdHMgdW5kZXIgbGludXggc28KKysgKiBvbiBub24g bGludXggc3lzdGVtcyB3ZSBzZXQgdGhlIGtlcm5lbCB2ZXJzaW9uIHRvIDAKKysgKiB3aGljaCB3 aWxsIGdldCB1cyB0aGUgYmFzZSBzZXQgb2YgbWV0cmljcyBmcm9tIG5ldGluZXQvdGNwLmgKKysg Ki8KKysjaWYgKGRlZmluZWQgX19saW51eF9fKSAmJiAhZGVmaW5lZChfX2FscGluZV9fKQorKwli aW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJrZXJuZWxfdmVyc2lvbiIsIExJTlVYX1ZF UlNJT05fQ09ERSk7CisrI2Vsc2UKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi a2VybmVsX3ZlcnNpb24iLCAwKTsKKysjZW5kaWYKKysKKysJLyogdGhlIGZvbGxvd2luZyBhcmUg Y29tbW9uIHVuZGVyIGJvdGggbGludXggYW5kIEJTRCAqLworKwliaW5uX29iamVjdF9zZXRfdWlu dDgoYmlubm9iaiwgInRjcGlfc25kX3dzY2FsZSIsCisrCQkJICAgICAgZGF0YS0+dGNwaV9zbmRf d3NjYWxlKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Jjdl93c2Nh bGUiLAorKwkJCSAgICAgIGRhdGEtPnRjcGlfcmN2X3dzY2FsZSk7CisrCWJpbm5fb2JqZWN0X3Nl dF91aW50OChiaW5ub2JqLCAidGNwaV9zdGF0ZSIsCisrCQkJICAgICAgZGF0YS0+dGNwaV9zdGF0 ZSk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9vcHRpb25zIiwKKysJ CQkgICAgICBkYXRhLT50Y3BpX29wdGlvbnMpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJp bm5vYmosICJ0Y3BpX3NuZF9zc3RocmVzaCIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfc25kX3Nz dGhyZXNoKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHQiLAor KwkJCSAgICAgICBkYXRhLT50Y3BpX3J0dCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlu bm9iaiwgInRjcGlfbGFzdF9kYXRhX3JlY3YiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2xhc3Rf ZGF0YV9yZWN2KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHR2 YXIiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3J0dHZhcik7CisrCWJpbm5fb2JqZWN0X3NldF91 aW50MzIoYmlubm9iaiwgInRjcGlfc25kX2N3bmQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3Nu ZF9jd25kKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfbXNz IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9yY3ZfbXNzKTsKKysJYmlubl9vYmplY3Rfc2V0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9ydG8iLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3J0byk7Cisr CWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX21zcyIsCisrCQkJICAg ICAgIGRhdGEtPnRjcGlfc25kX21zcyk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9i aiwgInRjcGlfcmN2X3NwYWNlIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9yY3Zfc3BhY2UpOwor KworKy8qIHRoZSBmb2xsb3dpbmcgZXhpc3QgdW5kZXIgYm90aCBidXQgd2l0aCBkaWZmZXJlbnQg bmFtZXMgKi8KKysjaWZkZWYgX19saW51eF9fCisrCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5u b2JqLCAidGNwaV9jYV9zdGF0ZSIsCisrCQkJICAgICAgZGF0YS0+dGNwaV9jYV9zdGF0ZSk7Cisr CWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9wcm9iZXMiLAorKwkJCSAgICAg IGRhdGEtPnRjcGlfcHJvYmVzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0 Y3BpX2JhY2tvZmYiLAorKwkJCSAgICAgIGRhdGEtPnRjcGlfYmFja29mZik7CisrCWJpbm5fb2Jq ZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9yZXRyYW5zbWl0cyIsCisrCQkJICAgICAgZGF0 YS0+dGNwaV9yZXRyYW5zbWl0cyk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwg InRjcGlfcmN2X3NzdGhyZXNoIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9yY3Zfc3N0aHJlc2gp OworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NhY2tlZCIsCisrCQkJ ICAgICAgIGRhdGEtPnRjcGlfc2Fja2VkKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5u b2JqLCAidGNwaV9wbXR1IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9wbXR1KTsKKysJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9mYWNrZXRzIiwKKysJCQkgICAgICAgZGF0 YS0+dGNwaV9mYWNrZXRzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNw aV9sb3N0IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9sb3N0KTsKKysJYmlubl9vYmplY3Rfc2V0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19zZW50IiwKKysJCQkgICAgICAgZGF0YS0+ dGNwaV9sYXN0X2Fja19zZW50KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV91bmFja2VkIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV91bmFja2VkKTsKKysJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2RhdGFfc2VudCIsCisrCQkJICAg ICAgIGRhdGEtPnRjcGlfbGFzdF9kYXRhX3NlbnQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMy KGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3JlY3YiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2xh c3RfYWNrX3JlY3YpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jl b3JkZXJpbmciLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jlb3JkZXJpbmcpOworKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2Fkdm1zcyIsCisrCQkJICAgICAgIGRhdGEt PnRjcGlfYWR2bXNzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9y ZXRyYW5zIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9yZXRyYW5zKTsKKysJYmlubl9vYmplY3Rf c2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9hdG8iLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2F0 byk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3J0dCIsCisr CQkJICAgICAgIGRhdGEtPnRjcGlfcmN2X3J0dCk7CisrI2Vsc2UKKysJYmlubl9vYmplY3Rfc2V0 X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2JhY2tvZmYiLAorKwkJCSAgICAgIGRhdGEtPl9fdGNwaV9i YWNrb2ZmKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2NhX3N0YXRl IiwKKysJCQkgICAgICBkYXRhLT5fX3RjcGlfY2Ffc3RhdGUpOworKwliaW5uX29iamVjdF9zZXRf dWludDgoYmlubm9iaiwgInRjcGlfcHJvYmVzIiwKKysJCQkgICAgICBkYXRhLT5fX3RjcGlfcHJv YmVzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3JldHJhbnNtaXRz IiwKKysJCQkgICAgICBkYXRhLT5fX3RjcGlfcmV0cmFuc21pdHMpOworKwliaW5uX29iamVjdF9z ZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9zc3RocmVzaCIsCisrCQkJICAgICAgIGRhdGEt Pl9fdGNwaV9yY3Zfc3N0aHJlc2gpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmos ICJ0Y3BpX3NhY2tlZCIsCisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9zYWNrZWQpOworKwliaW5u X29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3BtdHUiLAorKwkJCSAgICAgICBkYXRh LT5fX3RjcGlfcG10dSk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlf ZmFja2V0cyIsCisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9mYWNrZXRzKTsKKysJYmlubl9vYmpl Y3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sb3N0IiwKKysJCQkgICAgICAgZGF0YS0+X190 Y3BpX2xvc3QpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3Rf YWNrX3NlbnQiLAorKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfbGFzdF9hY2tfc2VudCk7CisrCWJp bm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfdW5hY2tlZCIsCisrCQkJICAgICAg IGRhdGEtPl9fdGNwaV91bmFja2VkKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9sYXN0X2RhdGFfc2VudCIsCisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9sYXN0X2Rh dGFfc2VudCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9h Y2tfcmVjdiIsCisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9sYXN0X2Fja19yZWN2KTsKKysJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZGVyaW5nIiwKKysJCQkgICAg ICAgZGF0YS0+X190Y3BpX3Jlb3JkZXJpbmcpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJp bm5vYmosICJ0Y3BpX2Fkdm1zcyIsCisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9hZHZtc3MpOwor KwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3JldHJhbnMiLAorKwkJCSAg ICAgICBkYXRhLT5fX3RjcGlfcmV0cmFucyk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlu bm9iaiwgInRjcGlfYXRvIiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2F0byk7CisrCWJpbm5f b2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3J0dCIsCisrCQkJICAgICAgIGRh dGEtPl9fdGNwaV9yY3ZfcnR0KTsKKysjZW5kaWYKKysKKysvKiBVbmRlciBCU0Qgc25kX3JleG1p dHBhY2sgaXMgdGhlIHNhbWUgYXMgbGludXggdG90YWxfcmV0cmFucyovCisrI2lmZGVmIF9fbGlu dXhfXworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3RvdGFsX3JldHJh bnMiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3RvdGFsX3JldHJhbnMpOworKyNlbHNlCisrCWJp bm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfdG90YWxfcmV0cmFucyIsCisrCQkJ ICAgICAgIGRhdGEtPnRjcGlfc25kX3JleG1pdHBhY2spOworKyNlbmRpZgorKworKy8qIFRoZSBs YXN0IHNlY3Rpb24gYXJlIGZvciBrZXJuZWwgc3BlY2lmaWMgbWV0cmljcyBpbiBsaW51eCAqLwor KyNpZmRlZiBfX2xpbnV4X18KKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJT SU9OKDMsMTUsMCkKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9tYXhf cGFjaW5nX3JhdGUiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX21heF9wYWNpbmdfcmF0ZSk7Cisr CWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfcGFjaW5nX3JhdGUiLAorKwkJ CSAgICAgICBkYXRhLT50Y3BpX3BhY2luZ19yYXRlKTsKKysjZW5kaWYKKysKKysjaWYgTElOVVhf VkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsMSwwKQorKwliaW5uX29iamVjdF9zZXRf dWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX2Fja2VkIiwKKysJCQkgICAgICAgZGF0YS0+dGNw aV9ieXRlc19hY2tlZCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlf Ynl0ZXNfcmVjZWl2ZWQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2J5dGVzX3JlY2VpdmVkKTsK KysjZW5kaWYKKysKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQs MiwwKQorKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NlZ3NfaW4iLAor KwkJCSAgICAgICBkYXRhLT50Y3BpX3NlZ3NfaW4pOworKwliaW5uX29iamVjdF9zZXRfdWludDMy KGJpbm5vYmosICJ0Y3BpX3NlZ3Nfb3V0IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9zZWdzX291 dCk7CisrI2VuZGlmCisrCisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lP Tig0LDYsMCkKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ub3RzZW50 X2J5dGVzIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9ub3RzZW50X2J5dGVzKTsKKysJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9taW5fcnR0IiwKKysJCQkgICAgICAgZGF0 YS0+dGNwaV9taW5fcnR0KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNw aV9kYXRhX3NlZ3NfaW4iLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2RhdGFfc2Vnc19pbik7Cisr CWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfZGF0YV9zZWdzX291dCIsCisr CQkJICAgICAgIGRhdGEtPnRjcGlfZGF0YV9zZWdzX291dCk7CisrI2VuZGlmCisrCisrI2lmIExJ TlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDksMCkKKysJYmlubl9vYmplY3Rf c2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJ5X3JhdGVfYXBwX2xpbWl0ZWQiLAorKwkJ CSAgICAgIGRhdGEtPnRjcGlfZGVsaXZlcnlfcmF0ZV9hcHBfbGltaXRlZCk7CisrCWJpbm5fb2Jq ZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZSIsCisrCQkJICAgICAg IGRhdGEtPnRjcGlfZGVsaXZlcnlfcmF0ZSk7CisrI2VuZGlmCisrCisrI2lmIExJTlVYX1ZFUlNJ T05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDEwLDApCisrCWJpbm5fb2JqZWN0X3NldF91aW50 NjQoYmlubm9iaiwgInRjcGlfYnVzeV90aW1lIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9idXN5 X3RpbWUpOworKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX3NuZGJ1Zl9s aW1pdGVkIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRidWZfbGltaXRlZCk7CisrCWJpbm5f b2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfcnduZF9saW1pdGVkIiwKKysJCQkgICAg ICAgZGF0YS0+dGNwaV9yd25kX2xpbWl0ZWQpOworKyNlbmRpZgorKworKyNpZiBMSU5VWF9WRVJT SU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCwxOCwwKQorKwliaW5uX29iamVjdF9zZXRfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJlZCIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfZGVs aXZlcmVkKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kZWxpdmVy ZWRfY2UiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2RlbGl2ZXJlZF9jZSk7CisrI2VuZGlmCisr CisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDE5LDApCisrCWJp bm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfc2VudCIsCisrCQkJICAg ICAgIGRhdGEtPnRjcGlfYnl0ZXNfc2VudCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlu bm9iaiwgInRjcGlfYnl0ZXNfcmV0cmFucyIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfYnl0ZXNf cmV0cmFucyk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfZHNhY2tf ZHVwcyIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfZHNhY2tfZHVwcyk7CisrCWJpbm5fb2JqZWN0 X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRfc2VlbiIsCisrCQkJICAgICAgIGRhdGEt PnRjcGlfcmVvcmRfc2Vlbik7CisrI2VuZGlmCisrCisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+ PSBLRVJORUxfVkVSU0lPTig1LDQsMCkKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9zbmRfd25kIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRfd25kKTsKKysJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3Zfb29vcGFjayIsCisrCQkJICAg ICAgIGRhdGEtPnRjcGlfcmN2X29vb3BhY2spOworKyNlbmRpZgorKworKyNpZiBMSU5VWF9WRVJT SU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNSw1LDApCisrCWJpbm5fb2JqZWN0X3NldF91aW50 OChiaW5ub2JqLCAidGNwaV9mYXN0b3Blbl9jbGllbnRfZmFpbCIsCisrCQkJICAgICAgZGF0YS0+ dGNwaV9mYXN0b3Blbl9jbGllbnRfZmFpbCk7CisrI2VuZGlmCisrI2VuZGlmIC8qZW5kaWYgZm9y ICNpZmRlZiBfX2xpbnV4X18gKi8KKysjZW5kaWYgLyplbmRpZiBmb3IgVENQX0lORk8gKi8KKyt9 CisrCisrLyogdGhpcyByZWFkcyBvdXQgdGhlIHRjcF9pbmZvIGJpbm4gb2JqZWN0IGFuZCBmb3Jt YXRzIGl0IGludG8gYSBzaW5nbGUgbGluZQorKyAqIHRoZSBvYmplY3Qgd2lsbCBub3QgbmVjZXNz YXJpbHkgaGF2ZSBhbGwgb2YgdGhlIGVsZW1lbnRzLiBJZiBpdCdzIGVtcHR5IGl0CisrICogY3Vy cmVudCBqdXN0IHNwaXRzIG91dCAwLiBUaGlzIGlzbid0IG9wdGltYWwgYXMgMCBjYW4gYWxzbyBi ZSBhIHZhbGlkIHZhbHVlICovCisrdm9pZAorK21ldHJpY3NfcmVhZF9iaW5uX29iamVjdCAodm9p ZCAqYmlubm9iaiwgY2hhciAqb3V0cHV0KSB7CisrCWludCBsZW4gPSAwOworKwlpbnQgYnVmbGVu ID0gMTAyMzsKKysJaW50IGtlcm5lbF92ZXJzaW9uID0gMDsKKysJaWYgKGJpbm5vYmogPT0gTlVM TCkgeworKwkJZnByaW50ZihzdGRlcnIsICJNZXRyaWMgcG9sbGluZyByZXR1cm5lZCBiYWQgZGF0 YS5cbiIpOworKwkJcmV0dXJuOworKwl9CisrCWtlcm5lbF92ZXJzaW9uID0gYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJrZXJuZWxfdmVyc2lvbiIpOworKworKwkvKiBiYXNlIHNldCBvZiBt ZXRyaWNzICovCisrCWxlbiA9IHNucHJpbnRmKG91dHB1dCwgYnVmbGVuLCAiJWQsICVkLCAlZCwg JWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAl ZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVk IiwKKysJCSAgICAgICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9zdGF0ZSIpLAor KwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2NhX3N0YXRlIiksCisr CQkgICAgICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfcmV0cmFuc21pdHMiKSwK KysJCSAgICAgICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9wcm9iZXMiKSwKKysJ CSAgICAgICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9iYWNrb2ZmIiksCisrCQkg ICAgICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfb3B0aW9ucyIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3NuZF93c2NhbGUiKSwKKysJCSAg ICAgICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9yY3Zfd3NjYWxlIiksCisrCQkg ICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0byIpLAorKwkJICAgICAg IGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9hdG8iKSwKKysJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX21zcyIpLAorKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfbXNzIiksCisrCQkgICAgICAgYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3VuYWNrZWQiKSwKKysJCSAgICAgICBiaW5uX29i amVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Fja2VkIiksCisrCQkgICAgICAgYmlubl9vYmpl Y3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xvc3QiKSwKKysJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfcmV0cmFucyIpLAorKwkJICAgICAgIGJpbm5fb2JqZWN0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9mYWNrZXRzIiksCisrCQkgICAgICAgYmlubl9vYmplY3RfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfZGF0YV9zZW50IiksCisrCQkgICAgICAgYmlubl9vYmpl Y3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3NlbnQiKSwKKysJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9kYXRhX3JlY3YiKSwKKysJCSAgICAg ICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfcmVjdiIpLAorKwkJ ICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9wbXR1IiksCisrCQkgICAg ICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9zc3RocmVzaCIpLAorKwkJ ICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHQiKSwKKysJCSAgICAg ICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcnR0dmFyIiksCisrCQkgICAgICAg Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF9zc3RocmVzaCIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfY3duZCIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9hZHZtc3MiKSwKKysJCSAgICAg ICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRlcmluZyIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfcnR0IiksCisrCQkgICAg ICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9zcGFjZSIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV90b3RhbF9yZXRyYW5zIikKKysJ CSk7CisrCisrCS8qIGNvbXBhcmUgdGhlIHJlY2VpdmVkIGtlcm5lbCB2ZXJzaW9uIHRvIHRoZSB2 ZXJzaW9uIHRoYXQgc3VwcG9ydHMKKysJICogYW55IGdpdmVuIG1ldHJpYy4gVGhpcyBtZWFucyB0 aGF0IGEgcmVtb3RlIGhvc3QgdGhhdCBoYXMgYSBkaWZmZXJlbnQKKysJICoga2VybmVsIHRoYXQg dGhlIGxvY2FsIGhvc3Qgd2lsbCBiZSBhYmxlIHRvIHByb2Nlc3MgdGhlIGRhdGEgaW4gdGVybXMg b2YKKysJICogdGhlIHJlbW90ZSBrZXJuZWwgdmVyc2lvbi4gT25seSBuZWNlc3NhcnkgdW5kZXIg bGludXgqLworKyNpZmRlZiBfX2xpbnV4X18KKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5F TF9WRVJTSU9OKDMsMTUsMCkpIHsKKysJCWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVuLCAoYnVm bGVuLWxlbiksICIsICVsbHUsICVsbHUiLAorKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9i aiwgInRjcGlfbWF4X3BhY2luZ19yYXRlIiksCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5u b2JqLCAidGNwaV9wYWNpbmdfcmF0ZSIpCisrCQkJKTsKKysJfQorKworKwlpZiAoa2VybmVsX3Zl cnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxLDApKSB7CisrCQlsZW4gKz0gc25wcmludGYob3V0 cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlbGx1LCAlbGx1IiwKKysJCQkJYmlubl9vYmplY3Rf dWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX2Fja2VkIiksCisrCQkJCWJpbm5fb2JqZWN0X3Vp bnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19yZWNlaXZlZCIpCisrCQkJKTsKKysJfQorKworKwlp ZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwyLDApKSB7CisrCQlsZW4gKz0g c25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQiLAorKwkJCQliaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Vnc19pbiIpLAorKwkJCQliaW5uX29iamVj dF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Vnc19vdXQiKQorKwkJCSk7CisrCX0KKysKKysJaWYg KGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsNiwwKSkgeworKwkJbGVuICs9IHNu cHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkLCAlZCwgJWQiLAorKwkJ CQliaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfbm90c2VudF9ieXRlcyIpLAorKwkJ CQliaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfbWluX3J0dCIpLAorKwkJCQliaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfZGF0YV9zZWdzX2luIiksCisrCQkJCWJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3Nfb3V0IikKKysJCQkpOworKwl9 CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDksMCkpIHsKKysJ CWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlbGx1IiwK KysJCQkJYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZV9hcHBf bGltaXRlZCIpLAorKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfZGVsaXZl cnlfcmF0ZSIpCisrCQkJKTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVM X1ZFUlNJT04oNCwxMCwwKSkgeworKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZs ZW4tbGVuKSwgIiwgJWxsdSwgJWxsdSwgJWxsdSIsCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChi aW5ub2JqLCAidGNwaV9idXN5X3RpbWUiKSwKKysJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5v YmosICJ0Y3BpX3NuZGJ1Zl9saW1pdGVkIiksCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5u b2JqLCAidGNwaV9yd25kX2xpbWl0ZWQiKQorKwkJCSk7CisrCX0KKysKKysJaWYgKGtlcm5lbF92 ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsMTgsMCkpIHsKKysJCWxlbiArPSBzbnByaW50Zihv dXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlZCIsCisrCQkJCWJpbm5fb2JqZWN0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9kZWxpdmVyZWQiKSwKKysJCQkJYmlubl9vYmplY3RfdWludDMy KGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJlZF9jZSIpCisrCQkJKTsKKysJfQorKworKwlpZiAoa2Vy bmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxOSwwKSkgeworKwkJbGVuICs9IHNucHJp bnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWxsdSwgJWxsdSwgJWQsICVkIiwKKysJ CQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3NlbnQiKSwKKysJCQkJ Ymlubl9vYmplY3RfdWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3JldHJhbnMiKSwKKysJCQkJ Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RzYWNrX2R1cHMiKSwKKysJCQkJYmlu bl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jlb3JkX3NlZW4iKQorKwkJCSk7CisrCX0K KysKKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNCwwKSkgeworKwkJ bGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkIiwKKysJ CQkJYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF93bmQiKSwKKysJCQkJYmlu bl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9vb29wYWNrIikKKysJCQkpOworKwl9 CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig1LDUsMCkpIHsKKysJ CWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkIiwKKysJCQkJ Ymlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfZmFzdG9wZW5fY2xpZW50X2ZhaWwiKQor KwkJCSk7CisrCX0KKysjZW5kaWYgLyogaWZkZWYgX19saW51eF9fICovCisrfQorKworKy8qIFBy aW50IG91dCB0aGUgaGVhZGVyIHRvIHRoZSBmaWxlIHNvIHRoYXQgdGhlIGNvbHVtbiBoZWFkZXIg bWF0Y2hlcyB0aGUKKysgKiBkYXRhIGluIHRoZSBtZXRyaWNzIG9iamVjdC4gVGhhdCB2YXJpZXMg Ynkga2VybmVsIHZlcnNpb24gc28gd2UgaGF2ZSB0bworKyAqIGRvIHRlc3RzIGZvciBlYWNoIHBv c3NpYmxlIHZlcnNpb24gd2hlcmUgdGhleSBhZGRlZCBuZXcgdmFsdWVzIHRvIHRjcF9pbmZvCisr ICogTk9URTogVGhpcyBkb2Vzbid0IHB1dCB0aGUgdmFsdWVzL2hlYWRlcnMgaW4gdGhlIG1vc3Qg dXNlZnVsIG9yZGVyIGJ1dCB0aGUKKysgKiByZXN1bHRpbmcgZmlsZSBpcyBwcm9iYWJseSBnb2lu ZyB0byBnZXQgcHJvY2Vzc2VkIGJ5IHNvbWV0aGluZyAqLworK3ZvaWQKKyttZXRyaWNzX3ByaW50 X2hlYWRlcihGSUxFICpmcHRyLCBjaGFyICpleHRyYV90ZXh0LCBpbnQga2VybmVsX3ZlcnNpb24p IHsKKysJaWYgKGV4dHJhX3RleHQgIT0gTlVMTCkgeworKwkJZnByaW50ZihmcHRyLCAiJXNcbiIs IGV4dHJhX3RleHQpOworKwl9CisrCWZwcmludGYoZnB0ciwgInRpbWVzdGFtcCwgc3RhdGUsIGNh X3N0YXRlLCByZXRyYW5zbWl0cywgcHJvYmVzLCBiYWNrb2ZmLCBvcHRpb25zLCAiKTsKKysJZnBy aW50ZihmcHRyLCAic25kX3dzY2FsZSwgcmN2X3dzY2FsZSwgcnRvLCBhdG8sIHNuZF9tc3MsIHJj dl9tc3MsIHVuYWNrZWQsIHNhY2tlZCwgbG9zdCwgcmV0cmFucywgIik7CisrCWZwcmludGYoZnB0 ciwgImZhY2tldHMsIGxhc3RfZGF0YV9zZW50LCBsYXN0X2Fja19zZW50LCBsYXN0X2RhdGFfcmVj diwgIik7CisrCWZwcmludGYoZnB0ciwgImxhc3RfYWNrX3JlY3YsIHBtdHUsIHJjdl9zc3RocmVz aCwgcnR0LCBydHR2YXIsIHNuZF9zc3RocmVzaCwgIik7CisrCWZwcmludGYoZnB0ciwgInNuZF9j d25kLCBhZHZtc3MsIHJlb3JkZXJpbmcsIHJjdl9ydHQsIHJjdl9zcGFjZSwgdG90YWxfcmV0cmFu cyIpOworKworKwkvKiBjb21wYXJlIHRoZSByZWNlaXZlZCBrZXJuZWwgdmVyc2lvbiB0byB0aGUg dmVyc2lvbiB0aGF0IHN1cHBvcnRzCisrCSAqIGFueSBnaXZlbiBtZXRyaWMuIFRoaXMgd2F5IHdl IGNhbiBwcmludCBjb25zaXN0ZW50IGhlYWRlcnMuCisrCSAqIE9ubHkgbmVjZXNzYXJ5IHVuZGVy IGxpbnV4Ki8KKysjaWZkZWYgX19saW51eF9fCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJO RUxfVkVSU0lPTigzLDE1LDApKSB7CisrCQlmcHJpbnRmKGZwdHIsICIsIG1heF9wYWNpbmdfcmF0 ZSwgcGFjaW5nX3JhdGUiKTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVM X1ZFUlNJT04oNCwxLDApKSB7CisrCQlmcHJpbnRmKGZwdHIsICIsIGJ5dGVzX2Fja2VkLCBieXRl c19yZWNlaXZlZCIpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVS U0lPTig0LDIsMCkpIHsKKysJCWZwcmludGYoZnB0ciwgIiwgc2Vnc19pbiwgc2Vnc19vdXQiKTsK KysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCw2LDApKSB7 CisrCQlmcHJpbnRmKGZwdHIsICIsIG5vdHNlbnRfYnl0ZXMsIG1pbl9ydHQsIGRhdGFfc2Vnc19p biwgZGF0YV9zZWdfb3V0Iik7CisrCX0KKysKKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5F TF9WRVJTSU9OKDQsOSwwKSkgeworKwkJZnByaW50ZihmcHRyLCAiLCBkZWxpdmVyeV9yYXRlX2Fw cF9saW1pdGVkLCBkZWxpdmVyeV9yYXRlIik7CisrCX0KKysKKysJaWYgKGtlcm5lbF92ZXJzaW9u ID49IEtFUk5FTF9WRVJTSU9OKDQsMTAsMCkpIHsKKysJCWZwcmludGYoZnB0ciwgIiwgYnVzeV90 aW1lLCBzbmRidWZfbGltaXRlZCwgcnduZF9saW1pdGVkIik7CisrCX0KKysKKysJaWYgKGtlcm5l bF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsMTgsMCkpIHsKKysJCWZwcmludGYoZnB0ciwg IiwgZGVsaXZlcmVkLCBkZWxpdmVyZWRfY2UiKTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNp b24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxOSwwKSkgeworKwkJZnByaW50ZihmcHRyLCAiLCBieXRl c19zZW50LCBieXRlc19yZXRyYW5zLCBkc2Fja19kdXBzLCByZW9yZF9zZWVuIik7CisrCX0KKysK KysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNCwwKSkgeworKwkJZnBy aW50ZihmcHRyLCAiLCBzbmRfd25kLCByY3Zfb29vcGFjayIpOworKwl9CisrCisrCWlmIChrZXJu ZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig1LDUsMCkpIHsKKysJCWZwcmludGYoZnB0ciwg IiwgZmFzdG9wZW5fY2xpZW50X2ZhaWwiKTsKKysJfQorKyNlbmRpZiAvKiBpZmRlZiBfX2xpbnV4 X18gKi8KKysJZnByaW50ZihmcHRyLCAiXG5cbiIpOworK30KK2RpZmYgLU51ciBvcGVuc3NoLTEw LjVwMS5vcmlnL21ldHJpY3MuaCBvcGVuc3NoLTEwLjVwMS9tZXRyaWNzLmgKKy0tLSBvcGVuc3No LTEwLjVwMS5vcmlnL21ldHJpY3MuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2gtMTAuNXAxL21ldHJpY3MuaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4OTky NTg0NCArMDIwMAorQEAgLTAsMCArMSw0NSBAQAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDIy IFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KKysg KgorKyAqICBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+CisrICoKKysgKiBU aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCisr ICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKysgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKysgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OworKyAqIGlmIG5vdCwgc2VlIGh0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCisrICoKKysgKi8KKysKKysjaWZuZGVm IE1FVFJJQ1NfSAorKyNkZWZpbmUgTUVUUklDU19ICisrCisrI2luY2x1ZGUgImJpbm4uaCIKKysK KysvKiBsaW51eCwgZnJlZWJzZCwgYW5kIG5ldGJzZCBoYXZlIHRjcF9pbmZvIHN0cnVjdHMuCisr ICogSSBkb24ndCBrbm93IGFib3V0IG90aGVyIHN5c3RlbXMgc28gd2UgZGlzYWJsZSB0aGlzCisr ICogZnVuY3Rpb25hbGl0eSBmb3IgdGhlbSAqLworKyNpZiBkZWZpbmVkIF9fbGludXhfXyB8fCBk ZWZpbmVkIF9fRnJlZUJTRF9fIHx8IGRlZmluZWQgX19OZXRCU0RfXyAmJiAhZGVmaW5lZChfX2Fs cGluZV9fKQorKyNkZWZpbmUgVENQX0lORk8gMQorKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiAh ZGVmaW5lZChfX2FscGluZV9fKQorKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKysjZWxzZQorKyNp bmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorKyNlbmRpZgorKyNlbHNlCisrLyogbWFrZSBhIG51bGwg c3RydWN0IGZvciB0Y3BfaW5mbyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCovCisr dHlwZWRlZiBzdHJ1Y3QgdGNwX2luZm8geworKwl2b2lkICAgICAqZHVtbXk7CisrfSB0Y3BfaW5m bzsKKysjZW5kaWYKKysKKyt2b2lkIG1ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3Qoc3RydWN0IHRj cF9pbmZvICosIHN0cnVjdCBiaW5uX3N0cnVjdCAqKTsKKyt2b2lkIG1ldHJpY3NfcmVhZF9iaW5u X29iamVjdCh2b2lkICosIGNoYXIgKik7Cisrdm9pZCBtZXRyaWNzX3ByaW50X2hlYWRlcihGSUxF ICosIGNoYXIgKiwgaW50KTsKKysKKysKKysjZW5kaWYgLyogZGVmaW5lIG1ldHJpY3NfaCAqLwor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvbWlzYy5jIG9wZW5zc2gtMTAuNXAxL21pc2Mu YworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbWlzYy5jCTIwMjYtMDktMjEgMDc6MDY6MDUuNTYw OTU4MDgyICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvbWlzYy5jCTIwMjYtMDktMjEgMDc6MDY6 NTkuODkwMDMxNTUxICswMjAwCitAQCAtNjYsNiArNjYsODQgQEAKKyAjaW5jbHVkZSAic3NoZXJy LmgiCisgI2luY2x1ZGUgInBsYXRmb3JtLmgiCisgCisrLyogRnVuY3Rpb24gdG8gZGV0ZXJtaW5l IGlmIEZJUFMgaXMgZW5hYmxlZCBvciBub3QuCisrICogV2UgYXNzdW1lIHRoYXQgZmlwcyBpcyBu b3QgZW5hYmxlZCBhbmQgdGhlbiB0ZXN0IGZyb20gdGhlcmUuCisrICogVGhlIGlkZWEgaXMgdGhh dCBpZiB0aGVyZSBpcyBhbiBlcnJvciBvciB3ZSBjYW4ndCByZWFkIHRoZSB2YWx1ZQorKyAqIHRo ZW4gZWl0aGVyIHRoZSBPUyBkb2Vzbid0IHN1cHBvcnQgRklQUyBvciB0aGF0IEZJUFMgd2lsbAor KyAqIGNhdGNoIGFueXRoaW5nIHdlIHRyeSB0byBkbyB0aGF0J3Mgbm90IEZJUFMgY29tcGxpYW50 LgorKyAqIFRoYXQgd291bGQgYmUgbGltaXRlZCB0byB0cnlpbmcgdG8gdXNlIG9uZSBvZiB0aGUg cGFyYWxsZWwgY2lwaGVycy4KKysgKi8KKytpbnQKKytmaXBzX2VuYWJsZWQoKQorK3sKKysJaW50 IG1vZGUgPSAwOworKwljb25zdCBjaGFyKiBmaXBzX3BhdGggPSAiL3Byb2Mvc3lzL2NyeXB0by9m aXBzX2VuYWJsZWQiOworKwlGSUxFICpmaXBzX2VuYWJsZWQgPSBOVUxMOworKworKwlkZWJ1ZzJf ZigiQ2hlY2tpbmcgZm9yIEZJUFMiKTsKKysKKysJLyogaWYgd2UgY2FuJ3Qgb3BlbiB0aGUgcGF0 aCB0byBmaXBzX2VuYWJsZWQgaXQKKysJICogZWl0aGVyIGRvZXNuJ3QgZXhpc3Qgb3IgdGhlcmUg aXMgYW4gZXJyb3IuIEluIGVpdGhlcgorKwkgKiBjYXNlIHdlIHRyZWF0IGl0IGFzIGlmIGZpcHMg aXMgKm5vdCogZW5hYmxlZC4KKysJICogVGhpcyBpcyBiZWNhdXNlIEkgd2FudCB0byBmYWlsIHRv d2FyZHMgdGhlIG1vc3QKKysJICogY29tbW9uIHNjZW5hcmlvIHdoaWNoIGlzIHRoYXQgZmlwc19l bmFibGVkIGVpdGhlcgorKwkgKiBkb2Vzbid0IGV4aXN0IChub24tZmVkb3JhIHZhcmlhbnRzKSBv ciBpc24ndAorKwkgKiBlbmFibGVkLgorKwkgKi8KKysJZmlwc19lbmFibGVkID0gZm9wZW4oZmlw c19wYXRoLCAiciIpOworKwlpZiAoIWZpcHNfZW5hYmxlZCkgeworKwkJZGVidWczX2YoIkNhbm5v dCBvcGVuIHBhdGggdG8gZmlwc19lbmFibGVkLiIpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJ LyogZmlwc19lbmFibGVkIGRvZXMgZXhpc3Qgc28gcmVhZCB0aGUgdmFsdWUuCisrCSAqIEl0IHNo b3VsZCBiZSBlaXRoZXIgMCAoZGlzYWJsZWQpIG9yIDEgKGVuYWJsZWQpCisrCSAqLworKwlpZiAo IDEgIT0gZnNjYW5mKGZpcHNfZW5hYmxlZCwiJWQiLCAmbW9kZSkgKSB7CisrCQkvKiBpZiB3ZSBn ZXQgc29tZSBlcnJvciBoZXJlIHRoZW4gd2UKKysJCSAqIGFnYWluIGZhaWwgdG8gcmV0dXJuaW5n IGZpcHMgYmVpbmcgZGlzYWJsZWQKKysJCSAqLworKwkJZGVidWczX2YoIkVycm9yIHByb2Nlc3Np bmcgZmlwc19lbmFibGVkLiIpOworKwkJZmNsb3NlKGZpcHNfZW5hYmxlZCk7CisrCQlyZXR1cm4g MDsKKysJfQorKworKwkvKiBsZXQgdGhlIHVzZXIga25vdyB0aGUgc3RhdHVzICovCisrCWlmICht b2RlID09IDApCisrCQlkZWJ1ZzNfZigiRklQUyBtb2RlIGlzIGRpc2FibGVkLiIpOworKwllbHNl CisrCQlkZWJ1ZzNfZigiRklQUyBtb2RlIGlzIGVuYWJsZWQuIik7CisrCisrCWZjbG9zZShmaXBz X2VuYWJsZWQpOworKwlyZXR1cm4gbW9kZTsKKyt9CisrCisrLyogaGVscGVyIGZ1bmN0aW9uIHVz ZWQgdG8gZGV0ZXJtaW5lIG1lbW9yeSB1c2FnZSBkdXJpbmcKKysgKiBkZXZlbG9wbWVudCBwcm9j ZXNzLiBOb3QgdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uLgorKyAqLworK3ZvaWQKKytyZWFkX21l bV9zdGF0cyhzdGF0bV90ICpyZXN1bHQsIGludCBwb3N0X2F1dGgpCisreworKwlpZiAoIXBvc3Rf YXV0aCkKKysJCXJldHVybjsKKysKKysJY29uc3QgY2hhciogc3RhdG1fcGF0aCA9ICIvcHJvYy9z ZWxmL3N0YXRtIjsKKysKKysJRklMRSAqZiA9IGZvcGVuKHN0YXRtX3BhdGgsInIiKTsKKysJaWYo IWYpeworKwkJcGVycm9yKHN0YXRtX3BhdGgpOworKwkJYWJvcnQoKTsKKysJfQorKwlpZig3ICE9 IGZzY2FuZihmLCIlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUiLAorKwkJICAgICAgICZyZXN1 bHQtPnNpemUsICZyZXN1bHQtPnJlc2lkZW50LCAmcmVzdWx0LT5zaGFyZSwgJnJlc3VsdC0+dGV4 dCwgJnJlc3VsdC0+bGliLAorKwkJICAgICAgICZyZXN1bHQtPmRhdGEsICZyZXN1bHQtPmR0KSkK KysJeworKwkJcGVycm9yKHN0YXRtX3BhdGgpOworKwkJYWJvcnQoKTsKKysJfQorKwlmY2xvc2Uo Zik7CisrfQorKworIC8qIHJlbW92ZSBuZXdsaW5lIGF0IGVuZCBvZiBzdHJpbmcgKi8KKyBjaGFy ICoKKyBjaG9wKGNoYXIgKnMpCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9taXNjLmgg b3BlbnNzaC0xMC41cDEvbWlzYy5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9taXNjLmgJMjAy Ni0wOS0yMSAwNzowNjowNC44NjIwNTEwODYgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9taXNj LmgJMjAyNi0wOS0yMSAwNzowNjo1OS44OTA1OTU1MTYgKzAyMDAKK0BAIC0yNzYsNCArMjc2LDE3 IEBACisgCQkgICAgc3RyZXJyb3IoZXJybm8pKTsgXAorIH0gd2hpbGUgKDApCisgCisrdHlwZWRl ZiBzdHJ1Y3Qgc3RhdG1fdCB7CisrICB1bnNpZ25lZCBsb25nIHNpemU7CisrICB1bnNpZ25lZCBs b25nIHJlc2lkZW50OworKyAgdW5zaWduZWQgbG9uZyBzaGFyZTsKKysgIHVuc2lnbmVkIGxvbmcg dGV4dDsKKysgIHVuc2lnbmVkIGxvbmcgbGliOworKyAgdW5zaWduZWQgbG9uZyBkYXRhOworKyAg dW5zaWduZWQgbG9uZyBkdDsKKyt9IHN0YXRtX3Q7CisrCisrdm9pZCByZWFkX21lbV9zdGF0cyhz dHJ1Y3Qgc3RhdG1fdCAqLCBpbnQpOworK2ludCBmaXBzX2VuYWJsZWQoKTsKKysKKyAjZW5kaWYg LyogX01JU0NfSCAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvbXlwcm9wb3NhbC5o IG9wZW5zc2gtMTAuNXAxL215cHJvcG9zYWwuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbXlw cm9wb3NhbC5oCTIwMjYtMDktMjEgMDc6MDY6MDUuNDU0NTYzNzk1ICswMjAwCisrKysgb3BlbnNz aC0xMC41cDEvbXlwcm9wb3NhbC5oCTIwMjYtMDktMjEgMDc6MDY6NTkuODkwNzk5MDU2ICswMjAw CitAQCAtNzQsMTAgKzc0LDIwIEBACisgCSJyc2Etc2hhMi01MTIsIiBcCisgCSJyc2Etc2hhMi0y NTYiCisgCisrLyppZiB3ZSBhcmVuJ3QgdXNpbmcgT3BlblNTTCB3ZSBuZWVkIHRvIHJlbW92ZQor KyAqIHRoZSBwYXJhbGxlbCBDaGFDaGEyMCBjaXBoZXIgZnJvbSB0aGUgbGlzdCAqLworKyNpZmRl ZiBXSVRIX09QRU5TU0wKKyAjZGVmaW5lCUtFWF9TRVJWRVJfRU5DUllQVCBcCisrCSJjaGFjaGEy MC1wb2x5MTMwNS1tdEBocG5zc2gub3JnLCIgXAorIAkiY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNz aC5jb20sIiBcCisgCSJhZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFlczI1Ni1nY21Ab3BlbnNzaC5j b20sIiBcCisgCSJhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0ciIKKysjZWxzZQorKyNk ZWZpbmUJS0VYX1NFUlZFUl9FTkNSWVBUIFwKKysJImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2gu Y29tLCIgXAorKwkiYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSxhZXMyNTYtZ2NtQG9wZW5zc2guY29t LCIgXAorKwkiYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIiCisrI2VuZGlmCisgCisg I2RlZmluZSBLRVhfQ0xJRU5UX0VOQ1JZUFQgS0VYX1NFUlZFUl9FTkNSWVBUCisgCitkaWZmIC1O dXIgb3BlbnNzaC0xMC41cDEub3JpZy9udW0uYyBvcGVuc3NoLTEwLjVwMS9udW0uYworLS0tIG9w ZW5zc2gtMTAuNXAxLm9yaWcvbnVtLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NoLTEwLjVwMS9udW0uYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MDkwMTU1 MyArMDIwMAorQEAgLTAsMCArMSwxNTYgQEAKKysvKiBDQzAgbGljZW5zZSBhcHBsaWVkLCBzZWUg TElDRU5DRS5tZCAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSAibnVtLmgi CisrCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMKKysKKyt0eXBlZGVmIGVudW0geyBCSUcgPSAxLCBM SVRUTEUgPSAtMSB9ICBlbmRpYW5fdDsKKyt0eXBlZGVmIGVudW0geyBORUdBVElWRSA9IDB4ZmYs IFBPU0lUSVZFID0gMHgwMCB9IHNpZ25fdDsKKysKKytzdGF0aWMgZW5kaWFuX3QgbmF0aXZlZW5k aWFuKHZvaWQpCisreworKyAgICBjb25zdCBpbnQgZW5kaWFudGVzdCA9IDE7CisrCisrICAgIHJl dHVybiAqKChjaGFyICopJmVuZGlhbnRlc3QpID09IDEgPyBMSVRUTEUgOiBCSUc7CisrfQorKwor K3N0YXRpYyBzaWduX3QgcGFyYW1zaWduKGNvbnN0IE9TU0xfUEFSQU0gKnBhcmFtKQorK3sKKysg ICAgc2l6ZV90IHNyY21zYiA9IG5hdGl2ZWVuZGlhbigpID09IEJJRyA/IDAgOiBwYXJhbS0+ZGF0 YV9zaXplIC0gMTsKKysKKysgICAgcmV0dXJuCisrICAgICAgICBwYXJhbS0+ZGF0YV90eXBlID09 IE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUgorKyAgICAgICAgPyBQT1NJVElWRQorKyAgICAg ICAgOiAoKCh1bnNpZ25lZCBjaGFyICopcGFyYW0tPmRhdGEpW3NyY21zYl0gJiAweDgwCisrICAg ICAgICAgICA/IE5FR0FUSVZFCisrICAgICAgICAgICA6IFBPU0lUSVZFKTsKKyt9CisrCisrc3Ry dWN0IG51bWRlc2MgeworKyAgICB2b2lkICpkYXRhOworKyAgICB1bnNpZ25lZCBpbnQgZGF0YV90 eXBlOyAgICAgLyogVGhlIE9TU0xfUEFSQU0gZGF0YSB0eXBlICovCisrCisrICAgIC8qIFRoZXNl IGZpZWxkcyBjb25jZXJuIHRoZSB3aG9sZSBudW1iZXIgKi8KKysgICAgc2l6ZV90IHNpemU7Cisr ICAgIGVuZGlhbl90IGVuZGlhbjsKKysgICAgc2lnbl90IHNpZ247CisrCisrICAgIC8qIFRoZXNl IGZpZWxkcyBjb25jZXJuIHRoZSBsaW1icyBvZiB0aGUgbnVtYmVyICovCisrICAgIHNpemVfdCBs aW1ic2l6ZTsKKysgICAgZW5kaWFuX3QgbGltYmVuZGlhbjsKKysgICAgLyogVGhpcyBpcyBmb3Ig b2RkIGFyY2hzLiAqLworKyAgICAvKiBzZWUgdGhlIG1hbnVhbCBmb3IgbXB6X2ltcG9ydCgpIGZv ciBhbiBpbiBkZXB0aCBleHBsYW5hdGlvbi4gKi8KKysgICAgc2l6ZV90IGxpbWJuYWlsYml0czsK Kyt9OworKworK3N0cnVjdCByZXN1bHRkZXNjIHsKKysgICAgc2l6ZV90IHNpemU7CisrICAgIGlu dCByZXN1bHQ7ICAgICAgICAgICAgICAgICAvKiAxIG9yIChuZWdhdGl2ZSkgZXJyb3IgKi8KKyt9 OworKworK3N0YXRpYyBzdHJ1Y3QgcmVzdWx0ZGVzYyBwcm92bnVtX2NvcHkoc3RydWN0IG51bWRl c2MgZGVzdCwgc3RydWN0IG51bWRlc2Mgc3JjKQorK3sKKysgICAgc3RydWN0IHJlc3VsdGRlc2Mg cmVzdWx0ID0geyBkZXN0LnNpemUsIDEsIH07CisrCisrICAgIGlmIChzcmMuZGF0YV90eXBlICE9 IE9TU0xfUEFSQU1fSU5URUdFUgorKyAgICAgICAgJiYgc3JjLmRhdGFfdHlwZSAhPSBPU1NMX1BB UkFNX1VOU0lHTkVEX0lOVEVHRVIpIHsKKysgICAgICAgIHJlc3VsdC5yZXN1bHQgPSBQUk9WTlVN X0VfV1JPTkdfVFlQRTsKKysgICAgICAgIHJldHVybiByZXN1bHQ7CisrICAgIH0KKysKKysgICAg aWYgKHNyYy5zaXplID09IDApIHsKKysgICAgICAgIG1lbXNldChkZXN0LmRhdGEsIDAsIGRlc3Qu c2l6ZSk7CisrICAgICAgICByZXR1cm4gcmVzdWx0OworKyAgICB9CisrCisrICAgIC8qIEV4dHJh IGRhdGEgKi8KKysgICAgc2l6ZV90IHNyY21zYiA9IHNyYy5lbmRpYW4gPT0gQklHID8gMCA6IHNy Yy5zaXplIC0gMTsKKysgICAgaW50IHNyY21zYjJsc2IgPSBzcmMuZW5kaWFuID09IEJJRyA/IDEg OiAtMTsKKysKKysgICAgLyoKKysgICAgICogSWYgdGhlIHNvdXJjZSBpcyBiaWdnZXIgdGhhbiB0 aGUgZGVzdGluYXRpb24sIGFuYWx5c2UgdG8gc2VlIGlmIHRoZQorKyAgICAgKiBtb3N0IHNpZ25p ZmljYW50IGJ5dGUgaXMganVzdCBwYWRkaW5nIHRoYXQgY2FuIGJlIGlnbm9yZWQuCisrICAgICAq IFRoZSBydWxlcyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpcyBq dXN0IHBhZGRpbmcKKysgICAgICogYXJlOgorKyAgICAgKgorKyAgICAgKiAxLiB0aGUgbW9zdCBz aWduaWZpY2FudCBieXRlIGVxdWFscyBzcmNzaWduZWQsIHdoaWNoIGp1c3Qgc28gaGFwcGVucwor KyAgICAgKiAgICB0byBoYXZlIHRoZSAyJ3MgY29tcGxlbWVudCBwYWRkaW5nIHZhbHVlLgorKyAg ICAgKiAyLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIG5leHQgdG8gbW9zdCBzaWdu aWZpY2FudCBieXRlCisrICAgICAqICAgIGVxdWFscyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQg b2Ygc3Jjc2lnbmVkLgorKyAgICAgKi8KKysgICAgc2l6ZV90IGVuZCA9IGRlc3QuZGF0YSA9PSBO VUxMID8gMSA6IGRlc3Quc2l6ZTsKKysgICAgZm9yICg7IHNyYy5zaXplID4gZW5kOyBzcmNtc2Ig Kz0gc3JjbXNiMmxzYiwgc3JjLnNpemUtLSkKKysgICAgICAgIGlmICgoKHVuc2lnbmVkIGNoYXIg KilzcmMuZGF0YSlbc3JjbXNiXSAhPSBzcmMuc2lnbgorKyAgICAgICAgICAgIHx8ICgoKCh1bnNp Z25lZCBjaGFyICopc3JjLmRhdGEpW3NyY21zYiArIHNyY21zYjJsc2JdICYgMHg4MCkKKysgICAg ICAgICAgICAgICAgIT0gKHNyYy5zaWduICYgMHg4MCkpKQorKyAgICAgICAgICAgIGJyZWFrOwor KworKyAgICBpZiAoc3JjLnNpemUgPiBkZXN0LnNpemUpIHsKKysgICAgICAgIHJlc3VsdC5yZXN1 bHQgPSBQUk9WTlVNX0VfVE9PQklHOworKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKysgICAgfQor KworKyAgICBzaXplX3Qgc3JjbHNiID0gc3JjbXNiICsgc3JjbXNiMmxzYiAqIChzcmMuc2l6ZSAt IDEpOworKworKyAgICAvKiBTaW1wbGUgY2FzZSwgYWxsIHNpZ25pZmljYW50IGRldGFpbHMgbWF0 Y2ggKi8KKysgICAgaWYgKGRlc3QuZW5kaWFuID09IHNyYy5lbmRpYW4KKysgICAgICAgICYmIGRl c3QubGltYnNpemUgPT0gMQorKyAgICAgICAgJiYgZGVzdC5saW1ibmFpbGJpdHMgPT0gMAorKyAg ICAgICAgJiYgKGRlc3QuZGF0YV90eXBlID09IE9TU0xfUEFSQU1fSU5URUdFUiB8fCBzcmMuc2ln biA9PSBQT1NJVElWRSkpIHsKKysKKysgICAgICAgIGlmIChzcmMuc2l6ZSA8IGRlc3Quc2l6ZSkg eworKyAgICAgICAgICAgIHNpemVfdCBwYWRzdGFydCA9IGRlc3QuZW5kaWFuID09IEJJRyA/IDAg OiBkZXN0LnNpemUgLSBzcmMuc2l6ZTsKKysKKysgICAgICAgICAgICBtZW1zZXQoKHVuc2lnbmVk IGNoYXIgKilkZXN0LmRhdGEgKyBwYWRzdGFydCwgc3JjLnNpZ24sCisrICAgICAgICAgICAgICAg ICAgIGRlc3Quc2l6ZSAtIHNyYy5zaXplKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHNpemVf dCBkZXN0c3RhcnQgPSBkZXN0LmVuZGlhbiA9PSBCSUcgPyBkZXN0LnNpemUgLSBzcmMuc2l6ZSA6 IDA7CisrICAgICAgICBzaXplX3Qgc3Jjc3RhcnQgPSBzcmMuZW5kaWFuID09IEJJRyA/IHNyY21z YiA6IHNyY2xzYjsKKysKKysgICAgICAgIG1lbWNweSgodW5zaWduZWQgY2hhciAqKWRlc3QuZGF0 YSArIGRlc3RzdGFydCwKKysgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNyYy5kYXRh ICsgc3Jjc3RhcnQsCisrICAgICAgICAgICAgICAgc3JjLnNpemUpOworKyAgICAgICAgcmV0dXJu IHJlc3VsdDsKKysgICAgfQorKworKyAgICAvKiBDb21wbGV4IGNhc2UsIGZvciBzaWduIG9yIGxp bWIgY29udmVyc2lvbi4gIEN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLworKyAgICByZXN1bHQucmVz dWx0ID0gUFJPVk5VTV9FX1VOU1VQUE9SVEVEOworKyAgICByZXR1cm4gcmVzdWx0OworK30KKysK KysjZGVmaW5lIGltcGxlbWVudF9wcm92bnVtKFQsIERUKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICBpbnQgcHJvdm51bV9nZXRfIyNUKFQgKmRlc3QsIGNvbnN0IE9TU0xf UEFSQU0gKnBhcmFtKSAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGVuZGlhbl90IGVuZGlh biA9IG5hdGl2ZWVuZGlhbigpOyAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3Ry dWN0IG51bWRlc2MgZGVzdG5kID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgICAgZGVzdCwgRFQsIHNpemVvZihUKSwgZW5kaWFuLCBQT1NJVElWRSwgMSwgZW5k aWFuLCAwIFwKKysgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RydWN0IG51bWRlc2Mgc3JjbmQgPSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcGFyYW0tPmRhdGEs IHBhcmFtLT5kYXRhX3R5cGUsIHBhcmFtLT5kYXRhX3NpemUsICAgIFwKKysgICAgICAgICAgICBl bmRpYW4sIHBhcmFtc2lnbihwYXJhbSksIDEsIGVuZGlhbiwgMCAgICAgICAgICAgICAgXAorKyAg ICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0cnVjdCByZXN1bHRkZXNjIHJlc3VsdCA9IHBy b3ZudW1fY29weShkZXN0bmQsIHNyY25kKTsgXAorKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1 bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg aW50IHByb3ZudW1fc2V0XyMjVChPU1NMX1BBUkFNICpwYXJhbSwgVCBzcmMpICAgICAgICAgXAor KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICBlbmRpYW5fdCBlbmRpYW4gPSBuYXRpdmVlbmRpYW4oKTsgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0cnVjdCBudW1kZXNjIGRlc3RuZCA9IHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHBhcmFtLT5kYXRh LCBwYXJhbS0+ZGF0YV90eXBlLCBwYXJhbS0+ZGF0YV9zaXplLCAgICBcCisrICAgICAgICAgICAg ZW5kaWFuLCBQT1NJVElWRSwgMSwgZW5kaWFuLCAwICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgc3RydWN0IG51bWRlc2Mgc3JjbmQgPSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgJnNyYywgRFQsIHNpemVvZihUKSwgZW5k aWFuLCBQT1NJVElWRSwgMSwgZW5kaWFuLCAwIFwKKysgICAgICAgIH07ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICBzdHJ1Y3QgcmVzdWx0ZGVzYyByZXN1bHQgPSBwcm92bnVtX2NvcHkoZGVzdG5kLCBzcmNu ZCk7IFwKKysgICAgICAgIHBhcmFtLT5yZXR1cm5fc2l6ZSA9IHJlc3VsdC5zaXplOyAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0KKysKKytpbXBsZW1lbnRfcHJvdm51 bShzaXplX3QsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUikKKysKKysjZW5kaWYgLyogV0lU SF9PUEVOU1NMMyAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvbnVtLmggb3BlbnNz aC0xMC41cDEvbnVtLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL251bS5oCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvbnVtLmgJMjAyNi0w OS0yMSAwNzowNjo1OS44OTA5NDQyOTIgKzAyMDAKK0BAIC0wLDAgKzEsMTUgQEAKKysvKiBDQzAg bGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAqLworKworKyNpbmNsdWRlICJpbmNsdWRl cy5oIgorKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvY29yZS5o PgorKworKy8qIENvbnZlcnQgYmV0d2VlbiBPU1NMX1BBUkFNIGFuZCBzaXplX3QgKi8KKytpbnQg cHJvdm51bV9nZXRfc2l6ZV90KHNpemVfdCAqZGVzdCwgY29uc3QgT1NTTF9QQVJBTSAqcGFyYW0p OworK2ludCBwcm92bnVtX3NldF9zaXplX3QoT1NTTF9QQVJBTSAqcGFyYW0sIHNpemVfdCBzcmMp OworKworKyNkZWZpbmUgUFJPVk5VTV9FX1dST05HX1RZUEUgICAgLTEKKysjZGVmaW5lIFBST1ZO VU1fRV9UT09CSUcgICAgICAgIC0yCisrI2RlZmluZSBQUk9WTlVNX0VfVU5TVVBQT1JURUQgICAt MworKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wzICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEu b3JpZy9vc3NsMy1wcm92aWRlci1lcnIuYyBvcGVuc3NoLTEwLjVwMS9vc3NsMy1wcm92aWRlci1l cnIuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvb3NzbDMtcHJvdmlkZXItZXJyLmMJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9vc3NsMy1w cm92aWRlci1lcnIuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MDk4MjIwNCArMDIwMAorQEAgLTAs MCArMSwxMDggQEAKKysvKiBDQzAgbGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAqLwor KworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUg Im9zc2wzLXByb3ZpZGVyLWVyci5oIgorKworKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrCisrc3Ry dWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0IHsKKysgIGNvbnN0IE9TU0xfQ09SRV9IQU5ETEUgKmNv cmU7CisrICBPU1NMX0ZVTkNfY29yZV9uZXdfZXJyb3JfZm4gKmNvcmVfbmV3X2Vycm9yOworKyAg T1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX2RlYnVnX2ZuICpjb3JlX3NldF9lcnJvcl9kZWJ1ZzsK KysgIE9TU0xfRlVOQ19jb3JlX3ZzZXRfZXJyb3JfZm4gKmNvcmVfdnNldF9lcnJvcjsKKyt9Owor KworK3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCisrcHJvdmVycl9uZXdfaGFuZGxlKGNv bnN0IE9TU0xfQ09SRV9IQU5ETEUgKmNvcmUsIGNvbnN0IE9TU0xfRElTUEFUQ0ggKmRpc3BhdGNo KQorK3sKKysgIC8qCisrICAgKiBsaWJjcnlwdG8gZ2l2ZXMgcHJvdmlkZXJzIHRoZSB0b29scyB0 byBjcmVhdGUgZXJyb3Igcm91dGluZXMgc2ltaWxhcgorKyAgICogdG8gdGhlIG9uZXMgZGVmaW5l ZCBpbiA8b3BlbnNzbC9lcnIuaD4KKysgICAqLworKyAgT1NTTF9GVU5DX2NvcmVfbmV3X2Vycm9y X2ZuICpjX25ld19lcnJvciA9IE5VTEw7CisrICBPU1NMX0ZVTkNfY29yZV9zZXRfZXJyb3JfZGVi dWdfZm4gKmNfc2V0X2Vycm9yX2RlYnVnID0gTlVMTDsKKysgIE9TU0xfRlVOQ19jb3JlX3ZzZXRf ZXJyb3JfZm4gKmNfdnNldF9lcnJvciA9IE5VTEw7CisrICBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlv bnNfc3QgKmhhbmRsZSA9IE5VTEw7CisrCisrICBhc3NlcnQoY29yZSAhPSBOVUxMKTsKKysgIGFz c2VydChkaXNwYXRjaCAhPSBOVUxMKTsKKysKKysjaWZuZGVmIERFQlVHCisrICBpZiAoY29yZSA9 PSBOVUxMIHx8IGRpc3BhdGNoID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKyNlbmRpZgor KworKyAgZm9yICg7IGRpc3BhdGNoLT5mdW5jdGlvbl9pZCAhPSAwOyBkaXNwYXRjaCsrKQorKyAg ICBzd2l0Y2ggKGRpc3BhdGNoLT5mdW5jdGlvbl9pZCkgeworKyAgICBjYXNlIE9TU0xfRlVOQ19D T1JFX05FV19FUlJPUjoKKysgICAgICBjX25ld19lcnJvciA9IE9TU0xfRlVOQ19jb3JlX25ld19l cnJvcihkaXNwYXRjaCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1NTTF9GVU5DX0NPUkVf U0VUX0VSUk9SX0RFQlVHOgorKyAgICAgIGNfc2V0X2Vycm9yX2RlYnVnID0gT1NTTF9GVU5DX2Nv cmVfc2V0X2Vycm9yX2RlYnVnKGRpc3BhdGNoKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBP U1NMX0ZVTkNfQ09SRV9WU0VUX0VSUk9SOgorKyAgICAgIGNfdnNldF9lcnJvciA9IE9TU0xfRlVO Q19jb3JlX3ZzZXRfZXJyb3IoZGlzcGF0Y2gpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisr ICBhc3NlcnQoY19uZXdfZXJyb3IgIT0gTlVMTCk7CisrICBhc3NlcnQoY19zZXRfZXJyb3JfZGVi dWcgIT0gTlVMTCk7CisrICBhc3NlcnQoY192c2V0X2Vycm9yICE9IE5VTEwpOworKworKyNpZmRl ZiBOREVCVUcKKysgIGlmIChjX25ld19lcnJvciA9PSBOVUxMIHx8IGNfc2V0X2Vycm9yX2RlYnVn ID09IE5VTEwgfHwgY192c2V0X2Vycm9yID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKyNl bmRpZgorKworKyAgaWYgKChoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKCpoYW5kbGUpKSkgIT0gTlVM TCkgeworKyAgICBoYW5kbGUtPmNvcmUgPSBjb3JlOworKyAgICBoYW5kbGUtPmNvcmVfbmV3X2Vy cm9yID0gY19uZXdfZXJyb3I7CisrICAgIGhhbmRsZS0+Y29yZV9zZXRfZXJyb3JfZGVidWcgPSBj X3NldF9lcnJvcl9kZWJ1ZzsKKysgICAgaGFuZGxlLT5jb3JlX3ZzZXRfZXJyb3IgPSBjX3ZzZXRf ZXJyb3I7CisrICB9CisrICByZXR1cm4gaGFuZGxlOworK30KKysKKytzdHJ1Y3QgcHJvdmVycl9m dW5jdGlvbnNfc3QgKgorK3Byb3ZlcnJfZHVwX2hhbmRsZShzdHJ1Y3QgcHJvdmVycl9mdW5jdGlv bnNfc3QgKnNyYykKKyt7CisrICBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmRzdCA9IE5V TEw7CisrCisrICBpZiAoc3JjICE9IE5VTEwKKysgICAgICAmJiAoZHN0ID0gbWFsbG9jKHNpemVv ZigqZHN0KSkpICE9IE5VTEwpIHsKKysgICAgZHN0LT5jb3JlID0gc3JjLT5jb3JlOworKyAgICBk c3QtPmNvcmVfbmV3X2Vycm9yID0gc3JjLT5jb3JlX25ld19lcnJvcjsKKysgICAgZHN0LT5jb3Jl X3NldF9lcnJvcl9kZWJ1ZyA9IHNyYy0+Y29yZV9zZXRfZXJyb3JfZGVidWc7CisrICAgIGRzdC0+ Y29yZV92c2V0X2Vycm9yID0gc3JjLT5jb3JlX3ZzZXRfZXJyb3I7CisrICB9CisrICByZXR1cm4g ZHN0OworK30KKysKKyt2b2lkIHByb3ZlcnJfZnJlZV9oYW5kbGUoc3RydWN0IHByb3ZlcnJfZnVu Y3Rpb25zX3N0ICpoYW5kbGUpCisreworKyAgZnJlZShoYW5kbGUpOworK30KKysKKyt2b2lkIHBy b3ZlcnJfbmV3X2Vycm9yKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxl KQorK3sKKysgIGhhbmRsZS0+Y29yZV9uZXdfZXJyb3IoaGFuZGxlLT5jb3JlKTsKKyt9CisrCisr dm9pZCBwcm92ZXJyX3NldF9lcnJvcl9kZWJ1Zyhjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlv bnNfc3QgKmhhbmRsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jKQorK3sKKysgIGhhbmRsZS0+Y29yZV9z ZXRfZXJyb3JfZGVidWcoaGFuZGxlLT5jb3JlLCBmaWxlLCBsaW5lLCBmdW5jKTsKKyt9CisrCisr dm9pZCBwcm92ZXJyX3NldF9lcnJvcihjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3Qg KmhhbmRsZSwKKysgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlYXNvbiwgY29uc3Qg Y2hhciAqZm10LCAuLi4pCisreworKyAgdmFfbGlzdCBhcDsKKysKKysgIHZhX3N0YXJ0KGFwLCBm bXQpOworKyAgaGFuZGxlLT5jb3JlX3ZzZXRfZXJyb3IoaGFuZGxlLT5jb3JlLCByZWFzb24sIGZt dCwgYXApOworKyAgdmFfZW5kKGFwKTsKKyt9CisrCisrI2VuZGlmIC8qIFdJVEhfT1BFTlNTTDMg Ki8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5oIG9w ZW5zc2gtMTAuNXAxL29zc2wzLXByb3ZpZGVyLWVyci5oCistLS0gb3BlbnNzaC0xMC41cDEub3Jp Zy9vc3NsMy1wcm92aWRlci1lcnIuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2gtMTAuNXAxL29zc2wzLXByb3ZpZGVyLWVyci5oCTIwMjYtMDktMjEgMDc6 MDY6NTkuODkxMDE5ODQ1ICswMjAwCitAQCAtMCwwICsxLDczIEBACisrLyogQ0MwIGxpY2Vuc2Ug YXBwbGllZCwgc2VlIExJQ0VOQ0UubWQgKi8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysj aWZkZWYgV0lUSF9PUEVOU1NMMworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9jb3JlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY29yZV9kaXNwYXRjaC5oPgorKworKy8q CisrICogVGhlIGlkZWEgd2l0aCB0aGlzIGxpYnJhcnkgaXMgdG8gcmVwbGFjZSBPcGVuU1NMJ3Mg RVJSX3JhaXNlKCkgYW5kCisrICogRVJSX3JhaXNlX2RhdGEoKSB3aXRoIHZhcmlhbnRzIHRoYXQg YXJlIG1vcmUgc3VpdGFibGUgZm9yIHByb3ZpZGVycyB0aGF0CisrICogaGF2ZSB0aGVpciBvd24g ZXJyb3IgcmVhc29uIHRhYmxlLgorKyAqCisrICogVGhpcyBhc3N1bWVzIHZhcmlhZGljIGZ1bmN0 aW9uLWxpa2UgbWFjcm9zLCBpLmUuIEM5OSBvciBuZXdlci4KKysgKgorKyAqIEEgbWluaW1hbCBh bW91bnQgb2YgcHJlcGFyYXRpb24gaXMgbmVlZGVkIG9uIHByb3ZpZGVyIGluaXRpYWxpemF0aW9u IGFuZAorKyAqIHRha2Vkb3duOgorKyAqCisrICogMS4gIFRoZSBwcm92aWRlcidzIG91dGdvaW5n IE9TU0xfRElTUEFUQ0ggdGFibGUgbXVzdCBpbmNsdWRlIGFuIGVudHJ5CisrICogICAgIGdvdCBP U1NMX0ZVTkNfUFJPVklERVJfR0VUX1JFQVNPTl9TVFJJTkdTLCB3aXRoIGEgZnVuY3Rpb24gdGhh dCByZXR1cm5zCisrICogICAgIHRoZSBwcm92aWRlcidzIHRhYmxlIG9mIHJlYXNvbnMuCisrICog ICAgIFRoYXQgdGFibGUgb2YgcmVhc29ucyBpcyBhIHNpbXBsZSBPU1NMX0lURU0gYXJyYXksIHdo ZXJlIGVhY2ggZWxlbWVudAorKyAqICAgICBjb250YWlucyBhIG51bWVyaWMgcmVhc29uIGlkZW50 aXR5IGZvciB0aGUgcmVhc29uLCBhbmQgdGhlIGRlc2NyaXB0aW9uCisrICogICAgIHRleHQgc3Ry aW5nIGZvciB0aGF0IHJlYXNvbi4KKysgKiAgICAgRWFjaCBudW1lcmljIHJlYXNvbiBpZGVudGl0 eSBNVVNUIGJlIHVuaXF1ZSB3aXRoaW4gdGhpcyBhcnJheS4KKysgKgorKyAqIDIuICBPbiBwcm92 aWRlciBpbml0aWFsaXphdGlvbiwgYW4gZXJyb3IgaGFuZGxlIG11c3QgYmUgY3JlYXRlZCB1c2lu ZworKyAqICAgICBwcm92ZXJyX25ld19oYW5kbGUoKS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIGlz IHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudAorKyAqICAgICB0byBFUlJfcmFpc2UoKSBhbmQgRVJS X3JhaXNlX2RhdGEoKS4KKysgKgorKyAqIDMuICBPbiBwcm92aWRlciB0YWtlZG93biwgdGhlIGVy cm9yIGhhbmRsZSBtdXN0IGJlIGZyZWVkLCB1c2luZworKyAqICAgICBwcm92ZXJyX2ZyZWVfaGFu ZGxlKCkuCisrICoKKysgKiBXaXRoIHRoaXMgcHJlcGFyYXRpb24sIHRoZSBwcm92aWRlciBjb2Rl IGNhbiB1c2UgRVJSX3JhaXNlKCkgYW5kCisrICogRVJSX3JhaXNlX2RhdGEoKSAiYXMgdXN1YWwi LCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMKKysgKiB0aGUg ZXJyb3IgaGFuZGxlIGluc3RlYWQgb2Ygb25lIG9mIHRoZSBPcGVuU1NMIEVSUl9MSUJfIG1hY3Jv cy4KKysgKi8KKysKKysvKgorKyAqIEluIGNhc2UgPG9wZW5zc2wvZXJyLmg+IHdhcyBpbmNsdWRl ZCwgd2UgdGhyb3cgYXdheSBpdHMgZXJyb3IgcmVjb3JkaW5nCisrICogbWFjcm9zLgorKyAqIE5v dGUgdGhhdCBFUlJfcHV0X2Vycm9yKCkgaXMgTk9UIHJlY3JlYXRlZC4gIEl0J3MgZGVwcmVjYXRl ZCBhbmQgc2hvdWxkIG5vdAorKyAqIGJlIHVzZWQgYW55IG1vcmUuCisrICovCisrI3VuZGVmIEVS Ul9wdXRfZXJyb3IKKysjdW5kZWYgRVJSX3JhaXNlCisrI3VuZGVmIEVSUl9yYWlzZV9kYXRhCisr CisrI2RlZmluZSBFUlJfcmFpc2UoaGFuZGxlLCByZWFzb24pIEVSUl9yYWlzZV9kYXRhKChoYW5k bGUpLChyZWFzb24pLE5VTEwpCisrCisrI2RlZmluZSBFUlJfcmFpc2VfZGF0YShoYW5kbGUsIHJl YXNvbiwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChwcm92ZXJy X25ld19lcnJvcihoYW5kbGUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgIHByb3ZlcnJfc2V0X2Vycm9yX2RlYnVnKGhhbmRsZSwgT1BFTlNTTF9G SUxFLE9QRU5TU0xfTElORSxPUEVOU1NMX0ZVTkMpLCBcCisrICAgcHJvdmVycl9zZXRfZXJyb3Io aGFuZGxlLCByZWFzb24sIF9fVkFfQVJHU19fKSkKKysKKysvKgorKyAqIFRoZSBzdHJ1Y3R1cmUg d2hlcmUgdGhlIGxpYmNyeXB0byBjb3JlIGhhbmRsZSBhbmQgY29yZSBmdW5jdGlvbnMgYXJlCisr ICogY2FwdHVyZWQuCisrICovCisrc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0OworKworK3N0 cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCisrcHJvdmVycl9uZXdfaGFuZGxlKGNvbnN0IE9T U0xfQ09SRV9IQU5ETEUgKmNvcmUsIGNvbnN0IE9TU0xfRElTUEFUQ0ggKmluKTsKKytzdHJ1Y3Qg cHJvdmVycl9mdW5jdGlvbnNfc3QgKgorK3Byb3ZlcnJfZHVwX2hhbmRsZShzdHJ1Y3QgcHJvdmVy cl9mdW5jdGlvbnNfc3QgKnNyYyk7Cisrdm9pZCBwcm92ZXJyX2ZyZWVfaGFuZGxlKHN0cnVjdCBw cm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlKTsKKysKKyt2b2lkIHByb3ZlcnJfbmV3X2Vycm9y KGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlKTsKKyt2b2lkIHByb3Zl cnJfc2V0X2Vycm9yX2RlYnVnKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFu ZGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50 IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMpOworK3ZvaWQgcHJvdmVycl9zZXRfZXJyb3IoY29uc3Qg c3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUsCisrICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCByZWFzb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKysjZW5kaWYgLyog V0lUSF9PUEVOU1NMMyAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvcGFja2V0LmMg b3BlbnNzaC0xMC41cDEvcGFja2V0LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3BhY2tldC5j CTIwMjYtMDktMjEgMDc6MDY6MDUuMjkxNDc3ODc3ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEv cGFja2V0LmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTExMzE2MzggKzAyMDAKK0BAIC04NCw2ICs4 NCw3IEBACisgI2luY2x1ZGUgIm1hYy5oIgorICNpbmNsdWRlICJsb2cuaCIKKyAjaW5jbHVkZSAi Y2Fub2hvc3QuaCIKKysjaW5jbHVkZSAiY2hhbm5lbHMuaCIKKyAjaW5jbHVkZSAibWlzYy5oIgor ICNpbmNsdWRlICJwYWNrZXQuaCIKKyAjaW5jbHVkZSAic3NoZXJyLmgiCitAQCAtOTUsNyArOTYs MjAgQEAKKyAjZGVmaW5lIERCRyh4KQorICNlbmRpZgorIAorLSNkZWZpbmUgUEFDS0VUX01BWF9T SVpFICgyNTYgKiAxMDI0KQorKy8qIE9wZW5TU0ggdXNpbmdzIDI1NktCIHBhY2tldCBzaXplIG1h eCBidXQgdGhhdCBjb25zdW1lcyBhCisrICogbG90IG9mIG1lbW9yeSB3aXRoIHRoZSBidWZmZXJz IHdlIGFyZSB1c2luZy4gSG93ZXZlciwgd2UgbmVlZAorKyAqIGEgbGFyZ2UgcGFja2V0IHNpemUg aWYgdGhlIGJhbm5lciB0aGF0J3MgYmVpbmcgc2VudCBpcyBsYXJnZS4KKysgKiBTbyB3ZSBuZWVk IGEgMjU2S0IgcGFja2V0IHByZSBhdXRoZW50aWNhdGlvbiBhbmQgYSBzbWFsbGVyIG9uZQorKyAq IGluIHRoaXMgY2FzZSBTU0hfSU9CVUZTWiArIDFLQiwgYWZ0ZXJ3YXJkcy4gU28gd2UgY2hhbmdl CisrICogUEFDS0VUX01BWF9TSVpFIGZyb20gYSAjZGVmaW5lIHRvIGEgZ2xvYmFsLiBUaGVuLCBp biB0aGUgZnVuY3Rpb24KKysgKiBzc2hfcGFja2V0X3NldF9hdXRoZW50Y2F0ZWQgd2UgcmVkdWNl IHRoZSBzaXplIHRvIHNvbWV0aGluZworKyAqIG1vcmUgbWVtb3J5IGVmZmljaWVudC4gLWNqciAw NC8wNy8yMworKyAqLworK3VfaW50IHBhY2tldF9tYXhfc2l6ZSA9IDI1NiAqIDEwMjQ7CisrCisr LyogZ2xvYmFsIHRvIHN1cHBvcnQgZm9yY2VkIHJla2V5aW5nICovCisraW50IHJla2V5X3JlcXVl c3RlZCA9IDA7CisrCisgCisgc3RydWN0IHBhY2tldF9zdGF0ZSB7CisgCXVpbnQzMl90IHNlcW5y OworQEAgLTI0NSwxMiArMjU5LDIzIEBACisgCSAgICAoc3RhdGUtPm91dGdvaW5nX3BhY2tldCA9 IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCB8fAorIAkgICAgKHN0YXRlLT5pbmNvbWluZ19wYWNrZXQg PSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisgCQlnb3RvIGZhaWw7CisrCS8qIHRoZXNlIGJ1ZmZl cnMgYXJlIGltcG9ydGFudCBpbiB0ZXJtcyBvZiB0cmFja2luZyBidWZmZXIgdXNhZ2UKKysJICog c28gd2UgZXhwbGljaXRseSBsYWJlbCBhbmQgdHlwZSB0aGVtIHdpdGggZGVzY3JpcHRpdmUgbmFt ZXMgKi8KKysJc3NoYnVmX3JlbGFiZWwoc3RhdGUtPmlucHV0LCAiaW5wdXQiKTsKKysJc3NoYnVm X3R5cGUoc3RhdGUtPmlucHV0LCBCVUZfUEFDS0VUX0lOUFVUKTsKKysJc3NoYnVmX3JlbGFiZWwo c3RhdGUtPmluY29taW5nX3BhY2tldCwgImlucGFja2V0Iik7CisrCXNzaGJ1Zl90eXBlKHN0YXRl LT5pbmNvbWluZ19wYWNrZXQsIEJVRl9QQUNLRVRfSU5DT01JTkcpOworKwlzc2hidWZfcmVsYWJl bChzdGF0ZS0+b3V0cHV0LCAib3V0cHV0Iik7CisrCXNzaGJ1Zl90eXBlKHN0YXRlLT5vdXRwdXQs IEJVRl9QQUNLRVRfT1VUUFVUKTsKKysJc3NoYnVmX3JlbGFiZWwoc3RhdGUtPm91dGdvaW5nX3Bh Y2tldCwgIm91dHBhY2tldCIpOworKwlzc2hidWZfdHlwZShzdGF0ZS0+b3V0Z29pbmdfcGFja2V0 LCBCVUZfUEFDS0VUX09VVEdPSU5HKTsKKysKKyAJVEFJTFFfSU5JVCgmc3RhdGUtPm91dGdvaW5n KTsKKyAJVEFJTFFfSU5JVCgmc3NoLT5wcml2YXRlX2tleXMpOworIAlUQUlMUV9JTklUKCZzc2gt PnB1YmxpY19rZXlzKTsKKyAJc3RhdGUtPmNvbm5lY3Rpb25faW4gPSAtMTsKKyAJc3RhdGUtPmNv bm5lY3Rpb25fb3V0ID0gLTE7CistCXN0YXRlLT5tYXhfcGFja2V0X3NpemUgPSAzMjc2ODsKKysJ c3RhdGUtPm1heF9wYWNrZXRfc2l6ZSA9IENIQU5fU0VTX1BBQ0tFVF9ERUZBVUxUOworIAlzdGF0 ZS0+cGFja2V0X3RpbWVvdXRfbXMgPSAtMTsKKyAJc3RhdGUtPmludGVyYWN0aXZlX21vZGUgPSAx OworIAlzdGF0ZS0+cW9zX2ludGVyYWN0aXZlID0gc3RhdGUtPnFvc19vdGhlciA9IC0xOworQEAg LTMxOCw5ICszNDMsMTEgQEAKKyAJc3RhdGUtPmNvbm5lY3Rpb25faW4gPSBmZF9pbjsKKyAJc3Rh dGUtPmNvbm5lY3Rpb25fb3V0ID0gZmRfb3V0OworIAlpZiAoKHIgPSBjaXBoZXJfaW5pdCgmc3Rh dGUtPnNlbmRfY29udGV4dCwgbm9uZSwKKy0JICAgIChjb25zdCB1X2NoYXIgKikiIiwgMCwgTlVM TCwgMCwgQ0lQSEVSX0VOQ1JZUFQpKSAhPSAwIHx8CisrCSAgICAoY29uc3QgdV9jaGFyICopIiIs IDAsIE5VTEwsIDAsIDAsIENJUEhFUl9FTkNSWVBULAorKwkgICAgc3RhdGUtPmFmdGVyX2F1dGhl bnRpY2F0aW9uKSkgIT0gMCB8fAorIAkgICAgKHIgPSBjaXBoZXJfaW5pdCgmc3RhdGUtPnJlY2Vp dmVfY29udGV4dCwgbm9uZSwKKy0JICAgIChjb25zdCB1X2NoYXIgKikiIiwgMCwgTlVMTCwgMCwg Q0lQSEVSX0RFQ1JZUFQpKSAhPSAwKSB7CisrCSAgICAoY29uc3QgdV9jaGFyICopIiIsIDAsIE5V TEwsIDAsIDAsIENJUEhFUl9ERUNSWVBULAorKwkgICAgc3RhdGUtPmFmdGVyX2F1dGhlbnRpY2F0 aW9uKSkgIT0gMCkgeworIAkJZXJyb3JfZnIociwgImNpcGhlcl9pbml0IGZhaWxlZCIpOworIAkJ aWYgKHdhc251bGwpCisgCQkJZnJlZShzc2gpOyAvKiBYWFggbmVlZCBzc2hfZnJlZV9zZXNzaW9u X3N0YXRlPyAqLworQEAgLTM5Miw3ICs0MTksNyBAQAorIAorIAlpZiAoc3RhdGUtPnBhY2tldF9k aXNjYXJkX21hYykgeworIAkJY2hhciBidWZbMTAyNF07CistCQlzaXplX3QgZGxlbiA9IFBBQ0tF VF9NQVhfU0laRTsKKysJCXNpemVfdCBkbGVuID0gcGFja2V0X21heF9zaXplOworIAorIAkJaWYg KGRsZW4gPiBzdGF0ZS0+cGFja2V0X2Rpc2NhcmRfbWFjX2FscmVhZHkpCisgCQkJZGxlbiAtPSBz dGF0ZS0+cGFja2V0X2Rpc2NhcmRfbWFjX2FscmVhZHk7CitAQCAtOTk4LDYgKzEwMjUsNyBAQAor IAljb25zdCBjaGFyICp3bXNnOworIAlpbnQgciwgY3J5cHRfdHlwZTsKKyAJY29uc3QgY2hhciAq ZGlyID0gbW9kZSA9PSBNT0RFX09VVCA/ICJvdXQiIDogImluIjsKKysJY2hhciBibG9ja3Nfc1tG TVRfU0NBTEVEX1NUUlNJWkVdLCBieXRlc19zW0ZNVF9TQ0FMRURfU1RSU0laRV07CisgCisgCWRl YnVnMl9mKCJtb2RlICVkIiwgbW9kZSk7CisgCitAQCAtMTAzOCwxMiArMTA2NiwzMiBAQAorIAkJ aWYgKChyID0gbWFjX2luaXQobWFjKSkgIT0gMCkKKyAJCQlyZXR1cm4gcjsKKyAJfQorLQltYWMt PmVuYWJsZWQgPSAxOworKworKwkvKiBpZiB3ZSBhcmUgdXNpbmcgTk9ORSBNQUMgdGhlbiB3ZSBk b24ndCBuZWVkIHRvIGVuYWJsZSB0aGUKKysJICogbWFjIHJvdXRpbmVzLiBUaGlzIGRpc2FibGVz IHRoZW0gYW5kIHdlIGNhbiBjbGF3IGJhY2sgc29tZSBjeWNsZXMKKysJICogZnJvbSB0aGUgQ1BV IC1janIgMy8yMS8yMDIzICovCisrCWlmIChzc2gtPm5vbmVfbWFjICE9IDEpCisrCQltYWMtPmVu YWJsZWQgPSAxOworKworIAlEQkcoZGVidWdfZigiY2lwaGVyX2luaXQ6ICVzIiwgZGlyKSk7Cisg CWNpcGhlcl9mcmVlKCpjY3ApOworIAkqY2NwID0gTlVMTDsKKysjaWZkZWYgV0lUSF9PUEVOU1NM CisrCWlmIChzdHJjbXAoZW5jLT5uYW1lLCAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9y ZyIpID09IDApIHsKKysJCWlmIChzdGF0ZS0+YWZ0ZXJfYXV0aGVudGljYXRpb24pCisrCQkJZW5j LT5jaXBoZXIgPSBjaXBoZXJfYnlfbmFtZSgKKysJCQkgICAgImNoYWNoYTIwLXBvbHkxMzA1LW10 QGhwbnNzaC5vcmciKTsKKysJCWVsc2UKKysJCQllbmMtPmNpcGhlciA9IGNpcGhlcl9ieV9uYW1l KAorKwkJCSAgICAiY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20iKTsKKysJCWlmIChlbmMt PmNpcGhlciA9PSBOVUxMKQorKwkJCXJldHVybiByOworKwl9CisrI2VuZGlmCisgCWlmICgociA9 IGNpcGhlcl9pbml0KGNjcCwgZW5jLT5jaXBoZXIsIGVuYy0+a2V5LCBlbmMtPmtleV9sZW4sCist CSAgICBlbmMtPml2LCBlbmMtPml2X2xlbiwgY3J5cHRfdHlwZSkpICE9IDApCisrCSAgICBlbmMt Pml2LCBlbmMtPml2X2xlbiwKKysJICAgIGNyeXB0X3R5cGUgPyBzdGF0ZS0+cF9zZW5kLnNlcW5y IDogc3RhdGUtPnBfcmVhZC5zZXFuciwKKysJICAgIGNyeXB0X3R5cGUsIHN0YXRlLT5hZnRlcl9h dXRoZW50aWNhdGlvbiAmJiBzc2gtPm10X2VuYWJsZWQpKSAhPSAwKQorIAkJcmV0dXJuIHI7Cisg CWlmICghc3RhdGUtPmNpcGhlcl93YXJuaW5nX2RvbmUgJiYKKyAJICAgICh3bXNnID0gY2lwaGVy X3dhcm5pbmdfbWVzc2FnZSgqY2NwKSkgIT0gTlVMTCkgeworQEAgLTEwNjcsMjUgKzExMTUsNDYg QEAKKyAJCX0KKyAJCWNvbXAtPmVuYWJsZWQgPSAxOworIAl9CistCS8qCistCSAqIFRoZSAyXihi bG9ja3NpemUqMikgbGltaXQgaXMgdG9vIGV4cGVuc2l2ZSBmb3IgM0RFUywKKy0JICogc28gZW5m b3JjZSBhIDFHQiBsaW1pdCBmb3Igc21hbGwgYmxvY2tzaXplcy4KKy0JICogU2VlIFJGQzQzNDQg c2VjdGlvbiAzLjIuCistCSAqLworLQlpZiAoZW5jLT5ibG9ja19zaXplID49IDE2KQorLQkJKmhh cmRfbWF4X2Jsb2NrcyA9ICh1aW50NjRfdCkxIDw8IChlbmMtPmJsb2NrX3NpemUqMik7CistCWVs c2UKKy0JCSpoYXJkX21heF9ibG9ja3MgPSAoKHVpbnQ2NF90KTEgPDwgMzApIC8gZW5jLT5ibG9j a19zaXplOworKwkvKiBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB0aGUgY2lwaGVy IGNhbgorKwkgKiBoYW5kbGUgc2FmZWx5ICovCisrCSpoYXJkX21heF9ibG9ja3MgPSBjaXBoZXJf cmVrZXlfYmxvY2tzKGVuYy0+Y2lwaGVyKTsKKyAJKm1heF9ibG9ja3MgPSAqaGFyZF9tYXhfYmxv Y2tzOworKworKwkvKiBpZiB3ZSBoYXZlIGEgY3VzdG9tIG9SZWtleUxpbWl0IHVzZSB0aGF0LiAq LworIAlpZiAoc3RhdGUtPnJla2V5X2xpbWl0KSB7CisgCQkqbWF4X2Jsb2NrcyA9IE1JTklNVU0o Km1heF9ibG9ja3MsCisgCQkgICAgc3RhdGUtPnJla2V5X2xpbWl0IC8gZW5jLT5ibG9ja19zaXpl KTsKKyAJfQorLQlkZWJ1ZygicmVrZXkgJXMgYWZ0ZXIgJWxsdSBibG9ja3MiLCBkaXIsCistCSAg ICAodW5zaWduZWQgbG9uZyBsb25nKSptYXhfYmxvY2tzKTsKKysKKysJLyogdGhlc2UgbGluZXMg c3VwcG9ydCB0aGUgZGVidWcgKi8KKysJc3RybGNweShibG9ja3NfcywgIj8iLCBzaXplb2YoYmxv Y2tzX3MpKTsKKysJc3RybGNweShieXRlc19zLCAiPyIsIHNpemVvZihieXRlc19zKSk7CisrCWlm ICgqbWF4X2Jsb2NrcyAqIGVuYy0+YmxvY2tfc2l6ZSA8IExMT05HX01BWCkgeworKwkJZm10X3Nj YWxlZCgobG9uZyBsb25nKSptYXhfYmxvY2tzLCBibG9ja3Nfcyk7CisrCQlmbXRfc2NhbGVkKChs b25nIGxvbmcpKm1heF9ibG9ja3MgKiBlbmMtPmJsb2NrX3NpemUsIGJ5dGVzX3MpOworKwl9Cisr CWRlYnVnKCJyZWtleSAlcyBhZnRlciAlcyBibG9ja3MgLyAlc0IgZGF0YSIsIGRpciwgYmxvY2tz X3MsIGJ5dGVzX3MpOworKworIAlyZXR1cm4gMDsKKyB9CisgCisrLyogdGhpcyBzdXBwb3J0cyB0 aGUgZm9yY2VkIHJla2V5aW5nIHJlcXVpcmVkIGZvciB0aGUgTk9ORSBjaXBoZXIgKi8KKyt2b2lk CisrcGFja2V0X3JlcXVlc3RfcmVrZXlpbmcodm9pZCkKKyt7CisrCXJla2V5X3JlcXVlc3RlZCA9 IDE7CisrfQorKworKy8qIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHByZSBvciBwb3N0IGF1dGggd2hl biByZWtleWluZyBmb3IgYWVzLWN0cgorKyAqIGFuZCBub25lIGNpcGhlciBzd2l0Y2ggKi8KKytp bnQKKytwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoY29uc3Qgc3RydWN0IHNzaCAqc3NoKQor K3sKKysJc3RydWN0IHNlc3Npb25fc3RhdGUgKnN0YXRlID0gc3NoLT5zdGF0ZTsKKysKKysJcmV0 dXJuIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbjsKKyt9CisrCisgI2RlZmluZSBNQVhfUEFD S0VUUwkoMVU8PDMxKQorIC8qCisgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBhY2tldC0gb3IgYmxv Y2stIGJhc2VkIHJla2V5aW5nIGxpbWl0cyBoYXZlIGJlZW4KK0BAIC0xMTQzLDYgKzEyMTIsMTQg QEAKKyAJaWYgKHN0YXRlLT5wX3NlbmQucGFja2V0cyA9PSAwICYmIHN0YXRlLT5wX3JlYWQucGFj a2V0cyA9PSAwKQorIAkJcmV0dXJuIDA7CisgCisrICAgICAgICAvKiB1c2VkIHRvIGZvcmNlIHJl a2V5aW5nIHdoZW4gY2FsbGVkIGZvciBieSB0aGUgbm9uZQorKyAgICAgICAgICogY2lwaGVyIHN3 aXRjaCBhbmQgYWVzLW10LWN0ciBtZXRob2RzIC1janIgKi8KKysgICAgICAgIGlmIChyZWtleV9y ZXF1ZXN0ZWQgPT0gMSkgeworKwkJZGVidWdfZigiR290IHRoZSByZWtleSByZXF1ZXN0Iik7Cisr CQlyZWtleV9yZXF1ZXN0ZWQgPSAwOworKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysgICAg ICAgIH0KKysKKyAJLyogVGltZS1iYXNlZCByZWtleWluZyAqLworIAlpZiAoc3RhdGUtPnJla2V5 X2ludGVydmFsICE9IDAgJiYKKyAJICAgIChpbnQ2NF90KXN0YXRlLT5yZWtleV90aW1lICsgc3Rh dGUtPnJla2V5X2ludGVydmFsIDw9IG1vbm90aW1lKCkpCitAQCAtMTUwOSw3ICsxNTg2LDcgQEAK KyAJc3RydWN0IHNlc3Npb25fc3RhdGUgKnN0YXRlID0gc3NoLT5zdGF0ZTsKKyAJaW50IGxlbiwg ciwgbXNfcmVtYWluID0gMDsKKyAJc3RydWN0IHBvbGxmZCBwZmQ7CistCWNoYXIgYnVmWzgxOTJd OworKwljaGFyIGJ1ZltTU0hfSU9CVUZTWl07CisgCXN0cnVjdCB0aW1ldmFsIHN0YXJ0OworIAlz dHJ1Y3QgdGltZXNwZWMgdGltZXNwZWMsICp0aW1lc3BlY3AgPSBOVUxMOworIAorQEAgLTE2MTMs NyArMTY5MCw3IEBACisgCQkJcmV0dXJuIDA7IC8qIHBhY2tldCBpcyBpbmNvbXBsZXRlICovCisg CQlzdGF0ZS0+cGFja2xlbiA9IFBFRUtfVTMyKGNwKTsKKyAJCWlmIChzdGF0ZS0+cGFja2xlbiA8 IDQgKyAxIHx8CistCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBQQUNLRVRfTUFYX1NJWkUpCisrCQkg ICAgc3RhdGUtPnBhY2tsZW4gPiBwYWNrZXRfbWF4X3NpemUpCisgCQkJcmV0dXJuIFNTSF9FUlJf TUVTU0FHRV9JTkNPTVBMRVRFOworIAl9CisgCW5lZWQgPSBzdGF0ZS0+cGFja2xlbiArIDQ7CitA QCAtMTY3Miw3ICsxNzQ5LDcgQEAKKyAJCSAgICBzc2hidWZfcHRyKHN0YXRlLT5pbnB1dCksIHNz aGJ1Zl9sZW4oc3RhdGUtPmlucHV0KSkgIT0gMCkKKyAJCQlyZXR1cm4gMDsKKyAJCWlmIChzdGF0 ZS0+cGFja2xlbiA8IDEgKyA0IHx8CistCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBQQUNLRVRfTUFY X1NJWkUpIHsKKysJCSAgICBzdGF0ZS0+cGFja2xlbiA+IHBhY2tldF9tYXhfc2l6ZSkgeworICNp ZmRlZiBQQUNLRVRfREVCVUcKKyAJCQlzc2hidWZfZHVtcChzdGF0ZS0+aW5wdXQsIHN0ZGVycik7 CisgI2VuZGlmCitAQCAtMTY5OSw3ICsxNzc2LDcgQEAKKyAJCQlnb3RvIG91dDsKKyAJCXN0YXRl LT5wYWNrbGVuID0gUEVFS19VMzIoc3NoYnVmX3B0cihzdGF0ZS0+aW5jb21pbmdfcGFja2V0KSk7 CisgCQlpZiAoc3RhdGUtPnBhY2tsZW4gPCAxICsgNCB8fAorLQkJICAgIHN0YXRlLT5wYWNrbGVu ID4gUEFDS0VUX01BWF9TSVpFKSB7CisrCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBwYWNrZXRfbWF4 X3NpemUpIHsKKyAjaWZkZWYgUEFDS0VUX0RFQlVHCisgCQkJZnByaW50ZihzdGRlcnIsICJpbnB1 dDogXG4iKTsKKyAJCQlzc2hidWZfZHVtcChzdGF0ZS0+aW5wdXQsIHN0ZGVycik7CitAQCAtMTcw OCw3ICsxNzg1LDcgQEAKKyAjZW5kaWYKKyAJCQlsb2dpdCgiQmFkIHBhY2tldCBsZW5ndGggJXUu Iiwgc3RhdGUtPnBhY2tsZW4pOworIAkJCXJldHVybiBzc2hfcGFja2V0X3N0YXJ0X2Rpc2NhcmQo c3NoLCBlbmMsIG1hYywgMCwKKy0JCQkgICAgUEFDS0VUX01BWF9TSVpFKTsKKysJCQkgICAgcGFj a2V0X21heF9zaXplKTsKKyAJCX0KKyAJCWlmICgociA9IHNzaGJ1Zl9jb25zdW1lKHN0YXRlLT5p bnB1dCwgYmxvY2tfc2l6ZSkpICE9IDApCisgCQkJZ290byBvdXQ7CitAQCAtMTczMSw3ICsxODA4 LDcgQEAKKyAJCWxvZ2l0KCJwYWRkaW5nIGVycm9yOiBuZWVkICVkIGJsb2NrICVkIG1vZCAlZCIs CisgCQkgICAgbmVlZCwgYmxvY2tfc2l6ZSwgbmVlZCAlIGJsb2NrX3NpemUpOworIAkJcmV0dXJu IHNzaF9wYWNrZXRfc3RhcnRfZGlzY2FyZChzc2gsIGVuYywgbWFjLCAwLAorLQkJICAgIFBBQ0tF VF9NQVhfU0laRSAtIGJsb2NrX3NpemUpOworKwkJICAgIHBhY2tldF9tYXhfc2l6ZSAtIGJsb2Nr X3NpemUpOworIAl9CisgCS8qCisgCSAqIGNoZWNrIGlmIHRoZSBlbnRpcmUgcGFja2V0IGhhcyBi ZWVuIHJlY2VpdmVkIGFuZAorQEAgLTE3NzUsMTEgKzE4NTIsMTEgQEAKKyAJCQlpZiAociAhPSBT U0hfRVJSX01BQ19JTlZBTElEKQorIAkJCQlnb3RvIG91dDsKKyAJCQlsb2dpdCgiQ29ycnVwdGVk IE1BQyBvbiBpbnB1dC4iKTsKKy0JCQlpZiAobmVlZCArIGJsb2NrX3NpemUgPiBQQUNLRVRfTUFY X1NJWkUpCisrCQkJaWYgKG5lZWQgKyBibG9ja19zaXplID4gcGFja2V0X21heF9zaXplKQorIAkJ CQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKyAJCQlyZXR1cm4gc3NoX3BhY2tldF9z dGFydF9kaXNjYXJkKHNzaCwgZW5jLCBtYWMsCisgCQkJICAgIHNzaGJ1Zl9sZW4oc3RhdGUtPmlu Y29taW5nX3BhY2tldCksCistCQkJICAgIFBBQ0tFVF9NQVhfU0laRSAtIG5lZWQgLSBibG9ja19z aXplKTsKKysJCQkgICAgcGFja2V0X21heF9zaXplIC0gbmVlZCAtIGJsb2NrX3NpemUpOworIAkJ fQorIAkJLyogUmVtb3ZlIE1BQyBmcm9tIGlucHV0IGJ1ZmZlciAqLworIAkJREJHKGRlYnVnKCJN QUMgIyVkIG9rIiwgc3RhdGUtPnBfcmVhZC5zZXFucikpOworQEAgLTIwMDgsNyArMjA4NSw3IEBA CisgCWludCByOworIAlzaXplX3QgcmxlbjsKKyAKKy0JaWYgKChyID0gc3NoYnVmX3JlYWQoZmQs IHN0YXRlLT5pbnB1dCwgUEFDS0VUX01BWF9TSVpFLCAmcmxlbikpICE9IDApCisrCWlmICgociA9 IHNzaGJ1Zl9yZWFkKGZkLCBzdGF0ZS0+aW5wdXQsIHBhY2tldF9tYXhfc2l6ZSwgJnJsZW4pKSAh PSAwKQorIAkJcmV0dXJuIHI7CisgCisgCWlmIChzdGF0ZS0+cGFja2V0X2Rpc2NhcmQpIHsKK0BA IC0yMDg3LDE3ICsyMTY0LDIxIEBACisgCXN3aXRjaCAocikgeworIAljYXNlIFNTSF9FUlJfQ09O Tl9DTE9TRUQ6CisgCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3NoKTsKKysJCXNzaHBrdF9maW5h bF9sb2dfZW50cnkoc3NoKTsKKyAJCWxvZ2RpZSgiQ29ubmVjdGlvbiBjbG9zZWQgYnkgJXMiLCBy ZW1vdGVfaWQpOworIAljYXNlIFNTSF9FUlJfQ09OTl9USU1FT1VUOgorIAkJc3NoX3BhY2tldF9j bGVhcl9rZXlzKHNzaCk7CisrCQlzc2hwa3RfZmluYWxfbG9nX2VudHJ5KHNzaCk7CisgCQlsb2dk aWUoIkNvbm5lY3Rpb24gJXMgJXMgdGltZWQgb3V0IiwKKyAJCSAgICBzc2gtPnN0YXRlLT5zZXJ2 ZXJfc2lkZSA/ICJmcm9tIiA6ICJ0byIsIHJlbW90ZV9pZCk7CisgCWNhc2UgU1NIX0VSUl9ESVND T05ORUNURUQ6CisgCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3NoKTsKKysJCXNzaHBrdF9maW5h bF9sb2dfZW50cnkoc3NoKTsKKyAJCWxvZ2RpZSgiRGlzY29ubmVjdGVkIGZyb20gJXMiLCByZW1v dGVfaWQpOworIAljYXNlIFNTSF9FUlJfU1lTVEVNX0VSUk9SOgorIAkJaWYgKGVycm5vID09IEVD T05OUkVTRVQpIHsKKyAJCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3NoKTsKKysJCQlzc2hwa3Rf ZmluYWxfbG9nX2VudHJ5KHNzaCk7CisgCQkJbG9nZGllKCJDb25uZWN0aW9uIHJlc2V0IGJ5ICVz IiwgcmVtb3RlX2lkKTsKKyAJCX0KKyAJCS8qIEZBTExUSFJPVUdIICovCitAQCAtMjEzOSw2ICsy MjIwLDI0IEBACisgCWxvZ2RpZV9mKCJzaG91bGQgaGF2ZSBleGl0ZWQiKTsKKyB9CisgCisrLyog dGhpcyBwcmludHMgb3V0IHRoZSBmaW5hbCBsb2cgZW50cnkgKi8KKyt2b2lkCisrc3NocGt0X2Zp bmFsX2xvZ19lbnRyeSAoc3RydWN0IHNzaCAqc3NoKSB7CisrCWRvdWJsZSB0b3RhbF90aW1lOwor KworKwlpZiAoc3NoLT5zdGFydF90aW1lIDwgMSkKKysJCS8qIHRoaXMgd2lsbCBwcm9kdWNlIGEg TmFOIGluIHRoZSBvdXRwdXQuIC1janIgKi8KKysJCXRvdGFsX3RpbWUgPSAwOworKwllbHNlCisr CQl0b3RhbF90aW1lID0gbW9ub3RpbWVfZG91YmxlKCkgLSBzc2gtPnN0YXJ0X3RpbWU7CisrCisr CWxvZ2l0KCJTU0g6IFNlcnZlcjtMVHlwZTogVGhyb3VnaHB1dDtSZW1vdGU6ICVzLSVkO0lOOiAl bHU7T1VUOiAlbHU7RHVyYXRpb246ICUuMWY7dFB1dF9pbjogJS4xZjt0UHV0X291dDogJS4xZiIs CisrCSAgICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpLAor KwkgICAgICBzc2gtPnN0ZGluX2J5dGVzLCBzc2gtPmZkb3V0X2J5dGVzLCB0b3RhbF90aW1lLAor KwkgICAgICBzc2gtPnN0ZGluX2J5dGVzIC8gdG90YWxfdGltZSwKKysJICAgICAgc3NoLT5mZG91 dF9ieXRlcyAvIHRvdGFsX3RpbWUpOworK30KKysKKyAvKgorICAqIExvZ3MgdGhlIGVycm9yIHBs dXMgY29uc3RydWN0cyBhbmQgc2VuZHMgYSBkaXNjb25uZWN0IHBhY2tldCwgY2xvc2VzIHRoZQor ICAqIGNvbm5lY3Rpb24sIGFuZCBleGl0cy4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucy4g VGhlIGVycm9yIG1lc3NhZ2UKK0BAIC0yMzk2LDEwICsyNDk1LDE5IEBACisgCXNzaC0+a2V4LT5z ZXJ2ZXIgPSAxOyAvKiBYWFggdW5pZnk/ICovCisgfQorIAorKy8qIFNldCB0aGUgc3RhdGUgb2Yg dGhlIGNvbm5lY3Rpb24gdG8gcG9zdCBhdXRoCisrICogV2hpbGUgd2UgYXJlIGhlcmUgYWxzbyBk ZWNyZWFzZSB0aGUgc2l6ZSBvZgorKyAqIHBhY2tldF9tYXhfc2l6ZSB0byBzb21ldGhpbmcgbW9y ZSByZWFzb25hYmxlLgorKyAqIEluIHRoaXMgY2FzZSB0aGF0cyAzM2suIFdoaWNoIGlzIHRoZSBz aXplIG9mCisrICogdGhlIGxhcmdlc3QgcGFja2V0IHdlIGV4cGVjdCB0byBzZWUgYW5kIHNvbWUg c3BhY2UKKysgKiBmb3Igb3ZlcmhlYWQuIFRoaXMgcmVkdWNlcyBtZW1vcnkgdXNhZ2UgaW4gaGln aAorKyAqIEJEUCBlbnZpcm9ubWVudHMgd2l0aG91dCBpbXBhY3RpbmcgcGVyZm9ybWFuY2UKKysg KiAtY2pyIDQvMTEvMjMgKi8KKyB2b2lkCisgc3NoX3BhY2tldF9zZXRfYXV0aGVudGljYXRlZChz dHJ1Y3Qgc3NoICpzc2gpCisgeworIAlzc2gtPnN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbiA9 IDE7CisrCXBhY2tldF9tYXhfc2l6ZSA9IFNTSF9JT0JVRlNaICsgMTAyNDsKKyB9CisgCisgdm9p ZCAqCitAQCAtMzA0NSw2ICszMTUzLDIwIEBACisgCXJldHVybiAwOworIH0KKyAKKysvKiB1c2Vk IGZvciBjaXBoZXIgc3dpdGNoaW5nCisrICogb25seSBjYWxsZWQgaW4gY2lwaGVyLXN3dGljaC5j ICovCisrdm9pZCAqCisrc3NoX3BhY2tldF9nZXRfc2VuZF9jb250ZXh0KHN0cnVjdCBzc2ggKnNz aCkKKyt7CisrICAgICAgICByZXR1cm4gc3NoLT5zdGF0ZS0+c2VuZF9jb250ZXh0OworK30KKysK Kyt2b2lkICoKKytzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQoc3RydWN0IHNzaCAqc3No KQorK3sKKysgICAgICAgIHJldHVybiBzc2gtPnN0YXRlLT5yZWNlaXZlX2NvbnRleHQ7CisrfQor KworIHN0YXRpYyBjaGFyICoKKyBmb3JtYXRfdHJhZmZpY19zdGF0cyhzdHJ1Y3QgcGFja2V0X3N0 YXRlICpwcykKKyB7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9wYWNrZXQuaCBvcGVu c3NoLTEwLjVwMS9wYWNrZXQuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvcGFja2V0LmgJMjAy Ni0wOS0yMSAwNzowNjowNS4yOTE2MzM4NTggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9wYWNr ZXQuaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MTQwODQ2MSArMDIwMAorQEAgLTgzLDYgKzgzLDI0 IEBACisgCisgCS8qIEFQUCBkYXRhICovCisgCXZvaWQgKmFwcF9kYXRhOworKworKwkvKiBsb2dn aW5nIGRhdGEgZm9yIFNlcnZlckxvZ2dpbmcgcGF0Y2gqLworKwlkb3VibGUgc3RhcnRfdGltZTsK KysJdV9sb25nIGZkb3V0X2J5dGVzOworKwl1X2xvbmcgc3RkaW5fYnl0ZXM7CisrCisrCS8qIHRy YWNrIHRoYXQgd2UgYXJlIGluIGEgbm9uZSBjaXBoZXIgc3RhdGUgKi8KKysJaW50IG5vbmU7Cisr CisrCS8qIHRyYWNrIGlmIHdlIGhhdmUgZGlzYWJsZWQgdGhlIG1hYyBhcyB3ZWxsICovCisrCWlu dCBub25lX21hYzsKKysKKysJLyogSFBOOiBNVCBjaXBoZXJzIGFyZSBhY3RpdmUgZm9yIHRoaXMg Y29ubmVjdGlvbi4gU2V0IG9ubHkgYnkKKysJICogY2lwaGVyX3N3aXRjaCgpLCB3aGljaCBydW5z IHNvbGVseSB3aGVuIHRoZSBNVCBjaXBoZXJzIGFyZSBub3QKKysJICogZGlzYWJsZWQgYnkgY29u ZmlnIChEaXNhYmxlTVRBRVMpIGFuZCBGSVBTIG1vZGUgaXMgb2ZmLiBHYXRlcyB0aGUKKysJICog cG9zdC1hdXRoIHByb21vdGlvbiBvZiBhZXMtY3RyIHRvIHRoZSB0aHJlYWRlZCBpbXBsZW1lbnRh dGlvbiBzbyBhCisrCSAqIGxhdGVyIHJla2V5IGNhbm5vdCBzaWxlbnRseSBzd2l0Y2ggdG8gTVQg b25jZSBpdCB3YXMgZGlzYWJsZWQuICovCisrCWludCBtdF9lbmFibGVkOworIH07CisgCisgdHlw ZWRlZiBpbnQgKHNzaF9wYWNrZXRfaG9va19mbikoc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3NoYnVm ICosCitAQCAtMTUyLDYgKzE3MCw4IEBACisgaW50CSBzc2hfcGFja2V0X3NldF9tYXhzaXplKHN0 cnVjdCBzc2ggKiwgdV9pbnQpOworIHVfaW50CSBzc2hfcGFja2V0X2dldF9tYXhzaXplKHN0cnVj dCBzc2ggKik7CisgCisraW50CSBwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoY29uc3Qgc3Ry dWN0IHNzaCAqKTsKKysKKyBpbnQJIHNzaF9wYWNrZXRfZ2V0X3N0YXRlKHN0cnVjdCBzc2ggKiwg c3RydWN0IHNzaGJ1ZiAqKTsKKyBpbnQJIHNzaF9wYWNrZXRfc2V0X3N0YXRlKHN0cnVjdCBzc2gg Kiwgc3RydWN0IHNzaGJ1ZiAqKTsKKyAKK0BAIC0xNjcsNiArMTg3LDEzIEBACisgCisgdm9pZAkq c3NoX3BhY2tldF9nZXRfaW5wdXQoc3RydWN0IHNzaCAqKTsKKyB2b2lkCSpzc2hfcGFja2V0X2dl dF9vdXRwdXQoc3RydWN0IHNzaCAqKTsKKyt2b2lkCSpzc2hfcGFja2V0X2dldF9yZWNlaXZlX2Nv bnRleHQoc3RydWN0IHNzaCAqKTsKKyt2b2lkCSpzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQo c3RydWN0IHNzaCAqKTsKKysKKysvKiBmb3IgZm9yY2VkIHBhY2tldCByZWtleWluZyBwb3N0IGF1 dGggKi8KKyt2b2lkCSBwYWNrZXRfcmVxdWVzdF9yZWtleWluZyh2b2lkKTsKKysvKiBmaW5hbCBs b2cgZW50cnkgc3VwcG9ydCAqLworK3ZvaWQJIHNzaHBrdF9maW5hbF9sb2dfZW50cnkgKHN0cnVj dCBzc2ggKik7CisgCisgLyogbmV3IEFQSSAqLworIGludAlzc2hwa3Rfc3RhcnQoc3RydWN0IHNz aCAqc3NoLCB1X2NoYXIgdHlwZSk7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9wb2x5 MTMwNS5jIG9wZW5zc2gtMTAuNXAxL3BvbHkxMzA1LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L3BvbHkxMzA1LmMJMjAyNi0wOC0xMSAwNDoyMjoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NoLTEwLjVwMS9wb2x5MTMwNS5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODkxNTM3NzA3ICswMjAw CitAQCAtMTEsNiArMTEsMTYgQEAKKyAKKyAjaW5jbHVkZSAicG9seTEzMDUuaCIKKyAKKysjaWZk ZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQCisrdm9pZAorK3BvbHkxMzA1X2F1dGgoRVZQX01BQ19D VFggKnBvbHlfY3R4LCB1bnNpZ25lZCBjaGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBjb25zdCB1 bnNpZ25lZCBjaGFyICptLCBzaXplX3QgaW5sZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W1BP TFkxMzA1X0tFWUxFTl0pIHsKKysJc2l6ZV90IHBvbHlfb3V0X2xlbjsKKysJRVZQX01BQ19pbml0 KHBvbHlfY3R4LCAoY29uc3QgdV9jaGFyICopa2V5LCBQT0xZMTMwNV9LRVlMRU4sIE5VTEwpOwor KwlFVlBfTUFDX3VwZGF0ZShwb2x5X2N0eCwgbSwgaW5sZW4pOworKwlFVlBfTUFDX2ZpbmFsKHBv bHlfY3R4LCBvdXQsICZwb2x5X291dF9sZW4sIChzaXplX3QpUE9MWTEzMDVfVEFHTEVOKTsKKyt9 CisrI2Vsc2UKKysKKyAjZGVmaW5lIG11bDMyeDMyXzY0KGEsYikgKCh1aW50NjRfdCkoYSkgKiAo YikpCisgCisgI2RlZmluZSBVOFRPMzJfTEUocCkgXAorQEAgLTI4LDcgKzM4LDcgQEAKKyAJfSB3 aGlsZSAoMCkKKyAKKyB2b2lkCistcG9seTEzMDVfYXV0aCh1bnNpZ25lZCBjaGFyIG91dFtQT0xZ MTMwNV9UQUdMRU5dLCBjb25zdCB1bnNpZ25lZCBjaGFyICptLCBzaXplX3QgaW5sZW4sIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2V5W1BPTFkxMzA1X0tFWUxFTl0pIHsKKytwb2x5MTMwNV9hdXRoKGNo YXIgKnVudXNlZCwgdW5zaWduZWQgY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdW5z aWduZWQgY2hhciAqbSwgc2l6ZV90IGlubGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtQT0xZ MTMwNV9LRVlMRU5dKSB7CisgCXVpbnQzMl90IHQwLHQxLHQyLHQzOworIAl1aW50MzJfdCBoMCxo MSxoMixoMyxoNDsKKyAJdWludDMyX3QgcjAscjEscjIscjMscjQ7CitAQCAtMTU1LDMgKzE2NSw0 IEBACisgCVUzMlRPOF9MRSgmb3V0WyA4XSwgZjIpOyBmMyArPSAoZjIgPj4gMzIpOworIAlVMzJU TzhfTEUoJm91dFsxMl0sIGYzKTsKKyB9CisrI2VuZGlmIC8qIE9QRU5TU0xfSEFWRV9QT0xZX0VW UCAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvcG9seTEzMDUuaCBvcGVuc3NoLTEw LjVwMS9wb2x5MTMwNS5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9wb2x5MTMwNS5oCTIwMjYt MDgtMTEgMDQ6MjI6MTcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvcG9seTEz MDUuaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MTY1MzcwNSArMDIwMAorQEAgLTEzLDggKzEzLDE1 IEBACisgI2RlZmluZSBQT0xZMTMwNV9LRVlMRU4JCTMyCisgI2RlZmluZSBQT0xZMTMwNV9UQUdM RU4JCTE2CisgCistdm9pZCBwb2x5MTMwNV9hdXRoKHVfY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVO XSwgY29uc3QgdV9jaGFyICptLCBzaXplX3QgaW5sZW4sCisrI2lmZGVmIE9QRU5TU0xfSEFWRV9Q T0xZX0VWUAorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworK3ZvaWQgcG9seTEzMDVfYXV0 aChFVlBfTUFDX0NUWCAqcG9seV9rZXksIHVfY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29u c3QgdV9jaGFyICptLCBzaXplX3QgaW5sZW4sCisrICAgIGNvbnN0IHVfY2hhciBrZXlbUE9MWTEz MDVfS0VZTEVOXSkKKysjZWxzZQorK3ZvaWQgcG9seTEzMDVfYXV0aChjaGFyICp1bnVzZWQsIHVf Y2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdV9jaGFyICptLCBzaXplX3QgaW5sZW4s CisgICAgIGNvbnN0IHVfY2hhciBrZXlbUE9MWTEzMDVfS0VZTEVOXSkKKysjZW5kaWYKKyAgICAg X19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCBQT0xZMTMwNV9UQUdM RU4pKSkKKyAgICAgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19idWZmZXJfXywgMiwgMykp KQorICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDQsIFBPTFkx MzA1X0tFWUxFTikpKTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3Byb2dyZXNzbWV0 ZXIuYyBvcGVuc3NoLTEwLjVwMS9wcm9ncmVzc21ldGVyLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5v cmlnL3Byb2dyZXNzbWV0ZXIuYwkyMDI2LTA4LTExIDA0OjIyOjE3LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL3Byb2dyZXNzbWV0ZXIuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5 MTc0MDQ0MCArMDIwMAorQEAgLTY1LDYgKzY1LDggQEAKKyBzdGF0aWMgb2ZmX3Qgc3RhcnRfcG9z OwkJLyogaW5pdGlhbCBwb3NpdGlvbiBvZiB0cmFuc2ZlciAqLworIHN0YXRpYyBvZmZfdCBlbmRf cG9zOwkJLyogZW5kaW5nIHBvc2l0aW9uIG9mIHRyYW5zZmVyICovCisgc3RhdGljIG9mZl90IGN1 cl9wb3M7CQkvKiB0cmFuc2ZlciBwb3NpdGlvbiBhcyBvZiBsYXN0IHJlZnJlc2ggKi8KKytzdGF0 aWMgb2ZmX3QgbGFzdF9wb3M7Cisrc3RhdGljIG9mZl90IG1heF9kZWx0YV9wb3MgPSAwOworIHN0 YXRpYyB2b2xhdGlsZSBvZmZfdCAqY291bnRlcjsJLyogcHJvZ3Jlc3MgY291bnRlciAqLworIHN0 YXRpYyBsb25nIHN0YWxsZWQ7CQkvKiBob3cgbG9uZyB3ZSBoYXZlIGJlZW4gc3RhbGxlZCAqLwor IHN0YXRpYyBsb25nIGxvbmcgYnl0ZXNfcGVyX3NlY29uZDsgLyogY3VycmVudCBzcGVlZCBpbiBi eXRlcyBwZXIgc2Vjb25kICovCitAQCAtMTMxLDYgKzEzMyw3IEBACisgCWxvbmcgbG9uZyBjdXJf c3BlZWQ7CisgCWludCBob3VycywgbWludXRlcywgc2Vjb25kczsKKyAJaW50IGZpbGVfbGVuLCBj b2xzOworKwlvZmZfdCBkZWx0YV9wb3M7CisgCisgCWlmIChmaWxlID09IE5VTEwgfHwgKCFmb3Jj ZV91cGRhdGUgJiYgIWFsYXJtX2ZpcmVkICYmICF3aW5fcmVzaXplZCkgfHwKKyAJICAgICFjYW5f b3V0cHV0KCkpCitAQCAtMTQ3LDYgKzE1MCwxMCBAQAorIAlub3cgPSBtb25vdGltZV9kb3VibGUo KTsKKyAJYnl0ZXNfbGVmdCA9IGVuZF9wb3MgLSBjdXJfcG9zOworIAorKwlkZWx0YV9wb3MgPSBj dXJfcG9zIC0gbGFzdF9wb3M7CisrCWlmIChkZWx0YV9wb3MgPiBtYXhfZGVsdGFfcG9zKQorKwkJ bWF4X2RlbHRhX3BvcyA9IGRlbHRhX3BvczsKKysKKyAJaWYgKGJ5dGVzX2xlZnQgPiAwKQorIAkJ ZWxhcHNlZCA9IG5vdyAtIGxhc3RfdXBkYXRlOworIAllbHNlIHsKK0BAIC0xNzYsNyArMTgzLDcg QEAKKyAJCXJldHVybjsKKyAKKyAJLyogZmlsZW5hbWUgKi8KKy0JZmlsZV9sZW4gPSBjb2xzID0g d2luX3NpemUgLSAzNjsKKysJZmlsZV9sZW4gPSBjb2xzID0gd2luX3NpemUgLSA0NTsKKyAJaWYg KGZpbGVfbGVuID4gMCkgeworIAkJYXNtcHJpbnRmKCZidWYsIElOVF9NQVgsICZjb2xzLCAiJS0q cyIsIGZpbGVfbGVuLCBmaWxlKTsKKyAJCS8qIElmIHdlIHVzZWQgZmV3ZXIgY29sdW1ucyB0aGFu IGV4cGVjdGVkIHRoZW4gcGFkICovCitAQCAtMTkzLDYgKzIwMCwxMiBAQAorIAl4ZXh0ZW5kZigm YnVmLCBOVUxMLCAiICUzZCUlICVzICVzL3MgIiwgcGVyY2VudCwgZm9ybWF0X3NpemUoY3VyX3Bv cyksCisgCSAgICBmb3JtYXRfcmF0ZSgob2ZmX3QpYnl0ZXNfcGVyX3NlY29uZCkpOworIAorKwkv KiBpbnN0YW50YW5lb3VzIHJhdGUgKi8KKysJaWYgKGJ5dGVzX2xlZnQgPiAwKQorKwkJeGV4dGVu ZGYoJmJ1ZiwgTlVMTCwgIiVzL3MiLCBmb3JtYXRfcmF0ZSgob2ZmX3QpZGVsdGFfcG9zKSk7Cisr CWVsc2UKKysJCXhleHRlbmRmKCZidWYsIE5VTEwsICIlcy9zIiwgZm9ybWF0X3JhdGUoKG9mZl90 KW1heF9kZWx0YV9wb3MpKTsKKysKKyAJLyogRVRBICovCisgCWlmICghdHJhbnNmZXJyZWQpCisg CQlzdGFsbGVkICs9IGVsYXBzZWQ7CitAQCAtMjM1LDYgKzI0OCw3IEBACisgCX0KKyAJZnJlZShi dWYpOworIAlmcmVlKG9idWYpOworKwlsYXN0X3BvcyA9IGN1cl9wb3M7CisgfQorIAorIHN0YXRp YyB2b2lkCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9yZWFkY29uZi5jIG9wZW5zc2gt MTAuNXAxL3JlYWRjb25mLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3JlYWRjb25mLmMJMjAy Ni0wOS0yMSAwNzowNjowNS41NjI3MDM4ODEgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9yZWFk Y29uZi5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODkyMDE0NjI5ICswMjAwCitAQCAtNjIsNiArNjIs NyBAQAorICNpbmNsdWRlICJtYWMuaCIKKyAjaW5jbHVkZSAibXlwcm9wb3NhbC5oIgorICNpbmNs dWRlICJkaWdlc3QuaCIKKysjaW5jbHVkZSAic3NoYnVmLmgiCisgI2luY2x1ZGUgInZlcnNpb24u aCIKKyAjaW5jbHVkZSAic3NoLWdzcy5oIgorIAorQEAgLTE2NSw2ICsxNjYsMTAgQEAKKyAJb0hh c2hLbm93bkhvc3RzLAorIAlvVHVubmVsLCBvVHVubmVsRGV2aWNlLAorIAlvTG9jYWxDb21tYW5k LCBvUGVybWl0TG9jYWxDb21tYW5kLCBvUmVtb3RlQ29tbWFuZCwKKysJb1RjcFJjdkJ1ZlBvbGws IG9IUE5EaXNhYmxlZCwKKysJb05vbmVFbmFibGVkLCBvTm9uZU1hY0VuYWJsZWQsIG9Ob25lU3dp dGNoLAorKwlvRGlzYWJsZU1UQUVTLCBvVXNlTVBUQ1AsIG9IYXBweUV5ZXMsIG9IYXBweURlbGF5 LAorKwlvTWV0cmljcywgb01ldHJpY3NQYXRoLCBvTWV0cmljc0ludGVydmFsLCBvRmFsbGJhY2ss IG9GYWxsYmFja1BvcnQsCisgCW9WaXN1YWxIb3N0S2V5LAorIAlvS2V4QWxnb3JpdGhtcywgb0lQ UW9TLCBvUmVxdWVzdFRUWSwgb1Nlc3Npb25UeXBlLCBvU3RkaW5OdWxsLAorIAlvRm9ya0FmdGVy QXV0aGVudGljYXRpb24sIG9JZ25vcmVVbmtub3duLCBvUHJveHlVc2VGZHBhc3MsCitAQCAtMzEy LDYgKzMxNywxOCBAQAorIAl7ICJrZXhhbGdvcml0aG1zIiwgb0tleEFsZ29yaXRobXMgfSwKKyAJ eyAiaXBxb3MiLCBvSVBRb1MgfSwKKyAJeyAicmVxdWVzdHR0eSIsIG9SZXF1ZXN0VFRZIH0sCisr CXsgIm5vbmVlbmFibGVkIiwgb05vbmVFbmFibGVkIH0sCisrCXsgIm5vbmVtYWNlbmFibGVkIiwg b05vbmVNYWNFbmFibGVkIH0sCisrCXsgIm5vbmVzd2l0Y2giLCBvTm9uZVN3aXRjaCB9LAorKwl7 ICJ1c2VtcHRjcCIsIG9Vc2VNUFRDUH0sCisrCXsgImhhcHB5ZXllcyIsIG9IYXBweUV5ZXMgfSwK KysJeyAiaGFwcHlkZWxheSIsIG9IYXBweURlbGF5IH0sCisrCXsgImRpc2FibGVtdGFlcyIsIG9E aXNhYmxlTVRBRVMgfSwKKysJeyAibWV0cmljcyIsIG9NZXRyaWNzIH0sCisrCXsgIm1ldHJpY3Nw YXRoIiwgb01ldHJpY3NQYXRoIH0sCisrCXsgIm1ldHJpY3NpbnRlcnZhbCIsIG9NZXRyaWNzSW50 ZXJ2YWwgfSwKKysJeyAiZmFsbGJhY2siLCBvRmFsbGJhY2sgfSwKKysJeyAiZmFsbGJhY2twb3J0 Iiwgb0ZhbGxiYWNrUG9ydCB9LAorIAl7ICJzZXNzaW9udHlwZSIsIG9TZXNzaW9uVHlwZSB9LAor IAl7ICJzdGRpbm51bGwiLCBvU3RkaW5OdWxsIH0sCisgCXsgImZvcmthZnRlcmF1dGhlbnRpY2F0 aW9uIiwgb0ZvcmtBZnRlckF1dGhlbnRpY2F0aW9uIH0sCitAQCAtMzM0LDYgKzM1MSw4IEBACisg CXsgInByb3h5anVtcCIsIG9Qcm94eUp1bXAgfSwKKyAJeyAic2VjdXJpdHlrZXlwcm92aWRlciIs IG9TZWN1cml0eUtleVByb3ZpZGVyIH0sCisgCXsgImtub3duaG9zdHNjb21tYW5kIiwgb0tub3du SG9zdHNDb21tYW5kIH0sCisrCXsgInRjcHJjdmJ1ZnBvbGwiLCBvVGNwUmN2QnVmUG9sbCB9LAor Kwl7ICJocG5kaXNhYmxlZCIsIG9IUE5EaXNhYmxlZCB9LAorIAl7ICJyZXF1aXJlZHJzYXNpemUi LCBvUmVxdWlyZWRSU0FTaXplIH0sCisgCXsgImVuYWJsZWVzY2FwZWNvbW1hbmRsaW5lIiwgb0Vu YWJsZUVzY2FwZUNvbW1hbmRsaW5lIH0sCisgCXsgIm9ic2N1cmVrZXlzdHJva2V0aW1pbmciLCBv T2JzY3VyZUtleXN0cm9rZVRpbWluZyB9LAorQEAgLTUzNCw3ICs1NTMsNyBAQAorIAorIAlpZiAo cG9ydCA9PSAwKSB7CisgCQlzcCA9IGdldHNlcnZieW5hbWUoU1NIX1NFUlZJQ0VfTkFNRSwgInRj cCIpOworLQkJcG9ydCA9IHNwID8gbnRvaHMoc3AtPnNfcG9ydCkgOiBTU0hfREVGQVVMVF9QT1JU OworKwkJcG9ydCA9IHNwID8gbnRvaHMoc3AtPnNfcG9ydCkgOiBIUE5TU0hfREVGQVVMVF9QT1JU OworIAl9CisgCXJldHVybiBwb3J0OworIH0KK0BAIC0xMzg0LDYgKzE0MDMsNzUgQEAKKyAJCWlu dHB0ciA9ICZvcHRpb25zLT5jaGVja19ob3N0X2lwOworIAkJZ290byBwYXJzZV9mbGFnOworIAor KwljYXNlIG9IUE5EaXNhYmxlZDoKKysJCWludHB0ciA9ICZvcHRpb25zLT5ocG5fZGlzYWJsZWQ7 CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugb1RjcFJjdkJ1ZlBvbGw6CisrCQlpbnRw dHIgPSAmb3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysK KysJY2FzZSBvTm9uZUVuYWJsZWQ6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZV9lbmFibGVk OworKwkJZ290byBwYXJzZV9mbGFnOworKworKwljYXNlIG9Ob25lTWFjRW5hYmxlZDoKKysJCWlu dHB0ciA9ICZvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQ7CisrCQlnb3RvIHBhcnNlX2ZsYWc7Cisr CisrCWNhc2Ugb1VzZU1QVENQOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPnVzZV9tcHRjcDsKKysJ CWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBvSGFwcHlFeWVzOgorKwkJaW50cHRyID0gJm9w dGlvbnMtPnVzZV9oYXBweWV5ZXM7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugb0hh cHB5RGVsYXk6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+aGFwcHlfZGVsYXk7CisrCQlnb3RvIHBh cnNlX2ludDsKKysKKysJY2FzZSBvRGlzYWJsZU1UQUVTOgorKwkJaW50cHRyID0gJm9wdGlvbnMt PmRpc2FibGVfbXVsdGl0aHJlYWRlZDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBv TWV0cmljczoKKysJCWludHB0ciA9ICZvcHRpb25zLT5tZXRyaWNzOworKwkJZ290byBwYXJzZV9m bGFnOworKworKwljYXNlIG9NZXRyaWNzSW50ZXJ2YWw6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+ bWV0cmljc19pbnRlcnZhbDsKKysJCWdvdG8gcGFyc2VfaW50OworKworKwljYXNlIG9NZXRyaWNz UGF0aDoKKysJCWNoYXJwdHIgPSAmb3B0aW9ucy0+bWV0cmljc19wYXRoOworKwkJb3B0aW9ucy0+ bWV0cmljcyA9IDE7CisrCQlnb3RvIHBhcnNlX3N0cmluZzsKKysKKysJY2FzZSBvRmFsbGJhY2s6 CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+ZmFsbGJhY2s7CisrCQlnb3RvIHBhcnNlX2ZsYWc7Cisr CisrCWNhc2Ugb0ZhbGxiYWNrUG9ydDoKKysJCWludHB0ciA9ICZvcHRpb25zLT5mYWxsYmFja19w b3J0OworKwkJZ290byBwYXJzZV9pbnQ7CisrCisrCS8qCisrCSAqIFdlIGNoZWNrIHRvIHNlZSBp ZiB0aGUgY29tbWFuZCBjb21lcyBmcm9tIHRoZSBjb21tYW5kCisrCSAqIGxpbmUgb3Igbm90LiBJ ZiBpdCBkb2VzIHRoZW4gZW5hYmxlIGl0IG90aGVyd2lzZSBmYWlsLgorKwkgKiAgTk9ORSBzaG91 bGQgbmV2ZXIgYmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisrCSAqLworKwljYXNlIG9Ob25l U3dpdGNoOgorKwkJaWYgKHN0cmNtcChmaWxlbmFtZSwgImNvbW1hbmQtbGluZSIpID09IDApIHsK KysJCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZV9zd2l0Y2g7CisrCQkJZ290byBwYXJzZV9mbGFn OworKwkJfSBlbHNlIHsKKysJCQllcnJvcigiTm9uZVN3aXRjaCBpcyBmb3VuZCBpbiAlLjIwMHMu XG5Zb3UgbWF5IG9ubHkgdXNlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnJvbSB0aGUgY29t bWFuZCBsaW5lIiwgZmlsZW5hbWUpOworKwkJCWVycm9yKCJDb250aW51aW5nLi4uIik7CisrCQkJ ZGVidWcoIk5vbmVTd2l0Y2ggZGlyZWN0aXZlIGZvdW5kIGluICUuMjAwcy4iLCBmaWxlbmFtZSk7 CisrCQkJcmV0dXJuIDA7CisrCQl9CisrCisgCWNhc2Ugb1ZlcmlmeUhvc3RLZXlETlM6CisgCQlp bnRwdHIgPSAmb3B0aW9ucy0+dmVyaWZ5X2hvc3Rfa2V5X2RuczsKKyAJCW11bHRpc3RhdGVfcHRy ID0gbXVsdGlzdGF0ZV95ZXNub2FzazsKK0BAIC0yODU4LDYgKzI5NDYsMjAgQEAKKyAJb3B0aW9u cy0+aXBfcW9zX2ludGVyYWN0aXZlID0gLTE7CisgCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gLTE7 CisgCW9wdGlvbnMtPnJlcXVlc3RfdHR5ID0gLTE7CisrCW9wdGlvbnMtPm5vbmVfc3dpdGNoID0g LTE7CisrCW9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9IC0xOworKwlvcHRpb25zLT5ub25lbWFjX2Vu YWJsZWQgPSAtMTsKKysJb3B0aW9ucy0+dXNlX21wdGNwID0gLTE7CisrCW9wdGlvbnMtPnVzZV9o YXBweWV5ZXMgPSAtMTsKKysJb3B0aW9ucy0+aGFwcHlfZGVsYXkgPSAtMTsKKysJb3B0aW9ucy0+ ZGlzYWJsZV9tdWx0aXRocmVhZGVkID0gLTE7CisrCW9wdGlvbnMtPm1ldHJpY3MgPSAtMTsKKysJ b3B0aW9ucy0+bWV0cmljc19wYXRoID0gTlVMTDsKKysJb3B0aW9ucy0+bWV0cmljc19pbnRlcnZh bCA9IC0xOworKwlvcHRpb25zLT5ocG5fZGlzYWJsZWQgPSAtMTsKKysJb3B0aW9ucy0+ZmFsbGJh Y2sgPSAtMTsKKysJb3B0aW9ucy0+ZmFsbGJhY2tfcG9ydCA9IC0xOworKwlvcHRpb25zLT50Y3Bf cmN2X2J1Zl9wb2xsID0gLTE7CisgCW9wdGlvbnMtPnNlc3Npb25fdHlwZSA9IC0xOworIAlvcHRp b25zLT5zdGRpbl9udWxsID0gLTE7CisgCW9wdGlvbnMtPmZvcmtfYWZ0ZXJfYXV0aGVudGljYXRp b24gPSAtMTsKK0BAIC0zMDQwLDggKzMxNDIsNDcgQEAKKyAJCW9wdGlvbnMtPnNlcnZlcl9hbGl2 ZV9pbnRlcnZhbCA9IDA7CisgCWlmIChvcHRpb25zLT5zZXJ2ZXJfYWxpdmVfY291bnRfbWF4ID09 IC0xKQorIAkJb3B0aW9ucy0+c2VydmVyX2FsaXZlX2NvdW50X21heCA9IDM7CisrCWlmIChvcHRp b25zLT5ocG5fZGlzYWJsZWQgPT0gLTEpCisrCQlvcHRpb25zLT5ocG5fZGlzYWJsZWQgPSAwOwor KwlpZiAob3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9PSAtMSkKKysJCW9wdGlvbnMtPnRjcF9y Y3ZfYnVmX3BvbGwgPSAxOworKwlpZiAob3B0aW9ucy0+bm9uZV9zd2l0Y2ggPT0gLTEpCisrCQlv cHRpb25zLT5ub25lX3N3aXRjaCA9IDA7CisrCWlmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0g LTEpCisrCQlvcHRpb25zLT5ub25lX2VuYWJsZWQgPSAwOworKwlpZiAob3B0aW9ucy0+bm9uZV9l bmFibGVkID09IDAgJiYgb3B0aW9ucy0+bm9uZV9zd2l0Y2ggPiAwKSB7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIk5vbmVFbmFibGVkIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgdGhlIE5vbmUgU3dpdGNo IG9wdGlvbi4gTm9uZSBjaXBoZXIgZGlzYWJsZWQuXG4iKTsKKysJCW9wdGlvbnMtPm5vbmVfZW5h YmxlZCA9IDA7CisrCX0KKysJaWYgKG9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZCA9PSAtMSkKKysJ CW9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZCA9IDA7CisrCWlmIChvcHRpb25zLT5ub25lbWFjX2Vu YWJsZWQgPiAwICYmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gMCB8fAorKwkJCQkJICAgICBv cHRpb25zLT5ub25lX3N3aXRjaCA9PSAwKSkgeworKwkJZnByaW50ZihzdGRlcnIsICJOb25lIE1B QyBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIE5vbmUgY2lwaGVyLiBOb25lIE1BQyBkaXNhYmxl ZC5cbiIpOworKwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gMDsKKysJfQorKwlpZiAob3B0 aW9ucy0+dXNlX21wdGNwID09IC0xKQorKwkJb3B0aW9ucy0+dXNlX21wdGNwID0gMDsKKysJaWYg KG9wdGlvbnMtPnVzZV9oYXBweWV5ZXMgPT0gLTEpCisrCQlvcHRpb25zLT51c2VfaGFwcHlleWVz ID0gMDsKKysJLyogaWYgdGhlIHVzZXIgdHJpZXMgdG8gc2V0IHRoZSBkZWxheSB0byAwIHRoZW4g aW4ganVzdCBsb29wcyBmb3JldmVyCisrCSAqIHNvIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YW5k YXJkIC0xIHRlc3Qgd2UgdXNlIDwgMSB0byBtYWtlIHN1cmUgdGhlCisrCSAqIHVzZXIgaXNuJ3Qg YmVpbmcgdG9vIGNsZXZlciBmb3IgdGhlaXIgb3duIGdvb2QKKysJICovCisrCWlmIChvcHRpb25z LT5oYXBweV9kZWxheSA8IDEpCisrCQlvcHRpb25zLT5oYXBweV9kZWxheSA9IDI1MDsgLyogZGVm YXVsdCAyNTBtcyBhcyBwZXIgUkZDIDgzMDUgU2VjdGlvbiA1ICovCisrCWlmIChvcHRpb25zLT5k aXNhYmxlX211bHRpdGhyZWFkZWQgPT0gLTEpCisrCQlvcHRpb25zLT5kaXNhYmxlX211bHRpdGhy ZWFkZWQgPSAwOworKwlpZiAob3B0aW9ucy0+bWV0cmljcyA9PSAtMSkKKysJCW9wdGlvbnMtPm1l dHJpY3MgPSAwOworKwlpZiAob3B0aW9ucy0+bWV0cmljc19pbnRlcnZhbCA9PSAtMSkKKysJCW9w dGlvbnMtPm1ldHJpY3NfaW50ZXJ2YWwgPSA1OworIAlpZiAob3B0aW9ucy0+Y29udHJvbF9tYXN0 ZXIgPT0gLTEpCisgCQlvcHRpb25zLT5jb250cm9sX21hc3RlciA9IDA7CisrCWlmIChvcHRpb25z LT5mYWxsYmFjayA9PSAtMSkKKysJCW9wdGlvbnMtPmZhbGxiYWNrID0gMTsKKysJaWYgKG9wdGlv bnMtPmZhbGxiYWNrX3BvcnQgPT0gLTEpCisrCQlvcHRpb25zLT5mYWxsYmFja19wb3J0ID0gU1NI X0RFRkFVTFRfUE9SVDsKKyAJaWYgKG9wdGlvbnMtPmNvbnRyb2xfcGVyc2lzdCA9PSAtMSkgewor IAkJb3B0aW9ucy0+Y29udHJvbF9wZXJzaXN0ID0gMDsKKyAJCW9wdGlvbnMtPmNvbnRyb2xfcGVy c2lzdF90aW1lb3V0ID0gMDsKK0BAIC0zMDU4LDEwICszMTk5LDIyIEBACisgCQlvcHRpb25zLT5w ZXJtaXRfbG9jYWxfY29tbWFuZCA9IDA7CisgCWlmIChvcHRpb25zLT52aXN1YWxfaG9zdF9rZXkg PT0gLTEpCisgCQlvcHRpb25zLT52aXN1YWxfaG9zdF9rZXkgPSAwOworLQlpZiAob3B0aW9ucy0+ aXBfcW9zX2ludGVyYWN0aXZlID09IC0xKQorKwkvKiBpbiB0aGUgZXZlbnQgd2UgYXJlIHVzaW5n IFJGQyA4MzA1IHRoZW4gd2UKKysJICogbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBRT1Mg YXMgdGhlc2UKKysJICogaW50ZXJmZXJlIHdpdGggdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBpbiBv dXIKKysJICogdGVzdCBlbnZpcm9ubWVudC4gSSBkb24ndCBrbm93IGlmIGl0IGhhcyBhIHJlYWwg d29ybGQKKysJICogaW1wYWN0IGJ1dCBUT0RPIHRyeSB0byBmaW5kIGEgcmVhbCB3b3JsZCB3YXkg dG8gdGVzdCB0aGlzLgorKwkgKi8KKysJaWYgKG9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9 PSAtMSkgeworIAkJb3B0aW9ucy0+aXBfcW9zX2ludGVyYWN0aXZlID0gSVBUT1NfRFNDUF9FRjsK Ky0JaWYgKG9wdGlvbnMtPmlwX3Fvc19idWxrID09IC0xKQorKwkJaWYgKG9wdGlvbnMtPnVzZV9o YXBweWV5ZXMgPT0gMSkKKysJCQlvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPSBJUFRPU19M T1dERUxBWTsKKysJfQorKwlpZiAob3B0aW9ucy0+aXBfcW9zX2J1bGsgPT0gLTEpIHsKKyAJCW9w dGlvbnMtPmlwX3Fvc19idWxrID0gSVBUT1NfRFNDUF9DUzA7CisrCQlpZiAob3B0aW9ucy0+dXNl X2hhcHB5ZXllcyA9PSAxKQorKwkJCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gSVBUT1NfVEhST1VH SFBVVDsKKysJfQorIAlpZiAob3B0aW9ucy0+cmVxdWVzdF90dHkgPT0gLTEpCisgCQlvcHRpb25z LT5yZXF1ZXN0X3R0eSA9IFJFUVVFU1RfVFRZX0FVVE87CisgCWlmIChvcHRpb25zLT5zZXNzaW9u X3R5cGUgPT0gLTEpCitAQCAtMzg3MCw2ICs0MDIzLDE1IEBACisgCWR1bXBfY2ZnX2ZtdGludChv VmlzdWFsSG9zdEtleSwgby0+dmlzdWFsX2hvc3Rfa2V5KTsKKyAJZHVtcF9jZmdfZm10aW50KG9V cGRhdGVIb3N0a2V5cywgby0+dXBkYXRlX2hvc3RrZXlzKTsKKyAJZHVtcF9jZmdfZm10aW50KG9F bmFibGVFc2NhcGVDb21tYW5kbGluZSwgby0+ZW5hYmxlX2VzY2FwZV9jb21tYW5kbGluZSk7Cisr CWR1bXBfY2ZnX2ZtdGludChvVGNwUmN2QnVmUG9sbCwgby0+dGNwX3Jjdl9idWZfcG9sbCk7Cisr CWR1bXBfY2ZnX2ZtdGludChvSFBORGlzYWJsZWQsIG8tPmhwbl9kaXNhYmxlZCk7CisrCWR1bXBf Y2ZnX2ZtdGludChvTm9uZVN3aXRjaCwgby0+bm9uZV9zd2l0Y2gpOworKwlkdW1wX2NmZ19mbXRp bnQob05vbmVFbmFibGVkLCBvLT5ub25lX2VuYWJsZWQpOworKwlkdW1wX2NmZ19mbXRpbnQob05v bmVNYWNFbmFibGVkLCBvLT5ub25lbWFjX2VuYWJsZWQpOworKwlkdW1wX2NmZ19mbXRpbnQob0Zh bGxiYWNrLCBvLT5mYWxsYmFjayk7CisrCWR1bXBfY2ZnX2ZtdGludChvTWV0cmljcywgby0+bWV0 cmljcyk7CisrCWR1bXBfY2ZnX2ZtdGludChvVXNlTVBUQ1AsIG8tPnVzZV9tcHRjcCk7CisrCWR1 bXBfY2ZnX2ZtdGludChvSGFwcHlFeWVzLCBvLT51c2VfaGFwcHlleWVzKTsKKyAJZHVtcF9jZmdf Zm10aW50KG9XYXJuV2Vha0NyeXB0bywgby0+d2Fybl93ZWFrX2NyeXB0byk7CisgCisgCS8qIElu dGVnZXIgb3B0aW9ucyAqLworQEAgLTM4ODIsNiArNDA0NCw5IEBACisgCWR1bXBfY2ZnX2ludChv UmVxdWlyZWRSU0FTaXplLCBvLT5yZXF1aXJlZF9yc2Ffc2l6ZSk7CisgCWR1bXBfY2ZnX2ludChv T2JzY3VyZUtleXN0cm9rZVRpbWluZywKKyAJICAgIG8tPm9ic2N1cmVfa2V5c3Ryb2tlX3RpbWlu Z19pbnRlcnZhbCk7CisrCWR1bXBfY2ZnX2ludChvTWV0cmljc0ludGVydmFsLCBvLT5tZXRyaWNz X2ludGVydmFsKTsKKysJZHVtcF9jZmdfaW50KG9GYWxsYmFja1BvcnQsIG8tPmZhbGxiYWNrX3Bv cnQpOworKwlkdW1wX2NmZ19pbnQob0hhcHB5RGVsYXksIG8tPmhhcHB5X2RlbGF5KTsKKyAKKyAJ LyogU3RyaW5nIG9wdGlvbnMgKi8KKyAJZHVtcF9jZmdfc3RyaW5nKG9CaW5kQWRkcmVzcywgby0+ YmluZF9hZGRyZXNzKTsKK0BAIC0zOTA5LDYgKzQwNzQsNyBAQAorIAlkdW1wX2NmZ19zdHJpbmco b1hBdXRoTG9jYXRpb24sIG8tPnhhdXRoX2xvY2F0aW9uKTsKKyAJZHVtcF9jZmdfc3RyaW5nKG9L bm93bkhvc3RzQ29tbWFuZCwgby0+a25vd25faG9zdHNfY29tbWFuZCk7CisgCWR1bXBfY2ZnX3N0 cmluZyhvVGFnLCBvLT50YWcpOworKwlkdW1wX2NmZ19zdHJpbmcob01ldHJpY3NQYXRoLCBvLT5t ZXRyaWNzX3BhdGgpOworIAlkdW1wX2NmZ19zdHJpbmcob1ZlcnNpb25BZGRlbmR1bSwgby0+dmVy c2lvbl9hZGRlbmR1bSk7CisgCisgCS8qIEZvcndhcmRzICovCitkaWZmIC1OdXIgb3BlbnNzaC0x MC41cDEub3JpZy9yZWFkY29uZi5oIG9wZW5zc2gtMTAuNXAxL3JlYWRjb25mLmgKKy0tLSBvcGVu c3NoLTEwLjVwMS5vcmlnL3JlYWRjb25mLmgJMjAyNi0wOS0yMSAwNzowNjowNS41NjMyMjQ4MjQg KzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9yZWFkY29uZi5oCTIwMjYtMDktMjEgMDc6MDY6NTku ODkyMzAwNjU4ICswMjAwCitAQCAtMTI5LDYgKzEyOSwyMyBAQAorIAlpbnQJZW5hYmxlX3NzaF9r ZXlzaWduOworIAlpbnQ2NF90IHJla2V5X2xpbWl0OworIAlpbnQJcmVrZXlfaW50ZXJ2YWw7Cisr CisrCS8qIGhwbnNzaCBvcHRpb25zICovCisrCWludCAgICAgdGNwX3Jjdl9idWZfcG9sbDsgLyog T3B0aW9uIHRvIHBvbGwgcmVjdiBidWYgZXZlcnkgd2luZG93IHRyYW5zZmVyICovCisrCWludCAg ICAgaHBuX2Rpc2FibGVkOyAgICAgLyogU3dpdGNoIHRvIGRpc2FibGUgSFBOIGJ1ZmZlciBtYW5h Z2VtZW50ICovCisrCWludCAgICAgbm9uZV9zd2l0Y2g7ICAgIC8qIFVzZSBub25lIGNpcGhlciAq LworKwlpbnQgICAgIG5vbmVfZW5hYmxlZDsgICAvKiBBbGxvdyBub25lIHRvIGJlIHVzZWQgKi8K KysJaW50ICAgICBub25lbWFjX2VuYWJsZWQ7ICAgLyogQWxsb3cgbm9uZSB0byBiZSB1c2VkICov CisrCWludCAgICAgZGlzYWJsZV9tdWx0aXRocmVhZGVkOyAvKiBEaXNhYmxlIG11bHRpdGhyZWFk ZWQgYWVzLWN0ciAqLworKwlpbnQgICAgIG1ldHJpY3M7IC8qIGVuYWJsZSBtZXRyaWNzICovCisr CWludCAgICAgbWV0cmljc19pbnRlcnZhbDsgLyogdGltZSBpbiBzZWNvbmRzIGJldHdlZW4gcG9s bHMgKi8KKysJY2hhciAgICptZXRyaWNzX3BhdGg7IC8qIHBhdGggZm9yIHRoZSBtZXRyaWNzIGZp bGVzICovCisrCWludCAgICAgZmFsbGJhY2s7IC8qIGVufGRpc2FibGUgZmFsbGJhY2sgcG9ydCAo ZGVmOiB0cnVlKSAqLworKwlpbnQgICAgIGZhbGxiYWNrX3BvcnQ7IC8qIHBvcnQgdG8gZmFsbGJh Y2sgdG8gKGRlZjogMjIpICovCisrCWludCAgICAgdXNlX21wdGNwOyAvKiB1c2UgTXVsdGlQYXRo IFRDUCAqLworKwlpbnQgICAgIHVzZV9oYXBweWV5ZXM7IC8qIHVzZSBSRkMgODMwNSAtIEhhcHB5 IEV5ZWJhbGxzICovCisrCWludCAgICAgaGFwcHlfZGVsYXk7IC8qIHVzZXIgZGVmaW5lZCBkbGVh eSBmb3IgUkZDIDgzMDUgKi8KKysKKyAJaW50CW5vX2hvc3RfYXV0aGVudGljYXRpb25fZm9yX2xv Y2FsaG9zdDsKKyAJaW50CWlkZW50aXRpZXNfb25seTsKKyAJaW50CXNlcnZlcl9hbGl2ZV9pbnRl cnZhbDsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL1JFQURNRS5tZCBvcGVuc3NoLTEw LjVwMS9SRUFETUUubWQKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL1JFQURNRS5tZAkyMDI2LTA4 LTExIDA0OjIyOjE3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL1JFQURNRS5t ZAkyMDI2LTA5LTIxIDExOjQ2OjU1LjY4MzQxNTkyNiArMDIwMAorQEAgLTEsMTkgKzEsMjMgQEAK Ky0jIFBvcnRhYmxlIE9wZW5TU0gKKysjIEhQTlNTSDogQmFzZWQgb24gUG9ydGFibGUgT3BlblNT SAorK0hQTi1TU0ggaXMgYSBoaWdoIHBlcmZvcm1hbmNlIHNvZnQgZm9yayBvZiBPcGVuU1NIIHRo YXQgY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhyb3VnaHB1dCBmb3IgYnVsayBk YXRhIHRyYW5zZmVycyBvdmVyIGEgd2lkZSByYW5nZSBvZiBuZXR3b3JrIHBhdGhzLiBJbiBzb21l IHNpdHVhdGlvbnMgd2UndmUgc2VlbiB0aHJvdWdocHV0IHJhdGVzIG1vcmUgdGhhbiAxMDAgdGlt ZXMgZmFzdGVyIHRoYW4gT3BlblNTSC4gSFBOLVNTSCBpcyBhYmxlIHRvIGRvIHRoaXMgYnkgb3B0 aW1pemluZyB0aGUgYXBwbGljYXRpb24gbGF5ZXIgcmVjZWl2ZSBidWZmZXIgdG8gbWF0Y2ggdGhl IFRDUCByZWNlaXZlIGJ1ZmZlci4gTm90YWJseSwgdG8gc2VlIHBlcmZvcm1hbmNlIGltcHJvdmVt ZW50cyBIUE4tU1NIIG9ubHkgbmVlZHMgdG8gYmUgdGhlIGRhdGEgcmVjZWl2ZXIgc28gdXNlcnMg Y2FuIHNlZSBub3RhYmxlIGltcHJvdmVtZW50cyB3aXRoIG1hbnkgb3RoZXIgU1NIIGltcGxlbWVu dGF0aW9ucy4gSFBOLVNTSCBhbHNvIGluY29ycG9yYXRlcyB0d28gcGFyYWxsZWxpemVkIGNpcGhl cnMsIEFFUy1DVFIgYW5kIENoYWNoYTIwICh0aGUgZGVmYXVsdCkuIFdoZW4gdXNpbmcgdGhlc2Ug Y2lwaGVycyBhIHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgaW5jcmVhc2Ugb2YgMzAlIGlzIHR5cGlj YWwuIE1vcmUgaW5mb3JtYXRpb24gb24gaG93IHdlIGRvIHRoaXMgd29yayBhbmQgb3RoZXIgZmVh dHVyZXMgb2YgSFBOLVNTSCBpcyBhdmFpbGFibGUgZnJvbSBbaHR0cHM6Ly9ocG5zc2gub3JnXSho dHRwczovL2hwbnNzaC5vcmcpLgorIAorLVshW0MvQysrIENJXSguLi8uLi9hY3Rpb25zL3dvcmtm bG93cy9jLWNwcC55bWwvYmFkZ2Uuc3ZnKV0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3MvYy1jcHAu eW1sKQorLVshW1ZNIENJXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy92bS55bWwvYmFkZ2Uuc3Zn KV0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3Mvdm0ueW1sKQorLVshW0MvQysrIENJIHNlbGYtaG9z dGVkXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlLXNlbGZob3N0 ZWQvYWN0aW9ucy93b3JrZmxvd3Mvc2VsZmhvc3RlZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9n aXRodWIuY29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS1zZWxmaG9zdGVkL2FjdGlvbnMvd29y a2Zsb3dzL3NlbGZob3N0ZWQueW1sKQorLVshW0NJRnV6el0oLi4vLi4vYWN0aW9ucy93b3JrZmxv d3MvY2lmdXp6LnltbC9iYWRnZS5zdmcpXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy9jaWZ1enou eW1sKQorLVshW0Z1enppbmcgU3RhdHVzXShodHRwczovL29zcy1mdXp6LWJ1aWxkLWxvZ3Muc3Rv cmFnZS5nb29nbGVhcGlzLmNvbS9iYWRnZXMvb3BlbnNzaC5zdmcpXShodHRwczovL2lzc3Vlcy5v c3MtZnV6ei5jb20vaXNzdWVzP3E9IlByb2plY3Q6K29wZW5zc2giK2lzOm9wZW4pCistWyFbQ292 ZXJpdHkgU3RhdHVzXShodHRwczovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzLzIxMzQxL2Jh ZGdlLnN2ZyldKGh0dHBzOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvb3BlbnNzaC1wb3J0 YWJsZSkKKytTdGFydGluZyB3aXRoIHZlcnNpb24gSFBOMTd2MCB0aGVyZSB3aWxsIGJlIHNpZ25p ZmljYW50IGNoYW5nZXMgdG8gdGhlIG5hbWluZyBjb252ZW50aW9uIHVzZWQgZm9yIGV4ZWN1dGFi bGVzIGFuZCBpbnN0YWxsYXRpb24gbG9jYXRpb25zLiBUaGUgbGFzdCB2ZXJzaW9uIHRoYXQgZG9l cyBub3QgaW5jbHVkZSB0aGVzZSBjaGFuZ2VzIGlzIEhQTjE2djEgY29ycmVzcG9uZGluZyB0byB0 aGUgSFBOLThfOF9QMSB0YWcgb24gdGhlIG1hc3RlciBicmFuY2guCisgCistT3BlblNTSCBpcyBh IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTU0ggcHJvdG9jb2wgKHZlcnNpb24gMikg Zm9yIHNlY3VyZSByZW1vdGUgbG9naW4sIGNvbW1hbmQgZXhlY3V0aW9uIGFuZCBmaWxlIHRyYW5z ZmVyLiBJdCBpbmNsdWRlcyBhIGNsaWVudCBgYHNzaGBgIGFuZCBzZXJ2ZXIgYGBzc2hkYGAsIGZp bGUgdHJhbnNmZXIgdXRpbGl0aWVzIGBgc2NwYGAgYW5kIGBgc2Z0cGBgIGFzIHdlbGwgYXMgdG9v bHMgZm9yIGtleSBnZW5lcmF0aW9uIChgYHNzaC1rZXlnZW5gYCksIHJ1bi10aW1lIGtleSBzdG9y YWdlIChgYHNzaC1hZ2VudGBgKSBhbmQgYSBudW1iZXIgb2Ygc3VwcG9ydGluZyBwcm9ncmFtcy4K KytIUE5TU0ggaXMgYSB2YXJpYW50IG9mIE9wZW5TU0guIEl0IGEgY29tcGxldGUgaW1wbGVtZW50 YXRpb24gb2YgdGhlIFNTSCBwcm90b2NvbCAodmVyc2lvbiAyKSBmb3Igc2VjdXJlIHJlbW90ZSBs b2dpbiwgY29tbWFuZCBleGVjdXRpb24gYW5kIGZpbGUgdHJhbnNmZXIuIEl0IGluY2x1ZGVzIGEg Y2xpZW50IGBgaHBuc3NoYGAgYW5kIHNlcnZlciBgYGhwbnNzaGRgYCwgZmlsZSB0cmFuc2ZlciB1 dGlsaXRpZXMgYGBocG5zY3BgYCBhbmQgYGBocG5zZnRwYGAgYXMgd2VsbCBhcyB0b29scyBmb3Ig a2V5IGdlbmVyYXRpb24gKGBgaHBuc3NoLWtleWdlbmBgKSwgcnVuLXRpbWUga2V5IHN0b3JhZ2Ug KGBgaHBuc3NoLWFnZW50YGApIGFuZCBhIG51bWJlciBvZiBzdXBwb3J0aW5nIHByb2dyYW1zLiBJ dCBpbmNsdWRlcyBudW1lcm91cyBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eSBlbmhhbmNl bWVudHMgZm9jdXNlZCBvbiBoaWdoIHBlcmZvcm1hbmNlIG5ldHdvcmtzIGFuZCBjb21wdXRpbmcg ZW52cmlyb25tZW50cy4gQ29tcGxldGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBI UE4tUkVBRE1FIGZpbGUuCisgCistVGhpcyBpcyBhIHBvcnQgb2YgT3BlbkJTRCdzIFtPcGVuU1NI XShodHRwczovL29wZW5zc2guY29tKSB0byBtb3N0IFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVt cywgaW5jbHVkaW5nIExpbnV4LCBPUyBYIGFuZCBDeWd3aW4uIFBvcnRhYmxlIE9wZW5TU0ggcG9s eWZpbGxzIE9wZW5CU0QgQVBJcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZSwgYWRk cyBzc2hkIHNhbmRib3hpbmcgZm9yIG1vcmUgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGluY2x1ZGVz IHN1cHBvcnQgZm9yIE9TLW5hdGl2ZSBhdXRoZW50aWNhdGlvbiBhbmQgYXVkaXRpbmcgKGUuZy4g dXNpbmcgUEFNKS4KKytJdCBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggYWxsIGNvbXBsaWFudCBp bXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNTSCBwcm90b2NvbCBhbmQgT3BlblNTSCBpbiBwYXJ0aWN1 bGFyLgorKworK1RoaXMgdmVyc2lvbiBvZiBIUE5TU0ggaXMgc2lnbmlmaWNhbnQgZGVwYXJ0dXJl IGluIHRlcm1zIG9mIG5hbWluZyBleGVjdXRhYmxlcyBhbmQgaW5zdGFsbGF0aW9uIGxvY2F0aW9u cy4gU3BlY2lmaWNhbGx5LCBhbGwgZXhlY3V0YWJsZXMgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIGBg aHBuYGAuIFNvIGBgc3NoYGAgYmVjb21lcyBgYGhwbnNzaGBgIGFuZCBgYHNjcGBgIGlzIG5vdyBg YGhwbnNjcGBgLiBDb25maWd1YXRpb24gZmlsZXMgYW5kIGhvc3Qga2V5cyBjYW4gbm93IGJlIGZv dW5kIGluIGBgL2V0Yy9ocG5zc2hgYC4gQnkgZGVmYXVsdCBgYGhwbnNzaGRgYCBub3cgcnVucyBv biBwb3J0IDIyMjIgYnV0IHRoaXMgaXMgY29uZmlndXJhYmxlLiBUaGlzIGNoYW5nZSB3YXMgbWFk ZSBpbiBvcmRlciB0byBwcmV2ZW50IGluc3RhbGxhdGlvbnMgb2YgaHBuc3NoLCBwYXJ0aWN1bGFy bHkgZnJvbSBwYWNrYWdlIGRpc3RyaWJ1dGlvbnMsIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBkZWZh dWx0IGluc3RhbGxhdGlvbnMgb2YgT3BlblNTSC4gSFBOU1NIIGlzIGJhY2t3YXJkcyBjb21wYXRp YmxlIHdpdGggYWxsIHZlcnNpb25zIG9mIE9wZW5TU0ggaW5jbHVkaW5nIGNvbmZpZ3VyYXRpb24g ZmlsZXMsIGtleXMsIGFuZCBydW4gdGltZSBvcHRpb25zLiBBZGRpdGlvbmFsbHksIHRoZSBjbGll bnQgd2lsbCwgYnkgZGVmYXVsdCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gcG9ydCAyMjIyIGJ1dCB3 aWxsIGF1dG9tYXRpY2FsbHkgZmFsbCBiYWNrIHRvIHBvcnQgMjIuIFRoaXMgaXMgYWxzbyB1c2Vy IGNvbmZpZ3VyYWJsZS4KKysKKytIUE5TU0ggaXMgYmFzZWQgb24gT3BlblNTSCBwb3J0YWJsZS4g VGhpcyBpcyBhIHBvcnQgb2YgT3BlbkJTRCdzIFtPcGVuU1NIXShodHRwczovL29wZW5zc2guY29t KSB0byBtb3N0IFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcywgaW5jbHVkaW5nIExpbnV4LCBP UyBYIGFuZCBDeWd3aW4uIFBvcnRhYmxlIE9wZW5TU0ggcG9seWZpbGxzIE9wZW5CU0QgQVBJcyB0 aGF0IGFyZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZSwgYWRkcyBzc2hkIHNhbmRib3hpbmcgZm9y IG1vcmUgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGluY2x1ZGVzIHN1cHBvcnQgZm9yIE9TLW5hdGl2 ZSBhdXRoZW50aWNhdGlvbiBhbmQgYXVkaXRpbmcgKGUuZy4gdXNpbmcgUEFNKS4KKysKKytUaGlz IGRvY3VtZW50IHdpbGwgYmUgY2hhbmdpbmcgb3ZlciB0aW1lIHRvIHJlZmxlY3QgbmV3IGNoYW5n ZXMgYW5kIGZlYXR1cmVzLiBUaGlzIGRvY3VtZW50IGlzIGJ1aWx0IG9mZiBvZiB0aGUgT3BlblNT SCBSRUFETUUubWQKKysKKytDdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHJlbGVhc2UgZmVhdHVy ZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgSFBOLVJFQURNRSBkb2N1bWVudC4KKyAKKyAjIyBEb2N1 bWVudGF0aW9uCisgCistVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gZm9yIE9wZW5TU0ggYXJl IHRoZSBtYW4gcGFnZXMgZm9yIGVhY2ggdG9vbDoKKytUaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlv biBmb3IgSFBOLVNTSCBhcmUgdGhlIG1hbiBwYWdlcyBmb3IgZWFjaCB0b29sLgorIAorICogW3Nz aCgxKV0oaHR0cHM6Ly9tYW4ub3BlbmJzZC5vcmcvc3NoLjEpCisgKiBbc3NoZCg4KV0oaHR0cHM6 Ly9tYW4ub3BlbmJzZC5vcmcvc3NoZC44KQorQEAgLTI0LDE3ICsyOCwxOCBAQAorICogW3NzaC1r ZXlzY2FuKDgpXShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zc2gta2V5c2Nhbi44KQorICogW3Nm dHAtc2VydmVyKDgpXShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zZnRwLXNlcnZlci44KQorIAor LSMjIFN0YWJsZSBSZWxlYXNlcworK0FsbCBvcHRpb25zIGluIE9wZW5TU0ggYXJlIHJlc3BlY3Rl ZCBieSBIUE4tU1NILgorIAorLVN0YWJsZSByZWxlYXNlIHRhcmJhbGxzIGFyZSBhdmFpbGFibGUg ZnJvbSBhIG51bWJlciBvZiBbZG93bmxvYWQgbWlycm9yc10oaHR0cHM6Ly93d3cub3BlbnNzaC5j b20vcG9ydGFibGUuaHRtbCNkb3dubG9hZHMpLiBXZSByZWNvbW1lbmQgdGhlIHVzZSBvZiBhIHN0 YWJsZSByZWxlYXNlIGZvciBtb3N0IHVzZXJzLiBQbGVhc2UgcmVhZCB0aGUgW3JlbGVhc2Ugbm90 ZXNdKGh0dHBzOi8vd3d3Lm9wZW5zc2guY29tL3JlbGVhc2Vub3Rlcy5odG1sKSBmb3IgZGV0YWls cyBvZiByZWNlbnQgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGluY29tcGF0aWJpbGl0aWVzLgorKyMj IEJ1aWxkaW5nIEhQTlNTSAorIAorLSMjIEJ1aWxkaW5nIFBvcnRhYmxlIE9wZW5TU0gKKytEZXRh aWxlZCBzdGVwIGJ5IHN0ZXAgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBmb3VuZCBhdCBodHRwczovL3Bz Yy5lZHUvaHBuLXNzaC1ob21lLworIAorICMjIyBEZXBlbmRlbmNpZXMKKyAKKy1Qb3J0YWJsZSBP cGVuU1NIIGlzIGJ1aWx0IHVzaW5nIGF1dG9jb25mIGFuZCBtYWtlLiBJdCByZXF1aXJlcyBhIHdv cmtpbmcgQyBjb21waWxlciwgc3RhbmRhcmQgbGlicmFyeSBhbmQgaGVhZGVycy4KKytIUE5TU0gg aXMgYnVpbHQgdXNpbmcgYXV0b2NvbmYgYW5kIG1ha2UuIEl0IHJlcXVpcmVzIGEgd29ya2luZyBD IGNvbXBpbGVyLCBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBoZWFkZXJzLgorIAorLWBgbGliY3J5cHRv YGAgZnJvbSBvbmUgb2YgW0xpYnJlU1NMXShodHRwczovL3d3dy5saWJyZXNzbC5vcmcvKSwgW09w ZW5TU0xdKGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnKSwgW0FXUy1MQ10oaHR0cHM6Ly9naXRodWIu Y29tL2F3cy9hd3MtbGMpIG9yIFtCb3JpbmdTU0xdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUv Ym9yaW5nc3NsKSBtYXkgYWxzbyBiZSB1c2VkLiAgT3BlblNTSCBtYXkgYmUgYnVpbHQgd2l0aG91 dCBhbnkgb2YgdGhlc2UsIGJ1dCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgaGF2ZSBvbmx5 IGEgc3Vic2V0IG9mIHRoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgbm9ybWFsbHkgYXZhaWxh YmxlLgorK2BgbGliY3J5cHRvYGAgZnJvbSBlaXRoZXIgW0xpYnJlU1NMXShodHRwczovL3d3dy5s aWJyZXNzbC5vcmcvKSBvciBbT3BlblNTTF0oaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcpIG1heSBh bHNvIGJlIHVzZWQuIEhQTi1TU0ggbWF5IGJlIGJ1aWx0IHdpdGhvdXQgZWl0aGVyIG9mIHRoZXNl LCBidXQgdGhlIHJlc3VsdGluZyBiaW5hcmllcyB3aWxsIGhhdmUgb25seSBhIHN1YnNldCBvZiB0 aGUgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG1zIG5vcm1hbGx5IGF2YWlsYWJsZS4KKytUaGUgZGV2 ZWxvcGVycyBvZiBIUE4tU1NIIHN0cm9uZ2x5IHN1Z2dlc3QgdGhlIHVzZSBvZiBPcGVuU1NMIDMu MCBvciBoaWdoZXIgdG8gc3VwcG9ydCB0aGUgYWR2YW5jZWQgY3J5cHRvZ3JhcGh5IG1ldGhvZHMg dXNlZC4KKyAKKyBbemxpYl0oaHR0cHM6Ly93d3cuemxpYi5uZXQvKSBpcyBvcHRpb25hbDsgd2l0 aG91dCBpdCB0cmFuc3BvcnQgY29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZC4KKyAKK0BAIC00 Nyw4ICs1Miw5IEBACisgUmVsZWFzZSB0YXJiYWxscyBhbmQgcmVsZWFzZSBicmFuY2hlcyBpbiBn aXQgaW5jbHVkZSBhIHByZS1idWlsdCBjb3B5IG9mIHRoZSBgYGNvbmZpZ3VyZWBgIHNjcmlwdCBh bmQgbWF5IGJlIGJ1aWx0IHVzaW5nOgorIAorIGBgYAorLXRhciB6eHZmIG9wZW5zc2gtWC5ZcFou dGFyLmd6CistY2Qgb3BlbnNzaAorK3RhciB6eHZmIGhwbnNzaC1YLllwWi50YXIuZ3oKKytjZCBo cG4tc3NoCisrYXV0b3JlY29uZiAtZiAtaQorIC4vY29uZmlndXJlICMgW29wdGlvbnNdCisgbWFr ZSAmJiBtYWtlIHRlc3RzCisgYGBgCitAQCAtNTcsMTkgKzYzLDE5IEBACisgCisgIyMjIEJ1aWxk aW5nIGZyb20gZ2l0CisgCistSWYgYnVpbGRpbmcgZnJvbSB0aGUgZ2l0IG1hc3RlciBicmFuY2gs IHlvdSdsbCBuZWVkIFthdXRvY29uZl0oaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRv Y29uZi8pIGluc3RhbGxlZCB0byBidWlsZCB0aGUgYGBjb25maWd1cmVgYCBzY3JpcHQuIFRoZSBm b2xsb3dpbmcgY29tbWFuZHMgd2lsbCBjaGVjayBvdXQgYW5kIGJ1aWxkIHBvcnRhYmxlIE9wZW5T U0ggZnJvbSBnaXQ6CisrSWYgYnVpbGRpbmcgZnJvbSB0aGUgZ2l0IG1hc3RlciBicmFuY2gsIHlv dSdsbCBuZWVkIFthdXRvY29uZl0oaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29u Zi8pIGluc3RhbGxlZCB0byBidWlsZCB0aGUgYGBjb25maWd1cmVgYCBzY3JpcHQuIFRoZSBmb2xs b3dpbmcgY29tbWFuZHMgd2lsbCBjaGVjayBvdXQgYW5kIGJ1aWxkIEhQTi1TU0ggZnJvbSBnaXQ6 CisgCisgYGBgCistZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5zc2gt cG9ydGFibGUgIyBvciBodHRwczovL2Fub25naXQubWluZHJvdC5vcmcvb3BlbnNzaC5naXQKKy1j ZCBvcGVuc3NoLXBvcnRhYmxlCistYXV0b3JlY29uZgorK2dpdCBjbG9uZSBodHRwczovL2dpdGh1 Yi5jb20vcmFwaWVyMS9ocG4tc3NoCisrY2QgaHBuLXNzaAorK2F1dG9yZWNvbmYgLWYgLWkKKyAu L2NvbmZpZ3VyZQorIG1ha2UgJiYgbWFrZSB0ZXN0cworIGBgYAorIAorICMjIyBCdWlsZC10aW1l IEN1c3RvbWlzYXRpb24KKyAKKy1UaGVyZSBhcmUgbWFueSBidWlsZC10aW1lIGN1c3RvbWlzYXRp b24gb3B0aW9ucyBhdmFpbGFibGUuIEFsbCBBdXRvY29uZiBkZXN0aW5hdGlvbiBwYXRoIGZsYWdz IChlLmcuIGBgLS1wcmVmaXhgYCkgYXJlIHN1cHBvcnRlZCAoYW5kIGFyZSB1c3VhbGx5IHJlcXVp cmVkIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgT3BlblNTSCkuCisrVGhlcmUgYXJlIG1hbnkgYnVp bGQtdGltZSBjdXN0b21pc2F0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBBbGwgQXV0b2NvbmYgZGVz dGluYXRpb24gcGF0aCBmbGFncyAoZS5nLiBgYC0tcHJlZml4YGApIGFyZSBzdXBwb3J0ZWQgKGFu ZCBhcmUgdXN1YWxseSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIEhQTi1TU0gpLgor IAorIEZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgZmxhZ3MsIHJ1biBgYC4vY29uZmlndXJl IC0taGVscGBgIGJ1dCBhIGZldyBvZiB0aGUgbW9yZSBmcmVxdWVudGx5LXVzZWQgb25lcyBhcmUg ZGVzY3JpYmVkIGJlbG93LiBTb21lIG9mIHRoZXNlIGZsYWdzIHdpbGwgcmVxdWlyZSBhZGRpdGlv bmFsIGxpYnJhcmllcyBhbmQvb3IgaGVhZGVycyBiZSBpbnN0YWxsZWQuCisgCitAQCAtNzksMTEg Kzg1LDEzIEBACisgYGAtLXdpdGgtbGliZWRpdGBgIHwgRW5hYmxlIFtsaWJlZGl0XShodHRwczov L3d3dy50aHJ5c29lZS5kay9lZGl0bGluZS8pIHN1cHBvcnQgZm9yIHNmdHAuCisgYGAtLXdpdGgt a2VyYmVyb3M1YGAgfCBFbmFibGUgS2VyYmVyb3MvR1NTQVBJIHN1cHBvcnQuIEJvdGggW0hlaW1k YWxdKGh0dHBzOi8vd3d3Lmg1bC5vcmcvKSBhbmQgW01JVF0oaHR0cHM6Ly93ZWIubWl0LmVkdS9r ZXJiZXJvcy8pIEtlcmJlcm9zIGltcGxlbWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkLgorIGBgLS13 aXRoLXNlbGludXhgYCB8IEVuYWJsZSBbU0VMaW51eF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn L3dpa2kvU2VjdXJpdHktRW5oYW5jZWRfTGludXgpIHN1cHBvcnQuCisrYGAtLXdpdGgtc2VjdXJp dHkta2V5LWJ1aWx0aW5gYCB8IEluY2x1ZGUgYnVpbHQtaW4gc3VwcG9ydCBmb3IgVTJGL0ZJRE8y IHNlY3VyaXR5IGtleXMuIFRoaXMgcmVxdWlyZXMgW2xpYmZpZG8yXShodHRwczovL2dpdGh1Yi5j b20vWXViaWNvL2xpYmZpZG8yKSBiZSBpbnN0YWxsZWQuCisgCisgIyMgRGV2ZWxvcG1lbnQKKyAK KyBQb3J0YWJsZSBPcGVuU1NIIGRldmVsb3BtZW50IGlzIGRpc2N1c3NlZCBvbiB0aGUgW29wZW5z c2gtdW5peC1kZXYgbWFpbGluZyBsaXN0XShodHRwczovL2xpc3RzLm1pbmRyb3Qub3JnL21haWxt YW4vbGlzdGluZm8vb3BlbnNzaC11bml4LWRldikgKFthcmNoaXZlIG1pcnJvcl0oaHR0cHM6Ly9t YXJjLmluZm8vP2w9b3BlbnNzaC11bml4LWRldikpLiBCdWdzIGFuZCBmZWF0dXJlIHJlcXVlc3Rz IGFyZSB0cmFja2VkIG9uIG91ciBbQnVnemlsbGFdKGh0dHBzOi8vYnVnemlsbGEubWluZHJvdC5v cmcvKS4KKytIUE4tU1NIIGRldmVsb3BtZW50IGlzIGRpc2N1c3NlZCBvbiB0aGUgW2hwbnNzaC1j b21tdW5pdHkgbWFpbGluZyBsaXN0XShodHRwczovL2xpc3RzLnBzYy5lZHUvbWFpbG1hbi9saXN0 aW5mby9ocG5zc2gtY29tbXVuaXR5KSBhbmQgb24gdGhlIFtHaXRIdWIgRGlzY3Vzc2lvbnMgcGFn ZV0oaHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaC9kaXNjdXNzaW9ucykuCisgCisg IyMgUmVwb3J0aW5nIGJ1Z3MKKyAKKy1fTm9uLXNlY3VyaXR5XyBidWdzIG1heSBiZSByZXBvcnRl ZCB0byB0aGUgZGV2ZWxvcGVycyB2aWEgW0J1Z3ppbGxhXShodHRwczovL2J1Z3ppbGxhLm1pbmRy b3Qub3JnLykgb3IgdmlhIHRoZSBtYWlsaW5nIGxpc3QgYWJvdmUuIFNlY3VyaXR5IGJ1Z3Mgc2hv dWxkIGJlIHJlcG9ydGVkIHRvIFtvcGVuc3NoQG9wZW5zc2guY29tXShtYWlsdG86b3BlbnNzaC5v cGVuc3NoLmNvbSkuCisrX05vbi1zZWN1cml0eV8gYnVncyBtYXkgYmUgcmVwb3J0ZWQgdG8gdGhl IGRldmVsb3BlcnMgdmlhIFtHaXRIdWIgSXNzdWVzXShodHRwczovL2dpdGh1Yi5jb20vcmFwaWVy MS9ocG4tc3NoL2lzc3Vlcykgb3IgdmlhIHRoZSBtYWlsaW5nIGxpc3QgYWJvdmUuIFNlY3VyaXR5 IGJ1Z3Mgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIFtocG5zc2hAcHNjLmVkdV0obWFpbHRvOmhwbnNz aEBwc2MuZWR1KS4KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NhbmRib3gtc2VjY29t cC1maWx0ZXIuYyBvcGVuc3NoLTEwLjVwMS9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMKKy0tLSBv cGVuc3NoLTEwLjVwMS5vcmlnL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYwkyMDI2LTA5LTIxIDA3 OjA2OjA1LjMzNDAzODMyNSArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NhbmRib3gtc2VjY29t cC1maWx0ZXIuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MjU3OTczNiArMDIwMAorQEAgLTMyMyw2 ICszMjMsOSBAQAorICNpZmRlZiBfX05SX2dldGV1aWQzMgorIAlTQ19BTExPVyhfX05SX2dldGV1 aWQzMiksCisgI2VuZGlmCisrI2lmZGVmIF9fTlJfZ2V0cGVlcm5hbWUgLyogbm90IGRlZmluZWQg b24gYXJjaHMgdGhhdCBnbyB2aWEgc29ja2V0Y2FsbCgyKSAqLworKwlTQ19BTExPVyhfX05SX2dl dHBlZXJuYW1lKSwKKysjZW5kaWYKKyAjaWZkZWYgX19OUl9nZXRwZ2lkCisgCVNDX0FMTE9XKF9f TlJfZ2V0cGdpZCksCisgI2VuZGlmCitAQCAtMzcwLDYgKzM3Myw5IEBACisgIyBpZmRlZiBNQURW X0RPTlRORUVECisgCVNDX0FMTE9XX0FSRyhfX05SX21hZHZpc2UsIDIsIE1BRFZfRE9OVE5FRUQp LAorICMgZW5kaWYKKysjIGlmZGVmIE1BRFZfRE9OVE5FRURfTE9DS0VECisrCVNDX0FMTE9XX0FS RyhfX05SX21hZHZpc2UsIDIsIE1BRFZfRE9OVE5FRURfTE9DS0VEKSwKKysjIGVuZGlmCisgIyBp ZmRlZiBNQURWX0RPTlRGT1JLCisgCVNDX0FMTE9XX0FSRyhfX05SX21hZHZpc2UsIDIsIE1BRFZf RE9OVEZPUkspLAorICMgZW5kaWYKK0BAIC00NDEsNiArNDQ3LDkgQEAKKyAjaWZkZWYgX19OUl9z aWdwcm9jbWFzaworIAlTQ19BTExPVyhfX05SX3NpZ3Byb2NtYXNrKSwKKyAjZW5kaWYKKysjaWZk ZWYgX19OUl9zb2NrZXRjYWxsCisrCVNDX0FMTE9XKF9fTlJfc29ja2V0Y2FsbCksCisrI2VuZGlm CisgI2lmZGVmIF9fTlJfdGltZQorIAlTQ19BTExPVyhfX05SX3RpbWUpLAorICNlbmRpZgorZGlm ZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2NwLjEgb3BlbnNzaC0xMC41cDEvc2NwLjEKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NjcC4xCTIwMjYtMDktMjEgMDc6MDY6MDUuMjUxNjQzNDg4 ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc2NwLjEJMjAyNi0wOS0yMSAwNzowNjo1OS44OTI3 MDY5MDQgKzAyMDAKK0BAIC0xOCw3ICsxOCw3IEBACisgLk5kIE9wZW5TU0ggc2VjdXJlIGZpbGUg Y29weQorIC5TaCBTWU5PUFNJUworIC5ObSBzY3AKKy0uT3AgRmwgMzQ2QUJDT3BxUnJzVHYKKysu T3AgRmwgMzQ2QUJDT3BxUnJzVHZaCisgLk9wIEZsIGMgQXIgY2lwaGVyCisgLk9wIEZsIEQgQXIg c2Z0cF9zZXJ2ZXJfcGF0aAorIC5PcCBGbCBGIEFyIHNzaF9jb25maWcKK0BAIC0zMyw2ICszMyw4 IEBACisgLlNoIERFU0NSSVBUSU9OCisgLk5tCisgY29waWVzIGZpbGVzIGJldHdlZW4gaG9zdHMg b24gYSBuZXR3b3JrLgorK0l0IGlzIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggT3BlblNTSCdzIHNj cCBpbmNsdWRpbmcKKyt0aGUgdXNlIG9mIHRoZSBzYW1lIGRpcmVjdGl2ZXMgYW5kIGNvbmZpZ3Vy YXRpb24gb3B0aW9ucyBleGNlcHQgd2hlcmUgbm90ZWQuIAorIC5QcAorIC5ObQorIHVzZXMgdGhl IFNGVFAgcHJvdG9jb2wgb3ZlciBhbgorQEAgLTI1OCw2ICsyNjAsNyBAQAorIC5JdCBUdW5uZWwK KyAuSXQgVHVubmVsRGV2aWNlCisgLkl0IFVwZGF0ZUhvc3RLZXlzCisrLkl0IFVzZU1QVENQCisg Lkl0IFVzZXIKKyAuSXQgVXNlcktub3duSG9zdHNGaWxlCisgLkl0IFZlcmlmeUhvc3RLZXlETlMK K0BAIC0yOTQsNiArMjk3LDEwIEBACisgTm90ZSB0aGF0CisgLk5tCisgZm9sbG93cyBzeW1ib2xp YyBsaW5rcyBlbmNvdW50ZXJlZCBpbiB0aGUgdHJlZSB0cmF2ZXJzYWwuCisrLkl0IEZsIFoKKytS ZXN1bWUgZmFpbGVkIG9yIGludGVycnVwdGVkIHRyYW5zZmVyLiBJZGVudGljYWwgZmlsZXMgd2ls bCBiZSBza2lwcGVkLiBSZW1vdGUgbXVzdCBoYXZlIHJlc3VtZSBvcHRpb24uCisrLk5tCisrb25s eSBvcHRpb24uCisgLkl0IEZsIFMgQXIgcHJvZ3JhbQorIE5hbWUgb2YKKyAuQXIgcHJvZ3JhbQor QEAgLTMwMSw2ICszMDgsMTQgQEAKKyBUaGUgcHJvZ3JhbSBtdXN0IHVuZGVyc3RhbmQKKyAuWHIg c3NoIDEKKyBvcHRpb25zLgorKy5JdCBGbCB6IEFyIHByb2dyYW0KKytQYXRoIHRvIGhwbnNjcCBv biByZW1vdGUgc3lzdGVtLiBVc2VmdWwgaWYgcmVtb3RlIGhhcyBtdWx0aXBsZSBzY3AgaW5zdGFs bHMuCisrRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSByZXN1bWUgb3B0aW9uIGJ1dCB0aGUgZGVmYXVs dCByZW1vdGUgc2NwIGRvZXMgbm90IGhhdmUgdGhlIHJlc3VtZSBvcHRpb24uCisrVXNlIC16IHRv IHBvaW50IHRoZSB2ZXJzaW9uIHRoYXQgZG9lcyAtIGUuZy4gLXogL29wdC9ocG5zc2gvYmluL2hw bnNjcC4KKysuTm0KKytvbmx5IG9wdGlvbi4gCisrLkl0IEZsIHMKKytVc2UgdGhlIFNGVFAgcHJv dG9jb2wgZm9yIHRyYW5zZmVycyByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgc2NwIHByb3RvY29s LgorIC5JdCBGbCBUCisgRGlzYWJsZSBzdHJpY3QgZmlsZW5hbWUgY2hlY2tpbmcuCisgQnkgZGVm YXVsdCB3aGVuIGNvcHlpbmcgZmlsZXMgZnJvbSBhIHJlbW90ZSBob3N0IHRvIGEgbG9jYWwgZGly ZWN0b3J5CitAQCAtMzI3LDEwICszNDIsMTMgQEAKKyAuSXQgQ20gbnJlcXVlc3RzIE5zID0gTnMg QXIgdmFsdWUKKyBDb250cm9scyBob3cgbWFueSBjb25jdXJyZW50IFNGVFAgcmVhZCBvciB3cml0 ZSByZXF1ZXN0cyBtYXkgYmUgaW4gcHJvZ3Jlc3MKKyBhdCBhbnkgcG9pbnQgaW4gdGltZSBkdXJp bmcgYSBkb3dubG9hZCBvciB1cGxvYWQuCistQnkgZGVmYXVsdCA2NCByZXF1ZXN0cyBtYXkgYmUg YWN0aXZlIGNvbmN1cnJlbnRseS4KKytUaGlzIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA4 MTkyLgorK0J5IGRlZmF1bHQgMTAyNCByZXF1ZXN0cyBtYXkgYmUgYWN0aXZlIGNvbmN1cnJlbnRs eS4KKyAuSXQgQ20gYnVmZmVyIE5zID0gTnMgQXIgdmFsdWUKKyBDb250cm9scyB0aGUgbWF4aW11 bSBidWZmZXIgc2l6ZSBmb3IgYSBzaW5nbGUgU0ZUUCByZWFkL3dyaXRlIG9wZXJhdGlvbiB1c2Vk CisgZHVyaW5nIGRvd25sb2FkIG9yIHVwbG9hZC4KKytUaGlzIHZhbHVlIG11c3QgYmUgYmV0d2Vl biAxQiBhbmQgMjU1S0IuIFlvdSBtYXkgdXNlCisrdGhlIEsgdW5pdCBmb3IgdGhlIHNpemUuIEUu Zy4gMzI3Njggb3IgMzJLLgorIEJ5IGRlZmF1bHQgYSAzMktCIGJ1ZmZlciBpcyB1c2VkLgorIC5F bAorIC5FbAorQEAgLTM2NCw2ICszODIsNyBAQAorIC5TaCBBVVRIT1JTCisgLkFuIFRpbW8gUmlu bmUgQXEgTXQgdHJpQGlraS5maQorIC5BbiBUYXR1IFlsb25lbiBBcSBNdCB5bG9AY3MuaHV0LmZp CisrLkFuIENocmlzIFJhcGllciBBcSBNdCByYXBpZXJAcHNjLmVkdQorIC5TaCBDQVZFQVRTCisg VGhlIGxlZ2FjeSBTQ1AgcHJvdG9jb2wgKHNlbGVjdGVkIGJ5IHRoZQorIC5GbCBPCitkaWZmIC1O dXIgb3BlbnNzaC0xMC41cDEub3JpZy9zY3AuYyBvcGVuc3NoLTEwLjVwMS9zY3AuYworLS0tIG9w ZW5zc2gtMTAuNXAxLm9yaWcvc2NwLmMJMjAyNi0wOS0yMSAwNzowNjowNS4yNjMxNTI5MzggKzAy MDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zY3AuYwkyMDI2LTA5LTIxIDEwOjU2OjA2LjY2MDY3MDI5 NSArMDIwMAorQEAgLTE3LDYgKzE3LDcgQEAKKyAvKgorICAqIENvcHlyaWdodCAoYykgMTk5OSBU aGVvIGRlIFJhYWR0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKiBDb3B5cmlnaHQgKGMpIDE5 OTkgQWFyb24gQ2FtcGJlbGwuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqIENvcHlyaWdodCAo YykgMjAyMSBDaHJpcyBSYXBpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKK0BAIC0xMTMsNiArMTE0LDEyIEBACisgI2luY2x1ZGUgIm1p c2MuaCIKKyAjaW5jbHVkZSAicHJvZ3Jlc3NtZXRlci5oIgorICNpbmNsdWRlICJ1dGY4LmgiCisr LyogbGlicmVzc2wgZG9lc24ndCBzdXBwb3J0IHRoZSBibGFrZTJiNTEyIGRpZ2VzdCBzbworKyAq IHdlIG5lZWQgdG8gcHJldmVudCBsaWJyZXNzbCBmcm9tIHVzaW5nIHRoZSByZXN1bWUgZmVhdHVy ZQorKyAqIGNqciA3LzE4LzIwMjMgKi8KKysjaWYgKGRlZmluZWQgV0lUSF9PUEVOU1NMKSAmJiAh ZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjZW5kaWYKKyAjaW5jbHVkZSAic2Z0cC5oIgorIAorICNpbmNsdWRlICJzZnRwLWNvbW1v bi5oIgorQEAgLTE1NSw2ICsxNjIsMTAgQEAKKyAvKiBUaGlzIGlzIHRoZSBwcm9ncmFtIHRvIGV4 ZWN1dGUgZm9yIHRoZSBzZWN1cmUgY29ubmVjdGlvbi4gKCJzc2giIG9yIC1TKSAqLworIGNoYXIg KnNzaF9wcm9ncmFtID0gX1BBVEhfU1NIX1BST0dSQU07CisgCisrLyogdGhpcyBpcyBwYXRoIHRv IHRoZSByZW1vdGUgc2NwIHByb2dyYW0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeQorKyAq IGEgbm9uLWRlZmF1bHQgc2NwICovCisrY2hhciAqcmVtb3RlX3BhdGg7CisrCisgLyogVGhpcyBp cyB1c2VkIHRvIHN0b3JlIHRoZSBwaWQgb2Ygc3NoX3Byb2dyYW0gKi8KKyBwaWRfdCBkb19jbWRf cGlkID0gLTE7CisgcGlkX3QgZG9fY21kX3BpZDIgPSAtMTsKK0BAIC0xNjksNiArMTgwLDE3IEBA CisgaW50IHNmdHBfZ2xvYihzdHJ1Y3Qgc2Z0cF9jb25uICosIGNvbnN0IGNoYXIgKiwgaW50LAor ICAgICBpbnQgKCopKGNvbnN0IGNoYXIgKiwgaW50KSwgZ2xvYl90ICopOyAvKiBwcm90byBmb3Ig c2Z0cC1nbG9iLmMgKi8KKyAKKysvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhIGZp bGUgcmVzdW1lICovCisraW50IHJlc3VtZV9mbGFnID0gMDsgLyogMCBpcyBvZmYsIDEgaXMgb24g Ki8KKysKKysvKiB3ZSB3YW50IHRoZSBob3N0IG5hbWUgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAq LworK2NoYXIgaG9zdG5hbWVbSE9TVF9OQU1FX01BWCArIDFdOworKworKy8qIGRlZmluZXMgZm9y IHRoZSByZXN1bWUgZnVuY3Rpb24uIE5lZWQgdGhlbSBldmVuIGlmIG5vdCBzdXBwb3J0ZWQgKi8K KysjZGVmaW5lIEhBU0hfTEVOIDEyOCAgICAgICAgICAgICAgIC8qNDAgc2hhMSwgNjQgYmxha2Uy czI1NiAxMjggYmxha2UyYjUxMiovCisrI2RlZmluZSBCVUZfQU5EX0hBU0ggSEFTSF9MRU4gKyA2 NCAvKiBsZW5ndGggb2YgdGhlIGhhc2ggYW5kIG90aGVyIGRhdGEgdG8gZ2V0IHNpemUgb2YgYnVm ZmVyICovCisrI2RlZmluZSBIQVNIX0JVRkxFTiA4MTkyCSAgIC8qIDgxOTIgc2VlbXMgdG8gYmUg YSBnb29kIGJhbGFuY2UgYmV0d2VlbiBmcmVhZHMKKysJCQkJICAgICogYW5kIHRoZSBkaWdlc3Qg ZnVuYyovCisgc3RhdGljIHZvaWQKKyBraWxsY2hpbGQoaW50IHNpZ25vKQorIHsKK0BAIC0yMTYs NiArMjM4LDkgQEAKKyAJaW50IHN0YXR1czsKKyAJcGlkX3QgcGlkOworIAorKyNpZmRlZiBERUJV RworKwlmcHJpbnRmKHN0ZGVyciwgIkluIGRvX2xvY2FsX2NtZFxuIik7CisrI2VuZGlmCisgCWlm IChhLT5udW0gPT0gMCkKKyAJCWZhdGFsKCJkb19sb2NhbF9jbWQ6IG5vIGFyZ3VtZW50cyIpOwor IAorQEAgLTQ0MSw2ICs0NjYsOCBAQAorIHZvaWQgdG9sb2NhbChpbnQsIGNoYXIgKltdLCBlbnVt IHNjcF9tb2RlX2UsIGNoYXIgKnNmdHBfZGlyZWN0KTsKKyB2b2lkIHRvcmVtb3RlKGludCwgY2hh ciAqW10sIGVudW0gc2NwX21vZGVfZSwgY2hhciAqc2Z0cF9kaXJlY3QpOworIHZvaWQgdXNhZ2Uo dm9pZCk7Cisrdm9pZCBjYWxjdWxhdGVfaGFzaChjaGFyICosIGNoYXIgKiwgb2ZmX3QpOyAvKmdl dCB0aGUgaGFzaCBvZiBmaWxlIHRvIGxlbmd0aCovCisrdm9pZCByYW5kX3N0cihjaGFyICosIHNp emVfdCk7IC8qZ2VuIHJhbmRvbWUgY2hhciBzdHJpbmcgKi8KKyAKKyB2b2lkIHNvdXJjZV9zZnRw KGludCwgY2hhciAqLCBjaGFyICosIHN0cnVjdCBzZnRwX2Nvbm4gKik7Cisgdm9pZCBzaW5rX3Nm dHAoaW50LCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHNmdHBfY29ubiAqKTsKK0BAIC00 NTksMTEgKzQ4NiwxOCBAQAorIAljaGFyICpzZnRwX2RpcmVjdCA9IE5VTEw7CisgCWxvbmcgbG9u ZyBsbHY7CisgCisrCS8qIHdlIHVzZSB0aGlzIHRvIHByZXBlbmQgdGhlIGRlYnVnZ2luZyBzdGF0 ZW1lbnRzCisrCSAqIHNvIHdlIGtub3cgd2hpY2ggc2lkZSBpcyBzYXlpbmcgd2hhdCAqLworKwln ZXRob3N0bmFtZShob3N0bmFtZSwgSE9TVF9OQU1FX01BWCArIDEpOworKworIAkvKiBFbnN1cmUg dGhhdCBmZHMgMCwgMSBhbmQgMiBhcmUgb3BlbiBvciBkaXJlY3RlZCB0byAvZGV2L251bGwgKi8K KyAJc2FuaXRpc2Vfc3RkZmQoKTsKKyAKKyAJbXNldGxvY2FsZSgpOworIAorKwkvKiBmb3IgdXNl IHdpdGggcmFuZCBmdW5jdGlvbiB3aGVuIHJlc3VtZSBvcHRpb24gaXMgdXNlZCovCisrCXNyYW5k KHRpbWUoTlVMTCkpOworKworIAkvKiBDb3B5IGFyZ3YsIGJlY2F1c2Ugd2UgbW9kaWZ5IGl0ICov CisgCWFyZ3YwID0gYXJndlswXTsKKyAJbmV3YXJndiA9IHhjYWxsb2MoTUFYSU1VTShhcmdjICsg MSwgMSksIHNpemVvZigqbmV3YXJndikpOworQEAgLTQ4OCw3ICs1MjIsNyBAQAorIAorIAlmZmxh ZyA9IFRmbGFnID0gdGZsYWcgPSAwOworIAl3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3Ys CistCSAgICAiMTIzNDZBQkNUZGZPcHFScnN0dkQ6RjpKOk06UDpTOmM6aTpsOm86WDoiKSkgIT0g LTEpIHsKKysJICAgICIxMjM0NkFCQ1RkZk9wcVJyc3R2WkQ6RjpKOk06UDpTOmM6aTpsOm86WDoi KSkgIT0gLTEpIHsKKyAJCXN3aXRjaCAoY2gpIHsKKyAJCS8qIFVzZXItdmlzaWJsZSBmbGFncy4g Ki8KKyAJCWNhc2UgJzEnOgorQEAgLTU2OSwyNCArNjAzLDM2IEBACisgCQkJYWRkYXJncygmcmVt b3RlX3JlbW90ZV9hcmdzLCAiLXEiKTsKKyAJCQlzaG93cHJvZ3Jlc3MgPSAwOworIAkJCWJyZWFr OworKyNpZiAoZGVmaW5lZCBXSVRIX09QRU5TU0wpICYmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJ T05fTlVNQkVSKQorKwkJY2FzZSAnWic6CisrCQkJLyogY3VycmVudGx5IHJlc3VtZSBvbmx5IHdv cmtzIGluIFNDUCBtb2RlICovCisrCQkJcmVzdW1lX2ZsYWcgPSAxOworKwkJCW1vZGUgPSBNT0RF X1NDUDsKKysJCQlicmVhazsKKysjZW5kaWYKKyAJCWNhc2UgJ1gnOgorIAkJCS8qIFBsZWFzZSBr ZWVwIGluIHN5bmMgd2l0aCBzZnRwLmMgLVggKi8KKyAJCQlpZiAoc3RybmNtcChvcHRhcmcsICJi dWZmZXI9IiwgNykgPT0gMCkgeworIAkJCQlyID0gc2Nhbl9zY2FsZWQob3B0YXJnICsgNywgJmxs dik7CistCQkJCWlmIChyID09IDAgJiYgKGxsdiA8PSAwIHx8IGxsdiA+IDI1NiAqIDEwMjQpKSB7 CisrCQkJCS8qIGRvbid0IGFzayBmb3IgYSBidWZmZXIgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0K KysJCQkJICogc2l6ZSB0aGF0IFNGVFAgY2FuIGhhbmRsZSAqLworKwkJCQlpZiAociA9PSAwICYm IChsbHYgPD0gMCB8fCBsbHYgPiAoU0ZUUF9NQVhfTVNHX0xFTkdUSCAtIDEwMjQpKSkgeworIAkJ CQkJciA9IC0xOworIAkJCQkJZXJybm8gPSBFSU5WQUw7CisgCQkJCX0KKyAJCQkJaWYgKHIgPT0g LTEpIHsKKy0JCQkJCWZhdGFsKCJJbnZhbGlkIGJ1ZmZlciBzaXplIFwiJXNcIjogJXMiLAorLQkJ CQkJICAgICBvcHRhcmcgKyA3LCBzdHJlcnJvcihlcnJubykpOworKwkJCQkJZmF0YWwoIkludmFs aWQgYnVmZmVyIHNpemUuIE11c3QgYmUgYmV0d2VlbiAxQiBhbmQgMjU1S0IuIgorKwkJCQkJICAg ICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyA3LCBzdHJlcnJvcihlcnJubykpOworIAkJCQl9Cisg CQkJCXNmdHBfY29weV9idWZsZW4gPSAoc2l6ZV90KWxsdjsKKyAJCQl9IGVsc2UgaWYgKHN0cm5j bXAob3B0YXJnLCAibnJlcXVlc3RzPSIsIDEwKSA9PSAwKSB7CistCQkJCWxsdiA9IHN0cnRvbnVt KG9wdGFyZyArIDEwLCAxLCAyNTYgKiAxMDI0LAorKwkJCQkvKiBtb3JlIHRoYW4gMTBrIHRvIDE1 ayByZXF1ZXN0cyBzdGFydHMgc3RhbGxpbmcgdGhlIGNvbm5lY3Rpb24KKysJCQkJICogODE5MiAq IGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgMjU2TUIgb2Ygb3V0c3RhbmRpbmcgZGF0YS4KKysJCQkJ ICogaWYgdXNlcnMgbmVlZCBtb3JlIHRoZW4gdGhleSBuZWVkIHRvIHVwIHRoZSBidWZmZXIgc2l6 ZSAqLworKwkJCQlsbHYgPSBzdHJ0b251bShvcHRhcmcgKyAxMCwgMSwgOCAqIDEwMjQsCisgCQkJ CSAgICAmZXJyc3RyKTsKKyAJCQkJaWYgKGVycnN0ciAhPSBOVUxMKSB7CistCQkJCQlmYXRhbCgi SW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMgIgorKwkJCQkJZmF0YWwoIkludmFsaWQgbnVtYmVy IG9mIHJlcXVlc3RzLiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgODE5Mi4gIgorIAkJCQkJICAgICJc IiVzXCI6ICVzIiwgb3B0YXJnICsgMTAsIGVycnN0cik7CisgCQkJCX0KKyAJCQkJc2Z0cF9ucmVx dWVzdHMgPSAoc2l6ZV90KWxsdjsKK0BAIC02NzQsMTAgKzcyMCwxOSBAQAorIAlyZW1pbiA9IHJl bW91dCA9IC0xOworIAlkb19jbWRfcGlkID0gLTE7CisgCS8qIENvbW1hbmQgdG8gYmUgZXhlY3V0 ZWQgb24gcmVtb3RlIHN5c3RlbSB1c2luZyAic3NoIi4gKi8KKy0JKHZvaWQpIHNucHJpbnRmKGNt ZCwgc2l6ZW9mIGNtZCwgInNjcCVzJXMlcyVzIiwKKysJLyogSW4gdGhlIGV2ZW50IG9mIGFuIGhw biB0byBocG4gY29ubmVjdGlvbiB0aGUgc2NwCisrCSAqIGNvbW1hbmQgaXMgcmV3cml0dGVuIHRv IGhwbnNjcC4gVGhpcyBoYXBwZW5zIGluCisrCSAqIGNsaWVudGxvb3AuYyAtY2pyIDEyLzEyLzIw MjIgKi8KKysKKysJKHZvaWQpIHNucHJpbnRmKGNtZCwgc2l6ZW9mIGNtZCwgIiVzJXMlcyVzJXMl cyIsCisrCSAgICByZW1vdGVfcGF0aCA/IHJlbW90ZV9wYXRoIDogInNjcCIsCisgCSAgICB2ZXJi b3NlX21vZGUgPyAiIC12IiA6ICIiLAorIAkgICAgaWFtcmVjdXJzaXZlID8gIiAtciIgOiAiIiwg cGZsYWcgPyAiIC1wIiA6ICIiLAorLQkgICAgdGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkgPyAiIC1k IiA6ICIiKTsKKysJICAgIHRhcmdldHNob3VsZGJlZGlyZWN0b3J5ID8gIiAtZCIgOiAiIiwKKysJ ICAgIHJlc3VtZV9mbGFnID8gIiAtWiIgOiAiIik7CisrI2lmZGVmIERFQlVHCisrCWZwcmludGYo c3RkZXJyLCAiJXM6IFNlbmRpbmcgY21kICVzXG4iLCBob3N0bmFtZSwgY21kKTsKKysjZW5kaWYK KyAKKyAJKHZvaWQpIHNzaF9zaWduYWwoU0lHUElQRSwgbG9zdGNvbm4pOworIAorQEAgLTY4OCw2 ICs3NDMsNyBAQAorIAkJCXZlcmlmeWRpcihhcmd2W2FyZ2MgLSAxXSk7CisgCQl0b2xvY2FsKGFy Z2MsIGFyZ3YsIG1vZGUsIHNmdHBfZGlyZWN0KTsJLyogRGVzdCBpcyBsb2NhbCBob3N0LiAqLwor IAl9CisrCisgCS8qCisgCSAqIEZpbmFsbHkgY2hlY2sgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBz c2ggcHJvY2VzcywgaWYgb25lIHdhcyBmb3JrZWQKKyAJICogYW5kIG5vIGVycm9yIGhhcyBvY2N1 cnJlZCB5ZXQKK0BAIC0xMzA5LDYgKzEzNjUsNzQgQEAKKyAJc2Z0cF9mcmVlKGNvbm4pOworIH0K KyAKKysvKiBjYWxjdWxhdGUgdGhlIGhhc2ggb2YgYSBmaWxlIHVwIHRvIGxlbmd0aCBieXRlcwor KyAqIHRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgcmVtb3RlIGFuZCBsb2NhbCBmaWxlCisr ICogZnJhZ21lbnRzIG1hdGNoLiBUaGVyZSBtYXkgYmUgYSBtb3JlIGVmZmljaWVudCBwcm9jZXNz IGZvciB0aGUgaGFzaGluZworKyAqIE5vdGU6IExpYnJlU1NMIGRvZXNuJ3Qgc3VwcG9ydCBibGFr ZTJiNTEyIHNvIHdlIGNhbid0IG9mZmVyIHRoZW0KKysgKiB0aGUgcmVzdW1lIGZlYXR1cmUgY2py IDcvMTgvMjAyMyAqLworKyNpZiAoZGVmaW5lZCBXSVRIX09QRU5TU0wpICYmICFkZWZpbmVkKExJ QlJFU1NMX1ZFUlNJT05fTlVNQkVSKQorK3ZvaWQgY2FsY3VsYXRlX2hhc2goY2hhciAqZmlsZW5h bWUsIGNoYXIgKm91dHB1dCwgb2ZmX3QgbGVuZ3RoKQorK3sKKysJaW50IG4sIG1kX2xlbjsKKysJ RVZQX01EX0NUWCAqYzsKKysJY29uc3QgRVZQX01EICptZDsKKysJY2hhciBidWZbSEFTSF9CVUZM RU5dOworKwlzc2l6ZV90IGJ5dGVzOworKwl1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJ WkVdOworKwljaGFyIHRtcFszXTsKKysJRklMRSAqZmlsZV9wdHI7CisrCSpvdXRwdXQgPSAnXDAn OworKworKwkvKiBvcGVuIGZpbGUgZm9yIGNhbGN1bGF0aW5nIGhhc2ggKi8KKysJZmlsZV9wdHIg PSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKysJaWYgKGZpbGVfcHRyPT1OVUxMKQorKwl7CisrCQlp ZiAodmVyYm9zZV9tb2RlKSB7CisrCQkJZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igb3Blbmlu ZyBmaWxlICVzXG4iLCBob3N0bmFtZSwgZmlsZW5hbWUpOworKwkJCS8qIGZpbGUgdGhlIGV4cGVj dGVkIG91dHB1dCB3aXRoIHNwYWNlcyAqLworKwkJCXNucHJpbnRmKG91dHB1dCwgSEFTSF9MRU4s ICIlcyIsICAiICIpOworKwkJfQorKwkJcmV0dXJuOworKwl9CisrCisrCW1kID0gRVZQX2dldF9k aWdlc3RieW5hbWUoImJsYWtlMmI1MTIiKTsKKysJYyA9IEVWUF9NRF9DVFhfbmV3KCk7CisrCUVW UF9EaWdlc3RJbml0X2V4KGMsIG1kLCBOVUxMKTsKKysKKysJd2hpbGUgKGxlbmd0aCA+IDApIHsK KysJCWlmIChsZW5ndGggPiBIQVNIX0JVRkxFTikKKysJCQkvKiBmcmVhZCByZXR1cm5zIHRoZSBu dW1iZXIgb2YgZWxlbWVudHMgcmVhZC4KKysJCQkgKiBpbiB0aGlzIGNhc2UgMS4gTXVsdGlwbHkg YnkgdGhlIGxlbmd0aCB0byBnZXQgdGhlIGJ5dGVzICovCisrCQkJYnl0ZXM9ZnJlYWQoYnVmLCBI QVNIX0JVRkxFTiwgMSwgZmlsZV9wdHIpICogSEFTSF9CVUZMRU47CisrCQllbHNlCisrCQkJYnl0 ZXM9ZnJlYWQoYnVmLCBsZW5ndGgsIDEsIGZpbGVfcHRyKSAqIGxlbmd0aDsKKysJCUVWUF9EaWdl c3RVcGRhdGUoYywgYnVmLCBieXRlcyk7CisrCQlsZW5ndGggLT0gSEFTSF9CVUZMRU47CisrCX0K KysJRVZQX0RpZ2VzdEZpbmFsKGMsIG91dCwgJm1kX2xlbik7CisrCUVWUF9NRF9DVFhfZnJlZShj KTsKKysJLyogY29udmVydCB0aGUgaGFzaCBpbnRvIGEgc3RyaW5nICovCisrCWZvcihuPTA7IG4g PCBtZF9sZW47IG4rKykgeworKwkJc25wcmludGYodG1wLCAzLCAiJTAyeCIsIG91dFtuXSk7Cisr CQlzdHJuY2F0KG91dHB1dCwgdG1wLCAzKTsKKysJfQorKyNpZmRlZiBERUJVRworKwlmcHJpbnRm KHN0ZGVyciwgIiVzOiBIQVNIIElTICclcycgb2YgbGVuZ3RoICVsZFxuIiwgaG9zdG5hbWUsIG91 dHB1dCwgc3RybGVuKG91dHB1dCkpOworKyNlbmRpZgorKwlmY2xvc2UoZmlsZV9wdHIpOworK30K KysjZWxzZQorK3ZvaWQgY2FsY3VsYXRlX2hhc2goY2hhciAqZmlsZW5hbWUsIGNoYXIgKm91dHB1 dCwgb2ZmX3QgbGVuZ3RoKQorK3sKKysgIC8qIGVtcHR5IGZ1bmN0aW9uIGZvciBidWlsZHMgd2l0 aG91dCBvcGVuc3NsIG9yIGFyZSB1c2luZyBsaWJyZXNzbCAqLworK30KKysjZW5kaWYgLyogV0lU SF9PUEVOU1NMICovCisrCisrI2RlZmluZSBUWVBFX09WRVJGTE9XKHR5cGUsIHZhbCkgXAorKwko KHNpemVvZih0eXBlKSA9PSA0ICYmICh2YWwpID4gSU5UMzJfTUFYKSB8fCBcCisrCSAoc2l6ZW9m KHR5cGUpID09IDggJiYgKHZhbCkgPiBJTlQ2NF9NQVgpIHx8IFwKKysJIChzaXplb2YodHlwZSkg IT0gNCAmJiBzaXplb2YodHlwZSkgIT0gOCkpCisrCisgLyogUHJlcGFyZSByZW1vdGUgcGF0aCwg aGFuZGxpbmcgfiBieSBhc3N1bWluZyBjd2QgaXMgdGhlIGhvbWVkaXIgKi8KKyBzdGF0aWMgY2hh ciAqCisgcHJlcGFyZV9yZW1vdGVfcGF0aChzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBjb25zdCBj aGFyICpwYXRoKQorQEAgLTEzOTYsMTQgKzE1MjAsMjMgQEAKKyAJc3RydWN0IHN0YXQgc3RiOwor IAlzdGF0aWMgQlVGIGJ1ZmZlcjsKKyAJQlVGICpicDsKKy0Jb2ZmX3QgaSwgc3RhdGJ5dGVzOwor KwlvZmZfdCBpLCBzdGF0Ynl0ZXMsIHhmZXJfc2l6ZTsKKyAJc2l6ZV90IGFtdCwgbnI7CisgCWlu dCBmZCA9IC0xLCBoYWRlcnIsIGluZHg7CistCWNoYXIgKmxhc3QsICpuYW1lLCBidWZbUEFUSF9N QVggKyAxMjhdLCBlbmNuYW1lW1BBVEhfTUFYXTsKKysJY2hhciAqY3AsICpsYXN0LCAqbmFtZSwg YnVmW1BBVEhfTUFYICsgQlVGX0FORF9IQVNIXSwgZW5jbmFtZVtQQVRIX01BWF07CisgCWludCBs ZW47CisrCWNoYXIgaGFzaHN1bVtIQVNIX0xFTisxXSwgdGVzdF9oYXNoc3VtW0hBU0hfTEVOKzFd OworKwljaGFyIGluYnVmW1BBVEhfTUFYICsgQlVGX0FORF9IQVNIXTsKKysJc2l6ZV90IGluc2l6 ZTsKKysJdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKKysJY2hhciAqbWF0Y2g7IC8qIHVzZWQgdG8g Y29tbXVuaWNhdGUgZnJhZ21lbnQgbWF0Y2ggKi8KKysJbWF0Y2ggPSAiXDAiOyAvKmRlZmF1bHQg aXMgdG8gZmFpbCB0aGUgbWF0Y2guIE5VTEwgYW5kIEYgYm90aCBpbmRpY2F0ZSBmYWlsKi8KKyAK KyAJZm9yIChpbmR4ID0gMDsgaW5keCA8IGFyZ2M7ICsraW5keCkgeworIAkJbmFtZSA9IGFyZ3Zb aW5keF07CisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGluZGV4IGlzICVk LCBuYW1lIGlzICVzXG4iLCBob3N0bmFtZSwgaW5keCwgbmFtZSk7CisrI2VuZGlmCisgCQlzdGF0 Ynl0ZXMgPSAwOworIAkJbGVuID0gc3RybGVuKG5hbWUpOworIAkJd2hpbGUgKGxlbiA+IDEgJiYg bmFtZVtsZW4tMV0gPT0gJy8nKQorQEAgLTE0MjUsNiArMTU1OCwxNCBAQAorIAkJdW5zZXRfbm9u YmxvY2soZmQpOworIAkJc3dpdGNoIChzdGIuc3RfbW9kZSAmIFNfSUZNVCkgeworIAkJY2FzZSBT X0lGUkVHOgorKwkJCS8qIG9ubHkgY2FsY3VsYXRlIGhhc2ggaWYgd2UgYXJlIGluIHJlc3VtZSBt b2RlIGFuZCBhIGZpbGUqLworKwkJCWlmIChyZXN1bWVfZmxhZykgeworKwkJCQljYWxjdWxhdGVf aGFzaChuYW1lLCBoYXNoc3VtLCBzdGIuc3Rfc2l6ZSk7CisrI2lmZGVmIERFQlVHCisrCQkJCWZw cmludGYoc3RkZXJyLCAiJXM6IE5hbWUgaXMgJyVzJyBhbmQgaGFzaCAnJXMnXG4iLCBob3N0bmFt ZSwgbmFtZSwgaGFzaHN1bSk7CisrCQkJCWZwcmludGYgKHN0ZGVyciwiJXM6IHNpemUgb2YgJXMg aXMgJWxkXG4iLCBob3N0bmFtZSwgbmFtZSwgc3RiLnN0X3NpemUpOworKyNlbmRpZgorKwkJCX0K KyAJCQlicmVhazsKKyAJCWNhc2UgU19JRkRJUjoKKyAJCQlpZiAoaWFtcmVjdXJzaXZlKSB7CitA QCAtMTQ0NiwxNCArMTU4NywxMzMgQEAKKyAJCQkJZ290byBuZXh0OworIAkJfQorICNkZWZpbmUJ RklMRU1PREVNQVNLCShTX0lTVUlEfFNfSVNHSUR8U19JUldYVXxTX0lSV1hHfFNfSVJXWE8pCist CQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsICJDJTA0byAlbGxkICVzXG4iLAorLQkJICAgICh1 X2ludCkgKHN0Yi5zdF9tb2RlICYgRklMRU1PREVNQVNLKSwKKy0JCSAgICAobG9uZyBsb25nKXN0 Yi5zdF9zaXplLCBsYXN0KTsKKy0JCWlmICh2ZXJib3NlX21vZGUpCistCQkJZm1wcmludGYoc3Rk ZXJyLCAiU2VuZGluZyBmaWxlIG1vZGVzOiAlcyIsIGJ1Zik7CisrCQkvKiBBZGQgYSBoYXNoIG9m IHRoZSBmaWxlIGFsb25nIHdpdGggdGhlIGZpbGVtb2RlIGlmIGluIHJlc3VtZSAqLworKwkJaWYg KHJlc3VtZV9mbGFnKQorKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIkMlMDRvICVsbGQg JXMgJXNcbiIsCisrCQkJCSAodV9pbnQpIChzdGIuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCisr CQkJCSAobG9uZyBsb25nKXN0Yi5zdF9zaXplLCBoYXNoc3VtLCBsYXN0KTsKKysJCWVsc2UKKysJ CQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsICJDJTA0byAlbGxkICVzXG4iLAorKwkJCQkgKHVf aW50KSAoc3RiLnN0X21vZGUgJiBGSUxFTU9ERU1BU0spLAorKwkJCQkgKGxvbmcgbG9uZylzdGIu c3Rfc2l6ZSwgbGFzdCk7CisrCisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiBTZW5kaW5nIGZpbGUgbW9kZXM6ICVzIiwgaG9zdG5hbWUsIGJ1Zik7CisrI2VuZGlmCisgCQko dm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIGJ1Ziwgc3RybGVuKGJ1ZikpOworLQkJaWYg KHJlc3BvbnNlKCkgPCAwKQorKworKyNpZmRlZiBERUJVRworKwkJZnByaW50ZihzdGRlcnIsICIl czogaW5idWYgbGVuZ3RoICVsZCBidWYgbGVuZ3RoICVsZFxuIiwgaG9zdG5hbWUsIHN0cmxlbihp bmJ1ZiksIHN0cmxlbihidWYpKTsKKysjZW5kaWYKKysJCWlmIChyZXN1bWVfZmxhZykgeyAvKiBn ZXQgdGhlIGhhc2ggcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlICovCisrCQkJKHZvaWQpIGF0b21p Y2lvKHJlYWQsIHJlbWluLCBpbmJ1ZiwgQlVGX0FORF9IQVNIIC0gMSk7CisrI2lmZGVmIERFQlVH CisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHdlIGdvdCAnJXMnIGluIGluYnVmIGxlbmd0aCAl bGQgYnVmIHdhcyAlbGRcbiIsCisrCQkJCQlob3N0bmFtZSwgaW5idWYsIHN0cmxlbihpbmJ1Ziks IHN0cmxlbihidWYpKTsKKysjZW5kaWYKKysJCX0KKysJCWlmIChyZXNwb25zZSgpIDwgMCkgewor KyNpZmRlZiBERUJVRworKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHJlc3BvbnNlIGlzIGxlc3Mg dGhhbiAwXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisgCQkJZ290byBuZXh0OworKwkJfQorKwkJ eGZlcl9zaXplID0gc3RiLnN0X3NpemU7CisrCisrCQkvKiB3ZSBvbmx5IGRvIHRoZSBmb2xsb3dp bmcgaW4gcmVzdW1lIG1vZGUgYmVjYXVzZSB3ZSBoYXZlIGEKKysJCSAqIG5ldyBidWYgZnJvbSB0 aGUgcmVtb3RlIHRvIHBhcnNlICovCisrCQlpZiAocmVzdW1lX2ZsYWcpIHsKKysJCQljcCA9IGlu YnVmOworKwkJCWlmICgqY3AgPT0gJ1InKSB7IC8qIHJlc3VtZSBmaWxlIHRyYW5zZmVyKi8KKysJ CQkJY2hhciAqaW5faGFzaHN1bTsgLyogd2hlcmUgdG8gaG9sZCB0aGUgaW5jb21pbmcgaGFzaCAq LworKwkJCQlpbl9oYXNoc3VtID0gY2FsbG9jKEhBU0hfTEVOKzEsIHNpemVvZihjaGFyKSk7Cisr CQkJCWZvciAoKytjcDsgY3AgPCBpbmJ1ZiArIDU7IGNwKyspIHsKKysJCQkJCS8qIHNraXAgb3Zl ciB0aGUgbW9kZSAqLworKwkJCQl9CisrCQkJCWlmICgqY3ArKyAhPSAnICcpIHsKKysJCQkJCWZw cmludGYoc3RkZXJyLCAiJXM6IG1vZGUgbm90IGRlbGluZWF0ZWQhXG4iLCBob3N0bmFtZSk7Cisr CQkJCX0KKysKKysJCQkJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisrCQkJCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiBzaXplIG5vdCBwcmVzZW50XG4iLCBob3N0bmFtZSk7CisrCQkJ CXVsbCA9IHN0cnRvdWxsKGNwLCAmY3AsIDEwKTsKKysJCQkJaWYgKCFjcCB8fCAqY3ArKyAhPSAn ICcpCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzaXplIG5vdCBkZWxpbWl0ZWRcbiIsIGhv c3RuYW1lKTsKKysJCQkJaWYgKFRZUEVfT1ZFUkZMT1cob2ZmX3QsIHVsbCkpCisrCQkJCQlmcHJp bnRmKHN0ZGVyciwgIiVzOiBzaXplIG91dCBvZiByYW5nZVxuIiwgaG9zdG5hbWUpOworKwkJCQlp bnNpemUgPSAob2ZmX3QpdWxsOworKworKyNpZmRlZiBERUJVRworKwkJCQlmcHJpbnRmIChzdGRl cnIsICIlczogcmVjZWl2ZWQgc2l6ZSBvZiAlbGRcbiIsIGhvc3RuYW1lLCBpbnNpemUpOworKyNl bmRpZgorKworKwkJCQkvKiBjb3B5IHRoZSBjcCBwb2ludGVyIGJ5dGUgYnkgYnl0ZSAqLworKwkJ CQlpbnQgaTsKKysJCQkJZm9yIChpID0gMDsgaSA8IEhBU0hfTEVOOyBpKyspIHsKKysJCQkJCXN0 cm5jYXQoaW5faGFzaHN1bSwgY3ArKywgMSk7CisrCQkJCX0KKysjaWZkZWYgREVCVUcKKysJCQkJ ZnByaW50ZiAoc3RkZXJyLCAiJXM6IGluX2hhc2hzdW0gJyVzJ1xuIiwgaG9zdG5hbWUsIGluX2hh c2hzdW0pOworKyNlbmRpZgorKworKwkJCQkvKmdldCB0aGUgaGFzaCBvZiB0aGUgc291cmNlIGZp bGUgdG8gdGhlIGJ5dGUgbGVuZ3RoIHdlIGp1c3QgZ290Ki8KKysJCQkJY2FsY3VsYXRlX2hhc2go bmFtZSwgdGVzdF9oYXNoc3VtLCBpbnNpemUpOworKyNpZmRlZiBERUJVRworKwkJCQlmcHJpbnRm KHN0ZGVyciwgIiVzOiBjYWxjdWxhdGVkIGhhc2hzdW0gb2YgbG9jYWwgJXMgdG8gJWxkIGlzICVz XG4iLAorKwkJCQkJaG9zdG5hbWUsIGxhc3QsIGluc2l6ZSwgdGVzdF9oYXNoc3VtKTsKKysjZW5k aWYKKysJCQkJLyogY29tcGFyZSB0aGUgaW5jb21pbmcgaGFzaCB0byB0aGUgaGFzaCBvZiB0aGUg bG9jYWwgZmlsZSovCisrCQkJCWlmIChzdHJjbXAoaW5faGFzaHN1bSwgdGVzdF9oYXNoc3VtKSA9 PSAwKSB7CisrCQkJCQkvKiB0aGUgZnJhZ21lbnRzIG1hdGNoIHNvIHdlIHNob3VsZCBzZWVrIHRv IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUKKysJCQkJCSAqIGxvY2FsIGZpbGUgYW5kIHNl dCB0aGUgcmVtb3RlIGZpbGUgdG8gYXBwZW5kICovCisrI2lmZGVmIERFQlVHCisrCQkJCQlmcHJp bnRmKHN0ZGVyciwgIiVzOiBGaWxlIGZyYWdtZW50cyBtYXRjaFxuIiwgaG9zdG5hbWUpOworKwkJ CQkJZnByaW50ZihzdGRlcnIsICIlczogc2Vla2luZyB0byAlbGRcbiIsIGhvc3RuYW1lLCBpbnNp emUpOworKyNlbmRpZgorKwkJCQkJeGZlcl9zaXplID0gc3RiLnN0X3NpemUgLSBpbnNpemU7Cisr I2lmZGVmIERFQlVHCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB4ZmVyX3NpemU6ICVsZCwg c3RiLnN0X3NpemU6ICVsZCBpbnNpemU6ICVsZFxuIiwKKysJCQkJCQlob3N0bmFtZSwgeGZlcl9z aXplLCBzdGIuc3Rfc2l6ZSwgaW5zaXplKTsKKysjZW5kaWYKKysJCQkJCWlmIChsc2VlayhmZCwg aW5zaXplLCBTRUVLX0NVUikgIT0gKG9mZl90KWluc2l6ZSkgeworKyNpZmRlZiBERUJVRworKwkJ CQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGxzZWVrIGRpZCBub3QgcmV0dXJuICVsZFxuIiwgaG9z dG5hbWUsIGluc2l6ZSkgOworKyNlbmRpZgorKwkJCQkJCWdvdG8gbmV4dDsKKysJCQkJCX0KKysJ CQkJCW1hdGNoID0gIk0iOworKwkJCQl9IGVsc2UgeworKwkJCQkJLyogdGhlIGZyYWdtZW50cyBk b24ndCBtYXRjaCBzbyB3ZSBzaG91bGQgc3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbmluZyAqLwor KyNpZmRlZiBERUJVRworKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogRmlsZSBmcmFnbWVudHMg ZG8gbm90IG1hdGNoICclcycoaW4pICclcycobG9jYWwpXG4iLAorKwkJCQkgICAgICAgCQlob3N0 bmFtZSwgaW5faGFzaHN1bSwgdGVzdF9oYXNoc3VtKTsKKysjZW5kaWYKKysJCQkJCW1hdGNoID0g IkYiOworKwkJCQkJeGZlcl9zaXplID0gc3RiLnN0X3NpemU7CisrCQkJCX0KKysJCQkJZnJlZShp bl9oYXNoc3VtKTsKKysJCQl9CisrCQkJaWYgKCpjcCA9PSAnUycpIHsgLyogc2tpcCBmaWxlICov CisrI2lmZGVmIERFQlVHCisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IFNob3VsZCBiZSBza2lw cGluZyB0aGlzIGZpbGVcbiIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQkJZ290byBuZXh0Owor KwkJCX0KKysJCQlpZiAoKmNwID09ICdDJykgeyAvKnRyYW5zZmVyIGVudGlyZSBmaWxlKi8KKysj aWZkZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogUmVzZW5kaW5nIGVudGlyZSBm aWxlXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisrCQkJCXhmZXJfc2l6ZSA9IHN0Yi5zdF9zaXpl OworKwkJCX0KKysJCQkvKiBuZWVkIHRvIHNlbmQgdGhlIG1hdGNoIHN0YXR1cworKwkJCSAqIFdl IGFsd2F5cyBzZW5kIHRoZSBtYXRjaCBzdGF0dXMgb3Igd2UgZ2V0IG91dCBvZiBzeW5jCisrCQkJ ICovCisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZihzdGRlcnIsICIlczogc2VuZGluZyBtYXRj aCAlc1xuIiwgaG9zdG5hbWUsIG1hdGNoKTsKKysjZW5kaWYKKysJCQkodm9pZCkgYXRvbWljaW8o dndyaXRlLCByZW1vdXQsIG1hdGNoLCAxKTsKKysJCX0KKysKKyAJCWlmICgoYnAgPSBhbGxvY2J1 ZigmYnVmZmVyLCBmZCwgQ09QWV9CVUZMRU4pKSA9PSBOVUxMKSB7CisgbmV4dDoJCQlpZiAoZmQg IT0gLTEpIHsKKyAJCQkJKHZvaWQpIGNsb3NlKGZkKTsKK0BAIC0xNDYxLDEzICsxNzIxLDE3IEBA CisgCQkJfQorIAkJCWNvbnRpbnVlOworIAkJfQorKworKyNpZmRlZiBERUJVRworKwkJZnByaW50 ZihzdGRlcnIsICIlczogZ29pbmcgdG8geGZlciAlbGRcbiIsIGhvc3RuYW1lLCB4ZmVyX3NpemUp OworKyNlbmRpZgorIAkJaWYgKHNob3dwcm9ncmVzcykKKy0JCQlzdGFydF9wcm9ncmVzc19tZXRl cihjdXJmaWxlLCBzdGIuc3Rfc2l6ZSwgJnN0YXRieXRlcyk7CisrCQkJc3RhcnRfcHJvZ3Jlc3Nf bWV0ZXIoY3VyZmlsZSwgeGZlcl9zaXplLCAmc3RhdGJ5dGVzKTsKKyAJCXNldF9ub25ibG9jayhy ZW1vdXQpOworLQkJZm9yIChoYWRlcnIgPSBpID0gMDsgaSA8IHN0Yi5zdF9zaXplOyBpICs9IGJw LT5jbnQpIHsKKysJCWZvciAoaGFkZXJyID0gaSA9IDA7IGkgPCB4ZmVyX3NpemU7IGkgKz0gYnAt PmNudCkgeworIAkJCWFtdCA9IGJwLT5jbnQ7CistCQkJaWYgKGkgKyAob2ZmX3QpYW10ID4gc3Ri LnN0X3NpemUpCistCQkJCWFtdCA9IHN0Yi5zdF9zaXplIC0gaTsKKysJCQlpZiAoaSArIChvZmZf dClhbXQgPiB4ZmVyX3NpemUpCisrCQkJCWFtdCA9IHhmZXJfc2l6ZSAtIGk7CisgCQkJaWYgKCFo YWRlcnIpIHsKKyAJCQkJaWYgKChuciA9IGF0b21pY2lvKHJlYWQsIGZkLAorIAkJCQkgICAgYnAt PmJ1ZiwgYW10KSkgIT0gYW10KSB7CitAQCAtMTY2OCwyNCArMTkzMiwzNiBAQAorIHNpbmsoaW50 IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpzcmMpCisgeworIAlzdGF0aWMgQlVGIGJ1 ZmZlcjsKKy0Jc3RydWN0IHN0YXQgc3RiOworKwlzdHJ1Y3Qgc3RhdCBzdGIsIGNwc3RhdCwgbnBz dGF0OworIAlCVUYgKmJwOworIAlvZmZfdCBpOworIAlzaXplX3QgaiwgY291bnQ7CisgCWludCBh bXQsIGV4aXN0cywgZmlyc3QsIG9mZDsKKyAJbW9kZV90IG1vZGUsIG9tb2RlLCBtYXNrOworLQlv ZmZfdCBzaXplLCBzdGF0Ynl0ZXM7CisrCW9mZl90IHNpemUsIHN0YXRieXRlcywgeGZlcl9zaXpl OworIAl1bnNpZ25lZCBsb25nIGxvbmcgdWxsOworIAlpbnQgc2V0aW1lcywgdGFyZ2lzZGlyLCB3 cmVycjsKKy0JY2hhciBjaCwgKmNwLCAqbnAsICp0YXJnLCAqd2h5LCAqdmVjdFsxXSwgYnVmWzIw NDhdLCB2aXNidWZbMjA0OF07CisrCWNoYXIgY2gsICpjcCwgKm5wLCAqbnBfdG1wLCAqdGFyZywg KndoeSwgKnZlY3RbMV0sIGJ1ZlsxNjM4NF0sIHZpc2J1ZlsxNjM4NF07CisgCWNoYXIgKipwYXR0 ZXJucyA9IE5VTEw7CisgCXNpemVfdCBuLCBucGF0dGVybnMgPSAwOworIAlzdHJ1Y3QgdGltZXZh bCB0dlsyXTsKKysJY2hhciByZW1vdGVfaGFzaHN1bVtIQVNIX0xFTisxXTsKKysJY2hhciBsb2Nh bF9oYXNoc3VtW0hBU0hfTEVOKzFdOworKwljaGFyIHRtcGJ1ZltCVUZfQU5EX0hBU0hdOworKwlj aGFyIG91dGJ1ZltCVUZfQU5EX0hBU0hdOworKwljaGFyIG1hdGNoOworKwlpbnQgYmFkX21hdGNo X2ZsYWcgPSAwOworKwlucCA9IE5VTEw7IC8qIHRoaXMgd2FzIG9yaWdpbmFsbHkgJy8wJyBidXQg dGhhdCdzIHdyb25nICovCisrCW5wX3RtcCA9IE5VTEw7CisrCisgCisgI2RlZmluZQlhdGltZQl0 dlswXQorICNkZWZpbmUJbXRpbWUJdHZbMV0KKyAjZGVmaW5lCVNDUkVXVVAoc3RyKQl7IHdoeSA9 IHN0cjsgZ290byBzY3Jld3VwOyB9CisgCisrI2lmZGVmIERFQlVHCisrICAgICAgIGZwcmludGYg KHN0ZGVyciwgIiVzOiBMT0NBTCBJbiBzaW5rIHdpdGggJXNcbiIsIGhvc3RuYW1lLCBzcmMpOwor KyNlbmRpZgorIAlpZiAoVFlQRV9PVkVSRkxPVyh0aW1lX3QsIDApIHx8IFRZUEVfT1ZFUkZMT1co b2ZmX3QsIDApKQorIAkJU0NSRVdVUCgiVW5leHBlY3RlZCBvZmZfdC90aW1lX3Qgc2l6ZSIpOwor IAorQEAgLTE3MDMsOSArMTk3OSwxNiBAQAorIAlpZiAodGFyZ2V0c2hvdWxkYmVkaXJlY3Rvcnkp CisgCQl2ZXJpZnlkaXIodGFyZyk7CisgCisrI2lmZGVmIERFQlVHCisrCWZwcmludGYgKHN0ZGVy ciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIixob3N0bmFtZSk7CisrI2VuZGlmCisg CSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworIAlpZiAoc3RhdCh0YXJn LCAmc3RiKSA9PSAwICYmIFNfSVNESVIoc3RiLnN0X21vZGUpKQorIAkJdGFyZ2lzZGlyID0gMTsK KysKKysjaWZkZWYgREVCVUcKKysJZnByaW50ZihzdGRlcnIsICIlczogVGFyZ2V0IGlzICVzIHdp dGggYSBzaXplIG9mICVsZFxuIiwgaG9zdG5hbWUsIHRhcmcsIHN0Yi5zdF9zaXplKTsKKysjZW5k aWYKKyAJaWYgKHNyYyAhPSBOVUxMICYmICFpYW1yZWN1cnNpdmUgJiYgIVRmbGFnKSB7CisgCQkv KgorIAkJICogUHJlcGFyZSB0byB0cnkgdG8gcmVzdHJpY3QgaW5jb21pbmcgZmlsZW5hbWVzIHRv IG1hdGNoCitAQCAtMTcxNCw3ICsxOTk3LDEyIEBACisgCQlpZiAoYnJhY2VfZXhwYW5kKHNyYywg JnBhdHRlcm5zLCAmbnBhdHRlcm5zKSAhPSAwKQorIAkJCWZhdGFsX2YoImNvdWxkIG5vdCBleHBh bmQgcGF0dGVybiIpOworIAl9CisrCisgCWZvciAoZmlyc3QgPSAxOzsgZmlyc3QgPSAwKSB7Cisr CQliYWRfbWF0Y2hfZmxhZyA9IDA7IC8qIHVzZWQgaW4gcmVzdW1lIG1vZGUuICovCisrI2lmZGVm IERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBBdCBzdGFydCBvZiBsb29wIGJ1ZiBpcyAl c1xuIiwgaG9zdG5hbWUsIGJ1Zik7CisrI2VuZGlmCisgCQljcCA9IGJ1ZjsKKyAJCWlmIChhdG9t aWNpbyhyZWFkLCByZW1pbiwgY3AsIDEpICE9IDEpCisgCQkJZ290byBkb25lOworQEAgLTE3NDIs NiArMjAzMCw5IEBACisgCQkJY29udGludWU7CisgCQl9CisgCQlpZiAoYnVmWzBdID09ICdFJykg eworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwg dG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOworKyNlbmRpZgorIAkJCSh2b2lkKSBhdG9taWNpbyh2 d3JpdGUsIHJlbW91dCwgIiIsIDEpOworIAkJCWdvdG8gZG9uZTsKKyAJCX0KK0BAIC0xNzQ5LDYg KzIwNDAsOSBAQAorIAkJCSotLWNwID0gMDsKKyAKKyAJCWNwID0gYnVmOworKyNpZmRlZiBERUJV RworKwkJZnByaW50ZihzdGRlcnIsICIlczogYnVmIGlzICVzXG4iLCBob3N0bmFtZSwgYnVmKTsK KysjZW5kaWYKKyAJCWlmICgqY3AgPT0gJ1QnKSB7CisgCQkJc2V0aW1lcysrOworIAkJCWNwKys7 CitAQCAtMTc3Niw5ICsyMDcwLDE5IEBACisgCQkJaWYgKCFjcCB8fCAqY3ArKyAhPSAnXDAnIHx8 IGF0aW1lLnR2X3VzZWMgPCAwIHx8CisgCQkJICAgIGF0aW1lLnR2X3VzZWMgPiA5OTk5OTkpCisg CQkJCVNDUkVXVVAoImF0aW1lLnVzZWMgbm90IGRlbGltaXRlZCIpOworKworKyNpZmRlZiBERUJV RworKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIiwg aG9zdG5hbWUpOworKyNlbmRpZgorIAkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwg IiIsIDEpOworIAkJCWNvbnRpbnVlOworIAkJfQorKwkJaWYgKCpjcCA9PSAnUicpIHsgLypyZXN1 bWUgZmlsZSB0cmFuc2ZlciAoZG9udCcgdGhpbmsgSSBuZWVkIHRoaXMgaGVyZSkqLworKyNpZmRl ZiBERUJVRworKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IFJlY2VpdmVkIGEgUkVTVU1FIHJlcXVl c3Qgd2l0aCAlc1xuIiwgaG9zdG5hbWUsIGNwKTsKKysjZW5kaWYKKysJCQlyZXN1bWVfZmxhZyA9 IDE7CisrCQl9CisgCQlpZiAoKmNwICE9ICdDJyAmJiAqY3AgIT0gJ0QnKSB7CisgCQkJLyoKKyAJ CQkgKiBDaGVjayBmb3IgdGhlIGNhc2UgInJjcCByZW1vdGU6Zm9vXCogbG9jYWw6YmFyIi4KK0BA IC0xNzk0LDYgKzIwOTgsMTggQEAKKyAJCQlTQ1JFV1VQKCJleHBlY3RlZCBjb250cm9sIHJlY29y ZCIpOworIAkJfQorIAkJbW9kZSA9IDA7CisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiBidWYgaXMgJXNcbiIsIGhvc3RuYW1lLCBidWYpOworKwkJZnByaW50ZihzdGRlcnIs ICIlczogY3AgaXMgJXNcbiIsIGhvc3RuYW1lLCBjcCk7CisrI2VuZGlmCisrCQkvKiB3ZSBuZWVk IHRvIHRyYWNrIGlmIHRoaXMgb2JqZWN0IGlzIGEgZGlyZWN0b3J5CisrCQkgKiBiZWZvcmUgd2Ug bW92ZSB0aGUgcG9pbnRlci4gSWYgd2UgYXJlIGluIHJlc3VtZSBtb2RlCisrCQkgKiB3ZSBtaWdo dCBlbmQgdXAgdHJ5aW5nIHRvIGdldCBhbiBtZHN1bSBvbiBhIGRpcmVjdG9yeQorKwkJICogYW5k IHRoYXQgZG9lc24ndCB3b3JrICovCisrCQlpbnQgZGlyX2ZsYWcgPSAwOworKwkJaWYgKCpjcCA9 PSAnRCcpCisrCQkJZGlyX2ZsYWcgPSAxOworKworIAkJZm9yICgrK2NwOyBjcCA8IGJ1ZiArIDU7 IGNwKyspIHsKKyAJCQlpZiAoKmNwIDwgJzAnIHx8ICpjcCA+ICc3JykKKyAJCQkJU0NSRVdVUCgi YmFkIG1vZGUiKTsKK0BAIC0xODA0LDYgKzIxMjAsMTAgQEAKKyAJCWlmICgqY3ArKyAhPSAnICcp CisgCQkJU0NSRVdVUCgibW9kZSBub3QgZGVsaW1pdGVkIik7CisgCisrI2lmZGVmIERFQlVHCisr CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjcCBpcyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsKKysjZW5k aWYKKysKKyAJCWlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorIAkJCVNDUkVXVVAo InNpemUgbm90IHByZXNlbnQiKTsKKyAJCXVsbCA9IHN0cnRvdWxsKGNwLCAmY3AsIDEwKTsKK0BA IC0xODEzLDExICsyMTMzLDMyIEBACisgCQkJU0NSRVdVUCgic2l6ZSBvdXQgb2YgcmFuZ2UiKTsK KyAJCXNpemUgPSAob2ZmX3QpdWxsOworIAorKyNpZmRlZiBERUJVRworKwkJZnByaW50ZihzdGRl cnIsICIlczogY3AgaXMgJXNcbiIsIGhvc3RuYW1lLCBjcCk7CisrI2VuZGlmCisrCQlpZiAocmVz dW1lX2ZsYWcgJiYgIWRpcl9mbGFnKSB7CisrCQkJKnJlbW90ZV9oYXNoc3VtID0gJ1wwJzsKKysJ CQlpbnQgaTsKKysJCQlmb3IgKGkgPSAwOyBpIDwgSEFTSF9MRU47IGkrKykgeworKwkJCQlzdHJu Y2F0IChyZW1vdGVfaGFzaHN1bSwgY3ArKywgMSk7CisrCQkJfQorKyNpZmRlZiBERUJVRworKwkJ CWZwcmludGYgKHN0ZGVyciwgIiVzOiAnJXMnXG4iLCBob3N0bmFtZSwgcmVtb3RlX2hhc2hzdW0p OworKyNlbmRpZgorKwkJCWlmICghY3AgfHwgKmNwKysgIT0gJyAnKQorKwkJCQlTQ1JFV1VQKCJo YXNoIG5vdCBkZWxpbWl0ZWQiKTsKKysJCX0KKysjaWZkZWYgREVCVUcKKysJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3ApOworKyNlbmRpZgorIAkJaWYgKCpj cCA9PSAnXDAnIHx8IHN0cmNocihjcCwgJy8nKSAhPSBOVUxMIHx8CisgCQkgICAgc3RyY21wKGNw LCAiLiIpID09IDAgfHwgc3RyY21wKGNwLCAiLi4iKSA9PSAwKSB7CisgCQkJcnVuX2VycigiZXJy b3I6IHVuZXhwZWN0ZWQgZmlsZW5hbWU6ICVzIiwgY3ApOworIAkJCWV4aXQoMSk7CisgCQl9Cisr I2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGNwIGlzICVzXG4iLCBob3N0bmFt ZSwgY3ApOworKyNlbmRpZgorIAkJaWYgKG5wYXR0ZXJucyA+IDApIHsKKyAJCQlmb3IgKG4gPSAw OyBuIDwgbnBhdHRlcm5zOyBuKyspIHsKKyAJCQkJaWYgKHN0cmNtcChwYXR0ZXJuc1tuXSwgY3Ap ID09IDAgfHwKK0BAIC0xODg3LDExICsyMjI4LDE5NSBAQAorIAkJfQorIAkJb21vZGUgPSBtb2Rl OworIAkJbW9kZSB8PSBTX0lXVVNSOworKwkJc3RhdChjcCwgJmNwc3RhdCk7CisrCQl4ZmVyX3Np emUgPSBzaXplOworKwkJaWYgKHJlc3VtZV9mbGFnKSB7CisrI2lmZGVmIERFQlVHCisrCQkJZnBy aW50ZihzdGRlcnIsICIlczogbnAgaXMgJXNcbiIsIGhvc3RuYW1lLCBucCk7CisrI2VuZGlmCisr CQkJLyogZG9lcyB0aGUgZmlsZSBleGlzdCBhbmQgaWYgaXQgZG9lcyBpdCB3cml0YWJsZT8gKi8K KysJCQlpZiAoc3RhdChucCwgJm5wc3RhdCkgPT0gLTEpIHsKKysjaWZkZWYgREVCVUcKKysJCQkJ ZnByaW50ZihzdGRlcnIsICIlcyBMb2NhbCBmaWxlIGRvZXMgbm90IGV4aXN0IHNpemUgaXMgJWxk IVxuIiwKKysJCQkJCWhvc3RuYW1lLCBucHN0YXQuc3Rfc2l6ZSk7CisrI2VuZGlmCisrCQkJCW5w c3RhdC5zdF9zaXplID0gMDsKKysJCQl9IGVsc2UgeworKwkJCQkvKiBjaGVjayB0byBzZWUgaWYg dGhlIGZpbGUgaXMgd3JpdGVhYmxlCisrCQkJCSAqIGlmIGl0IGlzbid0IHRoZW4gd2UgbmVlZCB0 byBza2lwIGl0IGJ1dAorKwkJCQkgKiBiZWZvcmUgd2Ugc2tpcCBpdCB3ZSBuZWVkIHRvIHNlbmQg dGhlIHJlbW90ZQorKwkJCQkgKiB3aGF0IHRoZXkgYXJlIGV4cGVjdGluZyBzbyBCVUZfQU5EX0hB U0ggYnl0ZXMgYW5kIHRoZW4KKysJCQkJICogYSBudWxsLgorKwkJCQkgKiBOT1RFISEhIFRoZSBm b3JtYXQgaW4gdGhlIHNucHJpbnRmIG5lZWRzIHRoZSBhY3R1YWwgbnVtZXJpYworKwkJCQkgKiBi ZWNhdXNlIHVzaW5nIGEgZGVmaW5lIGlzbid0IHdvcmtpbmcgKi8KKysJCQkJaWYgKGFjY2VzcyAo bnAsIFdfT0spICE9IDApIHsKKysJCQkJCWZwcmludGYoc3RkZXJyLCAic2NwOiAlczogUGVybWlz c2lvbiBkZW5pZWQgb24gJXNcbiIsIG5wLCBob3N0bmFtZSk7CisrCQkJCQlzbnByaW50ZihvdXRi dWYsIEJVRl9BTkRfSEFTSCwgIlMlLSpzIiwgQlVGX0FORF9IQVNILTIsICIgIik7CisrCQkJCQko dm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgb3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7Cisr CQkJCQkodm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworKwkJCQkJY29udGlu dWU7CisrCQkJCX0KKysJCQl9CisrCQkJLyogdGhpcyBmaWxlIGlzIGFscmVhZHkgaGVyZSBkbyB3 ZSBuZWVkIHRvIG1vdmUgaXQ/CisrCQkJICogQ2hlY2sgdG8gbWFrZSBzdXJlIG5wc3RhdC5zdF9z aXplID4gMC4gSWYgaXQgaXMgMCB0aGVuIHdlCisrCQkJICogbWF5IHRyeWluZyB0byBiZSBtb3Zp bmcgYSB6ZXJvIGJ5dGUgZmlsZSBpbiB3aGljaCBjYXNlIHRoaXMKKysJCQkgKiBmb2xsb3dpbmcg YmxvY2sgZmFpbHMuIFNlZSBvbiAwIGJ5dGUgZmlsZXMgdGhlIGhhc2hlcyB3aWxsCisrCQkJICog YWx3YXlzIG1hdGNoIGFuZCB0aGUgZmlsZSB3b24ndCBiZSBjcmVhdGVkIGV2ZW4gdGhvdWdoIGl0 IHNob3VsZAorKwkJCSAqLworKwkJCWlmICh4ZmVyX3NpemUgPT0gbnBzdGF0LnN0X3NpemUgJiYg KG5wc3RhdC5zdF9zaXplID4gMCkpIHsKKysJCQkJY2FsY3VsYXRlX2hhc2gobnAsIGxvY2FsX2hh c2hzdW0sIG5wc3RhdC5zdF9zaXplKTsKKysJCQkJaWYgKHN0cmNtcChsb2NhbF9oYXNoc3VtLHJl bW90ZV9oYXNoc3VtKSA9PSAwKSB7CisrCQkJCQkvKiB3ZSBjYW4gc2tpcCB0aGlzIGZpbGUgaWYg d2Ugd2FudCB0by4gKi8KKysjaWZkZWYgREVCVUcKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IEZpbGVzIGFyZSB0aGUgc2FtZVxuIiwgaG9zdG5hbWUpOworKyNlbmRpZgorKwkJCQkJLyogdGhl IHJlbW90ZSBpcyBleHBlY3Rpbmcgc29tZXRoaW5nIHNvIHdlIG5lZWQgdG8gc2VuZCB0aGVtIHNv bWV0aGluZyovCisrCQkJCQlzbnByaW50ZihvdXRidWYsIEJVRl9BTkRfSEFTSCwgIlMlLSpzIiwg QlVGX0FORF9IQVNILTIsICIgIik7CisrCQkJCQkodm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91 dCwgb3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7CisrI2lmZGVmIERFQlVHCisrCQkJCQlmcHJpbnRm KHN0ZGVyciwiJXM6IHNlbnQgJyVzJyB0byByZW1vdGVcbiIsIGhvc3RuYW1lLCBvdXRidWYpOwor KyNlbmRpZgorKwkJCQkJLyogdGhlIHJlbW90ZSBpcyB3YWl0aW5nIG9uIGFuIGFjayBzbyBzZW5k IGEgbnVsbCAqLworKwkJCQkJKHZvaWQpYXRvbWljaW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsK KysJCQkJCWlmIChzaG93cHJvZ3Jlc3MpCisrCQkJCQkJZnByaW50ZiAoc3RkZXJyLCAiU2tpcHBp bmcgaWRlbnRpY2FsIGZpbGU6ICVzXG4iLCBucCk7CisrCQkJCQljb250aW51ZTsKKysJCQkJfSBl bHNlIHsKKysJCQkJCS8qIGZpbGUgc2l6ZXMgYXJlIHRoZSBzYW1lIGJ1dCB0aGV5IGRvbid0IG1h dGNoICovCisrI2lmZGVmIERFQlVHCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB0YXJnZXQo JWxkKSBpcyBkaWZmZXJlbnQgdGhhbiBzb3VyY2UoJWxkKSFcbiIsCisrCQkJCQkJaG9zdG5hbWUs IG5wc3RhdC5zdF9zaXplLCBzaXplKTsKKysjZW5kaWYKKysJCQkJCXNucHJpbnRmKHRtcGJ1Ziwg c2l6ZW9mIG91dGJ1ZiwgIkMlMDRvICVsbGQgJXMiLAorKwkJCQkJCSAodV9pbnQpIChucHN0YXQu c3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCisrCQkJCQkJIChsb25nIGxvbmcpbnBzdGF0LnN0X3Np emUsIGxvY2FsX2hhc2hzdW0pOworKwkJCQkJc25wcmludGYob3V0YnVmLCBCVUZfQU5EX0hBU0gs ICIlLSpzIiwgQlVGX0FORF9IQVNILTEsIHRtcGJ1Zik7CisrCQkJCQkodm9pZCkgYXRvbWljaW8o dndyaXRlLCByZW1vdXQsIG91dGJ1Ziwgc3RybGVuKG91dGJ1ZikpOworKwkJCQkJYmFkX21hdGNo X2ZsYWcgPSAxOworKwkJCQl9CisrCQkJfQorKwkJCS8qIGlmIG5wc3RhdC5zdF9zaXplIGlzIDAg dGhlbiB0aGUgbG9jYWwgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZAorKwkJCSAqIHdlIGhhdmUgdG8g bW92ZSBpdC4gU2luY2Ugd2UgYXJlIGluIHJlc3VtZSBtb2RlIHRyZWF0IGl0IGFzIGEgcmVzdW1l ICovCisrCQkJaWYgKG5wc3RhdC5zdF9zaXplIDwgeGZlcl9zaXplIHx8IChucHN0YXQuc3Rfc2l6 ZSA9PSAwKSkgeworKwkJCQljaGFyIHJhbmRfc3RyaW5nWzldOworKyNpZmRlZiBERUJVRworKwkJ CQlmcHJpbnRmIChzdGRlcnIsICIlczogJXMgaXMgc21hbGxlciB0aGFuICVzXG4iLCBob3N0bmFt ZSwgbnAsIGNwKTsKKysjZW5kaWYKKysJCQkJY2FsY3VsYXRlX2hhc2gobnAsIGxvY2FsX2hhc2hz dW0sIG5wc3RhdC5zdF9zaXplKTsKKysjZGVmaW5lCUZJTEVNT0RFTUFTSwkoU19JU1VJRHxTX0lT R0lEfFNfSVJXWFV8U19JUldYR3xTX0lSV1hPKQorKwkJCQlzbnByaW50Zih0bXBidWYsIHNpemVv ZiBvdXRidWYsICJSJTA0byAlbGxkICVzIiwKKysJCQkJCSAodV9pbnQpIChucHN0YXQuc3RfbW9k ZSAmIEZJTEVNT0RFTUFTSyksCisrCQkJCQkgKGxvbmcgbG9uZylucHN0YXQuc3Rfc2l6ZSwgbG9j YWxfaGFzaHN1bSk7CisrCQkJCXNucHJpbnRmKG91dGJ1ZiwgQlVGX0FORF9IQVNILCAiJS0qcyIs IEJVRl9BTkRfSEFTSC0xLCB0bXBidWYpOworKyNpZmRlZiBERUJVRworKwkJCQlmcHJpbnRmIChz dGRlcnIsICIlczogbmV3IGJ1ZiBpcyAlcyBvZiBsZW5ndGggJWxkXG4iLAorKwkJCQkJIGhvc3Ru YW1lLCBvdXRidWYsIHN0cmxlbihvdXRidWYpKTsKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczog U2VuZGluZyBuZXcgZmlsZSAoJXMpIG1vZGVzOiAlc1xuIiwKKysJCQkJCWhvc3RuYW1lLCBucCwg b3V0YnVmKTsKKysjZW5kaWYKKysJCQkJLypub3cgd2UgaGF2ZSB0byBzZW5kIG5wJ3MgbGVuZ3Ro IGFuZCBoYXNoIHRvIHRoZSBvdGhlciBlbmQKKysJCQkJICogaWYgdGhlIGNvbXB1dGVkIGhhc2hl cyBtYXRjaCB0aGVuIHdlIHNlZWsgdG8gbnAncyBsZW5ndGggaW4KKysJCQkJICogZmlsZSBhbmQg YXBwZW5kIHRvIG5wIHN0YXJ0aW5nIGZyb20gdGhlcmUgKi8KKysJCQkJKHZvaWQpIGF0b21pY2lv KHZ3cml0ZSwgcmVtb3V0LCBvdXRidWYsIHN0cmxlbihvdXRidWYpKTsKKysjaWZkZWYgREVCVUcK KysJCQkJZnByaW50ZihzdGRlcnIsICIlczogTmV3IHNpemU6ICVsZCwgc2l6ZTogJWxkLCBzdF9z aXplOiAlbGRcbiIsCisrCQkJCQlob3N0bmFtZSwgc2l6ZSAtIG5wc3RhdC5zdF9zaXplLCBzaXpl LCBucHN0YXQuc3Rfc2l6ZSk7CisrI2VuZGlmCisrCQkJCXhmZXJfc2l6ZSA9IHNpemUgLSBucHN0 YXQuc3Rfc2l6ZTsKKysJCQkJcmVzdW1lX2ZsYWcgPSAxOworKwkJCQlucF90bXAgPSB4c3RyZHVw KG5wKTsKKysJCQkJLyogV2Ugc2hvdWxkIGhhdmUgYSByYW5kb20gY29tcG9uZW50IHRvIGF2b2lk IGNsb2JiZXJpbmcgYQorKwkJCQkgKiBsb2NhbCBmaWxlICovCisrCQkJCXJhbmRfc3RyKHJhbmRf c3RyaW5nLCA4KTsKKysJCQkJc3RyY2F0KG5wLCByYW5kX3N0cmluZyk7CisrI2lmZGVmIERFQlVH CisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IFdpbGwgY29uY2F0ICVzIHRvICVzIGFmdGVyIHhm ZXJcbiIsCisrCQkJCQlob3N0bmFtZSwgbnAsIG5wX3RtcCk7CisrI2VuZGlmCisrCQkJfSBlbHNl IGlmIChucHN0YXQuc3Rfc2l6ZSA+IHNpemUpIHsKKysJCQkvKiB0aGUgdGFyZ2V0IGZpbGUgaXMg bGFyZ2VyIHRoYW4gdGhlIHNvdXJjZS4KKysJCQkgKiBzbyB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSBp dC4gV2UgZG9uJ3QgbmVlZCB0byBzZW5kIHRoZSBoYXNoIHRob3VnaC4gKi8KKysjaWZkZWYgREVC VUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogdGFyZ2V0KCVsZCkgaXMgbGFyZ2VyIHRoYW4g c291cmNlKCVsZCkhXG4iLAorKwkJCQkJaG9zdG5hbWUsIG5wc3RhdC5zdF9zaXplLCBzaXplKTsK KysjZW5kaWYKKysJCQkJc25wcmludGYodG1wYnVmLCBzaXplb2Ygb3V0YnVmLCAiQyUwNG8gJWxs ZCIsCisrCQkJCQkgKHVfaW50KSAobnBzdGF0LnN0X21vZGUgJiBGSUxFTU9ERU1BU0spLAorKwkJ CQkJIChsb25nIGxvbmcpbnBzdGF0LnN0X3NpemUpOworKwkJCQlzbnByaW50ZihvdXRidWYsIEJV Rl9BTkRfSEFTSCwgIiUtKnMiLCBCVUZfQU5EX0hBU0gtMSwgdG1wYnVmKTsKKysJCQkJKHZvaWQp IGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBvdXRidWYsIHN0cmxlbihvdXRidWYpKTsKKysJCQkJ YmFkX21hdGNoX2ZsYWcgPSAxOworKwkJCX0KKysKKysjaWZkZWYgREVCVUcKKysJCQlmcHJpbnRm IChzdGRlcnIsICIlczogQ1AgaXMgJXMoJWxkKSBOUCBpcyAlcyglbGQpXG4iLAorKwkJCQkgaG9z dG5hbWUsIGNwLCBzaXplLCBucCwgbnBzdGF0LnN0X3NpemUpOworKyNlbmRpZgorKwkJCS8qIHdl IGFyZSBpbiByZXN1bWUgbW9kZSBzbyB3ZSBuZWVkIHRoaXMgKmhlcmUqIGFuZCBub3QgbGF0ZXIK KysJCQkgKiBiZWNhdXNlIHdlIG5lZWQgdG8gZ2V0IHRoZSBmaWxlIG1hdGNoIGluZm9ybWF0aW9u IGZyb20gdGhlIHJlbW90ZQorKwkJCSAqIG91dHNpZGUgb2YgcmVzdW1lIG1vZGUgd2UgZG9uJ3Qg Z2V0IHRoYXQgc28gd2UgZ2V0IG91dCBvZiBzeW5jCisrCQkJICogc28gd2UgaGF2ZSBhIHRlc3Qg Zm9yIHRoZSByZXN1bWVfZmxhZyBhZnRlciB0aGlzIGJsb2NrICovCisrI2lmZGVmIERFQlVHCisr CQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0 bmFtZSk7CisrI2VuZGlmCisrCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwg MSk7CisrCisrCQkJLyogdGhlIHJlbW90ZSBpcyBhbHdheXMgZ29pbmcgdG8gc2VuZCBhIG1hdGNo IHN0YXR1cworKwkJCSAqIHNvIHdlIG5lZWQgdG8gcmVhZCBpdCBzbyB3ZSBkb24ndCBnZXQgb3V0 IG9mIHN5bmMgKi8KKysJCQkodm9pZCkgYXRvbWljaW8ocmVhZCwgcmVtaW4sICZtYXRjaCwgMSk7 CisrCQkJaWYgKG1hdGNoICE9ICdNJykgey8qZnJhZ21lbnRzIGRvIG5vdCBtYXRjaCovCisrCQkJ CS8qIGV4cGVjdGVkIHJlc3BvbnNlIG9mIEYsIE0gYW5kIE5VTEwgKmJ1dCoKKysJCQkJICogYW55 dGhpbmcgb3RoZXIgdGhhbiBNIGlzIGEgZmFpbHVyZQorKwkJCQkgKiBpZiBpdCdzIGEgTlVMTCB0 aGVuIHdlIHJlc2V0IHhmZXJfc2l6ZSBidXQKKysJCQkJICogd2UgcmV0YWluIHRoZSBmaWxlIHBv aW50ZXJzICovCisrCQkJCXhmZXJfc2l6ZSA9IHNpemU7CisrCQkJCWJhZF9tYXRjaF9mbGFnID0g MTsKKysJCQkJaWYgKG1hdGNoID09ICdGJykgeworKwkJCQkJLyogZ290IGFuIEYgZm9yIGZhaWx1 cmUgYW5kIG5vdCBOVUxMCisrCQkJCQkgKiBzbyB3ZSB3YW50IHRvIHN3YXAgb3ZlciB0aGUgZmls ZW5hbWUgZnJvbQorKwkJCQkJICogdGhlIHRlbXAgYmFjayB0byB0aGUgb3JpZ2luYWwgKi8KKysj aWZkZWYgREVCVUcKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IG1hdGNoIHN0YXR1cyBpcyBG XG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisrCQkJCQlpZiAobnBfdG1wICE9IE5VTEwpCisrCQkJ CQkJbnAgPSBucF90bXA7CisrCQkJCQllbHNlIHsKKysJCQkJCQljb250aW51ZTsKKysJCQkJCX0K KysJCQkJfSBlbHNlIHsKKysjaWZkZWYgREVCVUcKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IG1hdGNoIHJlY2VpdmVkIGlzIE5VTExcbiIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQkJfQor KwkJCX0gZWxzZSB7CisrI2lmZGVmIERFQlVHCisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXMgbWF0 Y2ggc3RhdHVzIGlzIE1cbiIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQkJYmFkX21hdGNoX2Zs YWcgPSAwOyAvKiB3aGlsZSB0aGlzIGlzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorKwkJ CQkJCSAgICAgKiBsb29wIEknbSBzZXR0aW5nIGl0IGhlcmUgZXhwbGljaXRseSBhcyB3ZWxsICov CisrCQkJfQorKwkJfQorKworKyNpZmRlZiBERUJVRworKwkJZnByaW50ZihzdGRlcnIsICIlczog Q3JlYXRpbmcgZmlsZS4gbW9kZSBpcyAlZCBmb3IgJXNcbiIsCisrCQkJaG9zdG5hbWUsIG1vZGUs IG5wKTsKKysjZW5kaWYKKyAJCWlmICgob2ZkID0gb3BlbihucCwgT19XUk9OTFl8T19DUkVBVCwg bW9kZSkpID09IC0xKSB7CisgYmFkOgkJCXJ1bl9lcnIoIiVzOiAlcyIsIG5wLCBzdHJlcnJvcihl cnJubykpOworIAkJCWNvbnRpbnVlOworIAkJfQorLQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwg cmVtb3V0LCAiIiwgMSk7CisrCisrCQkvKiBpbiB0aGUgY2FzZSBvZiBub3QgdXNpbmcgdGhlIHJl c3VtZSBmdW5jdGlvbiB3ZSBuZWVkIHRoaXMgdndyaXRlIGhlcmUKKysJCSAqIGluIHRoZSBjYXNl IG9mIHVzaW5nIHRoZSByZXN1bWUgZmxhZyBpdCBjb21lcyBpbiB0aGUgYWJvdmUgaWYgKHJlc3Vt ZV9mbGFnKSBibG9jaworKwkJICogd2h5PyBiZWNhdXNlIHNjcCBpcyB3ZWlyZCBhbmQgZGVwZW5k cyBvbiBhbiBpbnRyaWNhdGUgYW5kIHNpbGx5IGRhbmNlIG9mCisrCQkgKiBjYWxsIGFuZCByZXNw b25zZSBhdCBqdXN0IHRoZSByaWdodCB0aW1lLiBUaGF0J3Mgd2h5ICovCisrCQlpZiAoIXJlc3Vt ZV9mbGFnKSB7CisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRp bmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisrCQkJKHZvaWQpIGF0 b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisrCQl9CisrCisgCQlpZiAoKGJwID0gYWxs b2NidWYoJmJ1ZmZlciwgb2ZkLCBDT1BZX0JVRkxFTikpID09IE5VTEwpIHsKKyAJCQkodm9pZCkg Y2xvc2Uob2ZkKTsKKyAJCQljb250aW51ZTsKK0BAIC0xOTA2LDEzICsyNDMxLDE3IEBACisgCQkg Ki8KKyAJCXN0YXRieXRlcyA9IDA7CisgCQlpZiAoc2hvd3Byb2dyZXNzKQorLQkJCXN0YXJ0X3By b2dyZXNzX21ldGVyKGN1cmZpbGUsIHNpemUsICZzdGF0Ynl0ZXMpOworKwkJCXN0YXJ0X3Byb2dy ZXNzX21ldGVyKGN1cmZpbGUsIHhmZXJfc2l6ZSwgJnN0YXRieXRlcyk7CisgCQlzZXRfbm9uYmxv Y2socmVtaW4pOworLQkJZm9yIChjb3VudCA9IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBicC0+Y250 KSB7CisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB4ZmVyX3NpemUgaXMg JWxkXG4iLCBob3N0bmFtZSwgeGZlcl9zaXplKTsKKysjZW5kaWYKKysJCWZvciAoY291bnQgPSBp ID0gMDsgaSA8IHhmZXJfc2l6ZTsgaSArPSBicC0+Y250KSB7CisgCQkJYW10ID0gYnAtPmNudDsK Ky0JCQlpZiAoaSArIGFtdCA+IHNpemUpCistCQkJCWFtdCA9IHNpemUgLSBpOworKwkJCWlmIChp ICsgYW10ID4geGZlcl9zaXplKQorKwkJCQlhbXQgPSB4ZmVyX3NpemUgLSBpOworIAkJCWNvdW50 ICs9IGFtdDsKKysJCQkvKiByZWFkIHRoZSBkYXRhIGZyb20gdGhlIHNvY2tldCovCisgCQkJZG8g eworIAkJCQlqID0gYXRvbWljaW82KHJlYWQsIHJlbWluLCBjcCwgYW10LAorIAkJCQkgICAgc2Nw aW8sICZzdGF0Ynl0ZXMpOworQEAgLTE5NDcsOCArMjQ3Niw3OCBAQAorIAkJCXdyZXJyID0gMTsK KyAJCX0KKyAJCWlmICghd3JlcnIgJiYgKCFleGlzdHMgfHwgU19JU1JFRyhzdGIuc3RfbW9kZSkp ICYmCistCQkgICAgZnRydW5jYXRlKG9mZCwgc2l6ZSkgIT0gMCkKKysJCSAgICBmdHJ1bmNhdGUo b2ZkLCB4ZmVyX3NpemUpICE9IDApCisgCQkJbm90ZV9lcnIoIiVzOiB0cnVuY2F0ZTogJXMiLCBu cCwgc3RyZXJyb3IoZXJybm8pKTsKKysKKysJCS8qIGlmIG5wX3RtcCBpc24ndCBzZXQgdGhlbiB3 ZSBkb24ndCBoYXZlIGEgcmVzdW1lIGZpbGUgdG8gY2F0ICovCisrCQkvKiBsaWtld2lzZSwgYmFk IG1hdGNoIGZsYWcgbWVhbnMgbm8gcmVzdW1lIGZsYWcgKi8KKysjaWZkZWYgREVCVUcKKysJCWZw cmludGYgKHN0ZGVyciwgIiVzOiByZXN1bWVfZmxhZzogJWQsIG5wX3RtcDogJXMsIGJhZF9tYXRj aF9mbGFnOiAlZFxuIiwKKysJCQkgaG9zdG5hbWUsIHJlc3VtZV9mbGFnLCBucF90bXAsIGJhZF9t YXRjaF9mbGFnKTsKKysjZW5kaWYKKysJCWlmIChyZXN1bWVfZmxhZyAmJiBucF90bXAgJiYgIWJh ZF9tYXRjaF9mbGFnKSB7CisrCQkJRklMRSAqb3JpZywgKnJlc3VtZTsKKysJCQljaGFyIHJlc19i dWZbNTEyXTsgLyogc2V0IGF0IDUxMiBqdXN0IGJlY2F1c2UsIG1pZ2h0IHdhbnQgdG8gaW5jcmVh c2UqLworKwkJCXNzaXplX3QgcmVzX2J5dGVzID0gMDsKKysJCQlvZmZfdCBzdW0gPSAwOworKwkJ CXN0cnVjdCBzdGF0IHJlc19zdGF0OworKwkJCSpyZXNfYnVmID0gJ1wwJzsKKysJCQlvcmlnID0g TlVMTDsgLypzdXByZXNzIHdhcm5pbmdzKi8KKysJCQlyZXN1bWUgPSBOVUxMOyAvKnN1cHJlc3Mg d2FybmluZ3MqLworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IFJlc3Vt ZSBmbGFnIGlzIHNldC4gR29pbmcgdG8gY29uY2F0ICVzIHRvICVzICBub3dcbiIsCisrCQkJCWhv c3RuYW1lLCBucCwgbnBfdG1wKTsKKysjZW5kaWYKKysJCQkvKiBucC9vZmQgaXMgdGhlIHJlc3Vt ZSBmaWxlIHNvIG9wZW4gbnBfdG1wIGZvciBhcHBlbmRpbmcKKysJCQkgKiBjbG9zZSBvZmQgYmVj YXVzZSB3ZSBhcmUgZ29pbmcgdG8gYmUgc2hpZnRpbmcgaXQKKysJCQkgKiBhbmQgSSBkb24ndCB3 bmF0IHRoZSBzYW1lIGZpbGUgb3BlbiBpbiBtdWx0aXBsZSBkZXNjcmlwdG9ycyAqLworKwkJCWlm IChjbG9zZShvZmQpID09IC0xKQorKwkJCQlub3RlX2VycigiJXM6IGNsb3NlOiAlcyIsIG5wLCBz dHJlcnJvcihlcnJubykpOworKwkJCS8qIG9yaWcgaXMgdGhlIHRhcmdldCBmaWxlLCByZXN1bWUg aXMgdGhlIHRlbXAgZmlsZSAqLworKwkJCW9yaWcgPSBmb3BlbihucF90bXAsICJhIik7IC8qb3Bl biBmb3IgYXBwZW5kaW5nKi8KKysJCQlpZiAob3JpZyA9PSBOVUxMKSB7CisrCQkJCWZwcmludGYo c3RkZXJyLCAiJXM6IENvdWxkIG5vdCBvcGVuICVzIGZvciBhcHBlbmRpbmcuIiwgaG9zdG5hbWUs IG5wX3RtcCk7CisrCQkJCWdvdG8gc3RvcGNhdDsKKysJCQl9CisrCQkJcmVzdW1lID0gZm9wZW4o bnAsICJyIik7IC8qb3BlbiBmb3IgcmVhZGluZyBvbmx5Ki8KKysJCQlpZiAocmVzdW1lID09IE5V TEwpIHsKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogQ291bGQgbm90IG9wZW4gJXMgZm9yIHJl YWRpbmcuIiwgaG9zdG5hbWUsIG5wKTsKKysJCQkJZ290byBzdG9wY2F0OworKwkJCX0KKysJCQkv KiBnZXQgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgdGVtcCBmaWxlKi8KKysJCQlpZiAoZnN0 YXQoZmlsZW5vKHJlc3VtZSksICZyZXNfc3RhdCkgPT0gLTEpIHsKKysJCQkJZnByaW50ZihzdGRl cnIsICIlczogQ291bGQgbm90IHN0YXQgJXMiLCBob3N0bmFtZSwgbnApOworKwkJCQlnb3RvIHN0 b3BjYXQ7CisrCQkJfQorKwkJCS8qIHdoaWxlIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9t IHRoZSB0ZW1wIGZpbGUKKysJCQkgKiBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIGZpbGUg cmVhZCBpbiBhIGNodW5rIGFuZAorKwkJCSAqIHdyaXRlIGl0IHRvIHRoZSB0YXJnZXQgZmlsZSAq LworKwkJCWRvIHsKKysJCQkJcmVzX2J5dGVzID0gZnJlYWQocmVzX2J1ZiwgMSwgNTEyLCByZXN1 bWUpOworKwkJCQlmd3JpdGUocmVzX2J1ZiwgMSwgcmVzX2J5dGVzLCBvcmlnKTsKKysJCQkJc3Vt ICs9IHJlc19ieXRlczsKKysJCQl9IHdoaWxlIChzdW0gPCByZXNfc3RhdC5zdF9zaXplKTsKKysK KytzdG9wY2F0OgkJaWYgKG9yaWcpCisrCQkJCWZjbG9zZShvcmlnKTsKKysJCQlpZiAocmVzdW1l KQorKwkJCQlmY2xvc2UocmVzdW1lKTsKKysJCQkvKiBkZWxldGUgdGhlIHJlc3VtZSBmaWxlICov CisrCQkJcmVtb3ZlKG5wKTsKKysjaWZkZWYgREVCVUcKKysJCQlmcHJpbnRmIChzdGRlcnIsICIl czogbnAoJXMpIGFuZCBucF90bXAoJXMpXG4iLCBob3N0bmFtZSwgbnAsIG5wX3RtcCk7CisrI2Vu ZGlmCisrCQkJbnAgPSBucF90bXA7CisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZiAoc3RkZXJy LCAiJXMgbnAoJXMpIGFuZCBucF90bXAoJXMpXG4iLCBob3N0bmFtZSwgbnAsIG5wX3RtcCk7Cisr I2VuZGlmCisrCQkJLyogcmVzZXQgb2ZkIHRvIHRoZSBvcmlnaW5hbCBucCAqLworKwkJCWlmICgo b2ZkID0gb3BlbihucF90bXAsIE9fV1JPTkxZKSkgPT0gLTEpIHsKKysJCQkJZnByaW50ZihzdGRl cnIsICIlczogY291bGRuJ3Qgb3BlbiAlcyBpbiBhcHBlbmQgZnVuY3Rpb25cbiIsIGhvc3RuYW1l LCBucF90bXApOworKwkJCQlhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworKwkJCQln b3RvIGJhZDsKKysJCQl9CisrCQl9CisgCQlpZiAocGZsYWcpIHsKKyAJCQlpZiAoZXhpc3RzIHx8 IG9tb2RlICE9IG1vZGUpCisgI2lmZGVmIEhBVkVfRkNITU9ECitAQCAtMTk4Myw4ICsyNTgyLDE3 IEBACisgCQkJfQorIAkJfQorIAkJLyogSWYgbm8gZXJyb3Igd2FzIG5vdGVkIHRoZW4gc2lnbmFs IHN1Y2Nlc3MgZm9yIHRoaXMgZmlsZSAqLworLQkJaWYgKG5vdGVfZXJyKE5VTEwpID09IDApCisr CQlpZiAobm90ZV9lcnIoTlVMTCkgPT0gMCkgeworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYg KHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOworKyNl bmRpZgorIAkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworKwkJfQor KwkJLyogd2UgYXJlIGluIHJlc3VtZSBtb2RlIGFuZCB3ZSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkg Zm9yIG5wX3RtcCAqLworKwkJaWYgKHJlc3VtZV9mbGFnICYmIG5wX3RtcCAhPSBOVUxMKSB7Cisr CQkJZnJlZShucF90bXApOworKwkJCW5wX3RtcCA9IE5VTEw7CisrCQl9CisgCX0KKyBkb25lOgor IAlmb3IgKG4gPSAwOyBuIDwgbnBhdHRlcm5zOyBuKyspCitAQCAtMjEzMiwxMSArMjc0MCwxOSBA QAorIHZvaWQKKyB1c2FnZSh2b2lkKQorIHsKKysjaWYgKGRlZmluZWQgV0lUSF9PUEVOU1NMKSAm JiAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKKysJKHZvaWQpIGZwcmludGYoc3Rk ZXJyLAorKwkgICAgInVzYWdlOiBzY3AgWy0zNDZBQkNPcHFScnNUdlpdIFstYyBjaXBoZXJdIFst RCBzZnRwX3NlcnZlcl9wYXRoXSBbLUYgc3NoX2NvbmZpZ11cbiIKKysJICAgICIgICAgICAgICAg IFstaSBpZGVudGl0eV9maWxlXSBbLUogZGVzdGluYXRpb25dIFstbCBsaW1pdF0gWy1vIHNzaF9v cHRpb25dXG4iCisrCSAgICAiICAgICAgICAgICBbLVAgcG9ydF0gWy1TIHByb2dyYW1dIFstWCBz ZnRwX29wdGlvbl0gc291cmNlIC4uLiB0YXJnZXRcbiIpOworKwlleGl0KDEpOworKyNlbHNlCisg CSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJ1c2FnZTogc2NwIFstMzQ2QUJDT3BxUnJz VHZdIFstYyBjaXBoZXJdIFstRCBzZnRwX3NlcnZlcl9wYXRoXSBbLUYgc3NoX2NvbmZpZ11cbiIK KyAJICAgICIgICAgICAgICAgIFstaSBpZGVudGl0eV9maWxlXSBbLUogZGVzdGluYXRpb25dIFst bCBsaW1pdF0gWy1vIHNzaF9vcHRpb25dXG4iCisgCSAgICAiICAgICAgICAgICBbLVAgcG9ydF0g Wy1TIHByb2dyYW1dIFstWCBzZnRwX29wdGlvbl0gc291cmNlIC4uLiB0YXJnZXRcbiIpOworIAll eGl0KDEpOworKyNlbmRpZgorIH0KKyAKKyB2b2lkCitAQCAtMjI3NSw2ICsyODkxLDE4IEBACisg CQlleGl0KDEpOworIH0KKyAKKyt2b2lkIHJhbmRfc3RyKGNoYXIgKmRlc3QsIHNpemVfdCBsZW5n dGgpIHsKKysJY2hhciBjaGFyc2V0W10gPSAiMDEyMzQ1Njc4OSIKKysJCSJhYmNkZWZnaGlqa2xt bm9wcXJzdHV2d3h5eiIKKysJCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7CisrCisrCXdo aWxlIChsZW5ndGgtLSA+IDApIHsKKysJCXNpemVfdCBpbmRleCA9IChkb3VibGUpIHJhbmQoKSAv IFJBTkRfTUFYICogKHNpemVvZiBjaGFyc2V0IC0gMSk7CisrCQkqZGVzdCsrID0gY2hhcnNldFtp bmRleF07CisrCX0KKysJKmRlc3QgPSAnXDAnOworK30KKysKKyB2b2lkCisgY2xlYW51cF9leGl0 KGludCBpKQorIHsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NlcnZjb25mLmMgb3Bl bnNzaC0xMC41cDEvc2VydmNvbmYuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2VydmNvbmYu YwkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2MzQ5ODczNCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAx L3NlcnZjb25mLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTM0NTkwODQgKzAyMDAKK0BAIC02OSw2 ICs2OSw3IEBACisgI2luY2x1ZGUgImF1dGguaCIKKyAjaW5jbHVkZSAibXlwcm9wb3NhbC5oIgor ICNpbmNsdWRlICJkaWdlc3QuaCIKKysjaW5jbHVkZSAic3NoYnVmLmgiCisgI2luY2x1ZGUgInZl cnNpb24uaCIKKyAjaW5jbHVkZSAic3NoLWdzcy5oIgorIAorQEAgLTQyNSw2ICs0MjYsMTMgQEAK KyAJCW9wdGlvbnMtPnNzaGRfc2Vzc2lvbl9wYXRoID0geHN0cmR1cChfUEFUSF9TU0hEX1NFU1NJ T04pOworIAlpZiAob3B0aW9ucy0+c3NoZF9hdXRoX3BhdGggPT0gTlVMTCkKKyAJCW9wdGlvbnMt PnNzaGRfYXV0aF9wYXRoID0geHN0cmR1cChfUEFUSF9TU0hEX0FVVEgpOworKwkvKiBIUE46IE5v bmVNYWNFbmFibGVkIGhhcyBubyBlZmZlY3Qgd2l0aG91dCBOb25lRW5hYmxlZAorKwkgKiBub3Rl IHRoaXMgcGxhY2VtZW50IG9mIHRoaXMgc3RhbnphIG1hdHRlcnMuIEl0IGhhcyB0byBjb21lIGFm dGVyCisrCSAqIHRoZSBtYWNyb3MgYXJlIHJ1biBzbyB3ZSBoYXZlIHRoZXNlIGl0ZW1zIGluIHRo ZSBzdHJ1Y3QgKi8KKysJaWYgKG9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZCA+IDAgJiYgb3B0aW9u cy0+bm9uZV9lbmFibGVkID09IDApIHsKKysJCWxvZ2l0KCJOb25lTWFjRW5hYmxlZCBpZ25vcmVk OiByZXF1aXJlcyBOb25lRW5hYmxlZCIpOworKwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0g MDsKKysJfQorIAorIAlhc3NlbWJsZV9hbGdvcml0aG1zKG9wdGlvbnMpOworIAorQEAgLTU4Nyw2 ICs1OTUsNyBAQAorIAorIAlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXS5uYW1lOyBpKyspCisgCQlp ZiAoc3RyY2FzZWNtcChjcCwga2V5d29yZHNbaV0ubmFtZSkgPT0gMCkgeworKwkJCWRlYnVnKCJD b25maWcgdG9rZW4gaXMgJXMiLCBrZXl3b3Jkc1tpXS5uYW1lKTsKKyAJCQkqZmxhZ3MgPSBrZXl3 b3Jkc1tpXS5mbGFnczsKKyAJCQlyZXR1cm4ga2V5d29yZHNbaV0ub3Bjb2RlOworIAkJfQorQEAg LTEzNjIsNiArMTM3MSwzMCBAQAorIAkJbXVsdGlzdGF0ZV9wdHIgPSBtdWx0aXN0YXRlX2lnbm9y ZV9yaG9zdHM7CisgCQlnb3RvIHBhcnNlX211bHRpc3RhdGU7CisgCisrCWNhc2Ugc1RjcFJjdkJ1 ZlBvbGw6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbDsKKysJCWdvdG8g cGFyc2VfZmxhZzsKKysKKysJY2FzZSBzSFBORGlzYWJsZWQ6CisrCQlpbnRwdHIgPSAmb3B0aW9u cy0+aHBuX2Rpc2FibGVkOworKwkJZ290byBwYXJzZV9mbGFnOworKworKwljYXNlIHNOb25lRW5h YmxlZDoKKysJCWludHB0ciA9ICZvcHRpb25zLT5ub25lX2VuYWJsZWQ7CisrCQlnb3RvIHBhcnNl X2ZsYWc7CisrCisrCWNhc2Ugc05vbmVNYWNFbmFibGVkOgorKwkJaW50cHRyID0gJm9wdGlvbnMt Pm5vbmVtYWNfZW5hYmxlZDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBzRGlzYWJs ZU1UQUVTOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmRpc2FibGVfbXVsdGl0aHJlYWRlZDsKKysJ CWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBzVXNlTVBUQ1A6CisrCQlpbnRwdHIgPSAmb3B0 aW9ucy0+dXNlX21wdGNwOworKwkJZ290byBwYXJzZV9mbGFnOworKworIAljYXNlIHNJZ25vcmVV c2VyS25vd25Ib3N0czoKKyAJCWludHB0ciA9ICZvcHRpb25zLT5pZ25vcmVfdXNlcl9rbm93bl9o b3N0czsKKyAgcGFyc2VfZmxhZzoKK0BAIC00MzgwLDYgKzQ0MTMsMTEgQEAKKyAJZHVtcF9jZmdf Zm10aW50KHNTdHJlYW1Mb2NhbEJpbmRVbmxpbmssIG8tPmZ3ZF9vcHRzLnN0cmVhbWxvY2FsX2Jp bmRfdW5saW5rKTsKKyAJZHVtcF9jZmdfZm10aW50KHNGaW5nZXJwcmludEhhc2gsIG8tPmZpbmdl cnByaW50X2hhc2gpOworIAlkdW1wX2NmZ19mbXRpbnQoc0V4cG9zZUF1dGhJbmZvLCBvLT5leHBv c2VfdXNlcmF1dGhfaW5mbyk7CisrCWR1bXBfY2ZnX2ZtdGludChzSFBORGlzYWJsZWQsIG8tPmhw bl9kaXNhYmxlZCk7CisrCWR1bXBfY2ZnX2ZtdGludChzVGNwUmN2QnVmUG9sbCwgby0+dGNwX3Jj dl9idWZfcG9sbCk7CisrCWR1bXBfY2ZnX2ZtdGludChzTm9uZUVuYWJsZWQsIG8tPm5vbmVfZW5h YmxlZCk7CisrCWR1bXBfY2ZnX2ZtdGludChzTm9uZU1hY0VuYWJsZWQsIG8tPm5vbmVtYWNfZW5h YmxlZCk7CisrCWR1bXBfY2ZnX2ZtdGludChzVXNlTVBUQ1AsIG8tPnVzZV9tcHRjcCk7CisgCWR1 bXBfY2ZnX2ZtdGludChzUmVmdXNlQ29ubmVjdGlvbiwgby0+cmVmdXNlX2Nvbm5lY3Rpb24pOwor IAorIAkvKiBzdHJpbmcgYXJndW1lbnRzICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3Jp Zy9zZXJ2Y29uZi5oIG9wZW5zc2gtMTAuNXAxL3NlcnZjb25mLmgKKy0tLSBvcGVuc3NoLTEwLjVw MS5vcmlnL3NlcnZjb25mLmgJMjAyNi0wOS0yMSAwNzowNjowNS41NjQwMjI1NzAgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjVwMS9zZXJ2Y29uZi5oCTIwMjYtMDktMjEgMDc6MDY6NTkuODkzNjc3Mzk1 ICswMjAwCitAQCAtMjY0LDEzICsyNjQsMjIgQEAKKyBTU0hDT05GX0FMSUFTKFNLZXlBdXRoZW50 aWNhdGlvbiwgS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCkgXAorIFNT SENPTkZfQUxJQVMoS2VlcEFsaXZlLCBUQ1BLZWVwQWxpdmUsIFNTSENGR19HTE9CQUwpCisgCisr I2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTX0hQTiBcCisrU1NIQ09ORl9JTlRGTEFHKHRjcF9y Y3ZfYnVmX3BvbGwsIFRjcFJjdkJ1ZlBvbGwsIFNTSENGR19BTEwsIDEsIFNTSENGR19DT1BZX01B VENIKSBcCisrU1NIQ09ORl9JTlRGTEFHKGhwbl9kaXNhYmxlZCwgSFBORGlzYWJsZWQsIFNTSENG R19BTEwsIDAsIFNTSENGR19DT1BZX01BVENIKSBcCisrU1NIQ09ORl9JTlRGTEFHKG5vbmVfZW5h YmxlZCwgTm9uZUVuYWJsZWQsIFNTSENGR19BTEwsIDAsIFNTSENGR19DT1BZX01BVENIKSBcCisr U1NIQ09ORl9JTlRGTEFHKG5vbmVtYWNfZW5hYmxlZCwgTm9uZU1hY0VuYWJsZWQsIFNTSENGR19B TEwsIDAsIFNTSENGR19DT1BZX01BVENIKSBcCisrU1NIQ09ORl9JTlRGTEFHKGRpc2FibGVfbXVs dGl0aHJlYWRlZCwgRGlzYWJsZU1UQUVTLCBTU0hDRkdfQUxMLCAwLCBTU0hDRkdfQ09QWV9NQVRD SCkgXAorK1NTSENPTkZfSU5URkxBRyh1c2VfbXB0Y3AsIFVzZU1QVENQLCBTU0hDRkdfR0xPQkFM LCAwLCBTU0hDRkdfQ09QWV9OT05FKQorKworICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFU19C QVNFIFwKKyAJU1NIRF9DT05GSUdfRU5UUklFU19DVVNUT00gXAorIAlTU0hEX0NPTkZJR19FTlRS SUVTX01BSU4gXAorIAlTU0hEX0NPTkZJR19FTlRSSUVTX0xFR0FDWSBcCisgCVNTSERfQ09ORklH X0VOVFJJRVNfQUxJQVNFUyBcCisgCVNTSERfQ09ORklHX0VOVFJJRVNfUEFNIFwKKy0JU1NIRF9D T05GSUdfRU5UUklFU19MQVNUTE9HCisrCVNTSERfQ09ORklHX0VOVFJJRVNfTEFTVExPRyBcCisr CVNTSERfQ09ORklHX0VOVFJJRVNfSFBOCisgCisgI2lmZGVmIFVTRV9QQU0KKyAjZGVmaW5lIFNT SERfQ09ORklHX0VOVFJJRVNfUEFNIFwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3Nl cnZlcmxvb3AuYyBvcGVuc3NoLTEwLjVwMS9zZXJ2ZXJsb29wLmMKKy0tLSBvcGVuc3NoLTEwLjVw MS5vcmlnL3NlcnZlcmxvb3AuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjM3NDg1MTczMiArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL3NlcnZlcmxvb3AuYwkyMDI2LTA5LTIxIDA3OjU1OjAzLjAwOTQx OTM3NCArMDIwMAorQEAgLTc3LDYgKzc3LDggQEAKKyAjaW5jbHVkZSAic2VydmVybG9vcC5oIgor ICNpbmNsdWRlICJzc2hlcnIuaCIKKyAjaW5jbHVkZSAiY29tcGF0LmgiCisrI2luY2x1ZGUgIm1l dHJpY3MuaCIKKysjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgorIAorIGV4dGVybiBTZXJ2ZXJP cHRpb25zIG9wdGlvbnM7CisgCitAQCAtMzQxLDYgKzM0Myw3IEBACisgCXNpZ3NldF90IGJzaWdz ZXQsIG9zaWdzZXQ7CisgCisgCWRlYnVnKCJFbnRlcmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9uIGZv ciBTU0gyLiIpOworKwlzc2gtPnN0YXJ0X3RpbWUgPSBtb25vdGltZV9kb3VibGUoKTsKKyAKKyAJ aWYgKHNpZ2VtcHR5c2V0KCZic2lnc2V0KSA9PSAtMSB8fAorIAkgICAgc2lnYWRkc2V0KCZic2ln c2V0LCBTSUdDSExEKSA9PSAtMSkKK0BAIC0zOTUsOSArMzk4LDE1IEBACisgCWNvbGxlY3RfY2hp bGRyZW4oc3NoKTsKKyAJZnJlZShwZmQpOworIAorKwkvKiB3cml0ZSBmaW5hbCBsb2cgZW50cnkg KGRvIHdlIG5lZWQgdGhpcyBoZXJlPyAtY2pyKSovCisrCXNzaHBrdF9maW5hbF9sb2dfZW50cnko c3NoKTsKKysKKyAJLyogZnJlZSBhbGwgY2hhbm5lbHMsIG5vIG1vcmUgcmVhZHMgYW5kIHdyaXRl cyAqLworIAljaGFubmVsX2ZyZWVfYWxsKHNzaCk7CisgCisrCS8qIGZpbmFsIGVudHJ5IG11c3Qg Y29tZSBhZnRlciBjaGFubmVscyBjbG9zZSAtY2pyICovCisrCXNzaHBrdF9maW5hbF9sb2dfZW50 cnkoc3NoKTsKKysKKyAJLyogZnJlZSByZW1haW5pbmcgc2Vzc2lvbnMsIGUuZy4gcmVtb3ZlIHd0 bXAgZW50cmllcyAqLworIAlzZXNzaW9uX2Rlc3Ryb3lfYWxsKHNzaCwgTlVMTCk7CisgfQorQEAg LTYwMCw2ICs2MDksOCBAQAorIAljID0gY2hhbm5lbF9uZXcoc3NoLCAic2Vzc2lvbiIsIFNTSF9D SEFOTkVMX0xBUlZBTCwKKyAJICAgIC0xLCAtMSwgLTEsIC8qd2luZG93IHNpemUqLzAsIENIQU5f U0VTX1BBQ0tFVF9ERUZBVUxULAorIAkgICAgMCwgInNlcnZlci1zZXNzaW9uIiwgMSk7CisrCWlm ICgob3B0aW9ucy50Y3BfcmN2X2J1Zl9wb2xsKSAmJiAoIW9wdGlvbnMuaHBuX2Rpc2FibGVkKSkK KysJCWMtPmR5bmFtaWNfd2luZG93ID0gMTsKKyAJaWYgKHNlc3Npb25fb3Blbih0aGVfYXV0aGN0 eHQsIGMtPnNlbGYpICE9IDEpIHsKKyAJCWRlYnVnKCJzZXNzaW9uIG9wZW4gZmFpbGVkLCBmcmVl IGNoYW5uZWwgJWQiLCBjLT5zZWxmKTsKKyAJCWNoYW5uZWxfZnJlZShzc2gsIGMpOworQEAgLTY2 OCw2ICs2NzksNjcgQEAKKyAJcmV0dXJuIDA7CisgfQorIAorKy8qIHdlIG5lZWQgdG8gZ2V0IHRo ZSBhY3R1YWwgc29ja2V0IGluIHVzZSBhbmQgZnJvbSB0aGVyZQorKyAqIHJlYWQgdGhlIHZhbHVl cyBpbiB0aGUgVENQX0lORk8gc3RydWN0LgorKyAqIHNob3V0IG91dCB0byBSZW5lIFBmaWZmZXIg Zm9yIHRoZSBhcnRpY2xlIGh0dHBzOi8vbGludXhnYXpldHRlLm5ldC8xMzYvcGZlaWZmZXIuaHRt bAorKyAqIGZvciBnZXR0aW5nIG1lIHN0YXJ0ZWQuIFRoaXMgb25seSB3b3JrcyBvbiBzeXN0ZW1z IHRoYXQgc3VwcG9ydCB0aGUgdGNwX2luZm8KKysgKiBzdHJ1Y3Q7IGxpbnV4LCBmcmVlYnNkLCBu ZXRic2QgYXMgb2Ygbm93LiBBcHBsZSBoYXMgb25lIGJ1dCBpdCdzIGNvbXBsZXRlbHkgZGlmZmVy ZW50CisrICogdGhhbiBhbnkgb2YgdGhlIG90aGVycy4KKysgKi8KKytzdGF0aWMgaW50Cisrc2Vy dmVyX2lucHV0X21ldHJpY3NfcmVxdWVzdChzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2hidWYg KipyZXNwcCkKKyt7CisrCWludCBzdWNjZXNzID0gMDsKKysJLyogVENQX0lORk8gaXMgZGVmaW5l ZCBpbiBtZXRyaWNzLmgKKysJICogaWYgaXQncyBub3QgZGVmaW5lZCB0aGVuIHdlIGRvbid0IHN1 cHBvcnQgdGNwX2luZm8KKysJICogc28ganVzdCByZXR1cm4gYSBmYWlsdXJlIGNvZGUgKi8KKysj aWYgIWRlZmluZWQgVENQX0lORk8KKysJcmV0dXJuIHN1Y2Nlc3M7CisrI2Vsc2UKKysJc3RydWN0 IHRjcF9pbmZvIHRjcF9pbmZvOworKwlzdHJ1Y3Qgc3NoYnVmICpyZXNwID0gTlVMTDsKKysJaW50 IHRjcF9pbmZvX2xlbjsKKysJLyogdGhpcyBpcyB0aGUgc29ja2V0IG9mIHRoZSBjdXJyZW50IGNv bm5lY3Rpb24gKi8KKysJaW50IHNvY2tfaW4gPSBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX2lu KHNzaCk7CisrCWludCByOworKwliaW5uICptZXRyaWNzb2JqOworKworKwl0Y3BfaW5mb19sZW4g PSBzaXplb2YodGNwX2luZm8pOyAvKmV4cGVjdCBhcm91bmQgMzMwIGJ5dGVzICovCisrCWlmICgo cmVzcCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCWZhdGFsX2YoInNzaGJ1Zl9uZXciKTsK KysKKysJLyogY3JlYXRlIHRoZSBiaW5uIG9iamVjdCB0byBob2xkIHRoZSBzZXJpYWxpemVkIG1l dHJpY3MgKi8KKysJbWV0cmljc29iaiA9IGJpbm5fb2JqZWN0KCk7CisrCWlmIChtZXRyaWNzb2Jq ID09IE5VTEwpIHsKKysJCWVycm9yX2YoIkNvdWxkIG5vdCBjcmVhdGUgbWV0cmljcyBvYmplY3Qi KTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWRlYnVnKCJTdGFjayBtZXRyaWNzIHJlcXVlc3Qg Zm9yIGNvbm5lY3Rpb24gJWQiLCBzb2NrX2luKTsKKysJaWYgKChyID0gZ2V0c29ja29wdChzb2Nr X2luLCBJUFBST1RPX1RDUCwgVENQX0lORk8sICh2b2lkICopJnRjcF9pbmZvLAorKwkJCSAgIChz b2NrbGVuX3QgKikmdGNwX2luZm9fbGVuKSkgIT0gMCkgeworKwkJZXJyb3JfZigiQ291bGQgbm90 IHJlYWQgdGNwX2luZm8gZnJvbSBzb2NrZXQiKTsKKysJCWdvdG8gb3V0OworKwl9CisrCS8qIHdy aXRlIHRoZSB0Y3BfaW5mbyBkYXRhIHRvIHRoZSBiaW5uIG9iamVjdCAqLworKwltZXRyaWNzX3dy aXRlX2Jpbm5fb2JqZWN0KCZ0Y3BfaW5mbywgbWV0cmljc29iaik7CisrCWlmICgociA9IHNzaGJ1 Zl9wdXRfc3RyaW5nKHJlc3AsIGJpbm5fcHRyKG1ldHJpY3NvYmopLAorKwkJCQkgICBiaW5uX3Np emUobWV0cmljc29iaikpKSAhPSAwKSB7CisrCQllcnJvcl9mcihyLCAiRmFpbGVkIHRvIGJ1aWxk IHRjcF9pbmZvIG9iamVjdCIpOworKwkJZ290byBvdXQ7CisrCX0KKysJLyogY29weSB0aGUgcG9p bnRlciBvZiB0aGUgcmVzcG9uc2UgdG8gdGhlIHBhc3NlZCBpbiByZXNwb25zZSBwb2ludGVyICov CisrCSpyZXNwcCA9IHJlc3A7CisrCXJlc3AgPSBOVUxMOyAvKiBkb24ndCBmcmVlIGl0ICovCisr CS8qIGV2ZXJ5dGhpbmcgd29ya2VkIHNvIHNldCBzdWNjZXNzIHRvIHRydWUgKi8KKysJc3VjY2Vz cyA9IDE7Cisrb3V0OgorKwlzc2hidWZfZnJlZShyZXNwKTsKKysJYmlubl9mcmVlKG1ldHJpY3Nv YmopOworKwlyZXR1cm4gc3VjY2VzczsKKysjZW5kaWYgLyogVENQX0lORk8gKi8KKyt9CisrCisg c3RhdGljIGludAorIHNlcnZlcl9pbnB1dF9ob3N0a2V5c19wcm92ZShzdHJ1Y3Qgc3NoICpzc2gs IHN0cnVjdCBzc2hidWYgKipyZXNwcCkKKyB7CitAQCAtODQ0LDYgKzkxNiwxMCBAQAorIAkJc3Vj Y2VzcyA9IDE7CisgCX0gZWxzZSBpZiAoc3RyY21wKHJ0eXBlLCAiaG9zdGtleXMtcHJvdmUtMDBA b3BlbnNzaC5jb20iKSA9PSAwKSB7CisgCQlzdWNjZXNzID0gc2VydmVyX2lucHV0X2hvc3RrZXlz X3Byb3ZlKHNzaCwgJnJlc3ApOworKwl9IGVsc2UgaWYgKHN0cmNtcChydHlwZSwgInN0YWNrLW1l dHJpY3NAaHBuc3NoLm9yZyIpID09IDApIHsKKysJCS8qIHJlc3AgaXMgdGhlIHJlc3BvbnNlIChz c2hidWYgc3RydWN0KSBmcm9tIHRoZSBmdW5jdGlvbiB3aGljaCBpcworKwkJICogaGFuZGxlZCBi ZWxvdyBpbiB0aGUgd2FudF9yZXBseSBzdGFuemEgKi8KKysJCXN1Y2Nlc3MgPSBzZXJ2ZXJfaW5w dXRfbWV0cmljc19yZXF1ZXN0KHNzaCwgJnJlc3ApOworIAl9CisgCS8qIFhYWCBzc2hwa3RfZ2V0 X2VuZCgpICovCisgCWlmICh3YW50X3JlcGx5KSB7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEu b3JpZy9zZXNzaW9uLmMgb3BlbnNzaC0xMC41cDEvc2Vzc2lvbi5jCistLS0gb3BlbnNzaC0xMC41 cDEub3JpZy9zZXNzaW9uLmMJMjAyNi0wOS0yMSAwNzowNjowNS40NzE3MTkyNjggKzAyMDAKKysr KyBvcGVuc3NoLTEwLjVwMS9zZXNzaW9uLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTQwMzM3Mzgg KzAyMDAKK0BAIC05MCw2ICs5MCw3IEBACisgI2luY2x1ZGUgIm1vbml0b3Jfd3JhcC5oIgorICNp bmNsdWRlICJzZnRwLmgiCisgI2luY2x1ZGUgImF0b21pY2lvLmgiCisrI2luY2x1ZGUgImNpcGhl ci1zd2l0Y2guaCIKKyAKKyAjaWYgZGVmaW5lZChLUkI1KSAmJiBkZWZpbmVkKFVTRV9BRlMpCisg I2luY2x1ZGUgPGthZnMuaD4KK0BAIC0yMTIsNiArMjEzLDcgQEAKKyAJcmVzdG9yZV91aWQoKTsK KyAKKyAJLyogQWxsb2NhdGUgYSBjaGFubmVsIGZvciB0aGUgYXV0aGVudGljYXRpb24gYWdlbnQg c29ja2V0LiAqLworKwkvKiB0aGlzIHNob3VsZG4ndCBtYXR0ZXIgaWYgaXRzIGhwbiBvciBub3Qg LSBjanIgKi8KKyAJbmMgPSBjaGFubmVsX25ldyhzc2gsICJhdXRoLWxpc3RlbmVyIiwKKyAJICAg IFNTSF9DSEFOTkVMX0FVVEhfU09DS0VULCBzb2NrLCBzb2NrLCAtMSwKKyAJICAgIENIQU5fWDEx X1dJTkRPV19ERUZBVUxULCBDSEFOX1gxMV9QQUNLRVRfREVGQVVMVCwKK0BAIC0zNzUsNiArMzc3 LDcgQEAKKyBkb19leGVjX25vX3B0eShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0 IGNoYXIgKmNvbW1hbmQpCisgeworIAlwaWRfdCBwaWQ7CisrCWludCBmaXBzID0gMDsKKyAjaWZk ZWYgVVNFX1BJUEVTCisgCWludCBwaW5bMl0sIHBvdXRbMl0sIHBlcnJbMl07CisgCitAQCAtNTMw LDYgKzUzMywxNyBAQAorIAlzZXNzaW9uX3NldF9mZHMoc3NoLCBzLCBpbm91dFsxXSwgaW5vdXRb MV0sIGVyclsxXSwKKyAJICAgIHMtPmlzX3N1YnN5c3RlbSwgMCk7CisgI2VuZGlmCisrCS8qIHN3 aXRjaCB0byB0aGUgcGFyYWxsZWwgY2lwaGVycyBpZiBuZWNlc3NhcnkKKysJICogSWYgRklQUyBt b2RlIGV4aXN0cyBhbmQgaXMgZW5hYmxlZCB0aGVuIG5vIHBhcmFsbGVsIGNpcGhlcnMuCisrCSAq LworKwlmaXBzID0gZmlwc19lbmFibGVkKCk7CisrCWlmIChmaXBzKQorKwkJZGVidWcyX2YoIkZJ UFMgbW9kZSBpcyBlbmFibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBkaXNhYmxlZCIpOworKwll bHNlCisrCQlkZWJ1ZzJfZigiRklQUyBtb2RlIG5vdCBmb3VuZCBvciBkaXNhYmxlZC4gUGFyYWxs ZWwgY2lwaGVycyBhcmUgZW5hYmxlZCIpOworKworKwlpZiAoKG9wdGlvbnMuZGlzYWJsZV9tdWx0 aXRocmVhZGVkID09IDApICYmIChmaXBzID09IDApKQorKwkJY2lwaGVyX3N3aXRjaChzc2gpOwor IAlyZXR1cm4gMDsKKyB9CisgCitAQCAtNTQ0LDYgKzU1OCw3IEBACisgeworIAlpbnQgZmRvdXQs IHB0eWZkLCB0dHlmZCwgcHR5bWFzdGVyOworIAlwaWRfdCBwaWQ7CisrCWludCBmaXBzID0gMDsK KyAKKyAJaWYgKHMgPT0gTlVMTCkKKyAJCWZhdGFsKCJkb19leGVjX3B0eTogbm8gc2Vzc2lvbiIp OworQEAgLTY0MSw2ICs2NTYsMTcgQEAKKyAJLyogRW50ZXIgaW50ZXJhY3RpdmUgc2Vzc2lvbi4g Ki8KKyAJcy0+cHR5bWFzdGVyID0gcHR5bWFzdGVyOworIAlzZXNzaW9uX3NldF9mZHMoc3NoLCBz LCBwdHlmZCwgZmRvdXQsIC0xLCAxLCAxKTsKKysJLyogc3dpdGNoIHRvIHRoZSBwYXJhbGxlbCBj aXBoZXIgaWYgYXBwcm9wcmlhdGUKKysJICogSWYgRklQUyBtb2RlIGV4aXN0cyBhbmQgaXMgZW5h YmxlZCB0aGVuIG5vIHBhcmFsbGVsIGNpcGhlcnMuCisrCSAqLworKwlmaXBzID0gZmlwc19lbmFi bGVkKCk7CisrCWlmIChmaXBzKQorKwkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiBQ YXJhbGxlbCBjaXBoZXJzIGFyZSBkaXNhYmxlZCIpOworKwllbHNlCisrCQlkZWJ1ZzJfZigiRklQ UyBtb2RlIG5vdCBmb3VuZCBvciBkaXNhYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZW5hYmxl ZCIpOworKworKwlpZiAoKG9wdGlvbnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IDApICYmIChm aXBzID09IDApKQorKwkJY2lwaGVyX3N3aXRjaChzc2gpOworIAlyZXR1cm4gMDsKKyB9CisgCitk aWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zZnRwLjEgb3BlbnNzaC0xMC41cDEvc2Z0cC4x CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zZnRwLjEJMjAyNi0wOC0xMSAwNDoyMjoxNy4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zZnRwLjEJMjAyNi0wOS0yMSAwNzowNjo1 OS44OTQyMTYxODcgKzAyMDAKK0BAIC01NSw2ICs1NSw5IEBACisgdHJhbnNwb3J0LgorIEl0IG1h eSBhbHNvIHVzZSBtYW55IGZlYXR1cmVzIG9mIHNzaCwgc3VjaCBhcyBwdWJsaWMga2V5IGF1dGhl bnRpY2F0aW9uIGFuZAorIGNvbXByZXNzaW9uLgorKy5ObQorK2lzIGJpbmFyeSBjb21wYXRpYmxl IHdpdGggT3BlblNTSCdzIHNmdHAgYW5kIHVzZXMgdGhlIHNhbWUgZGlyZWN0aXZlIGFuZCBjb25m aWd1cmF0aW9uCisrb3B0aW9ucyBleGNlcHQgd2hlcmUgbm90ZWQuIAorIC5QcAorIFRoZQorIC5B ciBkZXN0aW5hdGlvbgorQEAgLTMxOSw2ICszMjIsNyBAQAorIC5JdCBUdW5uZWwKKyAuSXQgVHVu bmVsRGV2aWNlCisgLkl0IFVwZGF0ZUhvc3RLZXlzCisrLkl0IFVzZU1QVENQCisgLkl0IFVzZXIK KyAuSXQgVXNlcktub3duSG9zdHNGaWxlCisgLkl0IFZlcmlmeUhvc3RLZXlETlMKK0BAIC0zMzgs NyArMzQyLDggQEAKKyBTcGVjaWZ5IGhvdyBtYW55IHJlcXVlc3RzIG1heSBiZSBvdXRzdGFuZGlu ZyBhdCBhbnkgb25lIHRpbWUuCisgSW5jcmVhc2luZyB0aGlzIG1heSBzbGlnaHRseSBpbXByb3Zl IGZpbGUgdHJhbnNmZXIgc3BlZWQKKyBidXQgd2lsbCBpbmNyZWFzZSBtZW1vcnkgdXNhZ2UuCist VGhlIGRlZmF1bHQgaXMgNjQgb3V0c3RhbmRpbmcgcmVxdWVzdHMuCisrVGhlIGRlZmF1bHQgaXMg MTAyNCBvdXRzdGFuZGluZyByZXF1ZXN0cyBwcm92aWRpbmcgZm9yIDMyTUIKKytvZiBvdXRzdGFu ZGluZyBkYXRhIHdpdGggYSAzMktCIGJ1ZmZlci4KKyAuSXQgRmwgcgorIFJlY3Vyc2l2ZWx5IGNv cHkgZW50aXJlIGRpcmVjdG9yaWVzIHdoZW4gdXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZy4KKyBO b3RlIHRoYXQKK0BAIC0zNjcsMTAgKzM3MiwxMyBAQAorIC5JdCBDbSBucmVxdWVzdHMgTnMgPSBO cyBBciB2YWx1ZQorIENvbnRyb2xzIGhvdyBtYW55IGNvbmN1cnJlbnQgU0ZUUCByZWFkIG9yIHdy aXRlIHJlcXVlc3RzIG1heSBiZSBpbiBwcm9ncmVzcworIGF0IGFueSBwb2ludCBpbiB0aW1lIGR1 cmluZyBhIGRvd25sb2FkIG9yIHVwbG9hZC4KKy1CeSBkZWZhdWx0IDY0IHJlcXVlc3RzIG1heSBi ZSBhY3RpdmUgY29uY3VycmVudGx5LgorK1RoaXMgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5k IDgxOTIuCisrQnkgZGVmYXVsdCAxMDI0IHJlcXVlc3RzIG1heSBiZSBhY3RpdmUgY29uY3VycmVu dGx5LgorIC5JdCBDbSBidWZmZXIgTnMgPSBOcyBBciB2YWx1ZQorIENvbnRyb2xzIHRoZSBtYXhp bXVtIGJ1ZmZlciBzaXplIGZvciBhIHNpbmdsZSBTRlRQIHJlYWQvd3JpdGUgb3BlcmF0aW9uIHVz ZWQKKyBkdXJpbmcgZG93bmxvYWQgb3IgdXBsb2FkLgorK1RoaXMgdmFsdWUgbXVzdCBiZSBiZXR3 ZWVuIDFCIGFuZCAyNTVLQi4gWW91IG1heSB1c2UKKyt0aGUgSyB1bml0IGZvciB0aGUgc2l6ZS4g RS5nLiAzMjc2OCBvciAzMksuCisgQnkgZGVmYXVsdCBhIDMyS0IgYnVmZmVyIGlzIHVzZWQuCisg LkVsCisgLkVsCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zZnRwLmMgb3BlbnNzaC0x MC41cDEvc2Z0cC5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zZnRwLmMJMjAyNi0wOS0yMSAw NzowNjowNS4yNjM1MzkzOTEgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zZnRwLmMJMjAyNi0w OS0yMSAxMDo1NzoxNy41NTQ3MjEzMTMgKzAyMDAKK0BAIC0yNTk1LDIwICsyNTk1LDI1IEBACisg CQkJLyogUGxlYXNlIGtlZXAgaW4gc3luYyB3aXRoIHNzaC5jIC1YICovCisgCQkJaWYgKHN0cm5j bXAob3B0YXJnLCAiYnVmZmVyPSIsIDcpID09IDApIHsKKyAJCQkJciA9IHNjYW5fc2NhbGVkKG9w dGFyZyArIDcsICZsbHYpOworLQkJCQlpZiAociA9PSAwICYmIChsbHYgPD0gMCB8fCBsbHYgPiAy NTYgKiAxMDI0KSkgeworKwkJCQkvKiBkb24ndCBhc2sgZm9yIGEgYnVmZmVyIGxhcmdlciB0aGFu IHRoZSBtYXhpbXVtCisrCQkJCSAqIHNpemUgdGhhdCBTRlRQIGNhbiBoYW5kbGUgKi8KKysJCQkJ aWYgKHIgPT0gMCAmJiAobGx2IDw9IDAgfHwgbGx2ID4gKFNGVFBfTUFYX01TR19MRU5HVEggLSAx MDI0KSkpIHsKKyAJCQkJCXIgPSAtMTsKKyAJCQkJCWVycm5vID0gRUlOVkFMOworIAkJCQl9Cisg CQkJCWlmIChyID09IC0xKSB7CistCQkJCQlmYXRhbCgiSW52YWxpZCBidWZmZXIgc2l6ZSBcIiVz XCI6ICVzIiwKKysJCQkJCWZhdGFsKCJJbnZhbGlkIGJ1ZmZlciBzaXplLiBNdXN0IGJlIGJldHdl ZW4gMUIgYW5kIDI1NUtCLiBcIiVzXCI6ICVzIiwKKyAJCQkJCSAgICAgb3B0YXJnICsgNywgc3Ry ZXJyb3IoZXJybm8pKTsKKyAJCQkJfQorIAkJCQljb3B5X2J1ZmZlcl9sZW4gPSAoc2l6ZV90KWxs djsKKyAJCQl9IGVsc2UgaWYgKHN0cm5jbXAob3B0YXJnLCAibnJlcXVlc3RzPSIsIDEwKSA9PSAw KSB7CistCQkJCWxsdiA9IHN0cnRvbnVtKG9wdGFyZyArIDEwLCAxLCAyNTYgKiAxMDI0LAorKwkJ CQkvKiBtb3JlIHRoYW4gMTBrIHRvIDE1ayByZXF1ZXN0cyBzdGFydHMgc3RhbGxpbmcgdGhlIGNv bm5lY3Rpb24KKysJCQkJICogODE5MiAqIGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgMjU2TUIgb2Yg b3V0c3RhbmRpbmcgZGF0YS4KKysJCQkJICogaWYgdXNlcnMgbmVlZCBtb3JlIHRoZW4gdGhleSBu ZWVkIHRvIHVwIHRoZSBidWZmZXIgc2l6ZSAqLworKwkJCQlsbHYgPSBzdHJ0b251bShvcHRhcmcg KyAxMCwgMSwgOCAqIDEwMjQsCisgCQkJCSAgICAmZXJyc3RyKTsKKyAJCQkJaWYgKGVycnN0ciAh PSBOVUxMKSB7CistCQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMgIgorKwkJ CQkJZmF0YWwoIkludmFsaWQgbnVtYmVyIG9mIHJlcXVlc3RzLiBNdXN0IGJlIGJldHdlZW4gMSBh bmQgODE5Mi4gIgorIAkJCQkJICAgICJcIiVzXCI6ICVzIiwgb3B0YXJnICsgMTAsIGVycnN0cik7 CisgCQkJCX0KKyAJCQkJbnVtX3JlcXVlc3RzID0gKHNpemVfdClsbHY7CitkaWZmIC1OdXIgb3Bl bnNzaC0xMC41cDEub3JpZy9zZnRwLWNsaWVudC5jIG9wZW5zc2gtMTAuNXAxL3NmdHAtY2xpZW50 LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NmdHAtY2xpZW50LmMJMjAyNi0wOS0yMSAwNzow NjowNS4yNjMzMzg3ODAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zZnRwLWNsaWVudC5jCTIw MjYtMDktMjEgMDc6MDY6NTkuODk0ODQzMTI1ICswMjAwCitAQCAtNjAsNyArNjAsOCBAQAorICNk ZWZpbmUgREVGQVVMVF9DT1BZX0JVRkxFTgkzMjc2OAorIAorIC8qIERlZmF1bHQgbnVtYmVyIG9m IGNvbmN1cnJlbnQgeGZlciByZXF1ZXN0cyAoZml4IHNmdHAuMSBzY3AuMSBpZiBjaGFuZ2VkKSAq LworLSNkZWZpbmUgREVGQVVMVF9OVU1fUkVRVUVTVFMJNjQKKysvKiAxMDI0IHhmZXIgcmVxdWVz dHMgZ2l2ZXMgdXMgMzJNQiBvZiByZWNlaXZlIGJ1ZmZlciBzcGFjZSAqLworKyNkZWZpbmUgREVG QVVMVF9OVU1fUkVRVUVTVFMJMTAyNAorIAorIC8qIE1pbmltdW0gYW1vdW50IG9mIGRhdGEgdG8g cmVhZCBhdCBhIHRpbWUgKi8KKyAjZGVmaW5lIE1JTl9SRUFEX1NJWkUJNTEyCitkaWZmIC1OdXIg b3BlbnNzaC0xMC41cDEub3JpZy9zc2guMSBvcGVuc3NoLTEwLjVwMS9zc2guMQorLS0tIG9wZW5z c2gtMTAuNXAxLm9yaWcvc3NoLjEJMjAyNi0wOS0yMSAwNzowNjowNS41NjQyNjgwOTkgKzAyMDAK KysrKyBvcGVuc3NoLTEwLjVwMS9zc2guMQkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5NTI0NTI4NyAr MDIwMAorQEAgLTc3LDYgKzc3LDE0IEBACisgWDExIGNvbm5lY3Rpb25zLCBhcmJpdHJhcnkgVENQ IHBvcnRzIGFuZAorIC5VeCBOcyAtZG9tYWluCisgc29ja2V0cyBjYW4gYWxzbyBiZSBmb3J3YXJk ZWQgb3ZlciB0aGUgc2VjdXJlIGNoYW5uZWwuCisrLk5tCisraXMgYmluYXJ5IGNvbXBhdGlibGUg d2l0aCB0aGUgbW9yZSB3ZWxsIGtub3duIE9wZW5TU0ggYW5kIHVzZXMgdGhlIHNhbWUgY29uZmln dXJhdGlvbgorK2RpcmVjdGl2ZXMsIG1ldGhvZHMsIGFuZCBrZXl3b3JkcyBleGNlcHQgd2hlcmUg bm90ZWQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBkZWZhdWx0IHBvcnQuCisrSFBOLVNTSCBz ZXJ2ZXJzLCBieSBkZWZhdWx0LCB1c2UgcG9ydCAyMjIyIGZvciBjb25uZWN0aW9uLCBhbmQgYXMg c3VjaCwKKysuTm0KKytjbGllbnRzCisrYXR0ZW1wdCB0byBjb25uZWN0IG9uIHRoYXQgcG9ydC4g SWYgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCBvbiBwb3J0IDIyMjIgZmFpbHMgaXQgd2lsbCBmYWxs YmFjayB0bworK3BvcnQgMjIuIFBsZWFzZSBzZWUgdGhlIC1wIHN3aXRjaCBmb3IgbW9yZSBpbmZv cm1hdGlvbi4KKyAuUHAKKyAuTm0KKyBjb25uZWN0cyBhbmQgbG9ncyBpbnRvIHRoZSBzcGVjaWZp ZWQKK0BAIC01MjQsNiArNTMyLDEzIEBACisgUG9ydCB0byBjb25uZWN0IHRvIG9uIHRoZSByZW1v dGUgaG9zdC4KKyBUaGlzIGNhbiBiZSBzcGVjaWZpZWQgb24gYQorIHBlci1ob3N0IGJhc2lzIGlu IHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisrSFBOLVNTSCB1c2VzIGEgZGVmYXVsdCBwb3J0IG9m IDIyMjIuIEl0IHdpbGwgYXV0b21hdGljYWxseQorK2ZhbGxiYWNrIHRvIHVzZSB0aGUgU1NIIHN0 YW5kYXJkIHBvcnQgMjIgaWYgaXQgY2Fubm90IGNvbm5lY3QKKytvbiBwb3J0IDIyMjIuIFRoaXMg ZmFsbGJhY2sgYmVoYXZpb3VyIGNhbiBiZSBtb2RpZmllZCB3aXRoIHRoZQorK0ZhbGxiYWNrUG9y dCBvcHRpb24uIE5vdGU6IGlmIG91dGJvdW5kIHBvcnQgMjIyMiBpcworK2Jsb2NrZWQgaXQgbWF5 IGFwcGVhciB0aGF0IHRoZSBocG5zc2ggY2xpZW50IGlzIG5vbi1yZXNwb25zaXZlLiBJbiB0aGF0 IGV2ZW50LAorK2VpdGhlciBzcGVjaWZ5IHRoZSBjb3JyZWN0IHBvcnQgb3IgdXNlIHRoZSBDb25u ZWN0VGltZW91dCBvcHRpb24KKyt0byB0cmlnZ2VyIHRoZSBwb3J0IGZhbGxiYWNrIG1vcmUgcXVp Y2tseS4KKyAuUHAKKyAuSXQgRmwgUSBBciBxdWVyeV9vcHRpb24KKyBRdWVyaWVzIGZvciB0aGUg YWxnb3JpdGhtcyBzdXBwb3J0ZWQgYnkgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CitA QCAtMTcyOCwzICsxNzQzLDcgQEAKKyBjcmVhdGVkIE9wZW5TU0guCisgTWFya3VzIEZyaWVkbCBj b250cmlidXRlZCB0aGUgc3VwcG9ydCBmb3IgU1NICisgcHJvdG9jb2wgdmVyc2lvbnMgMS41IGFu ZCAyLjAuCisrQ2hyaXMgUmFwaWVyLCBNaWNoYWVsIFN0ZXZlbnMsIEJlbiBCZW5uZXQsIGFuZCBN aWtlIFRhc290YSBkZXZlbG9wZWQKKyt0aGUgSFBOIGV4dGVuc2lvbnMgYXQgdGhlIFBpdHRzYnVy Z2ggU3VwZXJjb211dGluZyBDZW50ZXIgd2l0aCBncmFudHMKKytmcm9tIENpc2NvLCB0aGUgTmF0 aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZSwgYW5kIHRoZSBOYXRpb25hbCBTY2llbmNlCisrRm91 bmRhdGlvbi4KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaF9hcGkuYyBvcGVuc3No LTEwLjVwMS9zc2hfYXBpLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaF9hcGkuYwkyMDI2 LTA5LTIxIDA3OjA2OjA1LjQ1NDgyODE4MiArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaF9h cGkuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5NTM5MTk1MCArMDIwMAorQEAgLTQyNyw3ICs0Mjcs NyBAQAorIAljaGFyICpjcDsKKyAJaW50IHI7CisgCistCWlmICgociA9IHNzaGJ1Zl9wdXRmKGJh bm5lciwgIlNTSC0yLjAtJS4xMDBzXHJcbiIsIFNTSF9WRVJTSU9OKSkgIT0gMCkKKysJaWYgKChy ID0gc3NoYnVmX3B1dGYoYmFubmVyLCAiU1NILTIuMC0lLjEwMHNcclxuIiwgU1NIX1JFTEVBU0Up KSAhPSAwKQorIAkJcmV0dXJuIHI7CisgCWlmICgociA9IHNzaGJ1Zl9wdXRiKHNzaF9wYWNrZXRf Z2V0X291dHB1dChzc2gpLCBiYW5uZXIpKSAhPSAwKQorIAkJcmV0dXJuIHI7CitkaWZmIC1OdXIg b3BlbnNzaC0xMC41cDEub3JpZy9zc2hidWYuYyBvcGVuc3NoLTEwLjVwMS9zc2hidWYuYworLS0t IG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoYnVmLmMJMjAyNi0wOC0xMSAwNDoyMjoxNy4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hidWYuYwkyMDI2LTA5LTIxIDA3OjA2OjU5 Ljg5NTUxNzE1NSArMDIwMAorQEAgLTI4LDYgKzI4LDggQEAKKyAjaW5jbHVkZSAic3NoYnVmLmgi CisgI2luY2x1ZGUgIm1pc2MuaCIKKyAKKysjZGVmaW5lIEJVRl9XQVRFUlNIRUQgMjU2KjEwMjQK KysKKyAjaWZkZWYgU1NIQlVGX0RFQlVHCisgIyBkZWZpbmUgU1NIQlVGX1RFTEwod2hhdCkgZG8g eyBcCisgCQlwcmludGYoIiVzOiVkICVzOiAlcyBzaXplICV6dSBhbGxvYyAlenUgb2ZmICV6dSBt YXggJXp1XG4iLCBcCitAQCAtNDksOCArNTEsMjkgQEAKKyAJaW50IHJlYWRvbmx5OwkJLyogUmVm ZXJzIHRvIGV4dGVybmFsLCBjb25zdCBkYXRhICovCisgCXVfaW50IHJlZmNvdW50OwkJLyogVHJh Y2tzIHNlbGYgYW5kIG51bWJlciBvZiBjaGlsZCBidWZmZXJzICovCisgCXN0cnVjdCBzc2hidWYg KnBhcmVudDsJLyogSWYgY2hpbGQsIHBvaW50ZXIgdG8gcGFyZW50ICovCisrCWNoYXIgbGFiZWxb TUFYX0xBQkVMX0xFTl07ICAgLyogU3RyaW5nIGZvciBidWZmZXIgbGFiZWwgLSBkZWJ1Z2dpbmcg dXNlICovCisrCWludCB0eXBlOyAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgYnVmZmVyIGVudW0g KHNzaGJ1Zl90eXBlcykqLworIH07CisgCisrLyogdXBkYXRlIHRoZSBsYWJlbCBzdHJpbmcgZm9y IGEgZ2l2ZW4gc3NoYnVmLiBVc2VmdWwKKysgKiBmb3IgZGVidWdnaW5nICovCisrdm9pZAorK3Nz aGJ1Zl9yZWxhYmVsKHN0cnVjdCBzc2hidWYgKmJ1ZiwgY29uc3QgY2hhciAqbGFiZWwpCisrewor KwlpZiAobGFiZWwgIT0gTlVMTCkKKysJCXN0cm5jcHkoYnVmLT5sYWJlbCwgbGFiZWwsIE1BWF9M QUJFTF9MRU4tMSk7CisrfQorKworKy8qIHNldCB0aGUgdHlwZSAoZnJvbSBlbnVtIHNzaGJ1Zl90 eXBlKSBvZiB0aGUgZ2l2ZW4gc3NoYnVmLgorKyAqIFRoZSBwdXJwb3NlIGlzIHRvIGFsbG93IGRp ZmZlcmVudCBjbGFzc2VzIG9mIGJ1ZmZlcnMgdG8KKysgKiBmb2xsb3cgZGlmZmVyZW50IGNvZGUg cGF0aHMgaWYgbmVjZXNzYXJ5ICovCisrdm9pZAorK3NzaGJ1Zl90eXBlKHN0cnVjdCBzc2hidWYg KmJ1ZiwgaW50IHR5cGUpCisreworKwlpZiAodHlwZSA8IEJVRl9NQVhfVFlQRSkKKysJCWJ1Zi0+ dHlwZSA9IHR5cGU7CisrfQorKworIHN0YXRpYyBpbmxpbmUgaW50Cisgc3NoYnVmX2NoZWNrX3Nh bml0eShjb25zdCBzdHJ1Y3Qgc3NoYnVmICpidWYpCisgeworQEAgLTkwLDcgKzExMyw3IEBACisg fQorIAorIHN0cnVjdCBzc2hidWYgKgorLXNzaGJ1Zl9uZXcodm9pZCkKKytzc2hidWZfbmV3X2xh YmVsIChjb25zdCBjaGFyICpsYWJlbCkKKyB7CisgCXN0cnVjdCBzc2hidWYgKnJldDsKKyAKK0BA IC0xMDEsNiArMTI0LDggQEAKKyAJcmV0LT5yZWFkb25seSA9IDA7CisgCXJldC0+cmVmY291bnQg PSAxOworIAlyZXQtPnBhcmVudCA9IE5VTEw7CisrCWlmIChsYWJlbCAhPSBOVUxMKQorKwkJc3Ry bmNweShyZXQtPmxhYmVsLCBsYWJlbCwgTUFYX0xBQkVMX0xFTi0xKTsKKyAJaWYgKChyZXQtPmNk ID0gcmV0LT5kID0gY2FsbG9jKDEsIHJldC0+YWxsb2MpKSA9PSBOVUxMKSB7CisgCQlmcmVlKHJl dCk7CisgCQlyZXR1cm4gTlVMTDsKK0BAIC0yOTAsNyArMzE1LDIxIEBACisgeworIAlpZiAoc3No YnVmX2NoZWNrX3Nhbml0eShidWYpICE9IDAgfHwgYnVmLT5yZWFkb25seSB8fCBidWYtPnJlZmNv dW50ID4gMSkKKyAJCXJldHVybiAwOworLQlyZXR1cm4gYnVmLT5tYXhfc2l6ZSAtIChidWYtPnNp emUgLSBidWYtPm9mZik7CisrCS8qIFJlc2VydmUgfjQuNzYlICgxLzIxKSBoZWFkcm9vbSBvbiBj aGFubmVsIGlucHV0IGJ1ZmZlcnMgdG8gcHJldmVudAorKwkgKiBhIHBhdGhvbG9naWNhbCBzdGF0 ZSBkdXJpbmcgYnVsayBkYXRhIHRyYW5zZmVycy4gVGhlIGhlYWRyb29tIHNjYWxlcworKwkgKiB3 aXRoIGJ1ZmZlciBzaXplIGFuZCBnaXZlcyB0aGUgY2hhbm5lbCB0aW1lIHRvIGRyYWluIGJlZm9y ZSBhY2NlcHRpbmcKKysJICogbW9yZSBkYXRhLCBzbW9vdGhpbmcgZmxvdyBjb250cm9sIGFuZCBy ZWR1Y2luZyBidWZmZXIgcmVhbGxvY2F0aW9uLgorKwkgKiBXaGVuIHRoZSBidWZmZXIgaXMgZnVs bGVyIHRoYW4gdGhlIGhlYWRyb29tIGFsbG93cyB3ZSBtdXN0IHJldHVybiAwLAorKwkgKiBub3Qg dW5kZXJmbG93OiBzaXplX3QgaXMgdW5zaWduZWQgc28gYSBuYWl2ZSBzdWJ0cmFjdGlvbiB3cmFw cyB0bworKwkgKiBTSVpFX01BWCwgY2F1c2luZyB0aGUgY2FsbGVyIHRvIHJlYWQgaW50byBhIG5l YXJseS1mdWxsIGJ1ZmZlciBhbmQKKysJICogdGhyYXNoIHdpbmRvdyB1cGRhdGVzLiBPbmx5IGFw cGxpZWQgdG8gY2hhbm5lbCBpbnB1dCBidWZmZXJzIGFzCisrCSAqIG90aGVyIGJ1ZmZlciB0eXBl cyBmYWlsIHRoZSByZWdyZXNzaW9uIHVuaXQgdGVzdHMgd2l0aCBoZWFkcm9vbS4gKi8KKysJaWYg KGJ1Zi0+dHlwZSA9PSBCVUZfQ0hBTk5FTF9JTlBVVCkgeworKwkJc2l6ZV90IGhlYWRyb29tID0g YnVmLT5tYXhfc2l6ZSAtIGJ1Zi0+bWF4X3NpemUgLyAyMTsKKysJCXNpemVfdCB1c2VkID0gYnVm LT5zaXplIC0gYnVmLT5vZmY7CisrCQlyZXR1cm4gKHVzZWQgPj0gaGVhZHJvb20pID8gMCA6IGhl YWRyb29tIC0gdXNlZDsKKysJfSBlbHNlCisrCQlyZXR1cm4gYnVmLT5tYXhfc2l6ZSAtIChidWYt PnNpemUgLSBidWYtPm9mZik7CisgfQorIAorIGNvbnN0IHVfY2hhciAqCitAQCAtMzUwLDkgKzM4 OSwzNiBAQAorIAkgKi8KKyAJbmVlZCA9IGxlbiArIGJ1Zi0+c2l6ZSAtIGJ1Zi0+YWxsb2M7Cisg CXJsZW4gPSBST1VORFVQKGJ1Zi0+YWxsb2MgKyBuZWVkLCBTU0hCVUZfU0laRV9JTkMpOworKwkv KiBXaXRoIHRoZSBjaGFuZ2VzIGluIDguOSB0aGUgb3V0cHV0IGJ1ZmZlciBlbmQgdXAgZ3Jvd2lu ZyBwcmV0dHkKKysJICogc2xvd2x5LiBJdCdzIGtub3dzIHRoYXQgaXQgbmVlZHMgdG8gZ3JvdyBi dXQgaXQgb25seSBkb2VzIHNvIDMySworKwkgKiBhdCBhIHRpbWUuIFRoaXMgbWVhbnMgYSBsb3Qg b2YgY2FsbHMgdG8gcmVhbGxvYyBhbmQgbWVtY3B5IHdoaWNoCisrCSAqIGtpbGxzIHBlcmZvcm1h bmNlIHVudGlsIHRoZSBidWZmZXIgcmVhY2hlcyBzb21lIG1heGltdW0gc2l6ZS4KKysJICogU28g d2UgZXhwbGljaXRseSB0ZXN0IGZvciBhIGJ1ZmZlciB0aGF0J3MgdHJ5aW5nIHRvIGdyb3cgYW5k CisrCSAqIGlmIGl0IGlzIHRoZW4gd2UgcHVzaCB0aGUgZ3Jvd3RoIGJ5IDRNQiBhdCBhIHRpbWUu IFRoaXMgY2FuIHJlc3VsdCBpbgorKwkgKiB0aGUgYnVmZmVyIGJlaW5nIG92ZXIgYWxsb2NhdGVk IChpbiB0ZXJtcyBvZiBhY3R1YWwgbmVlZHMpIGJ1dCB0aGUKKysJICogcHJvY2VzcyBpcyBmYXN0 LiBUaGlzIHNpZ25pZmljYW50bHkgcmVkdWNlcyBvdmVyaGVhZAorKwkgKiBhbmQgaW1wcm92ZXMg cGVyZm9ybWFuY2UuIEluIHRoaXMgY2FzZSB3ZSBsb29rIGZvciBhIGJ1ZmZlciB0aGF0IGlzIHRy eWluZworKwkgKiB0byBncm93IGxhcmdlciB0aGFuIEJVRl9XQVRFUlNIRUQgKDI1NioxMDI0IHRh a2VuIGZyb20gUEFDS0VUX01BWF9TSVpFKQorKwkgKiBhbmQgZXhwbGNpdGx5IGNoZWNrIHRoYXQg dGhlIGJ1ZmZlciBpcyBiZWluZyB1c2VkIGZvciBpbmJvdW5kIG91dGJvdW5kCisrCSAqIGNoYW5u ZWwgYnVmZmVyaW5nLgorKwkgKiBVcGRhdGVkIGZvciAxOC40LjEgLWNqciAwNC8yMC8yNAorKwkg Ki8KKysJaWYgKHJsZW4gPiBCVUZfV0FURVJTSEVEICYmIChidWYtPnR5cGUgPT0gQlVGX0NIQU5O RUxfT1VUUFVUIHx8IGJ1Zi0+dHlwZSA9PSBCVUZfQ0hBTk5FTF9JTlBVVCkpIHsKKysJCS8qIGRl YnVnX2YgKCJQcmlvcjogbGFiZWw6ICVzLCAlcCwgcmxlbiBpcyAlenUgbmVlZCBpcyAlenUgbWF4 X3NpemUgaXMgJXp1IiwKKysJCSAgIGJ1Zi0+bGFiZWwsIGJ1ZiwgcmxlbiwgbmVlZCwgYnVmLT5t YXhfc2l6ZSk7ICovCisrCQkvKiBlYXNpZXN0IHRoaW5nIHRvIGRvIGlzIGdyb3cgdGhlIG51ZmZl ciBieSA0TUIgZWFjaCB0aW1lLiBJdCBtaWdodCBlbmQKKysJCSAqIHVwIGJlaW5nIHNvbWV3aGF0 IG92ZXJhbGxvY2F0ZWQgYnV0IHdvcmtzIHF1aWNrbHkgKi8KKysJCW5lZWQgPSAoNCoxMDI0KjEw MjQpOworKwkJcmxlbiA9IFJPVU5EVVAoYnVmLT5hbGxvYyArIG5lZWQsIFNTSEJVRl9TSVpFX0lO Qyk7CisrCQkvKiBkZWJ1Z19mICgiUG9zdDogbGFiZWw6ICVzLCAlcCwgcmxlbiBpcyAlenUgbmVl ZCBpcyAlenUgbWF4X3NpemUgaXMgJXp1IiwgKi8KKysJCS8qIAkgYnVmLT5sYWJlbCwgYnVmLCBy bGVuLCBuZWVkLCBidWYtPm1heF9zaXplKTsgKi8KKysJfQorIAlTU0hCVUZfREJHKCgibmVlZCAl enUgaW5pdGlhbCBybGVuICV6dSIsIG5lZWQsIHJsZW4pKTsKKysKKysJLyogcmxlbiBtaWdodCBi ZSBhYm92ZSB0aGUgbWF4IGFsbG9jYXRpb24gKi8KKyAJaWYgKHJsZW4gPiBidWYtPm1heF9zaXpl KQorLQkJcmxlbiA9IGJ1Zi0+YWxsb2MgKyBuZWVkOworKwkJcmxlbiA9IGJ1Zi0+bWF4X3NpemU7 CisrCisgCVNTSEJVRl9EQkcoKCJhZGp1c3RlZCBybGVuICV6dSIsIHJsZW4pKTsKKyAJaWYgKChk cCA9IHJlY2FsbG9jYXJyYXkoYnVmLT5kLCBidWYtPmFsbG9jLCBybGVuLCAxKSkgPT0gTlVMTCkg eworIAkJU1NIQlVGX0RCRygoInJlYWxsb2MgZmFpbCIpKTsKK2RpZmYgLU51ciBvcGVuc3NoLTEw LjVwMS5vcmlnL3NzaGJ1Zi5oIG9wZW5zc2gtMTAuNXAxL3NzaGJ1Zi5oCistLS0gb3BlbnNzaC0x MC41cDEub3JpZy9zc2hidWYuaAkyMDI2LTA4LTExIDA0OjIyOjE3LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL3NzaGJ1Zi5oCTIwMjYtMDktMjEgMTE6MzE6MjguNzg2NTE2NTc3 ICswMjAwCitAQCAtMzYsMTggKzM2LDQ5IEBACisgI2RlZmluZSBFVlBfUEtFWQl2b2lkCisgI2Vu ZGlmIC8qIFdJVEhfT1BFTlNTTCAqLworIAorLSNkZWZpbmUgU1NIQlVGX1NJWkVfTUFYCQkweDgw MDAwMDAJLyogSGFyZCBtYXhpbXVtIHNpemUgKi8KKysjZGVmaW5lIFNTSEJVRl9TSVpFX01BWAkJ MHg4MDAwMDAwCS8qIEhhcmQgbWF4aW11bSBzaXplIDEyOE1CICovCisgI2RlZmluZSBTU0hCVUZf UkVGU19NQVgJCTB4MTAwMDAwCS8qIE1heCBjaGlsZCBidWZmZXJzICovCisgI2RlZmluZSBTU0hC VUZfTUFYX0JJR05VTQkoMTYzODQgLyA4KQkvKiBNYXggYmlnbnVtICpieXRlcyogKi8KKyAjZGVm aW5lIFNTSEJVRl9NQVhfRUNQT0lOVAkoKDUyOCAqIDIgLyA4KSArIDEpIC8qIE1heCBFQyBwb2lu dCAqYnl0ZXMqICovCisrI2RlZmluZSBNQVhfTEFCRUxfTEVOCQk2NCAvKm1heGltdW0gc2l6ZSBv ZiBzc2hidWYgbGFiZWwgKi8KKysjZGVmaW5lIHNzaGJ1Zl9uZXcoKSBzc2hidWZfbmV3X2xhYmVs KF9fZnVuY19fKQorIAorIHN0cnVjdCBzc2hidWY7CisgCisrZW51bSBidWZmZXJfdHlwZXMgewor KwlCVUZfQ0hBTk5FTF9PVVRQVVQsCisrCUJVRl9DSEFOTkVMX0lOUFVULAorKwlCVUZfQ0hBTk5F TF9FWFRFTkRFRCwKKysJQlVGX1BBQ0tFVF9JTlBVVCwKKysJQlVGX1BBQ0tFVF9JTkNPTUlORywK KysJQlVGX1BBQ0tFVF9PVVRQVVQsCisrCUJVRl9QQUNLRVRfT1VUR09JTkcsCisrCUJVRl9NQVhf VFlQRQorK307CisrCisgLyoKKyAgKiBDcmVhdGUgYSBuZXcgc3NoYnVmIGJ1ZmZlci4KKyAgKiBS ZXR1cm5zIHBvaW50ZXIgdG8gYnVmZmVyIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gYWxsb2NhdGlv biBmYWlsdXJlLgorICAqLworLXN0cnVjdCBzc2hidWYgKnNzaGJ1Zl9uZXcodm9pZCk7CisrLyog c3RydWN0IHNzaGJ1ZiAqc3NoYnVmX25ldyh2b2lkKTsqLworKworKy8qCisrICogQ3JlYXRlIGEg bmV3IGxhYmVsZWQgc3NoYnVmIGJ1ZmZlci4KKysgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYnVmZmVy IG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgorKyAqLworK3N0cnVj dCBzc2hidWYgKnNzaGJ1Zl9uZXdfbGFiZWwoY29uc3QgY2hhciAqKTsKKysKKysvKgorKyAqIHJl bGFiZWwgdGhlIHNzaGJ1ZiBzdHJ1Y3QKKysgKi8KKyt2b2lkIHNzaGJ1Zl9yZWxhYmVsKHN0cnVj dCBzc2hidWYgKiwgY29uc3QgY2hhciAqKTsKKysKKysvKgorKyAqIGFzc2lnbiBhIHR5cGUgKGZy b20gdGhlIGJ1ZmZlcl90eXBlcyBlbnVtKSB0bworKyAqIHRoZSBidWZmZXIuIFVzZWQgdG8gcXVp Y2tseSBpZGVudGlmeSB0aGUgcHVycG9zZSBvZgorKyAqIHRoZSBidWZmZXIuCisrICovCisrdm9p ZCBzc2hidWZfdHlwZShzdHJ1Y3Qgc3NoYnVmICosIGludCk7CisgCisgLyoKKyAgKiBDcmVhdGUg YSBuZXcsIHJlYWQtb25seSBzc2hidWYgYnVmZmVyIGZyb20gZXhpc3RpbmcgZGF0YS4KK0BAIC04 NCwxMiArMTE1LDEzIEBACisgdm9pZAlzc2hidWZfcmVzZXQoc3RydWN0IHNzaGJ1ZiAqYnVmKTsK KyAKKyAvKgorLSAqIFJldHVybiB0aGUgbWF4aW11bSBzaXplIG9mIGJ1ZgorKyAqIFJldHVybiB0 aGUgbWF4aW11bSB1c2FibGUgc2l6ZSBvZiBidWYKKyAgKi8KKyBzaXplX3QJc3NoYnVmX21heF9z aXplKGNvbnN0IHN0cnVjdCBzc2hidWYgKmJ1Zik7CisgCisgLyoKKy0gKiBTZXQgdGhlIG1heGlt dW0gc2l6ZSBvZiBidWYKKysgKiBTZXQgdGhlIG1heGltdW0gdXNhYmxlIHNpemUgb2YgYnVmLiBO b3RlIHRoYXQgdGhlIGJ1ZmZlciBtYXkgY29uc3VtZSB1cAorKyAqIHRvIDJ4IHRoaXMgbWVtb3J5 IHBsdXMgYm9va2tlZXBpbmcgb3ZlcmhlYWQuCisgICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9y IGEgbmVnYXRpdmUgU1NIX0VSUl8qIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAgKi8KKyBpbnQJ c3NoYnVmX3NldF9tYXhfc2l6ZShzdHJ1Y3Qgc3NoYnVmICpidWYsIHNpemVfdCBtYXhfc2l6ZSk7 CitAQCAtMzgzLDYgKzQxNSw5IEBACisgCQkoKHVfY2hhciAqKShwKSlbMV0gPSBfX3YgJiAweGZm OyBcCisgCX0gd2hpbGUgKDApCisgCisrCisrdm9pZCBzc2hidWZfc2V0X3dpbmRvd19tYXgoc3Ry dWN0IHNzaGJ1ZiAqYnVmICwgc2l6ZV90IGxlbik7CisrCisgLyogSW50ZXJuYWwgZGVmaW5pdGlv bnMgZm9sbG93LiBFeHBvc2VkIGZvciByZWdyZXNzIHRlc3RzICovCisgI2lmZGVmIFNTSEJVRl9J TlRFUk5BTAorIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoLmMgb3BlbnNzaC0x MC41cDEvc3NoLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaC5jCTIwMjYtMDktMjEgMDc6 MDY6MDUuNTY0Njg4NjQ5ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoLmMJMjAyNi0wOS0y MSAwOTo1MjoxNS4yNTcxNTQ0ODggKzAyMDAKK0BAIC05OCw2ICs5OCw3IEBACisgI2luY2x1ZGUg InNzaGVyci5oIgorICNpbmNsdWRlICJ1dGY4LmgiCisgI2luY2x1ZGUgImhvc3RmaWxlLmgiCisr I2luY2x1ZGUgImNpcGhlci1zd2l0Y2guaCIKKyAKKyAjaWZkZWYgRU5BQkxFX1BLQ1MxMQorICNp bmNsdWRlICJzc2gtcGtjczExLmgiCitAQCAtMTA4MCw2ICsxMDgxLDEwIEBACisgCQkJYnJlYWs7 CisgCQljYXNlICdUJzoKKyAJCQlvcHRpb25zLnJlcXVlc3RfdHR5ID0gUkVRVUVTVF9UVFlfTk87 CisrCQkJLyogZW5zdXJlIHRoYXQgdGhlIHVzZXIgZG9lc24ndCB0cnkgdG8gYmFja2Rvb3IgYSAq LworKwkJCS8qIG51bGwgY2lwaGVyIHN3aXRjaCBvbiBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uICov CisrCQkJLyogc28gZXhwbGljaXRseSBkaXNhYmxlIGl0IG5vIG1hdHRlciB3aGF0ICovCisrCQkJ b3B0aW9ucy5ub25lX3N3aXRjaD0wOworIAkJCWJyZWFrOworIAkJY2FzZSAnbyc6CisgCQkJbGlu ZSA9IHhzdHJkdXAob3B0YXJnKTsKK0BAIC0xNzU4LDEwICsxNzYzLDM0IEBACisgCX0KKyAKKyAJ LyogT3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBob3N0LiAqLworKwkvKiB3ZSB0cnkg aW5pdGlhbGx5IG9uIHRoZSBkZWZhdWx0IGhwbnNzaCBwb3J0IHJldHVybmVkIGJ5CisrCSAqIGRl ZmF1bHRfc3NoX3BvcnQoKSB3aGljaCBub3cgcmV0dXJucyBIUE5TU0hfREVGQVVMVF9QT1JUCisr CSAqIGlmIHRoYXQgZmFpbHMgd2UgcmVzZXQgdGhlIHBvcnQgdG8gU1NIX0RFRkFVTFRfUE9SVAor KwkgKiAtY2pyIDgvMTcvMjAyMgorKwkgKi8KKyt0cnlhZ2FpbjoKKyAJaWYgKHNzaF9jb25uZWN0 KHNzaCwgaG9zdCwgb3B0aW9ucy5ob3N0X2FyZywgYWRkcnMsICZob3N0YWRkciwKKyAJICAgIG9w dGlvbnMucG9ydCwgb3B0aW9ucy5jb25uZWN0aW9uX2F0dGVtcHRzLAorLQkgICAgJnRpbWVvdXRf bXMsIG9wdGlvbnMudGNwX2tlZXBfYWxpdmUpICE9IDApCisrCSAgICAmdGltZW91dF9tcywgb3B0 aW9ucy50Y3Bfa2VlcF9hbGl2ZSkgIT0gMCkgeworKwkJLyogY291bGQgbm90IGNvbm5lY3QuIElm IHRoZSBwb3J0IHJlcXVlc3RlZCBpcyB0aGUgc2FtZSBhcworKwkJICogaHBuc3NoIGRlZmF1bHQg cG9ydCB0aGVuIGZhbGxiYWNrLiBPdGhlcndpc2UsIGV4aXQgKi8KKysJCWlmICgob3B0aW9ucy5w b3J0ID09IGRlZmF1bHRfc3NoX3BvcnQoKSkgJiYgb3B0aW9ucy5mYWxsYmFjaykgeworKwkJCWlu dCBwb3J0ID0gb3B0aW9ucy5mYWxsYmFja19wb3J0OworKwkJCW9wdGlvbnMucG9ydCA9IHBvcnQ7 CisrCQkJZnByaW50ZihzdGRlcnIsICJIUE5TU0ggc2VydmVyIG5vdCBhdmFpbGFibGUgb24gZGVm YXVsdCBwb3J0ICVkXG4iLAorKwkJCQlkZWZhdWx0X3NzaF9wb3J0KCkpOworKwkJCWlmIChwb3J0 ID09IDIyKQorKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkZhbGxpbmcgYmFjayB0byBPcGVuU1NIIGRl ZmF1bHQgcG9ydCAlZFxuIiwKKysJCQkJCXBvcnQpOworKwkJCWVsc2UKKysJCQkJZnByaW50Zihz dGRlcnIsICJGYWxsaW5nIGJhY2sgdG8gdXNlciBkZWZpbmVkIHBvcnQgJWRcbiIsCisrCQkJCQlw b3J0KTsKKysJCQlhZGRycyA9IHJlc29sdmVfaG9zdChob3N0LCBwb3J0LCAxLAorKwkJCQkJICAg ICBjbmFtZSwgc2l6ZW9mKGNuYW1lKSk7CisrCQkJZ290byB0cnlhZ2FpbjsKKysJCX0KKyAJCWV4 aXQoMjU1KTsKKysJfQorIAorIAorIAlzc2hfcGFja2V0X3NldF90aW1lb3V0KHNzaCwgb3B0aW9u cy5zZXJ2ZXJfYWxpdmVfaW50ZXJ2YWwsCitAQCAtMTkzOSw4ICsxOTY4LDEwIEBACisgCisgLyog RG8gZm9yaygpIGFmdGVyIGF1dGhlbnRpY2F0aW9uLiBVc2VkIGJ5ICJzc2ggLWYiICovCisgc3Rh dGljIHZvaWQKKy1mb3JrX3Bvc3RhdXRoKHZvaWQpCisrZm9ya19wb3N0YXV0aChzdHJ1Y3Qgc3No ICpzc2gpCisgeworKwlpbnQgZmlwcyA9IDA7CisrCisgCWlmIChuZWVkX2NvbnRyb2xwZXJzaXN0 X2RldGFjaCkKKyAJCWNvbnRyb2xfcGVyc2lzdF9kZXRhY2goKTsKKyAJZGVidWcoImZvcmtpbmcg dG8gYmFja2dyb3VuZCIpOworQEAgLTE5NDksMTcgKzE5ODAsMjkgQEAKKyAJCWZhdGFsKCJkYWVt b24oKSBmYWlsZWQ6ICUuMjAwcyIsIHN0cmVycm9yKGVycm5vKSk7CisgCWlmIChzdGRmZF9kZXZu dWxsKDEsIDEsICEobG9nX2lzX29uX3N0ZGVycigpICYmIGRlYnVnX2ZsYWcpKSA9PSAtMSkKKyAJ CWVycm9yX2YoInN0ZGZkX2Rldm51bGwgZmFpbGVkIik7CisrCS8qIHdlIGRvIHRoZSBjaXBoZXIg c3dpdGNoIGhlcmUgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNsaWVudAorKwkgKiBpcyBmb3JraW5n IG9yIGhhcyBhIGRlbGF5ZWQgZm9yay4KKysJICogSWYgRklQUyBtb2RlIGV4aXN0cyBhbmQgaXMg ZW5hYmxlZCB0aGVuIG5vIHBhcmFsbGVsIGNpcGhlcnMuCisrCSAqLworKwlmaXBzID0gZmlwc19l bmFibGVkKCk7CisrCWlmIChmaXBzKQorKwkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVk LiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBkaXNhYmxlZCIpOworKwllbHNlCisrCQlkZWJ1ZzJfZigi RklQUyBtb2RlIG5vdCBmb3VuZCBvciBkaXNhYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZW5h YmxlZCIpOworKworKwlpZiAoKG9wdGlvbnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IDApICYm IChmaXBzID09IDApKQorKwkJY2lwaGVyX3N3aXRjaChzc2gpOworIH0KKyAKKyBzdGF0aWMgdm9p ZAorLWZvcndhcmRpbmdfc3VjY2Vzcyh2b2lkKQorK2ZvcndhcmRpbmdfc3VjY2VzcyhzdHJ1Y3Qg c3NoICpzc2gpCisgeworIAlpZiAoZm9yd2FyZF9jb25maXJtc19wZW5kaW5nID09IC0xKQorIAkJ cmV0dXJuOworIAlpZiAoLS1mb3J3YXJkX2NvbmZpcm1zX3BlbmRpbmcgPT0gMCkgeworIAkJZGVi dWdfZigiYWxsIGV4cGVjdGVkIGZvcndhcmRpbmcgcmVwbGllcyByZWNlaXZlZCIpOworIAkJaWYg KG9wdGlvbnMuZm9ya19hZnRlcl9hdXRoZW50aWNhdGlvbikKKy0JCQlmb3JrX3Bvc3RhdXRoKCk7 CisrCQkJZm9ya19wb3N0YXV0aChzc2gpOworIAl9IGVsc2UgeworIAkJZGVidWcyX2YoIiVkIGV4 cGVjdGVkIGZvcndhcmRpbmcgcmVwbGllcyByZW1haW5pbmciLAorIAkJICAgIGZvcndhcmRfY29u ZmlybXNfcGVuZGluZyk7CitAQCAtMjAzNiw3ICsyMDc5LDcgQEAKKyAJCQkJICAgICJmb3IgbGlz dGVuIHBvcnQgJWQiLCByZndkLT5saXN0ZW5fcG9ydCk7CisgCQl9CisgCX0KKy0JZm9yd2FyZGlu Z19zdWNjZXNzKCk7CisrCWZvcndhcmRpbmdfc3VjY2Vzcyhzc2gpOworIH0KKyAKKyBzdGF0aWMg dm9pZAorQEAgLTIwNjMsNyArMjEwNiw3IEBACisgCX0KKyAKKyAJZGVidWdfZigidHVubmVsIGZv cndhcmQgZXN0YWJsaXNoZWQsIGlkPSVkIiwgaWQpOworLQlmb3J3YXJkaW5nX3N1Y2Nlc3MoKTsK KysJZm9yd2FyZGluZ19zdWNjZXNzKHNzaCk7CisgfQorIAorIHN0YXRpYyB2b2lkCitAQCAtMjI1 Nyw2ICsyMzAwLDE1IEBACisgCSAgICBOVUxMLCBmaWxlbm8oc3RkaW4pLCBjb21tYW5kLCBlbnZp cm9uKTsKKyB9CisgCisrLyogdGhpcyB1c2VkIHRvIGRvIGEgbG90IG1vcmUgYnV0IG5vdyBpdCBq dXN0IGNoZWNrcyB0byBzZWUKKysgKiBpZiB3ZSBhcmUgZGlzYWJsaW5nIGhwbiAqLworK3N0YXRp YyB2b2lkCisraHBuX29wdGlvbnNfaW5pdChzdHJ1Y3Qgc3NoICpzc2gpCisreworKwljaGFubmVs X3NldF9ocG5fZGlzYWJsZWQob3B0aW9ucy5ocG5fZGlzYWJsZWQpOworKwlkZWJ1Z19mKCJIUE4g ZGlzYWJsZWQ6ICVkIiwgb3B0aW9ucy5ocG5fZGlzYWJsZWQpOworK30KKysKKyAvKiBvcGVuIG5l dyBjaGFubmVsIGZvciBhIHNlc3Npb24gKi8KKyBzdGF0aWMgaW50Cisgc3NoX3Nlc3Npb24yX29w ZW4oc3RydWN0IHNzaCAqc3NoKQorQEAgLTIyNzgsNiArMjMzMCw3IEBACisgCXdpbmRvdyA9IENI QU5fU0VTX1dJTkRPV19ERUZBVUxUOworIAlwYWNrZXRtYXggPSBDSEFOX1NFU19QQUNLRVRfREVG QVVMVDsKKyAJaWYgKHR0eV9mbGFnKSB7CisrCQl3aW5kb3cgPSBDSEFOX1NFU19XSU5ET1dfREVG QVVMVDsKKyAJCXdpbmRvdyA+Pj0gMTsKKyAJCXBhY2tldG1heCA+Pj0gMTsKKyAJfQorQEAgLTIy ODUsNiArMjMzOCwxMyBAQAorIAkgICAgInNlc3Npb24iLCBTU0hfQ0hBTk5FTF9PUEVOSU5HLCBp biwgb3V0LCBlcnIsCisgCSAgICB3aW5kb3csIHBhY2tldG1heCwgQ0hBTl9FWFRFTkRFRF9XUklU RSwKKyAJICAgICJjbGllbnQtc2Vzc2lvbiIsIENIQU5ORUxfTk9OQkxPQ0tfU1RESU8pOworKwor KwkvKiBUT0RPOiBJcyB0aGlzIHRoZSByaWdodCBwbGFjZSBmb3IgdGhlc2Ugb3B0aW9ucz8gKi8K KysJaWYgKG9wdGlvbnMudGNwX3Jjdl9idWZfcG9sbCA+IDAgJiYgIW9wdGlvbnMuaHBuX2Rpc2Fi bGVkKSB7CisrCQljLT5keW5hbWljX3dpbmRvdyA9IDE7CisrCQlkZWJ1ZygiRW5hYmxlZCBEeW5h bWljIFdpbmRvdyBTY2FsaW5nIik7CisrCX0KKysKKyAJaWYgKHR0eV9mbGFnKQorIAkJY2hhbm5l bF9zZXRfdHR5KHNzaCwgYyk7CisgCWRlYnVnM19mKCJjaGFubmVsX25ldzogJWQlcyIsIGMtPnNl bGYsIHR0eV9mbGFnID8gIiAodHR5KSIgOiAiIik7CitAQCAtMjMwMiw2ICsyMzYyLDE0IEBACisg eworIAlpbnQgciwgaWQgPSAtMTsKKyAJY2hhciAqY3AsICp0dW5fZndkX2lmbmFtZSA9IE5VTEw7 CisrCWludCBmaXBzID0gMDsKKysKKysJLyoKKysJICogV2UgbmVlZCB0byBpbml0aWFsaXplIHRo aXMgZWFybHkgYmVjYXVzZSB0aGUgZm9yd2FyZGluZyBsb2dpYyBiZWxvdworKwkgKiBtaWdodCBv cGVuIGNoYW5uZWxzIHRoYXQgdXNlIHRoZSBocG4gYnVmZmVyIHNpemVzLiAgV2UgY2FuJ3Qgc2Vu ZCBhCisrCSAqIHdpbmRvdyBvZiAtMSAodGhlIGRlZmF1bHQpIHRvIHRoZSBzZXJ2ZXIgYXMgaXQg YnJlYWtzIHRoaW5ncy4KKysJICovCisrCWhwbl9vcHRpb25zX2luaXQoc3NoKTsKKyAKKyAJLyog WFhYIHNob3VsZCBiZSBwcmUtc2Vzc2lvbiAqLworIAlpZiAoIW9wdGlvbnMuY29udHJvbF9wZXJz aXN0KQorQEAgLTIzOTMsNyArMjQ2MSwyMSBAQAorIAkJCWRlYnVnKCJkZWZlcnJpbmcgcG9zdGF1 dGggZm9yayB1bnRpbCByZW1vdGUgZm9yd2FyZCAiCisgCQkJICAgICJjb25maXJtYXRpb24gcmVj ZWl2ZWQiKTsKKyAJCX0gZWxzZQorLQkJCWZvcmtfcG9zdGF1dGgoKTsKKysJCQlmb3JrX3Bvc3Rh dXRoKHNzaCk7CisrCX0gZWxzZSB7CisrCQkvKiBjaGVjayB0byBzZWUgaWYgd2UgYXJlIHN3aXRj aGluZyBjaXBoZXJzIHRvCisrCQkgKiBvbmUgb2Ygb3VyIHBhcmFsbGVsIHZlcnNpb25zLiBJZiB0 aGUgY2xpZW50IGlzCisrCQkgKiBmb3JraW5nIHRoZW4gd2UgaGFuZGxlIGl0IGluIGZvcmtfcG9z dGF1dGgoKQorKwkJICogSWYgRklQUyBtb2RlIGV4aXN0cyBhbmQgaXMgZW5hYmxlZCB0aGVuIG5v IHBhcmFsbGVsIGNpcGhlcnMuCisrCQkgKi8KKysJCWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsKKysJ CWlmIChmaXBzKQorKwkJCWRlYnVnMl9mKCJGSVBTIG1vZGUgaXMgZW5hYmxlZC4gUGFyYWxsZWwg Y2lwaGVycyBhcmUgZGlzYWJsZWQiKTsKKysJCWVsc2UKKysJCQlkZWJ1ZzJfZigiRklQUyBtb2Rl IG5vdCBmb3VuZCBvciBkaXNhYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZW5hYmxlZCIpOwor KwkJaWYgKChvcHRpb25zLmRpc2FibGVfbXVsdGl0aHJlYWRlZCA9PSAwKQorKwkJICAgICYmIChm aXBzID09IDApKQorKwkJCWNpcGhlcl9zd2l0Y2goc3NoKTsKKyAJfQorIAorIAlyZXR1cm4gY2xp ZW50X2xvb3Aoc3NoLCB0dHlfZmxhZywgdHR5X2ZsYWcgPworZGlmZiAtTnVyIG9wZW5zc2gtMTAu NXAxLm9yaWcvc3NoX2NvbmZpZyBvcGVuc3NoLTEwLjVwMS9zc2hfY29uZmlnCistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9zc2hfY29uZmlnCTIwMjYtMDktMjEgMDc6MDY6MDUuNTY1MDU4NDIyICsw MjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoX2NvbmZpZwkyMDI2LTA5LTIxIDA3OjU3OjEwLjQ1 NDM0NDQxNiArMDIwMAorQEAgLTQ1LDYgKzQ1LDggQEAKKyAjICAgUHJveHlDb21tYW5kIHNzaCAt cSAtVyAlaDolcCBnYXRld2F5LmV4YW1wbGUuY29tCisgIyAgIFJla2V5TGltaXQgMUcgMWgKKyAj ICAgVXNlcktub3duSG9zdHNGaWxlIH4vLnNzaC9rbm93bl9ob3N0cy5kLyVrCisrIyAgIFVzZU1Q VENQIG5vCisrIyAgIEhhcHB5RXllcyBubworICMKKyAjIFRoaXMgc3lzdGVtIGlzIGZvbGxvd2lu ZyBzeXN0ZW0td2lkZSBjcnlwdG8gcG9saWN5LgorICMgVG8gbW9kaWZ5IHRoZSBjcnlwdG8gcHJv cGVydGllcyAoQ2lwaGVycywgTUFDcywgLi4uKSwgY3JlYXRlIGEgICouY29uZgorZGlmZiAtTnVy IG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoX2NvbmZpZy41IG9wZW5zc2gtMTAuNXAxL3NzaF9jb25m aWcuNQorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoX2NvbmZpZy41CTIwMjYtMDktMjEgMDc6 MDY6MDUuNTY1MTg4NzgwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoX2NvbmZpZy41CTIw MjYtMDktMjEgMDc6MDY6NTkuODk2MzU5NDQ1ICswMjAwCitAQCAtNjIsNiArNjIsMjkgQEAKKyAu UHEgUGEgL2V0Yy9zc2gvc3NoX2NvbmZpZworIC5FbAorIC5QcAorKy5YciBocG5zc2ggMQorK2lz IGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc3NoIGFuZCB1c2VzIHRoZSBzYW1lIGNv bmZpZ3VyYXRpb24gZm9ybWF0LCBkaXJlY3RpdmVzLCBhbmQgb3B0aW9ucy4KKysuWHIgaHBuc3No IDEKKytjYW4gdXNlIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gZmlsZSBhcworKy5YciBzc2ggMQor K3Rob3VnaCB0aGUgaW52ZXJzZSBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZS4gVGhpcyBpcyBiZWNh dXNlCisrLlhyIGhwbnNzaCAxCisraGFzIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIHdoaWNoIGFy ZSBkaXNjdXNzZWQgYmVsb3cuIEFzIHN1Y2ggdXNlcnMgc2hvdWxkIGVpdGhlciBub3QKKyt1c2UK KysuWHIgaHBuc3NoIDEKKytzcGVjaWZpYyBkaXJlY3RpdmVzIGluIHRoZWlyIGRlZmF1bHQgc3No X2NvbmZpZyBmaWxlcyBvciBlbnN1cmUgdGhhdCB0aGV5IGFsd2F5cyB1c2UgYQorK2N1c3RvbSBj b25maWcgZmlsZS4KKysuUHAKKytVbmxlc3Mgbm90ZWQgb3RoZXJ3aXNlLCBmb3IgZWFjaCBwYXJh bWV0ZXIsIHRoZSBmaXJzdCBvYnRhaW5lZCB2YWx1ZQorK3dpbGwgYmUgdXNlZC4KKytUaGUgY29u ZmlndXJhdGlvbiBmaWxlcyBjb250YWluIHNlY3Rpb25zIHNlcGFyYXRlZCBieQorKy5DbSBIb3N0 Cisrc3BlY2lmaWNhdGlvbnMsIGFuZCB0aGF0IHNlY3Rpb24gaXMgb25seSBhcHBsaWVkIGZvciBo b3N0cyB0aGF0CisrbWF0Y2ggb25lIG9mIHRoZSBwYXR0ZXJucyBnaXZlbiBpbiB0aGUgc3BlY2lm aWNhdGlvbi4KKytUaGUgbWF0Y2hlZCBob3N0IG5hbWUgaXMgdXN1YWxseSB0aGUgb25lIGdpdmVu IG9uIHRoZSBjb21tYW5kIGxpbmUKKysoc2VlIHRoZQorKy5DbSBDYW5vbmljYWxpemVIb3N0bmFt ZQorK29wdGlvbiBmb3IgZXhjZXB0aW9ucykuCisgVW5sZXNzIG5vdGVkIG90aGVyd2lzZSwgZm9y IGVhY2ggY29uZmlndXJhdGlvbiBkaXJlY3RpdmUsIHRoZSBmaXJzdAorIHNwZWNpZmllZCB2YWx1 ZSB3aWxsIGJlIHVzZWQuCisgLlBwCitAQCAtODcwLDYgKzg5Myw5IEBACisgb3IKKyAuQ20gbm8K KyAodGhlIGRlZmF1bHQpLgorKy5JdCBDbSBGYWxsYmFja1BvcnQKKytTcGVjaWZpZXMgdGhlIHBv cnQgaHBuc3NoIHNob3VsZCB0cnkgdG8gY29ubmVjdCB0byBpZiBpdCBmYWlscyBjb25uZWN0aW5n IHRvIHRoZQorK2RlZmF1bHQgaHBuc3NoZCBwb3J0IG9mIDIyMjIuIFRoZSBkZWZhdWx0IGlzIHBv cnQgMjIuIEhQTi1TU0ggb25seS4KKyAuSXQgQ20gRmluZ2VycHJpbnRIYXNoCisgU3BlY2lmaWVz IHRoZSBoYXNoIGFsZ29yaXRobSB1c2VkIHdoZW4gZGlzcGxheWluZyBrZXkgZmluZ2VycHJpbnRz LgorIFZhbGlkIG9wdGlvbnMgYXJlOgorQEAgLTEwOTcsNiArMTEyMywyMyBAQAorIHdpbGwgbm90 IGJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5LAorIGJ1dCBtYXkgYmUgbWFudWFsbHkgaGFzaGVk IHVzaW5nCisgLlhyIHNzaC1rZXlnZW4gMSAuCisrLkl0IENtIEhhcHB5RXllcworK0lmIHNldCB0 bworKy5DbSB5ZXMKKyt0aGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgY2xpZW50IHNob3Vs ZCB1c2UgdGhlIEhhcHB5IEV5ZWJhbGxzIGNvbm5lY3Rpb24KKyttZXRob2QgYXMgZGVzY3JpYmVk IGJ5IFJGQyA4MzA1LiBXaGVuIGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBhCisrdGFyZ2V0IHRo YXQgc3VwcG9ydHMgSVB2NCBhbmQgSVB2NiB0aGUgY2xpZW50IHdpbGwgdHJ5IHRvIGNvbm5lY3QK KytvbiBJUHY2IGZpcnN0LCBkZWxheSBhIHNldCB0aW1lICgyNTBtcyBkZWZhdWx0KSwgYW5kIHRo ZW4gdHJ5IElQdjQuCisrVGhlIGNsaWVudCB3aWxsIHVzZSB3aGljaCBldmVyIHNvY2tldCBpcyBy ZXR1cm5lZCBmaXJzdC4gTm90ZToKKytUaGlzIHByb2Nlc3MgbWF5LCByYXJlbHksIHByb2R1Y2Ug ZmFsc2UgcG9zaXRpdmVzIGluIHNvbWUgbW9uaXRvcmluZyB0b29scworK2R1ZSB0byBtdWx0aXBs ZSBjb25uZWN0aW9uIGF0dGVtcHRzIHByaW9yIHRvIGF1dGhlbnRpY2F0aW9uLgorK1RoZSBkZWZh dWx0IGlzCisrLkNtIG5vCisrLkl0IENtIEhhcHB5RGVsYXkKKytUaGlzIG9wdGlvbnMgc3BlY2lm aWVzIGhvdyBsb25nIHRoZSBIYXBweUV5ZXMgY29ubmVjdGlvbiBtZXRob2Qgc2hvdWxkCisrd2Fp dCBiZWZvcmUgdHJ5aW5nIElQdjQgYWZ0ZXIgdGhlIGluaXRpYWwgSVB2NiBjb25uZWN0aW9uLiBU aGlzIHZhbHVlIGlzCisrYSBwb3NpdGl2ZSBpbnRlZ2VyIG9mIG1pbGxpc2Vjb25kcyB3aXRoIGEg ZGVmYXVsdCBvZgorKy5DbSAyNTBtcy4KKyAuSXQgQ20gSG9zdGJhc2VkQWNjZXB0ZWRBbGdvcml0 aG1zCisgVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQorIC5YciBjcnlwdG8t cG9saWNpZXMgNyAuCitAQCAtMTIwMiw2ICsxMjQ1LDExIEBACisgLkNtIEhvc3RuYW1lCisgc3Bl Y2lmaWNhdGlvbnMpLgorIFRoZSBkZWZhdWx0IGlzIHRoZSBuYW1lIGdpdmVuIG9uIHRoZSBjb21t YW5kIGxpbmUuCisrLkl0IENtIEhQTkRpc2FibGVkCisrSW4gc29tZSBzaXR1YXRpb25zLCBzdWNo IGFzIHRyYW5zZmVycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywgdGhlIGltcGFjdAorK29mIHRo ZSBIUE4gY29kZSBwcm9kdWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBwZXJmb3JtYW5jZS4gSW4gdGhl c2UgY2FzZXMgaXQgaXMKKytoZWxwZnVsIHRvIGRpc2FibGUgdGhlIEhQTiBmdW5jdGlvbmFsaXR5 LiBCeSBkZWZhdWx0IEhQTkRpc2FibGVkIGlzIHNldCB0bworKy5DbSBuby4gSFBOU1NIIG9ubHku CisgLkl0IENtIElkZW50aXRpZXNPbmx5CisgU3BlY2lmaWVzIHRoYXQKKyAuWHIgc3NoIDEKK0BA IC0xMzc3LDYgKzE0MjUsMTIgQEAKKyAuQ20gbm9uZQorICh0aGUgb3BlcmF0aW5nIHN5c3RlbSBk ZWZhdWx0KQorIGZvciBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMuCisrSWYgdXNpbmcgdGhlCisr LkNtIEhhcHB5RXllcworK29wdGlvbiB0aGVzZSBkZWZhdWx0IHRvCisrLkNtIGxvd2xhdGVuY3kg YW5kCisrLm0gdGhyb3VnaHB1dCAsCisrcmVzcGVjdGl2ZWx5LgorIC5JdCBDbSBLYmRJbnRlcmFj dGl2ZUF1dGhlbnRpY2F0aW9uCisgU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIGtleWJvYXJkLWlu dGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9uLgorIFRoZSBhcmd1bWVudCB0byB0aGlzIGtleXdvcmQg bXVzdCBiZQorQEAgLTE1NjUsNiArMTYxOSw2MyBAQAorIC5QcAorIFRoZSBsaXN0IG9mIGF2YWls YWJsZSBNQUMgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZworIC5RcSBzc2gg LVEgbWFjIC4KKysuSXQgQ20gTWV0cmljcworK0luZGljYXRlIHRoYXQgdGhlIHNzaCBjbGllbnQg c2hvdWxkIGdhdGhlciBhbmQgd3JpdGUgVENQIHN0YWNrIG1ldHJpY3MgZnJvbSB0aGUKKytUQ1Bf SU5GTyBzb2NrZXQgc3RydWN0dXJlIG9uIGNvbXBsaWFudCBvcGVyYXRpbmcgc3lzdGVtcyB0byBh IHRleHQgZmlsZS4KKytUaGVzZSBtZXRyaWNzIHdpbGwgYmUgY29sbGVjdGVkIGZyb20gYm90aCB0 aGUgbG9jYWwgYW5kIHJlbW90ZSBob3N0cyBpZiBtZXRyaWNzCisrYXJlIHN1cHBvcnRlZCBieSB0 aGUgdmVyc2lvbiBvZiBTU0ggYW5kIFRDUF9JTkZPIGlzIHN1cHBvcnRlZCBieSB0aGUKKytvcGVy YXRpbmcgc3lzdGVtLiBDdXJyZW50bHkgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0IGlzIGxpbWl0 ZWQgdG8gTGludXgKKyt2ZXJzaW9uIDMuNyBhbmQgZ3JlYXRlciwgTmV0QlNELCBhbmQgRnJlZUJT RCAodmVyc2lvbiA2IG9yIGdyZWF0ZXIpLgorKworK0lmIG9uZSBvZiB0aGUgaG9zdHMgZG9lcyBu b3Qgc3VwcG9ydCB0aGUgTWV0cmljcyBvcHRpb24gdGhlbiBvbmx5IGRhdGEKKytmcm9tIHRoZSB0 aGUgaG9zdCB0aGF0IGRvZXMgd2lsbCBiZSByZXBvcnRlZC4gU2VlIHRoZSBIUE4tUkVBRE1FIGZp bGUKKytmb3IgbW9yZSBkZXRhaWwuCisrCisrVGhlIGFyZ3VtZW50IHRvIHRoZSBrZXl3b3JkIG11 c3QgYmUKKysuQ20geWVzCisrb3IKKysuQ20gbm8KKysodGhlIGRlZmF1bHQpLgorKworK1NlZQor Ky5DbSBNZXRyaWNzSW50ZXJ2YWwKKythbmQKKysuQ20gTWV0cmljc1BhdGgKKytmb3IgbW9yZSBt ZXRyaWNzIG9wdGlvbnMuCisrLkNtIEhQTlNTSCBvbmx5LgorKy5JdCBDbSBNZXRyaWNzSW50ZXJ2 YWwKKytUaGUgZnJlcXVlbmN5LCBpbiBzZWNvbmRzLCB3aXRoIHdoaWNoIHRoZSBUQ1BfSU5GTyBz dHJ1Y3Qgd2lsbCBiZSBwb2xsZWQuIFRoZQorK2RlZmF1bHQgdmFsdWUgaXMgNSBzZWNvbmRzLgor KworKy5DbSBNZXRyaWNzCisrbXVzdCBiZSBzZXQgdG8KKysuQ20geWVzCisrZm90IHRoaXMgb3B0 aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4KKysuQ20gSFBOU1NIIG9ubHkuCisrLkl0IENtIE1ldHJp Y3NQYXRoCisrVGhlIGZpbGUgcGF0aCB3aGVyZQorKy5DbSBNZXRyaWNzCisrc2hvdWxkIHdyaXRl IHRoZSBUQ1Agc3RhY2sgbWV0cmljcy4KKysKKytUaGUgZGVmYXVsdCBpcworKy5TbSBvZmYKKysu QXIgLi9zc2hfc3RhY2tfbWV0cmljcy5sb2NhbAorKyBhbmQKKysuQXIgLi9zc2hfc3RhY2tfbWV0 cmljcy5yZW1vdGUKKysuU20gb24KKysKKytUaGUgdXNlciBtYXkgc3BlY2lmeSBhbnkgb3RoZXIg ZmlsZXBhdGggYW5kIGZpbGVuYW1lIHRoYXQgdGhleSBoYXZlIHdyaXRlCisrYWNjZXNzIHRvLiBF LmcuIE1ldHJpY3NQYXRoPS90bXAvbXlfbWV0cmljcy4gVGhlIHN1ZmZpeCBvZiAubG9jYWwKKyth bmQgLnJlbW90ZSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgcGF0aC4gRmlsZXMgYXJlCisrLkNt IG5vdAorK292ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgbWV0cmljcyBzZXNzaW9ucy4gSW5zdGVh ZCwgZGF0YSBmcm9tIG5ldyBzZXNzaW9ucworK3dpbGwgYmUgYXBwZW5kZWQgaWYgdGhlIGZpbGUg YWxyZWFkeSBleGlzdHMuCisrCisrLkNtIE1ldHJpY3MKKyttdXN0IGJlIHNldCB0bworKy5DbSB5 ZXMKKytmb3QgdGhpcyBvcHRpb24gdG8gaGF2ZSBhbnkgZWZmZWN0LgorKy5DbSBIUE5TU0ggb25s eS4KKyAuSXQgQ20gTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JMb2NhbGhvc3QKKyBEaXNhYmxlIGhv c3QgYXV0aGVudGljYXRpb24gZm9yIGxvY2FsaG9zdCAobG9vcGJhY2sgYWRkcmVzc2VzKS4KKyBU aGUgYXJndW1lbnQgdG8gdGhpcyBrZXl3b3JkIG11c3QgYmUKK0BAIC0xNTcyLDYgKzE2ODMsMzYg QEAKKyBvcgorIC5DbSBubworICh0aGUgZGVmYXVsdCkuCisrLkl0IENtIE5vbmVFbmFibGVkCisr RW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBjaXBoZXIuIENhcmUgbXVzdCBh bHdheXMgYmUgdXNlZAorK3doZW4gZW5hYmxpbmcgdGhpcyBhcyBpdCB3aWxsIGFsbG93IHVzZXJz IHRvIHNlbmQgZGF0YSBpbiB0aGUgY2xlYXIuIEhvd2V2ZXIsCisraXQgaXMgaW1wb3J0YW50IHRv IG5vdGUgdGhhdCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiByZW1haW5zIGVuY3J5cHRlZAor K2V2ZW4gaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gRGVmYXVsdCBpcworKy5DbSBuby4gSFBO U1NIIG9ubHkuCisrLkl0IENtIE5vbmVNYWNFbmFibGVkCisrRW5hYmxlIG9yIGRpc2FibGUgdGhl IHVzZSBvZiB0aGUgTm9uZSBNQUMuIFdoZW4gdGhpcyBpcyBlbmFibGVkIHNzaAorK3dpbGwgKm5v dCogcHJvdmlkZSBkYXRhIGludGVncml0eSBvZiBhbnkgZGF0YSBiZWluZyB0cmFuc21pdHRlZCBi ZXR3ZWVuIGhvc3RzLiBVc2UKKyt3aXRoIGNhdXRpb24gYXMgaXQsIHVubGlrZSBqdXN0IHVzaW5n IE5vbmVFbmFibGVkLCBkb2Vzbid0IHByb3ZpZGUgZGF0YSBpbnRlZ3JpdHkgYW5kCisrcHJvdGVj dGlvbiBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIEFzIHdpdGggTm9uZUVuYWJs ZWQgYWxsIGF1dGhlbnRpY2F0aW9uCisrcmVtYWlucyBlbmNyeXB0ZWQgYW5kIGludGVncml0eSBp cyBlbnN1cmVkLiBEZWZhdWx0IGlzCisrLkNtIG5vLiBIUE5TU0ggb25seS4KKysuSXQgQ20gTm9u ZVN3aXRjaAorK1N3aXRjaCB0aGUgZW5jcnlwdGlvbiBjaXBoZXIgYmVpbmcgdXNlZCB0byB0aGUg Tm9uZSBjaXBoZXIgYWZ0ZXIKKythdXRoZW50aWNhdGlvbiB0YWtlcyBwbGFjZS4gTm9uZUVuYWJs ZWQgbXVzdCBiZSBlbmFibGVkIG9uIGJvdGggdGhlIGNsaWVudAorK2FuZCBzZXJ2ZXIgc2lkZSBv ZiB0aGUgY29ubmVjdGlvbi4gV2hlbiB0aGUgY29ubmVjdGlvbiBzd2l0Y2hlcyB0byB0aGUgTk9O RQorK2NpcGhlciBhIHdhcm5pbmcgaXMgc2VudCB0byBTVERFUlIuIFRoZSBjb25uZWN0aW9uIGF0 dGVtcHQgd2lsbCBmYWlsIHdpdGggYW4KKytlcnJvciBpZiBhIGNsaWVudCByZXF1ZXN0cyBhIE5v bmVTd2l0Y2ggZnJvbSB0aGUgc2VydmVyIHRoYXQgZG9lcyBub3QgZXhwbGljaXRseQorK2hhdmUg Tm9uZUVuYWJsZWQgc2V0IHRvIHllcy4gTm90ZTogVGhlIE5PTkUgY2lwaGVyIGNhbm5vdCBiZSB1 c2VkIGluCisraW50ZXJhY3RpdmUgKHNoZWxsKSBzZXNzaW9ucyBhbmQgaXQgd2lsbCBmYWlsIHNp bGVudGx5LiBTZXQgdG8KKysuQ20gbm8KKytieSBkZWZhdWx0LgorKy5DbSBIUE5TU0ggb25seS4K KysuUHAKKysuQ20gTm90ZToKKyt0aGlzIG9wdGlvbnMgY2Fubm90IGFjdHVhbHkgYmUgc2V0IGlu IHRoZSBzc2hfY29uZmlnIGZpbGUuIEl0IG11c3QgYmUKKytzZXQgb24gdGhlIGNvbW1hbmQgbGlu ZSB1c2UgLW9Ob25lRW5hYmxlZC4gVGhpcyBpcyB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcKKyt1 c2VkIGFjY2lkZW50YWxseS4gSXQgaXMgaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzIGFz IG5laXRoZXIgTm9uZU1hY0VuYWJsZWQKKytvciBOb25lQ2lwaGVyRW5hYmxlZCBoYXZlIGFueSBl ZmZlY3Qgd2l0aG91dCB0aGlzIG9wdGlvbi4KKyAuSXQgQ20gTnVtYmVyT2ZQYXNzd29yZFByb21w dHMKKyBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwYXNzd29yZCBwcm9tcHRzIGJlZm9yZSBnaXZp bmcgdXAuCisgVGhlIGFyZ3VtZW50IHRvIHRoaXMga2V5d29yZCBtdXN0IGJlIGFuIGludGVnZXIu CitAQCAtMjE1MSw2ICsyMjkyLDEyIEBACisgU3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gdGFnIG5h bWUgdGhhdCBtYXkgYmUgbGF0ZXIgdXNlZCBieSBhCisgLkNtIE1hdGNoCisgZGlyZWN0aXZlIHRv IHNlbGVjdCBhIGJsb2NrIG9mIGNvbmZpZ3VyYXRpb24uCisrLkl0IENtIFRjcFJjdkJ1ZlBvbGwK KytFbmFibGUgb2YgZGlzYWJsZSB0aGUgcG9sbGluZyBvZiB0aGUgdGNwIHJlY2VpdmUgYnVmZmVy IHRocm91Z2ggdGhlIGxpZmUKKytvZiB0aGUgY29ubmVjdGlvbi4gWW91IHdvdWxkIHdhbnQgdG8g bWFrZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZAorK2ZvciBzeXN0ZW1zIG1ha2lu ZyB1c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQrLCAyLjYsIE1TIFZpc3Rh KS4KKytEZWZhdWx0IGlzCisrLkNtIHllcy4gSFBOU1NIIG9ubHkuCisgLkl0IENtIFR1bm5lbAor IFJlcXVlc3QKKyAuWHIgdHVuIDQKK0BAIC0yMjM2LDYgKzIzODMsMTIgQEAKKyBmcm9tIE9wZW5T U0ggNi44IGFuZCBncmVhdGVyIHN1cHBvcnQgdGhlCisgLlFxIGhvc3RrZXlzQG9wZW5zc2guY29t CisgcHJvdG9jb2wgZXh0ZW5zaW9uIHVzZWQgdG8gaW5mb3JtIHRoZSBjbGllbnQgb2YgYWxsIHRo ZSBzZXJ2ZXIncyBob3N0a2V5cy4KKysuSXQgQ20gVXNlTVBUQ1AKKytJZiBzZXQgdG8KKysuQ20g eWVzICwKKyt0aGlzIHdpbGwgZW5hYmxlIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBpbnN0ZWFkIG9m IFRDUCAodGhpcyBvbmx5IHdvcmtzIG9uIExpbnV4KS4KKytUaGUgZGVmYXVsdCBpcworKy5DbSBu byAuCisgLkl0IENtIFVzZXIKKyBTcGVjaWZpZXMgdGhlIHVzZXIgdG8gbG9nIGluIGFzLgorIFRo aXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGEgZGlmZmVyZW50IHVzZXIgbmFtZSBpcyB1c2VkIG9uIGRp ZmZlcmVudCBtYWNoaW5lcy4KK0BAIC0yNTQ1LDMgKzI2OTgsMTEgQEAKKyBjcmVhdGVkIE9wZW5T U0guCisgLkFuIE1hcmt1cyBGcmllZGwKKyBjb250cmlidXRlZCB0aGUgc3VwcG9ydCBmb3IgU1NI IHByb3RvY29sIHZlcnNpb25zIDEuNSBhbmQgMi4wLgorKy5BbiBDaHJpcyBSYXBpZXIsCisrLkFu IE1pY2hhZWwgU3RldmVucywKKysuQW4gQmVuIEJlbm5ldCwKKythbmQKKysuQW4gTWlrZSBUYXNv dGEKKytkZXZlbG9wZWQgdGhlIEhQTiBleHRlbnNpb25zIGF0IHRoZSBQaXR0c2J1cmdoIFN1cGVy Y29tdXRpbmcgQ2VudGVyCisrd2l0aCBncmFudHMgZnJvbSBDaXNjbywgdGhlIE5hdGlvbmFsIExp YnJhcnkgb2YgTWVkaWNpbmUsIGFuZAorK3RoZSBOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24u CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hjb25uZWN0Mi5jIG9wZW5zc2gtMTAu NXAxL3NzaGNvbm5lY3QyLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGNvbm5lY3QyLmMJ MjAyNi0wOS0yMSAwNzowNjowNS41NjU3Nzg0NjAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9z c2hjb25uZWN0Mi5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODk2NjI1NTQ1ICswMjAwCitAQCAtNzQs NiArNzQsNyBAQAorICNpbmNsdWRlICJ1dGY4LmgiCisgI2luY2x1ZGUgInNzaC1zay5oIgorICNp bmNsdWRlICJzay1hcGkuaCIKKysjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgorIAorICNpZmRl ZiBHU1NBUEkKKyAjaW5jbHVkZSAic3NoLWdzcy5oIgorQEAgLTgzLDYgKzg0LDEzIEBACisgZXh0 ZXJuIE9wdGlvbnMgb3B0aW9uczsKKyAKKyAvKgorKyAqIHR0eV9mbGFnIGlzIHNldCBpbiBzc2gu Yy4gVXNlIHRoaXMgaW4gc3NoX3VzZXJhdXRoMjoKKysgKiBpZiBpdCBpcyBzZXQsIHRoZW4gcHJl dmVudCB0aGUgc3dpdGNoIHRvIHRoZSBudWxsIGNpcGhlci4KKysgKi8KKysKKytleHRlcm4gaW50 IHR0eV9mbGFnOworKworKy8qCisgICogU1NIMiBrZXkgZXhjaGFuZ2UKKyAgKi8KKyAKK0BAIC01 NzgsNiArNTg2LDQyIEBACisgCisgCWlmICghYXV0aGN0eHQuc3VjY2VzcykKKyAJCWZhdGFsKCJB dXRoZW50aWNhdGlvbiBmYWlsZWQuIik7CisrCisrCS8qCisrCSAqIElmIHRoZSB1c2VyIHdhbnRz IHRvIHVzZSB0aGUgbm9uZSBjaXBoZXIgYW5kL29yIG5vbmUgbWFjLCBkbyBpdCBwb3N0IGF1dGhl bnRpY2F0aW9uCisrCSAqIGFuZCBvbmx5IGlmIHRoZSByaWdodCBjb25kaXRpb25zIGFyZSBtZXQg LS0gYm90aCBvZiB0aGUgTk9ORSBjb21tYW5kcworKwkgKiBtdXN0IGJlIHRydWUgYW5kIHRoZXJl IG11c3QgYmUgbm8gdHR5IGFsbG9jYXRlZC4KKysJICovCisrCWlmIChvcHRpb25zLm5vbmVfc3dp dGNoID09IDEgJiYgb3B0aW9ucy5ub25lX2VuYWJsZWQgPT0gMSkgeworKwkJY2hhciAqbXlwcm9w b3NhbFtQUk9QT1NBTF9NQVhdOworKwkJY2hhciAqcyA9IE5VTEw7CisrCQljb25zdCBjaGFyICpu b25lX2NpcGhlciA9ICJub25lIjsKKysJCWlmICghdHR5X2ZsYWcpIHsgLyogbm8gbnVsbCBvbiB0 dHkgc2Vzc2lvbnMgKi8KKysJCQlkZWJ1ZygiUmVxdWVzdGluZyBub25lIHJla2V5aW5nLi4uIik7 CisrCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3NoLCBteXByb3Bvc2FsLCBzLCBu b25lX2NpcGhlciwKKysJCQkJCQkgICAgICBvcHRpb25zLm1hY3MsCisrCQkJCQkJICAgICAgY29t cHJlc3Npb25fYWxnX2xpc3Qob3B0aW9ucy5jb21wcmVzc2lvbiksCisrCQkJCQkJICAgICAgb3B0 aW9ucy5ob3N0a2V5YWxnb3JpdGhtcyk7CisrCQkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBF TkFCTEVEIE5PTkUgQ0lQSEVSISEhXG4iKTsKKysKKysJCQkvKiBOT05FTUFDIGNhbiBvbmx5IGJl IHVzZWQgaW4gY29udGV4dCBvZiB0aGUgTk9ORSBDSVBIRVIgKi8KKysJCQlpZiAob3B0aW9ucy5u b25lbWFjX2VuYWJsZWQgPT0gMSkgeworKwkJCQljb25zdCBjaGFyICpub25lX21hYyA9ICJub25l IjsKKysJCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3NoLCBteXByb3Bvc2FsLCBz LCBub25lX2NpcGhlciwKKysJCQkJCQkJICAgICAgbm9uZV9tYWMsCisrCQkJCQkJCSAgICAgIGNv bXByZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29tcHJlc3Npb24pLAorKwkJCQkJCQkgICAgICBv cHRpb25zLmhvc3RrZXlhbGdvcml0aG1zKTsKKysJCQkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5H OiBFTkFCTEVEIE5PTkUgTUFDXG4iKTsKKysJCQl9CisrCQkJa2V4X3Byb3AyYnVmKHNzaC0+a2V4 LT5teSwgbXlwcm9wb3NhbCk7CisrCQkJcGFja2V0X3JlcXVlc3RfcmVrZXlpbmcoKTsKKysJCX0g ZWxzZSB7CisrCQkJLyogcmVxdWVzdGVkIE5PTkUgY2lwaGVyIHdoZW4gaW4gYSB0dHkgKi8KKysJ CQlkZWJ1ZygiQ2Fubm90IHN3aXRjaCB0byBOT05FIGNpcGhlciB3aXRoIHR0eSBhbGxvY2F0ZWQi KTsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIk5PTkUgY2lwaGVyIHN3aXRjaCBkaXNhYmxlZCB3aGVu IGEgVFRZIGlzIGFsbG9jYXRlZFxuIik7CisrCQl9CisrCX0KKysKKyAJaWYgKHNzaF9wYWNrZXRf Y29ubmVjdGlvbl9pc19vbl9zb2NrZXQoc3NoKSkgeworIAkJdmVyYm9zZSgiQXV0aGVudGljYXRl ZCB0byAlcyAoWyVzXTolZCkgdXNpbmcgXCIlc1wiLiIsIGhvc3QsCisgCQkgICAgc3NoX3JlbW90 ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksCitkaWZmIC1OdXIgb3BlbnNzaC0x MC41cDEub3JpZy9zc2hjb25uZWN0LmMgb3BlbnNzaC0xMC41cDEvc3NoY29ubmVjdC5jCistLS0g b3BlbnNzaC0xMC41cDEub3JpZy9zc2hjb25uZWN0LmMJMjAyNi0wOS0yMSAwNzowNjowNC44NjIx NzE3MjMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hjb25uZWN0LmMJMjAyNi0wOS0yMSAw NzowNjo1OS44OTY4MTI3OTIgKzAyMDAKK0BAIC01NSw2ICs1NSw3IEBACisgI2luY2x1ZGUgInNz aGVyci5oIgorICNpbmNsdWRlICJhdXRoZmQuaCIKKyAjaW5jbHVkZSAia2V4LmgiCisrI2luY2x1 ZGUgImhhcHB5ZXllYmFsbHMuaCIKKyAKKyBzdHJ1Y3Qgc3Noa2V5ICpwcmV2aW91c19ob3N0X2tl eSA9IE5VTEw7CisgCitAQCAtNjYsNiArNjcsNyBAQAorIGV4dGVybiBpbnQgZGVidWdfZmxhZzsK KyBleHRlcm4gT3B0aW9ucyBvcHRpb25zOworIGV4dGVybiBjaGFyICpfX3Byb2duYW1lOworK2V4 dGVybiBjaGFyIGdsb2JhbF9udG9wW05JX01BWEhPU1RdOworIAorIHN0YXRpYyBpbnQgc2hvd19v dGhlcl9rZXlzKHN0cnVjdCBob3N0a2V5cyAqLCBzdHJ1Y3Qgc3Noa2V5ICopOworIHN0YXRpYyB2 b2lkIHdhcm5fY2hhbmdlZF9rZXkoc3RydWN0IHNzaGtleSAqKTsKK0BAIC0zNzYsNyArMzc4LDcg QEAKKyAvKgorICAqIENyZWF0ZXMgYSBzb2NrZXQgZm9yIHVzZSBhcyB0aGUgc3NoIGNvbm5lY3Rp b24uCisgICovCistc3RhdGljIGludAorK2ludAorIHNzaF9jcmVhdGVfc29ja2V0KHN0cnVjdCBh ZGRyaW5mbyAqYWkpCisgeworIAlpbnQgc29jaywgcjsKK0BAIC0zODgsOSArMzkwLDE2IEBACisg I2VuZGlmCisgCWNoYXIgbnRvcFtOSV9NQVhIT1NUXTsKKyAKKy0Jc29jayA9IHNvY2tldChhaS0+ YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsIGFpLT5haV9wcm90b2NvbCk7CisrCS8qIHVzZXIg cmVxdWVzdCBmb3IgTXVsdGlwYXRoIFRDUCAqLworKwlpZiAob3B0aW9ucy51c2VfbXB0Y3ApCisr CQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgSVBQUk9UT19N UFRDUCk7CisrCWVsc2UKKysJCXNvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3Nv Y2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworKworIAlpZiAoc29jayA9PSAtMSkgeworIAkJZXJy b3IoInNvY2tldDogJXMiLCBzdHJlcnJvcihlcnJubykpOworKwkJaWYgKG9wdGlvbnMudXNlX21w dGNwKQorKwkJCWVycm9yICgiWW91IGFza2VkIHRvIHVzZSBNUFRDUC4gUGxlYXNlIGVuc3VyZSBp dCBpcyBlbmFibGVkLiIpOworIAkJcmV0dXJuIC0xOworIAl9CisgCSh2b2lkKWZjbnRsKHNvY2ss IEZfU0VURkQsIEZEX0NMT0VYRUMpOworQEAgLTQ5Myw2ICs1MDIsMTUgQEAKKyAJCQlzbGVlcCgx KTsKKyAJCQlkZWJ1ZygiVHJ5aW5nIGFnYWluLi4uIik7CisgCQl9CisrCQlpZiAob3B0aW9ucy51 c2VfaGFwcHlleWVzID09IDEpIHsKKysJCQlkZWJ1Z19mICgiQXR0ZW1wdGluZyBSRkMgODMwNSAv IEhhcHB5IEV5ZWJhbGxzIGNvbm5lY3Rpb24uIik7CisrCQkJc29jayA9IGhhcHB5X2V5ZWJhbGxz KGhvc3QsIGFpdG9wLAorKwkJCSAgICBob3N0YWRkciwgdGltZW91dF9tcyk7CisrCQkJaWYgKHNv Y2sgIT0gLTEpIHsKKysJCQkJZGVidWdfZiAoIlJGQyA4MzA1IC8gSGFwcHkgRXllYmFsbHMgY29u bmVjdGlvbiBzdWNjZXNzZnVsLiIpOworKwkJCQlicmVhazsJLyogU3VjY2Vzc2Z1bCBjb25uZWN0 aW9uLiAqLworKwkJCX0KKysJCX0gZWxzZSB7CisgCQkvKgorIAkJICogTG9vcCB0aHJvdWdoIGFk ZHJlc3NlcyBmb3IgdGhpcyBob3N0LCBhbmQgdHJ5IGVhY2ggb25lIGluCisgCQkgKiBzZXF1ZW5j ZSB1bnRpbCB0aGUgY29ubmVjdGlvbiBzdWNjZWVkcy4KK0BAIC01NDcsNiArNTY1LDcgQEAKKyAJ CX0KKyAJCWlmIChzb2NrICE9IC0xKQorIAkJCWJyZWFrOwkvKiBTdWNjZXNzZnVsIGNvbm5lY3Rp b24uICovCisrCQl9CisgCX0KKyAKKyAJLyogUmV0dXJuIGZhaWx1cmUgaWYgd2UgZGlkbid0IGdl dCBhIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4gKi8KK0BAIC0xNjU4LDYgKzE2NzcsOSBAQAorIAkv KiBrZXkgZXhjaGFuZ2UgKi8KKyAJLyogYXV0aGVudGljYXRlIHVzZXIgKi8KKyAJZGVidWcoIkF1 dGhlbnRpY2F0aW5nIHRvICVzOiVkIGFzICclcyciLCBob3N0LCBwb3J0LCBzZXJ2ZXJfdXNlcik7 CisrCS8qIGlmIHVzaW5nIFJGQyA4MzA1IGNsZWFybHkgc3RhdGUgd2hpY2ggYWRkcmVzcyB3ZSBh cmUgY29ubmVjdGVkIHRvICovCisrCWlmIChvcHRpb25zLnVzZV9oYXBweWV5ZXMgPT0gMSkKKysJ CWRlYnVnKCJSRkMgODMwNSBhdXRoZW50aWNhdGluZyB0byAlLjIwMHMiLCBnbG9iYWxfbnRvcCk7 CisgCXNzaF9rZXgyKHNzaCwgaG9zdCwgaG9zdGFkZHIsIHBvcnQsIGNpbmZvKTsKKyAJaWYgKCFv cHRpb25zLmtleF9hbGdvcml0aG1zX3NldCAmJiBzc2gtPmtleCAhPSBOVUxMICYmCisgCSAgICBz c2gtPmtleC0+bmFtZSAhPSBOVUxMICYmIG9wdGlvbnMud2Fybl93ZWFrX2NyeXB0byAmJgorZGlm ZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoZC1hdXRoLmMgb3BlbnNzaC0xMC41cDEvc3No ZC1hdXRoLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGQtYXV0aC5jCTIwMjYtMDktMjEg MDc6MDY6MDUuNDU1MTg0ODE4ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoZC1hdXRoLmMJ MjAyNi0wOS0yMSAwNzowNjo1OS44OTcyNTc1ODEgKzAyMDAKK0BAIC03NzIsNiArNzcyLDI1IEBA CisgCXN0cnVjdCBrZXggKmtleDsKKyAJaW50IHI7CisgCisrCS8qIHRoaXMgdXNlZCB0byBiZSBp biBzc2hkLmMgd2hlbiB3ZSByZWFkIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKysJICogYnV0IG5l ZWRlZCB0byBiZSBtb3ZlZCBoZXJlIGFzIGRvX3NzaDJfa2V4IGluIHNzaGQtYXV0aCB3YXNuJ3QK KysJICogcGlja2luZyB1cCB0aGUgbm9uZSBvcHRpb25zLiBDSlIgNC8xMC8yMDI1CisrCSAqLwor KwlpZiAob3B0aW9ucy5ub25lX2VuYWJsZWQgPT0gMSkgeworKwkJZGVidWcoIldBUk5JTkc6IE5v bmUgY2lwaGVyIGVuYWJsZWQiKTsKKysJCWNoYXIgKm9sZF9jaXBoZXJzID0gb3B0aW9ucy5jaXBo ZXJzOworKwkJeGFzcHJpbnRmKCZvcHRpb25zLmNpcGhlcnMsICIlcyxub25lIiwgb2xkX2NpcGhl cnMpOworKwkJZnJlZShvbGRfY2lwaGVycyk7CisrCisrCQkvKiBvbmx5IGVuYWJsZSB0aGUgbm9u ZSBNQUMgaW4gY29udGV4dCBvZiB0aGUgbm9uZSBjaXBoZXIgLWNqciAqLworKwkJaWYgKG9wdGlv bnMubm9uZW1hY19lbmFibGVkID09IDEpIHsKKysJCQlkZWJ1ZygiV0FSTklORzogTm9uZSBNQUMg ZW5hYmxlZCIpOworKwkJCWNoYXIgKm9sZF9tYWNzID0gb3B0aW9ucy5tYWNzOworKwkJCXhhc3By aW50Zigmb3B0aW9ucy5tYWNzLCAiJXMsbm9uZSIsIG9sZF9tYWNzKTsKKysJCQlmcmVlKG9sZF9t YWNzKTsKKysJCX0KKysJfQorKworIAlzc2hfcGFja2V0X3NldF9yZWtleV9saW1pdHMoc3NoLCBv cHRpb25zLnJla2V5X2xpbWl0LAorIAkgICAgb3B0aW9ucy5yZWtleV9pbnRlcnZhbCk7CisgCitk aWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLmMgb3BlbnNzaC0xMC41cDEvc3NoZC5j CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLmMJMjAyNi0wOS0yMSAwNzowNjowNS4zMzU2 NjQ5NjQgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hkLmMJMjAyNi0wOS0yMSAwNzowNjo1 OS44OTc1NzMwOTggKzAyMDAKK0BAIC04MjYsNiArODI2LDggQEAKKyAJaW50IHJldCwgbGlzdGVu X3NvY2s7CisgCXN0cnVjdCBhZGRyaW5mbyAqYWk7CisgCWNoYXIgbnRvcFtOSV9NQVhIT1NUXSwg c3RycG9ydFtOSV9NQVhTRVJWXTsKKysJaW50IHNvY2tzaXplOworKwlpbnQgc29ja3NpemVsZW4g PSBzaXplb2YoaW50KTsKKyAKKyAJZm9yIChhaSA9IGxhLT5hZGRyczsgYWk7IGFpID0gYWktPmFp X25leHQpIHsKKyAJCWlmIChhaS0+YWlfZmFtaWx5ICE9IEFGX0lORVQgJiYgYWktPmFpX2ZhbWls eSAhPSBBRl9JTkVUNikKK0BAIC04NDEsMTEgKzg0MywxOCBAQAorIAkJCWNvbnRpbnVlOworIAkJ fQorIAkJLyogQ3JlYXRlIHNvY2tldCBmb3IgbGlzdGVuaW5nLiAqLworLQkJbGlzdGVuX3NvY2sg PSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAorLQkJICAgIGFpLT5haV9w cm90b2NvbCk7CisrCQlpZiAob3B0aW9ucy51c2VfbXB0Y3ApCisrCQkJbGlzdGVuX3NvY2sgPSBz b2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAorKwkJCSAgICBJUFBST1RPX01Q VENQKTsKKysJCWVsc2UKKysJCQlsaXN0ZW5fc29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBh aS0+YWlfc29ja3R5cGUsCisrCQkJICAgIGFpLT5haV9wcm90b2NvbCk7CisrCisgCQlpZiAobGlz dGVuX3NvY2sgPT0gLTEpIHsKKyAJCQkvKiBrZXJuZWwgbWF5IG5vdCBzdXBwb3J0IGlwdjYgKi8K KyAJCQl2ZXJib3NlKCJzb2NrZXQ6ICUuMTAwcyIsIHN0cmVycm9yKGVycm5vKSk7CisrCQkJaWYg KG9wdGlvbnMudXNlX21wdGNwKQorKwkJCQl2ZXJib3NlKCJNUFRDUCByZXF1ZXN0ZWQgYnV0IG1h eSBub3QgYmUgYXZhaWxhYmxlLiIpOworIAkJCWNvbnRpbnVlOworIAkJfQorIAkJaWYgKHNldF9u b25ibG9jayhsaXN0ZW5fc29jaykgPT0gLTEpIHsKK0BAIC04NzEsNiArODgwLDEwIEBACisgCisg CQlkZWJ1ZygiQmluZCB0byBwb3J0ICVzIG9uICVzLiIsIHN0cnBvcnQsIG50b3ApOworIAorKwkJ Z2V0c29ja29wdChsaXN0ZW5fc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAorKwkJCQkgICAm c29ja3NpemUsICZzb2Nrc2l6ZWxlbik7CisrCQlkZWJ1ZygiU2VydmVyIFRDUCBSV0lOIHNvY2tl dCBzaXplOiAlZCIsIHNvY2tzaXplKTsKKysKKyAJCS8qIEJpbmQgdGhlIHNvY2tldCB0byB0aGUg ZGVzaXJlZCBwb3J0LiAqLworIAkJaWYgKGJpbmQobGlzdGVuX3NvY2ssIGFpLT5haV9hZGRyLCBh aS0+YWlfYWRkcmxlbikgPT0gLTEpIHsKKyAJCQllcnJvcigiQmluZCB0byBwb3J0ICVzIG9uICVz IGZhaWxlZDogJS4yMDBzLiIsCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkX2Nv bmZpZyBvcGVuc3NoLTEwLjVwMS9zc2hkX2NvbmZpZworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcv c3NoZF9jb25maWcJMjAyNi0wOS0yMSAwNzowNjowNS41NjY1NTcyOTQgKzAyMDAKKysrKyBvcGVu c3NoLTEwLjVwMS9zc2hkX2NvbmZpZwkyMDI2LTA5LTIxIDA3OjU5OjIxLjgzMzI2NzEwMyArMDIw MAorQEAgLTE4LDcgKzE4LDcgQEAKKyAjIFNFTGludXggYWJvdXQgdGhpcyBjaGFuZ2UuCisgIyBz ZW1hbmFnZSBwb3J0IC1hIC10IHNzaF9wb3J0X3QgLXAgdGNwICNQT1JUTlVNQkVSCisgIworLSNQ b3J0IDIyCisrUG9ydCAyMjIyCisgI0FkZHJlc3NGYW1pbHkgYW55CisgI0xpc3RlbkFkZHJlc3Mg MC4wLjAuMAorICNMaXN0ZW5BZGRyZXNzIDo6CitAQCAtMTIzLDYgKzEyMyw3IEBACisgI1Blcm1p dFR1bm5lbCBubworICNDaHJvb3REaXJlY3Rvcnkgbm9uZQorICNWZXJzaW9uQWRkZW5kdW0gbm9u ZQorKyNVc2VNUFRDUCBubworIAorICMgbm8gZGVmYXVsdCBiYW5uZXIgcGF0aAorICNCYW5uZXIg bm9uZQorQEAgLTEzMCw2ICsxMzEsMTkgQEAKKyAjIG92ZXJyaWRlIGRlZmF1bHQgb2Ygbm8gc3Vi c3lzdGVtcworIFN1YnN5c3RlbQlzZnRwCS91c3IvbGliZXhlYy9zZnRwLXNlcnZlcgorIAorKyMg dGhlIGZvbGxvd2luZyBhcmUgSFBOIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisrIyB0 Y3AgcmVjZWl2ZSBidWZmZXIgcG9sbGluZy4gZGlzYWJsZSBpbiBub24gYXV0b3R1bmluZyBrZXJu ZWxzCisrI1RjcFJjdkJ1ZlBvbGwgeWVzCisrCisrIyBkaXNhYmxlIGhwbiBwZXJmb3JtYW5jZSBi b29zdHMKKysjSFBORGlzYWJsZWQgbm8KKysKKysjIGFsbG93IHRoZSB1c2Ugb2YgdGhlIG5vbmUg Y2lwaGVyCisrI05vbmVFbmFibGVkIG5vCisrCisrIyBhbGxvdyB0aGUgdXNlIG9mIHRoZSBub25l IE1BQworKyNOb25lTWFjRW5hYmxlZCBubworKworICMgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHNl dHRpbmdzIG9uIGEgcGVyLXVzZXIgYmFzaXMKKyAjTWF0Y2ggVXNlciBhbm9uY3ZzCisgIwlYMTFG b3J3YXJkaW5nIG5vCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkX2NvbmZpZy41 IG9wZW5zc2gtMTAuNXAxL3NzaGRfY29uZmlnLjUKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3Nz aGRfY29uZmlnLjUJMjAyNi0wOS0yMSAwNzowNjowNS41NjY2OTQ3NzEgKzAyMDAKKysrKyBvcGVu c3NoLTEwLjVwMS9zc2hkX2NvbmZpZy41CTIwMjYtMDktMjEgMDc6MDY6NTkuODk4MDk4NDg2ICsw MjAwCitAQCAtNTYsNiArNTYsMTYgQEAKKyAuUHEgXCYiCisgaW4gb3JkZXIgdG8gcmVwcmVzZW50 IGFyZ3VtZW50cyBjb250YWluaW5nIHNwYWNlcy4KKyAuUHAKKysuWHIgaHBuc3NoZCA4CisraXMg ZnVsbHkgY29tcGF0aWJsZSB3aXRoIE9wZW5TU0gncyBzc2hkIGFuZCB1c2VzIHRoZSBzYW1lIGNv bmZpZ3VyYXRpb24gZm9ybWF0LCBkaXJlY3RpdmVzLCBhbmQgb3B0aW9ucy4KKysuWHIgaHBuc3No ZCA4CisrY2FuIHVzZSB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGZpbGUgYXMKKysuWHIgc3NoZCA4 CisrdGhvdWdoIHRoZSBpbnZlcnNlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLiBUaGlzIGlzIGJl Y2F1c2UKKysuWHIgaHBuc3NoIDgKKytoYXMgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgd2hpY2gg YXJlIGRpc2N1c3NlZCBiZWxvdy4gQXMgc3VjaCBhZG1pbmlzdHJhdG9ycyBzaG91bGQgbWFpbnRh aW4KKytzZXBlcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBlYWNoLgorKy5QcAorIFRoZSBw b3NzaWJsZQorIGtleXdvcmRzIGFuZCB0aGVpciBtZWFuaW5ncyBhcmUgYXMgZm9sbG93cyAobm90 ZSB0aGF0Cisga2V5d29yZHMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGFyZ3VtZW50cyBhcmUg Y2FzZS1zZW5zaXRpdmUpOgorQEAgLTY3OCw2ICs2ODgsMTAgQEAKKyBUQ1AgYW5kIFN0cmVhbUxv Y2FsLgorIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBhbGwgb3RoZXIgZm9yd2FyZGluZy1yZWxhdGVk IG9wdGlvbnMgYW5kIG1heQorIHNpbXBsaWZ5IHJlc3RyaWN0ZWQgY29uZmlndXJhdGlvbnMuCisr Lkl0IENtIERpc2FibGVNVEFFUworK1N3aXRjaCB0aGUgZW5jcnlwdGlvbiBjaXBoZXIgYmVpbmcg dXNlZCBmcm9tIHRoZSBtdWx0aXRocmVhZGVkIE1ULUFFUy1DVFIgY2lwaGVyCisrYmFjayB0byB0 aGUgc3RvY2sgc2luZ2xlLXRocmVhZGVkIEFFUy1DVFIgY2lwaGVyLiBEZWZhdWx0IGlzIAorKy5D bSBuby4gSFBOU1NIIG9ubHkuIAorIC5JdCBDbSBFeHBvc2VBdXRoSW5mbworIFdyaXRlcyBhIHRl bXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMg YW5kCisgcHVibGljIGNyZWRlbnRpYWxzIChlLmcuIGtleXMpIHVzZWQgdG8gYXV0aGVudGljYXRl IHRoZSB1c2VyLgorQEAgLTEwMzgsNiArMTA1MiwxMSBAQAorIHRoYXQgdGhlIHNlcnZlciBvZmZl cnMuCisgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNpZ25hdHVyZSBhbGdvcml0aG1zIG1heSBhbHNv IGJlIG9idGFpbmVkIHVzaW5nCisgLlFxIHNzaCAtUSBIb3N0S2V5QWxnb3JpdGhtcyAuCisrLkl0 IENtIEhQTkRpc2FibGVkCisrSW4gc29tZSBzaXR1YXRpb25zLCBzdWNoIGFzIHRyYW5zZmVycyBv biBhIGxvY2FsIGFyZWEgbmV0d29yaywgdGhlIGltcGFjdAorK29mIHRoZSBIUE4gY29kZSBwcm9k dWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBwZXJmb3JtYW5jZS4gSW4gdGhlc2UgY2FzZXMgaXQgaXMK KytoZWxwZnVsIHRvIGRpc2FibGUgdGhlIEhQTiBmdW5jdGlvbmFsaXR5LiBCeSBkZWZhdWx0IEhQ TkRpc2FibGVkIGlzIHNldCB0byAKKysuQ20gbm8uCisgLkl0IENtIElnbm9yZVJob3N0cworIFNw ZWNpZmllcyB3aGV0aGVyIHRvIGlnbm9yZSBwZXItdXNlcgorIC5QYSAucmhvc3RzCitAQCAtMTU2 Miw2ICsxNTgxLDE5IEBACisga2V5IGV4Y2hhbmdlIG1ldGhvZHMuCisgVGhlIGRlZmF1bHQgaXMK KyAuUGEgL2V0Yy9tb2R1bGkgLgorKy5JdCBDbSBOb25lRW5hYmxlZAorK0VuYWJsZSBvciBkaXNh YmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgY2lwaGVyLiBDYXJlIG11c3QgYWx3YXlzIGJlIHVzZWQK Kyt3aGVuIGVuYWJsaW5nIHRoaXMgYXMgaXQgd2lsbCBhbGxvdyB1c2VycyB0byBzZW5kIGRhdGEg aW4gdGhlIGNsZWFyLiBIb3dldmVyLAorK2l0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgYXV0 aGVudGljYXRpb24gaW5mb3JtYXRpb24gcmVtYWlucyBlbmNyeXB0ZWQKKytldmVuIGlmIHRoaXMg b3B0aW9uIGlzIGVuYWJsZWQuIERlZmF1bHQgaXMgCisrLkNtIG5vCisrLkl0IENtIE5vbmVNYWNF bmFibGVkCisrRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBNQUMuIFdoZW4g dGhpcyBpcyBlbmFibGVkIHNzaAorK3dpbGwgKm5vdCogcHJvdmlkZSBkYXRhIGludGVncml0eSBv ZiBhbnkgZGF0YSBiZWluZyB0cmFuc21pdHRlZCBiZXR3ZWVuIGhvc3RzLiBVc2UKKyt3aXRoIGNh dXRpb24gYXMgaXQsIHVubGlrZSBqdXN0IHVzaW5nIE5vbmVFbmFibGVkLCBkb2Vzbid0IHByb3Zp ZGUgZGF0YSBpbnRlZ3JpdHkgYW5kCisrcHJvdGVjdGlvbiBhZ2FpbnN0IG1hbi1pbi10aGUtbWlk ZGxlIGF0dGFja3MuIEFzIHdpdGggTm9uZUVuYWJsZWQgYWxsIGF1dGhlbnRpY2F0aW9uCisrcmVt YWlucyBlbmNyeXB0ZWQgYW5kIGludGVncml0eSBpcyBlbnN1cmVkLiBEZWZhdWx0IGlzIAorKy5D bSBuby4KKyAuSXQgQ20gUEFNU2VydmljZU5hbWUKKyBTcGVjaWZpZXMgdGhlIHNlcnZpY2UgbmFt ZSB1c2VkIGZvciBQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcyAoUEFNKQorIGF1dGhl bnRpY2F0aW9uLCBhdXRob3Jpc2F0aW9uIGFuZCBzZXNzaW9uIGNvbnRyb2xzIHdoZW4KK0BAIC0y MTM4LDYgKzIxNzAsMTMgQEAKKyAuUHAKKyBUbyBkaXNhYmxlIFRDUCBrZWVwYWxpdmUgbWVzc2Fn ZXMsIHRoZSB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvCisgLkNtIG5vIC4KKysuSXQgQ20gVGNwUmN2 QnVmUG9sbAorK0VuYWJsZSBvZiBkaXNhYmxlIHRoZSBwb2xsaW5nIG9mIHRoZSB0Y3AgcmVjZWl2 ZSBidWZmZXIgdGhyb3VnaG91dCB0aGUgbGlmZQorK29mIHRoZSBjb25uZWN0aW9uLiBNYWtlIHN1 cmUgdGhhdCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGZvciBzeXN0ZW1zIG1ha2luZyAKKyt1c2Ug b2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQrLCAyLjYsIE1TIFZpc3RhKSBpbiBv cmRlciB0bworK21heGltaXplIHRocm91Z2hwdXQgb24gaGlnaCBwZXJmb3JtYW5jZSBuZXR3b3Jr cy4gCisrRGVmYXVsdCBpcyAKKysuQ20geWVzLgorIC5JdCBDbSBUcnVzdGVkVXNlckNBS2V5cwor IFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyBwdWJsaWMga2V5cyBvZiBjZXJ0aWZpY2F0ZSBh dXRob3JpdGllcyB0aGF0IGFyZQorIHRydXN0ZWQgdG8gc2lnbiB1c2VyIGNlcnRpZmljYXRlcyBm b3IgYXV0aGVudGljYXRpb24sIG9yCitAQCAtMjE5OCw2ICsyMjM3LDEyIEBACisgLkNtIE1hdGNo CisgLkNtIEhvc3QKKyBkaXJlY3RpdmVzLgorKy5JdCBDbSBVc2VNUFRDUAorK0lmIHNldCB0bwor Ky5DbSB5ZXMgLAorK3RoaXMgd2lsbCBlbmFibGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGluc3Rl YWQgb2YgVENQICh0aGlzIG9ubHkgd29ya3Mgb24gTGludXgpLgorK1RoZSBkZWZhdWx0IGlzCisr LkNtIG5vIC4KKyAuSXQgQ20gVXNlUEFNCisgRW5hYmxlcyB0aGUgUGx1Z2dhYmxlIEF1dGhlbnRp Y2F0aW9uIE1vZHVsZSBpbnRlcmZhY2UuCisgSWYgc2V0IHRvCitAQCAtMjQ0MywzICsyNDg4LDEx IEBACisgYW5kCisgLkFuIE1hcmt1cyBGcmllZGwKKyBjb250cmlidXRlZCBzdXBwb3J0IGZvciBw cml2aWxlZ2Ugc2VwYXJhdGlvbi4KKysuQW4gQ2hyaXMgUmFwaWVyLCAKKysuQW4gTWljaGFlbCBT dGV2ZW5zLCAKKysuQW4gQmVuIEJlbm5ldCwgCisrYW5kIAorKy5BbiBNaWtlIFRhc290YSAKKytk ZXZlbG9wZWQgdGhlIEhQTiBleHRlbnNpb25zIGF0IHRoZSBQaXR0c2J1cmdoIFN1cGVyY29tdXRp bmcgQ2VudGVyIAorK3dpdGggZ3JhbnRzIGZyb20gQ2lzY28sIHRoZSBOYXRpb25hbCBMaWJyYXJ5 IG9mIE1lZGljaW5lLCBhbmQgCisrdGhlIE5hdGlvbmFsIFNjaWVuY2UgRm91bmRhdGlvbi4gCitk aWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLXNlc3Npb24uYyBvcGVuc3NoLTEwLjVw MS9zc2hkLXNlc3Npb24uYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoZC1zZXNzaW9uLmMJ MjAyNi0wOS0yMSAwNzowNjowNS41NjcxNjkxNjUgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9z c2hkLXNlc3Npb24uYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5ODQwNTIzNyArMDIwMAorQEAgLTEx MDcsNiArMTEwNywyMCBAQAorIAl9CisgCWVuZHB3ZW50KCk7CisgCisrCS8qIGdldCBOT05FIG9w dGlvbnMgKi8KKysJaWYgKG9wdGlvbnMubm9uZV9lbmFibGVkID09IDEpIHsKKysJCWNoYXIgKm9s ZF9jaXBoZXJzID0gb3B0aW9ucy5jaXBoZXJzOworKwkJeGFzcHJpbnRmKCZvcHRpb25zLmNpcGhl cnMsICIlcyxub25lIiwgb2xkX2NpcGhlcnMpOworKwkJZnJlZShvbGRfY2lwaGVycyk7CisrCisr CQkvKiBvbmx5IGVuYWJsZSB0aGUgbm9uZSBNQUMgaW4gY29udGV4dCBvZiB0aGUgbm9uZSBjaXBo ZXIgLWNqciAqLworKwkJaWYgKG9wdGlvbnMubm9uZW1hY19lbmFibGVkID09IDEpIHsKKysJCQlj aGFyICpvbGRfbWFjcyA9IG9wdGlvbnMubWFjczsKKysJCQl4YXNwcmludGYoJm9wdGlvbnMubWFj cywgIiVzLG5vbmUiLCBvbGRfbWFjcyk7CisrCQkJZnJlZShvbGRfbWFjcyk7CisrCQl9CisrCX0K KysKKyAJaWYgKCFkZWJ1Z19mbGFnICYmICFpbmV0ZF9mbGFnKSB7CisgCQlpZiAoKHN0YXJ0dXBf cGlwZSA9IGR1cChSRUVYRUNfQ09ORklHX1BBU1NfRkQpKSA9PSAtMSkKKyAJCQlmYXRhbCgiaW50 ZXJuYWwgZXJyb3I6IG5vIHN0YXJ0dXAgcGlwZSIpOworQEAgLTEzMjAsNiArMTMzNCw5IEBACisg CSAgICByZG9tYWluID09IE5VTEwgPyAiIiA6ICJcIiIpOworIAlmcmVlKGxhZGRyKTsKKyAKKysJ Lyogc2V0IHRoZSBIUE4gb3B0aW9ucyBmb3IgdGhlIGNoaWxkICovCisrCWNoYW5uZWxfc2V0X2hw bl9kaXNhYmxlZChvcHRpb25zLmhwbl9kaXNhYmxlZCk7CisrCisgCS8qCisgCSAqIFdlIGRvbid0 IHdhbnQgdG8gbGlzdGVuIGZvcmV2ZXIgdW5sZXNzIHRoZSBvdGhlciBzaWRlCisgCSAqIHN1Y2Nl c3NmdWxseSBhdXRoZW50aWNhdGVzIGl0c2VsZi4gIFNvIHdlIHNldCB1cCBhbiBhbGFybSB3aGlj aCBpcworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoLmggb3BlbnNzaC0xMC41cDEv c3NoLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaC5oCTIwMjYtMDgtMTEgMDQ6MjI6MTcu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoLmgJMjAyNi0wOS0yMSAxMToz MjowMy4xMTQ1NTE3MzYgKzAyMDAKK0BAIC0xNCw2ICsxNCw3IEBACisgCisgLyogRGVmYXVsdCBw b3J0IG51bWJlci4gKi8KKyAjZGVmaW5lIFNTSF9ERUZBVUxUX1BPUlQJMjIKKysjZGVmaW5lIEhQ TlNTSF9ERUZBVUxUX1BPUlQgICAgMjIyMgorIAorIC8qCisgICogTWF4aW11bSBudW1iZXIgb2Yg Y2VydGlmaWNhdGUgZmlsZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkCitAQCAtNDMsNyArNDQsNyBA QAorICAqIE5hbWUgZm9yIHRoZSBzZXJ2aWNlLiAgVGhlIHBvcnQgbmFtZWQgYnkgdGhpcyBzZXJ2 aWNlIG92ZXJyaWRlcyB0aGUKKyAgKiBkZWZhdWx0IHBvcnQgaWYgcHJlc2VudC4KKyAgKi8KKy0j ZGVmaW5lIFNTSF9TRVJWSUNFX05BTUUJInNzaCIKKysjZGVmaW5lIFNTSF9TRVJWSUNFX05BTUUJ ImhwbnNzaCIKKyAKKyAvKgorICAqIE5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGNv bnRhaW5pbmcgdGhlIHByb2Nlc3MgSUQgb2YgdGhlCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEu b3JpZy9zc2hrZXkuYyBvcGVuc3NoLTEwLjVwMS9zc2hrZXkuYworLS0tIG9wZW5zc2gtMTAuNXAx Lm9yaWcvc3Noa2V5LmMJMjAyNi0wOS0yMSAwNzowNjowNS41MzAwNzY4OTUgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjVwMS9zc2hrZXkuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5ODcxNTQ4NiArMDIw MAorQEAgLTE3NjMsNyArMTc2Myw4IEBACisgCSAgICBzdGRlcnIpOworICNlbmRpZgorIAlpZiAo KHIgPSBjaXBoZXJfaW5pdCgmY2N0eCwgY2lwaGVyLCBrZXlpdiwgY2lwaGVyX2tleWxlbihjaXBo ZXIpLAorLQkgICAga2V5aXYgKyBjaXBoZXJfa2V5bGVuKGNpcGhlciksIGNpcGhlcl9pdmxlbihj aXBoZXIpLCAxKSkgIT0gMCkKKysJICAgIGtleWl2ICsgY2lwaGVyX2tleWxlbihjaXBoZXIpLCBj aXBoZXJfaXZsZW4oY2lwaGVyKSwgMCwKKysJICAgIENJUEhFUl9FTkNSWVBULCBDSVBIRVJfU0VS SUFMKSkgIT0gMCkKKyAJCWdvdG8gb3V0OworIAorIAkvKiBTZXJpYWxpc2UgYW5kIGVuY3J5cHQg dGhlIHByaXZhdGUga2V5IHVzaW5nIHRoZSBlcGhlbWVyYWwga2V5ICovCitAQCAtMTg5Nyw3ICsx ODk4LDggQEAKKyAJICAgIGtleWl2LCBTU0hfRElHRVNUX01BWF9MRU5HVEgpKSAhPSAwKQorIAkJ Z290byBvdXQ7CisgCWlmICgociA9IGNpcGhlcl9pbml0KCZjY3R4LCBjaXBoZXIsIGtleWl2LCBj aXBoZXJfa2V5bGVuKGNpcGhlciksCistCSAgICBrZXlpdiArIGNpcGhlcl9rZXlsZW4oY2lwaGVy KSwgY2lwaGVyX2l2bGVuKGNpcGhlciksIDApKSAhPSAwKQorKwkgICAga2V5aXYgKyBjaXBoZXJf a2V5bGVuKGNpcGhlciksIGNpcGhlcl9pdmxlbihjaXBoZXIpLCAwLAorKwkgICAgQ0lQSEVSX0RF Q1JZUFQsIENJUEhFUl9TRVJJQUwpKSAhPSAwKQorIAkJZ290byBvdXQ7CisgI2lmZGVmIERFQlVH X1BLCisgCWZwcmludGYoc3RkZXJyLCAiJXM6IGtleStpdlxuIiwgX19mdW5jX18pOworQEAgLTI5 NDUsNiArMjk0NywxMyBAQAorIAkJa2RmbmFtZSA9ICJub25lIjsKKyAJfSBlbHNlIGlmIChjaXBo ZXJuYW1lID09IE5VTEwpCisgCQljaXBoZXJuYW1lID0gREVGQVVMVF9DSVBIRVJOQU1FOworKwkv KgorKwkgKiBOT1RFOiBXaXRob3V0IE9wZW5TU0wsIHRoaXMgc3RyaW5nIGNvbXBhcmlzb24gaXMg c3RpbGwgc2FmZSwgZXZlbgorKwkgKiB0aG91Z2ggaXQgd2lsbCBuZXZlciBtYXRjaCBiZWNhdXNl IHRoZSBtdWx0aXRocmVhZGVkIGNpcGhlciBpcyBub3QKKysJICogZW5hYmxlZC4KKysJICovCisr CWVsc2UgaWYgKHN0cmNtcChjaXBoZXJuYW1lLCAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3No Lm9yZyIpID09IDApCisrCQljaXBoZXJuYW1lID0gImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2gu Y29tIjsKKyAJaWYgKChjaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShjaXBoZXJuYW1lKSkgPT0gTlVM TCkgeworIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAJCWdvdG8gb3V0OworQEAg LTI5ODAsNyArMjk4OSw3IEBACisgCQlnb3RvIG91dDsKKyAJfQorIAlpZiAoKHIgPSBjaXBoZXJf aW5pdCgmY2lwaGVyY29udGV4dCwgY2lwaGVyLCBrZXksIGtleWxlbiwKKy0JICAgIGtleSArIGtl eWxlbiwgaXZsZW4sIDEpKSAhPSAwKQorKwkgICAga2V5ICsga2V5bGVuLCBpdmxlbiwgMCwgQ0lQ SEVSX0VOQ1JZUFQsIENJUEhFUl9TRVJJQUwpKSAhPSAwKQorIAkJZ290byBvdXQ7CisgCisgCWlm ICgociA9IHNzaGJ1Zl9wdXQoZW5jb2RlZCwgQVVUSF9NQUdJQywgc2l6ZW9mKEFVVEhfTUFHSUMp KSkgIT0gMCB8fAorQEAgLTMxNjYsNiArMzE3NSw4IEBACisgCSAgICAociA9IHNzaGJ1Zl9nZXRf dTMyKGRlY29kZWQsICZlbmNyeXB0ZWRfbGVuKSkgIT0gMCkKKyAJCWdvdG8gb3V0OworIAorKwlp ZiAoc3RyY21wKGNpcGhlcm5hbWUsICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIikg PT0gMCkKKysJCXN0cmNweShjaXBoZXJuYW1lLCAiY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5j b20iKTsKKyAJaWYgKChjaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShjaXBoZXJuYW1lKSkgPT0gTlVM TCkgeworIAkJciA9IFNTSF9FUlJfS0VZX1VOS05PV05fQ0lQSEVSOworIAkJZ290byBvdXQ7CitA QCAtMzIyMSw3ICszMjMyLDcgQEAKKyAJLyogZGVjcnlwdCBwcml2YXRlIHBvcnRpb24gb2Yga2V5 ICovCisgCWlmICgociA9IHNzaGJ1Zl9yZXNlcnZlKGRlY3J5cHRlZCwgZW5jcnlwdGVkX2xlbiwg JmRwKSkgIT0gMCB8fAorIAkgICAgKHIgPSBjaXBoZXJfaW5pdCgmY2lwaGVyY29udGV4dCwgY2lw aGVyLCBrZXksIGtleWxlbiwKKy0JICAgIGtleSArIGtleWxlbiwgaXZsZW4sIDApKSAhPSAwKQor KwkgICAga2V5ICsga2V5bGVuLCBpdmxlbiwgMCwgQ0lQSEVSX0RFQ1JZUFQsIENJUEhFUl9TRVJJ QUwpKSAhPSAwKQorIAkJZ290byBvdXQ7CisgCWlmICgociA9IGNpcGhlcl9jcnlwdChjaXBoZXJj b250ZXh0LCAwLCBkcCwgc3NoYnVmX3B0cihkZWNvZGVkKSwKKyAJICAgIGVuY3J5cHRlZF9sZW4s IDAsIGF1dGhsZW4pKSAhPSAwKSB7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy91bWFj LmMgb3BlbnNzaC0xMC41cDEvdW1hYy5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy91bWFjLmMJ MjAyNi0wOC0xMSAwNDoyMjoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS91 bWFjLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTkxMjI1MjMgKzAyMDAKK0BAIC0xMzYsMTUgKzEz Niw0NyBAQAorIC8qIC0tLSBFbmRpYW4gQ29udmVyc2lvbiAtLS0gRm9yY2luZyBhc3NlbWJseSBv biBzb21lIHBsYXRmb3JtcyAgICAgICAgICAgKi8KKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisr CisrLyogVXNpbmcgbG9jYWwgc3RhdGljYWxseSBkZWZpbmVkIHZlcnNpb25zIG9mIHRoZSBnZXQv cHV0IGZ1bmN0aW9ucworKyAqIGZvdW5kIGluIG1pc2MuYyBhbGxvd3MgdGhlbSB0byBiZSBpbmxp bmVkLiBUaGlzIGltcHJvdmVzIHRocm91Z2hwdXQKKysgKiBwZXJmb3JtYW5jZSBieSAxMCUgdG8g MTUlIG9uIHdlbGwgY29ubmVjdGVkICgxMEdiL3MrKSBzeXN0ZW1zLiAKKysgKiBDaHJpcyBSYXBp ZXIgPHJhcGllckBwc2MuZWR1PiAyMDIyLTAzLTA5ICovCisrCisrc3RhdGljICBfX2F0dHJpYnV0 ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEsIDQpKSkKKyt1X2ludDMyX3QgdW1hY19n ZXRfdTMyX2xlKGNvbnN0IHZvaWQgKnZwKQorK3sKKysgICAgICAgIGNvbnN0IHVfY2hhciAqcCA9 IChjb25zdCB1X2NoYXIgKil2cDsKKysgICAgICAgIHVfaW50MzJfdCB2OworKworKyAgICAgICAg diAgPSAodV9pbnQzMl90KXBbMF07CisrICAgICAgICB2IHw9ICh1X2ludDMyX3QpcFsxXSA8PCA4 OworKyAgICAgICAgdiB8PSAodV9pbnQzMl90KXBbMl0gPDwgMTY7CisrICAgICAgICB2IHw9ICh1 X2ludDMyX3QpcFszXSA8PCAyNDsKKysKKysgICAgICAgIHJldHVybiAodik7CisrfQorKworKyNp ZiAwIC8qIGNvbXBpbGUgdGltZSB3YXJuaW5nIHRocm93biBvdGhlcndpc2UgKi8KKytzdGF0aWMg X19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCA0KSkpOworK3ZvaWQg dW1hY19wdXRfdTMyX2xlKHZvaWQgKnZwLCB1X2ludDMyX3QgdikKKyt7CisrICAgICAgICB1X2No YXIgKnAgPSAodV9jaGFyICopdnA7CisrCisrICAgICAgICBwWzBdID0gKHVfY2hhcil2ICYgMHhm ZjsKKysgICAgICAgIHBbMV0gPSAodV9jaGFyKSh2ID4+IDgpICYgMHhmZjsKKysgICAgICAgIHBb Ml0gPSAodV9jaGFyKSh2ID4+IDE2KSAmIDB4ZmY7CisrICAgICAgICBwWzNdID0gKHVfY2hhciko diA+PiAyNCkgJiAweGZmOworK30KKysjZW5kaWYKKysKKyAjaWYgKF9fTElUVExFX0VORElBTl9f KQorICNkZWZpbmUgTE9BRF9VSU5UMzJfUkVWRVJTRUQocCkJCWdldF91MzIocCkKKyAjZGVmaW5l IFNUT1JFX1VJTlQzMl9SRVZFUlNFRChwLHYpCXB1dF91MzIocCx2KQorICNlbHNlCistI2RlZmlu ZSBMT0FEX1VJTlQzMl9SRVZFUlNFRChwKQkJZ2V0X3UzMl9sZShwKQorLSNkZWZpbmUgU1RPUkVf VUlOVDMyX1JFVkVSU0VEKHAsdikJcHV0X3UzMl9sZShwLHYpCisrI2RlZmluZSBMT0FEX1VJTlQz Ml9SRVZFUlNFRChwKQkJdW1hY19nZXRfdTMyX2xlKHApCisgI2VuZGlmCisgCistI2RlZmluZSBM T0FEX1VJTlQzMl9MSVRUTEUocCkJCShnZXRfdTMyX2xlKHApKQorKyNkZWZpbmUgTE9BRF9VSU5U MzJfTElUVExFKHApCQkodW1hY19nZXRfdTMyX2xlKHApKQorICNkZWZpbmUgU1RPUkVfVUlOVDMy X0JJRyhwLHYpCQlwdXRfdTMyKHAsIHYpCisgCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworZGlmZiAt TnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvdXRoYXNoLmggb3BlbnNzaC0xMC41cDEvdXRoYXNoLmgK Ky0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3V0aGFzaC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvdXRoYXNoLmgJMjAyNi0wOS0yMSAwNzow Njo1OS44OTk1NDcyMzUgKzAyMDAKK0BAIC0wLDAgKzEsMTE0MCBAQAorKy8qCisrQ29weXJpZ2h0 IChjKSAyMDAzLTIwMjIsIFRyb3kgRC4gSGFuc29uICBodHRwczovL3Ryb3lkaGFuc29uLmdpdGh1 Yi5pby91dGhhc2gvCisrQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysKKytSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyttb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMgYXJlIG1ldDoKKysKKysgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysKKytUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTICJBUworK0lTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRAorK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUgorK09SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLAorK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKytQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKytQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisrTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcKKytORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMKKytTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysqLworKworKyNpZm5kZWYgVVRIQVNIX0gKKysj ZGVmaW5lIFVUSEFTSF9ICisrCisrI2RlZmluZSBVVEhBU0hfVkVSU0lPTiAyLjMuMAorKworKyNp bmNsdWRlIDxzdHJpbmcuaD4gICAvKiBtZW1jbXAsIG1lbXNldCwgc3RybGVuICovCisrI2luY2x1 ZGUgPHN0ZGRlZi5oPiAgIC8qIHB0cmRpZmZfdCAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAv KiBleGl0ICovCisrCisrI2lmIGRlZmluZWQoSEFTSF9ERUZJTkVfT1dOX1NURElOVCkgJiYgSEFT SF9ERUZJTkVfT1dOX1NURElOVAorKy8qIFRoaXMgY29kZXBhdGggaXMgcHJvdmlkZWQgZm9yIGJh Y2t3YXJkIGNvbXBhdGliaWxpdHksIGJ1dCBJIHBsYW4gdG8gcmVtb3ZlIGl0LiAqLworKyN3YXJu aW5nICJIQVNIX0RFRklORV9PV05fU1RESU5UIGlzIGRlcHJlY2F0ZWQ7IHBsZWFzZSB1c2UgSEFT SF9OT19TVERJTlQgaW5zdGVhZCIKKyt0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKKyt0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKKysjZWxpZiBkZWZpbmVkKEhBU0hfTk9fU1RE SU5UKSAmJiBIQVNIX05PX1NURElOVAorKyNlbHNlCisrI2luY2x1ZGUgPHN0ZGludC5oPiAgIC8q IHVpbnQ4X3QsIHVpbnQzMl90ICovCisrI2VuZGlmCisrCisrLyogVGhlc2UgbWFjcm9zIHVzZSBk ZWNsdHlwZSBvciB0aGUgZWFybGllciBfX3R5cGVvZiBHTlUgZXh0ZW5zaW9uLgorKyAgIEFzIGRl Y2x0eXBlIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5ld2VyIGNvbXBpbGVycyAoVlMyMDEwIG9yIGdj YyA0LjMrCisrICAgd2hlbiBjb21waWxpbmcgYysrIHNvdXJjZSkgdGhpcyBjb2RlIHVzZXMgd2hh dGV2ZXIgbWV0aG9kIGlzIG5lZWRlZAorKyAgIG9yLCBmb3IgVlMyMDA4IHdoZXJlIG5laXRoZXIg aXMgYXZhaWxhYmxlLCB1c2VzIGNhc3Rpbmcgd29ya2Fyb3VuZHMuICovCisrI2lmICFkZWZpbmVk KERFQ0xUWVBFKSAmJiAhZGVmaW5lZChOT19ERUNMVFlQRSkKKysjaWYgZGVmaW5lZChfTVNDX1ZF UikgICAvKiBNUyBjb21waWxlciAqLworKyNpZiBfTVNDX1ZFUiA+PSAxNjAwICYmIGRlZmluZWQo X19jcGx1c3BsdXMpICAvKiBWUzIwMTAgb3IgbmV3ZXIgaW4gQysrIG1vZGUgKi8KKysjZGVmaW5l IERFQ0xUWVBFKHgpIChkZWNsdHlwZSh4KSkKKysjZWxzZSAgICAgICAgICAgICAgICAgICAvKiBW UzIwMDggb3Igb2xkZXIgKG9yIFZTMjAxMCBpbiBDIG1vZGUpICovCisrI2RlZmluZSBOT19ERUNM VFlQRQorKyNlbmRpZgorKyNlbGlmIGRlZmluZWQoX19NQ1NUX18pICAvKiBFbGJydXMgQyBDb21w aWxlciAqLworKyNkZWZpbmUgREVDTFRZUEUoeCkgKF9fdHlwZW9mKHgpKQorKyNlbGlmIGRlZmlu ZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fSUNDQVJNX18pIHx8IGRlZmluZWQoX19MQ0Nf XykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykKKysjZGVmaW5lIE5PX0RFQ0xUWVBFCisrI2Vsc2Ug ICAgICAgICAgICAgICAgICAgLyogR05VLCBTdW4gYW5kIG90aGVyIGNvbXBpbGVycyAqLworKyNk ZWZpbmUgREVDTFRZUEUoeCkgKF9fdHlwZW9mKHgpKQorKyNlbmRpZgorKyNlbmRpZgorKworKyNp ZmRlZiBOT19ERUNMVFlQRQorKyNkZWZpbmUgREVDTFRZUEUoeCkKKysjZGVmaW5lIERFQ0xUWVBF X0FTU0lHTihkc3Qsc3JjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgY2hhciAqKl9kYV9kc3Qg PSAoY2hhcioqKSgmKGRzdCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICpfZGFfZHN0ID0gKGNoYXIqKShzcmMpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysjZWxz ZQorKyNkZWZpbmUgREVDTFRZUEVfQVNTSUdOKGRzdCxzcmMpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAoZHN0KSA9IERFQ0xUWVBFKGRzdCkoc3JjKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrI2VuZGlmCisrCisr I2lmbmRlZiB1dGhhc2hfbWFsbG9jCisrI2RlZmluZSB1dGhhc2hfbWFsbG9jKHN6KSBtYWxsb2Mo c3opICAgICAgLyogbWFsbG9jIGZjbiAgICAgICAgICAgICAgICAgICAgICAqLworKyNlbmRpZgor KyNpZm5kZWYgdXRoYXNoX2ZyZWUKKysjZGVmaW5lIHV0aGFzaF9mcmVlKHB0cixzeikgZnJlZShw dHIpICAgICAvKiBmcmVlIGZjbiAgICAgICAgICAgICAgICAgICAgICAgICovCisrI2VuZGlmCisr I2lmbmRlZiB1dGhhc2hfYnplcm8KKysjZGVmaW5lIHV0aGFzaF9iemVybyhhLG4pIG1lbXNldChh LCdcMCcsbikKKysjZW5kaWYKKysjaWZuZGVmIHV0aGFzaF9zdHJsZW4KKysjZGVmaW5lIHV0aGFz aF9zdHJsZW4ocykgc3RybGVuKHMpCisrI2VuZGlmCisrCisrI2lmbmRlZiBIQVNIX0ZVTkNUSU9O CisrI2RlZmluZSBIQVNIX0ZVTkNUSU9OKGtleXB0cixrZXlsZW4saGFzaHYpIEhBU0hfSkVOKGtl eXB0ciwga2V5bGVuLCBoYXNodikKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBU0hfS0VZQ01QCisr I2RlZmluZSBIQVNIX0tFWUNNUChhLGIsbikgbWVtY21wKGEsYixuKQorKyNlbmRpZgorKworKyNp Zm5kZWYgdXRoYXNoX25vZXhwYW5kX2Z5aQorKyNkZWZpbmUgdXRoYXNoX25vZXhwYW5kX2Z5aSh0 YmwpICAgICAgICAgIC8qIGNhbiBiZSBkZWZpbmVkIHRvIGxvZyBub2V4cGFuZCAgKi8KKysjZW5k aWYKKysjaWZuZGVmIHV0aGFzaF9leHBhbmRfZnlpCisrI2RlZmluZSB1dGhhc2hfZXhwYW5kX2Z5 aSh0YmwpICAgICAgICAgICAgLyogY2FuIGJlIGRlZmluZWQgdG8gbG9nIGV4cGFuZHMgICAqLwor KyNlbmRpZgorKworKyNpZm5kZWYgSEFTSF9OT05GQVRBTF9PT00KKysjZGVmaW5lIEhBU0hfTk9O RkFUQUxfT09NIDAKKysjZW5kaWYKKysKKysjaWYgSEFTSF9OT05GQVRBTF9PT00KKysvKiBtYWxs b2MgZmFpbHVyZXMgY2FuIGJlIHJlY292ZXJlZCBmcm9tICovCisrCisrI2lmbmRlZiB1dGhhc2hf bm9uZmF0YWxfb29tCisrI2RlZmluZSB1dGhhc2hfbm9uZmF0YWxfb29tKG9iaikgZG8ge30gd2hp bGUgKDApICAgIC8qIG5vbi1mYXRhbCBPT00gZXJyb3IgKi8KKysjZW5kaWYKKysKKysjZGVmaW5l IEhBU0hfUkVDT1JEX09PTShvb21lZCkgZG8geyAob29tZWQpID0gMTsgfSB3aGlsZSAoMCkKKysj ZGVmaW5lIElGX0hBU0hfTk9ORkFUQUxfT09NKHgpIHgKKysKKysjZWxzZQorKy8qIG1hbGxvYyBm YWlsdXJlcyByZXN1bHQgaW4gbG9zdCBtZW1vcnksIGhhc2ggdGFibGVzIGFyZSB1bnVzYWJsZSAq LworKworKyNpZm5kZWYgdXRoYXNoX2ZhdGFsCisrI2RlZmluZSB1dGhhc2hfZmF0YWwobXNnKSBl eGl0KC0xKSAgICAgICAgLyogZmF0YWwgT09NIGVycm9yICovCisrI2VuZGlmCisrCisrI2RlZmlu ZSBIQVNIX1JFQ09SRF9PT00ob29tZWQpIHV0aGFzaF9mYXRhbCgib3V0IG9mIG1lbW9yeSIpCisr I2RlZmluZSBJRl9IQVNIX05PTkZBVEFMX09PTSh4KQorKworKyNlbmRpZgorKworKy8qIGluaXRp YWwgbnVtYmVyIG9mIGJ1Y2tldHMgKi8KKysjZGVmaW5lIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VU UyAzMlUgICAgIC8qIGluaXRpYWwgbnVtYmVyIG9mIGJ1Y2tldHMgICAgICAgICovCisrI2RlZmlu ZSBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFNfTE9HMiA1VSAvKiBsZzIgb2YgaW5pdGlhbCBudW1i ZXIgb2YgYnVja2V0cyAqLworKyNkZWZpbmUgSEFTSF9CS1RfQ0FQQUNJVFlfVEhSRVNIIDEwVSAg ICAgLyogZXhwYW5kIHdoZW4gYnVja2V0IGNvdW50IHJlYWNoZXMgKi8KKysKKysvKiBjYWxjdWxh dGUgdGhlIGVsZW1lbnQgd2hvc2UgaGFzaCBoYW5kbGUgYWRkcmVzcyBpcyBoaHAgKi8KKysjZGVm aW5lIEVMTVRfRlJPTV9ISCh0YmwsaGhwKSAoKHZvaWQqKSgoKGNoYXIqKShoaHApKSAtICgodGJs KS0+aGhvKSkpCisrLyogY2FsY3VsYXRlIHRoZSBoYXNoIGhhbmRsZSBmcm9tIGVsZW1lbnQgYWRk cmVzcyBlbHAgKi8KKysjZGVmaW5lIEhIX0ZST01fRUxNVCh0YmwsZWxwKSAoKFVUX2hhc2hfaGFu ZGxlKikodm9pZCopKCgoY2hhciopKGVscCkpICsgKCh0YmwpLT5oaG8pKSkKKysKKysjZGVmaW5l IEhBU0hfUk9MTEJBQ0tfQktUKGhoLCBoZWFkLCBpdGVtcHRyaGgpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgc3RydWN0 IFVUX2hhc2hfaGFuZGxlICpfaGRfaGhfaXRlbSA9IChpdGVtcHRyaGgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9oZF9ia3Q7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX1RP X0JLVChfaGRfaGhfaXRlbS0+aGFzaHYsIChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hk X2JrdCk7ICAgICAgICAgXAorKyAgKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbX2hkX2JrdF0uY291 bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oZF9oaF9p dGVtLT5oaF9uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICBfaGRfaGhfaXRlbS0+aGhfcHJldiA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDAp CisrCisrI2RlZmluZSBIQVNIX1ZBTFVFKGtleXB0cixrZXlsZW4saGFzaHYpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIEhBU0hfRlVOQ1RJT04oa2V5cHRyLCBrZXlsZW4sIGhhc2h2KTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5l IEhBU0hfRklORF9CWUhBU0hWQUxVRShoaCxoZWFkLGtleXB0cixrZXlsZW4saGFzaHZhbCxvdXQp ICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKG91dCkg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIGlmIChoZWFkKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHVuc2ln bmVkIF9oZl9ia3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX1RPX0JLVChoYXNodmFsLCAoaGVhZCktPmhoLnRi bC0+bnVtX2J1Y2tldHMsIF9oZl9ia3QpOyAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKEhB U0hfQkxPT01fVEVTVCgoaGVhZCktPmhoLnRibCwgaGFzaHZhbCkgIT0gMCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgSEFTSF9GSU5EX0lOX0JLVCgoaGVhZCktPmhoLnRibCwg aGgsIChoZWFkKS0+aGgudGJsLT5idWNrZXRzWyBfaGZfYmt0IF0sIGtleXB0ciwga2V5bGVuLCBo YXNodmFsLCBvdXQpOyBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9GSU5EKGhoLGhl YWQsa2V5cHRyLGtleWxlbixvdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAob3V0KSA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgaWYgKGhlYWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdW5zaWduZWQgX2hmX2hhc2h2OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIEhBU0hfVkFMVUUoa2V5cHRyLCBrZXlsZW4sIF9oZl9oYXNodik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0ZJTkRfQllIQVNIVkFMVUUo aGgsIGhlYWQsIGtleXB0ciwga2V5bGVuLCBfaGZfaGFzaHYsIG91dCk7ICAgICAgICAgICAgIFwK KysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjaWZkZWYgSEFT SF9CTE9PTQorKyNkZWZpbmUgSEFTSF9CTE9PTV9CSVRMRU4gKDFVTCA8PCBIQVNIX0JMT09NKQor KyNkZWZpbmUgSEFTSF9CTE9PTV9CWVRFTEVOIChIQVNIX0JMT09NX0JJVExFTi84VUwpICsgKCgo SEFTSF9CTE9PTV9CSVRMRU4lOFVMKSE9MFVMKSA/IDFVTCA6IDBVTCkKKysjZGVmaW5lIEhBU0hf QkxPT01fTUFLRSh0Ymwsb29tZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKHRibCktPmJsb29t X25iaXRzID0gSEFTSF9CTE9PTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICh0YmwpLT5ibG9vbV9idiA9ICh1aW50OF90Kil1dGhhc2hfbWFsbG9j KEhBU0hfQkxPT01fQllURUxFTik7ICAgICAgICAgICAgICAgICBcCisrICBpZiAoISh0YmwpLT5i bG9vbV9idikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICBIQVNIX1JFQ09SRF9PT00ob29tZWQpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIHV0aGFzaF9iemVybygodGJsKS0+Ymxvb21fYnYsIEhBU0hfQkxPT01f QllURUxFTik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAodGJsKS0+Ymxvb21f c2lnID0gSEFTSF9CTE9PTV9TSUdOQVRVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysj ZGVmaW5lIEhBU0hfQkxPT01fRlJFRSh0YmwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg dXRoYXNoX2ZyZWUoKHRibCktPmJsb29tX2J2LCBIQVNIX0JMT09NX0JZVEVMRU4pOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9C TE9PTV9CSVRTRVQoYnYsaWR4KSAoYnZbKGlkeCkvOFVdIHw9ICgxVSA8PCAoKGlkeCklOFUpKSkK KysjZGVmaW5lIEhBU0hfQkxPT01fQklUVEVTVChidixpZHgpIChidlsoaWR4KS84VV0gJiAoMVUg PDwgKChpZHgpJThVKSkpCisrCisrI2RlZmluZSBIQVNIX0JMT09NX0FERCh0YmwsaGFzaHYpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9C TE9PTV9CSVRTRVQoKHRibCktPmJsb29tX2J2LCAoKGhhc2h2KSAmICh1aW50MzJfdCkoKDFVTCA8 PCAodGJsKS0+Ymxvb21fbmJpdHMpIC0gMVUpKSkKKysKKysjZGVmaW5lIEhBU0hfQkxPT01fVEVT VCh0YmwsaGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBIQVNIX0JMT09NX0JJVFRFU1QoKHRibCktPmJsb29tX2J2LCAoKGhhc2h2KSAmICh1 aW50MzJfdCkoKDFVTCA8PCAodGJsKS0+Ymxvb21fbmJpdHMpIC0gMVUpKSkKKysKKysjZWxzZQor KyNkZWZpbmUgSEFTSF9CTE9PTV9NQUtFKHRibCxvb21lZCkKKysjZGVmaW5lIEhBU0hfQkxPT01f RlJFRSh0YmwpCisrI2RlZmluZSBIQVNIX0JMT09NX0FERCh0YmwsaGFzaHYpCisrI2RlZmluZSBI QVNIX0JMT09NX1RFU1QodGJsLGhhc2h2KSAoMSkKKysjZGVmaW5lIEhBU0hfQkxPT01fQllURUxF TiAwVQorKyNlbmRpZgorKworKyNkZWZpbmUgSEFTSF9NQUtFX1RBQkxFKGhoLGhlYWQsb29tZWQp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAoaGVhZCktPmhoLnRibCA9IChVVF9oYXNoX3RhYmxlKil1dGhh c2hfbWFsbG9jKHNpemVvZihVVF9oYXNoX3RhYmxlKSk7ICAgICAgICAgXAorKyAgaWYgKCEoaGVh ZCktPmhoLnRibCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgSEFTSF9SRUNPUkRfT09NKG9vbWVkKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICB1dGhhc2hfYnplcm8oKGhlYWQpLT5oaC50YmwsIHNpemVvZihV VF9oYXNoX3RhYmxlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGhlYWQpLT5o aC50YmwtPnRhaWwgPSAmKChoZWFkKS0+aGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cyA9IEhBU0hfSU5J VElBTF9OVU1fQlVDS0VUUzsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoaGVhZCktPmho LnRibC0+bG9nMl9udW1fYnVja2V0cyA9IEhBU0hfSU5JVElBTF9OVU1fQlVDS0VUU19MT0cyOyAg ICAgICAgICAgIFwKKysgICAgKGhlYWQpLT5oaC50YmwtPmhobyA9IChjaGFyKikoJihoZWFkKS0+ aGgpIC0gKGNoYXIqKShoZWFkKTsgICAgICAgICAgICAgICAgICBcCisrICAgIChoZWFkKS0+aGgu dGJsLT5idWNrZXRzID0gKFVUX2hhc2hfYnVja2V0Kil1dGhhc2hfbWFsbG9jKCAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgSEFTSF9JTklUSUFMX05VTV9CVUNLRVRTICogc2l6ZW9mKHN0 cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICAgICAgICAgICAgIFwKKysgICAgKGhlYWQpLT5oaC50 YmwtPnNpZ25hdHVyZSA9IEhBU0hfU0lHTkFUVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIGlmICghKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHMpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEhBU0hfUkVDT1JE X09PTShvb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICB1dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibCwgc2l6ZW9mKFVUX2hh c2hfdGFibGUpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgIHV0aGFzaF9iemVybygoaGVhZCktPmhoLnRibC0+YnVja2V0cywgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgSEFTSF9JTklU SUFMX05VTV9CVUNLRVRTICogc2l6ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICAgICAg ICAgICBcCisrICAgICAgSEFTSF9CTE9PTV9NQUtFKChoZWFkKS0+aGgudGJsLCBvb21lZCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIElGX0hBU0hfTk9ORkFU QUxfT09NKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgIGlmIChvb21lZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIHV0aGFzaF9mcmVl KChoZWFkKS0+aGgudGJsLT5idWNrZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICAgICAgSEFTSF9JTklUSUFMX05VTV9CVUNLRVRTKnNpemVvZihzdHJ1 Y3QgVVRfaGFzaF9idWNrZXQpKTsgICAgICAgICAgIFwKKysgICAgICAgICAgdXRoYXNoX2ZyZWUo KGhlYWQpLT5oaC50YmwsIHNpemVvZihVVF9oYXNoX3RhYmxlKSk7ICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX1JFUExBQ0VfQllIQVNIVkFMVUVfSU5P UkRFUihoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZhbCxhZGQscmVwbGFjZWQsY21w ZmNuKSBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKHJlcGxhY2VkKSA9IE5VTEw7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIEhBU0hfRklORF9CWUhBU0hWQUxVRShoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRu YW1lKSwga2V5bGVuX2luLCBoYXNodmFsLCByZXBsYWNlZCk7IFwKKysgIGlmIChyZXBsYWNlZCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIEhBU0hfREVMRVRFKGhoLCBoZWFkLCByZXBsYWNlZCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLCBoZWFk LCAmKChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCwgY21wZmNuKTsg XAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX1JFUExBQ0VfQllIQVNIVkFMVUUoaGgs aGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWwsYWRkLHJlcGxhY2VkKSBcCisrZG8geyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgKHJlcGxhY2VkKSA9IE5VTEw7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hf RklORF9CWUhBU0hWQUxVRShoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2lu LCBoYXNodmFsLCByZXBsYWNlZCk7IFwKKysgIGlmIChyZXBsYWNlZCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IEhBU0hfREVMRVRFKGhoLCBoZWFkLCByZXBsYWNlZCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhB U0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRShoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwg a2V5bGVuX2luLCBoYXNodmFsLCBhZGQpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhB U0hfUkVQTEFDRShoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4sYWRkLHJlcGxhY2VkKSAgICAg ICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQg X2hyX2hhc2h2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIEhBU0hfVkFMVUUoJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVu X2luLCBfaHJfaGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX1JFUExB Q0VfQllIQVNIVkFMVUUoaGgsIGhlYWQsIGZpZWxkbmFtZSwga2V5bGVuX2luLCBfaHJfaGFzaHYs IGFkZCwgcmVwbGFjZWQpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfUkVQTEFD RV9JTk9SREVSKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixhZGQscmVwbGFjZWQsY21wZmNu KSAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hyX2hhc2h2 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIEhBU0hfVkFMVUUoJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBfaHJf aGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX1JFUExBQ0VfQllIQVNI VkFMVUVfSU5PUkRFUihoaCwgaGVhZCwgZmllbGRuYW1lLCBrZXlsZW5faW4sIF9ocl9oYXNodiwg YWRkLCByZXBsYWNlZCwgY21wZmNuKTsgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNI X0FQUEVORF9MSVNUKGhoLCBoZWFkLCBhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGQpLT5oaC5u ZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAoYWRkKS0+aGgucHJldiA9IEVMTVRfRlJPTV9ISCgoaGVhZCktPmho LnRibCwgKGhlYWQpLT5oaC50YmwtPnRhaWwpOyAgICAgICAgICAgXAorKyAgKGhlYWQpLT5oaC50 YmwtPnRhaWwtPm5leHQgPSAoYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIChoZWFkKS0+aGgudGJsLT50YWlsID0gJigoYWRkKS0+aGgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysK KysjZGVmaW5lIEhBU0hfQUtCSV9JTk5FUl9MT09QKGhoLGhlYWQsYWRkLGNtcGZjbikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKGNtcGZjbihERUNMVFlQRShoZWFk KShfaHNfaXRlciksIGFkZCkgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IH0gd2hpbGUgKChfaHNfaXRlciA9IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0 ZXIpLT5uZXh0KSk7ICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjaWZkZWYgTk9fREVD TFRZUEUKKysjdW5kZWYgSEFTSF9BS0JJX0lOTkVSX0xPT1AKKysjZGVmaW5lIEhBU0hfQUtCSV9J Tk5FUl9MT09QKGhoLGhlYWQsYWRkLGNtcGZjbikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgY2hhciAqX2hzX3NhdmVkX2hl YWQgPSAoY2hhciopKGhlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIERFQ0xUWVBFX0FTU0lHTiho ZWFkLCBfaHNfaXRlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICBpZiAoY21wZmNuKGhlYWQsIGFkZCkgPiAwKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBERUNMVFlQRV9BU1NJR04o aGVhZCwgX2hzX3NhdmVkX2hlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgREVDTFRZUEVfQVNTSUdOKGhlYWQsIF9oc19zYXZlZF9oZWFkKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IHdoaWxlICgoX2hzX2l0ZXIgPSBI SF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19pdGVyKS0+bmV4dCkpOyAgICAgICAgICAg XAorK30gd2hpbGUgKDApCisrI2VuZGlmCisrCisrI2lmIEhBU0hfTk9ORkFUQUxfT09NCisrCisr I2RlZmluZSBIQVNIX0FERF9UT19UQUJMRShoaCxoZWFkLGtleXB0cixrZXlsZW5faW4saGFzaHZh bCxhZGQsb29tZWQpICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IGlmICghKG9vbWVkKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHVuc2lnbmVkIF9oYV9ia3Q7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9UT19CS1QoaGFzaHZhbCwgKGhlYWQp LT5oaC50YmwtPm51bV9idWNrZXRzLCBfaGFfYmt0KTsgICAgICAgICAgICAgICAgICBcCisrICAg IEhBU0hfQUREX1RPX0JLVCgoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfaGFfYmt0XSwgaGgsICYo YWRkKS0+aGgsIG9vbWVkKTsgICAgXAorKyAgICBpZiAob29tZWQpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICBIQVNIX1JPTExCQUNLX0JLVChoaCwgaGVhZCwgJihhZGQpLT5oaCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgSEFTSF9ERUxFVEVfSEgoaGgsIGhlYWQsICYo YWRkKS0+aGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg IChhZGQpLT5oaC50YmwgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB1dGhhc2hfbm9uZmF0YWxfb29tKGFkZCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEhBU0hfQkxPT01fQUREKChoZWFkKS0+aGgudGJs LCBoYXNodmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBI QVNIX0VNSVRfS0VZKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbik7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgKGFkZCktPmhoLnRibCA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHV0aGFz aF9ub25mYXRhbF9vb20oYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgw KQorKworKyNlbHNlCisrCisrI2RlZmluZSBIQVNIX0FERF9UT19UQUJMRShoaCxoZWFkLGtleXB0 cixrZXlsZW5faW4saGFzaHZhbCxhZGQsb29tZWQpICAgICAgICAgICAgXAorK2RvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9oYV9ia3Q7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoaGVhZCktPmho LnRibC0+bnVtX2l0ZW1zKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgSEFTSF9UT19CS1QoaGFzaHZhbCwgKGhlYWQpLT5oaC50YmwtPm51 bV9idWNrZXRzLCBfaGFfYmt0KTsgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfQUREX1RP X0JLVCgoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfaGFfYmt0XSwgaGgsICYoYWRkKS0+aGgsIG9v bWVkKTsgICAgICBcCisrICBIQVNIX0JMT09NX0FERCgoaGVhZCktPmhoLnRibCwgaGFzaHZhbCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9FTUlUX0tF WShoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW5faW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNlbmRpZgorKworKworKyNkZWZpbmUgSEFT SF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lOT1JERVIoaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2lu LGhhc2h2YWwsYWRkLGNtcGZjbikgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIElG X0hBU0hfTk9ORkFUQUxfT09NKCBpbnQgX2hhX29vbWVkID0gMDsgKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAoYWRkKS0+aGguaGFzaHYgPSAoaGFzaHZhbCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFk ZCktPmhoLmtleSA9IChjaGFyKikgKGtleXB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGQpLT5oaC5rZXlsZW4gPSAodW5zaWduZWQpIChr ZXlsZW5faW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBpZiAo IShoZWFkKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAoYWRkKS0+aGgubmV4dCA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGFk ZCktPmhoLnByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfTUFLRV9UQUJMRShoaCwgYWRkLCBfaGFfb29t ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBJRl9I QVNIX05PTkZBVEFMX09PTSggaWYgKCFfaGFfb29tZWQpIHsgKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAoaGVhZCkgPSAoYWRkKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIElGX0hB U0hfTk9ORkFUQUxfT09NKCB9ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdm9pZCAq X2hzX2l0ZXIgPSAoaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgIChhZGQpLT5oaC50YmwgPSAoaGVhZCktPmhoLnRibDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0FL QklfSU5ORVJfTE9PUChoaCwgaGVhZCwgYWRkLCBjbXBmY24pOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgaWYgKF9oc19pdGVyKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKGFkZCkt PmhoLm5leHQgPSBfaHNfaXRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgIGlmICgoKGFkZCktPmhoLnByZXYgPSBISF9GUk9NX0VMTVQo KGhlYWQpLT5oaC50YmwsIF9oc19pdGVyKS0+cHJldikpIHsgICAgIFwKKysgICAgICAgIEhIX0ZS T01fRUxNVCgoaGVhZCktPmhoLnRibCwgKGFkZCktPmhoLnByZXYpLT5uZXh0ID0gKGFkZCk7ICAg ICAgICAgICAgICBcCisrICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKGhlYWQp ID0gKGFkZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgSEhfRlJPTV9F TE1UKChoZWFkKS0+aGgudGJsLCBfaHNfaXRlciktPnByZXYgPSAoYWRkKTsgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBIQVNIX0FQUEVO RF9MSVNUKGhoLCBoZWFkLCBhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIEhBU0hfQUREX1RPX1RBQkxFKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9p biwgaGFzaHZhbCwgYWRkLCBfaGFfb29tZWQpOyAgICAgICBcCisrICBIQVNIX0ZTQ0soaGgsIGhl YWQsICJIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5PUkRFUiIpOyAgICAgICAgICAgICAg ICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0FERF9LRVlQVFJfSU5PUkRF UihoaCxoZWFkLGtleXB0cixrZXlsZW5faW4sYWRkLGNtcGZjbikgICAgICAgICAgICAgXAorK2Rv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9oc19oYXNodjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBI QVNIX1ZBTFVFKGtleXB0ciwga2V5bGVuX2luLCBfaHNfaGFzaHYpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lO T1JERVIoaGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luLCBfaHNfaGFzaHYsIGFkZCwgY21wZmNu KTsgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0FERF9CWUhBU0hWQUxVRV9JTk9S REVSKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixoYXNodmFsLGFkZCxjbXBmY24pIFwKKysg IEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLCBoZWFkLCAmKChhZGQpLT5m aWVsZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCwgY21wZmNuKQorKworKyNkZWZpbmUg SEFTSF9BRERfSU5PUkRFUihoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4sYWRkLGNtcGZjbikg ICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfQUREX0tFWVBUUl9JTk9SREVSKGhoLCBoZWFkLCAm KChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIGFkZCwgY21wZmNuKQorKworKyNkZWZpbmUg SEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFKGhoLGhlYWQsa2V5cHRyLGtleWxlbl9pbixoYXNo dmFsLGFkZCkgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBJRl9IQVNI X05PTkZBVEFMX09PTSggaW50IF9oYV9vb21lZCA9IDA7ICkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgKGFkZCktPmhoLmhhc2h2ID0gKGhhc2h2YWwpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGQpLT5o aC5rZXkgPSAoY29uc3Qgdm9pZCopIChrZXlwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAoYWRkKS0+aGgua2V5bGVuID0gKHVuc2lnbmVkKSAoa2V5bGVu X2luKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYgKCEoaGVh ZCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgKGFkZCktPmhoLm5leHQgPSBOVUxMOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChhZGQpLT5o aC5wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICBIQVNIX01BS0VfVEFCTEUoaGgsIGFkZCwgX2hhX29vbWVkKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSUZfSEFTSF9O T05GQVRBTF9PT00oIGlmICghX2hhX29vbWVkKSB7ICkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgKGhlYWQpID0gKGFkZCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBJRl9IQVNIX05P TkZBVEFMX09PTSggfSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChhZGQpLT5oaC50 YmwgPSAoaGVhZCktPmhoLnRibDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICBIQVNIX0FQUEVORF9MSVNUKGhoLCBoZWFkLCBhZGQpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBIQVNIX0FERF9UT19UQUJMRShoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW5f aW4sIGhhc2h2YWwsIGFkZCwgX2hhX29vbWVkKTsgICAgICAgXAorKyAgSEFTSF9GU0NLKGhoLCBo ZWFkLCAiSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFIik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9BRERfS0VZUFRSKGhoLGhl YWQsa2V5cHRyLGtleWxlbl9pbixhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaGFfaGFzaHY7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg SEFTSF9WQUxVRShrZXlwdHIsIGtleWxlbl9pbiwgX2hhX2hhc2h2KTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRSho aCwgaGVhZCwga2V5cHRyLCBrZXlsZW5faW4sIF9oYV9oYXNodiwgYWRkKTsgICAgICBcCisrfSB3 aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfQUREX0JZSEFTSFZBTFVFKGhoLGhlYWQsZmllbGRu YW1lLGtleWxlbl9pbixoYXNodmFsLGFkZCkgICAgICAgICAgICBcCisrICBIQVNIX0FERF9LRVlQ VFJfQllIQVNIVkFMVUUoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwg aGFzaHZhbCwgYWRkKQorKworKyNkZWZpbmUgSEFTSF9BREQoaGgsaGVhZCxmaWVsZG5hbWUsa2V5 bGVuX2luLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfQURE X0tFWVBUUihoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBhZGQpCisr CisrI2RlZmluZSBIQVNIX1RPX0JLVChoYXNodixudW1fYmt0cyxia3QpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIGJrdCA9ICgoaGFzaHYpICYgKChudW1fYmt0cykgLSAxVSkpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysvKiBkZWxldGUg ImRlbHB0ciIgZnJvbSB0aGUgaGFzaCB0YWJsZS4KKysgKiAidGhlIHVzdWFsIiBwYXRjaC11cCBw cm9jZXNzIGZvciB0aGUgYXBwLW9yZGVyIGRvdWJseS1saW5rZWQtbGlzdC4KKysgKiBUaGUgdXNl IG9mIF9oZF9oaF9kZWwgYmVsb3cgZGVzZXJ2ZXMgc3BlY2lhbCBleHBsYW5hdGlvbi4KKysgKiBU aGVzZSB1c2VkIHRvIGJlIGV4cHJlc3NlZCB1c2luZyAoZGVscHRyKSBidXQgdGhhdCBsZWQgdG8g YSBidWcKKysgKiBpZiBzb21lb25lIHVzZWQgdGhlIHNhbWUgc3ltYm9sIGZvciB0aGUgaGVhZCBh bmQgZGVsZXRlZSwgbGlrZQorKyAqICBIQVNIX0RFTEVURShoaCx1c2Vycyx1c2Vycyk7CisrICog V2Ugd2FudCB0aGF0IHRvIHdvcmssIGJ1dCBieSBjaGFuZ2luZyB0aGUgaGVhZCAodXNlcnMpIGJl bG93CisrICogd2Ugd2VyZSBmb3JmZWl0aW5nIG91ciBhYmlsaXR5IHRvIGZ1cnRoZXIgcmVmZXIg dG8gdGhlIGRlbGV0ZWUgKHVzZXJzKQorKyAqIGluIHRoZSBwYXRjaC11cCBwcm9jZXNzLiBTb2x1 dGlvbjogdXNlIHNjcmF0Y2ggc3BhY2UgdG8KKysgKiBjb3B5IHRoZSBkZWxldGVlIHBvaW50ZXIs IHRoZW4gdGhlIGxhdHRlciByZWZlcmVuY2VzIGFyZSB2aWEgdGhhdAorKyAqIHNjcmF0Y2ggcG9p bnRlciByYXRoZXIgdGhhbiB0aHJvdWdoIHRoZSByZXBvaW50ZWQgKHVzZXJzKSBzeW1ib2wuCisr ICovCisrI2RlZmluZSBIQVNIX0RFTEVURShoaCxoZWFkLGRlbHB0cikgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0RFTEVURV9ISChoaCwg aGVhZCwgJihkZWxwdHIpLT5oaCkKKysKKysjZGVmaW5lIEhBU0hfREVMRVRFX0hIKGhoLGhlYWQs ZGVscHRyaGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgY29uc3Qgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpf aGRfaGhfZGVsID0gKGRlbHB0cmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGlm ICgoX2hkX2hoX2RlbC0+cHJldiA9PSBOVUxMKSAmJiAoX2hkX2hoX2RlbC0+bmV4dCA9PSBOVUxM KSkgeyAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfQkxPT01fRlJFRSgoaGVhZCktPmhoLnRi bCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1 dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibC0+YnVja2V0cywgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKGhlYWQpLT5oaC50YmwtPm51 bV9idWNrZXRzICogc2l6ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICBcCisrICAgIHV0 aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAoaGVhZCkgPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIHVuc2lnbmVkIF9oZF9ia3Q7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAo X2hkX2hoX2RlbCA9PSAoaGVhZCktPmhoLnRibC0+dGFpbCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAoaGVhZCktPmhoLnRibC0+dGFpbCA9IEhIX0ZST01f RUxNVCgoaGVhZCktPmhoLnRibCwgX2hkX2hoX2RlbC0+cHJldik7ICAgICBcCisrICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBpZiAoX2hkX2hoX2RlbC0+cHJldiAhPSBOVUxMKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBISF9G Uk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oZF9oaF9kZWwtPnByZXYpLT5uZXh0ID0gX2hkX2ho X2RlbC0+bmV4dDsgICBcCisrICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIERFQ0xU WVBFX0FTU0lHTihoZWFkLCBfaGRfaGhfZGVsLT5uZXh0KTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChfaGRf aGhfZGVsLT5uZXh0ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hkX2ho X2RlbC0+bmV4dCktPnByZXYgPSBfaGRfaGhfZGVsLT5wcmV2OyAgIFwKKysgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIEhBU0hfVE9fQktUKF9oZF9oaF9kZWwtPmhhc2h2LCAoaGVhZCkt PmhoLnRibC0+bnVtX2J1Y2tldHMsIF9oZF9ia3QpOyAgICAgICAgXAorKyAgICBIQVNIX0RFTF9J Tl9CS1QoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbX2hkX2JrdF0sIF9oZF9oaF9kZWwpOyAgICAg ICAgICAgICAgIFwKKysgICAgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcy0tOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgSEFTSF9GU0NLKGhoLCBoZWFkLCAiSEFTSF9ERUxFVEVfSEgiKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKwor Ky8qIGNvbnZlbmllbmNlIGZvcm1zIG9mIEhBU0hfRklORC9IQVNIX0FERC9IQVNIX0RFTCAqLwor KyNkZWZpbmUgSEFTSF9GSU5EX1NUUihoZWFkLGZpbmRzdHIsb3V0KSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIHVuc2lnbmVkIF91dGhhc2hfaGZzdHJfa2V5bGVuID0gKHVuc2lnbmVkKXV0aGFzaF9zdHJs ZW4oZmluZHN0cik7ICAgICAgICAgICAgXAorKyAgICBIQVNIX0ZJTkQoaGgsIGhlYWQsIGZpbmRz dHIsIF91dGhhc2hfaGZzdHJfa2V5bGVuLCBvdXQpOyAgICAgICAgICAgICAgICAgICAgIFwKKyt9 IHdoaWxlICgwKQorKyNkZWZpbmUgSEFTSF9BRERfU1RSKGhlYWQsc3RyZmllbGQsYWRkKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIHVuc2lnbmVkIF91dGhhc2hfaGFzdHJfa2V5bGVuID0gKHVuc2lnbmVk KXV0aGFzaF9zdHJsZW4oKGFkZCktPnN0cmZpZWxkKTsgICAgXAorKyAgICBIQVNIX0FERChoaCwg aGVhZCwgc3RyZmllbGRbMF0sIF91dGhhc2hfaGFzdHJfa2V5bGVuLCBhZGQpOyAgICAgICAgICAg ICAgICAgIFwKKyt9IHdoaWxlICgwKQorKyNkZWZpbmUgSEFTSF9SRVBMQUNFX1NUUihoZWFkLHN0 cmZpZWxkLGFkZCxyZXBsYWNlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIHVuc2lnbmVkIF91dGhhc2hfaHJzdHJfa2V5bGVu ID0gKHVuc2lnbmVkKXV0aGFzaF9zdHJsZW4oKGFkZCktPnN0cmZpZWxkKTsgICAgXAorKyAgICBI QVNIX1JFUExBQ0UoaGgsIGhlYWQsIHN0cmZpZWxkWzBdLCBfdXRoYXNoX2hyc3RyX2tleWxlbiwg YWRkLCByZXBsYWNlZCk7ICAgIFwKKyt9IHdoaWxlICgwKQorKyNkZWZpbmUgSEFTSF9GSU5EX0lO VChoZWFkLGZpbmRpbnQsb3V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgSEFTSF9GSU5EKGhoLGhlYWQsZmluZGludCxzaXplb2YoaW50KSxvdXQpCisr I2RlZmluZSBIQVNIX0FERF9JTlQoaGVhZCxpbnRmaWVsZCxhZGQpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0FERChoaCxoZWFkLGludGZpZWxk LHNpemVvZihpbnQpLGFkZCkKKysjZGVmaW5lIEhBU0hfUkVQTEFDRV9JTlQoaGVhZCxpbnRmaWVs ZCxhZGQscmVwbGFjZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hf UkVQTEFDRShoaCxoZWFkLGludGZpZWxkLHNpemVvZihpbnQpLGFkZCxyZXBsYWNlZCkKKysjZGVm aW5lIEhBU0hfRklORF9QVFIoaGVhZCxmaW5kcHRyLG91dCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfRklORChoaCxoZWFkLGZpbmRwdHIsc2l6 ZW9mKHZvaWQgKiksb3V0KQorKyNkZWZpbmUgSEFTSF9BRERfUFRSKGhlYWQscHRyZmllbGQsYWRk KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9B REQoaGgsaGVhZCxwdHJmaWVsZCxzaXplb2Yodm9pZCAqKSxhZGQpCisrI2RlZmluZSBIQVNIX1JF UExBQ0VfUFRSKGhlYWQscHRyZmllbGQsYWRkLHJlcGxhY2VkKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICBIQVNIX1JFUExBQ0UoaGgsaGVhZCxwdHJmaWVsZCxzaXplb2Yodm9p ZCAqKSxhZGQscmVwbGFjZWQpCisrI2RlZmluZSBIQVNIX0RFTChoZWFkLGRlbHB0cikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNI X0RFTEVURShoaCxoZWFkLGRlbHB0cikKKysKKysvKiBIQVNIX0ZTQ0sgY2hlY2tzIGhhc2ggaW50 ZWdyaXR5IG9uIGV2ZXJ5IGFkZC9kZWxldGUgd2hlbiBIQVNIX0RFQlVHIGlzIGRlZmluZWQuCisr ICogVGhpcyBpcyBmb3IgdXRoYXNoIGRldmVsb3BlciBvbmx5OyBpdCBjb21waWxlcyBhd2F5IGlm IEhBU0hfREVCVUcgaXNuJ3QgZGVmaW5lZC4KKysgKi8KKysjaWZkZWYgSEFTSF9ERUJVRworKyNp bmNsdWRlIDxzdGRpby5oPiAgIC8qIGZwcmludGYsIHN0ZGVyciAqLworKyNkZWZpbmUgSEFTSF9P T1BTKC4uLikgZG8geyBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pOyBleGl0KC0xKTsgfSB3 aGlsZSAoMCkKKysjZGVmaW5lIEhBU0hfRlNDSyhoaCxoZWFkLHdoZXJlKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpfdGhoOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGlmIChoZWFkKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIHVuc2lnbmVkIF9ia3RfaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBfY291bnQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgY2hhciAqX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGZvciAoX2JrdF9pID0gMDsg X2JrdF9pIDwgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzOyArK19ia3RfaSkgeyAgICAgICAg ICAgXAorKyAgICAgIHVuc2lnbmVkIF9ia3RfY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfdGhoID0gKGhlYWQpLT5o aC50YmwtPmJ1Y2tldHNbX2JrdF9pXS5oaF9oZWFkOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgX3ByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHdoaWxlIChfdGhoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgIGlmIChfcHJldiAhPSAoY2hhciopKF90aGgtPmhoX3ByZXYpKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIEhBU0hfT09QUygiJXM6 IGludmFsaWQgaGhfcHJldiAlcCwgYWN0dWFsICVwXG4iLCAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICAgICAgKHdoZXJlKSwgKHZvaWQqKV90aGgtPmhoX3ByZXYsICh2b2lkKilf cHJldik7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICBfYmt0X2NvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX3ByZXYgPSAoY2hhciopKF90 aGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgIF90aGggPSBfdGhoLT5oaF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgIF9jb3VudCArPSBfYmt0X2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoKGhlYWQpLT5oaC50YmwtPmJ1 Y2tldHNbX2JrdF9pXS5jb3VudCAhPSAgX2JrdF9jb3VudCkgeyAgICAgICAgICAgICAgICBcCisr ICAgICAgICBIQVNIX09PUFMoIiVzOiBpbnZhbGlkIGJ1Y2tldCBjb3VudCAldSwgYWN0dWFsICV1 XG4iLCAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICh3aGVyZSksIChoZWFkKS0+ aGgudGJsLT5idWNrZXRzW19ia3RfaV0uY291bnQsIF9ia3RfY291bnQpOyAgICAgICAgIFwKKysg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICBpZiAoX2NvdW50ICE9IChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBIQVNIX09PUFMoIiVzOiBpbnZhbGlkIGho IGl0ZW0gY291bnQgJXUsIGFjdHVhbCAldVxuIiwgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgICh3aGVyZSksIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMsIF9jb3VudCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg X2NvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBf dGhoID0gICYoaGVhZCktPmhoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgd2hpbGUgKF90aGgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg X2NvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfcHJldiAhPSAoY2hhciopX3RoaC0+cHJl dikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg IEhBU0hfT09QUygiJXM6IGludmFsaWQgcHJldiAlcCwgYWN0dWFsICVwXG4iLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgKHdoZXJlKSwgKHZvaWQqKV90aGgtPnBy ZXYsICh2b2lkKilfcHJldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICBfcHJldiA9IChjaGFyKilFTE1UX0ZST01fSEgoKGhl YWQpLT5oaC50YmwsIF90aGgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX3Ro aCA9IChfdGhoLT5uZXh0ID8gSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfdGhoLT5uZXh0 KSA6IE5VTEwpOyAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKF9j b3VudCAhPSAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgSEFTSF9PT1BTKCIlczogaW52YWxpZCBhcHAgaXRlbSBj b3VudCAldSwgYWN0dWFsICV1XG4iLCAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAo d2hlcmUpLCAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zLCBfY291bnQpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrI2Vsc2UKKysjZGVmaW5lIEhBU0hfRlNDSyho aCxoZWFkLHdoZXJlKQorKyNlbmRpZgorKworKy8qIFdoZW4gY29tcGlsZWQgd2l0aCAtREhBU0hf RU1JVF9LRVlTLCBsZW5ndGgtcHJlZml4ZWQga2V5cyBhcmUgZW1pdHRlZCB0bworKyAqIHRoZSBk ZXNjcmlwdG9yIHRvIHdoaWNoIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCBmb3IgdHVuaW5nIHRoZSBo YXNoIGZ1bmN0aW9uLgorKyAqIFRoZSBhcHAgY2FuICNpbmNsdWRlIDx1bmlzdGQuaD4gdG8gZ2V0 IHRoZSBwcm90b3R5cGUgZm9yIHdyaXRlKDIpLiAqLworKyNpZmRlZiBIQVNIX0VNSVRfS0VZUwor KyNkZWZpbmUgSEFTSF9FTUlUX0tFWShoaCxoZWFkLGtleXB0cixmaWVsZGxlbikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICB1bnNpZ25lZCBfa2xlbiA9IGZpZWxkbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd3JpdGUoSEFTSF9FTUlUX0tFWVMsICZfa2xl biwgc2l6ZW9mKF9rbGVuKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IHdyaXRlKEhBU0hfRU1JVF9LRVlTLCBrZXlwdHIsICh1bnNpZ25lZCBsb25nKWZpZWxkbGVuKTsg ICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysjZWxzZQorKyNkZWZpbmUg SEFTSF9FTUlUX0tFWShoaCxoZWFkLGtleXB0cixmaWVsZGxlbikKKysjZW5kaWYKKysKKysvKiBU aGUgQmVybnN0ZWluIGhhc2ggZnVuY3Rpb24sIHVzZWQgaW4gUGVybCBwcmlvciB0byB2NS42LiBO b3RlICh4PDw1K3gpPXgqMzMuICovCisrI2RlZmluZSBIQVNIX0JFUihrZXksa2V5bGVuLGhhc2h2 KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9oYl9rZXlsZW4gPSAodW5zaWduZWQp a2V5bGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBjb25z dCB1bnNpZ25lZCBjaGFyICpfaGJfa2V5ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShrZXkpOyAg ICAgICAgICAgICAgICAgICAgXAorKyAgKGhhc2h2KSA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxl IChfaGJfa2V5bGVuLS0gIT0gMFUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIChoYXNodikgPSAoKChoYXNodikgPDwgNSkgKyAoaGFz aHYpKSArICpfaGJfa2V5Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKworKy8qIFNBWC9GTlYvT0FUL0pF TiBoYXNoIGZ1bmN0aW9ucyBhcmUgbWFjcm8gdmFyaWFudHMgb2YgdGhvc2UgbGlzdGVkIGF0Cisr ICogaHR0cDovL2V0ZXJuYWxseWNvbmZ1enpsZWQuY29tL3R1dHMvYWxnb3JpdGhtcy9qc3dfdHV0 X2hhc2hpbmcuYXNweAorKyAqIChhcmNoaXZlIGxpbms6IGh0dHBzOi8vYXJjaGl2ZS5pcy9JdmNh biApCisrICovCisrI2RlZmluZSBIQVNIX1NBWChrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIHVuc2lnbmVkIF9zeF9pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBjb25zdCB1bnNpZ25lZCBj aGFyICpfaHNfa2V5ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShrZXkpOyAgICAgICAgICAgICAg ICAgICAgXAorKyAgaGFzaHYgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGZvciAoX3N4X2k9MDsgX3N4 X2kgPCBrZXlsZW47IF9zeF9pKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIGhhc2h2IF49IChoYXNodiA8PCA1KSArIChoYXNodiA+PiAyKSArIF9oc19r ZXlbX3N4X2ldOyAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyt9IHdoaWxlICgwKQorKy8qIEZOVi0xYSB2YXJpYXRpb24gKi8KKysjZGVmaW5lIEhB U0hfRk5WKGtleSxrZXlsZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQg X2ZuX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9oZl9rZXkgPSAoY29uc3Qg dW5zaWduZWQgY2hhciopKGtleSk7ICAgICAgICAgICAgICAgICAgICBcCisrICAoaGFzaHYpID0g MjE2NjEzNjI2MVU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgZm9yIChfZm5faT0wOyBfZm5faSA8IGtleWxlbjsgX2ZuX2krKykg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaGFzaHYgPSBo YXNodiBeIF9oZl9rZXlbX2ZuX2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIGhhc2h2ID0gaGFzaHYgKiAxNjc3NzYxOVU7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9PQVQoa2V5LGtleWxl bixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaG9faTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgY29uc3QgdW5zaWduZWQgY2hhciAqX2hvX2tleT0oY29uc3QgdW5zaWduZWQgY2hhciopKGtl eSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBmb3IoX2hvX2k9MDsgX2hvX2kgPCBrZXlsZW47IF9ob19pKyspIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGhhc2h2ICs9IF9ob19rZXlbX2hvX2ld OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICBoYXNodiArPSAoaGFzaHYgPDwgMTApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaGFzaHYgXj0gKGhhc2h2ID4+IDYpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2ICs9IChoYXNodiA8PCAzKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBo YXNodiBePSAoaGFzaHYgPj4gMTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgaGFzaHYgKz0gKGhhc2h2IDw8IDE1KTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdo aWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9KRU5fTUlYKGEsYixjKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBhIC09IGI7IGEgLT0gYzsgYSBePSAoIGMgPj4gMTMgKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgYiAtPSBjOyBiIC09IGE7 IGIgXj0gKCBhIDw8IDggKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIGMgLT0gYTsgYyAtPSBiOyBjIF49ICggYiA+PiAxMyApOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBhIC09IGI7IGEgLT0gYzsg YSBePSAoIGMgPj4gMTIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgYiAtPSBjOyBiIC09IGE7IGIgXj0gKCBhIDw8IDE2ICk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGMgLT0gYTsgYyAtPSBiOyBj IF49ICggYiA+PiA1ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICBhIC09IGI7IGEgLT0gYzsgYSBePSAoIGMgPj4gMyApOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgYiAtPSBjOyBiIC09IGE7IGIg Xj0gKCBhIDw8IDEwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIGMgLT0gYTsgYyAtPSBiOyBjIF49ICggYiA+PiAxNSApOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVm aW5lIEhBU0hfSkVOKGtleSxrZXlsZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5z aWduZWQgX2hqX2ksX2hqX2osX2hqX2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIGNvbnN0IGNoYXIgKl9oal9rZXk9KHVu c2lnbmVkIGNvbnN0IGNoYXIqKShrZXkpOyAgICAgICAgICAgICAgICAgICAgICBcCisrICBoYXNo diA9IDB4ZmVlZGJlZWZ1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgX2hqX2kgPSBfaGpfaiA9IDB4OWUzNzc5Yjl1OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oal9r ID0gKHVuc2lnbmVkKShrZXlsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoX2hqX2sgPj0gMTJVKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfaGpf aSArPSAgICAoX2hqX2tleVswXSArICggKHVuc2lnbmVkKV9oal9rZXlbMV0gPDwgOCApICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICsgKCAodW5zaWduZWQpX2hqX2tleVsyXSA8PCAx NiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAr ICggKHVuc2lnbmVkKV9oal9rZXlbM10gPDwgMjQgKSApOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBfaGpfaiArPSAgICAoX2hqX2tleVs0XSArICggKHVuc2ln bmVkKV9oal9rZXlbNV0gPDwgOCApICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICsg KCAodW5zaWduZWQpX2hqX2tleVs2XSA8PCAxNiApICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICArICggKHVuc2lnbmVkKV9oal9rZXlbN10gPDwgMjQg KSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBoYXNodiAr PSAoX2hqX2tleVs4XSArICggKHVuc2lnbmVkKV9oal9rZXlbOV0gPDwgOCApICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICsgKCAodW5zaWduZWQpX2hqX2tleVsxMF0gPDwgMTYg KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICArICgg KHVuc2lnbmVkKV9oal9rZXlbMTFdIDw8IDI0ICkgKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgIEhBU0hfSkVO X01JWChfaGpfaSwgX2hqX2osIGhhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgX2hqX2tleSAr PSAxMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgIF9oal9rIC09IDEyVTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgaGFzaHYgKz0gKHVuc2lnbmVkKShrZXlsZW4pOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHN3aXRjaCAoIF9oal9r ICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIGNhc2UgMTE6IGhhc2h2ICs9ICggKHVuc2lnbmVkKV9oal9rZXlbMTBd IDw8IDI0ICk7IC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAorKyAgICBjYXNlIDEwOiBoYXNo diArPSAoICh1bnNpZ25lZClfaGpfa2V5WzldIDw8IDE2ICk7ICAvKiBGQUxMVEhST1VHSCAqLyAg ICAgICAgIFwKKysgICAgY2FzZSA5OiAgaGFzaHYgKz0gKCAodW5zaWduZWQpX2hqX2tleVs4XSA8 PCA4ICk7ICAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCisrICAgIGNhc2UgODogIF9oal9q ICs9ICggKHVuc2lnbmVkKV9oal9rZXlbN10gPDwgMjQgKTsgIC8qIEZBTExUSFJPVUdIICovICAg ICAgICAgXAorKyAgICBjYXNlIDc6ICBfaGpfaiArPSAoICh1bnNpZ25lZClfaGpfa2V5WzZdIDw8 IDE2ICk7ICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKKysgICAgY2FzZSA2OiAgX2hqX2og Kz0gKCAodW5zaWduZWQpX2hqX2tleVs1XSA8PCA4ICk7ICAgLyogRkFMTFRIUk9VR0ggKi8gICAg ICAgICBcCisrICAgIGNhc2UgNTogIF9oal9qICs9IF9oal9rZXlbNF07ICAgICAgICAgICAgICAg ICAgICAgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAorKyAgICBjYXNlIDQ6ICBfaGpfaSAr PSAoICh1bnNpZ25lZClfaGpfa2V5WzNdIDw8IDI0ICk7ICAvKiBGQUxMVEhST1VHSCAqLyAgICAg ICAgIFwKKysgICAgY2FzZSAzOiAgX2hqX2kgKz0gKCAodW5zaWduZWQpX2hqX2tleVsyXSA8PCAx NiApOyAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCisrICAgIGNhc2UgMjogIF9oal9pICs9 ICggKHVuc2lnbmVkKV9oal9rZXlbMV0gPDwgOCApOyAgIC8qIEZBTExUSFJPVUdIICovICAgICAg ICAgXAorKyAgICBjYXNlIDE6ICBfaGpfaSArPSBfaGpfa2V5WzBdOyAgICAgICAgICAgICAgICAg ICAgICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKKysgICAgZGVmYXVsdDogOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9KRU5fTUlYKF9oal9pLCBf aGpfaiwgaGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyt9IHdoaWxlICgwKQorKworKy8qIFRoZSBQYXVsIEhzaWVoIGhhc2ggZnVuY3Rpb24gKi8K KysjdW5kZWYgZ2V0MTZiaXRzCisrI2lmIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9f aTM4Nl9fKSkgfHwgZGVmaW5lZChfX1dBVENPTUNfXykgICAgICAgICAgICAgXAorKyAgfHwgZGVm aW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZCAoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkIChfX1RV UkJPQ19fKQorKyNkZWZpbmUgZ2V0MTZiaXRzKGQpICgqKChjb25zdCB1aW50MTZfdCAqKSAoZCkp KQorKyNlbmRpZgorKworKyNpZiAhZGVmaW5lZCAoZ2V0MTZiaXRzKQorKyNkZWZpbmUgZ2V0MTZi aXRzKGQpICgoKCh1aW50MzJfdCkoKChjb25zdCB1aW50OF90ICopKGQpKVsxXSkpIDw8IDgpICAg ICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICsodWludDMyX3QpKCgoY29uc3Qg dWludDhfdCAqKShkKSlbMF0pICkKKysjZW5kaWYKKysjZGVmaW5lIEhBU0hfU0ZIKGtleSxrZXls ZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgY29uc3QgY2hhciAqX3Nm aF9rZXk9KHVuc2lnbmVkIGNvbnN0IGNoYXIqKShrZXkpOyAgICAgICAgICAgICAgICAgICAgIFwK KysgIHVpbnQzMl90IF9zZmhfdG1wLCBfc2ZoX2xlbiA9ICh1aW50MzJfdClrZXlsZW47ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgdW5zaWduZWQgX3NmaF9yZW0gPSBfc2ZoX2xlbiAmIDNVOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9zZmhfbGVuID4+PSAyOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBoYXNodiA9IDB4Y2FmZWJhYmV1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IC8qIE1haW4gbG9vcCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBmb3IgKDtfc2ZoX2xlbiA+IDBVOyBfc2ZoX2xl bi0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICBoYXNodiAgICArPSBnZXQxNmJpdHMgKF9zZmhfa2V5KTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX3NmaF90bXAgID0gKCh1aW50MzJfdCkoZ2V0 MTZiaXRzIChfc2ZoX2tleSsyKSkgPDwgMTEpIF4gaGFzaHY7ICAgICAgICAgICAgICBcCisrICAg IGhhc2h2ICAgICA9IChoYXNodiA8PCAxNikgXiBfc2ZoX3RtcDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfc2ZoX2tleSArPSAyVSpzaXplb2YgKHVpbnQx Nl90KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg aGFzaHYgICAgKz0gaGFzaHYgPj4gMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIC8qIEhhbmRsZSBlbmQgY2FzZXMgKi8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBzd2l0 Y2ggKF9zZmhfcmVtKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICBjYXNlIDM6IGhhc2h2ICs9IGdldDE2Yml0cyAoX3Nm aF9rZXkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg ICAgICBoYXNodiBePSBoYXNodiA8PCAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgaGFzaHYgXj0gKHVpbnQzMl90KShfc2Zo X2tleVtzaXplb2YgKHVpbnQxNl90KV0pIDw8IDE4OyAgICAgICAgICAgICAgXAorKyAgICAgICAg ICAgIGhhc2h2ICs9IGhhc2h2ID4+IDExOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGNhc2Ug MjogaGFzaHYgKz0gZ2V0MTZiaXRzIChfc2ZoX2tleSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGhhc2h2IF49IGhhc2h2IDw8IDExOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg ICBoYXNodiArPSBoYXNodiA+PiAxNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBjYXNlIDE6 IGhhc2h2ICs9ICpfc2ZoX2tleTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBoYXNodiBePSBoYXNodiA8PCAxMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg aGFzaHYgKz0gaGFzaHYgPj4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgZGVmYXVsdDog OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIC8qIEZvcmNlICJhdmFsYW5jaGluZyIgb2YgZmluYWwgMTI3IGJpdHMg Ki8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBoYXNodiBePSBoYXNo diA8PCAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgaGFzaHYgKz0gaGFzaHYgPj4gNTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2IF49IGhhc2h2 IDw8IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBoYXNodiArPSBoYXNodiA+PiAxNzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaGFzaHYgXj0gaGFzaHYg PDwgMjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIGhhc2h2ICs9IGhhc2h2ID4+IDY7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysv KiBpdGVyYXRlIG92ZXIgaXRlbXMgaW4gYSBrbm93biBidWNrZXQgdG8gZmluZCBkZXNpcmVkIGl0 ZW0gKi8KKysjZGVmaW5lIEhBU0hfRklORF9JTl9CS1QodGJsLGhoLGhlYWQsa2V5cHRyLGtleWxl bl9pbixoYXNodmFsLG91dCkgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgaWYgKChoZWFkKS5oaF9oZWFkICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgREVDTFRZUEVfQVNTSUdOKG91 dCwgRUxNVF9GUk9NX0hIKHRibCwgKGhlYWQpLmhoX2hlYWQpKTsgICAgICAgICAgICAgICAgICAg ICBcCisrICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAob3V0KSA9IE5VTEw7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoKG91dCkgIT0gTlVMTCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICBpZiAoKG91dCktPmhoLmhhc2h2ID09IChoYXNodmFsKSAmJiAob3V0KS0+aGgua2V5 bGVuID09IChrZXlsZW5faW4pKSB7ICAgICAgIFwKKysgICAgICBpZiAoSEFTSF9LRVlDTVAoKG91 dCktPmhoLmtleSwga2V5cHRyLCBrZXlsZW5faW4pID09IDApIHsgICAgICAgICAgICAgICAgICBc CisrICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmICgob3V0KS0+aGguaGhfbmV4dCAh PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgIERFQ0xUWVBFX0FTU0lHTihvdXQsIEVMTVRfRlJPTV9ISCh0YmwsIChvdXQpLT5oaC5o aF9uZXh0KSk7ICAgICAgICAgICAgICAgIFwKKysgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgKG91dCkgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysvKiBhZGQgYW4gaXRl bSB0byBhIGJ1Y2tldCAgKi8KKysjZGVmaW5lIEhBU0hfQUREX1RPX0JLVChoZWFkLGhoLGFkZGho LG9vbWVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgVVRfaGFzaF9idWNrZXQgKl9oYV9oZWFkID0gJihoZWFkKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oYV9oZWFk LT5jb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAoYWRkaGgpLT5oaF9uZXh0ID0gX2hhX2hlYWQtPmhoX2hlYWQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFkZGhoKS0+ aGhfcHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIGlmIChfaGFfaGVhZC0+aGhfaGVhZCAhPSBOVUxMKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9oYV9oZWFk LT5oaF9oZWFkLT5oaF9wcmV2ID0gKGFkZGhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oYV9oZWFkLT5o aF9oZWFkID0gKGFkZGhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICBpZiAoKF9oYV9oZWFkLT5jb3VudCA+PSAoKF9oYV9oZWFkLT5leHBh bmRfbXVsdCArIDFVKSAqIEhBU0hfQktUX0NBUEFDSVRZX1RIUkVTSCkpIFwKKysgICAgICAmJiAh KGFkZGhoKS0+dGJsLT5ub2V4cGFuZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgIEhBU0hfRVhQQU5EX0JVQ0tFVFMoYWRkaGgsKGFkZGhoKS0+ dGJsLCBvb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBJRl9IQVNI X05PTkZBVEFMX09PTSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICBpZiAob29tZWQpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBIQVNI X0RFTF9JTl9CS1QoaGVhZCxhZGRoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisr CisrLyogcmVtb3ZlIGFuIGl0ZW0gZnJvbSBhIGdpdmVuIGJ1Y2tldCAqLworKyNkZWZpbmUgSEFT SF9ERUxfSU5fQktUKGhlYWQsZGVsaGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBVVF9oYXNoX2J1 Y2tldCAqX2hkX2hlYWQgPSAmKGhlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgX2hkX2hlYWQtPmNvdW50LS07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGlmIChfaGRfaGVh ZC0+aGhfaGVhZCA9PSAoZGVsaGgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIF9oZF9oZWFkLT5oaF9oZWFkID0gKGRlbGhoKS0+aGhfbmV4dDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIGlmICgoZGVsaGgpLT5oaF9wcmV2KSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChkZWxoaCktPmho X3ByZXYtPmhoX25leHQgPSAoZGVsaGgpLT5oaF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGlmICgoZGVsaGgpLT5o aF9uZXh0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIChkZWxoaCktPmhoX25leHQtPmhoX3ByZXYgPSAoZGVsaGgpLT5oaF9w cmV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKy8qIEJ1Y2tldCBleHBhbnNpb24gaGFzIHRoZSBl ZmZlY3Qgb2YgZG91YmxpbmcgdGhlIG51bWJlciBvZiBidWNrZXRzCisrICogYW5kIHJlZGlzdHJp YnV0aW5nIHRoZSBpdGVtcyBpbnRvIHRoZSBuZXcgYnVja2V0cy4gSWRlYWxseSB0aGUKKysgKiBp dGVtcyB3aWxsIGRpc3RyaWJ1dGUgbW9yZSBvciBsZXNzIGV2ZW5seSBpbnRvIHRoZSBuZXcgYnVj a2V0cworKyAqICh0aGUgZXh0ZW50IHRvIHdoaWNoIHRoaXMgaXMgdHJ1ZSBpcyBhIG1lYXN1cmUg b2YgdGhlIHF1YWxpdHkgb2YKKysgKiB0aGUgaGFzaCBmdW5jdGlvbiBhcyBpdCBhcHBsaWVzIHRv IHRoZSBrZXkgZG9tYWluKS4KKysgKgorKyAqIFdpdGggdGhlIGl0ZW1zIGRpc3RyaWJ1dGVkIGlu dG8gbW9yZSBidWNrZXRzLCB0aGUgY2hhaW4gbGVuZ3RoCisrICogKGl0ZW0gY291bnQpIGluIGVh Y2ggYnVja2V0IGlzIHJlZHVjZWQuIFRodXMgYnkgZXhwYW5kaW5nIGJ1Y2tldHMKKysgKiB0aGUg aGFzaCBrZWVwcyBhIGJvdW5kIG9uIHRoZSBjaGFpbiBsZW5ndGguIFRoaXMgYm91bmRlZCBjaGFp bgorKyAqIGxlbmd0aCBpcyB0aGUgZXNzZW5jZSBvZiBob3cgYSBoYXNoIHByb3ZpZGVzIGNvbnN0 YW50IHRpbWUgbG9va3VwLgorKyAqCisrICogVGhlIGNhbGN1bGF0aW9uIG9mIHRibC0+aWRlYWxf Y2hhaW5fbWF4bGVuIGJlbG93IGRlc2VydmVzIHNvbWUKKysgKiBleHBsYW5hdGlvbi4gRmlyc3Qs IGtlZXAgaW4gbWluZCB0aGF0IHdlJ3JlIGNhbGN1bGF0aW5nIHRoZSBpZGVhbAorKyAqIG1heGlt dW0gY2hhaW4gbGVuZ3RoIGJhc2VkIG9uIHRoZSAqbmV3KiAoZG91YmxlZCkgYnVja2V0IGNvdW50 LgorKyAqIEluIGZyYWN0aW9ucyB0aGlzIGlzIGp1c3Qgbi9iIChuPW51bWJlciBvZiBpdGVtcyxi PW5ldyBudW0gYnVja2V0cykuCisrICogU2luY2UgdGhlIGlkZWFsIGNoYWluIGxlbmd0aCBpcyBh biBpbnRlZ2VyLCB3ZSB3YW50IHRvIGNhbGN1bGF0ZQorKyAqIGNlaWwobi9iKS4gV2UgZG9uJ3Qg ZGVwZW5kIG9uIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgaW4gdGhpcworKyAqIGhhc2gsIHNv IHRvIGNhbGN1bGF0ZSBjZWlsKG4vYikgd2l0aCBpbnRlZ2VycyB3ZSBjb3VsZCB3cml0ZQorKyAq CisrICogICAgICBjZWlsKG4vYikgPSAobi9iKSArICgobiViKT8xOjApCisrICoKKysgKiBhbmQg aW4gZmFjdCBhIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBoYXNoIGRpZCBqdXN0IHRoYXQuCisr ICogQnV0IG5vdyB3ZSBoYXZlIGltcHJvdmVkIHRoaW5ncyBhIGJpdCBieSByZWNvZ25pemluZyB0 aGF0IGIgaXMKKysgKiBhbHdheXMgYSBwb3dlciBvZiB0d28uIFdlIGtlZXAgaXRzIGJhc2UgMiBs b2cgaGFuZHkgKGNhbGwgaXQgbGIpLAorKyAqIHNvIG5vdyB3ZSBjYW4gd3JpdGUgdGhpcyB3aXRo IGEgYml0IHNoaWZ0IGFuZCBsb2dpY2FsIEFORDoKKysgKgorKyAqICAgICAgY2VpbChuL2IpID0g KG4+PmxiKSArICggKG4gJiAoYi0xKSkgPyAxOjApCisrICoKKysgKi8KKysjZGVmaW5lIEhBU0hf RVhQQU5EX0JVQ0tFVFMoaGgsdGJsLG9vbWVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hl X2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9oZV9ia3RfaTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBzdHJ1Y3QgVVRfaGFz aF9oYW5kbGUgKl9oZV90aGgsICpfaGVfaGhfbnh0OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgVVRfaGFzaF9idWNrZXQgKl9oZV9uZXdfYnVja2V0cywgKl9oZV9uZXdi a3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oZV9uZXdfYnVja2V0 cyA9IChVVF9oYXNoX2J1Y2tldCopdXRoYXNoX21hbGxvYyggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgICBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSAqICh0 YmwpLT5udW1fYnVja2V0cyAqIDJVKTsgICAgICAgICAgICAgXAorKyAgaWYgKCFfaGVfbmV3X2J1 Y2tldHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgSEFTSF9SRUNPUkRfT09NKG9vbWVkKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICB1dGhhc2hfYnplcm8oX2hlX25ld19idWNrZXRzLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHNpemVvZihzdHJ1 Y3QgVVRfaGFzaF9idWNrZXQpICogKHRibCktPm51bV9idWNrZXRzICogMlUpOyAgICAgICAgICAg ICAgICBcCisrICAgICh0YmwpLT5pZGVhbF9jaGFpbl9tYXhsZW4gPSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAoKHRibCktPm51bV9p dGVtcyA+PiAoKHRibCktPmxvZzJfbnVtX2J1Y2tldHMrMVUpKSArICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgKCgoKHRibCktPm51bV9pdGVtcyAmICgoKHRibCktPm51bV9idWNrZXRz KjJVKS0xVSkpICE9IDBVKSA/IDFVIDogMFUpOyAgICBcCisrICAgICh0YmwpLT5ub25pZGVhbF9p dGVtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICBmb3IgKF9oZV9ia3RfaSA9IDA7IF9oZV9ia3RfaSA8ICh0YmwpLT5udW1fYnVj a2V0czsgX2hlX2JrdF9pKyspIHsgICAgICAgICAgIFwKKysgICAgICBfaGVfdGhoID0gKHRibCkt PmJ1Y2tldHNbIF9oZV9ia3RfaSBdLmhoX2hlYWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgd2hpbGUgKF9oZV90aGggIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hlX2hoX254dCA9IF9o ZV90aGgtPmhoX25leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgIEhBU0hfVE9fQktUKF9oZV90aGgtPmhhc2h2LCAodGJsKS0+bnVtX2J1Y2tl dHMgKiAyVSwgX2hlX2JrdCk7ICAgICAgICAgICBcCisrICAgICAgICBfaGVfbmV3Ymt0ID0gJihf aGVfbmV3X2J1Y2tldHNbX2hlX2JrdF0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgaWYgKCsrKF9oZV9uZXdia3QtPmNvdW50KSA+ICh0YmwpLT5pZGVhbF9jaGFp bl9tYXhsZW4pIHsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHRibCktPm5vbmlkZWFs X2l0ZW1zKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgIGlmIChfaGVfbmV3Ymt0LT5jb3VudCA+IF9oZV9uZXdia3QtPmV4cGFuZF9t dWx0ICogKHRibCktPmlkZWFsX2NoYWluX21heGxlbikgeyBcCisrICAgICAgICAgICAgX2hlX25l d2JrdC0+ZXhwYW5kX211bHQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICBfaGVfdGhoLT5oaF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hlX3RoaC0+aGhf bmV4dCA9IF9oZV9uZXdia3QtPmhoX2hlYWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgIGlmIChfaGVfbmV3Ymt0LT5oaF9oZWFkICE9IE5VTEwpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9oZV9uZXdia3Qt PmhoX2hlYWQtPmhoX3ByZXYgPSBfaGVfdGhoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9oZV9uZXdia3QtPmho X2hlYWQgPSBfaGVfdGhoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICBfaGVfdGhoID0gX2hlX2hoX254dDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHV0aGFzaF9mcmVlKCh0YmwpLT5i dWNrZXRzLCAodGJsKS0+bnVtX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0 KSk7IFwKKysgICAgKHRibCktPm51bV9idWNrZXRzICo9IDJVOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICh0YmwpLT5sb2cyX251bV9i dWNrZXRzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAodGJsKS0+YnVja2V0cyA9IF9oZV9uZXdfYnVja2V0czsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKHRibCktPmluZWZmX2V4cGFu ZHMgPSAoKHRibCktPm5vbmlkZWFsX2l0ZW1zID4gKCh0YmwpLT5udW1faXRlbXMgPj4gMSkpID8g ICBcCisrICAgICAgICAoKHRibCktPmluZWZmX2V4cGFuZHMrMVUpIDogMFU7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoKHRibCktPmluZWZmX2V4 cGFuZHMgPiAxVSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAodGJsKS0+bm9leHBhbmQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgdXRoYXNoX25vZXhwYW5kX2Z5 aSh0YmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdXRoYXNoX2V4cGFuZF9meWkodGJs KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrCisrLyogVGhp cyBpcyBhbiBhZGFwdGF0aW9uIG9mIFNpbW9uIFRhdGhhbSdzIE8obiBsb2cobikpIG1lcmdlc29y dCAqLworKy8qIE5vdGUgdGhhdCBIQVNIX1NPUlQgYXNzdW1lcyB0aGUgaGFzaCBoYW5kbGUgbmFt ZSB0byBiZSBoaC4KKysgKiBIQVNIX1NSVCB3YXMgYWRkZWQgdG8gYWxsb3cgdGhlIGhhc2ggaGFu ZGxlIG5hbWUgdG8gYmUgcGFzc2VkIGluLiAqLworKyNkZWZpbmUgSEFTSF9TT1JUKGhlYWQsY21w ZmNuKSBIQVNIX1NSVChoaCxoZWFkLGNtcGZjbikKKysjZGVmaW5lIEhBU0hfU1JUKGhoLGhlYWQs Y21wZmNuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hzX2k7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIHVuc2lnbmVkIF9oc19sb29waW5nLF9oc19ubWVyZ2VzLF9oc19pbnNpemUsX2hzX3BzaXpl LF9oc19xc2l6ZTsgICAgICAgICAgICAgICBcCisrICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKl9o c19wLCAqX2hzX3EsICpfaHNfZSwgKl9oc19saXN0LCAqX2hzX3RhaWw7ICAgICAgICAgICAgXAor KyAgaWYgKGhlYWQgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX2hzX2luc2l6ZSA9IDE7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIF9oc19sb29waW5nID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfaHNfbGlzdCA9ICYoKGhlYWQpLT5oaCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgd2hpbGUgKF9oc19sb29waW5nICE9IDBVKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX2hzX3AgPSBfaHNfbGlzdDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgIF9oc19saXN0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfaHNfdGFpbCA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgX2hzX25tZXJnZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHdoaWxlIChfaHNfcCAhPSBOVUxMKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgIF9oc19ubWVyZ2VzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfaHNfcSA9IF9oc19wOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgX2hzX3BzaXplID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGZvciAoX2hzX2kgPSAwOyBfaHNfaSA8IF9o c19pbnNpemU7ICsrX2hzX2kpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgIF9oc19wc2l6ZSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfaHNfcSA9ICgoX2hzX3EtPm5leHQgIT0g TlVMTCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg ICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19xLT5uZXh0KSA6IE5VTEwpOyAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGlmIChfaHNfcSA9PSBOVUxMKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hzX3FzaXplID0gX2hzX2luc2l6ZTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHdo aWxlICgoX2hzX3BzaXplICE9IDBVKSB8fCAoKF9oc19xc2l6ZSAhPSAwVSkgJiYgKF9oc19xICE9 IE5VTEwpKSkgeyAgICBcCisrICAgICAgICAgIGlmIChfaHNfcHNpemUgPT0gMFUpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAg IF9oc19lID0gX2hzX3E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfcSA9ICgoX2hzX3EtPm5leHQgIT0gTlVM TCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg ICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19xLT5uZXh0KSA6IE5VTEwpOyAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9oc19xc2l6ZS0tOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSBl bHNlIGlmICgoX2hzX3FzaXplID09IDBVKSB8fCAoX2hzX3EgPT0gTlVMTCkpIHsgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgICAgX2hzX2UgPSBfaHNfcDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGlm IChfaHNfcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgICAgICAgIF9oc19wID0gKChfaHNfcC0+bmV4dCAhPSBOVUxM KSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAg IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3AtPm5leHQpIDogTlVMTCk7ICAgICAg ICAgICAgICAgXAorKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNf cHNpemUtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgIH0gZWxzZSBpZiAoKGNtcGZjbiggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICBE RUNMVFlQRShoZWFkKShFTE1UX0ZST01fSEgoKGhlYWQpLT5oaC50YmwsIF9oc19wKSksICAgICAg ICAgICAgIFwKKysgICAgICAgICAgICAgICAgREVDTFRZUEUoaGVhZCkoRUxNVF9GUk9NX0hIKCho ZWFkKS0+aGgudGJsLCBfaHNfcSkpICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICkp IDw9IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgICAgIF9oc19lID0gX2hzX3A7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBpZiAoX2hz X3AgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICAgICAgICBfaHNfcCA9ICgoX2hzX3AtPm5leHQgIT0gTlVMTCkgPyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICBISF9G Uk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19wLT5uZXh0KSA6IE5VTEwpOyAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2hzX3BzaXpl LS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfZSA9IF9o c19xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICAgICAgX2hzX3EgPSAoKF9oc19xLT5uZXh0ICE9IE5VTEwpID8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgSEhfRlJPTV9F TE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcS0+bmV4dCkgOiBOVUxMKTsgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgICBfaHNfcXNpemUtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICBpZiAoIF9oc190YWlsICE9IE5VTEwgKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfdGFpbC0+bmV4 dCA9ICgoX2hzX2UgIT0gTlVMTCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgICAgICBFTE1UX0ZST01fSEgoKGhlYWQpLT5oaC50YmwsIF9oc19lKSA6IE5V TEwpOyAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgICAgICBfaHNfbGlzdCA9IF9oc19lOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgICBpZiAoX2hzX2UgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfZS0+cHJldiA9ICgo X2hzX3RhaWwgIT0gTlVMTCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgICAgICBFTE1UX0ZST01fSEgoKGhlYWQpLT5oaC50YmwsIF9oc190YWlsKSA6IE5V TEwpOyAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgX2hzX3RhaWwgPSBfaHNfZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgX2hzX3AgPSBfaHNfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgaWYgKF9oc190YWlsICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hzX3RhaWwtPm5leHQgPSBOVUxMOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKF9oc19ubWVyZ2VzIDw9IDFVKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgX2hzX2xvb3BpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIChoZWFkKS0+aGgudGJsLT50YWlsID0gX2hz X3RhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICBERUNMVFlQRV9BU1NJR04oaGVhZCwgRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJsLCBfaHNf bGlzdCkpOyAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBf aHNfaW5zaXplICo9IDJVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNI X0ZTQ0soaGgsIGhlYWQsICJIQVNIX1NSVCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAo MCkKKysKKysvKiBUaGlzIGZ1bmN0aW9uIHNlbGVjdHMgaXRlbXMgZnJvbSBvbmUgaGFzaCBpbnRv IGFub3RoZXIgaGFzaC4KKysgKiBUaGUgZW5kIHJlc3VsdCBpcyB0aGF0IHRoZSBzZWxlY3RlZCBp dGVtcyBoYXZlIGR1YWwgcHJlc2VuY2UKKysgKiBpbiBib3RoIGhhc2hlcy4gVGhlcmUgaXMgbm8g Y29weSBvZiB0aGUgaXRlbXMgbWFkZTsgcmF0aGVyCisrICogdGhleSBhcmUgYWRkZWQgaW50byB0 aGUgbmV3IGhhc2ggdGhyb3VnaCBhIHNlY29uZGFyeSBoYXNoCisrICogaGFzaCBoYW5kbGUgdGhh dCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KKysjZGVmaW5lIEhBU0hfU0VM RUNUKGhoX2RzdCwgZHN0LCBoaF9zcmMsIHNyYywgY29uZCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX3NyY19i a3QsIF9kc3RfYmt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIHZvaWQgKl9sYXN0X2VsdCA9IE5VTEwsICpfZWx0OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBVVF9oYXNoX2hhbmRsZSAq X3NyY19oaCwgKl9kc3RfaGgsICpfbGFzdF9lbHRfaGg9TlVMTDsgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgcHRyZGlmZl90IF9kc3RfaGhvID0gKChjaGFyKikoJihkc3QpLT5oaF9kc3Qp IC0gKGNoYXIqKShkc3QpKTsgICAgICAgICAgICAgICAgIFwKKysgIGlmICgoc3JjKSAhPSBOVUxM KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIGZvciAoX3NyY19ia3Q9MDsgX3NyY19ia3QgPCAoc3JjKS0+aGhfc3JjLnRi bC0+bnVtX2J1Y2tldHM7IF9zcmNfYmt0KyspIHsgICAgXAorKyAgICAgIGZvciAoX3NyY19oaCA9 IChzcmMpLT5oaF9zcmMudGJsLT5idWNrZXRzW19zcmNfYmt0XS5oaF9oZWFkOyAgICAgICAgICAg ICAgIFwKKysgICAgICAgIF9zcmNfaGggIT0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfc3JjX2hoID0gX3Ny Y19oaC0+aGhfbmV4dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgX2VsdCA9IEVMTVRfRlJPTV9ISCgoc3JjKS0+aGhfc3JjLnRibCwgX3Ny Y19oaCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGlmIChjb25kKF9lbHQp KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCBpbnQgX2hzX29vbWVkID0gMDsg KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfZHN0X2hoID0gKFVU X2hhc2hfaGFuZGxlKikodm9pZCopKCgoY2hhciopX2VsdCkgKyBfZHN0X2hobyk7ICAgICAgICAg IFwKKysgICAgICAgICAgX2RzdF9oaC0+a2V5ID0gX3NyY19oaC0+a2V5OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9kc3RfaGgtPmtleWxl biA9IF9zcmNfaGgtPmtleWxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICBfZHN0X2hoLT5oYXNodiA9IF9zcmNfaGgtPmhhc2h2OyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2RzdF9oaC0+cHJldiA9 IF9sYXN0X2VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgIF9kc3RfaGgtPm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBpZiAoX2xhc3RfZWx0X2ho ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgICAgICBfbGFzdF9lbHRfaGgtPm5leHQgPSBfZWx0OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgICBpZiAoKGRzdCkgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBERUNMVFlQRV9BU1NJR04o ZHN0LCBfZWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgICAgSEFTSF9NQUtFX1RBQkxFKGhoX2RzdCwgZHN0LCBfaHNfb29tZWQpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIElGX0hBU0hfTk9ORkFUQUxf T09NKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgICAgIGlmIChfaHNfb29tZWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIHV0aGFzaF9ub25mYXRh bF9vb20oX2VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgICAgICAgICAoZHN0KSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2RzdF9oaC0+dGJsID0gKGRzdCkt PmhoX2RzdC50Ymw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgSEFTSF9UT19CS1QoX2RzdF9oaC0+aGFz aHYsIF9kc3RfaGgtPnRibC0+bnVtX2J1Y2tldHMsIF9kc3RfYmt0KTsgICAgICBcCisrICAgICAg ICAgIEhBU0hfQUREX1RPX0JLVChfZHN0X2hoLT50YmwtPmJ1Y2tldHNbX2RzdF9ia3RdLCBoaF9k c3QsIF9kc3RfaGgsIF9oc19vb21lZCk7IFwKKysgICAgICAgICAgKGRzdCktPmhoX2RzdC50Ymwt Pm51bV9pdGVtcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGlmIChfaHNfb29tZWQpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgICAgIEhBU0hfUk9MTEJBQ0tfQktUKGhoX2RzdCwgZHN0LCBfZHN0X2hoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBIQVNIX0RFTEVURV9ISCho aF9kc3QsIGRzdCwgX2RzdF9oaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgICAgICAgX2RzdF9oaC0+dGJsID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgIHV0aGFzaF9ub25mYXRhbF9v b20oX2VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIEhBU0hfQkxPT01fQUREKF9kc3RfaGgt PnRibCwgX2RzdF9oaC0+aGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICBfbGFzdF9lbHQgPSBfZWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2xhc3RfZWx0X2hoID0gX2RzdF9oaDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9G U0NLKGhoX2RzdCwgZHN0LCAiSEFTSF9TRUxFQ1QiKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9DTEVBUiho aCxoZWFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBpZiAoKGhlYWQpICE9IE5VTEwp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICBIQVNIX0JMT09NX0ZSRUUoKGhlYWQpLT5oaC50YmwpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdXRoYXNoX2ZyZWUoKGhlYWQp LT5oaC50YmwtPmJ1Y2tldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICAgICAgICAgIChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cypzaXplb2Yo c3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgICAgXAorKyAgICB1dGhhc2hfZnJlZSgoaGVhZCkt PmhoLnRibCwgc2l6ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgKGhlYWQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX09WRVJIRUFEKGhoLGhlYWQpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAoKChoZWFk KSAhPSBOVUxMKSA/ICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgKHNpemVfdCkoKChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMg ICAqIHNpemVvZihVVF9oYXNoX2hhbmRsZSkpICAgKyAgICAgICAgICAgICBcCisrICAgICAgICAg ICgoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHMgKiBzaXplb2YoVVRfaGFzaF9idWNrZXQpKSAg ICsgICAgICAgICAgICAgXAorKyAgICAgICAgICAgc2l6ZW9mKFVUX2hhc2hfdGFibGUpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICAgICAgICAgICAgIFwKKysgICAgICAgICAg IChIQVNIX0JMT09NX0JZVEVMRU4pKSkgOiAwVSkKKysKKysjaWZkZWYgTk9fREVDTFRZUEUKKysj ZGVmaW5lIEhBU0hfSVRFUihoaCxoZWFkLGVsLHRtcCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrZm9yKCgoZWwpPShoZWFkKSksICgoKihjaGFyKiop KCYodG1wKSkpPShjaGFyKikoKGhlYWQhPU5VTEwpPyhoZWFkKS0+aGgubmV4dDpOVUxMKSk7IFwK KysgIChlbCkgIT0gTlVMTDsgKChlbCk9KHRtcCkpLCAoKCooY2hhcioqKSgmKHRtcCkpKT0oY2hh ciopKCh0bXAhPU5VTEwpPyh0bXApLT5oaC5uZXh0Ok5VTEwpKSkKKysjZWxzZQorKyNkZWZpbmUg SEFTSF9JVEVSKGhoLGhlYWQsZWwsdG1wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKytmb3IoKChlbCk9KGhlYWQpKSwgKCh0bXApPURFQ0xUWVBFKGVs KSgoaGVhZCE9TlVMTCk/KGhlYWQpLT5oaC5uZXh0Ok5VTEwpKTsgICAgICBcCisrICAoZWwpICE9 IE5VTEw7ICgoZWwpPSh0bXApKSwgKCh0bXApPURFQ0xUWVBFKGVsKSgodG1wIT1OVUxMKT8odG1w KS0+aGgubmV4dDpOVUxMKSkpCisrI2VuZGlmCisrCisrLyogb2J0YWluIGEgY291bnQgb2YgaXRl bXMgaW4gdGhlIGhhc2ggKi8KKysjZGVmaW5lIEhBU0hfQ09VTlQoaGVhZCkgSEFTSF9DTlQoaGgs aGVhZCkKKysjZGVmaW5lIEhBU0hfQ05UKGhoLGhlYWQpICgoaGVhZCAhPSBOVUxMKT8oKGhlYWQp LT5oaC50YmwtPm51bV9pdGVtcyk6MFUpCisrCisrdHlwZWRlZiBzdHJ1Y3QgVVRfaGFzaF9idWNr ZXQgeworKyAgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqaGhfaGVhZDsKKysgICB1bnNpZ25lZCBj b3VudDsKKysKKysgICAvKiBleHBhbmRfbXVsdCBpcyBub3JtYWxseSBzZXQgdG8gMC4gSW4gdGhp cyBzaXR1YXRpb24sIHRoZSBtYXggY2hhaW4gbGVuZ3RoCisrICAgICogdGhyZXNob2xkIGlzIGVu Zm9yY2VkIGF0IGl0cyBkZWZhdWx0IHZhbHVlLCBIQVNIX0JLVF9DQVBBQ0lUWV9USFJFU0guIChJ ZgorKyAgICAqIHRoZSBidWNrZXQncyBjaGFpbiBleGNlZWRzIHRoaXMgbGVuZ3RoLCBidWNrZXQg ZXhwYW5zaW9uIGlzIHRyaWdnZXJlZCkuCisrICAgICogSG93ZXZlciwgc2V0dGluZyBleHBhbmRf bXVsdCB0byBhIG5vbi16ZXJvIHZhbHVlIGRlbGF5cyBidWNrZXQgZXhwYW5zaW9uCisrICAgICog KHRoYXQgd291bGQgYmUgdHJpZ2dlcmVkIGJ5IGFkZGl0aW9ucyB0byB0aGlzIHBhcnRpY3VsYXIg YnVja2V0KQorKyAgICAqIHVudGlsIGl0cyBjaGFpbiBsZW5ndGggcmVhY2hlcyBhICptdWx0aXBs ZSogb2YgSEFTSF9CS1RfQ0FQQUNJVFlfVEhSRVNILgorKyAgICAqIChUaGUgbXVsdGlwbGllciBp cyBzaW1wbHkgZXhwYW5kX211bHQrMSkuIFRoZSB3aG9sZSBpZGVhIG9mIHRoaXMKKysgICAgKiBt dWx0aXBsaWVyIGlzIHRvIHJlZHVjZSBidWNrZXQgZXhwYW5zaW9ucywgc2luY2UgdGhleSBhcmUg ZXhwZW5zaXZlLCBpbgorKyAgICAqIHNpdHVhdGlvbnMgd2hlcmUgd2Uga25vdyB0aGF0IGEgcGFy dGljdWxhciBidWNrZXQgdGVuZHMgdG8gYmUgb3ZlcnVzZWQuCisrICAgICogSXQgaXMgYmV0dGVy IHRvIGxldCBpdHMgY2hhaW4gbGVuZ3RoIGdyb3cgdG8gYSBsb25nZXIgeWV0LXN0aWxsLWJvdW5k ZWQKKysgICAgKiB2YWx1ZSwgdGhhbiB0byBkbyBhbiBPKG4pIGJ1Y2tldCBleHBhbnNpb24gdG9v IG9mdGVuLgorKyAgICAqLworKyAgIHVuc2lnbmVkIGV4cGFuZF9tdWx0OworKworK30gVVRfaGFz aF9idWNrZXQ7CisrCisrLyogcmFuZG9tIHNpZ25hdHVyZSB1c2VkIG9ubHkgdG8gZmluZCBoYXNo IHRhYmxlcyBpbiBleHRlcm5hbCBhbmFseXNpcyAqLworKyNkZWZpbmUgSEFTSF9TSUdOQVRVUkUg MHhhMDExMWZlMXUKKysjZGVmaW5lIEhBU0hfQkxPT01fU0lHTkFUVVJFIDB4YjEyMjIwZjJ1Cisr CisrdHlwZWRlZiBzdHJ1Y3QgVVRfaGFzaF90YWJsZSB7CisrICAgVVRfaGFzaF9idWNrZXQgKmJ1 Y2tldHM7CisrICAgdW5zaWduZWQgbnVtX2J1Y2tldHMsIGxvZzJfbnVtX2J1Y2tldHM7CisrICAg dW5zaWduZWQgbnVtX2l0ZW1zOworKyAgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqdGFpbDsgLyog dGFpbCBoaCBpbiBhcHAgb3JkZXIsIGZvciBmYXN0IGFwcGVuZCAgICAqLworKyAgIHB0cmRpZmZf dCBoaG87IC8qIGhhc2ggaGFuZGxlIG9mZnNldCAoYnl0ZSBwb3Mgb2YgaGFzaCBoYW5kbGUgaW4g ZWxlbWVudCAqLworKworKyAgIC8qIGluIGFuIGlkZWFsIHNpdHVhdGlvbiAoYWxsIGJ1Y2tldHMg dXNlZCBlcXVhbGx5KSwgbm8gYnVja2V0IHdvdWxkIGhhdmUKKysgICAgKiBtb3JlIHRoYW4gY2Vp bCgjaXRlbXMvI2J1Y2tldHMpIGl0ZW1zLiB0aGF0J3MgdGhlIGlkZWFsIGNoYWluIGxlbmd0aC4g Ki8KKysgICB1bnNpZ25lZCBpZGVhbF9jaGFpbl9tYXhsZW47CisrCisrICAgLyogbm9uaWRlYWxf aXRlbXMgaXMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgaGFzaCB3aG9zZSBjaGFpbiBwb3Np dGlvbgorKyAgICAqIGV4Y2VlZHMgdGhlIGlkZWFsIGNoYWluIG1heGxlbi4gdGhlc2UgaXRlbXMg cGF5IHRoZSBwZW5hbHR5IGZvciBhbiB1bmV2ZW4KKysgICAgKiBoYXNoIGRpc3RyaWJ1dGlvbjsg cmVhY2hpbmcgdGhlbSBpbiBhIGNoYWluIHRyYXZlcnNhbCB0YWtlcyA+aWRlYWwgc3RlcHMgKi8K KysgICB1bnNpZ25lZCBub25pZGVhbF9pdGVtczsKKysKKysgICAvKiBpbmVmZmVjdGl2ZSBleHBh bmRzIG9jY3VyIHdoZW4gYSBidWNrZXQgZG91Ymxpbmcgd2FzIHBlcmZvcm1lZCwgYnV0CisrICAg ICogYWZ0ZXJ3YXJkLCBtb3JlIHRoYW4gaGFsZiB0aGUgaXRlbXMgaW4gdGhlIGhhc2ggaGFkIG5v bmlkZWFsIGNoYWluCisrICAgICogcG9zaXRpb25zLiBJZiB0aGlzIGhhcHBlbnMgb24gdHdvIGNv bnNlY3V0aXZlIGV4cGFuc2lvbnMgd2UgaW5oaWJpdCBhbnkKKysgICAgKiBmdXJ0aGVyIGV4cGFu c2lvbiwgYXMgaXQncyBub3QgaGVscGluZzsgdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhc2gKKysg ICAgKiBmdW5jdGlvbiBpc24ndCBhIGdvb2QgZml0IGZvciB0aGUga2V5IGRvbWFpbi4gV2hlbiBl eHBhbnNpb24gaXMgaW5oaWJpdGVkCisrICAgICogdGhlIGhhc2ggd2lsbCBzdGlsbCB3b3JrLCBh bGJlaXQgbm8gbG9uZ2VyIGluIGNvbnN0YW50IHRpbWUuICovCisrICAgdW5zaWduZWQgaW5lZmZf ZXhwYW5kcywgbm9leHBhbmQ7CisrCisrICAgdWludDMyX3Qgc2lnbmF0dXJlOyAvKiB1c2VkIG9u bHkgdG8gZmluZCBoYXNoIHRhYmxlcyBpbiBleHRlcm5hbCBhbmFseXNpcyAqLworKyNpZmRlZiBI QVNIX0JMT09NCisrICAgdWludDMyX3QgYmxvb21fc2lnOyAvKiB1c2VkIG9ubHkgdG8gdGVzdCBi bG9vbSBleGlzdHMgaW4gZXh0ZXJuYWwgYW5hbHlzaXMgKi8KKysgICB1aW50OF90ICpibG9vbV9i djsKKysgICB1aW50OF90IGJsb29tX25iaXRzOworKyNlbmRpZgorKworK30gVVRfaGFzaF90YWJs ZTsKKysKKyt0eXBlZGVmIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSB7CisrICAgc3RydWN0IFVUX2hh c2hfdGFibGUgKnRibDsKKysgICB2b2lkICpwcmV2OyAgICAgICAgICAgICAgICAgICAgICAgLyog cHJldiBlbGVtZW50IGluIGFwcCBvcmRlciAgICAgICovCisrICAgdm9pZCAqbmV4dDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIG5leHQgZWxlbWVudCBpbiBhcHAgb3JkZXIgICAgICAqLworKyAg IHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqaGhfcHJldjsgICAvKiBwcmV2aW91cyBoaCBpbiBidWNr ZXQgb3JkZXIgICAgKi8KKysgICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKmhoX25leHQ7ICAgLyog bmV4dCBoaCBpbiBidWNrZXQgb3JkZXIgICAgICAgICovCisrICAgY29uc3Qgdm9pZCAqa2V5OyAg ICAgICAgICAgICAgICAgIC8qIHB0ciB0byBlbmNsb3Npbmcgc3RydWN0J3Mga2V5ICAqLworKyAg IHVuc2lnbmVkIGtleWxlbjsgICAgICAgICAgICAgICAgICAvKiBlbmNsb3Npbmcgc3RydWN0J3Mg a2V5IGxlbiAgICAgKi8KKysgICB1bnNpZ25lZCBoYXNodjsgICAgICAgICAgICAgICAgICAgLyog cmVzdWx0IG9mIGhhc2gtZmNuKGtleSkgICAgICAgICovCisrfSBVVF9oYXNoX2hhbmRsZTsKKysK KysjZW5kaWYgLyogVVRIQVNIX0ggKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3Zl cnNpb24uaCBvcGVuc3NoLTEwLjVwMS92ZXJzaW9uLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L3ZlcnNpb24uaAkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2NzY0Mzk4OCArMDIwMAorKysrIG9wZW5z c2gtMTAuNXAxL3ZlcnNpb24uaAkyMDI2LTA5LTIxIDA4OjAxOjMwLjg3NzE5MTE3MyArMDIwMAor QEAgLTE2LDUgKzE2LDYgQEAKKyAKKyAjZGVmaW5lIFNTSF9QT1JUQUJMRQkicDEiCisgI2RlZmlu ZSBHU0lfUE9SVEFCTEUJImMtR1NJIgorLSNkZWZpbmUgU1NIX1JFTEVBU0UJU1NIX1ZFUlNJT04g U1NIX1BPUlRBQkxFIEdTSV9QT1JUQUJMRSBcCisrI2RlZmluZSBTU0hfSFBOCQkiX2hwbjE4LjEx LjEiCisrI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hfVkVSU0lPTiBTU0hfUE9SVEFCTEUgR1NJX1BP UlRBQkxFIFNTSF9IUE4gXAorIAkJCUdTSV9WRVJTSU9OIEtSQjVfVkVSU0lPTgoKZGlmZiAtLWdp dCBhL2dzaS1vcGVuc3NoLnNwZWMgYi9nc2ktb3BlbnNzaC5zcGVjCmluZGV4IGMxNDMwMzYuLjBk YmZlYzggMTAwNjQ0Ci0tLSBhL2dzaS1vcGVuc3NoLnNwZWMKKysrIGIvZ3NpLW9wZW5zc2guc3Bl YwpAQCAtMjMsMTIgKzIzLDEyIEBACiAjIERvIHdlIHdhbnQgbGliZWRpdCBzdXBwb3J0CiAlZ2xv YmFsIGxpYmVkaXQgMQogCi0lZ2xvYmFsIG9wZW5zc2hfdmVyIDEwLjNwMQorJWdsb2JhbCBvcGVu c3NoX3ZlciAxMC41cDEKIAogU3VtbWFyeTogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNTSCBw cm90b2NvbCB3aXRoIEdTSSBhdXRoZW50aWNhdGlvbgogTmFtZTogZ3NpLW9wZW5zc2gKIFZlcnNp b246ICV7b3BlbnNzaF92ZXJ9Ci1SZWxlYXNlOiAzJXs/ZGlzdH0KK1JlbGVhc2U6IDElez9kaXN0 fQogUHJvdmlkZXM6IGdzaXNzaCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQogT2Jzb2xldGVzOiBn c2lzc2ggPCA1LjhwMi0yCiBVUkw6IGh0dHA6Ly93d3cub3BlbnNzaC5jb20vcG9ydGFibGUuaHRt bApAQCAtNDgsMTMgKzQ4LDE0IEBAIFNvdXJjZTIwOiBnc2lzc2gtaG9zdC1rZXlzLW1pZ3JhdGlv bi5zaAogU291cmNlMjE6IGdzaXNzaC1ob3N0LWtleXMtbWlncmF0aW9uLnNlcnZpY2UKIFNvdXJj ZTk5OiBSRUFETUUuc3NoZC1hbmQtZ3Npc3NoZAogCi1QYXRjaDAwMDE6IDAwMDEtQWRkLVNFTGlu dXgtcm9sZS1hbmQtTUxTLU11bHRpLUxldmVsLVNlY3VyaXR5LXN1cHBvci5wYXRjaAotUGF0Y2gw MDAyOiAwMDAyLUltcGxlbWVudC1TRUxpbnV4LWVudmlyb25tZW50LXZhcmlhYmxlLXNldHVwLWZv ci1zdWIucGF0Y2gKLVBhdGNoMDAwMzogMDAwMy1QYXNzLWluZXRkLWZsYWdzLWFuZC1hdXRoLWNv bnRleHQtdG8tc3VicHJvY2Vzcy1jYWxsLnBhdGNoCi1QYXRjaDAwMDQ6IDAwMDQtb3BlbnNzaC02 LjZwMS1rZXljYXQucGF0Y2gKLVBhdGNoMDAwNTogMDAwNS1vcGVuc3NoLTYuNnAxLWFsbG93LWlw LW9wdHMucGF0Y2gKLVBhdGNoMDAwNjogMDAwNi1vcGVuc3NoLTUuOXAxLWlwdjZtYW4ucGF0Y2gK LVBhdGNoMDAwNzogMDAwNy1vcGVuc3NoLTUuOHAyLXNpZ3BpcGUucGF0Y2gKK1BhdGNoMDAwMTog MDAwMS1vcGVuc3NoLTYuN3AxLWNvdmVyaXR5LnBhdGNoCitQYXRjaDAwMDI6IDAwMDItQWRkLVNF TGludXgtcm9sZS1hbmQtTUxTLU11bHRpLUxldmVsLVNlY3VyaXR5LXN1cHBvci5wYXRjaAorUGF0 Y2gwMDAzOiAwMDAzLUltcGxlbWVudC1TRUxpbnV4LWVudmlyb25tZW50LXZhcmlhYmxlLXNldHVw LWZvci1zdWIucGF0Y2gKK1BhdGNoMDAwNDogMDAwNC1QYXNzLWluZXRkLWZsYWdzLWFuZC1hdXRo LWNvbnRleHQtdG8tc3VicHJvY2Vzcy1jYWxsLnBhdGNoCitQYXRjaDAwMDU6IDAwMDUtb3BlbnNz aC02LjZwMS1rZXljYXQucGF0Y2gKK1BhdGNoMDAwNjogMDAwNi1vcGVuc3NoLTYuNnAxLWFsbG93 LWlwLW9wdHMucGF0Y2gKK1BhdGNoMDAwNzogMDAwNy1vcGVuc3NoLTUuOXAxLWlwdjZtYW4ucGF0 Y2gKK1BhdGNoMDAwODogMDAwOC1vcGVuc3NoLTUuOHAyLXNpZ3BpcGUucGF0Y2gKIFBhdGNoMDAw OTogMDAwOS1vcGVuc3NoLTUuMXAxLWFza3Bhc3MtcHJvZ3Jlc3MucGF0Y2gKIFBhdGNoMDAxMDog MDAxMC1vcGVuc3NoLTQuM3AyLWFza3Bhc3MtZ3JhYi1pbmZvLnBhdGNoCiBQYXRjaDAwMTE6IDAw MTEtb3BlbnNzaC04LjdwMS1yZWRoYXQucGF0Y2gKQEAgLTkxLDI1ICs5MiwyMyBAQCBQYXRjaDAw NDE6IDAwNDEtb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJvb2YucGF0Y2gKIFBhdGNoMDA0Mjog MDA0Mi1vcGVuc3NoLTkuOXAxLXNlcGFyYXRlLWtleXNpZ24ucGF0Y2gKIFBhdGNoMDA0MzogMDA0 My1vcGVuc3NoLTkuOXAxLW9wZW5zc2wtbWxrZW0ucGF0Y2gKIFBhdGNoMDA0NDogMDA0NC1vcGVu c3NoLTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcucGF0Y2gKLVBhdGNoMDA0NTogMDA0NS1Qcm92aWRl LWJldHRlci1lcnJvci1mb3Itbm9uLXN1cHBvcnRlZC1wcml2YXRlLWtleXMucGF0Y2gKLVBhdGNo MDA0NjogMDA0Ni1JZ25vcmUtYmFkLWhvc3RrZXlzLWluLWtub3duX2hvc3RzLWZpbGUucGF0Y2gK LVBhdGNoMDA0NzogMDA0Ny1zdXBwb3J0LWF1dGhlbnRpY2F0aW9uLWluZGljYXRvcnMtaW4tR1NT QVBJLnBhdGNoCi1QYXRjaDAwNDg6IDAwNDgtTklTVC1jdXJ2ZXMtaHlicmlkLUtFWC1pbXBsZW1l bnRhdGlvbi5wYXRjaAotUGF0Y2gwMDQ5OiAwMDQ5LW9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNw bGF5cy5wYXRjaAotUGF0Y2gwMDUwOiAwMDUwLUZpeC1zc2gtcGtjczExLWNsaWVudC1oZWxwZXIt dGVybWluYXRpb24ucGF0Y2gKLVBhdGNoMDA1MTogMDA1MS1vcGVuc3NoLTEwLjJwMS1wYW0tYXV0 aC5wYXRjaAotUGF0Y2gwMDUyOiAwMDUyLWdzc2FwaS1zNHUucGF0Y2gKLVBhdGNoMDA1MzogMDA1 My1vcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBhdGNoCi1QYXRjaDAwNTQ6IDAwNTQtZ3NzYXBp LXRlc3RzLnBhdGNoCi1QYXRjaDEwMDA6IDEwMDAtb3BlbnNzaC02LjdwMS1jb3Zlcml0eS5wYXRj aAorUGF0Y2gwMDQ1OiAwMDQ1LUlnbm9yZS1iYWQtaG9zdGtleXMtaW4ta25vd25faG9zdHMtZmls ZS5wYXRjaAorUGF0Y2gwMDQ2OiAwMDQ2LXN1cHBvcnQtYXV0aGVudGljYXRpb24taW5kaWNhdG9y cy1pbi1HU1NBUEkucGF0Y2gKK1BhdGNoMDA0NzogMDA0Ny1OSVNULWN1cnZlcy1oeWJyaWQtS0VY LWltcGxlbWVudGF0aW9uLnBhdGNoCitQYXRjaDAwNDg6IDAwNDgtb3BlbnNzaC03LjNwMS14MTEt bWF4LWRpc3BsYXlzLnBhdGNoCitQYXRjaDAwNDk6IDAwNDktRml4LXNzaC1wa2NzMTEtY2xpZW50 LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaAorUGF0Y2gwMDUwOiAwMDUwLW9wZW5zc2gtMTAuMnAx LXBhbS1hdXRoLnBhdGNoCitQYXRjaDAwNTE6IDAwNTEtZ3NzYXBpLXM0dS5wYXRjaAorUGF0Y2gw MDUyOiAwMDUyLW9wZW5zc2gtMTAuMnAxLXBrY3MxMS11cmkucGF0Y2gKK1BhdGNoMDA1MzogMDA1 My1nc3NhcGktdGVzdHMucGF0Y2gKIAogIyBUaGlzIGlzIHRoZSBwYXRjaCB0aGF0IGFkZHMgR1NJ IHN1cHBvcnQKICMgQmFzZWQgb24gaHBuX2lzc2hkLWdzaS43LjVwMWIucGF0Y2ggZnJvbSBHbG9i dXMgdXBzdHJlYW0KLVBhdGNoMjAwMDogMjAwMC1vcGVuc3NoLTEwLjNwMS1nc2lzc2gucGF0Y2gK K1BhdGNoMjAwMDogMjAwMC1vcGVuc3NoLTEwLjVwMS1nc2lzc2gucGF0Y2gKIAogIyBUaGlzIGlz IHRoZSBIUE4gcGF0Y2gKLSMgQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBu LXNzaC8gdGFnOiBocG4tMTguOS4wCi1QYXRjaDIwMDE6IDIwMDEtb3BlbnNzaC0xMC4zcDEtaHBu LTE4LjkuMC5wYXRjaAorIyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vcmFwaWVyMS9ocG4t c3NoLyB0YWc6IGhwbi0xOC4xMS4xCitQYXRjaDIwMDE6IDIwMDEtb3BlbnNzaC0xMC41cDEtaHBu LTE4LjExLjEucGF0Y2gKIAogTGljZW5zZTogQlNELTMtQ2xhdXNlIEFORCBCU0QtMi1DbGF1c2Ug QU5EIElTQyBBTkQgU1NILU9wZW5TU0ggQU5EIHNzaC1rZXlzY2FuIEFORCBzbnByaW50ZiBBTkQg TGljZW5zZVJlZi1GZWRvcmEtUHVibGljLURvbWFpbiBBTkQgWDExLWRpc3RyaWJ1dGUtbW9kaWZp Y2F0aW9ucy12YXJpYW50CiBSZXF1aXJlczogb3BlbnNzbC1saWJzID49IDE6My41LjAKQEAgLTM4 MSw3ICszODAsNyBAQCBmaQogCiAlZmlsZXMKICVsaWNlbnNlIExJQ0VOQ0UKLSVkb2MgQ1JFRElU UyBDaGFuZ2VMb2cgT1ZFUlZJRVcgUFJPVE9DT0wqIFJFQURNRSBIUE4tUkVBRE1FIFJFQURNRS5w bGF0Zm9ybSBSRUFETUUucHJpdnNlcCBSRUFETUUudHVuIFJFQURNRS5kbnMgUkVBRE1FLnNzaGQt YW5kLWdzaXNzaGQgVE9ETworJWRvYyBDUkVESVRTIENoYW5nZUxvZyBPVkVSVklFVyBQUk9UT0NP TCogUkVBRE1FLm1kIEhQTi1SRUFETUUgUkVBRE1FLnBsYXRmb3JtIFJFQURNRS5wcml2c2VwIFJF QURNRS5kbnMgUkVBRE1FLnNzaGQtYW5kLWdzaXNzaGQgVE9ETwogJWF0dHIoMDc1NSxyb290LHJv b3QpICVkaXIgJXtfc3lzY29uZmRpcn0vZ3Npc3NoCiAlYXR0cigwNjQ0LHJvb3Qscm9vdCkgJWNv bmZpZyhub3JlcGxhY2UpICV7X3N5c2NvbmZkaXJ9L2dzaXNzaC9tb2R1bGkKICVhdHRyKDA3NTUs cm9vdCxyb290KSAle19iaW5kaXJ9L2dzaXNzaC1rZXlnZW4KQEAgLTQzNyw2ICs0MzYsOSBAQCBm aQogJWdob3N0ICVhdHRyKDA2NDQscm9vdCxyb290KSAle19sb2NhbHN0YXRlZGlyfS9saWIvLmdz aXNzaC1ob3N0LWtleXMtbWlncmF0aW9uCiAKICVjaGFuZ2Vsb2cKKyogU3VuIFNlcCAyMCAyMDI2 IE1hdHRpYXMgRWxsZXJ0IDxtYXR0aWFzLmVsbGVydEBwaHlzaWNzLnV1LnNlPiAtIDEwLjVwMS0x CistIEJhc2VkIG9uIG9wZW5zc2gtMTAuNXAxLTEuZmM0NQorCiAqIFRodSBKdWwgMTYgMjAyNiBG ZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsZW5nQGZlZG9yYXByb2plY3Qub3JnPiAtIDEw LjNwMS0zCiAtIFJlYnVpbHQgZm9yIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRv cmFfNDVfTWFzc19SZWJ1aWxkCiAKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRl eCA1ZDg5MjI5Li5kYzY3YTA2IDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAg LTEsMyArMSwzIEBACi1TSEE1MTIgKG9wZW5zc2gtMTAuM3AxLnRhci5neikgPSBjYjJiZDY3MDg2 NDkxYzI1ZTMwNTg3OWI5MjRjM2RmYTgyMzY1MDJhNjBjN2YyNTBiMmZkMTdkMmQ5YTc5ZWJmYzJl NDBiMmY0M2U0MmRjZjU5OGNjNTEwOTk2ZTAwY2MwM2RmOWI4ZTM4ZjM0YmMyZGM3MWEzZDRmZjM3 ODhmYQotU0hBNTEyIChvcGVuc3NoLTEwLjNwMS50YXIuZ3ouYXNjKSA9IDJjOGFmYmU1N2Y2NzEy ZjE1OWFhM2ExNjBiNmZmYzQzZjk0NWE5OGNjZDhlMTUxZmE2YTA0N2VhMzBiMzc2ZTVlMWNhYzg0 NGE2NzhhNzg5OWRhODA3MDRiM2QyM2ZlZGE2MTJmZmFkYTFlZTAwM2Y0YzdmYjgyOTFmNDg0NjAw CitTSEE1MTIgKG9wZW5zc2gtMTAuNXAxLnRhci5neikgPSA1MzM2YzE5NDU1MjdiMjllZDU5Y2M1 MDBmYThiZmJkOTE4ZjViYTk3ZTg1NTEyZGFhZDlhYjcyNDE0MTg5MjliZjcxNTJkMzAwZTVmM2M1 ZjlhOGM4ZDY5OWRmZGU1YTY0YzVmYWE0ZmMzM2IyNzU4YWI1MmRkMDQwNDBkNjI4NAorU0hBNTEy IChvcGVuc3NoLTEwLjVwMS50YXIuZ3ouYXNjKSA9IGIzMWU2MWQ5ODQyMDU5OGU0MGM5Zjc1MTVl ODMzYzE0MDQxNWRkMWY1OTM5MWE1NThlM2Y0OGM4NzhkMWZhMWRlZmM4ZWMzMTZhMTdhOTczNzMw MmNkZWQ1NGEyMTZhOTU0MjVhNzg1ZTY2MWFkYzg2ZDcwZGQyYzk1MDE0ZmU3CiBTSEE1MTIgKGdw Z2tleS03MzYwNjBCQS5ncGcpID0gZGY0NGYzZmRiY2QxZDU5NjcwNTM0OGM3ZjVhZWQzZjczOGM1 ZjYyNmE1NTk1NWUwNjQyZjdjNmMwODI5OTVjZjM2YTFiMTg5MWJiNDFiODcxNWNiMmFmZjM0ZmVm MWM4NzdlMGVmZjBkMzUwN2RkMDBhMDU1YmE2OTU3NTdhMjEK